@onerjs/core 8.33.3 → 8.33.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 (65) hide show
  1. package/AudioV2/webAudio/components/webAudioParameterComponent.js +17 -5
  2. package/AudioV2/webAudio/components/webAudioParameterComponent.js.map +1 -1
  3. package/Cameras/Inputs/geospatialCameraPointersInput.d.ts +2 -2
  4. package/Cameras/Inputs/geospatialCameraPointersInput.js +3 -12
  5. package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -1
  6. package/Cameras/cameraMovement.d.ts +4 -4
  7. package/Cameras/cameraMovement.js +13 -14
  8. package/Cameras/cameraMovement.js.map +1 -1
  9. package/Cameras/geospatialCamera.d.ts +1 -2
  10. package/Cameras/geospatialCamera.js +22 -19
  11. package/Cameras/geospatialCamera.js.map +1 -1
  12. package/Cameras/geospatialCameraMovement.d.ts +0 -5
  13. package/Cameras/geospatialCameraMovement.js.map +1 -1
  14. package/Engines/abstractEngine.js +2 -2
  15. package/Engines/abstractEngine.js.map +1 -1
  16. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +1 -2
  17. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  18. package/FrameGraph/frameGraph.d.ts +6 -0
  19. package/FrameGraph/frameGraph.js +10 -0
  20. package/FrameGraph/frameGraph.js.map +1 -1
  21. package/Layers/glowLayer.d.ts +8 -0
  22. package/Layers/glowLayer.js +11 -0
  23. package/Layers/glowLayer.js.map +1 -1
  24. package/Layers/thinGlowLayer.d.ts +17 -0
  25. package/Layers/thinGlowLayer.js +18 -0
  26. package/Layers/thinGlowLayer.js.map +1 -1
  27. package/Lights/Clustered/clusteredLightContainer.js +7 -2
  28. package/Lights/Clustered/clusteredLightContainer.js.map +1 -1
  29. package/Materials/Node/Blocks/Dual/lightBlock.js +2 -1
  30. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  31. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +2 -1
  32. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  33. package/Materials/Node/nodeMaterial.js +2 -2
  34. package/Materials/Node/nodeMaterial.js.map +1 -1
  35. package/Materials/PBR/pbrBaseMaterial.d.ts +1 -0
  36. package/Materials/PBR/pbrBaseMaterial.js +1 -0
  37. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  38. package/Materials/Textures/envCubeTexture.js +4 -0
  39. package/Materials/Textures/envCubeTexture.js.map +1 -1
  40. package/Materials/materialHelper.functions.js +1 -0
  41. package/Materials/materialHelper.functions.js.map +1 -1
  42. package/Materials/standardMaterial.d.ts +1 -0
  43. package/Materials/standardMaterial.js +1 -0
  44. package/Materials/standardMaterial.js.map +1 -1
  45. package/Rendering/depthPeelingRenderer.d.ts +1 -0
  46. package/Rendering/depthPeelingRenderer.js +7 -0
  47. package/Rendering/depthPeelingRenderer.js.map +1 -1
  48. package/Rendering/thinDepthPeelingRenderer.d.ts +1 -0
  49. package/Rendering/thinDepthPeelingRenderer.js +2 -0
  50. package/Rendering/thinDepthPeelingRenderer.js.map +1 -1
  51. package/Shaders/default.vertex.js +4 -0
  52. package/Shaders/default.vertex.js.map +1 -1
  53. package/Shaders/lightProxy.vertex.js +7 -1
  54. package/Shaders/lightProxy.vertex.js.map +1 -1
  55. package/Shaders/pbr.vertex.js +4 -0
  56. package/Shaders/pbr.vertex.js.map +1 -1
  57. package/ShadersWGSL/default.vertex.js +4 -0
  58. package/ShadersWGSL/default.vertex.js.map +1 -1
  59. package/ShadersWGSL/lightProxy.vertex.js +7 -1
  60. package/ShadersWGSL/lightProxy.vertex.js.map +1 -1
  61. package/ShadersWGSL/pbr.vertex.js +4 -0
  62. package/ShadersWGSL/pbr.vertex.js.map +1 -1
  63. package/package.json +2 -5
  64. package/scene.js +2 -3
  65. package/scene.js.map +1 -1
@@ -34,4 +34,5 @@ export declare class DepthPeelingRenderer extends ThinDepthPeelingRenderer {
34
34
  isReady(): boolean;
35
35
  protected _beforeRender(): void;
36
36
  protected _afterRender(): void;
37
+ protected _noTransparentMeshes(): void;
37
38
  }
@@ -135,5 +135,12 @@ export class DepthPeelingRenderer extends ThinDepthPeelingRenderer {
135
135
  _afterRender() {
136
136
  this._scene.prePassRenderer._enabled = true;
137
137
  }
138
+ _noTransparentMeshes() {
139
+ this._engine.bindFramebuffer(this._colorMrts[1].renderTarget);
140
+ this._engine.bindAttachments(this._layoutCache[1]);
141
+ this._engine.clear(this._colorCache[2], true, false, false);
142
+ this._engine.unBindFramebuffer(this._colorMrts[1].renderTarget);
143
+ this._finalCompose(1);
144
+ }
138
145
  }
139
146
  //# sourceMappingURL=depthPeelingRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"depthPeelingRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Rendering/depthPeelingRenderer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAIhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,MAAM,+BAA+B;IAArC;QACI;;WAEG;QACI,YAAO,GAAG,IAAI,CAAC;QAEtB;;WAEG;QACI,SAAI,GAAG,cAAc,CAAC;QAE7B;;WAEG;QACa,qBAAgB,GAAa,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;IACxF,CAAC;CAAA;AAED;;;;GAIG;AACH,MAAM,OAAO,oBAAqB,SAAQ,wBAAwB;IAO9D;;;;;OAKG;IACH,YAAY,KAAY,EAAE,YAAoB,CAAC;QAC3C,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAExB,sCAAsC;QACtC,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,sFAAsF,CAAC,CAAC;YACpG,OAAO;QACX,CAAC;QAED,IAAI,CAAC,2BAA2B,GAAG,IAAI,+BAA+B,EAAE,CAAC;QACzE,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC;IACnE,CAAC;IAEkB,eAAe;QAC9B,KAAK,CAAC,eAAe,EAAE,CAAC;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAEpC,IAAI,CAAC,SAAS,GAAG,IAAI,mBAAmB,CAAC,uBAAuB,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAChG,CAAC;IAED,oDAAoD;IACpD,yEAAyE;IACzE,sCAAsC;IACtC,oCAAoC;IACpC,8CAA8C;IAC9C,8CAA8C;IAC9C,QAAQ;IACR,oDAAoD;IACpD,IAAI;IAEe,gBAAgB;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACV,qDAAqD;gBACrD,SAAS;YACb,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAEzB,KAAK,CAAC,gBAAgB,EAAE,CAAC;IAC7B,CAAC;IAEO,eAAe;QACnB,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;YACjJ,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAC3C,CAAC;IAEO,wBAAwB;QAC5B,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;QAEpD,IAAI,CAAC,eAAe,EAAE,CAAC;YACnB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,gCAAgC;QAChC,MAAM,YAAY,GAAG,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QACpF,MAAM,cAAc,GAAG,eAAe,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAEjJ,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,KAAK,cAAc,EAAE,CAAC;YAC5C,IAAI,CAAC,iBAAiB,GAAG,cAAc,CAAC;YACxC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;YAEjE,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACpC,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAEhE,eAAe,CAAC,SAAS,CAAC,YAAa,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAa,CAAC,CAAC;QACzF,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACa,kBAAkB,CAAC,eAAgC;QAC/D,eAAe,CAAC,sBAAsB,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC7E,CAAC;IAEkB,aAAa,CAAC,OAAe;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5E,IAAI,MAAM,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,YAAa,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC;QAC7C,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAE3B,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAChE,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/F,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAChF,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC1D,CAAC;IAED;;;OAGG;IACa,OAAO;QACnB,OAAO,KAAK,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;IACrD,CAAC;IAEkB,aAAa;QAC3B,IAAI,CAAC,MAAM,CAAC,eAAwB,CAAC,QAAQ,GAAG,KAAK,CAAC;IAC3D,CAAC;IAEkB,YAAY;QAC1B,IAAI,CAAC,MAAM,CAAC,eAAwB,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC1D,CAAC;CACJ","sourcesContent":["/**\r\n * Implementation based on https://medium.com/@shrekshao_71662/dual-depth-peeling-implementation-in-webgl-11baa061ba4b\r\n */\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { Scene } from \"../scene\";\r\nimport { ThinTexture } from \"../Materials/Textures/thinTexture\";\r\nimport type { PrePassEffectConfiguration } from \"./prePassEffectConfiguration\";\r\nimport type { PrePassRenderer } from \"./prePassRenderer\";\r\nimport type { InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { ThinDepthPeelingRenderer } from \"./thinDepthPeelingRenderer\";\r\n\r\nclass DepthPeelingEffectConfiguration implements PrePassEffectConfiguration {\r\n /**\r\n * Is this effect enabled\r\n */\r\n public enabled = true;\r\n\r\n /**\r\n * Name of the configuration\r\n */\r\n public name = \"depthPeeling\";\r\n\r\n /**\r\n * Textures that should be present in the MRT for this effect to work\r\n */\r\n public readonly texturesRequired: number[] = [Constants.PREPASS_COLOR_TEXTURE_TYPE];\r\n}\r\n\r\n/**\r\n * The depth peeling renderer that performs\r\n * Order independant transparency (OIT).\r\n * This should not be instanciated directly, as it is part of a scene component\r\n */\r\nexport class DepthPeelingRenderer extends ThinDepthPeelingRenderer {\r\n private _outputRT: RenderTargetTexture;\r\n\r\n private _prePassEffectConfiguration: DepthPeelingEffectConfiguration;\r\n\r\n private _blendBackTexture: InternalTexture;\r\n\r\n /**\r\n * Instanciates the depth peeling renderer\r\n * @param scene Scene to attach to\r\n * @param passCount Number of depth layers to peel\r\n * @returns The depth peeling renderer\r\n */\r\n constructor(scene: Scene, passCount: number = 5) {\r\n super(scene, passCount);\r\n\r\n // We need a depth texture for opaque\r\n if (!scene.enablePrePassRenderer()) {\r\n Logger.Warn(\"Depth peeling for order independant transparency could not enable PrePass, aborting.\");\r\n return;\r\n }\r\n\r\n this._prePassEffectConfiguration = new DepthPeelingEffectConfiguration();\r\n this._createTextures();\r\n this._createEffects(\"oitFinal\", [\"uFrontColor\", \"uBackColor\"]);\r\n }\r\n\r\n protected override _createTextures() {\r\n super._createTextures();\r\n\r\n const size = this._getTextureSize();\r\n\r\n this._outputRT = new RenderTargetTexture(\"depthPeelingOutputRTT\", size, this._scene, false);\r\n }\r\n\r\n // TODO : explore again MSAA with depth peeling when\r\n // we are able to fetch individual samples in a multisampled renderbuffer\r\n // public set samples(value: number) {\r\n // for (let i = 0; i < 2; i++) {\r\n // this._depthMrts[i].samples = value;\r\n // this._colorMrts[i].samples = value;\r\n // }\r\n // this._scene.prePassRenderer!.samples = value;\r\n // }\r\n\r\n protected override _disposeTextures() {\r\n for (let i = 0; i < this._thinTextures.length; i++) {\r\n if (i === 6) {\r\n // Do not dispose the shared texture with the prepass\r\n continue;\r\n }\r\n this._thinTextures[i].dispose();\r\n }\r\n this._thinTextures = [];\r\n this._outputRT.dispose();\r\n\r\n super._disposeTextures();\r\n }\r\n\r\n private _updateTextures() {\r\n if (this._depthMrts[0].getSize().width !== this._engine.getRenderWidth() || this._depthMrts[0].getSize().height !== this._engine.getRenderHeight()) {\r\n this._disposeTextures();\r\n this._createTextures();\r\n }\r\n return this._updateTextureReferences();\r\n }\r\n\r\n private _updateTextureReferences() {\r\n const prePassRenderer = this._scene.prePassRenderer;\r\n\r\n if (!prePassRenderer) {\r\n return false;\r\n }\r\n\r\n // Retrieve opaque color texture\r\n const textureIndex = prePassRenderer.getIndex(Constants.PREPASS_COLOR_TEXTURE_TYPE);\r\n const prePassTexture = prePassRenderer.defaultRT.textures?.length ? prePassRenderer.defaultRT.textures[textureIndex].getInternalTexture() : null;\r\n\r\n if (!prePassTexture) {\r\n return false;\r\n }\r\n\r\n if (this._blendBackTexture !== prePassTexture) {\r\n this._blendBackTexture = prePassTexture;\r\n this._blendBackMrt.setInternalTexture(this._blendBackTexture, 0);\r\n\r\n if (this._thinTextures[6]) {\r\n this._thinTextures[6].dispose();\r\n }\r\n this._thinTextures[6] = new ThinTexture(this._blendBackTexture);\r\n\r\n prePassRenderer.defaultRT.renderTarget!.shareDepth(this._depthMrts[0].renderTarget!);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Links to the prepass renderer\r\n * @param prePassRenderer The scene PrePassRenderer\r\n */\r\n public override setPrePassRenderer(prePassRenderer: PrePassRenderer) {\r\n prePassRenderer.addEffectConfiguration(this._prePassEffectConfiguration);\r\n }\r\n\r\n protected override _finalCompose(writeId: number) {\r\n const output = this._scene.prePassRenderer?.setCustomOutput(this._outputRT);\r\n if (output) {\r\n this._engine.bindFramebuffer(this._outputRT.renderTarget!);\r\n } else {\r\n this._engine.restoreDefaultFramebuffer();\r\n }\r\n\r\n this._engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n this._engine.applyStates();\r\n\r\n this._engine.enableEffect(this._finalEffectWrapper.drawWrapper);\r\n this._finalEffectWrapper.effect.setTexture(\"uFrontColor\", this._thinTextures[writeId * 3 + 1]);\r\n this._finalEffectWrapper.effect.setTexture(\"uBackColor\", this._thinTextures[6]);\r\n this._effectRenderer.render(this._finalEffectWrapper);\r\n }\r\n\r\n /**\r\n * Checks if the depth peeling renderer is ready to render transparent meshes\r\n * @returns true if the depth peeling renderer is ready to render the transparent meshes\r\n */\r\n public override isReady() {\r\n return super.isReady() && this._updateTextures();\r\n }\r\n\r\n protected override _beforeRender() {\r\n (this._scene.prePassRenderer! as any)._enabled = false;\r\n }\r\n\r\n protected override _afterRender() {\r\n (this._scene.prePassRenderer! as any)._enabled = true;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"depthPeelingRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Rendering/depthPeelingRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Implementation based on https://medium.com/@shrekshao_71662/dual-depth-peeling-implementation-in-webgl-11baa061ba4b\r\n */\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { Scene } from \"../scene\";\r\nimport { ThinTexture } from \"../Materials/Textures/thinTexture\";\r\nimport type { PrePassEffectConfiguration } from \"./prePassEffectConfiguration\";\r\nimport type { PrePassRenderer } from \"./prePassRenderer\";\r\nimport type { InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { ThinDepthPeelingRenderer } from \"./thinDepthPeelingRenderer\";\r\n\r\nclass DepthPeelingEffectConfiguration implements PrePassEffectConfiguration {\r\n /**\r\n * Is this effect enabled\r\n */\r\n public enabled = true;\r\n\r\n /**\r\n * Name of the configuration\r\n */\r\n public name = \"depthPeeling\";\r\n\r\n /**\r\n * Textures that should be present in the MRT for this effect to work\r\n */\r\n public readonly texturesRequired: number[] = [Constants.PREPASS_COLOR_TEXTURE_TYPE];\r\n}\r\n\r\n/**\r\n * The depth peeling renderer that performs\r\n * Order independant transparency (OIT).\r\n * This should not be instanciated directly, as it is part of a scene component\r\n */\r\nexport class DepthPeelingRenderer extends ThinDepthPeelingRenderer {\r\n private _outputRT: RenderTargetTexture;\r\n\r\n private _prePassEffectConfiguration: DepthPeelingEffectConfiguration;\r\n\r\n private _blendBackTexture: InternalTexture;\r\n\r\n /**\r\n * Instanciates the depth peeling renderer\r\n * @param scene Scene to attach to\r\n * @param passCount Number of depth layers to peel\r\n * @returns The depth peeling renderer\r\n */\r\n constructor(scene: Scene, passCount: number = 5) {\r\n super(scene, passCount);\r\n\r\n // We need a depth texture for opaque\r\n if (!scene.enablePrePassRenderer()) {\r\n Logger.Warn(\"Depth peeling for order independant transparency could not enable PrePass, aborting.\");\r\n return;\r\n }\r\n\r\n this._prePassEffectConfiguration = new DepthPeelingEffectConfiguration();\r\n this._createTextures();\r\n this._createEffects(\"oitFinal\", [\"uFrontColor\", \"uBackColor\"]);\r\n }\r\n\r\n protected override _createTextures() {\r\n super._createTextures();\r\n\r\n const size = this._getTextureSize();\r\n\r\n this._outputRT = new RenderTargetTexture(\"depthPeelingOutputRTT\", size, this._scene, false);\r\n }\r\n\r\n // TODO : explore again MSAA with depth peeling when\r\n // we are able to fetch individual samples in a multisampled renderbuffer\r\n // public set samples(value: number) {\r\n // for (let i = 0; i < 2; i++) {\r\n // this._depthMrts[i].samples = value;\r\n // this._colorMrts[i].samples = value;\r\n // }\r\n // this._scene.prePassRenderer!.samples = value;\r\n // }\r\n\r\n protected override _disposeTextures() {\r\n for (let i = 0; i < this._thinTextures.length; i++) {\r\n if (i === 6) {\r\n // Do not dispose the shared texture with the prepass\r\n continue;\r\n }\r\n this._thinTextures[i].dispose();\r\n }\r\n this._thinTextures = [];\r\n this._outputRT.dispose();\r\n\r\n super._disposeTextures();\r\n }\r\n\r\n private _updateTextures() {\r\n if (this._depthMrts[0].getSize().width !== this._engine.getRenderWidth() || this._depthMrts[0].getSize().height !== this._engine.getRenderHeight()) {\r\n this._disposeTextures();\r\n this._createTextures();\r\n }\r\n return this._updateTextureReferences();\r\n }\r\n\r\n private _updateTextureReferences() {\r\n const prePassRenderer = this._scene.prePassRenderer;\r\n\r\n if (!prePassRenderer) {\r\n return false;\r\n }\r\n\r\n // Retrieve opaque color texture\r\n const textureIndex = prePassRenderer.getIndex(Constants.PREPASS_COLOR_TEXTURE_TYPE);\r\n const prePassTexture = prePassRenderer.defaultRT.textures?.length ? prePassRenderer.defaultRT.textures[textureIndex].getInternalTexture() : null;\r\n\r\n if (!prePassTexture) {\r\n return false;\r\n }\r\n\r\n if (this._blendBackTexture !== prePassTexture) {\r\n this._blendBackTexture = prePassTexture;\r\n this._blendBackMrt.setInternalTexture(this._blendBackTexture, 0);\r\n\r\n if (this._thinTextures[6]) {\r\n this._thinTextures[6].dispose();\r\n }\r\n this._thinTextures[6] = new ThinTexture(this._blendBackTexture);\r\n\r\n prePassRenderer.defaultRT.renderTarget!.shareDepth(this._depthMrts[0].renderTarget!);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Links to the prepass renderer\r\n * @param prePassRenderer The scene PrePassRenderer\r\n */\r\n public override setPrePassRenderer(prePassRenderer: PrePassRenderer) {\r\n prePassRenderer.addEffectConfiguration(this._prePassEffectConfiguration);\r\n }\r\n\r\n protected override _finalCompose(writeId: number) {\r\n const output = this._scene.prePassRenderer?.setCustomOutput(this._outputRT);\r\n if (output) {\r\n this._engine.bindFramebuffer(this._outputRT.renderTarget!);\r\n } else {\r\n this._engine.restoreDefaultFramebuffer();\r\n }\r\n\r\n this._engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n this._engine.applyStates();\r\n\r\n this._engine.enableEffect(this._finalEffectWrapper.drawWrapper);\r\n this._finalEffectWrapper.effect.setTexture(\"uFrontColor\", this._thinTextures[writeId * 3 + 1]);\r\n this._finalEffectWrapper.effect.setTexture(\"uBackColor\", this._thinTextures[6]);\r\n this._effectRenderer.render(this._finalEffectWrapper);\r\n }\r\n\r\n /**\r\n * Checks if the depth peeling renderer is ready to render transparent meshes\r\n * @returns true if the depth peeling renderer is ready to render the transparent meshes\r\n */\r\n public override isReady() {\r\n return super.isReady() && this._updateTextures();\r\n }\r\n\r\n protected override _beforeRender() {\r\n (this._scene.prePassRenderer! as any)._enabled = false;\r\n }\r\n\r\n protected override _afterRender() {\r\n (this._scene.prePassRenderer! as any)._enabled = true;\r\n }\r\n\r\n protected override _noTransparentMeshes() {\r\n this._engine.bindFramebuffer(this._colorMrts[1].renderTarget!);\r\n this._engine.bindAttachments(this._layoutCache[1]);\r\n this._engine.clear(this._colorCache[2], true, false, false);\r\n this._engine.unBindFramebuffer(this._colorMrts[1].renderTarget!);\r\n\r\n this._finalCompose(1);\r\n }\r\n}\r\n"]}
