@babylonjs/core 8.40.1 → 8.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/Engines/Extensions/engine.computeShader.d.ts +2 -3
  2. package/Engines/Extensions/engine.computeShader.js.map +1 -1
  3. package/Engines/ICanvas.d.ts +3 -3
  4. package/Engines/ICanvas.js.map +1 -1
  5. package/Engines/abstractEngine.js +2 -2
  6. package/Engines/abstractEngine.js.map +1 -1
  7. package/Engines/webgpuEngine.js +2 -2
  8. package/Engines/webgpuEngine.js.map +1 -1
  9. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +3 -0
  10. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +29 -14
  11. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  12. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.d.ts +12 -41
  13. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js +106 -184
  14. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
  15. package/FrameGraph/Passes/renderPass.js +3 -1
  16. package/FrameGraph/Passes/renderPass.js.map +1 -1
  17. package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +17 -58
  18. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +112 -122
  19. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  20. package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +11 -0
  21. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +62 -26
  22. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  23. package/FrameGraph/Tasks/Texture/clearTextureTask.js +18 -8
  24. package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
  25. package/FrameGraph/frameGraphContext.js +2 -2
  26. package/FrameGraph/frameGraphContext.js.map +1 -1
  27. package/FrameGraph/frameGraphRenderContext.js +3 -3
  28. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  29. package/FrameGraph/frameGraphTask.js +2 -2
  30. package/FrameGraph/frameGraphTask.js.map +1 -1
  31. package/FrameGraph/frameGraphUtils.d.ts +2 -2
  32. package/FrameGraph/frameGraphUtils.js +6 -6
  33. package/FrameGraph/frameGraphUtils.js.map +1 -1
  34. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  35. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +2 -0
  36. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  37. package/Materials/materialHelper.geometryrendering.d.ts +5 -1
  38. package/Materials/materialHelper.geometryrendering.js +11 -2
  39. package/Materials/materialHelper.geometryrendering.js.map +1 -1
  40. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +1 -1
  41. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  42. package/Rendering/objectRenderer.d.ts +6 -2
  43. package/Rendering/objectRenderer.js +69 -63
  44. package/Rendering/objectRenderer.js.map +1 -1
  45. package/Shaders/gaussianSplatting.vertex.js +2 -2
  46. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  47. package/ShadersWGSL/gaussianSplatting.vertex.js +3 -3
  48. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  49. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"gaussianSplattingMaterial.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GaussianSplatting/gaussianSplattingMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SubMesh } from \"../../Meshes/subMesh\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { Mesh } from \"../../Meshes/mesh\";\r\nimport type { Effect, IEffectCreationOptions } from \"../../Materials/effect\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { Matrix } from \"../../Maths/math.vector\";\r\nimport type { GaussianSplattingMesh } from \"../../Meshes/GaussianSplatting/gaussianSplattingMesh\";\r\nimport { SerializationHelper } from \"../../Misc/decorators.serialization\";\r\nimport { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport { MaterialDefines } from \"../../Materials/materialDefines\";\r\nimport { PushMaterial } from \"../../Materials/pushMaterial\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\nimport { AddClipPlaneUniforms, BindClipPlane } from \"../clipPlaneMaterialHelper\";\r\nimport { Camera } from \"../../Cameras/camera\";\r\nimport { ShadowDepthWrapper } from \"../../Materials/shadowDepthWrapper\";\r\nimport { ShaderMaterial } from \"../../Materials/shaderMaterial\";\r\n\r\nimport \"../../Shaders/gaussianSplatting.fragment\";\r\nimport \"../../Shaders/gaussianSplatting.vertex\";\r\nimport \"../../ShadersWGSL/gaussianSplatting.fragment\";\r\nimport \"../../ShadersWGSL/gaussianSplatting.vertex\";\r\nimport \"../../Shaders/gaussianSplattingDepth.fragment\";\r\nimport \"../../Shaders/gaussianSplattingDepth.vertex\";\r\nimport \"../../ShadersWGSL/gaussianSplattingDepth.fragment\";\r\nimport \"../../ShadersWGSL/gaussianSplattingDepth.vertex\";\r\nimport {\r\n BindFogParameters,\r\n BindLogDepth,\r\n PrepareAttributesForInstances,\r\n PrepareDefinesForAttributes,\r\n PrepareDefinesForFrameBoundValues,\r\n PrepareDefinesForMisc,\r\n PrepareUniformsAndSamplersList,\r\n} from \"../materialHelper.functions\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\n\r\n/**\r\n * @internal\r\n */\r\nclass GaussianSplattingMaterialDefines extends MaterialDefines {\r\n public FOG = false;\r\n public THIN_INSTANCES = true;\r\n public LOGARITHMICDEPTH = false;\r\n public CLIPPLANE = false;\r\n public CLIPPLANE2 = false;\r\n public CLIPPLANE3 = false;\r\n public CLIPPLANE4 = false;\r\n public CLIPPLANE5 = false;\r\n public CLIPPLANE6 = false;\r\n public SH_DEGREE = 0;\r\n public COMPENSATION = false;\r\n\r\n /**\r\n * Constructor of the defines.\r\n */\r\n constructor() {\r\n super();\r\n this.rebuild();\r\n }\r\n}\r\n\r\n/**\r\n * GaussianSplattingMaterial material used to render Gaussian Splatting\r\n * @experimental\r\n */\r\nexport class GaussianSplattingMaterial extends PushMaterial {\r\n /**\r\n * Instantiates a Gaussian Splatting Material in the given scene\r\n * @param name The friendly name of the material\r\n * @param scene The scene to add the material to\r\n */\r\n constructor(name: string, scene?: Scene) {\r\n super(name, scene);\r\n\r\n this.backFaceCulling = false;\r\n this.shadowDepthWrapper = GaussianSplattingMaterial._MakeGaussianSplattingShadowDepthWrapper(scene!, this.shaderLanguage);\r\n }\r\n\r\n /**\r\n * Point spread function (default 0.3). Can be overriden per GS material\r\n */\r\n public static KernelSize: number = 0.3;\r\n\r\n /**\r\n * Compensation\r\n */\r\n public static Compensation: boolean = false;\r\n\r\n /**\r\n * Point spread function (default 0.3). Can be overriden per GS material, otherwise, using default static `KernelSize` value\r\n */\r\n public kernelSize = GaussianSplattingMaterial.KernelSize;\r\n private _compensation = GaussianSplattingMaterial.Compensation;\r\n\r\n // set to true when material defines are dirty\r\n private _isDirty = false;\r\n\r\n /**\r\n * Set compensation default value is `GaussianSplattingMaterial.Compensation`\r\n */\r\n public set compensation(value: boolean) {\r\n this._isDirty = this._isDirty != value;\r\n this._compensation = value;\r\n }\r\n\r\n /**\r\n * Get compensation\r\n */\r\n public get compensation(): boolean {\r\n return this._compensation;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that current material needs to register RTT\r\n */\r\n public override get hasRenderTargetTextures(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Specifies whether or not this material should be rendered in alpha test mode.\r\n * @returns false\r\n */\r\n public override needAlphaTesting(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Specifies whether or not this material should be rendered in alpha blend mode.\r\n * @returns true\r\n */\r\n public override needAlphaBlending(): boolean {\r\n return true;\r\n }\r\n\r\n protected static _Attribs = [VertexBuffer.PositionKind, \"splatIndex0\", \"splatIndex1\", \"splatIndex2\", \"splatIndex3\"];\r\n protected static _Samplers = [\"covariancesATexture\", \"covariancesBTexture\", \"centersTexture\", \"colorsTexture\", \"shTexture0\", \"shTexture1\", \"shTexture2\"];\r\n protected static _UniformBuffers = [\"Scene\", \"Mesh\"];\r\n protected static _Uniforms = [\r\n \"world\",\r\n \"view\",\r\n \"projection\",\r\n \"vFogInfos\",\r\n \"vFogColor\",\r\n \"logarithmicDepthConstant\",\r\n \"invViewport\",\r\n \"dataTextureSize\",\r\n \"focal\",\r\n \"eyePosition\",\r\n \"kernelSize\",\r\n \"viewDirectionFactor\",\r\n ];\r\n private _sourceMesh: GaussianSplattingMesh | null = null;\r\n /**\r\n * Checks whether the material is ready to be rendered for a given mesh.\r\n * @param mesh The mesh to render\r\n * @param subMesh The submesh to check against\r\n * @returns true if all the dependencies are ready (Textures, Effects...)\r\n */\r\n public override isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh): boolean {\r\n const useInstances = true;\r\n\r\n const drawWrapper = subMesh._drawWrapper;\r\n let defines = <GaussianSplattingMaterialDefines>subMesh.materialDefines;\r\n\r\n if (defines && this._isDirty) {\r\n defines.markAsUnprocessed();\r\n }\r\n\r\n if (drawWrapper.effect && this.isFrozen) {\r\n if (drawWrapper._wasPreviouslyReady && drawWrapper._wasPreviouslyUsingInstances === useInstances) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n defines = subMesh.materialDefines = new GaussianSplattingMaterialDefines();\r\n }\r\n\r\n const scene = this.getScene();\r\n\r\n if (this._isReadyForSubMesh(subMesh)) {\r\n return true;\r\n }\r\n\r\n if (!this._sourceMesh) {\r\n return false;\r\n }\r\n\r\n const engine = scene.getEngine();\r\n const gsMesh = this._sourceMesh;\r\n\r\n // Misc.\r\n PrepareDefinesForMisc(\r\n mesh,\r\n scene,\r\n this._useLogarithmicDepth,\r\n this.pointsCloud,\r\n this.fogEnabled,\r\n false,\r\n defines,\r\n undefined,\r\n undefined,\r\n undefined,\r\n this._isVertexOutputInvariant\r\n );\r\n\r\n // Values that need to be evaluated on every frame\r\n PrepareDefinesForFrameBoundValues(scene, engine, this, defines, useInstances, null, true);\r\n\r\n // Attribs\r\n PrepareDefinesForAttributes(mesh, defines, false, false);\r\n\r\n // SH is disabled for webGL1\r\n if (engine.version > 1 || engine.isWebGPU) {\r\n defines[\"SH_DEGREE\"] = gsMesh.shDegree;\r\n }\r\n\r\n // Compensation\r\n const splatMaterial = gsMesh.material as GaussianSplattingMaterial;\r\n defines[\"COMPENSATION\"] = splatMaterial && splatMaterial.compensation ? splatMaterial.compensation : GaussianSplattingMaterial.Compensation;\r\n\r\n // Get correct effect\r\n if (defines.isDirty) {\r\n defines.markAsProcessed();\r\n scene.resetCachedMaterial();\r\n\r\n //Attributes\r\n PrepareAttributesForInstances(GaussianSplattingMaterial._Attribs, defines);\r\n\r\n PrepareUniformsAndSamplersList(<IEffectCreationOptions>{\r\n uniformsNames: GaussianSplattingMaterial._Uniforms,\r\n uniformBuffersNames: GaussianSplattingMaterial._UniformBuffers,\r\n samplers: GaussianSplattingMaterial._Samplers,\r\n defines: defines,\r\n });\r\n\r\n AddClipPlaneUniforms(GaussianSplattingMaterial._Uniforms);\r\n\r\n const join = defines.toString();\r\n const effect = scene.getEngine().createEffect(\r\n \"gaussianSplatting\",\r\n <IEffectCreationOptions>{\r\n attributes: GaussianSplattingMaterial._Attribs,\r\n uniformsNames: GaussianSplattingMaterial._Uniforms,\r\n uniformBuffersNames: GaussianSplattingMaterial._UniformBuffers,\r\n samplers: GaussianSplattingMaterial._Samplers,\r\n defines: join,\r\n onCompiled: this.onCompiled,\r\n onError: this.onError,\r\n indexParameters: {},\r\n shaderLanguage: this._shaderLanguage,\r\n extraInitializationsAsync: async () => {\r\n if (this._shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([import(\"../../ShadersWGSL/gaussianSplatting.fragment\"), import(\"../../ShadersWGSL/gaussianSplatting.vertex\")]);\r\n } else {\r\n await Promise.all([import(\"../../Shaders/gaussianSplatting.fragment\"), import(\"../../Shaders/gaussianSplatting.vertex\")]);\r\n }\r\n },\r\n },\r\n engine\r\n );\r\n subMesh.setEffect(effect, defines, this._materialContext);\r\n }\r\n\r\n if (!subMesh.effect || !subMesh.effect.isReady()) {\r\n return false;\r\n }\r\n\r\n defines._renderId = scene.getRenderId();\r\n drawWrapper._wasPreviouslyReady = true;\r\n drawWrapper._wasPreviouslyUsingInstances = useInstances;\r\n this._isDirty = false;\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * GaussianSplattingMaterial belongs to a single mesh\r\n * @param mesh mesh this material belongs to\r\n */\r\n public setSourceMesh(mesh: GaussianSplattingMesh) {\r\n this._sourceMesh = mesh;\r\n }\r\n /**\r\n * Bind material effect for a specific Gaussian Splatting mesh\r\n * @param mesh Gaussian splatting mesh\r\n * @param effect Splatting material or node material\r\n * @param scene scene that contains mesh and camera used for rendering\r\n */\r\n public static BindEffect(mesh: Mesh, effect: Effect, scene: Scene): void {\r\n const engine = scene.getEngine();\r\n const camera = scene.activeCamera;\r\n\r\n const renderWidth = engine.getRenderWidth() * camera!.viewport.width;\r\n const renderHeight = engine.getRenderHeight() * camera!.viewport.height;\r\n\r\n const gsMaterial = mesh.material as GaussianSplattingMaterial;\r\n\r\n if (!gsMaterial._sourceMesh) {\r\n return;\r\n }\r\n\r\n const gsMesh = gsMaterial._sourceMesh;\r\n\r\n // check if rigcamera, get number of rigs\r\n const numberOfRigs = camera?.rigParent?.rigCameras.length || 1;\r\n\r\n effect.setFloat2(\"invViewport\", 1 / (renderWidth / numberOfRigs), 1 / renderHeight);\r\n\r\n let focal = 1000;\r\n\r\n if (camera) {\r\n /*\r\n more explicit version:\r\n const t = camera.getProjectionMatrix().m[5];\r\n const FovY = Math.atan(1.0 / t) * 2.0;\r\n focal = renderHeight / 2.0 / Math.tan(FovY / 2.0);\r\n Using a shorter version here to not have tan(atan) and 2.0 factor\r\n */\r\n const t = camera.getProjectionMatrix().m[5];\r\n if (camera.fovMode == Camera.FOVMODE_VERTICAL_FIXED) {\r\n focal = (renderHeight * t) / 2.0;\r\n } else {\r\n focal = (renderWidth * t) / 2.0;\r\n }\r\n }\r\n\r\n effect.setFloat2(\"focal\", focal, focal);\r\n effect.setVector3(\"viewDirectionFactor\", gsMesh.viewDirectionFactor);\r\n effect.setFloat(\"kernelSize\", gsMaterial && gsMaterial.kernelSize ? gsMaterial.kernelSize : GaussianSplattingMaterial.KernelSize);\r\n scene.bindEyePosition(effect, \"eyePosition\", true);\r\n\r\n if (gsMesh.covariancesATexture) {\r\n const textureSize = gsMesh.covariancesATexture.getSize();\r\n\r\n effect.setFloat2(\"dataTextureSize\", textureSize.width, textureSize.height);\r\n\r\n effect.setTexture(\"covariancesATexture\", gsMesh.covariancesATexture);\r\n effect.setTexture(\"covariancesBTexture\", gsMesh.covariancesBTexture);\r\n effect.setTexture(\"centersTexture\", gsMesh.centersTexture);\r\n effect.setTexture(\"colorsTexture\", gsMesh.colorsTexture);\r\n\r\n if (gsMesh.shTextures) {\r\n for (let i = 0; i < gsMesh.shTextures?.length; i++) {\r\n effect.setTexture(`shTexture${i}`, gsMesh.shTextures[i]);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Binds the submesh to this material by preparing the effect and shader to draw\r\n * @param world defines the world transformation matrix\r\n * @param mesh defines the mesh containing the submesh\r\n * @param subMesh defines the submesh to bind the material to\r\n */\r\n public override bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n const scene = this.getScene();\r\n\r\n const defines = <GaussianSplattingMaterialDefines>subMesh.materialDefines;\r\n if (!defines) {\r\n return;\r\n }\r\n\r\n const effect = subMesh.effect;\r\n if (!effect) {\r\n return;\r\n }\r\n this._activeEffect = effect;\r\n\r\n // Matrices Mesh.\r\n mesh.getMeshUniformBuffer().bindToEffect(effect, \"Mesh\");\r\n mesh.transferToEffect(world);\r\n\r\n // Bind data\r\n const mustRebind = this._mustRebind(scene, effect, subMesh, mesh.visibility);\r\n\r\n if (mustRebind) {\r\n this.bindView(effect);\r\n this.bindViewProjection(effect);\r\n GaussianSplattingMaterial.BindEffect(mesh, this._activeEffect, scene);\r\n // Clip plane\r\n BindClipPlane(effect, this, scene);\r\n } else if (scene.getEngine()._features.needToAlwaysBindUniformBuffers) {\r\n this._needToBindSceneUbo = true;\r\n }\r\n\r\n // Fog\r\n BindFogParameters(scene, mesh, effect);\r\n\r\n // Log. depth\r\n if (this.useLogarithmicDepth) {\r\n BindLogDepth(defines, effect, scene);\r\n }\r\n\r\n this._afterBind(mesh, this._activeEffect, subMesh);\r\n }\r\n\r\n protected static _MakeGaussianSplattingShadowDepthWrapper(scene: Scene, shaderLanguage: ShaderLanguage): ShadowDepthWrapper {\r\n const shaderMaterial = new ShaderMaterial(\r\n \"gaussianSplattingDepth\",\r\n scene,\r\n {\r\n vertex: \"gaussianSplattingDepth\",\r\n fragment: \"gaussianSplattingDepth\",\r\n },\r\n {\r\n attributes: GaussianSplattingMaterial._Attribs,\r\n uniforms: GaussianSplattingMaterial._Uniforms,\r\n samplers: GaussianSplattingMaterial._Samplers,\r\n uniformBuffers: GaussianSplattingMaterial._UniformBuffers,\r\n shaderLanguage: shaderLanguage,\r\n }\r\n );\r\n\r\n const shadowDepthWrapper = new ShadowDepthWrapper(shaderMaterial, scene, {\r\n standalone: true,\r\n });\r\n\r\n shaderMaterial.onBindObservable.add((mesh: AbstractMesh) => {\r\n const effect = shaderMaterial.getEffect()!;\r\n const gsMaterial = mesh.material as GaussianSplattingMaterial;\r\n const gsMesh = mesh as GaussianSplattingMesh;\r\n\r\n mesh.getMeshUniformBuffer().bindToEffect(effect, \"Mesh\");\r\n shaderMaterial.bindView(effect);\r\n shaderMaterial.bindViewProjection(effect);\r\n\r\n const shadowmapWidth = scene.getEngine().getRenderWidth();\r\n const shadowmapHeight = scene.getEngine().getRenderHeight();\r\n effect.setFloat2(\"invViewport\", 1 / shadowmapWidth, 1 / shadowmapHeight);\r\n\r\n const projection = scene.getProjectionMatrix();\r\n const t = projection.m[5];\r\n const focal = (shadowmapWidth * t) / 2.0;\r\n\r\n effect.setFloat2(\"focal\", focal, focal);\r\n effect.setFloat(\"kernelSize\", gsMaterial && gsMaterial.kernelSize ? gsMaterial.kernelSize : GaussianSplattingMaterial.KernelSize);\r\n\r\n if (gsMesh.covariancesATexture) {\r\n const textureSize = gsMesh.covariancesATexture.getSize();\r\n effect.setFloat2(\"dataTextureSize\", textureSize.width, textureSize.height);\r\n\r\n effect.setTexture(\"covariancesATexture\", gsMesh.covariancesATexture);\r\n effect.setTexture(\"covariancesBTexture\", gsMesh.covariancesBTexture);\r\n effect.setTexture(\"centersTexture\", gsMesh.centersTexture);\r\n effect.setTexture(\"colorsTexture\", gsMesh.colorsTexture);\r\n }\r\n });\r\n\r\n return shadowDepthWrapper;\r\n }\r\n\r\n /**\r\n * Clones the material.\r\n * @param name The cloned name.\r\n * @returns The cloned material.\r\n */\r\n public override clone(name: string): GaussianSplattingMaterial {\r\n return SerializationHelper.Clone(() => new GaussianSplattingMaterial(name, this.getScene()), this);\r\n }\r\n\r\n /**\r\n * Serializes the current material to its JSON representation.\r\n * @returns The JSON representation.\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n serializationObject.customType = \"BABYLON.GaussianSplattingMaterial\";\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Gets the class name of the material\r\n * @returns \"GaussianSplattingMaterial\"\r\n */\r\n public override getClassName(): string {\r\n return \"GaussianSplattingMaterial\";\r\n }\r\n\r\n /**\r\n * Parse a JSON input to create back a Gaussian Splatting material.\r\n * @param source The JSON data to parse\r\n * @param scene The scene to create the parsed material in\r\n * @param rootUrl The root url of the assets the material depends upon\r\n * @returns the instantiated GaussianSplattingMaterial.\r\n */\r\n public static override Parse(source: any, scene: Scene, rootUrl: string): GaussianSplattingMaterial {\r\n return SerializationHelper.Parse(() => new GaussianSplattingMaterial(source.name, scene), source, scene, rootUrl);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.GaussianSplattingMaterial\", GaussianSplattingMaterial);\r\n"]}
