@flighthq/scene3d-gl 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/anisotropyPbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/anisotropyPbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/anisotropyPbrGlMeshMaterialRenderer.js +45 -0
- package/dist/anisotropyPbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/blinnPhongGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/blinnPhongGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/blinnPhongGlMeshMaterialRenderer.js +102 -0
- package/dist/blinnPhongGlMeshMaterialRenderer.js.map +1 -0
- package/dist/clearcoatPbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/clearcoatPbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/clearcoatPbrGlMeshMaterialRenderer.js +45 -0
- package/dist/clearcoatPbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/customShaderGlMeshMaterialRenderer.d.ts +6 -0
- package/dist/customShaderGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/customShaderGlMeshMaterialRenderer.js +136 -0
- package/dist/customShaderGlMeshMaterialRenderer.js.map +1 -0
- package/dist/depthGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/depthGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/depthGlMeshMaterialRenderer.js +36 -0
- package/dist/depthGlMeshMaterialRenderer.js.map +1 -0
- package/dist/drawGlScene3D.d.ts +3 -0
- package/dist/drawGlScene3D.d.ts.map +1 -0
- package/dist/drawGlScene3D.js +251 -0
- package/dist/drawGlScene3D.js.map +1 -0
- package/dist/emissiveGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/emissiveGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/emissiveGlMeshMaterialRenderer.js +49 -0
- package/dist/emissiveGlMeshMaterialRenderer.js.map +1 -0
- package/dist/enableGlScene3DColorSpaceGuards.d.ts +4 -0
- package/dist/enableGlScene3DColorSpaceGuards.d.ts.map +1 -0
- package/dist/enableGlScene3DColorSpaceGuards.js +22 -0
- package/dist/enableGlScene3DColorSpaceGuards.js.map +1 -0
- package/dist/enableGlScene3DCustomShaderGuards.d.ts +4 -0
- package/dist/enableGlScene3DCustomShaderGuards.d.ts.map +1 -0
- package/dist/enableGlScene3DCustomShaderGuards.js +71 -0
- package/dist/enableGlScene3DCustomShaderGuards.js.map +1 -0
- package/dist/enableGlScene3DDeformGuards.d.ts +4 -0
- package/dist/enableGlScene3DDeformGuards.d.ts.map +1 -0
- package/dist/enableGlScene3DDeformGuards.js +42 -0
- package/dist/enableGlScene3DDeformGuards.js.map +1 -0
- package/dist/enableGlScene3DForwardLightSelectionGuards.d.ts +4 -0
- package/dist/enableGlScene3DForwardLightSelectionGuards.d.ts.map +1 -0
- package/dist/enableGlScene3DForwardLightSelectionGuards.js +21 -0
- package/dist/enableGlScene3DForwardLightSelectionGuards.js.map +1 -0
- package/dist/explainGlScene3DForwardLightSelection.d.ts +3 -0
- package/dist/explainGlScene3DForwardLightSelection.d.ts.map +1 -0
- package/dist/explainGlScene3DForwardLightSelection.js +19 -0
- package/dist/explainGlScene3DForwardLightSelection.js.map +1 -0
- package/dist/glClassicPrelude.d.ts +9 -0
- package/dist/glClassicPrelude.d.ts.map +1 -0
- package/dist/glClassicPrelude.js +288 -0
- package/dist/glClassicPrelude.js.map +1 -0
- package/dist/glDebugPrelude.d.ts +9 -0
- package/dist/glDebugPrelude.d.ts.map +1 -0
- package/dist/glDebugPrelude.js +143 -0
- package/dist/glDebugPrelude.js.map +1 -0
- package/dist/glEnvironmentCube.d.ts +5 -0
- package/dist/glEnvironmentCube.d.ts.map +1 -0
- package/dist/glEnvironmentCube.js +65 -0
- package/dist/glEnvironmentCube.js.map +1 -0
- package/dist/glEnvironmentIblBake.d.ts +4 -0
- package/dist/glEnvironmentIblBake.d.ts.map +1 -0
- package/dist/glEnvironmentIblBake.js +365 -0
- package/dist/glEnvironmentIblBake.js.map +1 -0
- package/dist/glEnvironmentSkybox.d.ts +3 -0
- package/dist/glEnvironmentSkybox.d.ts.map +1 -0
- package/dist/glEnvironmentSkybox.js +95 -0
- package/dist/glEnvironmentSkybox.js.map +1 -0
- package/dist/glLitProgram.d.ts +5 -0
- package/dist/glLitProgram.d.ts.map +1 -0
- package/dist/glLitProgram.js +211 -0
- package/dist/glLitProgram.js.map +1 -0
- package/dist/glMatcapPrelude.d.ts +8 -0
- package/dist/glMatcapPrelude.d.ts.map +1 -0
- package/dist/glMatcapPrelude.js +118 -0
- package/dist/glMatcapPrelude.js.map +1 -0
- package/dist/glMeshMaterialRegistry.d.ts +5 -0
- package/dist/glMeshMaterialRegistry.d.ts.map +1 -0
- package/dist/glMeshMaterialRegistry.js +29 -0
- package/dist/glMeshMaterialRegistry.js.map +1 -0
- package/dist/glMeshProgram.d.ts +14 -0
- package/dist/glMeshProgram.d.ts.map +1 -0
- package/dist/glMeshProgram.js +193 -0
- package/dist/glMeshProgram.js.map +1 -0
- package/dist/glMeshUpload.d.ts +4 -0
- package/dist/glMeshUpload.d.ts.map +1 -0
- package/dist/glMeshUpload.js +190 -0
- package/dist/glMeshUpload.js.map +1 -0
- package/dist/glParticleEmitter3D.d.ts +4 -0
- package/dist/glParticleEmitter3D.d.ts.map +1 -0
- package/dist/glParticleEmitter3D.js +342 -0
- package/dist/glParticleEmitter3D.js.map +1 -0
- package/dist/glPbrPrelude.d.ts +8 -0
- package/dist/glPbrPrelude.d.ts.map +1 -0
- package/dist/glPbrPrelude.js +569 -0
- package/dist/glPbrPrelude.js.map +1 -0
- package/dist/glPbrProgramCache.d.ts +4 -0
- package/dist/glPbrProgramCache.d.ts.map +1 -0
- package/dist/glPbrProgramCache.js +63 -0
- package/dist/glPbrProgramCache.js.map +1 -0
- package/dist/glPbrStandardBlock.d.ts +13 -0
- package/dist/glPbrStandardBlock.d.ts.map +1 -0
- package/dist/glPbrStandardBlock.js +107 -0
- package/dist/glPbrStandardBlock.js.map +1 -0
- package/dist/glScene3DRuntime.d.ts +5 -0
- package/dist/glScene3DRuntime.d.ts.map +1 -0
- package/dist/glScene3DRuntime.js +99 -0
- package/dist/glScene3DRuntime.js.map +1 -0
- package/dist/glScene3DTestHelper.d.ts +20 -0
- package/dist/glScene3DTestHelper.d.ts.map +1 -0
- package/dist/glScene3DTestHelper.js +178 -0
- package/dist/glScene3DTestHelper.js.map +1 -0
- package/dist/glScene3DTime.d.ts +4 -0
- package/dist/glScene3DTime.d.ts.map +1 -0
- package/dist/glScene3DTime.js +18 -0
- package/dist/glScene3DTime.js.map +1 -0
- package/dist/glShadedBuiltInModifiers.d.ts +11 -0
- package/dist/glShadedBuiltInModifiers.d.ts.map +1 -0
- package/dist/glShadedBuiltInModifiers.js +386 -0
- package/dist/glShadedBuiltInModifiers.js.map +1 -0
- package/dist/glShadedModifierSnippet.d.ts +4 -0
- package/dist/glShadedModifierSnippet.d.ts.map +1 -0
- package/dist/glShadedModifierSnippet.js +24 -0
- package/dist/glShadedModifierSnippet.js.map +1 -0
- package/dist/glShadedPrelude.d.ts +5 -0
- package/dist/glShadedPrelude.d.ts.map +1 -0
- package/dist/glShadedPrelude.js +393 -0
- package/dist/glShadedPrelude.js.map +1 -0
- package/dist/glShadowMap.d.ts +3 -0
- package/dist/glShadowMap.d.ts.map +1 -0
- package/dist/glShadowMap.js +150 -0
- package/dist/glShadowMap.js.map +1 -0
- package/dist/glToonPrelude.d.ts +7 -0
- package/dist/glToonPrelude.d.ts.map +1 -0
- package/dist/glToonPrelude.js +172 -0
- package/dist/glToonPrelude.js.map +1 -0
- package/dist/glUnlitPrelude.d.ts +9 -0
- package/dist/glUnlitPrelude.d.ts.map +1 -0
- package/dist/glUnlitPrelude.js +160 -0
- package/dist/glUnlitPrelude.js.map +1 -0
- package/dist/glWireframePrelude.d.ts +6 -0
- package/dist/glWireframePrelude.d.ts.map +1 -0
- package/dist/glWireframePrelude.js +56 -0
- package/dist/glWireframePrelude.js.map +1 -0
- package/dist/glWireframeUpload.d.ts +4 -0
- package/dist/glWireframeUpload.d.ts.map +1 -0
- package/dist/glWireframeUpload.js +85 -0
- package/dist/glWireframeUpload.js.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/iridescencePbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/iridescencePbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/iridescencePbrGlMeshMaterialRenderer.js +54 -0
- package/dist/iridescencePbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/lambertGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/lambertGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/lambertGlMeshMaterialRenderer.js +70 -0
- package/dist/lambertGlMeshMaterialRenderer.js.map +1 -0
- package/dist/matcapGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/matcapGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/matcapGlMeshMaterialRenderer.js +49 -0
- package/dist/matcapGlMeshMaterialRenderer.js.map +1 -0
- package/dist/normalGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/normalGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/normalGlMeshMaterialRenderer.js +39 -0
- package/dist/normalGlMeshMaterialRenderer.js.map +1 -0
- package/dist/phongGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/phongGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/phongGlMeshMaterialRenderer.js +90 -0
- package/dist/phongGlMeshMaterialRenderer.js.map +1 -0
- package/dist/prepareGlScene3DForwardLights.d.ts +3 -0
- package/dist/prepareGlScene3DForwardLights.d.ts.map +1 -0
- package/dist/prepareGlScene3DForwardLights.js +117 -0
- package/dist/prepareGlScene3DForwardLights.js.map +1 -0
- package/dist/presentGlScene3D.d.ts +3 -0
- package/dist/presentGlScene3D.d.ts.map +1 -0
- package/dist/presentGlScene3D.js +21 -0
- package/dist/presentGlScene3D.js.map +1 -0
- package/dist/registerStandardPbrGlMaterial.d.ts +3 -0
- package/dist/registerStandardPbrGlMaterial.d.ts.map +1 -0
- package/dist/registerStandardPbrGlMaterial.js +11 -0
- package/dist/registerStandardPbrGlMaterial.js.map +1 -0
- package/dist/shadedGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/shadedGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/shadedGlMeshMaterialRenderer.js +135 -0
- package/dist/shadedGlMeshMaterialRenderer.js.map +1 -0
- package/dist/sheenPbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/sheenPbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/sheenPbrGlMeshMaterialRenderer.js +54 -0
- package/dist/sheenPbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/specularGlossinessPbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/specularGlossinessPbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/specularGlossinessPbrGlMeshMaterialRenderer.js +121 -0
- package/dist/specularGlossinessPbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/specularPbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/specularPbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/specularPbrGlMeshMaterialRenderer.js +55 -0
- package/dist/specularPbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/standardPbrGlMeshMaterialRenderer.d.ts +3 -0
- package/dist/standardPbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/standardPbrGlMeshMaterialRenderer.js +35 -0
- package/dist/standardPbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/subsurfacePbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/subsurfacePbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/subsurfacePbrGlMeshMaterialRenderer.js +57 -0
- package/dist/subsurfacePbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/toonGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/toonGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/toonGlMeshMaterialRenderer.js +81 -0
- package/dist/toonGlMeshMaterialRenderer.js.map +1 -0
- package/dist/transmissionVolumePbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/transmissionVolumePbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/transmissionVolumePbrGlMeshMaterialRenderer.js +62 -0
- package/dist/transmissionVolumePbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/unlitGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/unlitGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/unlitGlMeshMaterialRenderer.js +61 -0
- package/dist/unlitGlMeshMaterialRenderer.js.map +1 -0
- package/dist/vertexColorGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/vertexColorGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/vertexColorGlMeshMaterialRenderer.js +54 -0
- package/dist/vertexColorGlMeshMaterialRenderer.js.map +1 -0
- package/dist/wireframeGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/wireframeGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/wireframeGlMeshMaterialRenderer.js +50 -0
- package/dist/wireframeGlMeshMaterialRenderer.js.map +1 -0
- package/package.json +58 -0
- package/src/anisotropyPbrGlMeshMaterialRenderer.test.ts +86 -0
- package/src/blinnPhongGlMeshMaterialRenderer.test.ts +94 -0
- package/src/clearcoatPbrGlMeshMaterialRenderer.test.ts +81 -0
- package/src/customShaderGlMeshMaterialRenderer.test.ts +169 -0
- package/src/depthGlMeshMaterialRenderer.test.ts +69 -0
- package/src/drawGlScene3D.test.ts +304 -0
- package/src/emissiveGlMeshMaterialRenderer.test.ts +60 -0
- package/src/enableGlScene3DColorSpaceGuards.test.ts +63 -0
- package/src/enableGlScene3DCustomShaderGuards.test.ts +85 -0
- package/src/enableGlScene3DDeformGuards.test.ts +98 -0
- package/src/enableGlScene3DForwardLightSelectionGuards.test.ts +84 -0
- package/src/explainGlScene3DForwardLightSelection.test.ts +32 -0
- package/src/glClassicPrelude.test.ts +214 -0
- package/src/glDebugPrelude.test.ts +94 -0
- package/src/glEnvironmentCube.test.ts +71 -0
- package/src/glEnvironmentIblBake.test.ts +31 -0
- package/src/glEnvironmentSkybox.test.ts +24 -0
- package/src/glLitProgram.test.ts +181 -0
- package/src/glMatcapPrelude.test.ts +74 -0
- package/src/glMeshMaterialRegistry.test.ts +52 -0
- package/src/glMeshProgram.test.ts +406 -0
- package/src/glMeshUpload.test.ts +311 -0
- package/src/glParticleEmitter3D.test.ts +280 -0
- package/src/glPbrPrelude.test.ts +178 -0
- package/src/glPbrProgramCache.test.ts +116 -0
- package/src/glPbrStandardBlock.test.ts +85 -0
- package/src/glScene3DRuntime.test.ts +108 -0
- package/src/glScene3DTime.test.ts +31 -0
- package/src/glShadedBuiltInModifiers.test.ts +377 -0
- package/src/glShadedModifierSnippet.test.ts +46 -0
- package/src/glShadedPrelude.test.ts +177 -0
- package/src/glShadowMap.test.ts +219 -0
- package/src/glToonPrelude.test.ts +118 -0
- package/src/glUnlitPrelude.test.ts +156 -0
- package/src/glWireframePrelude.test.ts +46 -0
- package/src/glWireframeUpload.test.ts +50 -0
- package/src/iridescencePbrGlMeshMaterialRenderer.test.ts +86 -0
- package/src/lambertGlMeshMaterialRenderer.test.ts +92 -0
- package/src/matcapGlMeshMaterialRenderer.test.ts +70 -0
- package/src/normalGlMeshMaterialRenderer.test.ts +69 -0
- package/src/phongGlMeshMaterialRenderer.test.ts +94 -0
- package/src/prepareGlScene3DForwardLights.test.ts +106 -0
- package/src/presentGlScene3D.test.ts +98 -0
- package/src/registerStandardPbrGlMaterial.test.ts +14 -0
- package/src/shadedGlMeshMaterialRenderer.test.ts +106 -0
- package/src/sheenPbrGlMeshMaterialRenderer.test.ts +83 -0
- package/src/specularGlossinessPbrGlMeshMaterialRenderer.test.ts +96 -0
- package/src/specularPbrGlMeshMaterialRenderer.test.ts +83 -0
- package/src/standardPbrGlMeshMaterialRenderer.test.ts +88 -0
- package/src/subsurfacePbrGlMeshMaterialRenderer.test.ts +86 -0
- package/src/toonGlMeshMaterialRenderer.test.ts +92 -0
- package/src/transmissionVolumePbrGlMeshMaterialRenderer.test.ts +93 -0
- package/src/unlitGlMeshMaterialRenderer.test.ts +88 -0
- package/src/vertexColorGlMeshMaterialRenderer.test.ts +60 -0
- package/src/wireframeGlMeshMaterialRenderer.test.ts +69 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { beginGlRenderPass, endGlRenderPass, presentGlRenderTarget } from '@flighthq/render-gl';
|
|
2
|
+
import { drawGlScene3D } from './drawGlScene3D';
|
|
3
|
+
// The no-effects 3D path, now a thin composition of the generic pass + present primitives: begin a pass
|
|
4
|
+
// (clears color + depth from the target's policy by default), draw the scene, end the pass (restore +
|
|
5
|
+
// resolve MSAA), then present (drawGlScene3D stamped the target 'linear', so present runs the sRGB encode
|
|
6
|
+
// to the canvas). It is an alternative to the effect pipeline, not a companion.
|
|
7
|
+
//
|
|
8
|
+
// This is now trivial enough to inline at the callsite; kept only as a named entry for the common case.
|
|
9
|
+
// Note the asymmetry with the old version is gone: there is no presentGlNode2D twin, because
|
|
10
|
+
// `presentGlRenderTarget` is subject-agnostic — a 2D-offscreen path presents through the very same call.
|
|
11
|
+
//
|
|
12
|
+
// `target` is the caller-owned linear intermediate: create once via createGlRenderTarget({ width,
|
|
13
|
+
// height, format: 'rgba16f', depth: 'depth-stencil', colorSpace: 'linear' }) and resize it to the canvas
|
|
14
|
+
// each frame before calling.
|
|
15
|
+
export function presentGlScene3D(state, target, scene, camera, lights) {
|
|
16
|
+
beginGlRenderPass(state, target);
|
|
17
|
+
drawGlScene3D(state, scene, camera, lights);
|
|
18
|
+
endGlRenderPass(state);
|
|
19
|
+
presentGlRenderTarget(state, target);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=presentGlScene3D.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentGlScene3D.js","sourceRoot":"","sources":["../src/presentGlScene3D.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAGhG,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,wGAAwG;AACxG,sGAAsG;AACtG,0GAA0G;AAC1G,gFAAgF;AAChF,EAAE;AACF,wGAAwG;AACxG,6FAA6F;AAC7F,yGAAyG;AACzG,EAAE;AACF,kGAAkG;AAClG,yGAAyG;AACzG,6BAA6B;AAC7B,MAAM,UAAU,gBAAgB,CAC9B,KAAoB,EACpB,MAAsB,EACtB,KAAuB,EACvB,MAA0B,EAC1B,MAAmC;IAEnC,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACjC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,eAAe,CAAC,KAAK,CAAC,CAAC;IACvB,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registerStandardPbrGlMaterial.d.ts","sourceRoot":"","sources":["../src/registerStandardPbrGlMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAUrD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAExE"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { StandardPbrMaterialKind } from '@flighthq/types';
|
|
2
|
+
import { registerGlMeshMaterialRenderer } from './glMeshMaterialRegistry';
|
|
3
|
+
import { standardPbrGlMeshMaterialRenderer } from './standardPbrGlMeshMaterialRenderer';
|
|
4
|
+
// Registers the built-in StandardPbr forward-lit renderer for StandardPbrMaterialKind on this
|
|
5
|
+
// state. Convenience over registerGlMeshMaterialRenderer(state, StandardPbrMaterialKind, …); call
|
|
6
|
+
// it once per GlRenderState before drawScene3D so meshes carrying StandardPbrMaterials draw. Opt-in
|
|
7
|
+
// by design (no top-level side effect): the render path knows no built-in material until registered.
|
|
8
|
+
export function registerStandardPbrGlMaterial(state) {
|
|
9
|
+
registerGlMeshMaterialRenderer(state, StandardPbrMaterialKind, standardPbrGlMeshMaterialRenderer);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=registerStandardPbrGlMaterial.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registerStandardPbrGlMaterial.js","sourceRoot":"","sources":["../src/registerStandardPbrGlMaterial.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAC;AAExF,8FAA8F;AAC9F,kGAAkG;AAClG,oGAAoG;AACpG,qGAAqG;AACrG,MAAM,UAAU,6BAA6B,CAAC,KAAoB;IAChE,8BAA8B,CAAC,KAAK,EAAE,uBAAuB,EAAE,iCAAiC,CAAC,CAAC;AACpG,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { GlMeshMaterialRenderer, GlRenderState } from '@flighthq/types';
|
|
2
|
+
export declare const shadedGlMeshMaterialRenderer: GlMeshMaterialRenderer;
|
|
3
|
+
export declare function registerShadedGlMaterial(state: GlRenderState): void;
|
|
4
|
+
//# sourceMappingURL=shadedGlMeshMaterialRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shadedGlMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/shadedGlMeshMaterialRenderer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAIV,sBAAsB,EACtB,aAAa,EAWd,MAAM,iBAAiB,CAAC;AAyBzB,eAAO,MAAM,4BAA4B,EAAE,sBA0B1C,CAAC;AAMF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAEnE"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { unpackColorToLinear } from '@flighthq/color';
|
|
2
|
+
import { hasImageResourcePixels } from '@flighthq/image';
|
|
3
|
+
import { bindGlImageResourceTexture } from '@flighthq/render-gl';
|
|
4
|
+
import { orderModifierStack, resolveModifier } from '@flighthq/shading';
|
|
5
|
+
import { ShadedMaterialKind } from '@flighthq/types';
|
|
6
|
+
import { bindGlMeshLightBlock } from './glLitProgram';
|
|
7
|
+
import { registerGlMeshMaterialRenderer } from './glMeshMaterialRegistry';
|
|
8
|
+
import { beginGlMeshDraw, bindGlUvTransform, drawGlMeshSubset, hasGlUvTransform, setGlMeshCameraPosition, setGlMeshViewProjection, } from './glMeshProgram';
|
|
9
|
+
import { getGlScene3DRuntime } from './glScene3DRuntime';
|
|
10
|
+
import { getGlScene3DTime } from './glScene3DTime';
|
|
11
|
+
import { ensureGlShadedProgram } from './glShadedPrelude';
|
|
12
|
+
// The built-in ShadedMaterial forward-lit mesh-material renderer — @flighthq/shading's composable
|
|
13
|
+
// base material on Gl. bind assembles ONE program from the base blinn-phong lit shader plus the
|
|
14
|
+
// material's ordered modifier stack (a third assembly over the shared light block, keyed by the
|
|
15
|
+
// stack's feature-set define-key), uploads the camera view-projection + position, the packed light
|
|
16
|
+
// block, the base diffuse/specular/normal uniforms and maps, the per-frame `time`, then each
|
|
17
|
+
// modifier's uniforms. A plain ShadedMaterial (empty modifier stack) compiles the lean base variant
|
|
18
|
+
// and skips the modifier bind entirely. See registerShadedGlMaterial to install it, and
|
|
19
|
+
// registerBuiltInGlModifierSnippets to enable the built-in modifiers.
|
|
20
|
+
export const shadedGlMeshMaterialRenderer = {
|
|
21
|
+
bind(state, material, lights, camera) {
|
|
22
|
+
const gl = state.gl;
|
|
23
|
+
const shaded = material;
|
|
24
|
+
const modifiers = shaded !== null ? shaded.modifiers : EMPTY_MODIFIERS;
|
|
25
|
+
const program = ensureGlShadedProgram(state, defineKeyForMaterial(shaded), modifiers);
|
|
26
|
+
beginGlMeshDraw(state, program, shaded !== null && shaded.doubleSided);
|
|
27
|
+
setGlMeshViewProjection(gl, program.locViewProjection, camera);
|
|
28
|
+
setGlMeshCameraPosition(gl, program.locCameraPosition, camera);
|
|
29
|
+
bindGlMeshLightBlock(state, program, lights);
|
|
30
|
+
bindGlShadedMaterialUniforms(state, program, shaded);
|
|
31
|
+
gl.uniform1f(program.locTime, getGlScene3DTime(state));
|
|
32
|
+
if (modifiers.length > 0)
|
|
33
|
+
bindGlShadedModifiers(state, program, modifiers);
|
|
34
|
+
},
|
|
35
|
+
draw(state, proxy, geometry) {
|
|
36
|
+
const program = getGlScene3DRuntime(state).activeMeshProgram;
|
|
37
|
+
if (program === null)
|
|
38
|
+
return;
|
|
39
|
+
drawGlMeshSubset(state, program, proxy, geometry);
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
// Registers the built-in ShadedMaterial renderer for ShadedMaterialKind on this state. Opt-in (no
|
|
43
|
+
// top-level side effect); call once per GlRenderState before drawScene3D so meshes with ShadedMaterials
|
|
44
|
+
// draw. Enable the built-in modifiers separately with registerBuiltInGlModifierSnippets — a plain
|
|
45
|
+
// ShadedMaterial needs only this registration.
|
|
46
|
+
export function registerShadedGlMaterial(state) {
|
|
47
|
+
registerGlMeshMaterialRenderer(state, ShadedMaterialKind, shadedGlMeshMaterialRenderer);
|
|
48
|
+
}
|
|
49
|
+
// Iterates the ordered modifier stack and uploads each modifier's uniforms through its registered GL
|
|
50
|
+
// snippet, in the SAME order the compile path emitted them, so a snippet's suffixed uniform names
|
|
51
|
+
// (u_..._<index>) line up with the compiled program. A shared texture-unit cursor hands successive
|
|
52
|
+
// units (from MODIFIER_TEXTURE_UNIT_BASE) to snippets that sample maps. A modifier whose kind has no
|
|
53
|
+
// registered snippet, or a snippet with no `bind`, is skipped (it contributed no GLSL either).
|
|
54
|
+
function bindGlShadedModifiers(state, program, modifiers) {
|
|
55
|
+
const registry = getGlScene3DRuntime(state).modifierSnippetRegistry;
|
|
56
|
+
if (registry === null)
|
|
57
|
+
return;
|
|
58
|
+
const ordered = orderModifierStack(modifiers);
|
|
59
|
+
let nextTextureUnit = MODIFIER_TEXTURE_UNIT_BASE;
|
|
60
|
+
const context = {
|
|
61
|
+
// Hand out modifier units in [BASE, LIMIT); return -1 once exhausted so an over-textured stack
|
|
62
|
+
// drops its excess samplers (bindGlModifierTexture leaves them unbound) instead of walking into
|
|
63
|
+
// the shadow/IBL units and corrupting shadow sampling.
|
|
64
|
+
acquireModifierTextureUnit: () => (nextTextureUnit < MODIFIER_TEXTURE_UNIT_LIMIT ? nextTextureUnit++ : -1),
|
|
65
|
+
index: 0,
|
|
66
|
+
program: program.program,
|
|
67
|
+
state,
|
|
68
|
+
};
|
|
69
|
+
for (let index = 0; index < ordered.length; index++) {
|
|
70
|
+
const modifier = ordered[index];
|
|
71
|
+
const snippet = resolveModifier(registry, modifier.kind);
|
|
72
|
+
if (snippet === null || snippet.bind === undefined)
|
|
73
|
+
continue;
|
|
74
|
+
context.index = index;
|
|
75
|
+
snippet.bind(modifier, context);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function bindGlShadedMaterialUniforms(state, program, material) {
|
|
79
|
+
const gl = state.gl;
|
|
80
|
+
if (material === null) {
|
|
81
|
+
gl.uniform4f(program.locDiffuse, 1, 1, 1, 1);
|
|
82
|
+
gl.uniform4f(program.locSpecular, 1, 1, 1, 1);
|
|
83
|
+
gl.uniform1f(program.locShininess, 32);
|
|
84
|
+
gl.uniform1f(program.locNormalScale, 1);
|
|
85
|
+
gl.uniform1f(program.locAlphaCutoff, 0.5);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
unpackColorToLinear(scratchRgba, material.diffuse);
|
|
89
|
+
gl.uniform4f(program.locDiffuse, scratchRgba[0], scratchRgba[1], scratchRgba[2], scratchRgba[3]);
|
|
90
|
+
unpackColorToLinear(scratchRgba, material.specular);
|
|
91
|
+
gl.uniform4f(program.locSpecular, scratchRgba[0], scratchRgba[1], scratchRgba[2], scratchRgba[3]);
|
|
92
|
+
gl.uniform1f(program.locShininess, material.shininess);
|
|
93
|
+
gl.uniform1f(program.locNormalScale, material.normalScale);
|
|
94
|
+
gl.uniform1f(program.locAlphaCutoff, material.alphaCutoff);
|
|
95
|
+
const diffuseMap = material.diffuseMap;
|
|
96
|
+
if (diffuseMap !== null && diffuseMap.image !== null && hasImageResourcePixels(diffuseMap.image)) {
|
|
97
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
98
|
+
bindGlImageResourceTexture(state, diffuseMap.image, diffuseMap.sampler);
|
|
99
|
+
gl.uniform1i(program.locDiffuseMap, 0);
|
|
100
|
+
}
|
|
101
|
+
const specularMap = material.specularMap;
|
|
102
|
+
if (specularMap !== null && specularMap.image !== null && hasImageResourcePixels(specularMap.image)) {
|
|
103
|
+
gl.activeTexture(gl.TEXTURE1);
|
|
104
|
+
bindGlImageResourceTexture(state, specularMap.image, specularMap.sampler);
|
|
105
|
+
gl.uniform1i(program.locSpecularMap, 1);
|
|
106
|
+
}
|
|
107
|
+
const normalMap = material.normalMap;
|
|
108
|
+
if (normalMap !== null && normalMap.image !== null && hasImageResourcePixels(normalMap.image)) {
|
|
109
|
+
gl.activeTexture(gl.TEXTURE2);
|
|
110
|
+
bindGlImageResourceTexture(state, normalMap.image, normalMap.sampler);
|
|
111
|
+
gl.uniform1i(program.locNormalMap, 2);
|
|
112
|
+
}
|
|
113
|
+
bindGlUvTransform(gl, program, diffuseMap);
|
|
114
|
+
}
|
|
115
|
+
// The base-material feature flags for a ShadedMaterial: which optional maps are present and whether
|
|
116
|
+
// alpha-mask cutoff is active. The modifier feature-set is keyed separately (in ensureGlShadedProgram)
|
|
117
|
+
// from the material's modifier stack.
|
|
118
|
+
function defineKeyForMaterial(material) {
|
|
119
|
+
return {
|
|
120
|
+
alphaMaskEnabled: material !== null && material.alphaMode === 'mask',
|
|
121
|
+
hasDiffuseMap: material !== null && material.diffuseMap !== null && material.diffuseMap.image !== null,
|
|
122
|
+
hasNormalMap: material !== null && material.normalMap !== null && material.normalMap.image !== null,
|
|
123
|
+
hasSpecularMap: material !== null && material.specularMap !== null && material.specularMap.image !== null,
|
|
124
|
+
hasUvTransform: hasGlUvTransform(material !== null ? material.diffuseMap : null),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
// Modifier textures bind above the base material units (diffuse/specular/normal on 0/1/2) and below
|
|
128
|
+
// the shadow map (unit 8) and IBL units (9/10/11), so a modifier's map never clobbers a base or
|
|
129
|
+
// shadow binding. LIMIT mirrors glLitProgram's SHADOW_MAP_TEXTURE_UNIT (8): units [3, 8) are the
|
|
130
|
+
// five modifier-sampler slots; a stack asking for more gets -1 (dropped) rather than unit 8+.
|
|
131
|
+
const MODIFIER_TEXTURE_UNIT_BASE = 3;
|
|
132
|
+
const MODIFIER_TEXTURE_UNIT_LIMIT = 8;
|
|
133
|
+
const EMPTY_MODIFIERS = [];
|
|
134
|
+
const scratchRgba = [0, 0, 0, 0];
|
|
135
|
+
//# sourceMappingURL=shadedGlMeshMaterialRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shadedGlMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/shadedGlMeshMaterialRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { GlMeshMaterialRenderer, GlRenderState } from '@flighthq/types';
|
|
2
|
+
export declare const sheenPbrGlMeshMaterialRenderer: GlMeshMaterialRenderer;
|
|
3
|
+
export declare function registerSheenPbrGlMaterial(state: GlRenderState): void;
|
|
4
|
+
//# sourceMappingURL=sheenPbrGlMeshMaterialRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sheenPbrGlMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/sheenPbrGlMeshMaterialRenderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,sBAAsB,EACtB,aAAa,EAMd,MAAM,iBAAiB,CAAC;AAkBzB,eAAO,MAAM,8BAA8B,EAAE,sBAoC5C,CAAC;AAIF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAErE"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { unpackColorToLinear } from '@flighthq/color';
|
|
2
|
+
import { SheenPbrMaterialKind } from '@flighthq/types';
|
|
3
|
+
import { bindGlMeshLightBlock } from './glLitProgram';
|
|
4
|
+
import { registerGlMeshMaterialRenderer } from './glMeshMaterialRegistry';
|
|
5
|
+
import { beginGlMeshDraw, drawGlMeshSubset, setGlMeshCameraPosition, setGlMeshViewProjection } from './glMeshProgram';
|
|
6
|
+
import { ensureGlPbrProgram } from './glPbrProgramCache';
|
|
7
|
+
import { bindGlPbrStandardBlock, buildGlPbrStandardDefineKey } from './glPbrStandardBlock';
|
|
8
|
+
import { getGlScene3DRuntime } from './glScene3DRuntime';
|
|
9
|
+
// The built-in Sheen (KHR_materials_sheen) forward-lit mesh-material renderer. Sheen adds a
|
|
10
|
+
// retroreflective Charlie ("inverted GGX") lobe on top of the base specular — the soft grazing-angle
|
|
11
|
+
// glow of velvet, satin, and other cloth — tinted by `sheenColor` and widened by `sheenRoughness`.
|
|
12
|
+
// bind composes the material's `standard` block through the shared bindGlPbrStandardBlock and then
|
|
13
|
+
// uploads the sheen color/roughness; the lobe lives behind `#define SHEEN` in the PBR uber-shader.
|
|
14
|
+
// The packed sRgb `sheenColor` is decoded to linear on the CPU (unpackColorToLinear), matching the
|
|
15
|
+
// linear HDR radiance output. The sheen maps are reserved by the descriptor but not yet sampled here.
|
|
16
|
+
// See registerSheenPbrGlMaterial.
|
|
17
|
+
export const sheenPbrGlMeshMaterialRenderer = {
|
|
18
|
+
bind(state, material, lights, camera) {
|
|
19
|
+
const gl = state.gl;
|
|
20
|
+
const sheen = material;
|
|
21
|
+
const standard = sheen !== null ? sheen.standard : null;
|
|
22
|
+
const key = buildGlPbrStandardDefineKey(standard, sheen);
|
|
23
|
+
key.sheenEnabled = true;
|
|
24
|
+
const program = ensureGlPbrProgram(state, key);
|
|
25
|
+
beginGlMeshDraw(state, program, sheen !== null && sheen.doubleSided);
|
|
26
|
+
setGlMeshViewProjection(gl, program.locViewProjection, camera);
|
|
27
|
+
setGlMeshCameraPosition(gl, program.locCameraPosition, camera);
|
|
28
|
+
bindGlMeshLightBlock(state, program, lights);
|
|
29
|
+
bindGlPbrStandardBlock(state, program, standard);
|
|
30
|
+
gl.uniform1f(program.locAlphaCutoff, sheen !== null ? sheen.alphaCutoff : 0.5);
|
|
31
|
+
if (sheen !== null) {
|
|
32
|
+
unpackColorToLinear(scratchRgba, sheen.sheenColor);
|
|
33
|
+
gl.uniform3f(program.locSheenColor, scratchRgba[0], scratchRgba[1], scratchRgba[2]);
|
|
34
|
+
gl.uniform1f(program.locSheenRoughness, sheen.sheenRoughness);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
gl.uniform3f(program.locSheenColor, 0, 0, 0);
|
|
38
|
+
gl.uniform1f(program.locSheenRoughness, 0);
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
draw(state, proxy, geometry) {
|
|
42
|
+
const program = getGlScene3DRuntime(state).activeMeshProgram;
|
|
43
|
+
if (program === null)
|
|
44
|
+
return;
|
|
45
|
+
drawGlMeshSubset(state, program, proxy, geometry);
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
// Installs the built-in Sheen renderer for SheenPbrMaterialKind on this state. Opt-in (no top-level
|
|
49
|
+
// side effect): drawScene3D only draws Sheen subsets once this is called.
|
|
50
|
+
export function registerSheenPbrGlMaterial(state) {
|
|
51
|
+
registerGlMeshMaterialRenderer(state, SheenPbrMaterialKind, sheenPbrGlMeshMaterialRenderer);
|
|
52
|
+
}
|
|
53
|
+
const scratchRgba = [0, 0, 0, 0];
|
|
54
|
+
//# sourceMappingURL=sheenPbrGlMeshMaterialRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sheenPbrGlMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/sheenPbrGlMeshMaterialRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { GlMeshMaterialRenderer, GlRenderState } from '@flighthq/types';
|
|
2
|
+
export declare const specularGlossinessPbrGlMeshMaterialRenderer: GlMeshMaterialRenderer;
|
|
3
|
+
export declare function registerSpecularGlossinessPbrGlMaterial(state: GlRenderState): void;
|
|
4
|
+
//# sourceMappingURL=specularGlossinessPbrGlMeshMaterialRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specularGlossinessPbrGlMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/specularGlossinessPbrGlMeshMaterialRenderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,sBAAsB,EACtB,aAAa,EAOd,MAAM,iBAAiB,CAAC;AAiCzB,eAAO,MAAM,2CAA2C,EAAE,sBAyBzD,CAAC;AAKF,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAElF"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { unpackColorToLinear } from '@flighthq/color';
|
|
2
|
+
import { SpecularGlossinessPbrMaterialKind } from '@flighthq/types';
|
|
3
|
+
import { bindGlMeshLightBlock } from './glLitProgram';
|
|
4
|
+
import { registerGlMeshMaterialRenderer } from './glMeshMaterialRegistry';
|
|
5
|
+
import { beginGlMeshDraw, drawGlMeshSubset, setGlMeshCameraPosition, setGlMeshViewProjection } from './glMeshProgram';
|
|
6
|
+
import { ensureGlPbrProgram } from './glPbrProgramCache';
|
|
7
|
+
import { bindGlPbrStandardBlock, buildGlPbrStandardDefineKey } from './glPbrStandardBlock';
|
|
8
|
+
import { getGlScene3DRuntime } from './glScene3DRuntime';
|
|
9
|
+
// The built-in SpecularGlossiness forward-lit mesh-material renderer (legacy KHR_materials_
|
|
10
|
+
// pbrSpecularGlossiness workflow). There is no spec-gloss path in the shader: this renderer converts
|
|
11
|
+
// the material to a StandardPbrMaterialProperties block on the CPU at bind time and drives the SAME
|
|
12
|
+
// base PBR program (no extension define), so spec-gloss assets render through the one metallic-
|
|
13
|
+
// roughness uber-shader.
|
|
14
|
+
//
|
|
15
|
+
// CONVERSION (Khronos glTF spec-gloss → metallic-roughness, `convertSpecularGlossinessToMetallic`):
|
|
16
|
+
// - roughness = 1 - glossiness (glossiness is the inverse of roughness)
|
|
17
|
+
// - metallic = solveMetallic(diffuseBrightness, specularBrightness): the quadratic that recovers
|
|
18
|
+
// the metallic factor from how far the specular reflectance sits above the 0.04
|
|
19
|
+
// dielectric floor. Fully dielectric specular → 0; albedo-bright specular → 1.
|
|
20
|
+
// - baseColor = lerp from the dielectric estimate (diffuse / (1 - 0.04)) toward the specular color
|
|
21
|
+
// by metallic, so a dielectric keeps its diffuse albedo and a conductor takes its
|
|
22
|
+
// specular tint as F0.
|
|
23
|
+
// The conversion is an approximation — spec-gloss can express specular tints a single metallic-
|
|
24
|
+
// roughness baseColor cannot reproduce exactly — but it matches the reference converter and is
|
|
25
|
+
// stable for typical assets. The specularGlossinessMap (specular RGB + glossiness A) is NOT remapped
|
|
26
|
+
// to a metallic-roughness map here (different packing); only the scalar conversion is applied, while
|
|
27
|
+
// diffuse/emissive/normal/occlusion maps pass straight through to the standard block.
|
|
28
|
+
//
|
|
29
|
+
// Colors are decoded to linear on the CPU before the conversion math; sampled albedo/emissive
|
|
30
|
+
// textures are sRgb-decoded in GLSL, so nothing is double-decoded. See
|
|
31
|
+
// registerSpecularGlossinessPbrGlMaterial.
|
|
32
|
+
export const specularGlossinessPbrGlMeshMaterialRenderer = {
|
|
33
|
+
bind(state, material, lights, camera) {
|
|
34
|
+
const gl = state.gl;
|
|
35
|
+
const specGloss = material;
|
|
36
|
+
const standard = specGloss !== null ? convertSpecularGlossinessToStandard(specGloss) : null;
|
|
37
|
+
const program = ensureGlPbrProgram(state, buildGlPbrStandardDefineKey(standard, specGloss));
|
|
38
|
+
beginGlMeshDraw(state, program, specGloss !== null && specGloss.doubleSided);
|
|
39
|
+
setGlMeshViewProjection(gl, program.locViewProjection, camera);
|
|
40
|
+
setGlMeshCameraPosition(gl, program.locCameraPosition, camera);
|
|
41
|
+
bindGlMeshLightBlock(state, program, lights);
|
|
42
|
+
bindGlPbrStandardBlock(state, program, standard);
|
|
43
|
+
gl.uniform1f(program.locAlphaCutoff, specGloss !== null ? specGloss.alphaCutoff : 0.5);
|
|
44
|
+
},
|
|
45
|
+
draw(state, proxy, geometry) {
|
|
46
|
+
const program = getGlScene3DRuntime(state).activeMeshProgram;
|
|
47
|
+
if (program === null)
|
|
48
|
+
return;
|
|
49
|
+
drawGlMeshSubset(state, program, proxy, geometry);
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
// Installs the built-in SpecularGlossiness renderer for SpecularGlossinessPbrMaterialKind on this
|
|
53
|
+
// state. Opt-in (no top-level side effect): drawScene3D only draws SpecularGlossiness subsets once
|
|
54
|
+
// this is called.
|
|
55
|
+
export function registerSpecularGlossinessPbrGlMaterial(state) {
|
|
56
|
+
registerGlMeshMaterialRenderer(state, SpecularGlossinessPbrMaterialKind, specularGlossinessPbrGlMeshMaterialRenderer);
|
|
57
|
+
}
|
|
58
|
+
// Builds a StandardPbrMaterialProperties block from a spec-gloss material via the Khronos reference
|
|
59
|
+
// conversion. Writes a packed RGBA baseColor/emissive (the standard block re-decodes them), so the
|
|
60
|
+
// downstream bindGlPbrStandardBlock path stays identical to a native StandardPbr material. The
|
|
61
|
+
// returned object is a fresh per-bind block (not pooled) — bind is not a hot inner loop, and reusing
|
|
62
|
+
// a scratch block would alias across draws.
|
|
63
|
+
function convertSpecularGlossinessToStandard(material) {
|
|
64
|
+
unpackColorToLinear(scratchDiffuse, material.diffuse);
|
|
65
|
+
unpackColorToLinear(scratchSpecular, material.specular);
|
|
66
|
+
const specularBrightness = Math.max(scratchSpecular[0], scratchSpecular[1], scratchSpecular[2]);
|
|
67
|
+
const oneMinusSpecularStrength = 1 - specularBrightness;
|
|
68
|
+
const diffuseBrightness = Math.max(scratchDiffuse[0], scratchDiffuse[1], scratchDiffuse[2]);
|
|
69
|
+
const metallic = solveMetallic(diffuseBrightness, specularBrightness, oneMinusSpecularStrength);
|
|
70
|
+
// baseColor: blend the dielectric diffuse estimate and the specular tint by metallic, per the
|
|
71
|
+
// reference converter, then re-pack to RGBA8 for the standard block to decode.
|
|
72
|
+
const denom = Math.max(1 - DIELECTRIC_SPECULAR, 1e-4);
|
|
73
|
+
const r = lerp((scratchDiffuse[0] * oneMinusSpecularStrength) / denom, scratchSpecular[0], metallic);
|
|
74
|
+
const g = lerp((scratchDiffuse[1] * oneMinusSpecularStrength) / denom, scratchSpecular[1], metallic);
|
|
75
|
+
const b = lerp((scratchDiffuse[2] * oneMinusSpecularStrength) / denom, scratchSpecular[2], metallic);
|
|
76
|
+
return {
|
|
77
|
+
alphaMap: null,
|
|
78
|
+
baseColor: packLinearRgba(r, g, b, scratchDiffuse[3]),
|
|
79
|
+
baseColorMap: material.diffuseMap,
|
|
80
|
+
emissive: material.emissive,
|
|
81
|
+
emissiveMap: material.emissiveMap,
|
|
82
|
+
emissiveStrength: material.emissiveStrength,
|
|
83
|
+
metallic,
|
|
84
|
+
metallicRoughnessMap: null,
|
|
85
|
+
normalMap: material.normalMap,
|
|
86
|
+
normalScale: material.normalScale,
|
|
87
|
+
occlusionMap: material.occlusionMap,
|
|
88
|
+
occlusionStrength: material.occlusionStrength,
|
|
89
|
+
roughness: 1 - material.glossiness,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function lerp(a, b, t) {
|
|
93
|
+
return a + (b - a) * t;
|
|
94
|
+
}
|
|
95
|
+
// Re-encodes a linear RGBA color (components in [0,1]) back to a packed 0xRRGGBBAA integer with the
|
|
96
|
+
// sRgb transfer, the inverse of unpackColorToLinear, so the standard block's CPU decode round-trips.
|
|
97
|
+
function packLinearRgba(r, g, b, a) {
|
|
98
|
+
const toByte = (linear) => {
|
|
99
|
+
const clamped = Math.min(Math.max(linear, 0), 1);
|
|
100
|
+
const srgb = clamped <= 0.0031308 ? clamped * 12.92 : 1.055 * Math.pow(clamped, 1 / 2.4) - 0.055;
|
|
101
|
+
return Math.round(srgb * 255) & 0xff;
|
|
102
|
+
};
|
|
103
|
+
const alpha = Math.round(Math.min(Math.max(a, 0), 1) * 255) & 0xff;
|
|
104
|
+
return ((toByte(r) << 24) | (toByte(g) << 16) | (toByte(b) << 8) | alpha) >>> 0;
|
|
105
|
+
}
|
|
106
|
+
// The Khronos spec-gloss → metallic solver: recovers the metallic factor from the diffuse and
|
|
107
|
+
// specular reflectances by solving the quadratic that the metallic-roughness F0 model implies. Below
|
|
108
|
+
// the 0.04 dielectric floor the surface is fully dielectric (metallic 0).
|
|
109
|
+
function solveMetallic(diffuse, specular, oneMinusSpecularStrength) {
|
|
110
|
+
if (specular < DIELECTRIC_SPECULAR)
|
|
111
|
+
return 0;
|
|
112
|
+
const a = DIELECTRIC_SPECULAR;
|
|
113
|
+
const b = (diffuse * oneMinusSpecularStrength) / (1 - DIELECTRIC_SPECULAR) + specular - 2 * DIELECTRIC_SPECULAR;
|
|
114
|
+
const c = DIELECTRIC_SPECULAR - specular;
|
|
115
|
+
const discriminant = Math.max(b * b - 4 * a * c, 0);
|
|
116
|
+
return Math.min(Math.max((-b + Math.sqrt(discriminant)) / (2 * a), 0), 1);
|
|
117
|
+
}
|
|
118
|
+
const DIELECTRIC_SPECULAR = 0.04;
|
|
119
|
+
const scratchDiffuse = [0, 0, 0, 0];
|
|
120
|
+
const scratchSpecular = [0, 0, 0, 0];
|
|
121
|
+
//# sourceMappingURL=specularGlossinessPbrGlMeshMaterialRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specularGlossinessPbrGlMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/specularGlossinessPbrGlMeshMaterialRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { GlMeshMaterialRenderer, GlRenderState } from '@flighthq/types';
|
|
2
|
+
export declare const specularPbrGlMeshMaterialRenderer: GlMeshMaterialRenderer;
|
|
3
|
+
export declare function registerSpecularPbrGlMaterial(state: GlRenderState): void;
|
|
4
|
+
//# sourceMappingURL=specularPbrGlMeshMaterialRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specularPbrGlMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/specularPbrGlMeshMaterialRenderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,sBAAsB,EACtB,aAAa,EAMd,MAAM,iBAAiB,CAAC;AAmBzB,eAAO,MAAM,iCAAiC,EAAE,sBAoC/C,CAAC;AAIF,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAExE"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { unpackColorToLinear } from '@flighthq/color';
|
|
2
|
+
import { SpecularPbrMaterialKind } from '@flighthq/types';
|
|
3
|
+
import { bindGlMeshLightBlock } from './glLitProgram';
|
|
4
|
+
import { registerGlMeshMaterialRenderer } from './glMeshMaterialRegistry';
|
|
5
|
+
import { beginGlMeshDraw, drawGlMeshSubset, setGlMeshCameraPosition, setGlMeshViewProjection } from './glMeshProgram';
|
|
6
|
+
import { ensureGlPbrProgram } from './glPbrProgramCache';
|
|
7
|
+
import { bindGlPbrStandardBlock, buildGlPbrStandardDefineKey } from './glPbrStandardBlock';
|
|
8
|
+
import { getGlScene3DRuntime } from './glScene3DRuntime';
|
|
9
|
+
// The built-in Specular (KHR_materials_specular) forward-lit mesh-material renderer. This extension
|
|
10
|
+
// gives independent control of a dielectric's specular reflection: `specular` scales the base
|
|
11
|
+
// reflectance and `specularColor` tints F0, letting a surface be more or less reflective than the
|
|
12
|
+
// fixed 0.04 dielectric default without changing its diffuse albedo (metals keep their albedo-tinted
|
|
13
|
+
// F0). The shader recomputes F0 = mix(min(0.04 * specularColor, 1) * specular, albedo, metallic)
|
|
14
|
+
// behind `#define SPECULAR_EXT`. bind composes the material's `standard` block through the shared
|
|
15
|
+
// bindGlPbrStandardBlock and uploads the specular scale + linear-decoded specularColor. The specular
|
|
16
|
+
// strength/color maps are reserved by the descriptor but not yet sampled. See
|
|
17
|
+
// registerSpecularPbrGlMaterial.
|
|
18
|
+
export const specularPbrGlMeshMaterialRenderer = {
|
|
19
|
+
bind(state, material, lights, camera) {
|
|
20
|
+
const gl = state.gl;
|
|
21
|
+
const specular = material;
|
|
22
|
+
const standard = specular !== null ? specular.standard : null;
|
|
23
|
+
const key = buildGlPbrStandardDefineKey(standard, specular);
|
|
24
|
+
key.specularEnabled = true;
|
|
25
|
+
const program = ensureGlPbrProgram(state, key);
|
|
26
|
+
beginGlMeshDraw(state, program, specular !== null && specular.doubleSided);
|
|
27
|
+
setGlMeshViewProjection(gl, program.locViewProjection, camera);
|
|
28
|
+
setGlMeshCameraPosition(gl, program.locCameraPosition, camera);
|
|
29
|
+
bindGlMeshLightBlock(state, program, lights);
|
|
30
|
+
bindGlPbrStandardBlock(state, program, standard);
|
|
31
|
+
gl.uniform1f(program.locAlphaCutoff, specular !== null ? specular.alphaCutoff : 0.5);
|
|
32
|
+
if (specular !== null) {
|
|
33
|
+
unpackColorToLinear(scratchRgba, specular.specularColor);
|
|
34
|
+
gl.uniform1f(program.locSpecular, specular.specular);
|
|
35
|
+
gl.uniform3f(program.locSpecularColor, scratchRgba[0], scratchRgba[1], scratchRgba[2]);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
gl.uniform1f(program.locSpecular, 1);
|
|
39
|
+
gl.uniform3f(program.locSpecularColor, 1, 1, 1);
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
draw(state, proxy, geometry) {
|
|
43
|
+
const program = getGlScene3DRuntime(state).activeMeshProgram;
|
|
44
|
+
if (program === null)
|
|
45
|
+
return;
|
|
46
|
+
drawGlMeshSubset(state, program, proxy, geometry);
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
// Installs the built-in Specular renderer for SpecularPbrMaterialKind on this state. Opt-in (no
|
|
50
|
+
// top-level side effect): drawScene3D only draws Specular subsets once this is called.
|
|
51
|
+
export function registerSpecularPbrGlMaterial(state) {
|
|
52
|
+
registerGlMeshMaterialRenderer(state, SpecularPbrMaterialKind, specularPbrGlMeshMaterialRenderer);
|
|
53
|
+
}
|
|
54
|
+
const scratchRgba = [0, 0, 0, 0];
|
|
55
|
+
//# sourceMappingURL=specularPbrGlMeshMaterialRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specularPbrGlMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/specularPbrGlMeshMaterialRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standardPbrGlMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/standardPbrGlMeshMaterialRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,sBAAsB,EAOvB,MAAM,iBAAiB,CAAC;AAkBzB,eAAO,MAAM,iCAAiC,EAAE,sBAwB/C,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { bindGlMeshLightBlock } from './glLitProgram';
|
|
2
|
+
import { beginGlMeshDraw, drawGlMeshSubset, setGlMeshCameraPosition, setGlMeshViewProjection } from './glMeshProgram';
|
|
3
|
+
import { ensureGlPbrProgram } from './glPbrProgramCache';
|
|
4
|
+
import { bindGlPbrStandardBlock, buildGlPbrStandardDefineKey } from './glPbrStandardBlock';
|
|
5
|
+
import { getGlScene3DRuntime } from './glScene3DRuntime';
|
|
6
|
+
// The built-in StandardPbr forward-lit mesh-material renderer (GlMeshMaterialRenderer for
|
|
7
|
+
// StandardPbrMaterialKind). bind selects the uber-shader variant for the material's maps/alpha mode,
|
|
8
|
+
// uploads the shared per-run uniforms (camera view-projection + position, the packed light block),
|
|
9
|
+
// and the full standard PBR block (scalars/colors + base-color/normal/metallic-roughness/occlusion/
|
|
10
|
+
// emissive maps) via the shared bindGlPbrStandardBlock helper — StandardPbr passes itself as the
|
|
11
|
+
// properties block since StandardPbrMaterial IS a StandardPbrMaterialProperties. draw uploads the
|
|
12
|
+
// geometry's GPU buffers lazily (cached by geometry.version), sets the per-draw model + normal
|
|
13
|
+
// matrices from the proxy, and issues the indexed draw over the proxy's subset with depth-test LESS +
|
|
14
|
+
// depth-write on and back-face culling unless the material is double-sided. See
|
|
15
|
+
// registerStandardPbrGlMaterial to install it.
|
|
16
|
+
export const standardPbrGlMeshMaterialRenderer = {
|
|
17
|
+
bind(state, material, lights, camera) {
|
|
18
|
+
const gl = state.gl;
|
|
19
|
+
const pbr = material;
|
|
20
|
+
const program = ensureGlPbrProgram(state, buildGlPbrStandardDefineKey(pbr, pbr));
|
|
21
|
+
beginGlMeshDraw(state, program, pbr !== null && pbr.doubleSided);
|
|
22
|
+
setGlMeshViewProjection(gl, program.locViewProjection, camera);
|
|
23
|
+
setGlMeshCameraPosition(gl, program.locCameraPosition, camera);
|
|
24
|
+
bindGlMeshLightBlock(state, program, lights);
|
|
25
|
+
bindGlPbrStandardBlock(state, program, pbr);
|
|
26
|
+
gl.uniform1f(program.locAlphaCutoff, pbr !== null ? pbr.alphaCutoff : 0.5);
|
|
27
|
+
},
|
|
28
|
+
draw(state, proxy, geometry) {
|
|
29
|
+
const program = getGlScene3DRuntime(state).activeMeshProgram;
|
|
30
|
+
if (program === null)
|
|
31
|
+
return;
|
|
32
|
+
drawGlMeshSubset(state, program, proxy, geometry);
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=standardPbrGlMeshMaterialRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standardPbrGlMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/standardPbrGlMeshMaterialRenderer.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AACtH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,0FAA0F;AAC1F,qGAAqG;AACrG,mGAAmG;AACnG,oGAAoG;AACpG,iGAAiG;AACjG,kGAAkG;AAClG,+FAA+F;AAC/F,sGAAsG;AACtG,gFAAgF;AAChF,+CAA+C;AAC/C,MAAM,CAAC,MAAM,iCAAiC,GAA2B;IACvE,IAAI,CACF,KAAoB,EACpB,QAAmC,EACnC,MAAmC,EACnC,MAA0B;QAE1B,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,QAAgD,CAAC;QAC7D,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,2BAA2B,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACjF,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;QAEjE,uBAAuB,CAAC,EAAE,EAAE,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAC/D,uBAAuB,CAAC,EAAE,EAAE,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAC/D,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7C,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5C,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,CAAC,KAAoB,EAAE,KAAmC,EAAE,QAAgC;QAC9F,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC;QAC7D,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO;QAC7B,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { GlMeshMaterialRenderer, GlRenderState } from '@flighthq/types';
|
|
2
|
+
export declare const subsurfacePbrGlMeshMaterialRenderer: GlMeshMaterialRenderer;
|
|
3
|
+
export declare function registerSubsurfacePbrGlMaterial(state: GlRenderState): void;
|
|
4
|
+
//# sourceMappingURL=subsurfacePbrGlMeshMaterialRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subsurfacePbrGlMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/subsurfacePbrGlMeshMaterialRenderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,sBAAsB,EACtB,aAAa,EAMd,MAAM,iBAAiB,CAAC;AAmBzB,eAAO,MAAM,mCAAmC,EAAE,sBAsCjD,CAAC;AAIF,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAE1E"}
|