@@ -107,6 +107,7 @@ export declare class ThinDepthPeelingRenderer {
107
107
  isReady(): boolean;
108
108
  protected _beforeRender(): void;
109
109
  protected _afterRender(): void;
110
+ protected _noTransparentMeshes(): void;
110
111
  /**
111
112
  * Renders transparent submeshes with depth peeling
112
113
  * @param transparentSubMeshes List of transparent meshes to render
@@ -334,6 +334,7 @@ export class ThinDepthPeelingRenderer {
334
334
  }
335
335
  _beforeRender() { }
336
336
  _afterRender() { }
337
+ _noTransparentMeshes() { }
337
338
  /**
338
339
  * Renders transparent submeshes with depth peeling
339
340
  * @param transparentSubMeshes List of transparent meshes to render
@@ -362,6 +363,7 @@ export class ThinDepthPeelingRenderer {
362
363
  }
363
364
  }
364
365
  if (!this._candidateSubMeshes.length) {
366
+ this._noTransparentMeshes();
365
367
  return this._excludedSubMeshes;
366
368
  }
367
369
  const currentRenderPassId = this._engine.currentRenderPassId;
@@ -1 +1 @@
1
- {"version":3,"file":"thinDepthPeelingRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Rendering/thinDepthPeelingRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Implementation based on https://medium.com/@shrekshao_71662/dual-depth-peeling-implementation-in-webgl-11baa061ba4b\r\n */\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { MultiRenderTarget } from \"../Materials/Textures/multiRenderTarget\";\r\nimport type { InternalTextureCreationOptions } from \"../Materials/Textures/textureCreationOptions\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { SmartArray } from \"../Misc/smartArray\";\r\nimport type { Scene } from \"../scene\";\r\nimport { ThinTexture } from \"../Materials/Textures/thinTexture\";\r\nimport { EffectRenderer, EffectWrapper } from \"../Materials/effectRenderer\";\r\nimport type { PrePassRenderer } from \"./prePassRenderer\";\r\nimport type { IMaterialContext } from \"../Engines/IMaterialContext\";\r\nimport type { DrawWrapper } from \"../Materials/drawWrapper\";\r\nimport { Material } from \"../Materials/material\";\r\n\r\nimport \"../Engines/Extensions/engine.multiRender\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport type { RenderTargetWrapper } from \"../Engines/renderTargetWrapper\";\r\nimport type { Nullable } from \"../types\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class ThinDepthPeelingRenderer {\r\n protected _scene: Scene;\r\n protected _engine: AbstractEngine;\r\n protected _depthMrts: MultiRenderTarget[] = [];\r\n protected _thinTextures: ThinTexture[] = [];\r\n protected _colorMrts: MultiRenderTarget[] = [];\r\n protected _blendBackMrt: MultiRenderTarget;\r\n\r\n protected _blendBackEffectWrapper: EffectWrapper;\r\n protected _blendBackEffectWrapperPingPong: EffectWrapper;\r\n protected _finalEffectWrapper: EffectWrapper;\r\n protected _effectRenderer: EffectRenderer;\r\n\r\n protected _currentPingPongState: number = 0;\r\n\r\n protected _layoutCacheFormat = [[true], [true, true], [true, true, true]];\r\n protected _layoutCache: number[][] = [];\r\n protected _renderPassIds: number[];\r\n protected _candidateSubMeshes: SmartArray<SubMesh> = new SmartArray(10);\r\n protected _excludedSubMeshes: SmartArray<SubMesh> = new SmartArray(10);\r\n protected _excludedMeshes: number[] = [];\r\n\r\n protected static _DEPTH_CLEAR_VALUE = -99999.0;\r\n protected static _MIN_DEPTH = 0;\r\n protected static _MAX_DEPTH = 1;\r\n\r\n protected _colorCache = [\r\n new Color4(ThinDepthPeelingRenderer._DEPTH_CLEAR_VALUE, ThinDepthPeelingRenderer._DEPTH_CLEAR_VALUE, 0, 0),\r\n new Color4(-ThinDepthPeelingRenderer._MIN_DEPTH, ThinDepthPeelingRenderer._MAX_DEPTH, 0, 0),\r\n new Color4(0, 0, 0, 0),\r\n ];\r\n\r\n protected _passCount: number;\r\n /**\r\n * Number of depth peeling passes. As we are using dual depth peeling, each pass two levels of transparency are processed.\r\n */\r\n public get passCount(): number {\r\n return this._passCount;\r\n }\r\n\r\n public set passCount(count: number) {\r\n if (this._passCount === count) {\r\n return;\r\n }\r\n this._passCount = count;\r\n this._createRenderPassIds();\r\n }\r\n\r\n protected _useRenderPasses: boolean;\r\n /**\r\n * Instructs the renderer to use render passes. It is an optimization that makes the rendering faster for some engines (like WebGPU) but that consumes more memory, so it is disabled by default.\r\n */\r\n public get useRenderPasses() {\r\n return this._useRenderPasses;\r\n }\r\n\r\n public set useRenderPasses(usePasses: boolean) {\r\n if (this._useRenderPasses === usePasses) {\r\n return;\r\n }\r\n this._useRenderPasses = usePasses;\r\n this._createRenderPassIds();\r\n }\r\n\r\n /**\r\n * Add a mesh in the exclusion list to prevent it to be handled by the depth peeling renderer\r\n * @param mesh The mesh to exclude from the depth peeling renderer\r\n */\r\n public addExcludedMesh(mesh: AbstractMesh): void {\r\n if (this._excludedMeshes.indexOf(mesh.uniqueId) === -1) {\r\n this._excludedMeshes.push(mesh.uniqueId);\r\n }\r\n }\r\n\r\n /**\r\n * Remove a mesh from the exclusion list of the depth peeling renderer\r\n * @param mesh The mesh to remove\r\n */\r\n public removeExcludedMesh(mesh: AbstractMesh): void {\r\n const index = this._excludedMeshes.indexOf(mesh.uniqueId);\r\n if (index !== -1) {\r\n this._excludedMeshes.splice(index, 1);\r\n }\r\n }\r\n\r\n /** Shader language used by the renderer */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in this renderer\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n private _blendOutput: Nullable<RenderTargetWrapper>;\r\n /**\r\n * Sets the render target wrapper we will blend the transparent objects onto\r\n */\r\n public get blendOutput(): Nullable<RenderTargetWrapper> {\r\n return this._blendOutput;\r\n }\r\n\r\n public set blendOutput(blendOutput: Nullable<RenderTargetWrapper>) {\r\n this._blendOutput = blendOutput;\r\n this._disposeTextures();\r\n if (blendOutput) {\r\n this._createTextures();\r\n }\r\n }\r\n\r\n /**\r\n * Instanciates the depth peeling renderer\r\n * @param scene Scene to attach to\r\n * @param passCount Number of depth layers to peel\r\n * @returns The depth peeling renderer\r\n */\r\n constructor(scene: Scene, passCount: number = 5) {\r\n this._scene = scene;\r\n this._engine = scene.getEngine();\r\n this._passCount = passCount;\r\n\r\n for (let i = 0; i < this._layoutCacheFormat.length; ++i) {\r\n this._layoutCache[i] = this._engine.buildTextureLayout(this._layoutCacheFormat[i]);\r\n }\r\n\r\n this._renderPassIds = [];\r\n this.useRenderPasses = false;\r\n\r\n if (this._engine.isWebGPU) {\r\n this._shaderLanguage = ShaderLanguage.WGSL;\r\n }\r\n\r\n this._createEffects(\"oitFinalSimpleBlend\", [\"uFrontColor\"]);\r\n }\r\n\r\n private _createRenderPassIds(): void {\r\n this._releaseRenderPassIds();\r\n if (this._useRenderPasses) {\r\n for (let i = 0; i < this._passCount + 1; ++i) {\r\n if (!this._renderPassIds[i]) {\r\n this._renderPassIds[i] = this._engine.createRenderPassId(`DepthPeelingRenderer - pass #${i}`);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _releaseRenderPassIds(): void {\r\n for (let i = 0; i < this._renderPassIds.length; ++i) {\r\n this._engine.releaseRenderPassId(this._renderPassIds[i]);\r\n }\r\n this._renderPassIds = [];\r\n }\r\n\r\n protected _getTextureSize(): { width: number; height: number } {\r\n if (this._blendOutput) {\r\n return {\r\n width: this._blendOutput.width,\r\n height: this._blendOutput.height,\r\n };\r\n }\r\n return { width: this._engine.getRenderWidth(), height: this._engine.getRenderHeight() };\r\n }\r\n\r\n protected _createTextures() {\r\n const size = this._getTextureSize();\r\n\r\n // 2 for ping pong\r\n this._depthMrts = [\r\n new MultiRenderTarget(\"depthPeelingDepth0MRT\", size, 3, this._scene, undefined, [\r\n \"depthPeelingDepth0MRT_depth\",\r\n \"depthPeelingDepth0MRT_frontColor\",\r\n \"depthPeelingDepth0MRT_backColor\",\r\n ]),\r\n new MultiRenderTarget(\"depthPeelingDepth1MRT\", size, 3, this._scene, undefined, [\r\n \"depthPeelingDepth1MRT_depth\",\r\n \"depthPeelingDepth1MRT_frontColor\",\r\n \"depthPeelingDepth1MRT_backColor\",\r\n ]),\r\n ];\r\n this._colorMrts = [\r\n new MultiRenderTarget(\"depthPeelingColor0MRT\", size, 2, this._scene, { generateDepthBuffer: false }, [\r\n \"depthPeelingColor0MRT_frontColor\",\r\n \"depthPeelingColor0MRT_backColor\",\r\n ]),\r\n new MultiRenderTarget(\"depthPeelingColor1MRT\", size, 2, this._scene, { generateDepthBuffer: false }, [\r\n \"depthPeelingColor1MRT_frontColor\",\r\n \"depthPeelingColor1MRT_backColor\",\r\n ]),\r\n ];\r\n this._blendBackMrt = new MultiRenderTarget(\"depthPeelingBackMRT\", size, 1, this._scene, { generateDepthBuffer: false }, [\"depthPeelingBackMRT_blendBack\"]);\r\n if (this._blendOutput) {\r\n this._blendBackMrt.setInternalTexture(this._blendOutput.texture!, 0);\r\n }\r\n\r\n // 0 is a depth texture\r\n // 1 is a color texture\r\n const optionsArray = [\r\n {\r\n format: Constants.TEXTUREFORMAT_RG,\r\n samplingMode: Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n type: this._engine.getCaps().textureFloatLinearFiltering ? Constants.TEXTURETYPE_FLOAT : Constants.TEXTURETYPE_HALF_FLOAT,\r\n label: \"DepthPeelingRenderer-DepthTexture\",\r\n } as InternalTextureCreationOptions,\r\n {\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n samplingMode: Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n type: Constants.TEXTURETYPE_HALF_FLOAT,\r\n label: \"DepthPeelingRenderer-ColorTexture\",\r\n } as InternalTextureCreationOptions,\r\n ];\r\n\r\n for (let i = 0; i < 2; i++) {\r\n const depthTexture = this._engine._createInternalTexture(size, optionsArray[0], false);\r\n const frontColorTexture = this._engine._createInternalTexture(size, optionsArray[1], false);\r\n const backColorTexture = this._engine._createInternalTexture(size, optionsArray[1], false);\r\n\r\n this._depthMrts[i].setInternalTexture(depthTexture, 0);\r\n this._depthMrts[i].setInternalTexture(frontColorTexture, 1);\r\n this._depthMrts[i].setInternalTexture(backColorTexture, 2);\r\n this._colorMrts[i].setInternalTexture(frontColorTexture, 0);\r\n this._colorMrts[i].setInternalTexture(backColorTexture, 1);\r\n\r\n this._thinTextures.push(new ThinTexture(depthTexture), new ThinTexture(frontColorTexture), new ThinTexture(backColorTexture));\r\n }\r\n\r\n if (this._blendOutput) {\r\n this._blendOutput.shareDepth(this._depthMrts[0].renderTarget!);\r\n }\r\n }\r\n\r\n protected _disposeTextures() {\r\n for (let i = 0; i < this._thinTextures.length; i++) {\r\n this._thinTextures[i].dispose();\r\n }\r\n\r\n for (let i = 0; i < this._depthMrts.length; i++) {\r\n this._depthMrts[i].dispose(true);\r\n this._colorMrts[i].dispose(true);\r\n this._blendBackMrt.dispose(true);\r\n }\r\n\r\n this._thinTextures = [];\r\n this._colorMrts = [];\r\n this._depthMrts = [];\r\n }\r\n\r\n protected _createEffects(finalEffectFragmentShaderName: string, finalEffectSamplerNames: string[]) {\r\n this._blendBackEffectWrapper = new EffectWrapper({\r\n fragmentShader: \"oitBackBlend\",\r\n useShaderStore: true,\r\n engine: this._engine,\r\n samplerNames: [\"uBackColor\"],\r\n uniformNames: [],\r\n shaderLanguage: this._shaderLanguage,\r\n extraInitializationsAsync: async () => {\r\n if (this._shaderLanguage === ShaderLanguage.WGSL) {\r\n await import(\"../ShadersWGSL/oitBackBlend.fragment\");\r\n } else {\r\n await import(\"../Shaders/oitBackBlend.fragment\");\r\n }\r\n },\r\n });\r\n this._blendBackEffectWrapperPingPong = new EffectWrapper({\r\n fragmentShader: \"oitBackBlend\",\r\n useShaderStore: true,\r\n engine: this._engine,\r\n samplerNames: [\"uBackColor\"],\r\n uniformNames: [],\r\n shaderLanguage: this._shaderLanguage,\r\n extraInitializationsAsync: async () => {\r\n if (this._shaderLanguage === ShaderLanguage.WGSL) {\r\n await import(\"../ShadersWGSL/oitBackBlend.fragment\");\r\n } else {\r\n await import(\"../Shaders/oitBackBlend.fragment\");\r\n }\r\n },\r\n });\r\n\r\n this._finalEffectWrapper = new EffectWrapper({\r\n fragmentShader: finalEffectFragmentShaderName,\r\n useShaderStore: true,\r\n engine: this._engine,\r\n samplerNames: finalEffectSamplerNames,\r\n uniformNames: [],\r\n shaderLanguage: this._shaderLanguage,\r\n extraInitializationsAsync: async () => {\r\n if (this._shaderLanguage === ShaderLanguage.WGSL) {\r\n await import(\"../ShadersWGSL/oitFinalSimpleBlend.fragment\");\r\n } else {\r\n await import(\"../Shaders/oitFinalSimpleBlend.fragment\");\r\n }\r\n },\r\n });\r\n\r\n this._effectRenderer = new EffectRenderer(this._engine);\r\n }\r\n\r\n /**\r\n * Links to the prepass renderer\r\n * @param _prePassRenderer The scene PrePassRenderer\r\n */\r\n public setPrePassRenderer(_prePassRenderer: PrePassRenderer) {}\r\n\r\n /**\r\n * Binds depth peeling textures on an effect\r\n * @param effect The effect to bind textures on\r\n */\r\n public bind(effect: Effect) {\r\n effect.setTexture(\"oitDepthSampler\", this._thinTextures[this._currentPingPongState * 3]);\r\n effect.setTexture(\"oitFrontColorSampler\", this._thinTextures[this._currentPingPongState * 3 + 1]);\r\n }\r\n\r\n private _renderSubMeshes(transparentSubMeshes: SmartArray<SubMesh>) {\r\n let mapMaterialContext: { [uniqueId: number]: IMaterialContext | undefined };\r\n if (this._useRenderPasses) {\r\n mapMaterialContext = {};\r\n }\r\n for (let j = 0; j < transparentSubMeshes.length; j++) {\r\n const material = transparentSubMeshes.data[j].getMaterial();\r\n let previousShaderHotSwapping = true;\r\n let previousBFC = false;\r\n\r\n const subMesh = transparentSubMeshes.data[j];\r\n let drawWrapper: DrawWrapper | undefined;\r\n let firstDraw = false;\r\n\r\n if (this._useRenderPasses) {\r\n drawWrapper = subMesh._getDrawWrapper();\r\n firstDraw = !drawWrapper;\r\n }\r\n\r\n if (material) {\r\n previousShaderHotSwapping = material.allowShaderHotSwapping;\r\n previousBFC = material.backFaceCulling;\r\n material.allowShaderHotSwapping = false;\r\n material.backFaceCulling = false;\r\n }\r\n\r\n subMesh.render(false);\r\n\r\n if (firstDraw) {\r\n // first time we draw this submesh: we replace the material context\r\n drawWrapper = subMesh._getDrawWrapper()!; // we are sure it is now non empty as we just rendered the submesh\r\n if (drawWrapper.materialContext) {\r\n let newMaterialContext = mapMaterialContext![drawWrapper.materialContext.uniqueId];\r\n if (!newMaterialContext) {\r\n newMaterialContext = mapMaterialContext![drawWrapper.materialContext.uniqueId] = this._engine.createMaterialContext();\r\n }\r\n subMesh._getDrawWrapper()!.materialContext = newMaterialContext;\r\n }\r\n }\r\n\r\n if (material) {\r\n material.allowShaderHotSwapping = previousShaderHotSwapping;\r\n material.backFaceCulling = previousBFC;\r\n }\r\n }\r\n }\r\n\r\n protected _finalCompose(writeId: number) {\r\n this._engine.bindFramebuffer(this._blendOutput!);\r\n\r\n this._engine.setAlphaMode(Constants.ALPHA_PREMULTIPLIED);\r\n this._engine.depthCullingState.depthMask = false;\r\n this._engine.depthCullingState.depthTest = false;\r\n this._engine.applyStates();\r\n\r\n this._engine.enableEffect(this._finalEffectWrapper.drawWrapper);\r\n this._finalEffectWrapper.effect.setTexture(\"uFrontColor\", this._thinTextures[writeId * 3 + 1]);\r\n this._effectRenderer.render(this._finalEffectWrapper);\r\n }\r\n\r\n /**\r\n * Checks if the depth peeling renderer is ready to render transparent meshes\r\n * @returns true if the depth peeling renderer is ready to render the transparent meshes\r\n */\r\n public isReady() {\r\n return this._blendBackEffectWrapper.effect.isReady() && this._blendBackEffectWrapperPingPong.effect.isReady() && this._finalEffectWrapper.effect.isReady();\r\n }\r\n\r\n protected _beforeRender() {}\r\n\r\n protected _afterRender() {}\r\n\r\n /**\r\n * Renders transparent submeshes with depth peeling\r\n * @param transparentSubMeshes List of transparent meshes to render\r\n * @returns The array of submeshes that could not be handled by this renderer\r\n */\r\n public render(transparentSubMeshes: SmartArray<SubMesh>): SmartArray<SubMesh> {\r\n this._candidateSubMeshes.length = 0;\r\n this._excludedSubMeshes.length = 0;\r\n if (!this.isReady()) {\r\n return this._excludedSubMeshes;\r\n }\r\n\r\n if (this._scene.activeCamera) {\r\n this._engine.setViewport(this._scene.activeCamera.viewport);\r\n }\r\n\r\n for (let i = 0; i < transparentSubMeshes.length; i++) {\r\n const subMesh = transparentSubMeshes.data[i];\r\n const material = subMesh.getMaterial();\r\n const fillMode = material && subMesh.getRenderingMesh()._getRenderingFillMode(material.fillMode);\r\n\r\n if (\r\n material &&\r\n (fillMode === Material.TriangleFanDrawMode || fillMode === Material.TriangleFillMode || fillMode === Material.TriangleStripDrawMode) &&\r\n this._excludedMeshes.indexOf(subMesh.getMesh().uniqueId) === -1\r\n ) {\r\n this._candidateSubMeshes.push(subMesh);\r\n } else {\r\n this._excludedSubMeshes.push(subMesh);\r\n }\r\n }\r\n\r\n if (!this._candidateSubMeshes.length) {\r\n return this._excludedSubMeshes;\r\n }\r\n\r\n const currentRenderPassId = this._engine.currentRenderPassId;\r\n\r\n this._beforeRender();\r\n\r\n if (this._useRenderPasses) {\r\n this._engine.currentRenderPassId = this._renderPassIds[0];\r\n }\r\n\r\n // Clears\r\n this._engine.bindFramebuffer(this._depthMrts[0].renderTarget!);\r\n this._engine.bindAttachments(this._layoutCache[0]);\r\n this._engine.clear(this._colorCache[0], true, false, false);\r\n this._engine.unBindFramebuffer(this._depthMrts[0].renderTarget!);\r\n\r\n this._engine.bindFramebuffer(this._depthMrts[1].renderTarget!);\r\n this._engine.bindAttachments(this._layoutCache[0]);\r\n this._engine.clear(this._colorCache[1], true, false, false);\r\n this._engine.unBindFramebuffer(this._depthMrts[1].renderTarget!);\r\n\r\n this._engine.bindFramebuffer(this._colorMrts[0].renderTarget!);\r\n this._engine.bindAttachments(this._layoutCache[1]);\r\n this._engine.clear(this._colorCache[2], true, false, false);\r\n this._engine.unBindFramebuffer(this._colorMrts[0].renderTarget!);\r\n\r\n this._engine.bindFramebuffer(this._colorMrts[1].renderTarget!);\r\n this._engine.bindAttachments(this._layoutCache[1]);\r\n this._engine.clear(this._colorCache[2], true, false, false);\r\n this._engine.unBindFramebuffer(this._colorMrts[1].renderTarget!);\r\n\r\n // Draw depth for first pass\r\n this._engine.bindFramebuffer(this._depthMrts[0].renderTarget!);\r\n this._engine.bindAttachments(this._layoutCache[0]);\r\n\r\n this._engine.setAlphaMode(Constants.ALPHA_ONEONE_ONEONE); // in WebGPU, when using MIN or MAX equation, the src / dst color factors should not use SRC_ALPHA and the src / dst alpha factors must be 1 else WebGPU will throw a validation error\r\n this._engine.setAlphaEquation(Constants.ALPHA_EQUATION_MAX);\r\n this._engine.depthCullingState.depthMask = false;\r\n this._engine.depthCullingState.depthTest = true;\r\n this._engine.applyStates();\r\n\r\n this._currentPingPongState = 1;\r\n // Render\r\n this._renderSubMeshes(this._candidateSubMeshes);\r\n this._engine.unBindFramebuffer(this._depthMrts[0].renderTarget!);\r\n\r\n this._scene.resetCachedMaterial();\r\n\r\n // depth peeling ping-pong\r\n let readId = 0;\r\n let writeId = 0;\r\n\r\n for (let i = 0; i < this._passCount; i++) {\r\n readId = i % 2;\r\n writeId = 1 - readId;\r\n this._currentPingPongState = readId;\r\n\r\n if (this._useRenderPasses) {\r\n this._engine.currentRenderPassId = this._renderPassIds[i + 1];\r\n }\r\n\r\n if (this._scene.activeCamera) {\r\n this._engine.setViewport(this._scene.activeCamera.viewport);\r\n }\r\n\r\n // Clears\r\n this._engine.bindFramebuffer(this._depthMrts[writeId].renderTarget!);\r\n this._engine.bindAttachments(this._layoutCache[0]);\r\n this._engine.clear(this._colorCache[0], true, false, false);\r\n this._engine.unBindFramebuffer(this._depthMrts[writeId].renderTarget!);\r\n\r\n this._engine.bindFramebuffer(this._colorMrts[writeId].renderTarget!);\r\n this._engine.bindAttachments(this._layoutCache[1]);\r\n this._engine.clear(this._colorCache[2], true, false, false);\r\n this._engine.unBindFramebuffer(this._colorMrts[writeId].renderTarget!);\r\n\r\n this._engine.bindFramebuffer(this._depthMrts[writeId].renderTarget!);\r\n this._engine.bindAttachments(this._layoutCache[2]);\r\n\r\n this._engine.setAlphaMode(Constants.ALPHA_ONEONE_ONEONE); // the value does not matter (as MAX operation does not use them) but the src and dst color factors should not use SRC_ALPHA else WebGPU will throw a validation error\r\n this._engine.setAlphaEquation(Constants.ALPHA_EQUATION_MAX);\r\n this._engine.depthCullingState.depthTest = false;\r\n this._engine.applyStates();\r\n\r\n // Render\r\n this._renderSubMeshes(this._candidateSubMeshes);\r\n this._engine.unBindFramebuffer(this._depthMrts[writeId].renderTarget!);\r\n\r\n this._scene.resetCachedMaterial();\r\n\r\n // Back color\r\n this._engine.bindFramebuffer(this._blendBackMrt.renderTarget!);\r\n this._engine.bindAttachments(this._layoutCache[0]);\r\n this._engine.setAlphaEquation(Constants.ALPHA_EQUATION_ADD);\r\n this._engine.setAlphaMode(Constants.ALPHA_LAYER_ACCUMULATE);\r\n this._engine.applyStates();\r\n\r\n const blendBackEffectWrapper = writeId === 0 || !this._useRenderPasses ? this._blendBackEffectWrapper : this._blendBackEffectWrapperPingPong;\r\n this._engine.enableEffect(blendBackEffectWrapper.drawWrapper);\r\n blendBackEffectWrapper.effect.setTexture(\"uBackColor\", this._thinTextures[writeId * 3 + 2]);\r\n this._effectRenderer.render(blendBackEffectWrapper);\r\n this._engine.unBindFramebuffer(this._blendBackMrt.renderTarget!);\r\n }\r\n\r\n this._engine.currentRenderPassId = currentRenderPassId;\r\n\r\n // Final composition on default FB\r\n this._finalCompose(writeId);\r\n\r\n this._engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n\r\n this._engine.depthCullingState.depthMask = true;\r\n this._engine.depthCullingState.depthTest = true;\r\n\r\n this._afterRender();\r\n\r\n return this._excludedSubMeshes;\r\n }\r\n\r\n /**\r\n * Disposes the depth peeling renderer and associated resources\r\n */\r\n public dispose() {\r\n this._disposeTextures();\r\n this._blendBackEffectWrapper.dispose();\r\n this._finalEffectWrapper.dispose();\r\n this._effectRenderer.dispose();\r\n this._releaseRenderPassIds();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"thinDepthPeelingRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Rendering/thinDepthPeelingRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Implementation based on https://medium.com/@shrekshao_71662/dual-depth-peeling-implementation-in-webgl-11baa061ba4b\r\n */\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { MultiRenderTarget } from \"../Materials/Textures/multiRenderTarget\";\r\nimport type { InternalTextureCreationOptions } from \"../Materials/Textures/textureCreationOptions\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { SmartArray } from \"../Misc/smartArray\";\r\nimport type { Scene } from \"../scene\";\r\nimport { ThinTexture } from \"../Materials/Textures/thinTexture\";\r\nimport { EffectRenderer, EffectWrapper } from \"../Materials/effectRenderer\";\r\nimport type { PrePassRenderer } from \"./prePassRenderer\";\r\nimport type { IMaterialContext } from \"../Engines/IMaterialContext\";\r\nimport type { DrawWrapper } from \"../Materials/drawWrapper\";\r\nimport { Material } from \"../Materials/material\";\r\n\r\nimport \"../Engines/Extensions/engine.multiRender\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport type { RenderTargetWrapper } from \"../Engines/renderTargetWrapper\";\r\nimport type { Nullable } from \"../types\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class ThinDepthPeelingRenderer {\r\n protected _scene: Scene;\r\n protected _engine: AbstractEngine;\r\n protected _depthMrts: MultiRenderTarget[] = [];\r\n protected _thinTextures: ThinTexture[] = [];\r\n protected _colorMrts: MultiRenderTarget[] = [];\r\n protected _blendBackMrt: MultiRenderTarget;\r\n\r\n protected _blendBackEffectWrapper: EffectWrapper;\r\n protected _blendBackEffectWrapperPingPong: EffectWrapper;\r\n protected _finalEffectWrapper: EffectWrapper;\r\n protected _effectRenderer: EffectRenderer;\r\n\r\n protected _currentPingPongState: number = 0;\r\n\r\n protected _layoutCacheFormat = [[true], [true, true], [true, true, true]];\r\n protected _layoutCache: number[][] = [];\r\n protected _renderPassIds: number[];\r\n protected _candidateSubMeshes: SmartArray<SubMesh> = new SmartArray(10);\r\n protected _excludedSubMeshes: SmartArray<SubMesh> = new SmartArray(10);\r\n protected _excludedMeshes: number[] = [];\r\n\r\n protected static _DEPTH_CLEAR_VALUE = -99999.0;\r\n protected static _MIN_DEPTH = 0;\r\n protected static _MAX_DEPTH = 1;\r\n\r\n protected _colorCache = [\r\n new Color4(ThinDepthPeelingRenderer._DEPTH_CLEAR_VALUE, ThinDepthPeelingRenderer._DEPTH_CLEAR_VALUE, 0, 0),\r\n new Color4(-ThinDepthPeelingRenderer._MIN_DEPTH, ThinDepthPeelingRenderer._MAX_DEPTH, 0, 0),\r\n new Color4(0, 0, 0, 0),\r\n ];\r\n\r\n protected _passCount: number;\r\n /**\r\n * Number of depth peeling passes. As we are using dual depth peeling, each pass two levels of transparency are processed.\r\n */\r\n public get passCount(): number {\r\n return this._passCount;\r\n }\r\n\r\n public set passCount(count: number) {\r\n if (this._passCount === count) {\r\n return;\r\n }\r\n this._passCount = count;\r\n this._createRenderPassIds();\r\n }\r\n\r\n protected _useRenderPasses: boolean;\r\n /**\r\n * Instructs the renderer to use render passes. It is an optimization that makes the rendering faster for some engines (like WebGPU) but that consumes more memory, so it is disabled by default.\r\n */\r\n public get useRenderPasses() {\r\n return this._useRenderPasses;\r\n }\r\n\r\n public set useRenderPasses(usePasses: boolean) {\r\n if (this._useRenderPasses === usePasses) {\r\n return;\r\n }\r\n this._useRenderPasses = usePasses;\r\n this._createRenderPassIds();\r\n }\r\n\r\n /**\r\n * Add a mesh in the exclusion list to prevent it to be handled by the depth peeling renderer\r\n * @param mesh The mesh to exclude from the depth peeling renderer\r\n */\r\n public addExcludedMesh(mesh: AbstractMesh): void {\r\n if (this._excludedMeshes.indexOf(mesh.uniqueId) === -1) {\r\n this._excludedMeshes.push(mesh.uniqueId);\r\n }\r\n }\r\n\r\n /**\r\n * Remove a mesh from the exclusion list of the depth peeling renderer\r\n * @param mesh The mesh to remove\r\n */\r\n public removeExcludedMesh(mesh: AbstractMesh): void {\r\n const index = this._excludedMeshes.indexOf(mesh.uniqueId);\r\n if (index !== -1) {\r\n this._excludedMeshes.splice(index, 1);\r\n }\r\n }\r\n\r\n /** Shader language used by the renderer */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in this renderer\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n private _blendOutput: Nullable<RenderTargetWrapper>;\r\n /**\r\n * Sets the render target wrapper we will blend the transparent objects onto\r\n */\r\n public get blendOutput(): Nullable<RenderTargetWrapper> {\r\n return this._blendOutput;\r\n }\r\n\r\n public set blendOutput(blendOutput: Nullable<RenderTargetWrapper>) {\r\n this._blendOutput = blendOutput;\r\n this._disposeTextures();\r\n if (blendOutput) {\r\n this._createTextures();\r\n }\r\n }\r\n\r\n /**\r\n * Instanciates the depth peeling renderer\r\n * @param scene Scene to attach to\r\n * @param passCount Number of depth layers to peel\r\n * @returns The depth peeling renderer\r\n */\r\n constructor(scene: Scene, passCount: number = 5) {\r\n this._scene = scene;\r\n this._engine = scene.getEngine();\r\n this._passCount = passCount;\r\n\r\n for (let i = 0; i < this._layoutCacheFormat.length; ++i) {\r\n this._layoutCache[i] = this._engine.buildTextureLayout(this._layoutCacheFormat[i]);\r\n }\r\n\r\n this._renderPassIds = [];\r\n this.useRenderPasses = false;\r\n\r\n if (this._engine.isWebGPU) {\r\n this._shaderLanguage = ShaderLanguage.WGSL;\r\n }\r\n\r\n this._createEffects(\"oitFinalSimpleBlend\", [\"uFrontColor\"]);\r\n }\r\n\r\n private _createRenderPassIds(): void {\r\n this._releaseRenderPassIds();\r\n if (this._useRenderPasses) {\r\n for (let i = 0; i < this._passCount + 1; ++i) {\r\n if (!this._renderPassIds[i]) {\r\n this._renderPassIds[i] = this._engine.createRenderPassId(`DepthPeelingRenderer - pass #${i}`);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _releaseRenderPassIds(): void {\r\n for (let i = 0; i < this._renderPassIds.length; ++i) {\r\n this._engine.releaseRenderPassId(this._renderPassIds[i]);\r\n }\r\n this._renderPassIds = [];\r\n }\r\n\r\n protected _getTextureSize(): { width: number; height: number } {\r\n if (this._blendOutput) {\r\n return {\r\n width: this._blendOutput.width,\r\n height: this._blendOutput.height,\r\n };\r\n }\r\n return { width: this._engine.getRenderWidth(), height: this._engine.getRenderHeight() };\r\n }\r\n\r\n protected _createTextures() {\r\n const size = this._getTextureSize();\r\n\r\n // 2 for ping pong\r\n this._depthMrts = [\r\n new MultiRenderTarget(\"depthPeelingDepth0MRT\", size, 3, this._scene, undefined, [\r\n \"depthPeelingDepth0MRT_depth\",\r\n \"depthPeelingDepth0MRT_frontColor\",\r\n \"depthPeelingDepth0MRT_backColor\",\r\n ]),\r\n new MultiRenderTarget(\"depthPeelingDepth1MRT\", size, 3, this._scene, undefined, [\r\n \"depthPeelingDepth1MRT_depth\",\r\n \"depthPeelingDepth1MRT_frontColor\",\r\n \"depthPeelingDepth1MRT_backColor\",\r\n ]),\r\n ];\r\n this._colorMrts = [\r\n new MultiRenderTarget(\"depthPeelingColor0MRT\", size, 2, this._scene, { generateDepthBuffer: false }, [\r\n \"depthPeelingColor0MRT_frontColor\",\r\n \"depthPeelingColor0MRT_backColor\",\r\n ]),\r\n new MultiRenderTarget(\"depthPeelingColor1MRT\", size, 2, this._scene, { generateDepthBuffer: false }, [\r\n \"depthPeelingColor1MRT_frontColor\",\r\n \"depthPeelingColor1MRT_backColor\",\r\n ]),\r\n ];\r\n this._blendBackMrt = new MultiRenderTarget(\"depthPeelingBackMRT\", size, 1, this._scene, { generateDepthBuffer: false }, [\"depthPeelingBackMRT_blendBack\"]);\r\n if (this._blendOutput) {\r\n this._blendBackMrt.setInternalTexture(this._blendOutput.texture!, 0);\r\n }\r\n\r\n // 0 is a depth texture\r\n // 1 is a color texture\r\n const optionsArray = [\r\n {\r\n format: Constants.TEXTUREFORMAT_RG,\r\n samplingMode: Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n type: this._engine.getCaps().textureFloatLinearFiltering ? Constants.TEXTURETYPE_FLOAT : Constants.TEXTURETYPE_HALF_FLOAT,\r\n label: \"DepthPeelingRenderer-DepthTexture\",\r\n } as InternalTextureCreationOptions,\r\n {\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n samplingMode: Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n type: Constants.TEXTURETYPE_HALF_FLOAT,\r\n label: \"DepthPeelingRenderer-ColorTexture\",\r\n } as InternalTextureCreationOptions,\r\n ];\r\n\r\n for (let i = 0; i < 2; i++) {\r\n const depthTexture = this._engine._createInternalTexture(size, optionsArray[0], false);\r\n const frontColorTexture = this._engine._createInternalTexture(size, optionsArray[1], false);\r\n const backColorTexture = this._engine._createInternalTexture(size, optionsArray[1], false);\r\n\r\n this._depthMrts[i].setInternalTexture(depthTexture, 0);\r\n this._depthMrts[i].setInternalTexture(frontColorTexture, 1);\r\n this._depthMrts[i].setInternalTexture(backColorTexture, 2);\r\n this._colorMrts[i].setInternalTexture(frontColorTexture, 0);\r\n this._colorMrts[i].setInternalTexture(backColorTexture, 1);\r\n\r\n this._thinTextures.push(new ThinTexture(depthTexture), new ThinTexture(frontColorTexture), new ThinTexture(backColorTexture));\r\n }\r\n\r\n if (this._blendOutput) {\r\n this._blendOutput.shareDepth(this._depthMrts[0].renderTarget!);\r\n }\r\n }\r\n\r\n protected _disposeTextures() {\r\n for (let i = 0; i < this._thinTextures.length; i++) {\r\n this._thinTextures[i].dispose();\r\n }\r\n\r\n for (let i = 0; i < this._depthMrts.length; i++) {\r\n this._depthMrts[i].dispose(true);\r\n this._colorMrts[i].dispose(true);\r\n this._blendBackMrt.dispose(true);\r\n }\r\n\r\n this._thinTextures = [];\r\n this._colorMrts = [];\r\n this._depthMrts = [];\r\n }\r\n\r\n protected _createEffects(finalEffectFragmentShaderName: string, finalEffectSamplerNames: string[]) {\r\n this._blendBackEffectWrapper = new EffectWrapper({\r\n fragmentShader: \"oitBackBlend\",\r\n useShaderStore: true,\r\n engine: this._engine,\r\n samplerNames: [\"uBackColor\"],\r\n uniformNames: [],\r\n shaderLanguage: this._shaderLanguage,\r\n extraInitializationsAsync: async () => {\r\n if (this._shaderLanguage === ShaderLanguage.WGSL) {\r\n await import(\"../ShadersWGSL/oitBackBlend.fragment\");\r\n } else {\r\n await import(\"../Shaders/oitBackBlend.fragment\");\r\n }\r\n },\r\n });\r\n this._blendBackEffectWrapperPingPong = new EffectWrapper({\r\n fragmentShader: \"oitBackBlend\",\r\n useShaderStore: true,\r\n engine: this._engine,\r\n samplerNames: [\"uBackColor\"],\r\n uniformNames: [],\r\n shaderLanguage: this._shaderLanguage,\r\n extraInitializationsAsync: async () => {\r\n if (this._shaderLanguage === ShaderLanguage.WGSL) {\r\n await import(\"../ShadersWGSL/oitBackBlend.fragment\");\r\n } else {\r\n await import(\"../Shaders/oitBackBlend.fragment\");\r\n }\r\n },\r\n });\r\n\r\n this._finalEffectWrapper = new EffectWrapper({\r\n fragmentShader: finalEffectFragmentShaderName,\r\n useShaderStore: true,\r\n engine: this._engine,\r\n samplerNames: finalEffectSamplerNames,\r\n uniformNames: [],\r\n shaderLanguage: this._shaderLanguage,\r\n extraInitializationsAsync: async () => {\r\n if (this._shaderLanguage === ShaderLanguage.WGSL) {\r\n await import(\"../ShadersWGSL/oitFinalSimpleBlend.fragment\");\r\n } else {\r\n await import(\"../Shaders/oitFinalSimpleBlend.fragment\");\r\n }\r\n },\r\n });\r\n\r\n this._effectRenderer = new EffectRenderer(this._engine);\r\n }\r\n\r\n /**\r\n * Links to the prepass renderer\r\n * @param _prePassRenderer The scene PrePassRenderer\r\n */\r\n public setPrePassRenderer(_prePassRenderer: PrePassRenderer) {}\r\n\r\n /**\r\n * Binds depth peeling textures on an effect\r\n * @param effect The effect to bind textures on\r\n */\r\n public bind(effect: Effect) {\r\n effect.setTexture(\"oitDepthSampler\", this._thinTextures[this._currentPingPongState * 3]);\r\n effect.setTexture(\"oitFrontColorSampler\", this._thinTextures[this._currentPingPongState * 3 + 1]);\r\n }\r\n\r\n private _renderSubMeshes(transparentSubMeshes: SmartArray<SubMesh>) {\r\n let mapMaterialContext: { [uniqueId: number]: IMaterialContext | undefined };\r\n if (this._useRenderPasses) {\r\n mapMaterialContext = {};\r\n }\r\n for (let j = 0; j < transparentSubMeshes.length; j++) {\r\n const material = transparentSubMeshes.data[j].getMaterial();\r\n let previousShaderHotSwapping = true;\r\n let previousBFC = false;\r\n\r\n const subMesh = transparentSubMeshes.data[j];\r\n let drawWrapper: DrawWrapper | undefined;\r\n let firstDraw = false;\r\n\r\n if (this._useRenderPasses) {\r\n drawWrapper = subMesh._getDrawWrapper();\r\n firstDraw = !drawWrapper;\r\n }\r\n\r\n if (material) {\r\n previousShaderHotSwapping = material.allowShaderHotSwapping;\r\n previousBFC = material.backFaceCulling;\r\n material.allowShaderHotSwapping = false;\r\n material.backFaceCulling = false;\r\n }\r\n\r\n subMesh.render(false);\r\n\r\n if (firstDraw) {\r\n // first time we draw this submesh: we replace the material context\r\n drawWrapper = subMesh._getDrawWrapper()!; // we are sure it is now non empty as we just rendered the submesh\r\n if (drawWrapper.materialContext) {\r\n let newMaterialContext = mapMaterialContext![drawWrapper.materialContext.uniqueId];\r\n if (!newMaterialContext) {\r\n newMaterialContext = mapMaterialContext![drawWrapper.materialContext.uniqueId] = this._engine.createMaterialContext();\r\n }\r\n subMesh._getDrawWrapper()!.materialContext = newMaterialContext;\r\n }\r\n }\r\n\r\n if (material) {\r\n material.allowShaderHotSwapping = previousShaderHotSwapping;\r\n material.backFaceCulling = previousBFC;\r\n }\r\n }\r\n }\r\n\r\n protected _finalCompose(writeId: number) {\r\n this._engine.bindFramebuffer(this._blendOutput!);\r\n\r\n this._engine.setAlphaMode(Constants.ALPHA_PREMULTIPLIED);\r\n this._engine.depthCullingState.depthMask = false;\r\n this._engine.depthCullingState.depthTest = false;\r\n this._engine.applyStates();\r\n\r\n this._engine.enableEffect(this._finalEffectWrapper.drawWrapper);\r\n this._finalEffectWrapper.effect.setTexture(\"uFrontColor\", this._thinTextures[writeId * 3 + 1]);\r\n this._effectRenderer.render(this._finalEffectWrapper);\r\n }\r\n\r\n /**\r\n * Checks if the depth peeling renderer is ready to render transparent meshes\r\n * @returns true if the depth peeling renderer is ready to render the transparent meshes\r\n */\r\n public isReady() {\r\n return this._blendBackEffectWrapper.effect.isReady() && this._blendBackEffectWrapperPingPong.effect.isReady() && this._finalEffectWrapper.effect.isReady();\r\n }\r\n\r\n protected _beforeRender() {}\r\n\r\n protected _afterRender() {}\r\n\r\n protected _noTransparentMeshes() {}\r\n\r\n /**\r\n * Renders transparent submeshes with depth peeling\r\n * @param transparentSubMeshes List of transparent meshes to render\r\n * @returns The array of submeshes that could not be handled by this renderer\r\n */\r\n public render(transparentSubMeshes: SmartArray<SubMesh>): SmartArray<SubMesh> {\r\n this._candidateSubMeshes.length = 0;\r\n this._excludedSubMeshes.length = 0;\r\n if (!this.isReady()) {\r\n return this._excludedSubMeshes;\r\n }\r\n\r\n if (this._scene.activeCamera) {\r\n this._engine.setViewport(this._scene.activeCamera.viewport);\r\n }\r\n\r\n for (let i = 0; i < transparentSubMeshes.length; i++) {\r\n const subMesh = transparentSubMeshes.data[i];\r\n const material = subMesh.getMaterial();\r\n const fillMode = material && subMesh.getRenderingMesh()._getRenderingFillMode(material.fillMode);\r\n\r\n if (\r\n material &&\r\n (fillMode === Material.TriangleFanDrawMode || fillMode === Material.TriangleFillMode || fillMode === Material.TriangleStripDrawMode) &&\r\n this._excludedMeshes.indexOf(subMesh.getMesh().uniqueId) === -1\r\n ) {\r\n this._candidateSubMeshes.push(subMesh);\r\n } else {\r\n this._excludedSubMeshes.push(subMesh);\r\n }\r\n }\r\n\r\n if (!this._candidateSubMeshes.length) {\r\n this._noTransparentMeshes();\r\n return this._excludedSubMeshes;\r\n }\r\n\r\n const currentRenderPassId = this._engine.currentRenderPassId;\r\n\r\n this._beforeRender();\r\n\r\n if (this._useRenderPasses) {\r\n this._engine.currentRenderPassId = this._renderPassIds[0];\r\n }\r\n\r\n // Clears\r\n this._engine.bindFramebuffer(this._depthMrts[0].renderTarget!);\r\n this._engine.bindAttachments(this._layoutCache[0]);\r\n this._engine.clear(this._colorCache[0], true, false, false);\r\n this._engine.unBindFramebuffer(this._depthMrts[0].renderTarget!);\r\n\r\n this._engine.bindFramebuffer(this._depthMrts[1].renderTarget!);\r\n this._engine.bindAttachments(this._layoutCache[0]);\r\n this._engine.clear(this._colorCache[1], true, false, false);\r\n this._engine.unBindFramebuffer(this._depthMrts[1].renderTarget!);\r\n\r\n this._engine.bindFramebuffer(this._colorMrts[0].renderTarget!);\r\n this._engine.bindAttachments(this._layoutCache[1]);\r\n this._engine.clear(this._colorCache[2], true, false, false);\r\n this._engine.unBindFramebuffer(this._colorMrts[0].renderTarget!);\r\n\r\n this._engine.bindFramebuffer(this._colorMrts[1].renderTarget!);\r\n this._engine.bindAttachments(this._layoutCache[1]);\r\n this._engine.clear(this._colorCache[2], true, false, false);\r\n this._engine.unBindFramebuffer(this._colorMrts[1].renderTarget!);\r\n\r\n // Draw depth for first pass\r\n this._engine.bindFramebuffer(this._depthMrts[0].renderTarget!);\r\n this._engine.bindAttachments(this._layoutCache[0]);\r\n\r\n this._engine.setAlphaMode(Constants.ALPHA_ONEONE_ONEONE); // in WebGPU, when using MIN or MAX equation, the src / dst color factors should not use SRC_ALPHA and the src / dst alpha factors must be 1 else WebGPU will throw a validation error\r\n this._engine.setAlphaEquation(Constants.ALPHA_EQUATION_MAX);\r\n this._engine.depthCullingState.depthMask = false;\r\n this._engine.depthCullingState.depthTest = true;\r\n this._engine.applyStates();\r\n\r\n this._currentPingPongState = 1;\r\n // Render\r\n this._renderSubMeshes(this._candidateSubMeshes);\r\n this._engine.unBindFramebuffer(this._depthMrts[0].renderTarget!);\r\n\r\n this._scene.resetCachedMaterial();\r\n\r\n // depth peeling ping-pong\r\n let readId = 0;\r\n let writeId = 0;\r\n\r\n for (let i = 0; i < this._passCount; i++) {\r\n readId = i % 2;\r\n writeId = 1 - readId;\r\n this._currentPingPongState = readId;\r\n\r\n if (this._useRenderPasses) {\r\n this._engine.currentRenderPassId = this._renderPassIds[i + 1];\r\n }\r\n\r\n if (this._scene.activeCamera) {\r\n this._engine.setViewport(this._scene.activeCamera.viewport);\r\n }\r\n\r\n // Clears\r\n this._engine.bindFramebuffer(this._depthMrts[writeId].renderTarget!);\r\n this._engine.bindAttachments(this._layoutCache[0]);\r\n this._engine.clear(this._colorCache[0], true, false, false);\r\n this._engine.unBindFramebuffer(this._depthMrts[writeId].renderTarget!);\r\n\r\n this._engine.bindFramebuffer(this._colorMrts[writeId].renderTarget!);\r\n this._engine.bindAttachments(this._layoutCache[1]);\r\n this._engine.clear(this._colorCache[2], true, false, false);\r\n this._engine.unBindFramebuffer(this._colorMrts[writeId].renderTarget!);\r\n\r\n this._engine.bindFramebuffer(this._depthMrts[writeId].renderTarget!);\r\n this._engine.bindAttachments(this._layoutCache[2]);\r\n\r\n this._engine.setAlphaMode(Constants.ALPHA_ONEONE_ONEONE); // the value does not matter (as MAX operation does not use them) but the src and dst color factors should not use SRC_ALPHA else WebGPU will throw a validation error\r\n this._engine.setAlphaEquation(Constants.ALPHA_EQUATION_MAX);\r\n this._engine.depthCullingState.depthTest = false;\r\n this._engine.applyStates();\r\n\r\n // Render\r\n this._renderSubMeshes(this._candidateSubMeshes);\r\n this._engine.unBindFramebuffer(this._depthMrts[writeId].renderTarget!);\r\n\r\n this._scene.resetCachedMaterial();\r\n\r\n // Back color\r\n this._engine.bindFramebuffer(this._blendBackMrt.renderTarget!);\r\n this._engine.bindAttachments(this._layoutCache[0]);\r\n this._engine.setAlphaEquation(Constants.ALPHA_EQUATION_ADD);\r\n this._engine.setAlphaMode(Constants.ALPHA_LAYER_ACCUMULATE);\r\n this._engine.applyStates();\r\n\r\n const blendBackEffectWrapper = writeId === 0 || !this._useRenderPasses ? this._blendBackEffectWrapper : this._blendBackEffectWrapperPingPong;\r\n this._engine.enableEffect(blendBackEffectWrapper.drawWrapper);\r\n blendBackEffectWrapper.effect.setTexture(\"uBackColor\", this._thinTextures[writeId * 3 + 2]);\r\n this._effectRenderer.render(blendBackEffectWrapper);\r\n this._engine.unBindFramebuffer(this._blendBackMrt.renderTarget!);\r\n }\r\n\r\n this._engine.currentRenderPassId = currentRenderPassId;\r\n\r\n // Final composition on default FB\r\n this._finalCompose(writeId);\r\n\r\n this._engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n\r\n this._engine.depthCullingState.depthMask = true;\r\n this._engine.depthCullingState.depthTest = true;\r\n\r\n this._afterRender();\r\n\r\n return this._excludedSubMeshes;\r\n }\r\n\r\n /**\r\n * Disposes the depth peeling renderer and associated resources\r\n */\r\n public dispose() {\r\n this._disposeTextures();\r\n this._blendBackEffectWrapper.dispose();\r\n this._finalEffectWrapper.dispose();\r\n this._effectRenderer.dispose();\r\n this._releaseRenderPassIds();\r\n }\r\n}\r\n"]}
@@ -149,8 +149,12 @@ vPositionW=vec3(worldPos);
149
149
  vDirectionW=normalize(vec3(finalWorld*vec4(positionUpdated,0.0)));
150
150
  #endif
151
151
  #if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0
152
+ #ifdef RIGHT_HANDED
153
+ vViewDepth=-(view*worldPos).z;
154
+ #else
152
155
  vViewDepth=(view*worldPos).z;
153
156
  #endif
157
+ #endif
154
158
  #ifndef UV1
155
159
  vec2 uvUpdated=vec2(0.,0.);
156
160
  #endif
@@ -1 +1 @@
1
- {"version":3,"file":"default.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/default.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,2CAA2C,CAAC;AACnD,OAAO,wCAAwC,CAAC;AAChD,OAAO,yCAAyC,CAAC;AACjD,OAAO,kCAAkC,CAAC;AAC1C,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kDAAkD,CAAC;AAC1D,OAAO,uCAAuC,CAAC;AAC/C,OAAO,2CAA2C,CAAC;AACnD,OAAO,2CAA2C,CAAC;AACnD,OAAO,2CAA2C,CAAC;AACnD,OAAO,wCAAwC,CAAC;AAChD,OAAO,6CAA6C,CAAC;AACrD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,6CAA6C,CAAC;AACrD,OAAO,wCAAwC,CAAC;AAChD,OAAO,sDAAsD,CAAC;AAC9D,OAAO,gDAAgD,CAAC;AACxD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,2CAA2C,CAAC;AACnD,OAAO,qCAAqC,CAAC;AAC7C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,8BAA8B,CAAC;AACtC,OAAO,uCAAuC,CAAC;AAC/C,OAAO,gCAAgC,CAAC;AACxC,OAAO,wCAAwC,CAAC;AAChD,OAAO,8CAA8C,CAAC;AACtD,OAAO,6BAA6B,CAAC;AACrC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,4BAA4B,CAAC;AACpC,OAAO,gCAAgC,CAAC;AACxC,OAAO,oCAAoC,CAAC;AAC5C,OAAO,mCAAmC,CAAC;AAC3C,OAAO,iCAAiC,CAAC;AAEzC,MAAM,IAAI,GAAG,qBAAqB,CAAC;AACnC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsJd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IAClC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/defaultVertexDeclaration\";\nimport \"./ShadersInclude/defaultUboDeclaration\";\nimport \"./ShadersInclude/uvAttributeDeclaration\";\nimport \"./ShadersInclude/helperFunctions\";\nimport \"./ShadersInclude/bonesDeclaration\";\nimport \"./ShadersInclude/bakedVertexAnimationDeclaration\";\nimport \"./ShadersInclude/instancesDeclaration\";\nimport \"./ShadersInclude/prePassVertexDeclaration\";\nimport \"./ShadersInclude/mainUVVaryingDeclaration\";\nimport \"./ShadersInclude/samplerVertexDeclaration\";\nimport \"./ShadersInclude/bumpVertexDeclaration\";\nimport \"./ShadersInclude/clipPlaneVertexDeclaration\";\nimport \"./ShadersInclude/fogVertexDeclaration\";\nimport \"./ShadersInclude/lightVxFragmentDeclaration\";\nimport \"./ShadersInclude/lightVxUboDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobalDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexDeclaration\";\nimport \"./ShadersInclude/logDepthDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobal\";\nimport \"./ShadersInclude/morphTargetsVertex\";\nimport \"./ShadersInclude/instancesVertex\";\nimport \"./ShadersInclude/bonesVertex\";\nimport \"./ShadersInclude/bakedVertexAnimation\";\nimport \"./ShadersInclude/prePassVertex\";\nimport \"./ShadersInclude/uvVariableDeclaration\";\nimport \"./ShadersInclude/samplerVertexImplementation\";\nimport \"./ShadersInclude/bumpVertex\";\nimport \"./ShadersInclude/clipPlaneVertex\";\nimport \"./ShadersInclude/fogVertex\";\nimport \"./ShadersInclude/shadowsVertex\";\nimport \"./ShadersInclude/vertexColorMixing\";\nimport \"./ShadersInclude/pointCloudVertex\";\nimport \"./ShadersInclude/logDepthVertex\";\n\nconst name = \"defaultVertexShader\";\nconst shader = `#define CUSTOM_VERTEX_EXTENSION\n#include<__decl__defaultVertex>\n#define CUSTOM_VERTEX_BEGIN\nattribute vec3 position;\n#ifdef NORMAL\nattribute vec3 normal;\n#endif\n#ifdef TANGENT\nattribute vec4 tangent;\n#endif\n#ifdef UV1\nattribute vec2 uv;\n#endif\n#include<uvAttributeDeclaration>[2..7]\n#ifdef VERTEXCOLOR\nattribute vec4 color;\n#endif\n#include<helperFunctions>\n#include<bonesDeclaration>\n#include<bakedVertexAnimationDeclaration>\n#include<instancesDeclaration>\n#include<prePassVertexDeclaration>\n#include<mainUVVaryingDeclaration>[1..7]\n#include<samplerVertexDeclaration>(_DEFINENAME_,DIFFUSE,_VARYINGNAME_,Diffuse)\n#include<samplerVertexDeclaration>(_DEFINENAME_,DETAIL,_VARYINGNAME_,Detail)\n#include<samplerVertexDeclaration>(_DEFINENAME_,AMBIENT,_VARYINGNAME_,Ambient)\n#include<samplerVertexDeclaration>(_DEFINENAME_,OPACITY,_VARYINGNAME_,Opacity)\n#include<samplerVertexDeclaration>(_DEFINENAME_,EMISSIVE,_VARYINGNAME_,Emissive)\n#include<samplerVertexDeclaration>(_DEFINENAME_,LIGHTMAP,_VARYINGNAME_,Lightmap)\n#if defined(SPECULARTERM)\n#include<samplerVertexDeclaration>(_DEFINENAME_,SPECULAR,_VARYINGNAME_,Specular)\n#endif\n#include<samplerVertexDeclaration>(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump)\n#include<samplerVertexDeclaration>(_DEFINENAME_,DECAL,_VARYINGNAME_,Decal)\nvarying vec3 vPositionW;\n#ifdef NORMAL\nvarying vec3 vNormalW;\n#endif\n#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES)\nvarying vec4 vColor;\n#endif\n#include<bumpVertexDeclaration>\n#include<clipPlaneVertexDeclaration>\n#include<fogVertexDeclaration>\n#include<__decl__lightVxFragment>[0..maxSimultaneousLights]\n#include<morphTargetsVertexGlobalDeclaration>\n#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]\n#ifdef REFLECTIONMAP_SKYBOX\nvarying vec3 vPositionUVW;\n#endif\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvarying vec3 vDirectionW;\n#endif\n#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0\nvarying float vViewDepth;\n#endif\n#include<logDepthDeclaration>\n#define CUSTOM_VERTEX_DEFINITIONS\nvoid main(void) {\n#define CUSTOM_VERTEX_MAIN_BEGIN\nvec3 positionUpdated=position;\n#ifdef NORMAL\nvec3 normalUpdated=normal;\n#endif\n#ifdef TANGENT\nvec4 tangentUpdated=tangent;\n#endif\n#ifdef UV1\nvec2 uvUpdated=uv;\n#endif\n#ifdef UV2\nvec2 uv2Updated=uv2;\n#endif\n#ifdef VERTEXCOLOR\nvec4 colorUpdated=color;\n#endif\n#include<morphTargetsVertexGlobal>\n#include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]\n#ifdef REFLECTIONMAP_SKYBOX\nvPositionUVW=positionUpdated;\n#endif\n#define CUSTOM_VERTEX_UPDATE_POSITION\n#define CUSTOM_VERTEX_UPDATE_NORMAL\n#include<instancesVertex>\n#if defined(PREPASS) && ((defined(PREPASS_VELOCITY) || defined(PREPASS_VELOCITY_LINEAR)) && !defined(BONES_VELOCITY_ENABLED)\nvCurrentPosition=viewProjection*finalWorld*vec4(positionUpdated,1.0);vPreviousPosition=previousViewProjection*finalPreviousWorld*vec4(positionUpdated,1.0);\n#endif\n#include<bonesVertex>\n#include<bakedVertexAnimation>\nvec4 worldPos=finalWorld*vec4(positionUpdated,1.0);\n#ifdef NORMAL\nmat3 normalWorld=mat3(finalWorld);\n#if defined(INSTANCES) && defined(THIN_INSTANCES)\nvNormalW=normalUpdated/vec3(dot(normalWorld[0],normalWorld[0]),dot(normalWorld[1],normalWorld[1]),dot(normalWorld[2],normalWorld[2]));vNormalW=normalize(normalWorld*vNormalW);\n#else\n#ifdef NONUNIFORMSCALING\nnormalWorld=transposeMat3(inverseMat3(normalWorld));\n#endif\nvNormalW=normalize(normalWorld*normalUpdated);\n#endif\n#endif\n#define CUSTOM_VERTEX_UPDATE_WORLDPOS\n#ifdef MULTIVIEW\nif (gl_ViewID_OVR==0u) {gl_Position=viewProjection*worldPos;} else {gl_Position=viewProjectionR*worldPos;}\n#else\ngl_Position=viewProjection*worldPos;\n#endif\nvPositionW=vec3(worldPos);\n#ifdef PREPASS\n#include<prePassVertex>\n#endif\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvDirectionW=normalize(vec3(finalWorld*vec4(positionUpdated,0.0)));\n#endif\n#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0\nvViewDepth=(view*worldPos).z;\n#endif\n#ifndef UV1\nvec2 uvUpdated=vec2(0.,0.);\n#endif\n#ifndef UV2\nvec2 uv2Updated=vec2(0.,0.);\n#endif\n#ifdef MAINUV1\nvMainUV1=uvUpdated;\n#endif\n#ifdef MAINUV2\nvMainUV2=uv2Updated;\n#endif\n#include<uvVariableDeclaration>[3..7]\n#include<samplerVertexImplementation>(_DEFINENAME_,DIFFUSE,_VARYINGNAME_,Diffuse,_MATRIXNAME_,diffuse,_INFONAME_,DiffuseInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,DETAIL,_VARYINGNAME_,Detail,_MATRIXNAME_,detail,_INFONAME_,DetailInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,AMBIENT,_VARYINGNAME_,Ambient,_MATRIXNAME_,ambient,_INFONAME_,AmbientInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,OPACITY,_VARYINGNAME_,Opacity,_MATRIXNAME_,opacity,_INFONAME_,OpacityInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,EMISSIVE,_VARYINGNAME_,Emissive,_MATRIXNAME_,emissive,_INFONAME_,EmissiveInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,LIGHTMAP,_VARYINGNAME_,Lightmap,_MATRIXNAME_,lightmap,_INFONAME_,LightmapInfos.x)\n#if defined(SPECULARTERM)\n#include<samplerVertexImplementation>(_DEFINENAME_,SPECULAR,_VARYINGNAME_,Specular,_MATRIXNAME_,specular,_INFONAME_,SpecularInfos.x)\n#endif\n#include<samplerVertexImplementation>(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump,_MATRIXNAME_,bump,_INFONAME_,BumpInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,DECAL,_VARYINGNAME_,Decal,_MATRIXNAME_,decal,_INFONAME_,DecalInfos.x)\n#include<bumpVertex>\n#include<clipPlaneVertex>\n#include<fogVertex>\n#include<shadowsVertex>[0..maxSimultaneousLights]\n#include<vertexColorMixing>\n#include<pointCloudVertex>\n#include<logDepthVertex>\n#define CUSTOM_VERTEX_MAIN_END\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStore[name]) {\n ShaderStore.ShadersStore[name] = shader;\n}\n/** @internal */\nexport const defaultVertexShader = { name, shader };\n"]}
1
+ {"version":3,"file":"default.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/default.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,2CAA2C,CAAC;AACnD,OAAO,wCAAwC,CAAC;AAChD,OAAO,yCAAyC,CAAC;AACjD,OAAO,kCAAkC,CAAC;AAC1C,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kDAAkD,CAAC;AAC1D,OAAO,uCAAuC,CAAC;AAC/C,OAAO,2CAA2C,CAAC;AACnD,OAAO,2CAA2C,CAAC;AACnD,OAAO,2CAA2C,CAAC;AACnD,OAAO,wCAAwC,CAAC;AAChD,OAAO,6CAA6C,CAAC;AACrD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,6CAA6C,CAAC;AACrD,OAAO,wCAAwC,CAAC;AAChD,OAAO,sDAAsD,CAAC;AAC9D,OAAO,gDAAgD,CAAC;AACxD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,2CAA2C,CAAC;AACnD,OAAO,qCAAqC,CAAC;AAC7C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,8BAA8B,CAAC;AACtC,OAAO,uCAAuC,CAAC;AAC/C,OAAO,gCAAgC,CAAC;AACxC,OAAO,wCAAwC,CAAC;AAChD,OAAO,8CAA8C,CAAC;AACtD,OAAO,6BAA6B,CAAC;AACrC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,4BAA4B,CAAC;AACpC,OAAO,gCAAgC,CAAC;AACxC,OAAO,oCAAoC,CAAC;AAC5C,OAAO,mCAAmC,CAAC;AAC3C,OAAO,iCAAiC,CAAC;AAEzC,MAAM,IAAI,GAAG,qBAAqB,CAAC;AACnC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Jd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IAClC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/defaultVertexDeclaration\";\nimport \"./ShadersInclude/defaultUboDeclaration\";\nimport \"./ShadersInclude/uvAttributeDeclaration\";\nimport \"./ShadersInclude/helperFunctions\";\nimport \"./ShadersInclude/bonesDeclaration\";\nimport \"./ShadersInclude/bakedVertexAnimationDeclaration\";\nimport \"./ShadersInclude/instancesDeclaration\";\nimport \"./ShadersInclude/prePassVertexDeclaration\";\nimport \"./ShadersInclude/mainUVVaryingDeclaration\";\nimport \"./ShadersInclude/samplerVertexDeclaration\";\nimport \"./ShadersInclude/bumpVertexDeclaration\";\nimport \"./ShadersInclude/clipPlaneVertexDeclaration\";\nimport \"./ShadersInclude/fogVertexDeclaration\";\nimport \"./ShadersInclude/lightVxFragmentDeclaration\";\nimport \"./ShadersInclude/lightVxUboDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobalDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexDeclaration\";\nimport \"./ShadersInclude/logDepthDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobal\";\nimport \"./ShadersInclude/morphTargetsVertex\";\nimport \"./ShadersInclude/instancesVertex\";\nimport \"./ShadersInclude/bonesVertex\";\nimport \"./ShadersInclude/bakedVertexAnimation\";\nimport \"./ShadersInclude/prePassVertex\";\nimport \"./ShadersInclude/uvVariableDeclaration\";\nimport \"./ShadersInclude/samplerVertexImplementation\";\nimport \"./ShadersInclude/bumpVertex\";\nimport \"./ShadersInclude/clipPlaneVertex\";\nimport \"./ShadersInclude/fogVertex\";\nimport \"./ShadersInclude/shadowsVertex\";\nimport \"./ShadersInclude/vertexColorMixing\";\nimport \"./ShadersInclude/pointCloudVertex\";\nimport \"./ShadersInclude/logDepthVertex\";\n\nconst name = \"defaultVertexShader\";\nconst shader = `#define CUSTOM_VERTEX_EXTENSION\n#include<__decl__defaultVertex>\n#define CUSTOM_VERTEX_BEGIN\nattribute vec3 position;\n#ifdef NORMAL\nattribute vec3 normal;\n#endif\n#ifdef TANGENT\nattribute vec4 tangent;\n#endif\n#ifdef UV1\nattribute vec2 uv;\n#endif\n#include<uvAttributeDeclaration>[2..7]\n#ifdef VERTEXCOLOR\nattribute vec4 color;\n#endif\n#include<helperFunctions>\n#include<bonesDeclaration>\n#include<bakedVertexAnimationDeclaration>\n#include<instancesDeclaration>\n#include<prePassVertexDeclaration>\n#include<mainUVVaryingDeclaration>[1..7]\n#include<samplerVertexDeclaration>(_DEFINENAME_,DIFFUSE,_VARYINGNAME_,Diffuse)\n#include<samplerVertexDeclaration>(_DEFINENAME_,DETAIL,_VARYINGNAME_,Detail)\n#include<samplerVertexDeclaration>(_DEFINENAME_,AMBIENT,_VARYINGNAME_,Ambient)\n#include<samplerVertexDeclaration>(_DEFINENAME_,OPACITY,_VARYINGNAME_,Opacity)\n#include<samplerVertexDeclaration>(_DEFINENAME_,EMISSIVE,_VARYINGNAME_,Emissive)\n#include<samplerVertexDeclaration>(_DEFINENAME_,LIGHTMAP,_VARYINGNAME_,Lightmap)\n#if defined(SPECULARTERM)\n#include<samplerVertexDeclaration>(_DEFINENAME_,SPECULAR,_VARYINGNAME_,Specular)\n#endif\n#include<samplerVertexDeclaration>(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump)\n#include<samplerVertexDeclaration>(_DEFINENAME_,DECAL,_VARYINGNAME_,Decal)\nvarying vec3 vPositionW;\n#ifdef NORMAL\nvarying vec3 vNormalW;\n#endif\n#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES)\nvarying vec4 vColor;\n#endif\n#include<bumpVertexDeclaration>\n#include<clipPlaneVertexDeclaration>\n#include<fogVertexDeclaration>\n#include<__decl__lightVxFragment>[0..maxSimultaneousLights]\n#include<morphTargetsVertexGlobalDeclaration>\n#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]\n#ifdef REFLECTIONMAP_SKYBOX\nvarying vec3 vPositionUVW;\n#endif\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvarying vec3 vDirectionW;\n#endif\n#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0\nvarying float vViewDepth;\n#endif\n#include<logDepthDeclaration>\n#define CUSTOM_VERTEX_DEFINITIONS\nvoid main(void) {\n#define CUSTOM_VERTEX_MAIN_BEGIN\nvec3 positionUpdated=position;\n#ifdef NORMAL\nvec3 normalUpdated=normal;\n#endif\n#ifdef TANGENT\nvec4 tangentUpdated=tangent;\n#endif\n#ifdef UV1\nvec2 uvUpdated=uv;\n#endif\n#ifdef UV2\nvec2 uv2Updated=uv2;\n#endif\n#ifdef VERTEXCOLOR\nvec4 colorUpdated=color;\n#endif\n#include<morphTargetsVertexGlobal>\n#include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]\n#ifdef REFLECTIONMAP_SKYBOX\nvPositionUVW=positionUpdated;\n#endif\n#define CUSTOM_VERTEX_UPDATE_POSITION\n#define CUSTOM_VERTEX_UPDATE_NORMAL\n#include<instancesVertex>\n#if defined(PREPASS) && ((defined(PREPASS_VELOCITY) || defined(PREPASS_VELOCITY_LINEAR)) && !defined(BONES_VELOCITY_ENABLED)\nvCurrentPosition=viewProjection*finalWorld*vec4(positionUpdated,1.0);vPreviousPosition=previousViewProjection*finalPreviousWorld*vec4(positionUpdated,1.0);\n#endif\n#include<bonesVertex>\n#include<bakedVertexAnimation>\nvec4 worldPos=finalWorld*vec4(positionUpdated,1.0);\n#ifdef NORMAL\nmat3 normalWorld=mat3(finalWorld);\n#if defined(INSTANCES) && defined(THIN_INSTANCES)\nvNormalW=normalUpdated/vec3(dot(normalWorld[0],normalWorld[0]),dot(normalWorld[1],normalWorld[1]),dot(normalWorld[2],normalWorld[2]));vNormalW=normalize(normalWorld*vNormalW);\n#else\n#ifdef NONUNIFORMSCALING\nnormalWorld=transposeMat3(inverseMat3(normalWorld));\n#endif\nvNormalW=normalize(normalWorld*normalUpdated);\n#endif\n#endif\n#define CUSTOM_VERTEX_UPDATE_WORLDPOS\n#ifdef MULTIVIEW\nif (gl_ViewID_OVR==0u) {gl_Position=viewProjection*worldPos;} else {gl_Position=viewProjectionR*worldPos;}\n#else\ngl_Position=viewProjection*worldPos;\n#endif\nvPositionW=vec3(worldPos);\n#ifdef PREPASS\n#include<prePassVertex>\n#endif\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvDirectionW=normalize(vec3(finalWorld*vec4(positionUpdated,0.0)));\n#endif\n#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0\n#ifdef RIGHT_HANDED\nvViewDepth=-(view*worldPos).z;\n#else\nvViewDepth=(view*worldPos).z;\n#endif\n#endif\n#ifndef UV1\nvec2 uvUpdated=vec2(0.,0.);\n#endif\n#ifndef UV2\nvec2 uv2Updated=vec2(0.,0.);\n#endif\n#ifdef MAINUV1\nvMainUV1=uvUpdated;\n#endif\n#ifdef MAINUV2\nvMainUV2=uv2Updated;\n#endif\n#include<uvVariableDeclaration>[3..7]\n#include<samplerVertexImplementation>(_DEFINENAME_,DIFFUSE,_VARYINGNAME_,Diffuse,_MATRIXNAME_,diffuse,_INFONAME_,DiffuseInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,DETAIL,_VARYINGNAME_,Detail,_MATRIXNAME_,detail,_INFONAME_,DetailInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,AMBIENT,_VARYINGNAME_,Ambient,_MATRIXNAME_,ambient,_INFONAME_,AmbientInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,OPACITY,_VARYINGNAME_,Opacity,_MATRIXNAME_,opacity,_INFONAME_,OpacityInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,EMISSIVE,_VARYINGNAME_,Emissive,_MATRIXNAME_,emissive,_INFONAME_,EmissiveInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,LIGHTMAP,_VARYINGNAME_,Lightmap,_MATRIXNAME_,lightmap,_INFONAME_,LightmapInfos.x)\n#if defined(SPECULARTERM)\n#include<samplerVertexImplementation>(_DEFINENAME_,SPECULAR,_VARYINGNAME_,Specular,_MATRIXNAME_,specular,_INFONAME_,SpecularInfos.x)\n#endif\n#include<samplerVertexImplementation>(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump,_MATRIXNAME_,bump,_INFONAME_,BumpInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,DECAL,_VARYINGNAME_,Decal,_MATRIXNAME_,decal,_INFONAME_,DecalInfos.x)\n#include<bumpVertex>\n#include<clipPlaneVertex>\n#include<fogVertex>\n#include<shadowsVertex>[0..maxSimultaneousLights]\n#include<vertexColorMixing>\n#include<pointCloudVertex>\n#include<logDepthVertex>\n#define CUSTOM_VERTEX_MAIN_END\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStore[name]) {\n ShaderStore.ShadersStore[name] = shader;\n}\n/** @internal */\nexport const defaultVertexShader = { name, shader };\n"]}
@@ -8,7 +8,13 @@ const shader = `attribute vec3 position;flat varying vec2 vLimits;flat varying h
8
8
  #include<__decl__sceneVertex>
9
9
  uniform sampler2D lightDataTexture;uniform vec3 tileMaskResolution;
10
10
  #include<clusteredLightingFunctions>
11
- void main(void) {ClusteredLight light=getClusteredLight(lightDataTexture,gl_InstanceID);float range=light.vLightFalloff.x;vec4 viewPosition=view*vec4(light.vLightData.xyz,1);vec4 viewPositionSq=viewPosition*viewPosition;vec2 distSq=viewPositionSq.xy+viewPositionSq.z;vec2 sinSq=(range*range)/distSq;vec2 cosSq=max(1.0-sinSq,0.01);vec2 sinCos=position.xy*sqrt(sinSq*cosSq);vec2 rotatedX=mat2(cosSq.x,-sinCos.x,sinCos.x,cosSq.x)*viewPosition.xz;vec2 rotatedY=mat2(cosSq.y,-sinCos.y,sinCos.y,cosSq.y)*viewPosition.yz;vec4 projX=projection*vec4(rotatedX.x,0,rotatedX.y,1);vec4 projY=projection*vec4(0,rotatedY.x,rotatedY.y,1);vec2 projPosition=vec2(projX.x/max(projX.w,0.01),projY.y/max(projY.w,0.01));projPosition=mix(position.xy,projPosition,greaterThan(cosSq,vec2(0.01)));vec2 halfTileRes=tileMaskResolution.xy/2.0;vec2 tilePosition=(projPosition+1.0)*halfTileRes;tilePosition=mix(floor(tilePosition)-0.01,ceil(tilePosition)+0.01,greaterThan(position.xy,vec2(0)));float offset=float(gl_InstanceID/CLUSTLIGHT_BATCH)*tileMaskResolution.y;tilePosition.y=(tilePosition.y+offset)/tileMaskResolution.z;gl_Position=vec4(tilePosition/halfTileRes-1.0,0,1);vLimits=vec2(offset,offset+tileMaskResolution.y);vMask=1u<<(gl_InstanceID % CLUSTLIGHT_BATCH);}
11
+ void main(void) {ClusteredLight light=getClusteredLight(lightDataTexture,gl_InstanceID);float range=light.vLightFalloff.x;vec4 viewPosition=view*vec4(light.vLightData.xyz,1);vec4 viewPositionSq=viewPosition*viewPosition;vec2 distSq=viewPositionSq.xy+viewPositionSq.z;vec2 sinSq=(range*range)/distSq;vec2 cosSq=max(1.0-sinSq,0.01);vec2 sinCos=position.xy*sqrt(sinSq*cosSq);
12
+ #ifdef RIGHT_HANDED
13
+ vec2 rotatedX=mat2(cosSq.x,sinCos.x,-sinCos.x,cosSq.x)*viewPosition.xz;vec2 rotatedY=mat2(cosSq.y,sinCos.y,-sinCos.y,cosSq.y)*viewPosition.yz;
14
+ #else
15
+ vec2 rotatedX=mat2(cosSq.x,-sinCos.x,sinCos.x,cosSq.x)*viewPosition.xz;vec2 rotatedY=mat2(cosSq.y,-sinCos.y,sinCos.y,cosSq.y)*viewPosition.yz;
16
+ #endif
17
+ vec4 projX=projection*vec4(rotatedX.x,0,rotatedX.y,1);vec4 projY=projection*vec4(0,rotatedY.x,rotatedY.y,1);vec2 projPosition=vec2(projX.x/max(projX.w,0.01),projY.y/max(projY.w,0.01));projPosition=mix(position.xy,projPosition,greaterThan(cosSq,vec2(0.01)));vec2 halfTileRes=tileMaskResolution.xy/2.0;vec2 tilePosition=(projPosition+1.0)*halfTileRes;tilePosition=mix(floor(tilePosition)-0.01,ceil(tilePosition)+0.01,greaterThan(position.xy,vec2(0)));float offset=float(gl_InstanceID/CLUSTLIGHT_BATCH)*tileMaskResolution.y;tilePosition.y=(tilePosition.y+offset)/tileMaskResolution.z;gl_Position=vec4(tilePosition/halfTileRes-1.0,0,1);vLimits=vec2(offset,offset+tileMaskResolution.y);vMask=1u<<(gl_InstanceID % CLUSTLIGHT_BATCH);}
12
18
  `;
