reze-engine 0.64.0 → 0.66.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/dist/engine.d.ts +300 -94
  2. package/dist/engine.d.ts.map +1 -1
  3. package/dist/engine.js +1628 -787
  4. package/dist/graph/compile.d.ts.map +1 -1
  5. package/dist/graph/compile.js +5 -0
  6. package/dist/graph/presets/body.d.ts.map +1 -1
  7. package/dist/graph/presets/body.js +26 -24
  8. package/dist/graph/presets/cloth_rough.js +8 -8
  9. package/dist/graph/presets/cloth_smooth.js +8 -8
  10. package/dist/graph/presets/default.js +4 -4
  11. package/dist/graph/presets/eye.js +10 -10
  12. package/dist/graph/presets/face.d.ts.map +1 -1
  13. package/dist/graph/presets/face.js +28 -26
  14. package/dist/graph/presets/hair.js +6 -6
  15. package/dist/graph/presets/metal.js +8 -8
  16. package/dist/graph/presets/stockings.d.ts.map +1 -1
  17. package/dist/graph/presets/stockings.js +4 -11
  18. package/dist/graph/presets/unlit.d.ts.map +1 -1
  19. package/dist/graph/presets/unlit.js +9 -13
  20. package/dist/graph/registry.d.ts.map +1 -1
  21. package/dist/graph/registry.js +128 -157
  22. package/dist/graph/render-class.d.ts +5 -2
  23. package/dist/graph/render-class.d.ts.map +1 -1
  24. package/dist/graph/slots.d.ts.map +1 -1
  25. package/dist/graph/slots.js +12 -2
  26. package/dist/index.d.ts +1 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/model.d.ts +23 -1
  29. package/dist/model.d.ts.map +1 -1
  30. package/dist/model.js +41 -1
  31. package/dist/outline-normals.d.ts +12 -0
  32. package/dist/outline-normals.d.ts.map +1 -0
  33. package/dist/outline-normals.js +100 -0
  34. package/dist/pmx-loader.d.ts +7 -0
  35. package/dist/pmx-loader.d.ts.map +1 -1
  36. package/dist/pmx-loader.js +17 -3
  37. package/dist/shaders/anchor-table.d.ts +11 -0
  38. package/dist/shaders/anchor-table.d.ts.map +1 -1
  39. package/dist/shaders/anchor-table.js +9 -3
  40. package/dist/shaders/directives.d.ts +42 -5
  41. package/dist/shaders/directives.d.ts.map +1 -1
  42. package/dist/shaders/directives.js +51 -4
  43. package/dist/shaders/lights.d.ts +11 -7
  44. package/dist/shaders/lights.d.ts.map +1 -1
  45. package/dist/shaders/lights.js +315 -271
  46. package/dist/shaders/materials/common.d.ts.map +1 -1
  47. package/dist/shaders/materials/common.js +30 -5
  48. package/dist/shaders/materials/nodes.d.ts +1 -1
  49. package/dist/shaders/materials/nodes.d.ts.map +1 -1
  50. package/dist/shaders/materials/nodes.js +191 -271
  51. package/dist/shaders/passes/bloom.d.ts +4 -3
  52. package/dist/shaders/passes/bloom.d.ts.map +1 -1
  53. package/dist/shaders/passes/bloom.js +58 -87
  54. package/dist/shaders/passes/composite.d.ts +1 -1
  55. package/dist/shaders/passes/composite.d.ts.map +1 -1
  56. package/dist/shaders/passes/composite.js +121 -77
  57. package/dist/shaders/passes/ground.js +1 -1
  58. package/dist/shaders/passes/mirror.d.ts +18 -12
  59. package/dist/shaders/passes/mirror.d.ts.map +1 -1
  60. package/dist/shaders/passes/mirror.js +59 -13
  61. package/dist/shaders/passes/outline.d.ts.map +1 -1
  62. package/dist/shaders/passes/outline.js +71 -14
  63. package/dist/shaders/passes/particles.d.ts.map +1 -1
  64. package/dist/shaders/passes/particles.js +9 -3
  65. package/dist/shaders/passes/probe.d.ts +45 -0
  66. package/dist/shaders/passes/probe.d.ts.map +1 -0
  67. package/dist/shaders/passes/probe.js +230 -0
  68. package/dist/shaders/passes/scene-contract.d.ts +13 -0
  69. package/dist/shaders/passes/scene-contract.d.ts.map +1 -1
  70. package/dist/shaders/passes/scene-contract.js +4 -0
  71. package/dist/shaders/scene-light-api.d.ts.map +1 -1
  72. package/dist/shaders/scene-light-api.js +1 -0
  73. package/dist/unity/globals.d.ts +7 -0
  74. package/dist/unity/globals.d.ts.map +1 -1
  75. package/dist/unity/globals.js +4 -3
  76. package/dist/unity/host.d.ts +18 -0
  77. package/dist/unity/host.d.ts.map +1 -1
  78. package/dist/unity/host.js +144 -70
  79. package/dist/unity/looks.d.ts +47 -0
  80. package/dist/unity/looks.d.ts.map +1 -1
  81. package/dist/unity/looks.js +150 -6
  82. package/dist/unity/skin.d.ts.map +1 -1
  83. package/dist/unity/skin.js +5 -2
  84. package/dist/unity/stage.d.ts +24 -0
  85. package/dist/unity/stage.d.ts.map +1 -1
  86. package/dist/unity/stage.js +59 -7
  87. package/package.json +1 -1
  88. package/src/engine.ts +2010 -1033
  89. package/src/graph/compile.ts +4 -0
  90. package/src/graph/presets/body.ts +26 -24
  91. package/src/graph/presets/cloth_rough.ts +8 -8
  92. package/src/graph/presets/cloth_smooth.ts +8 -8
  93. package/src/graph/presets/default.ts +4 -4
  94. package/src/graph/presets/eye.ts +10 -10
  95. package/src/graph/presets/face.ts +28 -26
  96. package/src/graph/presets/hair.ts +6 -6
  97. package/src/graph/presets/metal.ts +8 -8
  98. package/src/graph/presets/stockings.ts +4 -11
  99. package/src/graph/presets/unlit.ts +9 -13
  100. package/src/graph/registry.ts +133 -158
  101. package/src/graph/render-class.ts +5 -2
  102. package/src/graph/slots.ts +12 -2
  103. package/src/index.ts +1 -0
  104. package/src/model.ts +50 -1
  105. package/src/outline-normals.ts +110 -0
  106. package/src/pmx-loader.ts +18 -3
  107. package/src/shaders/anchor-table.ts +15 -3
  108. package/src/shaders/directives.ts +88 -6
  109. package/src/shaders/lights.ts +464 -415
  110. package/src/shaders/materials/common.ts +30 -5
  111. package/src/shaders/materials/nodes.ts +191 -271
  112. package/src/shaders/passes/bloom.ts +59 -87
  113. package/src/shaders/passes/composite.ts +121 -77
  114. package/src/shaders/passes/ground.ts +1 -1
  115. package/src/shaders/passes/mirror.ts +60 -13
  116. package/src/shaders/passes/outline.ts +71 -14
  117. package/src/shaders/passes/particles.ts +9 -3
  118. package/src/shaders/passes/probe.ts +240 -0
  119. package/src/shaders/passes/scene-contract.ts +17 -0
  120. package/src/shaders/scene-light-api.ts +1 -0
  121. package/src/unity/globals.ts +7 -3
  122. package/src/unity/host.ts +93 -20
  123. package/src/unity/looks.ts +182 -9
  124. package/src/unity/skin.ts +5 -2
  125. package/src/unity/stage.ts +66 -7
  126. package/dist/physics-debug.d.ts +0 -30
  127. package/dist/physics-debug.d.ts.map +0 -1
  128. package/dist/physics-debug.js +0 -526
  129. package/dist/shaders/agx-lut.d.ts +0 -11
  130. package/dist/shaders/agx-lut.d.ts.map +0 -1
  131. package/dist/shaders/agx-lut.js +0 -29
  132. package/dist/shaders/dfg_lut.d.ts +0 -3
  133. package/dist/shaders/dfg_lut.d.ts.map +0 -1
  134. package/dist/shaders/dfg_lut.js +0 -129
  135. package/dist/shaders/ltc_mag_lut.d.ts +0 -3
  136. package/dist/shaders/ltc_mag_lut.d.ts.map +0 -1
  137. package/dist/shaders/ltc_mag_lut.js +0 -1033
  138. package/dist/shaders/materials/body.d.ts +0 -2
  139. package/dist/shaders/materials/body.d.ts.map +0 -1
  140. package/dist/shaders/materials/body.js +0 -95
  141. package/dist/shaders/materials/cloth_rough.d.ts +0 -2
  142. package/dist/shaders/materials/cloth_rough.d.ts.map +0 -1
  143. package/dist/shaders/materials/cloth_rough.js +0 -69
  144. package/dist/shaders/materials/cloth_smooth.d.ts +0 -2
  145. package/dist/shaders/materials/cloth_smooth.d.ts.map +0 -1
  146. package/dist/shaders/materials/cloth_smooth.js +0 -61
  147. package/dist/shaders/materials/default.d.ts +0 -2
  148. package/dist/shaders/materials/default.d.ts.map +0 -1
  149. package/dist/shaders/materials/default.js +0 -43
  150. package/dist/shaders/materials/eye.d.ts +0 -2
  151. package/dist/shaders/materials/eye.d.ts.map +0 -1
  152. package/dist/shaders/materials/eye.js +0 -60
  153. package/dist/shaders/materials/face.d.ts +0 -2
  154. package/dist/shaders/materials/face.d.ts.map +0 -1
  155. package/dist/shaders/materials/face.js +0 -95
  156. package/dist/shaders/materials/hair.d.ts +0 -2
  157. package/dist/shaders/materials/hair.d.ts.map +0 -1
  158. package/dist/shaders/materials/hair.js +0 -90
  159. package/dist/shaders/materials/metal.d.ts +0 -2
  160. package/dist/shaders/materials/metal.d.ts.map +0 -1
  161. package/dist/shaders/materials/metal.js +0 -77
  162. package/dist/shaders/materials/mmd_classic.d.ts +0 -2
  163. package/dist/shaders/materials/mmd_classic.d.ts.map +0 -1
  164. package/dist/shaders/materials/mmd_classic.js +0 -66
  165. package/dist/shaders/materials/stockings.d.ts +0 -2
  166. package/dist/shaders/materials/stockings.d.ts.map +0 -1
  167. package/dist/shaders/materials/stockings.js +0 -122
  168. package/dist/shaders/passes/physics-debug.d.ts +0 -2
  169. package/dist/shaders/passes/physics-debug.d.ts.map +0 -1
  170. package/dist/shaders/passes/physics-debug.js +0 -69
  171. package/src/shaders/agx-lut.ts +0 -30
  172. package/src/shaders/dfg_lut.ts +0 -131
  173. package/src/shaders/ltc_mag_lut.ts +0 -1035
