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.
- package/dist/engine.d.ts +300 -94
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +1628 -787
- package/dist/graph/compile.d.ts.map +1 -1
- package/dist/graph/compile.js +5 -0
- package/dist/graph/presets/body.d.ts.map +1 -1
- package/dist/graph/presets/body.js +26 -24
- package/dist/graph/presets/cloth_rough.js +8 -8
- package/dist/graph/presets/cloth_smooth.js +8 -8
- package/dist/graph/presets/default.js +4 -4
- package/dist/graph/presets/eye.js +10 -10
- package/dist/graph/presets/face.d.ts.map +1 -1
- package/dist/graph/presets/face.js +28 -26
- package/dist/graph/presets/hair.js +6 -6
- package/dist/graph/presets/metal.js +8 -8
- package/dist/graph/presets/stockings.d.ts.map +1 -1
- package/dist/graph/presets/stockings.js +4 -11
- package/dist/graph/presets/unlit.d.ts.map +1 -1
- package/dist/graph/presets/unlit.js +9 -13
- package/dist/graph/registry.d.ts.map +1 -1
- package/dist/graph/registry.js +128 -157
- package/dist/graph/render-class.d.ts +5 -2
- package/dist/graph/render-class.d.ts.map +1 -1
- package/dist/graph/slots.d.ts.map +1 -1
- package/dist/graph/slots.js +12 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/model.d.ts +23 -1
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +41 -1
- package/dist/outline-normals.d.ts +12 -0
- package/dist/outline-normals.d.ts.map +1 -0
- package/dist/outline-normals.js +100 -0
- package/dist/pmx-loader.d.ts +7 -0
- package/dist/pmx-loader.d.ts.map +1 -1
- package/dist/pmx-loader.js +17 -3
- package/dist/shaders/anchor-table.d.ts +11 -0
- package/dist/shaders/anchor-table.d.ts.map +1 -1
- package/dist/shaders/anchor-table.js +9 -3
- package/dist/shaders/directives.d.ts +42 -5
- package/dist/shaders/directives.d.ts.map +1 -1
- package/dist/shaders/directives.js +51 -4
- package/dist/shaders/lights.d.ts +11 -7
- package/dist/shaders/lights.d.ts.map +1 -1
- package/dist/shaders/lights.js +315 -271
- package/dist/shaders/materials/common.d.ts.map +1 -1
- package/dist/shaders/materials/common.js +30 -5
- package/dist/shaders/materials/nodes.d.ts +1 -1
- package/dist/shaders/materials/nodes.d.ts.map +1 -1
- package/dist/shaders/materials/nodes.js +191 -271
- package/dist/shaders/passes/bloom.d.ts +4 -3
- package/dist/shaders/passes/bloom.d.ts.map +1 -1
- package/dist/shaders/passes/bloom.js +58 -87
- package/dist/shaders/passes/composite.d.ts +1 -1
- package/dist/shaders/passes/composite.d.ts.map +1 -1
- package/dist/shaders/passes/composite.js +121 -77
- package/dist/shaders/passes/ground.js +1 -1
- package/dist/shaders/passes/mirror.d.ts +18 -12
- package/dist/shaders/passes/mirror.d.ts.map +1 -1
- package/dist/shaders/passes/mirror.js +59 -13
- package/dist/shaders/passes/outline.d.ts.map +1 -1
- package/dist/shaders/passes/outline.js +71 -14
- package/dist/shaders/passes/particles.d.ts.map +1 -1
- package/dist/shaders/passes/particles.js +9 -3
- package/dist/shaders/passes/probe.d.ts +45 -0
- package/dist/shaders/passes/probe.d.ts.map +1 -0
- package/dist/shaders/passes/probe.js +230 -0
- package/dist/shaders/passes/scene-contract.d.ts +13 -0
- package/dist/shaders/passes/scene-contract.d.ts.map +1 -1
- package/dist/shaders/passes/scene-contract.js +4 -0
- package/dist/shaders/scene-light-api.d.ts.map +1 -1
- package/dist/shaders/scene-light-api.js +1 -0
- package/dist/unity/globals.d.ts +7 -0
- package/dist/unity/globals.d.ts.map +1 -1
- package/dist/unity/globals.js +4 -3
- package/dist/unity/host.d.ts +18 -0
- package/dist/unity/host.d.ts.map +1 -1
- package/dist/unity/host.js +144 -70
- package/dist/unity/looks.d.ts +47 -0
- package/dist/unity/looks.d.ts.map +1 -1
- package/dist/unity/looks.js +150 -6
- package/dist/unity/skin.d.ts.map +1 -1
- package/dist/unity/skin.js +5 -2
- package/dist/unity/stage.d.ts +24 -0
- package/dist/unity/stage.d.ts.map +1 -1
- package/dist/unity/stage.js +59 -7
- package/package.json +1 -1
- package/src/engine.ts +2010 -1033
- package/src/graph/compile.ts +4 -0
- package/src/graph/presets/body.ts +26 -24
- package/src/graph/presets/cloth_rough.ts +8 -8
- package/src/graph/presets/cloth_smooth.ts +8 -8
- package/src/graph/presets/default.ts +4 -4
- package/src/graph/presets/eye.ts +10 -10
- package/src/graph/presets/face.ts +28 -26
- package/src/graph/presets/hair.ts +6 -6
- package/src/graph/presets/metal.ts +8 -8
- package/src/graph/presets/stockings.ts +4 -11
- package/src/graph/presets/unlit.ts +9 -13
- package/src/graph/registry.ts +133 -158
- package/src/graph/render-class.ts +5 -2
- package/src/graph/slots.ts +12 -2
- package/src/index.ts +1 -0
- package/src/model.ts +50 -1
- package/src/outline-normals.ts +110 -0
- package/src/pmx-loader.ts +18 -3
- package/src/shaders/anchor-table.ts +15 -3
- package/src/shaders/directives.ts +88 -6
- package/src/shaders/lights.ts +464 -415
- package/src/shaders/materials/common.ts +30 -5
- package/src/shaders/materials/nodes.ts +191 -271
- package/src/shaders/passes/bloom.ts +59 -87
- package/src/shaders/passes/composite.ts +121 -77
- package/src/shaders/passes/ground.ts +1 -1
- package/src/shaders/passes/mirror.ts +60 -13
- package/src/shaders/passes/outline.ts +71 -14
- package/src/shaders/passes/particles.ts +9 -3
- package/src/shaders/passes/probe.ts +240 -0
- package/src/shaders/passes/scene-contract.ts +17 -0
- package/src/shaders/scene-light-api.ts +1 -0
- package/src/unity/globals.ts +7 -3
- package/src/unity/host.ts +93 -20
- package/src/unity/looks.ts +182 -9
- package/src/unity/skin.ts +5 -2
- package/src/unity/stage.ts +66 -7
- package/dist/physics-debug.d.ts +0 -30
- package/dist/physics-debug.d.ts.map +0 -1
- package/dist/physics-debug.js +0 -526
- package/dist/shaders/agx-lut.d.ts +0 -11
- package/dist/shaders/agx-lut.d.ts.map +0 -1
- package/dist/shaders/agx-lut.js +0 -29
- package/dist/shaders/dfg_lut.d.ts +0 -3
- package/dist/shaders/dfg_lut.d.ts.map +0 -1
- package/dist/shaders/dfg_lut.js +0 -129
- package/dist/shaders/ltc_mag_lut.d.ts +0 -3
- package/dist/shaders/ltc_mag_lut.d.ts.map +0 -1
- package/dist/shaders/ltc_mag_lut.js +0 -1033
- package/dist/shaders/materials/body.d.ts +0 -2
- package/dist/shaders/materials/body.d.ts.map +0 -1
- package/dist/shaders/materials/body.js +0 -95
- package/dist/shaders/materials/cloth_rough.d.ts +0 -2
- package/dist/shaders/materials/cloth_rough.d.ts.map +0 -1
- package/dist/shaders/materials/cloth_rough.js +0 -69
- package/dist/shaders/materials/cloth_smooth.d.ts +0 -2
- package/dist/shaders/materials/cloth_smooth.d.ts.map +0 -1
- package/dist/shaders/materials/cloth_smooth.js +0 -61
- package/dist/shaders/materials/default.d.ts +0 -2
- package/dist/shaders/materials/default.d.ts.map +0 -1
- package/dist/shaders/materials/default.js +0 -43
- package/dist/shaders/materials/eye.d.ts +0 -2
- package/dist/shaders/materials/eye.d.ts.map +0 -1
- package/dist/shaders/materials/eye.js +0 -60
- package/dist/shaders/materials/face.d.ts +0 -2
- package/dist/shaders/materials/face.d.ts.map +0 -1
- package/dist/shaders/materials/face.js +0 -95
- package/dist/shaders/materials/hair.d.ts +0 -2
- package/dist/shaders/materials/hair.d.ts.map +0 -1
- package/dist/shaders/materials/hair.js +0 -90
- package/dist/shaders/materials/metal.d.ts +0 -2
- package/dist/shaders/materials/metal.d.ts.map +0 -1
- package/dist/shaders/materials/metal.js +0 -77
- package/dist/shaders/materials/mmd_classic.d.ts +0 -2
- package/dist/shaders/materials/mmd_classic.d.ts.map +0 -1
- package/dist/shaders/materials/mmd_classic.js +0 -66
- package/dist/shaders/materials/stockings.d.ts +0 -2
- package/dist/shaders/materials/stockings.d.ts.map +0 -1
- package/dist/shaders/materials/stockings.js +0 -122
- package/dist/shaders/passes/physics-debug.d.ts +0 -2
- package/dist/shaders/passes/physics-debug.d.ts.map +0 -1
- package/dist/shaders/passes/physics-debug.js +0 -69
- package/src/shaders/agx-lut.ts +0 -30
- package/src/shaders/dfg_lut.ts +0 -131
- package/src/shaders/ltc_mag_lut.ts +0 -1035
package/dist/unity/globals.js
CHANGED
|
@@ -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
|
-
|
|
161
|
-
g.
|
|
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];
|
package/dist/unity/host.d.ts
CHANGED
|
@@ -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;
|
package/dist/unity/host.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/unity/host.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAmE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAA;AAEzG,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AACD,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AACD,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAA;CAAE,CAAA;AACpE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACrC,YAAY,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CACjE,CAAA;AACD,4EAA4E;AAC5E,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,gBAAgB,CAAA;CACvB,CAAA;AAED;+EAC+E;AAC/E,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;AACnF,4DAA4D;AAC5D,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC,CAAA;AAEjE,4EAA4E;AAC5E,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,SAAS,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,eAAe,CAAA;CACxB,CAAA;AAKD,2EAA2E;AAC3E,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAKlD;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/unity/host.ts"],"names":[],"mappings":"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"}
|
package/dist/unity/host.js
CHANGED
|
@@ -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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
|
56
|
-
|
|
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
|
-
|
|
164
|
-
|
|
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
|
|
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
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
?
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
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
|
-
|
|
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). */
|
package/dist/unity/looks.d.ts
CHANGED
|
@@ -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":"AAiBA,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"looks.d.ts","sourceRoot":"","sources":["../../src/unity/looks.ts"],"names":[],"mappings":"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"}
|