@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.
Files changed (66) hide show
  1. package/dist/customShaderWgpuMeshMaterialRenderer.d.ts.map +1 -1
  2. package/dist/customShaderWgpuMeshMaterialRenderer.js +6 -9
  3. package/dist/customShaderWgpuMeshMaterialRenderer.js.map +1 -1
  4. package/dist/drawWgpuScene3D.d.ts.map +1 -1
  5. package/dist/drawWgpuScene3D.js +4 -2
  6. package/dist/drawWgpuScene3D.js.map +1 -1
  7. package/dist/explainWgpuScene3DCoverage.d.ts +2 -2
  8. package/dist/explainWgpuScene3DCoverage.d.ts.map +1 -1
  9. package/dist/explainWgpuScene3DCoverage.js +62 -26
  10. package/dist/explainWgpuScene3DCoverage.js.map +1 -1
  11. package/dist/wgpuClassicPrelude.js +2 -2
  12. package/dist/wgpuClassicPrelude.js.map +1 -1
  13. package/dist/wgpuMeshMaterialRegistry.d.ts.map +1 -1
  14. package/dist/wgpuMeshMaterialRegistry.js +15 -11
  15. package/dist/wgpuMeshMaterialRegistry.js.map +1 -1
  16. package/dist/wgpuMeshPipeline.d.ts +1 -1
  17. package/dist/wgpuMeshPipeline.d.ts.map +1 -1
  18. package/dist/wgpuMeshPipeline.js +39 -12
  19. package/dist/wgpuMeshPipeline.js.map +1 -1
  20. package/dist/wgpuMeshUpload.d.ts +1 -1
  21. package/dist/wgpuMeshUpload.d.ts.map +1 -1
  22. package/dist/wgpuMeshUpload.js +37 -12
  23. package/dist/wgpuMeshUpload.js.map +1 -1
  24. package/dist/wgpuParticleEmitter3D.d.ts.map +1 -1
  25. package/dist/wgpuParticleEmitter3D.js +9 -6
  26. package/dist/wgpuParticleEmitter3D.js.map +1 -1
  27. package/dist/wgpuPbrPipelineCache.d.ts.map +1 -1
  28. package/dist/wgpuPbrPipelineCache.js +2 -2
  29. package/dist/wgpuPbrPipelineCache.js.map +1 -1
  30. package/dist/wgpuScene3DRuntime.d.ts.map +1 -1
  31. package/dist/wgpuScene3DRuntime.js +18 -10
  32. package/dist/wgpuScene3DRuntime.js.map +1 -1
  33. package/dist/wgpuScene3DTestHelper.d.ts.map +1 -1
  34. package/dist/wgpuScene3DTestHelper.js +126 -6
  35. package/dist/wgpuScene3DTestHelper.js.map +1 -1
  36. package/dist/wgpuShadedModifierSnippet.d.ts.map +1 -1
  37. package/dist/wgpuShadedModifierSnippet.js +8 -11
  38. package/dist/wgpuShadedModifierSnippet.js.map +1 -1
  39. package/dist/wgpuShadedPrelude.d.ts +5 -3
  40. package/dist/wgpuShadedPrelude.d.ts.map +1 -1
  41. package/dist/wgpuShadedPrelude.js +34 -13
  42. package/dist/wgpuShadedPrelude.js.map +1 -1
  43. package/dist/wgpuShadowMap.d.ts.map +1 -1
  44. package/dist/wgpuShadowMap.js +22 -6
  45. package/dist/wgpuShadowMap.js.map +1 -1
  46. package/dist/wgpuSkinPalette.d.ts +4 -1
  47. package/dist/wgpuSkinPalette.d.ts.map +1 -1
  48. package/dist/wgpuSkinPalette.js +227 -27
  49. package/dist/wgpuSkinPalette.js.map +1 -1
  50. package/dist/wgpuWireframeUpload.d.ts.map +1 -1
  51. package/dist/wgpuWireframeUpload.js +12 -6
  52. package/dist/wgpuWireframeUpload.js.map +1 -1
  53. package/package.json +20 -15
  54. package/src/customShaderWgpuMeshMaterialRenderer.test.ts +25 -1
  55. package/src/explainWgpuScene3DCoverage.test.ts +44 -10
  56. package/src/wgpuMeshMaterialRegistry.test.ts +22 -0
  57. package/src/wgpuMeshPipeline.test.ts +34 -1
  58. package/src/wgpuMeshUpload.test.ts +65 -3
  59. package/src/wgpuParticleEmitter3D.test.ts +23 -0
  60. package/src/wgpuScene3DRuntime.test.ts +8 -4
  61. package/src/wgpuScene3DTestHelper.test.ts +84 -0
  62. package/src/wgpuShadedModifierSnippet.test.ts +20 -6
  63. package/src/wgpuShadedPrelude.test.ts +6 -6
  64. package/src/wgpuShadowMap.test.ts +30 -0
  65. package/src/wgpuSkinPalette.test.ts +134 -19
  66. 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 uploadWgpuSkinPalette(state: WgpuRenderState, jointMatrices: Readonly<Float32Array>): GPUTextureView;
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,CAOnE;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;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEpE;AAKD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,cAAc,CAsBnH"}
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"}
@@ -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.skinPaletteCapacity = 0;
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
- const previousView = scene.skinPaletteView;
16
- const view = uploadWgpuSkinPalette(state, jointMatrices);
17
- if (scene.skinDrawBindGroup === null || previousView !== view) {
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 one flat column-major joint palette into the state-scoped single-row RGBA32F data texture.
52
- // Four consecutive texels encode one mat4. Storage grows to the largest skeleton observed and is
53
- // otherwise rewritten in place; there is deliberately no uniform-budget capacity gate or CPU fallback.
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
- const jointCount = (jointMatrices.length / 16) | 0;
57
- const width = jointCount * 4;
58
- if (runtime.skinPaletteTexture === null || jointCount > runtime.skinPaletteCapacity) {
59
- runtime.skinPaletteTexture?.destroy();
60
- runtime.skinPaletteTexture = state.device.createTexture({
61
- size: [width, 1, 1],
62
- format: 'rgba32float',
63
- usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING,
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.skinPaletteCapacity = jointCount;
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 = (skin * vec4f(localNormal, 0.0)).xyz;
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 = i32(joint * 4u);
311
+ let x = u32(draw.params.z) + joint * 4u;
118
312
  return mat4x4f(
119
- textureLoad(jointTexture, vec2i(x, 0), 0),
120
- textureLoad(jointTexture, vec2i(x + 1, 0), 0),
121
- textureLoad(jointTexture, vec2i(x + 2, 0), 0),
122
- textureLoad(jointTexture, vec2i(x + 3, 0), 0)
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,CAiC5B"}
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 triangleCount = Math.floor(triangleIndices.length / 3);
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":"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"}
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.0",
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.0",
42
- "@flighthq/color": "0.3.0",
43
- "@flighthq/geometry": "0.3.0",
44
- "@flighthq/image": "0.3.0",
45
- "@flighthq/lighting": "0.3.0",
46
- "@flighthq/log": "0.3.0",
47
- "@flighthq/materials": "0.3.0",
48
- "@flighthq/node": "0.3.0",
49
- "@flighthq/render": "0.3.0",
50
- "@flighthq/render-wgpu": "0.3.0",
51
- "@flighthq/scene3d": "0.3.0",
52
- "@flighthq/shading": "0.3.0",
53
- "@flighthq/texture": "0.3.0",
54
- "@flighthq/types": "0.3.0"
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 { registerWgpuImageTextureResolver } from '@flighthq/render-wgpu/contract';
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', () => {