1
+ {"version":3,"file":"gaussianSplattingMaterial.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GaussianSplatting/gaussianSplattingMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SubMesh } from \"../../Meshes/subMesh\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { Mesh } from \"../../Meshes/mesh\";\r\nimport type { Effect, IEffectCreationOptions } from \"../../Materials/effect\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { Matrix } from \"../../Maths/math.vector\";\r\nimport type { GaussianSplattingMesh } from \"../../Meshes/GaussianSplatting/gaussianSplattingMesh\";\r\nimport { SerializationHelper } from \"../../Misc/decorators.serialization\";\r\nimport { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport { MaterialDefines } from \"../../Materials/materialDefines\";\r\nimport { PushMaterial } from \"../../Materials/pushMaterial\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\nimport { AddClipPlaneUniforms, BindClipPlane } from \"../clipPlaneMaterialHelper\";\r\nimport { Camera } from \"../../Cameras/camera\";\r\nimport { ShadowDepthWrapper } from \"../../Materials/shadowDepthWrapper\";\r\nimport { ShaderMaterial } from \"../../Materials/shaderMaterial\";\r\n\r\nimport \"../../Shaders/gaussianSplatting.fragment\";\r\nimport \"../../Shaders/gaussianSplatting.vertex\";\r\nimport \"../../ShadersWGSL/gaussianSplatting.fragment\";\r\nimport \"../../ShadersWGSL/gaussianSplatting.vertex\";\r\nimport \"../../Shaders/gaussianSplattingDepth.fragment\";\r\nimport \"../../Shaders/gaussianSplattingDepth.vertex\";\r\nimport \"../../ShadersWGSL/gaussianSplattingDepth.fragment\";\r\nimport \"../../ShadersWGSL/gaussianSplattingDepth.vertex\";\r\nimport {\r\n BindFogParameters,\r\n BindLogDepth,\r\n PrepareAttributesForInstances,\r\n PrepareDefinesForAttributes,\r\n PrepareDefinesForFrameBoundValues,\r\n PrepareDefinesForMisc,\r\n PrepareUniformsAndSamplersList,\r\n} from \"../materialHelper.functions\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\n\r\n/**\r\n * @internal\r\n */\r\nclass GaussianSplattingMaterialDefines extends MaterialDefines {\r\n public FOG = false;\r\n public THIN_INSTANCES = true;\r\n public LOGARITHMICDEPTH = false;\r\n public CLIPPLANE = false;\r\n public CLIPPLANE2 = false;\r\n public CLIPPLANE3 = false;\r\n public CLIPPLANE4 = false;\r\n public CLIPPLANE5 = false;\r\n public CLIPPLANE6 = false;\r\n public SH_DEGREE = 0;\r\n public COMPENSATION = false;\r\n\r\n /**\r\n * Constructor of the defines.\r\n */\r\n constructor() {\r\n super();\r\n this.rebuild();\r\n }\r\n}\r\n\r\n/**\r\n * GaussianSplattingMaterial material used to render Gaussian Splatting\r\n * @experimental\r\n */\r\nexport class GaussianSplattingMaterial extends PushMaterial {\r\n /**\r\n * Instantiates a Gaussian Splatting Material in the given scene\r\n * @param name The friendly name of the material\r\n * @param scene The scene to add the material to\r\n */\r\n constructor(name: string, scene?: Scene) {\r\n super(name, scene);\r\n\r\n this.backFaceCulling = false;\r\n this.shadowDepthWrapper = GaussianSplattingMaterial._MakeGaussianSplattingShadowDepthWrapper(scene!, this.shaderLanguage);\r\n }\r\n\r\n /**\r\n * Point spread function (default 0.3). Can be overriden per GS material\r\n */\r\n public static KernelSize: number = 0.3;\r\n\r\n /**\r\n * Compensation\r\n */\r\n public static Compensation: boolean = false;\r\n\r\n /**\r\n * Point spread function (default 0.3). Can be overriden per GS material, otherwise, using default static `KernelSize` value\r\n */\r\n public kernelSize = GaussianSplattingMaterial.KernelSize;\r\n private _compensation = GaussianSplattingMaterial.Compensation;\r\n\r\n // set to true when material defines are dirty\r\n private _isDirty = false;\r\n\r\n /**\r\n * Set compensation default value is `GaussianSplattingMaterial.Compensation`\r\n */\r\n public set compensation(value: boolean) {\r\n this._isDirty = this._isDirty != value;\r\n this._compensation = value;\r\n }\r\n\r\n /**\r\n * Get compensation\r\n */\r\n public get compensation(): boolean {\r\n return this._compensation;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that current material needs to register RTT\r\n */\r\n public override get hasRenderTargetTextures(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Specifies whether or not this material should be rendered in alpha test mode.\r\n * @returns false\r\n */\r\n public override needAlphaTesting(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Specifies whether or not this material should be rendered in alpha blend mode.\r\n * @returns true\r\n */\r\n public override needAlphaBlending(): boolean {\r\n return true;\r\n }\r\n\r\n protected static _Attribs = [VertexBuffer.PositionKind, \"splatIndex0\", \"splatIndex1\", \"splatIndex2\", \"splatIndex3\"];\r\n protected static _Samplers = [\"covariancesATexture\", \"covariancesBTexture\", \"centersTexture\", \"colorsTexture\", \"shTexture0\", \"shTexture1\", \"shTexture2\"];\r\n protected static _UniformBuffers = [\"Scene\", \"Mesh\"];\r\n protected static _Uniforms = [\r\n \"world\",\r\n \"view\",\r\n \"projection\",\r\n \"vFogInfos\",\r\n \"vFogColor\",\r\n \"logarithmicDepthConstant\",\r\n \"invViewport\",\r\n \"dataTextureSize\",\r\n \"focal\",\r\n \"eyePosition\",\r\n \"kernelSize\",\r\n \"viewDirectionFactor\",\r\n \"alpha\",\r\n ];\r\n private _sourceMesh: GaussianSplattingMesh | null = null;\r\n /**\r\n * Checks whether the material is ready to be rendered for a given mesh.\r\n * @param mesh The mesh to render\r\n * @param subMesh The submesh to check against\r\n * @returns true if all the dependencies are ready (Textures, Effects...)\r\n */\r\n public override isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh): boolean {\r\n const useInstances = true;\r\n\r\n const drawWrapper = subMesh._drawWrapper;\r\n let defines = <GaussianSplattingMaterialDefines>subMesh.materialDefines;\r\n\r\n if (defines && this._isDirty) {\r\n defines.markAsUnprocessed();\r\n }\r\n\r\n if (drawWrapper.effect && this.isFrozen) {\r\n if (drawWrapper._wasPreviouslyReady && drawWrapper._wasPreviouslyUsingInstances === useInstances) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n defines = subMesh.materialDefines = new GaussianSplattingMaterialDefines();\r\n }\r\n\r\n const scene = this.getScene();\r\n\r\n if (this._isReadyForSubMesh(subMesh)) {\r\n return true;\r\n }\r\n\r\n if (!this._sourceMesh) {\r\n return false;\r\n }\r\n\r\n const engine = scene.getEngine();\r\n const gsMesh = this._sourceMesh;\r\n\r\n // Misc.\r\n PrepareDefinesForMisc(\r\n mesh,\r\n scene,\r\n this._useLogarithmicDepth,\r\n this.pointsCloud,\r\n this.fogEnabled,\r\n false,\r\n defines,\r\n undefined,\r\n undefined,\r\n undefined,\r\n this._isVertexOutputInvariant\r\n );\r\n\r\n // Values that need to be evaluated on every frame\r\n PrepareDefinesForFrameBoundValues(scene, engine, this, defines, useInstances, null, true);\r\n\r\n // Attribs\r\n PrepareDefinesForAttributes(mesh, defines, false, false);\r\n\r\n // SH is disabled for webGL1\r\n if (engine.version > 1 || engine.isWebGPU) {\r\n defines[\"SH_DEGREE\"] = gsMesh.shDegree;\r\n }\r\n\r\n // Compensation\r\n const splatMaterial = gsMesh.material as GaussianSplattingMaterial;\r\n defines[\"COMPENSATION\"] = splatMaterial && splatMaterial.compensation ? splatMaterial.compensation : GaussianSplattingMaterial.Compensation;\r\n\r\n // Get correct effect\r\n if (defines.isDirty) {\r\n defines.markAsProcessed();\r\n scene.resetCachedMaterial();\r\n\r\n //Attributes\r\n PrepareAttributesForInstances(GaussianSplattingMaterial._Attribs, defines);\r\n\r\n PrepareUniformsAndSamplersList(<IEffectCreationOptions>{\r\n uniformsNames: GaussianSplattingMaterial._Uniforms,\r\n uniformBuffersNames: GaussianSplattingMaterial._UniformBuffers,\r\n samplers: GaussianSplattingMaterial._Samplers,\r\n defines: defines,\r\n });\r\n\r\n AddClipPlaneUniforms(GaussianSplattingMaterial._Uniforms);\r\n\r\n const join = defines.toString();\r\n const effect = scene.getEngine().createEffect(\r\n \"gaussianSplatting\",\r\n <IEffectCreationOptions>{\r\n attributes: GaussianSplattingMaterial._Attribs,\r\n uniformsNames: GaussianSplattingMaterial._Uniforms,\r\n uniformBuffersNames: GaussianSplattingMaterial._UniformBuffers,\r\n samplers: GaussianSplattingMaterial._Samplers,\r\n defines: join,\r\n onCompiled: this.onCompiled,\r\n onError: this.onError,\r\n indexParameters: {},\r\n shaderLanguage: this._shaderLanguage,\r\n extraInitializationsAsync: async () => {\r\n if (this._shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([import(\"../../ShadersWGSL/gaussianSplatting.fragment\"), import(\"../../ShadersWGSL/gaussianSplatting.vertex\")]);\r\n } else {\r\n await Promise.all([import(\"../../Shaders/gaussianSplatting.fragment\"), import(\"../../Shaders/gaussianSplatting.vertex\")]);\r\n }\r\n },\r\n },\r\n engine\r\n );\r\n subMesh.setEffect(effect, defines, this._materialContext);\r\n }\r\n\r\n if (!subMesh.effect || !subMesh.effect.isReady()) {\r\n return false;\r\n }\r\n\r\n defines._renderId = scene.getRenderId();\r\n drawWrapper._wasPreviouslyReady = true;\r\n drawWrapper._wasPreviouslyUsingInstances = useInstances;\r\n this._isDirty = false;\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * GaussianSplattingMaterial belongs to a single mesh\r\n * @param mesh mesh this material belongs to\r\n */\r\n public setSourceMesh(mesh: GaussianSplattingMesh) {\r\n this._sourceMesh = mesh;\r\n }\r\n /**\r\n * Bind material effect for a specific Gaussian Splatting mesh\r\n * @param mesh Gaussian splatting mesh\r\n * @param effect Splatting material or node material\r\n * @param scene scene that contains mesh and camera used for rendering\r\n */\r\n public static BindEffect(mesh: Mesh, effect: Effect, scene: Scene): void {\r\n const engine = scene.getEngine();\r\n const camera = scene.activeCamera;\r\n\r\n const renderWidth = engine.getRenderWidth() * camera!.viewport.width;\r\n const renderHeight = engine.getRenderHeight() * camera!.viewport.height;\r\n\r\n const gsMaterial = mesh.material as GaussianSplattingMaterial;\r\n\r\n if (!gsMaterial._sourceMesh) {\r\n return;\r\n }\r\n\r\n const gsMesh = gsMaterial._sourceMesh;\r\n\r\n // check if rigcamera, get number of rigs\r\n const numberOfRigs = camera?.rigParent?.rigCameras.length || 1;\r\n\r\n effect.setFloat2(\"invViewport\", 1 / (renderWidth / numberOfRigs), 1 / renderHeight);\r\n\r\n let focal = 1000;\r\n\r\n if (camera) {\r\n /*\r\n more explicit version:\r\n const t = camera.getProjectionMatrix().m[5];\r\n const FovY = Math.atan(1.0 / t) * 2.0;\r\n focal = renderHeight / 2.0 / Math.tan(FovY / 2.0);\r\n Using a shorter version here to not have tan(atan) and 2.0 factor\r\n */\r\n const t = camera.getProjectionMatrix().m[5];\r\n if (camera.fovMode == Camera.FOVMODE_VERTICAL_FIXED) {\r\n focal = (renderHeight * t) / 2.0;\r\n } else {\r\n focal = (renderWidth * t) / 2.0;\r\n }\r\n }\r\n\r\n effect.setFloat2(\"focal\", focal, focal);\r\n effect.setVector3(\"viewDirectionFactor\", gsMesh.viewDirectionFactor);\r\n effect.setFloat(\"kernelSize\", gsMaterial && gsMaterial.kernelSize ? gsMaterial.kernelSize : GaussianSplattingMaterial.KernelSize);\r\n effect.setFloat(\"alpha\", gsMaterial.alpha);\r\n scene.bindEyePosition(effect, \"eyePosition\", true);\r\n\r\n if (gsMesh.covariancesATexture) {\r\n const textureSize = gsMesh.covariancesATexture.getSize();\r\n\r\n effect.setFloat2(\"dataTextureSize\", textureSize.width, textureSize.height);\r\n\r\n effect.setTexture(\"covariancesATexture\", gsMesh.covariancesATexture);\r\n effect.setTexture(\"covariancesBTexture\", gsMesh.covariancesBTexture);\r\n effect.setTexture(\"centersTexture\", gsMesh.centersTexture);\r\n effect.setTexture(\"colorsTexture\", gsMesh.colorsTexture);\r\n\r\n if (gsMesh.shTextures) {\r\n for (let i = 0; i < gsMesh.shTextures?.length; i++) {\r\n effect.setTexture(`shTexture${i}`, gsMesh.shTextures[i]);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Binds the submesh to this material by preparing the effect and shader to draw\r\n * @param world defines the world transformation matrix\r\n * @param mesh defines the mesh containing the submesh\r\n * @param subMesh defines the submesh to bind the material to\r\n */\r\n public override bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n const scene = this.getScene();\r\n\r\n const defines = <GaussianSplattingMaterialDefines>subMesh.materialDefines;\r\n if (!defines) {\r\n return;\r\n }\r\n\r\n const effect = subMesh.effect;\r\n if (!effect) {\r\n return;\r\n }\r\n this._activeEffect = effect;\r\n\r\n // Matrices Mesh.\r\n mesh.getMeshUniformBuffer().bindToEffect(effect, \"Mesh\");\r\n mesh.transferToEffect(world);\r\n\r\n // Bind data\r\n const mustRebind = this._mustRebind(scene, effect, subMesh, mesh.visibility);\r\n\r\n if (mustRebind) {\r\n this.bindView(effect);\r\n this.bindViewProjection(effect);\r\n GaussianSplattingMaterial.BindEffect(mesh, this._activeEffect, scene);\r\n // Clip plane\r\n BindClipPlane(effect, this, scene);\r\n } else if (scene.getEngine()._features.needToAlwaysBindUniformBuffers) {\r\n this._needToBindSceneUbo = true;\r\n }\r\n\r\n // Fog\r\n BindFogParameters(scene, mesh, effect);\r\n\r\n // Log. depth\r\n if (this.useLogarithmicDepth) {\r\n BindLogDepth(defines, effect, scene);\r\n }\r\n\r\n this._afterBind(mesh, this._activeEffect, subMesh);\r\n }\r\n\r\n protected static _MakeGaussianSplattingShadowDepthWrapper(scene: Scene, shaderLanguage: ShaderLanguage): ShadowDepthWrapper {\r\n const shaderMaterial = new ShaderMaterial(\r\n \"gaussianSplattingDepth\",\r\n scene,\r\n {\r\n vertex: \"gaussianSplattingDepth\",\r\n fragment: \"gaussianSplattingDepth\",\r\n },\r\n {\r\n attributes: GaussianSplattingMaterial._Attribs,\r\n uniforms: GaussianSplattingMaterial._Uniforms,\r\n samplers: GaussianSplattingMaterial._Samplers,\r\n uniformBuffers: GaussianSplattingMaterial._UniformBuffers,\r\n shaderLanguage: shaderLanguage,\r\n }\r\n );\r\n\r\n const shadowDepthWrapper = new ShadowDepthWrapper(shaderMaterial, scene, {\r\n standalone: true,\r\n });\r\n\r\n shaderMaterial.onBindObservable.add((mesh: AbstractMesh) => {\r\n const effect = shaderMaterial.getEffect()!;\r\n const gsMaterial = mesh.material as GaussianSplattingMaterial;\r\n const gsMesh = mesh as GaussianSplattingMesh;\r\n\r\n mesh.getMeshUniformBuffer().bindToEffect(effect, \"Mesh\");\r\n shaderMaterial.bindView(effect);\r\n shaderMaterial.bindViewProjection(effect);\r\n\r\n const shadowmapWidth = scene.getEngine().getRenderWidth();\r\n const shadowmapHeight = scene.getEngine().getRenderHeight();\r\n effect.setFloat2(\"invViewport\", 1 / shadowmapWidth, 1 / shadowmapHeight);\r\n\r\n const projection = scene.getProjectionMatrix();\r\n const t = projection.m[5];\r\n const focal = (shadowmapWidth * t) / 2.0;\r\n\r\n effect.setFloat2(\"focal\", focal, focal);\r\n effect.setFloat(\"kernelSize\", gsMaterial && gsMaterial.kernelSize ? gsMaterial.kernelSize : GaussianSplattingMaterial.KernelSize);\r\n\r\n if (gsMesh.covariancesATexture) {\r\n const textureSize = gsMesh.covariancesATexture.getSize();\r\n effect.setFloat2(\"dataTextureSize\", textureSize.width, textureSize.height);\r\n\r\n effect.setTexture(\"covariancesATexture\", gsMesh.covariancesATexture);\r\n effect.setTexture(\"covariancesBTexture\", gsMesh.covariancesBTexture);\r\n effect.setTexture(\"centersTexture\", gsMesh.centersTexture);\r\n effect.setTexture(\"colorsTexture\", gsMesh.colorsTexture);\r\n }\r\n });\r\n\r\n return shadowDepthWrapper;\r\n }\r\n\r\n /**\r\n * Clones the material.\r\n * @param name The cloned name.\r\n * @returns The cloned material.\r\n */\r\n public override clone(name: string): GaussianSplattingMaterial {\r\n return SerializationHelper.Clone(() => new GaussianSplattingMaterial(name, this.getScene()), this);\r\n }\r\n\r\n /**\r\n * Serializes the current material to its JSON representation.\r\n * @returns The JSON representation.\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n serializationObject.customType = \"BABYLON.GaussianSplattingMaterial\";\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Gets the class name of the material\r\n * @returns \"GaussianSplattingMaterial\"\r\n */\r\n public override getClassName(): string {\r\n return \"GaussianSplattingMaterial\";\r\n }\r\n\r\n /**\r\n * Parse a JSON input to create back a Gaussian Splatting material.\r\n * @param source The JSON data to parse\r\n * @param scene The scene to create the parsed material in\r\n * @param rootUrl The root url of the assets the material depends upon\r\n * @returns the instantiated GaussianSplattingMaterial.\r\n */\r\n public static override Parse(source: any, scene: Scene, rootUrl: string): GaussianSplattingMaterial {\r\n return SerializationHelper.Parse(() => new GaussianSplattingMaterial(source.name, scene), source, scene, rootUrl);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.GaussianSplattingMaterial\", GaussianSplattingMaterial);\r\n"]}
@@ -15,7 +15,11 @@ export declare enum GeometryRenderingTextureClearType {
15
15
  /**
16
16
  * Clear the texture with the maximum view Z value.
17
17
  */
18
- MaxViewZ = 2
18
+ MaxViewZ = 2,
19
+ /**
20
+ * Do not clear the texture.
21
+ */
22
+ NoClear = 3
19
23
  }
