code wiki / _hdl_build / nx_skinneural_gate.nx

nx_skinneural_gate.nx source

↩ module page · 139 lines · 6445 B

1// nx_skinneural_gate.nx -- ★P4-R3: the trained neural skin lands ON generated people. Loads the R2 artifact, 2// derives per-seed latents, bakes ratio tiles, renders figures through the anatstack skin-tile hook. 3// T1 DEPLOY path: the persisted trained model loads (size-exact) and tiles bake 4// T2 PER-PERSON NOVELTY: different seeds -> measurably different skin tiles 5// T3 APPLIED + SCOPED: with the tile set, skin pixels change (texture visible) while the change is scoped 6// (not the whole sprite -- garments/hair are per-part-coloured and untouched by construction) 7// T4 TONE-PRESERVING: the mean colour of changed pixels shifts < 8/255 per channel (modulates, never replaces) 8// + PNG knowledge/nx_skinneural.png (flat | neural seed7 | neural seed57) + hook reset + determinism 9// license_tier: ORIGINAL expect_exit: 0 10import "nx_syscalls.nx" 11import "nx_png.nx" 12import "nx_figuregen.nx" 13import "nx_skinneural.nx" 14 15func hw(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 16func pn(v: i64) -> i64 { let b: *u8=sys_mmap(32) as *u8; var x: i64=v; var ng: i64=0; if x<0{ng=1;x=0-x} var i: i64=31; if x==0{b[i]=48 as u8;i=i-1} while x>0{b[i]=(48+x%10) as u8;x=x/10;i=i-1} if ng==1{b[i]=45 as u8;i=i-1} sys_write(1,(b as i64+i+1) as *u8,31-i); return 0 } 17 18const TWID: i64 = 64 19 20func main() -> i64 { 21 hw("=== nx_skinneural_gate -- P4 R3: trained neural skin applied to generated people ===\n" as *u8) 22 var fails: i64 = 0 23 let W: i64 = as_w(); let H: i64 = as_h(); let npx: i64 = W*H 24 25 // T1 deploy path 26 let blob: i64 = skn_load() 27 var t1: i64 = 0 28 let tile7: *i64 = sys_mmap(TWID*TWID*8) as *i64 29 let tile57: *i64 = sys_mmap(TWID*TWID*8) as *i64 30 let z: *i64 = sys_mmap(SKN_NL*8) as *i64 31 if blob != 0 { 32 skn_latent(blob, 7, z) 33 skn_bake(blob, z, tile7, TWID, 7) 34 skn_latent(blob, 57, z) 35 skn_bake(blob, z, tile57, TWID, 57) 36 t1 = 1 37 } 38 if t1 == 1 { hw("T1 PASS trained model loads (deploy path) + tiles baked\n" as *u8) } 39 else { fails=fails+1; hw("T1 FAIL skinfam_w.bin missing/mismatched -- run nx_skinfam_train_gate first\n" as *u8) } 40 if t1 == 0 { hw("SKINNEURAL-GATE verdict=RED fails=1\n" as *u8); sys_exit(1); return 1 } 41 42 // T2 per-person novelty 43 var tdiff: i64 = 0 44 var i: i64 = 0 45 while i < TWID*TWID { 46 var d: i64 = (tile7[i]&255) - (tile57[i]&255) 47 if d < 0 { d = 0 - d } 48 tdiff = tdiff + d 49 i = i + 1 50 } 51 tdiff = tdiff/(TWID*TWID) 52 hw(" tile difference (seed7 vs seed57): mean|dr|="); pn(tdiff); hw(" (ratio units; latent=TONAL at R2 scale, spatial variety = seeded phase/orientation)\n" as *u8) 53 var t2: i64 = 0 54 if tdiff > 1 { t2 = 1 } 55 if t2 == 1 { hw("T2 PASS different seeds -> different neural skin\n" as *u8) } 56 else { fails=fails+1; hw("T2 FAIL tiles identical\n" as *u8) } 57 58 // figure renders: flat vs neural 59 let AP: *i64 = sys_mmap(96*AS_STRIDE*8) as *i64 60 let sk: *i64 = sys_mmap(8*8) as *i64 61 let fbA: *i64 = sys_mmap(npx*8) as *i64 62 let fbB: *i64 = sys_mmap(npx*8) as *i64 63 let fbC: *i64 = sys_mmap(npx*8) as *i64 64 let nf: i64 = figuregen_build(AP, 7, sk) 65 as_set_skintex(0, 0, 0) 66 anatstack_render(AP, nf, 0, 3, 1, 42, sk[0], sk[1], sk[2], fbA) 67 as_set_skintex(tile7 as i64, TWID, 7) 68 anatstack_render(AP, nf, 0, 3, 1, 42, sk[0], sk[1], sk[2], fbB) 69 as_set_skintex(tile57 as i64, TWID, 7) 70 anatstack_render(AP, nf, 0, 3, 1, 42, sk[0], sk[1], sk[2], fbC) 71 as_set_skintex(0, 0, 0) 72 73 // T3 applied + scoped 74 var changed: i64 = 0 75 var body: i64 = 0 76 let bg: i64 = 26 + 28*256 + 44*65536 77 var sumAr: i64 = 0 78 var sumAg: i64 = 0 79 var sumAb: i64 = 0 80 var sumBr: i64 = 0 81 var sumBg: i64 = 0 82 var sumBb: i64 = 0 83 i = 0 84 while i < npx { 85 if fbA[i] != bg { body = body + 1 } 86 if fbA[i] != fbB[i] { 87 changed = changed + 1 88 sumAr = sumAr + (fbA[i]&255); sumAg = sumAg + ((fbA[i]>>8)&255); sumAb = sumAb + ((fbA[i]>>16)&255) 89 sumBr = sumBr + (fbB[i]&255); sumBg = sumBg + ((fbB[i]>>8)&255); sumBb = sumBb + ((fbB[i]>>16)&255) 90 } 91 i = i + 1 92 } 93 hw(" body px="); pn(body); hw(" changed by neural skin="); pn(changed); hw("\n" as *u8) 94 var t3: i64 = 0 95 if changed > 1500 { if changed < body*8/10 { t3 = 1 } } 96 if t3 == 1 { hw("T3 PASS neural texture applied to the skin, scoped (garments/hair untouched by construction)\n" as *u8) } 97 else { fails=fails+1; hw("T3 FAIL changed="); pn(changed); hw("\n" as *u8) } 98 99 // T4 tone preservation + PNG + determinism 100 var t4: i64 = 0 101 if changed > 0 { 102 var dr: i64 = sumAr/changed - sumBr/changed 103 var dg: i64 = sumAg/changed - sumBg/changed 104 var db: i64 = sumAb/changed - sumBb/changed 105 if dr < 0 { dr = 0 - dr } 106 if dg < 0 { dg = 0 - dg } 107 if db < 0 { db = 0 - db } 108 hw(" tone shift on changed px: dr="); pn(dr); hw(" dg="); pn(dg); hw(" db="); pn(db); hw("\n" as *u8) 109 if dr < 8 { if dg < 8 { if db < 8 { t4 = 1 } } } 110 } 111 // determinism of the neural render 112 let fbB2: *i64 = sys_mmap(npx*8) as *i64 113 as_set_skintex(tile7 as i64, TWID, 7) 114 anatstack_render(AP, nf, 0, 3, 1, 42, sk[0], sk[1], sk[2], fbB2) 115 as_set_skintex(0, 0, 0) 116 var ddet: i64 = 0 117 i = 0 118 while i < npx { if fbB2[i] != fbB[i] { ddet = ddet + 1 } i = i + 1 } 119 if ddet != 0 { t4 = 0 } 120 if t4 == 1 { hw("T4 PASS tone preserved (modulates, never replaces) + deterministic\n" as *u8) } 121 else { fails=fails+1; hw("T4 FAIL tone/determinism ddet="); pn(ddet); hw("\n" as *u8) } 122 123 // PNG: flat | neural(seed7 tile) | neural(seed57 tile) 124 let GW: i64 = W*3 125 let gal: *i64 = sys_mmap(GW*H*8) as *i64 126 var y: i64 = 0 127 while y < H { 128 var x: i64 = 0 129 while x < W { gal[y*GW+x]=fbA[y*W+x]; gal[y*GW+W+x]=fbB[y*W+x]; gal[y*GW+W*2+x]=fbC[y*W+x]; x=x+1 } 130 y = y + 1 131 } 132 write_png(gal, GW, H, "knowledge/nx_skinneural.png" as *u8) 133 hw("PNG knowledge/nx_skinneural.png (flat | neural-7 | neural-57)\n" as *u8) 134 135 if fails == 0 { hw("SKINNEURAL-GATE 4/4 verdict=GREEN -- P4 R3: seed-grown people wear seed-grown NEURAL skin (trained model deployed into the character renderer, tone-preserving, integer end-to-end)\n" as *u8); sys_exit(0); return 0 } 136 hw("SKINNEURAL-GATE RED fails="); pn(fails); hw("\n" as *u8) 137 sys_exit(1) 138 return 1 139}