13
19
  // Sideeffect
14
20
  if (!ShaderStore.ShadersStore[name]) {
@@ -1 +1 @@
1
- {"version":3,"file":"lightProxy.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/lightProxy.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,yCAAyC,CAAC;AACjD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,6CAA6C,CAAC;AAErD,MAAM,IAAI,GAAG,wBAAwB,CAAC;AACtC,MAAM,MAAM,GAAG;;;;;CAKd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IAClC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/sceneVertexDeclaration\";\nimport \"./ShadersInclude/sceneUboDeclaration\";\nimport \"./ShadersInclude/clusteredLightingFunctions\";\n\nconst name = \"lightProxyVertexShader\";\nconst shader = `attribute vec3 position;flat varying vec2 vLimits;flat varying highp uint vMask;\n#include<__decl__sceneVertex>\nuniform sampler2D lightDataTexture;uniform vec3 tileMaskResolution;\n#include<clusteredLightingFunctions>\nvoid main(void) {ClusteredLight light=getClusteredLight(lightDataTexture,gl_InstanceID);float range=light.vLightFalloff.x;vec4 viewPosition=view*vec4(light.vLightData.xyz,1);vec4 viewPositionSq=viewPosition*viewPosition;vec2 distSq=viewPositionSq.xy+viewPositionSq.z;vec2 sinSq=(range*range)/distSq;vec2 cosSq=max(1.0-sinSq,0.01);vec2 sinCos=position.xy*sqrt(sinSq*cosSq);vec2 rotatedX=mat2(cosSq.x,-sinCos.x,sinCos.x,cosSq.x)*viewPosition.xz;vec2 rotatedY=mat2(cosSq.y,-sinCos.y,sinCos.y,cosSq.y)*viewPosition.yz;vec4 projX=projection*vec4(rotatedX.x,0,rotatedX.y,1);vec4 projY=projection*vec4(0,rotatedY.x,rotatedY.y,1);vec2 projPosition=vec2(projX.x/max(projX.w,0.01),projY.y/max(projY.w,0.01));projPosition=mix(position.xy,projPosition,greaterThan(cosSq,vec2(0.01)));vec2 halfTileRes=tileMaskResolution.xy/2.0;vec2 tilePosition=(projPosition+1.0)*halfTileRes;tilePosition=mix(floor(tilePosition)-0.01,ceil(tilePosition)+0.01,greaterThan(position.xy,vec2(0)));float offset=float(gl_InstanceID/CLUSTLIGHT_BATCH)*tileMaskResolution.y;tilePosition.y=(tilePosition.y+offset)/tileMaskResolution.z;gl_Position=vec4(tilePosition/halfTileRes-1.0,0,1);vLimits=vec2(offset,offset+tileMaskResolution.y);vMask=1u<<(gl_InstanceID % CLUSTLIGHT_BATCH);}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStore[name]) {\n ShaderStore.ShadersStore[name] = shader;\n}\n/** @internal */\nexport const lightProxyVertexShader = { name, shader };\n"]}
1
+ {"version":3,"file":"lightProxy.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/lightProxy.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,yCAAyC,CAAC;AACjD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,6CAA6C,CAAC;AAErD,MAAM,IAAI,GAAG,wBAAwB,CAAC;AACtC,MAAM,MAAM,GAAG;;;;;;;;;;;CAWd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IAClC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/sceneVertexDeclaration\";\nimport \"./ShadersInclude/sceneUboDeclaration\";\nimport \"./ShadersInclude/clusteredLightingFunctions\";\n\nconst name = \"lightProxyVertexShader\";\nconst shader = `attribute vec3 position;flat varying vec2 vLimits;flat varying highp uint vMask;\n#include<__decl__sceneVertex>\nuniform sampler2D lightDataTexture;uniform vec3 tileMaskResolution;\n#include<clusteredLightingFunctions>\nvoid main(void) {ClusteredLight light=getClusteredLight(lightDataTexture,gl_InstanceID);float range=light.vLightFalloff.x;vec4 viewPosition=view*vec4(light.vLightData.xyz,1);vec4 viewPositionSq=viewPosition*viewPosition;vec2 distSq=viewPositionSq.xy+viewPositionSq.z;vec2 sinSq=(range*range)/distSq;vec2 cosSq=max(1.0-sinSq,0.01);vec2 sinCos=position.xy*sqrt(sinSq*cosSq);\n#ifdef RIGHT_HANDED\nvec2 rotatedX=mat2(cosSq.x,sinCos.x,-sinCos.x,cosSq.x)*viewPosition.xz;vec2 rotatedY=mat2(cosSq.y,sinCos.y,-sinCos.y,cosSq.y)*viewPosition.yz;\n#else\nvec2 rotatedX=mat2(cosSq.x,-sinCos.x,sinCos.x,cosSq.x)*viewPosition.xz;vec2 rotatedY=mat2(cosSq.y,-sinCos.y,sinCos.y,cosSq.y)*viewPosition.yz;\n#endif\nvec4 projX=projection*vec4(rotatedX.x,0,rotatedX.y,1);vec4 projY=projection*vec4(0,rotatedY.x,rotatedY.y,1);vec2 projPosition=vec2(projX.x/max(projX.w,0.01),projY.y/max(projY.w,0.01));projPosition=mix(position.xy,projPosition,greaterThan(cosSq,vec2(0.01)));vec2 halfTileRes=tileMaskResolution.xy/2.0;vec2 tilePosition=(projPosition+1.0)*halfTileRes;tilePosition=mix(floor(tilePosition)-0.01,ceil(tilePosition)+0.01,greaterThan(position.xy,vec2(0)));float offset=float(gl_InstanceID/CLUSTLIGHT_BATCH)*tileMaskResolution.y;tilePosition.y=(tilePosition.y+offset)/tileMaskResolution.z;gl_Position=vec4(tilePosition/halfTileRes-1.0,0,1);vLimits=vec2(offset,offset+tileMaskResolution.y);vMask=1u<<(gl_InstanceID % CLUSTLIGHT_BATCH);}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStore[name]) {\n ShaderStore.ShadersStore[name] = shader;\n}\n/** @internal */\nexport const lightProxyVertexShader = { name, shader };\n"]}
@@ -199,8 +199,12 @@ vClipSpacePosition=gl_Position;
199
199
  vDirectionW=normalize(vec3(finalWorld*vec4(positionUpdated,0.0)));
