@babylonjs/core 8.40.0 → 8.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/Compute/computeEffect.js +5 -1
  2. package/Compute/computeEffect.js.map +1 -1
  3. package/Compute/computeShader.d.ts +4 -0
  4. package/Compute/computeShader.js +9 -3
  5. package/Compute/computeShader.js.map +1 -1
  6. package/Engines/Extensions/engine.computeShader.d.ts +2 -3
  7. package/Engines/Extensions/engine.computeShader.js.map +1 -1
  8. package/Engines/ICanvas.d.ts +3 -3
  9. package/Engines/ICanvas.js.map +1 -1
  10. package/Engines/abstractEngine.js +2 -2
  11. package/Engines/abstractEngine.js.map +1 -1
  12. package/Engines/webgpuEngine.js +2 -2
  13. package/Engines/webgpuEngine.js.map +1 -1
  14. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +3 -0
  15. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +29 -14
  16. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  17. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.d.ts +12 -41
  18. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js +106 -184
  19. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
  20. package/FrameGraph/Passes/renderPass.js +5 -3
  21. package/FrameGraph/Passes/renderPass.js.map +1 -1
  22. package/FrameGraph/Tasks/Layers/baseLayerTask.d.ts +2 -0
  23. package/FrameGraph/Tasks/Layers/baseLayerTask.js +6 -0
  24. package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
  25. package/FrameGraph/Tasks/Layers/glowLayerTask.d.ts +1 -0
  26. package/FrameGraph/Tasks/Layers/glowLayerTask.js +3 -0
  27. package/FrameGraph/Tasks/Layers/glowLayerTask.js.map +1 -1
  28. package/FrameGraph/Tasks/Layers/highlightLayerTask.d.ts +1 -0
  29. package/FrameGraph/Tasks/Layers/highlightLayerTask.js +3 -0
  30. package/FrameGraph/Tasks/Layers/highlightLayerTask.js.map +1 -1
  31. package/FrameGraph/Tasks/Misc/computeShaderTask.d.ts +1 -0
  32. package/FrameGraph/Tasks/Misc/computeShaderTask.js +3 -0
  33. package/FrameGraph/Tasks/Misc/computeShaderTask.js.map +1 -1
  34. package/FrameGraph/Tasks/Misc/cullObjectsTask.d.ts +1 -0
  35. package/FrameGraph/Tasks/Misc/cullObjectsTask.js +3 -0
  36. package/FrameGraph/Tasks/Misc/cullObjectsTask.js.map +1 -1
  37. package/FrameGraph/Tasks/Misc/executeTask.d.ts +1 -0
  38. package/FrameGraph/Tasks/Misc/executeTask.js +3 -0
  39. package/FrameGraph/Tasks/Misc/executeTask.js.map +1 -1
  40. package/FrameGraph/Tasks/Misc/lightingVolumeTask.d.ts +1 -0
  41. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +8 -1
  42. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -1
  43. package/FrameGraph/Tasks/PostProcesses/anaglyphTask.d.ts +1 -0
  44. package/FrameGraph/Tasks/PostProcesses/anaglyphTask.js +3 -0
  45. package/FrameGraph/Tasks/PostProcesses/anaglyphTask.js.map +1 -1
  46. package/FrameGraph/Tasks/PostProcesses/blackAndWhiteTask.d.ts +1 -0
  47. package/FrameGraph/Tasks/PostProcesses/blackAndWhiteTask.js +3 -0
  48. package/FrameGraph/Tasks/PostProcesses/blackAndWhiteTask.js.map +1 -1
  49. package/FrameGraph/Tasks/PostProcesses/bloomMergeTask.d.ts +1 -0
  50. package/FrameGraph/Tasks/PostProcesses/bloomMergeTask.js +3 -0
  51. package/FrameGraph/Tasks/PostProcesses/bloomMergeTask.js.map +1 -1
  52. package/FrameGraph/Tasks/PostProcesses/bloomTask.d.ts +1 -0
  53. package/FrameGraph/Tasks/PostProcesses/bloomTask.js +3 -0
  54. package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
  55. package/FrameGraph/Tasks/PostProcesses/blurTask.d.ts +1 -0
  56. package/FrameGraph/Tasks/PostProcesses/blurTask.js +3 -0
  57. package/FrameGraph/Tasks/PostProcesses/blurTask.js.map +1 -1
  58. package/FrameGraph/Tasks/PostProcesses/chromaticAberrationTask.d.ts +1 -0
  59. package/FrameGraph/Tasks/PostProcesses/chromaticAberrationTask.js +3 -0
  60. package/FrameGraph/Tasks/PostProcesses/chromaticAberrationTask.js.map +1 -1
  61. package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.d.ts +1 -0
  62. package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js +3 -0
  63. package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js.map +1 -1
  64. package/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.d.ts +1 -0
  65. package/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.js +3 -0
  66. package/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.js.map +1 -1
  67. package/FrameGraph/Tasks/PostProcesses/convolutionTask.d.ts +1 -0
  68. package/FrameGraph/Tasks/PostProcesses/convolutionTask.js +3 -0
  69. package/FrameGraph/Tasks/PostProcesses/convolutionTask.js.map +1 -1
  70. package/FrameGraph/Tasks/PostProcesses/customPostProcessTask.d.ts +1 -0
  71. package/FrameGraph/Tasks/PostProcesses/customPostProcessTask.js +3 -0
  72. package/FrameGraph/Tasks/PostProcesses/customPostProcessTask.js.map +1 -1
  73. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.d.ts +1 -0
  74. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js +3 -0
  75. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js.map +1 -1
  76. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.d.ts +1 -0
  77. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js +3 -0
  78. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js.map +1 -1
  79. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.d.ts +1 -0
  80. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js +3 -0
  81. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js.map +1 -1
  82. package/FrameGraph/Tasks/PostProcesses/extractHighlightsTask.d.ts +1 -0
  83. package/FrameGraph/Tasks/PostProcesses/extractHighlightsTask.js +3 -0
  84. package/FrameGraph/Tasks/PostProcesses/extractHighlightsTask.js.map +1 -1
  85. package/FrameGraph/Tasks/PostProcesses/filterTask.d.ts +1 -0
  86. package/FrameGraph/Tasks/PostProcesses/filterTask.js +3 -0
  87. package/FrameGraph/Tasks/PostProcesses/filterTask.js.map +1 -1
  88. package/FrameGraph/Tasks/PostProcesses/fxaaTask.d.ts +1 -0
  89. package/FrameGraph/Tasks/PostProcesses/fxaaTask.js +3 -0
  90. package/FrameGraph/Tasks/PostProcesses/fxaaTask.js.map +1 -1
  91. package/FrameGraph/Tasks/PostProcesses/grainTask.d.ts +1 -0
  92. package/FrameGraph/Tasks/PostProcesses/grainTask.js +3 -0
  93. package/FrameGraph/Tasks/PostProcesses/grainTask.js.map +1 -1
  94. package/FrameGraph/Tasks/PostProcesses/imageProcessingTask.d.ts +1 -0
  95. package/FrameGraph/Tasks/PostProcesses/imageProcessingTask.js +3 -0
  96. package/FrameGraph/Tasks/PostProcesses/imageProcessingTask.js.map +1 -1
  97. package/FrameGraph/Tasks/PostProcesses/motionBlurTask.d.ts +1 -0
  98. package/FrameGraph/Tasks/PostProcesses/motionBlurTask.js +3 -0
  99. package/FrameGraph/Tasks/PostProcesses/motionBlurTask.js.map +1 -1
  100. package/FrameGraph/Tasks/PostProcesses/passTask.d.ts +2 -0
  101. package/FrameGraph/Tasks/PostProcesses/passTask.js +6 -0
  102. package/FrameGraph/Tasks/PostProcesses/passTask.js.map +1 -1
  103. package/FrameGraph/Tasks/PostProcesses/postProcessTask.d.ts +1 -0
  104. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +3 -0
  105. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
  106. package/FrameGraph/Tasks/PostProcesses/screenSpaceCurvatureTask.d.ts +1 -0
  107. package/FrameGraph/Tasks/PostProcesses/screenSpaceCurvatureTask.js +3 -0
  108. package/FrameGraph/Tasks/PostProcesses/screenSpaceCurvatureTask.js.map +1 -1
  109. package/FrameGraph/Tasks/PostProcesses/sharpenTask.d.ts +1 -0
  110. package/FrameGraph/Tasks/PostProcesses/sharpenTask.js +3 -0
  111. package/FrameGraph/Tasks/PostProcesses/sharpenTask.js.map +1 -1
  112. package/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.d.ts +1 -0
  113. package/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.js +3 -0
  114. package/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.js.map +1 -1
  115. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.d.ts +1 -0
  116. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js +3 -0
  117. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js.map +1 -1
  118. package/FrameGraph/Tasks/PostProcesses/ssao2Task.d.ts +1 -0
  119. package/FrameGraph/Tasks/PostProcesses/ssao2Task.js +3 -0
  120. package/FrameGraph/Tasks/PostProcesses/ssao2Task.js.map +1 -1
  121. package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.d.ts +1 -0
  122. package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js +3 -0
  123. package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js.map +1 -1
  124. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.d.ts +1 -0
  125. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js +3 -0
  126. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js.map +1 -1
  127. package/FrameGraph/Tasks/PostProcesses/ssrTask.d.ts +1 -0
  128. package/FrameGraph/Tasks/PostProcesses/ssrTask.js +3 -0
  129. package/FrameGraph/Tasks/PostProcesses/ssrTask.js.map +1 -1
  130. package/FrameGraph/Tasks/PostProcesses/taaTask.d.ts +1 -0
  131. package/FrameGraph/Tasks/PostProcesses/taaTask.js +3 -0
  132. package/FrameGraph/Tasks/PostProcesses/taaTask.js.map +1 -1
  133. package/FrameGraph/Tasks/PostProcesses/tonemapTask.d.ts +1 -0
  134. package/FrameGraph/Tasks/PostProcesses/tonemapTask.js +3 -0
  135. package/FrameGraph/Tasks/PostProcesses/tonemapTask.js.map +1 -1
  136. package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.d.ts +1 -0
  137. package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.js +3 -0
  138. package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.js.map +1 -1
  139. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.d.ts +3 -1
  140. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js +12 -6
  141. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js.map +1 -1
  142. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +1 -0
  143. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +3 -0
  144. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
  145. package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +18 -58
  146. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +114 -121
  147. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  148. package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +12 -0
  149. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +65 -26
  150. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  151. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.d.ts +1 -0
  152. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js +3 -0
  153. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js.map +1 -1
  154. package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.d.ts +1 -0
  155. package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.js +3 -0
  156. package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.js.map +1 -1
  157. package/FrameGraph/Tasks/Texture/clearTextureTask.d.ts +1 -0
  158. package/FrameGraph/Tasks/Texture/clearTextureTask.js +21 -8
  159. package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
  160. package/FrameGraph/Tasks/Texture/copyToBackbufferColorTask.d.ts +1 -0
  161. package/FrameGraph/Tasks/Texture/copyToBackbufferColorTask.js +3 -0
  162. package/FrameGraph/Tasks/Texture/copyToBackbufferColorTask.js.map +1 -1
  163. package/FrameGraph/Tasks/Texture/copyToTextureTask.d.ts +1 -0
  164. package/FrameGraph/Tasks/Texture/copyToTextureTask.js +21 -4
  165. package/FrameGraph/Tasks/Texture/copyToTextureTask.js.map +1 -1
  166. package/FrameGraph/Tasks/Texture/generateMipMapsTask.d.ts +1 -0
  167. package/FrameGraph/Tasks/Texture/generateMipMapsTask.js +3 -0
  168. package/FrameGraph/Tasks/Texture/generateMipMapsTask.js.map +1 -1
  169. package/FrameGraph/frameGraphContext.js +2 -2
  170. package/FrameGraph/frameGraphContext.js.map +1 -1
  171. package/FrameGraph/frameGraphRenderContext.d.ts +1 -0
  172. package/FrameGraph/frameGraphRenderContext.js +17 -8
  173. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  174. package/FrameGraph/frameGraphTask.d.ts +5 -0
  175. package/FrameGraph/frameGraphTask.js +9 -0
  176. package/FrameGraph/frameGraphTask.js.map +1 -1
  177. package/FrameGraph/frameGraphUtils.d.ts +2 -2
  178. package/FrameGraph/frameGraphUtils.js +6 -6
  179. package/FrameGraph/frameGraphUtils.js.map +1 -1
  180. package/Lights/lightingVolume.d.ts +10 -1
  181. package/Lights/lightingVolume.js +201 -102
  182. package/Lights/lightingVolume.js.map +1 -1
  183. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  184. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +2 -0
  185. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  186. package/Materials/materialHelper.geometryrendering.d.ts +5 -1
  187. package/Materials/materialHelper.geometryrendering.js +11 -2
  188. package/Materials/materialHelper.geometryrendering.js.map +1 -1
  189. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +1 -1
  190. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  191. package/Meshes/geometry.d.ts +2 -1
  192. package/Meshes/geometry.js +6 -2
  193. package/Meshes/geometry.js.map +1 -1
  194. package/Meshes/mesh.d.ts +2 -1
  195. package/Meshes/mesh.js +4 -3
  196. package/Meshes/mesh.js.map +1 -1
  197. package/Rendering/objectRenderer.d.ts +6 -2
  198. package/Rendering/objectRenderer.js +69 -63
  199. package/Rendering/objectRenderer.js.map +1 -1
  200. package/Shaders/gaussianSplatting.vertex.js +2 -2
  201. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  202. package/Shaders/volumetricLightingRenderVolume.fragment.js +2 -2
  203. package/Shaders/volumetricLightingRenderVolume.fragment.js.map +1 -1
  204. package/ShadersWGSL/gaussianSplatting.vertex.js +3 -3
  205. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  206. package/ShadersWGSL/lightingVolume.compute.js +10 -4
  207. package/ShadersWGSL/lightingVolume.compute.js.map +1 -1
  208. package/ShadersWGSL/volumetricLightingRenderVolume.fragment.js +2 -2
  209. package/ShadersWGSL/volumetricLightingRenderVolume.fragment.js.map +1 -1
  210. package/States/alphaCullingState.d.ts +1 -0
  211. package/States/alphaCullingState.js +3 -0
  212. package/States/alphaCullingState.js.map +1 -1
  213. package/package.json +1 -1