20
24
  /**
21
25
  * Configuration for geometry rendering.
@@ -17,6 +17,10 @@ export var GeometryRenderingTextureClearType;
17
17
  * Clear the texture with the maximum view Z value.
18
18
  */
19
19
  GeometryRenderingTextureClearType[GeometryRenderingTextureClearType["MaxViewZ"] = 2] = "MaxViewZ";
20
+ /**
21
+ * Do not clear the texture.
22
+ */
23
+ GeometryRenderingTextureClearType[GeometryRenderingTextureClearType["NoClear"] = 3] = "NoClear";
20
24
  })(GeometryRenderingTextureClearType || (GeometryRenderingTextureClearType = {}));
21
25
  /**
22
26
  * Helper class to manage geometry rendering.
@@ -93,8 +97,6 @@ export class MaterialHelperGeometryRendering {
93
97
  return;
94
98
  }
95
99
  defines["PREPASS"] = true;
96
- defines["PREPASS_COLOR"] = false;
97
- defines["PREPASS_COLOR_INDEX"] = -1;
98
100
  let numMRT = 0;
99
101
  for (let i = 0; i < MaterialHelperGeometryRendering.GeometryTextureDescriptions.length; i++) {
100
102
  const geometryTextureDescription = MaterialHelperGeometryRendering.GeometryTextureDescriptions[i];
@@ -266,6 +268,13 @@ MaterialHelperGeometryRendering.GeometryTextureDescriptions = [
266
268
  define: "PREPASS_NORMALIZED_VIEW_DEPTH",
267
269
  defineIndex: "PREPASS_NORMALIZED_VIEW_DEPTH_INDEX",
268
270
  },
271
+ {
272
+ type: 4,
273
+ name: "Color",
274
+ clearType: 3 /* GeometryRenderingTextureClearType.NoClear */,
275
+ define: "PREPASS_COLOR",
276
+ defineIndex: "PREPASS_COLOR_INDEX",
277
+ },
269
278
  ];
