@onerjs/core 8.26.9 → 8.27.1
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/Buffers/buffer.d.ts +4 -3
- package/Buffers/buffer.js +4 -3
- package/Buffers/buffer.js.map +1 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js +2 -0
- package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/geospatialCameraMouseWheelInput.d.ts +18 -0
- package/Cameras/Inputs/geospatialCameraMouseWheelInput.js +21 -0
- package/Cameras/Inputs/geospatialCameraMouseWheelInput.js.map +1 -0
- package/Cameras/Inputs/geospatialCameraPointersInput.d.ts +45 -0
- package/Cameras/Inputs/geospatialCameraPointersInput.js +119 -0
- package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -0
- package/Cameras/Inputs/index.d.ts +2 -0
- package/Cameras/Inputs/index.js +2 -0
- package/Cameras/Inputs/index.js.map +1 -1
- package/Cameras/geospatialCamera.d.ts +89 -0
- package/Cameras/geospatialCamera.js +268 -0
- package/Cameras/geospatialCamera.js.map +1 -0
- package/Cameras/geospatialCameraInputsManager.d.ts +23 -0
- package/Cameras/geospatialCameraInputsManager.js +33 -0
- package/Cameras/geospatialCameraInputsManager.js.map +1 -0
- package/Cameras/index.d.ts +1 -0
- package/Cameras/index.js +1 -0
- package/Cameras/index.js.map +1 -1
- package/Engines/constants.d.ts +2 -0
- package/Engines/constants.js +2 -0
- package/Engines/constants.js.map +1 -1
- package/Events/pointerEvents.d.ts +4 -0
- package/Events/pointerEvents.js.map +1 -1
- package/Materials/PBR/openPbrMaterial.d.ts +3 -0
- package/Materials/PBR/openPbrMaterial.js +18 -8
- package/Materials/PBR/openPbrMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +3 -0
- package/Materials/PBR/pbrBaseMaterial.js +11 -2
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Meshes/geometry.js +26 -25
- package/Meshes/geometry.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +58 -0
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Shaders/geometry.fragment.js +14 -0
- package/Shaders/geometry.fragment.js.map +1 -1
- package/Shaders/geometry.vertex.js +20 -0
- package/Shaders/geometry.vertex.js.map +1 -1
- package/ShadersWGSL/geometry.fragment.js +14 -0
- package/ShadersWGSL/geometry.fragment.js.map +1 -1
- package/ShadersWGSL/geometry.vertex.js +20 -0
- package/ShadersWGSL/geometry.vertex.js.map +1 -1
- package/package.json +1 -1
|
@@ -559,6 +559,39 @@ export class GeometryBufferRenderer {
|
|
|
559
559
|
defines.push("#define REFLECTIVITYCOLOR");
|
|
560
560
|
}
|
|
561
561
|
}
|
|
562
|
+
else if (material.getClassName() === "OpenPBRMaterial") {
|
|
563
|
+
const pbrMaterial = material;
|
|
564
|
+
defines.push("#define METALLICWORKFLOW");
|
|
565
|
+
metallicWorkflow = true;
|
|
566
|
+
defines.push("#define METALLIC");
|
|
567
|
+
defines.push("#define ROUGHNESS");
|
|
568
|
+
if (pbrMaterial._useRoughnessFromMetallicTextureGreen && pbrMaterial.baseMetalnessTexture) {
|
|
569
|
+
defines.push("#define ORMTEXTURE");
|
|
570
|
+
defines.push(`#define REFLECTIVITY_UV${pbrMaterial.baseMetalnessTexture.coordinatesIndex + 1}`);
|
|
571
|
+
needUv = true;
|
|
572
|
+
}
|
|
573
|
+
else if (pbrMaterial.baseMetalnessTexture) {
|
|
574
|
+
defines.push("#define METALLIC_TEXTURE");
|
|
575
|
+
defines.push(`#define METALLIC_UV${pbrMaterial.baseMetalnessTexture.coordinatesIndex + 1}`);
|
|
576
|
+
needUv = true;
|
|
577
|
+
}
|
|
578
|
+
else if (pbrMaterial.specularRoughnessTexture) {
|
|
579
|
+
defines.push("#define ROUGHNESS_TEXTURE");
|
|
580
|
+
defines.push(`#define ROUGHNESS_UV${pbrMaterial.specularRoughnessTexture.coordinatesIndex + 1}`);
|
|
581
|
+
needUv = true;
|
|
582
|
+
}
|
|
583
|
+
if (pbrMaterial.baseColorTexture) {
|
|
584
|
+
defines.push("#define ALBEDOTEXTURE");
|
|
585
|
+
defines.push(`#define ALBEDO_UV${pbrMaterial.baseColorTexture.coordinatesIndex + 1}`);
|
|
586
|
+
if (pbrMaterial.baseColorTexture.gammaSpace) {
|
|
587
|
+
defines.push("#define GAMMAALBEDO");
|
|
588
|
+
}
|
|
589
|
+
needUv = true;
|
|
590
|
+
}
|
|
591
|
+
if (pbrMaterial.baseColor) {
|
|
592
|
+
defines.push("#define ALBEDOCOLOR");
|
|
593
|
+
}
|
|
594
|
+
}
|
|
562
595
|
}
|
|
563
596
|
if (needUv) {
|
|
564
597
|
defines.push("#define NEED_UV");
|
|
@@ -987,6 +1020,31 @@ export class GeometryBufferRenderer {
|
|
|
987
1020
|
effect.setColor3("reflectivityColor", material.specularColor);
|
|
988
1021
|
}
|
|
989
1022
|
}
|
|
1023
|
+
else if (material.getClassName() === "OpenPBRMaterial") {
|
|
1024
|
+
// if it is a OpenPBR material:
|
|
1025
|
+
const openpbrMaterial = material;
|
|
1026
|
+
if (openpbrMaterial._useRoughnessFromMetallicTextureGreen && openpbrMaterial.baseMetalnessTexture) {
|
|
1027
|
+
effect.setTexture("reflectivitySampler", openpbrMaterial.baseMetalnessTexture);
|
|
1028
|
+
effect.setMatrix("reflectivityMatrix", openpbrMaterial.baseMetalnessTexture.getTextureMatrix());
|
|
1029
|
+
}
|
|
1030
|
+
else if (openpbrMaterial.baseMetalnessTexture) {
|
|
1031
|
+
effect.setTexture("metallicSampler", openpbrMaterial.baseMetalnessTexture);
|
|
1032
|
+
effect.setMatrix("metallicMatrix", openpbrMaterial.baseMetalnessTexture.getTextureMatrix());
|
|
1033
|
+
}
|
|
1034
|
+
else if (openpbrMaterial.specularRoughnessTexture) {
|
|
1035
|
+
effect.setTexture("roughnessSampler", openpbrMaterial.specularRoughnessTexture);
|
|
1036
|
+
effect.setMatrix("roughnessMatrix", openpbrMaterial.specularRoughnessTexture.getTextureMatrix());
|
|
1037
|
+
}
|
|
1038
|
+
effect.setFloat("metallic", openpbrMaterial.baseMetalness);
|
|
1039
|
+
effect.setFloat("glossiness", 1.0 - openpbrMaterial.specularRoughness);
|
|
1040
|
+
if (openpbrMaterial.baseColorTexture !== null) {
|
|
1041
|
+
effect.setTexture("albedoSampler", openpbrMaterial.baseColorTexture);
|
|
1042
|
+
effect.setMatrix("albedoMatrix", openpbrMaterial.baseColorTexture.getTextureMatrix());
|
|
1043
|
+
}
|
|
1044
|
+
if (openpbrMaterial.baseColor !== null) {
|
|
1045
|
+
effect.setColor3("albedoColor", openpbrMaterial.baseColor);
|
|
1046
|
+
}
|
|
1047
|
+
}
|
|
990
1048
|
}
|
|
991
1049
|
// Clip plane
|
|
992
1050
|
BindClipPlane(effect, material, this._scene);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geometryBufferRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Rendering/geometryBufferRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Matrix } from \"../Maths/math.vector\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { SmartArray } from \"../Misc/smartArray\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport type { InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport { MultiRenderTarget } from \"../Materials/Textures/multiRenderTarget\";\r\nimport type { PrePassRenderer } from \"../Rendering/prePassRenderer\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport { _WarnImport } from \"../Misc/devTools\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Material } from \"../Materials/material\";\r\n\r\nimport \"../Shaders/geometry.fragment\";\r\nimport \"../Shaders/geometry.vertex\";\r\nimport { MaterialFlags } from \"../Materials/materialFlags\";\r\nimport { AddClipPlaneUniforms, BindClipPlane, PrepareStringDefinesForClipPlanes } from \"../Materials/clipPlaneMaterialHelper\";\r\nimport { BindMorphTargetParameters, BindSceneUniformBuffer, PrepareDefinesAndAttributesForMorphTargets, PushAttributesForInstances } from \"../Materials/materialHelper.functions\";\r\n\r\nimport \"../Engines/Extensions/engine.multiRender\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/** @internal */\r\ninterface ISavedTransformationMatrix {\r\n world: Matrix;\r\n viewProjection: Matrix;\r\n}\r\n\r\n/** list the uniforms used by the geometry renderer */\r\nconst Uniforms = [\r\n \"world\",\r\n \"mBones\",\r\n \"viewProjection\",\r\n \"diffuseMatrix\",\r\n \"view\",\r\n \"previousWorld\",\r\n \"previousViewProjection\",\r\n \"mPreviousBones\",\r\n \"bumpMatrix\",\r\n \"reflectivityMatrix\",\r\n \"albedoMatrix\",\r\n \"reflectivityColor\",\r\n \"albedoColor\",\r\n \"metallic\",\r\n \"glossiness\",\r\n \"vTangentSpaceParams\",\r\n \"vBumpInfos\",\r\n \"morphTargetInfluences\",\r\n \"morphTargetCount\",\r\n \"morphTargetTextureInfo\",\r\n \"morphTargetTextureIndices\",\r\n \"boneTextureWidth\",\r\n];\r\nAddClipPlaneUniforms(Uniforms);\r\n\r\n/**\r\n * This renderer is helpful to fill one of the render target with a geometry buffer.\r\n */\r\nexport class GeometryBufferRenderer {\r\n /**\r\n * Force all the standard materials to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n /**\r\n * Constant used to retrieve the depth texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.DEPTH_TEXTURE_INDEX)\r\n */\r\n public static readonly DEPTH_TEXTURE_TYPE = 0;\r\n /**\r\n * Constant used to retrieve the normal texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.NORMAL_TEXTURE_INDEX)\r\n */\r\n public static readonly NORMAL_TEXTURE_TYPE = 1;\r\n /**\r\n * Constant used to retrieve the position texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.POSITION_TEXTURE_INDEX)\r\n */\r\n public static readonly POSITION_TEXTURE_TYPE = 2;\r\n /**\r\n * Constant used to retrieve the velocity texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.VELOCITY_TEXTURE_INDEX)\r\n */\r\n public static readonly VELOCITY_TEXTURE_TYPE = 3;\r\n /**\r\n * Constant used to retrieve the reflectivity texture index in the G-Buffer textures array\r\n * using the getIndex(GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE)\r\n */\r\n public static readonly REFLECTIVITY_TEXTURE_TYPE = 4;\r\n\r\n /**\r\n * Constant used to retrieve the screen-space depth texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE)\r\n */\r\n public static readonly SCREENSPACE_DEPTH_TEXTURE_TYPE = 5;\r\n\r\n /**\r\n * Constant used to retrieve the linear velocity texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE)\r\n */\r\n public static readonly VELOCITY_LINEAR_TEXTURE_TYPE = 6;\r\n\r\n /**\r\n * Dictionary used to store the previous transformation matrices of each rendered mesh\r\n * in order to compute objects velocities when enableVelocity is set to \"true\"\r\n * @internal\r\n */\r\n public _previousTransformationMatrices: { [index: number]: ISavedTransformationMatrix } = {};\r\n /**\r\n * Dictionary used to store the previous bones transformation matrices of each rendered mesh\r\n * in order to compute objects velocities when enableVelocity is set to \"true\"\r\n * @internal\r\n */\r\n public _previousBonesTransformationMatrices: { [index: number]: Float32Array } = {};\r\n /**\r\n * Array used to store the ignored skinned meshes while computing velocity map (typically used by the motion blur post-process).\r\n * Avoids computing bones velocities and computes only mesh's velocity itself (position, rotation, scaling).\r\n */\r\n public excludedSkinnedMeshesFromVelocity: AbstractMesh[] = [];\r\n\r\n /** Gets or sets a boolean indicating if transparent meshes should be rendered */\r\n public renderTransparentMeshes = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if normals should be generated in world space (default: false, meaning normals are generated in view space)\r\n */\r\n public generateNormalsInWorldSpace = false;\r\n\r\n private _normalsAreUnsigned = false;\r\n\r\n /**\r\n * Gets a boolean indicating if normals are encoded in the [0,1] range in the render target. If true, you should do `normal = normal_rt * 2.0 - 1.0` to get the right normal\r\n */\r\n public get normalsAreUnsigned() {\r\n return this._normalsAreUnsigned;\r\n }\r\n\r\n private _scene: Scene;\r\n private _resizeObserver: Nullable<Observer<AbstractEngine>> = null;\r\n private _multiRenderTarget: MultiRenderTarget;\r\n private _textureTypesAndFormats: { [key: number]: { textureType: number; textureFormat: number } };\r\n private _ratioOrDimensions: number | { width: number; height: number };\r\n private _enableDepth: boolean = true;\r\n private _enableNormal: boolean = true;\r\n private _enablePosition: boolean = false;\r\n private _enableVelocity: boolean = false;\r\n private _enableVelocityLinear: boolean = false;\r\n private _enableReflectivity: boolean = false;\r\n private _enableScreenspaceDepth: boolean = false;\r\n private _depthFormat: number;\r\n private _clearColor = new Color4(0, 0, 0, 0);\r\n private _clearDepthColor = new Color4(0, 0, 0, 1); // sets an invalid value by default - depth in the depth texture is view.z, so 0 is not possible because view.z can't be less than camera.minZ\r\n\r\n private _positionIndex: number = -1;\r\n private _velocityIndex: number = -1;\r\n private _velocityLinearIndex: number = -1;\r\n private _reflectivityIndex: number = -1;\r\n private _depthIndex: number = -1;\r\n private _normalIndex: number = -1;\r\n private _screenspaceDepthIndex: number = -1;\r\n\r\n private _linkedWithPrePass: boolean = false;\r\n private _prePassRenderer: PrePassRenderer;\r\n private _attachmentsFromPrePass: number[];\r\n private _useUbo: boolean;\r\n\r\n protected _cachedDefines: string;\r\n\r\n /**\r\n * @internal\r\n * Sets up internal structures to share outputs with PrePassRenderer\r\n * This method should only be called by the PrePassRenderer itself\r\n */\r\n public _linkPrePassRenderer(prePassRenderer: PrePassRenderer) {\r\n this._linkedWithPrePass = true;\r\n this._prePassRenderer = prePassRenderer;\r\n\r\n if (this._multiRenderTarget) {\r\n // prevents clearing of the RT since it's done by prepass\r\n this._multiRenderTarget.onClearObservable.clear();\r\n this._multiRenderTarget.onClearObservable.add(() => {\r\n // pass\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Separates internal structures from PrePassRenderer so the geometry buffer can now operate by itself.\r\n * This method should only be called by the PrePassRenderer itself\r\n */\r\n public _unlinkPrePassRenderer() {\r\n this._linkedWithPrePass = false;\r\n this._createRenderTargets();\r\n }\r\n\r\n /**\r\n * @internal\r\n * Resets the geometry buffer layout\r\n */\r\n public _resetLayout() {\r\n this._enableDepth = true;\r\n this._enableNormal = true;\r\n this._enablePosition = false;\r\n this._enableReflectivity = false;\r\n this._enableVelocity = false;\r\n this._enableVelocityLinear = false;\r\n this._enableScreenspaceDepth = false;\r\n this._attachmentsFromPrePass = [];\r\n }\r\n\r\n /**\r\n * @internal\r\n * Replaces a texture in the geometry buffer renderer\r\n * Useful when linking textures of the prepass renderer\r\n */\r\n public _forceTextureType(geometryBufferType: number, index: number) {\r\n if (geometryBufferType === GeometryBufferRenderer.POSITION_TEXTURE_TYPE) {\r\n this._positionIndex = index;\r\n this._enablePosition = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE) {\r\n this._velocityIndex = index;\r\n this._enableVelocity = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE) {\r\n this._velocityLinearIndex = index;\r\n this._enableVelocityLinear = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE) {\r\n this._reflectivityIndex = index;\r\n this._enableReflectivity = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.DEPTH_TEXTURE_TYPE) {\r\n this._depthIndex = index;\r\n this._enableDepth = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.NORMAL_TEXTURE_TYPE) {\r\n this._normalIndex = index;\r\n this._enableNormal = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE) {\r\n this._screenspaceDepthIndex = index;\r\n this._enableScreenspaceDepth = true;\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Sets texture attachments\r\n * Useful when linking textures of the prepass renderer\r\n */\r\n public _setAttachments(attachments: number[]) {\r\n this._attachmentsFromPrePass = attachments;\r\n }\r\n\r\n /**\r\n * @internal\r\n * Replaces the first texture which is hard coded as a depth texture in the geometry buffer\r\n * Useful when linking textures of the prepass renderer\r\n */\r\n public _linkInternalTexture(internalTexture: InternalTexture) {\r\n this._multiRenderTarget.setInternalTexture(internalTexture, 0, false);\r\n }\r\n\r\n /**\r\n * Gets the render list (meshes to be rendered) used in the G buffer.\r\n */\r\n public get renderList() {\r\n return this._multiRenderTarget.renderList;\r\n }\r\n\r\n /**\r\n * Set the render list (meshes to be rendered) used in the G buffer.\r\n */\r\n public set renderList(meshes: Nullable<AbstractMesh[]>) {\r\n this._multiRenderTarget.renderList = meshes;\r\n }\r\n\r\n /**\r\n * Gets whether or not G buffer are supported by the running hardware.\r\n * This requires draw buffer supports\r\n */\r\n public get isSupported(): boolean {\r\n return this._multiRenderTarget.isSupported;\r\n }\r\n\r\n /**\r\n * Returns the index of the given texture type in the G-Buffer textures array\r\n * @param textureType The texture type constant. For example GeometryBufferRenderer.POSITION_TEXTURE_INDEX\r\n * @returns the index of the given texture type in the G-Buffer textures array\r\n */\r\n public getTextureIndex(textureType: number): number {\r\n switch (textureType) {\r\n case GeometryBufferRenderer.POSITION_TEXTURE_TYPE:\r\n return this._positionIndex;\r\n case GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE:\r\n return this._velocityIndex;\r\n case GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE:\r\n return this._velocityLinearIndex;\r\n case GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE:\r\n return this._reflectivityIndex;\r\n case GeometryBufferRenderer.DEPTH_TEXTURE_TYPE:\r\n return this._depthIndex;\r\n case GeometryBufferRenderer.NORMAL_TEXTURE_TYPE:\r\n return this._normalIndex;\r\n case GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE:\r\n return this._screenspaceDepthIndex;\r\n default:\r\n return -1;\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if object's depths are enabled for the G buffer.\r\n */\r\n public get enableDepth(): boolean {\r\n return this._enableDepth;\r\n }\r\n\r\n /**\r\n * Sets whether or not object's depths are enabled for the G buffer.\r\n */\r\n public set enableDepth(enable: boolean) {\r\n this._enableDepth = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if object's normals are enabled for the G buffer.\r\n */\r\n public get enableNormal(): boolean {\r\n return this._enableNormal;\r\n }\r\n\r\n /**\r\n * Sets whether or not object's normals are enabled for the G buffer.\r\n */\r\n public set enableNormal(enable: boolean) {\r\n this._enableNormal = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if objects positions are enabled for the G buffer.\r\n */\r\n public get enablePosition(): boolean {\r\n return this._enablePosition;\r\n }\r\n\r\n /**\r\n * Sets whether or not objects positions are enabled for the G buffer.\r\n */\r\n public set enablePosition(enable: boolean) {\r\n this._enablePosition = enable;\r\n\r\n // PrePass handles index and texture links\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if objects velocities are enabled for the G buffer.\r\n */\r\n public get enableVelocity(): boolean {\r\n return this._enableVelocity;\r\n }\r\n\r\n /**\r\n * Sets whether or not objects velocities are enabled for the G buffer.\r\n */\r\n public set enableVelocity(enable: boolean) {\r\n this._enableVelocity = enable;\r\n\r\n if (!enable) {\r\n this._previousTransformationMatrices = {};\r\n }\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n\r\n this._scene.needsPreviousWorldMatrices = enable;\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if object's linear velocities are enabled for the G buffer.\r\n */\r\n public get enableVelocityLinear(): boolean {\r\n return this._enableVelocityLinear;\r\n }\r\n\r\n /**\r\n * Sets whether or not object's linear velocities are enabled for the G buffer.\r\n */\r\n public set enableVelocityLinear(enable: boolean) {\r\n this._enableVelocityLinear = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if objects reflectivity are enabled in the G buffer.\r\n */\r\n public get enableReflectivity(): boolean {\r\n return this._enableReflectivity;\r\n }\r\n\r\n /**\r\n * Sets whether or not objects reflectivity are enabled for the G buffer.\r\n * For Metallic-Roughness workflow with ORM texture, we assume that ORM texture is defined according to the default layout:\r\n * pbr.useRoughnessFromMetallicTextureAlpha = false;\r\n * pbr.useRoughnessFromMetallicTextureGreen = true;\r\n * pbr.useMetallnessFromMetallicTextureBlue = true;\r\n */\r\n public set enableReflectivity(enable: boolean) {\r\n this._enableReflectivity = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * Sets whether or not objects screenspace depth are enabled for the G buffer.\r\n */\r\n public get enableScreenspaceDepth(): boolean {\r\n return this._enableScreenspaceDepth;\r\n }\r\n\r\n public set enableScreenspaceDepth(enable: boolean) {\r\n this._enableScreenspaceDepth = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * If set to true (default: false), the depth texture will be cleared with the depth value corresponding to the far plane (1 in normal mode, 0 in reverse depth buffer mode)\r\n * If set to false, the depth texture is always cleared with 0.\r\n */\r\n public useSpecificClearForDepthTexture = false;\r\n\r\n /**\r\n * Gets the scene associated with the buffer.\r\n */\r\n public get scene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /**\r\n * Gets the ratio used by the buffer during its creation.\r\n * How big is the buffer related to the main canvas.\r\n */\r\n public get ratio(): number {\r\n return typeof this._ratioOrDimensions === \"object\" ? 1 : this._ratioOrDimensions;\r\n }\r\n\r\n /** Shader language used by the material */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in this material.\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static _SceneComponentInitialization: (scene: Scene) => void = (_) => {\r\n throw _WarnImport(\"GeometryBufferRendererSceneComponent\");\r\n };\r\n\r\n /**\r\n * Creates a new G Buffer for the scene\r\n * @param scene The scene the buffer belongs to\r\n * @param ratioOrDimensions How big is the buffer related to the main canvas (default: 1). You can also directly pass a width and height for the generated textures\r\n * @param depthFormat Format of the depth texture (default: Constants.TEXTUREFORMAT_DEPTH16)\r\n * @param textureTypesAndFormats The types and formats of textures to create as render targets. If not provided, all textures will be RGBA and float or half float, depending on the engine capabilities.\r\n */\r\n constructor(\r\n scene: Scene,\r\n ratioOrDimensions: number | { width: number; height: number } = 1,\r\n depthFormat = Constants.TEXTUREFORMAT_DEPTH16,\r\n textureTypesAndFormats?: { [key: number]: { textureType: number; textureFormat: number } }\r\n ) {\r\n this._scene = scene;\r\n this._ratioOrDimensions = ratioOrDimensions;\r\n this._useUbo = scene.getEngine().supportsUniformBuffers;\r\n this._depthFormat = depthFormat;\r\n this._textureTypesAndFormats = textureTypesAndFormats || {};\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync();\r\n\r\n GeometryBufferRenderer._SceneComponentInitialization(this._scene);\r\n\r\n // Render target\r\n this._createRenderTargets();\r\n }\r\n\r\n private _shadersLoaded = false;\r\n\r\n private async _initShaderSourceAsync() {\r\n const engine = this._scene.getEngine();\r\n\r\n if (engine.isWebGPU && !GeometryBufferRenderer.ForceGLSL) {\r\n this._shaderLanguage = ShaderLanguage.WGSL;\r\n\r\n await Promise.all([import(\"../ShadersWGSL/geometry.vertex\"), import(\"../ShadersWGSL/geometry.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../Shaders/geometry.vertex\"), import(\"../Shaders/geometry.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n }\r\n\r\n /**\r\n * Checks whether everything is ready to render a submesh to the G buffer.\r\n * @param subMesh the submesh to check readiness for\r\n * @param useInstances is the mesh drawn using instance or not\r\n * @returns true if ready otherwise false\r\n */\r\n public isReady(subMesh: SubMesh, useInstances: boolean): boolean {\r\n if (!this._shadersLoaded) {\r\n return false;\r\n }\r\n\r\n const material = <any>subMesh.getMaterial();\r\n\r\n if (material && material.disableDepthWrite) {\r\n return false;\r\n }\r\n\r\n const defines = [];\r\n const attribs = [VertexBuffer.PositionKind, VertexBuffer.NormalKind];\r\n const mesh = subMesh.getMesh();\r\n\r\n let uv1 = false;\r\n let uv2 = false;\r\n const color = false;\r\n\r\n if (material) {\r\n let needUv = false;\r\n // Alpha test\r\n if (material.needAlphaTestingForMesh(mesh) && material.getAlphaTestTexture()) {\r\n defines.push(\"#define ALPHATEST\");\r\n defines.push(`#define ALPHATEST_UV${material.getAlphaTestTexture().coordinatesIndex + 1}`);\r\n needUv = true;\r\n }\r\n\r\n // Normal map texture\r\n if ((material.bumpTexture || material.normalTexture || material.geometryNormalTexture) && MaterialFlags.BumpTextureEnabled) {\r\n const texture = material.bumpTexture || material.normalTexture || material.geometryNormalTexture;\r\n defines.push(\"#define BUMP\");\r\n defines.push(`#define BUMP_UV${texture.coordinatesIndex + 1}`);\r\n needUv = true;\r\n }\r\n\r\n if (this._enableReflectivity) {\r\n let metallicWorkflow = false;\r\n // for PBR materials: cf. https://doc.babylonjs.com/features/featuresDeepDive/materials/using/masterPBR\r\n if (material.getClassName() === \"PBRMetallicRoughnessMaterial\") {\r\n // if it is a PBR material in MetallicRoughness Mode:\r\n if (material.metallicRoughnessTexture) {\r\n defines.push(\"#define ORMTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.metallicRoughnessTexture.coordinatesIndex + 1}`);\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n needUv = true;\r\n metallicWorkflow = true;\r\n }\r\n // null or undefined\r\n if (material.metallic != null) {\r\n defines.push(\"#define METALLIC\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n // null or undefined\r\n if (material.roughness != null) {\r\n defines.push(\"#define ROUGHNESS\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n if (metallicWorkflow) {\r\n if (material.baseTexture) {\r\n defines.push(\"#define ALBEDOTEXTURE\");\r\n defines.push(`#define ALBEDO_UV${material.baseTexture.coordinatesIndex + 1}`);\r\n if (material.baseTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAALBEDO\");\r\n }\r\n needUv = true;\r\n }\r\n if (material.baseColor) {\r\n defines.push(\"#define ALBEDOCOLOR\");\r\n }\r\n }\r\n } else if (material.getClassName() === \"PBRSpecularGlossinessMaterial\") {\r\n // if it is a PBR material in Specular/Glossiness Mode:\r\n if (material.specularGlossinessTexture) {\r\n defines.push(\"#define SPECULARGLOSSINESSTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.specularGlossinessTexture.coordinatesIndex + 1}`);\r\n needUv = true;\r\n if (material.specularGlossinessTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAREFLECTIVITYTEXTURE\");\r\n }\r\n } else {\r\n if (material.specularColor) {\r\n defines.push(\"#define REFLECTIVITYCOLOR\");\r\n }\r\n }\r\n // null or undefined\r\n if (material.glossiness != null) {\r\n defines.push(\"#define GLOSSINESS\");\r\n }\r\n } else if (material.getClassName() === \"PBRMaterial\") {\r\n // if it is the bigger PBRMaterial\r\n if (material.metallicTexture) {\r\n defines.push(\"#define ORMTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.metallicTexture.coordinatesIndex + 1}`);\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n needUv = true;\r\n metallicWorkflow = true;\r\n }\r\n // null or undefined\r\n if (material.metallic != null) {\r\n defines.push(\"#define METALLIC\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n\r\n // null or undefined\r\n if (material.roughness != null) {\r\n defines.push(\"#define ROUGHNESS\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n\r\n if (metallicWorkflow) {\r\n if (material.albedoTexture) {\r\n defines.push(\"#define ALBEDOTEXTURE\");\r\n defines.push(`#define ALBEDO_UV${material.albedoTexture.coordinatesIndex + 1}`);\r\n if (material.albedoTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAALBEDO\");\r\n }\r\n needUv = true;\r\n }\r\n if (material.albedoColor) {\r\n defines.push(\"#define ALBEDOCOLOR\");\r\n }\r\n } else {\r\n // SpecularGlossiness Model\r\n if (material.reflectivityTexture) {\r\n defines.push(\"#define SPECULARGLOSSINESSTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.reflectivityTexture.coordinatesIndex + 1}`);\r\n if (material.reflectivityTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAREFLECTIVITYTEXTURE\");\r\n }\r\n needUv = true;\r\n } else if (material.reflectivityColor) {\r\n defines.push(\"#define REFLECTIVITYCOLOR\");\r\n }\r\n // null or undefined\r\n if (material.microSurface != null) {\r\n defines.push(\"#define GLOSSINESS\");\r\n }\r\n }\r\n } else if (material.getClassName() === \"StandardMaterial\") {\r\n // if StandardMaterial:\r\n if (material.specularTexture) {\r\n defines.push(\"#define REFLECTIVITYTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.specularTexture.coordinatesIndex + 1}`);\r\n if (material.specularTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAREFLECTIVITYTEXTURE\");\r\n }\r\n needUv = true;\r\n }\r\n if (material.specularColor) {\r\n defines.push(\"#define REFLECTIVITYCOLOR\");\r\n }\r\n }\r\n }\r\n\r\n if (needUv) {\r\n defines.push(\"#define NEED_UV\");\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\r\n attribs.push(VertexBuffer.UVKind);\r\n defines.push(\"#define UV1\");\r\n uv1 = true;\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n defines.push(\"#define UV2\");\r\n uv2 = true;\r\n }\r\n }\r\n }\r\n\r\n // Buffers\r\n if (this._enableDepth) {\r\n defines.push(\"#define DEPTH\");\r\n defines.push(\"#define DEPTH_INDEX \" + this._depthIndex);\r\n }\r\n\r\n if (this._enableNormal) {\r\n defines.push(\"#define NORMAL\");\r\n defines.push(\"#define NORMAL_INDEX \" + this._normalIndex);\r\n }\r\n\r\n if (this._enablePosition) {\r\n defines.push(\"#define POSITION\");\r\n defines.push(\"#define POSITION_INDEX \" + this._positionIndex);\r\n }\r\n\r\n if (this._enableVelocity) {\r\n defines.push(\"#define VELOCITY\");\r\n defines.push(\"#define VELOCITY_INDEX \" + this._velocityIndex);\r\n if (this.excludedSkinnedMeshesFromVelocity.indexOf(mesh) === -1) {\r\n defines.push(\"#define BONES_VELOCITY_ENABLED\");\r\n }\r\n }\r\n\r\n if (this._enableVelocityLinear) {\r\n defines.push(\"#define VELOCITY_LINEAR\");\r\n defines.push(\"#define VELOCITY_LINEAR_INDEX \" + this._velocityLinearIndex);\r\n if (this.excludedSkinnedMeshesFromVelocity.indexOf(mesh) === -1) {\r\n defines.push(\"#define BONES_VELOCITY_ENABLED\");\r\n }\r\n }\r\n\r\n if (this._enableReflectivity) {\r\n defines.push(\"#define REFLECTIVITY\");\r\n defines.push(\"#define REFLECTIVITY_INDEX \" + this._reflectivityIndex);\r\n }\r\n\r\n if (this._enableScreenspaceDepth) {\r\n if (this._screenspaceDepthIndex !== -1) {\r\n defines.push(\"#define SCREENSPACE_DEPTH_INDEX \" + this._screenspaceDepthIndex);\r\n defines.push(\"#define SCREENSPACE_DEPTH\");\r\n }\r\n }\r\n\r\n if (this.generateNormalsInWorldSpace) {\r\n defines.push(\"#define NORMAL_WORLDSPACE\");\r\n }\r\n\r\n if (this._normalsAreUnsigned) {\r\n defines.push(\"#define ENCODE_NORMAL\");\r\n }\r\n\r\n // Bones\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n attribs.push(VertexBuffer.MatricesIndicesKind);\r\n attribs.push(VertexBuffer.MatricesWeightsKind);\r\n if (mesh.numBoneInfluencers > 4) {\r\n attribs.push(VertexBuffer.MatricesIndicesExtraKind);\r\n attribs.push(VertexBuffer.MatricesWeightsExtraKind);\r\n }\r\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\r\n defines.push(\"#define BONETEXTURE \" + mesh.skeleton.isUsingTextureForMatrices);\r\n defines.push(\"#define BonesPerMesh \" + (mesh.skeleton.bones.length + 1));\r\n } else {\r\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\r\n defines.push(\"#define BONETEXTURE false\");\r\n defines.push(\"#define BonesPerMesh 0\");\r\n }\r\n\r\n // Morph targets\r\n const numMorphInfluencers = mesh.morphTargetManager\r\n ? PrepareDefinesAndAttributesForMorphTargets(\r\n mesh.morphTargetManager,\r\n defines,\r\n attribs,\r\n mesh,\r\n true, // usePositionMorph\r\n true, // useNormalMorph\r\n false, // useTangentMorph\r\n uv1, // useUVMorph\r\n uv2, // useUV2Morph\r\n color // useColorMorph\r\n )\r\n : 0;\r\n\r\n // Instances\r\n if (useInstances) {\r\n defines.push(\"#define INSTANCES\");\r\n PushAttributesForInstances(attribs, this._enableVelocity || this._enableVelocityLinear);\r\n if (subMesh.getRenderingMesh().hasThinInstances) {\r\n defines.push(\"#define THIN_INSTANCES\");\r\n }\r\n }\r\n\r\n // Setup textures count\r\n if (this._linkedWithPrePass) {\r\n defines.push(\"#define SCENE_MRT_COUNT \" + this._attachmentsFromPrePass.length);\r\n } else {\r\n defines.push(\"#define SCENE_MRT_COUNT \" + this._multiRenderTarget.textures.length);\r\n }\r\n\r\n PrepareStringDefinesForClipPlanes(material, this._scene, defines);\r\n\r\n // Get correct effect\r\n const engine = this._scene.getEngine();\r\n const drawWrapper = subMesh._getDrawWrapper(undefined, true)!;\r\n const cachedDefines = drawWrapper.defines;\r\n const join = defines.join(\"\\n\");\r\n if (cachedDefines !== join) {\r\n drawWrapper.setEffect(\r\n engine.createEffect(\r\n \"geometry\",\r\n {\r\n attributes: attribs,\r\n uniformsNames: Uniforms,\r\n samplers: [\"diffuseSampler\", \"bumpSampler\", \"reflectivitySampler\", \"albedoSampler\", \"morphTargets\", \"boneSampler\"],\r\n defines: join,\r\n onCompiled: null,\r\n fallbacks: null,\r\n onError: null,\r\n uniformBuffersNames: [\"Scene\"],\r\n indexParameters: { buffersCount: this._multiRenderTarget.textures.length - 1, maxSimultaneousMorphTargets: numMorphInfluencers },\r\n shaderLanguage: this.shaderLanguage,\r\n },\r\n engine\r\n ),\r\n join\r\n );\r\n }\r\n\r\n return drawWrapper.effect!.isReady();\r\n }\r\n\r\n /**\r\n * Gets the current underlying G Buffer.\r\n * @returns the buffer\r\n */\r\n public getGBuffer(): MultiRenderTarget {\r\n return this._multiRenderTarget;\r\n }\r\n\r\n /**\r\n * Gets the number of samples used to render the buffer (anti aliasing).\r\n */\r\n public get samples(): number {\r\n return this._multiRenderTarget.samples;\r\n }\r\n\r\n /**\r\n * Sets the number of samples used to render the buffer (anti aliasing).\r\n */\r\n public set samples(value: number) {\r\n this._multiRenderTarget.samples = value;\r\n }\r\n\r\n /**\r\n * Disposes the renderer and frees up associated resources.\r\n */\r\n public dispose(): void {\r\n if (this._resizeObserver) {\r\n const engine = this._scene.getEngine();\r\n engine.onResizeObservable.remove(this._resizeObserver);\r\n this._resizeObserver = null;\r\n }\r\n this.getGBuffer().dispose();\r\n }\r\n\r\n private _assignRenderTargetIndices(): [number, string[], Array<{ textureType: number; textureFormat: number } | undefined>] {\r\n const textureNames: string[] = [];\r\n const textureTypesAndFormats: Array<{ textureType: number; textureFormat: number } | undefined> = [];\r\n let count = 0;\r\n\r\n if (this._enableDepth) {\r\n this._depthIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Depth\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.DEPTH_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableNormal) {\r\n this._normalIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Normal\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.NORMAL_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enablePosition) {\r\n this._positionIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Position\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.POSITION_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableVelocity) {\r\n this._velocityIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Velocity\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableVelocityLinear) {\r\n this._velocityLinearIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_VelocityLinear\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableReflectivity) {\r\n this._reflectivityIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Reflectivity\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableScreenspaceDepth) {\r\n this._screenspaceDepthIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_ScreenspaceDepth\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE]);\r\n }\r\n\r\n return [count, textureNames, textureTypesAndFormats];\r\n }\r\n\r\n protected _createRenderTargets(): void {\r\n const engine = this._scene.getEngine();\r\n const [count, textureNames, textureTypesAndFormat] = this._assignRenderTargetIndices();\r\n\r\n let type = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n if (engine._caps.textureFloat && engine._caps.textureFloatLinearFiltering) {\r\n type = Constants.TEXTURETYPE_FLOAT;\r\n } else if (engine._caps.textureHalfFloat && engine._caps.textureHalfFloatLinearFiltering) {\r\n type = Constants.TEXTURETYPE_HALF_FLOAT;\r\n }\r\n\r\n const dimensions =\r\n (this._ratioOrDimensions as any).width !== undefined\r\n ? (this._ratioOrDimensions as { width: number; height: number })\r\n : { width: engine.getRenderWidth() * (this._ratioOrDimensions as number), height: engine.getRenderHeight() * (this._ratioOrDimensions as number) };\r\n\r\n const textureTypes: number[] = [];\r\n const textureFormats: number[] = [];\r\n\r\n for (const typeAndFormat of textureTypesAndFormat) {\r\n if (typeAndFormat) {\r\n textureTypes.push(typeAndFormat.textureType);\r\n textureFormats.push(typeAndFormat.textureFormat);\r\n } else {\r\n textureTypes.push(type);\r\n textureFormats.push(Constants.TEXTUREFORMAT_RGBA);\r\n }\r\n }\r\n\r\n this._normalsAreUnsigned =\r\n textureTypes[GeometryBufferRenderer.NORMAL_TEXTURE_TYPE] === Constants.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV ||\r\n textureTypes[GeometryBufferRenderer.NORMAL_TEXTURE_TYPE] === Constants.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV;\r\n\r\n this._multiRenderTarget = new MultiRenderTarget(\r\n \"gBuffer\",\r\n dimensions,\r\n count,\r\n this._scene,\r\n { generateMipMaps: false, generateDepthTexture: true, types: textureTypes, formats: textureFormats, depthTextureFormat: this._depthFormat },\r\n textureNames.concat(\"gBuffer_DepthBuffer\")\r\n );\r\n if (!this.isSupported) {\r\n return;\r\n }\r\n this._multiRenderTarget.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n this._multiRenderTarget.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n this._multiRenderTarget.refreshRate = 1;\r\n this._multiRenderTarget.renderParticles = false;\r\n this._multiRenderTarget.renderList = null;\r\n\r\n // Depth is always the first texture in the geometry buffer renderer!\r\n const layoutAttachmentsAll = [true];\r\n const layoutAttachmentsAllButDepth = [false];\r\n const layoutAttachmentsDepthOnly = [true];\r\n\r\n for (let i = 1; i < count; ++i) {\r\n layoutAttachmentsAll.push(true);\r\n layoutAttachmentsDepthOnly.push(false);\r\n layoutAttachmentsAllButDepth.push(true);\r\n }\r\n\r\n const attachmentsAll = engine.buildTextureLayout(layoutAttachmentsAll);\r\n const attachmentsAllButDepth = engine.buildTextureLayout(layoutAttachmentsAllButDepth);\r\n const attachmentsDepthOnly = engine.buildTextureLayout(layoutAttachmentsDepthOnly);\r\n\r\n this._multiRenderTarget.onClearObservable.add((engine) => {\r\n engine.bindAttachments(this.useSpecificClearForDepthTexture ? attachmentsAllButDepth : attachmentsAll);\r\n engine.clear(this._clearColor, true, true, true);\r\n if (this.useSpecificClearForDepthTexture) {\r\n engine.bindAttachments(attachmentsDepthOnly);\r\n engine.clear(this._clearDepthColor, true, true, true);\r\n }\r\n engine.bindAttachments(attachmentsAll);\r\n });\r\n\r\n this._resizeObserver = engine.onResizeObservable.add(() => {\r\n if (this._multiRenderTarget) {\r\n const dimensions =\r\n (this._ratioOrDimensions as any).width !== undefined\r\n ? (this._ratioOrDimensions as { width: number; height: number })\r\n : { width: engine.getRenderWidth() * (this._ratioOrDimensions as number), height: engine.getRenderHeight() * (this._ratioOrDimensions as number) };\r\n this._multiRenderTarget.resize(dimensions);\r\n }\r\n });\r\n\r\n // Custom render function\r\n const renderSubMesh = (subMesh: SubMesh): void => {\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n const effectiveMesh = subMesh.getEffectiveMesh();\r\n const scene = this._scene;\r\n const engine = scene.getEngine();\r\n const material = <any>subMesh.getMaterial();\r\n\r\n if (!material) {\r\n return;\r\n }\r\n\r\n effectiveMesh._internalAbstractMeshDataInfo._isActiveIntermediate = false;\r\n\r\n // Velocity\r\n if ((this._enableVelocity || this._enableVelocityLinear) && !this._previousTransformationMatrices[effectiveMesh.uniqueId]) {\r\n this._previousTransformationMatrices[effectiveMesh.uniqueId] = {\r\n world: Matrix.Identity(),\r\n viewProjection: scene.getTransformMatrix(),\r\n };\r\n\r\n if (renderingMesh.skeleton) {\r\n const bonesTransformations = renderingMesh.skeleton.getTransformMatrices(renderingMesh);\r\n this._previousBonesTransformationMatrices[renderingMesh.uniqueId] = this._copyBonesTransformationMatrices(\r\n bonesTransformations,\r\n new Float32Array(bonesTransformations.length)\r\n );\r\n }\r\n }\r\n\r\n // Managing instances\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n\r\n if (batch.mustReturn) {\r\n return;\r\n }\r\n\r\n const hardwareInstancedRendering = engine.getCaps().instancedArrays && (batch.visibleInstances[subMesh._id] !== null || renderingMesh.hasThinInstances);\r\n const world = effectiveMesh.getWorldMatrix();\r\n\r\n if (this.isReady(subMesh, hardwareInstancedRendering)) {\r\n const drawWrapper = subMesh._getDrawWrapper();\r\n\r\n if (!drawWrapper) {\r\n return;\r\n }\r\n\r\n const effect = drawWrapper.effect!;\r\n\r\n engine.enableEffect(drawWrapper);\r\n if (!hardwareInstancedRendering) {\r\n renderingMesh._bind(subMesh, effect, material.fillMode);\r\n }\r\n\r\n if (!this._useUbo) {\r\n effect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n effect.setMatrix(\"view\", scene.getViewMatrix());\r\n } else {\r\n BindSceneUniformBuffer(effect, this._scene.getSceneUniformBuffer());\r\n this._scene.finalizeSceneUbo();\r\n }\r\n\r\n let sideOrientation: Nullable<number>;\r\n const instanceDataStorage = renderingMesh._instanceDataStorage;\r\n\r\n if (!instanceDataStorage.isFrozen && (material.backFaceCulling || material.sideOrientation !== null)) {\r\n const mainDeterminant = effectiveMesh._getWorldMatrixDeterminant();\r\n sideOrientation = material._getEffectiveOrientation(renderingMesh);\r\n\r\n if (mainDeterminant < 0) {\r\n sideOrientation = sideOrientation === Material.ClockWiseSideOrientation ? Material.CounterClockWiseSideOrientation : Material.ClockWiseSideOrientation;\r\n }\r\n } else {\r\n sideOrientation = renderingMesh._effectiveSideOrientation;\r\n }\r\n\r\n material._preBind(drawWrapper, sideOrientation);\r\n\r\n // Alpha test\r\n if (material.needAlphaTestingForMesh(effectiveMesh)) {\r\n const alphaTexture = material.getAlphaTestTexture();\r\n if (alphaTexture) {\r\n effect.setTexture(\"diffuseSampler\", alphaTexture);\r\n effect.setMatrix(\"diffuseMatrix\", alphaTexture.getTextureMatrix());\r\n }\r\n }\r\n\r\n // Bump\r\n if (\r\n (material.bumpTexture || material.normalTexture || material.geometryNormalTexture) &&\r\n scene.getEngine().getCaps().standardDerivatives &&\r\n MaterialFlags.BumpTextureEnabled\r\n ) {\r\n const texture = material.bumpTexture || material.normalTexture || material.geometryNormalTexture;\r\n effect.setFloat3(\"vBumpInfos\", texture.coordinatesIndex, 1.0 / texture.level, material.parallaxScaleBias);\r\n effect.setMatrix(\"bumpMatrix\", texture.getTextureMatrix());\r\n effect.setTexture(\"bumpSampler\", texture);\r\n effect.setFloat2(\"vTangentSpaceParams\", material.invertNormalMapX ? -1.0 : 1.0, material.invertNormalMapY ? -1.0 : 1.0);\r\n }\r\n\r\n // Reflectivity\r\n if (this._enableReflectivity) {\r\n // for PBR materials: cf. https://doc.babylonjs.com/features/featuresDeepDive/materials/using/masterPBR\r\n if (material.getClassName() === \"PBRMetallicRoughnessMaterial\") {\r\n // if it is a PBR material in MetallicRoughness Mode:\r\n if (material.metallicRoughnessTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.metallicRoughnessTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.metallicRoughnessTexture.getTextureMatrix());\r\n }\r\n if (material.metallic !== null) {\r\n effect.setFloat(\"metallic\", material.metallic);\r\n }\r\n if (material.roughness !== null) {\r\n effect.setFloat(\"glossiness\", 1.0 - material.roughness);\r\n }\r\n if (material.baseTexture !== null) {\r\n effect.setTexture(\"albedoSampler\", material.baseTexture);\r\n effect.setMatrix(\"albedoMatrix\", material.baseTexture.getTextureMatrix());\r\n }\r\n if (material.baseColor !== null) {\r\n effect.setColor3(\"albedoColor\", material.baseColor);\r\n }\r\n } else if (material.getClassName() === \"PBRSpecularGlossinessMaterial\") {\r\n // if it is a PBR material in Specular/Glossiness Mode:\r\n if (material.specularGlossinessTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.specularGlossinessTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.specularGlossinessTexture.getTextureMatrix());\r\n } else {\r\n if (material.specularColor !== null) {\r\n effect.setColor3(\"reflectivityColor\", material.specularColor);\r\n }\r\n }\r\n if (material.glossiness !== null) {\r\n effect.setFloat(\"glossiness\", material.glossiness);\r\n }\r\n } else if (material.getClassName() === \"PBRMaterial\") {\r\n // if it is the bigger PBRMaterial\r\n if (material.metallicTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.metallicTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.metallicTexture.getTextureMatrix());\r\n }\r\n if (material.metallic !== null) {\r\n effect.setFloat(\"metallic\", material.metallic);\r\n }\r\n\r\n if (material.roughness !== null) {\r\n effect.setFloat(\"glossiness\", 1.0 - material.roughness);\r\n }\r\n\r\n if (material.roughness !== null || material.metallic !== null || material.metallicTexture !== null) {\r\n // MetallicRoughness Model\r\n if (material.albedoTexture !== null) {\r\n effect.setTexture(\"albedoSampler\", material.albedoTexture);\r\n effect.setMatrix(\"albedoMatrix\", material.albedoTexture.getTextureMatrix());\r\n }\r\n if (material.albedoColor !== null) {\r\n effect.setColor3(\"albedoColor\", material.albedoColor);\r\n }\r\n } else {\r\n // SpecularGlossiness Model\r\n if (material.reflectivityTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.reflectivityTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.reflectivityTexture.getTextureMatrix());\r\n } else if (material.reflectivityColor !== null) {\r\n effect.setColor3(\"reflectivityColor\", material.reflectivityColor);\r\n }\r\n if (material.microSurface !== null) {\r\n effect.setFloat(\"glossiness\", material.microSurface);\r\n }\r\n }\r\n } else if (material.getClassName() === \"StandardMaterial\") {\r\n // if StandardMaterial:\r\n if (material.specularTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.specularTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.specularTexture.getTextureMatrix());\r\n }\r\n if (material.specularColor !== null) {\r\n effect.setColor3(\"reflectivityColor\", material.specularColor);\r\n }\r\n }\r\n }\r\n\r\n // Clip plane\r\n BindClipPlane(effect, material, this._scene);\r\n\r\n // Bones\r\n if (renderingMesh.useBones && renderingMesh.computeBonesUsingShaders && renderingMesh.skeleton) {\r\n const skeleton = renderingMesh.skeleton;\r\n\r\n if (skeleton.isUsingTextureForMatrices && effect.getUniformIndex(\"boneTextureWidth\") > -1) {\r\n const boneTexture = skeleton.getTransformMatrixTexture(renderingMesh);\r\n effect.setTexture(\"boneSampler\", boneTexture);\r\n effect.setFloat(\"boneTextureWidth\", 4.0 * (skeleton.bones.length + 1));\r\n } else {\r\n effect.setMatrices(\"mBones\", renderingMesh.skeleton.getTransformMatrices(renderingMesh));\r\n }\r\n\r\n if (this._enableVelocity || this._enableVelocityLinear) {\r\n effect.setMatrices(\"mPreviousBones\", this._previousBonesTransformationMatrices[renderingMesh.uniqueId]);\r\n }\r\n }\r\n\r\n // Morph targets\r\n BindMorphTargetParameters(renderingMesh, effect);\r\n if (renderingMesh.morphTargetManager && renderingMesh.morphTargetManager.isUsingTextureForTargets) {\r\n renderingMesh.morphTargetManager._bind(effect);\r\n }\r\n\r\n // Velocity\r\n if (this._enableVelocity || this._enableVelocityLinear) {\r\n effect.setMatrix(\"previousWorld\", this._previousTransformationMatrices[effectiveMesh.uniqueId].world);\r\n effect.setMatrix(\"previousViewProjection\", this._previousTransformationMatrices[effectiveMesh.uniqueId].viewProjection);\r\n }\r\n\r\n if (hardwareInstancedRendering && renderingMesh.hasThinInstances) {\r\n effect.setMatrix(\"world\", world);\r\n }\r\n\r\n // Draw\r\n renderingMesh._processRendering(effectiveMesh, subMesh, effect, material.fillMode, batch, hardwareInstancedRendering, (isInstance, w) => {\r\n if (!isInstance) {\r\n effect.setMatrix(\"world\", w);\r\n }\r\n });\r\n }\r\n\r\n // Velocity\r\n if (this._enableVelocity || this._enableVelocityLinear) {\r\n this._previousTransformationMatrices[effectiveMesh.uniqueId].world = world.clone();\r\n this._previousTransformationMatrices[effectiveMesh.uniqueId].viewProjection = this._scene.getTransformMatrix().clone();\r\n if (renderingMesh.skeleton) {\r\n this._copyBonesTransformationMatrices(\r\n renderingMesh.skeleton.getTransformMatrices(renderingMesh),\r\n this._previousBonesTransformationMatrices[effectiveMesh.uniqueId]\r\n );\r\n }\r\n }\r\n };\r\n\r\n this._multiRenderTarget.customIsReadyFunction = (mesh: AbstractMesh, refreshRate: number, preWarm?: boolean) => {\r\n if ((preWarm || refreshRate === 0) && mesh.subMeshes) {\r\n for (let i = 0; i < mesh.subMeshes.length; ++i) {\r\n const subMesh = mesh.subMeshes[i];\r\n const material = subMesh.getMaterial();\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n\r\n if (!material) {\r\n continue;\r\n }\r\n\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n const hardwareInstancedRendering = engine.getCaps().instancedArrays && (batch.visibleInstances[subMesh._id] !== null || renderingMesh.hasThinInstances);\r\n\r\n if (!this.isReady(subMesh, hardwareInstancedRendering)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n this._multiRenderTarget.customRenderFunction = (\r\n opaqueSubMeshes: SmartArray<SubMesh>,\r\n alphaTestSubMeshes: SmartArray<SubMesh>,\r\n transparentSubMeshes: SmartArray<SubMesh>,\r\n depthOnlySubMeshes: SmartArray<SubMesh>\r\n ): void => {\r\n let index;\r\n\r\n if (this._linkedWithPrePass) {\r\n if (!this._prePassRenderer.enabled) {\r\n return;\r\n }\r\n this._scene.getEngine().bindAttachments(this._attachmentsFromPrePass);\r\n }\r\n\r\n if (depthOnlySubMeshes.length) {\r\n engine.setColorWrite(false);\r\n for (index = 0; index < depthOnlySubMeshes.length; index++) {\r\n renderSubMesh(depthOnlySubMeshes.data[index]);\r\n }\r\n engine.setColorWrite(true);\r\n }\r\n\r\n for (index = 0; index < opaqueSubMeshes.length; index++) {\r\n renderSubMesh(opaqueSubMeshes.data[index]);\r\n }\r\n\r\n engine.setDepthWrite(false);\r\n for (index = 0; index < alphaTestSubMeshes.length; index++) {\r\n renderSubMesh(alphaTestSubMeshes.data[index]);\r\n }\r\n\r\n if (this.renderTransparentMeshes) {\r\n for (index = 0; index < transparentSubMeshes.length; index++) {\r\n renderSubMesh(transparentSubMeshes.data[index]);\r\n }\r\n }\r\n engine.setDepthWrite(true);\r\n };\r\n }\r\n\r\n // Copies the bones transformation matrices into the target array and returns the target's reference\r\n private _copyBonesTransformationMatrices(source: Float32Array, target: Float32Array): Float32Array {\r\n for (let i = 0; i < source.length; i++) {\r\n target[i] = source[i];\r\n }\r\n\r\n return target;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"geometryBufferRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Rendering/geometryBufferRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Matrix } from \"../Maths/math.vector\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { SmartArray } from \"../Misc/smartArray\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport type { InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport { MultiRenderTarget } from \"../Materials/Textures/multiRenderTarget\";\r\nimport type { PrePassRenderer } from \"../Rendering/prePassRenderer\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport { _WarnImport } from \"../Misc/devTools\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Material } from \"../Materials/material\";\r\n\r\nimport \"../Shaders/geometry.fragment\";\r\nimport \"../Shaders/geometry.vertex\";\r\nimport { MaterialFlags } from \"../Materials/materialFlags\";\r\nimport { AddClipPlaneUniforms, BindClipPlane, PrepareStringDefinesForClipPlanes } from \"../Materials/clipPlaneMaterialHelper\";\r\nimport { BindMorphTargetParameters, BindSceneUniformBuffer, PrepareDefinesAndAttributesForMorphTargets, PushAttributesForInstances } from \"../Materials/materialHelper.functions\";\r\n\r\nimport \"../Engines/Extensions/engine.multiRender\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport type { OpenPBRMaterial } from \"../Materials/PBR/openPbrMaterial\";\r\n\r\n/** @internal */\r\ninterface ISavedTransformationMatrix {\r\n world: Matrix;\r\n viewProjection: Matrix;\r\n}\r\n\r\n/** list the uniforms used by the geometry renderer */\r\nconst Uniforms = [\r\n \"world\",\r\n \"mBones\",\r\n \"viewProjection\",\r\n \"diffuseMatrix\",\r\n \"view\",\r\n \"previousWorld\",\r\n \"previousViewProjection\",\r\n \"mPreviousBones\",\r\n \"bumpMatrix\",\r\n \"reflectivityMatrix\",\r\n \"albedoMatrix\",\r\n \"reflectivityColor\",\r\n \"albedoColor\",\r\n \"metallic\",\r\n \"glossiness\",\r\n \"vTangentSpaceParams\",\r\n \"vBumpInfos\",\r\n \"morphTargetInfluences\",\r\n \"morphTargetCount\",\r\n \"morphTargetTextureInfo\",\r\n \"morphTargetTextureIndices\",\r\n \"boneTextureWidth\",\r\n];\r\nAddClipPlaneUniforms(Uniforms);\r\n\r\n/**\r\n * This renderer is helpful to fill one of the render target with a geometry buffer.\r\n */\r\nexport class GeometryBufferRenderer {\r\n /**\r\n * Force all the standard materials to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n /**\r\n * Constant used to retrieve the depth texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.DEPTH_TEXTURE_INDEX)\r\n */\r\n public static readonly DEPTH_TEXTURE_TYPE = 0;\r\n /**\r\n * Constant used to retrieve the normal texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.NORMAL_TEXTURE_INDEX)\r\n */\r\n public static readonly NORMAL_TEXTURE_TYPE = 1;\r\n /**\r\n * Constant used to retrieve the position texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.POSITION_TEXTURE_INDEX)\r\n */\r\n public static readonly POSITION_TEXTURE_TYPE = 2;\r\n /**\r\n * Constant used to retrieve the velocity texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.VELOCITY_TEXTURE_INDEX)\r\n */\r\n public static readonly VELOCITY_TEXTURE_TYPE = 3;\r\n /**\r\n * Constant used to retrieve the reflectivity texture index in the G-Buffer textures array\r\n * using the getIndex(GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE)\r\n */\r\n public static readonly REFLECTIVITY_TEXTURE_TYPE = 4;\r\n\r\n /**\r\n * Constant used to retrieve the screen-space depth texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE)\r\n */\r\n public static readonly SCREENSPACE_DEPTH_TEXTURE_TYPE = 5;\r\n\r\n /**\r\n * Constant used to retrieve the linear velocity texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE)\r\n */\r\n public static readonly VELOCITY_LINEAR_TEXTURE_TYPE = 6;\r\n\r\n /**\r\n * Dictionary used to store the previous transformation matrices of each rendered mesh\r\n * in order to compute objects velocities when enableVelocity is set to \"true\"\r\n * @internal\r\n */\r\n public _previousTransformationMatrices: { [index: number]: ISavedTransformationMatrix } = {};\r\n /**\r\n * Dictionary used to store the previous bones transformation matrices of each rendered mesh\r\n * in order to compute objects velocities when enableVelocity is set to \"true\"\r\n * @internal\r\n */\r\n public _previousBonesTransformationMatrices: { [index: number]: Float32Array } = {};\r\n /**\r\n * Array used to store the ignored skinned meshes while computing velocity map (typically used by the motion blur post-process).\r\n * Avoids computing bones velocities and computes only mesh's velocity itself (position, rotation, scaling).\r\n */\r\n public excludedSkinnedMeshesFromVelocity: AbstractMesh[] = [];\r\n\r\n /** Gets or sets a boolean indicating if transparent meshes should be rendered */\r\n public renderTransparentMeshes = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if normals should be generated in world space (default: false, meaning normals are generated in view space)\r\n */\r\n public generateNormalsInWorldSpace = false;\r\n\r\n private _normalsAreUnsigned = false;\r\n\r\n /**\r\n * Gets a boolean indicating if normals are encoded in the [0,1] range in the render target. If true, you should do `normal = normal_rt * 2.0 - 1.0` to get the right normal\r\n */\r\n public get normalsAreUnsigned() {\r\n return this._normalsAreUnsigned;\r\n }\r\n\r\n private _scene: Scene;\r\n private _resizeObserver: Nullable<Observer<AbstractEngine>> = null;\r\n private _multiRenderTarget: MultiRenderTarget;\r\n private _textureTypesAndFormats: { [key: number]: { textureType: number; textureFormat: number } };\r\n private _ratioOrDimensions: number | { width: number; height: number };\r\n private _enableDepth: boolean = true;\r\n private _enableNormal: boolean = true;\r\n private _enablePosition: boolean = false;\r\n private _enableVelocity: boolean = false;\r\n private _enableVelocityLinear: boolean = false;\r\n private _enableReflectivity: boolean = false;\r\n private _enableScreenspaceDepth: boolean = false;\r\n private _depthFormat: number;\r\n private _clearColor = new Color4(0, 0, 0, 0);\r\n private _clearDepthColor = new Color4(0, 0, 0, 1); // sets an invalid value by default - depth in the depth texture is view.z, so 0 is not possible because view.z can't be less than camera.minZ\r\n\r\n private _positionIndex: number = -1;\r\n private _velocityIndex: number = -1;\r\n private _velocityLinearIndex: number = -1;\r\n private _reflectivityIndex: number = -1;\r\n private _depthIndex: number = -1;\r\n private _normalIndex: number = -1;\r\n private _screenspaceDepthIndex: number = -1;\r\n\r\n private _linkedWithPrePass: boolean = false;\r\n private _prePassRenderer: PrePassRenderer;\r\n private _attachmentsFromPrePass: number[];\r\n private _useUbo: boolean;\r\n\r\n protected _cachedDefines: string;\r\n\r\n /**\r\n * @internal\r\n * Sets up internal structures to share outputs with PrePassRenderer\r\n * This method should only be called by the PrePassRenderer itself\r\n */\r\n public _linkPrePassRenderer(prePassRenderer: PrePassRenderer) {\r\n this._linkedWithPrePass = true;\r\n this._prePassRenderer = prePassRenderer;\r\n\r\n if (this._multiRenderTarget) {\r\n // prevents clearing of the RT since it's done by prepass\r\n this._multiRenderTarget.onClearObservable.clear();\r\n this._multiRenderTarget.onClearObservable.add(() => {\r\n // pass\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Separates internal structures from PrePassRenderer so the geometry buffer can now operate by itself.\r\n * This method should only be called by the PrePassRenderer itself\r\n */\r\n public _unlinkPrePassRenderer() {\r\n this._linkedWithPrePass = false;\r\n this._createRenderTargets();\r\n }\r\n\r\n /**\r\n * @internal\r\n * Resets the geometry buffer layout\r\n */\r\n public _resetLayout() {\r\n this._enableDepth = true;\r\n this._enableNormal = true;\r\n this._enablePosition = false;\r\n this._enableReflectivity = false;\r\n this._enableVelocity = false;\r\n this._enableVelocityLinear = false;\r\n this._enableScreenspaceDepth = false;\r\n this._attachmentsFromPrePass = [];\r\n }\r\n\r\n /**\r\n * @internal\r\n * Replaces a texture in the geometry buffer renderer\r\n * Useful when linking textures of the prepass renderer\r\n */\r\n public _forceTextureType(geometryBufferType: number, index: number) {\r\n if (geometryBufferType === GeometryBufferRenderer.POSITION_TEXTURE_TYPE) {\r\n this._positionIndex = index;\r\n this._enablePosition = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE) {\r\n this._velocityIndex = index;\r\n this._enableVelocity = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE) {\r\n this._velocityLinearIndex = index;\r\n this._enableVelocityLinear = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE) {\r\n this._reflectivityIndex = index;\r\n this._enableReflectivity = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.DEPTH_TEXTURE_TYPE) {\r\n this._depthIndex = index;\r\n this._enableDepth = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.NORMAL_TEXTURE_TYPE) {\r\n this._normalIndex = index;\r\n this._enableNormal = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE) {\r\n this._screenspaceDepthIndex = index;\r\n this._enableScreenspaceDepth = true;\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Sets texture attachments\r\n * Useful when linking textures of the prepass renderer\r\n */\r\n public _setAttachments(attachments: number[]) {\r\n this._attachmentsFromPrePass = attachments;\r\n }\r\n\r\n /**\r\n * @internal\r\n * Replaces the first texture which is hard coded as a depth texture in the geometry buffer\r\n * Useful when linking textures of the prepass renderer\r\n */\r\n public _linkInternalTexture(internalTexture: InternalTexture) {\r\n this._multiRenderTarget.setInternalTexture(internalTexture, 0, false);\r\n }\r\n\r\n /**\r\n * Gets the render list (meshes to be rendered) used in the G buffer.\r\n */\r\n public get renderList() {\r\n return this._multiRenderTarget.renderList;\r\n }\r\n\r\n /**\r\n * Set the render list (meshes to be rendered) used in the G buffer.\r\n */\r\n public set renderList(meshes: Nullable<AbstractMesh[]>) {\r\n this._multiRenderTarget.renderList = meshes;\r\n }\r\n\r\n /**\r\n * Gets whether or not G buffer are supported by the running hardware.\r\n * This requires draw buffer supports\r\n */\r\n public get isSupported(): boolean {\r\n return this._multiRenderTarget.isSupported;\r\n }\r\n\r\n /**\r\n * Returns the index of the given texture type in the G-Buffer textures array\r\n * @param textureType The texture type constant. For example GeometryBufferRenderer.POSITION_TEXTURE_INDEX\r\n * @returns the index of the given texture type in the G-Buffer textures array\r\n */\r\n public getTextureIndex(textureType: number): number {\r\n switch (textureType) {\r\n case GeometryBufferRenderer.POSITION_TEXTURE_TYPE:\r\n return this._positionIndex;\r\n case GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE:\r\n return this._velocityIndex;\r\n case GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE:\r\n return this._velocityLinearIndex;\r\n case GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE:\r\n return this._reflectivityIndex;\r\n case GeometryBufferRenderer.DEPTH_TEXTURE_TYPE:\r\n return this._depthIndex;\r\n case GeometryBufferRenderer.NORMAL_TEXTURE_TYPE:\r\n return this._normalIndex;\r\n case GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE:\r\n return this._screenspaceDepthIndex;\r\n default:\r\n return -1;\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if object's depths are enabled for the G buffer.\r\n */\r\n public get enableDepth(): boolean {\r\n return this._enableDepth;\r\n }\r\n\r\n /**\r\n * Sets whether or not object's depths are enabled for the G buffer.\r\n */\r\n public set enableDepth(enable: boolean) {\r\n this._enableDepth = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if object's normals are enabled for the G buffer.\r\n */\r\n public get enableNormal(): boolean {\r\n return this._enableNormal;\r\n }\r\n\r\n /**\r\n * Sets whether or not object's normals are enabled for the G buffer.\r\n */\r\n public set enableNormal(enable: boolean) {\r\n this._enableNormal = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if objects positions are enabled for the G buffer.\r\n */\r\n public get enablePosition(): boolean {\r\n return this._enablePosition;\r\n }\r\n\r\n /**\r\n * Sets whether or not objects positions are enabled for the G buffer.\r\n */\r\n public set enablePosition(enable: boolean) {\r\n this._enablePosition = enable;\r\n\r\n // PrePass handles index and texture links\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if objects velocities are enabled for the G buffer.\r\n */\r\n public get enableVelocity(): boolean {\r\n return this._enableVelocity;\r\n }\r\n\r\n /**\r\n * Sets whether or not objects velocities are enabled for the G buffer.\r\n */\r\n public set enableVelocity(enable: boolean) {\r\n this._enableVelocity = enable;\r\n\r\n if (!enable) {\r\n this._previousTransformationMatrices = {};\r\n }\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n\r\n this._scene.needsPreviousWorldMatrices = enable;\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if object's linear velocities are enabled for the G buffer.\r\n */\r\n public get enableVelocityLinear(): boolean {\r\n return this._enableVelocityLinear;\r\n }\r\n\r\n /**\r\n * Sets whether or not object's linear velocities are enabled for the G buffer.\r\n */\r\n public set enableVelocityLinear(enable: boolean) {\r\n this._enableVelocityLinear = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if objects reflectivity are enabled in the G buffer.\r\n */\r\n public get enableReflectivity(): boolean {\r\n return this._enableReflectivity;\r\n }\r\n\r\n /**\r\n * Sets whether or not objects reflectivity are enabled for the G buffer.\r\n * For Metallic-Roughness workflow with ORM texture, we assume that ORM texture is defined according to the default layout:\r\n * pbr.useRoughnessFromMetallicTextureAlpha = false;\r\n * pbr.useRoughnessFromMetallicTextureGreen = true;\r\n * pbr.useMetallnessFromMetallicTextureBlue = true;\r\n */\r\n public set enableReflectivity(enable: boolean) {\r\n this._enableReflectivity = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * Sets whether or not objects screenspace depth are enabled for the G buffer.\r\n */\r\n public get enableScreenspaceDepth(): boolean {\r\n return this._enableScreenspaceDepth;\r\n }\r\n\r\n public set enableScreenspaceDepth(enable: boolean) {\r\n this._enableScreenspaceDepth = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * If set to true (default: false), the depth texture will be cleared with the depth value corresponding to the far plane (1 in normal mode, 0 in reverse depth buffer mode)\r\n * If set to false, the depth texture is always cleared with 0.\r\n */\r\n public useSpecificClearForDepthTexture = false;\r\n\r\n /**\r\n * Gets the scene associated with the buffer.\r\n */\r\n public get scene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /**\r\n * Gets the ratio used by the buffer during its creation.\r\n * How big is the buffer related to the main canvas.\r\n */\r\n public get ratio(): number {\r\n return typeof this._ratioOrDimensions === \"object\" ? 1 : this._ratioOrDimensions;\r\n }\r\n\r\n /** Shader language used by the material */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in this material.\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static _SceneComponentInitialization: (scene: Scene) => void = (_) => {\r\n throw _WarnImport(\"GeometryBufferRendererSceneComponent\");\r\n };\r\n\r\n /**\r\n * Creates a new G Buffer for the scene\r\n * @param scene The scene the buffer belongs to\r\n * @param ratioOrDimensions How big is the buffer related to the main canvas (default: 1). You can also directly pass a width and height for the generated textures\r\n * @param depthFormat Format of the depth texture (default: Constants.TEXTUREFORMAT_DEPTH16)\r\n * @param textureTypesAndFormats The types and formats of textures to create as render targets. If not provided, all textures will be RGBA and float or half float, depending on the engine capabilities.\r\n */\r\n constructor(\r\n scene: Scene,\r\n ratioOrDimensions: number | { width: number; height: number } = 1,\r\n depthFormat = Constants.TEXTUREFORMAT_DEPTH16,\r\n textureTypesAndFormats?: { [key: number]: { textureType: number; textureFormat: number } }\r\n ) {\r\n this._scene = scene;\r\n this._ratioOrDimensions = ratioOrDimensions;\r\n this._useUbo = scene.getEngine().supportsUniformBuffers;\r\n this._depthFormat = depthFormat;\r\n this._textureTypesAndFormats = textureTypesAndFormats || {};\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync();\r\n\r\n GeometryBufferRenderer._SceneComponentInitialization(this._scene);\r\n\r\n // Render target\r\n this._createRenderTargets();\r\n }\r\n\r\n private _shadersLoaded = false;\r\n\r\n private async _initShaderSourceAsync() {\r\n const engine = this._scene.getEngine();\r\n\r\n if (engine.isWebGPU && !GeometryBufferRenderer.ForceGLSL) {\r\n this._shaderLanguage = ShaderLanguage.WGSL;\r\n\r\n await Promise.all([import(\"../ShadersWGSL/geometry.vertex\"), import(\"../ShadersWGSL/geometry.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../Shaders/geometry.vertex\"), import(\"../Shaders/geometry.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n }\r\n\r\n /**\r\n * Checks whether everything is ready to render a submesh to the G buffer.\r\n * @param subMesh the submesh to check readiness for\r\n * @param useInstances is the mesh drawn using instance or not\r\n * @returns true if ready otherwise false\r\n */\r\n public isReady(subMesh: SubMesh, useInstances: boolean): boolean {\r\n if (!this._shadersLoaded) {\r\n return false;\r\n }\r\n\r\n const material = <any>subMesh.getMaterial();\r\n\r\n if (material && material.disableDepthWrite) {\r\n return false;\r\n }\r\n\r\n const defines = [];\r\n const attribs = [VertexBuffer.PositionKind, VertexBuffer.NormalKind];\r\n const mesh = subMesh.getMesh();\r\n\r\n let uv1 = false;\r\n let uv2 = false;\r\n const color = false;\r\n\r\n if (material) {\r\n let needUv = false;\r\n // Alpha test\r\n if (material.needAlphaTestingForMesh(mesh) && material.getAlphaTestTexture()) {\r\n defines.push(\"#define ALPHATEST\");\r\n defines.push(`#define ALPHATEST_UV${material.getAlphaTestTexture().coordinatesIndex + 1}`);\r\n needUv = true;\r\n }\r\n\r\n // Normal map texture\r\n if ((material.bumpTexture || material.normalTexture || material.geometryNormalTexture) && MaterialFlags.BumpTextureEnabled) {\r\n const texture = material.bumpTexture || material.normalTexture || material.geometryNormalTexture;\r\n defines.push(\"#define BUMP\");\r\n defines.push(`#define BUMP_UV${texture.coordinatesIndex + 1}`);\r\n needUv = true;\r\n }\r\n\r\n if (this._enableReflectivity) {\r\n let metallicWorkflow = false;\r\n // for PBR materials: cf. https://doc.babylonjs.com/features/featuresDeepDive/materials/using/masterPBR\r\n if (material.getClassName() === \"PBRMetallicRoughnessMaterial\") {\r\n // if it is a PBR material in MetallicRoughness Mode:\r\n if (material.metallicRoughnessTexture) {\r\n defines.push(\"#define ORMTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.metallicRoughnessTexture.coordinatesIndex + 1}`);\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n needUv = true;\r\n metallicWorkflow = true;\r\n }\r\n // null or undefined\r\n if (material.metallic != null) {\r\n defines.push(\"#define METALLIC\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n // null or undefined\r\n if (material.roughness != null) {\r\n defines.push(\"#define ROUGHNESS\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n if (metallicWorkflow) {\r\n if (material.baseTexture) {\r\n defines.push(\"#define ALBEDOTEXTURE\");\r\n defines.push(`#define ALBEDO_UV${material.baseTexture.coordinatesIndex + 1}`);\r\n if (material.baseTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAALBEDO\");\r\n }\r\n needUv = true;\r\n }\r\n if (material.baseColor) {\r\n defines.push(\"#define ALBEDOCOLOR\");\r\n }\r\n }\r\n } else if (material.getClassName() === \"PBRSpecularGlossinessMaterial\") {\r\n // if it is a PBR material in Specular/Glossiness Mode:\r\n if (material.specularGlossinessTexture) {\r\n defines.push(\"#define SPECULARGLOSSINESSTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.specularGlossinessTexture.coordinatesIndex + 1}`);\r\n needUv = true;\r\n if (material.specularGlossinessTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAREFLECTIVITYTEXTURE\");\r\n }\r\n } else {\r\n if (material.specularColor) {\r\n defines.push(\"#define REFLECTIVITYCOLOR\");\r\n }\r\n }\r\n // null or undefined\r\n if (material.glossiness != null) {\r\n defines.push(\"#define GLOSSINESS\");\r\n }\r\n } else if (material.getClassName() === \"PBRMaterial\") {\r\n // if it is the bigger PBRMaterial\r\n if (material.metallicTexture) {\r\n defines.push(\"#define ORMTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.metallicTexture.coordinatesIndex + 1}`);\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n needUv = true;\r\n metallicWorkflow = true;\r\n }\r\n // null or undefined\r\n if (material.metallic != null) {\r\n defines.push(\"#define METALLIC\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n\r\n // null or undefined\r\n if (material.roughness != null) {\r\n defines.push(\"#define ROUGHNESS\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n\r\n if (metallicWorkflow) {\r\n if (material.albedoTexture) {\r\n defines.push(\"#define ALBEDOTEXTURE\");\r\n defines.push(`#define ALBEDO_UV${material.albedoTexture.coordinatesIndex + 1}`);\r\n if (material.albedoTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAALBEDO\");\r\n }\r\n needUv = true;\r\n }\r\n if (material.albedoColor) {\r\n defines.push(\"#define ALBEDOCOLOR\");\r\n }\r\n } else {\r\n // SpecularGlossiness Model\r\n if (material.reflectivityTexture) {\r\n defines.push(\"#define SPECULARGLOSSINESSTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.reflectivityTexture.coordinatesIndex + 1}`);\r\n if (material.reflectivityTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAREFLECTIVITYTEXTURE\");\r\n }\r\n needUv = true;\r\n } else if (material.reflectivityColor) {\r\n defines.push(\"#define REFLECTIVITYCOLOR\");\r\n }\r\n // null or undefined\r\n if (material.microSurface != null) {\r\n defines.push(\"#define GLOSSINESS\");\r\n }\r\n }\r\n } else if (material.getClassName() === \"StandardMaterial\") {\r\n // if StandardMaterial:\r\n if (material.specularTexture) {\r\n defines.push(\"#define REFLECTIVITYTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.specularTexture.coordinatesIndex + 1}`);\r\n if (material.specularTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAREFLECTIVITYTEXTURE\");\r\n }\r\n needUv = true;\r\n }\r\n if (material.specularColor) {\r\n defines.push(\"#define REFLECTIVITYCOLOR\");\r\n }\r\n } else if (material.getClassName() === \"OpenPBRMaterial\") {\r\n const pbrMaterial = material as OpenPBRMaterial;\r\n\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n defines.push(\"#define METALLIC\");\r\n defines.push(\"#define ROUGHNESS\");\r\n if (pbrMaterial._useRoughnessFromMetallicTextureGreen && pbrMaterial.baseMetalnessTexture) {\r\n defines.push(\"#define ORMTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${pbrMaterial.baseMetalnessTexture.coordinatesIndex + 1}`);\r\n needUv = true;\r\n } else if (pbrMaterial.baseMetalnessTexture) {\r\n defines.push(\"#define METALLIC_TEXTURE\");\r\n defines.push(`#define METALLIC_UV${pbrMaterial.baseMetalnessTexture.coordinatesIndex + 1}`);\r\n needUv = true;\r\n } else if (pbrMaterial.specularRoughnessTexture) {\r\n defines.push(\"#define ROUGHNESS_TEXTURE\");\r\n defines.push(`#define ROUGHNESS_UV${pbrMaterial.specularRoughnessTexture.coordinatesIndex + 1}`);\r\n needUv = true;\r\n }\r\n\r\n if (pbrMaterial.baseColorTexture) {\r\n defines.push(\"#define ALBEDOTEXTURE\");\r\n defines.push(`#define ALBEDO_UV${pbrMaterial.baseColorTexture.coordinatesIndex + 1}`);\r\n if (pbrMaterial.baseColorTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAALBEDO\");\r\n }\r\n needUv = true;\r\n }\r\n if (pbrMaterial.baseColor) {\r\n defines.push(\"#define ALBEDOCOLOR\");\r\n }\r\n }\r\n }\r\n\r\n if (needUv) {\r\n defines.push(\"#define NEED_UV\");\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\r\n attribs.push(VertexBuffer.UVKind);\r\n defines.push(\"#define UV1\");\r\n uv1 = true;\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n defines.push(\"#define UV2\");\r\n uv2 = true;\r\n }\r\n }\r\n }\r\n\r\n // Buffers\r\n if (this._enableDepth) {\r\n defines.push(\"#define DEPTH\");\r\n defines.push(\"#define DEPTH_INDEX \" + this._depthIndex);\r\n }\r\n\r\n if (this._enableNormal) {\r\n defines.push(\"#define NORMAL\");\r\n defines.push(\"#define NORMAL_INDEX \" + this._normalIndex);\r\n }\r\n\r\n if (this._enablePosition) {\r\n defines.push(\"#define POSITION\");\r\n defines.push(\"#define POSITION_INDEX \" + this._positionIndex);\r\n }\r\n\r\n if (this._enableVelocity) {\r\n defines.push(\"#define VELOCITY\");\r\n defines.push(\"#define VELOCITY_INDEX \" + this._velocityIndex);\r\n if (this.excludedSkinnedMeshesFromVelocity.indexOf(mesh) === -1) {\r\n defines.push(\"#define BONES_VELOCITY_ENABLED\");\r\n }\r\n }\r\n\r\n if (this._enableVelocityLinear) {\r\n defines.push(\"#define VELOCITY_LINEAR\");\r\n defines.push(\"#define VELOCITY_LINEAR_INDEX \" + this._velocityLinearIndex);\r\n if (this.excludedSkinnedMeshesFromVelocity.indexOf(mesh) === -1) {\r\n defines.push(\"#define BONES_VELOCITY_ENABLED\");\r\n }\r\n }\r\n\r\n if (this._enableReflectivity) {\r\n defines.push(\"#define REFLECTIVITY\");\r\n defines.push(\"#define REFLECTIVITY_INDEX \" + this._reflectivityIndex);\r\n }\r\n\r\n if (this._enableScreenspaceDepth) {\r\n if (this._screenspaceDepthIndex !== -1) {\r\n defines.push(\"#define SCREENSPACE_DEPTH_INDEX \" + this._screenspaceDepthIndex);\r\n defines.push(\"#define SCREENSPACE_DEPTH\");\r\n }\r\n }\r\n\r\n if (this.generateNormalsInWorldSpace) {\r\n defines.push(\"#define NORMAL_WORLDSPACE\");\r\n }\r\n\r\n if (this._normalsAreUnsigned) {\r\n defines.push(\"#define ENCODE_NORMAL\");\r\n }\r\n\r\n // Bones\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n attribs.push(VertexBuffer.MatricesIndicesKind);\r\n attribs.push(VertexBuffer.MatricesWeightsKind);\r\n if (mesh.numBoneInfluencers > 4) {\r\n attribs.push(VertexBuffer.MatricesIndicesExtraKind);\r\n attribs.push(VertexBuffer.MatricesWeightsExtraKind);\r\n }\r\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\r\n defines.push(\"#define BONETEXTURE \" + mesh.skeleton.isUsingTextureForMatrices);\r\n defines.push(\"#define BonesPerMesh \" + (mesh.skeleton.bones.length + 1));\r\n } else {\r\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\r\n defines.push(\"#define BONETEXTURE false\");\r\n defines.push(\"#define BonesPerMesh 0\");\r\n }\r\n\r\n // Morph targets\r\n const numMorphInfluencers = mesh.morphTargetManager\r\n ? PrepareDefinesAndAttributesForMorphTargets(\r\n mesh.morphTargetManager,\r\n defines,\r\n attribs,\r\n mesh,\r\n true, // usePositionMorph\r\n true, // useNormalMorph\r\n false, // useTangentMorph\r\n uv1, // useUVMorph\r\n uv2, // useUV2Morph\r\n color // useColorMorph\r\n )\r\n : 0;\r\n\r\n // Instances\r\n if (useInstances) {\r\n defines.push(\"#define INSTANCES\");\r\n PushAttributesForInstances(attribs, this._enableVelocity || this._enableVelocityLinear);\r\n if (subMesh.getRenderingMesh().hasThinInstances) {\r\n defines.push(\"#define THIN_INSTANCES\");\r\n }\r\n }\r\n\r\n // Setup textures count\r\n if (this._linkedWithPrePass) {\r\n defines.push(\"#define SCENE_MRT_COUNT \" + this._attachmentsFromPrePass.length);\r\n } else {\r\n defines.push(\"#define SCENE_MRT_COUNT \" + this._multiRenderTarget.textures.length);\r\n }\r\n\r\n PrepareStringDefinesForClipPlanes(material, this._scene, defines);\r\n\r\n // Get correct effect\r\n const engine = this._scene.getEngine();\r\n const drawWrapper = subMesh._getDrawWrapper(undefined, true)!;\r\n const cachedDefines = drawWrapper.defines;\r\n const join = defines.join(\"\\n\");\r\n if (cachedDefines !== join) {\r\n drawWrapper.setEffect(\r\n engine.createEffect(\r\n \"geometry\",\r\n {\r\n attributes: attribs,\r\n uniformsNames: Uniforms,\r\n samplers: [\"diffuseSampler\", \"bumpSampler\", \"reflectivitySampler\", \"albedoSampler\", \"morphTargets\", \"boneSampler\"],\r\n defines: join,\r\n onCompiled: null,\r\n fallbacks: null,\r\n onError: null,\r\n uniformBuffersNames: [\"Scene\"],\r\n indexParameters: { buffersCount: this._multiRenderTarget.textures.length - 1, maxSimultaneousMorphTargets: numMorphInfluencers },\r\n shaderLanguage: this.shaderLanguage,\r\n },\r\n engine\r\n ),\r\n join\r\n );\r\n }\r\n\r\n return drawWrapper.effect!.isReady();\r\n }\r\n\r\n /**\r\n * Gets the current underlying G Buffer.\r\n * @returns the buffer\r\n */\r\n public getGBuffer(): MultiRenderTarget {\r\n return this._multiRenderTarget;\r\n }\r\n\r\n /**\r\n * Gets the number of samples used to render the buffer (anti aliasing).\r\n */\r\n public get samples(): number {\r\n return this._multiRenderTarget.samples;\r\n }\r\n\r\n /**\r\n * Sets the number of samples used to render the buffer (anti aliasing).\r\n */\r\n public set samples(value: number) {\r\n this._multiRenderTarget.samples = value;\r\n }\r\n\r\n /**\r\n * Disposes the renderer and frees up associated resources.\r\n */\r\n public dispose(): void {\r\n if (this._resizeObserver) {\r\n const engine = this._scene.getEngine();\r\n engine.onResizeObservable.remove(this._resizeObserver);\r\n this._resizeObserver = null;\r\n }\r\n this.getGBuffer().dispose();\r\n }\r\n\r\n private _assignRenderTargetIndices(): [number, string[], Array<{ textureType: number; textureFormat: number } | undefined>] {\r\n const textureNames: string[] = [];\r\n const textureTypesAndFormats: Array<{ textureType: number; textureFormat: number } | undefined> = [];\r\n let count = 0;\r\n\r\n if (this._enableDepth) {\r\n this._depthIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Depth\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.DEPTH_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableNormal) {\r\n this._normalIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Normal\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.NORMAL_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enablePosition) {\r\n this._positionIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Position\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.POSITION_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableVelocity) {\r\n this._velocityIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Velocity\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableVelocityLinear) {\r\n this._velocityLinearIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_VelocityLinear\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableReflectivity) {\r\n this._reflectivityIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Reflectivity\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableScreenspaceDepth) {\r\n this._screenspaceDepthIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_ScreenspaceDepth\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE]);\r\n }\r\n\r\n return [count, textureNames, textureTypesAndFormats];\r\n }\r\n\r\n protected _createRenderTargets(): void {\r\n const engine = this._scene.getEngine();\r\n const [count, textureNames, textureTypesAndFormat] = this._assignRenderTargetIndices();\r\n\r\n let type = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n if (engine._caps.textureFloat && engine._caps.textureFloatLinearFiltering) {\r\n type = Constants.TEXTURETYPE_FLOAT;\r\n } else if (engine._caps.textureHalfFloat && engine._caps.textureHalfFloatLinearFiltering) {\r\n type = Constants.TEXTURETYPE_HALF_FLOAT;\r\n }\r\n\r\n const dimensions =\r\n (this._ratioOrDimensions as any).width !== undefined\r\n ? (this._ratioOrDimensions as { width: number; height: number })\r\n : { width: engine.getRenderWidth() * (this._ratioOrDimensions as number), height: engine.getRenderHeight() * (this._ratioOrDimensions as number) };\r\n\r\n const textureTypes: number[] = [];\r\n const textureFormats: number[] = [];\r\n\r\n for (const typeAndFormat of textureTypesAndFormat) {\r\n if (typeAndFormat) {\r\n textureTypes.push(typeAndFormat.textureType);\r\n textureFormats.push(typeAndFormat.textureFormat);\r\n } else {\r\n textureTypes.push(type);\r\n textureFormats.push(Constants.TEXTUREFORMAT_RGBA);\r\n }\r\n }\r\n\r\n this._normalsAreUnsigned =\r\n textureTypes[GeometryBufferRenderer.NORMAL_TEXTURE_TYPE] === Constants.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV ||\r\n textureTypes[GeometryBufferRenderer.NORMAL_TEXTURE_TYPE] === Constants.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV;\r\n\r\n this._multiRenderTarget = new MultiRenderTarget(\r\n \"gBuffer\",\r\n dimensions,\r\n count,\r\n this._scene,\r\n { generateMipMaps: false, generateDepthTexture: true, types: textureTypes, formats: textureFormats, depthTextureFormat: this._depthFormat },\r\n textureNames.concat(\"gBuffer_DepthBuffer\")\r\n );\r\n if (!this.isSupported) {\r\n return;\r\n }\r\n this._multiRenderTarget.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n this._multiRenderTarget.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n this._multiRenderTarget.refreshRate = 1;\r\n this._multiRenderTarget.renderParticles = false;\r\n this._multiRenderTarget.renderList = null;\r\n\r\n // Depth is always the first texture in the geometry buffer renderer!\r\n const layoutAttachmentsAll = [true];\r\n const layoutAttachmentsAllButDepth = [false];\r\n const layoutAttachmentsDepthOnly = [true];\r\n\r\n for (let i = 1; i < count; ++i) {\r\n layoutAttachmentsAll.push(true);\r\n layoutAttachmentsDepthOnly.push(false);\r\n layoutAttachmentsAllButDepth.push(true);\r\n }\r\n\r\n const attachmentsAll = engine.buildTextureLayout(layoutAttachmentsAll);\r\n const attachmentsAllButDepth = engine.buildTextureLayout(layoutAttachmentsAllButDepth);\r\n const attachmentsDepthOnly = engine.buildTextureLayout(layoutAttachmentsDepthOnly);\r\n\r\n this._multiRenderTarget.onClearObservable.add((engine) => {\r\n engine.bindAttachments(this.useSpecificClearForDepthTexture ? attachmentsAllButDepth : attachmentsAll);\r\n engine.clear(this._clearColor, true, true, true);\r\n if (this.useSpecificClearForDepthTexture) {\r\n engine.bindAttachments(attachmentsDepthOnly);\r\n engine.clear(this._clearDepthColor, true, true, true);\r\n }\r\n engine.bindAttachments(attachmentsAll);\r\n });\r\n\r\n this._resizeObserver = engine.onResizeObservable.add(() => {\r\n if (this._multiRenderTarget) {\r\n const dimensions =\r\n (this._ratioOrDimensions as any).width !== undefined\r\n ? (this._ratioOrDimensions as { width: number; height: number })\r\n : { width: engine.getRenderWidth() * (this._ratioOrDimensions as number), height: engine.getRenderHeight() * (this._ratioOrDimensions as number) };\r\n this._multiRenderTarget.resize(dimensions);\r\n }\r\n });\r\n\r\n // Custom render function\r\n const renderSubMesh = (subMesh: SubMesh): void => {\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n const effectiveMesh = subMesh.getEffectiveMesh();\r\n const scene = this._scene;\r\n const engine = scene.getEngine();\r\n const material = <any>subMesh.getMaterial();\r\n\r\n if (!material) {\r\n return;\r\n }\r\n\r\n effectiveMesh._internalAbstractMeshDataInfo._isActiveIntermediate = false;\r\n\r\n // Velocity\r\n if ((this._enableVelocity || this._enableVelocityLinear) && !this._previousTransformationMatrices[effectiveMesh.uniqueId]) {\r\n this._previousTransformationMatrices[effectiveMesh.uniqueId] = {\r\n world: Matrix.Identity(),\r\n viewProjection: scene.getTransformMatrix(),\r\n };\r\n\r\n if (renderingMesh.skeleton) {\r\n const bonesTransformations = renderingMesh.skeleton.getTransformMatrices(renderingMesh);\r\n this._previousBonesTransformationMatrices[renderingMesh.uniqueId] = this._copyBonesTransformationMatrices(\r\n bonesTransformations,\r\n new Float32Array(bonesTransformations.length)\r\n );\r\n }\r\n }\r\n\r\n // Managing instances\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n\r\n if (batch.mustReturn) {\r\n return;\r\n }\r\n\r\n const hardwareInstancedRendering = engine.getCaps().instancedArrays && (batch.visibleInstances[subMesh._id] !== null || renderingMesh.hasThinInstances);\r\n const world = effectiveMesh.getWorldMatrix();\r\n\r\n if (this.isReady(subMesh, hardwareInstancedRendering)) {\r\n const drawWrapper = subMesh._getDrawWrapper();\r\n\r\n if (!drawWrapper) {\r\n return;\r\n }\r\n\r\n const effect = drawWrapper.effect!;\r\n\r\n engine.enableEffect(drawWrapper);\r\n if (!hardwareInstancedRendering) {\r\n renderingMesh._bind(subMesh, effect, material.fillMode);\r\n }\r\n\r\n if (!this._useUbo) {\r\n effect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n effect.setMatrix(\"view\", scene.getViewMatrix());\r\n } else {\r\n BindSceneUniformBuffer(effect, this._scene.getSceneUniformBuffer());\r\n this._scene.finalizeSceneUbo();\r\n }\r\n\r\n let sideOrientation: Nullable<number>;\r\n const instanceDataStorage = renderingMesh._instanceDataStorage;\r\n\r\n if (!instanceDataStorage.isFrozen && (material.backFaceCulling || material.sideOrientation !== null)) {\r\n const mainDeterminant = effectiveMesh._getWorldMatrixDeterminant();\r\n sideOrientation = material._getEffectiveOrientation(renderingMesh);\r\n\r\n if (mainDeterminant < 0) {\r\n sideOrientation = sideOrientation === Material.ClockWiseSideOrientation ? Material.CounterClockWiseSideOrientation : Material.ClockWiseSideOrientation;\r\n }\r\n } else {\r\n sideOrientation = renderingMesh._effectiveSideOrientation;\r\n }\r\n\r\n material._preBind(drawWrapper, sideOrientation);\r\n\r\n // Alpha test\r\n if (material.needAlphaTestingForMesh(effectiveMesh)) {\r\n const alphaTexture = material.getAlphaTestTexture();\r\n if (alphaTexture) {\r\n effect.setTexture(\"diffuseSampler\", alphaTexture);\r\n effect.setMatrix(\"diffuseMatrix\", alphaTexture.getTextureMatrix());\r\n }\r\n }\r\n\r\n // Bump\r\n if (\r\n (material.bumpTexture || material.normalTexture || material.geometryNormalTexture) &&\r\n scene.getEngine().getCaps().standardDerivatives &&\r\n MaterialFlags.BumpTextureEnabled\r\n ) {\r\n const texture = material.bumpTexture || material.normalTexture || material.geometryNormalTexture;\r\n effect.setFloat3(\"vBumpInfos\", texture.coordinatesIndex, 1.0 / texture.level, material.parallaxScaleBias);\r\n effect.setMatrix(\"bumpMatrix\", texture.getTextureMatrix());\r\n effect.setTexture(\"bumpSampler\", texture);\r\n effect.setFloat2(\"vTangentSpaceParams\", material.invertNormalMapX ? -1.0 : 1.0, material.invertNormalMapY ? -1.0 : 1.0);\r\n }\r\n\r\n // Reflectivity\r\n if (this._enableReflectivity) {\r\n // for PBR materials: cf. https://doc.babylonjs.com/features/featuresDeepDive/materials/using/masterPBR\r\n if (material.getClassName() === \"PBRMetallicRoughnessMaterial\") {\r\n // if it is a PBR material in MetallicRoughness Mode:\r\n if (material.metallicRoughnessTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.metallicRoughnessTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.metallicRoughnessTexture.getTextureMatrix());\r\n }\r\n if (material.metallic !== null) {\r\n effect.setFloat(\"metallic\", material.metallic);\r\n }\r\n if (material.roughness !== null) {\r\n effect.setFloat(\"glossiness\", 1.0 - material.roughness);\r\n }\r\n if (material.baseTexture !== null) {\r\n effect.setTexture(\"albedoSampler\", material.baseTexture);\r\n effect.setMatrix(\"albedoMatrix\", material.baseTexture.getTextureMatrix());\r\n }\r\n if (material.baseColor !== null) {\r\n effect.setColor3(\"albedoColor\", material.baseColor);\r\n }\r\n } else if (material.getClassName() === \"PBRSpecularGlossinessMaterial\") {\r\n // if it is a PBR material in Specular/Glossiness Mode:\r\n if (material.specularGlossinessTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.specularGlossinessTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.specularGlossinessTexture.getTextureMatrix());\r\n } else {\r\n if (material.specularColor !== null) {\r\n effect.setColor3(\"reflectivityColor\", material.specularColor);\r\n }\r\n }\r\n if (material.glossiness !== null) {\r\n effect.setFloat(\"glossiness\", material.glossiness);\r\n }\r\n } else if (material.getClassName() === \"PBRMaterial\") {\r\n // if it is the bigger PBRMaterial\r\n if (material.metallicTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.metallicTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.metallicTexture.getTextureMatrix());\r\n }\r\n if (material.metallic !== null) {\r\n effect.setFloat(\"metallic\", material.metallic);\r\n }\r\n\r\n if (material.roughness !== null) {\r\n effect.setFloat(\"glossiness\", 1.0 - material.roughness);\r\n }\r\n\r\n if (material.roughness !== null || material.metallic !== null || material.metallicTexture !== null) {\r\n // MetallicRoughness Model\r\n if (material.albedoTexture !== null) {\r\n effect.setTexture(\"albedoSampler\", material.albedoTexture);\r\n effect.setMatrix(\"albedoMatrix\", material.albedoTexture.getTextureMatrix());\r\n }\r\n if (material.albedoColor !== null) {\r\n effect.setColor3(\"albedoColor\", material.albedoColor);\r\n }\r\n } else {\r\n // SpecularGlossiness Model\r\n if (material.reflectivityTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.reflectivityTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.reflectivityTexture.getTextureMatrix());\r\n } else if (material.reflectivityColor !== null) {\r\n effect.setColor3(\"reflectivityColor\", material.reflectivityColor);\r\n }\r\n if (material.microSurface !== null) {\r\n effect.setFloat(\"glossiness\", material.microSurface);\r\n }\r\n }\r\n } else if (material.getClassName() === \"StandardMaterial\") {\r\n // if StandardMaterial:\r\n if (material.specularTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.specularTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.specularTexture.getTextureMatrix());\r\n }\r\n if (material.specularColor !== null) {\r\n effect.setColor3(\"reflectivityColor\", material.specularColor);\r\n }\r\n } else if (material.getClassName() === \"OpenPBRMaterial\") {\r\n // if it is a OpenPBR material:\r\n const openpbrMaterial = material as OpenPBRMaterial;\r\n if (openpbrMaterial._useRoughnessFromMetallicTextureGreen && openpbrMaterial.baseMetalnessTexture) {\r\n effect.setTexture(\"reflectivitySampler\", openpbrMaterial.baseMetalnessTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", openpbrMaterial.baseMetalnessTexture.getTextureMatrix());\r\n } else if (openpbrMaterial.baseMetalnessTexture) {\r\n effect.setTexture(\"metallicSampler\", openpbrMaterial.baseMetalnessTexture);\r\n effect.setMatrix(\"metallicMatrix\", openpbrMaterial.baseMetalnessTexture.getTextureMatrix());\r\n } else if (openpbrMaterial.specularRoughnessTexture) {\r\n effect.setTexture(\"roughnessSampler\", openpbrMaterial.specularRoughnessTexture);\r\n effect.setMatrix(\"roughnessMatrix\", openpbrMaterial.specularRoughnessTexture.getTextureMatrix());\r\n }\r\n effect.setFloat(\"metallic\", openpbrMaterial.baseMetalness);\r\n effect.setFloat(\"glossiness\", 1.0 - openpbrMaterial.specularRoughness);\r\n if (openpbrMaterial.baseColorTexture !== null) {\r\n effect.setTexture(\"albedoSampler\", openpbrMaterial.baseColorTexture);\r\n effect.setMatrix(\"albedoMatrix\", openpbrMaterial.baseColorTexture.getTextureMatrix());\r\n }\r\n if (openpbrMaterial.baseColor !== null) {\r\n effect.setColor3(\"albedoColor\", openpbrMaterial.baseColor);\r\n }\r\n }\r\n }\r\n\r\n // Clip plane\r\n BindClipPlane(effect, material, this._scene);\r\n\r\n // Bones\r\n if (renderingMesh.useBones && renderingMesh.computeBonesUsingShaders && renderingMesh.skeleton) {\r\n const skeleton = renderingMesh.skeleton;\r\n\r\n if (skeleton.isUsingTextureForMatrices && effect.getUniformIndex(\"boneTextureWidth\") > -1) {\r\n const boneTexture = skeleton.getTransformMatrixTexture(renderingMesh);\r\n effect.setTexture(\"boneSampler\", boneTexture);\r\n effect.setFloat(\"boneTextureWidth\", 4.0 * (skeleton.bones.length + 1));\r\n } else {\r\n effect.setMatrices(\"mBones\", renderingMesh.skeleton.getTransformMatrices(renderingMesh));\r\n }\r\n\r\n if (this._enableVelocity || this._enableVelocityLinear) {\r\n effect.setMatrices(\"mPreviousBones\", this._previousBonesTransformationMatrices[renderingMesh.uniqueId]);\r\n }\r\n }\r\n\r\n // Morph targets\r\n BindMorphTargetParameters(renderingMesh, effect);\r\n if (renderingMesh.morphTargetManager && renderingMesh.morphTargetManager.isUsingTextureForTargets) {\r\n renderingMesh.morphTargetManager._bind(effect);\r\n }\r\n\r\n // Velocity\r\n if (this._enableVelocity || this._enableVelocityLinear) {\r\n effect.setMatrix(\"previousWorld\", this._previousTransformationMatrices[effectiveMesh.uniqueId].world);\r\n effect.setMatrix(\"previousViewProjection\", this._previousTransformationMatrices[effectiveMesh.uniqueId].viewProjection);\r\n }\r\n\r\n if (hardwareInstancedRendering && renderingMesh.hasThinInstances) {\r\n effect.setMatrix(\"world\", world);\r\n }\r\n\r\n // Draw\r\n renderingMesh._processRendering(effectiveMesh, subMesh, effect, material.fillMode, batch, hardwareInstancedRendering, (isInstance, w) => {\r\n if (!isInstance) {\r\n effect.setMatrix(\"world\", w);\r\n }\r\n });\r\n }\r\n\r\n // Velocity\r\n if (this._enableVelocity || this._enableVelocityLinear) {\r\n this._previousTransformationMatrices[effectiveMesh.uniqueId].world = world.clone();\r\n this._previousTransformationMatrices[effectiveMesh.uniqueId].viewProjection = this._scene.getTransformMatrix().clone();\r\n if (renderingMesh.skeleton) {\r\n this._copyBonesTransformationMatrices(\r\n renderingMesh.skeleton.getTransformMatrices(renderingMesh),\r\n this._previousBonesTransformationMatrices[effectiveMesh.uniqueId]\r\n );\r\n }\r\n }\r\n };\r\n\r\n this._multiRenderTarget.customIsReadyFunction = (mesh: AbstractMesh, refreshRate: number, preWarm?: boolean) => {\r\n if ((preWarm || refreshRate === 0) && mesh.subMeshes) {\r\n for (let i = 0; i < mesh.subMeshes.length; ++i) {\r\n const subMesh = mesh.subMeshes[i];\r\n const material = subMesh.getMaterial();\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n\r\n if (!material) {\r\n continue;\r\n }\r\n\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n const hardwareInstancedRendering = engine.getCaps().instancedArrays && (batch.visibleInstances[subMesh._id] !== null || renderingMesh.hasThinInstances);\r\n\r\n if (!this.isReady(subMesh, hardwareInstancedRendering)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n this._multiRenderTarget.customRenderFunction = (\r\n opaqueSubMeshes: SmartArray<SubMesh>,\r\n alphaTestSubMeshes: SmartArray<SubMesh>,\r\n transparentSubMeshes: SmartArray<SubMesh>,\r\n depthOnlySubMeshes: SmartArray<SubMesh>\r\n ): void => {\r\n let index;\r\n\r\n if (this._linkedWithPrePass) {\r\n if (!this._prePassRenderer.enabled) {\r\n return;\r\n }\r\n this._scene.getEngine().bindAttachments(this._attachmentsFromPrePass);\r\n }\r\n\r\n if (depthOnlySubMeshes.length) {\r\n engine.setColorWrite(false);\r\n for (index = 0; index < depthOnlySubMeshes.length; index++) {\r\n renderSubMesh(depthOnlySubMeshes.data[index]);\r\n }\r\n engine.setColorWrite(true);\r\n }\r\n\r\n for (index = 0; index < opaqueSubMeshes.length; index++) {\r\n renderSubMesh(opaqueSubMeshes.data[index]);\r\n }\r\n\r\n engine.setDepthWrite(false);\r\n for (index = 0; index < alphaTestSubMeshes.length; index++) {\r\n renderSubMesh(alphaTestSubMeshes.data[index]);\r\n }\r\n\r\n if (this.renderTransparentMeshes) {\r\n for (index = 0; index < transparentSubMeshes.length; index++) {\r\n renderSubMesh(transparentSubMeshes.data[index]);\r\n }\r\n }\r\n engine.setDepthWrite(true);\r\n };\r\n }\r\n\r\n // Copies the bones transformation matrices into the target array and returns the target's reference\r\n private _copyBonesTransformationMatrices(source: Float32Array, target: Float32Array): Float32Array {\r\n for (let i = 0; i < source.length; i++) {\r\n target[i] = source[i];\r\n }\r\n\r\n return target;\r\n }\r\n}\r\n"]}
|
|
@@ -34,6 +34,13 @@ uniform vec3 vBumpInfos;uniform vec2 vTangentSpaceParams;
|
|
|
34
34
|
#if defined(REFLECTIVITY)
|
|
35
35
|
#if defined(ORMTEXTURE) || defined(SPECULARGLOSSINESSTEXTURE) || defined(REFLECTIVITYTEXTURE)
|
|
36
36
|
uniform sampler2D reflectivitySampler;varying vec2 vReflectivityUV;
|
|
37
|
+
#else
|
|
38
|
+
#ifdef METALLIC_TEXTURE
|
|
39
|
+
uniform sampler2D metallicSampler;varying vec2 vMetallicUV;
|
|
40
|
+
#endif
|
|
41
|
+
#ifdef ROUGHNESS_TEXTURE
|
|
42
|
+
uniform sampler2D roughnessSampler;varying vec2 vRoughnessUV;
|
|
43
|
+
#endif
|
|
37
44
|
#endif
|
|
38
45
|
#ifdef ALBEDOTEXTURE
|
|
39
46
|
varying vec2 vAlbedoUV;uniform sampler2D albedoSampler;
|
|
@@ -105,6 +112,13 @@ vec4 reflectivity=vec4(0.0,0.0,0.0,1.0);
|
|
|
105
112
|
float metal=1.0;float roughness=1.0;
|
|
106
113
|
#ifdef ORMTEXTURE
|
|
107
114
|
metal*=texture2D(reflectivitySampler,vReflectivityUV).b;roughness*=texture2D(reflectivitySampler,vReflectivityUV).g;
|
|
115
|
+
#else
|
|
116
|
+
#ifdef METALLIC_TEXTURE
|
|
117
|
+
metal*=texture2D(metallicSampler,vMetallicUV).r;
|
|
118
|
+
#endif
|
|
119
|
+
#ifdef ROUGHNESS_TEXTURE
|
|
120
|
+
roughness*=texture2D(roughnessSampler,vRoughnessUV).r;
|
|
121
|
+
#endif
|
|
108
122
|
#endif
|
|
109
123
|
#ifdef METALLIC
|
|
110
124
|
metal*=metallic;
|