@@ -17,7 +17,7 @@ const shader = `#include<sceneUboDeclaration>
17
17
  #include<clipPlaneVertexDeclaration>
18
18
  #include<fogVertexDeclaration>
19
19
  #include<logDepthDeclaration>
20
- attribute splatIndex0: vec4f;attribute splatIndex1: vec4f;attribute splatIndex2: vec4f;attribute splatIndex3: vec4f;attribute position: vec3f;uniform invViewport: vec2f;uniform dataTextureSize: vec2f;uniform focal: vec2f;uniform kernelSize: f32;uniform eyePosition: vec3f;uniform viewDirectionFactor: vec3f;var covariancesATexture: texture_2d<f32>;var covariancesBTexture: texture_2d<f32>;var centersTexture: texture_2d<f32>;var colorsTexture: texture_2d<f32>;
20
+ attribute splatIndex0: vec4f;attribute splatIndex1: vec4f;attribute splatIndex2: vec4f;attribute splatIndex3: vec4f;attribute position: vec3f;uniform invViewport: vec2f;uniform dataTextureSize: vec2f;uniform focal: vec2f;uniform kernelSize: f32;uniform eyePosition: vec3f;uniform viewDirectionFactor: vec3f;uniform alpha: f32;var covariancesATexture: texture_2d<f32>;var covariancesBTexture: texture_2d<f32>;var centersTexture: texture_2d<f32>;var colorsTexture: texture_2d<f32>;
21
21
  #if SH_DEGREE>0
22
22
  var shTexture0: texture_2d<u32>;
23
23
  #endif
@@ -32,9 +32,9 @@ varying vColor: vec4f;varying vPosition: vec2f;
32
32
  @vertex
33
33
  fn main(input : VertexInputs)->FragmentInputs {let splatIndex: f32=getSplatIndex(i32(input.position.z+0.5),input.splatIndex0,input.splatIndex1,input.splatIndex2,input.splatIndex3);var splat: Splat=readSplat(splatIndex,uniforms.dataTextureSize);var covA: vec3f=splat.covA.xyz;var covB: vec3f=vec3f(splat.covA.w,splat.covB.xy);let worldPos: vec4f=mesh.world*vec4f(splat.center.xyz,1.0);vertexOutputs.vPosition=input.position.xy;
34
34
  #if SH_DEGREE>0
35
- let worldRot: mat3x3f= mat3x3f(mesh.world[0].xyz,mesh.world[1].xyz,mesh.world[2].xyz);let normWorldRot: mat3x3f=inverseMat3(worldRot);var dir: vec3f=normalize(normWorldRot*(worldPos.xyz-uniforms.eyePosition.xyz));dir*=uniforms.viewDirectionFactor;vertexOutputs.vColor=vec4f(splat.color.xyz+computeSH(splat,dir),splat.color.w);
35
+ let worldRot: mat3x3f= mat3x3f(mesh.world[0].xyz,mesh.world[1].xyz,mesh.world[2].xyz);let normWorldRot: mat3x3f=inverseMat3(worldRot);var dir: vec3f=normalize(normWorldRot*(worldPos.xyz-uniforms.eyePosition.xyz));dir*=uniforms.viewDirectionFactor;vertexOutputs.vColor=vec4f(splat.color.xyz+computeSH(splat,dir),splat.color.w*uniforms.alpha);
36
36
  #else
37
- vertexOutputs.vColor=splat.color;
37
+ vertexOutputs.vColor=vec4f(splat.color.xyz,splat.color.w*uniforms.alpha);
38
38
  #endif
39
39
  vertexOutputs.position=gaussianSplatting(input.position.xy,worldPos.xyz,vec2f(1.0,1.0),covA,covB,mesh.world,scene.view,scene.projection,uniforms.focal,uniforms.invViewport,uniforms.kernelSize);
40
40
  #include<clipPlaneVertex>
@@ -1 +1 @@
1
- {"version":3,"file":"gaussianSplatting.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/gaussianSplatting.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,qCAAqC,CAAC;AAC7C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,6CAA6C,CAAC;AACrD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,sCAAsC,CAAC;AAC9C,OAAO,oCAAoC,CAAC;AAC5C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,4BAA4B,CAAC;AACpC,OAAO,iCAAiC,CAAC;AAEzC,MAAM,IAAI,GAAG,+BAA+B,CAAC;AAC7C,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8Bd,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,iCAAiC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/sceneUboDeclaration\";\nimport \"./ShadersInclude/meshUboDeclaration\";\nimport \"./ShadersInclude/helperFunctions\";\nimport \"./ShadersInclude/clipPlaneVertexDeclaration\";\nimport \"./ShadersInclude/fogVertexDeclaration\";\nimport \"./ShadersInclude/logDepthDeclaration\";\nimport \"./ShadersInclude/gaussianSplatting\";\nimport \"./ShadersInclude/clipPlaneVertex\";\nimport \"./ShadersInclude/fogVertex\";\nimport \"./ShadersInclude/logDepthVertex\";\n\nconst name = \"gaussianSplattingVertexShader\";\nconst shader = `#include<sceneUboDeclaration>\n#include<meshUboDeclaration>\n#include<helperFunctions>\n#include<clipPlaneVertexDeclaration>\n#include<fogVertexDeclaration>\n#include<logDepthDeclaration>\nattribute splatIndex0: vec4f;attribute splatIndex1: vec4f;attribute splatIndex2: vec4f;attribute splatIndex3: vec4f;attribute position: vec3f;uniform invViewport: vec2f;uniform dataTextureSize: vec2f;uniform focal: vec2f;uniform kernelSize: f32;uniform eyePosition: vec3f;uniform viewDirectionFactor: vec3f;var covariancesATexture: texture_2d<f32>;var covariancesBTexture: texture_2d<f32>;var centersTexture: texture_2d<f32>;var colorsTexture: texture_2d<f32>;\n#if SH_DEGREE>0\nvar shTexture0: texture_2d<u32>;\n#endif\n#if SH_DEGREE>1\nvar shTexture1: texture_2d<u32>;\n#endif\n#if SH_DEGREE>2\nvar shTexture2: texture_2d<u32>;\n#endif\nvarying vColor: vec4f;varying vPosition: vec2f;\n#include<gaussianSplatting>\n@vertex\nfn main(input : VertexInputs)->FragmentInputs {let splatIndex: f32=getSplatIndex(i32(input.position.z+0.5),input.splatIndex0,input.splatIndex1,input.splatIndex2,input.splatIndex3);var splat: Splat=readSplat(splatIndex,uniforms.dataTextureSize);var covA: vec3f=splat.covA.xyz;var covB: vec3f=vec3f(splat.covA.w,splat.covB.xy);let worldPos: vec4f=mesh.world*vec4f(splat.center.xyz,1.0);vertexOutputs.vPosition=input.position.xy;\n#if SH_DEGREE>0\nlet worldRot: mat3x3f= mat3x3f(mesh.world[0].xyz,mesh.world[1].xyz,mesh.world[2].xyz);let normWorldRot: mat3x3f=inverseMat3(worldRot);var dir: vec3f=normalize(normWorldRot*(worldPos.xyz-uniforms.eyePosition.xyz));dir*=uniforms.viewDirectionFactor;vertexOutputs.vColor=vec4f(splat.color.xyz+computeSH(splat,dir),splat.color.w);\n#else\nvertexOutputs.vColor=splat.color;\n#endif\nvertexOutputs.position=gaussianSplatting(input.position.xy,worldPos.xyz,vec2f(1.0,1.0),covA,covB,mesh.world,scene.view,scene.projection,uniforms.focal,uniforms.invViewport,uniforms.kernelSize);\n#include<clipPlaneVertex>\n#include<fogVertex>\n#include<logDepthVertex>\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const gaussianSplattingVertexShaderWGSL = { name, shader };\n"]}
1
+ {"version":3,"file":"gaussianSplatting.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/gaussianSplatting.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,qCAAqC,CAAC;AAC7C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,6CAA6C,CAAC;AACrD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,sCAAsC,CAAC;AAC9C,OAAO,oCAAoC,CAAC;AAC5C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,4BAA4B,CAAC;AACpC,OAAO,iCAAiC,CAAC;AAEzC,MAAM,IAAI,GAAG,+BAA+B,CAAC;AAC7C,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8Bd,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,iCAAiC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/sceneUboDeclaration\";\nimport \"./ShadersInclude/meshUboDeclaration\";\nimport \"./ShadersInclude/helperFunctions\";\nimport \"./ShadersInclude/clipPlaneVertexDeclaration\";\nimport \"./ShadersInclude/fogVertexDeclaration\";\nimport \"./ShadersInclude/logDepthDeclaration\";\nimport \"./ShadersInclude/gaussianSplatting\";\nimport \"./ShadersInclude/clipPlaneVertex\";\nimport \"./ShadersInclude/fogVertex\";\nimport \"./ShadersInclude/logDepthVertex\";\n\nconst name = \"gaussianSplattingVertexShader\";\nconst shader = `#include<sceneUboDeclaration>\n#include<meshUboDeclaration>\n#include<helperFunctions>\n#include<clipPlaneVertexDeclaration>\n#include<fogVertexDeclaration>\n#include<logDepthDeclaration>\nattribute splatIndex0: vec4f;attribute splatIndex1: vec4f;attribute splatIndex2: vec4f;attribute splatIndex3: vec4f;attribute position: vec3f;uniform invViewport: vec2f;uniform dataTextureSize: vec2f;uniform focal: vec2f;uniform kernelSize: f32;uniform eyePosition: vec3f;uniform viewDirectionFactor: vec3f;uniform alpha: f32;var covariancesATexture: texture_2d<f32>;var covariancesBTexture: texture_2d<f32>;var centersTexture: texture_2d<f32>;var colorsTexture: texture_2d<f32>;\n#if SH_DEGREE>0\nvar shTexture0: texture_2d<u32>;\n#endif\n#if SH_DEGREE>1\nvar shTexture1: texture_2d<u32>;\n#endif\n#if SH_DEGREE>2\nvar shTexture2: texture_2d<u32>;\n#endif\nvarying vColor: vec4f;varying vPosition: vec2f;\n#include<gaussianSplatting>\n@vertex\nfn main(input : VertexInputs)->FragmentInputs {let splatIndex: f32=getSplatIndex(i32(input.position.z+0.5),input.splatIndex0,input.splatIndex1,input.splatIndex2,input.splatIndex3);var splat: Splat=readSplat(splatIndex,uniforms.dataTextureSize);var covA: vec3f=splat.covA.xyz;var covB: vec3f=vec3f(splat.covA.w,splat.covB.xy);let worldPos: vec4f=mesh.world*vec4f(splat.center.xyz,1.0);vertexOutputs.vPosition=input.position.xy;\n#if SH_DEGREE>0\nlet worldRot: mat3x3f= mat3x3f(mesh.world[0].xyz,mesh.world[1].xyz,mesh.world[2].xyz);let normWorldRot: mat3x3f=inverseMat3(worldRot);var dir: vec3f=normalize(normWorldRot*(worldPos.xyz-uniforms.eyePosition.xyz));dir*=uniforms.viewDirectionFactor;vertexOutputs.vColor=vec4f(splat.color.xyz+computeSH(splat,dir),splat.color.w*uniforms.alpha);\n#else\nvertexOutputs.vColor=vec4f(splat.color.xyz,splat.color.w*uniforms.alpha);\n#endif\nvertexOutputs.position=gaussianSplatting(input.position.xy,worldPos.xyz,vec2f(1.0,1.0),covA,covB,mesh.world,scene.view,scene.projection,uniforms.focal,uniforms.invViewport,uniforms.kernelSize);\n#include<clipPlaneVertex>\n#include<fogVertex>\n#include<logDepthVertex>\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const gaussianSplattingVertexShaderWGSL = { name, shader };\n"]}
@@ -1,15 +1,18 @@
1
1
  // Do not edit.
