@babylonjs/core 7.32.2 → 7.32.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/Engines/abstractEngine.js +2 -2
  2. package/Engines/abstractEngine.js.map +1 -1
  3. package/Materials/Node/Blocks/Input/inputBlock.js +17 -9
  4. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  5. package/Materials/Node/nodeMaterial.js +3 -0
  6. package/Materials/Node/nodeMaterial.js.map +1 -1
  7. package/Misc/webRequest.d.ts +4 -0
  8. package/Misc/webRequest.js +6 -0
  9. package/Misc/webRequest.js.map +1 -1
  10. package/Rendering/IBLShadows/iblShadowsAccumulationPass.d.ts +35 -11
  11. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js +131 -117
  12. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js.map +1 -1
  13. package/Rendering/IBLShadows/iblShadowsImportanceSamplingRenderer.js +0 -1
  14. package/Rendering/IBLShadows/iblShadowsImportanceSamplingRenderer.js.map +1 -1
  15. package/Rendering/IBLShadows/iblShadowsPluginMaterial.d.ts +60 -0
  16. package/Rendering/IBLShadows/iblShadowsPluginMaterial.js +166 -0
  17. package/Rendering/IBLShadows/iblShadowsPluginMaterial.js.map +1 -0
  18. package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +97 -56
  19. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +356 -308
  20. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  21. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.d.ts +20 -6
  22. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js +67 -35
  23. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js.map +1 -1
  24. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.d.ts +9 -4
  25. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +84 -66
  26. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
  27. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.d.ts +31 -6
  28. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +108 -60
  29. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
  30. package/Rendering/geometryBufferRenderer.d.ts +15 -0
  31. package/Rendering/geometryBufferRenderer.js +48 -5
  32. package/Rendering/geometryBufferRenderer.js.map +1 -1
  33. package/Shaders/ShadersInclude/instancesDeclaration.js +2 -4
  34. package/Shaders/ShadersInclude/instancesDeclaration.js.map +1 -1
  35. package/Shaders/ShadersInclude/instancesVertex.js +3 -6
  36. package/Shaders/ShadersInclude/instancesVertex.js.map +1 -1
  37. package/Shaders/geometry.fragment.js +5 -1
  38. package/Shaders/geometry.fragment.js.map +1 -1
  39. package/Shaders/geometry.vertex.js +3 -3
  40. package/Shaders/geometry.vertex.js.map +1 -1
  41. package/Shaders/iblShadowAccumulation.fragment.js +7 -11
  42. package/Shaders/iblShadowAccumulation.fragment.js.map +1 -1
  43. package/Shaders/iblShadowGBufferDebug.fragment.js +2 -3
  44. package/Shaders/iblShadowGBufferDebug.fragment.js.map +1 -1
  45. package/Shaders/iblShadowSpatialBlur.fragment.js +5 -5
  46. package/Shaders/iblShadowSpatialBlur.fragment.js.map +1 -1
  47. package/Shaders/iblShadowVoxelTracing.fragment.js +31 -32
  48. package/Shaders/iblShadowVoxelTracing.fragment.js.map +1 -1
  49. package/Shaders/iblShadowsCombine.fragment.js +2 -2
  50. package/Shaders/iblShadowsCombine.fragment.js.map +1 -1
  51. package/ShadersWGSL/ShadersInclude/instancesDeclaration.js +2 -4
  52. package/ShadersWGSL/ShadersInclude/instancesDeclaration.js.map +1 -1
  53. package/ShadersWGSL/ShadersInclude/instancesVertex.js +3 -6
  54. package/ShadersWGSL/ShadersInclude/instancesVertex.js.map +1 -1
  55. package/ShadersWGSL/geometry.fragment.js +7 -1
  56. package/ShadersWGSL/geometry.fragment.js.map +1 -1
  57. package/ShadersWGSL/geometry.vertex.js +3 -3
  58. package/ShadersWGSL/geometry.vertex.js.map +1 -1
  59. package/ShadersWGSL/iblShadowAccumulation.fragment.js +5 -10
  60. package/ShadersWGSL/iblShadowAccumulation.fragment.js.map +1 -1
  61. package/ShadersWGSL/iblShadowGBufferDebug.fragment.js +2 -3
  62. package/ShadersWGSL/iblShadowGBufferDebug.fragment.js.map +1 -1
  63. package/ShadersWGSL/iblShadowSpatialBlur.fragment.js +5 -5
  64. package/ShadersWGSL/iblShadowSpatialBlur.fragment.js.map +1 -1
  65. package/ShadersWGSL/iblShadowVoxelTracing.fragment.js +45 -33
  66. package/ShadersWGSL/iblShadowVoxelTracing.fragment.js.map +1 -1
  67. package/ShadersWGSL/iblShadowsCombine.fragment.js +6 -2
  68. package/ShadersWGSL/iblShadowsCombine.fragment.js.map +1 -1
  69. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"iblShadowsVoxelTracingPass.js","sourceRoot":"","sources":["../../../../../dev/core/src/Rendering/IBLShadows/iblShadowsVoxelTracingPass.ts"],"names":[],"mappings":"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","sourcesContent":["import { Constants } from \"../../Engines/constants\";\r\nimport type { AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Matrix, Vector2, Vector4 } from \"../../Maths/math.vector\";\r\nimport { PostProcess } from \"../../PostProcesses/postProcess\";\r\nimport type { PostProcessOptions } from \"../../PostProcesses/postProcess\";\r\nimport type { IblShadowsRenderPipeline } from \"./iblShadowsRenderPipeline\";\r\nimport type { Effect } from \"../../Materials/effect\";\r\nimport type { Camera } from \"../../Cameras/camera\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Build cdf maps for IBL importance sampling during IBL shadow computation.\r\n * This should not be instanciated directly, as it is part of a scene component\r\n * @internal\r\n */\r\nexport class _IblShadowsVoxelTracingPass {\r\n private _scene: Scene;\r\n private _engine: AbstractEngine;\r\n private _renderPipeline: IblShadowsRenderPipeline;\r\n private _voxelShadowOpacity: number = 1.0;\r\n /**\r\n * The opacity of the shadow cast from the voxel grid\r\n */\r\n public get voxelShadowOpacity(): number {\r\n return this._voxelShadowOpacity;\r\n }\r\n /**\r\n * The opacity of the shadow cast from the voxel grid\r\n */\r\n public set voxelShadowOpacity(value: number) {\r\n this._voxelShadowOpacity = value;\r\n }\r\n private _sssSamples: number = 16;\r\n private _sssStride: number = 8;\r\n private _sssMaxDist: number = 0.05;\r\n private _sssThickness: number = 0.5;\r\n\r\n private _ssShadowOpacity: number = 1.0;\r\n /**\r\n * The opacity of the screen-space shadow\r\n */\r\n public get ssShadowOpacity(): number {\r\n return this._ssShadowOpacity;\r\n }\r\n /**\r\n * The opacity of the screen-space shadow\r\n */\r\n public set ssShadowOpacity(value: number) {\r\n this._ssShadowOpacity = value;\r\n }\r\n\r\n /**\r\n * The number of samples used in the screen space shadow pass.\r\n */\r\n public get sssSamples(): number {\r\n return this._sssSamples;\r\n }\r\n\r\n /**\r\n * The number of samples used in the screen space shadow pass.\r\n */\r\n public set sssSamples(value: number) {\r\n this._sssSamples = value;\r\n }\r\n\r\n /**\r\n * The stride used in the screen space shadow pass. This controls the distance between samples.\r\n */\r\n public get sssStride(): number {\r\n return this._sssStride;\r\n }\r\n\r\n /**\r\n * The stride used in the screen space shadow pass. This controls the distance between samples.\r\n */\r\n public set sssStride(value: number) {\r\n this._sssStride = value;\r\n }\r\n\r\n /**\r\n * The maximum distance that the screen-space shadow will be able to occlude.\r\n */\r\n public get sssMaxDist(): number {\r\n return this._sssMaxDist;\r\n }\r\n\r\n /**\r\n * The maximum distance that the screen-space shadow will be able to occlude.\r\n */\r\n public set sssMaxDist(value: number) {\r\n this._sssMaxDist = value;\r\n }\r\n\r\n /**\r\n * The thickness of the screen-space shadow\r\n */\r\n public get sssThickness(): number {\r\n return this._sssThickness;\r\n }\r\n\r\n /**\r\n * The thickness of the screen-space shadow\r\n */\r\n public set sssThickness(value: number) {\r\n this._sssThickness = value;\r\n }\r\n\r\n private _outputPP: PostProcess;\r\n private _cameraInvView: Matrix = Matrix.Identity();\r\n private _cameraInvProj: Matrix = Matrix.Identity();\r\n private _invWorldScaleMatrix: Matrix = Matrix.Identity();\r\n private _frameId: number = 0;\r\n private _sampleDirections: number = 4;\r\n\r\n /**\r\n * The number of directions to sample for the voxel tracing.\r\n */\r\n public get sampleDirections(): number {\r\n return this._sampleDirections;\r\n }\r\n\r\n /**\r\n * The number of directions to sample for the voxel tracing.\r\n */\r\n public set sampleDirections(value: number) {\r\n this._sampleDirections = value;\r\n }\r\n\r\n /**\r\n * The current rotation of the environment map, in radians.\r\n */\r\n public get envRotation(): number {\r\n return this._envRotation;\r\n }\r\n\r\n /**\r\n * The current rotation of the environment map, in radians.\r\n */\r\n public set envRotation(value: number) {\r\n this._envRotation = value;\r\n }\r\n\r\n /** Enable the debug view for this pass */\r\n public debugEnabled: boolean = false;\r\n\r\n /**\r\n * Gets the pass post process\r\n * @returns The post process\r\n */\r\n public getPassPP(): PostProcess {\r\n return this._outputPP;\r\n }\r\n\r\n /**\r\n * Gets the debug pass post process. This will create the resources for the pass\r\n * if they don't already exist.\r\n * @returns The post process\r\n */\r\n public getDebugPassPP(): PostProcess {\r\n if (!this._debugPassPP) {\r\n this._createDebugPass();\r\n }\r\n return this._debugPassPP;\r\n }\r\n\r\n private _debugPassName: string = \"Voxel Tracing Debug Pass\";\r\n\r\n /**\r\n * The name of the debug pass\r\n */\r\n public get debugPassName(): string {\r\n return this._debugPassName;\r\n }\r\n\r\n /** The default rotation of the environment map will align the shadows with the default lighting orientation */\r\n private _envRotation: number = 0.0;\r\n private _downscale: number = 1.0;\r\n\r\n /**\r\n * Set the matrix to use for scaling the world space to voxel space\r\n * @param matrix The matrix to use for scaling the world space to voxel space\r\n */\r\n public setWorldScaleMatrix(matrix: Matrix) {\r\n this._invWorldScaleMatrix = matrix;\r\n }\r\n\r\n private _debugVoxelMarchEnabled: boolean = false;\r\n private _debugPassPP: PostProcess;\r\n private _debugSizeParams: Vector4 = new Vector4(0.0, 0.0, 0.0, 0.0);\r\n\r\n /**\r\n * Sets params that control the position and scaling of the debug display on the screen.\r\n * @param x Screen X offset of the debug display (0-1)\r\n * @param y Screen Y offset of the debug display (0-1)\r\n * @param widthScale X scale of the debug display (0-1)\r\n * @param heightScale Y scale of the debug display (0-1)\r\n */\r\n public setDebugDisplayParams(x: number, y: number, widthScale: number, heightScale: number) {\r\n this._debugSizeParams.set(x, y, widthScale, heightScale);\r\n }\r\n\r\n /**\r\n * Creates the debug post process effect for this pass\r\n */\r\n private _createDebugPass() {\r\n const isWebGPU = this._engine.isWebGPU;\r\n if (!this._debugPassPP) {\r\n const debugOptions: PostProcessOptions = {\r\n width: this._engine.getRenderWidth(),\r\n height: this._engine.getRenderHeight(),\r\n uniforms: [\"sizeParams\"],\r\n samplers: [\"debugSampler\"],\r\n engine: this._engine,\r\n reusable: false,\r\n shaderLanguage: isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n extraInitializations: (useWebGPU: boolean, list: Promise<any>[]) => {\r\n if (useWebGPU) {\r\n list.push(import(\"../../ShadersWGSL/iblShadowDebug.fragment\"));\r\n } else {\r\n list.push(import(\"../../Shaders/iblShadowDebug.fragment\"));\r\n }\r\n },\r\n };\r\n this._debugPassPP = new PostProcess(this.debugPassName, \"iblShadowDebug\", debugOptions);\r\n this._debugPassPP.autoClear = false;\r\n this._debugPassPP.onApplyObservable.add((effect) => {\r\n // update the caustic texture with what we just rendered.\r\n effect.setTextureFromPostProcessOutput(\"debugSampler\", this._outputPP);\r\n effect.setVector4(\"sizeParams\", this._debugSizeParams);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Instantiates the shadow voxel-tracing pass\r\n * @param scene Scene to attach to\r\n * @param iblShadowsRenderPipeline The IBL shadows render pipeline\r\n * @returns The shadow voxel-tracing pass\r\n */\r\n constructor(scene: Scene, iblShadowsRenderPipeline: IblShadowsRenderPipeline) {\r\n this._scene = scene;\r\n this._engine = scene.getEngine();\r\n this._renderPipeline = iblShadowsRenderPipeline;\r\n this._createTextures();\r\n }\r\n\r\n private _createTextures() {\r\n let defines = \"\";\r\n if (this._scene.useRightHandedSystem) {\r\n defines += \"#define RIGHT_HANDED\\n\";\r\n }\r\n if (this._debugVoxelMarchEnabled) {\r\n defines += \"#define VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION 1u\\n\";\r\n }\r\n const isWebGPU = this._engine.isWebGPU;\r\n const ppOptions: PostProcessOptions = {\r\n width: this._engine.getRenderWidth(),\r\n height: this._engine.getRenderHeight(),\r\n textureFormat: Constants.TEXTUREFORMAT_RG,\r\n textureType: Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n samplingMode: Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n uniforms: [\"viewMtx\", \"projMtx\", \"invProjMtx\", \"invViewMtx\", \"wsNormalizationMtx\", \"shadowParameters\", \"offsetDataParameters\", \"sssParameters\", \"shadowOpacity\"],\r\n samplers: [\"voxelGridSampler\", \"icdfySampler\", \"icdfxSampler\", \"blueNoiseSampler\", \"worldNormalSampler\", \"depthSampler\", \"worldPositionSampler\"],\r\n defines: defines,\r\n engine: this._engine,\r\n reusable: false,\r\n shaderLanguage: isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n extraInitializations: (useWebGPU: boolean, list: Promise<any>[]) => {\r\n if (useWebGPU) {\r\n list.push(import(\"../../ShadersWGSL/iblShadowVoxelTracing.fragment\"));\r\n } else {\r\n list.push(import(\"../../Shaders/iblShadowVoxelTracing.fragment\"));\r\n }\r\n },\r\n };\r\n this._outputPP = new PostProcess(\"voxelTracingPass\", \"iblShadowVoxelTracing\", ppOptions);\r\n this._outputPP.autoClear = false;\r\n this._outputPP.onApplyObservable.add((effect) => {\r\n this._updatePostProcess(effect, this._scene.activeCamera!);\r\n });\r\n }\r\n\r\n private _updatePostProcess(effect: Effect, camera: Camera) {\r\n if (this._scene.useRightHandedSystem) {\r\n effect.defines = \"#define RIGHT_HANDED\\n\";\r\n }\r\n effect.setMatrix(\"viewMtx\", camera.getViewMatrix());\r\n effect.setMatrix(\"projMtx\", camera.getProjectionMatrix());\r\n camera.getProjectionMatrix().invertToRef(this._cameraInvProj);\r\n camera.getViewMatrix().invertToRef(this._cameraInvView);\r\n effect.setMatrix(\"invProjMtx\", this._cameraInvProj);\r\n effect.setMatrix(\"invViewMtx\", this._cameraInvView);\r\n effect.setMatrix(\"wsNormalizationMtx\", this._invWorldScaleMatrix);\r\n\r\n this._frameId++;\r\n\r\n const downscaleSquared = this._downscale * this._downscale;\r\n let rotation = this._scene.useRightHandedSystem ? -(this._envRotation + 0.5 * Math.PI) : this._envRotation - 0.5 * Math.PI;\r\n rotation = rotation % (2.0 * Math.PI);\r\n effect.setVector4(\"shadowParameters\", new Vector4(this._sampleDirections, this._frameId / downscaleSquared, this._downscale, rotation));\r\n const offset = new Vector2(0.0, 0.0);\r\n const voxelGrid = this._renderPipeline!.getVoxelGridTexture();\r\n const highestMip = Math.floor(Math.log2(voxelGrid!.getSize().width));\r\n effect.setVector4(\"offsetDataParameters\", new Vector4(offset.x, offset.y, highestMip, 0.0));\r\n\r\n // SSS Options.\r\n effect.setVector4(\"sssParameters\", new Vector4(this._sssSamples, this._sssStride, this._sssMaxDist, this._sssThickness));\r\n effect.setVector4(\"shadowOpacity\", new Vector4(this._voxelShadowOpacity, this._ssShadowOpacity, 0.0, 0.0));\r\n effect.setTexture(\"voxelGridSampler\", voxelGrid);\r\n effect.setTexture(\"blueNoiseSampler\", (this._renderPipeline as any)._noiseTexture);\r\n effect.setTexture(\"icdfySampler\", this._renderPipeline!.getIcdfyTexture());\r\n effect.setTexture(\"icdfxSampler\", this._renderPipeline!.getIcdfxTexture());\r\n if (this._debugVoxelMarchEnabled) {\r\n effect.defines += \"#define VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION 1u\\n\";\r\n }\r\n\r\n const prePassRenderer = this._scene.prePassRenderer;\r\n if (prePassRenderer) {\r\n const wnormalIndex = prePassRenderer.getIndex(Constants.PREPASS_WORLD_NORMAL_TEXTURE_TYPE);\r\n const clipDepthIndex = prePassRenderer.getIndex(Constants.PREPASS_SCREENSPACE_DEPTH_TEXTURE_TYPE);\r\n const wPositionIndex = prePassRenderer.getIndex(Constants.PREPASS_POSITION_TEXTURE_TYPE);\r\n if (wnormalIndex >= 0) effect.setTexture(\"worldNormalSampler\", prePassRenderer.getRenderTarget().textures[wnormalIndex]);\r\n if (clipDepthIndex >= 0) effect.setTexture(\"depthSampler\", prePassRenderer.getRenderTarget().textures[clipDepthIndex]);\r\n if (wPositionIndex >= 0) effect.setTexture(\"worldPositionSampler\", prePassRenderer.getRenderTarget().textures[wPositionIndex]);\r\n }\r\n }\r\n\r\n /**\r\n * Checks if the pass is ready\r\n * @returns true if the pass is ready\r\n */\r\n public isReady() {\r\n return (\r\n this._outputPP.isReady() &&\r\n !(this._debugPassPP && !this._debugPassPP.isReady()) &&\r\n this._renderPipeline!.getIcdfyTexture().isReady() &&\r\n this._renderPipeline!.getIcdfxTexture().isReady() &&\r\n this._renderPipeline!.getVoxelGridTexture().isReady()\r\n );\r\n }\r\n\r\n /**\r\n * Disposes the associated resources\r\n */\r\n public dispose() {\r\n this._outputPP.dispose();\r\n if (this._debugPassPP) {\r\n this._debugPassPP.dispose();\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"iblShadowsVoxelTracingPass.js","sourceRoot":"","sources":["../../../../../dev/core/src/Rendering/IBLShadows/iblShadowsVoxelTracingPass.ts"],"names":[],"mappings":"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","sourcesContent":["import { Constants } from \"../../Engines/constants\";\r\nimport type { AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Matrix, Vector4 } from \"../../Maths/math.vector\";\r\nimport { PostProcess } from \"../../PostProcesses/postProcess\";\r\nimport type { PostProcessOptions } from \"../../PostProcesses/postProcess\";\r\nimport type { IblShadowsRenderPipeline } from \"./iblShadowsRenderPipeline\";\r\nimport type { Camera } from \"../../Cameras/camera\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { GeometryBufferRenderer } from \"../../Rendering/geometryBufferRenderer\";\r\nimport { ProceduralTexture } from \"core/Materials/Textures/Procedurals/proceduralTexture\";\r\nimport type { IProceduralTextureCreationOptions } from \"core/Materials/Textures/Procedurals/proceduralTexture\";\r\n\r\n/**\r\n * Build cdf maps for IBL importance sampling during IBL shadow computation.\r\n * This should not be instanciated directly, as it is part of a scene component\r\n * @internal\r\n */\r\nexport class _IblShadowsVoxelTracingPass {\r\n private _scene: Scene;\r\n private _engine: AbstractEngine;\r\n private _renderPipeline: IblShadowsRenderPipeline;\r\n private _voxelShadowOpacity: number = 1.0;\r\n /**\r\n * The opacity of the shadow cast from the voxel grid\r\n */\r\n public get voxelShadowOpacity(): number {\r\n return this._voxelShadowOpacity;\r\n }\r\n /**\r\n * The opacity of the shadow cast from the voxel grid\r\n */\r\n public set voxelShadowOpacity(value: number) {\r\n this._voxelShadowOpacity = value;\r\n }\r\n private _sssSamples: number = 16;\r\n private _sssStride: number = 8;\r\n private _sssMaxDist: number = 0.05;\r\n private _sssThickness: number = 0.5;\r\n\r\n private _ssShadowOpacity: number = 1.0;\r\n /**\r\n * The opacity of the screen-space shadow\r\n */\r\n public get ssShadowOpacity(): number {\r\n return this._ssShadowOpacity;\r\n }\r\n /**\r\n * The opacity of the screen-space shadow\r\n */\r\n public set ssShadowOpacity(value: number) {\r\n this._ssShadowOpacity = value;\r\n }\r\n\r\n /**\r\n * The number of samples used in the screen space shadow pass.\r\n */\r\n public get sssSamples(): number {\r\n return this._sssSamples;\r\n }\r\n\r\n /**\r\n * The number of samples used in the screen space shadow pass.\r\n */\r\n public set sssSamples(value: number) {\r\n this._sssSamples = value;\r\n }\r\n\r\n /**\r\n * The stride used in the screen space shadow pass. This controls the distance between samples.\r\n */\r\n public get sssStride(): number {\r\n return this._sssStride;\r\n }\r\n\r\n /**\r\n * The stride used in the screen space shadow pass. This controls the distance between samples.\r\n */\r\n public set sssStride(value: number) {\r\n this._sssStride = value;\r\n }\r\n\r\n /**\r\n * The maximum distance that the screen-space shadow will be able to occlude.\r\n */\r\n public get sssMaxDist(): number {\r\n return this._sssMaxDist;\r\n }\r\n\r\n /**\r\n * The maximum distance that the screen-space shadow will be able to occlude.\r\n */\r\n public set sssMaxDist(value: number) {\r\n this._sssMaxDist = value;\r\n }\r\n\r\n /**\r\n * The thickness of the screen-space shadow\r\n */\r\n public get sssThickness(): number {\r\n return this._sssThickness;\r\n }\r\n\r\n /**\r\n * The thickness of the screen-space shadow\r\n */\r\n public set sssThickness(value: number) {\r\n this._sssThickness = value;\r\n }\r\n\r\n private _outputTexture: ProceduralTexture;\r\n private _cameraInvView: Matrix = Matrix.Identity();\r\n private _cameraInvProj: Matrix = Matrix.Identity();\r\n private _invWorldScaleMatrix: Matrix = Matrix.Identity();\r\n private _frameId: number = 0;\r\n private _sampleDirections: number = 4;\r\n private _shadowParameters: Vector4 = new Vector4(0.0, 0.0, 0.0, 0.0);\r\n private _sssParameters: Vector4 = new Vector4(0.0, 0.0, 0.0, 0.0);\r\n private _opacityParameters: Vector4 = new Vector4(0.0, 0.0, 0.0, 0.0);\r\n private _voxelBiasParameters: Vector4 = new Vector4(0.0, 0.0, 0.0, 0.0);\r\n private _voxelNormalBias: number = 1.4;\r\n /**\r\n * The bias to apply to the voxel sampling in the direction of the surface normal of the geometry.\r\n */\r\n public get voxelNormalBias(): number {\r\n return this._voxelNormalBias;\r\n }\r\n public set voxelNormalBias(value: number) {\r\n this._voxelNormalBias = value;\r\n }\r\n\r\n private _voxelDirectionBias: number = 1.75;\r\n /**\r\n * The bias to apply to the voxel sampling in the direction of the light.\r\n */\r\n public get voxelDirectionBias(): number {\r\n return this._voxelDirectionBias;\r\n }\r\n public set voxelDirectionBias(value: number) {\r\n this._voxelDirectionBias = value;\r\n }\r\n\r\n /**\r\n * Is the effect enabled\r\n */\r\n public enabled: boolean = true;\r\n\r\n /**\r\n * The number of directions to sample for the voxel tracing.\r\n */\r\n public get sampleDirections(): number {\r\n return this._sampleDirections;\r\n }\r\n\r\n /**\r\n * The number of directions to sample for the voxel tracing.\r\n */\r\n public set sampleDirections(value: number) {\r\n this._sampleDirections = value;\r\n }\r\n\r\n /**\r\n * The current rotation of the environment map, in radians.\r\n */\r\n public get envRotation(): number {\r\n return this._envRotation;\r\n }\r\n\r\n /**\r\n * The current rotation of the environment map, in radians.\r\n */\r\n public set envRotation(value: number) {\r\n this._envRotation = value;\r\n }\r\n\r\n /** Enable the debug view for this pass */\r\n public debugEnabled: boolean = false;\r\n\r\n /**\r\n * Returns the output texture of the pass.\r\n * @returns The output texture.\r\n */\r\n public getOutputTexture(): ProceduralTexture {\r\n return this._outputTexture;\r\n }\r\n\r\n /**\r\n * Gets the debug pass post process. This will create the resources for the pass\r\n * if they don't already exist.\r\n * @returns The post process\r\n */\r\n public getDebugPassPP(): PostProcess {\r\n if (!this._debugPassPP) {\r\n this._createDebugPass();\r\n }\r\n return this._debugPassPP;\r\n }\r\n\r\n private _debugPassName: string = \"Voxel Tracing Debug Pass\";\r\n\r\n /**\r\n * The name of the debug pass\r\n */\r\n public get debugPassName(): string {\r\n return this._debugPassName;\r\n }\r\n\r\n /** The default rotation of the environment map will align the shadows with the default lighting orientation */\r\n private _envRotation: number = 0.0;\r\n\r\n /**\r\n * Set the matrix to use for scaling the world space to voxel space\r\n * @param matrix The matrix to use for scaling the world space to voxel space\r\n */\r\n public setWorldScaleMatrix(matrix: Matrix) {\r\n this._invWorldScaleMatrix = matrix;\r\n }\r\n\r\n private _debugVoxelMarchEnabled: boolean = false;\r\n private _debugPassPP: PostProcess;\r\n private _debugSizeParams: Vector4 = new Vector4(0.0, 0.0, 0.0, 0.0);\r\n\r\n /**\r\n * Sets params that control the position and scaling of the debug display on the screen.\r\n * @param x Screen X offset of the debug display (0-1)\r\n * @param y Screen Y offset of the debug display (0-1)\r\n * @param widthScale X scale of the debug display (0-1)\r\n * @param heightScale Y scale of the debug display (0-1)\r\n */\r\n public setDebugDisplayParams(x: number, y: number, widthScale: number, heightScale: number) {\r\n this._debugSizeParams.set(x, y, widthScale, heightScale);\r\n }\r\n\r\n /**\r\n * Creates the debug post process effect for this pass\r\n */\r\n private _createDebugPass() {\r\n const isWebGPU = this._engine.isWebGPU;\r\n if (!this._debugPassPP) {\r\n const debugOptions: PostProcessOptions = {\r\n width: this._engine.getRenderWidth(),\r\n height: this._engine.getRenderHeight(),\r\n uniforms: [\"sizeParams\"],\r\n samplers: [\"debugSampler\"],\r\n engine: this._engine,\r\n reusable: false,\r\n shaderLanguage: isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n extraInitializations: (useWebGPU: boolean, list: Promise<any>[]) => {\r\n if (useWebGPU) {\r\n list.push(import(\"../../ShadersWGSL/iblShadowDebug.fragment\"));\r\n } else {\r\n list.push(import(\"../../Shaders/iblShadowDebug.fragment\"));\r\n }\r\n },\r\n };\r\n this._debugPassPP = new PostProcess(this.debugPassName, \"iblShadowDebug\", debugOptions);\r\n this._debugPassPP.autoClear = false;\r\n this._debugPassPP.onApplyObservable.add((effect) => {\r\n // update the caustic texture with what we just rendered.\r\n effect.setTexture(\"debugSampler\", this._outputTexture);\r\n effect.setVector4(\"sizeParams\", this._debugSizeParams);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Instantiates the shadow voxel-tracing pass\r\n * @param scene Scene to attach to\r\n * @param iblShadowsRenderPipeline The IBL shadows render pipeline\r\n * @returns The shadow voxel-tracing pass\r\n */\r\n constructor(scene: Scene, iblShadowsRenderPipeline: IblShadowsRenderPipeline) {\r\n this._scene = scene;\r\n this._engine = scene.getEngine();\r\n this._renderPipeline = iblShadowsRenderPipeline;\r\n this._createTextures();\r\n }\r\n\r\n private _createTextures() {\r\n let defines = \"\";\r\n if (this._scene.useRightHandedSystem) {\r\n defines += \"#define RIGHT_HANDED\\n\";\r\n }\r\n if (this._debugVoxelMarchEnabled) {\r\n defines += \"#define VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION 1u\\n\";\r\n }\r\n const isWebGPU = this._engine.isWebGPU;\r\n const textureOptions: IProceduralTextureCreationOptions = {\r\n type: Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n samplingMode: Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n generateDepthBuffer: false,\r\n shaderLanguage: isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n extraInitializationsAsync: async () => {\r\n if (isWebGPU) {\r\n await Promise.all([import(\"../../ShadersWGSL/iblShadowVoxelTracing.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../../Shaders/iblShadowVoxelTracing.fragment\")]);\r\n }\r\n },\r\n };\r\n this._outputTexture = new ProceduralTexture(\r\n \"voxelTracingPass\",\r\n {\r\n width: this._engine.getRenderWidth(),\r\n height: this._engine.getRenderHeight(),\r\n },\r\n \"iblShadowVoxelTracing\",\r\n this._scene,\r\n textureOptions\r\n );\r\n this._outputTexture.refreshRate = -1;\r\n this._outputTexture.autoClear = false;\r\n this._outputTexture.defines = defines;\r\n // Need to set all the textures first so that the effect gets created with the proper uniforms.\r\n this._setBindings(this._scene.activeCamera!);\r\n\r\n let counter = 0;\r\n this._scene.onBeforeRenderObservable.add(() => {\r\n counter = 0;\r\n });\r\n this._scene.onAfterRenderTargetsRenderObservable.add(() => {\r\n if (++counter == 2) {\r\n if (this.enabled && this._outputTexture.isReady()) {\r\n this._setBindings(this._scene.activeCamera!);\r\n this._outputTexture.render();\r\n }\r\n }\r\n });\r\n }\r\n\r\n private _setBindings(camera: Camera) {\r\n if (this._scene.useRightHandedSystem) {\r\n this._outputTexture.defines = \"#define RIGHT_HANDED\\n\";\r\n }\r\n this._outputTexture.setMatrix(\"viewMtx\", camera.getViewMatrix());\r\n this._outputTexture.setMatrix(\"projMtx\", camera.getProjectionMatrix());\r\n camera.getProjectionMatrix().invertToRef(this._cameraInvProj);\r\n camera.getViewMatrix().invertToRef(this._cameraInvView);\r\n this._outputTexture.setMatrix(\"invProjMtx\", this._cameraInvProj);\r\n this._outputTexture.setMatrix(\"invViewMtx\", this._cameraInvView);\r\n this._outputTexture.setMatrix(\"wsNormalizationMtx\", this._invWorldScaleMatrix);\r\n\r\n this._frameId++;\r\n\r\n let rotation = this._scene.useRightHandedSystem ? -(this._envRotation + 0.5 * Math.PI) : this._envRotation - 0.5 * Math.PI;\r\n rotation = rotation % (2.0 * Math.PI);\r\n this._shadowParameters.set(this._sampleDirections, this._frameId, 1.0, rotation);\r\n this._outputTexture.setVector4(\"shadowParameters\", this._shadowParameters);\r\n const voxelGrid = this._renderPipeline!._getVoxelGridTexture();\r\n const highestMip = Math.floor(Math.log2(voxelGrid!.getSize().width));\r\n this._voxelBiasParameters.set(this._voxelNormalBias, this._voxelDirectionBias, highestMip, 0.0);\r\n this._outputTexture.setVector4(\"voxelBiasParameters\", this._voxelBiasParameters);\r\n\r\n // SSS Options.\r\n this._sssParameters.set(this._sssSamples, this._sssStride, this._sssMaxDist, this._sssThickness);\r\n this._outputTexture.setVector4(\"sssParameters\", this._sssParameters);\r\n this._opacityParameters.set(this._voxelShadowOpacity, this._ssShadowOpacity, 0.0, 0.0);\r\n this._outputTexture.setVector4(\"shadowOpacity\", this._opacityParameters);\r\n this._outputTexture.setTexture(\"voxelGridSampler\", voxelGrid);\r\n this._outputTexture.setTexture(\"blueNoiseSampler\", this._renderPipeline!._getNoiseTexture());\r\n this._outputTexture.setTexture(\"icdfySampler\", this._renderPipeline!._getIcdfyTexture());\r\n this._outputTexture.setTexture(\"icdfxSampler\", this._renderPipeline!._getIcdfxTexture());\r\n if (this._debugVoxelMarchEnabled) {\r\n this._outputTexture.defines += \"#define VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION 1u\\n\";\r\n }\r\n\r\n const geometryBufferRenderer = this._scene.geometryBufferRenderer;\r\n if (!geometryBufferRenderer) {\r\n return;\r\n }\r\n const depthIndex = geometryBufferRenderer.getTextureIndex(GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE);\r\n this._outputTexture.setTexture(\"depthSampler\", geometryBufferRenderer.getGBuffer().textures[depthIndex]);\r\n const wnormalIndex = geometryBufferRenderer.getTextureIndex(GeometryBufferRenderer.NORMAL_TEXTURE_TYPE);\r\n this._outputTexture.setTexture(\"worldNormalSampler\", geometryBufferRenderer.getGBuffer().textures[wnormalIndex]);\r\n }\r\n\r\n /**\r\n * Called by render pipeline when canvas resized.\r\n * @param scaleFactor The factor by which to scale the canvas size.\r\n */\r\n public resize(scaleFactor: number = 1.0) {\r\n const newSize = {\r\n width: Math.max(1.0, Math.floor(this._engine.getRenderWidth() * scaleFactor)),\r\n height: Math.max(1.0, Math.floor(this._engine.getRenderHeight() * scaleFactor)),\r\n };\r\n this._outputTexture.resize(newSize, false);\r\n }\r\n\r\n /**\r\n * Checks if the pass is ready\r\n * @returns true if the pass is ready\r\n */\r\n public isReady() {\r\n return (\r\n this._outputTexture.isReady() &&\r\n !(this._debugPassPP && !this._debugPassPP.isReady()) &&\r\n this._renderPipeline!._getIcdfyTexture().isReady() &&\r\n this._renderPipeline!._getIcdfxTexture().isReady() &&\r\n this._renderPipeline!._getVoxelGridTexture().isReady()\r\n );\r\n }\r\n\r\n /**\r\n * Disposes the associated resources\r\n */\r\n public dispose() {\r\n this._outputTexture.dispose();\r\n if (this._debugPassPP) {\r\n this._debugPassPP.dispose();\r\n }\r\n }\r\n}\r\n"]}