@@ -157,12 +157,13 @@ export function unityFrameGlobals(f) {
157
157
  if (f.sunDirection) {
158
158
  const d = gameDir(f.sunDirection);
159
159
  g.SimMainLightDir = [-d[0], -d[1], -d[2], 0];
160
- g.SimMainLightColor = [...f.sunColor, 1];
161
- g.SimMainLightColorNoInt = [...f.sunColor, 1];
160
+ const u = f.sunUnity;
161
+ g.SimMainLightColor = u ? u.simColor.slice(0, 4) : [...f.sunColor, 1];
162
+ g.SimMainLightColorNoInt = u ? u.simColorNoInt.slice(0, 4) : [...f.sunColor, 1];
162
163
  // As the game's pipeline leaves it (recorded): the way the light travels.
163
164
  g._MainLightPosition = [d[0], d[1], d[2], 0];
164
165
  g.sim_ShadowLightDirection = [-d[0], -d[1], -d[2], 0];
165
- g._MainLightColor = [...f.sunColor, 1];
166
+ g._MainLightColor = u ? u.color.slice(0, 4) : [...f.sunColor, 1];
166
167
  }
167
168
  else {
168
169
  g.SimMainLightDir = [0, 0, 0, 0];
@@ -38,6 +38,8 @@ export type NativeShader = {
38
38
  export type NativeValue = number | ArrayLike<number> | ArrayLike<ArrayLike<number>>;
39
39
  /** Name -> value; the first source that has a name wins. */
40
40
  export type ValueSource = Record<string, NativeValue | undefined>;
41
+ /** Whether two values carry the same numbers (and the same integer-ness). */
42
+ export declare function sameValue(a: NativeValue, b: NativeValue): boolean;
41
43
  /** One vertex stream a draw binds, by the semantic a shader input names. */
42
44
  export type NativeStream = {
43
45
  buffer: GPUBuffer;
@@ -95,6 +97,8 @@ export declare class NativeHost {
95
97
  private fallback;
96
98
  private prepared;
97
99
  private pipelines;
100
+ /** Pipelines being compiled (see warm). */
101
+ private pending;
98
102
  private draws;
99
103
  private shared;
100
104
  private frame;
@@ -106,6 +110,7 @@ export declare class NativeHost {
106
110
  white: GPUTextureView;
107
111
  black: GPUTextureView;
108
112
  blackCube: GPUTextureView;
113
+ emptyVolume: GPUTextureView;
109
114
  depth: GPUTextureView;
110
115
  comparison: GPUSampler;
111
116
  });
@@ -117,7 +122,20 @@ export declare class NativeHost {
117
122
  location: number;
118
123
  semantic: string;
119
124
  }[];
125
+ private pipelineKey;
126
+ /**
127
+ * Compile a draw's pipeline ahead of the draw — what a stage or a look calls
128
+ * for every pass it will draw, the moment it knows the shader, the state and
129
+ * the streams. Async: a synchronous build holds the GPU process for the
130
+ * whole compile, which was a one-to-two-second frozen frame at the first
131
+ * draw of each new shader. Resolves when the pipeline is ready or has
132
+ * failed (into `errors`); never rejects.
133
+ */
134
+ warm(shader: string, state: PassState, streams: NativeStream[]): Promise<void>;
135
+ /** The draw's pipeline if it is ready. Never built here: one that is not
136
+ * ready is started and the draw sits this frame out. */
120
137
  private pipeline;
138
+ private describe;
121
139
  private lookup;
122
140
  /** A new frame: shared blocks are brought up to date once in it. */
123
141
  beginFrame(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/unity/host.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/unity/host.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,26 @@
18
18
  // the device has one), depth tests flip with the engine's reversed depth, and
19
19
  // the pass's MSAA count and formats are the engine's.
20
20
  import { blendState, colorMask, cull, depthCompare, stencilState, zwrite } from "./state";
21
+ /** Whether two values carry the same numbers (and the same integer-ness). */
22
+ export function sameValue(a, b) {
23
+ if (typeof a === "number" || typeof b === "number")
24
+ return a === b;
25
+ if (a.length !== b.length)
26
+ return false;
27
+ if (a instanceof Uint32Array !== b instanceof Uint32Array)
28
+ return false;
29
+ for (let i = 0; i < a.length; i++) {
30
+ const x = a[i];
31
+ const y = b[i];
32
+ if (typeof x === "number" || typeof y === "number") {
33
+ if (x !== y)
34
+ return false;
35
+ }
36
+ else if (!sameValue(x, y))
37
+ return false;
38
+ }
39
+ return true;
40
+ }
21
41
  /** Members read as integers rather than floats (the shader asint()s them). */
22
42
  const INT_MEMBERS = new Set(["unity_LightIndices"]);
23
43
  /** "in_u002e_var_u002e_TEXCOORD2_" -> "TEXCOORD2"; TEXCOORD alone is 0. */
@@ -44,16 +64,26 @@ export function wrapFragment(frag, ids) {
44
64
  if (at < 0)
45
65
  throw new Error("native shader: no fragment entry point");
46
66
  const head = frag.slice(at);
47
- const sig = /->\s*@location\(0\)\s*vec4<f32>\s*\{/;
48
- if (!sig.test(head))
49
- throw new Error("native shader: the fragment entry does not return one vec4 target");
67
+ // A target narrower than four channels (a float3 SV_Target) leaves the rest
68
+ // unwritten: widened here with zeros and an alpha of one.
69
+ const sig = /->\s*@location\(0\)\s*(vec4<f32>|vec3<f32>|vec2<f32>|f32)\s*\{/;
70
+ const kind = sig.exec(head)?.[1];
71
+ if (!kind)
72
+ throw new Error("native shader: the fragment entry does not return one float target");
50
73
  let body = head.replace(sig, "-> RzNativeOut {");
51
74
  const ret = /return\s+(_e\d+)\s*;\s*\}\s*$/;
52
75
  const m = ret.exec(body);
53
76
  if (!m)
54
77
  throw new Error("native shader: the fragment entry's return is not the translator's");
55
- const v = m[1];
56
- body = body.replace(ret, `return RzNativeOut(${v}, vec4f(1.0, 1.0, 0.0, ${v}.a)${ids ? ", vec2u(0u)" : ""});\n}\n`);
78
+ const e = m[1];
79
+ const v = kind === "vec4<f32>"
80
+ ? e
81
+ : kind === "vec3<f32>"
82
+ ? `vec4f(${e}, 1.0)`
83
+ : kind === "vec2<f32>"
84
+ ? `vec4f(${e}, 0.0, 1.0)`
85
+ : `vec4f(${e}, 0.0, 0.0, 1.0)`;
86
+ body = body.replace(ret, `let rzColor = ${v};\n return RzNativeOut(rzColor, vec4f(1.0, 1.0, 0.0, rzColor.a)${ids ? ", vec2u(0u)" : ""});\n}\n`);
57
87
  const struct = `struct RzNativeOut {\n @location(0) color: vec4f,\n @location(1) mask: vec4f,\n${ids ? " @location(2) id: vec2u,\n" : ""}};\n`;
58
88
  // After the module's directives (diagnostic, enable): WGSL wants them first.
59
89
  const pre = frag.slice(0, at);
@@ -67,6 +97,8 @@ export class NativeHost {
67
97
  this.fallback = fallback;
68
98
  this.prepared = new Map();
69
99
  this.pipelines = new Map();
100
+ /** Pipelines being compiled (see warm). */
101
+ this.pending = new Map();
70
102
  this.draws = new Map();
71
103
  this.shared = new Map();
72
104
  this.frame = 0;
@@ -160,10 +192,57 @@ export class NativeHost {
160
192
  }))
161
193
  : [];
162
194
  }
163
- pipeline(p, state, streams) {
164
- const key = `${p.shader.name}|${JSON.stringify(state)}|${streams.map((s) => s.format).join(",")}`;
195
+ pipelineKey(p, state, streams) {
196
+ return `${p.shader.name}|${JSON.stringify(state)}|${streams.map((s) => `${s.format}/${s.stride}`).join(",")}`;
197
+ }
198
+ /**
199
+ * Compile a draw's pipeline ahead of the draw — what a stage or a look calls
200
+ * for every pass it will draw, the moment it knows the shader, the state and
201
+ * the streams. Async: a synchronous build holds the GPU process for the
202
+ * whole compile, which was a one-to-two-second frozen frame at the first
203
+ * draw of each new shader. Resolves when the pipeline is ready or has
204
+ * failed (into `errors`); never rejects.
205
+ */
206
+ warm(shader, state, streams) {
207
+ const p = this.prepared.get(shader);
208
+ if (!p)
209
+ return Promise.resolve();
210
+ const key = this.pipelineKey(p, state, streams);
165
211
  if (this.pipelines.has(key))
166
- return this.pipelines.get(key);
212
+ return Promise.resolve();
213
+ let job = this.pending.get(key);
214
+ if (job)
215
+ return job;
216
+ let built;
217
+ try {
218
+ built = this.describe(p, state, streams);
219
+ }
220
+ catch (e) {
221
+ this.errors.push(`pipeline ${p.shader.name}: ${e.message}`);
222
+ this.pipelines.set(key, null);
223
+ return Promise.resolve();
224
+ }
225
+ job = this.device.createRenderPipelineAsync(built.desc).then((pipeline) => {
226
+ this.pipelines.set(key, { pipeline, stencilRef: built.stencilRef });
227
+ this.pending.delete(key);
228
+ }, (e) => {
229
+ this.errors.push(`pipeline ${p.shader.name}: ${e.message}`);
230
+ this.pipelines.set(key, null);
231
+ this.pending.delete(key);
232
+ });
233
+ this.pending.set(key, job);
234
+ return job;
235
+ }
236
+ /** The draw's pipeline if it is ready. Never built here: one that is not
237
+ * ready is started and the draw sits this frame out. */
238
+ pipeline(p, state, streams) {
239
+ const ready = this.pipelines.get(this.pipelineKey(p, state, streams));
240
+ if (ready !== undefined)
241
+ return ready;
242
+ void this.warm(p.shader.name, state, streams);
243
+ return null;
244
+ }
245
+ describe(p, state, streams) {
167
246
  const t = this.targets;
168
247
  const stencil = stencilState(state);
169
248
  const blend = blendState(state);
@@ -198,66 +277,57 @@ export class NativeHost {
198
277
  if (t.colorFormats[2])
199
278
  targets.push({ format: t.colorFormats[2], writeMask: 0 });
200
279
  const offset = state.Offset;
201
- let result;
202
- try {
203
- result = {
204
- pipeline: this.device.createRenderPipeline({
205
- label: `${p.shader.name} pipeline`,
206
- layout: p.layout,
207
- vertex: {
208
- module: p.vert,
209
- entryPoint: "vert",
210
- buffers: p.shader.info.vertexInputs.map((vi, k) => ({
211
- arrayStride: streams[k].stride,
212
- stepMode: "vertex",
213
- attributes: [
214
- {
215
- shaderLocation: vi.location,
216
- offset: 0,
217
- format: streams[k].format,
218
- },
219
- ],
220
- })),
221
- },
222
- fragment: { module: p.frag, entryPoint: "frag", targets },
223
- // Unity's D3D winding, which is PMX's too: clockwise is the front.
224
- primitive: {
225
- topology: "triangle-list",
226
- cullMode: cull(state.Cull?.[0]),
227
- frontFace: "cw",
228
- },
229
- depthStencil: {
230
- format: t.depthFormat,
231
- depthWriteEnabled: zwrite(state.ZWrite?.[0]),
232
- depthCompare: depthCompare(state.ZTest?.[0], t.reversedZ),
233
- ...(stencil
234
- ? {
235
- stencilFront: stencil.face,
236
- stencilBack: stencil.face,
237
- stencilReadMask: stencil.read,
238
- stencilWriteMask: stencil.write,
239
- }
240
- : {}),
241
- // Offset (factor, units): pulls toward the viewer, which under
242
- // reversed depth is the other sign.
243
- ...(offset
244
- ? {
245
- depthBias: Math.round((+offset[1] || 0) * (t.reversedZ ? 1 : -1)),
246
- depthBiasSlopeScale: (+offset[0] || 0) * (t.reversedZ ? 1 : -1),
247
- }
248
- : {}),
249
- },
250
- multisample: { count: t.sampleCount },
251
- }),
252
- stencilRef: stencil?.ref ?? 0,
253
- };
254
- }
255
- catch (e) {
256
- this.errors.push(`pipeline ${p.shader.name}: ${e.message}`);
257
- result = null;
258
- }
259
- this.pipelines.set(key, result);
260
- return result;
280
+ return {
281
+ desc: {
282
+ label: `${p.shader.name} pipeline`,
283
+ layout: p.layout,
284
+ vertex: {
285
+ module: p.vert,
286
+ entryPoint: "vert",
287
+ buffers: p.shader.info.vertexInputs.map((vi, k) => ({
288
+ arrayStride: streams[k].stride,
289
+ stepMode: "vertex",
290
+ attributes: [
291
+ {
292
+ shaderLocation: vi.location,
293
+ offset: 0,
294
+ format: streams[k].format,
295
+ },
296
+ ],
297
+ })),
298
+ },
299
+ fragment: { module: p.frag, entryPoint: "frag", targets },
300
+ // Unity's D3D winding, which is PMX's too: clockwise is the front.
301
+ primitive: {
302
+ topology: "triangle-list",
303
+ cullMode: cull(state.Cull?.[0]),
304
+ frontFace: "cw",
305
+ },
306
+ depthStencil: {
307
+ format: t.depthFormat,
308
+ depthWriteEnabled: zwrite(state.ZWrite?.[0]),
309
+ depthCompare: depthCompare(state.ZTest?.[0], t.reversedZ),
310
+ ...(stencil
311
+ ? {
312
+ stencilFront: stencil.face,
313
+ stencilBack: stencil.face,
314
+ stencilReadMask: stencil.read,
315
+ stencilWriteMask: stencil.write,
316
+ }
317
+ : {}),
318
+ // Offset (factor, units): pulls toward the viewer, which under
319
+ // reversed depth is the other sign.
320
+ ...(offset
321
+ ? {
322
+ depthBias: Math.round((+offset[1] || 0) * (t.reversedZ ? 1 : -1)),
323
+ depthBiasSlopeScale: (+offset[0] || 0) * (t.reversedZ ? 1 : -1),
324
+ }
325
+ : {}),
326
+ },
327
+ multisample: { count: t.sampleCount },
328
+ },
329
+ stencilRef: stencil?.ref ?? 0,
330
+ };
261
331
  }
262
332
  lookup(name, sources) {
263
333
  for (const s of sources) {
@@ -451,16 +521,20 @@ export class NativeHost {
451
521
  return this.sampler;
452
522
  const bare = name.replace(/^sampler_?/, "");
453
523
  const tex = info.bindings[bare] ? bare : info.bindings[`_${bare}`] ? `_${bare}` : bare;
454
- return samplers[tex] ?? this.sampler;
524
+ return samplers[tex] ?? samplers[tex.replace(/_+$/, "")] ?? this.sampler;
455
525
  }
456
526
  textureView(name, type, textures) {
457
- const v = textures[name];
527
+ // naga renames a binding that ends in a digit with a trailing "_", as it
528
+ // does a member (lookupFrom): _AlbedoTex_1 is declared _AlbedoTex_1_
529
+ const v = textures[name] ?? (name.endsWith("_") ? textures[name.replace(/_+$/, "")] : undefined);
458
530
  if (v)
459
531
  return v;
460
532
  if (/texture_depth/.test(type))
461
533
  return this.fallback.depth;
462
534
  if (/texture_cube/.test(type))
463
535
  return this.fallback.blackCube;
536
+ if (/texture_3d/.test(type))
537
+ return this.fallback.emptyVolume;
464
538
  return this.fallback.white;
465
539
  }
466
540
  /** Forget a draw's buffers (its model left). */
@@ -8,6 +8,12 @@ export type NativeTexture = {
8
8
  data: Uint8Array;
9
9
  /** Colour (sRGB) or data (linear) — how the shader expects to read it. */
10
10
  srgb: boolean;
11
+ /** Unity's wrap mode as the game imported it (Repeat, Clamp, Mirror,
12
+ * MirrorOnce); repeating when absent. A clamped mask sampled past its edge
13
+ * reads its border, not the far side. */
14
+ wrap?: string;
15
+ /** Unity's filter mode (Point, Bilinear, Trilinear); bilinear when absent. */
16
+ filter?: string;
11
17
  };
12
18
  export type NativeMaterialSpec = {
13
19
  /** The model's materials this dresses, by name. */
@@ -30,6 +36,12 @@ export type NativeLook = {
30
36
  textures: Record<string, NativeTexture>;
31
37
  materials: NativeMaterialSpec[];
32
38
  rig?: CharacterRig;
39
+ /** The game vertex streams the model's PMX carries, by semantic: the
40
+ * additional UV channel (1–4) that holds each, four floats a vertex, keyed
41
+ * over time by that channel's UV morphs (PMX types 4–7) — a particle's
42
+ * colour over its life on a mesh's own vertex colours. A stream named here
43
+ * reads that channel; any other reads as Unity binds a missing one. */
44
+ streams?: Record<string, number>;
33
45
  };
34
46
  /** What the engine lends for one model. */
35
47
  export type NativeModel = {
@@ -53,11 +65,25 @@ export type NativeModel = {
53
65
  headRest: [number, number, number];
54
66
  /** Its rendering-layer bits, for a look without a rig. */
55
67
  layers: number;
68
+ /** A PMX additional UV channel (1–4), four floats a vertex, or null. */
69
+ additionalUv: (channel: number) => Float32Array | null;
70
+ /** Its morphs, in the order of morphWeights. */
71
+ morphs: readonly {
72
+ type: number;
73
+ uvOffsets?: {
74
+ vertexIndex: number;
75
+ offset: [number, number, number, number];
76
+ }[];
77
+ }[];
78
+ /** The current effective (group-resolved, clamped) morph weights. */
79
+ morphWeights: () => Float32Array;
56
80
  };
57
81
  export declare class NativeLooks {
58
82
  private device;
59
83
  readonly host: NativeHost;
60
84
  private installs;
85
+ /** Per model: its passes' pipelines compiling (see install). */
86
+ private warming;
61
87
  private skinPipeline;
62
88
  private zero;
63
89
  private white;
@@ -66,7 +92,13 @@ export declare class NativeLooks {
66
92
  private scale;
67
93
  constructor(device: GPUDevice, host: NativeHost);
68
94
  get size(): number;
95
+ private samplerCache;
96
+ /** A texture's sampler: its wrap and filter, shared by every texture alike. */
97
+ private sampler;
69
98
  has(model: string): boolean;
99
+ /** Resolves once every pass of the model's look has its pipeline — until
100
+ * then those draws sit out (NativeHost never compiles at a draw). */
101
+ ready(model: string): Promise<void>;
70
102
  /** Is this model's material drawn by its native look? */
71
103
  dresses(model: string, material: string): boolean;
72
104
  install(model: NativeModel, look: NativeLook): void;
@@ -76,6 +108,21 @@ export declare class NativeLooks {
76
108
  * character's block; the frame's Unity globals come computed (engine.ts).
77
109
  */
78
110
  prepare(encoder: GPUCommandEncoder, globals: Record<string, NativeValue>, scale: number, textures: Record<string, GPUTextureView | undefined>): void;
111
+ /** Each carried stream at the model's current morph weights: its rest values
112
+ * plus every one of its channel's morphs at its weight, rebuilt and uploaded
113
+ * only when one of those weights moved. */
114
+ private keyStreams;
115
+ /**
116
+ * Set some of one dressed material's values (its Unity material properties,
117
+ * as the look's `values` hold them) — what a game animates on a material
118
+ * over a take. Each value stands until set again; the look's own stand
119
+ * under it. Only names the material's spec carries are taken: they are the
120
+ * ones its draws' uniform blocks read per draw. A value equal to the one
121
+ * already set keeps that one's object, so the host, which refills a
122
+ * uniform member only when its value object changes, writes nothing for
123
+ * it. Returns whether the model wears a look that dresses this material.
124
+ */
125
+ setUniforms(model: string, material: string, values: Record<string, NativeValue>): boolean;
79
126
  private streams;
80
127
  private drawPass;
81
128
  /** Every dressed material whose queue is in range, in queue order. */
@@ -1 +1 @@
1
- {"version":3,"file":"looks.d.ts","sourceRoot":"","sources":["../../src/unity/looks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"looks.d.ts","sourceRoot":"","sources":["../../src/unity/looks.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,UAAU,EAAa,KAAK,YAAY,EAAqB,KAAK,WAAW,EAAoB,MAAM,QAAQ,CAAA;AACxH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AAG/D,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,6BAA6B;IAC7B,IAAI,EAAE,UAAU,CAAA;IAChB,0EAA0E;IAC1E,IAAI,EAAE,OAAO,CAAA;IACb;;8CAE0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AASD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,mDAAmD;IACnD,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,CAAA;KAAE,EAAE,CAAA;IACjE,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACnC;kCAC8B;IAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACvC,SAAS,EAAE,kBAAkB,EAAE,CAAA;IAC/B,GAAG,CAAC,EAAE,YAAY,CAAA;IAClB;;;;4EAIwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC,CAAA;AAED,2CAA2C;AAC3C,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,YAAY,CAAA;IACtB,OAAO,EAAE,WAAW,CAAA;IACpB,YAAY,EAAE,SAAS,CAAA;IACvB,YAAY,EAAE,SAAS,CAAA;IACvB,aAAa,EAAE,SAAS,CAAA;IACxB,gBAAgB,EAAE,SAAS,CAAA;IAC3B,WAAW,EAAE,SAAS,CAAA;IACtB,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAA;QACpB,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,cAAc,CAAA;KACxB,EAAE,CAAA;IACH,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAA;IACrC,wDAAwD;IACxD,QAAQ,EAAE,MAAM,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;IACxC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAA;IACd,wEAAwE;IACxE,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,YAAY,GAAG,IAAI,CAAA;IACtD,gDAAgD;IAChD,MAAM,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,EAAE,CAAA;KAAE,EAAE,CAAA;IACpH,qEAAqE;IACrE,YAAY,EAAE,MAAM,YAAY,CAAA;CACjC,CAAA;AAqCD,qBAAa,WAAW;IAapB,OAAO,CAAC,MAAM;IAZhB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,OAAO,CAAC,QAAQ,CAA6B;IAC7C,gEAAgE;IAChE,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,IAAI,CAAW;IACvB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,aAAa,CAAiD;IACtE,OAAO,CAAC,KAAK,CAAI;gBAGP,MAAM,EAAE,SAAS,EACzB,IAAI,EAAE,UAAU;IA6BlB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,OAAO,CAAC,YAAY,CAAgC;IAEpD,+EAA+E;IAC/E,OAAO,CAAC,OAAO;IAmBf,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI3B;0EACsE;IACtE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInC,yDAAyD;IACzD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAKjD,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI;IAqGnD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAc1B;;;OAGG;IACH,OAAO,CACL,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACpC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,CAAC,GACnD,IAAI;IAoBP;;gDAE4C;IAC5C,OAAO,CAAC,UAAU;IA8BlB;;;;;;;;;OASG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,OAAO;IAiB1F,OAAO,CAAC,OAAO;IAwDf,OAAO,CAAC,QAAQ;IAyChB,sEAAsE;IACtE,OAAO,CAAC,IAAI;IAMZ,+EAA+E;IAC/E,UAAU,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI;IAQ5C,yCAAyC;IACzC,eAAe,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI;CAKlD"}