@babylonjs/core 5.46.0 → 5.47.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Actions/actionManager.js +6 -1
- package/Actions/actionManager.js.map +1 -1
- package/Debug/physicsViewer.js +3 -3
- package/Debug/physicsViewer.js.map +1 -1
- package/DeviceInput/eventFactory.d.ts +1 -1
- package/DeviceInput/eventFactory.js +4 -4
- package/DeviceInput/eventFactory.js.map +1 -1
- package/DeviceInput/webDeviceInputSystem.js +2 -2
- package/DeviceInput/webDeviceInputSystem.js.map +1 -1
- package/Engines/thinEngine.js +2 -2
- package/Engines/thinEngine.js.map +1 -1
- package/Events/pointerEvents.js +1 -1
- package/Events/pointerEvents.js.map +1 -1
- package/Inputs/scene.inputManager.d.ts +4 -3
- package/Inputs/scene.inputManager.js +12 -11
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +1 -3
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/Textures/videoTexture.js +1 -1
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Maths/math.vector.d.ts +21 -0
- package/Maths/math.vector.js +27 -0
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/mesh.js +1 -1
- package/Meshes/mesh.js.map +1 -1
- package/Particles/particleSystemComponent.js +5 -0
- package/Particles/particleSystemComponent.js.map +1 -1
- package/Physics/index.d.ts +1 -0
- package/Physics/index.js +1 -0
- package/Physics/index.js.map +1 -1
- package/Physics/v2/IPhysicsEnginePlugin.d.ts +6 -8
- package/Physics/v2/IPhysicsEnginePlugin.js +1 -0
- package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
- package/Physics/v2/physicsBody.d.ts +10 -1
- package/Physics/v2/physicsBody.js +13 -1
- package/Physics/v2/physicsBody.js.map +1 -1
- package/Physics/v2/physicsConstraint.d.ts +139 -66
- package/Physics/v2/physicsConstraint.js +145 -78
- package/Physics/v2/physicsConstraint.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js +9 -1
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.js +3 -0
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +3 -0
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +129 -124
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockSubSurface.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
- package/Shaders/fluidRenderingParticleDepth.fragment.js +5 -1
- package/Shaders/fluidRenderingParticleDepth.fragment.js.map +1 -1
- package/Shaders/fluidRenderingRender.fragment.js +7 -2
- package/Shaders/fluidRenderingRender.fragment.js.map +1 -1
- package/Shaders/geometry.fragment.d.ts +2 -0
- package/Shaders/geometry.fragment.js +5 -1
- package/Shaders/geometry.fragment.js.map +1 -1
- package/Shaders/geometry.vertex.d.ts +2 -0
- package/Shaders/geometry.vertex.js +8 -4
- package/Shaders/geometry.vertex.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geometryBufferRenderer.js","sourceRoot":"","sources":["../../../../lts/core/generated/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 type { Mesh } from \"../Meshes/mesh\";\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 { MaterialHelper } from \"../Materials/materialHelper\";\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 { Engine } from \"../Engines/engine\";\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\n\r\n/** @internal */\r\ninterface ISavedTransformationMatrix {\r\n world: Matrix;\r\n viewProjection: Matrix;\r\n}\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 * 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 * 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 private _scene: Scene;\r\n private _resizeObserver: Nullable<Observer<Engine>> = null;\r\n private _multiRenderTarget: MultiRenderTarget;\r\n private _ratio: number;\r\n private _enablePosition: boolean = false;\r\n private _enableVelocity: boolean = false;\r\n private _enableReflectivity: boolean = false;\r\n private _depthFormat: number;\r\n\r\n private _positionIndex: number = -1;\r\n private _velocityIndex: number = -1;\r\n private _reflectivityIndex: number = -1;\r\n private _depthIndex: number = -1;\r\n private _normalIndex: number = -1;\r\n\r\n private _linkedWithPrePass: boolean = false;\r\n private _prePassRenderer: PrePassRenderer;\r\n private _attachments: 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._enablePosition = false;\r\n this._enableReflectivity = false;\r\n this._enableVelocity = false;\r\n this._attachments = [];\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.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 } else if (geometryBufferType === GeometryBufferRenderer.NORMAL_TEXTURE_TYPE) {\r\n this._normalIndex = index;\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._attachments = 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.REFLECTIVITY_TEXTURE_TYPE:\r\n return this._reflectivityIndex;\r\n default:\r\n return -1;\r\n }\r\n }\r\n\r\n /**\r\n * Gets 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 * Gets 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 * 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 * 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 this._ratio;\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 ratio How big is the buffer related to the main canvas (default: 1)\r\n * @param depthFormat Format of the depth texture (default: Constants.TEXTUREFORMAT_DEPTH16)\r\n */\r\n constructor(scene: Scene, ratio: number = 1, depthFormat = Constants.TEXTUREFORMAT_DEPTH16) {\r\n this._scene = scene;\r\n this._ratio = ratio;\r\n this._useUbo = scene.getEngine().supportsUniformBuffers;\r\n this._depthFormat = depthFormat;\r\n\r\n GeometryBufferRenderer._SceneComponentInitialization(this._scene);\r\n\r\n // Render target\r\n this._createRenderTargets();\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 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 // Alpha test\r\n if (material) {\r\n let needUv = false;\r\n if (material.needAlphaTesting() && 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 if (material.bumpTexture && MaterialFlags.BumpTextureEnabled) {\r\n defines.push(\"#define BUMP\");\r\n defines.push(`#define BUMP_UV${material.bumpTexture.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 !== null) {\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 if (material.metallic !== null) {\r\n defines.push(\"#define METALLIC\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\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 !== null) {\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 !== null) {\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 !== null) {\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 !== null) {\r\n defines.push(\"#define REFLECTIVITYCOLOR\");\r\n }\r\n }\r\n if (material.glossiness !== null) {\r\n defines.push(\"#define GLOSSINESSS\");\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 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 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 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 !== null) {\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 !== null) {\r\n defines.push(\"#define ALBEDOCOLOR\");\r\n }\r\n } else {\r\n // SpecularGlossiness Model\r\n if (material.reflectivityTexture !== null) {\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 !== null) {\r\n defines.push(\"#define REFLECTIVITYCOLOR\");\r\n }\r\n if (material.microSurface !== null) {\r\n defines.push(\"#define GLOSSINESSS\");\r\n }\r\n }\r\n } else if (material.getClassName() === \"StandardMaterial\") {\r\n // if StandardMaterial:\r\n if (material.specularTexture !== null) {\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 !== null) {\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 }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n defines.push(\"#define UV2\");\r\n }\r\n }\r\n }\r\n\r\n // PrePass\r\n if (this._linkedWithPrePass) {\r\n defines.push(\"#define PREPASS\");\r\n if (this._depthIndex !== -1) {\r\n defines.push(\"#define DEPTH_INDEX \" + this._depthIndex);\r\n defines.push(\"#define PREPASS_DEPTH\");\r\n }\r\n if (this._normalIndex !== -1) {\r\n defines.push(\"#define NORMAL_INDEX \" + this._normalIndex);\r\n defines.push(\"#define PREPASS_NORMAL\");\r\n }\r\n }\r\n\r\n // Buffers\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._enableReflectivity) {\r\n defines.push(\"#define REFLECTIVITY\");\r\n defines.push(\"#define REFLECTIVITY_INDEX \" + this._reflectivityIndex);\r\n }\r\n\r\n // Bones\r\n if (mesh.useBones && mesh.computeBonesUsingShaders) {\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 BonesPerMesh \" + (mesh.skeleton ? mesh.skeleton.bones.length + 1 : 0));\r\n } else {\r\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\r\n }\r\n\r\n // Morph targets\r\n const morphTargetManager = (mesh as Mesh).morphTargetManager;\r\n let numMorphInfluencers = 0;\r\n if (morphTargetManager) {\r\n if (morphTargetManager.numInfluencers > 0) {\r\n numMorphInfluencers = morphTargetManager.numInfluencers;\r\n\r\n defines.push(\"#define MORPHTARGETS\");\r\n defines.push(\"#define NUM_MORPH_INFLUENCERS \" + numMorphInfluencers);\r\n if (morphTargetManager.isUsingTextureForTargets) {\r\n defines.push(\"#define MORPHTARGETS_TEXTURE\");\r\n }\r\n MaterialHelper.PrepareAttributesForMorphTargetsInfluencers(attribs, mesh, numMorphInfluencers);\r\n }\r\n }\r\n\r\n // Instances\r\n if (useInstances) {\r\n defines.push(\"#define INSTANCES\");\r\n MaterialHelper.PushAttributesForInstances(attribs, this._enableVelocity);\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 RENDER_TARGET_COUNT \" + this._attachments.length);\r\n } else {\r\n defines.push(\"#define RENDER_TARGET_COUNT \" + this._multiRenderTarget.textures.length);\r\n }\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: [\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 \"morphTargetTextureInfo\",\r\n \"morphTargetTextureIndices\",\r\n ],\r\n samplers: [\"diffuseSampler\", \"bumpSampler\", \"reflectivitySampler\", \"albedoSampler\", \"morphTargets\"],\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 },\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[]] {\r\n const textureNames: string[] = [];\r\n let count = 2;\r\n\r\n textureNames.push(\"gBuffer_Depth\", \"gBuffer_Normal\");\r\n\r\n if (this._enablePosition) {\r\n this._positionIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Position\");\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 }\r\n\r\n if (this._enableReflectivity) {\r\n this._reflectivityIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Reflectivity\");\r\n }\r\n\r\n return [count, textureNames];\r\n }\r\n\r\n protected _createRenderTargets(): void {\r\n const engine = this._scene.getEngine();\r\n const [count, textureNames] = 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 this._multiRenderTarget = new MultiRenderTarget(\r\n \"gBuffer\",\r\n { width: engine.getRenderWidth() * this._ratio, height: engine.getRenderHeight() * this._ratio },\r\n count,\r\n this._scene,\r\n { generateMipMaps: false, generateDepthTexture: true, defaultType: type, 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 // set default depth value to 1.0 (far away)\r\n this._multiRenderTarget.onClearObservable.add((engine) => {\r\n engine.clear(new Color4(0.0, 0.0, 0.0, 0.0), true, true, true);\r\n });\r\n\r\n this._resizeObserver = engine.onResizeObservable.add(() => {\r\n if (this._multiRenderTarget) {\r\n this._multiRenderTarget.resize({ width: engine.getRenderWidth() * this._ratio, height: engine.getRenderHeight() * this._ratio });\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._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 MaterialHelper.BindSceneUniformBuffer(effect, this._scene.getSceneUniformBuffer());\r\n this._scene.finalizeSceneUbo();\r\n }\r\n\r\n if (material) {\r\n let sideOrientation: Nullable<number>;\r\n const instanceDataStorage = (renderingMesh as Mesh)._instanceDataStorage;\r\n\r\n if (!instanceDataStorage.isFrozen && (material.backFaceCulling || renderingMesh.overrideMaterialSideOrientation !== null)) {\r\n const mainDeterminant = effectiveMesh._getWorldMatrixDeterminant();\r\n sideOrientation = renderingMesh.overrideMaterialSideOrientation;\r\n if (sideOrientation === null) {\r\n sideOrientation = material.sideOrientation;\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 = instanceDataStorage.sideOrientation;\r\n }\r\n\r\n material._preBind(drawWrapper, sideOrientation);\r\n\r\n // Alpha test\r\n if (material.needAlphaTesting()) {\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 (material.bumpTexture && scene.getEngine().getCaps().standardDerivatives && MaterialFlags.BumpTextureEnabled) {\r\n effect.setFloat3(\"vBumpInfos\", material.bumpTexture.coordinatesIndex, 1.0 / material.bumpTexture.level, material.parallaxScaleBias);\r\n effect.setMatrix(\"bumpMatrix\", material.bumpTexture.getTextureMatrix());\r\n effect.setTexture(\"bumpSampler\", material.bumpTexture);\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\r\n // Bones\r\n if (renderingMesh.useBones && renderingMesh.computeBonesUsingShaders && renderingMesh.skeleton) {\r\n effect.setMatrices(\"mBones\", renderingMesh.skeleton.getTransformMatrices(renderingMesh));\r\n if (this._enableVelocity) {\r\n effect.setMatrices(\"mPreviousBones\", this._previousBonesTransformationMatrices[renderingMesh.uniqueId]);\r\n }\r\n }\r\n\r\n // Morph targets\r\n MaterialHelper.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) {\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) {\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._attachments);\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":["../../../../lts/core/generated/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 type { Mesh } from \"../Meshes/mesh\";\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 { MaterialHelper } from \"../Materials/materialHelper\";\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 { Engine } from \"../Engines/engine\";\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, prepareDefinesForClipPlanes } from \"../Materials/clipPlaneMaterialHelper\";\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 \"morphTargetTextureInfo\",\r\n \"morphTargetTextureIndices\",\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 * 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 * 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 private _scene: Scene;\r\n private _resizeObserver: Nullable<Observer<Engine>> = null;\r\n private _multiRenderTarget: MultiRenderTarget;\r\n private _ratio: number;\r\n private _enablePosition: boolean = false;\r\n private _enableVelocity: boolean = false;\r\n private _enableReflectivity: boolean = false;\r\n private _depthFormat: number;\r\n\r\n private _positionIndex: number = -1;\r\n private _velocityIndex: number = -1;\r\n private _reflectivityIndex: number = -1;\r\n private _depthIndex: number = -1;\r\n private _normalIndex: number = -1;\r\n\r\n private _linkedWithPrePass: boolean = false;\r\n private _prePassRenderer: PrePassRenderer;\r\n private _attachments: 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._enablePosition = false;\r\n this._enableReflectivity = false;\r\n this._enableVelocity = false;\r\n this._attachments = [];\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.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 } else if (geometryBufferType === GeometryBufferRenderer.NORMAL_TEXTURE_TYPE) {\r\n this._normalIndex = index;\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._attachments = 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.REFLECTIVITY_TEXTURE_TYPE:\r\n return this._reflectivityIndex;\r\n default:\r\n return -1;\r\n }\r\n }\r\n\r\n /**\r\n * Gets 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 * Gets 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 * 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 * 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 this._ratio;\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 ratio How big is the buffer related to the main canvas (default: 1)\r\n * @param depthFormat Format of the depth texture (default: Constants.TEXTUREFORMAT_DEPTH16)\r\n */\r\n constructor(scene: Scene, ratio: number = 1, depthFormat = Constants.TEXTUREFORMAT_DEPTH16) {\r\n this._scene = scene;\r\n this._ratio = ratio;\r\n this._useUbo = scene.getEngine().supportsUniformBuffers;\r\n this._depthFormat = depthFormat;\r\n\r\n GeometryBufferRenderer._SceneComponentInitialization(this._scene);\r\n\r\n // Render target\r\n this._createRenderTargets();\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 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 // Alpha test\r\n if (material) {\r\n let needUv = false;\r\n if (material.needAlphaTesting() && 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 if (material.bumpTexture && MaterialFlags.BumpTextureEnabled) {\r\n defines.push(\"#define BUMP\");\r\n defines.push(`#define BUMP_UV${material.bumpTexture.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 !== null) {\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 if (material.metallic !== null) {\r\n defines.push(\"#define METALLIC\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\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 !== null) {\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 !== null) {\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 !== null) {\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 !== null) {\r\n defines.push(\"#define REFLECTIVITYCOLOR\");\r\n }\r\n }\r\n if (material.glossiness !== null) {\r\n defines.push(\"#define GLOSSINESSS\");\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 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 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 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 !== null) {\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 !== null) {\r\n defines.push(\"#define ALBEDOCOLOR\");\r\n }\r\n } else {\r\n // SpecularGlossiness Model\r\n if (material.reflectivityTexture !== null) {\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 !== null) {\r\n defines.push(\"#define REFLECTIVITYCOLOR\");\r\n }\r\n if (material.microSurface !== null) {\r\n defines.push(\"#define GLOSSINESSS\");\r\n }\r\n }\r\n } else if (material.getClassName() === \"StandardMaterial\") {\r\n // if StandardMaterial:\r\n if (material.specularTexture !== null) {\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 !== null) {\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 }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n defines.push(\"#define UV2\");\r\n }\r\n }\r\n }\r\n\r\n // PrePass\r\n if (this._linkedWithPrePass) {\r\n defines.push(\"#define PREPASS\");\r\n if (this._depthIndex !== -1) {\r\n defines.push(\"#define DEPTH_INDEX \" + this._depthIndex);\r\n defines.push(\"#define PREPASS_DEPTH\");\r\n }\r\n if (this._normalIndex !== -1) {\r\n defines.push(\"#define NORMAL_INDEX \" + this._normalIndex);\r\n defines.push(\"#define PREPASS_NORMAL\");\r\n }\r\n }\r\n\r\n // Buffers\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._enableReflectivity) {\r\n defines.push(\"#define REFLECTIVITY\");\r\n defines.push(\"#define REFLECTIVITY_INDEX \" + this._reflectivityIndex);\r\n }\r\n\r\n // Bones\r\n if (mesh.useBones && mesh.computeBonesUsingShaders) {\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 BonesPerMesh \" + (mesh.skeleton ? mesh.skeleton.bones.length + 1 : 0));\r\n } else {\r\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\r\n }\r\n\r\n // Morph targets\r\n const morphTargetManager = (mesh as Mesh).morphTargetManager;\r\n let numMorphInfluencers = 0;\r\n if (morphTargetManager) {\r\n if (morphTargetManager.numInfluencers > 0) {\r\n numMorphInfluencers = morphTargetManager.numInfluencers;\r\n\r\n defines.push(\"#define MORPHTARGETS\");\r\n defines.push(\"#define NUM_MORPH_INFLUENCERS \" + numMorphInfluencers);\r\n if (morphTargetManager.isUsingTextureForTargets) {\r\n defines.push(\"#define MORPHTARGETS_TEXTURE\");\r\n }\r\n MaterialHelper.PrepareAttributesForMorphTargetsInfluencers(attribs, mesh, numMorphInfluencers);\r\n }\r\n }\r\n\r\n // Instances\r\n if (useInstances) {\r\n defines.push(\"#define INSTANCES\");\r\n MaterialHelper.PushAttributesForInstances(attribs, this._enableVelocity);\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 RENDER_TARGET_COUNT \" + this._attachments.length);\r\n } else {\r\n defines.push(\"#define RENDER_TARGET_COUNT \" + this._multiRenderTarget.textures.length);\r\n }\r\n\r\n prepareDefinesForClipPlanes(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\"],\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 },\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[]] {\r\n const textureNames: string[] = [];\r\n let count = 2;\r\n\r\n textureNames.push(\"gBuffer_Depth\", \"gBuffer_Normal\");\r\n\r\n if (this._enablePosition) {\r\n this._positionIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Position\");\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 }\r\n\r\n if (this._enableReflectivity) {\r\n this._reflectivityIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Reflectivity\");\r\n }\r\n\r\n return [count, textureNames];\r\n }\r\n\r\n protected _createRenderTargets(): void {\r\n const engine = this._scene.getEngine();\r\n const [count, textureNames] = 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 this._multiRenderTarget = new MultiRenderTarget(\r\n \"gBuffer\",\r\n { width: engine.getRenderWidth() * this._ratio, height: engine.getRenderHeight() * this._ratio },\r\n count,\r\n this._scene,\r\n { generateMipMaps: false, generateDepthTexture: true, defaultType: type, 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 // set default depth value to 1.0 (far away)\r\n this._multiRenderTarget.onClearObservable.add((engine) => {\r\n engine.clear(new Color4(0.0, 0.0, 0.0, 0.0), true, true, true);\r\n });\r\n\r\n this._resizeObserver = engine.onResizeObservable.add(() => {\r\n if (this._multiRenderTarget) {\r\n this._multiRenderTarget.resize({ width: engine.getRenderWidth() * this._ratio, height: engine.getRenderHeight() * this._ratio });\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._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 MaterialHelper.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 as Mesh)._instanceDataStorage;\r\n\r\n if (!instanceDataStorage.isFrozen && (material.backFaceCulling || renderingMesh.overrideMaterialSideOrientation !== null)) {\r\n const mainDeterminant = effectiveMesh._getWorldMatrixDeterminant();\r\n sideOrientation = renderingMesh.overrideMaterialSideOrientation;\r\n if (sideOrientation === null) {\r\n sideOrientation = material.sideOrientation;\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 = instanceDataStorage.sideOrientation;\r\n }\r\n\r\n material._preBind(drawWrapper, sideOrientation);\r\n\r\n // Alpha test\r\n if (material.needAlphaTesting()) {\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 (material.bumpTexture && scene.getEngine().getCaps().standardDerivatives && MaterialFlags.BumpTextureEnabled) {\r\n effect.setFloat3(\"vBumpInfos\", material.bumpTexture.coordinatesIndex, 1.0 / material.bumpTexture.level, material.parallaxScaleBias);\r\n effect.setMatrix(\"bumpMatrix\", material.bumpTexture.getTextureMatrix());\r\n effect.setTexture(\"bumpSampler\", material.bumpTexture);\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 effect.setMatrices(\"mBones\", renderingMesh.skeleton.getTransformMatrices(renderingMesh));\r\n if (this._enableVelocity) {\r\n effect.setMatrices(\"mPreviousBones\", this._previousBonesTransformationMatrices[renderingMesh.uniqueId]);\r\n }\r\n }\r\n\r\n // Morph targets\r\n MaterialHelper.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) {\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) {\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._attachments);\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"]}
|
|
@@ -119,7 +119,7 @@ float refractionAlphaG=alphaG;
|
|
|
119
119
|
refractionLOD=refractionLOD*vRefractionMicrosurfaceInfos.y+vRefractionMicrosurfaceInfos.z;
|
|
120
120
|
float automaticRefractionLOD=UNPACK_LOD(sampleRefraction(refractionSampler,refractionCoords).a);
|
|
121
121
|
float requestedRefractionLOD=refractionLOD;
|
|
122
|
-
#
|
|
122
|
+
#if defined(REALTIME_FILTERING) && defined(SS_REFRACTIONMAP_3D)
|
|
123
123
|
environmentRefraction=vec4(radiance(alphaG,refractionSampler,refractionCoords,vRefractionFilteringInfo),1.0);
|
|
124
124
|
environmentRefraction=sampleRefractionLod(refractionSampler,refractionCoords,requestedRefractionLOD);
|
|
125
125
|
#else
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pbrBlockSubSurface.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Shaders/ShadersInclude/pbrBlockSubSurface.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,IAAI,GAAG,oBAAoB,CAAC;AAClC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Ud,CAAC;AACF,aAAa;AACb,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,gBAAgB;AAChB,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\n\nconst name = \"pbrBlockSubSurface\";\nconst shader = `struct subSurfaceOutParams\r{\rvec3 specularEnvironmentReflectance;\r#ifdef SS_REFRACTION\nvec3 finalRefraction;\rvec3 surfaceAlbedo;\r#ifdef SS_LINKREFRACTIONTOTRANSPARENCY\nfloat alpha;\r#endif\n#ifdef REFLECTION\nfloat refractionFactorForIrradiance;\r#endif\n#endif\n#ifdef SS_TRANSLUCENCY\nvec3 transmittance;\rfloat translucencyIntensity;\r#ifdef REFLECTION\nvec3 refractionIrradiance;\r#endif\n#endif\n#if DEBUGMODE>0\nvec4 thicknessMap;\rvec4 environmentRefraction;\rvec3 refractionTransmittance;\r#endif\n};\r#ifdef SUBSURFACE\n#define pbr_inline\n#define inline\nvoid subSurfaceBlock(\rin vec3 vSubSurfaceIntensity,\rin vec2 vThicknessParam,\rin vec4 vTintColor,\rin vec3 normalW,\rin vec3 specularEnvironmentReflectance,\r#ifdef SS_THICKNESSANDMASK_TEXTURE\nin vec4 thicknessMap,\r#endif\n#ifdef SS_REFRACTIONINTENSITY_TEXTURE\nin vec4 refractionIntensityMap,\r#endif\n#ifdef SS_TRANSLUCENCYINTENSITY_TEXTURE\nin vec4 translucencyIntensityMap,\r#endif\n#ifdef REFLECTION\n#ifdef SS_TRANSLUCENCY\nin mat4 reflectionMatrix,\r#ifdef USESPHERICALFROMREFLECTIONMAP\n#if !defined(NORMAL) || !defined(USESPHERICALINVERTEX)\nin vec3 irradianceVector_,\r#endif\n#if defined(REALTIME_FILTERING)\nin samplerCube reflectionSampler,\rin vec2 vReflectionFilteringInfo,\r#endif\n#endif\n#ifdef USEIRRADIANCEMAP\n#ifdef REFLECTIONMAP_3D\nin samplerCube irradianceSampler,\r#else\nin sampler2D irradianceSampler,\r#endif\n#endif\n#endif\n#endif\n#if defined(SS_REFRACTION) || defined(SS_TRANSLUCENCY)\nin vec3 surfaceAlbedo,\r#endif\n#ifdef SS_REFRACTION\nin vec3 vPositionW,\rin vec3 viewDirectionW,\rin mat4 view,\rin vec4 vRefractionInfos,\rin mat4 refractionMatrix,\rin vec4 vRefractionMicrosurfaceInfos,\rin vec4 vLightingIntensity,\r#ifdef SS_LINKREFRACTIONTOTRANSPARENCY\nin float alpha,\r#endif\n#ifdef SS_LODINREFRACTIONALPHA\nin float NdotVUnclamped,\r#endif\n#ifdef SS_LINEARSPECULARREFRACTION\nin float roughness,\r#endif\nin float alphaG,\r#ifdef SS_REFRACTIONMAP_3D\nin samplerCube refractionSampler,\r#ifndef LODBASEDMICROSFURACE\nin samplerCube refractionSamplerLow,\rin samplerCube refractionSamplerHigh,\r#endif\n#else\nin sampler2D refractionSampler,\r#ifndef LODBASEDMICROSFURACE\nin sampler2D refractionSamplerLow,\rin sampler2D refractionSamplerHigh,\r#endif\n#endif\n#ifdef ANISOTROPIC\nin anisotropicOutParams anisotropicOut,\r#endif\n#ifdef REALTIME_FILTERING\nin vec2 vRefractionFilteringInfo,\r#endif\n#ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC\nin vec3 refractionPosition,\rin vec3 refractionSize,\r#endif\n#endif\n#ifdef SS_TRANSLUCENCY\nin vec3 vDiffusionDistance,\r#endif\nout subSurfaceOutParams outParams\r)\r{\routParams.specularEnvironmentReflectance=specularEnvironmentReflectance;\r#ifdef SS_REFRACTION\nfloat refractionIntensity=vSubSurfaceIntensity.x;\r#ifdef SS_LINKREFRACTIONTOTRANSPARENCY\nrefractionIntensity*=(1.0-alpha);\routParams.alpha=1.0;\r#endif\n#endif\n#ifdef SS_TRANSLUCENCY\nfloat translucencyIntensity=vSubSurfaceIntensity.y;\r#endif\n#ifdef SS_THICKNESSANDMASK_TEXTURE\n#if defined(SS_USE_GLTF_TEXTURES)\nfloat thickness=thicknessMap.g*vThicknessParam.y+vThicknessParam.x;\r#else\nfloat thickness=thicknessMap.r*vThicknessParam.y+vThicknessParam.x;\r#endif\n#if DEBUGMODE>0\noutParams.thicknessMap=thicknessMap;\r#endif\n#ifdef SS_MASK_FROM_THICKNESS_TEXTURE\n#if defined(SS_REFRACTION) && defined(SS_REFRACTION_USE_INTENSITY_FROM_TEXTURE)\n#if defined(SS_USE_GLTF_TEXTURES)\nrefractionIntensity*=thicknessMap.r;\r#else\nrefractionIntensity*=thicknessMap.g;\r#endif\n#endif\n#if defined(SS_TRANSLUCENCY) && defined(SS_TRANSLUCENCY_USE_INTENSITY_FROM_TEXTURE)\ntranslucencyIntensity*=thicknessMap.b;\r#endif\n#endif\n#else\nfloat thickness=vThicknessParam.y;\r#endif\n#ifdef SS_REFRACTIONINTENSITY_TEXTURE\n#ifdef SS_USE_GLTF_TEXTURES\nrefractionIntensity*=refractionIntensityMap.r;\r#else\nrefractionIntensity*=refractionIntensityMap.g;\r#endif\n#endif\n#ifdef SS_TRANSLUCENCYINTENSITY_TEXTURE\ntranslucencyIntensity*=translucencyIntensityMap.b;\r#endif\n#ifdef SS_TRANSLUCENCY\nthickness=maxEps(thickness);\rvec3 transmittance=transmittanceBRDF_Burley(vTintColor.rgb,vDiffusionDistance,thickness);\rtransmittance*=translucencyIntensity;\routParams.transmittance=transmittance;\routParams.translucencyIntensity=translucencyIntensity;\r#endif\n#ifdef SS_REFRACTION\nvec4 environmentRefraction=vec4(0.,0.,0.,0.);\r#ifdef ANISOTROPIC\nvec3 refractionVector=refract(-viewDirectionW,anisotropicOut.anisotropicNormal,vRefractionInfos.y);\r#else\nvec3 refractionVector=refract(-viewDirectionW,normalW,vRefractionInfos.y);\r#endif\n#ifdef SS_REFRACTIONMAP_OPPOSITEZ\nrefractionVector.z*=-1.0;\r#endif\n#ifdef SS_REFRACTIONMAP_3D\n#ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC\nrefractionVector=parallaxCorrectNormal(vPositionW,refractionVector,refractionSize,refractionPosition);\r#endif\nrefractionVector.y=refractionVector.y*vRefractionInfos.w;\rvec3 refractionCoords=refractionVector;\rrefractionCoords=vec3(refractionMatrix*vec4(refractionCoords,0));\r#else\n#ifdef SS_USE_THICKNESS_AS_DEPTH\nvec3 vRefractionUVW=vec3(refractionMatrix*(view*vec4(vPositionW+refractionVector*thickness,1.0)));\r#else\nvec3 vRefractionUVW=vec3(refractionMatrix*(view*vec4(vPositionW+refractionVector*vRefractionInfos.z,1.0)));\r#endif\nvec2 refractionCoords=vRefractionUVW.xy/vRefractionUVW.z;\rrefractionCoords.y=1.0-refractionCoords.y;\r#endif\n#ifdef SS_HAS_THICKNESS\nfloat ior=vRefractionInfos.y;\r#else\nfloat ior=vRefractionMicrosurfaceInfos.w;\r#endif\n#ifdef SS_LODINREFRACTIONALPHA\nfloat refractionAlphaG=alphaG;\rrefractionAlphaG=mix(alphaG,0.0,clamp(ior*3.0-2.0,0.0,1.0));\rfloat refractionLOD=getLodFromAlphaG(vRefractionMicrosurfaceInfos.x,refractionAlphaG,NdotVUnclamped);\r#elif defined(SS_LINEARSPECULARREFRACTION)\nfloat refractionRoughness=alphaG;\rrefractionRoughness=mix(alphaG,0.0,clamp(ior*3.0-2.0,0.0,1.0));\rfloat refractionLOD=getLinearLodFromRoughness(vRefractionMicrosurfaceInfos.x,refractionRoughness);\r#else\nfloat refractionAlphaG=alphaG;\rrefractionAlphaG=mix(alphaG,0.0,clamp(ior*3.0-2.0,0.0,1.0));\rfloat refractionLOD=getLodFromAlphaG(vRefractionMicrosurfaceInfos.x,refractionAlphaG);\r#endif\n#ifdef LODBASEDMICROSFURACE\nrefractionLOD=refractionLOD*vRefractionMicrosurfaceInfos.y+vRefractionMicrosurfaceInfos.z;\r#ifdef SS_LODINREFRACTIONALPHA\nfloat automaticRefractionLOD=UNPACK_LOD(sampleRefraction(refractionSampler,refractionCoords).a);\rfloat requestedRefractionLOD=max(automaticRefractionLOD,refractionLOD);\r#else\nfloat requestedRefractionLOD=refractionLOD;\r#endif\n#ifdef REALTIME_FILTERING\nenvironmentRefraction=vec4(radiance(alphaG,refractionSampler,refractionCoords,vRefractionFilteringInfo),1.0);\r#else\nenvironmentRefraction=sampleRefractionLod(refractionSampler,refractionCoords,requestedRefractionLOD);\r#endif\n#else\nfloat lodRefractionNormalized=saturate(refractionLOD/log2(vRefractionMicrosurfaceInfos.x));\rfloat lodRefractionNormalizedDoubled=lodRefractionNormalized*2.0;\rvec4 environmentRefractionMid=sampleRefraction(refractionSampler,refractionCoords);\rif (lodRefractionNormalizedDoubled<1.0){\renvironmentRefraction=mix(\rsampleRefraction(refractionSamplerHigh,refractionCoords),\renvironmentRefractionMid,\rlodRefractionNormalizedDoubled\r);\r} else {\renvironmentRefraction=mix(\renvironmentRefractionMid,\rsampleRefraction(refractionSamplerLow,refractionCoords),\rlodRefractionNormalizedDoubled-1.0\r);\r}\r#endif\n#ifdef SS_RGBDREFRACTION\nenvironmentRefraction.rgb=fromRGBD(environmentRefraction);\r#endif\n#ifdef SS_GAMMAREFRACTION\nenvironmentRefraction.rgb=toLinearSpace(environmentRefraction.rgb);\r#endif\nenvironmentRefraction.rgb*=vRefractionInfos.x;\r#endif\n#ifdef SS_REFRACTION\nvec3 refractionTransmittance=vec3(refractionIntensity);\r#ifdef SS_THICKNESSANDMASK_TEXTURE\nvec3 volumeAlbedo=computeColorAtDistanceInMedia(vTintColor.rgb,vTintColor.w);\rrefractionTransmittance*=cocaLambert(volumeAlbedo,thickness);\r#elif defined(SS_LINKREFRACTIONTOTRANSPARENCY)\nfloat maxChannel=max(max(surfaceAlbedo.r,surfaceAlbedo.g),surfaceAlbedo.b);\rvec3 volumeAlbedo=saturate(maxChannel*surfaceAlbedo);\renvironmentRefraction.rgb*=volumeAlbedo;\r#else\nvec3 volumeAlbedo=computeColorAtDistanceInMedia(vTintColor.rgb,vTintColor.w);\rrefractionTransmittance*=cocaLambert(volumeAlbedo,vThicknessParam.y);\r#endif\n#ifdef SS_ALBEDOFORREFRACTIONTINT\nenvironmentRefraction.rgb*=surfaceAlbedo.rgb;\r#endif\noutParams.surfaceAlbedo=surfaceAlbedo*(1.-refractionIntensity);\r#ifdef REFLECTION\noutParams.refractionFactorForIrradiance=(1.-refractionIntensity);\r#endif\n#ifdef UNUSED_MULTIPLEBOUNCES\nvec3 bounceSpecularEnvironmentReflectance=(2.0*specularEnvironmentReflectance)/(1.0+specularEnvironmentReflectance);\routParams.specularEnvironmentReflectance=mix(bounceSpecularEnvironmentReflectance,specularEnvironmentReflectance,refractionIntensity);\r#endif\nrefractionTransmittance*=1.0-outParams.specularEnvironmentReflectance;\r#if DEBUGMODE>0\noutParams.refractionTransmittance=refractionTransmittance;\r#endif\noutParams.finalRefraction=environmentRefraction.rgb*refractionTransmittance*vLightingIntensity.z;\r#if DEBUGMODE>0\noutParams.environmentRefraction=environmentRefraction;\r#endif\n#endif\n#if defined(REFLECTION) && defined(SS_TRANSLUCENCY)\n#if defined(NORMAL) && defined(USESPHERICALINVERTEX) || !defined(USESPHERICALFROMREFLECTIONMAP)\nvec3 irradianceVector=vec3(reflectionMatrix*vec4(normalW,0)).xyz;\r#ifdef REFLECTIONMAP_OPPOSITEZ\nirradianceVector.z*=-1.0;\r#endif\n#ifdef INVERTCUBICMAP\nirradianceVector.y*=-1.0;\r#endif\n#else\nvec3 irradianceVector=irradianceVector_;\r#endif\n#if defined(USESPHERICALFROMREFLECTIONMAP)\n#if defined(REALTIME_FILTERING)\nvec3 refractionIrradiance=irradiance(reflectionSampler,-irradianceVector,vReflectionFilteringInfo);\r#else\nvec3 refractionIrradiance=computeEnvironmentIrradiance(-irradianceVector);\r#endif\n#elif defined(USEIRRADIANCEMAP)\n#ifdef REFLECTIONMAP_3D\nvec3 irradianceCoords=irradianceVector;\r#else\nvec2 irradianceCoords=irradianceVector.xy;\r#ifdef REFLECTIONMAP_PROJECTION\nirradianceCoords/=irradianceVector.z;\r#endif\nirradianceCoords.y=1.0-irradianceCoords.y;\r#endif\nvec4 refractionIrradiance=sampleReflection(irradianceSampler,-irradianceCoords);\r#ifdef RGBDREFLECTION\nrefractionIrradiance.rgb=fromRGBD(refractionIrradiance);\r#endif\n#ifdef GAMMAREFLECTION\nrefractionIrradiance.rgb=toLinearSpace(refractionIrradiance.rgb);\r#endif\n#else\nvec4 refractionIrradiance=vec4(0.);\r#endif\nrefractionIrradiance.rgb*=transmittance;\r#ifdef SS_ALBEDOFORTRANSLUCENCYTINT\nrefractionIrradiance.rgb*=surfaceAlbedo.rgb;\r#endif\noutParams.refractionIrradiance=refractionIrradiance.rgb;\r#endif\n}\r#endif\n`;\n// Sideeffect\nShaderStore.IncludesShadersStore[name] = shader;\n/** @internal */\nexport const pbrBlockSubSurface = { name, shader };\n"]}
|
|
1
|
+
{"version":3,"file":"pbrBlockSubSurface.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Shaders/ShadersInclude/pbrBlockSubSurface.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,IAAI,GAAG,oBAAoB,CAAC;AAClC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Ud,CAAC;AACF,aAAa;AACb,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,gBAAgB;AAChB,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\n\nconst name = \"pbrBlockSubSurface\";\nconst shader = `struct subSurfaceOutParams\r{\rvec3 specularEnvironmentReflectance;\r#ifdef SS_REFRACTION\nvec3 finalRefraction;\rvec3 surfaceAlbedo;\r#ifdef SS_LINKREFRACTIONTOTRANSPARENCY\nfloat alpha;\r#endif\n#ifdef REFLECTION\nfloat refractionFactorForIrradiance;\r#endif\n#endif\n#ifdef SS_TRANSLUCENCY\nvec3 transmittance;\rfloat translucencyIntensity;\r#ifdef REFLECTION\nvec3 refractionIrradiance;\r#endif\n#endif\n#if DEBUGMODE>0\nvec4 thicknessMap;\rvec4 environmentRefraction;\rvec3 refractionTransmittance;\r#endif\n};\r#ifdef SUBSURFACE\n#define pbr_inline\n#define inline\nvoid subSurfaceBlock(\rin vec3 vSubSurfaceIntensity,\rin vec2 vThicknessParam,\rin vec4 vTintColor,\rin vec3 normalW,\rin vec3 specularEnvironmentReflectance,\r#ifdef SS_THICKNESSANDMASK_TEXTURE\nin vec4 thicknessMap,\r#endif\n#ifdef SS_REFRACTIONINTENSITY_TEXTURE\nin vec4 refractionIntensityMap,\r#endif\n#ifdef SS_TRANSLUCENCYINTENSITY_TEXTURE\nin vec4 translucencyIntensityMap,\r#endif\n#ifdef REFLECTION\n#ifdef SS_TRANSLUCENCY\nin mat4 reflectionMatrix,\r#ifdef USESPHERICALFROMREFLECTIONMAP\n#if !defined(NORMAL) || !defined(USESPHERICALINVERTEX)\nin vec3 irradianceVector_,\r#endif\n#if defined(REALTIME_FILTERING)\nin samplerCube reflectionSampler,\rin vec2 vReflectionFilteringInfo,\r#endif\n#endif\n#ifdef USEIRRADIANCEMAP\n#ifdef REFLECTIONMAP_3D\nin samplerCube irradianceSampler,\r#else\nin sampler2D irradianceSampler,\r#endif\n#endif\n#endif\n#endif\n#if defined(SS_REFRACTION) || defined(SS_TRANSLUCENCY)\nin vec3 surfaceAlbedo,\r#endif\n#ifdef SS_REFRACTION\nin vec3 vPositionW,\rin vec3 viewDirectionW,\rin mat4 view,\rin vec4 vRefractionInfos,\rin mat4 refractionMatrix,\rin vec4 vRefractionMicrosurfaceInfos,\rin vec4 vLightingIntensity,\r#ifdef SS_LINKREFRACTIONTOTRANSPARENCY\nin float alpha,\r#endif\n#ifdef SS_LODINREFRACTIONALPHA\nin float NdotVUnclamped,\r#endif\n#ifdef SS_LINEARSPECULARREFRACTION\nin float roughness,\r#endif\nin float alphaG,\r#ifdef SS_REFRACTIONMAP_3D\nin samplerCube refractionSampler,\r#ifndef LODBASEDMICROSFURACE\nin samplerCube refractionSamplerLow,\rin samplerCube refractionSamplerHigh,\r#endif\n#else\nin sampler2D refractionSampler,\r#ifndef LODBASEDMICROSFURACE\nin sampler2D refractionSamplerLow,\rin sampler2D refractionSamplerHigh,\r#endif\n#endif\n#ifdef ANISOTROPIC\nin anisotropicOutParams anisotropicOut,\r#endif\n#ifdef REALTIME_FILTERING\nin vec2 vRefractionFilteringInfo,\r#endif\n#ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC\nin vec3 refractionPosition,\rin vec3 refractionSize,\r#endif\n#endif\n#ifdef SS_TRANSLUCENCY\nin vec3 vDiffusionDistance,\r#endif\nout subSurfaceOutParams outParams\r)\r{\routParams.specularEnvironmentReflectance=specularEnvironmentReflectance;\r#ifdef SS_REFRACTION\nfloat refractionIntensity=vSubSurfaceIntensity.x;\r#ifdef SS_LINKREFRACTIONTOTRANSPARENCY\nrefractionIntensity*=(1.0-alpha);\routParams.alpha=1.0;\r#endif\n#endif\n#ifdef SS_TRANSLUCENCY\nfloat translucencyIntensity=vSubSurfaceIntensity.y;\r#endif\n#ifdef SS_THICKNESSANDMASK_TEXTURE\n#if defined(SS_USE_GLTF_TEXTURES)\nfloat thickness=thicknessMap.g*vThicknessParam.y+vThicknessParam.x;\r#else\nfloat thickness=thicknessMap.r*vThicknessParam.y+vThicknessParam.x;\r#endif\n#if DEBUGMODE>0\noutParams.thicknessMap=thicknessMap;\r#endif\n#ifdef SS_MASK_FROM_THICKNESS_TEXTURE\n#if defined(SS_REFRACTION) && defined(SS_REFRACTION_USE_INTENSITY_FROM_TEXTURE)\n#if defined(SS_USE_GLTF_TEXTURES)\nrefractionIntensity*=thicknessMap.r;\r#else\nrefractionIntensity*=thicknessMap.g;\r#endif\n#endif\n#if defined(SS_TRANSLUCENCY) && defined(SS_TRANSLUCENCY_USE_INTENSITY_FROM_TEXTURE)\ntranslucencyIntensity*=thicknessMap.b;\r#endif\n#endif\n#else\nfloat thickness=vThicknessParam.y;\r#endif\n#ifdef SS_REFRACTIONINTENSITY_TEXTURE\n#ifdef SS_USE_GLTF_TEXTURES\nrefractionIntensity*=refractionIntensityMap.r;\r#else\nrefractionIntensity*=refractionIntensityMap.g;\r#endif\n#endif\n#ifdef SS_TRANSLUCENCYINTENSITY_TEXTURE\ntranslucencyIntensity*=translucencyIntensityMap.b;\r#endif\n#ifdef SS_TRANSLUCENCY\nthickness=maxEps(thickness);\rvec3 transmittance=transmittanceBRDF_Burley(vTintColor.rgb,vDiffusionDistance,thickness);\rtransmittance*=translucencyIntensity;\routParams.transmittance=transmittance;\routParams.translucencyIntensity=translucencyIntensity;\r#endif\n#ifdef SS_REFRACTION\nvec4 environmentRefraction=vec4(0.,0.,0.,0.);\r#ifdef ANISOTROPIC\nvec3 refractionVector=refract(-viewDirectionW,anisotropicOut.anisotropicNormal,vRefractionInfos.y);\r#else\nvec3 refractionVector=refract(-viewDirectionW,normalW,vRefractionInfos.y);\r#endif\n#ifdef SS_REFRACTIONMAP_OPPOSITEZ\nrefractionVector.z*=-1.0;\r#endif\n#ifdef SS_REFRACTIONMAP_3D\n#ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC\nrefractionVector=parallaxCorrectNormal(vPositionW,refractionVector,refractionSize,refractionPosition);\r#endif\nrefractionVector.y=refractionVector.y*vRefractionInfos.w;\rvec3 refractionCoords=refractionVector;\rrefractionCoords=vec3(refractionMatrix*vec4(refractionCoords,0));\r#else\n#ifdef SS_USE_THICKNESS_AS_DEPTH\nvec3 vRefractionUVW=vec3(refractionMatrix*(view*vec4(vPositionW+refractionVector*thickness,1.0)));\r#else\nvec3 vRefractionUVW=vec3(refractionMatrix*(view*vec4(vPositionW+refractionVector*vRefractionInfos.z,1.0)));\r#endif\nvec2 refractionCoords=vRefractionUVW.xy/vRefractionUVW.z;\rrefractionCoords.y=1.0-refractionCoords.y;\r#endif\n#ifdef SS_HAS_THICKNESS\nfloat ior=vRefractionInfos.y;\r#else\nfloat ior=vRefractionMicrosurfaceInfos.w;\r#endif\n#ifdef SS_LODINREFRACTIONALPHA\nfloat refractionAlphaG=alphaG;\rrefractionAlphaG=mix(alphaG,0.0,clamp(ior*3.0-2.0,0.0,1.0));\rfloat refractionLOD=getLodFromAlphaG(vRefractionMicrosurfaceInfos.x,refractionAlphaG,NdotVUnclamped);\r#elif defined(SS_LINEARSPECULARREFRACTION)\nfloat refractionRoughness=alphaG;\rrefractionRoughness=mix(alphaG,0.0,clamp(ior*3.0-2.0,0.0,1.0));\rfloat refractionLOD=getLinearLodFromRoughness(vRefractionMicrosurfaceInfos.x,refractionRoughness);\r#else\nfloat refractionAlphaG=alphaG;\rrefractionAlphaG=mix(alphaG,0.0,clamp(ior*3.0-2.0,0.0,1.0));\rfloat refractionLOD=getLodFromAlphaG(vRefractionMicrosurfaceInfos.x,refractionAlphaG);\r#endif\n#ifdef LODBASEDMICROSFURACE\nrefractionLOD=refractionLOD*vRefractionMicrosurfaceInfos.y+vRefractionMicrosurfaceInfos.z;\r#ifdef SS_LODINREFRACTIONALPHA\nfloat automaticRefractionLOD=UNPACK_LOD(sampleRefraction(refractionSampler,refractionCoords).a);\rfloat requestedRefractionLOD=max(automaticRefractionLOD,refractionLOD);\r#else\nfloat requestedRefractionLOD=refractionLOD;\r#endif\n#if defined(REALTIME_FILTERING) && defined(SS_REFRACTIONMAP_3D)\nenvironmentRefraction=vec4(radiance(alphaG,refractionSampler,refractionCoords,vRefractionFilteringInfo),1.0);\r#else\nenvironmentRefraction=sampleRefractionLod(refractionSampler,refractionCoords,requestedRefractionLOD);\r#endif\n#else\nfloat lodRefractionNormalized=saturate(refractionLOD/log2(vRefractionMicrosurfaceInfos.x));\rfloat lodRefractionNormalizedDoubled=lodRefractionNormalized*2.0;\rvec4 environmentRefractionMid=sampleRefraction(refractionSampler,refractionCoords);\rif (lodRefractionNormalizedDoubled<1.0){\renvironmentRefraction=mix(\rsampleRefraction(refractionSamplerHigh,refractionCoords),\renvironmentRefractionMid,\rlodRefractionNormalizedDoubled\r);\r} else {\renvironmentRefraction=mix(\renvironmentRefractionMid,\rsampleRefraction(refractionSamplerLow,refractionCoords),\rlodRefractionNormalizedDoubled-1.0\r);\r}\r#endif\n#ifdef SS_RGBDREFRACTION\nenvironmentRefraction.rgb=fromRGBD(environmentRefraction);\r#endif\n#ifdef SS_GAMMAREFRACTION\nenvironmentRefraction.rgb=toLinearSpace(environmentRefraction.rgb);\r#endif\nenvironmentRefraction.rgb*=vRefractionInfos.x;\r#endif\n#ifdef SS_REFRACTION\nvec3 refractionTransmittance=vec3(refractionIntensity);\r#ifdef SS_THICKNESSANDMASK_TEXTURE\nvec3 volumeAlbedo=computeColorAtDistanceInMedia(vTintColor.rgb,vTintColor.w);\rrefractionTransmittance*=cocaLambert(volumeAlbedo,thickness);\r#elif defined(SS_LINKREFRACTIONTOTRANSPARENCY)\nfloat maxChannel=max(max(surfaceAlbedo.r,surfaceAlbedo.g),surfaceAlbedo.b);\rvec3 volumeAlbedo=saturate(maxChannel*surfaceAlbedo);\renvironmentRefraction.rgb*=volumeAlbedo;\r#else\nvec3 volumeAlbedo=computeColorAtDistanceInMedia(vTintColor.rgb,vTintColor.w);\rrefractionTransmittance*=cocaLambert(volumeAlbedo,vThicknessParam.y);\r#endif\n#ifdef SS_ALBEDOFORREFRACTIONTINT\nenvironmentRefraction.rgb*=surfaceAlbedo.rgb;\r#endif\noutParams.surfaceAlbedo=surfaceAlbedo*(1.-refractionIntensity);\r#ifdef REFLECTION\noutParams.refractionFactorForIrradiance=(1.-refractionIntensity);\r#endif\n#ifdef UNUSED_MULTIPLEBOUNCES\nvec3 bounceSpecularEnvironmentReflectance=(2.0*specularEnvironmentReflectance)/(1.0+specularEnvironmentReflectance);\routParams.specularEnvironmentReflectance=mix(bounceSpecularEnvironmentReflectance,specularEnvironmentReflectance,refractionIntensity);\r#endif\nrefractionTransmittance*=1.0-outParams.specularEnvironmentReflectance;\r#if DEBUGMODE>0\noutParams.refractionTransmittance=refractionTransmittance;\r#endif\noutParams.finalRefraction=environmentRefraction.rgb*refractionTransmittance*vLightingIntensity.z;\r#if DEBUGMODE>0\noutParams.environmentRefraction=environmentRefraction;\r#endif\n#endif\n#if defined(REFLECTION) && defined(SS_TRANSLUCENCY)\n#if defined(NORMAL) && defined(USESPHERICALINVERTEX) || !defined(USESPHERICALFROMREFLECTIONMAP)\nvec3 irradianceVector=vec3(reflectionMatrix*vec4(normalW,0)).xyz;\r#ifdef REFLECTIONMAP_OPPOSITEZ\nirradianceVector.z*=-1.0;\r#endif\n#ifdef INVERTCUBICMAP\nirradianceVector.y*=-1.0;\r#endif\n#else\nvec3 irradianceVector=irradianceVector_;\r#endif\n#if defined(USESPHERICALFROMREFLECTIONMAP)\n#if defined(REALTIME_FILTERING)\nvec3 refractionIrradiance=irradiance(reflectionSampler,-irradianceVector,vReflectionFilteringInfo);\r#else\nvec3 refractionIrradiance=computeEnvironmentIrradiance(-irradianceVector);\r#endif\n#elif defined(USEIRRADIANCEMAP)\n#ifdef REFLECTIONMAP_3D\nvec3 irradianceCoords=irradianceVector;\r#else\nvec2 irradianceCoords=irradianceVector.xy;\r#ifdef REFLECTIONMAP_PROJECTION\nirradianceCoords/=irradianceVector.z;\r#endif\nirradianceCoords.y=1.0-irradianceCoords.y;\r#endif\nvec4 refractionIrradiance=sampleReflection(irradianceSampler,-irradianceCoords);\r#ifdef RGBDREFLECTION\nrefractionIrradiance.rgb=fromRGBD(refractionIrradiance);\r#endif\n#ifdef GAMMAREFLECTION\nrefractionIrradiance.rgb=toLinearSpace(refractionIrradiance.rgb);\r#endif\n#else\nvec4 refractionIrradiance=vec4(0.);\r#endif\nrefractionIrradiance.rgb*=transmittance;\r#ifdef SS_ALBEDOFORTRANSLUCENCYTINT\nrefractionIrradiance.rgb*=surfaceAlbedo.rgb;\r#endif\noutParams.refractionIrradiance=refractionIrradiance.rgb;\r#endif\n}\r#endif\n`;\n// Sideeffect\nShaderStore.IncludesShadersStore[name] = shader;\n/** @internal */\nexport const pbrBlockSubSurface = { name, shader };\n"]}
|
|
@@ -3,9 +3,13 @@ import { ShaderStore } from "../Engines/shaderStore.js";
|
|
|
3
3
|
const name = "fluidRenderingParticleDepthPixelShader";
|
|
4
4
|
const shader = `uniform mat4 projection;
|
|
5
5
|
varying float velocityNorm;
|
|
6
|
-
void main(void) {
|
|
6
|
+
void main(void) {
|
|
7
|
+
normal.z=-normal.z;
|
|
8
|
+
vec4 realViewPos=vec4(viewPos+normal*sphereRadius,1.0);
|
|
7
9
|
gl_FragDepth=clipSpacePos.z/clipSpacePos.w;
|
|
8
10
|
gl_FragDepth=(clipSpacePos.z/clipSpacePos.w)*0.5+0.5;
|
|
11
|
+
#ifdef FLUIDRENDERING_RHS
|
|
12
|
+
realViewPos.z=-realViewPos.z;
|
|
9
13
|
#ifdef FLUIDRENDERING_VELOCITY
|
|
10
14
|
glFragColor=vec4(realViewPos.z,velocityNorm,0.,1.);
|
|
11
15
|
glFragColor=vec4(realViewPos.z,0.,0.,1.);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fluidRenderingParticleDepth.fragment.js","sourceRoot":"","sources":["../../../../lts/core/generated/Shaders/fluidRenderingParticleDepth.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,wCAAwC,CAAC;AACtD,MAAM,MAAM,GAAG
|
|
1
|
+
{"version":3,"file":"fluidRenderingParticleDepth.fragment.js","sourceRoot":"","sources":["../../../../lts/core/generated/Shaders/fluidRenderingParticleDepth.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,wCAAwC,CAAC;AACtD,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCd,CAAC;AACF,aAAa;AACb,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACxC,gBAAgB;AAChB,MAAM,CAAC,MAAM,sCAAsC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"fluidRenderingParticleDepthPixelShader\";\nconst shader = `uniform mat4 projection;\rvarying vec2 uv;\rvarying vec3 viewPos;\rvarying float sphereRadius;\r#ifdef FLUIDRENDERING_VELOCITY\nvarying float velocityNorm;\r#endif\nvoid main(void) {\rvec3 normal;\rnormal.xy=uv*2.0-1.0;\rfloat r2=dot(normal.xy,normal.xy);\rif (r2>1.0) discard;\rnormal.z=sqrt(1.0-r2);\r#ifndef FLUIDRENDERING_RHS\nnormal.z=-normal.z;\r#endif\nvec4 realViewPos=vec4(viewPos+normal*sphereRadius,1.0);\rvec4 clipSpacePos=projection*realViewPos;\r#ifdef WEBGPU\ngl_FragDepth=clipSpacePos.z/clipSpacePos.w;\r#else\ngl_FragDepth=(clipSpacePos.z/clipSpacePos.w)*0.5+0.5;\r#endif\n#ifdef FLUIDRENDERING_RHS\nrealViewPos.z=-realViewPos.z;\r#endif\n#ifdef FLUIDRENDERING_VELOCITY\nglFragColor=vec4(realViewPos.z,velocityNorm,0.,1.);\r#else\nglFragColor=vec4(realViewPos.z,0.,0.,1.);\r#endif\n}\r`;\n// Sideeffect\nShaderStore.ShadersStore[name] = shader;\n/** @internal */\nexport const fluidRenderingParticleDepthPixelShader = { name, shader };\n"]}
|
|
@@ -14,7 +14,10 @@ uniform float minimumThickness;
|
|
|
14
14
|
uniform samplerCube reflectionSampler;
|
|
15
15
|
#if defined(FLUIDRENDERING_DEBUG) && defined(FLUIDRENDERING_DEBUG_TEXTURE)
|
|
16
16
|
uniform sampler2D debugSampler;
|
|
17
|
-
uniform mat4 viewMatrix;
|
|
17
|
+
uniform mat4 viewMatrix;
|
|
18
|
+
ndc.z=-projectionMatrix[2].z+projectionMatrix[3].z/depth;
|
|
19
|
+
ndc.z=projectionMatrix[2].z+projectionMatrix[3].z/depth;
|
|
20
|
+
ndc.w=1.0;
|
|
18
21
|
vec4 color=texture2D(debugSampler,texCoord);
|
|
19
22
|
glFragColor=vec4(color.rgb/vec3(2.0),1.);
|
|
20
23
|
glFragColor=vec4(color.rgb,1.);
|
|
@@ -25,7 +28,9 @@ float bgDepth=texture2D(bgDepthSampler,texCoord).x;
|
|
|
25
28
|
vec3 backColor=texture2D(textureSampler,texCoord).rgb;
|
|
26
29
|
if (depth>=cameraFar || depth<=0. || thickness<=minimumThickness) {
|
|
27
30
|
if (depth>=cameraFar || depth<=0. || bgDepth<=depthNonLinear) {
|
|
28
|
-
glFragColor=vec4(backColor,1.);
|
|
31
|
+
glFragColor=vec4(backColor,1.);
|
|
32
|
+
normal=-normal;
|
|
33
|
+
#ifndef WEBGPU
|
|
29
34
|
if(isnan(normal.x) || isnan(normal.y) || isnan(normal.z) || isinf(normal.x) || isinf(normal.y) || isinf(normal.z)) {
|
|
30
35
|
#if defined(FLUIDRENDERING_DEBUG) && defined(FLUIDRENDERING_DEBUG_SHOWNORMAL)
|
|
31
36
|
glFragColor=vec4(normal*0.5+0.5,1.0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fluidRenderingRender.fragment.js","sourceRoot":"","sources":["../../../../lts/core/generated/Shaders/fluidRenderingRender.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,iCAAiC,CAAC;AAC/C,MAAM,MAAM,GAAG
|
|
1
|
+
{"version":3,"file":"fluidRenderingRender.fragment.js","sourceRoot":"","sources":["../../../../lts/core/generated/Shaders/fluidRenderingRender.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,iCAAiC,CAAC;AAC/C,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4Id,CAAC;AACF,aAAa;AACb,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACxC,gBAAgB;AAChB,MAAM,CAAC,MAAM,+BAA+B,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"fluidRenderingRenderPixelShader\";\nconst shader = `#define IOR 1.333\n#define ETA 1.0/IOR\n#define F0 0.02\nuniform sampler2D textureSampler;\runiform sampler2D depthSampler;\r#ifdef FLUIDRENDERING_DIFFUSETEXTURE\nuniform sampler2D diffuseSampler;\r#else\nuniform vec3 diffuseColor;\r#endif\n#ifdef FLUIDRENDERING_FIXED_THICKNESS\nuniform float thickness;\runiform sampler2D bgDepthSampler;\r#else\nuniform float minimumThickness;\runiform sampler2D thicknessSampler;\r#endif\n#ifdef FLUIDRENDERING_ENVIRONMENT\nuniform samplerCube reflectionSampler;\r#endif\n#if defined(FLUIDRENDERING_DEBUG) && defined(FLUIDRENDERING_DEBUG_TEXTURE)\nuniform sampler2D debugSampler;\r#endif\nuniform mat4 viewMatrix;\runiform mat4 projectionMatrix;\runiform mat4 invProjectionMatrix;\runiform vec2 texelSize;\runiform vec3 dirLight;\runiform float cameraFar;\runiform float density;\runiform float refractionStrength;\runiform float fresnelClamp;\runiform float specularPower;\rvarying vec2 vUV;\rvec3 computeViewPosFromUVDepth(vec2 texCoord,float depth) {\rvec4 ndc;\rndc.xy=texCoord*2.0-1.0;\r#ifdef FLUIDRENDERING_RHS\nndc.z=-projectionMatrix[2].z+projectionMatrix[3].z/depth;\r#else\nndc.z=projectionMatrix[2].z+projectionMatrix[3].z/depth;\r#endif\nndc.w=1.0;\rvec4 eyePos=invProjectionMatrix*ndc;\reyePos.xyz/=eyePos.w;\rreturn eyePos.xyz;\r}\rvec3 getViewPosFromTexCoord(vec2 texCoord) {\rfloat depth=textureLod(depthSampler,texCoord,0.).x;\rreturn computeViewPosFromUVDepth(texCoord,depth);\r}\rvoid main(void) {\rvec2 texCoord=vUV;\r#if defined(FLUIDRENDERING_DEBUG) && defined(FLUIDRENDERING_DEBUG_TEXTURE)\nvec4 color=texture2D(debugSampler,texCoord);\r#ifdef FLUIDRENDERING_DEBUG_DEPTH\nglFragColor=vec4(color.rgb/vec3(2.0),1.);\rif (color.r>0.999 && color.g>0.999) {\rglFragColor=texture2D(textureSampler,texCoord);\r}\r#else\nglFragColor=vec4(color.rgb,1.);\rif (color.r<0.001 && color.g<0.001 && color.b<0.001) {\rglFragColor=texture2D(textureSampler,texCoord);\r}\r#endif\nreturn;\r#endif\nvec2 depthVel=textureLod(depthSampler,texCoord,0.).rg;\rfloat depth=depthVel.r;\r#ifndef FLUIDRENDERING_FIXED_THICKNESS\nfloat thickness=texture2D(thicknessSampler,texCoord).x;\r#else\nfloat bgDepth=texture2D(bgDepthSampler,texCoord).x;\rfloat depthNonLinear=projectionMatrix[2].z+projectionMatrix[3].z/depth;\rdepthNonLinear=depthNonLinear*0.5+0.5;\r#endif\nvec3 backColor=texture2D(textureSampler,texCoord).rgb;\r#ifndef FLUIDRENDERING_FIXED_THICKNESS\nif (depth>=cameraFar || depth<=0. || thickness<=minimumThickness) {\r#else\nif (depth>=cameraFar || depth<=0. || bgDepth<=depthNonLinear) {\r#endif\nglFragColor=vec4(backColor,1.);\rreturn;\r}\rvec3 viewPos=computeViewPosFromUVDepth(texCoord,depth);\rvec3 ddx=getViewPosFromTexCoord(texCoord+vec2(texelSize.x,0.))-viewPos;\rvec3 ddy=getViewPosFromTexCoord(texCoord+vec2(0.,texelSize.y))-viewPos;\rvec3 ddx2=viewPos-getViewPosFromTexCoord(texCoord+vec2(-texelSize.x,0.));\rif (abs(ddx.z)>abs(ddx2.z)) {\rddx=ddx2;\r}\rvec3 ddy2=viewPos-getViewPosFromTexCoord(texCoord+vec2(0.,-texelSize.y));\rif (abs(ddy.z)>abs(ddy2.z)) {\rddy=ddy2;\r}\rvec3 normal=normalize(cross(ddy,ddx));\r#ifdef FLUIDRENDERING_RHS\nnormal=-normal;\r#endif\n#ifndef WEBGPU\nif(isnan(normal.x) || isnan(normal.y) || isnan(normal.z) || isinf(normal.x) || isinf(normal.y) || isinf(normal.z)) {\rnormal=vec3(0.,0.,-1.);\r}\r#endif\n#if defined(FLUIDRENDERING_DEBUG) && defined(FLUIDRENDERING_DEBUG_SHOWNORMAL)\nglFragColor=vec4(normal*0.5+0.5,1.0);\rreturn;\r#endif\nvec3 rayDir=normalize(viewPos); \r#ifdef FLUIDRENDERING_DIFFUSETEXTURE\nvec3 diffuseColor=texture2D(diffuseSampler,texCoord).rgb;\r#endif\nvec3 lightDir=normalize(vec3(viewMatrix*vec4(-dirLight,0.)));\rvec3 H =normalize(lightDir-rayDir);\rfloat specular=pow(max(0.0,dot(H,normal)),specularPower);\r#ifdef FLUIDRENDERING_DEBUG_DIFFUSERENDERING\nfloat diffuse =max(0.0,dot(lightDir,normal))*1.0;\rglFragColor=vec4(vec3(0.1) /*ambient*/+vec3(0.42,0.50,1.00)*diffuse+vec3(0,0,0.2)+specular,1.);\rreturn;\r#endif\nvec3 refractionDir=refract(rayDir,normal,ETA);\rvec3 transmitted=(texture2D(textureSampler,vec2(texCoord+refractionDir.xy*thickness*refractionStrength)).rgb);\rvec3 transmittance=exp(-density*thickness*(1.0-diffuseColor)); \rvec3 refractionColor=transmitted*transmittance;\r#ifdef FLUIDRENDERING_ENVIRONMENT\nvec3 reflectionDir=reflect(rayDir,normal);\rvec3 reflectionColor=(textureCube(reflectionSampler,reflectionDir).rgb);\rfloat fresnel=clamp(F0+(1.0-F0)*pow(1.0-dot(normal,-rayDir),5.0),0.,fresnelClamp);\rvec3 finalColor=mix(refractionColor,reflectionColor,fresnel)+specular;\r#else\nvec3 finalColor=refractionColor+specular;\r#endif\n#ifdef FLUIDRENDERING_VELOCITY\nfloat velocity=depthVel.g;\rfinalColor=mix(finalColor,vec3(1.0),smoothstep(0.3,1.0,velocity/6.0));\r#endif\nglFragColor=vec4(finalColor,1.);\r}\r`;\n// Sideeffect\nShaderStore.ShadersStore[name] = shader;\n/** @internal */\nexport const fluidRenderingRenderPixelShader = { name, shader };\n"]}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import "./ShadersInclude/clipPlaneFragmentDeclaration";
|
|
1
2
|
import "./ShadersInclude/mrtFragmentDeclaration";
|
|
2
3
|
import "./ShadersInclude/bumpFragmentMainFunctions";
|
|
3
4
|
import "./ShadersInclude/bumpFragmentFunctions";
|
|
4
5
|
import "./ShadersInclude/helperFunctions";
|
|
6
|
+
import "./ShadersInclude/clipPlaneFragment";
|
|
5
7
|
import "./ShadersInclude/bumpFragment";
|
|
6
8
|
/** @internal */
|
|
7
9
|
export declare const geometryPixelShader: {
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
// Do not edit.
|
|
2
2
|
import { ShaderStore } from "../Engines/shaderStore.js";
|
|
3
|
+
import "./ShadersInclude/clipPlaneFragmentDeclaration.js";
|
|
3
4
|
import "./ShadersInclude/mrtFragmentDeclaration.js";
|
|
4
5
|
import "./ShadersInclude/bumpFragmentMainFunctions.js";
|
|
5
6
|
import "./ShadersInclude/bumpFragmentFunctions.js";
|
|
6
7
|
import "./ShadersInclude/helperFunctions.js";
|
|
8
|
+
import "./ShadersInclude/clipPlaneFragment.js";
|
|
7
9
|
import "./ShadersInclude/bumpFragment.js";
|
|
8
10
|
const name = "geometryPixelShader";
|
|
9
11
|
const shader = `#extension GL_EXT_draw_buffers : require
|
|
@@ -37,11 +39,13 @@ uniform float glossiness;
|
|
|
37
39
|
#endif
|
|
38
40
|
#ifdef ALPHATEST
|
|
39
41
|
uniform sampler2D diffuseSampler;
|
|
42
|
+
#include<clipPlaneFragmentDeclaration>
|
|
40
43
|
#include<mrtFragmentDeclaration>[RENDER_TARGET_COUNT]
|
|
41
44
|
#include<bumpFragmentMainFunctions>
|
|
42
45
|
#include<bumpFragmentFunctions>
|
|
43
46
|
#include<helperFunctions>
|
|
44
|
-
void main() {
|
|
47
|
+
void main() {
|
|
48
|
+
#ifdef ALPHATEST
|
|
45
49
|
if (texture2D(diffuseSampler,vUV).a<0.4)
|
|
46
50
|
vec3 normalOutput;
|
|
47
51
|
vec3 normalW=normalize(vNormalW);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geometry.fragment.js","sourceRoot":"","sources":["../../../../lts/core/generated/Shaders/geometry.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,yCAAyC,CAAC;AACjD,OAAO,4CAA4C,CAAC;AACpD,OAAO,wCAAwC,CAAC;AAChD,OAAO,kCAAkC,CAAC;AAC1C,OAAO,+BAA+B,CAAC;AAEvC,MAAM,IAAI,GAAG,qBAAqB,CAAC;AACnC,MAAM,MAAM,GAAG
|
|
1
|
+
{"version":3,"file":"geometry.fragment.js","sourceRoot":"","sources":["../../../../lts/core/generated/Shaders/geometry.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,+CAA+C,CAAC;AACvD,OAAO,yCAAyC,CAAC;AACjD,OAAO,4CAA4C,CAAC;AACpD,OAAO,wCAAwC,CAAC;AAChD,OAAO,kCAAkC,CAAC;AAC1C,OAAO,oCAAoC,CAAC;AAC5C,OAAO,+BAA+B,CAAC;AAEvC,MAAM,IAAI,GAAG,qBAAqB,CAAC;AACnC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsJd,CAAC;AACF,aAAa;AACb,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACxC,gBAAgB;AAChB,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/clipPlaneFragmentDeclaration\";\nimport \"./ShadersInclude/mrtFragmentDeclaration\";\nimport \"./ShadersInclude/bumpFragmentMainFunctions\";\nimport \"./ShadersInclude/bumpFragmentFunctions\";\nimport \"./ShadersInclude/helperFunctions\";\nimport \"./ShadersInclude/clipPlaneFragment\";\nimport \"./ShadersInclude/bumpFragment\";\n\nconst name = \"geometryPixelShader\";\nconst shader = `#extension GL_EXT_draw_buffers : require\n#if defined(BUMP) || !defined(NORMAL)\n#extension GL_OES_standard_derivatives : enable\n#endif\nprecision highp float;\r#ifdef BUMP\nvarying mat4 vWorldView;\rvarying vec3 vNormalW;\r#else\nvarying vec3 vNormalV;\r#endif\nvarying vec4 vViewPos;\r#if defined(POSITION) || defined(BUMP)\nvarying vec3 vPositionW;\r#endif\n#ifdef VELOCITY\nvarying vec4 vCurrentPosition;\rvarying vec4 vPreviousPosition;\r#endif\n#ifdef NEED_UV\nvarying vec2 vUV;\r#endif\n#ifdef BUMP\nuniform vec3 vBumpInfos;\runiform vec2 vTangentSpaceParams;\r#endif\n#if defined(REFLECTIVITY)\n#if defined(ORMTEXTURE) || defined(SPECULARGLOSSINESSTEXTURE) || defined(REFLECTIVITYTEXTURE)\nuniform sampler2D reflectivitySampler;\rvarying vec2 vReflectivityUV;\r#endif\n#ifdef ALBEDOTEXTURE\nvarying vec2 vAlbedoUV;\runiform sampler2D albedoSampler;\r#endif\n#ifdef REFLECTIVITYCOLOR\nuniform vec3 reflectivityColor;\r#endif\n#ifdef ALBEDOCOLOR\nuniform vec3 albedoColor;\r#endif\n#ifdef METALLIC\nuniform float metallic;\r#endif\n#ifdef ROUGHNESS\nuniform float glossiness;\r#endif\n#endif\n#ifdef ALPHATEST\nuniform sampler2D diffuseSampler;\r#endif\n#include<clipPlaneFragmentDeclaration>\n#include<mrtFragmentDeclaration>[RENDER_TARGET_COUNT]\n#include<bumpFragmentMainFunctions>\n#include<bumpFragmentFunctions>\n#include<helperFunctions>\nvoid main() {\r#include<clipPlaneFragment>\n#ifdef ALPHATEST\nif (texture2D(diffuseSampler,vUV).a<0.4)\rdiscard;\r#endif\nvec3 normalOutput;\r#ifdef BUMP\nvec3 normalW=normalize(vNormalW);\r#include<bumpFragment>\nnormalOutput=normalize(vec3(vWorldView*vec4(normalW,0.0)));\r#else\nnormalOutput=normalize(vNormalV);\r#endif\n#ifdef PREPASS\n#ifdef PREPASS_DEPTH\ngl_FragData[DEPTH_INDEX]=vec4(vViewPos.z/vViewPos.w,0.0,0.0,1.0);\r#endif\n#ifdef PREPASS_NORMAL\ngl_FragData[NORMAL_INDEX]=vec4(normalOutput,1.0);\r#endif\n#else\ngl_FragData[0]=vec4(vViewPos.z/vViewPos.w,0.0,0.0,1.0);\rgl_FragData[1]=vec4(normalOutput,1.0);\r#endif\n#ifdef POSITION\ngl_FragData[POSITION_INDEX]=vec4(vPositionW,1.0);\r#endif\n#ifdef VELOCITY\nvec2 a=(vCurrentPosition.xy/vCurrentPosition.w)*0.5+0.5;\rvec2 b=(vPreviousPosition.xy/vPreviousPosition.w)*0.5+0.5;\rvec2 velocity=abs(a-b);\rvelocity=vec2(pow(velocity.x,1.0/3.0),pow(velocity.y,1.0/3.0))*sign(a-b)*0.5+0.5;\rgl_FragData[VELOCITY_INDEX]=vec4(velocity,0.0,1.0);\r#endif\n#ifdef REFLECTIVITY\nvec4 reflectivity=vec4(1.0,1.0,1.0,1.0);\r#ifdef METALLICWORKFLOW\nfloat metal=1.0;\rfloat roughness=1.0;\r#ifdef ORMTEXTURE\nmetal*=texture2D(reflectivitySampler,vReflectivityUV).b;\rroughness*=texture2D(reflectivitySampler,vReflectivityUV).g;\r#endif\n#ifdef METALLIC\nmetal*=metallic;\r#endif\n#ifdef ROUGHNESS\nroughness*=(1.0-glossiness); \r#endif\nreflectivity.a-=roughness;\rvec3 color=vec3(1.0);\r#ifdef ALBEDOTEXTURE\ncolor=texture2D(albedoSampler,vAlbedoUV).rgb;\r#ifdef GAMMAALBEDO\ncolor=toLinearSpace(color);\r#endif\n#endif\n#ifdef ALBEDOCOLOR\ncolor*=albedoColor.xyz;\r#endif\nreflectivity.rgb=mix(vec3(0.04),color,metal);\r#else\n#ifdef SPECULARGLOSSINESSTEXTURE\nreflectivity=texture2D(reflectivitySampler,vReflectivityUV);\r#ifdef GAMMAREFLECTIVITYTEXTURE\nreflectivity.rgb=toLinearSpace(reflectivity.rgb);\r#endif\n#ifdef GLOSSINESSS\nreflectivity.a*=glossiness;\r#endif\n#else \n#ifdef REFLECTIVITYTEXTURE\nreflectivity.rbg=texture2D(reflectivitySampler,vReflectivityUV).rbg;\r#ifdef GAMMAREFLECTIVITYTEXTURE\nreflectivity.rgb=toLinearSpace(reflectivity.rgb);\r#endif\n#else\n#ifdef REFLECTIVITYCOLOR\nreflectivity.rgb=reflectivityColor.xyz;\rreflectivity.a=1.0;\r#endif\n#endif \n#ifdef GLOSSINESSS\nreflectivity.a=glossiness; \r#else\nreflectivity.a=1.0; \r#endif\n#endif\n#endif\nreflectivity.rgb=toGammaSpace(reflectivity.rgb); \rgl_FragData[REFLECTIVITY_INDEX]=reflectivity;\r#endif\n}\r`;\n// Sideeffect\nShaderStore.ShadersStore[name] = shader;\n/** @internal */\nexport const geometryPixelShader = { name, shader };\n"]}
|
|
@@ -5,11 +5,13 @@ import "./ShadersInclude/morphTargetsVertexDeclaration";
|
|
|
5
5
|
import "./ShadersInclude/instancesDeclaration";
|
|
6
6
|
import "./ShadersInclude/geometryVertexDeclaration";
|
|
7
7
|
import "./ShadersInclude/geometryUboDeclaration";
|
|
8
|
+
import "./ShadersInclude/clipPlaneVertexDeclaration";
|
|
8
9
|
import "./ShadersInclude/morphTargetsVertexGlobal";
|
|
9
10
|
import "./ShadersInclude/morphTargetsVertex";
|
|
10
11
|
import "./ShadersInclude/instancesVertex";
|
|
11
12
|
import "./ShadersInclude/bonesVertex";
|
|
12
13
|
import "./ShadersInclude/bakedVertexAnimation";
|
|
14
|
+
import "./ShadersInclude/clipPlaneVertex";
|
|
13
15
|
import "./ShadersInclude/bumpVertex";
|
|
14
16
|
/** @internal */
|
|
15
17
|
export declare const geometryVertexShader: {
|