@onerjs/core 8.28.5 → 8.28.7
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/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.js +1 -1
- package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.d.ts +55 -0
- package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.js +147 -0
- package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js +1 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/index.d.ts +1 -1
- package/FrameGraph/Node/Blocks/index.js +1 -1
- package/FrameGraph/Node/Blocks/index.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +1 -6
- package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/taaTask.d.ts +29 -0
- package/FrameGraph/Tasks/PostProcesses/taaTask.js +102 -0
- package/FrameGraph/Tasks/PostProcesses/taaTask.js.map +1 -0
- package/FrameGraph/frameGraphTextureManager.d.ts +9 -0
- package/FrameGraph/frameGraphTextureManager.js +15 -0
- package/FrameGraph/frameGraphTextureManager.js.map +1 -1
- package/FrameGraph/index.d.ts +1 -1
- package/FrameGraph/index.js +1 -1
- package/FrameGraph/index.js.map +1 -1
- package/Materials/Background/backgroundMaterial.js +1 -1
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
- package/Materials/PBR/index.d.ts +1 -1
- package/Materials/PBR/index.js +1 -1
- package/Materials/PBR/index.js.map +1 -1
- package/Materials/PBR/{openPbrMaterial.d.ts → openpbrMaterial.d.ts} +17 -0
- package/Materials/PBR/{openPbrMaterial.js → openpbrMaterial.js} +33 -5
- package/Materials/PBR/openpbrMaterial.js.map +1 -0
- package/Materials/PBR/pbrBaseMaterial.js +1 -1
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/material.d.ts +7 -3
- package/Materials/material.js +11 -7
- package/Materials/material.js.map +1 -1
- package/Materials/standardMaterial.js +1 -1
- package/Materials/standardMaterial.js.map +1 -1
- package/Maths/math.vector.d.ts +1 -1
- package/Maths/math.vector.js +1 -1
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/mesh.js +8 -0
- package/Meshes/mesh.js.map +1 -1
- package/Morph/morphTargetManager.d.ts +2 -0
- package/Morph/morphTargetManager.js +19 -1
- package/Morph/morphTargetManager.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.d.ts +14 -6
- package/Particles/Node/nodeParticleSystemSet.js +37 -6
- package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.js +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.d.ts +0 -1
- package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js +4 -22
- package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js.map +1 -1
- package/PostProcesses/thinTAAPostProcess.d.ts +10 -5
- package/PostProcesses/thinTAAPostProcess.js +37 -7
- package/PostProcesses/thinTAAPostProcess.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.d.ts +1 -1
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.js +1 -1
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +1 -1
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
- package/Rendering/boundingBoxRenderer.js +5 -1
- package/Rendering/boundingBoxRenderer.js.map +1 -1
- package/Rendering/edgesRenderer.js +3 -0
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js +4 -4
- package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
- package/Shaders/ShadersInclude/shadowsFragmentFunctions.js +29 -4
- package/Shaders/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js +4 -4
- package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +3 -1
- package/scene.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.d.ts +0 -48
- package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js +0 -119
- package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js.map +0 -1
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.d.ts +0 -24
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js +0 -109
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js.map +0 -1
- package/Materials/PBR/openPbrMaterial.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backgroundMaterial.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Background/backgroundMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { serialize, serializeAsColor3, expandToProperty, serializeAsTexture, serializeAsVector3 } from \"../../Misc/decorators\";\r\nimport { SmartArray } from \"../../Misc/smartArray\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport type { Nullable, int, float } from \"../../types\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { Matrix } from \"../../Maths/math.vector\";\r\nimport { Vector3, Vector4 } from \"../../Maths/math.vector\";\r\nimport { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport type { SubMesh } from \"../../Meshes/subMesh\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { Mesh } from \"../../Meshes/mesh\";\r\nimport type { IEffectCreationOptions } from \"../../Materials/effect\";\r\nimport { MaterialDefines } from \"../../Materials/materialDefines\";\r\nimport { PushMaterial } from \"../../Materials/pushMaterial\";\r\nimport { ImageProcessingDefinesMixin } from \"../../Materials/imageProcessingConfiguration.defines\";\r\nimport { ImageProcessingConfiguration } from \"../../Materials/imageProcessingConfiguration\";\r\nimport type { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport type { RenderTargetTexture } from \"../../Materials/Textures/renderTargetTexture\";\r\nimport type { IShadowLight } from \"../../Lights/shadowLight\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\nimport { MaterialFlags } from \"../materialFlags\";\r\nimport { Color3 } from \"../../Maths/math.color\";\r\n\r\nimport { EffectFallbacks } from \"../effectFallbacks\";\r\nimport { AddClipPlaneUniforms, BindClipPlane } from \"../clipPlaneMaterialHelper\";\r\nimport {\r\n BindBonesParameters,\r\n BindFogParameters,\r\n BindLights,\r\n BindLogDepth,\r\n BindTextureMatrix,\r\n BindIBLParameters,\r\n BindIBLSamplers,\r\n HandleFallbacksForShadows,\r\n PrepareAttributesForBones,\r\n PrepareAttributesForInstances,\r\n PrepareDefinesForAttributes,\r\n PrepareDefinesForFrameBoundValues,\r\n PrepareDefinesForLights,\r\n PrepareDefinesForIBL,\r\n PrepareDefinesForMergedUV,\r\n PrepareDefinesForMisc,\r\n PrepareDefinesForMultiview,\r\n PrepareUniformsAndSamplersList,\r\n PrepareUniformsAndSamplersForIBL,\r\n PrepareUniformLayoutForIBL,\r\n} from \"../materialHelper.functions\";\r\nimport { SerializationHelper } from \"../../Misc/decorators.serialization\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\nimport { ImageProcessingMixin } from \"../imageProcessing\";\r\n\r\nclass BackgroundMaterialDefinesBase extends MaterialDefines {}\r\n\r\n/**\r\n * Background material defines definition.\r\n * @internal Mainly internal Use\r\n */\r\nclass BackgroundMaterialDefines extends ImageProcessingDefinesMixin(BackgroundMaterialDefinesBase) {\r\n /**\r\n * True if the diffuse texture is in use.\r\n */\r\n public DIFFUSE = false;\r\n\r\n /**\r\n * The direct UV channel to use.\r\n */\r\n public DIFFUSEDIRECTUV = 0;\r\n\r\n /**\r\n * True if the diffuse texture is in gamma space.\r\n */\r\n public GAMMADIFFUSE = false;\r\n\r\n /**\r\n * True if the diffuse texture has opacity in the alpha channel.\r\n */\r\n public DIFFUSEHASALPHA = false;\r\n\r\n /**\r\n * True if you want the material to fade to transparent at grazing angle.\r\n */\r\n public OPACITYFRESNEL = false;\r\n\r\n /**\r\n * True if an extra blur needs to be added in the reflection.\r\n */\r\n public REFLECTIONBLUR = false;\r\n\r\n /**\r\n * True if you want the material to fade to reflection at grazing angle.\r\n */\r\n public REFLECTIONFRESNEL = false;\r\n\r\n /**\r\n * True if you want the material to falloff as far as you move away from the scene center.\r\n */\r\n public REFLECTIONFALLOFF = false;\r\n\r\n /**\r\n * False if the current Webgl implementation does not support the texture lod extension.\r\n */\r\n public TEXTURELODSUPPORT = false;\r\n\r\n /**\r\n * True to ensure the data are premultiplied.\r\n */\r\n public PREMULTIPLYALPHA = false;\r\n\r\n /**\r\n * True if the texture contains cooked RGB values and not gray scaled multipliers.\r\n */\r\n public USERGBCOLOR = false;\r\n\r\n /**\r\n * True if highlight and shadow levels have been specified. It can help ensuring the main perceived color\r\n * stays aligned with the desired configuration.\r\n */\r\n public USEHIGHLIGHTANDSHADOWCOLORS = false;\r\n\r\n /**\r\n * True if only shadows must be rendered\r\n */\r\n public BACKMAT_SHADOWONLY = false;\r\n\r\n /**\r\n * True to add noise in order to reduce the banding effect.\r\n */\r\n public NOISE = false;\r\n\r\n /**\r\n * is the reflection texture in BGR color scheme?\r\n * Mainly used to solve a bug in ios10 video tag\r\n */\r\n public REFLECTIONBGR = false;\r\n\r\n /**\r\n * True if ground projection has been enabled.\r\n */\r\n public PROJECTED_GROUND = false;\r\n\r\n // Reflection.\r\n public REFLECTION = false;\r\n public REFLECTIONMAP_3D = false;\r\n public REFLECTIONMAP_SPHERICAL = false;\r\n public REFLECTIONMAP_PLANAR = false;\r\n public REFLECTIONMAP_CUBIC = false;\r\n public REFLECTIONMAP_PROJECTION = false;\r\n public REFLECTIONMAP_SKYBOX = false;\r\n public REFLECTIONMAP_EXPLICIT = false;\r\n public REFLECTIONMAP_EQUIRECTANGULAR = false;\r\n public REFLECTIONMAP_EQUIRECTANGULAR_FIXED = false;\r\n public REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = false;\r\n public INVERTCUBICMAP = false;\r\n public REFLECTIONMAP_OPPOSITEZ = false;\r\n public LODINREFLECTIONALPHA = false;\r\n public GAMMAREFLECTION = false;\r\n public RGBDREFLECTION = false;\r\n public EQUIRECTANGULAR_RELFECTION_FOV = false;\r\n\r\n // Default BJS.\r\n public MAINUV1 = false;\r\n public MAINUV2 = false;\r\n public UV1 = false;\r\n public UV2 = 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 POINTSIZE = false;\r\n public FOG = false;\r\n public NORMAL = false;\r\n public NUM_BONE_INFLUENCERS = 0;\r\n public BonesPerMesh = 0;\r\n public INSTANCES = false;\r\n public SHADOWFLOAT = false;\r\n public LOGARITHMICDEPTH = false;\r\n public NONUNIFORMSCALING = false;\r\n public ALPHATEST = 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\nclass BackgroundMaterialBase extends ImageProcessingMixin(PushMaterial) {}\r\n/**\r\n * Background material used to create an efficient environment around your scene.\r\n * #157MGZ: simple test\r\n */\r\nexport class BackgroundMaterial extends BackgroundMaterialBase {\r\n /**\r\n * Standard reflectance value at parallel view angle.\r\n */\r\n public static StandardReflectance0 = 0.05;\r\n\r\n /**\r\n * Standard reflectance value at grazing angle.\r\n */\r\n public static StandardReflectance90 = 0.5;\r\n\r\n @serializeAsColor3()\r\n protected _primaryColor: Color3;\r\n /**\r\n * Key light Color (multiply against the environment texture)\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public primaryColor = Color3.White();\r\n\r\n @serializeAsColor3()\r\n protected __perceptualColor: Nullable<Color3>;\r\n /**\r\n * Experimental Internal Use Only.\r\n *\r\n * Key light Color in \"perceptual value\" meaning the color you would like to see on screen.\r\n * This acts as a helper to set the primary color to a more \"human friendly\" value.\r\n * Conversion to linear space as well as exposure and tone mapping correction will be applied to keep the\r\n * output color as close as possible from the chosen value.\r\n * (This does not account for contrast color grading and color curves as they are considered post effect and not directly\r\n * part of lighting setup.)\r\n */\r\n public get _perceptualColor(): Nullable<Color3> {\r\n return this.__perceptualColor;\r\n }\r\n public set _perceptualColor(value: Nullable<Color3>) {\r\n this.__perceptualColor = value;\r\n this._computePrimaryColorFromPerceptualColor();\r\n this._markAllSubMeshesAsLightsDirty();\r\n }\r\n\r\n @serialize()\r\n protected _primaryColorShadowLevel: float = 0;\r\n /**\r\n * Defines the level of the shadows (dark area of the reflection map) in order to help scaling the colors.\r\n * The color opposite to the primary color is used at the level chosen to define what the black area would look.\r\n */\r\n public get primaryColorShadowLevel(): float {\r\n return this._primaryColorShadowLevel;\r\n }\r\n public set primaryColorShadowLevel(value: float) {\r\n this._primaryColorShadowLevel = value;\r\n this._computePrimaryColors();\r\n this._markAllSubMeshesAsLightsDirty();\r\n }\r\n\r\n @serialize()\r\n protected _primaryColorHighlightLevel: float = 0;\r\n /**\r\n * Defines the level of the highlights (highlight area of the reflection map) in order to help scaling the colors.\r\n * The primary color is used at the level chosen to define what the white area would look.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public get primaryColorHighlightLevel(): float {\r\n return this._primaryColorHighlightLevel;\r\n }\r\n public set primaryColorHighlightLevel(value: float) {\r\n this._primaryColorHighlightLevel = value;\r\n this._computePrimaryColors();\r\n this._markAllSubMeshesAsLightsDirty();\r\n }\r\n\r\n @serializeAsTexture()\r\n protected _reflectionTexture: Nullable<BaseTexture>;\r\n /**\r\n * Reflection Texture used in the material.\r\n * Should be author in a specific way for the best result (refer to the documentation).\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public reflectionTexture: Nullable<BaseTexture> = null;\r\n\r\n @serialize()\r\n protected _reflectionBlur: float;\r\n /**\r\n * Reflection Texture level of blur.\r\n *\r\n * Can be use to reuse an existing HDR Texture and target a specific LOD to prevent authoring the\r\n * texture twice.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public reflectionBlur: float = 0;\r\n\r\n @serializeAsTexture()\r\n protected _diffuseTexture: Nullable<BaseTexture>;\r\n /**\r\n * Diffuse Texture used in the material.\r\n * Should be author in a specific way for the best result (refer to the documentation).\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public diffuseTexture: Nullable<BaseTexture> = null;\r\n\r\n protected _shadowLights: Nullable<IShadowLight[]> = null;\r\n /**\r\n * Specify the list of lights casting shadow on the material.\r\n * All scene shadow lights will be included if null.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public shadowLights: Nullable<IShadowLight[]> = null;\r\n\r\n @serialize()\r\n protected _shadowLevel: float;\r\n /**\r\n * Helps adjusting the shadow to a softer level if required.\r\n * 0 means black shadows and 1 means no shadows.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public shadowLevel: float = 0;\r\n\r\n @serializeAsVector3()\r\n protected _sceneCenter: Vector3;\r\n /**\r\n * In case of opacity Fresnel or reflection falloff, this is use as a scene center.\r\n * It is usually zero but might be interesting to modify according to your setup.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public sceneCenter: Vector3 = Vector3.Zero();\r\n\r\n @serialize()\r\n protected _opacityFresnel: boolean;\r\n /**\r\n * This helps specifying that the material is falling off to the sky box at grazing angle.\r\n * This helps ensuring a nice transition when the camera goes under the ground.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public opacityFresnel: boolean = true;\r\n\r\n @serialize()\r\n protected _reflectionFresnel: boolean;\r\n /**\r\n * This helps specifying that the material is falling off from diffuse to the reflection texture at grazing angle.\r\n * This helps adding a mirror texture on the ground.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public reflectionFresnel: boolean = false;\r\n\r\n @serialize()\r\n protected _reflectionFalloffDistance: number;\r\n /**\r\n * This helps specifying the falloff radius off the reflection texture from the sceneCenter.\r\n * This helps adding a nice falloff effect to the reflection if used as a mirror for instance.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public reflectionFalloffDistance: number = 0.0;\r\n\r\n @serialize()\r\n protected _reflectionAmount: number;\r\n /**\r\n * This specifies the weight of the reflection against the background in case of reflection Fresnel.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public reflectionAmount: number = 1.0;\r\n\r\n @serialize()\r\n protected _reflectionReflectance0: number;\r\n /**\r\n * This specifies the weight of the reflection at grazing angle.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public reflectionReflectance0: number = 0.05;\r\n\r\n @serialize()\r\n protected _reflectionReflectance90: number;\r\n /**\r\n * This specifies the weight of the reflection at a perpendicular point of view.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public reflectionReflectance90: number = 0.5;\r\n\r\n /**\r\n * Sets the reflection reflectance fresnel values according to the default standard\r\n * empirically know to work well :-)\r\n */\r\n public set reflectionStandardFresnelWeight(value: number) {\r\n let reflectionWeight = value;\r\n\r\n if (reflectionWeight < 0.5) {\r\n reflectionWeight = reflectionWeight * 2.0;\r\n this.reflectionReflectance0 = BackgroundMaterial.StandardReflectance0 * reflectionWeight;\r\n this.reflectionReflectance90 = BackgroundMaterial.StandardReflectance90 * reflectionWeight;\r\n } else {\r\n reflectionWeight = reflectionWeight * 2.0 - 1.0;\r\n this.reflectionReflectance0 = BackgroundMaterial.StandardReflectance0 + (1.0 - BackgroundMaterial.StandardReflectance0) * reflectionWeight;\r\n this.reflectionReflectance90 = BackgroundMaterial.StandardReflectance90 + (1.0 - BackgroundMaterial.StandardReflectance90) * reflectionWeight;\r\n }\r\n }\r\n\r\n @serialize()\r\n protected _useRGBColor: boolean;\r\n /**\r\n * Helps to directly use the maps channels instead of their level.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useRGBColor: boolean = true;\r\n\r\n @serialize()\r\n protected _enableNoise: boolean;\r\n /**\r\n * This helps reducing the banding effect that could occur on the background.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public enableNoise: boolean = false;\r\n\r\n /**\r\n * The current fov(field of view) multiplier, 0.0 - 2.0. Defaults to 1.0. Lower values \"zoom in\" and higher values \"zoom out\".\r\n * Best used when trying to implement visual zoom effects like fish-eye or binoculars while not adjusting camera fov.\r\n * Recommended to be keep at 1.0 except for special cases.\r\n */\r\n public get fovMultiplier(): number {\r\n return this._fovMultiplier;\r\n }\r\n public set fovMultiplier(value: number) {\r\n if (isNaN(value)) {\r\n value = 1.0;\r\n }\r\n this._fovMultiplier = Math.max(0.0, Math.min(2.0, value));\r\n }\r\n private _fovMultiplier: float = 1.0;\r\n\r\n /**\r\n * Enable the FOV adjustment feature controlled by fovMultiplier.\r\n */\r\n public useEquirectangularFOV: boolean = false;\r\n\r\n @serialize()\r\n private _maxSimultaneousLights: int = 4;\r\n /**\r\n * Number of Simultaneous lights allowed on the material.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public maxSimultaneousLights: int = 4;\r\n\r\n @serialize()\r\n private _shadowOnly: boolean = false;\r\n /**\r\n * Make the material only render shadows\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public shadowOnly: boolean = false;\r\n\r\n /**\r\n * Due to a bug in iOS10, video tags (which are using the background material) are in BGR and not RGB.\r\n * Setting this flag to true (not done automatically!) will convert it back to RGB.\r\n */\r\n public switchToBGR: boolean = false;\r\n\r\n private _enableGroundProjection: boolean = false;\r\n /**\r\n * Enables the ground projection mode on the material.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/environment/skybox#ground-projection\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public enableGroundProjection: boolean = false;\r\n\r\n /**\r\n * Defines the radius of the projected ground if enableGroundProjection is true.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/environment/skybox#ground-projection\r\n */\r\n @serialize()\r\n public projectedGroundRadius = 1000;\r\n\r\n /**\r\n * Defines the height of the projected ground if enableGroundProjection is true.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/environment/skybox#ground-projection\r\n */\r\n @serialize()\r\n public projectedGroundHeight = 10;\r\n\r\n // Temp values kept as cache in the material.\r\n private _renderTargets = new SmartArray<RenderTargetTexture>(16);\r\n private _reflectionControls = Vector4.Zero();\r\n private _white = Color3.White();\r\n private _primaryShadowColor = Color3.Black();\r\n private _primaryHighlightColor = Color3.Black();\r\n\r\n private _shadersLoaded = false;\r\n\r\n /**\r\n * Instantiates a Background 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 * @param forceGLSL Use the GLSL code generation for the shader (even on WebGPU). Default is false\r\n */\r\n constructor(name: string, scene?: Scene, forceGLSL = false) {\r\n super(name, scene, undefined, forceGLSL);\r\n\r\n // Setup the default processing configuration to the scene.\r\n this._attachImageProcessingConfiguration(null);\r\n\r\n this.getRenderTargetTextures = (): SmartArray<RenderTargetTexture> => {\r\n this._renderTargets.reset();\r\n\r\n if (this._diffuseTexture && this._diffuseTexture.isRenderTarget) {\r\n this._renderTargets.push(this._diffuseTexture as RenderTargetTexture);\r\n }\r\n\r\n if (this._reflectionTexture && this._reflectionTexture.isRenderTarget) {\r\n this._renderTargets.push(this._reflectionTexture as RenderTargetTexture);\r\n }\r\n\r\n return this._renderTargets;\r\n };\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 if (this._diffuseTexture && this._diffuseTexture.isRenderTarget) {\r\n return true;\r\n }\r\n\r\n if (this._reflectionTexture && this._reflectionTexture.isRenderTarget) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * The entire material has been created in order to prevent overdraw.\r\n * @returns false\r\n */\r\n public override needAlphaTesting(): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * The entire material has been created in order to prevent overdraw.\r\n * @returns true if blending is enable\r\n */\r\n public override needAlphaBlending(): boolean {\r\n return this.alpha < 1 || (this._diffuseTexture != null && this._diffuseTexture.hasAlpha) || this._shadowOnly;\r\n }\r\n\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 * @param useInstances Specify wether or not the material is used with instances\r\n * @returns true if all the dependencies are ready (Textures, Effects...)\r\n */\r\n public override isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances: boolean = false): boolean {\r\n const drawWrapper = subMesh._drawWrapper;\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 subMesh.materialDefines = new BackgroundMaterialDefines();\r\n }\r\n\r\n const scene = this.getScene();\r\n const defines = <BackgroundMaterialDefines>subMesh.materialDefines;\r\n\r\n if (this._isReadyForSubMesh(subMesh)) {\r\n return true;\r\n }\r\n\r\n const engine = scene.getEngine();\r\n\r\n // Lights\r\n PrepareDefinesForLights(scene, mesh, defines, false, this._maxSimultaneousLights);\r\n defines._needNormals = true;\r\n\r\n // Multiview\r\n PrepareDefinesForMultiview(scene, defines);\r\n\r\n // Textures\r\n if (defines._areTexturesDirty) {\r\n defines._needUVs = false;\r\n if (scene.texturesEnabled) {\r\n if (scene.getEngine().getCaps().textureLOD) {\r\n defines.TEXTURELODSUPPORT = true;\r\n }\r\n\r\n if (this._diffuseTexture && MaterialFlags.DiffuseTextureEnabled) {\r\n if (!this._diffuseTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n\r\n PrepareDefinesForMergedUV(this._diffuseTexture, defines, \"DIFFUSE\");\r\n defines.DIFFUSEHASALPHA = this._diffuseTexture.hasAlpha;\r\n defines.GAMMADIFFUSE = this._diffuseTexture.gammaSpace;\r\n defines.OPACITYFRESNEL = this._opacityFresnel;\r\n } else {\r\n defines.DIFFUSE = false;\r\n defines.DIFFUSEDIRECTUV = 0;\r\n defines.DIFFUSEHASALPHA = false;\r\n defines.GAMMADIFFUSE = false;\r\n defines.OPACITYFRESNEL = false;\r\n }\r\n\r\n const reflectionTexture = this._reflectionTexture;\r\n PrepareDefinesForIBL(scene, reflectionTexture, defines);\r\n if (reflectionTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n if (!reflectionTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n defines.EQUIRECTANGULAR_RELFECTION_FOV = this.useEquirectangularFOV;\r\n defines.REFLECTIONBGR = this.switchToBGR;\r\n defines.REFLECTIONBLUR = this._reflectionBlur > 0;\r\n\r\n if (this.reflectionFresnel) {\r\n defines.REFLECTIONFRESNEL = true;\r\n defines.REFLECTIONFALLOFF = this.reflectionFalloffDistance > 0;\r\n\r\n this._reflectionControls.x = this.reflectionAmount;\r\n this._reflectionControls.y = this.reflectionReflectance0;\r\n this._reflectionControls.z = this.reflectionReflectance90;\r\n this._reflectionControls.w = 1 / this.reflectionFalloffDistance;\r\n } else {\r\n defines.REFLECTIONFRESNEL = false;\r\n defines.REFLECTIONFALLOFF = false;\r\n }\r\n } else {\r\n defines.REFLECTIONFRESNEL = false;\r\n defines.REFLECTIONFALLOFF = false;\r\n defines.REFLECTIONBLUR = false;\r\n }\r\n }\r\n\r\n defines.PREMULTIPLYALPHA = this.alphaMode === Constants.ALPHA_PREMULTIPLIED || this.alphaMode === Constants.ALPHA_PREMULTIPLIED_PORTERDUFF;\r\n defines.USERGBCOLOR = this._useRGBColor;\r\n defines.NOISE = this._enableNoise;\r\n }\r\n\r\n if (defines._areLightsDirty) {\r\n defines.USEHIGHLIGHTANDSHADOWCOLORS = !this._useRGBColor && (this._primaryColorShadowLevel !== 0 || this._primaryColorHighlightLevel !== 0);\r\n defines.BACKMAT_SHADOWONLY = this._shadowOnly;\r\n }\r\n\r\n if (defines._areImageProcessingDirty && this._imageProcessingConfiguration) {\r\n if (!this._imageProcessingConfiguration.isReady()) {\r\n return false;\r\n }\r\n\r\n this._imageProcessingConfiguration.prepareDefines(defines);\r\n }\r\n\r\n if (defines._areMiscDirty) {\r\n if (defines.REFLECTIONMAP_3D && this._enableGroundProjection) {\r\n defines.PROJECTED_GROUND = true;\r\n defines.REFLECTIONMAP_SKYBOX = true;\r\n } else {\r\n defines.PROJECTED_GROUND = false;\r\n }\r\n }\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 this.needAlphaTestingForMesh(mesh),\r\n defines,\r\n undefined,\r\n undefined,\r\n undefined,\r\n this._setVertexOutputInvariant\r\n );\r\n\r\n // Values that need to be evaluated on every frame\r\n PrepareDefinesForFrameBoundValues(scene, engine, this, defines, useInstances, null, subMesh.getRenderingMesh().hasThinInstances);\r\n\r\n // Attribs\r\n if (PrepareDefinesForAttributes(mesh, defines, false, true, false)) {\r\n if (mesh) {\r\n if (!scene.getEngine().getCaps().standardDerivatives && !mesh.isVerticesDataPresent(VertexBuffer.NormalKind)) {\r\n mesh.createNormals(true);\r\n Logger.Warn(\"BackgroundMaterial: Normals have been created for the mesh: \" + mesh.name);\r\n }\r\n }\r\n }\r\n\r\n // Get correct effect\r\n if (defines.isDirty) {\r\n defines.markAsProcessed();\r\n scene.resetCachedMaterial();\r\n\r\n // Fallbacks\r\n const fallbacks = new EffectFallbacks();\r\n if (defines.FOG) {\r\n fallbacks.addFallback(0, \"FOG\");\r\n }\r\n\r\n if (defines.POINTSIZE) {\r\n fallbacks.addFallback(1, \"POINTSIZE\");\r\n }\r\n\r\n if (defines.MULTIVIEW) {\r\n fallbacks.addFallback(0, \"MULTIVIEW\");\r\n }\r\n\r\n HandleFallbacksForShadows(defines, fallbacks, this._maxSimultaneousLights);\r\n\r\n //Attributes\r\n const attribs = [VertexBuffer.PositionKind];\r\n\r\n if (defines.NORMAL) {\r\n attribs.push(VertexBuffer.NormalKind);\r\n }\r\n\r\n if (defines.UV1) {\r\n attribs.push(VertexBuffer.UVKind);\r\n }\r\n\r\n if (defines.UV2) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n }\r\n\r\n PrepareAttributesForBones(attribs, mesh, defines, fallbacks);\r\n PrepareAttributesForInstances(attribs, defines);\r\n\r\n const uniforms = [\r\n \"world\",\r\n \"view\",\r\n \"viewProjection\",\r\n \"vEyePosition\",\r\n \"vLightsType\",\r\n \"vFogInfos\",\r\n \"vFogColor\",\r\n \"pointSize\",\r\n \"mBones\",\r\n\r\n \"vPrimaryColor\",\r\n \"vPrimaryColorShadow\",\r\n \"fFovMultiplier\",\r\n\r\n \"shadowLevel\",\r\n \"alpha\",\r\n\r\n \"vBackgroundCenter\",\r\n \"vReflectionControl\",\r\n\r\n \"vDiffuseInfos\",\r\n \"diffuseMatrix\",\r\n\r\n \"projectedGroundInfos\",\r\n \"logarithmicDepthConstant\",\r\n ];\r\n\r\n AddClipPlaneUniforms(uniforms);\r\n const samplers = [\"diffuseSampler\"];\r\n PrepareUniformsAndSamplersForIBL(uniforms, samplers, false);\r\n const uniformBuffers = [\"Material\", \"Scene\"];\r\n\r\n if (ImageProcessingConfiguration) {\r\n ImageProcessingConfiguration.PrepareUniforms(uniforms, defines);\r\n ImageProcessingConfiguration.PrepareSamplers(samplers, defines);\r\n }\r\n\r\n PrepareUniformsAndSamplersList(<IEffectCreationOptions>{\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: defines,\r\n maxSimultaneousLights: this._maxSimultaneousLights,\r\n });\r\n\r\n const join = defines.toString();\r\n const effect = scene.getEngine().createEffect(\r\n \"background\",\r\n <IEffectCreationOptions>{\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: fallbacks,\r\n onCompiled: this.onCompiled,\r\n onError: this.onError,\r\n indexParameters: { maxSimultaneousLights: this._maxSimultaneousLights },\r\n shaderLanguage: this._shaderLanguage,\r\n extraInitializationsAsync: this._shadersLoaded\r\n ? undefined\r\n : async () => {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([import(\"../../ShadersWGSL/background.vertex\"), import(\"../../ShadersWGSL/background.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../../Shaders/background.vertex\"), import(\"../../Shaders/background.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n },\r\n },\r\n engine\r\n );\r\n subMesh.setEffect(effect, defines, this._materialContext);\r\n\r\n this.buildUniformLayout();\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\r\n this._checkScenePerformancePriority();\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Compute the primary color according to the chosen perceptual color.\r\n */\r\n private _computePrimaryColorFromPerceptualColor(): void {\r\n if (!this.__perceptualColor) {\r\n return;\r\n }\r\n\r\n this._primaryColor.copyFrom(this.__perceptualColor);\r\n\r\n // Revert gamma space.\r\n this._primaryColor.toLinearSpaceToRef(this._primaryColor, this.getScene().getEngine().useExactSrgbConversions);\r\n\r\n // Revert image processing configuration.\r\n if (this._imageProcessingConfiguration) {\r\n // Revert Exposure.\r\n this._primaryColor.scaleToRef(1 / this._imageProcessingConfiguration.exposure, this._primaryColor);\r\n }\r\n\r\n this._computePrimaryColors();\r\n }\r\n\r\n /**\r\n * Compute the highlights and shadow colors according to their chosen levels.\r\n */\r\n private _computePrimaryColors(): void {\r\n if (this._primaryColorShadowLevel === 0 && this._primaryColorHighlightLevel === 0) {\r\n return;\r\n }\r\n\r\n // Find the highlight color based on the configuration.\r\n this._primaryColor.scaleToRef(this._primaryColorShadowLevel, this._primaryShadowColor);\r\n this._primaryColor.subtractToRef(this._primaryShadowColor, this._primaryShadowColor);\r\n\r\n // Find the shadow color based on the configuration.\r\n this._white.subtractToRef(this._primaryColor, this._primaryHighlightColor);\r\n this._primaryHighlightColor.scaleToRef(this._primaryColorHighlightLevel, this._primaryHighlightColor);\r\n this._primaryColor.addToRef(this._primaryHighlightColor, this._primaryHighlightColor);\r\n }\r\n\r\n /**\r\n * Build the uniform buffer used in the material.\r\n */\r\n public override buildUniformLayout(): void {\r\n // Order is important !\r\n this._uniformBuffer.addUniform(\"vPrimaryColor\", 4);\r\n this._uniformBuffer.addUniform(\"vPrimaryColorShadow\", 4);\r\n this._uniformBuffer.addUniform(\"vDiffuseInfos\", 2);\r\n this._uniformBuffer.addUniform(\"diffuseMatrix\", 16);\r\n this._uniformBuffer.addUniform(\"fFovMultiplier\", 1);\r\n this._uniformBuffer.addUniform(\"pointSize\", 1);\r\n this._uniformBuffer.addUniform(\"shadowLevel\", 1);\r\n this._uniformBuffer.addUniform(\"alpha\", 1);\r\n this._uniformBuffer.addUniform(\"vBackgroundCenter\", 3);\r\n this._uniformBuffer.addUniform(\"vReflectionControl\", 4);\r\n this._uniformBuffer.addUniform(\"projectedGroundInfos\", 2);\r\n\r\n PrepareUniformLayoutForIBL(this._uniformBuffer, true, false, false);\r\n\r\n this._uniformBuffer.create();\r\n }\r\n\r\n /**\r\n * Unbind the material.\r\n */\r\n public override unbind(): void {\r\n if (this._diffuseTexture && this._diffuseTexture.isRenderTarget) {\r\n this._uniformBuffer.setTexture(\"diffuseSampler\", null);\r\n }\r\n\r\n if (this._reflectionTexture && this._reflectionTexture.isRenderTarget) {\r\n this._uniformBuffer.setTexture(\"reflectionSampler\", null);\r\n }\r\n\r\n super.unbind();\r\n }\r\n\r\n /**\r\n * Bind only the world matrix to the material.\r\n * @param world The world matrix to bind.\r\n */\r\n public override bindOnlyWorldMatrix(world: Matrix): void {\r\n this._activeEffect!.setMatrix(\"world\", world);\r\n }\r\n\r\n /**\r\n * Bind the material for a dedicated submesh (every used meshes will be considered opaque).\r\n * @param world The world matrix to bind.\r\n * @param mesh the mesh to bind for.\r\n * @param subMesh The submesh to bind for.\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 = <BackgroundMaterialDefines>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\r\n this.bindOnlyWorldMatrix(world);\r\n\r\n // Bones\r\n BindBonesParameters(mesh, this._activeEffect);\r\n\r\n const mustRebind = this._mustRebind(scene, effect, subMesh, mesh.visibility);\r\n if (mustRebind) {\r\n this._uniformBuffer.bindToEffect(effect, \"Material\");\r\n\r\n this.bindViewProjection(effect);\r\n\r\n const reflectionTexture = this._reflectionTexture;\r\n if (!this._uniformBuffer.useUbo || !this.isFrozen || !this._uniformBuffer.isSync || subMesh._drawWrapper._forceRebindOnNextCall) {\r\n // Texture uniforms\r\n if (scene.texturesEnabled) {\r\n if (this._diffuseTexture && MaterialFlags.DiffuseTextureEnabled) {\r\n this._uniformBuffer.updateFloat2(\"vDiffuseInfos\", this._diffuseTexture.coordinatesIndex, this._diffuseTexture.level);\r\n BindTextureMatrix(this._diffuseTexture, this._uniformBuffer, \"diffuse\");\r\n }\r\n\r\n BindIBLParameters(scene, defines, this._uniformBuffer, Color3.White(), reflectionTexture, false, true, false, false, false, false, this._reflectionBlur);\r\n }\r\n\r\n if (this.shadowLevel > 0) {\r\n this._uniformBuffer.updateFloat(\"shadowLevel\", this.shadowLevel);\r\n }\r\n this._uniformBuffer.updateFloat(\"alpha\", this.alpha);\r\n\r\n // Point size\r\n if (this.pointsCloud) {\r\n this._uniformBuffer.updateFloat(\"pointSize\", this.pointSize);\r\n }\r\n\r\n if (defines.USEHIGHLIGHTANDSHADOWCOLORS) {\r\n this._uniformBuffer.updateColor4(\"vPrimaryColor\", this._primaryHighlightColor, 1.0);\r\n this._uniformBuffer.updateColor4(\"vPrimaryColorShadow\", this._primaryShadowColor, 1.0);\r\n } else {\r\n this._uniformBuffer.updateColor4(\"vPrimaryColor\", this._primaryColor, 1.0);\r\n }\r\n }\r\n\r\n this._uniformBuffer.updateFloat(\"fFovMultiplier\", this._fovMultiplier);\r\n\r\n // Textures\r\n if (scene.texturesEnabled) {\r\n if (this._diffuseTexture && MaterialFlags.DiffuseTextureEnabled) {\r\n this._uniformBuffer.setTexture(\"diffuseSampler\", this._diffuseTexture);\r\n }\r\n\r\n if (reflectionTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n BindIBLSamplers(scene, defines, this._uniformBuffer, reflectionTexture);\r\n\r\n if (defines.REFLECTIONFRESNEL) {\r\n this._uniformBuffer.updateFloat3(\"vBackgroundCenter\", this.sceneCenter.x, this.sceneCenter.y, this.sceneCenter.z);\r\n this._uniformBuffer.updateFloat4(\r\n \"vReflectionControl\",\r\n this._reflectionControls.x,\r\n this._reflectionControls.y,\r\n this._reflectionControls.z,\r\n this._reflectionControls.w\r\n );\r\n }\r\n }\r\n\r\n if (defines.PROJECTED_GROUND) {\r\n this._uniformBuffer.updateFloat2(\"projectedGroundInfos\", this.projectedGroundRadius, this.projectedGroundHeight);\r\n }\r\n }\r\n\r\n // Clip plane\r\n BindClipPlane(this._activeEffect, this, scene);\r\n\r\n scene.bindEyePosition(effect);\r\n } else if (scene.getEngine()._features.needToAlwaysBindUniformBuffers) {\r\n this._uniformBuffer.bindToEffect(effect, \"Material\");\r\n this._needToBindSceneUbo = true;\r\n }\r\n\r\n if (mustRebind || !this.isFrozen) {\r\n if (scene.lightsEnabled) {\r\n BindLights(scene, mesh, this._activeEffect, defines, this._maxSimultaneousLights);\r\n }\r\n\r\n // View\r\n this.bindView(effect);\r\n\r\n // Fog\r\n BindFogParameters(scene, mesh, this._activeEffect, true);\r\n\r\n // Log. depth\r\n if (this._useLogarithmicDepth) {\r\n BindLogDepth(defines, effect, scene);\r\n }\r\n\r\n // image processing\r\n if (this._imageProcessingConfiguration) {\r\n this._imageProcessingConfiguration.bind(this._activeEffect);\r\n }\r\n }\r\n\r\n this._afterBind(mesh, this._activeEffect, subMesh);\r\n\r\n this._uniformBuffer.update();\r\n }\r\n\r\n /**\r\n * Checks to see if a texture is used in the material.\r\n * @param texture - Base texture to use.\r\n * @returns - Boolean specifying if a texture is used in the material.\r\n */\r\n public override hasTexture(texture: BaseTexture): boolean {\r\n if (super.hasTexture(texture)) {\r\n return true;\r\n }\r\n\r\n if (this._reflectionTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._diffuseTexture === texture) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Dispose the material.\r\n * @param forceDisposeEffect Force disposal of the associated effect.\r\n * @param forceDisposeTextures Force disposal of the associated textures.\r\n */\r\n public override dispose(forceDisposeEffect: boolean = false, forceDisposeTextures: boolean = false): void {\r\n if (forceDisposeTextures) {\r\n if (this.diffuseTexture) {\r\n this.diffuseTexture.dispose();\r\n }\r\n if (this.reflectionTexture) {\r\n this.reflectionTexture.dispose();\r\n }\r\n }\r\n\r\n this._renderTargets.dispose();\r\n\r\n if (this._imageProcessingConfiguration && this._imageProcessingObserver) {\r\n this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver);\r\n }\r\n\r\n super.dispose(forceDisposeEffect);\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): BackgroundMaterial {\r\n return SerializationHelper.Clone(() => new BackgroundMaterial(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.BackgroundMaterial\";\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Gets the class name of the material\r\n * @returns \"BackgroundMaterial\"\r\n */\r\n public override getClassName(): string {\r\n return \"BackgroundMaterial\";\r\n }\r\n\r\n /**\r\n * Parse a JSON input to create back a background 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 BackgroundMaterial.\r\n */\r\n public static override Parse(source: any, scene: Scene, rootUrl: string): BackgroundMaterial {\r\n return SerializationHelper.Parse(() => new BackgroundMaterial(source.name, scene), source, scene, rootUrl);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.BackgroundMaterial\", BackgroundMaterial);\r\n"]}
|
|
1
|
+
{"version":3,"file":"backgroundMaterial.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Background/backgroundMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { serialize, serializeAsColor3, expandToProperty, serializeAsTexture, serializeAsVector3 } from \"../../Misc/decorators\";\r\nimport { SmartArray } from \"../../Misc/smartArray\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport type { Nullable, int, float } from \"../../types\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { Matrix } from \"../../Maths/math.vector\";\r\nimport { Vector3, Vector4 } from \"../../Maths/math.vector\";\r\nimport { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport type { SubMesh } from \"../../Meshes/subMesh\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { Mesh } from \"../../Meshes/mesh\";\r\nimport type { IEffectCreationOptions } from \"../../Materials/effect\";\r\nimport { MaterialDefines } from \"../../Materials/materialDefines\";\r\nimport { PushMaterial } from \"../../Materials/pushMaterial\";\r\nimport { ImageProcessingDefinesMixin } from \"../../Materials/imageProcessingConfiguration.defines\";\r\nimport { ImageProcessingConfiguration } from \"../../Materials/imageProcessingConfiguration\";\r\nimport type { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport type { RenderTargetTexture } from \"../../Materials/Textures/renderTargetTexture\";\r\nimport type { IShadowLight } from \"../../Lights/shadowLight\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\nimport { MaterialFlags } from \"../materialFlags\";\r\nimport { Color3 } from \"../../Maths/math.color\";\r\n\r\nimport { EffectFallbacks } from \"../effectFallbacks\";\r\nimport { AddClipPlaneUniforms, BindClipPlane } from \"../clipPlaneMaterialHelper\";\r\nimport {\r\n BindBonesParameters,\r\n BindFogParameters,\r\n BindLights,\r\n BindLogDepth,\r\n BindTextureMatrix,\r\n BindIBLParameters,\r\n BindIBLSamplers,\r\n HandleFallbacksForShadows,\r\n PrepareAttributesForBones,\r\n PrepareAttributesForInstances,\r\n PrepareDefinesForAttributes,\r\n PrepareDefinesForFrameBoundValues,\r\n PrepareDefinesForLights,\r\n PrepareDefinesForIBL,\r\n PrepareDefinesForMergedUV,\r\n PrepareDefinesForMisc,\r\n PrepareDefinesForMultiview,\r\n PrepareUniformsAndSamplersList,\r\n PrepareUniformsAndSamplersForIBL,\r\n PrepareUniformLayoutForIBL,\r\n} from \"../materialHelper.functions\";\r\nimport { SerializationHelper } from \"../../Misc/decorators.serialization\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\nimport { ImageProcessingMixin } from \"../imageProcessing\";\r\n\r\nclass BackgroundMaterialDefinesBase extends MaterialDefines {}\r\n\r\n/**\r\n * Background material defines definition.\r\n * @internal Mainly internal Use\r\n */\r\nclass BackgroundMaterialDefines extends ImageProcessingDefinesMixin(BackgroundMaterialDefinesBase) {\r\n /**\r\n * True if the diffuse texture is in use.\r\n */\r\n public DIFFUSE = false;\r\n\r\n /**\r\n * The direct UV channel to use.\r\n */\r\n public DIFFUSEDIRECTUV = 0;\r\n\r\n /**\r\n * True if the diffuse texture is in gamma space.\r\n */\r\n public GAMMADIFFUSE = false;\r\n\r\n /**\r\n * True if the diffuse texture has opacity in the alpha channel.\r\n */\r\n public DIFFUSEHASALPHA = false;\r\n\r\n /**\r\n * True if you want the material to fade to transparent at grazing angle.\r\n */\r\n public OPACITYFRESNEL = false;\r\n\r\n /**\r\n * True if an extra blur needs to be added in the reflection.\r\n */\r\n public REFLECTIONBLUR = false;\r\n\r\n /**\r\n * True if you want the material to fade to reflection at grazing angle.\r\n */\r\n public REFLECTIONFRESNEL = false;\r\n\r\n /**\r\n * True if you want the material to falloff as far as you move away from the scene center.\r\n */\r\n public REFLECTIONFALLOFF = false;\r\n\r\n /**\r\n * False if the current Webgl implementation does not support the texture lod extension.\r\n */\r\n public TEXTURELODSUPPORT = false;\r\n\r\n /**\r\n * True to ensure the data are premultiplied.\r\n */\r\n public PREMULTIPLYALPHA = false;\r\n\r\n /**\r\n * True if the texture contains cooked RGB values and not gray scaled multipliers.\r\n */\r\n public USERGBCOLOR = false;\r\n\r\n /**\r\n * True if highlight and shadow levels have been specified. It can help ensuring the main perceived color\r\n * stays aligned with the desired configuration.\r\n */\r\n public USEHIGHLIGHTANDSHADOWCOLORS = false;\r\n\r\n /**\r\n * True if only shadows must be rendered\r\n */\r\n public BACKMAT_SHADOWONLY = false;\r\n\r\n /**\r\n * True to add noise in order to reduce the banding effect.\r\n */\r\n public NOISE = false;\r\n\r\n /**\r\n * is the reflection texture in BGR color scheme?\r\n * Mainly used to solve a bug in ios10 video tag\r\n */\r\n public REFLECTIONBGR = false;\r\n\r\n /**\r\n * True if ground projection has been enabled.\r\n */\r\n public PROJECTED_GROUND = false;\r\n\r\n // Reflection.\r\n public REFLECTION = false;\r\n public REFLECTIONMAP_3D = false;\r\n public REFLECTIONMAP_SPHERICAL = false;\r\n public REFLECTIONMAP_PLANAR = false;\r\n public REFLECTIONMAP_CUBIC = false;\r\n public REFLECTIONMAP_PROJECTION = false;\r\n public REFLECTIONMAP_SKYBOX = false;\r\n public REFLECTIONMAP_EXPLICIT = false;\r\n public REFLECTIONMAP_EQUIRECTANGULAR = false;\r\n public REFLECTIONMAP_EQUIRECTANGULAR_FIXED = false;\r\n public REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = false;\r\n public INVERTCUBICMAP = false;\r\n public REFLECTIONMAP_OPPOSITEZ = false;\r\n public LODINREFLECTIONALPHA = false;\r\n public GAMMAREFLECTION = false;\r\n public RGBDREFLECTION = false;\r\n public EQUIRECTANGULAR_RELFECTION_FOV = false;\r\n\r\n // Default BJS.\r\n public MAINUV1 = false;\r\n public MAINUV2 = false;\r\n public UV1 = false;\r\n public UV2 = 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 POINTSIZE = false;\r\n public FOG = false;\r\n public NORMAL = false;\r\n public NUM_BONE_INFLUENCERS = 0;\r\n public BonesPerMesh = 0;\r\n public INSTANCES = false;\r\n public SHADOWFLOAT = false;\r\n public LOGARITHMICDEPTH = false;\r\n public NONUNIFORMSCALING = false;\r\n public ALPHATEST = 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\nclass BackgroundMaterialBase extends ImageProcessingMixin(PushMaterial) {}\r\n/**\r\n * Background material used to create an efficient environment around your scene.\r\n * #157MGZ: simple test\r\n */\r\nexport class BackgroundMaterial extends BackgroundMaterialBase {\r\n /**\r\n * Standard reflectance value at parallel view angle.\r\n */\r\n public static StandardReflectance0 = 0.05;\r\n\r\n /**\r\n * Standard reflectance value at grazing angle.\r\n */\r\n public static StandardReflectance90 = 0.5;\r\n\r\n @serializeAsColor3()\r\n protected _primaryColor: Color3;\r\n /**\r\n * Key light Color (multiply against the environment texture)\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public primaryColor = Color3.White();\r\n\r\n @serializeAsColor3()\r\n protected __perceptualColor: Nullable<Color3>;\r\n /**\r\n * Experimental Internal Use Only.\r\n *\r\n * Key light Color in \"perceptual value\" meaning the color you would like to see on screen.\r\n * This acts as a helper to set the primary color to a more \"human friendly\" value.\r\n * Conversion to linear space as well as exposure and tone mapping correction will be applied to keep the\r\n * output color as close as possible from the chosen value.\r\n * (This does not account for contrast color grading and color curves as they are considered post effect and not directly\r\n * part of lighting setup.)\r\n */\r\n public get _perceptualColor(): Nullable<Color3> {\r\n return this.__perceptualColor;\r\n }\r\n public set _perceptualColor(value: Nullable<Color3>) {\r\n this.__perceptualColor = value;\r\n this._computePrimaryColorFromPerceptualColor();\r\n this._markAllSubMeshesAsLightsDirty();\r\n }\r\n\r\n @serialize()\r\n protected _primaryColorShadowLevel: float = 0;\r\n /**\r\n * Defines the level of the shadows (dark area of the reflection map) in order to help scaling the colors.\r\n * The color opposite to the primary color is used at the level chosen to define what the black area would look.\r\n */\r\n public get primaryColorShadowLevel(): float {\r\n return this._primaryColorShadowLevel;\r\n }\r\n public set primaryColorShadowLevel(value: float) {\r\n this._primaryColorShadowLevel = value;\r\n this._computePrimaryColors();\r\n this._markAllSubMeshesAsLightsDirty();\r\n }\r\n\r\n @serialize()\r\n protected _primaryColorHighlightLevel: float = 0;\r\n /**\r\n * Defines the level of the highlights (highlight area of the reflection map) in order to help scaling the colors.\r\n * The primary color is used at the level chosen to define what the white area would look.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public get primaryColorHighlightLevel(): float {\r\n return this._primaryColorHighlightLevel;\r\n }\r\n public set primaryColorHighlightLevel(value: float) {\r\n this._primaryColorHighlightLevel = value;\r\n this._computePrimaryColors();\r\n this._markAllSubMeshesAsLightsDirty();\r\n }\r\n\r\n @serializeAsTexture()\r\n protected _reflectionTexture: Nullable<BaseTexture>;\r\n /**\r\n * Reflection Texture used in the material.\r\n * Should be author in a specific way for the best result (refer to the documentation).\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public reflectionTexture: Nullable<BaseTexture> = null;\r\n\r\n @serialize()\r\n protected _reflectionBlur: float;\r\n /**\r\n * Reflection Texture level of blur.\r\n *\r\n * Can be use to reuse an existing HDR Texture and target a specific LOD to prevent authoring the\r\n * texture twice.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public reflectionBlur: float = 0;\r\n\r\n @serializeAsTexture()\r\n protected _diffuseTexture: Nullable<BaseTexture>;\r\n /**\r\n * Diffuse Texture used in the material.\r\n * Should be author in a specific way for the best result (refer to the documentation).\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public diffuseTexture: Nullable<BaseTexture> = null;\r\n\r\n protected _shadowLights: Nullable<IShadowLight[]> = null;\r\n /**\r\n * Specify the list of lights casting shadow on the material.\r\n * All scene shadow lights will be included if null.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public shadowLights: Nullable<IShadowLight[]> = null;\r\n\r\n @serialize()\r\n protected _shadowLevel: float;\r\n /**\r\n * Helps adjusting the shadow to a softer level if required.\r\n * 0 means black shadows and 1 means no shadows.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public shadowLevel: float = 0;\r\n\r\n @serializeAsVector3()\r\n protected _sceneCenter: Vector3;\r\n /**\r\n * In case of opacity Fresnel or reflection falloff, this is use as a scene center.\r\n * It is usually zero but might be interesting to modify according to your setup.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public sceneCenter: Vector3 = Vector3.Zero();\r\n\r\n @serialize()\r\n protected _opacityFresnel: boolean;\r\n /**\r\n * This helps specifying that the material is falling off to the sky box at grazing angle.\r\n * This helps ensuring a nice transition when the camera goes under the ground.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public opacityFresnel: boolean = true;\r\n\r\n @serialize()\r\n protected _reflectionFresnel: boolean;\r\n /**\r\n * This helps specifying that the material is falling off from diffuse to the reflection texture at grazing angle.\r\n * This helps adding a mirror texture on the ground.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public reflectionFresnel: boolean = false;\r\n\r\n @serialize()\r\n protected _reflectionFalloffDistance: number;\r\n /**\r\n * This helps specifying the falloff radius off the reflection texture from the sceneCenter.\r\n * This helps adding a nice falloff effect to the reflection if used as a mirror for instance.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public reflectionFalloffDistance: number = 0.0;\r\n\r\n @serialize()\r\n protected _reflectionAmount: number;\r\n /**\r\n * This specifies the weight of the reflection against the background in case of reflection Fresnel.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public reflectionAmount: number = 1.0;\r\n\r\n @serialize()\r\n protected _reflectionReflectance0: number;\r\n /**\r\n * This specifies the weight of the reflection at grazing angle.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public reflectionReflectance0: number = 0.05;\r\n\r\n @serialize()\r\n protected _reflectionReflectance90: number;\r\n /**\r\n * This specifies the weight of the reflection at a perpendicular point of view.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public reflectionReflectance90: number = 0.5;\r\n\r\n /**\r\n * Sets the reflection reflectance fresnel values according to the default standard\r\n * empirically know to work well :-)\r\n */\r\n public set reflectionStandardFresnelWeight(value: number) {\r\n let reflectionWeight = value;\r\n\r\n if (reflectionWeight < 0.5) {\r\n reflectionWeight = reflectionWeight * 2.0;\r\n this.reflectionReflectance0 = BackgroundMaterial.StandardReflectance0 * reflectionWeight;\r\n this.reflectionReflectance90 = BackgroundMaterial.StandardReflectance90 * reflectionWeight;\r\n } else {\r\n reflectionWeight = reflectionWeight * 2.0 - 1.0;\r\n this.reflectionReflectance0 = BackgroundMaterial.StandardReflectance0 + (1.0 - BackgroundMaterial.StandardReflectance0) * reflectionWeight;\r\n this.reflectionReflectance90 = BackgroundMaterial.StandardReflectance90 + (1.0 - BackgroundMaterial.StandardReflectance90) * reflectionWeight;\r\n }\r\n }\r\n\r\n @serialize()\r\n protected _useRGBColor: boolean;\r\n /**\r\n * Helps to directly use the maps channels instead of their level.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useRGBColor: boolean = true;\r\n\r\n @serialize()\r\n protected _enableNoise: boolean;\r\n /**\r\n * This helps reducing the banding effect that could occur on the background.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public enableNoise: boolean = false;\r\n\r\n /**\r\n * The current fov(field of view) multiplier, 0.0 - 2.0. Defaults to 1.0. Lower values \"zoom in\" and higher values \"zoom out\".\r\n * Best used when trying to implement visual zoom effects like fish-eye or binoculars while not adjusting camera fov.\r\n * Recommended to be keep at 1.0 except for special cases.\r\n */\r\n public get fovMultiplier(): number {\r\n return this._fovMultiplier;\r\n }\r\n public set fovMultiplier(value: number) {\r\n if (isNaN(value)) {\r\n value = 1.0;\r\n }\r\n this._fovMultiplier = Math.max(0.0, Math.min(2.0, value));\r\n }\r\n private _fovMultiplier: float = 1.0;\r\n\r\n /**\r\n * Enable the FOV adjustment feature controlled by fovMultiplier.\r\n */\r\n public useEquirectangularFOV: boolean = false;\r\n\r\n @serialize()\r\n private _maxSimultaneousLights: int = 4;\r\n /**\r\n * Number of Simultaneous lights allowed on the material.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public maxSimultaneousLights: int = 4;\r\n\r\n @serialize()\r\n private _shadowOnly: boolean = false;\r\n /**\r\n * Make the material only render shadows\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public shadowOnly: boolean = false;\r\n\r\n /**\r\n * Due to a bug in iOS10, video tags (which are using the background material) are in BGR and not RGB.\r\n * Setting this flag to true (not done automatically!) will convert it back to RGB.\r\n */\r\n public switchToBGR: boolean = false;\r\n\r\n private _enableGroundProjection: boolean = false;\r\n /**\r\n * Enables the ground projection mode on the material.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/environment/skybox#ground-projection\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public enableGroundProjection: boolean = false;\r\n\r\n /**\r\n * Defines the radius of the projected ground if enableGroundProjection is true.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/environment/skybox#ground-projection\r\n */\r\n @serialize()\r\n public projectedGroundRadius = 1000;\r\n\r\n /**\r\n * Defines the height of the projected ground if enableGroundProjection is true.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/environment/skybox#ground-projection\r\n */\r\n @serialize()\r\n public projectedGroundHeight = 10;\r\n\r\n // Temp values kept as cache in the material.\r\n private _renderTargets = new SmartArray<RenderTargetTexture>(16);\r\n private _reflectionControls = Vector4.Zero();\r\n private _white = Color3.White();\r\n private _primaryShadowColor = Color3.Black();\r\n private _primaryHighlightColor = Color3.Black();\r\n\r\n private _shadersLoaded = false;\r\n\r\n /**\r\n * Instantiates a Background 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 * @param forceGLSL Use the GLSL code generation for the shader (even on WebGPU). Default is false\r\n */\r\n constructor(name: string, scene?: Scene, forceGLSL = false) {\r\n super(name, scene, undefined, forceGLSL);\r\n\r\n // Setup the default processing configuration to the scene.\r\n this._attachImageProcessingConfiguration(null);\r\n\r\n this.getRenderTargetTextures = (): SmartArray<RenderTargetTexture> => {\r\n this._renderTargets.reset();\r\n\r\n if (this._diffuseTexture && this._diffuseTexture.isRenderTarget) {\r\n this._renderTargets.push(this._diffuseTexture as RenderTargetTexture);\r\n }\r\n\r\n if (this._reflectionTexture && this._reflectionTexture.isRenderTarget) {\r\n this._renderTargets.push(this._reflectionTexture as RenderTargetTexture);\r\n }\r\n\r\n return this._renderTargets;\r\n };\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 if (this._diffuseTexture && this._diffuseTexture.isRenderTarget) {\r\n return true;\r\n }\r\n\r\n if (this._reflectionTexture && this._reflectionTexture.isRenderTarget) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * The entire material has been created in order to prevent overdraw.\r\n * @returns false\r\n */\r\n public override needAlphaTesting(): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * The entire material has been created in order to prevent overdraw.\r\n * @returns true if blending is enable\r\n */\r\n public override needAlphaBlending(): boolean {\r\n return this.alpha < 1 || (this._diffuseTexture != null && this._diffuseTexture.hasAlpha) || this._shadowOnly;\r\n }\r\n\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 * @param useInstances Specify wether or not the material is used with instances\r\n * @returns true if all the dependencies are ready (Textures, Effects...)\r\n */\r\n public override isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances: boolean = false): boolean {\r\n const drawWrapper = subMesh._drawWrapper;\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 subMesh.materialDefines = new BackgroundMaterialDefines();\r\n }\r\n\r\n const scene = this.getScene();\r\n const defines = <BackgroundMaterialDefines>subMesh.materialDefines;\r\n\r\n if (this._isReadyForSubMesh(subMesh)) {\r\n return true;\r\n }\r\n\r\n const engine = scene.getEngine();\r\n\r\n // Lights\r\n PrepareDefinesForLights(scene, mesh, defines, false, this._maxSimultaneousLights);\r\n defines._needNormals = true;\r\n\r\n // Multiview\r\n PrepareDefinesForMultiview(scene, defines);\r\n\r\n // Textures\r\n if (defines._areTexturesDirty) {\r\n defines._needUVs = false;\r\n if (scene.texturesEnabled) {\r\n if (scene.getEngine().getCaps().textureLOD) {\r\n defines.TEXTURELODSUPPORT = true;\r\n }\r\n\r\n if (this._diffuseTexture && MaterialFlags.DiffuseTextureEnabled) {\r\n if (!this._diffuseTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n\r\n PrepareDefinesForMergedUV(this._diffuseTexture, defines, \"DIFFUSE\");\r\n defines.DIFFUSEHASALPHA = this._diffuseTexture.hasAlpha;\r\n defines.GAMMADIFFUSE = this._diffuseTexture.gammaSpace;\r\n defines.OPACITYFRESNEL = this._opacityFresnel;\r\n } else {\r\n defines.DIFFUSE = false;\r\n defines.DIFFUSEDIRECTUV = 0;\r\n defines.DIFFUSEHASALPHA = false;\r\n defines.GAMMADIFFUSE = false;\r\n defines.OPACITYFRESNEL = false;\r\n }\r\n\r\n const reflectionTexture = this._reflectionTexture;\r\n PrepareDefinesForIBL(scene, reflectionTexture, defines);\r\n if (reflectionTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n if (!reflectionTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n defines.EQUIRECTANGULAR_RELFECTION_FOV = this.useEquirectangularFOV;\r\n defines.REFLECTIONBGR = this.switchToBGR;\r\n defines.REFLECTIONBLUR = this._reflectionBlur > 0;\r\n\r\n if (this.reflectionFresnel) {\r\n defines.REFLECTIONFRESNEL = true;\r\n defines.REFLECTIONFALLOFF = this.reflectionFalloffDistance > 0;\r\n\r\n this._reflectionControls.x = this.reflectionAmount;\r\n this._reflectionControls.y = this.reflectionReflectance0;\r\n this._reflectionControls.z = this.reflectionReflectance90;\r\n this._reflectionControls.w = 1 / this.reflectionFalloffDistance;\r\n } else {\r\n defines.REFLECTIONFRESNEL = false;\r\n defines.REFLECTIONFALLOFF = false;\r\n }\r\n } else {\r\n defines.REFLECTIONFRESNEL = false;\r\n defines.REFLECTIONFALLOFF = false;\r\n defines.REFLECTIONBLUR = false;\r\n }\r\n }\r\n\r\n defines.PREMULTIPLYALPHA = this.alphaMode === Constants.ALPHA_PREMULTIPLIED || this.alphaMode === Constants.ALPHA_PREMULTIPLIED_PORTERDUFF;\r\n defines.USERGBCOLOR = this._useRGBColor;\r\n defines.NOISE = this._enableNoise;\r\n }\r\n\r\n if (defines._areLightsDirty) {\r\n defines.USEHIGHLIGHTANDSHADOWCOLORS = !this._useRGBColor && (this._primaryColorShadowLevel !== 0 || this._primaryColorHighlightLevel !== 0);\r\n defines.BACKMAT_SHADOWONLY = this._shadowOnly;\r\n }\r\n\r\n if (defines._areImageProcessingDirty && this._imageProcessingConfiguration) {\r\n if (!this._imageProcessingConfiguration.isReady()) {\r\n return false;\r\n }\r\n\r\n this._imageProcessingConfiguration.prepareDefines(defines);\r\n }\r\n\r\n if (defines._areMiscDirty) {\r\n if (defines.REFLECTIONMAP_3D && this._enableGroundProjection) {\r\n defines.PROJECTED_GROUND = true;\r\n defines.REFLECTIONMAP_SKYBOX = true;\r\n } else {\r\n defines.PROJECTED_GROUND = false;\r\n }\r\n }\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 this.needAlphaTestingForMesh(mesh),\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, subMesh.getRenderingMesh().hasThinInstances);\r\n\r\n // Attribs\r\n if (PrepareDefinesForAttributes(mesh, defines, false, true, false)) {\r\n if (mesh) {\r\n if (!scene.getEngine().getCaps().standardDerivatives && !mesh.isVerticesDataPresent(VertexBuffer.NormalKind)) {\r\n mesh.createNormals(true);\r\n Logger.Warn(\"BackgroundMaterial: Normals have been created for the mesh: \" + mesh.name);\r\n }\r\n }\r\n }\r\n\r\n // Get correct effect\r\n if (defines.isDirty) {\r\n defines.markAsProcessed();\r\n scene.resetCachedMaterial();\r\n\r\n // Fallbacks\r\n const fallbacks = new EffectFallbacks();\r\n if (defines.FOG) {\r\n fallbacks.addFallback(0, \"FOG\");\r\n }\r\n\r\n if (defines.POINTSIZE) {\r\n fallbacks.addFallback(1, \"POINTSIZE\");\r\n }\r\n\r\n if (defines.MULTIVIEW) {\r\n fallbacks.addFallback(0, \"MULTIVIEW\");\r\n }\r\n\r\n HandleFallbacksForShadows(defines, fallbacks, this._maxSimultaneousLights);\r\n\r\n //Attributes\r\n const attribs = [VertexBuffer.PositionKind];\r\n\r\n if (defines.NORMAL) {\r\n attribs.push(VertexBuffer.NormalKind);\r\n }\r\n\r\n if (defines.UV1) {\r\n attribs.push(VertexBuffer.UVKind);\r\n }\r\n\r\n if (defines.UV2) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n }\r\n\r\n PrepareAttributesForBones(attribs, mesh, defines, fallbacks);\r\n PrepareAttributesForInstances(attribs, defines);\r\n\r\n const uniforms = [\r\n \"world\",\r\n \"view\",\r\n \"viewProjection\",\r\n \"vEyePosition\",\r\n \"vLightsType\",\r\n \"vFogInfos\",\r\n \"vFogColor\",\r\n \"pointSize\",\r\n \"mBones\",\r\n\r\n \"vPrimaryColor\",\r\n \"vPrimaryColorShadow\",\r\n \"fFovMultiplier\",\r\n\r\n \"shadowLevel\",\r\n \"alpha\",\r\n\r\n \"vBackgroundCenter\",\r\n \"vReflectionControl\",\r\n\r\n \"vDiffuseInfos\",\r\n \"diffuseMatrix\",\r\n\r\n \"projectedGroundInfos\",\r\n \"logarithmicDepthConstant\",\r\n ];\r\n\r\n AddClipPlaneUniforms(uniforms);\r\n const samplers = [\"diffuseSampler\"];\r\n PrepareUniformsAndSamplersForIBL(uniforms, samplers, false);\r\n const uniformBuffers = [\"Material\", \"Scene\"];\r\n\r\n if (ImageProcessingConfiguration) {\r\n ImageProcessingConfiguration.PrepareUniforms(uniforms, defines);\r\n ImageProcessingConfiguration.PrepareSamplers(samplers, defines);\r\n }\r\n\r\n PrepareUniformsAndSamplersList(<IEffectCreationOptions>{\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: defines,\r\n maxSimultaneousLights: this._maxSimultaneousLights,\r\n });\r\n\r\n const join = defines.toString();\r\n const effect = scene.getEngine().createEffect(\r\n \"background\",\r\n <IEffectCreationOptions>{\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: fallbacks,\r\n onCompiled: this.onCompiled,\r\n onError: this.onError,\r\n indexParameters: { maxSimultaneousLights: this._maxSimultaneousLights },\r\n shaderLanguage: this._shaderLanguage,\r\n extraInitializationsAsync: this._shadersLoaded\r\n ? undefined\r\n : async () => {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([import(\"../../ShadersWGSL/background.vertex\"), import(\"../../ShadersWGSL/background.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../../Shaders/background.vertex\"), import(\"../../Shaders/background.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n },\r\n },\r\n engine\r\n );\r\n subMesh.setEffect(effect, defines, this._materialContext);\r\n\r\n this.buildUniformLayout();\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\r\n this._checkScenePerformancePriority();\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Compute the primary color according to the chosen perceptual color.\r\n */\r\n private _computePrimaryColorFromPerceptualColor(): void {\r\n if (!this.__perceptualColor) {\r\n return;\r\n }\r\n\r\n this._primaryColor.copyFrom(this.__perceptualColor);\r\n\r\n // Revert gamma space.\r\n this._primaryColor.toLinearSpaceToRef(this._primaryColor, this.getScene().getEngine().useExactSrgbConversions);\r\n\r\n // Revert image processing configuration.\r\n if (this._imageProcessingConfiguration) {\r\n // Revert Exposure.\r\n this._primaryColor.scaleToRef(1 / this._imageProcessingConfiguration.exposure, this._primaryColor);\r\n }\r\n\r\n this._computePrimaryColors();\r\n }\r\n\r\n /**\r\n * Compute the highlights and shadow colors according to their chosen levels.\r\n */\r\n private _computePrimaryColors(): void {\r\n if (this._primaryColorShadowLevel === 0 && this._primaryColorHighlightLevel === 0) {\r\n return;\r\n }\r\n\r\n // Find the highlight color based on the configuration.\r\n this._primaryColor.scaleToRef(this._primaryColorShadowLevel, this._primaryShadowColor);\r\n this._primaryColor.subtractToRef(this._primaryShadowColor, this._primaryShadowColor);\r\n\r\n // Find the shadow color based on the configuration.\r\n this._white.subtractToRef(this._primaryColor, this._primaryHighlightColor);\r\n this._primaryHighlightColor.scaleToRef(this._primaryColorHighlightLevel, this._primaryHighlightColor);\r\n this._primaryColor.addToRef(this._primaryHighlightColor, this._primaryHighlightColor);\r\n }\r\n\r\n /**\r\n * Build the uniform buffer used in the material.\r\n */\r\n public override buildUniformLayout(): void {\r\n // Order is important !\r\n this._uniformBuffer.addUniform(\"vPrimaryColor\", 4);\r\n this._uniformBuffer.addUniform(\"vPrimaryColorShadow\", 4);\r\n this._uniformBuffer.addUniform(\"vDiffuseInfos\", 2);\r\n this._uniformBuffer.addUniform(\"diffuseMatrix\", 16);\r\n this._uniformBuffer.addUniform(\"fFovMultiplier\", 1);\r\n this._uniformBuffer.addUniform(\"pointSize\", 1);\r\n this._uniformBuffer.addUniform(\"shadowLevel\", 1);\r\n this._uniformBuffer.addUniform(\"alpha\", 1);\r\n this._uniformBuffer.addUniform(\"vBackgroundCenter\", 3);\r\n this._uniformBuffer.addUniform(\"vReflectionControl\", 4);\r\n this._uniformBuffer.addUniform(\"projectedGroundInfos\", 2);\r\n\r\n PrepareUniformLayoutForIBL(this._uniformBuffer, true, false, false);\r\n\r\n this._uniformBuffer.create();\r\n }\r\n\r\n /**\r\n * Unbind the material.\r\n */\r\n public override unbind(): void {\r\n if (this._diffuseTexture && this._diffuseTexture.isRenderTarget) {\r\n this._uniformBuffer.setTexture(\"diffuseSampler\", null);\r\n }\r\n\r\n if (this._reflectionTexture && this._reflectionTexture.isRenderTarget) {\r\n this._uniformBuffer.setTexture(\"reflectionSampler\", null);\r\n }\r\n\r\n super.unbind();\r\n }\r\n\r\n /**\r\n * Bind only the world matrix to the material.\r\n * @param world The world matrix to bind.\r\n */\r\n public override bindOnlyWorldMatrix(world: Matrix): void {\r\n this._activeEffect!.setMatrix(\"world\", world);\r\n }\r\n\r\n /**\r\n * Bind the material for a dedicated submesh (every used meshes will be considered opaque).\r\n * @param world The world matrix to bind.\r\n * @param mesh the mesh to bind for.\r\n * @param subMesh The submesh to bind for.\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 = <BackgroundMaterialDefines>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\r\n this.bindOnlyWorldMatrix(world);\r\n\r\n // Bones\r\n BindBonesParameters(mesh, this._activeEffect);\r\n\r\n const mustRebind = this._mustRebind(scene, effect, subMesh, mesh.visibility);\r\n if (mustRebind) {\r\n this._uniformBuffer.bindToEffect(effect, \"Material\");\r\n\r\n this.bindViewProjection(effect);\r\n\r\n const reflectionTexture = this._reflectionTexture;\r\n if (!this._uniformBuffer.useUbo || !this.isFrozen || !this._uniformBuffer.isSync || subMesh._drawWrapper._forceRebindOnNextCall) {\r\n // Texture uniforms\r\n if (scene.texturesEnabled) {\r\n if (this._diffuseTexture && MaterialFlags.DiffuseTextureEnabled) {\r\n this._uniformBuffer.updateFloat2(\"vDiffuseInfos\", this._diffuseTexture.coordinatesIndex, this._diffuseTexture.level);\r\n BindTextureMatrix(this._diffuseTexture, this._uniformBuffer, \"diffuse\");\r\n }\r\n\r\n BindIBLParameters(scene, defines, this._uniformBuffer, Color3.White(), reflectionTexture, false, true, false, false, false, false, this._reflectionBlur);\r\n }\r\n\r\n if (this.shadowLevel > 0) {\r\n this._uniformBuffer.updateFloat(\"shadowLevel\", this.shadowLevel);\r\n }\r\n this._uniformBuffer.updateFloat(\"alpha\", this.alpha);\r\n\r\n // Point size\r\n if (this.pointsCloud) {\r\n this._uniformBuffer.updateFloat(\"pointSize\", this.pointSize);\r\n }\r\n\r\n if (defines.USEHIGHLIGHTANDSHADOWCOLORS) {\r\n this._uniformBuffer.updateColor4(\"vPrimaryColor\", this._primaryHighlightColor, 1.0);\r\n this._uniformBuffer.updateColor4(\"vPrimaryColorShadow\", this._primaryShadowColor, 1.0);\r\n } else {\r\n this._uniformBuffer.updateColor4(\"vPrimaryColor\", this._primaryColor, 1.0);\r\n }\r\n }\r\n\r\n this._uniformBuffer.updateFloat(\"fFovMultiplier\", this._fovMultiplier);\r\n\r\n // Textures\r\n if (scene.texturesEnabled) {\r\n if (this._diffuseTexture && MaterialFlags.DiffuseTextureEnabled) {\r\n this._uniformBuffer.setTexture(\"diffuseSampler\", this._diffuseTexture);\r\n }\r\n\r\n if (reflectionTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n BindIBLSamplers(scene, defines, this._uniformBuffer, reflectionTexture);\r\n\r\n if (defines.REFLECTIONFRESNEL) {\r\n this._uniformBuffer.updateFloat3(\"vBackgroundCenter\", this.sceneCenter.x, this.sceneCenter.y, this.sceneCenter.z);\r\n this._uniformBuffer.updateFloat4(\r\n \"vReflectionControl\",\r\n this._reflectionControls.x,\r\n this._reflectionControls.y,\r\n this._reflectionControls.z,\r\n this._reflectionControls.w\r\n );\r\n }\r\n }\r\n\r\n if (defines.PROJECTED_GROUND) {\r\n this._uniformBuffer.updateFloat2(\"projectedGroundInfos\", this.projectedGroundRadius, this.projectedGroundHeight);\r\n }\r\n }\r\n\r\n // Clip plane\r\n BindClipPlane(this._activeEffect, this, scene);\r\n\r\n scene.bindEyePosition(effect);\r\n } else if (scene.getEngine()._features.needToAlwaysBindUniformBuffers) {\r\n this._uniformBuffer.bindToEffect(effect, \"Material\");\r\n this._needToBindSceneUbo = true;\r\n }\r\n\r\n if (mustRebind || !this.isFrozen) {\r\n if (scene.lightsEnabled) {\r\n BindLights(scene, mesh, this._activeEffect, defines, this._maxSimultaneousLights);\r\n }\r\n\r\n // View\r\n this.bindView(effect);\r\n\r\n // Fog\r\n BindFogParameters(scene, mesh, this._activeEffect, true);\r\n\r\n // Log. depth\r\n if (this._useLogarithmicDepth) {\r\n BindLogDepth(defines, effect, scene);\r\n }\r\n\r\n // image processing\r\n if (this._imageProcessingConfiguration) {\r\n this._imageProcessingConfiguration.bind(this._activeEffect);\r\n }\r\n }\r\n\r\n this._afterBind(mesh, this._activeEffect, subMesh);\r\n\r\n this._uniformBuffer.update();\r\n }\r\n\r\n /**\r\n * Checks to see if a texture is used in the material.\r\n * @param texture - Base texture to use.\r\n * @returns - Boolean specifying if a texture is used in the material.\r\n */\r\n public override hasTexture(texture: BaseTexture): boolean {\r\n if (super.hasTexture(texture)) {\r\n return true;\r\n }\r\n\r\n if (this._reflectionTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._diffuseTexture === texture) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Dispose the material.\r\n * @param forceDisposeEffect Force disposal of the associated effect.\r\n * @param forceDisposeTextures Force disposal of the associated textures.\r\n */\r\n public override dispose(forceDisposeEffect: boolean = false, forceDisposeTextures: boolean = false): void {\r\n if (forceDisposeTextures) {\r\n if (this.diffuseTexture) {\r\n this.diffuseTexture.dispose();\r\n }\r\n if (this.reflectionTexture) {\r\n this.reflectionTexture.dispose();\r\n }\r\n }\r\n\r\n this._renderTargets.dispose();\r\n\r\n if (this._imageProcessingConfiguration && this._imageProcessingObserver) {\r\n this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver);\r\n }\r\n\r\n super.dispose(forceDisposeEffect);\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): BackgroundMaterial {\r\n return SerializationHelper.Clone(() => new BackgroundMaterial(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.BackgroundMaterial\";\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Gets the class name of the material\r\n * @returns \"BackgroundMaterial\"\r\n */\r\n public override getClassName(): string {\r\n return \"BackgroundMaterial\";\r\n }\r\n\r\n /**\r\n * Parse a JSON input to create back a background 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 BackgroundMaterial.\r\n */\r\n public static override Parse(source: any, scene: Scene, rootUrl: string): BackgroundMaterial {\r\n return SerializationHelper.Parse(() => new BackgroundMaterial(source.name, scene), source, scene, rootUrl);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.BackgroundMaterial\", BackgroundMaterial);\r\n"]}
|
|
@@ -115,7 +115,7 @@ export class GaussianSplattingMaterial extends PushMaterial {
|
|
|
115
115
|
const engine = scene.getEngine();
|
|
116
116
|
const gsMesh = mesh;
|
|
117
117
|
// Misc.
|
|
118
|
-
PrepareDefinesForMisc(mesh, scene, this._useLogarithmicDepth, this.pointsCloud, this.fogEnabled, false, defines, undefined, undefined, undefined, this.
|
|
118
|
+
PrepareDefinesForMisc(mesh, scene, this._useLogarithmicDepth, this.pointsCloud, this.fogEnabled, false, defines, undefined, undefined, undefined, this._isVertexOutputInvariant);
|
|
119
119
|
// Values that need to be evaluated on every frame
|
|
120
120
|
PrepareDefinesForFrameBoundValues(scene, engine, this, defines, useInstances, null, true);
|
|
121
121
|
// Attribs
|
|
@@ -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 \"core/Meshes\";\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 \"core/Cameras/camera\";\r\n\r\nimport \"../../Shaders/gaussianSplatting.fragment\";\r\nimport \"../../Shaders/gaussianSplatting.vertex\";\r\nimport \"../../ShadersWGSL/gaussianSplatting.fragment\";\r\nimport \"../../ShadersWGSL/gaussianSplatting.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 }\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 /**\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 const engine = scene.getEngine();\r\n const gsMesh = mesh as GaussianSplattingMesh;\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._setVertexOutputInvariant\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 const attribs = [VertexBuffer.PositionKind, \"splatIndex\"];\r\n\r\n PrepareAttributesForInstances(attribs, defines);\r\n\r\n const 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 const samplers = [\"covariancesATexture\", \"covariancesBTexture\", \"centersTexture\", \"colorsTexture\", \"shTexture0\", \"shTexture1\", \"shTexture2\"];\r\n const uniformBuffers = [\"Scene\", \"Mesh\"];\r\n\r\n PrepareUniformsAndSamplersList(<IEffectCreationOptions>{\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: defines,\r\n });\r\n\r\n AddClipPlaneUniforms(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: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: 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 * 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();\r\n const renderHeight = engine.getRenderHeight();\r\n\r\n const gsMesh = mesh as GaussianSplattingMesh;\r\n const gsMaterial = gsMesh.material as GaussianSplattingMaterial;\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 /**\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":"AAOA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,MAAM,EAAE,gCAA4B;AAE7C,OAAO,0CAA0C,CAAC;AAClD,OAAO,wCAAwC,CAAC;AAChD,OAAO,8CAA8C,CAAC;AACtD,OAAO,4CAA4C,CAAC;AACpD,OAAO,EACH,iBAAiB,EACjB,YAAY,EACZ,6BAA6B,EAC7B,2BAA2B,EAC3B,iCAAiC,EACjC,qBAAqB,EACrB,8BAA8B,GACjC,MAAM,6BAA6B,CAAC;AAGrC;;GAEG;AACH,MAAM,gCAAiC,SAAQ,eAAe;IAa1D;;OAEG;IACH;QACI,KAAK,EAAE,CAAC;QAhBL,QAAG,GAAG,KAAK,CAAC;QACZ,mBAAc,GAAG,IAAI,CAAC;QACtB,qBAAgB,GAAG,KAAK,CAAC;QACzB,cAAS,GAAG,KAAK,CAAC;QAClB,eAAU,GAAG,KAAK,CAAC;QACnB,eAAU,GAAG,KAAK,CAAC;QACnB,eAAU,GAAG,KAAK,CAAC;QACnB,eAAU,GAAG,KAAK,CAAC;QACnB,eAAU,GAAG,KAAK,CAAC;QACnB,cAAS,GAAG,CAAC,CAAC;QACd,iBAAY,GAAG,KAAK,CAAC;QAOxB,IAAI,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,OAAO,yBAA0B,SAAQ,YAAY;IACvD;;;;OAIG;IACH,YAAY,IAAY,EAAE,KAAa;QACnC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAevB;;WAEG;QACI,eAAU,GAAG,yBAAyB,CAAC,UAAU,CAAC;QACjD,kBAAa,GAAG,yBAAyB,CAAC,YAAY,CAAC;QAE/D,8CAA8C;QACtC,aAAQ,GAAG,KAAK,CAAC;QApBrB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IACjC,CAAC;IAqBD;;OAEG;IACH,IAAW,YAAY,CAAC,KAAc;QAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,IAAoB,uBAAuB;QACvC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;OAGG;IACa,gBAAgB;QAC5B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;OAGG;IACa,iBAAiB;QAC7B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACa,iBAAiB,CAAC,IAAkB,EAAE,OAAgB;QAClE,MAAM,YAAY,GAAG,IAAI,CAAC;QAE1B,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,OAAO,GAAqC,OAAO,CAAC,eAAe,CAAC;QAExE,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC3B,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAChC,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,WAAW,CAAC,mBAAmB,IAAI,WAAW,CAAC,4BAA4B,KAAK,YAAY,EAAE,CAAC;gBAC/F,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YAC3B,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,gCAAgC,EAAE,CAAC;QAC/E,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE9B,IAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,IAA6B,CAAC;QAE7C,QAAQ;QACR,qBAAqB,CACjB,IAAI,EACJ,KAAK,EACL,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,UAAU,EACf,KAAK,EACL,OAAO,EACP,SAAS,EACT,SAAS,EACT,SAAS,EACT,IAAI,CAAC,wBAAwB,CAChC,CAAC;QAEF,kDAAkD;QAClD,iCAAiC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAE1F,UAAU;QACV,2BAA2B,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAEzD,4BAA4B;QAC5B,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACxC,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC3C,CAAC;QAED,eAAe;QACf,MAAM,aAAa,GAAG,MAAM,CAAC,QAAqC,CAAC;QACnE,OAAO,CAAC,cAAc,CAAC,GAAG,aAAa,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,yBAAyB,CAAC,YAAY,CAAC;QAE5I,qBAAqB;QACrB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,CAAC,eAAe,EAAE,CAAC;YAC1B,KAAK,CAAC,mBAAmB,EAAE,CAAC;YAE5B,YAAY;YACZ,MAAM,OAAO,GAAG,CAAC,YAAY,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YAE1D,6BAA6B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAEhD,MAAM,QAAQ,GAAG;gBACb,OAAO;gBACP,MAAM;gBACN,YAAY;gBACZ,WAAW;gBACX,WAAW;gBACX,0BAA0B;gBAC1B,aAAa;gBACb,iBAAiB;gBACjB,OAAO;gBACP,aAAa;gBACb,YAAY;gBACZ,qBAAqB;aACxB,CAAC;YACF,MAAM,QAAQ,GAAG,CAAC,qBAAqB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;YAC7I,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAEzC,8BAA8B,CAAyB;gBACnD,aAAa,EAAE,QAAQ;gBACvB,mBAAmB,EAAE,cAAc;gBACnC,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,OAAO;aACnB,CAAC,CAAC;YAEH,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAE/B,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,YAAY,CACzC,mBAAmB,EACK;gBACpB,UAAU,EAAE,OAAO;gBACnB,aAAa,EAAE,QAAQ;gBACvB,mBAAmB,EAAE,cAAc;gBACnC,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,eAAe,EAAE,EAAE;gBACnB,cAAc,EAAE,IAAI,CAAC,eAAe;gBACpC,yBAAyB,EAAE,KAAK,IAAI,EAAE;oBAClC,IAAI,IAAI,CAAC,eAAe,gCAAwB,EAAE,CAAC;wBAC/C,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,8CAA8C,CAAC,EAAE,MAAM,CAAC,4CAA4C,CAAC,CAAC,CAAC,CAAC;oBACtI,CAAC;yBAAM,CAAC;wBACJ,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,0CAA0C,CAAC,EAAE,MAAM,CAAC,wCAAwC,CAAC,CAAC,CAAC,CAAC;oBAC9H,CAAC;gBACL,CAAC;aACJ,EACD,MAAM,CACT,CAAC;YACF,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YAC/C,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACxC,WAAW,CAAC,mBAAmB,GAAG,IAAI,CAAC;QACvC,WAAW,CAAC,4BAA4B,GAAG,YAAY,CAAC;QACxD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAEtB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,UAAU,CAAC,IAAU,EAAE,MAAc,EAAE,KAAY;QAC7D,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC;QAElC,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;QAC5C,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;QAE9C,MAAM,MAAM,GAAG,IAA6B,CAAC;QAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,QAAqC,CAAC;QAEhE,yCAAyC;QACzC,MAAM,YAAY,GAAG,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC;QAE/D,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,WAAW,GAAG,YAAY,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC;QAEpF,IAAI,KAAK,GAAG,IAAI,CAAC;QAEjB,IAAI,MAAM,EAAE,CAAC;YACT;;;;;;cAME;YACF,MAAM,CAAC,GAAG,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,sBAAsB,EAAE,CAAC;gBAClD,KAAK,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACJ,KAAK,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;YACpC,CAAC;QACL,CAAC;QAED,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,UAAU,CAAC,qBAAqB,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACrE,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;QAClI,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;QAEnD,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAC7B,MAAM,WAAW,GAAG,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;YAEzD,MAAM,CAAC,SAAS,CAAC,iBAAiB,EAAE,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;YAE3E,MAAM,CAAC,UAAU,CAAC,qBAAqB,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;YACrE,MAAM,CAAC,UAAU,CAAC,qBAAqB,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;YACrE,MAAM,CAAC,UAAU,CAAC,gBAAgB,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;YAC3D,MAAM,CAAC,UAAU,CAAC,eAAe,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;YAEzD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACjD,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7D,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IACD;;;;;OAKG;IACa,cAAc,CAAC,KAAa,EAAE,IAAU,EAAE,OAAgB;QACtE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE9B,MAAM,OAAO,GAAqC,OAAO,CAAC,eAAe,CAAC;QAC1E,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO;QACX,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO;QACX,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAE5B,iBAAiB;QACjB,IAAI,CAAC,oBAAoB,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACzD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAE7B,YAAY;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAE7E,IAAI,UAAU,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACtB,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAChC,yBAAyB,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YACtE,aAAa;YACb,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,8BAA8B,EAAE,CAAC;YACpE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QACpC,CAAC;QAED,MAAM;QACN,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAEvC,aAAa;QACb,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACa,KAAK,CAAC,IAAY;QAC9B,OAAO,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IACvG,CAAC;IAED;;;OAGG;IACa,SAAS;QACrB,MAAM,mBAAmB,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAC9C,mBAAmB,CAAC,UAAU,GAAG,mCAAmC,CAAC;QACrE,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,2BAA2B,CAAC;IACvC,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAU,KAAK,CAAC,MAAW,EAAE,KAAY,EAAE,OAAe;QACnE,OAAO,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,yBAAyB,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACtH,CAAC;;AArVD;;GAEG;AACW,oCAAU,GAAW,GAAG,AAAd,CAAe;AAEvC;;GAEG;AACW,sCAAY,GAAY,KAAK,AAAjB,CAAkB;AAgVhD,aAAa,CAAC,mCAAmC,EAAE,yBAAyB,CAAC,CAAC","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 \"core/Meshes\";\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 \"core/Cameras/camera\";\r\n\r\nimport \"../../Shaders/gaussianSplatting.fragment\";\r\nimport \"../../Shaders/gaussianSplatting.vertex\";\r\nimport \"../../ShadersWGSL/gaussianSplatting.fragment\";\r\nimport \"../../ShadersWGSL/gaussianSplatting.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 }\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 /**\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 const engine = scene.getEngine();\r\n const gsMesh = mesh as GaussianSplattingMesh;\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 const attribs = [VertexBuffer.PositionKind, \"splatIndex\"];\r\n\r\n PrepareAttributesForInstances(attribs, defines);\r\n\r\n const 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 const samplers = [\"covariancesATexture\", \"covariancesBTexture\", \"centersTexture\", \"colorsTexture\", \"shTexture0\", \"shTexture1\", \"shTexture2\"];\r\n const uniformBuffers = [\"Scene\", \"Mesh\"];\r\n\r\n PrepareUniformsAndSamplersList(<IEffectCreationOptions>{\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: defines,\r\n });\r\n\r\n AddClipPlaneUniforms(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: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: 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 * 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();\r\n const renderHeight = engine.getRenderHeight();\r\n\r\n const gsMesh = mesh as GaussianSplattingMesh;\r\n const gsMaterial = gsMesh.material as GaussianSplattingMaterial;\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 /**\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"]}
|
package/Materials/PBR/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export * from "./pbrBRDFConfiguration.js";
|
|
|
5
5
|
export * from "./pbrClearCoatConfiguration.js";
|
|
6
6
|
export * from "./pbrIridescenceConfiguration.js";
|
|
7
7
|
export * from "./pbrMaterial.js";
|
|
8
|
-
export * from "./
|
|
8
|
+
export * from "./openpbrMaterial.js";
|
|
9
9
|
export * from "./pbrMetallicRoughnessMaterial.js";
|
|
10
10
|
export * from "./pbrSpecularGlossinessMaterial.js";
|
|
11
11
|
export * from "./pbrSheenConfiguration.js";
|
package/Materials/PBR/index.js
CHANGED
|
@@ -5,7 +5,7 @@ export * from "./pbrBRDFConfiguration.js";
|
|
|
5
5
|
export * from "./pbrClearCoatConfiguration.js";
|
|
6
6
|
export * from "./pbrIridescenceConfiguration.js";
|
|
7
7
|
export * from "./pbrMaterial.js";
|
|
8
|
-
export * from "./
|
|
8
|
+
export * from "./openpbrMaterial.js";
|
|
9
9
|
export * from "./pbrMetallicRoughnessMaterial.js";
|
|
10
10
|
export * from "./pbrSpecularGlossinessMaterial.js";
|
|
11
11
|
export * from "./pbrSheenConfiguration.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/PBR/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAE7C,uBAAuB;AACvB,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC;AACnD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC","sourcesContent":["export * from \"./pbrAnisotropicConfiguration\";\r\nexport * from \"./pbrBaseMaterial\";\r\nexport * from \"./pbrBaseSimpleMaterial\";\r\nexport * from \"./pbrBRDFConfiguration\";\r\nexport * from \"./pbrClearCoatConfiguration\";\r\nexport * from \"./pbrIridescenceConfiguration\";\r\nexport * from \"./pbrMaterial\";\r\nexport * from \"./
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/PBR/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAE7C,uBAAuB;AACvB,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC;AACnD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC","sourcesContent":["export * from \"./pbrAnisotropicConfiguration\";\r\nexport * from \"./pbrBaseMaterial\";\r\nexport * from \"./pbrBaseSimpleMaterial\";\r\nexport * from \"./pbrBRDFConfiguration\";\r\nexport * from \"./pbrClearCoatConfiguration\";\r\nexport * from \"./pbrIridescenceConfiguration\";\r\nexport * from \"./pbrMaterial\";\r\nexport * from \"./openpbrMaterial\";\r\nexport * from \"./pbrMetallicRoughnessMaterial\";\r\nexport * from \"./pbrSpecularGlossinessMaterial\";\r\nexport * from \"./pbrSheenConfiguration\";\r\nexport * from \"./pbrSubSurfaceConfiguration\";\r\n\r\n// async-loaded shaders\r\nexport * from \"../../ShadersWGSL/pbr.vertex\";\r\nexport * from \"../../ShadersWGSL/pbr.fragment\";\r\nexport * from \"../../Shaders/pbr.vertex\";\r\nexport * from \"../../Shaders/pbr.fragment\";\r\nexport * from \"../../ShadersWGSL/openpbr.vertex\";\r\nexport * from \"../../ShadersWGSL/openpbr.fragment\";\r\nexport * from \"../../Shaders/openpbr.vertex\";\r\nexport * from \"../../Shaders/openpbr.fragment\";\r\n"]}
|
|
@@ -109,11 +109,22 @@ export declare class OpenPBRMaterialDefines extends OpenPBRMaterialDefines_base
|
|
|
109
109
|
* Tells the shader to apply anisotropy to the coat layer
|
|
110
110
|
*/
|
|
111
111
|
ANISOTROPIC_COAT: boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Number of samples to use for the fuzz IBL lighting calculations
|
|
114
|
+
*/
|
|
115
|
+
FUZZ_IBL_SAMPLES: number;
|
|
112
116
|
/**
|
|
113
117
|
* Tells the shader to enable the fuzz layer
|
|
114
118
|
*/
|
|
115
119
|
FUZZ: boolean;
|
|
120
|
+
/**
|
|
121
|
+
* Tells the shader to enable the thin film layer
|
|
122
|
+
*/
|
|
116
123
|
THIN_FILM: boolean;
|
|
124
|
+
/**
|
|
125
|
+
* Tells the shader to enable the legacy iridescence code
|
|
126
|
+
* Iridescence is the name of thin film interference in the PBR material.
|
|
127
|
+
*/
|
|
117
128
|
IRIDESCENCE: boolean;
|
|
118
129
|
REFLECTION: boolean;
|
|
119
130
|
REFLECTIONMAP_3D: boolean;
|
|
@@ -928,6 +939,12 @@ export declare class OpenPBRMaterial extends OpenPBRMaterialBase {
|
|
|
928
939
|
*/
|
|
929
940
|
get realTimeFilteringQuality(): number;
|
|
930
941
|
set realTimeFilteringQuality(n: number);
|
|
942
|
+
private _fuzzSampleNumber;
|
|
943
|
+
/**
|
|
944
|
+
* The number of samples used to compute the fuzz IBL lighting.
|
|
945
|
+
*/
|
|
946
|
+
get fuzzSampleNumber(): number;
|
|
947
|
+
set fuzzSampleNumber(n: number);
|
|
931
948
|
/**
|
|
932
949
|
* Checks if the real-time filtering quality has been set by the user.
|
|
933
950
|
*/
|