@babylonjs/core 8.51.1 → 8.52.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 (265) hide show
  1. package/Engines/Extensions/engine.multiview.d.ts +2 -0
  2. package/Engines/Extensions/engine.multiview.js +7 -3
  3. package/Engines/Extensions/engine.multiview.js.map +1 -1
  4. package/Engines/abstractEngine.js +2 -2
  5. package/Engines/abstractEngine.js.map +1 -1
  6. package/Lights/Shadows/cascadedShadowGenerator.js +1 -1
  7. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  8. package/Lights/Shadows/shadowGenerator.js +2 -3
  9. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  10. package/Materials/Background/backgroundMaterial.js +37 -2
  11. package/Materials/Background/backgroundMaterial.js.map +1 -1
  12. package/Materials/GaussianSplatting/gaussianSplattingMaterial.d.ts +1 -1
  13. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +16 -1
  14. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  15. package/Materials/GreasedLine/greasedLinePluginMaterial.js +0 -6
  16. package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
  17. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js +0 -1
  18. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js.map +1 -1
  19. package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js +0 -1
  20. package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js.map +1 -1
  21. package/Materials/Node/Blocks/Dual/clipPlanesBlock.d.ts +14 -0
  22. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +14 -0
  23. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -1
  24. package/Materials/Node/Blocks/Dual/currentScreenBlock.d.ts +20 -1
  25. package/Materials/Node/Blocks/Dual/currentScreenBlock.js +20 -1
  26. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  27. package/Materials/Node/Blocks/Dual/depthSourceBlock.d.ts +13 -0
  28. package/Materials/Node/Blocks/Dual/depthSourceBlock.js +13 -0
  29. package/Materials/Node/Blocks/Dual/depthSourceBlock.js.map +1 -1
  30. package/Materials/Node/Blocks/Dual/fogBlock.d.ts +21 -0
  31. package/Materials/Node/Blocks/Dual/fogBlock.js +21 -0
  32. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  33. package/Materials/Node/Blocks/Dual/imageSourceBlock.d.ts +21 -0
  34. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +21 -0
  35. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  36. package/Materials/Node/Blocks/Dual/lightBlock.d.ts +38 -0
  37. package/Materials/Node/Blocks/Dual/lightBlock.js +38 -0
  38. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  39. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.d.ts +29 -0
  40. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +29 -0
  41. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  42. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.d.ts +5 -0
  43. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +5 -0
  44. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  45. package/Materials/Node/Blocks/Dual/sceneDepthBlock.d.ts +16 -0
  46. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +16 -0
  47. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  48. package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.d.ts +16 -0
  49. package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.js +16 -0
  50. package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.js.map +1 -1
  51. package/Materials/Node/Blocks/Dual/textureBlock.d.ts +34 -0
  52. package/Materials/Node/Blocks/Dual/textureBlock.js +34 -0
  53. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  54. package/Materials/Node/Blocks/Fragment/TBNBlock.d.ts +17 -0
  55. package/Materials/Node/Blocks/Fragment/TBNBlock.js +17 -2
  56. package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -1
  57. package/Materials/Node/Blocks/Fragment/ambientOcclusionBlock.d.ts +7 -0
  58. package/Materials/Node/Blocks/Fragment/ambientOcclusionBlock.js +7 -0
  59. package/Materials/Node/Blocks/Fragment/ambientOcclusionBlock.js.map +1 -1
  60. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.d.ts +21 -0
  61. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +21 -0
  62. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  63. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.d.ts +10 -0
  64. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js +10 -0
  65. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
  66. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.d.ts +28 -0
  67. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +28 -0
  68. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  69. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.d.ts +30 -0
  70. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +30 -1
  71. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  72. package/Materials/Node/Blocks/Fragment/screenSizeBlock.d.ts +4 -0
  73. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js +4 -0
  74. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js.map +1 -1
  75. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.d.ts +5 -0
  76. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js +5 -0
  77. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -1
  78. package/Materials/Node/Blocks/Fragment/twirlBlock.d.ts +3 -0
  79. package/Materials/Node/Blocks/Fragment/twirlBlock.js +3 -0
  80. package/Materials/Node/Blocks/Fragment/twirlBlock.js.map +1 -1
  81. package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.d.ts +6 -0
  82. package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.js +6 -0
  83. package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.js.map +1 -1
  84. package/Materials/Node/Blocks/Input/inputBlock.d.ts +16 -0
  85. package/Materials/Node/Blocks/Input/inputBlock.js +16 -1
  86. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  87. package/Materials/Node/Blocks/Input/prePassTextureBlock.d.ts +5 -0
  88. package/Materials/Node/Blocks/Input/prePassTextureBlock.js +5 -0
  89. package/Materials/Node/Blocks/Input/prePassTextureBlock.js.map +1 -1
  90. package/Materials/Node/Blocks/PBR/anisotropyBlock.d.ts +10 -0
  91. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +10 -1
  92. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  93. package/Materials/Node/Blocks/PBR/clearCoatBlock.d.ts +23 -0
  94. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +23 -1
  95. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  96. package/Materials/Node/Blocks/PBR/iridescenceBlock.d.ts +17 -0
  97. package/Materials/Node/Blocks/PBR/iridescenceBlock.js +17 -0
  98. package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -1
  99. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.d.ts +41 -0
  100. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +41 -0
  101. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  102. package/Materials/Node/Blocks/PBR/reflectionBlock.d.ts +21 -0
  103. package/Materials/Node/Blocks/PBR/reflectionBlock.js +21 -0
  104. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  105. package/Materials/Node/Blocks/PBR/refractionBlock.d.ts +29 -0
  106. package/Materials/Node/Blocks/PBR/refractionBlock.js +29 -0
  107. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  108. package/Materials/Node/Blocks/PBR/sheenBlock.d.ts +14 -0
  109. package/Materials/Node/Blocks/PBR/sheenBlock.js +14 -0
  110. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  111. package/Materials/Node/Blocks/PBR/subSurfaceBlock.d.ts +7 -0
  112. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +7 -0
  113. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  114. package/Materials/Node/Blocks/Particle/particleTextureBlock.d.ts +23 -0
  115. package/Materials/Node/Blocks/Particle/particleTextureBlock.js +23 -0
  116. package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
  117. package/Materials/Node/Blocks/Teleport/teleportInBlock.d.ts +6 -0
  118. package/Materials/Node/Blocks/Teleport/teleportInBlock.js +6 -0
  119. package/Materials/Node/Blocks/Teleport/teleportInBlock.js.map +1 -1
  120. package/Materials/Node/Blocks/Teleport/teleportOutBlock.d.ts +17 -0
  121. package/Materials/Node/Blocks/Teleport/teleportOutBlock.js +17 -0
  122. package/Materials/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
  123. package/Materials/Node/Blocks/Vertex/bonesBlock.d.ts +22 -0
  124. package/Materials/Node/Blocks/Vertex/bonesBlock.js +22 -0
  125. package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
  126. package/Materials/Node/Blocks/Vertex/instancesBlock.d.ts +13 -0
  127. package/Materials/Node/Blocks/Vertex/instancesBlock.js +13 -0
  128. package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
  129. package/Materials/Node/Blocks/Vertex/lightInformationBlock.d.ts +20 -0
  130. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js +20 -0
  131. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
  132. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.d.ts +27 -0
  133. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +27 -0
  134. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  135. package/Materials/Node/Blocks/clampBlock.d.ts +10 -0
  136. package/Materials/Node/Blocks/clampBlock.js +10 -0
  137. package/Materials/Node/Blocks/clampBlock.js.map +1 -1
  138. package/Materials/Node/Blocks/cloudBlock.d.ts +10 -0
  139. package/Materials/Node/Blocks/cloudBlock.js +10 -0
  140. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  141. package/Materials/Node/Blocks/colorMergerBlock.d.ts +10 -0
  142. package/Materials/Node/Blocks/colorMergerBlock.js +10 -0
  143. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  144. package/Materials/Node/Blocks/conditionalBlock.d.ts +14 -0
  145. package/Materials/Node/Blocks/conditionalBlock.js +14 -0
  146. package/Materials/Node/Blocks/conditionalBlock.js.map +1 -1
  147. package/Materials/Node/Blocks/curveBlock.d.ts +10 -0
  148. package/Materials/Node/Blocks/curveBlock.js +10 -0
  149. package/Materials/Node/Blocks/curveBlock.js.map +1 -1
  150. package/Materials/Node/Blocks/customBlock.d.ts +10 -0
  151. package/Materials/Node/Blocks/customBlock.js +10 -0
  152. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  153. package/Materials/Node/Blocks/debugBlock.d.ts +10 -0
  154. package/Materials/Node/Blocks/debugBlock.js +10 -0
  155. package/Materials/Node/Blocks/debugBlock.js.map +1 -1
  156. package/Materials/Node/Blocks/fresnelBlock.d.ts +4 -0
  157. package/Materials/Node/Blocks/fresnelBlock.js +4 -0
  158. package/Materials/Node/Blocks/fresnelBlock.js.map +1 -1
  159. package/Materials/Node/Blocks/gradientBlock.d.ts +10 -0
  160. package/Materials/Node/Blocks/gradientBlock.js +10 -0
  161. package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
  162. package/Materials/Node/Blocks/loopBlock.d.ts +10 -0
  163. package/Materials/Node/Blocks/loopBlock.js +10 -0
  164. package/Materials/Node/Blocks/loopBlock.js.map +1 -1
  165. package/Materials/Node/Blocks/matrixBuilderBlock.d.ts +1 -0
  166. package/Materials/Node/Blocks/matrixBuilderBlock.js +1 -0
  167. package/Materials/Node/Blocks/matrixBuilderBlock.js.map +1 -1
  168. package/Materials/Node/Blocks/meshAttributeExistsBlock.d.ts +10 -0
  169. package/Materials/Node/Blocks/meshAttributeExistsBlock.js +10 -0
  170. package/Materials/Node/Blocks/meshAttributeExistsBlock.js.map +1 -1
  171. package/Materials/Node/Blocks/pannerBlock.d.ts +5 -0
  172. package/Materials/Node/Blocks/pannerBlock.js +5 -0
  173. package/Materials/Node/Blocks/pannerBlock.js.map +1 -1
  174. package/Materials/Node/Blocks/remapBlock.d.ts +10 -0
  175. package/Materials/Node/Blocks/remapBlock.js +10 -0
  176. package/Materials/Node/Blocks/remapBlock.js.map +1 -1
  177. package/Materials/Node/Blocks/rotate2dBlock.d.ts +1 -0
  178. package/Materials/Node/Blocks/rotate2dBlock.js +1 -0
  179. package/Materials/Node/Blocks/rotate2dBlock.js.map +1 -1
  180. package/Materials/Node/Blocks/transformBlock.d.ts +10 -0
  181. package/Materials/Node/Blocks/transformBlock.js +10 -0
  182. package/Materials/Node/Blocks/transformBlock.js.map +1 -1
  183. package/Materials/Node/Blocks/triPlanarBlock.d.ts +22 -0
  184. package/Materials/Node/Blocks/triPlanarBlock.js +22 -0
  185. package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
  186. package/Materials/Node/Blocks/trigonometryBlock.d.ts +10 -0
  187. package/Materials/Node/Blocks/trigonometryBlock.js +10 -0
  188. package/Materials/Node/Blocks/trigonometryBlock.js.map +1 -1
  189. package/Materials/Node/Blocks/vectorMergerBlock.d.ts +10 -0
  190. package/Materials/Node/Blocks/vectorMergerBlock.js +10 -0
  191. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  192. package/Materials/Node/Blocks/viewDirectionBlock.d.ts +5 -0
  193. package/Materials/Node/Blocks/viewDirectionBlock.js +5 -0
  194. package/Materials/Node/Blocks/viewDirectionBlock.js.map +1 -1
  195. package/Materials/Node/Blocks/waveBlock.d.ts +10 -0
  196. package/Materials/Node/Blocks/waveBlock.js +10 -0
  197. package/Materials/Node/Blocks/waveBlock.js.map +1 -1
  198. package/Materials/Node/Blocks/worleyNoise3DBlock.d.ts +1 -0
  199. package/Materials/Node/Blocks/worleyNoise3DBlock.js +1 -0
  200. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  201. package/Materials/Node/nodeMaterial.d.ts +13 -0
  202. package/Materials/Node/nodeMaterial.js +14 -2
  203. package/Materials/Node/nodeMaterial.js.map +1 -1
  204. package/Materials/Node/nodeMaterialBlock.d.ts +0 -3
  205. package/Materials/Node/nodeMaterialBlock.js +1 -6
  206. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  207. package/Materials/Node/nodeMaterialBlockConnectionPoint.js +1 -2
  208. package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
  209. package/Materials/Textures/mirrorTexture.js +1 -1
  210. package/Materials/Textures/mirrorTexture.js.map +1 -1
  211. package/Materials/Textures/texture.js +15 -4
  212. package/Materials/Textures/texture.js.map +1 -1
  213. package/Meshes/instancedMesh.js +1 -0
  214. package/Meshes/instancedMesh.js.map +1 -1
  215. package/Meshes/mesh.d.ts +5 -0
  216. package/Meshes/mesh.js +39 -16
  217. package/Meshes/mesh.js.map +1 -1
  218. package/Particles/Node/Blocks/Emitters/boxShapeBlock.js +1 -1
  219. package/Particles/Node/Blocks/Emitters/boxShapeBlock.js.map +1 -1
  220. package/Particles/Node/Blocks/Emitters/coneShapeBlock.js +1 -1
  221. package/Particles/Node/Blocks/Emitters/coneShapeBlock.js.map +1 -1
  222. package/Particles/Node/Blocks/Emitters/customShapeBlock.js +1 -1
  223. package/Particles/Node/Blocks/Emitters/customShapeBlock.js.map +1 -1
  224. package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.js +1 -1
  225. package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.js.map +1 -1
  226. package/Particles/Node/Blocks/Emitters/emitters.functions.js +3 -3
  227. package/Particles/Node/Blocks/Emitters/emitters.functions.js.map +1 -1
  228. package/Particles/Node/Blocks/Emitters/meshShapeBlock.js +1 -1
  229. package/Particles/Node/Blocks/Emitters/meshShapeBlock.js.map +1 -1
  230. package/Particles/Node/Blocks/Emitters/pointShapeBlock.js +1 -1
  231. package/Particles/Node/Blocks/Emitters/pointShapeBlock.js.map +1 -1
  232. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.js +1 -1
  233. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.js.map +1 -1
  234. package/Particles/Node/Blocks/Update/basicPositionUpdateBlock.js +2 -2
  235. package/Particles/Node/Blocks/Update/basicPositionUpdateBlock.js.map +1 -1
  236. package/Particles/Node/Blocks/Update/updateNoiseBlock.js +7 -7
  237. package/Particles/Node/Blocks/Update/updateNoiseBlock.js.map +1 -1
  238. package/Particles/Node/Blocks/particleLocalVariableBlock.js +2 -2
  239. package/Particles/Node/Blocks/particleLocalVariableBlock.js.map +1 -1
  240. package/Particles/Node/nodeParticleBuildState.js +7 -7
  241. package/Particles/Node/nodeParticleBuildState.js.map +1 -1
  242. package/Particles/Node/nodeParticleSystemSet.helper.js +9 -4
  243. package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
  244. package/Particles/particle.d.ts +73 -61
  245. package/Particles/particle.js +106 -91
  246. package/Particles/particle.js.map +1 -1
  247. package/Particles/particleSystem.js +5 -5
  248. package/Particles/particleSystem.js.map +1 -1
  249. package/Particles/thinParticleSystem.function.js +83 -83
  250. package/Particles/thinParticleSystem.function.js.map +1 -1
  251. package/Particles/thinParticleSystem.js +8 -8
  252. package/Particles/thinParticleSystem.js.map +1 -1
  253. package/Probes/reflectionProbe.js +9 -6
  254. package/Probes/reflectionProbe.js.map +1 -1
  255. package/Rendering/objectRenderer.d.ts +3 -1
  256. package/Rendering/objectRenderer.js +28 -8
  257. package/Rendering/objectRenderer.js.map +1 -1
  258. package/Rendering/reflectiveShadowMap.js +1 -1
  259. package/Rendering/reflectiveShadowMap.js.map +1 -1
  260. package/Rendering/thinDepthPeelingRenderer.js +8 -0
  261. package/Rendering/thinDepthPeelingRenderer.js.map +1 -1
  262. package/package.json +1 -1
  263. package/scene.d.ts +16 -0
  264. package/scene.js +7 -14
  265. package/scene.js.map +1 -1
