@flighthq/scene3d-wgpu 0.3.0 → 0.3.1-next.1041.35b950c
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/customShaderWgpuMeshMaterialRenderer.d.ts.map +1 -1
- package/dist/customShaderWgpuMeshMaterialRenderer.js +6 -9
- package/dist/customShaderWgpuMeshMaterialRenderer.js.map +1 -1
- package/dist/drawWgpuScene3D.d.ts.map +1 -1
- package/dist/drawWgpuScene3D.js +4 -2
- package/dist/drawWgpuScene3D.js.map +1 -1
- package/dist/explainWgpuScene3DCoverage.d.ts +2 -2
- package/dist/explainWgpuScene3DCoverage.d.ts.map +1 -1
- package/dist/explainWgpuScene3DCoverage.js +62 -26
- package/dist/explainWgpuScene3DCoverage.js.map +1 -1
- package/dist/wgpuClassicPrelude.js +2 -2
- package/dist/wgpuClassicPrelude.js.map +1 -1
- package/dist/wgpuMeshMaterialRegistry.d.ts.map +1 -1
- package/dist/wgpuMeshMaterialRegistry.js +15 -11
- package/dist/wgpuMeshMaterialRegistry.js.map +1 -1
- package/dist/wgpuMeshPipeline.d.ts +1 -1
- package/dist/wgpuMeshPipeline.d.ts.map +1 -1
- package/dist/wgpuMeshPipeline.js +39 -12
- package/dist/wgpuMeshPipeline.js.map +1 -1
- package/dist/wgpuMeshUpload.d.ts +1 -1
- package/dist/wgpuMeshUpload.d.ts.map +1 -1
- package/dist/wgpuMeshUpload.js +37 -12
- package/dist/wgpuMeshUpload.js.map +1 -1
- package/dist/wgpuParticleEmitter3D.d.ts.map +1 -1
- package/dist/wgpuParticleEmitter3D.js +9 -6
- package/dist/wgpuParticleEmitter3D.js.map +1 -1
- package/dist/wgpuPbrPipelineCache.d.ts.map +1 -1
- package/dist/wgpuPbrPipelineCache.js +2 -2
- package/dist/wgpuPbrPipelineCache.js.map +1 -1
- package/dist/wgpuScene3DRuntime.d.ts.map +1 -1
- package/dist/wgpuScene3DRuntime.js +18 -10
- package/dist/wgpuScene3DRuntime.js.map +1 -1
- package/dist/wgpuScene3DTestHelper.d.ts.map +1 -1
- package/dist/wgpuScene3DTestHelper.js +126 -6
- package/dist/wgpuScene3DTestHelper.js.map +1 -1
- package/dist/wgpuShadedModifierSnippet.d.ts.map +1 -1
- package/dist/wgpuShadedModifierSnippet.js +8 -11
- package/dist/wgpuShadedModifierSnippet.js.map +1 -1
- package/dist/wgpuShadedPrelude.d.ts +5 -3
- package/dist/wgpuShadedPrelude.d.ts.map +1 -1
- package/dist/wgpuShadedPrelude.js +34 -13
- package/dist/wgpuShadedPrelude.js.map +1 -1
- package/dist/wgpuShadowMap.d.ts.map +1 -1
- package/dist/wgpuShadowMap.js +22 -6
- package/dist/wgpuShadowMap.js.map +1 -1
- package/dist/wgpuSkinPalette.d.ts +4 -1
- package/dist/wgpuSkinPalette.d.ts.map +1 -1
- package/dist/wgpuSkinPalette.js +227 -27
- package/dist/wgpuSkinPalette.js.map +1 -1
- package/dist/wgpuWireframeUpload.d.ts.map +1 -1
- package/dist/wgpuWireframeUpload.js +12 -6
- package/dist/wgpuWireframeUpload.js.map +1 -1
- package/package.json +20 -15
- package/src/customShaderWgpuMeshMaterialRenderer.test.ts +25 -1
- package/src/explainWgpuScene3DCoverage.test.ts +44 -10
- package/src/wgpuMeshMaterialRegistry.test.ts +22 -0
- package/src/wgpuMeshPipeline.test.ts +34 -1
- package/src/wgpuMeshUpload.test.ts +65 -3
- package/src/wgpuParticleEmitter3D.test.ts +23 -0
- package/src/wgpuScene3DRuntime.test.ts +8 -4
- package/src/wgpuScene3DTestHelper.test.ts +84 -0
- package/src/wgpuShadedModifierSnippet.test.ts +20 -6
- package/src/wgpuShadedPrelude.test.ts +6 -6
- package/src/wgpuShadowMap.test.ts +30 -0
- package/src/wgpuSkinPalette.test.ts +134 -19
- package/src/wgpuWireframeUpload.test.ts +29 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuShadowMap.js","sourceRoot":"","sources":["../src/wgpuShadowMap.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"wgpuShadowMap.js","sourceRoot":"","sources":["../src/wgpuShadowMap.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,9 @@ import type { WgpuRenderState } from '@flighthq/types/contract';
|
|
|
2
2
|
export declare function destroyWgpuSkinPalette(state: WgpuRenderState): void;
|
|
3
3
|
export declare function ensureWgpuSkinDrawBindGroup(state: WgpuRenderState, jointMatrices: Readonly<Float32Array>): GPUBindGroup;
|
|
4
4
|
export declare function ensureWgpuSkinDrawLayout(state: WgpuRenderState): GPUBindGroupLayout;
|
|
5
|
+
export declare function ensureWgpuSkinMeshDrawBindGroup(state: WgpuRenderState, jointMatrices: Readonly<Float32Array>, normalMatrices: Readonly<Float32Array>): GPUBindGroup;
|
|
6
|
+
export declare function ensureWgpuSkinMeshDrawLayout(state: WgpuRenderState): GPUBindGroupLayout;
|
|
5
7
|
export declare function registerWgpuGpuSkinning(state: WgpuRenderState): void;
|
|
6
|
-
export declare function
|
|
8
|
+
export declare function uploadWgpuSkinNormalPalette(state: WgpuRenderState, normalMatrices: Readonly<Float32Array>): number;
|
|
9
|
+
export declare function uploadWgpuSkinPalette(state: WgpuRenderState, jointMatrices: Readonly<Float32Array>): number;
|
|
7
10
|
//# sourceMappingURL=wgpuSkinPalette.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuSkinPalette.d.ts","sourceRoot":"","sources":["../src/wgpuSkinPalette.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAKV,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAMlC,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"wgpuSkinPalette.d.ts","sourceRoot":"","sources":["../src/wgpuSkinPalette.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAKV,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAMlC,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAmBnE;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,eAAe,EACtB,aAAa,EAAE,QAAQ,CAAC,YAAY,CAAC,GACpC,YAAY,CAed;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,eAAe,GAAG,kBAAkB,CAmBnF;AAUD,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,eAAe,EACtB,aAAa,EAAE,QAAQ,CAAC,YAAY,CAAC,EACrC,cAAc,EAAE,QAAQ,CAAC,YAAY,CAAC,GACrC,YAAY,CAoBd;AAKD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,eAAe,GAAG,kBAAkB,CAkBvF;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEpE;AASD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,MAAM,CA2BlH;AAKD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,MAAM,CA8B3G"}
|
package/dist/wgpuSkinPalette.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu/contract';
|
|
1
|
+
import { getWgpuRenderStateRuntime, retireWgpuTexture } from '@flighthq/render-wgpu/contract';
|
|
2
2
|
import { EntityRuntimeKey } from '@flighthq/types/contract';
|
|
3
3
|
import { getWgpuScene3DRuntime } from './wgpuScene3DRuntime';
|
|
4
4
|
export function destroyWgpuSkinPalette(state) {
|
|
@@ -6,15 +6,27 @@ export function destroyWgpuSkinPalette(state) {
|
|
|
6
6
|
runtime.skinPaletteTexture?.destroy();
|
|
7
7
|
runtime.skinPaletteTexture = null;
|
|
8
8
|
runtime.skinPaletteView = null;
|
|
9
|
-
runtime.
|
|
9
|
+
runtime.skinPaletteArenaCursor = 0;
|
|
10
|
+
runtime.skinPaletteArenaRows = 0;
|
|
11
|
+
runtime.skinPaletteArenaBases = null;
|
|
12
|
+
runtime.skinArenaFrame = null;
|
|
10
13
|
runtime.skinDrawBindGroup = null;
|
|
14
|
+
// The mesh path's own texture and bind group, freed here too — a second layout means a second
|
|
15
|
+
// resource, and leaking it would outlive the render state that owns it.
|
|
16
|
+
runtime.skinNormalPaletteTexture?.destroy();
|
|
17
|
+
runtime.skinNormalPaletteTexture = null;
|
|
18
|
+
runtime.skinNormalPaletteView = null;
|
|
19
|
+
runtime.skinNormalPaletteArenaCursor = 0;
|
|
20
|
+
runtime.skinNormalPaletteArenaRows = 0;
|
|
21
|
+
runtime.skinNormalPaletteArenaBases = null;
|
|
22
|
+
runtime.skinMeshDrawBindGroup = null;
|
|
11
23
|
}
|
|
12
24
|
export function ensureWgpuSkinDrawBindGroup(state, jointMatrices) {
|
|
13
25
|
const scene = getWgpuScene3DRuntime(state);
|
|
14
26
|
const stateRuntime = getWgpuRenderStateRuntime(state);
|
|
15
|
-
|
|
16
|
-
const view =
|
|
17
|
-
if (scene.skinDrawBindGroup === null
|
|
27
|
+
uploadWgpuSkinPalette(state, jointMatrices);
|
|
28
|
+
const view = scene.skinPaletteView;
|
|
29
|
+
if (scene.skinDrawBindGroup === null) {
|
|
18
30
|
scene.skinDrawBindGroup = state.device.createBindGroup({
|
|
19
31
|
layout: ensureWgpuSkinDrawLayout(state),
|
|
20
32
|
entries: [
|
|
@@ -45,29 +57,174 @@ export function ensureWgpuSkinDrawLayout(state) {
|
|
|
45
57
|
}
|
|
46
58
|
return scene.skinDrawBindGroupLayout;
|
|
47
59
|
}
|
|
60
|
+
// The MESH path's bind group: pose palette at binding 1, NORMAL palette at binding 2.
|
|
61
|
+
//
|
|
62
|
+
// ★ SEPARATE FROM THE SHADOW PATH'S BIND GROUP ON PURPOSE, AND NOT BECAUSE OF A VALIDATION WORRY. A
|
|
63
|
+
// bind group must satisfy every binding its layout declares, so a shared layout carrying binding 2
|
|
64
|
+
// would force the shadow path — which skins positions only and will never skin normals — to supply a
|
|
65
|
+
// normal-palette resource it has no use for, permanently. A layout states what a pipeline NEEDS; making
|
|
66
|
+
// the shadow pipeline declare a need it does not have would oblige every later maintainer to keep
|
|
67
|
+
// feeding it. The cost of this split is one extra layout and bind group, which is bounded and local.
|
|
68
|
+
export function ensureWgpuSkinMeshDrawBindGroup(state, jointMatrices, normalMatrices) {
|
|
69
|
+
const scene = getWgpuScene3DRuntime(state);
|
|
70
|
+
const stateRuntime = getWgpuRenderStateRuntime(state);
|
|
71
|
+
uploadWgpuSkinPalette(state, jointMatrices);
|
|
72
|
+
uploadWgpuSkinNormalPalette(state, normalMatrices);
|
|
73
|
+
const poseView = scene.skinPaletteView;
|
|
74
|
+
const normalView = scene.skinNormalPaletteView;
|
|
75
|
+
// Growing an arena nulls the bind group, so a null check is the whole invalidation rule — the views
|
|
76
|
+
// only change when a texture is recreated, which is exactly when the upload above cleared this.
|
|
77
|
+
if (scene.skinMeshDrawBindGroup === null) {
|
|
78
|
+
scene.skinMeshDrawBindGroup = state.device.createBindGroup({
|
|
79
|
+
layout: ensureWgpuSkinMeshDrawLayout(state),
|
|
80
|
+
entries: [
|
|
81
|
+
{ binding: 0, resource: { buffer: stateRuntime.uniformBuffer, size: 176 } },
|
|
82
|
+
{ binding: 1, resource: poseView },
|
|
83
|
+
{ binding: 2, resource: normalView },
|
|
84
|
+
],
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
return scene.skinMeshDrawBindGroup;
|
|
88
|
+
}
|
|
89
|
+
// The MESH path's layout: the shadow path's two bindings plus the normal palette at binding 2.
|
|
90
|
+
// Binding 0 keeps VERTEX|FRAGMENT visibility for the same reason it does below — the fragment tail
|
|
91
|
+
// reads draw.params.y — and the two palettes are vertex-stage only.
|
|
92
|
+
export function ensureWgpuSkinMeshDrawLayout(state) {
|
|
93
|
+
const scene = getWgpuScene3DRuntime(state);
|
|
94
|
+
if (scene.skinMeshDrawBindGroupLayout === null) {
|
|
95
|
+
scene.skinMeshDrawBindGroupLayout = state.device.createBindGroupLayout({
|
|
96
|
+
entries: [
|
|
97
|
+
{
|
|
98
|
+
binding: 0,
|
|
99
|
+
visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,
|
|
100
|
+
buffer: { type: 'uniform', hasDynamicOffset: true },
|
|
101
|
+
},
|
|
102
|
+
{ binding: 1, visibility: GPUShaderStage.VERTEX, texture: { sampleType: 'unfilterable-float' } },
|
|
103
|
+
// The normal palette — three texels per joint rather than four, since a 3x3 padded to vec4
|
|
104
|
+
// columns is twelve floats.
|
|
105
|
+
{ binding: 2, visibility: GPUShaderStage.VERTEX, texture: { sampleType: 'unfilterable-float' } },
|
|
106
|
+
],
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
return scene.skinMeshDrawBindGroupLayout;
|
|
110
|
+
}
|
|
48
111
|
export function registerWgpuGpuSkinning(state) {
|
|
49
112
|
getWgpuScene3DRuntime(state).skinningAdapter = WGPU_SKINNING_ADAPTER;
|
|
50
113
|
}
|
|
51
|
-
// Uploads
|
|
52
|
-
//
|
|
53
|
-
//
|
|
114
|
+
// Uploads the per-joint NORMAL palette into its own arena and returns the base TEXEL index its region
|
|
115
|
+
// starts at. THREE texels per joint, not four: each joint's 3x3 is stored as three vec4-padded columns,
|
|
116
|
+
// twelve floats.
|
|
117
|
+
//
|
|
118
|
+
// ★ THE JOINT COUNT IS DERIVED WITH /12, NOT /16. Reusing the pose palette's divisor here would
|
|
119
|
+
// under-count every skeleton by a quarter and upload a truncated region — a quiet corruption that
|
|
120
|
+
// renders as wrong lighting rather than as a failure.
|
|
121
|
+
export function uploadWgpuSkinNormalPalette(state, normalMatrices) {
|
|
122
|
+
const runtime = getWgpuScene3DRuntime(state);
|
|
123
|
+
beginWgpuSkinArenaFrame(state);
|
|
124
|
+
const bases = runtime.skinNormalPaletteArenaBases;
|
|
125
|
+
const existing = bases.get(normalMatrices);
|
|
126
|
+
if (existing !== undefined)
|
|
127
|
+
return existing;
|
|
128
|
+
const texels = ((normalMatrices.length / 12) | 0) * 3;
|
|
129
|
+
const base = runtime.skinNormalPaletteArenaCursor;
|
|
130
|
+
const rows = getWgpuSkinArenaRowCount(base + texels);
|
|
131
|
+
if (rows > runtime.skinNormalPaletteArenaRows) {
|
|
132
|
+
if (runtime.skinNormalPaletteTexture !== null)
|
|
133
|
+
retireWgpuTexture(state, runtime.skinNormalPaletteTexture);
|
|
134
|
+
runtime.skinNormalPaletteTexture = createWgpuSkinArenaTexture(state, rows);
|
|
135
|
+
runtime.skinNormalPaletteView = runtime.skinNormalPaletteTexture.createView();
|
|
136
|
+
runtime.skinNormalPaletteArenaRows = rows;
|
|
137
|
+
runtime.skinMeshDrawBindGroup = null;
|
|
138
|
+
// A grown arena is a NEW texture, so every region already handed out this frame lives in the old one.
|
|
139
|
+
// Replaying them from the bases map is what keeps growth from silently blanking earlier draws.
|
|
140
|
+
for (const [palette, replayBase] of bases) {
|
|
141
|
+
writeWgpuSkinArenaRegion(state, runtime.skinNormalPaletteTexture, palette, replayBase);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
writeWgpuSkinArenaRegion(state, runtime.skinNormalPaletteTexture, normalMatrices, base);
|
|
145
|
+
runtime.skinNormalPaletteArenaCursor = base + rowAlignedWgpuSkinArenaTexels(texels);
|
|
146
|
+
bases.set(normalMatrices, base);
|
|
147
|
+
runtime.pendingSkinNormalPaletteBase = base;
|
|
148
|
+
return base;
|
|
149
|
+
}
|
|
150
|
+
// Uploads one flat column-major joint palette into the per-frame arena and returns the base TEXEL index
|
|
151
|
+
// its region starts at. Four consecutive texels encode one mat4. There is deliberately no uniform-budget
|
|
152
|
+
// capacity gate and no CPU fallback.
|
|
54
153
|
export function uploadWgpuSkinPalette(state, jointMatrices) {
|
|
55
154
|
const runtime = getWgpuScene3DRuntime(state);
|
|
56
|
-
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
155
|
+
beginWgpuSkinArenaFrame(state);
|
|
156
|
+
const bases = runtime.skinPaletteArenaBases;
|
|
157
|
+
const existing = bases.get(jointMatrices);
|
|
158
|
+
if (existing !== undefined) {
|
|
159
|
+
// Already resident this frame — the shadow pass and the mesh pass share one region for one skeleton.
|
|
160
|
+
runtime.pendingSkinPaletteBase = existing;
|
|
161
|
+
return existing;
|
|
162
|
+
}
|
|
163
|
+
const texels = ((jointMatrices.length / 16) | 0) * 4;
|
|
164
|
+
const base = runtime.skinPaletteArenaCursor;
|
|
165
|
+
const rows = getWgpuSkinArenaRowCount(base + texels);
|
|
166
|
+
if (rows > runtime.skinPaletteArenaRows) {
|
|
167
|
+
if (runtime.skinPaletteTexture !== null)
|
|
168
|
+
retireWgpuTexture(state, runtime.skinPaletteTexture);
|
|
169
|
+
runtime.skinPaletteTexture = createWgpuSkinArenaTexture(state, rows);
|
|
65
170
|
runtime.skinPaletteView = runtime.skinPaletteTexture.createView();
|
|
66
|
-
runtime.
|
|
171
|
+
runtime.skinPaletteArenaRows = rows;
|
|
67
172
|
runtime.skinDrawBindGroup = null;
|
|
173
|
+
runtime.skinMeshDrawBindGroup = null;
|
|
174
|
+
for (const [palette, replayBase] of bases) {
|
|
175
|
+
writeWgpuSkinArenaRegion(state, runtime.skinPaletteTexture, palette, replayBase);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
writeWgpuSkinArenaRegion(state, runtime.skinPaletteTexture, jointMatrices, base);
|
|
179
|
+
runtime.skinPaletteArenaCursor = base + rowAlignedWgpuSkinArenaTexels(texels);
|
|
180
|
+
bases.set(jointMatrices, base);
|
|
181
|
+
runtime.pendingSkinPaletteBase = base;
|
|
182
|
+
return base;
|
|
183
|
+
}
|
|
184
|
+
// Starts a new arena frame when render-wgpu has opened a new command encoder. The encoder is the frame
|
|
185
|
+
// identity rather than a counter: it is created once per frame and nulled at submit, so comparing it
|
|
186
|
+
// needs no new field in the shared render state and cannot drift out of step with the submit boundary.
|
|
187
|
+
function beginWgpuSkinArenaFrame(state) {
|
|
188
|
+
const runtime = getWgpuScene3DRuntime(state);
|
|
189
|
+
const encoder = getWgpuRenderStateRuntime(state).commandEncoder;
|
|
190
|
+
if (runtime.skinArenaFrame === encoder && runtime.skinPaletteArenaBases !== null)
|
|
191
|
+
return;
|
|
192
|
+
runtime.skinArenaFrame = encoder;
|
|
193
|
+
runtime.skinPaletteArenaCursor = 0;
|
|
194
|
+
runtime.skinNormalPaletteArenaCursor = 0;
|
|
195
|
+
runtime.skinPaletteArenaBases = new Map();
|
|
196
|
+
runtime.skinNormalPaletteArenaBases = new Map();
|
|
197
|
+
}
|
|
198
|
+
function createWgpuSkinArenaTexture(state, rows) {
|
|
199
|
+
return state.device.createTexture({
|
|
200
|
+
size: [WGPU_SKIN_ARENA_WIDTH, rows, 1],
|
|
201
|
+
format: 'rgba32float',
|
|
202
|
+
usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
function getWgpuSkinArenaRowCount(texels) {
|
|
206
|
+
return Math.max(1, Math.ceil(texels / WGPU_SKIN_ARENA_WIDTH));
|
|
207
|
+
}
|
|
208
|
+
// Regions start on a row boundary so every write is a rectangle: a palette that straddles a row could not
|
|
209
|
+
// be expressed as one copy, and padding it to a full row would mean staging a copy of every palette.
|
|
210
|
+
function rowAlignedWgpuSkinArenaTexels(texels) {
|
|
211
|
+
return getWgpuSkinArenaRowCount(texels) * WGPU_SKIN_ARENA_WIDTH;
|
|
212
|
+
}
|
|
213
|
+
// Writes one palette into its arena region as at most two rectangles: the whole rows it fills, then the
|
|
214
|
+
// partial row left over. `base` is row-aligned, so both are rectangular and neither needs a staging copy.
|
|
215
|
+
function writeWgpuSkinArenaRegion(state, texture, palette, base) {
|
|
216
|
+
const texels = (palette.length / 4) | 0;
|
|
217
|
+
const startRow = base / WGPU_SKIN_ARENA_WIDTH;
|
|
218
|
+
const fullRows = (texels / WGPU_SKIN_ARENA_WIDTH) | 0;
|
|
219
|
+
const remainder = texels - fullRows * WGPU_SKIN_ARENA_WIDTH;
|
|
220
|
+
const queue = state.device.queue;
|
|
221
|
+
const data = palette;
|
|
222
|
+
if (fullRows > 0) {
|
|
223
|
+
queue.writeTexture({ texture, origin: [0, startRow, 0] }, data, { bytesPerRow: WGPU_SKIN_ARENA_WIDTH * 16, rowsPerImage: fullRows }, [WGPU_SKIN_ARENA_WIDTH, fullRows, 1]);
|
|
224
|
+
}
|
|
225
|
+
if (remainder > 0) {
|
|
226
|
+
queue.writeTexture({ texture, origin: [0, startRow + fullRows, 0] }, data, { offset: fullRows * WGPU_SKIN_ARENA_WIDTH * 16, bytesPerRow: remainder * 16 }, [remainder, 1, 1]);
|
|
68
227
|
}
|
|
69
|
-
state.device.queue.writeTexture({ texture: runtime.skinPaletteTexture }, jointMatrices, { bytesPerRow: width * 16 }, [width, 1, 1]);
|
|
70
|
-
return runtime.skinPaletteView;
|
|
71
228
|
}
|
|
72
229
|
function isGpuSkinned(mesh) {
|
|
73
230
|
if (mesh.skin == null)
|
|
@@ -87,7 +244,8 @@ function isGpuSkinned(mesh) {
|
|
|
87
244
|
function extendMeshPrelude(rigidPrelude) {
|
|
88
245
|
return rigidPrelude
|
|
89
246
|
.replace('@group(1) @binding(0) var<uniform> draw : Draw;', `@group(1) @binding(0) var<uniform> draw : Draw;
|
|
90
|
-
${getWgpuSkinBindingWgsl(1)}
|
|
247
|
+
${getWgpuSkinBindingWgsl(1)}
|
|
248
|
+
${getWgpuSkinNormalBindingWgsl(1)}`)
|
|
91
249
|
.replace(' @location(3) uv : vec2f,\n) -> VertexOutput {', ` @location(3) uv : vec2f,
|
|
92
250
|
@location(4) joints0 : vec4f,
|
|
93
251
|
@location(5) weights0 : vec4f,
|
|
@@ -95,7 +253,7 @@ ${getWgpuSkinBindingWgsl(1)}`)
|
|
|
95
253
|
.replace(' var localTangent = tangent.xyz;\n let world = draw.world * localPosition;', ` var localTangent = tangent.xyz;
|
|
96
254
|
let skin = skinMatrix(joints0, weights0);
|
|
97
255
|
localPosition = skin * localPosition;
|
|
98
|
-
localNormal = (
|
|
256
|
+
localNormal = skinNormalMatrix(joints0, weights0) * localNormal;
|
|
99
257
|
localTangent = (skin * vec4f(localTangent, 0.0)).xyz;
|
|
100
258
|
let world = draw.world * localPosition;`);
|
|
101
259
|
}
|
|
@@ -110,16 +268,52 @@ ${getWgpuSkinBindingWgsl(0)}`)
|
|
|
110
268
|
) -> @builtin(position) vec4f {`)
|
|
111
269
|
.replace(' var clip = draw.world * vec4f(position, 1.0);', ' var clip = draw.world * skinMatrix(joints0, weights0) * vec4f(position, 1.0);');
|
|
112
270
|
}
|
|
271
|
+
// The MESH path's extra binding: the per-joint normal palette, three texels per joint.
|
|
272
|
+
//
|
|
273
|
+
// ★ A NORMAL IS A COVECTOR, so under non-uniform joint scale it follows the inverse-transpose rather
|
|
274
|
+
// than the matrix a position and a tangent follow. Blending the per-joint inverse-transposes is an
|
|
275
|
+
// APPROXIMATION — the inverse-transpose of the blend is a different matrix — and it is the affordable
|
|
276
|
+
// one, since the exact answer needs a 3x3 inverse per vertex. The CPU and GL paths blend identically,
|
|
277
|
+
// which is what makes comparing the three a real check rather than three different approximations.
|
|
278
|
+
function getWgpuSkinNormalBindingWgsl(group) {
|
|
279
|
+
return `@group(${group}) @binding(2) var jointNormalTexture : texture_2d<f32>;
|
|
280
|
+
|
|
281
|
+
fn loadJointNormalTexel(i : u32) -> vec3f {
|
|
282
|
+
return textureLoad(jointNormalTexture, vec2i(i32(i % ${WGPU_SKIN_ARENA_WIDTH}u), i32(i / ${WGPU_SKIN_ARENA_WIDTH}u)), 0).xyz;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
fn fetchJointNormalMatrix(joint : u32) -> mat3x3f {
|
|
286
|
+
let x = u32(draw.params.w) + joint * 3u;
|
|
287
|
+
return mat3x3f(
|
|
288
|
+
loadJointNormalTexel(x),
|
|
289
|
+
loadJointNormalTexel(x + 1u),
|
|
290
|
+
loadJointNormalTexel(x + 2u)
|
|
291
|
+
);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
fn skinNormalMatrix(joints : vec4f, weights : vec4f) -> mat3x3f {
|
|
295
|
+
return weights.x * fetchJointNormalMatrix(u32(joints.x))
|
|
296
|
+
+ weights.y * fetchJointNormalMatrix(u32(joints.y))
|
|
297
|
+
+ weights.z * fetchJointNormalMatrix(u32(joints.z))
|
|
298
|
+
+ weights.w * fetchJointNormalMatrix(u32(joints.w));
|
|
299
|
+
}`;
|
|
300
|
+
}
|
|
113
301
|
function getWgpuSkinBindingWgsl(group) {
|
|
302
|
+
// The arena width is interpolated from the one TypeScript constant that also sizes the texture, so the
|
|
303
|
+
// shader's row arithmetic cannot drift from the allocator's.
|
|
114
304
|
return `@group(${group}) @binding(1) var jointTexture : texture_2d<f32>;
|
|
115
305
|
|
|
306
|
+
fn loadJointTexel(i : u32) -> vec4f {
|
|
307
|
+
return textureLoad(jointTexture, vec2i(i32(i % ${WGPU_SKIN_ARENA_WIDTH}u), i32(i / ${WGPU_SKIN_ARENA_WIDTH}u)), 0);
|
|
308
|
+
}
|
|
309
|
+
|
|
116
310
|
fn fetchJointMatrix(joint : u32) -> mat4x4f {
|
|
117
|
-
let x =
|
|
311
|
+
let x = u32(draw.params.z) + joint * 4u;
|
|
118
312
|
return mat4x4f(
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
313
|
+
loadJointTexel(x),
|
|
314
|
+
loadJointTexel(x + 1u),
|
|
315
|
+
loadJointTexel(x + 2u),
|
|
316
|
+
loadJointTexel(x + 3u)
|
|
123
317
|
);
|
|
124
318
|
}
|
|
125
319
|
|
|
@@ -176,6 +370,8 @@ const WGPU_SKINNING_ADAPTER = {
|
|
|
176
370
|
extendShadowDepthPrelude,
|
|
177
371
|
getDrawBindGroup: ensureWgpuSkinDrawBindGroup,
|
|
178
372
|
getDrawLayout: ensureWgpuSkinDrawLayout,
|
|
373
|
+
getMeshDrawBindGroup: ensureWgpuSkinMeshDrawBindGroup,
|
|
374
|
+
getMeshDrawLayout: ensureWgpuSkinMeshDrawLayout,
|
|
179
375
|
getUploadVertices,
|
|
180
376
|
hasBindPose,
|
|
181
377
|
isGpuSkinned,
|
|
@@ -193,4 +389,8 @@ const WGPU_SKINNING_ADAPTER = {
|
|
|
193
389
|
},
|
|
194
390
|
],
|
|
195
391
|
};
|
|
392
|
+
// Texels per arena row. 256 holds a 64-joint skeleton in exactly one row for the pose palette (four
|
|
393
|
+
// texels per joint), and the row wrap is reachable by any skeleton past that — which is what keeps the
|
|
394
|
+
// multi-row path exercised by ordinary content rather than only by content nobody has.
|
|
395
|
+
const WGPU_SKIN_ARENA_WIDTH = 256;
|
|
196
396
|
//# sourceMappingURL=wgpuSkinPalette.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuSkinPalette.js","sourceRoot":"","sources":["../src/wgpuSkinPalette.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wgpuSkinPalette.js","sourceRoot":"","sources":["../src/wgpuSkinPalette.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuWireframeUpload.d.ts","sourceRoot":"","sources":["../src/wgpuWireframeUpload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAQnG,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,GAC/B,mBAAmB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"wgpuWireframeUpload.d.ts","sourceRoot":"","sources":["../src/wgpuWireframeUpload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAQnG,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,GAC/B,mBAAmB,GAAG,IAAI,CAgC5B"}
|
|
@@ -6,8 +6,6 @@ import { ensureWgpuMeshUpload } from './wgpuMeshUpload';
|
|
|
6
6
|
// index yields two line indices), so the renderer draws a sub-range of this buffer.
|
|
7
7
|
export function ensureWgpuWireframeUpload(state, geometry) {
|
|
8
8
|
const meshUpload = ensureWgpuMeshUpload(state, geometry);
|
|
9
|
-
if (meshUpload === null)
|
|
10
|
-
return null;
|
|
11
9
|
let perState = wireframeUploads.get(state);
|
|
12
10
|
if (perState === undefined) {
|
|
13
11
|
perState = new WeakMap();
|
|
@@ -37,17 +35,25 @@ export function ensureWgpuWireframeUpload(state, geometry) {
|
|
|
37
35
|
}
|
|
38
36
|
// Builds the line-list index array (two indices per triangle edge, three edges per triangle) from a
|
|
39
37
|
// geometry's triangle indices. Promotes to Uint32 when any line index exceeds the Uint16 range.
|
|
38
|
+
// Builds the line-list index array (two indices per triangle edge, three edges per triangle) from a
|
|
39
|
+
// geometry's triangle indices, or from a sequential range when the geometry is non-indexed — the same
|
|
40
|
+
// split glWireframeUpload makes. Non-indexed geometry reaches here now that the mesh upload accepts it.
|
|
40
41
|
function buildLineIndices(geometry) {
|
|
41
42
|
const triangleIndices = geometry.indices;
|
|
42
|
-
const
|
|
43
|
+
const stride = geometry.layout.stride;
|
|
44
|
+
const triangleCount = triangleIndices !== null
|
|
45
|
+
? Math.floor(triangleIndices.length / 3)
|
|
46
|
+
: stride > 0
|
|
47
|
+
? Math.floor(geometry.vertices.byteLength / stride / 3)
|
|
48
|
+
: 0;
|
|
43
49
|
const lineCount = triangleCount * 6;
|
|
44
50
|
const useUint32 = triangleIndices instanceof Uint32Array || lineCount > 65535;
|
|
45
51
|
const lines = useUint32 ? new Uint32Array(lineCount) : new Uint16Array(lineCount);
|
|
46
52
|
for (let t = 0; t < triangleCount; t++) {
|
|
47
53
|
const base = t * 3;
|
|
48
|
-
const i0 = triangleIndices[base];
|
|
49
|
-
const i1 = triangleIndices[base + 1];
|
|
50
|
-
const i2 = triangleIndices[base + 2];
|
|
54
|
+
const i0 = triangleIndices !== null ? triangleIndices[base] : base;
|
|
55
|
+
const i1 = triangleIndices !== null ? triangleIndices[base + 1] : base + 1;
|
|
56
|
+
const i2 = triangleIndices !== null ? triangleIndices[base + 2] : base + 2;
|
|
51
57
|
const out = t * 6;
|
|
52
58
|
lines[out] = i0;
|
|
53
59
|
lines[out + 1] = i1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuWireframeUpload.js","sourceRoot":"","sources":["../src/wgpuWireframeUpload.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,oGAAoG;AACpG,kGAAkG;AAClG,kGAAkG;AAClG,sGAAsG;AACtG,oFAAoF;AACpF,MAAM,UAAU,yBAAyB,CACvC,KAAsB,EACtB,QAAgC;IAEhC,MAAM,UAAU,GAAG,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"wgpuWireframeUpload.js","sourceRoot":"","sources":["../src/wgpuWireframeUpload.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/scene3d-wgpu",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.1-next.1041.35b950c",
|
|
4
4
|
"author": "Joshua Granick and other contributors",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -38,24 +38,29 @@
|
|
|
38
38
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@flighthq/camera": "0.3.
|
|
42
|
-
"@flighthq/color": "0.3.
|
|
43
|
-
"@flighthq/geometry": "0.3.
|
|
44
|
-
"@flighthq/image": "0.3.
|
|
45
|
-
"@flighthq/lighting": "0.3.
|
|
46
|
-
"@flighthq/log": "0.3.
|
|
47
|
-
"@flighthq/materials": "0.3.
|
|
48
|
-
"@flighthq/node": "0.3.
|
|
49
|
-
"@flighthq/
|
|
50
|
-
"@flighthq/render
|
|
51
|
-
"@flighthq/
|
|
52
|
-
"@flighthq/
|
|
53
|
-
"@flighthq/
|
|
54
|
-
"@flighthq/
|
|
41
|
+
"@flighthq/camera": "0.3.1-next.1041.35b950c",
|
|
42
|
+
"@flighthq/color": "0.3.1-next.1041.35b950c",
|
|
43
|
+
"@flighthq/geometry": "0.3.1-next.1041.35b950c",
|
|
44
|
+
"@flighthq/image": "0.3.1-next.1041.35b950c",
|
|
45
|
+
"@flighthq/lighting": "0.3.1-next.1041.35b950c",
|
|
46
|
+
"@flighthq/log": "0.3.1-next.1041.35b950c",
|
|
47
|
+
"@flighthq/materials": "0.3.1-next.1041.35b950c",
|
|
48
|
+
"@flighthq/node": "0.3.1-next.1041.35b950c",
|
|
49
|
+
"@flighthq/registry": "0.3.1-next.1041.35b950c",
|
|
50
|
+
"@flighthq/render": "0.3.1-next.1041.35b950c",
|
|
51
|
+
"@flighthq/render-wgpu": "0.3.1-next.1041.35b950c",
|
|
52
|
+
"@flighthq/scene3d": "0.3.1-next.1041.35b950c",
|
|
53
|
+
"@flighthq/shading": "0.3.1-next.1041.35b950c",
|
|
54
|
+
"@flighthq/texture": "0.3.1-next.1041.35b950c",
|
|
55
|
+
"@flighthq/types": "0.3.1-next.1041.35b950c"
|
|
56
|
+
},
|
|
57
|
+
"peerDependencies": {
|
|
58
|
+
"@webgpu/types": "^0.1.70"
|
|
55
59
|
},
|
|
56
60
|
"devDependencies": {
|
|
57
61
|
"@flighthq/mesh": "*",
|
|
58
62
|
"@flighthq/particleemitter": "*",
|
|
63
|
+
"@webgpu/types": "*",
|
|
59
64
|
"typescript": "^5.3.0"
|
|
60
65
|
},
|
|
61
66
|
"description": "WebGPU 3D scene renderer",
|
|
@@ -2,7 +2,12 @@ import { createCamera3D } from '@flighthq/camera/contract';
|
|
|
2
2
|
import { createMatrix3, createMatrix4 } from '@flighthq/geometry/contract';
|
|
3
3
|
import { createCustomShaderMaterial } from '@flighthq/materials/contract';
|
|
4
4
|
import { createBoxMeshGeometry } from '@flighthq/mesh/contract';
|
|
5
|
-
import {
|
|
5
|
+
import { getRegistryTableEntry } from '@flighthq/registry/contract';
|
|
6
|
+
import {
|
|
7
|
+
copyWgpuRenderStateRegistrations,
|
|
8
|
+
getWgpuRenderStateRuntime,
|
|
9
|
+
registerWgpuImageTextureResolver,
|
|
10
|
+
} from '@flighthq/render-wgpu/contract';
|
|
6
11
|
import { createTexture } from '@flighthq/texture/contract';
|
|
7
12
|
import type { Camera3D, Image, Scene3DLightBlock, Scene3DRenderProxy } from '@flighthq/types/contract';
|
|
8
13
|
import { CustomShaderMaterialKind, ImageTextureSourceKind } from '@flighthq/types/contract';
|
|
@@ -14,6 +19,7 @@ import {
|
|
|
14
19
|
registerWgpuCustomMaterialShader,
|
|
15
20
|
} from './customShaderWgpuMeshMaterialRenderer';
|
|
16
21
|
import { getWgpuMeshMaterialRenderer } from './wgpuMeshMaterialRegistry';
|
|
22
|
+
import { getWgpuScene3DRuntime } from './wgpuScene3DRuntime';
|
|
17
23
|
import { makeWgpuScene3DState } from './wgpuScene3DTestHelper';
|
|
18
24
|
|
|
19
25
|
const SOURCE = `
|
|
@@ -200,6 +206,24 @@ describe('registerWgpuCustomMaterialShader', () => {
|
|
|
200
206
|
expect(getWgpuCustomMaterialShaderSource(state, 'ripple')).toContain('edited');
|
|
201
207
|
expect(getWgpuCustomMaterialShaderSource(state, 'missing')).toBeNull();
|
|
202
208
|
});
|
|
209
|
+
|
|
210
|
+
it('replaces the persistent table while an explicitly copied state retains its snapshot', () => {
|
|
211
|
+
const { state: screen } = makeWgpuScene3DState();
|
|
212
|
+
const { state: derived } = makeWgpuScene3DState();
|
|
213
|
+
const replacement = `${SOURCE}\n// replacement`;
|
|
214
|
+
registerWgpuCustomMaterialShader(screen, 'ripple', SOURCE);
|
|
215
|
+
const snapshot = getWgpuRenderStateRuntime(screen).registries.customMaterialShaders;
|
|
216
|
+
|
|
217
|
+
copyWgpuRenderStateRegistrations(derived, screen);
|
|
218
|
+
getWgpuScene3DRuntime(derived);
|
|
219
|
+
registerWgpuCustomMaterialShader(screen, 'ripple', replacement);
|
|
220
|
+
|
|
221
|
+
expect(getWgpuRenderStateRuntime(derived).registries.customMaterialShaders).toBe(snapshot);
|
|
222
|
+
expect(getWgpuRenderStateRuntime(screen).registries.customMaterialShaders).not.toBe(snapshot);
|
|
223
|
+
expect(getRegistryTableEntry(snapshot, 'ripple')).toBe(SOURCE);
|
|
224
|
+
expect(getWgpuCustomMaterialShaderSource(derived, 'ripple')).toBe(SOURCE);
|
|
225
|
+
expect(getWgpuCustomMaterialShaderSource(screen, 'ripple')).toBe(replacement);
|
|
226
|
+
});
|
|
203
227
|
});
|
|
204
228
|
|
|
205
229
|
describe('registerWgpuCustomShaderMaterial', () => {
|