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}