@flighthq/scene3d-wgpu 0.2.1-next.840.857425c
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/anisotropyPbrWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/anisotropyPbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/anisotropyPbrWgpuMeshMaterialRenderer.js +52 -0
- package/dist/anisotropyPbrWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/blinnPhongWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/blinnPhongWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/blinnPhongWgpuMeshMaterialRenderer.js +66 -0
- package/dist/blinnPhongWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/clearcoatPbrWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/clearcoatPbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/clearcoatPbrWgpuMeshMaterialRenderer.js +52 -0
- package/dist/clearcoatPbrWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/customShaderWgpuMeshMaterialRenderer.d.ts +7 -0
- package/dist/customShaderWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/customShaderWgpuMeshMaterialRenderer.js +225 -0
- package/dist/customShaderWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/depthWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/depthWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/depthWgpuMeshMaterialRenderer.js +42 -0
- package/dist/depthWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/drawWgpuScene3D.d.ts +4 -0
- package/dist/drawWgpuScene3D.d.ts.map +1 -0
- package/dist/drawWgpuScene3D.js +171 -0
- package/dist/drawWgpuScene3D.js.map +1 -0
- package/dist/emissiveWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/emissiveWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/emissiveWgpuMeshMaterialRenderer.js +51 -0
- package/dist/emissiveWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/enableWgpuScene3DCustomShaderGuards.d.ts +5 -0
- package/dist/enableWgpuScene3DCustomShaderGuards.d.ts.map +1 -0
- package/dist/enableWgpuScene3DCustomShaderGuards.js +56 -0
- package/dist/enableWgpuScene3DCustomShaderGuards.js.map +1 -0
- package/dist/enableWgpuScene3DForwardLightSelectionGuards.d.ts +4 -0
- package/dist/enableWgpuScene3DForwardLightSelectionGuards.d.ts.map +1 -0
- package/dist/enableWgpuScene3DForwardLightSelectionGuards.js +17 -0
- package/dist/enableWgpuScene3DForwardLightSelectionGuards.js.map +1 -0
- package/dist/explainWgpuScene3DForwardLightSelection.d.ts +3 -0
- package/dist/explainWgpuScene3DForwardLightSelection.d.ts.map +1 -0
- package/dist/explainWgpuScene3DForwardLightSelection.js +18 -0
- package/dist/explainWgpuScene3DForwardLightSelection.js.map +1 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/iridescencePbrWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/iridescencePbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/iridescencePbrWgpuMeshMaterialRenderer.js +60 -0
- package/dist/iridescencePbrWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/lambertWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/lambertWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/lambertWgpuMeshMaterialRenderer.js +61 -0
- package/dist/lambertWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/matcapWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/matcapWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/matcapWgpuMeshMaterialRenderer.js +54 -0
- package/dist/matcapWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/normalWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/normalWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/normalWgpuMeshMaterialRenderer.js +47 -0
- package/dist/normalWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/phongWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/phongWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/phongWgpuMeshMaterialRenderer.js +63 -0
- package/dist/phongWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/prepareWgpuScene3DForwardLights.d.ts +3 -0
- package/dist/prepareWgpuScene3DForwardLights.d.ts.map +1 -0
- package/dist/prepareWgpuScene3DForwardLights.js +110 -0
- package/dist/prepareWgpuScene3DForwardLights.js.map +1 -0
- package/dist/registerStandardPbrWgpuMaterial.d.ts +3 -0
- package/dist/registerStandardPbrWgpuMaterial.d.ts.map +1 -0
- package/dist/registerStandardPbrWgpuMaterial.js +11 -0
- package/dist/registerStandardPbrWgpuMaterial.js.map +1 -0
- package/dist/shadedWgpuMeshMaterialRenderer.d.ts +11 -0
- package/dist/shadedWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/shadedWgpuMeshMaterialRenderer.js +47 -0
- package/dist/shadedWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/sheenPbrWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/sheenPbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/sheenPbrWgpuMeshMaterialRenderer.js +58 -0
- package/dist/sheenPbrWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/specularGlossinessPbrWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/specularGlossinessPbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/specularGlossinessPbrWgpuMeshMaterialRenderer.js +126 -0
- package/dist/specularGlossinessPbrWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/specularPbrWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/specularPbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/specularPbrWgpuMeshMaterialRenderer.js +65 -0
- package/dist/specularPbrWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/standardPbrWgpuMeshMaterialRenderer.d.ts +9 -0
- package/dist/standardPbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/standardPbrWgpuMeshMaterialRenderer.js +174 -0
- package/dist/standardPbrWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/subsurfacePbrWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/subsurfacePbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/subsurfacePbrWgpuMeshMaterialRenderer.js +68 -0
- package/dist/subsurfacePbrWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/toonWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/toonWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/toonWgpuMeshMaterialRenderer.js +71 -0
- package/dist/toonWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/transmissionVolumePbrWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/transmissionVolumePbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/transmissionVolumePbrWgpuMeshMaterialRenderer.js +74 -0
- package/dist/transmissionVolumePbrWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/unlitWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/unlitWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/unlitWgpuMeshMaterialRenderer.js +57 -0
- package/dist/unlitWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/vertexColorWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/vertexColorWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/vertexColorWgpuMeshMaterialRenderer.js +55 -0
- package/dist/vertexColorWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/wgpuClassicPrelude.d.ts +8 -0
- package/dist/wgpuClassicPrelude.d.ts.map +1 -0
- package/dist/wgpuClassicPrelude.js +319 -0
- package/dist/wgpuClassicPrelude.js.map +1 -0
- package/dist/wgpuCustomMaterialAbi.d.ts +3 -0
- package/dist/wgpuCustomMaterialAbi.d.ts.map +1 -0
- package/dist/wgpuCustomMaterialAbi.js +5 -0
- package/dist/wgpuCustomMaterialAbi.js.map +1 -0
- package/dist/wgpuDebugPrelude.d.ts +7 -0
- package/dist/wgpuDebugPrelude.d.ts.map +1 -0
- package/dist/wgpuDebugPrelude.js +133 -0
- package/dist/wgpuDebugPrelude.js.map +1 -0
- package/dist/wgpuEnvironmentCube.d.ts +4 -0
- package/dist/wgpuEnvironmentCube.d.ts.map +1 -0
- package/dist/wgpuEnvironmentCube.js +66 -0
- package/dist/wgpuEnvironmentCube.js.map +1 -0
- package/dist/wgpuEnvironmentIblBake.d.ts +4 -0
- package/dist/wgpuEnvironmentIblBake.d.ts.map +1 -0
- package/dist/wgpuEnvironmentIblBake.js +458 -0
- package/dist/wgpuEnvironmentIblBake.js.map +1 -0
- package/dist/wgpuEnvironmentSkybox.d.ts +3 -0
- package/dist/wgpuEnvironmentSkybox.d.ts.map +1 -0
- package/dist/wgpuEnvironmentSkybox.js +159 -0
- package/dist/wgpuEnvironmentSkybox.js.map +1 -0
- package/dist/wgpuMatcapPrelude.d.ts +7 -0
- package/dist/wgpuMatcapPrelude.d.ts.map +1 -0
- package/dist/wgpuMatcapPrelude.js +134 -0
- package/dist/wgpuMatcapPrelude.js.map +1 -0
- package/dist/wgpuMeshMaterialRegistry.d.ts +5 -0
- package/dist/wgpuMeshMaterialRegistry.d.ts.map +1 -0
- package/dist/wgpuMeshMaterialRegistry.js +29 -0
- package/dist/wgpuMeshMaterialRegistry.js.map +1 -0
- package/dist/wgpuMeshPipeline.d.ts +43 -0
- package/dist/wgpuMeshPipeline.d.ts.map +1 -0
- package/dist/wgpuMeshPipeline.js +1007 -0
- package/dist/wgpuMeshPipeline.js.map +1 -0
- package/dist/wgpuMeshUpload.d.ts +3 -0
- package/dist/wgpuMeshUpload.d.ts.map +1 -0
- package/dist/wgpuMeshUpload.js +58 -0
- package/dist/wgpuMeshUpload.js.map +1 -0
- package/dist/wgpuParticleEmitter3D.d.ts +4 -0
- package/dist/wgpuParticleEmitter3D.d.ts.map +1 -0
- package/dist/wgpuParticleEmitter3D.js +403 -0
- package/dist/wgpuParticleEmitter3D.js.map +1 -0
- package/dist/wgpuPbrPipelineCache.d.ts +4 -0
- package/dist/wgpuPbrPipelineCache.d.ts.map +1 -0
- package/dist/wgpuPbrPipelineCache.js +52 -0
- package/dist/wgpuPbrPipelineCache.js.map +1 -0
- package/dist/wgpuPbrPrelude.d.ts +7 -0
- package/dist/wgpuPbrPrelude.d.ts.map +1 -0
- package/dist/wgpuPbrPrelude.js +551 -0
- package/dist/wgpuPbrPrelude.js.map +1 -0
- package/dist/wgpuScene3DRuntime.d.ts +5 -0
- package/dist/wgpuScene3DRuntime.d.ts.map +1 -0
- package/dist/wgpuScene3DRuntime.js +81 -0
- package/dist/wgpuScene3DRuntime.js.map +1 -0
- package/dist/wgpuScene3DTestHelper.d.ts +14 -0
- package/dist/wgpuScene3DTestHelper.d.ts.map +1 -0
- package/dist/wgpuScene3DTestHelper.js +121 -0
- package/dist/wgpuScene3DTestHelper.js.map +1 -0
- package/dist/wgpuScene3DTime.d.ts +4 -0
- package/dist/wgpuScene3DTime.d.ts.map +1 -0
- package/dist/wgpuScene3DTime.js +11 -0
- package/dist/wgpuScene3DTime.js.map +1 -0
- package/dist/wgpuShadedModifierSnippet.d.ts +4 -0
- package/dist/wgpuShadedModifierSnippet.d.ts.map +1 -0
- package/dist/wgpuShadedModifierSnippet.js +18 -0
- package/dist/wgpuShadedModifierSnippet.js.map +1 -0
- package/dist/wgpuShadedPrelude.d.ts +16 -0
- package/dist/wgpuShadedPrelude.d.ts.map +1 -0
- package/dist/wgpuShadedPrelude.js +625 -0
- package/dist/wgpuShadedPrelude.js.map +1 -0
- package/dist/wgpuShadowMap.d.ts +4 -0
- package/dist/wgpuShadowMap.d.ts.map +1 -0
- package/dist/wgpuShadowMap.js +155 -0
- package/dist/wgpuShadowMap.js.map +1 -0
- package/dist/wgpuSkinPalette.d.ts +7 -0
- package/dist/wgpuSkinPalette.d.ts.map +1 -0
- package/dist/wgpuSkinPalette.js +173 -0
- package/dist/wgpuSkinPalette.js.map +1 -0
- package/dist/wgpuToonPrelude.d.ts +8 -0
- package/dist/wgpuToonPrelude.d.ts.map +1 -0
- package/dist/wgpuToonPrelude.js +192 -0
- package/dist/wgpuToonPrelude.js.map +1 -0
- package/dist/wgpuUnlitPrelude.d.ts +9 -0
- package/dist/wgpuUnlitPrelude.d.ts.map +1 -0
- package/dist/wgpuUnlitPrelude.js +142 -0
- package/dist/wgpuUnlitPrelude.js.map +1 -0
- package/dist/wgpuWireframePrelude.d.ts +6 -0
- package/dist/wgpuWireframePrelude.d.ts.map +1 -0
- package/dist/wgpuWireframePrelude.js +77 -0
- package/dist/wgpuWireframePrelude.js.map +1 -0
- package/dist/wgpuWireframeUpload.d.ts +3 -0
- package/dist/wgpuWireframeUpload.d.ts.map +1 -0
- package/dist/wgpuWireframeUpload.js +68 -0
- package/dist/wgpuWireframeUpload.js.map +1 -0
- package/dist/wireframeWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/wireframeWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/wireframeWgpuMeshMaterialRenderer.js +69 -0
- package/dist/wireframeWgpuMeshMaterialRenderer.js.map +1 -0
- package/package.json +57 -0
- package/src/anisotropyPbrWgpuMeshMaterialRenderer.test.ts +90 -0
- package/src/blinnPhongWgpuMeshMaterialRenderer.test.ts +82 -0
- package/src/clearcoatPbrWgpuMeshMaterialRenderer.test.ts +90 -0
- package/src/customShaderWgpuMeshMaterialRenderer.test.ts +207 -0
- package/src/depthWgpuMeshMaterialRenderer.test.ts +69 -0
- package/src/drawWgpuScene3D.test.ts +247 -0
- package/src/emissiveWgpuMeshMaterialRenderer.test.ts +64 -0
- package/src/enableWgpuScene3DCustomShaderGuards.test.ts +73 -0
- package/src/enableWgpuScene3DForwardLightSelectionGuards.test.ts +39 -0
- package/src/explainWgpuScene3DForwardLightSelection.test.ts +15 -0
- package/src/iridescencePbrWgpuMeshMaterialRenderer.test.ts +90 -0
- package/src/lambertWgpuMeshMaterialRenderer.test.ts +77 -0
- package/src/matcapWgpuMeshMaterialRenderer.test.ts +69 -0
- package/src/normalWgpuMeshMaterialRenderer.test.ts +69 -0
- package/src/phongWgpuMeshMaterialRenderer.test.ts +79 -0
- package/src/prepareWgpuScene3DForwardLights.test.ts +84 -0
- package/src/registerStandardPbrWgpuMaterial.test.ts +15 -0
- package/src/shadedWgpuMeshMaterialRenderer.test.ts +63 -0
- package/src/sheenPbrWgpuMeshMaterialRenderer.test.ts +87 -0
- package/src/specularGlossinessPbrWgpuMeshMaterialRenderer.test.ts +100 -0
- package/src/specularPbrWgpuMeshMaterialRenderer.test.ts +90 -0
- package/src/standardPbrWgpuMeshMaterialRenderer.test.ts +172 -0
- package/src/subsurfacePbrWgpuMeshMaterialRenderer.test.ts +90 -0
- package/src/toonWgpuMeshMaterialRenderer.test.ts +89 -0
- package/src/transmissionVolumePbrWgpuMeshMaterialRenderer.test.ts +97 -0
- package/src/unlitWgpuMeshMaterialRenderer.test.ts +94 -0
- package/src/vertexColorWgpuMeshMaterialRenderer.test.ts +62 -0
- package/src/wgpuClassicPrelude.test.ts +176 -0
- package/src/wgpuDebugPrelude.test.ts +79 -0
- package/src/wgpuEnvironmentCube.test.ts +86 -0
- package/src/wgpuEnvironmentIblBake.test.ts +79 -0
- package/src/wgpuEnvironmentSkybox.test.ts +56 -0
- package/src/wgpuMatcapPrelude.test.ts +70 -0
- package/src/wgpuMeshMaterialRegistry.test.ts +55 -0
- package/src/wgpuMeshPipeline.test.ts +844 -0
- package/src/wgpuMeshUpload.test.ts +177 -0
- package/src/wgpuParticleEmitter3D.test.ts +200 -0
- package/src/wgpuPbrPipelineCache.test.ts +67 -0
- package/src/wgpuPbrPrelude.test.ts +162 -0
- package/src/wgpuScene3DRuntime.test.ts +35 -0
- package/src/wgpuScene3DTime.test.ts +20 -0
- package/src/wgpuShadedModifierSnippet.test.ts +33 -0
- package/src/wgpuShadedPrelude.test.ts +394 -0
- package/src/wgpuShadowMap.test.ts +169 -0
- package/src/wgpuSkinPalette.test.ts +88 -0
- package/src/wgpuToonPrelude.test.ts +93 -0
- package/src/wgpuUnlitPrelude.test.ts +102 -0
- package/src/wgpuWireframePrelude.test.ts +54 -0
- package/src/wgpuWireframeUpload.test.ts +36 -0
- package/src/wireframeWgpuMeshMaterialRenderer.test.ts +69 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { createMatrix3, createMatrix4, setMatrix3NormalFromMatrix4 } from '@flighthq/geometry';
|
|
2
|
+
import { getNodeWorldMatrix4 } from '@flighthq/node';
|
|
3
|
+
import { prepareScene3DRender } from '@flighthq/render';
|
|
4
|
+
import { declareWgpuRenderTargetColorSpace } from '@flighthq/render-wgpu';
|
|
5
|
+
import { getNode3DWorldAlpha } from '@flighthq/scene3d';
|
|
6
|
+
import { DefaultMaterialKind, MAX_FORWARD_LIGHTS } from '@flighthq/types';
|
|
7
|
+
import { resolveWgpuMeshMaterialRenderer } from './wgpuMeshMaterialRegistry';
|
|
8
|
+
import { drawWgpuScene3DParticleEmitter3Ds } from './wgpuParticleEmitter3D';
|
|
9
|
+
import { getWgpuScene3DRuntime } from './wgpuScene3DRuntime';
|
|
10
|
+
// Draws a prepared 3D scene on the Wgpu backend — the WGSL mirror of scene-gl's drawGlScene3D. The app
|
|
11
|
+
// runs prepareScene3DRender(state, scene, camera, lights) first (resolving world matrices, the camera
|
|
12
|
+
// view-projection, frustum culling, and the packed light block into the per-state Scene3DRenderList);
|
|
13
|
+
// drawWgpuScene3D retrieves that same cached list (prepareScene3DRender is idempotent per-state scratch) and,
|
|
14
|
+
// for each visible Mesh, draws each of its geometry subsets with the subset's resolved material's
|
|
15
|
+
// registered mesh-material renderer.
|
|
16
|
+
//
|
|
17
|
+
// The draw is two-phased for correct alpha compositing: opaque/masked subsets first in scene order,
|
|
18
|
+
// then blended-material or faded-object subsets back-to-front. The second pass selects immutable
|
|
19
|
+
// blended pipeline variants (src-alpha / one-minus-src-alpha, depth test on, depth writes off).
|
|
20
|
+
//
|
|
21
|
+
// Subsets sharing the same resolved renderer + material are drawn under a single bind (the seam's
|
|
22
|
+
// "contiguous run" contract): bind uploads the shared camera + light + material state once, then draw
|
|
23
|
+
// issues the per-subset indexed draw. A subset whose material resolves to no renderer (and no
|
|
24
|
+
// DefaultMaterialKind fallback) is skipped — no built-in fallback. Depth/cull state is owned by the
|
|
25
|
+
// material renderer's pipeline; the surrounding rgba16float scene render pass + depth attachment is
|
|
26
|
+
// the effect pipeline's, not drawWgpuScene3D's. Must run inside an open render pass.
|
|
27
|
+
export function drawWgpuScene3D(state, scene, camera, lights, forwardLights) {
|
|
28
|
+
const list = prepareScene3DRender(state, scene, camera, lights);
|
|
29
|
+
const lightBlock = list.lights;
|
|
30
|
+
const viewProjection = list.viewProjection;
|
|
31
|
+
const runtime = getWgpuScene3DRuntime(state);
|
|
32
|
+
declareWgpuRenderTargetColorSpace(state, 'linear');
|
|
33
|
+
const hasPreparedForwardLights = forwardLights !== undefined && forwardLights.meshCount === list.meshCount;
|
|
34
|
+
if (!hasPreparedForwardLights && hasExcessForwardLights(lights))
|
|
35
|
+
runtime.forwardLightSelectionGuard?.(lights);
|
|
36
|
+
const opaqueDrawList = runtime.opaqueDrawList;
|
|
37
|
+
const blendedDrawList = runtime.blendedDrawList;
|
|
38
|
+
recycleDrawEntries(opaqueDrawList, runtime.opaquePool);
|
|
39
|
+
recycleDrawEntries(blendedDrawList, runtime.blendedPool);
|
|
40
|
+
for (let m = 0; m < list.meshCount; m++) {
|
|
41
|
+
const mesh = list.visibleMeshes[m];
|
|
42
|
+
const subsets = mesh.geometry.subsets;
|
|
43
|
+
const worldMatrix = getNodeWorldMatrix4(mesh);
|
|
44
|
+
const wx = worldMatrix.m[12];
|
|
45
|
+
const wy = worldMatrix.m[13];
|
|
46
|
+
const wz = worldMatrix.m[14];
|
|
47
|
+
const vp = viewProjection.m;
|
|
48
|
+
const clipW = vp[3] * wx + vp[7] * wy + vp[11] * wz + vp[15];
|
|
49
|
+
const clipZ = vp[2] * wx + vp[6] * wy + vp[10] * wz + vp[14];
|
|
50
|
+
const objectAlpha = getNode3DWorldAlpha(mesh);
|
|
51
|
+
for (let s = 0; s < subsets.length; s++) {
|
|
52
|
+
const material = resolveSubsetMaterial(mesh, s);
|
|
53
|
+
const renderer = resolveWgpuMeshMaterialRenderer(state, material);
|
|
54
|
+
if (renderer === null)
|
|
55
|
+
continue;
|
|
56
|
+
const resolvedMaterial = material ?? DEFAULT_MATERIAL;
|
|
57
|
+
const blended = isBlendedMaterial(resolvedMaterial) || objectAlpha < 1;
|
|
58
|
+
const entry = acquireDrawEntry(blended ? runtime.blendedPool : runtime.opaquePool);
|
|
59
|
+
entry.alpha = objectAlpha;
|
|
60
|
+
entry.depth = clipZ / clipW;
|
|
61
|
+
entry.lightBlock = hasPreparedForwardLights ? forwardLights.meshLightBlocks[m] : lightBlock;
|
|
62
|
+
entry.material = resolvedMaterial;
|
|
63
|
+
entry.mesh = mesh;
|
|
64
|
+
entry.renderer = renderer;
|
|
65
|
+
entry.subset = subsets[s];
|
|
66
|
+
entry.worldMatrix = worldMatrix;
|
|
67
|
+
(blended ? blendedDrawList : opaqueDrawList).push(entry);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
drawEntries(state, opaqueDrawList, camera, false);
|
|
71
|
+
if (blendedDrawList.length > 0) {
|
|
72
|
+
blendedDrawList.sort(compareBlendedEntriesDescending);
|
|
73
|
+
drawEntries(state, blendedDrawList, camera, true);
|
|
74
|
+
}
|
|
75
|
+
// ParticleEmitter3D nodes carry no geometry, so prepareScene3DRender never lists them among the
|
|
76
|
+
// visible meshes above. Draw them here as a final transparent instanced pass so the common
|
|
77
|
+
// drawWgpuScene3D path renders a scene's emitters without the caller also invoking the emitter pass
|
|
78
|
+
// by hand — mirroring drawGlScene3D. drawWgpuScene3DParticleEmitter3Ds stays exported for manual ordering;
|
|
79
|
+
// it early-returns when the scene has no emitters, so the mesh-only path is unaffected. Runs inside
|
|
80
|
+
// this still-open render pass (it reads the pass off the render-state runtime).
|
|
81
|
+
drawWgpuScene3DParticleEmitter3Ds(state, scene, camera, lights);
|
|
82
|
+
runtime.activeBlendedRun = false;
|
|
83
|
+
runtime.activeSkinnedRun = false;
|
|
84
|
+
}
|
|
85
|
+
export function isWgpuMeshGpuSkinned(state, mesh) {
|
|
86
|
+
const skinning = getWgpuScene3DRuntime(state).skinningAdapter;
|
|
87
|
+
return skinning !== null && skinning.isGpuSkinned(mesh);
|
|
88
|
+
}
|
|
89
|
+
function drawEntries(state, entries, camera, blended) {
|
|
90
|
+
const runtime = getWgpuScene3DRuntime(state);
|
|
91
|
+
runtime.activeBlendedRun = blended;
|
|
92
|
+
let boundMaterial;
|
|
93
|
+
let boundLightBlock = null;
|
|
94
|
+
let boundRenderer = null;
|
|
95
|
+
let boundSkinned;
|
|
96
|
+
for (let i = 0; i < entries.length; i++) {
|
|
97
|
+
const entry = entries[i];
|
|
98
|
+
const worldMatrix = entry.worldMatrix;
|
|
99
|
+
setMatrix3NormalFromMatrix4(scratchNormalMatrix, worldMatrix);
|
|
100
|
+
const skinned = isWgpuMeshGpuSkinned(state, entry.mesh);
|
|
101
|
+
if (entry.renderer !== boundRenderer ||
|
|
102
|
+
entry.material !== boundMaterial ||
|
|
103
|
+
entry.lightBlock !== boundLightBlock ||
|
|
104
|
+
skinned !== boundSkinned) {
|
|
105
|
+
runtime.activeSkinnedRun = skinned;
|
|
106
|
+
entry.renderer.bind(state, entry.material, entry.lightBlock, camera);
|
|
107
|
+
boundRenderer = entry.renderer;
|
|
108
|
+
boundMaterial = entry.material;
|
|
109
|
+
boundLightBlock = entry.lightBlock;
|
|
110
|
+
boundSkinned = skinned;
|
|
111
|
+
}
|
|
112
|
+
proxy.alpha = entry.alpha;
|
|
113
|
+
proxy.jointMatrices = skinned ? entry.mesh.skin.skeleton.jointMatrices : null;
|
|
114
|
+
proxy.material = entry.material;
|
|
115
|
+
proxy.normalMatrix = scratchNormalMatrix;
|
|
116
|
+
proxy.subset = entry.subset;
|
|
117
|
+
proxy.worldMatrix = worldMatrix;
|
|
118
|
+
entry.renderer.draw(state, proxy, entry.mesh.geometry);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function isBlendedMaterial(material) {
|
|
122
|
+
return material.alphaMode === 'blend';
|
|
123
|
+
}
|
|
124
|
+
function hasExcessForwardLights(lights) {
|
|
125
|
+
return (lights.point?.length ?? 0) > MAX_FORWARD_LIGHTS || (lights.spot?.length ?? 0) > MAX_FORWARD_LIGHTS;
|
|
126
|
+
}
|
|
127
|
+
// Resolves the Material for a subset index: the positional materials[i] entry, or null when the
|
|
128
|
+
// slot is absent/null (the registry then falls back to DefaultMaterialKind, or skips the subset).
|
|
129
|
+
function resolveSubsetMaterial(mesh, subsetIndex) {
|
|
130
|
+
const materials = mesh.materials;
|
|
131
|
+
return subsetIndex < materials.length ? materials[subsetIndex] : null;
|
|
132
|
+
}
|
|
133
|
+
function compareBlendedEntriesDescending(a, b) {
|
|
134
|
+
return b.depth - a.depth;
|
|
135
|
+
}
|
|
136
|
+
function acquireDrawEntry(pool) {
|
|
137
|
+
if (pool.length > 0)
|
|
138
|
+
return pool.pop();
|
|
139
|
+
return createDrawEntry();
|
|
140
|
+
}
|
|
141
|
+
function recycleDrawEntries(entries, pool) {
|
|
142
|
+
while (entries.length > 0)
|
|
143
|
+
pool.push(entries.pop());
|
|
144
|
+
}
|
|
145
|
+
function createDrawEntry() {
|
|
146
|
+
return {
|
|
147
|
+
alpha: 1,
|
|
148
|
+
depth: 0,
|
|
149
|
+
lightBlock: null,
|
|
150
|
+
material: DEFAULT_MATERIAL,
|
|
151
|
+
mesh: null,
|
|
152
|
+
renderer: null,
|
|
153
|
+
subset: { indexCount: 0, indexOffset: 0 },
|
|
154
|
+
worldMatrix: createMatrix4(),
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
// The reused per-draw proxy handed to a renderer's draw. Owned by drawWgpuScene3D, valid only for the
|
|
158
|
+
// duration of the draw call it is passed to; renderers must not retain it.
|
|
159
|
+
const proxy = {
|
|
160
|
+
alpha: 1,
|
|
161
|
+
jointMatrices: null,
|
|
162
|
+
material: { kind: DefaultMaterialKind },
|
|
163
|
+
normalMatrix: createMatrix3(),
|
|
164
|
+
subset: { indexCount: 0, indexOffset: 0 },
|
|
165
|
+
worldMatrix: createMatrix4(),
|
|
166
|
+
};
|
|
167
|
+
// Placeholder material for proxy.material when a subset resolved to the default-kind fallback with
|
|
168
|
+
// no concrete material; the renderer treats a default/null material as its untextured defaults.
|
|
169
|
+
const DEFAULT_MATERIAL = { kind: DefaultMaterialKind };
|
|
170
|
+
const scratchNormalMatrix = createMatrix3();
|
|
171
|
+
//# sourceMappingURL=drawWgpuScene3D.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drawWgpuScene3D.js","sourceRoot":"","sources":["../src/drawWgpuScene3D.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { WgpuMeshMaterialRenderer, WgpuRenderState } from '@flighthq/types';
|
|
2
|
+
export declare const emissiveWgpuMeshMaterialRenderer: WgpuMeshMaterialRenderer;
|
|
3
|
+
export declare function registerEmissiveWgpuMaterial(state: WgpuRenderState): void;
|
|
4
|
+
//# sourceMappingURL=emissiveWgpuMeshMaterialRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emissiveWgpuMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/emissiveWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAQV,wBAAwB,EACxB,eAAe,EAEhB,MAAM,iBAAiB,CAAC;AAWzB,eAAO,MAAM,gCAAgC,EAAE,wBAuC9C,CAAC;AAIF,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEzE"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { unpackColorToLinear } from '@flighthq/color';
|
|
2
|
+
import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
|
|
3
|
+
import { EmissiveMaterialKind } from '@flighthq/types';
|
|
4
|
+
import { registerWgpuMeshMaterialRenderer } from './wgpuMeshMaterialRegistry';
|
|
5
|
+
import { beginWgpuMeshDraw, drawWgpuMeshSubset, isWgpuTextureReady, writeWgpuFrameUniform } from './wgpuMeshPipeline';
|
|
6
|
+
import { bindWgpuUnlitSurface, ensureWgpuUnlitPipeline } from './wgpuUnlitPrelude';
|
|
7
|
+
// The built-in Emissive forward renderer (WgpuMeshMaterialRenderer for EmissiveMaterialKind) — the WGSL
|
|
8
|
+
// mirror of emissiveGlMeshMaterialRenderer. Self-illuminating, lighting-independent: binds the linear
|
|
9
|
+
// emissive color scaled by emissiveStrength through the shared unlit pipeline (values > 1 drive bloom
|
|
10
|
+
// over the rgba16float scene target). See registerEmissiveWgpuMaterial.
|
|
11
|
+
export const emissiveWgpuMeshMaterialRenderer = {
|
|
12
|
+
bind(state, material, _lights, camera) {
|
|
13
|
+
const stateRuntime = getWgpuRenderStateRuntime(state);
|
|
14
|
+
const pass = stateRuntime.renderPass;
|
|
15
|
+
if (pass === null)
|
|
16
|
+
return;
|
|
17
|
+
const emissive = material;
|
|
18
|
+
const format = stateRuntime.currentColorFormat ?? state.format;
|
|
19
|
+
const pipeline = ensureWgpuUnlitPipeline(state, defineKeyForMaterial(emissive), format);
|
|
20
|
+
writeWgpuFrameUniform(state, camera, _lights);
|
|
21
|
+
let group;
|
|
22
|
+
if (emissive === null) {
|
|
23
|
+
group = bindWgpuUnlitSurface(state, pipeline, FALLBACK_MATERIAL, WHITE, 1, 0.5, null);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
unpackColorToLinear(_scratch, emissive.emissive);
|
|
27
|
+
group = bindWgpuUnlitSurface(state, pipeline, emissive, _scratch, emissive.emissiveStrength, emissive.alphaCutoff, emissive.emissiveMap);
|
|
28
|
+
}
|
|
29
|
+
beginWgpuMeshDraw(state, pipeline);
|
|
30
|
+
pass.setBindGroup(2, group);
|
|
31
|
+
},
|
|
32
|
+
draw(state, proxy, geometry) {
|
|
33
|
+
drawWgpuMeshSubset(state, proxy, geometry);
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
// Registers the built-in Emissive renderer for EmissiveMaterialKind on this state. Opt-in (no top-level
|
|
37
|
+
// side effect); call once per WgpuRenderState before drawWgpuScene3D so meshes with EmissiveMaterials draw.
|
|
38
|
+
export function registerEmissiveWgpuMaterial(state) {
|
|
39
|
+
registerWgpuMeshMaterialRenderer(state, EmissiveMaterialKind, emissiveWgpuMeshMaterialRenderer);
|
|
40
|
+
}
|
|
41
|
+
function defineKeyForMaterial(material) {
|
|
42
|
+
return {
|
|
43
|
+
alphaMaskEnabled: material !== null && material.alphaMode === 'mask',
|
|
44
|
+
doubleSided: material !== null && material.doubleSided,
|
|
45
|
+
hasColorMap: material !== null && isWgpuTextureReady(material.emissiveMap),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const _scratch = [0, 0, 0, 0];
|
|
49
|
+
const WHITE = [1, 1, 1, 1];
|
|
50
|
+
const FALLBACK_MATERIAL = {};
|
|
51
|
+
//# sourceMappingURL=emissiveWgpuMeshMaterialRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emissiveWgpuMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/emissiveWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAalE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,wGAAwG;AACxG,sGAAsG;AACtG,sGAAsG;AACtG,wEAAwE;AACxE,MAAM,CAAC,MAAM,gCAAgC,GAA6B;IACxE,IAAI,CACF,KAAsB,EACtB,QAAmC,EACnC,OAAoC,EACpC,MAA0B;QAE1B,MAAM,YAAY,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC;QACrC,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO;QAE1B,MAAM,QAAQ,GAAG,QAA6C,CAAC;QAC/D,MAAM,MAAM,GAAG,YAAY,CAAC,kBAAkB,IAAI,KAAK,CAAC,MAAM,CAAC;QAC/D,MAAM,QAAQ,GAAG,uBAAuB,CAAC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;QACxF,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAE9C,IAAI,KAAmB,CAAC;QACxB,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,KAAK,GAAG,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACxF,CAAC;aAAM,CAAC;YACN,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACjD,KAAK,GAAG,oBAAoB,CAC1B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,CAAC,gBAAgB,EACzB,QAAQ,CAAC,WAAW,EACpB,QAAQ,CAAC,WAAW,CACrB,CAAC;QACJ,CAAC;QAED,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,KAAsB,EAAE,KAAmC,EAAE,QAAgC;QAChG,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC;AAEF,wGAAwG;AACxG,4GAA4G;AAC5G,MAAM,UAAU,4BAA4B,CAAC,KAAsB;IACjE,gCAAgC,CAAC,KAAK,EAAE,oBAAoB,EAAE,gCAAgC,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,oBAAoB,CAAC,QAA2C;IACvE,OAAO;QACL,gBAAgB,EAAE,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,SAAS,KAAK,MAAM;QACpE,WAAW,EAAE,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,WAAW;QACtD,WAAW,EAAE,QAAQ,KAAK,IAAI,IAAI,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC;KAC3E,CAAC;AACJ,CAAC;AAED,MAAM,QAAQ,GAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,MAAM,KAAK,GAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACxC,MAAM,iBAAiB,GAAG,EAAgC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CustomShaderMaterial, WgpuCustomMaterialShaderSource, WgpuRenderState } from '@flighthq/types';
|
|
2
|
+
export declare function areWgpuScene3DCustomShaderGuardsEnabled(state: WgpuRenderState): boolean;
|
|
3
|
+
export declare function enableWgpuScene3DCustomShaderGuards(state: WgpuRenderState): void;
|
|
4
|
+
export declare function runWgpuCustomShaderGuards(state: WgpuRenderState, shaderKey: string, source: WgpuCustomMaterialShaderSource, material: Readonly<CustomShaderMaterial>): void;
|
|
5
|
+
//# sourceMappingURL=enableWgpuScene3DCustomShaderGuards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enableWgpuScene3DCustomShaderGuards.d.ts","sourceRoot":"","sources":["../src/enableWgpuScene3DCustomShaderGuards.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,8BAA8B,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAO7G,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAEvF;AAGD,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEhF;AAID,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,eAAe,EACtB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,8BAA8B,EACtC,QAAQ,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GACvC,IAAI,CA6CN"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { logOnce } from '@flighthq/log';
|
|
2
|
+
import { LogLevel } from '@flighthq/types';
|
|
3
|
+
import { WGPU_CUSTOM_SHADER_TEXTURE_CAPACITY, WGPU_CUSTOM_SHADER_USER_VEC4_CAPACITY } from './wgpuCustomMaterialAbi';
|
|
4
|
+
import { getWgpuScene3DRuntime } from './wgpuScene3DRuntime';
|
|
5
|
+
// Returns whether the shakeable CustomShaderMaterial contract guards are installed on `state`.
|
|
6
|
+
export function areWgpuScene3DCustomShaderGuardsEnabled(state) {
|
|
7
|
+
return getWgpuScene3DRuntime(state).customShaderGuard != null;
|
|
8
|
+
}
|
|
9
|
+
// Enables actionable, warn-once diagnostics for the fixed custom-material WGSL binding ABI.
|
|
10
|
+
export function enableWgpuScene3DCustomShaderGuards(state) {
|
|
11
|
+
getWgpuScene3DRuntime(state).customShaderGuard = runWgpuCustomShaderGuards;
|
|
12
|
+
}
|
|
13
|
+
// Runs the opt-in validation at bind time. Kept as a small exported seam so the renderer carries no
|
|
14
|
+
// logging dependency or warning strings unless this guard module is imported and enabled.
|
|
15
|
+
export function runWgpuCustomShaderGuards(state, shaderKey, source, material) {
|
|
16
|
+
if (getWgpuScene3DRuntime(state).customShaderGuard == null)
|
|
17
|
+
return;
|
|
18
|
+
const uniforms = material.uniforms ?? {};
|
|
19
|
+
const uniformNames = Object.keys(uniforms).sort();
|
|
20
|
+
for (const name of uniformNames) {
|
|
21
|
+
const value = uniforms[name];
|
|
22
|
+
if (typeof value !== 'number' && (value.length < 1 || value.length > 4)) {
|
|
23
|
+
warn(`uniform-length:${shaderKey}:${name}:${value.length}`, `shader "${shaderKey}" uniform "${name}" has ${value.length} components; WebGPU custom material uniforms must be scalars or vectors with 1–4 components.`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (uniformNames.length > WGPU_CUSTOM_SHADER_USER_VEC4_CAPACITY) {
|
|
27
|
+
warn(`uniform-overflow:${shaderKey}`, `shader "${shaderKey}" has ${uniformNames.length} uniforms, exceeding the fixed ${WGPU_CUSTOM_SHADER_USER_VEC4_CAPACITY}-vec4 UserBlock capacity; extra alphabetically sorted fields are not uploaded.`);
|
|
28
|
+
}
|
|
29
|
+
const textureCount = Object.keys(material.textures ?? {}).length;
|
|
30
|
+
if (textureCount > WGPU_CUSTOM_SHADER_TEXTURE_CAPACITY) {
|
|
31
|
+
warn(`texture-overflow:${shaderKey}`, `shader "${shaderKey}" has ${textureCount} textures, exceeding the fixed ${WGPU_CUSTOM_SHADER_TEXTURE_CAPACITY}-texture binding capacity; extra bag-order textures are not bound.`);
|
|
32
|
+
}
|
|
33
|
+
const required = [
|
|
34
|
+
[0, 0, 'Frame'],
|
|
35
|
+
[1, 0, 'Draw'],
|
|
36
|
+
[2, 0, 'UserBlock'],
|
|
37
|
+
];
|
|
38
|
+
for (let slot = 0; slot < Math.min(textureCount, WGPU_CUSTOM_SHADER_TEXTURE_CAPACITY); slot++) {
|
|
39
|
+
required.push([3, slot * 2, `texture sampler slot ${slot}`]);
|
|
40
|
+
required.push([3, slot * 2 + 1, `texture view slot ${slot}`]);
|
|
41
|
+
}
|
|
42
|
+
for (const [group, binding, label] of required) {
|
|
43
|
+
if (hasBinding(source, group, binding))
|
|
44
|
+
continue;
|
|
45
|
+
warn(`missing-binding:${shaderKey}:${group}:${binding}`, `shader "${shaderKey}" is missing reserved @group(${group}) @binding(${binding}) (${label}); declare the fixed scene-wgpu custom material ABI binding.`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function hasBinding(source, group, binding) {
|
|
49
|
+
const groupFirst = new RegExp(`@group\\s*\\(\\s*${group}\\s*\\)(?:(?!@group|@binding)[\\s\\S]){0,80}@binding\\s*\\(\\s*${binding}\\s*\\)`);
|
|
50
|
+
const bindingFirst = new RegExp(`@binding\\s*\\(\\s*${binding}\\s*\\)(?:(?!@group|@binding)[\\s\\S]){0,80}@group\\s*\\(\\s*${group}\\s*\\)`);
|
|
51
|
+
return groupFirst.test(source) || bindingFirst.test(source);
|
|
52
|
+
}
|
|
53
|
+
function warn(key, message) {
|
|
54
|
+
logOnce(`scene-wgpu:custom-shader:${key}`, LogLevel.Warn, { message }, 'scene-wgpu');
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=enableWgpuScene3DCustomShaderGuards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enableWgpuScene3DCustomShaderGuards.js","sourceRoot":"","sources":["../src/enableWgpuScene3DCustomShaderGuards.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { WgpuRenderState } from '@flighthq/types';
|
|
2
|
+
export declare function areWgpuScene3DForwardLightSelectionGuardsEnabled(state: WgpuRenderState): boolean;
|
|
3
|
+
export declare function enableWgpuScene3DForwardLightSelectionGuards(state: WgpuRenderState): void;
|
|
4
|
+
//# sourceMappingURL=enableWgpuScene3DForwardLightSelectionGuards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enableWgpuScene3DForwardLightSelectionGuards.d.ts","sourceRoot":"","sources":["../src/enableWgpuScene3DForwardLightSelectionGuards.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAqB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAK1E,wBAAgB,gDAAgD,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAEhG;AAED,wBAAgB,4CAA4C,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEzF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { logOnce } from '@flighthq/log';
|
|
2
|
+
import { LogLevel } from '@flighthq/types';
|
|
3
|
+
import { getWgpuScene3DRuntime } from './wgpuScene3DRuntime';
|
|
4
|
+
export function areWgpuScene3DForwardLightSelectionGuardsEnabled(state) {
|
|
5
|
+
return getWgpuScene3DRuntime(state).forwardLightSelectionGuard != null;
|
|
6
|
+
}
|
|
7
|
+
export function enableWgpuScene3DForwardLightSelectionGuards(state) {
|
|
8
|
+
getWgpuScene3DRuntime(state).forwardLightSelectionGuard = warnSelectionRequired;
|
|
9
|
+
}
|
|
10
|
+
function warnSelectionRequired(lights) {
|
|
11
|
+
logOnce('scene-wgpu:forward-light-selection-required', LogLevel.Warn, {
|
|
12
|
+
message: 'drawWgpuScene3D: punctual lights exceed MAX_FORWARD_LIGHTS and will be input-order truncated — call prepareWgpuScene3DForwardLights after prepareScene3DRender and pass its result to drawWgpuScene3D.',
|
|
13
|
+
pointLightCount: lights.point?.length ?? 0,
|
|
14
|
+
spotLightCount: lights.spot?.length ?? 0,
|
|
15
|
+
}, 'scene-wgpu');
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=enableWgpuScene3DForwardLightSelectionGuards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enableWgpuScene3DForwardLightSelectionGuards.js","sourceRoot":"","sources":["../src/enableWgpuScene3DForwardLightSelectionGuards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,UAAU,gDAAgD,CAAC,KAAsB;IACrF,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC,0BAA0B,IAAI,IAAI,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,4CAA4C,CAAC,KAAsB;IACjF,qBAAqB,CAAC,KAAK,CAAC,CAAC,0BAA0B,GAAG,qBAAqB,CAAC;AAClF,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAmC;IAChE,OAAO,CACL,6CAA6C,EAC7C,QAAQ,CAAC,IAAI,EACb;QACE,OAAO,EACL,wMAAwM;QAC1M,eAAe,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;QAC1C,cAAc,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;KACzC,EACD,YAAY,CACb,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Scene3DForwardLightSelectionExplanation, Scene3DLightsLike, WgpuScene3DForwardLightList } from '@flighthq/types';
|
|
2
|
+
export declare function explainWgpuScene3DForwardLightSelection(lights: Readonly<Scene3DLightsLike>, selection?: Readonly<WgpuScene3DForwardLightList>): Scene3DForwardLightSelectionExplanation;
|
|
3
|
+
//# sourceMappingURL=explainWgpuScene3DForwardLightSelection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explainWgpuScene3DForwardLightSelection.d.ts","sourceRoot":"","sources":["../src/explainWgpuScene3DForwardLightSelection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uCAAuC,EACvC,iBAAiB,EACjB,2BAA2B,EAC5B,MAAM,iBAAiB,CAAC;AAIzB,wBAAgB,uCAAuC,CACrD,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACnC,SAAS,CAAC,EAAE,QAAQ,CAAC,2BAA2B,CAAC,GAChD,uCAAuC,CAczC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { MAX_FORWARD_LIGHTS } from '@flighthq/types';
|
|
2
|
+
// Pure diagnostic twin of scene-gl's explanation API.
|
|
3
|
+
export function explainWgpuScene3DForwardLightSelection(lights, selection) {
|
|
4
|
+
const pointLightCount = lights.point?.length ?? 0;
|
|
5
|
+
const spotLightCount = lights.spot?.length ?? 0;
|
|
6
|
+
const selectionPrepared = selection !== undefined;
|
|
7
|
+
return {
|
|
8
|
+
pointLightCount,
|
|
9
|
+
reason: selectionPrepared
|
|
10
|
+
? 'selection-prepared'
|
|
11
|
+
: pointLightCount > MAX_FORWARD_LIGHTS || spotLightCount > MAX_FORWARD_LIGHTS
|
|
12
|
+
? 'selection-required'
|
|
13
|
+
: 'within-budget',
|
|
14
|
+
selectionPrepared,
|
|
15
|
+
spotLightCount,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=explainWgpuScene3DForwardLightSelection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explainWgpuScene3DForwardLightSelection.js","sourceRoot":"","sources":["../src/explainWgpuScene3DForwardLightSelection.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,sDAAsD;AACtD,MAAM,UAAU,uCAAuC,CACrD,MAAmC,EACnC,SAAiD;IAEjD,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC;IAChD,MAAM,iBAAiB,GAAG,SAAS,KAAK,SAAS,CAAC;IAClD,OAAO;QACL,eAAe;QACf,MAAM,EAAE,iBAAiB;YACvB,CAAC,CAAC,oBAAoB;YACtB,CAAC,CAAC,eAAe,GAAG,kBAAkB,IAAI,cAAc,GAAG,kBAAkB;gBAC3E,CAAC,CAAC,oBAAoB;gBACtB,CAAC,CAAC,eAAe;QACrB,iBAAiB;QACjB,cAAc;KACf,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export * from './anisotropyPbrWgpuMeshMaterialRenderer';
|
|
2
|
+
export * from './blinnPhongWgpuMeshMaterialRenderer';
|
|
3
|
+
export * from './clearcoatPbrWgpuMeshMaterialRenderer';
|
|
4
|
+
export * from './customShaderWgpuMeshMaterialRenderer';
|
|
5
|
+
export * from './depthWgpuMeshMaterialRenderer';
|
|
6
|
+
export * from './drawWgpuScene3D';
|
|
7
|
+
export * from './enableWgpuScene3DForwardLightSelectionGuards';
|
|
8
|
+
export * from './enableWgpuScene3DCustomShaderGuards';
|
|
9
|
+
export * from './explainWgpuScene3DForwardLightSelection';
|
|
10
|
+
export * from './emissiveWgpuMeshMaterialRenderer';
|
|
11
|
+
export * from './wgpuEnvironmentCube';
|
|
12
|
+
export * from './wgpuEnvironmentIblBake';
|
|
13
|
+
export * from './wgpuEnvironmentSkybox';
|
|
14
|
+
export * from './iridescencePbrWgpuMeshMaterialRenderer';
|
|
15
|
+
export * from './lambertWgpuMeshMaterialRenderer';
|
|
16
|
+
export * from './matcapWgpuMeshMaterialRenderer';
|
|
17
|
+
export * from './normalWgpuMeshMaterialRenderer';
|
|
18
|
+
export * from './phongWgpuMeshMaterialRenderer';
|
|
19
|
+
export * from './prepareWgpuScene3DForwardLights';
|
|
20
|
+
export * from './registerStandardPbrWgpuMaterial';
|
|
21
|
+
export * from './sheenPbrWgpuMeshMaterialRenderer';
|
|
22
|
+
export * from './shadedWgpuMeshMaterialRenderer';
|
|
23
|
+
export * from './specularGlossinessPbrWgpuMeshMaterialRenderer';
|
|
24
|
+
export * from './specularPbrWgpuMeshMaterialRenderer';
|
|
25
|
+
export * from './standardPbrWgpuMeshMaterialRenderer';
|
|
26
|
+
export * from './subsurfacePbrWgpuMeshMaterialRenderer';
|
|
27
|
+
export * from './toonWgpuMeshMaterialRenderer';
|
|
28
|
+
export * from './transmissionVolumePbrWgpuMeshMaterialRenderer';
|
|
29
|
+
export * from './unlitWgpuMeshMaterialRenderer';
|
|
30
|
+
export * from './vertexColorWgpuMeshMaterialRenderer';
|
|
31
|
+
export * from './wgpuClassicPrelude';
|
|
32
|
+
export * from './wgpuDebugPrelude';
|
|
33
|
+
export * from './wgpuMatcapPrelude';
|
|
34
|
+
export * from './wgpuMeshMaterialRegistry';
|
|
35
|
+
export * from './wgpuMeshPipeline';
|
|
36
|
+
export * from './wgpuMeshUpload';
|
|
37
|
+
export * from './wgpuParticleEmitter3D';
|
|
38
|
+
export * from './wgpuPbrPipelineCache';
|
|
39
|
+
export * from './wgpuPbrPrelude';
|
|
40
|
+
export * from './wgpuScene3DRuntime';
|
|
41
|
+
export * from './wgpuScene3DTime';
|
|
42
|
+
export * from './wgpuShadedPrelude';
|
|
43
|
+
export * from './wgpuShadedModifierSnippet';
|
|
44
|
+
export * from './wgpuShadowMap';
|
|
45
|
+
export * from './wgpuSkinPalette';
|
|
46
|
+
export * from './wgpuToonPrelude';
|
|
47
|
+
export * from './wgpuUnlitPrelude';
|
|
48
|
+
export * from './wgpuWireframePrelude';
|
|
49
|
+
export * from './wgpuWireframeUpload';
|
|
50
|
+
export * from './wireframeWgpuMeshMaterialRenderer';
|
|
51
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yCAAyC,CAAC;AACxD,cAAc,sCAAsC,CAAC;AACrD,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mBAAmB,CAAC;AAClC,cAAc,gDAAgD,CAAC;AAC/D,cAAc,uCAAuC,CAAC;AACtD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,oCAAoC,CAAC;AACnD,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iDAAiD,CAAC;AAChE,cAAc,uCAAuC,CAAC;AACtD,cAAc,uCAAuC,CAAC;AACtD,cAAc,yCAAyC,CAAC;AACxD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iDAAiD,CAAC;AAChE,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AACtD,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qCAAqC,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export * from './anisotropyPbrWgpuMeshMaterialRenderer';
|
|
2
|
+
export * from './blinnPhongWgpuMeshMaterialRenderer';
|
|
3
|
+
export * from './clearcoatPbrWgpuMeshMaterialRenderer';
|
|
4
|
+
export * from './customShaderWgpuMeshMaterialRenderer';
|
|
5
|
+
export * from './depthWgpuMeshMaterialRenderer';
|
|
6
|
+
export * from './drawWgpuScene3D';
|
|
7
|
+
export * from './enableWgpuScene3DForwardLightSelectionGuards';
|
|
8
|
+
export * from './enableWgpuScene3DCustomShaderGuards';
|
|
9
|
+
export * from './explainWgpuScene3DForwardLightSelection';
|
|
10
|
+
export * from './emissiveWgpuMeshMaterialRenderer';
|
|
11
|
+
export * from './wgpuEnvironmentCube';
|
|
12
|
+
export * from './wgpuEnvironmentIblBake';
|
|
13
|
+
export * from './wgpuEnvironmentSkybox';
|
|
14
|
+
export * from './iridescencePbrWgpuMeshMaterialRenderer';
|
|
15
|
+
export * from './lambertWgpuMeshMaterialRenderer';
|
|
16
|
+
export * from './matcapWgpuMeshMaterialRenderer';
|
|
17
|
+
export * from './normalWgpuMeshMaterialRenderer';
|
|
18
|
+
export * from './phongWgpuMeshMaterialRenderer';
|
|
19
|
+
export * from './prepareWgpuScene3DForwardLights';
|
|
20
|
+
export * from './registerStandardPbrWgpuMaterial';
|
|
21
|
+
export * from './sheenPbrWgpuMeshMaterialRenderer';
|
|
22
|
+
export * from './shadedWgpuMeshMaterialRenderer';
|
|
23
|
+
export * from './specularGlossinessPbrWgpuMeshMaterialRenderer';
|
|
24
|
+
export * from './specularPbrWgpuMeshMaterialRenderer';
|
|
25
|
+
export * from './standardPbrWgpuMeshMaterialRenderer';
|
|
26
|
+
export * from './subsurfacePbrWgpuMeshMaterialRenderer';
|
|
27
|
+
export * from './toonWgpuMeshMaterialRenderer';
|
|
28
|
+
export * from './transmissionVolumePbrWgpuMeshMaterialRenderer';
|
|
29
|
+
export * from './unlitWgpuMeshMaterialRenderer';
|
|
30
|
+
export * from './vertexColorWgpuMeshMaterialRenderer';
|
|
31
|
+
export * from './wgpuClassicPrelude';
|
|
32
|
+
export * from './wgpuDebugPrelude';
|
|
33
|
+
export * from './wgpuMatcapPrelude';
|
|
34
|
+
export * from './wgpuMeshMaterialRegistry';
|
|
35
|
+
export * from './wgpuMeshPipeline';
|
|
36
|
+
export * from './wgpuMeshUpload';
|
|
37
|
+
export * from './wgpuParticleEmitter3D';
|
|
38
|
+
export * from './wgpuPbrPipelineCache';
|
|
39
|
+
export * from './wgpuPbrPrelude';
|
|
40
|
+
export * from './wgpuScene3DRuntime';
|
|
41
|
+
export * from './wgpuScene3DTime';
|
|
42
|
+
export * from './wgpuShadedPrelude';
|
|
43
|
+
export * from './wgpuShadedModifierSnippet';
|
|
44
|
+
export * from './wgpuShadowMap';
|
|
45
|
+
export * from './wgpuSkinPalette';
|
|
46
|
+
export * from './wgpuToonPrelude';
|
|
47
|
+
export * from './wgpuUnlitPrelude';
|
|
48
|
+
export * from './wgpuWireframePrelude';
|
|
49
|
+
export * from './wgpuWireframeUpload';
|
|
50
|
+
export * from './wireframeWgpuMeshMaterialRenderer';
|
|
51
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yCAAyC,CAAC;AACxD,cAAc,sCAAsC,CAAC;AACrD,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mBAAmB,CAAC;AAClC,cAAc,gDAAgD,CAAC;AAC/D,cAAc,uCAAuC,CAAC;AACtD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,oCAAoC,CAAC;AACnD,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iDAAiD,CAAC;AAChE,cAAc,uCAAuC,CAAC;AACtD,cAAc,uCAAuC,CAAC;AACtD,cAAc,yCAAyC,CAAC;AACxD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iDAAiD,CAAC;AAChE,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AACtD,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qCAAqC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { WgpuMeshMaterialRenderer, WgpuRenderState } from '@flighthq/types';
|
|
2
|
+
export declare const iridescencePbrWgpuMeshMaterialRenderer: WgpuMeshMaterialRenderer;
|
|
3
|
+
export declare function registerIridescencePbrWgpuMaterial(state: WgpuRenderState): void;
|
|
4
|
+
//# sourceMappingURL=iridescencePbrWgpuMeshMaterialRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iridescencePbrWgpuMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/iridescencePbrWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAOV,wBAAwB,EACxB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAyBzB,eAAO,MAAM,sCAAsC,EAAE,wBA0CpD,CAAC;AAIF,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAE/E"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
|
|
2
|
+
import { IridescencePbrMaterialKind } from '@flighthq/types';
|
|
3
|
+
import { buildWgpuPbrStandardDefineKey, ensureWgpuPbrMaterialBindGroup, getWgpuPbrMaterialScratch, writeWgpuPbrMaterialUniform, writeWgpuPbrStandardBlock, } from './standardPbrWgpuMeshMaterialRenderer';
|
|
4
|
+
import { registerWgpuMeshMaterialRenderer } from './wgpuMeshMaterialRegistry';
|
|
5
|
+
import { beginWgpuMeshDraw, drawWgpuMeshSubset, writeWgpuFrameUniform } from './wgpuMeshPipeline';
|
|
6
|
+
import { ensureWgpuPbrPipeline } from './wgpuPbrPipelineCache';
|
|
7
|
+
// The built-in Iridescence (KHR_materials_iridescence) forward-lit mesh-material renderer — the WGSL
|
|
8
|
+
// mirror of iridescencePbrGlMeshMaterialRenderer. Iridescence models a thin transparent film over the
|
|
9
|
+
// surface whose interference shifts the Fresnel reflectance toward a view- and thickness-dependent hue
|
|
10
|
+
// — soap bubbles, oil slicks, anodized metal. The shader applies a compact sinusoidal thin-film
|
|
11
|
+
// approximation (sample-viewer style) to F0 behind `const IRIDESCENCE`. bind builds the standard define
|
|
12
|
+
// key from `material.standard` + the surface trailer, sets the IRIDESCENCE flag, selects/compiles that
|
|
13
|
+
// pipeline variant for the current color format, writes the shared Frame uniform, then writes the base
|
|
14
|
+
// block + the iridescence strength / film IOR / a single film thickness (the midpoint of the
|
|
15
|
+
// descriptor's min/max nm range) into the one MaterialBlock uniform and binds it at group(2). The
|
|
16
|
+
// per-texel thickness map is reserved but NOT sampled on wgpu yet (maps deferred). See
|
|
17
|
+
// registerIridescencePbrWgpuMaterial.
|
|
18
|
+
export const iridescencePbrWgpuMeshMaterialRenderer = {
|
|
19
|
+
bind(state, material, lights, camera) {
|
|
20
|
+
const stateRuntime = getWgpuRenderStateRuntime(state);
|
|
21
|
+
const pass = stateRuntime.renderPass;
|
|
22
|
+
if (pass === null)
|
|
23
|
+
return;
|
|
24
|
+
const iridescence = material;
|
|
25
|
+
const standard = iridescence !== null ? iridescence.standard : null;
|
|
26
|
+
const key = buildWgpuPbrStandardDefineKey(standard, iridescence);
|
|
27
|
+
key.iridescenceEnabled = true;
|
|
28
|
+
const format = stateRuntime.currentColorFormat ?? state.format;
|
|
29
|
+
const pipeline = ensureWgpuPbrPipeline(state, key, format);
|
|
30
|
+
writeWgpuFrameUniform(state, camera, lights);
|
|
31
|
+
const binding = ensureWgpuPbrMaterialBindGroup(state, pipeline, iridescence ?? FALLBACK_MATERIAL, standard);
|
|
32
|
+
const out = getWgpuPbrMaterialScratch();
|
|
33
|
+
writeWgpuPbrStandardBlock(out, standard, iridescence !== null ? iridescence.alphaCutoff : 0.5);
|
|
34
|
+
out.fill(0, 16);
|
|
35
|
+
// iridescence group (floats 28..30): strength, film IOR, film thickness (nm; min/max midpoint).
|
|
36
|
+
if (iridescence !== null) {
|
|
37
|
+
out[28] = iridescence.iridescence;
|
|
38
|
+
out[29] = iridescence.iridescenceIor;
|
|
39
|
+
out[30] = (iridescence.iridescenceThicknessMin + iridescence.iridescenceThicknessMax) * 0.5;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
out[28] = 0;
|
|
43
|
+
out[29] = 1.3;
|
|
44
|
+
out[30] = 250;
|
|
45
|
+
}
|
|
46
|
+
writeWgpuPbrMaterialUniform(state, binding);
|
|
47
|
+
beginWgpuMeshDraw(state, pipeline);
|
|
48
|
+
pass.setBindGroup(2, binding.bindGroup);
|
|
49
|
+
},
|
|
50
|
+
draw(state, proxy, geometry) {
|
|
51
|
+
drawWgpuMeshSubset(state, proxy, geometry);
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
// Installs the built-in Iridescence renderer for IridescencePbrMaterialKind on this state. Opt-in (no
|
|
55
|
+
// top-level side effect): drawScene3D only draws Iridescence subsets once this is called.
|
|
56
|
+
export function registerIridescencePbrWgpuMaterial(state) {
|
|
57
|
+
registerWgpuMeshMaterialRenderer(state, IridescencePbrMaterialKind, iridescencePbrWgpuMeshMaterialRenderer);
|
|
58
|
+
}
|
|
59
|
+
const FALLBACK_MATERIAL = {};
|
|
60
|
+
//# sourceMappingURL=iridescencePbrWgpuMeshMaterialRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iridescencePbrWgpuMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/iridescencePbrWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { WgpuMeshMaterialRenderer, WgpuRenderState } from '@flighthq/types';
|
|
2
|
+
export declare const lambertWgpuMeshMaterialRenderer: WgpuMeshMaterialRenderer;
|
|
3
|
+
export declare function registerLambertWgpuMaterial(state: WgpuRenderState): void;
|
|
4
|
+
//# sourceMappingURL=lambertWgpuMeshMaterialRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lambertWgpuMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/lambertWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAQV,wBAAwB,EACxB,eAAe,EAEhB,MAAM,iBAAiB,CAAC;AAczB,eAAO,MAAM,+BAA+B,EAAE,wBA2C7C,CAAC;AAIF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAExE"}
|