200
200
  #endif
201
201
  #if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0
202
+ #ifdef RIGHT_HANDED
203
+ vViewDepth=-(view*worldPos).z;
204
+ #else
202
205
  vViewDepth=(view*worldPos).z;
203
206
  #endif
207
+ #endif
204
208
  #ifndef UV1
205
209
  vec2 uvUpdated=vec2(0.,0.);
206
210
  #endif
@@ -1 +1 @@
1
- {"version":3,"file":"pbr.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/pbr.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,oCAAoC,CAAC;AAC5C,OAAO,yCAAyC,CAAC;AACjD,OAAO,2CAA2C,CAAC;AACnD,OAAO,kCAAkC,CAAC;AAC1C,OAAO,mCAAmC,CAAC;AAC3C,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kDAAkD,CAAC;AAC1D,OAAO,uCAAuC,CAAC;AAC/C,OAAO,2CAA2C,CAAC;AACnD,OAAO,2CAA2C,CAAC;AACnD,OAAO,qCAAqC,CAAC;AAC7C,OAAO,wCAAwC,CAAC;AAChD,OAAO,6CAA6C,CAAC;AACrD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,6CAA6C,CAAC;AACrD,OAAO,wCAAwC,CAAC;AAChD,OAAO,sDAAsD,CAAC;AAC9D,OAAO,gDAAgD,CAAC;AACxD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,2CAA2C,CAAC;AACnD,OAAO,qCAAqC,CAAC;AAC7C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,8BAA8B,CAAC;AACtC,OAAO,uCAAuC,CAAC;AAC/C,OAAO,gCAAgC,CAAC;AACxC,OAAO,wCAAwC,CAAC;AAChD,OAAO,8CAA8C,CAAC;AACtD,OAAO,6BAA6B,CAAC;AACrC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,4BAA4B,CAAC;AACpC,OAAO,gCAAgC,CAAC;AACxC,OAAO,oCAAoC,CAAC;AAC5C,OAAO,iCAAiC,CAAC;AAEzC,MAAM,IAAI,GAAG,iBAAiB,CAAC;AAC/B,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmOd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IAClC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/pbrVertexDeclaration\";\nimport \"./ShadersInclude/pbrUboDeclaration\";\nimport \"./ShadersInclude/uvAttributeDeclaration\";\nimport \"./ShadersInclude/mainUVVaryingDeclaration\";\nimport \"./ShadersInclude/helperFunctions\";\nimport \"./ShadersInclude/pbrBRDFFunctions\";\nimport \"./ShadersInclude/bonesDeclaration\";\nimport \"./ShadersInclude/bakedVertexAnimationDeclaration\";\nimport \"./ShadersInclude/instancesDeclaration\";\nimport \"./ShadersInclude/prePassVertexDeclaration\";\nimport \"./ShadersInclude/samplerVertexDeclaration\";\nimport \"./ShadersInclude/harmonicsFunctions\";\nimport \"./ShadersInclude/bumpVertexDeclaration\";\nimport \"./ShadersInclude/clipPlaneVertexDeclaration\";\nimport \"./ShadersInclude/fogVertexDeclaration\";\nimport \"./ShadersInclude/lightVxFragmentDeclaration\";\nimport \"./ShadersInclude/lightVxUboDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobalDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexDeclaration\";\nimport \"./ShadersInclude/logDepthDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobal\";\nimport \"./ShadersInclude/morphTargetsVertex\";\nimport \"./ShadersInclude/instancesVertex\";\nimport \"./ShadersInclude/bonesVertex\";\nimport \"./ShadersInclude/bakedVertexAnimation\";\nimport \"./ShadersInclude/prePassVertex\";\nimport \"./ShadersInclude/uvVariableDeclaration\";\nimport \"./ShadersInclude/samplerVertexImplementation\";\nimport \"./ShadersInclude/bumpVertex\";\nimport \"./ShadersInclude/clipPlaneVertex\";\nimport \"./ShadersInclude/fogVertex\";\nimport \"./ShadersInclude/shadowsVertex\";\nimport \"./ShadersInclude/vertexColorMixing\";\nimport \"./ShadersInclude/logDepthVertex\";\n\nconst name = \"pbrVertexShader\";\nconst shader = `#define PBR_VERTEX_SHADER\n#define CUSTOM_VERTEX_EXTENSION\nprecision highp float;\n#include<__decl__pbrVertex>\n#define CUSTOM_VERTEX_BEGIN\nattribute vec3 position;\n#ifdef NORMAL\nattribute vec3 normal;\n#endif\n#ifdef TANGENT\nattribute vec4 tangent;\n#endif\n#ifdef UV1\nattribute vec2 uv;\n#endif\n#include<uvAttributeDeclaration>[2..7]\n#include<mainUVVaryingDeclaration>[1..7]\n#ifdef VERTEXCOLOR\nattribute vec4 color;\n#endif\n#include<helperFunctions>\n#include<pbrBRDFFunctions>\n#include<bonesDeclaration>\n#include<bakedVertexAnimationDeclaration>\n#include<instancesDeclaration>\n#include<prePassVertexDeclaration>\n#include<samplerVertexDeclaration>(_DEFINENAME_,ALBEDO,_VARYINGNAME_,Albedo)\n#include<samplerVertexDeclaration>(_DEFINENAME_,BASE_WEIGHT,_VARYINGNAME_,BaseWeight)\n#include<samplerVertexDeclaration>(_DEFINENAME_,BASE_DIFFUSE_ROUGHNESS,_VARYINGNAME_,BaseDiffuseRoughness)\n#include<samplerVertexDeclaration>(_DEFINENAME_,DETAIL,_VARYINGNAME_,Detail)\n#include<samplerVertexDeclaration>(_DEFINENAME_,AMBIENT,_VARYINGNAME_,Ambient)\n#include<samplerVertexDeclaration>(_DEFINENAME_,OPACITY,_VARYINGNAME_,Opacity)\n#include<samplerVertexDeclaration>(_DEFINENAME_,EMISSIVE,_VARYINGNAME_,Emissive)\n#include<samplerVertexDeclaration>(_DEFINENAME_,LIGHTMAP,_VARYINGNAME_,Lightmap)\n#include<samplerVertexDeclaration>(_DEFINENAME_,REFLECTIVITY,_VARYINGNAME_,Reflectivity)\n#include<samplerVertexDeclaration>(_DEFINENAME_,MICROSURFACEMAP,_VARYINGNAME_,MicroSurfaceSampler)\n#include<samplerVertexDeclaration>(_DEFINENAME_,METALLIC_REFLECTANCE,_VARYINGNAME_,MetallicReflectance)\n#include<samplerVertexDeclaration>(_DEFINENAME_,REFLECTANCE,_VARYINGNAME_,Reflectance)\n#include<samplerVertexDeclaration>(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump)\n#include<samplerVertexDeclaration>(_DEFINENAME_,DECAL,_VARYINGNAME_,Decal)\n#ifdef CLEARCOAT\n#include<samplerVertexDeclaration>(_DEFINENAME_,CLEARCOAT_TEXTURE,_VARYINGNAME_,ClearCoat)\n#include<samplerVertexDeclaration>(_DEFINENAME_,CLEARCOAT_TEXTURE_ROUGHNESS,_VARYINGNAME_,ClearCoatRoughness)\n#include<samplerVertexDeclaration>(_DEFINENAME_,CLEARCOAT_BUMP,_VARYINGNAME_,ClearCoatBump)\n#include<samplerVertexDeclaration>(_DEFINENAME_,CLEARCOAT_TINT_TEXTURE,_VARYINGNAME_,ClearCoatTint)\n#endif\n#ifdef IRIDESCENCE\n#include<samplerVertexDeclaration>(_DEFINENAME_,IRIDESCENCE_TEXTURE,_VARYINGNAME_,Iridescence)\n#include<samplerVertexDeclaration>(_DEFINENAME_,IRIDESCENCE_THICKNESS_TEXTURE,_VARYINGNAME_,IridescenceThickness)\n#endif\n#ifdef SHEEN\n#include<samplerVertexDeclaration>(_DEFINENAME_,SHEEN_TEXTURE,_VARYINGNAME_,Sheen)\n#include<samplerVertexDeclaration>(_DEFINENAME_,SHEEN_TEXTURE_ROUGHNESS,_VARYINGNAME_,SheenRoughness)\n#endif\n#ifdef ANISOTROPIC\n#include<samplerVertexDeclaration>(_DEFINENAME_,ANISOTROPIC_TEXTURE,_VARYINGNAME_,Anisotropy)\n#endif\n#ifdef SUBSURFACE\n#include<samplerVertexDeclaration>(_DEFINENAME_,SS_THICKNESSANDMASK_TEXTURE,_VARYINGNAME_,Thickness)\n#include<samplerVertexDeclaration>(_DEFINENAME_,SS_REFRACTIONINTENSITY_TEXTURE,_VARYINGNAME_,RefractionIntensity)\n#include<samplerVertexDeclaration>(_DEFINENAME_,SS_TRANSLUCENCYINTENSITY_TEXTURE,_VARYINGNAME_,TranslucencyIntensity)\n#include<samplerVertexDeclaration>(_DEFINENAME_,SS_TRANSLUCENCYCOLOR_TEXTURE,_VARYINGNAME_,TranslucencyColor)\n#endif\nvarying vec3 vPositionW;\n#if DEBUGMODE>0\nvarying vec4 vClipSpacePosition;\n#endif\n#ifdef NORMAL\nvarying vec3 vNormalW;\n#if defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)\nvarying vec3 vEnvironmentIrradiance;\n#include<harmonicsFunctions>\n#endif\n#endif\n#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES)\nvarying vec4 vColor;\n#endif\n#include<bumpVertexDeclaration>\n#include<clipPlaneVertexDeclaration>\n#include<fogVertexDeclaration>\n#include<__decl__lightVxFragment>[0..maxSimultaneousLights]\n#include<morphTargetsVertexGlobalDeclaration>\n#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]\n#ifdef REFLECTIONMAP_SKYBOX\nvarying vec3 vPositionUVW;\n#endif\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvarying vec3 vDirectionW;\n#endif\n#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0\nvarying float vViewDepth;\n#endif\n#include<logDepthDeclaration>\n#define CUSTOM_VERTEX_DEFINITIONS\nvoid main(void) {\n#define CUSTOM_VERTEX_MAIN_BEGIN\nvec3 positionUpdated=position;\n#ifdef NORMAL\nvec3 normalUpdated=normal;\n#endif\n#ifdef TANGENT\nvec4 tangentUpdated=tangent;\n#endif\n#ifdef UV1\nvec2 uvUpdated=uv;\n#endif\n#ifdef UV2\nvec2 uv2Updated=uv2;\n#endif\n#ifdef VERTEXCOLOR\nvec4 colorUpdated=color;\n#endif\n#include<morphTargetsVertexGlobal>\n#include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]\n#ifdef REFLECTIONMAP_SKYBOX\nvPositionUVW=positionUpdated;\n#endif\n#define CUSTOM_VERTEX_UPDATE_POSITION\n#define CUSTOM_VERTEX_UPDATE_NORMAL\n#include<instancesVertex>\n#if defined(PREPASS) && ((defined(PREPASS_VELOCITY) || defined(PREPASS_VELOCITY_LINEAR)) && !defined(BONES_VELOCITY_ENABLED)\nvCurrentPosition=viewProjection*finalWorld*vec4(positionUpdated,1.0);vPreviousPosition=previousViewProjection*finalPreviousWorld*vec4(positionUpdated,1.0);\n#endif\n#include<bonesVertex>\n#include<bakedVertexAnimation>\nvec4 worldPos=finalWorld*vec4(positionUpdated,1.0);vPositionW=vec3(worldPos);\n#ifdef PREPASS\n#include<prePassVertex>\n#endif\n#ifdef NORMAL\nmat3 normalWorld=mat3(finalWorld);\n#if defined(INSTANCES) && defined(THIN_INSTANCES)\nvNormalW=normalUpdated/vec3(dot(normalWorld[0],normalWorld[0]),dot(normalWorld[1],normalWorld[1]),dot(normalWorld[2],normalWorld[2]));vNormalW=normalize(normalWorld*vNormalW);\n#else\n#ifdef NONUNIFORMSCALING\nnormalWorld=transposeMat3(inverseMat3(normalWorld));\n#endif\nvNormalW=normalize(normalWorld*normalUpdated);\n#endif\n#if defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)\n#if BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LAMBERT && BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LEGACY\nvec3 viewDirectionW=normalize(vEyePosition.xyz-vPositionW);float NdotV=max(dot(vNormalW,viewDirectionW),0.0);vec3 roughNormal=mix(vNormalW,viewDirectionW,(0.5*(1.0-NdotV))*baseDiffuseRoughness);vec3 reflectionVector=vec3(reflectionMatrix*vec4(roughNormal,0)).xyz;\n#else\nvec3 reflectionVector=vec3(reflectionMatrix*vec4(vNormalW,0)).xyz;\n#endif\n#ifdef REFLECTIONMAP_OPPOSITEZ\nreflectionVector.z*=-1.0;\n#endif\nvEnvironmentIrradiance=computeEnvironmentIrradiance(reflectionVector);\n#endif\n#endif\n#define CUSTOM_VERTEX_UPDATE_WORLDPOS\n#ifdef MULTIVIEW\nif (gl_ViewID_OVR==0u) {gl_Position=viewProjection*worldPos;} else {gl_Position=viewProjectionR*worldPos;}\n#else\ngl_Position=viewProjection*worldPos;\n#endif\n#if DEBUGMODE>0\nvClipSpacePosition=gl_Position;\n#endif\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvDirectionW=normalize(vec3(finalWorld*vec4(positionUpdated,0.0)));\n#endif\n#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0\nvViewDepth=(view*worldPos).z;\n#endif\n#ifndef UV1\nvec2 uvUpdated=vec2(0.,0.);\n#endif\n#ifndef UV2\nvec2 uv2Updated=vec2(0.,0.);\n#endif\n#ifdef MAINUV1\nvMainUV1=uvUpdated;\n#endif\n#ifdef MAINUV2\nvMainUV2=uv2Updated;\n#endif\n#include<uvVariableDeclaration>[3..7]\n#include<samplerVertexImplementation>(_DEFINENAME_,ALBEDO,_VARYINGNAME_,Albedo,_MATRIXNAME_,albedo,_INFONAME_,AlbedoInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,BASE_WEIGHT,_VARYINGNAME_,BaseWeight,_MATRIXNAME_,baseWeight,_INFONAME_,BaseWeightInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,BASE_DIFFUSE_ROUGHNESS,_VARYINGNAME_,BaseDiffuseRoughness,_MATRIXNAME_,baseDiffuseRoughness,_INFONAME_,BaseDiffuseRoughnessInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,DETAIL,_VARYINGNAME_,Detail,_MATRIXNAME_,detail,_INFONAME_,DetailInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,AMBIENT,_VARYINGNAME_,Ambient,_MATRIXNAME_,ambient,_INFONAME_,AmbientInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,OPACITY,_VARYINGNAME_,Opacity,_MATRIXNAME_,opacity,_INFONAME_,OpacityInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,EMISSIVE,_VARYINGNAME_,Emissive,_MATRIXNAME_,emissive,_INFONAME_,EmissiveInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,LIGHTMAP,_VARYINGNAME_,Lightmap,_MATRIXNAME_,lightmap,_INFONAME_,LightmapInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,REFLECTIVITY,_VARYINGNAME_,Reflectivity,_MATRIXNAME_,reflectivity,_INFONAME_,ReflectivityInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,MICROSURFACEMAP,_VARYINGNAME_,MicroSurfaceSampler,_MATRIXNAME_,microSurfaceSampler,_INFONAME_,MicroSurfaceSamplerInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,METALLIC_REFLECTANCE,_VARYINGNAME_,MetallicReflectance,_MATRIXNAME_,metallicReflectance,_INFONAME_,MetallicReflectanceInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,REFLECTANCE,_VARYINGNAME_,Reflectance,_MATRIXNAME_,reflectance,_INFONAME_,ReflectanceInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump,_MATRIXNAME_,bump,_INFONAME_,BumpInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,DECAL,_VARYINGNAME_,Decal,_MATRIXNAME_,decal,_INFONAME_,DecalInfos.x)\n#ifdef CLEARCOAT\n#include<samplerVertexImplementation>(_DEFINENAME_,CLEARCOAT_TEXTURE,_VARYINGNAME_,ClearCoat,_MATRIXNAME_,clearCoat,_INFONAME_,ClearCoatInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,CLEARCOAT_TEXTURE_ROUGHNESS,_VARYINGNAME_,ClearCoatRoughness,_MATRIXNAME_,clearCoatRoughness,_INFONAME_,ClearCoatInfos.z)\n#include<samplerVertexImplementation>(_DEFINENAME_,CLEARCOAT_BUMP,_VARYINGNAME_,ClearCoatBump,_MATRIXNAME_,clearCoatBump,_INFONAME_,ClearCoatBumpInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,CLEARCOAT_TINT_TEXTURE,_VARYINGNAME_,ClearCoatTint,_MATRIXNAME_,clearCoatTint,_INFONAME_,ClearCoatTintInfos.x)\n#endif\n#ifdef IRIDESCENCE\n#include<samplerVertexImplementation>(_DEFINENAME_,IRIDESCENCE_TEXTURE,_VARYINGNAME_,Iridescence,_MATRIXNAME_,iridescence,_INFONAME_,IridescenceInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,IRIDESCENCE_THICKNESS_TEXTURE,_VARYINGNAME_,IridescenceThickness,_MATRIXNAME_,iridescenceThickness,_INFONAME_,IridescenceInfos.z)\n#endif\n#ifdef SHEEN\n#include<samplerVertexImplementation>(_DEFINENAME_,SHEEN_TEXTURE,_VARYINGNAME_,Sheen,_MATRIXNAME_,sheen,_INFONAME_,SheenInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,SHEEN_TEXTURE_ROUGHNESS,_VARYINGNAME_,SheenRoughness,_MATRIXNAME_,sheenRoughness,_INFONAME_,SheenInfos.z)\n#endif\n#ifdef ANISOTROPIC\n#include<samplerVertexImplementation>(_DEFINENAME_,ANISOTROPIC_TEXTURE,_VARYINGNAME_,Anisotropy,_MATRIXNAME_,anisotropy,_INFONAME_,AnisotropyInfos.x)\n#endif\n#ifdef SUBSURFACE\n#include<samplerVertexImplementation>(_DEFINENAME_,SS_THICKNESSANDMASK_TEXTURE,_VARYINGNAME_,Thickness,_MATRIXNAME_,thickness,_INFONAME_,ThicknessInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,SS_REFRACTIONINTENSITY_TEXTURE,_VARYINGNAME_,RefractionIntensity,_MATRIXNAME_,refractionIntensity,_INFONAME_,RefractionIntensityInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,SS_TRANSLUCENCYINTENSITY_TEXTURE,_VARYINGNAME_,TranslucencyIntensity,_MATRIXNAME_,translucencyIntensity,_INFONAME_,TranslucencyIntensityInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,SS_TRANSLUCENCYCOLOR_TEXTURE,_VARYINGNAME_,TranslucencyColor,_MATRIXNAME_,translucencyColor,_INFONAME_,TranslucencyColorInfos.x)\n#endif\n#include<bumpVertex>\n#include<clipPlaneVertex>\n#include<fogVertex>\n#include<shadowsVertex>[0..maxSimultaneousLights]\n#include<vertexColorMixing>\n#if defined(POINTSIZE) && !defined(WEBGPU)\ngl_PointSize=pointSize;\n#endif\n#include<logDepthVertex>\n#define CUSTOM_VERTEX_MAIN_END\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStore[name]) {\n ShaderStore.ShadersStore[name] = shader;\n}\n/** @internal */\nexport const pbrVertexShader = { name, shader };\n"]}
1
+ {"version":3,"file":"pbr.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/pbr.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,oCAAoC,CAAC;AAC5C,OAAO,yCAAyC,CAAC;AACjD,OAAO,2CAA2C,CAAC;AACnD,OAAO,kCAAkC,CAAC;AAC1C,OAAO,mCAAmC,CAAC;AAC3C,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kDAAkD,CAAC;AAC1D,OAAO,uCAAuC,CAAC;AAC/C,OAAO,2CAA2C,CAAC;AACnD,OAAO,2CAA2C,CAAC;AACnD,OAAO,qCAAqC,CAAC;AAC7C,OAAO,wCAAwC,CAAC;AAChD,OAAO,6CAA6C,CAAC;AACrD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,6CAA6C,CAAC;AACrD,OAAO,wCAAwC,CAAC;AAChD,OAAO,sDAAsD,CAAC;AAC9D,OAAO,gDAAgD,CAAC;AACxD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,2CAA2C,CAAC;AACnD,OAAO,qCAAqC,CAAC;AAC7C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,8BAA8B,CAAC;AACtC,OAAO,uCAAuC,CAAC;AAC/C,OAAO,gCAAgC,CAAC;AACxC,OAAO,wCAAwC,CAAC;AAChD,OAAO,8CAA8C,CAAC;AACtD,OAAO,6BAA6B,CAAC;AACrC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,4BAA4B,CAAC;AACpC,OAAO,gCAAgC,CAAC;AACxC,OAAO,oCAAoC,CAAC;AAC5C,OAAO,iCAAiC,CAAC;AAEzC,MAAM,IAAI,GAAG,iBAAiB,CAAC;AAC/B,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuOd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IAClC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/pbrVertexDeclaration\";\nimport \"./ShadersInclude/pbrUboDeclaration\";\nimport \"./ShadersInclude/uvAttributeDeclaration\";\nimport \"./ShadersInclude/mainUVVaryingDeclaration\";\nimport \"./ShadersInclude/helperFunctions\";\nimport \"./ShadersInclude/pbrBRDFFunctions\";\nimport \"./ShadersInclude/bonesDeclaration\";\nimport \"./ShadersInclude/bakedVertexAnimationDeclaration\";\nimport \"./ShadersInclude/instancesDeclaration\";\nimport \"./ShadersInclude/prePassVertexDeclaration\";\nimport \"./ShadersInclude/samplerVertexDeclaration\";\nimport \"./ShadersInclude/harmonicsFunctions\";\nimport \"./ShadersInclude/bumpVertexDeclaration\";\nimport \"./ShadersInclude/clipPlaneVertexDeclaration\";\nimport \"./ShadersInclude/fogVertexDeclaration\";\nimport \"./ShadersInclude/lightVxFragmentDeclaration\";\nimport \"./ShadersInclude/lightVxUboDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobalDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexDeclaration\";\nimport \"./ShadersInclude/logDepthDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobal\";\nimport \"./ShadersInclude/morphTargetsVertex\";\nimport \"./ShadersInclude/instancesVertex\";\nimport \"./ShadersInclude/bonesVertex\";\nimport \"./ShadersInclude/bakedVertexAnimation\";\nimport \"./ShadersInclude/prePassVertex\";\nimport \"./ShadersInclude/uvVariableDeclaration\";\nimport \"./ShadersInclude/samplerVertexImplementation\";\nimport \"./ShadersInclude/bumpVertex\";\nimport \"./ShadersInclude/clipPlaneVertex\";\nimport \"./ShadersInclude/fogVertex\";\nimport \"./ShadersInclude/shadowsVertex\";\nimport \"./ShadersInclude/vertexColorMixing\";\nimport \"./ShadersInclude/logDepthVertex\";\n\nconst name = \"pbrVertexShader\";\nconst shader = `#define PBR_VERTEX_SHADER\n#define CUSTOM_VERTEX_EXTENSION\nprecision highp float;\n#include<__decl__pbrVertex>\n#define CUSTOM_VERTEX_BEGIN\nattribute vec3 position;\n#ifdef NORMAL\nattribute vec3 normal;\n#endif\n#ifdef TANGENT\nattribute vec4 tangent;\n#endif\n#ifdef UV1\nattribute vec2 uv;\n#endif\n#include<uvAttributeDeclaration>[2..7]\n#include<mainUVVaryingDeclaration>[1..7]\n#ifdef VERTEXCOLOR\nattribute vec4 color;\n#endif\n#include<helperFunctions>\n#include<pbrBRDFFunctions>\n#include<bonesDeclaration>\n#include<bakedVertexAnimationDeclaration>\n#include<instancesDeclaration>\n#include<prePassVertexDeclaration>\n#include<samplerVertexDeclaration>(_DEFINENAME_,ALBEDO,_VARYINGNAME_,Albedo)\n#include<samplerVertexDeclaration>(_DEFINENAME_,BASE_WEIGHT,_VARYINGNAME_,BaseWeight)\n#include<samplerVertexDeclaration>(_DEFINENAME_,BASE_DIFFUSE_ROUGHNESS,_VARYINGNAME_,BaseDiffuseRoughness)\n#include<samplerVertexDeclaration>(_DEFINENAME_,DETAIL,_VARYINGNAME_,Detail)\n#include<samplerVertexDeclaration>(_DEFINENAME_,AMBIENT,_VARYINGNAME_,Ambient)\n#include<samplerVertexDeclaration>(_DEFINENAME_,OPACITY,_VARYINGNAME_,Opacity)\n#include<samplerVertexDeclaration>(_DEFINENAME_,EMISSIVE,_VARYINGNAME_,Emissive)\n#include<samplerVertexDeclaration>(_DEFINENAME_,LIGHTMAP,_VARYINGNAME_,Lightmap)\n#include<samplerVertexDeclaration>(_DEFINENAME_,REFLECTIVITY,_VARYINGNAME_,Reflectivity)\n#include<samplerVertexDeclaration>(_DEFINENAME_,MICROSURFACEMAP,_VARYINGNAME_,MicroSurfaceSampler)\n#include<samplerVertexDeclaration>(_DEFINENAME_,METALLIC_REFLECTANCE,_VARYINGNAME_,MetallicReflectance)\n#include<samplerVertexDeclaration>(_DEFINENAME_,REFLECTANCE,_VARYINGNAME_,Reflectance)\n#include<samplerVertexDeclaration>(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump)\n#include<samplerVertexDeclaration>(_DEFINENAME_,DECAL,_VARYINGNAME_,Decal)\n#ifdef CLEARCOAT\n#include<samplerVertexDeclaration>(_DEFINENAME_,CLEARCOAT_TEXTURE,_VARYINGNAME_,ClearCoat)\n#include<samplerVertexDeclaration>(_DEFINENAME_,CLEARCOAT_TEXTURE_ROUGHNESS,_VARYINGNAME_,ClearCoatRoughness)\n#include<samplerVertexDeclaration>(_DEFINENAME_,CLEARCOAT_BUMP,_VARYINGNAME_,ClearCoatBump)\n#include<samplerVertexDeclaration>(_DEFINENAME_,CLEARCOAT_TINT_TEXTURE,_VARYINGNAME_,ClearCoatTint)\n#endif\n#ifdef IRIDESCENCE\n#include<samplerVertexDeclaration>(_DEFINENAME_,IRIDESCENCE_TEXTURE,_VARYINGNAME_,Iridescence)\n#include<samplerVertexDeclaration>(_DEFINENAME_,IRIDESCENCE_THICKNESS_TEXTURE,_VARYINGNAME_,IridescenceThickness)\n#endif\n#ifdef SHEEN\n#include<samplerVertexDeclaration>(_DEFINENAME_,SHEEN_TEXTURE,_VARYINGNAME_,Sheen)\n#include<samplerVertexDeclaration>(_DEFINENAME_,SHEEN_TEXTURE_ROUGHNESS,_VARYINGNAME_,SheenRoughness)\n#endif\n#ifdef ANISOTROPIC\n#include<samplerVertexDeclaration>(_DEFINENAME_,ANISOTROPIC_TEXTURE,_VARYINGNAME_,Anisotropy)\n#endif\n#ifdef SUBSURFACE\n#include<samplerVertexDeclaration>(_DEFINENAME_,SS_THICKNESSANDMASK_TEXTURE,_VARYINGNAME_,Thickness)\n#include<samplerVertexDeclaration>(_DEFINENAME_,SS_REFRACTIONINTENSITY_TEXTURE,_VARYINGNAME_,RefractionIntensity)\n#include<samplerVertexDeclaration>(_DEFINENAME_,SS_TRANSLUCENCYINTENSITY_TEXTURE,_VARYINGNAME_,TranslucencyIntensity)\n#include<samplerVertexDeclaration>(_DEFINENAME_,SS_TRANSLUCENCYCOLOR_TEXTURE,_VARYINGNAME_,TranslucencyColor)\n#endif\nvarying vec3 vPositionW;\n#if DEBUGMODE>0\nvarying vec4 vClipSpacePosition;\n#endif\n#ifdef NORMAL\nvarying vec3 vNormalW;\n#if defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)\nvarying vec3 vEnvironmentIrradiance;\n#include<harmonicsFunctions>\n#endif\n#endif\n#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES)\nvarying vec4 vColor;\n#endif\n#include<bumpVertexDeclaration>\n#include<clipPlaneVertexDeclaration>\n#include<fogVertexDeclaration>\n#include<__decl__lightVxFragment>[0..maxSimultaneousLights]\n#include<morphTargetsVertexGlobalDeclaration>\n#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]\n#ifdef REFLECTIONMAP_SKYBOX\nvarying vec3 vPositionUVW;\n#endif\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvarying vec3 vDirectionW;\n#endif\n#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0\nvarying float vViewDepth;\n#endif\n#include<logDepthDeclaration>\n#define CUSTOM_VERTEX_DEFINITIONS\nvoid main(void) {\n#define CUSTOM_VERTEX_MAIN_BEGIN\nvec3 positionUpdated=position;\n#ifdef NORMAL\nvec3 normalUpdated=normal;\n#endif\n#ifdef TANGENT\nvec4 tangentUpdated=tangent;\n#endif\n#ifdef UV1\nvec2 uvUpdated=uv;\n#endif\n#ifdef UV2\nvec2 uv2Updated=uv2;\n#endif\n#ifdef VERTEXCOLOR\nvec4 colorUpdated=color;\n#endif\n#include<morphTargetsVertexGlobal>\n#include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]\n#ifdef REFLECTIONMAP_SKYBOX\nvPositionUVW=positionUpdated;\n#endif\n#define CUSTOM_VERTEX_UPDATE_POSITION\n#define CUSTOM_VERTEX_UPDATE_NORMAL\n#include<instancesVertex>\n#if defined(PREPASS) && ((defined(PREPASS_VELOCITY) || defined(PREPASS_VELOCITY_LINEAR)) && !defined(BONES_VELOCITY_ENABLED)\nvCurrentPosition=viewProjection*finalWorld*vec4(positionUpdated,1.0);vPreviousPosition=previousViewProjection*finalPreviousWorld*vec4(positionUpdated,1.0);\n#endif\n#include<bonesVertex>\n#include<bakedVertexAnimation>\nvec4 worldPos=finalWorld*vec4(positionUpdated,1.0);vPositionW=vec3(worldPos);\n#ifdef PREPASS\n#include<prePassVertex>\n#endif\n#ifdef NORMAL\nmat3 normalWorld=mat3(finalWorld);\n#if defined(INSTANCES) && defined(THIN_INSTANCES)\nvNormalW=normalUpdated/vec3(dot(normalWorld[0],normalWorld[0]),dot(normalWorld[1],normalWorld[1]),dot(normalWorld[2],normalWorld[2]));vNormalW=normalize(normalWorld*vNormalW);\n#else\n#ifdef NONUNIFORMSCALING\nnormalWorld=transposeMat3(inverseMat3(normalWorld));\n#endif\nvNormalW=normalize(normalWorld*normalUpdated);\n#endif\n#if defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)\n#if BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LAMBERT && BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LEGACY\nvec3 viewDirectionW=normalize(vEyePosition.xyz-vPositionW);float NdotV=max(dot(vNormalW,viewDirectionW),0.0);vec3 roughNormal=mix(vNormalW,viewDirectionW,(0.5*(1.0-NdotV))*baseDiffuseRoughness);vec3 reflectionVector=vec3(reflectionMatrix*vec4(roughNormal,0)).xyz;\n#else\nvec3 reflectionVector=vec3(reflectionMatrix*vec4(vNormalW,0)).xyz;\n#endif\n#ifdef REFLECTIONMAP_OPPOSITEZ\nreflectionVector.z*=-1.0;\n#endif\nvEnvironmentIrradiance=computeEnvironmentIrradiance(reflectionVector);\n#endif\n#endif\n#define CUSTOM_VERTEX_UPDATE_WORLDPOS\n#ifdef MULTIVIEW\nif (gl_ViewID_OVR==0u) {gl_Position=viewProjection*worldPos;} else {gl_Position=viewProjectionR*worldPos;}\n#else\ngl_Position=viewProjection*worldPos;\n#endif\n#if DEBUGMODE>0\nvClipSpacePosition=gl_Position;\n#endif\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvDirectionW=normalize(vec3(finalWorld*vec4(positionUpdated,0.0)));\n#endif\n#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0\n#ifdef RIGHT_HANDED\nvViewDepth=-(view*worldPos).z;\n#else\nvViewDepth=(view*worldPos).z;\n#endif\n#endif\n#ifndef UV1\nvec2 uvUpdated=vec2(0.,0.);\n#endif\n#ifndef UV2\nvec2 uv2Updated=vec2(0.,0.);\n#endif\n#ifdef MAINUV1\nvMainUV1=uvUpdated;\n#endif\n#ifdef MAINUV2\nvMainUV2=uv2Updated;\n#endif\n#include<uvVariableDeclaration>[3..7]\n#include<samplerVertexImplementation>(_DEFINENAME_,ALBEDO,_VARYINGNAME_,Albedo,_MATRIXNAME_,albedo,_INFONAME_,AlbedoInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,BASE_WEIGHT,_VARYINGNAME_,BaseWeight,_MATRIXNAME_,baseWeight,_INFONAME_,BaseWeightInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,BASE_DIFFUSE_ROUGHNESS,_VARYINGNAME_,BaseDiffuseRoughness,_MATRIXNAME_,baseDiffuseRoughness,_INFONAME_,BaseDiffuseRoughnessInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,DETAIL,_VARYINGNAME_,Detail,_MATRIXNAME_,detail,_INFONAME_,DetailInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,AMBIENT,_VARYINGNAME_,Ambient,_MATRIXNAME_,ambient,_INFONAME_,AmbientInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,OPACITY,_VARYINGNAME_,Opacity,_MATRIXNAME_,opacity,_INFONAME_,OpacityInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,EMISSIVE,_VARYINGNAME_,Emissive,_MATRIXNAME_,emissive,_INFONAME_,EmissiveInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,LIGHTMAP,_VARYINGNAME_,Lightmap,_MATRIXNAME_,lightmap,_INFONAME_,LightmapInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,REFLECTIVITY,_VARYINGNAME_,Reflectivity,_MATRIXNAME_,reflectivity,_INFONAME_,ReflectivityInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,MICROSURFACEMAP,_VARYINGNAME_,MicroSurfaceSampler,_MATRIXNAME_,microSurfaceSampler,_INFONAME_,MicroSurfaceSamplerInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,METALLIC_REFLECTANCE,_VARYINGNAME_,MetallicReflectance,_MATRIXNAME_,metallicReflectance,_INFONAME_,MetallicReflectanceInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,REFLECTANCE,_VARYINGNAME_,Reflectance,_MATRIXNAME_,reflectance,_INFONAME_,ReflectanceInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump,_MATRIXNAME_,bump,_INFONAME_,BumpInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,DECAL,_VARYINGNAME_,Decal,_MATRIXNAME_,decal,_INFONAME_,DecalInfos.x)\n#ifdef CLEARCOAT\n#include<samplerVertexImplementation>(_DEFINENAME_,CLEARCOAT_TEXTURE,_VARYINGNAME_,ClearCoat,_MATRIXNAME_,clearCoat,_INFONAME_,ClearCoatInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,CLEARCOAT_TEXTURE_ROUGHNESS,_VARYINGNAME_,ClearCoatRoughness,_MATRIXNAME_,clearCoatRoughness,_INFONAME_,ClearCoatInfos.z)\n#include<samplerVertexImplementation>(_DEFINENAME_,CLEARCOAT_BUMP,_VARYINGNAME_,ClearCoatBump,_MATRIXNAME_,clearCoatBump,_INFONAME_,ClearCoatBumpInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,CLEARCOAT_TINT_TEXTURE,_VARYINGNAME_,ClearCoatTint,_MATRIXNAME_,clearCoatTint,_INFONAME_,ClearCoatTintInfos.x)\n#endif\n#ifdef IRIDESCENCE\n#include<samplerVertexImplementation>(_DEFINENAME_,IRIDESCENCE_TEXTURE,_VARYINGNAME_,Iridescence,_MATRIXNAME_,iridescence,_INFONAME_,IridescenceInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,IRIDESCENCE_THICKNESS_TEXTURE,_VARYINGNAME_,IridescenceThickness,_MATRIXNAME_,iridescenceThickness,_INFONAME_,IridescenceInfos.z)\n#endif\n#ifdef SHEEN\n#include<samplerVertexImplementation>(_DEFINENAME_,SHEEN_TEXTURE,_VARYINGNAME_,Sheen,_MATRIXNAME_,sheen,_INFONAME_,SheenInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,SHEEN_TEXTURE_ROUGHNESS,_VARYINGNAME_,SheenRoughness,_MATRIXNAME_,sheenRoughness,_INFONAME_,SheenInfos.z)\n#endif\n#ifdef ANISOTROPIC\n#include<samplerVertexImplementation>(_DEFINENAME_,ANISOTROPIC_TEXTURE,_VARYINGNAME_,Anisotropy,_MATRIXNAME_,anisotropy,_INFONAME_,AnisotropyInfos.x)\n#endif\n#ifdef SUBSURFACE\n#include<samplerVertexImplementation>(_DEFINENAME_,SS_THICKNESSANDMASK_TEXTURE,_VARYINGNAME_,Thickness,_MATRIXNAME_,thickness,_INFONAME_,ThicknessInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,SS_REFRACTIONINTENSITY_TEXTURE,_VARYINGNAME_,RefractionIntensity,_MATRIXNAME_,refractionIntensity,_INFONAME_,RefractionIntensityInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,SS_TRANSLUCENCYINTENSITY_TEXTURE,_VARYINGNAME_,TranslucencyIntensity,_MATRIXNAME_,translucencyIntensity,_INFONAME_,TranslucencyIntensityInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,SS_TRANSLUCENCYCOLOR_TEXTURE,_VARYINGNAME_,TranslucencyColor,_MATRIXNAME_,translucencyColor,_INFONAME_,TranslucencyColorInfos.x)\n#endif\n#include<bumpVertex>\n#include<clipPlaneVertex>\n#include<fogVertex>\n#include<shadowsVertex>[0..maxSimultaneousLights]\n#include<vertexColorMixing>\n#if defined(POINTSIZE) && !defined(WEBGPU)\ngl_PointSize=pointSize;\n#endif\n#include<logDepthVertex>\n#define CUSTOM_VERTEX_MAIN_END\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStore[name]) {\n ShaderStore.ShadersStore[name] = shader;\n}\n/** @internal */\nexport const pbrVertexShader = { name, shader };\n"]}
@@ -147,8 +147,12 @@ vertexOutputs.vPositionW= worldPos.xyz;
147
147
  vertexOutputs.vDirectionW=normalize((finalWorld* vec4f(positionUpdated,0.0)).xyz);