2
2
  import { ShaderStore } from "../Engines/shaderStore.js";
3
3
  const name = "lightingVolumeComputeShader";
4
- const shader = `struct Params {invViewProjMatrix : mat4x4f,
4
+ const shader = `struct Params {invViewProjMatrix: mat4x4f,
5
+ invViewMatrix: mat4x4f,
5
6
  startVertexIndex: u32,
6
7
  step: f32,
7
- tesselation: u32,};@group(0) @binding(0) var shadowMap : texture_2d<f32>;@group(0) @binding(1) var<uniform> params : Params;@group(0) @binding(2) var<storage,read_write> positions : array<f32>;@compute @workgroup_size(8,8,1)
8
- fn main(@builtin(global_invocation_id) global_id : vec3u) {let coord=global_id.xy;
8
+ tesselation: u32,
9
+ orthoMin: vec3f,
10
+ orthoMax: vec3f,};@group(0) @binding(0) var shadowMap : texture_2d<f32>;@group(0) @binding(1) var<uniform> params : Params;@group(0) @binding(2) var<storage,read_write> positions : array<f32>;@compute @workgroup_size(8,8,1)
11
+ fn updateFarPlaneVertices(@builtin(global_invocation_id) global_id : vec3u) {let coord=global_id.xy;
9
12
  #ifdef KEEP_EDGES
10
13
  if (any(coord>=vec2u(params.tesselation)) || any(coord<=vec2u(0))) {
11
14
  #else
12
- if (any(coord>=vec2u(params.tesselation+1))) {
15
+ if (any(coord>vec2u(params.tesselation))) {
13
16
  #endif
14
17
  return;}
15
18
  let stepY=floor(params.step*f32(coord.y));let depthCoord=vec2u(u32(floor(f32(coord.x)*params.step)),u32(stepY));var depth=textureLoad(shadowMap,depthCoord,0).r;
@@ -17,6 +20,9 @@ let stepY=floor(params.step*f32(coord.y));let depthCoord=vec2u(u32(floor(f32(coo
17
20
  if (depth==1.0) {depth=0.0;}
18
21
  #endif
19
22
  let halfTesselation=f32(params.tesselation>>1);let ndc=vec4f((f32(coord.x)-halfTesselation)/halfTesselation,(f32(coord.y)-halfTesselation)/halfTesselation,depth,1.0);var worldCoords=params.invViewProjMatrix*ndc;let idx=params.startVertexIndex+(coord.y*(params.tesselation+1)+coord.x)*3;positions[idx]=worldCoords.x/worldCoords.w;positions[idx+1]=worldCoords.y/worldCoords.w;positions[idx+2]=worldCoords.z/worldCoords.w;}
23
+ @compute @workgroup_size(32,1,1)
24
+ fn updatePlaneVertices(@builtin(global_invocation_id) global_id : vec3u) {_=shadowMap;let uindex=global_id.x;let index=f32(uindex);if (uindex>params.tesselation) {return;}
25
+ let step=(params.orthoMax.xy-params.orthoMin.xy)/vec2f(f32(params.tesselation));var vr=params.invViewMatrix*vec4f(params.orthoMax.x,params.orthoMin.y+step.y*index,params.orthoMin.z,1.0);vr=vr/vr.w;positions[uindex*3+0]=vr.x;positions[uindex*3+1]=vr.y;positions[uindex*3+2]=vr.z;var vl=params.invViewMatrix*vec4f(params.orthoMin.x,params.orthoMin.y+step.y*index,params.orthoMin.z,1.0);vl=vl/vl.w;positions[uindex*3+0+(params.tesselation+1)*3]=vl.x;positions[uindex*3+1+(params.tesselation+1)*3]=vl.y;positions[uindex*3+2+(params.tesselation+1)*3]=vl.z;var vb=params.invViewMatrix*vec4f(params.orthoMin.x+step.x*index,params.orthoMin.y,params.orthoMin.z,1.0);vb=vb/vb.w;positions[uindex*3+0+(params.tesselation+1)*6]=vb.x;positions[uindex*3+1+(params.tesselation+1)*6]=vb.y;positions[uindex*3+2+(params.tesselation+1)*6]=vb.z;var vt=params.invViewMatrix*vec4f(params.orthoMin.x+step.x*index,params.orthoMax.y,params.orthoMin.z,1.0);vt=vt/vt.w;positions[uindex*3+0+(params.tesselation+1)*9]=vt.x;positions[uindex*3+1+(params.tesselation+1)*9]=vt.y;positions[uindex*3+2+(params.tesselation+1)*9]=vt.z;}
20
26
  `;
21
27
  // Sideeffect
22
28
  if (!ShaderStore.ShadersStoreWGSL[name]) {
@@ -1 +1 @@
1
- {"version":3,"file":"lightingVolume.compute.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/lightingVolume.compute.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,6BAA6B,CAAC;AAC3C,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;CAgBd,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,+BAA+B,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"lightingVolumeComputeShader\";\nconst shader = `struct Params {invViewProjMatrix : mat4x4f,\nstartVertexIndex: u32,\nstep: f32,\ntesselation: u32,};@group(0) @binding(0) var shadowMap : texture_2d<f32>;@group(0) @binding(1) var<uniform> params : Params;@group(0) @binding(2) var<storage,read_write> positions : array<f32>;@compute @workgroup_size(8,8,1)\nfn main(@builtin(global_invocation_id) global_id : vec3u) {let coord=global_id.xy;\n#ifdef KEEP_EDGES\nif (any(coord>=vec2u(params.tesselation)) || any(coord<=vec2u(0))) {\n#else\nif (any(coord>=vec2u(params.tesselation+1))) {\n#endif\nreturn;}\nlet stepY=floor(params.step*f32(coord.y));let depthCoord=vec2u(u32(floor(f32(coord.x)*params.step)),u32(stepY));var depth=textureLoad(shadowMap,depthCoord,0).r;\n#ifdef MOVE_FAR_DEPTH_TO_NEAR\nif (depth==1.0) {depth=0.0;}\n#endif\nlet halfTesselation=f32(params.tesselation>>1);let ndc=vec4f((f32(coord.x)-halfTesselation)/halfTesselation,(f32(coord.y)-halfTesselation)/halfTesselation,depth,1.0);var worldCoords=params.invViewProjMatrix*ndc;let idx=params.startVertexIndex+(coord.y*(params.tesselation+1)+coord.x)*3;positions[idx]=worldCoords.x/worldCoords.w;positions[idx+1]=worldCoords.y/worldCoords.w;positions[idx+2]=worldCoords.z/worldCoords.w;}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const lightingVolumeComputeShaderWGSL = { name, shader };\n"]}
1
+ {"version":3,"file":"lightingVolume.compute.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/lightingVolume.compute.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,6BAA6B,CAAC;AAC3C,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsBd,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,+BAA+B,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"lightingVolumeComputeShader\";\nconst shader = `struct Params {invViewProjMatrix: mat4x4f,\ninvViewMatrix: mat4x4f,\nstartVertexIndex: u32,\nstep: f32,\ntesselation: u32,\northoMin: vec3f,\northoMax: vec3f,};@group(0) @binding(0) var shadowMap : texture_2d<f32>;@group(0) @binding(1) var<uniform> params : Params;@group(0) @binding(2) var<storage,read_write> positions : array<f32>;@compute @workgroup_size(8,8,1)\nfn updateFarPlaneVertices(@builtin(global_invocation_id) global_id : vec3u) {let coord=global_id.xy;\n#ifdef KEEP_EDGES\nif (any(coord>=vec2u(params.tesselation)) || any(coord<=vec2u(0))) {\n#else\nif (any(coord>vec2u(params.tesselation))) {\n#endif\nreturn;}\nlet stepY=floor(params.step*f32(coord.y));let depthCoord=vec2u(u32(floor(f32(coord.x)*params.step)),u32(stepY));var depth=textureLoad(shadowMap,depthCoord,0).r;\n#ifdef MOVE_FAR_DEPTH_TO_NEAR\nif (depth==1.0) {depth=0.0;}\n#endif\nlet halfTesselation=f32(params.tesselation>>1);let ndc=vec4f((f32(coord.x)-halfTesselation)/halfTesselation,(f32(coord.y)-halfTesselation)/halfTesselation,depth,1.0);var worldCoords=params.invViewProjMatrix*ndc;let idx=params.startVertexIndex+(coord.y*(params.tesselation+1)+coord.x)*3;positions[idx]=worldCoords.x/worldCoords.w;positions[idx+1]=worldCoords.y/worldCoords.w;positions[idx+2]=worldCoords.z/worldCoords.w;}\n@compute @workgroup_size(32,1,1)\nfn updatePlaneVertices(@builtin(global_invocation_id) global_id : vec3u) {_=shadowMap;let uindex=global_id.x;let index=f32(uindex);if (uindex>params.tesselation) {return;}\nlet step=(params.orthoMax.xy-params.orthoMin.xy)/vec2f(f32(params.tesselation));var vr=params.invViewMatrix*vec4f(params.orthoMax.x,params.orthoMin.y+step.y*index,params.orthoMin.z,1.0);vr=vr/vr.w;positions[uindex*3+0]=vr.x;positions[uindex*3+1]=vr.y;positions[uindex*3+2]=vr.z;var vl=params.invViewMatrix*vec4f(params.orthoMin.x,params.orthoMin.y+step.y*index,params.orthoMin.z,1.0);vl=vl/vl.w;positions[uindex*3+0+(params.tesselation+1)*3]=vl.x;positions[uindex*3+1+(params.tesselation+1)*3]=vl.y;positions[uindex*3+2+(params.tesselation+1)*3]=vl.z;var vb=params.invViewMatrix*vec4f(params.orthoMin.x+step.x*index,params.orthoMin.y,params.orthoMin.z,1.0);vb=vb/vb.w;positions[uindex*3+0+(params.tesselation+1)*6]=vb.x;positions[uindex*3+1+(params.tesselation+1)*6]=vb.y;positions[uindex*3+2+(params.tesselation+1)*6]=vb.z;var vt=params.invViewMatrix*vec4f(params.orthoMin.x+step.x*index,params.orthoMax.y,params.orthoMin.z,1.0);vt=vt/vt.w;positions[uindex*3+0+(params.tesselation+1)*9]=vt.x;positions[uindex*3+1+(params.tesselation+1)*9]=vt.y;positions[uindex*3+2+(params.tesselation+1)*9]=vt.z;}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const lightingVolumeComputeShaderWGSL = { name, shader };\n"]}
@@ -6,7 +6,7 @@ const name = "volumetricLightingRenderVolumePixelShader";
6
6
  const shader = `#include<sceneUboDeclaration>
7
7
  #include<meshUboDeclaration>
8
8
  uniform invViewProjection: mat4x4<f32>;uniform lightDir: vec3f;
9
- uniform outputTextureSize: vec2f;uniform extinctionPhaseG: vec4f;uniform lightPower: vec3f;var depthTexture: texture_2d<f32>;varying vWorldPos: vec4f;fn henyeyGreenstein(g: f32,cosTheta: f32)->f32 {let denom=1+g*g-2*g*cosTheta;return 1.0/(4.0*3.14159265)*(1.0-g*g)/(denom*sqrt(max(denom,0.0)));}
9
+ uniform outputTextureSize: vec2f;uniform extinctionPhaseG: vec4f;uniform lightPower: vec3f;uniform textureRatio: vec2f;var depthTexture: texture_2d<f32>;varying vWorldPos: vec4f;fn henyeyGreenstein(g: f32,cosTheta: f32)->f32 {let denom=1+g*g-2*g*cosTheta;return 1.0/(4.0*3.14159265)*(1.0-g*g)/(denom*sqrt(max(denom,0.0)));}
10
10
  fn integrateDirectional(eyeDist: f32,viewDir: vec3f,lightDir: vec3f)->vec3f {let phaseG=uniforms.extinctionPhaseG.w;
11
11
  #ifdef USE_EXTINCTION
12
12
  let extinction=uniforms.extinctionPhaseG.xyz;return henyeyGreenstein(phaseG,dot(viewDir,lightDir))*(vec3f(1.0)-exp(-extinction*eyeDist))/extinction;
@@ -15,7 +15,7 @@ return vec3f(henyeyGreenstein(phaseG,dot(viewDir,lightDir)))*vec3f(eyeDist);
15
15
  #endif
16
16
  }
17
17
  @fragment
18
- fn main(input: FragmentInputs)->FragmentOutputs {var depth=textureLoad(depthTexture,vec2u(fragmentInputs.position.xy),0).r;var worldPos=fragmentInputs.vWorldPos;if (fragmentInputs.position.z>depth) {let ndc=vec4f((fragmentInputs.position.xy/uniforms.outputTextureSize)*2.-1.,depth,1.0);worldPos=uniforms.invViewProjection*ndc;worldPos=worldPos/worldPos.w;}
18
+ fn main(input: FragmentInputs)->FragmentOutputs {let depth=textureLoad(depthTexture,vec2u(fragmentInputs.position.xy*uniforms.textureRatio),0).r;var worldPos=fragmentInputs.vWorldPos;if (fragmentInputs.position.z>depth) {let ndc=vec4f((fragmentInputs.position.xy/uniforms.outputTextureSize)*2.-1.,depth,1.0);worldPos=uniforms.invViewProjection*ndc;worldPos=worldPos/worldPos.w;}
19
19
  var viewDir=worldPos.xyz-scene.vEyePosition.xyz;let eyeDist=length(viewDir);viewDir=viewDir/eyeDist;let fSign=select(-1.0,1.0,fragmentInputs.frontFacing);let integral=integrateDirectional(eyeDist,-viewDir,uniforms.lightDir);fragmentOutputs.color=vec4f(uniforms.lightPower*integral*fSign,1.0);}
20
20
  `;
21
21
  // Sideeffect
@@ -1 +1 @@
1
- {"version":3,"file":"volumetricLightingRenderVolume.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/volumetricLightingRenderVolume.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,qCAAqC,CAAC;AAE7C,MAAM,IAAI,GAAG,2CAA2C,CAAC;AACzD,MAAM,MAAM,GAAG;;;;;;;;;;;;;;CAcd,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,6CAA6C,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/sceneUboDeclaration\";\nimport \"./ShadersInclude/meshUboDeclaration\";\n\nconst name = \"volumetricLightingRenderVolumePixelShader\";\nconst shader = `#include<sceneUboDeclaration>\n#include<meshUboDeclaration>\nuniform invViewProjection: mat4x4<f32>;uniform lightDir: vec3f; \nuniform outputTextureSize: vec2f;uniform extinctionPhaseG: vec4f;uniform lightPower: vec3f;var depthTexture: texture_2d<f32>;varying vWorldPos: vec4f;fn henyeyGreenstein(g: f32,cosTheta: f32)->f32 {let denom=1+g*g-2*g*cosTheta;return 1.0/(4.0*3.14159265)*(1.0-g*g)/(denom*sqrt(max(denom,0.0)));}\nfn integrateDirectional(eyeDist: f32,viewDir: vec3f,lightDir: vec3f)->vec3f {let phaseG=uniforms.extinctionPhaseG.w;\n#ifdef USE_EXTINCTION\nlet extinction=uniforms.extinctionPhaseG.xyz;return henyeyGreenstein(phaseG,dot(viewDir,lightDir))*(vec3f(1.0)-exp(-extinction*eyeDist))/extinction;\n#else\nreturn vec3f(henyeyGreenstein(phaseG,dot(viewDir,lightDir)))*vec3f(eyeDist);\n#endif\n}\n@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {var depth=textureLoad(depthTexture,vec2u(fragmentInputs.position.xy),0).r;var worldPos=fragmentInputs.vWorldPos;if (fragmentInputs.position.z>depth) {let ndc=vec4f((fragmentInputs.position.xy/uniforms.outputTextureSize)*2.-1.,depth,1.0);worldPos=uniforms.invViewProjection*ndc;worldPos=worldPos/worldPos.w;}\nvar viewDir=worldPos.xyz-scene.vEyePosition.xyz;let eyeDist=length(viewDir);viewDir=viewDir/eyeDist;let fSign=select(-1.0,1.0,fragmentInputs.frontFacing);let integral=integrateDirectional(eyeDist,-viewDir,uniforms.lightDir);fragmentOutputs.color=vec4f(uniforms.lightPower*integral*fSign,1.0);}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const volumetricLightingRenderVolumePixelShaderWGSL = { name, shader };\n"]}
1
+ {"version":3,"file":"volumetricLightingRenderVolume.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/volumetricLightingRenderVolume.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,qCAAqC,CAAC;AAE7C,MAAM,IAAI,GAAG,2CAA2C,CAAC;AACzD,MAAM,MAAM,GAAG;;;;;;;;;;;;;;CAcd,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,6CAA6C,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/sceneUboDeclaration\";\nimport \"./ShadersInclude/meshUboDeclaration\";\n\nconst name = \"volumetricLightingRenderVolumePixelShader\";\nconst shader = `#include<sceneUboDeclaration>\n#include<meshUboDeclaration>\nuniform invViewProjection: mat4x4<f32>;uniform lightDir: vec3f; \nuniform outputTextureSize: vec2f;uniform extinctionPhaseG: vec4f;uniform lightPower: vec3f;uniform textureRatio: vec2f;var depthTexture: texture_2d<f32>;varying vWorldPos: vec4f;fn henyeyGreenstein(g: f32,cosTheta: f32)->f32 {let denom=1+g*g-2*g*cosTheta;return 1.0/(4.0*3.14159265)*(1.0-g*g)/(denom*sqrt(max(denom,0.0)));}\nfn integrateDirectional(eyeDist: f32,viewDir: vec3f,lightDir: vec3f)->vec3f {let phaseG=uniforms.extinctionPhaseG.w;\n#ifdef USE_EXTINCTION\nlet extinction=uniforms.extinctionPhaseG.xyz;return henyeyGreenstein(phaseG,dot(viewDir,lightDir))*(vec3f(1.0)-exp(-extinction*eyeDist))/extinction;\n#else\nreturn vec3f(henyeyGreenstein(phaseG,dot(viewDir,lightDir)))*vec3f(eyeDist);\n#endif\n}\n@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {let depth=textureLoad(depthTexture,vec2u(fragmentInputs.position.xy*uniforms.textureRatio),0).r;var worldPos=fragmentInputs.vWorldPos;if (fragmentInputs.position.z>depth) {let ndc=vec4f((fragmentInputs.position.xy/uniforms.outputTextureSize)*2.-1.,depth,1.0);worldPos=uniforms.invViewProjection*ndc;worldPos=worldPos/worldPos.w;}\nvar viewDir=worldPos.xyz-scene.vEyePosition.xyz;let eyeDist=length(viewDir);viewDir=viewDir/eyeDist;let fSign=select(-1.0,1.0,fragmentInputs.frontFacing);let integral=integrateDirectional(eyeDist,-viewDir,uniforms.lightDir);fragmentOutputs.color=vec4f(uniforms.lightPower*integral*fSign,1.0);}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const volumetricLightingRenderVolumePixelShaderWGSL = { name, shader };\n"]}
@@ -20,6 +20,7 @@ export declare class AlphaState {
20
20
  constructor(_supportBlendParametersPerTarget: boolean);
21
21
  get isDirty(): boolean;
22
22
  get alphaBlend(): boolean;
23
+ set alphaBlend(value: boolean);
23
24
  setAlphaBlend(value: boolean, targetIndex?: number): void;
24
25
  setAlphaBlendConstants(r: number, g: number, b: number, a: number): void;
25
26
  setAlphaBlendFunctionParameters(srcRGBFactor: number, dstRGBFactor: number, srcAlphaFactor: number, dstAlphaFactor: number, targetIndex?: number): void;
@@ -26,6 +26,9 @@ export class AlphaState {
26
26
  get alphaBlend() {
27
27
  return this._numTargetEnabled > 0;
28
28
  }
29
+ set alphaBlend(value) {
30
+ this.setAlphaBlend(value);
31
+ }
29
32
  setAlphaBlend(value, targetIndex = 0) {
30
33
  if (this._alphaBlend[targetIndex] === value) {
31
34
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"alphaCullingState.js","sourceRoot":"","sources":["../../../../dev/core/src/States/alphaCullingState.ts"],"names":[],"mappings":"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","sourcesContent":["import { Constants } from \"core/Engines/constants\";\r\nimport type { Nullable } from \"../types\";\r\n\r\n/**\r\n * @internal\r\n **/\r\nexport class AlphaState {\r\n public _blendFunctionParameters = new Array<Nullable<number>>(4 * 8);\r\n public _blendEquationParameters = new Array<Nullable<number>>(2 * 8);\r\n public _blendConstants = new Array<Nullable<number>>(4);\r\n public _isBlendConstantsDirty = false;\r\n\r\n public _alphaBlend = Array(8).fill(false);\r\n public _numTargetEnabled = 0;\r\n\r\n private _isAlphaBlendDirty = false;\r\n private _isBlendFunctionParametersDirty = false;\r\n private _isBlendEquationParametersDirty = false;\r\n\r\n /**\r\n * Initializes the state.\r\n * @param _supportBlendParametersPerTarget - Whether blend parameters per target is supported\r\n */\r\n public constructor(private _supportBlendParametersPerTarget: boolean) {\r\n this.reset();\r\n }\r\n\r\n public get isDirty(): boolean {\r\n return this._isAlphaBlendDirty || this._isBlendFunctionParametersDirty || this._isBlendEquationParametersDirty;\r\n }\r\n\r\n public get alphaBlend(): boolean {\r\n return this._numTargetEnabled > 0;\r\n }\r\n\r\n public setAlphaBlend(value: boolean, targetIndex: number = 0): void {\r\n if (this._alphaBlend[targetIndex] === value) {\r\n return;\r\n }\r\n\r\n if (value) {\r\n this._numTargetEnabled++;\r\n } else {\r\n this._numTargetEnabled--;\r\n }\r\n\r\n this._alphaBlend[targetIndex] = value;\r\n this._isAlphaBlendDirty = true;\r\n }\r\n\r\n public setAlphaBlendConstants(r: number, g: number, b: number, a: number): void {\r\n if (this._blendConstants[0] === r && this._blendConstants[1] === g && this._blendConstants[2] === b && this._blendConstants[3] === a) {\r\n return;\r\n }\r\n\r\n this._blendConstants[0] = r;\r\n this._blendConstants[1] = g;\r\n this._blendConstants[2] = b;\r\n this._blendConstants[3] = a;\r\n\r\n this._isBlendConstantsDirty = true;\r\n }\r\n\r\n public setAlphaBlendFunctionParameters(srcRGBFactor: number, dstRGBFactor: number, srcAlphaFactor: number, dstAlphaFactor: number, targetIndex: number = 0): void {\r\n const offset = targetIndex * 4;\r\n\r\n if (\r\n this._blendFunctionParameters[offset + 0] === srcRGBFactor &&\r\n this._blendFunctionParameters[offset + 1] === dstRGBFactor &&\r\n this._blendFunctionParameters[offset + 2] === srcAlphaFactor &&\r\n this._blendFunctionParameters[offset + 3] === dstAlphaFactor\r\n ) {\r\n return;\r\n }\r\n\r\n this._blendFunctionParameters[offset + 0] = srcRGBFactor;\r\n this._blendFunctionParameters[offset + 1] = dstRGBFactor;\r\n this._blendFunctionParameters[offset + 2] = srcAlphaFactor;\r\n this._blendFunctionParameters[offset + 3] = dstAlphaFactor;\r\n\r\n this._isBlendFunctionParametersDirty = true;\r\n }\r\n\r\n public setAlphaEquationParameters(rgbEquation: number, alphaEquation: number, targetIndex: number = 0): void {\r\n const offset = targetIndex * 2;\r\n\r\n if (this._blendEquationParameters[offset + 0] === rgbEquation && this._blendEquationParameters[offset + 1] === alphaEquation) {\r\n return;\r\n }\r\n\r\n this._blendEquationParameters[offset + 0] = rgbEquation;\r\n this._blendEquationParameters[offset + 1] = alphaEquation;\r\n\r\n this._isBlendEquationParametersDirty = true;\r\n }\r\n\r\n public reset() {\r\n this._alphaBlend.fill(false);\r\n this._numTargetEnabled = 0;\r\n this._blendFunctionParameters.fill(null);\r\n this._blendEquationParameters.fill(null);\r\n\r\n this._blendConstants[0] = null;\r\n this._blendConstants[1] = null;\r\n this._blendConstants[2] = null;\r\n this._blendConstants[3] = null;\r\n\r\n this._isAlphaBlendDirty = true;\r\n this._isBlendFunctionParametersDirty = false;\r\n this._isBlendEquationParametersDirty = false;\r\n this._isBlendConstantsDirty = false;\r\n }\r\n\r\n public apply(gl: WebGLRenderingContext, numTargets: number = 1): void {\r\n if (!this.isDirty) {\r\n return;\r\n }\r\n\r\n // Constants\r\n if (this._isBlendConstantsDirty) {\r\n gl.blendColor(<number>this._blendConstants[0], <number>this._blendConstants[1], <number>this._blendConstants[2], <number>this._blendConstants[3]);\r\n this._isBlendConstantsDirty = false;\r\n }\r\n\r\n if (numTargets === 1 || !this._supportBlendParametersPerTarget) {\r\n // Single target or no support for per-target parameters\r\n if (this._isAlphaBlendDirty) {\r\n if (this._alphaBlend[0]) {\r\n gl.enable(gl.BLEND);\r\n } else {\r\n gl.disable(gl.BLEND);\r\n }\r\n this._isAlphaBlendDirty = false;\r\n }\r\n\r\n if (this._isBlendFunctionParametersDirty) {\r\n gl.blendFuncSeparate(\r\n <number>this._blendFunctionParameters[0],\r\n <number>this._blendFunctionParameters[1],\r\n <number>this._blendFunctionParameters[2],\r\n <number>this._blendFunctionParameters[3]\r\n );\r\n this._isBlendFunctionParametersDirty = false;\r\n }\r\n\r\n if (this._isBlendEquationParametersDirty) {\r\n gl.blendEquationSeparate(<number>this._blendEquationParameters[0], <number>this._blendEquationParameters[1]);\r\n this._isBlendEquationParametersDirty = false;\r\n }\r\n return;\r\n }\r\n\r\n // Multi-target\r\n const gl2 = gl as WebGL2RenderingContext;\r\n\r\n // Alpha blend\r\n if (this._isAlphaBlendDirty) {\r\n for (let i = 0; i < numTargets; i++) {\r\n const index = i < this._numTargetEnabled ? i : 0;\r\n if (this._alphaBlend[index]) {\r\n gl2.enableIndexed(gl.BLEND, i);\r\n } else {\r\n gl2.disableIndexed(gl.BLEND, i);\r\n }\r\n }\r\n\r\n this._isAlphaBlendDirty = false;\r\n }\r\n\r\n // Alpha function\r\n if (this._isBlendFunctionParametersDirty) {\r\n for (let i = 0; i < numTargets; i++) {\r\n const offset = i < this._numTargetEnabled ? i * 4 : 0;\r\n gl2.blendFuncSeparateIndexed(\r\n i,\r\n <number>this._blendFunctionParameters[offset + 0],\r\n <number>this._blendFunctionParameters[offset + 1],\r\n <number>this._blendFunctionParameters[offset + 2],\r\n <number>this._blendFunctionParameters[offset + 3]\r\n );\r\n }\r\n this._isBlendFunctionParametersDirty = false;\r\n }\r\n\r\n // Alpha equation\r\n if (this._isBlendEquationParametersDirty) {\r\n for (let i = 0; i < numTargets; i++) {\r\n const offset = i < this._numTargetEnabled ? i * 2 : 0;\r\n gl2.blendEquationSeparateIndexed(i, <number>this._blendEquationParameters[offset + 0], <number>this._blendEquationParameters[offset + 1]);\r\n }\r\n this._isBlendEquationParametersDirty = false;\r\n }\r\n }\r\n\r\n public setAlphaMode(mode: number, targetIndex: number) {\r\n let equation = Constants.GL_ALPHA_EQUATION_ADD;\r\n\r\n switch (mode) {\r\n case Constants.ALPHA_DISABLE:\r\n break;\r\n case Constants.ALPHA_PREMULTIPLIED:\r\n this.setAlphaBlendFunctionParameters(1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, 1, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_PREMULTIPLIED_PORTERDUFF:\r\n this.setAlphaBlendFunctionParameters(1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, 1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, targetIndex);\r\n break;\r\n case Constants.ALPHA_COMBINE:\r\n this.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_SRC_ALPHA, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, 1, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_ONEONE:\r\n this.setAlphaBlendFunctionParameters(1, 1, 0, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_ADD:\r\n this.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_SRC_ALPHA, 1, 0, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_SUBTRACT:\r\n this.setAlphaBlendFunctionParameters(0, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_COLOR, 1, 1, targetIndex);\r\n equation = Constants.GL_ALPHA_EQUATION_SUBTRACT;\r\n break;\r\n case Constants.ALPHA_MULTIPLY:\r\n this.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_DST_COLOR, 0, 1, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_MAXIMIZED:\r\n this.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_SRC_ALPHA, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_COLOR, 1, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_INTERPOLATE:\r\n this.setAlphaBlendFunctionParameters(\r\n Constants.GL_ALPHA_FUNCTION_CONSTANT_COLOR,\r\n Constants.GL_ALPHA_FUNCTION_ONE_MINUS_CONSTANT_COLOR,\r\n Constants.GL_ALPHA_FUNCTION_CONSTANT_ALPHA,\r\n Constants.GL_ALPHA_FUNCTION_ONE_MINUS_CONSTANT_ALPHA,\r\n targetIndex\r\n );\r\n break;\r\n case Constants.ALPHA_SCREENMODE:\r\n this.setAlphaBlendFunctionParameters(1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_COLOR, 1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, targetIndex);\r\n break;\r\n case Constants.ALPHA_ONEONE_ONEONE:\r\n this.setAlphaBlendFunctionParameters(1, 1, 1, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_ALPHATOCOLOR:\r\n this.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_DST_ALPHA, 1, 0, 0, targetIndex);\r\n break;\r\n case Constants.ALPHA_REVERSEONEMINUS:\r\n this.setAlphaBlendFunctionParameters(\r\n Constants.GL_ALPHA_FUNCTION_ONE_MINUS_DST_COLOR,\r\n Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_COLOR,\r\n Constants.GL_ALPHA_FUNCTION_ONE_MINUS_DST_ALPHA,\r\n Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA,\r\n targetIndex\r\n );\r\n break;\r\n case Constants.ALPHA_SRC_DSTONEMINUSSRCALPHA:\r\n this.setAlphaBlendFunctionParameters(1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, 1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, targetIndex);\r\n break;\r\n case Constants.ALPHA_ONEONE_ONEZERO:\r\n this.setAlphaBlendFunctionParameters(1, 1, 1, 0, targetIndex);\r\n break;\r\n case Constants.ALPHA_EXCLUSION:\r\n this.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_ONE_MINUS_DST_COLOR, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_COLOR, 0, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_LAYER_ACCUMULATE:\r\n // Same as ALPHA_COMBINE but accumulates (1 - alpha) values in the alpha channel for a later readout in order independant transparency\r\n this.setAlphaBlendFunctionParameters(\r\n Constants.GL_ALPHA_FUNCTION_SRC_ALPHA,\r\n Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA,\r\n 1,\r\n Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA,\r\n targetIndex\r\n );\r\n break;\r\n case Constants.ALPHA_MIN:\r\n this.setAlphaBlendFunctionParameters(1, 1, 1, 1, targetIndex);\r\n equation = Constants.GL_ALPHA_EQUATION_MIN;\r\n break;\r\n case Constants.ALPHA_MAX:\r\n this.setAlphaBlendFunctionParameters(1, 1, 1, 1, targetIndex);\r\n equation = Constants.GL_ALPHA_EQUATION_MAX;\r\n break;\r\n case Constants.ALPHA_DUAL_SRC0_ADD_SRC1xDST:\r\n this.setAlphaBlendFunctionParameters(1, Constants.GL_ALPHA_FUNCTION_SRC1_COLOR, 0, 1, targetIndex);\r\n break;\r\n }\r\n\r\n this.setAlphaEquationParameters(equation, equation, targetIndex);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"alphaCullingState.js","sourceRoot":"","sources":["../../../../dev/core/src/States/alphaCullingState.ts"],"names":[],"mappings":"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","sourcesContent":["import { Constants } from \"core/Engines/constants\";\r\nimport type { Nullable } from \"../types\";\r\n\r\n/**\r\n * @internal\r\n **/\r\nexport class AlphaState {\r\n public _blendFunctionParameters = new Array<Nullable<number>>(4 * 8);\r\n public _blendEquationParameters = new Array<Nullable<number>>(2 * 8);\r\n public _blendConstants = new Array<Nullable<number>>(4);\r\n public _isBlendConstantsDirty = false;\r\n\r\n public _alphaBlend = Array(8).fill(false);\r\n public _numTargetEnabled = 0;\r\n\r\n private _isAlphaBlendDirty = false;\r\n private _isBlendFunctionParametersDirty = false;\r\n private _isBlendEquationParametersDirty = false;\r\n\r\n /**\r\n * Initializes the state.\r\n * @param _supportBlendParametersPerTarget - Whether blend parameters per target is supported\r\n */\r\n public constructor(private _supportBlendParametersPerTarget: boolean) {\r\n this.reset();\r\n }\r\n\r\n public get isDirty(): boolean {\r\n return this._isAlphaBlendDirty || this._isBlendFunctionParametersDirty || this._isBlendEquationParametersDirty;\r\n }\r\n\r\n public get alphaBlend(): boolean {\r\n return this._numTargetEnabled > 0;\r\n }\r\n\r\n public set alphaBlend(value: boolean) {\r\n this.setAlphaBlend(value);\r\n }\r\n\r\n public setAlphaBlend(value: boolean, targetIndex: number = 0): void {\r\n if (this._alphaBlend[targetIndex] === value) {\r\n return;\r\n }\r\n\r\n if (value) {\r\n this._numTargetEnabled++;\r\n } else {\r\n this._numTargetEnabled--;\r\n }\r\n\r\n this._alphaBlend[targetIndex] = value;\r\n this._isAlphaBlendDirty = true;\r\n }\r\n\r\n public setAlphaBlendConstants(r: number, g: number, b: number, a: number): void {\r\n if (this._blendConstants[0] === r && this._blendConstants[1] === g && this._blendConstants[2] === b && this._blendConstants[3] === a) {\r\n return;\r\n }\r\n\r\n this._blendConstants[0] = r;\r\n this._blendConstants[1] = g;\r\n this._blendConstants[2] = b;\r\n this._blendConstants[3] = a;\r\n\r\n this._isBlendConstantsDirty = true;\r\n }\r\n\r\n public setAlphaBlendFunctionParameters(srcRGBFactor: number, dstRGBFactor: number, srcAlphaFactor: number, dstAlphaFactor: number, targetIndex: number = 0): void {\r\n const offset = targetIndex * 4;\r\n\r\n if (\r\n this._blendFunctionParameters[offset + 0] === srcRGBFactor &&\r\n this._blendFunctionParameters[offset + 1] === dstRGBFactor &&\r\n this._blendFunctionParameters[offset + 2] === srcAlphaFactor &&\r\n this._blendFunctionParameters[offset + 3] === dstAlphaFactor\r\n ) {\r\n return;\r\n }\r\n\r\n this._blendFunctionParameters[offset + 0] = srcRGBFactor;\r\n this._blendFunctionParameters[offset + 1] = dstRGBFactor;\r\n this._blendFunctionParameters[offset + 2] = srcAlphaFactor;\r\n this._blendFunctionParameters[offset + 3] = dstAlphaFactor;\r\n\r\n this._isBlendFunctionParametersDirty = true;\r\n }\r\n\r\n public setAlphaEquationParameters(rgbEquation: number, alphaEquation: number, targetIndex: number = 0): void {\r\n const offset = targetIndex * 2;\r\n\r\n if (this._blendEquationParameters[offset + 0] === rgbEquation && this._blendEquationParameters[offset + 1] === alphaEquation) {\r\n return;\r\n }\r\n\r\n this._blendEquationParameters[offset + 0] = rgbEquation;\r\n this._blendEquationParameters[offset + 1] = alphaEquation;\r\n\r\n this._isBlendEquationParametersDirty = true;\r\n }\r\n\r\n public reset() {\r\n this._alphaBlend.fill(false);\r\n this._numTargetEnabled = 0;\r\n this._blendFunctionParameters.fill(null);\r\n this._blendEquationParameters.fill(null);\r\n\r\n this._blendConstants[0] = null;\r\n this._blendConstants[1] = null;\r\n this._blendConstants[2] = null;\r\n this._blendConstants[3] = null;\r\n\r\n this._isAlphaBlendDirty = true;\r\n this._isBlendFunctionParametersDirty = false;\r\n this._isBlendEquationParametersDirty = false;\r\n this._isBlendConstantsDirty = false;\r\n }\r\n\r\n public apply(gl: WebGLRenderingContext, numTargets: number = 1): void {\r\n if (!this.isDirty) {\r\n return;\r\n }\r\n\r\n // Constants\r\n if (this._isBlendConstantsDirty) {\r\n gl.blendColor(<number>this._blendConstants[0], <number>this._blendConstants[1], <number>this._blendConstants[2], <number>this._blendConstants[3]);\r\n this._isBlendConstantsDirty = false;\r\n }\r\n\r\n if (numTargets === 1 || !this._supportBlendParametersPerTarget) {\r\n // Single target or no support for per-target parameters\r\n if (this._isAlphaBlendDirty) {\r\n if (this._alphaBlend[0]) {\r\n gl.enable(gl.BLEND);\r\n } else {\r\n gl.disable(gl.BLEND);\r\n }\r\n this._isAlphaBlendDirty = false;\r\n }\r\n\r\n if (this._isBlendFunctionParametersDirty) {\r\n gl.blendFuncSeparate(\r\n <number>this._blendFunctionParameters[0],\r\n <number>this._blendFunctionParameters[1],\r\n <number>this._blendFunctionParameters[2],\r\n <number>this._blendFunctionParameters[3]\r\n );\r\n this._isBlendFunctionParametersDirty = false;\r\n }\r\n\r\n if (this._isBlendEquationParametersDirty) {\r\n gl.blendEquationSeparate(<number>this._blendEquationParameters[0], <number>this._blendEquationParameters[1]);\r\n this._isBlendEquationParametersDirty = false;\r\n }\r\n return;\r\n }\r\n\r\n // Multi-target\r\n const gl2 = gl as WebGL2RenderingContext;\r\n\r\n // Alpha blend\r\n if (this._isAlphaBlendDirty) {\r\n for (let i = 0; i < numTargets; i++) {\r\n const index = i < this._numTargetEnabled ? i : 0;\r\n if (this._alphaBlend[index]) {\r\n gl2.enableIndexed(gl.BLEND, i);\r\n } else {\r\n gl2.disableIndexed(gl.BLEND, i);\r\n }\r\n }\r\n\r\n this._isAlphaBlendDirty = false;\r\n }\r\n\r\n // Alpha function\r\n if (this._isBlendFunctionParametersDirty) {\r\n for (let i = 0; i < numTargets; i++) {\r\n const offset = i < this._numTargetEnabled ? i * 4 : 0;\r\n gl2.blendFuncSeparateIndexed(\r\n i,\r\n <number>this._blendFunctionParameters[offset + 0],\r\n <number>this._blendFunctionParameters[offset + 1],\r\n <number>this._blendFunctionParameters[offset + 2],\r\n <number>this._blendFunctionParameters[offset + 3]\r\n );\r\n }\r\n this._isBlendFunctionParametersDirty = false;\r\n }\r\n\r\n // Alpha equation\r\n if (this._isBlendEquationParametersDirty) {\r\n for (let i = 0; i < numTargets; i++) {\r\n const offset = i < this._numTargetEnabled ? i * 2 : 0;\r\n gl2.blendEquationSeparateIndexed(i, <number>this._blendEquationParameters[offset + 0], <number>this._blendEquationParameters[offset + 1]);\r\n }\r\n this._isBlendEquationParametersDirty = false;\r\n }\r\n }\r\n\r\n public setAlphaMode(mode: number, targetIndex: number) {\r\n let equation = Constants.GL_ALPHA_EQUATION_ADD;\r\n\r\n switch (mode) {\r\n case Constants.ALPHA_DISABLE:\r\n break;\r\n case Constants.ALPHA_PREMULTIPLIED:\r\n this.setAlphaBlendFunctionParameters(1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, 1, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_PREMULTIPLIED_PORTERDUFF:\r\n this.setAlphaBlendFunctionParameters(1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, 1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, targetIndex);\r\n break;\r\n case Constants.ALPHA_COMBINE:\r\n this.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_SRC_ALPHA, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, 1, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_ONEONE:\r\n this.setAlphaBlendFunctionParameters(1, 1, 0, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_ADD:\r\n this.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_SRC_ALPHA, 1, 0, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_SUBTRACT:\r\n this.setAlphaBlendFunctionParameters(0, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_COLOR, 1, 1, targetIndex);\r\n equation = Constants.GL_ALPHA_EQUATION_SUBTRACT;\r\n break;\r\n case Constants.ALPHA_MULTIPLY:\r\n this.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_DST_COLOR, 0, 1, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_MAXIMIZED:\r\n this.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_SRC_ALPHA, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_COLOR, 1, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_INTERPOLATE:\r\n this.setAlphaBlendFunctionParameters(\r\n Constants.GL_ALPHA_FUNCTION_CONSTANT_COLOR,\r\n Constants.GL_ALPHA_FUNCTION_ONE_MINUS_CONSTANT_COLOR,\r\n Constants.GL_ALPHA_FUNCTION_CONSTANT_ALPHA,\r\n Constants.GL_ALPHA_FUNCTION_ONE_MINUS_CONSTANT_ALPHA,\r\n targetIndex\r\n );\r\n break;\r\n case Constants.ALPHA_SCREENMODE:\r\n this.setAlphaBlendFunctionParameters(1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_COLOR, 1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, targetIndex);\r\n break;\r\n case Constants.ALPHA_ONEONE_ONEONE:\r\n this.setAlphaBlendFunctionParameters(1, 1, 1, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_ALPHATOCOLOR:\r\n this.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_DST_ALPHA, 1, 0, 0, targetIndex);\r\n break;\r\n case Constants.ALPHA_REVERSEONEMINUS:\r\n this.setAlphaBlendFunctionParameters(\r\n Constants.GL_ALPHA_FUNCTION_ONE_MINUS_DST_COLOR,\r\n Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_COLOR,\r\n Constants.GL_ALPHA_FUNCTION_ONE_MINUS_DST_ALPHA,\r\n Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA,\r\n targetIndex\r\n );\r\n break;\r\n case Constants.ALPHA_SRC_DSTONEMINUSSRCALPHA:\r\n this.setAlphaBlendFunctionParameters(1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, 1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, targetIndex);\r\n break;\r\n case Constants.ALPHA_ONEONE_ONEZERO:\r\n this.setAlphaBlendFunctionParameters(1, 1, 1, 0, targetIndex);\r\n break;\r\n case Constants.ALPHA_EXCLUSION:\r\n this.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_ONE_MINUS_DST_COLOR, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_COLOR, 0, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_LAYER_ACCUMULATE:\r\n // Same as ALPHA_COMBINE but accumulates (1 - alpha) values in the alpha channel for a later readout in order independant transparency\r\n this.setAlphaBlendFunctionParameters(\r\n Constants.GL_ALPHA_FUNCTION_SRC_ALPHA,\r\n Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA,\r\n 1,\r\n Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA,\r\n targetIndex\r\n );\r\n break;\r\n case Constants.ALPHA_MIN:\r\n this.setAlphaBlendFunctionParameters(1, 1, 1, 1, targetIndex);\r\n equation = Constants.GL_ALPHA_EQUATION_MIN;\r\n break;\r\n case Constants.ALPHA_MAX:\r\n this.setAlphaBlendFunctionParameters(1, 1, 1, 1, targetIndex);\r\n equation = Constants.GL_ALPHA_EQUATION_MAX;\r\n break;\r\n case Constants.ALPHA_DUAL_SRC0_ADD_SRC1xDST:\r\n this.setAlphaBlendFunctionParameters(1, Constants.GL_ALPHA_FUNCTION_SRC1_COLOR, 0, 1, targetIndex);\r\n break;\r\n }\r\n\r\n this.setAlphaEquationParameters(equation, equation, targetIndex);\r\n }\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@babylonjs/core",
3
- "version": "8.40.0",
3
+ "version": "8.41.0",
4
4
  "main": "index.js",
5
5
  "module": "index.js",
6
6
  "types": "index.d.ts",