270
279
  MaterialHelperGeometryRendering._Configurations = {};
271
280
  //# sourceMappingURL=materialHelper.geometryrendering.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"materialHelper.geometryrendering.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/materialHelper.geometryrendering.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MaterialDefines, Effect, Mesh, AbstractMesh, Material } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { Matrix } from \"core/Maths/math.vector\";\r\n\r\n/**\r\n * Type of clear operation to perform on a geometry texture.\r\n */\r\nexport const enum GeometryRenderingTextureClearType {\r\n /**\r\n * Clear the texture with zero.\r\n */\r\n Zero = 0,\r\n\r\n /**\r\n * Clear the texture with one.\r\n */\r\n One = 1,\r\n\r\n /**\r\n * Clear the texture with the maximum view Z value.\r\n */\r\n MaxViewZ = 2,\r\n}\r\n\r\n/**\r\n * Configuration for geometry rendering.\r\n * A configuration is created for each rendering pass a geometry rendering is used in.\r\n */\r\nexport type GeometryRenderingConfiguration = {\r\n /**\r\n * Defines used for the geometry rendering.\r\n */\r\n defines: { [name: string]: number };\r\n\r\n /**\r\n * Previous world matrices for meshes.\r\n */\r\n previousWorldMatrices: { [index: number]: Matrix };\r\n\r\n /**\r\n * Previous view projection matrix.\r\n */\r\n previousViewProjection: Matrix;\r\n\r\n /**\r\n * Current view projection matrix.\r\n */\r\n currentViewProjection: Matrix;\r\n\r\n /**\r\n * Previous bones for skinned meshes.\r\n */\r\n previousBones: { [index: number]: Float32Array };\r\n\r\n /**\r\n * Last frame id the configuration was updated.\r\n */\r\n lastUpdateFrameId: number;\r\n\r\n /**\r\n * List of excluded skinned meshes.\r\n */\r\n excludedSkinnedMesh: AbstractMesh[];\r\n\r\n /**\r\n * Whether to reverse culling for the geometry rendering (meaning, if back faces should be culled, front faces are culled instead, and the other way around).\r\n */\r\n reverseCulling: boolean;\r\n};\r\n\r\n/**\r\n * Helper class to manage geometry rendering.\r\n */\r\nexport class MaterialHelperGeometryRendering {\r\n /**\r\n * Descriptions of the geometry textures.\r\n */\r\n public static readonly GeometryTextureDescriptions = [\r\n {\r\n type: Constants.PREPASS_IRRADIANCE_TEXTURE_TYPE,\r\n name: \"Irradiance\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_IRRADIANCE\",\r\n defineIndex: \"PREPASS_IRRADIANCE_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_POSITION_TEXTURE_TYPE,\r\n name: \"WorldPosition\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_POSITION\",\r\n defineIndex: \"PREPASS_POSITION_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_VELOCITY_TEXTURE_TYPE,\r\n name: \"Velocity\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_VELOCITY\",\r\n defineIndex: \"PREPASS_VELOCITY_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_REFLECTIVITY_TEXTURE_TYPE,\r\n name: \"Reflectivity\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_REFLECTIVITY\",\r\n defineIndex: \"PREPASS_REFLECTIVITY_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_DEPTH_TEXTURE_TYPE,\r\n name: \"ViewDepth\",\r\n clearType: GeometryRenderingTextureClearType.MaxViewZ,\r\n define: \"PREPASS_DEPTH\",\r\n defineIndex: \"PREPASS_DEPTH_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_NORMAL_TEXTURE_TYPE,\r\n name: \"ViewNormal\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_NORMAL\",\r\n defineIndex: \"PREPASS_NORMAL_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_ALBEDO_SQRT_TEXTURE_TYPE,\r\n name: \"AlbedoSqrt\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_ALBEDO_SQRT\",\r\n defineIndex: \"PREPASS_ALBEDO_SQRT_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_WORLD_NORMAL_TEXTURE_TYPE,\r\n name: \"WorldNormal\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_WORLD_NORMAL\",\r\n defineIndex: \"PREPASS_WORLD_NORMAL_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_LOCAL_POSITION_TEXTURE_TYPE,\r\n name: \"LocalPosition\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_LOCAL_POSITION\",\r\n defineIndex: \"PREPASS_LOCAL_POSITION_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_SCREENSPACE_DEPTH_TEXTURE_TYPE,\r\n name: \"ScreenDepth\",\r\n clearType: GeometryRenderingTextureClearType.One,\r\n define: \"PREPASS_SCREENSPACE_DEPTH\",\r\n defineIndex: \"PREPASS_SCREENSPACE_DEPTH_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_VELOCITY_LINEAR_TEXTURE_TYPE,\r\n name: \"LinearVelocity\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_VELOCITY_LINEAR\",\r\n defineIndex: \"PREPASS_VELOCITY_LINEAR_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_ALBEDO_TEXTURE_TYPE,\r\n name: \"Albedo\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_ALBEDO\",\r\n defineIndex: \"PREPASS_ALBEDO_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_NORMALIZED_VIEW_DEPTH_TEXTURE_TYPE,\r\n name: \"NormalizedViewDepth\",\r\n clearType: GeometryRenderingTextureClearType.One,\r\n define: \"PREPASS_NORMALIZED_VIEW_DEPTH\",\r\n defineIndex: \"PREPASS_NORMALIZED_VIEW_DEPTH_INDEX\",\r\n },\r\n ];\r\n\r\n private static _Configurations: { [renderPassId: number]: GeometryRenderingConfiguration } = {};\r\n\r\n /**\r\n * Creates a new geometry rendering configuration.\r\n * @param renderPassId Render pass id the configuration is created for.\r\n * @returns The created configuration.\r\n */\r\n public static CreateConfiguration(renderPassId: number) {\r\n MaterialHelperGeometryRendering._Configurations[renderPassId] = {\r\n defines: {},\r\n previousWorldMatrices: {},\r\n previousViewProjection: Matrix.Zero(),\r\n currentViewProjection: Matrix.Zero(),\r\n previousBones: {},\r\n lastUpdateFrameId: -1,\r\n excludedSkinnedMesh: [],\r\n reverseCulling: false,\r\n };\r\n return MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n }\r\n\r\n /**\r\n * Deletes a geometry rendering configuration.\r\n * @param renderPassId The render pass id of the configuration to delete.\r\n */\r\n public static DeleteConfiguration(renderPassId: number) {\r\n delete MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n }\r\n\r\n /**\r\n * Gets a geometry rendering configuration.\r\n * @param renderPassId The render pass id of the configuration to get.\r\n * @returns The configuration.\r\n */\r\n public static GetConfiguration(renderPassId: number): GeometryRenderingConfiguration {\r\n return MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n }\r\n\r\n /**\r\n * Adds uniforms and samplers for geometry rendering.\r\n * @param uniforms The array of uniforms to add to.\r\n * @param _samplers The array of samplers to add to.\r\n */\r\n public static AddUniformsAndSamplers(uniforms: string[], _samplers: string[]) {\r\n uniforms.push(\"previousWorld\", \"previousViewProjection\", \"mPreviousBones\");\r\n }\r\n\r\n /**\r\n * Marks a list of meshes as dirty for geometry rendering.\r\n * @param renderPassId The render pass id the meshes are marked as dirty for.\r\n * @param meshes The list of meshes to mark as dirty.\r\n */\r\n public static MarkAsDirty(renderPassId: number, meshes: AbstractMesh[]) {\r\n for (const mesh of meshes) {\r\n if (!mesh.subMeshes) {\r\n continue;\r\n }\r\n\r\n for (const subMesh of mesh.subMeshes) {\r\n subMesh._removeDrawWrapper(renderPassId);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Prepares defines for geometry rendering.\r\n * @param renderPassId The render pass id the defines are prepared for.\r\n * @param mesh The mesh the defines are prepared for.\r\n * @param defines The defines to update according to the geometry rendering configuration.\r\n */\r\n public static PrepareDefines(renderPassId: number, mesh: AbstractMesh, defines: MaterialDefines) {\r\n if (!defines._arePrePassDirty) {\r\n return;\r\n }\r\n\r\n const configuration = MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n if (!configuration) {\r\n return;\r\n }\r\n\r\n defines[\"PREPASS\"] = true;\r\n defines[\"PREPASS_COLOR\"] = false;\r\n defines[\"PREPASS_COLOR_INDEX\"] = -1;\r\n\r\n let numMRT = 0;\r\n\r\n for (let i = 0; i < MaterialHelperGeometryRendering.GeometryTextureDescriptions.length; i++) {\r\n const geometryTextureDescription = MaterialHelperGeometryRendering.GeometryTextureDescriptions[i];\r\n const defineName = geometryTextureDescription.define;\r\n const defineIndex = geometryTextureDescription.defineIndex;\r\n const index = configuration.defines[defineIndex];\r\n\r\n if (index !== undefined) {\r\n defines[defineName] = true;\r\n defines[defineIndex] = index;\r\n numMRT++;\r\n } else {\r\n defines[defineName] = false;\r\n delete defines[defineIndex];\r\n }\r\n }\r\n\r\n defines[\"SCENE_MRT_COUNT\"] = numMRT;\r\n\r\n defines[\"BONES_VELOCITY_ENABLED\"] =\r\n mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton && !mesh.skeleton.isUsingTextureForMatrices && configuration.excludedSkinnedMesh.indexOf(mesh) === -1;\r\n }\r\n\r\n /**\r\n * Binds geometry rendering data for a mesh.\r\n * @param renderPassId The render pass id the geometry rendering data is bound for.\r\n * @param effect The effect to bind the geometry rendering data to.\r\n * @param mesh The mesh to bind the geometry rendering data for.\r\n * @param world The world matrix of the mesh.\r\n * @param material The material of the mesh.\r\n */\r\n public static Bind(renderPassId: number, effect: Effect, mesh: Mesh, world: Matrix, material: Material) {\r\n const configuration = MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n if (!configuration) {\r\n return;\r\n }\r\n\r\n const scene = mesh.getScene();\r\n const engine = scene.getEngine();\r\n\r\n if (configuration.reverseCulling) {\r\n engine.setStateCullFaceType(scene._mirroredCameraPosition ? material.cullBackFaces : !material.cullBackFaces);\r\n }\r\n\r\n if (configuration.defines[\"PREPASS_VELOCITY_INDEX\"] !== undefined || configuration.defines[\"PREPASS_VELOCITY_LINEAR_INDEX\"] !== undefined) {\r\n if (!configuration.previousWorldMatrices[mesh.uniqueId]) {\r\n configuration.previousWorldMatrices[mesh.uniqueId] = world.clone();\r\n }\r\n\r\n if (!configuration.previousViewProjection) {\r\n configuration.previousViewProjection = scene.getTransformMatrix().clone();\r\n configuration.currentViewProjection = scene.getTransformMatrix().clone();\r\n }\r\n\r\n if (configuration.currentViewProjection.updateFlag !== scene.getTransformMatrix().updateFlag) {\r\n // First update of the prepass configuration for this rendering pass\r\n configuration.lastUpdateFrameId = engine.frameId;\r\n configuration.previousViewProjection.copyFrom(configuration.currentViewProjection);\r\n configuration.currentViewProjection.copyFrom(scene.getTransformMatrix());\r\n } else if (configuration.lastUpdateFrameId !== engine.frameId) {\r\n // The scene transformation did not change from the previous frame (so no camera motion), we must update previousViewProjection accordingly\r\n configuration.lastUpdateFrameId = engine.frameId;\r\n configuration.previousViewProjection.copyFrom(configuration.currentViewProjection);\r\n }\r\n\r\n effect.setMatrix(\"previousWorld\", configuration.previousWorldMatrices[mesh.uniqueId]);\r\n effect.setMatrix(\"previousViewProjection\", configuration.previousViewProjection);\r\n\r\n configuration.previousWorldMatrices[mesh.uniqueId] = world.clone();\r\n\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n const skeleton = mesh.skeleton;\r\n\r\n if (!skeleton.isUsingTextureForMatrices || effect.getUniformIndex(\"boneTextureWidth\") === -1) {\r\n const matrices = skeleton.getTransformMatrices(mesh);\r\n\r\n if (matrices) {\r\n if (!configuration.previousBones[mesh.uniqueId]) {\r\n configuration.previousBones[mesh.uniqueId] = matrices.slice();\r\n }\r\n effect.setMatrices(\"mPreviousBones\", configuration.previousBones[mesh.uniqueId]);\r\n configuration.previousBones[mesh.uniqueId].set(matrices);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"materialHelper.geometryrendering.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/materialHelper.geometryrendering.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MaterialDefines, Effect, Mesh, AbstractMesh, Material } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { Matrix } from \"core/Maths/math.vector\";\r\n\r\n/**\r\n * Type of clear operation to perform on a geometry texture.\r\n */\r\nexport const enum GeometryRenderingTextureClearType {\r\n /**\r\n * Clear the texture with zero.\r\n */\r\n Zero = 0,\r\n\r\n /**\r\n * Clear the texture with one.\r\n */\r\n One = 1,\r\n\r\n /**\r\n * Clear the texture with the maximum view Z value.\r\n */\r\n MaxViewZ = 2,\r\n\r\n /**\r\n * Do not clear the texture.\r\n */\r\n NoClear = 3,\r\n}\r\n\r\n/**\r\n * Configuration for geometry rendering.\r\n * A configuration is created for each rendering pass a geometry rendering is used in.\r\n */\r\nexport type GeometryRenderingConfiguration = {\r\n /**\r\n * Defines used for the geometry rendering.\r\n */\r\n defines: { [name: string]: number };\r\n\r\n /**\r\n * Previous world matrices for meshes.\r\n */\r\n previousWorldMatrices: { [index: number]: Matrix };\r\n\r\n /**\r\n * Previous view projection matrix.\r\n */\r\n previousViewProjection: Matrix;\r\n\r\n /**\r\n * Current view projection matrix.\r\n */\r\n currentViewProjection: Matrix;\r\n\r\n /**\r\n * Previous bones for skinned meshes.\r\n */\r\n previousBones: { [index: number]: Float32Array };\r\n\r\n /**\r\n * Last frame id the configuration was updated.\r\n */\r\n lastUpdateFrameId: number;\r\n\r\n /**\r\n * List of excluded skinned meshes.\r\n */\r\n excludedSkinnedMesh: AbstractMesh[];\r\n\r\n /**\r\n * Whether to reverse culling for the geometry rendering (meaning, if back faces should be culled, front faces are culled instead, and the other way around).\r\n */\r\n reverseCulling: boolean;\r\n};\r\n\r\n/**\r\n * Helper class to manage geometry rendering.\r\n */\r\nexport class MaterialHelperGeometryRendering {\r\n /**\r\n * Descriptions of the geometry textures.\r\n */\r\n public static readonly GeometryTextureDescriptions = [\r\n {\r\n type: Constants.PREPASS_IRRADIANCE_TEXTURE_TYPE,\r\n name: \"Irradiance\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_IRRADIANCE\",\r\n defineIndex: \"PREPASS_IRRADIANCE_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_POSITION_TEXTURE_TYPE,\r\n name: \"WorldPosition\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_POSITION\",\r\n defineIndex: \"PREPASS_POSITION_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_VELOCITY_TEXTURE_TYPE,\r\n name: \"Velocity\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_VELOCITY\",\r\n defineIndex: \"PREPASS_VELOCITY_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_REFLECTIVITY_TEXTURE_TYPE,\r\n name: \"Reflectivity\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_REFLECTIVITY\",\r\n defineIndex: \"PREPASS_REFLECTIVITY_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_DEPTH_TEXTURE_TYPE,\r\n name: \"ViewDepth\",\r\n clearType: GeometryRenderingTextureClearType.MaxViewZ,\r\n define: \"PREPASS_DEPTH\",\r\n defineIndex: \"PREPASS_DEPTH_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_NORMAL_TEXTURE_TYPE,\r\n name: \"ViewNormal\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_NORMAL\",\r\n defineIndex: \"PREPASS_NORMAL_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_ALBEDO_SQRT_TEXTURE_TYPE,\r\n name: \"AlbedoSqrt\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_ALBEDO_SQRT\",\r\n defineIndex: \"PREPASS_ALBEDO_SQRT_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_WORLD_NORMAL_TEXTURE_TYPE,\r\n name: \"WorldNormal\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_WORLD_NORMAL\",\r\n defineIndex: \"PREPASS_WORLD_NORMAL_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_LOCAL_POSITION_TEXTURE_TYPE,\r\n name: \"LocalPosition\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_LOCAL_POSITION\",\r\n defineIndex: \"PREPASS_LOCAL_POSITION_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_SCREENSPACE_DEPTH_TEXTURE_TYPE,\r\n name: \"ScreenDepth\",\r\n clearType: GeometryRenderingTextureClearType.One,\r\n define: \"PREPASS_SCREENSPACE_DEPTH\",\r\n defineIndex: \"PREPASS_SCREENSPACE_DEPTH_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_VELOCITY_LINEAR_TEXTURE_TYPE,\r\n name: \"LinearVelocity\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_VELOCITY_LINEAR\",\r\n defineIndex: \"PREPASS_VELOCITY_LINEAR_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_ALBEDO_TEXTURE_TYPE,\r\n name: \"Albedo\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_ALBEDO\",\r\n defineIndex: \"PREPASS_ALBEDO_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_NORMALIZED_VIEW_DEPTH_TEXTURE_TYPE,\r\n name: \"NormalizedViewDepth\",\r\n clearType: GeometryRenderingTextureClearType.One,\r\n define: \"PREPASS_NORMALIZED_VIEW_DEPTH\",\r\n defineIndex: \"PREPASS_NORMALIZED_VIEW_DEPTH_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_COLOR_TEXTURE_TYPE,\r\n name: \"Color\",\r\n clearType: GeometryRenderingTextureClearType.NoClear,\r\n define: \"PREPASS_COLOR\",\r\n defineIndex: \"PREPASS_COLOR_INDEX\",\r\n },\r\n ];\r\n\r\n private static _Configurations: { [renderPassId: number]: GeometryRenderingConfiguration } = {};\r\n\r\n /**\r\n * Creates a new geometry rendering configuration.\r\n * @param renderPassId Render pass id the configuration is created for.\r\n * @returns The created configuration.\r\n */\r\n public static CreateConfiguration(renderPassId: number) {\r\n MaterialHelperGeometryRendering._Configurations[renderPassId] = {\r\n defines: {},\r\n previousWorldMatrices: {},\r\n previousViewProjection: Matrix.Zero(),\r\n currentViewProjection: Matrix.Zero(),\r\n previousBones: {},\r\n lastUpdateFrameId: -1,\r\n excludedSkinnedMesh: [],\r\n reverseCulling: false,\r\n };\r\n return MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n }\r\n\r\n /**\r\n * Deletes a geometry rendering configuration.\r\n * @param renderPassId The render pass id of the configuration to delete.\r\n */\r\n public static DeleteConfiguration(renderPassId: number) {\r\n delete MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n }\r\n\r\n /**\r\n * Gets a geometry rendering configuration.\r\n * @param renderPassId The render pass id of the configuration to get.\r\n * @returns The configuration.\r\n */\r\n public static GetConfiguration(renderPassId: number): GeometryRenderingConfiguration {\r\n return MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n }\r\n\r\n /**\r\n * Adds uniforms and samplers for geometry rendering.\r\n * @param uniforms The array of uniforms to add to.\r\n * @param _samplers The array of samplers to add to.\r\n */\r\n public static AddUniformsAndSamplers(uniforms: string[], _samplers: string[]) {\r\n uniforms.push(\"previousWorld\", \"previousViewProjection\", \"mPreviousBones\");\r\n }\r\n\r\n /**\r\n * Marks a list of meshes as dirty for geometry rendering.\r\n * @param renderPassId The render pass id the meshes are marked as dirty for.\r\n * @param meshes The list of meshes to mark as dirty.\r\n */\r\n public static MarkAsDirty(renderPassId: number, meshes: AbstractMesh[]) {\r\n for (const mesh of meshes) {\r\n if (!mesh.subMeshes) {\r\n continue;\r\n }\r\n\r\n for (const subMesh of mesh.subMeshes) {\r\n subMesh._removeDrawWrapper(renderPassId);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Prepares defines for geometry rendering.\r\n * @param renderPassId The render pass id the defines are prepared for.\r\n * @param mesh The mesh the defines are prepared for.\r\n * @param defines The defines to update according to the geometry rendering configuration.\r\n */\r\n public static PrepareDefines(renderPassId: number, mesh: AbstractMesh, defines: MaterialDefines) {\r\n if (!defines._arePrePassDirty) {\r\n return;\r\n }\r\n\r\n const configuration = MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n if (!configuration) {\r\n return;\r\n }\r\n\r\n defines[\"PREPASS\"] = true;\r\n\r\n let numMRT = 0;\r\n\r\n for (let i = 0; i < MaterialHelperGeometryRendering.GeometryTextureDescriptions.length; i++) {\r\n const geometryTextureDescription = MaterialHelperGeometryRendering.GeometryTextureDescriptions[i];\r\n const defineName = geometryTextureDescription.define;\r\n const defineIndex = geometryTextureDescription.defineIndex;\r\n const index = configuration.defines[defineIndex];\r\n\r\n if (index !== undefined) {\r\n defines[defineName] = true;\r\n defines[defineIndex] = index;\r\n numMRT++;\r\n } else {\r\n defines[defineName] = false;\r\n delete defines[defineIndex];\r\n }\r\n }\r\n\r\n defines[\"SCENE_MRT_COUNT\"] = numMRT;\r\n\r\n defines[\"BONES_VELOCITY_ENABLED\"] =\r\n mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton && !mesh.skeleton.isUsingTextureForMatrices && configuration.excludedSkinnedMesh.indexOf(mesh) === -1;\r\n }\r\n\r\n /**\r\n * Binds geometry rendering data for a mesh.\r\n * @param renderPassId The render pass id the geometry rendering data is bound for.\r\n * @param effect The effect to bind the geometry rendering data to.\r\n * @param mesh The mesh to bind the geometry rendering data for.\r\n * @param world The world matrix of the mesh.\r\n * @param material The material of the mesh.\r\n */\r\n public static Bind(renderPassId: number, effect: Effect, mesh: Mesh, world: Matrix, material: Material) {\r\n const configuration = MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n if (!configuration) {\r\n return;\r\n }\r\n\r\n const scene = mesh.getScene();\r\n const engine = scene.getEngine();\r\n\r\n if (configuration.reverseCulling) {\r\n engine.setStateCullFaceType(scene._mirroredCameraPosition ? material.cullBackFaces : !material.cullBackFaces);\r\n }\r\n\r\n if (configuration.defines[\"PREPASS_VELOCITY_INDEX\"] !== undefined || configuration.defines[\"PREPASS_VELOCITY_LINEAR_INDEX\"] !== undefined) {\r\n if (!configuration.previousWorldMatrices[mesh.uniqueId]) {\r\n configuration.previousWorldMatrices[mesh.uniqueId] = world.clone();\r\n }\r\n\r\n if (!configuration.previousViewProjection) {\r\n configuration.previousViewProjection = scene.getTransformMatrix().clone();\r\n configuration.currentViewProjection = scene.getTransformMatrix().clone();\r\n }\r\n\r\n if (configuration.currentViewProjection.updateFlag !== scene.getTransformMatrix().updateFlag) {\r\n // First update of the prepass configuration for this rendering pass\r\n configuration.lastUpdateFrameId = engine.frameId;\r\n configuration.previousViewProjection.copyFrom(configuration.currentViewProjection);\r\n configuration.currentViewProjection.copyFrom(scene.getTransformMatrix());\r\n } else if (configuration.lastUpdateFrameId !== engine.frameId) {\r\n // The scene transformation did not change from the previous frame (so no camera motion), we must update previousViewProjection accordingly\r\n configuration.lastUpdateFrameId = engine.frameId;\r\n configuration.previousViewProjection.copyFrom(configuration.currentViewProjection);\r\n }\r\n\r\n effect.setMatrix(\"previousWorld\", configuration.previousWorldMatrices[mesh.uniqueId]);\r\n effect.setMatrix(\"previousViewProjection\", configuration.previousViewProjection);\r\n\r\n configuration.previousWorldMatrices[mesh.uniqueId] = world.clone();\r\n\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n const skeleton = mesh.skeleton;\r\n\r\n if (!skeleton.isUsingTextureForMatrices || effect.getUniformIndex(\"boneTextureWidth\") === -1) {\r\n const matrices = skeleton.getTransformMatrices(mesh);\r\n\r\n if (matrices) {\r\n if (!configuration.previousBones[mesh.uniqueId]) {\r\n configuration.previousBones[mesh.uniqueId] = matrices.slice();\r\n }\r\n effect.setMatrices(\"mPreviousBones\", configuration.previousBones[mesh.uniqueId]);\r\n configuration.previousBones[mesh.uniqueId].set(matrices);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
@@ -410,7 +410,7 @@ export class GaussianSplattingMesh extends Mesh {
410
410
  const cameraDirection = this._getCameraDirection(camera);
411
411
  const previousCameraDirection = cameraViewInfos.cameraDirection;
412
412
  const dot = Vector3.Dot(cameraDirection, previousCameraDirection);
413
- if ((forced || cameraViewInfos.frameIdLastUpdate !== frameId || Math.abs(dot - 1) >= 0.01) && this._canPostToWorker) {
413
+ if ((forced || Math.abs(dot - 1) >= 0.01) && this._canPostToWorker) {
414
414
  cameraViewInfos.cameraDirection.copyFrom(cameraDirection);
415
415
  cameraViewInfos.frameIdLastUpdate = frameId;
416
416
  this._canPostToWorker = false;