148
148
  #endif
149
149
  #if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0
150
+ #ifdef RIGHT_HANDED
151
+ vertexOutputs.vViewDepth=-(scene.view*worldPos).z;
152
+ #else
150
153
  vertexOutputs.vViewDepth=(scene.view*worldPos).z;
151
154
  #endif
155
+ #endif
152
156
  #ifndef UV1
153
157
  var uvUpdated: vec2f=vec2f(0.,0.);
154
158
  #endif
@@ -1 +1 @@
1
- {"version":3,"file":"default.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/default.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,wCAAwC,CAAC;AAChD,OAAO,yCAAyC,CAAC;AACjD,OAAO,kCAAkC,CAAC;AAC1C,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kDAAkD,CAAC;AAC1D,OAAO,uCAAuC,CAAC;AAC/C,OAAO,2CAA2C,CAAC;AACnD,OAAO,2CAA2C,CAAC;AACnD,OAAO,2CAA2C,CAAC;AACnD,OAAO,wCAAwC,CAAC;AAChD,OAAO,6CAA6C,CAAC;AACrD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,6CAA6C,CAAC;AACrD,OAAO,wCAAwC,CAAC;AAChD,OAAO,sDAAsD,CAAC;AAC9D,OAAO,gDAAgD,CAAC;AACxD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,2CAA2C,CAAC;AACnD,OAAO,qCAAqC,CAAC;AAC7C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,8BAA8B,CAAC;AACtC,OAAO,uCAAuC,CAAC;AAC/C,OAAO,gCAAgC,CAAC;AACxC,OAAO,wCAAwC,CAAC;AAChD,OAAO,8CAA8C,CAAC;AACtD,OAAO,6BAA6B,CAAC;AACrC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,4BAA4B,CAAC;AACpC,OAAO,gCAAgC,CAAC;AACxC,OAAO,oCAAoC,CAAC;AAC5C,OAAO,iCAAiC,CAAC;AAEzC,MAAM,IAAI,GAAG,qBAAqB,CAAC;AACnC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqJd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/defaultUboDeclaration\";\nimport \"./ShadersInclude/uvAttributeDeclaration\";\nimport \"./ShadersInclude/helperFunctions\";\nimport \"./ShadersInclude/bonesDeclaration\";\nimport \"./ShadersInclude/bakedVertexAnimationDeclaration\";\nimport \"./ShadersInclude/instancesDeclaration\";\nimport \"./ShadersInclude/prePassVertexDeclaration\";\nimport \"./ShadersInclude/mainUVVaryingDeclaration\";\nimport \"./ShadersInclude/samplerVertexDeclaration\";\nimport \"./ShadersInclude/bumpVertexDeclaration\";\nimport \"./ShadersInclude/clipPlaneVertexDeclaration\";\nimport \"./ShadersInclude/fogVertexDeclaration\";\nimport \"./ShadersInclude/lightVxFragmentDeclaration\";\nimport \"./ShadersInclude/lightVxUboDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobalDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexDeclaration\";\nimport \"./ShadersInclude/logDepthDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobal\";\nimport \"./ShadersInclude/morphTargetsVertex\";\nimport \"./ShadersInclude/instancesVertex\";\nimport \"./ShadersInclude/bonesVertex\";\nimport \"./ShadersInclude/bakedVertexAnimation\";\nimport \"./ShadersInclude/prePassVertex\";\nimport \"./ShadersInclude/uvVariableDeclaration\";\nimport \"./ShadersInclude/samplerVertexImplementation\";\nimport \"./ShadersInclude/bumpVertex\";\nimport \"./ShadersInclude/clipPlaneVertex\";\nimport \"./ShadersInclude/fogVertex\";\nimport \"./ShadersInclude/shadowsVertex\";\nimport \"./ShadersInclude/vertexColorMixing\";\nimport \"./ShadersInclude/logDepthVertex\";\n\nconst name = \"defaultVertexShader\";\nconst shader = `#include<defaultUboDeclaration>\n#define CUSTOM_VERTEX_BEGIN\nattribute position: vec3f;\n#ifdef NORMAL\nattribute normal: vec3f;\n#endif\n#ifdef TANGENT\nattribute tangent: vec4f;\n#endif\n#ifdef UV1\nattribute uv: vec2f;\n#endif\n#include<uvAttributeDeclaration>[2..7]\n#ifdef VERTEXCOLOR\nattribute color: vec4f;\n#endif\n#include<helperFunctions>\n#include<bonesDeclaration>\n#include<bakedVertexAnimationDeclaration>\n#include<instancesDeclaration>\n#include<prePassVertexDeclaration>\n#include<mainUVVaryingDeclaration>[1..7]\n#include<samplerVertexDeclaration>(_DEFINENAME_,DIFFUSE,_VARYINGNAME_,Diffuse)\n#include<samplerVertexDeclaration>(_DEFINENAME_,DETAIL,_VARYINGNAME_,Detail)\n#include<samplerVertexDeclaration>(_DEFINENAME_,AMBIENT,_VARYINGNAME_,Ambient)\n#include<samplerVertexDeclaration>(_DEFINENAME_,OPACITY,_VARYINGNAME_,Opacity)\n#include<samplerVertexDeclaration>(_DEFINENAME_,EMISSIVE,_VARYINGNAME_,Emissive)\n#include<samplerVertexDeclaration>(_DEFINENAME_,LIGHTMAP,_VARYINGNAME_,Lightmap)\n#if defined(SPECULARTERM)\n#include<samplerVertexDeclaration>(_DEFINENAME_,SPECULAR,_VARYINGNAME_,Specular)\n#endif\n#include<samplerVertexDeclaration>(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump)\n#include<samplerVertexDeclaration>(_DEFINENAME_,DECAL,_VARYINGNAME_,Decal)\nvarying vPositionW: vec3f;\n#ifdef NORMAL\nvarying vNormalW: vec3f;\n#endif\n#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES)\nvarying vColor: vec4f;\n#endif\n#include<bumpVertexDeclaration>\n#include<clipPlaneVertexDeclaration>\n#include<fogVertexDeclaration>\n#include<__decl__lightVxFragment>[0..maxSimultaneousLights]\n#include<morphTargetsVertexGlobalDeclaration>\n#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]\n#ifdef REFLECTIONMAP_SKYBOX\nvarying vPositionUVW: vec3f;\n#endif\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvarying vDirectionW: vec3f;\n#endif\n#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0\nvarying vViewDepth: f32;\n#endif\n#include<logDepthDeclaration>\n#define CUSTOM_VERTEX_DEFINITIONS\n@vertex\nfn main(input : VertexInputs)->FragmentInputs {\n#define CUSTOM_VERTEX_MAIN_BEGIN\nvar positionUpdated: vec3f=vertexInputs.position;\n#ifdef NORMAL\nvar normalUpdated: vec3f=vertexInputs.normal;\n#endif\n#ifdef TANGENT\nvar tangentUpdated: vec4f=vertexInputs.tangent;\n#endif\n#ifdef UV1\nvar uvUpdated: vec2f=vertexInputs.uv;\n#endif\n#ifdef UV2\nvar uv2Updated: vec2f=vertexInputs.uv2;\n#endif\n#ifdef VERTEXCOLOR\nvar colorUpdated: vec4f=vertexInputs.color;\n#endif\n#include<morphTargetsVertexGlobal>\n#include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]\n#ifdef REFLECTIONMAP_SKYBOX\nvertexOutputs.vPositionUVW=positionUpdated;\n#endif\n#define CUSTOM_VERTEX_UPDATE_POSITION\n#define CUSTOM_VERTEX_UPDATE_NORMAL\n#include<instancesVertex>\n#if defined(PREPASS) && ((defined(PREPASS_VELOCITY) || defined(PREPASS_VELOCITY_LINEAR)) && !defined(BONES_VELOCITY_ENABLED)\nvertexOutputs.vCurrentPosition=scene.viewProjection*finalWorld*vec4f(positionUpdated,1.0);vertexOutputs.vPreviousPosition=uniforms.previousViewProjection*finalPreviousWorld*vec4f(positionUpdated,1.0);\n#endif\n#include<bonesVertex>\n#include<bakedVertexAnimation>\nvar worldPos: vec4f=finalWorld*vec4f(positionUpdated,1.0);\n#ifdef NORMAL\nvar normalWorld: mat3x3f= mat3x3f(finalWorld[0].xyz,finalWorld[1].xyz,finalWorld[2].xyz);\n#if defined(INSTANCES) && defined(THIN_INSTANCES)\nvertexOutputs.vNormalW=normalUpdated/ vec3f(dot(normalWorld[0],normalWorld[0]),dot(normalWorld[1],normalWorld[1]),dot(normalWorld[2],normalWorld[2]));vertexOutputs.vNormalW=normalize(normalWorld*vertexOutputs.vNormalW);\n#else\n#ifdef NONUNIFORMSCALING\nnormalWorld=transposeMat3(inverseMat3(normalWorld));\n#endif\nvertexOutputs.vNormalW=normalize(normalWorld*normalUpdated);\n#endif\n#endif\n#define CUSTOM_VERTEX_UPDATE_WORLDPOS\n#ifdef MULTIVIEW\nif (gl_ViewID_OVR==0u) {vertexOutputs.position=scene.viewProjection*worldPos;} else {vertexOutputs.position=scene.viewProjectionR*worldPos;}\n#else\nvertexOutputs.position=scene.viewProjection*worldPos;\n#endif\nvertexOutputs.vPositionW= worldPos.xyz;\n#ifdef PREPASS\n#include<prePassVertex>\n#endif\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvertexOutputs.vDirectionW=normalize((finalWorld* vec4f(positionUpdated,0.0)).xyz);\n#endif\n#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0\nvertexOutputs.vViewDepth=(scene.view*worldPos).z;\n#endif\n#ifndef UV1\nvar uvUpdated: vec2f=vec2f(0.,0.);\n#endif\n#ifdef MAINUV1\nvertexOutputs.vMainUV1=uvUpdated;\n#endif\n#ifndef UV2\nvar uv2Updated: vec2f=vec2f(0.,0.);\n#endif\n#ifdef MAINUV2\nvertexOutputs.vMainUV2=uv2Updated;\n#endif\n#include<uvVariableDeclaration>[3..7]\n#include<samplerVertexImplementation>(_DEFINENAME_,DIFFUSE,_VARYINGNAME_,Diffuse,_MATRIXNAME_,diffuse,_INFONAME_,DiffuseInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,DETAIL,_VARYINGNAME_,Detail,_MATRIXNAME_,detail,_INFONAME_,DetailInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,AMBIENT,_VARYINGNAME_,Ambient,_MATRIXNAME_,ambient,_INFONAME_,AmbientInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,OPACITY,_VARYINGNAME_,Opacity,_MATRIXNAME_,opacity,_INFONAME_,OpacityInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,EMISSIVE,_VARYINGNAME_,Emissive,_MATRIXNAME_,emissive,_INFONAME_,EmissiveInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,LIGHTMAP,_VARYINGNAME_,Lightmap,_MATRIXNAME_,lightmap,_INFONAME_,LightmapInfos.x)\n#if defined(SPECULARTERM)\n#include<samplerVertexImplementation>(_DEFINENAME_,SPECULAR,_VARYINGNAME_,Specular,_MATRIXNAME_,specular,_INFONAME_,SpecularInfos.x)\n#endif\n#include<samplerVertexImplementation>(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump,_MATRIXNAME_,bump,_INFONAME_,BumpInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,DECAL,_VARYINGNAME_,Decal,_MATRIXNAME_,decal,_INFONAME_,DecalInfos.x)\n#include<bumpVertex>\n#include<clipPlaneVertex>\n#include<fogVertex>\n#include<shadowsVertex>[0..maxSimultaneousLights]\n#include<vertexColorMixing>\n#include<logDepthVertex>\n#define CUSTOM_VERTEX_MAIN_END\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const defaultVertexShaderWGSL = { name, shader };\n"]}
1
+ {"version":3,"file":"default.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/default.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,wCAAwC,CAAC;AAChD,OAAO,yCAAyC,CAAC;AACjD,OAAO,kCAAkC,CAAC;AAC1C,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kDAAkD,CAAC;AAC1D,OAAO,uCAAuC,CAAC;AAC/C,OAAO,2CAA2C,CAAC;AACnD,OAAO,2CAA2C,CAAC;AACnD,OAAO,2CAA2C,CAAC;AACnD,OAAO,wCAAwC,CAAC;AAChD,OAAO,6CAA6C,CAAC;AACrD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,6CAA6C,CAAC;AACrD,OAAO,wCAAwC,CAAC;AAChD,OAAO,sDAAsD,CAAC;AAC9D,OAAO,gDAAgD,CAAC;AACxD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,2CAA2C,CAAC;AACnD,OAAO,qCAAqC,CAAC;AAC7C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,8BAA8B,CAAC;AACtC,OAAO,uCAAuC,CAAC;AAC/C,OAAO,gCAAgC,CAAC;AACxC,OAAO,wCAAwC,CAAC;AAChD,OAAO,8CAA8C,CAAC;AACtD,OAAO,6BAA6B,CAAC;AACrC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,4BAA4B,CAAC;AACpC,OAAO,gCAAgC,CAAC;AACxC,OAAO,oCAAoC,CAAC;AAC5C,OAAO,iCAAiC,CAAC;AAEzC,MAAM,IAAI,GAAG,qBAAqB,CAAC;AACnC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyJd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/defaultUboDeclaration\";\nimport \"./ShadersInclude/uvAttributeDeclaration\";\nimport \"./ShadersInclude/helperFunctions\";\nimport \"./ShadersInclude/bonesDeclaration\";\nimport \"./ShadersInclude/bakedVertexAnimationDeclaration\";\nimport \"./ShadersInclude/instancesDeclaration\";\nimport \"./ShadersInclude/prePassVertexDeclaration\";\nimport \"./ShadersInclude/mainUVVaryingDeclaration\";\nimport \"./ShadersInclude/samplerVertexDeclaration\";\nimport \"./ShadersInclude/bumpVertexDeclaration\";\nimport \"./ShadersInclude/clipPlaneVertexDeclaration\";\nimport \"./ShadersInclude/fogVertexDeclaration\";\nimport \"./ShadersInclude/lightVxFragmentDeclaration\";\nimport \"./ShadersInclude/lightVxUboDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobalDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexDeclaration\";\nimport \"./ShadersInclude/logDepthDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobal\";\nimport \"./ShadersInclude/morphTargetsVertex\";\nimport \"./ShadersInclude/instancesVertex\";\nimport \"./ShadersInclude/bonesVertex\";\nimport \"./ShadersInclude/bakedVertexAnimation\";\nimport \"./ShadersInclude/prePassVertex\";\nimport \"./ShadersInclude/uvVariableDeclaration\";\nimport \"./ShadersInclude/samplerVertexImplementation\";\nimport \"./ShadersInclude/bumpVertex\";\nimport \"./ShadersInclude/clipPlaneVertex\";\nimport \"./ShadersInclude/fogVertex\";\nimport \"./ShadersInclude/shadowsVertex\";\nimport \"./ShadersInclude/vertexColorMixing\";\nimport \"./ShadersInclude/logDepthVertex\";\n\nconst name = \"defaultVertexShader\";\nconst shader = `#include<defaultUboDeclaration>\n#define CUSTOM_VERTEX_BEGIN\nattribute position: vec3f;\n#ifdef NORMAL\nattribute normal: vec3f;\n#endif\n#ifdef TANGENT\nattribute tangent: vec4f;\n#endif\n#ifdef UV1\nattribute uv: vec2f;\n#endif\n#include<uvAttributeDeclaration>[2..7]\n#ifdef VERTEXCOLOR\nattribute color: vec4f;\n#endif\n#include<helperFunctions>\n#include<bonesDeclaration>\n#include<bakedVertexAnimationDeclaration>\n#include<instancesDeclaration>\n#include<prePassVertexDeclaration>\n#include<mainUVVaryingDeclaration>[1..7]\n#include<samplerVertexDeclaration>(_DEFINENAME_,DIFFUSE,_VARYINGNAME_,Diffuse)\n#include<samplerVertexDeclaration>(_DEFINENAME_,DETAIL,_VARYINGNAME_,Detail)\n#include<samplerVertexDeclaration>(_DEFINENAME_,AMBIENT,_VARYINGNAME_,Ambient)\n#include<samplerVertexDeclaration>(_DEFINENAME_,OPACITY,_VARYINGNAME_,Opacity)\n#include<samplerVertexDeclaration>(_DEFINENAME_,EMISSIVE,_VARYINGNAME_,Emissive)\n#include<samplerVertexDeclaration>(_DEFINENAME_,LIGHTMAP,_VARYINGNAME_,Lightmap)\n#if defined(SPECULARTERM)\n#include<samplerVertexDeclaration>(_DEFINENAME_,SPECULAR,_VARYINGNAME_,Specular)\n#endif\n#include<samplerVertexDeclaration>(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump)\n#include<samplerVertexDeclaration>(_DEFINENAME_,DECAL,_VARYINGNAME_,Decal)\nvarying vPositionW: vec3f;\n#ifdef NORMAL\nvarying vNormalW: vec3f;\n#endif\n#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES)\nvarying vColor: vec4f;\n#endif\n#include<bumpVertexDeclaration>\n#include<clipPlaneVertexDeclaration>\n#include<fogVertexDeclaration>\n#include<__decl__lightVxFragment>[0..maxSimultaneousLights]\n#include<morphTargetsVertexGlobalDeclaration>\n#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]\n#ifdef REFLECTIONMAP_SKYBOX\nvarying vPositionUVW: vec3f;\n#endif\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvarying vDirectionW: vec3f;\n#endif\n#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0\nvarying vViewDepth: f32;\n#endif\n#include<logDepthDeclaration>\n#define CUSTOM_VERTEX_DEFINITIONS\n@vertex\nfn main(input : VertexInputs)->FragmentInputs {\n#define CUSTOM_VERTEX_MAIN_BEGIN\nvar positionUpdated: vec3f=vertexInputs.position;\n#ifdef NORMAL\nvar normalUpdated: vec3f=vertexInputs.normal;\n#endif\n#ifdef TANGENT\nvar tangentUpdated: vec4f=vertexInputs.tangent;\n#endif\n#ifdef UV1\nvar uvUpdated: vec2f=vertexInputs.uv;\n#endif\n#ifdef UV2\nvar uv2Updated: vec2f=vertexInputs.uv2;\n#endif\n#ifdef VERTEXCOLOR\nvar colorUpdated: vec4f=vertexInputs.color;\n#endif\n#include<morphTargetsVertexGlobal>\n#include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]\n#ifdef REFLECTIONMAP_SKYBOX\nvertexOutputs.vPositionUVW=positionUpdated;\n#endif\n#define CUSTOM_VERTEX_UPDATE_POSITION\n#define CUSTOM_VERTEX_UPDATE_NORMAL\n#include<instancesVertex>\n#if defined(PREPASS) && ((defined(PREPASS_VELOCITY) || defined(PREPASS_VELOCITY_LINEAR)) && !defined(BONES_VELOCITY_ENABLED)\nvertexOutputs.vCurrentPosition=scene.viewProjection*finalWorld*vec4f(positionUpdated,1.0);vertexOutputs.vPreviousPosition=uniforms.previousViewProjection*finalPreviousWorld*vec4f(positionUpdated,1.0);\n#endif\n#include<bonesVertex>\n#include<bakedVertexAnimation>\nvar worldPos: vec4f=finalWorld*vec4f(positionUpdated,1.0);\n#ifdef NORMAL\nvar normalWorld: mat3x3f= mat3x3f(finalWorld[0].xyz,finalWorld[1].xyz,finalWorld[2].xyz);\n#if defined(INSTANCES) && defined(THIN_INSTANCES)\nvertexOutputs.vNormalW=normalUpdated/ vec3f(dot(normalWorld[0],normalWorld[0]),dot(normalWorld[1],normalWorld[1]),dot(normalWorld[2],normalWorld[2]));vertexOutputs.vNormalW=normalize(normalWorld*vertexOutputs.vNormalW);\n#else\n#ifdef NONUNIFORMSCALING\nnormalWorld=transposeMat3(inverseMat3(normalWorld));\n#endif\nvertexOutputs.vNormalW=normalize(normalWorld*normalUpdated);\n#endif\n#endif\n#define CUSTOM_VERTEX_UPDATE_WORLDPOS\n#ifdef MULTIVIEW\nif (gl_ViewID_OVR==0u) {vertexOutputs.position=scene.viewProjection*worldPos;} else {vertexOutputs.position=scene.viewProjectionR*worldPos;}\n#else\nvertexOutputs.position=scene.viewProjection*worldPos;\n#endif\nvertexOutputs.vPositionW= worldPos.xyz;\n#ifdef PREPASS\n#include<prePassVertex>\n#endif\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvertexOutputs.vDirectionW=normalize((finalWorld* vec4f(positionUpdated,0.0)).xyz);\n#endif\n#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0\n#ifdef RIGHT_HANDED\nvertexOutputs.vViewDepth=-(scene.view*worldPos).z;\n#else\nvertexOutputs.vViewDepth=(scene.view*worldPos).z;\n#endif\n#endif\n#ifndef UV1\nvar uvUpdated: vec2f=vec2f(0.,0.);\n#endif\n#ifdef MAINUV1\nvertexOutputs.vMainUV1=uvUpdated;\n#endif\n#ifndef UV2\nvar uv2Updated: vec2f=vec2f(0.,0.);\n#endif\n#ifdef MAINUV2\nvertexOutputs.vMainUV2=uv2Updated;\n#endif\n#include<uvVariableDeclaration>[3..7]\n#include<samplerVertexImplementation>(_DEFINENAME_,DIFFUSE,_VARYINGNAME_,Diffuse,_MATRIXNAME_,diffuse,_INFONAME_,DiffuseInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,DETAIL,_VARYINGNAME_,Detail,_MATRIXNAME_,detail,_INFONAME_,DetailInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,AMBIENT,_VARYINGNAME_,Ambient,_MATRIXNAME_,ambient,_INFONAME_,AmbientInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,OPACITY,_VARYINGNAME_,Opacity,_MATRIXNAME_,opacity,_INFONAME_,OpacityInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,EMISSIVE,_VARYINGNAME_,Emissive,_MATRIXNAME_,emissive,_INFONAME_,EmissiveInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,LIGHTMAP,_VARYINGNAME_,Lightmap,_MATRIXNAME_,lightmap,_INFONAME_,LightmapInfos.x)\n#if defined(SPECULARTERM)\n#include<samplerVertexImplementation>(_DEFINENAME_,SPECULAR,_VARYINGNAME_,Specular,_MATRIXNAME_,specular,_INFONAME_,SpecularInfos.x)\n#endif\n#include<samplerVertexImplementation>(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump,_MATRIXNAME_,bump,_INFONAME_,BumpInfos.x)\n#include<samplerVertexImplementation>(_DEFINENAME_,DECAL,_VARYINGNAME_,Decal,_MATRIXNAME_,decal,_INFONAME_,DecalInfos.x)\n#include<bumpVertex>\n#include<clipPlaneVertex>\n#include<fogVertex>\n#include<shadowsVertex>[0..maxSimultaneousLights]\n#include<vertexColorMixing>\n#include<logDepthVertex>\n#define CUSTOM_VERTEX_MAIN_END\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const defaultVertexShaderWGSL = { name, shader };\n"]}
@@ -8,7 +8,13 @@ const shader = `attribute position: vec3f;flat varying vOffset: u32;flat varying
8
8
  var lightDataTexture: texture_2d<f32>;uniform tileMaskResolution: vec3f;uniform halfTileRes: vec2f;
9
9
  #include<clusteredLightingFunctions>
10
10
  @vertex
11
- fn main(input: VertexInputs)->FragmentInputs {let light=getClusteredLight(lightDataTexture,vertexInputs.instanceIndex);let range=light.vLightFalloff.x;let viewPosition=scene.view*vec4f(light.vLightData.xyz,1);let viewPositionSq=viewPosition*viewPosition;let distSq=viewPositionSq.xy+viewPositionSq.z;let sinSq=(range*range)/distSq;let cosSq=max(1.0-sinSq,vec2f(0.01));let sinCos=vertexInputs.position.xy*sqrt(sinSq*cosSq);let rotatedX=mat2x2f(cosSq.x,-sinCos.x,sinCos.x,cosSq.x)*viewPosition.xz;let rotatedY=mat2x2f(cosSq.y,-sinCos.y,sinCos.y,cosSq.y)*viewPosition.yz;let projX=scene.projection*vec4f(rotatedX.x,0,rotatedX.y,1);let projY=scene.projection*vec4f(0,rotatedY.x,rotatedY.y,1);var projPosition=vec2f(projX.x/max(projX.w,0.01),projY.y/max(projY.w,0.01));projPosition=select(vertexInputs.position.xy,projPosition,cosSq>vec2(0.01));let halfTileRes=uniforms.tileMaskResolution.xy/2.0;var tilePosition=(projPosition+1.0)*halfTileRes;tilePosition=select(floor(tilePosition)-0.01,ceil(tilePosition)+0.01,vertexInputs.position.xy>vec2f(0));vertexOutputs.position=vec4f(tilePosition/halfTileRes-1.0,0,1);vertexOutputs.vOffset=vertexInputs.instanceIndex/CLUSTLIGHT_BATCH;vertexOutputs.vMask=1u<<(vertexInputs.instanceIndex % CLUSTLIGHT_BATCH);}
11
+ fn main(input: VertexInputs)->FragmentInputs {let light=getClusteredLight(lightDataTexture,vertexInputs.instanceIndex);let range=light.vLightFalloff.x;let viewPosition=scene.view*vec4f(light.vLightData.xyz,1);let viewPositionSq=viewPosition*viewPosition;let distSq=viewPositionSq.xy+viewPositionSq.z;let sinSq=(range*range)/distSq;let cosSq=max(1.0-sinSq,vec2f(0.01));let sinCos=vertexInputs.position.xy*sqrt(sinSq*cosSq);
12
+ #ifdef RIGHT_HANDED
13
+ let rotatedX=mat2x2f(cosSq.x,sinCos.x,-sinCos.x,cosSq.x)*viewPosition.xz;let rotatedY=mat2x2f(cosSq.y,sinCos.y,-sinCos.y,cosSq.y)*viewPosition.yz;
14
+ #else
15
+ let rotatedX=mat2x2f(cosSq.x,-sinCos.x,sinCos.x,cosSq.x)*viewPosition.xz;let rotatedY=mat2x2f(cosSq.y,-sinCos.y,sinCos.y,cosSq.y)*viewPosition.yz;
16
+ #endif
17
+ let projX=scene.projection*vec4f(rotatedX.x,0,rotatedX.y,1);let projY=scene.projection*vec4f(0,rotatedY.x,rotatedY.y,1);var projPosition=vec2f(projX.x/max(projX.w,0.01),projY.y/max(projY.w,0.01));projPosition=select(vertexInputs.position.xy,projPosition,cosSq>vec2(0.01));let halfTileRes=uniforms.tileMaskResolution.xy/2.0;var tilePosition=(projPosition+1.0)*halfTileRes;tilePosition=select(floor(tilePosition)-0.01,ceil(tilePosition)+0.01,vertexInputs.position.xy>vec2f(0));vertexOutputs.position=vec4f(tilePosition/halfTileRes-1.0,0,1);vertexOutputs.vOffset=vertexInputs.instanceIndex/CLUSTLIGHT_BATCH;vertexOutputs.vMask=1u<<(vertexInputs.instanceIndex % CLUSTLIGHT_BATCH);}
12
18
  `;
13
19
  // Sideeffect
14
20
  if (!ShaderStore.ShadersStoreWGSL[name]) {