@@ -58,6 +58,8 @@ declare module "../../scene.js" {
58
58
  /** @internal */
59
59
  _multiviewSceneUbo: Nullable<UniformBuffer>;
60
60
  /** @internal */
61
+ _multiviewSceneUboIsActive: boolean;
62
+ /** @internal */
61
63
  _createMultiviewUbo(): void;
62
64
  /** @internal */
63
65
  _updateMultiviewUbo(viewR?: Matrix, projectionR?: Matrix): void;
@@ -93,14 +93,18 @@ function CreateMultiviewUbo(engine, name, trackUBOsInFrame) {
93
93
  const CurrentCreateSceneUniformBuffer = Scene.prototype.createSceneUniformBuffer;
94
94
  Scene.prototype._transformMatrixR = Matrix.Zero();
95
95
  Scene.prototype._multiviewSceneUbo = null;
96
+ Scene.prototype._multiviewSceneUboIsActive = false;
96
97
  Scene.prototype._createMultiviewUbo = function () {
97
98
  this._multiviewSceneUbo = CreateMultiviewUbo(this.getEngine(), "scene_multiview");
99
+ this._multiviewSceneUboIsActive = true;
98
100
  };
99
- Scene.prototype.createSceneUniformBuffer = function (name, trackUBOsInFrame) {
100
- if (this._multiviewSceneUbo) {
101
+ Scene.prototype.createSceneUniformBuffer = function (name, trackUBOsInFrameOrOptions) {
102
+ const forceMono = typeof trackUBOsInFrameOrOptions === "object" && !!trackUBOsInFrameOrOptions?.forceMono;
103
+ if (!forceMono && this._multiviewSceneUboIsActive) {
104
+ const trackUBOsInFrame = typeof trackUBOsInFrameOrOptions === "boolean" ? trackUBOsInFrameOrOptions : trackUBOsInFrameOrOptions?.trackUBOsInFrame;
101
105
  return CreateMultiviewUbo(this.getEngine(), name, trackUBOsInFrame);
102
106
  }
103
- return CurrentCreateSceneUniformBuffer.bind(this)(name, trackUBOsInFrame);
107
+ return CurrentCreateSceneUniformBuffer.bind(this)(name, trackUBOsInFrameOrOptions);
104
108
  };
105
109
  Scene.prototype._updateMultiviewUbo = function (viewR, projectionR) {
106
110
  if (viewR && projectionR) {
@@ -1 +1 @@
1
- {"version":3,"file":"engine.multiview.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/Extensions/engine.multiview.ts"],"names":[],"mappings":"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","sourcesContent":["import { Camera } from \"../../Cameras/camera\";\r\nimport { Engine } from \"../../Engines/engine\";\r\nimport { Scene } from \"../../scene\";\r\nimport { InternalTexture, InternalTextureSource } from \"../../Materials/Textures/internalTexture\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { RenderTargetTexture } from \"../../Materials/Textures/renderTargetTexture\";\r\nimport { Matrix, TmpVectors } from \"../../Maths/math.vector\";\r\nimport { UniformBuffer } from \"../../Materials/uniformBuffer\";\r\nimport { MultiviewRenderTarget } from \"../../Materials/Textures/MultiviewRenderTarget\";\r\nimport { Frustum } from \"../../Maths/math.frustum\";\r\nimport type { WebGLRenderTargetWrapper } from \"../WebGL/webGLRenderTargetWrapper\";\r\nimport type { RenderTargetWrapper } from \"../renderTargetWrapper\";\r\nimport type { AbstractEngine } from \"../abstractEngine\";\r\n\r\ndeclare module \"../../Engines/engine\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface Engine {\r\n /**\r\n * Creates a new multiview render target\r\n * @param width defines the width of the texture\r\n * @param height defines the height of the texture\r\n * @returns the created multiview render target wrapper\r\n */\r\n createMultiviewRenderTargetTexture(width: number, height: number, colorTexture?: WebGLTexture, depthStencilTexture?: WebGLTexture): RenderTargetWrapper;\r\n\r\n /**\r\n * Binds a multiview render target wrapper to be drawn to\r\n * @param multiviewTexture render target wrapper to bind\r\n */\r\n bindMultiviewFramebuffer(multiviewTexture: RenderTargetWrapper): void;\r\n\r\n /**\r\n * Binds a Space Warp render target wrapper to be drawn to\r\n * @param spaceWarpTexture render target wrapper to bind\r\n */\r\n bindSpaceWarpFramebuffer(spaceWarpTexture: RenderTargetWrapper): void;\r\n }\r\n}\r\n\r\nEngine.prototype.createMultiviewRenderTargetTexture = function (width: number, height: number, colorTexture?: WebGLTexture, depthStencilTexture?: WebGLTexture) {\r\n const gl = this._gl;\r\n\r\n if (!this.getCaps().multiview) {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \"Multiview is not supported\";\r\n }\r\n\r\n const rtWrapper = this._createHardwareRenderTargetWrapper(false, false, { width, height }) as WebGLRenderTargetWrapper;\r\n\r\n rtWrapper._framebuffer = gl.createFramebuffer();\r\n\r\n const internalTexture = new InternalTexture(this, InternalTextureSource.Unknown, true);\r\n internalTexture.width = width;\r\n internalTexture.height = height;\r\n internalTexture.isMultiview = true;\r\n\r\n if (!colorTexture) {\r\n colorTexture = gl.createTexture();\r\n gl.bindTexture(gl.TEXTURE_2D_ARRAY, colorTexture);\r\n (gl as any).texStorage3D(gl.TEXTURE_2D_ARRAY, 1, gl.RGBA8, width, height, 2);\r\n }\r\n\r\n rtWrapper._colorTextureArray = colorTexture;\r\n\r\n if (!depthStencilTexture) {\r\n depthStencilTexture = gl.createTexture();\r\n gl.bindTexture(gl.TEXTURE_2D_ARRAY, depthStencilTexture);\r\n (gl as any).texStorage3D(gl.TEXTURE_2D_ARRAY, 1, (gl as any).DEPTH24_STENCIL8, width, height, 2);\r\n }\r\n\r\n rtWrapper._depthStencilTextureArray = depthStencilTexture;\r\n\r\n internalTexture.isReady = true;\r\n\r\n rtWrapper.setTextures(internalTexture);\r\n rtWrapper._depthStencilTexture = internalTexture;\r\n\r\n return rtWrapper;\r\n};\r\n\r\nEngine.prototype.bindMultiviewFramebuffer = function (_multiviewTexture: RenderTargetWrapper) {\r\n const multiviewTexture = _multiviewTexture as WebGLRenderTargetWrapper;\r\n\r\n const gl: any = this._gl;\r\n const ext = this.getCaps().oculusMultiview || this.getCaps().multiview;\r\n\r\n this.bindFramebuffer(multiviewTexture, undefined, undefined, undefined, true);\r\n gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, multiviewTexture._framebuffer);\r\n if (multiviewTexture._colorTextureArray && multiviewTexture._depthStencilTextureArray) {\r\n if (this.getCaps().oculusMultiview) {\r\n ext.framebufferTextureMultisampleMultiviewOVR(gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, multiviewTexture._colorTextureArray, 0, multiviewTexture.samples, 0, 2);\r\n ext.framebufferTextureMultisampleMultiviewOVR(\r\n gl.DRAW_FRAMEBUFFER,\r\n gl.DEPTH_STENCIL_ATTACHMENT,\r\n multiviewTexture._depthStencilTextureArray,\r\n 0,\r\n multiviewTexture.samples,\r\n 0,\r\n 2\r\n );\r\n } else {\r\n ext.framebufferTextureMultiviewOVR(gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, multiviewTexture._colorTextureArray, 0, 0, 2);\r\n ext.framebufferTextureMultiviewOVR(gl.DRAW_FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, multiviewTexture._depthStencilTextureArray, 0, 0, 2);\r\n }\r\n } else {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \"Invalid multiview frame buffer\";\r\n }\r\n};\r\n\r\nEngine.prototype.bindSpaceWarpFramebuffer = function (_spaceWarpTexture: RenderTargetWrapper) {\r\n const spaceWarpTexture = _spaceWarpTexture as WebGLRenderTargetWrapper;\r\n\r\n const gl: any = this._gl;\r\n const ext = this.getCaps().oculusMultiview || this.getCaps().multiview;\r\n\r\n this.bindFramebuffer(spaceWarpTexture, undefined, undefined, undefined, true);\r\n gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, spaceWarpTexture._framebuffer);\r\n if (spaceWarpTexture._colorTextureArray && spaceWarpTexture._depthStencilTextureArray) {\r\n ext.framebufferTextureMultiviewOVR(gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, spaceWarpTexture._colorTextureArray, 0, 0, 2);\r\n ext.framebufferTextureMultiviewOVR(gl.DRAW_FRAMEBUFFER, gl.DEPTH_ATTACHMENT, spaceWarpTexture._depthStencilTextureArray, 0, 0, 2);\r\n } else {\r\n throw new Error(\"Invalid Space Warp framebuffer\");\r\n }\r\n};\r\n\r\ndeclare module \"../../Cameras/camera\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface Camera {\r\n /**\r\n * @internal\r\n * For cameras that cannot use multiview images to display directly. (e.g. webVR camera will render to multiview texture, then copy to each eye texture and go from there)\r\n */\r\n _useMultiviewToSingleView: boolean;\r\n /**\r\n * @internal\r\n * For cameras that cannot use multiview images to display directly. (e.g. webVR camera will render to multiview texture, then copy to each eye texture and go from there)\r\n */\r\n _multiviewTexture: Nullable<RenderTargetTexture>;\r\n\r\n /**\r\n * @internal\r\n * For WebXR cameras that are rendering to multiview texture arrays.\r\n */\r\n _renderingMultiview: boolean;\r\n\r\n /**\r\n * @internal\r\n * ensures the multiview texture of the camera exists and has the specified width/height\r\n * @param width height to set on the multiview texture\r\n * @param height width to set on the multiview texture\r\n */\r\n _resizeOrCreateMultiviewTexture(width: number, height: number): void;\r\n }\r\n}\r\n\r\nCamera.prototype._useMultiviewToSingleView = false;\r\n\r\nCamera.prototype._multiviewTexture = null;\r\n\r\nCamera.prototype._resizeOrCreateMultiviewTexture = function (width: number, height: number) {\r\n if (!this._multiviewTexture) {\r\n this._multiviewTexture = new MultiviewRenderTarget(this.getScene(), { width: width, height: height });\r\n } else if (this._multiviewTexture.getRenderWidth() != width || this._multiviewTexture.getRenderHeight() != height) {\r\n this._multiviewTexture.dispose();\r\n this._multiviewTexture = new MultiviewRenderTarget(this.getScene(), { width: width, height: height });\r\n }\r\n};\r\n\r\ndeclare module \"../../scene\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface Scene {\r\n /** @internal */\r\n _transformMatrixR: Matrix;\r\n /** @internal */\r\n _multiviewSceneUbo: Nullable<UniformBuffer>;\r\n /** @internal */\r\n _createMultiviewUbo(): void;\r\n /** @internal */\r\n _updateMultiviewUbo(viewR?: Matrix, projectionR?: Matrix): void;\r\n /** @internal */\r\n _renderMultiviewToSingleView(camera: Camera): void;\r\n }\r\n}\r\n\r\nfunction CreateMultiviewUbo(engine: AbstractEngine, name?: string, trackUBOsInFrame?: boolean) {\r\n const ubo = new UniformBuffer(engine, undefined, true, name, undefined, trackUBOsInFrame);\r\n ubo.addUniform(\"viewProjection\", 16);\r\n ubo.addUniform(\"viewProjectionR\", 16);\r\n ubo.addUniform(\"view\", 16);\r\n ubo.addUniform(\"projection\", 16);\r\n ubo.addUniform(\"vEyePosition\", 4);\r\n return ubo;\r\n}\r\n\r\nconst CurrentCreateSceneUniformBuffer = Scene.prototype.createSceneUniformBuffer;\r\n\r\nScene.prototype._transformMatrixR = Matrix.Zero();\r\nScene.prototype._multiviewSceneUbo = null;\r\nScene.prototype._createMultiviewUbo = function () {\r\n this._multiviewSceneUbo = CreateMultiviewUbo(this.getEngine(), \"scene_multiview\");\r\n};\r\nScene.prototype.createSceneUniformBuffer = function (name?: string, trackUBOsInFrame?: boolean): UniformBuffer {\r\n if (this._multiviewSceneUbo) {\r\n return CreateMultiviewUbo(this.getEngine(), name, trackUBOsInFrame);\r\n }\r\n return CurrentCreateSceneUniformBuffer.bind(this)(name, trackUBOsInFrame);\r\n};\r\nScene.prototype._updateMultiviewUbo = function (viewR?: Matrix, projectionR?: Matrix) {\r\n if (viewR && projectionR) {\r\n viewR.multiplyToRef(projectionR, this._transformMatrixR);\r\n }\r\n\r\n if (viewR && projectionR) {\r\n viewR.multiplyToRef(projectionR, TmpVectors.Matrix[0]);\r\n Frustum.GetRightPlaneToRef(TmpVectors.Matrix[0], this._frustumPlanes[3]); // Replace right plane by second camera right plane\r\n }\r\n\r\n if (this._multiviewSceneUbo) {\r\n this._multiviewSceneUbo.updateMatrix(\"viewProjection\", this.getTransformMatrix());\r\n this._multiviewSceneUbo.updateMatrix(\"viewProjectionR\", this._transformMatrixR);\r\n this._multiviewSceneUbo.updateMatrix(\"view\", this._viewMatrix);\r\n this._multiviewSceneUbo.updateMatrix(\"projection\", this._projectionMatrix);\r\n }\r\n};\r\nScene.prototype._renderMultiviewToSingleView = function (camera: Camera) {\r\n // Multiview is only able to be displayed directly for API's such as webXR\r\n // This displays a multiview image by rendering to the multiview image and then\r\n // copying the result into the sub cameras instead of rendering them and proceeding as normal from there\r\n\r\n // Render to a multiview texture\r\n camera._resizeOrCreateMultiviewTexture(\r\n camera._rigPostProcess && camera._rigPostProcess && camera._rigPostProcess.width > 0 ? camera._rigPostProcess.width : this.getEngine().getRenderWidth(true),\r\n camera._rigPostProcess && camera._rigPostProcess && camera._rigPostProcess.height > 0 ? camera._rigPostProcess.height : this.getEngine().getRenderHeight(true)\r\n );\r\n if (!this._multiviewSceneUbo) {\r\n this._createMultiviewUbo();\r\n }\r\n camera.outputRenderTarget = camera._multiviewTexture;\r\n this._renderForCamera(camera);\r\n camera.outputRenderTarget = null;\r\n\r\n // Consume the multiview texture through a shader for each eye\r\n for (let index = 0; index < camera._rigCameras.length; index++) {\r\n const engine = this.getEngine();\r\n this._activeCamera = camera._rigCameras[index];\r\n engine.setViewport(this._activeCamera.viewport);\r\n if (this.postProcessManager) {\r\n this.postProcessManager._prepareFrame();\r\n this.postProcessManager._finalizeFrame(this._activeCamera.isIntermediate);\r\n }\r\n }\r\n};\r\n"]}
1
+ {"version":3,"file":"engine.multiview.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/Extensions/engine.multiview.ts"],"names":[],"mappings":"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","sourcesContent":["import { Camera } from \"../../Cameras/camera\";\r\nimport { Engine } from \"../../Engines/engine\";\r\nimport type { ICreateSceneUboOptions } from \"../../scene\";\r\nimport { Scene } from \"../../scene\";\r\nimport { InternalTexture, InternalTextureSource } from \"../../Materials/Textures/internalTexture\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { RenderTargetTexture } from \"../../Materials/Textures/renderTargetTexture\";\r\nimport { Matrix, TmpVectors } from \"../../Maths/math.vector\";\r\nimport { UniformBuffer } from \"../../Materials/uniformBuffer\";\r\nimport { MultiviewRenderTarget } from \"../../Materials/Textures/MultiviewRenderTarget\";\r\nimport { Frustum } from \"../../Maths/math.frustum\";\r\nimport type { WebGLRenderTargetWrapper } from \"../WebGL/webGLRenderTargetWrapper\";\r\nimport type { RenderTargetWrapper } from \"../renderTargetWrapper\";\r\nimport type { AbstractEngine } from \"../abstractEngine\";\r\n\r\ndeclare module \"../../Engines/engine\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface Engine {\r\n /**\r\n * Creates a new multiview render target\r\n * @param width defines the width of the texture\r\n * @param height defines the height of the texture\r\n * @returns the created multiview render target wrapper\r\n */\r\n createMultiviewRenderTargetTexture(width: number, height: number, colorTexture?: WebGLTexture, depthStencilTexture?: WebGLTexture): RenderTargetWrapper;\r\n\r\n /**\r\n * Binds a multiview render target wrapper to be drawn to\r\n * @param multiviewTexture render target wrapper to bind\r\n */\r\n bindMultiviewFramebuffer(multiviewTexture: RenderTargetWrapper): void;\r\n\r\n /**\r\n * Binds a Space Warp render target wrapper to be drawn to\r\n * @param spaceWarpTexture render target wrapper to bind\r\n */\r\n bindSpaceWarpFramebuffer(spaceWarpTexture: RenderTargetWrapper): void;\r\n }\r\n}\r\n\r\nEngine.prototype.createMultiviewRenderTargetTexture = function (width: number, height: number, colorTexture?: WebGLTexture, depthStencilTexture?: WebGLTexture) {\r\n const gl = this._gl;\r\n\r\n if (!this.getCaps().multiview) {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \"Multiview is not supported\";\r\n }\r\n\r\n const rtWrapper = this._createHardwareRenderTargetWrapper(false, false, { width, height }) as WebGLRenderTargetWrapper;\r\n\r\n rtWrapper._framebuffer = gl.createFramebuffer();\r\n\r\n const internalTexture = new InternalTexture(this, InternalTextureSource.Unknown, true);\r\n internalTexture.width = width;\r\n internalTexture.height = height;\r\n internalTexture.isMultiview = true;\r\n\r\n if (!colorTexture) {\r\n colorTexture = gl.createTexture();\r\n gl.bindTexture(gl.TEXTURE_2D_ARRAY, colorTexture);\r\n (gl as any).texStorage3D(gl.TEXTURE_2D_ARRAY, 1, gl.RGBA8, width, height, 2);\r\n }\r\n\r\n rtWrapper._colorTextureArray = colorTexture;\r\n\r\n if (!depthStencilTexture) {\r\n depthStencilTexture = gl.createTexture();\r\n gl.bindTexture(gl.TEXTURE_2D_ARRAY, depthStencilTexture);\r\n (gl as any).texStorage3D(gl.TEXTURE_2D_ARRAY, 1, (gl as any).DEPTH24_STENCIL8, width, height, 2);\r\n }\r\n\r\n rtWrapper._depthStencilTextureArray = depthStencilTexture;\r\n\r\n internalTexture.isReady = true;\r\n\r\n rtWrapper.setTextures(internalTexture);\r\n rtWrapper._depthStencilTexture = internalTexture;\r\n\r\n return rtWrapper;\r\n};\r\n\r\nEngine.prototype.bindMultiviewFramebuffer = function (_multiviewTexture: RenderTargetWrapper) {\r\n const multiviewTexture = _multiviewTexture as WebGLRenderTargetWrapper;\r\n\r\n const gl: any = this._gl;\r\n const ext = this.getCaps().oculusMultiview || this.getCaps().multiview;\r\n\r\n this.bindFramebuffer(multiviewTexture, undefined, undefined, undefined, true);\r\n gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, multiviewTexture._framebuffer);\r\n if (multiviewTexture._colorTextureArray && multiviewTexture._depthStencilTextureArray) {\r\n if (this.getCaps().oculusMultiview) {\r\n ext.framebufferTextureMultisampleMultiviewOVR(gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, multiviewTexture._colorTextureArray, 0, multiviewTexture.samples, 0, 2);\r\n ext.framebufferTextureMultisampleMultiviewOVR(\r\n gl.DRAW_FRAMEBUFFER,\r\n gl.DEPTH_STENCIL_ATTACHMENT,\r\n multiviewTexture._depthStencilTextureArray,\r\n 0,\r\n multiviewTexture.samples,\r\n 0,\r\n 2\r\n );\r\n } else {\r\n ext.framebufferTextureMultiviewOVR(gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, multiviewTexture._colorTextureArray, 0, 0, 2);\r\n ext.framebufferTextureMultiviewOVR(gl.DRAW_FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, multiviewTexture._depthStencilTextureArray, 0, 0, 2);\r\n }\r\n } else {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \"Invalid multiview frame buffer\";\r\n }\r\n};\r\n\r\nEngine.prototype.bindSpaceWarpFramebuffer = function (_spaceWarpTexture: RenderTargetWrapper) {\r\n const spaceWarpTexture = _spaceWarpTexture as WebGLRenderTargetWrapper;\r\n\r\n const gl: any = this._gl;\r\n const ext = this.getCaps().oculusMultiview || this.getCaps().multiview;\r\n\r\n this.bindFramebuffer(spaceWarpTexture, undefined, undefined, undefined, true);\r\n gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, spaceWarpTexture._framebuffer);\r\n if (spaceWarpTexture._colorTextureArray && spaceWarpTexture._depthStencilTextureArray) {\r\n ext.framebufferTextureMultiviewOVR(gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, spaceWarpTexture._colorTextureArray, 0, 0, 2);\r\n ext.framebufferTextureMultiviewOVR(gl.DRAW_FRAMEBUFFER, gl.DEPTH_ATTACHMENT, spaceWarpTexture._depthStencilTextureArray, 0, 0, 2);\r\n } else {\r\n throw new Error(\"Invalid Space Warp framebuffer\");\r\n }\r\n};\r\n\r\ndeclare module \"../../Cameras/camera\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface Camera {\r\n /**\r\n * @internal\r\n * For cameras that cannot use multiview images to display directly. (e.g. webVR camera will render to multiview texture, then copy to each eye texture and go from there)\r\n */\r\n _useMultiviewToSingleView: boolean;\r\n /**\r\n * @internal\r\n * For cameras that cannot use multiview images to display directly. (e.g. webVR camera will render to multiview texture, then copy to each eye texture and go from there)\r\n */\r\n _multiviewTexture: Nullable<RenderTargetTexture>;\r\n\r\n /**\r\n * @internal\r\n * For WebXR cameras that are rendering to multiview texture arrays.\r\n */\r\n _renderingMultiview: boolean;\r\n\r\n /**\r\n * @internal\r\n * ensures the multiview texture of the camera exists and has the specified width/height\r\n * @param width height to set on the multiview texture\r\n * @param height width to set on the multiview texture\r\n */\r\n _resizeOrCreateMultiviewTexture(width: number, height: number): void;\r\n }\r\n}\r\n\r\nCamera.prototype._useMultiviewToSingleView = false;\r\n\r\nCamera.prototype._multiviewTexture = null;\r\n\r\nCamera.prototype._resizeOrCreateMultiviewTexture = function (width: number, height: number) {\r\n if (!this._multiviewTexture) {\r\n this._multiviewTexture = new MultiviewRenderTarget(this.getScene(), { width: width, height: height });\r\n } else if (this._multiviewTexture.getRenderWidth() != width || this._multiviewTexture.getRenderHeight() != height) {\r\n this._multiviewTexture.dispose();\r\n this._multiviewTexture = new MultiviewRenderTarget(this.getScene(), { width: width, height: height });\r\n }\r\n};\r\n\r\ndeclare module \"../../scene\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface Scene {\r\n /** @internal */\r\n _transformMatrixR: Matrix;\r\n /** @internal */\r\n _multiviewSceneUbo: Nullable<UniformBuffer>;\r\n /** @internal */\r\n _multiviewSceneUboIsActive: boolean;\r\n /** @internal */\r\n _createMultiviewUbo(): void;\r\n /** @internal */\r\n _updateMultiviewUbo(viewR?: Matrix, projectionR?: Matrix): void;\r\n /** @internal */\r\n _renderMultiviewToSingleView(camera: Camera): void;\r\n }\r\n}\r\n\r\nfunction CreateMultiviewUbo(engine: AbstractEngine, name?: string, trackUBOsInFrame?: boolean) {\r\n const ubo = new UniformBuffer(engine, undefined, true, name, undefined, trackUBOsInFrame);\r\n ubo.addUniform(\"viewProjection\", 16);\r\n ubo.addUniform(\"viewProjectionR\", 16);\r\n ubo.addUniform(\"view\", 16);\r\n ubo.addUniform(\"projection\", 16);\r\n ubo.addUniform(\"vEyePosition\", 4);\r\n return ubo;\r\n}\r\n\r\nconst CurrentCreateSceneUniformBuffer = Scene.prototype.createSceneUniformBuffer;\r\n\r\nScene.prototype._transformMatrixR = Matrix.Zero();\r\nScene.prototype._multiviewSceneUbo = null;\r\nScene.prototype._multiviewSceneUboIsActive = false;\r\nScene.prototype._createMultiviewUbo = function () {\r\n this._multiviewSceneUbo = CreateMultiviewUbo(this.getEngine(), \"scene_multiview\");\r\n this._multiviewSceneUboIsActive = true;\r\n};\r\nScene.prototype.createSceneUniformBuffer = function (name?: string, trackUBOsInFrameOrOptions?: boolean | ICreateSceneUboOptions): UniformBuffer {\r\n const forceMono = typeof trackUBOsInFrameOrOptions === \"object\" && !!trackUBOsInFrameOrOptions?.forceMono;\r\n if (!forceMono && this._multiviewSceneUboIsActive) {\r\n const trackUBOsInFrame = typeof trackUBOsInFrameOrOptions === \"boolean\" ? trackUBOsInFrameOrOptions : trackUBOsInFrameOrOptions?.trackUBOsInFrame;\r\n return CreateMultiviewUbo(this.getEngine(), name, trackUBOsInFrame);\r\n }\r\n return CurrentCreateSceneUniformBuffer.bind(this)(name, trackUBOsInFrameOrOptions);\r\n};\r\nScene.prototype._updateMultiviewUbo = function (viewR?: Matrix, projectionR?: Matrix) {\r\n if (viewR && projectionR) {\r\n viewR.multiplyToRef(projectionR, this._transformMatrixR);\r\n }\r\n\r\n if (viewR && projectionR) {\r\n viewR.multiplyToRef(projectionR, TmpVectors.Matrix[0]);\r\n Frustum.GetRightPlaneToRef(TmpVectors.Matrix[0], this._frustumPlanes[3]); // Replace right plane by second camera right plane\r\n }\r\n\r\n if (this._multiviewSceneUbo) {\r\n this._multiviewSceneUbo.updateMatrix(\"viewProjection\", this.getTransformMatrix());\r\n this._multiviewSceneUbo.updateMatrix(\"viewProjectionR\", this._transformMatrixR);\r\n this._multiviewSceneUbo.updateMatrix(\"view\", this._viewMatrix);\r\n this._multiviewSceneUbo.updateMatrix(\"projection\", this._projectionMatrix);\r\n }\r\n};\r\nScene.prototype._renderMultiviewToSingleView = function (camera: Camera) {\r\n // Multiview is only able to be displayed directly for API's such as webXR\r\n // This displays a multiview image by rendering to the multiview image and then\r\n // copying the result into the sub cameras instead of rendering them and proceeding as normal from there\r\n\r\n // Render to a multiview texture\r\n camera._resizeOrCreateMultiviewTexture(\r\n camera._rigPostProcess && camera._rigPostProcess && camera._rigPostProcess.width > 0 ? camera._rigPostProcess.width : this.getEngine().getRenderWidth(true),\r\n camera._rigPostProcess && camera._rigPostProcess && camera._rigPostProcess.height > 0 ? camera._rigPostProcess.height : this.getEngine().getRenderHeight(true)\r\n );\r\n if (!this._multiviewSceneUbo) {\r\n this._createMultiviewUbo();\r\n }\r\n camera.outputRenderTarget = camera._multiviewTexture;\r\n this._renderForCamera(camera);\r\n camera.outputRenderTarget = null;\r\n\r\n // Consume the multiview texture through a shader for each eye\r\n for (let index = 0; index < camera._rigCameras.length; index++) {\r\n const engine = this.getEngine();\r\n this._activeCamera = camera._rigCameras[index];\r\n engine.setViewport(this._activeCamera.viewport);\r\n if (this.postProcessManager) {\r\n this.postProcessManager._prepareFrame();\r\n this.postProcessManager._finalizeFrame(this._activeCamera.isIntermediate);\r\n }\r\n }\r\n};\r\n"]}
@@ -793,13 +793,13 @@ export class AbstractEngine {
793
793
  */
794
794
  // Not mixed with Version for tooling purpose.
795
795
  static get NpmPackage() {
796
- return "babylonjs@8.51.1";
796
+ return "babylonjs@8.52.0";
797
797
  }
798
798
  /**
799
799
  * Returns the current version of the framework
800
800
  */
801
801
  static get Version() {
802
- return "8.51.1";
802
+ return "8.52.0";
803
803
  }
804
804
  /**
805
805
  * Gets the HTML canvas attached with the current webGL context