@@ -54,6 +54,11 @@ export declare class GeometryBufferRenderer {
54
54
  * using getIndex(GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE)
55
55
  */
56
56
  static readonly SCREENSPACE_DEPTH_TEXTURE_TYPE = 5;
57
+ /**
58
+ * Constant used to retrieve the linear velocity texture index in the G-Buffer textures array
59
+ * using getIndex(GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE)
60
+ */
61
+ static readonly VELOCITY_LINEAR_TEXTURE_TYPE = 6;
57
62
  /**
58
63
  * Dictionary used to store the previous transformation matrices of each rendered mesh
59
64
  * in order to compute objects velocities when enableVelocity is set to "true"
@@ -95,6 +100,7 @@ export declare class GeometryBufferRenderer {
95
100
  private _enableNormal;
96
101
  private _enablePosition;
97
102
  private _enableVelocity;
103
+ private _enableVelocityLinear;
98
104
  private _enableReflectivity;
99
105
  private _enableScreenspaceDepth;
100
106
  private _depthFormat;
@@ -102,6 +108,7 @@ export declare class GeometryBufferRenderer {
102
108
  private _clearDepthColor;
103
109
  private _positionIndex;
104
110
  private _velocityIndex;
111
+ private _velocityLinearIndex;
105
112
  private _reflectivityIndex;
106
113
  private _depthIndex;
107
114
  private _normalIndex;
@@ -197,6 +204,14 @@ export declare class GeometryBufferRenderer {
197
204
  * Sets whether or not objects velocities are enabled for the G buffer.
198
205
  */
199
206
  set enableVelocity(enable: boolean);
207
+ /**
208
+ * @returns a boolean indicating if object's linear velocities are enabled for the G buffer.
209
+ */
210
+ get enableVelocityLinear(): boolean;
211
+ /**
212
+ * Sets whether or not object's linear velocities are enabled for the G buffer.
213
+ */
214
+ set enableVelocityLinear(enable: boolean);
200
215
  /**
201
216
  * Gets a boolean indicating if objects reflectivity are enabled in the G buffer.
202
217
  */
@@ -83,6 +83,7 @@ export class GeometryBufferRenderer {
83
83
  this._enablePosition = false;
84
84
  this._enableReflectivity = false;
85
85
  this._enableVelocity = false;
86
+ this._enableVelocityLinear = false;
86
87
  this._enableScreenspaceDepth = false;
87
88
  this._attachmentsFromPrePass = [];
88
89
  }
@@ -100,6 +101,10 @@ export class GeometryBufferRenderer {
100
101
  this._velocityIndex = index;
101
102
  this._enableVelocity = true;
102
103
  }
104
+ else if (geometryBufferType === GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE) {
105
+ this._velocityLinearIndex = index;
106
+ this._enableVelocityLinear = true;
107
+ }
103
108
  else if (geometryBufferType === GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE) {
104
109
  this._reflectivityIndex = index;
105
110
  this._enableReflectivity = true;
@@ -163,6 +168,8 @@ export class GeometryBufferRenderer {
163
168
  return this._positionIndex;
164
169
  case GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE:
165
170
  return this._velocityIndex;
171
+ case GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE:
172
+ return this._velocityLinearIndex;
166
173
  case GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE:
167
174
  return this._reflectivityIndex;
168
175
  case GeometryBufferRenderer.DEPTH_TEXTURE_TYPE:
@@ -244,6 +251,22 @@ export class GeometryBufferRenderer {
244
251
  }
245
252
  this._scene.needsPreviousWorldMatrices = enable;
246
253
  }
254
+ /**
255
+ * @returns a boolean indicating if object's linear velocities are enabled for the G buffer.
256
+ */
257
+ get enableVelocityLinear() {
258
+ return this._enableVelocityLinear;
259
+ }
260
+ /**
261
+ * Sets whether or not object's linear velocities are enabled for the G buffer.
262
+ */
263
+ set enableVelocityLinear(enable) {
264
+ this._enableVelocityLinear = enable;
265
+ if (!this._linkedWithPrePass) {
266
+ this.dispose();
267
+ this._createRenderTargets();
268
+ }
269
+ }
247
270
  /**
248
271
  * Gets a boolean indicating if objects reflectivity are enabled in the G buffer.
249
272
  */
@@ -333,12 +356,14 @@ export class GeometryBufferRenderer {
333
356
  this._enableNormal = true;
334
357
  this._enablePosition = false;
335
358
  this._enableVelocity = false;
359
+ this._enableVelocityLinear = false;
336
360
  this._enableReflectivity = false;
337
361
  this._enableScreenspaceDepth = false;
338
362
  this._clearColor = new Color4(0, 0, 0, 0);
339
363
  this._clearDepthColor = new Color4(1e8, 0, 0, 1); // "infinity" value - depth in the depth texture is view.z, not a 0..1 value!
340
364
  this._positionIndex = -1;
341
365
  this._velocityIndex = -1;
366
+ this._velocityLinearIndex = -1;
342
367
  this._reflectivityIndex = -1;
343
368
  this._depthIndex = -1;
344
369
  this._normalIndex = -1;
@@ -562,6 +587,13 @@ export class GeometryBufferRenderer {
562
587
  defines.push("#define BONES_VELOCITY_ENABLED");
563
588
  }
564
589
  }
590
+ if (this._enableVelocityLinear) {
591
+ defines.push("#define VELOCITY_LINEAR");
592
+ defines.push("#define VELOCITY_LINEAR_INDEX " + this._velocityLinearIndex);
593
+ if (this.excludedSkinnedMeshesFromVelocity.indexOf(mesh) === -1) {
594
+ defines.push("#define BONES_VELOCITY_ENABLED");
595
+ }
596
+ }
565
597
  if (this._enableReflectivity) {
566
598
  defines.push("#define REFLECTIVITY");
567
599
  defines.push("#define REFLECTIVITY_INDEX " + this._reflectivityIndex);
@@ -612,7 +644,7 @@ export class GeometryBufferRenderer {
612
644
  // Instances
613
645
  if (useInstances) {
614
646
  defines.push("#define INSTANCES");
615
- PushAttributesForInstances(attribs, this._enableVelocity);
647
+ PushAttributesForInstances(attribs, this._enableVelocity || this._enableVelocityLinear);
616
648
  if (subMesh.getRenderingMesh().hasThinInstances) {
617
649
  defines.push("#define THIN_INSTANCES");
618
650
  }
@@ -704,6 +736,12 @@ export class GeometryBufferRenderer {
704
736
  textureNames.push("gBuffer_Velocity");
705
737
  textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE]);
706
738
  }
739
+ if (this._enableVelocityLinear) {
740
+ this._velocityLinearIndex = count;
741
+ count++;
742
+ textureNames.push("gBuffer_VelocityLinear");
743
+ textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE]);
744
+ }
707
745
  if (this._enableReflectivity) {
708
746
  this._reflectivityIndex = count;
709
747
  count++;
@@ -796,7 +834,7 @@ export class GeometryBufferRenderer {
796
834
  }
797
835
  effectiveMesh._internalAbstractMeshDataInfo._isActiveIntermediate = false;
798
836
  // Velocity
799
- if (this._enableVelocity && !this._previousTransformationMatrices[effectiveMesh.uniqueId]) {
837
+ if ((this._enableVelocity || this._enableVelocityLinear) && !this._previousTransformationMatrices[effectiveMesh.uniqueId]) {
800
838
  this._previousTransformationMatrices[effectiveMesh.uniqueId] = {
801
839
  world: Matrix.Identity(),
802
840
  viewProjection: scene.getTransformMatrix(),
@@ -957,7 +995,7 @@ export class GeometryBufferRenderer {
957
995
  else {
958
996
  effect.setMatrices("mBones", renderingMesh.skeleton.getTransformMatrices(renderingMesh));
959
997
  }
960
- if (this._enableVelocity) {
998
+ if (this._enableVelocity || this._enableVelocityLinear) {
961
999
  effect.setMatrices("mPreviousBones", this._previousBonesTransformationMatrices[renderingMesh.uniqueId]);
962
1000
  }
963
1001
  }
@@ -967,7 +1005,7 @@ export class GeometryBufferRenderer {
967
1005
  renderingMesh.morphTargetManager._bind(effect);
968
1006
  }
969
1007
  // Velocity
970
- if (this._enableVelocity) {
1008
+ if (this._enableVelocity || this._enableVelocityLinear) {
971
1009
  effect.setMatrix("previousWorld", this._previousTransformationMatrices[effectiveMesh.uniqueId].world);
972
1010
  effect.setMatrix("previousViewProjection", this._previousTransformationMatrices[effectiveMesh.uniqueId].viewProjection);
973
1011
  }
@@ -982,7 +1020,7 @@ export class GeometryBufferRenderer {
982
1020
  });
983
1021
  }
984
1022
  // Velocity
985
- if (this._enableVelocity) {
1023
+ if (this._enableVelocity || this._enableVelocityLinear) {
986
1024
  this._previousTransformationMatrices[effectiveMesh.uniqueId].world = world.clone();
987
1025
  this._previousTransformationMatrices[effectiveMesh.uniqueId].viewProjection = this._scene.getTransformMatrix().clone();
988
1026
  if (renderingMesh.skeleton) {
@@ -1081,6 +1119,11 @@ GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE = 4;
1081
1119
  * using getIndex(GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE)
1082
1120
  */
1083
1121
  GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE = 5;
1122
+ /**
1123
+ * Constant used to retrieve the linear velocity texture index in the G-Buffer textures array
1124
+ * using getIndex(GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE)
1125
+ */
1126
+ GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE = 6;
1084
1127
  /**
1085
1128
  * @internal
1086
1129
  */