@babylonjs/core 6.14.2 → 6.16.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 (1070) hide show
  1. package/Actions/actionManager.js +8 -3
  2. package/Actions/actionManager.js.map +1 -1
  3. package/Behaviors/Cameras/framingBehavior.d.ts +2 -1
  4. package/Behaviors/Cameras/framingBehavior.js +3 -1
  5. package/Behaviors/Cameras/framingBehavior.js.map +1 -1
  6. package/Bones/skeleton.js +1 -0
  7. package/Bones/skeleton.js.map +1 -1
  8. package/Compute/computeEffect.js +1 -1
  9. package/Compute/computeEffect.js.map +1 -1
  10. package/{Materials/Node/nodeMaterialDecorator.d.ts → Decorators/nodeDecorator.d.ts} +6 -7
  11. package/{Materials/Node/nodeMaterialDecorator.js → Decorators/nodeDecorator.js} +3 -3
  12. package/Decorators/nodeDecorator.js.map +1 -0
  13. package/Engines/Processors/shaderCodeNode.js +1 -1
  14. package/Engines/Processors/shaderCodeNode.js.map +1 -1
  15. package/Engines/WebGL/webGL2ShaderProcessors.js +2 -1
  16. package/Engines/WebGL/webGL2ShaderProcessors.js.map +1 -1
  17. package/Engines/WebGPU/webgpuShaderProcessor.js +3 -0
  18. package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
  19. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +11 -10
  20. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  21. package/Engines/WebGPU/webgpuTextureHelper.js +3 -3
  22. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  23. package/Engines/nativeEngine.js +5 -4
  24. package/Engines/nativeEngine.js.map +1 -1
  25. package/Engines/thinEngine.d.ts +2 -0
  26. package/Engines/thinEngine.js +35 -4
  27. package/Engines/thinEngine.js.map +1 -1
  28. package/Engines/webgpuEngine.js +12 -2
  29. package/Engines/webgpuEngine.js.map +1 -1
  30. package/FlowGraph/Blocks/Data/flowGraphBinaryOpBlocks.d.ts +34 -0
  31. package/FlowGraph/Blocks/Data/flowGraphBinaryOpBlocks.js +29 -0
  32. package/FlowGraph/Blocks/Data/flowGraphBinaryOpBlocks.js.map +1 -0
  33. package/FlowGraph/Blocks/Data/index.d.ts +1 -0
  34. package/FlowGraph/Blocks/Data/index.js +2 -0
  35. package/FlowGraph/Blocks/Data/index.js.map +1 -0
  36. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.d.ts +23 -0
  37. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js +51 -0
  38. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js.map +1 -0
  39. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.d.ts +20 -0
  40. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.js +29 -0
  41. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.js.map +1 -0
  42. package/FlowGraph/Blocks/Event/index.d.ts +2 -0
  43. package/FlowGraph/Blocks/Event/index.js +3 -0
  44. package/FlowGraph/Blocks/Event/index.js.map +1 -0
  45. package/FlowGraph/Blocks/Execution/flowGraphForLoopBlock.d.ts +43 -0
  46. package/FlowGraph/Blocks/Execution/flowGraphForLoopBlock.js +40 -0
  47. package/FlowGraph/Blocks/Execution/flowGraphForLoopBlock.js.map +1 -0
  48. package/FlowGraph/Blocks/Execution/flowGraphLogBlock.d.ts +18 -0
  49. package/FlowGraph/Blocks/Execution/flowGraphLogBlock.js +21 -0
  50. package/FlowGraph/Blocks/Execution/flowGraphLogBlock.js.map +1 -0
  51. package/FlowGraph/Blocks/Execution/index.d.ts +2 -0
  52. package/FlowGraph/Blocks/Execution/index.js +3 -0
  53. package/FlowGraph/Blocks/Execution/index.js.map +1 -0
  54. package/FlowGraph/Blocks/index.d.ts +3 -0
  55. package/FlowGraph/Blocks/index.js +5 -0
  56. package/FlowGraph/Blocks/index.js.map +1 -0
  57. package/FlowGraph/flowGraph.d.ts +34 -0
  58. package/FlowGraph/flowGraph.js +54 -0
  59. package/FlowGraph/flowGraph.js.map +1 -0
  60. package/FlowGraph/flowGraphBlock.d.ts +33 -0
  61. package/FlowGraph/flowGraphBlock.js +39 -0
  62. package/FlowGraph/flowGraphBlock.js.map +1 -0
  63. package/FlowGraph/flowGraphConnection.d.ts +38 -0
  64. package/FlowGraph/flowGraphConnection.js +40 -0
  65. package/FlowGraph/flowGraphConnection.js.map +1 -0
  66. package/FlowGraph/flowGraphDataConnection.d.ts +15 -0
  67. package/FlowGraph/flowGraphDataConnection.js +30 -0
  68. package/FlowGraph/flowGraphDataConnection.js.map +1 -0
  69. package/FlowGraph/flowGraphEventBlock.d.ts +20 -0
  70. package/FlowGraph/flowGraphEventBlock.js +15 -0
  71. package/FlowGraph/flowGraphEventBlock.js.map +1 -0
  72. package/FlowGraph/flowGraphExecutionBlock.d.ts +24 -0
  73. package/FlowGraph/flowGraphExecutionBlock.js +27 -0
  74. package/FlowGraph/flowGraphExecutionBlock.js.map +1 -0
  75. package/FlowGraph/flowGraphSignalConnection.d.ts +14 -0
  76. package/FlowGraph/flowGraphSignalConnection.js +22 -0
  77. package/FlowGraph/flowGraphSignalConnection.js.map +1 -0
  78. package/FlowGraph/flowGraphWithOnDoneExecutionBlock.d.ts +7 -0
  79. package/FlowGraph/flowGraphWithOnDoneExecutionBlock.js +8 -0
  80. package/FlowGraph/flowGraphWithOnDoneExecutionBlock.js.map +1 -0
  81. package/FlowGraph/index.d.ts +6 -0
  82. package/FlowGraph/index.js +8 -0
  83. package/FlowGraph/index.js.map +1 -0
  84. package/Gizmos/lightGizmo.d.ts +5 -0
  85. package/Gizmos/lightGizmo.js +21 -7
  86. package/Gizmos/lightGizmo.js.map +1 -1
  87. package/Gizmos/planeRotationGizmo.d.ts +6 -0
  88. package/Gizmos/planeRotationGizmo.js +5 -1
  89. package/Gizmos/planeRotationGizmo.js.map +1 -1
  90. package/Gizmos/rotationGizmo.d.ts +8 -0
  91. package/Gizmos/rotationGizmo.js +15 -0
  92. package/Gizmos/rotationGizmo.js.map +1 -1
  93. package/Layers/layer.js +1 -1
  94. package/Layers/layer.js.map +1 -1
  95. package/Lights/Shadows/cascadedShadowGenerator.d.ts +2 -1
  96. package/Lights/Shadows/cascadedShadowGenerator.js +4 -3
  97. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  98. package/Lights/Shadows/shadowGenerator.d.ts +3 -1
  99. package/Lights/Shadows/shadowGenerator.js +4 -2
  100. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  101. package/Lights/directionalLight.d.ts +1 -1
  102. package/Lights/directionalLight.js.map +1 -1
  103. package/Lights/hemisphericLight.d.ts +1 -1
  104. package/Lights/hemisphericLight.js.map +1 -1
  105. package/Lights/light.d.ts +1 -1
  106. package/Lights/light.js.map +1 -1
  107. package/Lights/pointLight.d.ts +1 -1
  108. package/Lights/pointLight.js.map +1 -1
  109. package/Lights/spotLight.d.ts +1 -1
  110. package/Lights/spotLight.js.map +1 -1
  111. package/Loading/sceneLoader.js +2 -0
  112. package/Loading/sceneLoader.js.map +1 -1
  113. package/Materials/Node/Blocks/Dual/currentScreenBlock.js +13 -13
  114. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  115. package/Materials/Node/Blocks/Dual/fogBlock.js +6 -6
  116. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  117. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +11 -11
  118. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  119. package/Materials/Node/Blocks/Dual/lightBlock.js +16 -16
  120. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  121. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +27 -27
  122. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  123. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +1 -1
  124. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  125. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +8 -8
  126. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  127. package/Materials/Node/Blocks/Dual/textureBlock.js +28 -28
  128. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  129. package/Materials/Node/Blocks/Fragment/TBNBlock.js +3 -5
  130. package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -1
  131. package/Materials/Node/Blocks/Fragment/derivativeBlock.js +2 -2
  132. package/Materials/Node/Blocks/Fragment/derivativeBlock.js.map +1 -1
  133. package/Materials/Node/Blocks/Fragment/discardBlock.js +1 -1
  134. package/Materials/Node/Blocks/Fragment/discardBlock.js.map +1 -1
  135. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js +1 -1
  136. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js.map +1 -1
  137. package/Materials/Node/Blocks/Fragment/fragDepthBlock.js +1 -1
  138. package/Materials/Node/Blocks/Fragment/fragDepthBlock.js.map +1 -1
  139. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +15 -15
  140. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  141. package/Materials/Node/Blocks/Fragment/frontFacingBlock.js +1 -1
  142. package/Materials/Node/Blocks/Fragment/frontFacingBlock.js.map +1 -1
  143. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js +6 -6
  144. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
  145. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +13 -13
  146. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  147. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +13 -13
  148. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  149. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js +1 -1
  150. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js.map +1 -1
  151. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js +5 -5
  152. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -1
  153. package/Materials/Node/Blocks/Fragment/shadowMapBlock.js +7 -7
  154. package/Materials/Node/Blocks/Fragment/shadowMapBlock.js.map +1 -1
  155. package/Materials/Node/Blocks/Fragment/twirlBlock.js +3 -3
  156. package/Materials/Node/Blocks/Fragment/twirlBlock.js.map +1 -1
  157. package/Materials/Node/Blocks/Input/inputBlock.js +11 -11
  158. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  159. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +6 -6
  160. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  161. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +9 -9
  162. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  163. package/Materials/Node/Blocks/PBR/iridescenceBlock.js +1 -1
  164. package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -1
  165. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +47 -47
  166. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  167. package/Materials/Node/Blocks/PBR/reflectionBlock.js +9 -9
  168. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  169. package/Materials/Node/Blocks/PBR/refractionBlock.js +14 -14
  170. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  171. package/Materials/Node/Blocks/PBR/sheenBlock.js +4 -4
  172. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  173. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +1 -1
  174. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  175. package/Materials/Node/Blocks/Particle/particleTextureBlock.js +8 -8
  176. package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
  177. package/Materials/Node/Blocks/Teleport/index.d.ts +2 -0
  178. package/Materials/Node/Blocks/Teleport/index.js +3 -0
  179. package/Materials/Node/Blocks/Teleport/index.js.map +1 -0
  180. package/Materials/Node/Blocks/Teleport/teleportInBlock.d.ts +42 -0
  181. package/Materials/Node/Blocks/Teleport/teleportInBlock.js +83 -0
  182. package/Materials/Node/Blocks/Teleport/teleportInBlock.js.map +1 -0
  183. package/Materials/Node/Blocks/Teleport/teleportOutBlock.d.ts +59 -0
  184. package/Materials/Node/Blocks/Teleport/teleportOutBlock.js +122 -0
  185. package/Materials/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -0
  186. package/Materials/Node/Blocks/Vertex/bonesBlock.js +5 -5
  187. package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
  188. package/Materials/Node/Blocks/Vertex/instancesBlock.js +11 -11
  189. package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
  190. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js +11 -11
  191. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
  192. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +39 -39
  193. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  194. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js +3 -3
  195. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
  196. package/Materials/Node/Blocks/addBlock.js +1 -1
  197. package/Materials/Node/Blocks/addBlock.js.map +1 -1
  198. package/Materials/Node/Blocks/arcTan2Block.js +1 -1
  199. package/Materials/Node/Blocks/arcTan2Block.js.map +1 -1
  200. package/Materials/Node/Blocks/clampBlock.js +4 -4
  201. package/Materials/Node/Blocks/clampBlock.js.map +1 -1
  202. package/Materials/Node/Blocks/cloudBlock.js +7 -7
  203. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  204. package/Materials/Node/Blocks/colorMergerBlock.js +8 -8
  205. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  206. package/Materials/Node/Blocks/colorSplitterBlock.js +5 -5
  207. package/Materials/Node/Blocks/colorSplitterBlock.js.map +1 -1
  208. package/Materials/Node/Blocks/conditionalBlock.js +10 -10
  209. package/Materials/Node/Blocks/conditionalBlock.js.map +1 -1
  210. package/Materials/Node/Blocks/crossBlock.js +1 -1
  211. package/Materials/Node/Blocks/crossBlock.js.map +1 -1
  212. package/Materials/Node/Blocks/curveBlock.js +5 -5
  213. package/Materials/Node/Blocks/curveBlock.js.map +1 -1
  214. package/Materials/Node/Blocks/customBlock.js +4 -4
  215. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  216. package/Materials/Node/Blocks/desaturateBlock.js +4 -4
  217. package/Materials/Node/Blocks/desaturateBlock.js.map +1 -1
  218. package/Materials/Node/Blocks/distanceBlock.js +1 -1
  219. package/Materials/Node/Blocks/distanceBlock.js.map +1 -1
  220. package/Materials/Node/Blocks/divideBlock.js +1 -1
  221. package/Materials/Node/Blocks/divideBlock.js.map +1 -1
  222. package/Materials/Node/Blocks/dotBlock.js +1 -1
  223. package/Materials/Node/Blocks/dotBlock.js.map +1 -1
  224. package/Materials/Node/Blocks/elbowBlock.js +1 -1
  225. package/Materials/Node/Blocks/elbowBlock.js.map +1 -1
  226. package/Materials/Node/Blocks/fresnelBlock.js +1 -1
  227. package/Materials/Node/Blocks/fresnelBlock.js.map +1 -1
  228. package/Materials/Node/Blocks/gradientBlock.js +8 -8
  229. package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
  230. package/Materials/Node/Blocks/index.d.ts +1 -0
  231. package/Materials/Node/Blocks/index.js +1 -0
  232. package/Materials/Node/Blocks/index.js.map +1 -1
  233. package/Materials/Node/Blocks/lengthBlock.js +1 -1
  234. package/Materials/Node/Blocks/lengthBlock.js.map +1 -1
  235. package/Materials/Node/Blocks/lerpBlock.js +1 -1
  236. package/Materials/Node/Blocks/lerpBlock.js.map +1 -1
  237. package/Materials/Node/Blocks/matrixBuilderBlock.js +1 -1
  238. package/Materials/Node/Blocks/matrixBuilderBlock.js.map +1 -1
  239. package/Materials/Node/Blocks/matrixDeterminantBlock.js +1 -1
  240. package/Materials/Node/Blocks/matrixDeterminantBlock.js.map +1 -1
  241. package/Materials/Node/Blocks/matrixTransposeBlock.js +1 -1
  242. package/Materials/Node/Blocks/matrixTransposeBlock.js.map +1 -1
  243. package/Materials/Node/Blocks/maxBlock.js +1 -1
  244. package/Materials/Node/Blocks/maxBlock.js.map +1 -1
  245. package/Materials/Node/Blocks/meshAttributeExistsBlock.js +7 -7
  246. package/Materials/Node/Blocks/meshAttributeExistsBlock.js.map +1 -1
  247. package/Materials/Node/Blocks/minBlock.js +1 -1
  248. package/Materials/Node/Blocks/minBlock.js.map +1 -1
  249. package/Materials/Node/Blocks/modBlock.js +1 -1
  250. package/Materials/Node/Blocks/modBlock.js.map +1 -1
  251. package/Materials/Node/Blocks/multiplyBlock.js +1 -1
  252. package/Materials/Node/Blocks/multiplyBlock.js.map +1 -1
  253. package/Materials/Node/Blocks/nLerpBlock.js +1 -1
  254. package/Materials/Node/Blocks/nLerpBlock.js.map +1 -1
  255. package/Materials/Node/Blocks/negateBlock.js +1 -1
  256. package/Materials/Node/Blocks/negateBlock.js.map +1 -1
  257. package/Materials/Node/Blocks/normalBlendBlock.js +6 -6
  258. package/Materials/Node/Blocks/normalBlendBlock.js.map +1 -1
  259. package/Materials/Node/Blocks/normalizeBlock.js +1 -1
  260. package/Materials/Node/Blocks/normalizeBlock.js.map +1 -1
  261. package/Materials/Node/Blocks/oneMinusBlock.js +1 -1
  262. package/Materials/Node/Blocks/oneMinusBlock.js.map +1 -1
  263. package/Materials/Node/Blocks/posterizeBlock.js +1 -1
  264. package/Materials/Node/Blocks/posterizeBlock.js.map +1 -1
  265. package/Materials/Node/Blocks/powBlock.js +1 -1
  266. package/Materials/Node/Blocks/powBlock.js.map +1 -1
  267. package/Materials/Node/Blocks/randomNumberBlock.js +1 -1
  268. package/Materials/Node/Blocks/randomNumberBlock.js.map +1 -1
  269. package/Materials/Node/Blocks/reciprocalBlock.js +2 -2
  270. package/Materials/Node/Blocks/reciprocalBlock.js.map +1 -1
  271. package/Materials/Node/Blocks/reflectBlock.js +1 -1
  272. package/Materials/Node/Blocks/reflectBlock.js.map +1 -1
  273. package/Materials/Node/Blocks/refractBlock.js +1 -1
  274. package/Materials/Node/Blocks/refractBlock.js.map +1 -1
  275. package/Materials/Node/Blocks/remapBlock.js +4 -4
  276. package/Materials/Node/Blocks/remapBlock.js.map +1 -1
  277. package/Materials/Node/Blocks/replaceColorBlock.js +6 -6
  278. package/Materials/Node/Blocks/replaceColorBlock.js.map +1 -1
  279. package/Materials/Node/Blocks/rotate2dBlock.js +1 -1
  280. package/Materials/Node/Blocks/rotate2dBlock.js.map +1 -1
  281. package/Materials/Node/Blocks/scaleBlock.js +1 -1
  282. package/Materials/Node/Blocks/scaleBlock.js.map +1 -1
  283. package/Materials/Node/Blocks/simplexPerlin3DBlock.js +41 -41
  284. package/Materials/Node/Blocks/simplexPerlin3DBlock.js.map +1 -1
  285. package/Materials/Node/Blocks/smoothStepBlock.js +1 -1
  286. package/Materials/Node/Blocks/smoothStepBlock.js.map +1 -1
  287. package/Materials/Node/Blocks/stepBlock.js +1 -1
  288. package/Materials/Node/Blocks/stepBlock.js.map +1 -1
  289. package/Materials/Node/Blocks/subtractBlock.js +1 -1
  290. package/Materials/Node/Blocks/subtractBlock.js.map +1 -1
  291. package/Materials/Node/Blocks/transformBlock.js +13 -14
  292. package/Materials/Node/Blocks/transformBlock.js.map +1 -1
  293. package/Materials/Node/Blocks/triPlanarBlock.js +17 -17
  294. package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
  295. package/Materials/Node/Blocks/trigonometryBlock.js +2 -2
  296. package/Materials/Node/Blocks/trigonometryBlock.js.map +1 -1
  297. package/Materials/Node/Blocks/vectorMergerBlock.js +22 -22
  298. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  299. package/Materials/Node/Blocks/vectorSplitterBlock.js +8 -8
  300. package/Materials/Node/Blocks/vectorSplitterBlock.js.map +1 -1
  301. package/Materials/Node/Blocks/viewDirectionBlock.js +1 -1
  302. package/Materials/Node/Blocks/viewDirectionBlock.js.map +1 -1
  303. package/Materials/Node/Blocks/voronoiNoiseBlock.js +5 -5
  304. package/Materials/Node/Blocks/voronoiNoiseBlock.js.map +1 -1
  305. package/Materials/Node/Blocks/waveBlock.js +3 -4
  306. package/Materials/Node/Blocks/waveBlock.js.map +1 -1
  307. package/Materials/Node/Blocks/worleyNoise3DBlock.js +155 -155
  308. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  309. package/Materials/Node/index.d.ts +1 -1
  310. package/Materials/Node/index.js +1 -1
  311. package/Materials/Node/index.js.map +1 -1
  312. package/Materials/Node/nodeMaterial.d.ts +1 -0
  313. package/Materials/Node/nodeMaterial.js +50 -15
  314. package/Materials/Node/nodeMaterial.js.map +1 -1
  315. package/Materials/Node/nodeMaterialBlock.d.ts +14 -2
  316. package/Materials/Node/nodeMaterialBlock.js +34 -11
  317. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  318. package/Materials/Node/nodeMaterialBlockConnectionPoint.js +1 -1
  319. package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
  320. package/Materials/Node/nodeMaterialBuildState.js +36 -36
  321. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  322. package/Materials/Node/nodeMaterialBuildStateSharedData.js +4 -4
  323. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  324. package/Materials/Textures/Filtering/hdrFiltering.js +1 -0
  325. package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
  326. package/Materials/effect.js +1 -1
  327. package/Materials/effect.js.map +1 -1
  328. package/Materials/effectRenderer.d.ts +4 -0
  329. package/Materials/effectRenderer.js +8 -2
  330. package/Materials/effectRenderer.js.map +1 -1
  331. package/Materials/greasedLinePluginMaterial.d.ts +4 -0
  332. package/Materials/greasedLinePluginMaterial.js +12 -1
  333. package/Materials/greasedLinePluginMaterial.js.map +1 -1
  334. package/Materials/materialPluginManager.js +5 -5
  335. package/Materials/materialPluginManager.js.map +1 -1
  336. package/Materials/meshDebugPluginMaterial.d.ts +4 -15
  337. package/Materials/meshDebugPluginMaterial.js +8 -29
  338. package/Materials/meshDebugPluginMaterial.js.map +1 -1
  339. package/Materials/shadowDepthWrapper.js +5 -5
  340. package/Materials/shadowDepthWrapper.js.map +1 -1
  341. package/Meshes/Builders/boxBuilder.d.ts +31 -0
  342. package/Meshes/Builders/boxBuilder.js +65 -1
  343. package/Meshes/Builders/boxBuilder.js.map +1 -1
  344. package/Meshes/Builders/capsuleBuilder.js +3 -3
  345. package/Meshes/Builders/capsuleBuilder.js.map +1 -1
  346. package/Meshes/Builders/cylinderBuilder.js +2 -2
  347. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  348. package/Meshes/Builders/groundBuilder.js +2 -2
  349. package/Meshes/Builders/groundBuilder.js.map +1 -1
  350. package/Meshes/Builders/icoSphereBuilder.js +1 -1
  351. package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
  352. package/Meshes/Builders/linesBuilder.d.ts +1 -1
  353. package/Meshes/Builders/linesBuilder.js +1 -1
  354. package/Meshes/Builders/linesBuilder.js.map +1 -1
  355. package/Meshes/Builders/sphereBuilder.js +1 -1
  356. package/Meshes/Builders/sphereBuilder.js.map +1 -1
  357. package/Meshes/Builders/torusBuilder.js +1 -1
  358. package/Meshes/Builders/torusBuilder.js.map +1 -1
  359. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.d.ts +85 -0
  360. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js +210 -0
  361. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js.map +1 -0
  362. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.d.ts +68 -0
  363. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js +186 -0
  364. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js.map +1 -0
  365. package/Meshes/Node/Blocks/IntFloatConverterBlock.d.ts +35 -0
  366. package/Meshes/Node/Blocks/IntFloatConverterBlock.js +81 -0
  367. package/Meshes/Node/Blocks/IntFloatConverterBlock.js.map +1 -0
  368. package/Meshes/Node/Blocks/Matrices/alignBlock.d.ts +31 -0
  369. package/Meshes/Node/Blocks/Matrices/alignBlock.js +58 -0
  370. package/Meshes/Node/Blocks/Matrices/alignBlock.js.map +1 -0
  371. package/Meshes/Node/Blocks/Matrices/rotationXBlock.d.ts +28 -0
  372. package/Meshes/Node/Blocks/Matrices/rotationXBlock.js +53 -0
  373. package/Meshes/Node/Blocks/Matrices/rotationXBlock.js.map +1 -0
  374. package/Meshes/Node/Blocks/Matrices/rotationYBlock.d.ts +28 -0
  375. package/Meshes/Node/Blocks/Matrices/rotationYBlock.js +53 -0
  376. package/Meshes/Node/Blocks/Matrices/rotationYBlock.js.map +1 -0
  377. package/Meshes/Node/Blocks/Matrices/rotationZBlock.d.ts +28 -0
  378. package/Meshes/Node/Blocks/Matrices/rotationZBlock.js +53 -0
  379. package/Meshes/Node/Blocks/Matrices/rotationZBlock.js.map +1 -0
  380. package/Meshes/Node/Blocks/Matrices/scalingBlock.d.ts +28 -0
  381. package/Meshes/Node/Blocks/Matrices/scalingBlock.js +54 -0
  382. package/Meshes/Node/Blocks/Matrices/scalingBlock.js.map +1 -0
  383. package/Meshes/Node/Blocks/Matrices/translationBlock.d.ts +28 -0
  384. package/Meshes/Node/Blocks/Matrices/translationBlock.js +54 -0
  385. package/Meshes/Node/Blocks/Matrices/translationBlock.js.map +1 -0
  386. package/Meshes/Node/Blocks/Set/setColorsBlock.d.ts +44 -0
  387. package/Meshes/Node/Blocks/Set/setColorsBlock.js +91 -0
  388. package/Meshes/Node/Blocks/Set/setColorsBlock.js.map +1 -0
  389. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.d.ts +36 -0
  390. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.js +84 -0
  391. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.js.map +1 -0
  392. package/Meshes/Node/Blocks/Set/setNormalsBlock.d.ts +44 -0
  393. package/Meshes/Node/Blocks/Set/setNormalsBlock.js +91 -0
  394. package/Meshes/Node/Blocks/Set/setNormalsBlock.js.map +1 -0
  395. package/Meshes/Node/Blocks/Set/setPositionsBlock.d.ts +44 -0
  396. package/Meshes/Node/Blocks/Set/setPositionsBlock.js +82 -0
  397. package/Meshes/Node/Blocks/Set/setPositionsBlock.js.map +1 -0
  398. package/Meshes/Node/Blocks/Set/setTangentsBlock.d.ts +44 -0
  399. package/Meshes/Node/Blocks/Set/setTangentsBlock.js +91 -0
  400. package/Meshes/Node/Blocks/Set/setTangentsBlock.js.map +1 -0
  401. package/Meshes/Node/Blocks/Set/setUVsBlock.d.ts +55 -0
  402. package/Meshes/Node/Blocks/Set/setUVsBlock.js +145 -0
  403. package/Meshes/Node/Blocks/Set/setUVsBlock.js.map +1 -0
  404. package/Meshes/Node/Blocks/Sources/boxBlock.d.ts +68 -0
  405. package/Meshes/Node/Blocks/Sources/boxBlock.js +175 -0
  406. package/Meshes/Node/Blocks/Sources/boxBlock.js.map +1 -0
  407. package/Meshes/Node/Blocks/Sources/capsuleBlock.d.ts +52 -0
  408. package/Meshes/Node/Blocks/Sources/capsuleBlock.js +117 -0
  409. package/Meshes/Node/Blocks/Sources/capsuleBlock.js.map +1 -0
  410. package/Meshes/Node/Blocks/Sources/cylinderBlock.d.ts +64 -0
  411. package/Meshes/Node/Blocks/Sources/cylinderBlock.js +143 -0
  412. package/Meshes/Node/Blocks/Sources/cylinderBlock.js.map +1 -0
  413. package/Meshes/Node/Blocks/Sources/discBlock.d.ts +48 -0
  414. package/Meshes/Node/Blocks/Sources/discBlock.js +104 -0
  415. package/Meshes/Node/Blocks/Sources/discBlock.js.map +1 -0
  416. package/Meshes/Node/Blocks/Sources/gridBlock.d.ts +56 -0
  417. package/Meshes/Node/Blocks/Sources/gridBlock.js +125 -0
  418. package/Meshes/Node/Blocks/Sources/gridBlock.js.map +1 -0
  419. package/Meshes/Node/Blocks/Sources/icoSphereBlock.d.ts +56 -0
  420. package/Meshes/Node/Blocks/Sources/icoSphereBlock.js +120 -0
  421. package/Meshes/Node/Blocks/Sources/icoSphereBlock.js.map +1 -0
  422. package/Meshes/Node/Blocks/Sources/meshBlock.d.ts +38 -0
  423. package/Meshes/Node/Blocks/Sources/meshBlock.js +78 -0
  424. package/Meshes/Node/Blocks/Sources/meshBlock.js.map +1 -0
  425. package/Meshes/Node/Blocks/Sources/planeBlock.d.ts +48 -0
  426. package/Meshes/Node/Blocks/Sources/planeBlock.js +118 -0
  427. package/Meshes/Node/Blocks/Sources/planeBlock.js.map +1 -0
  428. package/Meshes/Node/Blocks/Sources/sphereBlock.d.ts +64 -0
  429. package/Meshes/Node/Blocks/Sources/sphereBlock.js +136 -0
  430. package/Meshes/Node/Blocks/Sources/sphereBlock.js.map +1 -0
  431. package/Meshes/Node/Blocks/Sources/torusBlock.d.ts +48 -0
  432. package/Meshes/Node/Blocks/Sources/torusBlock.js +104 -0
  433. package/Meshes/Node/Blocks/Sources/torusBlock.js.map +1 -0
  434. package/Meshes/Node/Blocks/Teleport/teleportInBlock.d.ts +37 -0
  435. package/Meshes/Node/Blocks/Teleport/teleportInBlock.js +75 -0
  436. package/Meshes/Node/Blocks/Teleport/teleportInBlock.js.map +1 -0
  437. package/Meshes/Node/Blocks/Teleport/teleportOutBlock.d.ts +50 -0
  438. package/Meshes/Node/Blocks/Teleport/teleportOutBlock.js +105 -0
  439. package/Meshes/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -0
  440. package/Meshes/Node/Blocks/computeNormalsBlock.d.ts +26 -0
  441. package/Meshes/Node/Blocks/computeNormalsBlock.js +49 -0
  442. package/Meshes/Node/Blocks/computeNormalsBlock.js.map +1 -0
  443. package/Meshes/Node/Blocks/conditionBlock.d.ts +72 -0
  444. package/Meshes/Node/Blocks/conditionBlock.js +174 -0
  445. package/Meshes/Node/Blocks/conditionBlock.js.map +1 -0
  446. package/Meshes/Node/Blocks/debugBlock.d.ts +34 -0
  447. package/Meshes/Node/Blocks/debugBlock.js +63 -0
  448. package/Meshes/Node/Blocks/debugBlock.js.map +1 -0
  449. package/Meshes/Node/Blocks/geometryElbowBlock.d.ts +31 -0
  450. package/Meshes/Node/Blocks/geometryElbowBlock.js +53 -0
  451. package/Meshes/Node/Blocks/geometryElbowBlock.js.map +1 -0
  452. package/Meshes/Node/Blocks/geometryInputBlock.d.ts +71 -0
  453. package/Meshes/Node/Blocks/geometryInputBlock.js +218 -0
  454. package/Meshes/Node/Blocks/geometryInputBlock.js.map +1 -0
  455. package/Meshes/Node/Blocks/geometryOutputBlock.d.ts +30 -0
  456. package/Meshes/Node/Blocks/geometryOutputBlock.js +42 -0
  457. package/Meshes/Node/Blocks/geometryOutputBlock.js.map +1 -0
  458. package/Meshes/Node/Blocks/geometryTransformBlock.d.ts +53 -0
  459. package/Meshes/Node/Blocks/geometryTransformBlock.js +134 -0
  460. package/Meshes/Node/Blocks/geometryTransformBlock.js.map +1 -0
  461. package/Meshes/Node/Blocks/geometryTrigonometryBlock.d.ts +77 -0
  462. package/Meshes/Node/Blocks/geometryTrigonometryBlock.js +248 -0
  463. package/Meshes/Node/Blocks/geometryTrigonometryBlock.js.map +1 -0
  464. package/Meshes/Node/Blocks/mapRangeBlock.d.ts +42 -0
  465. package/Meshes/Node/Blocks/mapRangeBlock.js +84 -0
  466. package/Meshes/Node/Blocks/mapRangeBlock.js.map +1 -0
  467. package/Meshes/Node/Blocks/mathBlock.d.ts +58 -0
  468. package/Meshes/Node/Blocks/mathBlock.js +233 -0
  469. package/Meshes/Node/Blocks/mathBlock.js.map +1 -0
  470. package/Meshes/Node/Blocks/mergeGeometryBlock.d.ts +55 -0
  471. package/Meshes/Node/Blocks/mergeGeometryBlock.js +123 -0
  472. package/Meshes/Node/Blocks/mergeGeometryBlock.js.map +1 -0
  473. package/Meshes/Node/Blocks/noiseBlock.d.ts +49 -0
  474. package/Meshes/Node/Blocks/noiseBlock.js +149 -0
  475. package/Meshes/Node/Blocks/noiseBlock.js.map +1 -0
  476. package/Meshes/Node/Blocks/normalizeVectorBlock.d.ts +27 -0
  477. package/Meshes/Node/Blocks/normalizeVectorBlock.js +51 -0
  478. package/Meshes/Node/Blocks/normalizeVectorBlock.js.map +1 -0
  479. package/Meshes/Node/Blocks/randomBlock.d.ts +31 -0
  480. package/Meshes/Node/Blocks/randomBlock.js +99 -0
  481. package/Meshes/Node/Blocks/randomBlock.js.map +1 -0
  482. package/Meshes/Node/Blocks/vectorConverterBlock.d.ts +84 -0
  483. package/Meshes/Node/Blocks/vectorConverterBlock.js +238 -0
  484. package/Meshes/Node/Blocks/vectorConverterBlock.js.map +1 -0
  485. package/Meshes/Node/Enums/nodeGeometryConnectionPointTypes.d.ts +27 -0
  486. package/Meshes/Node/Enums/nodeGeometryConnectionPointTypes.js +29 -0
  487. package/Meshes/Node/Enums/nodeGeometryConnectionPointTypes.js.map +1 -0
  488. package/Meshes/Node/Enums/nodeGeometryContextualSources.d.ts +33 -0
  489. package/Meshes/Node/Enums/nodeGeometryContextualSources.js +35 -0
  490. package/Meshes/Node/Enums/nodeGeometryContextualSources.js.map +1 -0
  491. package/Meshes/Node/Interfaces/nodeGeometryExecutionContext.d.ts +25 -0
  492. package/Meshes/Node/Interfaces/nodeGeometryExecutionContext.js +2 -0
  493. package/Meshes/Node/Interfaces/nodeGeometryExecutionContext.js.map +1 -0
  494. package/Meshes/Node/index.d.ts +49 -0
  495. package/Meshes/Node/index.js +50 -0
  496. package/Meshes/Node/index.js.map +1 -0
  497. package/Meshes/Node/nodeGeometry.d.ts +180 -0
  498. package/Meshes/Node/nodeGeometry.js +529 -0
  499. package/Meshes/Node/nodeGeometry.js.map +1 -0
  500. package/Meshes/Node/nodeGeometryBlock.d.ts +166 -0
  501. package/Meshes/Node/nodeGeometryBlock.js +432 -0
  502. package/Meshes/Node/nodeGeometryBlock.js.map +1 -0
  503. package/Meshes/Node/nodeGeometryBlockConnectionPoint.d.ts +176 -0
  504. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js +305 -0
  505. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js.map +1 -0
  506. package/Meshes/Node/nodeGeometryBuildState.d.ts +57 -0
  507. package/Meshes/Node/nodeGeometryBuildState.js +178 -0
  508. package/Meshes/Node/nodeGeometryBuildState.js.map +1 -0
  509. package/Meshes/index.d.ts +1 -0
  510. package/Meshes/index.js +1 -0
  511. package/Meshes/index.js.map +1 -1
  512. package/Meshes/mesh.vertexData.d.ts +37 -2
  513. package/Meshes/mesh.vertexData.js +425 -95
  514. package/Meshes/mesh.vertexData.js.map +1 -1
  515. package/Meshes/meshUVSpaceRenderer.js +1 -0
  516. package/Meshes/meshUVSpaceRenderer.js.map +1 -1
  517. package/Particles/IGPUParticleSystemPlatform.d.ts +1 -0
  518. package/Particles/IGPUParticleSystemPlatform.js.map +1 -1
  519. package/Particles/computeShaderParticleSystem.d.ts +1 -0
  520. package/Particles/computeShaderParticleSystem.js +5 -0
  521. package/Particles/computeShaderParticleSystem.js.map +1 -1
  522. package/Particles/gpuParticleSystem.js +11 -1
  523. package/Particles/gpuParticleSystem.js.map +1 -1
  524. package/Particles/webgl2ParticleSystem.d.ts +1 -0
  525. package/Particles/webgl2ParticleSystem.js +5 -0
  526. package/Particles/webgl2ParticleSystem.js.map +1 -1
  527. package/Physics/v2/IPhysicsEnginePlugin.d.ts +20 -2
  528. package/Physics/v2/IPhysicsEnginePlugin.js +8 -0
  529. package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
  530. package/Physics/v2/Plugins/havokPlugin.d.ts +27 -2
  531. package/Physics/v2/Plugins/havokPlugin.js +98 -11
  532. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  533. package/Physics/v2/physicsAggregate.d.ts +4 -0
  534. package/Physics/v2/physicsAggregate.js +3 -0
  535. package/Physics/v2/physicsAggregate.js.map +1 -1
  536. package/Physics/v2/physicsBody.d.ts +7 -0
  537. package/Physics/v2/physicsBody.js +10 -0
  538. package/Physics/v2/physicsBody.js.map +1 -1
  539. package/Physics/v2/physicsShape.d.ts +3 -0
  540. package/Physics/v2/physicsShape.js +11 -0
  541. package/Physics/v2/physicsShape.js.map +1 -1
  542. package/PostProcesses/RenderPipeline/postProcessRenderEffect.js +6 -4
  543. package/PostProcesses/RenderPipeline/postProcessRenderEffect.js.map +1 -1
  544. package/PostProcesses/blurPostProcess.js +5 -5
  545. package/PostProcesses/blurPostProcess.js.map +1 -1
  546. package/PostProcesses/depthOfFieldBlurPostProcess.js +1 -1
  547. package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
  548. package/PostProcesses/imageProcessingPostProcess.js +1 -1
  549. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  550. package/Rendering/fluidRenderer/fluidRenderer.d.ts +0 -1
  551. package/Rendering/fluidRenderer/fluidRenderer.js +0 -1
  552. package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -1
  553. package/Shaders/ShadersInclude/backgroundFragmentDeclaration.js +16 -8
  554. package/Shaders/ShadersInclude/backgroundFragmentDeclaration.js.map +1 -1
  555. package/Shaders/ShadersInclude/backgroundUboDeclaration.js +9 -4
  556. package/Shaders/ShadersInclude/backgroundUboDeclaration.js.map +1 -1
  557. package/Shaders/ShadersInclude/backgroundVertexDeclaration.js +8 -4
  558. package/Shaders/ShadersInclude/backgroundVertexDeclaration.js.map +1 -1
  559. package/Shaders/ShadersInclude/bakedVertexAnimation.js +20 -10
  560. package/Shaders/ShadersInclude/bakedVertexAnimation.js.map +1 -1
  561. package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.js +7 -3
  562. package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.js.map +1 -1
  563. package/Shaders/ShadersInclude/bayerDitherFunctions.js +9 -1
  564. package/Shaders/ShadersInclude/bayerDitherFunctions.js.map +1 -1
  565. package/Shaders/ShadersInclude/bonesDeclaration.js +13 -6
  566. package/Shaders/ShadersInclude/bonesDeclaration.js.map +1 -1
  567. package/Shaders/ShadersInclude/bonesVertex.js +36 -18
  568. package/Shaders/ShadersInclude/bonesVertex.js.map +1 -1
  569. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js +2 -1
  570. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js.map +1 -1
  571. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js +6 -3
  572. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js.map +1 -1
  573. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js +4 -2
  574. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js.map +1 -1
  575. package/Shaders/ShadersInclude/bumpFragment.js +40 -20
  576. package/Shaders/ShadersInclude/bumpFragment.js.map +1 -1
  577. package/Shaders/ShadersInclude/bumpFragmentFunctions.js +11 -1
  578. package/Shaders/ShadersInclude/bumpFragmentFunctions.js.map +1 -1
  579. package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js +57 -7
  580. package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js.map +1 -1
  581. package/Shaders/ShadersInclude/bumpVertex.js +2 -1
  582. package/Shaders/ShadersInclude/bumpVertex.js.map +1 -1
  583. package/Shaders/ShadersInclude/bumpVertexDeclaration.js +2 -1
  584. package/Shaders/ShadersInclude/bumpVertexDeclaration.js.map +1 -1
  585. package/Shaders/ShadersInclude/clipPlaneFragment.js +20 -7
  586. package/Shaders/ShadersInclude/clipPlaneFragment.js.map +1 -1
  587. package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration.js +12 -6
  588. package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration.js.map +1 -1
  589. package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration2.js +12 -6
  590. package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration2.js.map +1 -1
  591. package/Shaders/ShadersInclude/clipPlaneVertex.js +12 -6
  592. package/Shaders/ShadersInclude/clipPlaneVertex.js.map +1 -1
  593. package/Shaders/ShadersInclude/clipPlaneVertexDeclaration.js +12 -6
  594. package/Shaders/ShadersInclude/clipPlaneVertexDeclaration.js.map +1 -1
  595. package/Shaders/ShadersInclude/clipPlaneVertexDeclaration2.js +12 -6
  596. package/Shaders/ShadersInclude/clipPlaneVertexDeclaration2.js.map +1 -1
  597. package/Shaders/ShadersInclude/decalFragment.js +6 -3
  598. package/Shaders/ShadersInclude/decalFragment.js.map +1 -1
  599. package/Shaders/ShadersInclude/decalFragmentDeclaration.js +2 -1
  600. package/Shaders/ShadersInclude/decalFragmentDeclaration.js.map +1 -1
  601. package/Shaders/ShadersInclude/decalVertexDeclaration.js +2 -1
  602. package/Shaders/ShadersInclude/decalVertexDeclaration.js.map +1 -1
  603. package/Shaders/ShadersInclude/defaultFragmentDeclaration.js +48 -24
  604. package/Shaders/ShadersInclude/defaultFragmentDeclaration.js.map +1 -1
  605. package/Shaders/ShadersInclude/defaultUboDeclaration.js +5 -2
  606. package/Shaders/ShadersInclude/defaultUboDeclaration.js.map +1 -1
  607. package/Shaders/ShadersInclude/defaultVertexDeclaration.js +22 -11
  608. package/Shaders/ShadersInclude/defaultVertexDeclaration.js.map +1 -1
  609. package/Shaders/ShadersInclude/depthPrePass.js +2 -1
  610. package/Shaders/ShadersInclude/depthPrePass.js.map +1 -1
  611. package/Shaders/ShadersInclude/diffusionProfile.js +1 -1
  612. package/Shaders/ShadersInclude/diffusionProfile.js.map +1 -1
  613. package/Shaders/ShadersInclude/fibonacci.js +4 -1
  614. package/Shaders/ShadersInclude/fibonacci.js.map +1 -1
  615. package/Shaders/ShadersInclude/fogFragment.js +6 -3
  616. package/Shaders/ShadersInclude/fogFragment.js.map +1 -1
  617. package/Shaders/ShadersInclude/fogFragmentDeclaration.js +9 -1
  618. package/Shaders/ShadersInclude/fogFragmentDeclaration.js.map +1 -1
  619. package/Shaders/ShadersInclude/fogVertex.js +2 -1
  620. package/Shaders/ShadersInclude/fogVertex.js.map +1 -1
  621. package/Shaders/ShadersInclude/fogVertexDeclaration.js +2 -1
  622. package/Shaders/ShadersInclude/fogVertexDeclaration.js.map +1 -1
  623. package/Shaders/ShadersInclude/fresnelFunction.js +3 -1
  624. package/Shaders/ShadersInclude/fresnelFunction.js.map +1 -1
  625. package/Shaders/ShadersInclude/geometryVertexDeclaration.js +1 -1
  626. package/Shaders/ShadersInclude/geometryVertexDeclaration.js.map +1 -1
  627. package/Shaders/ShadersInclude/harmonicsFunctions.js +20 -2
  628. package/Shaders/ShadersInclude/harmonicsFunctions.js.map +1 -1
  629. package/Shaders/ShadersInclude/hdrFilteringFunctions.js +48 -17
  630. package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  631. package/Shaders/ShadersInclude/helperFunctions.js +98 -28
  632. package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
  633. package/Shaders/ShadersInclude/imageProcessingCompatibility.js +2 -1
  634. package/Shaders/ShadersInclude/imageProcessingCompatibility.js.map +1 -1
  635. package/Shaders/ShadersInclude/imageProcessingDeclaration.js +18 -9
  636. package/Shaders/ShadersInclude/imageProcessingDeclaration.js.map +1 -1
  637. package/Shaders/ShadersInclude/imageProcessingFunctions.js +71 -28
  638. package/Shaders/ShadersInclude/imageProcessingFunctions.js.map +1 -1
  639. package/Shaders/ShadersInclude/importanceSampling.js +4 -1
  640. package/Shaders/ShadersInclude/importanceSampling.js.map +1 -1
  641. package/Shaders/ShadersInclude/instancesDeclaration.js +14 -7
  642. package/Shaders/ShadersInclude/instancesDeclaration.js.map +1 -1
  643. package/Shaders/ShadersInclude/instancesVertex.js +12 -6
  644. package/Shaders/ShadersInclude/instancesVertex.js.map +1 -1
  645. package/Shaders/ShadersInclude/kernelBlurFragment.js +9 -4
  646. package/Shaders/ShadersInclude/kernelBlurFragment.js.map +1 -1
  647. package/Shaders/ShadersInclude/kernelBlurFragment2.js +8 -4
  648. package/Shaders/ShadersInclude/kernelBlurFragment2.js.map +1 -1
  649. package/Shaders/ShadersInclude/lightFragment.js +186 -93
  650. package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
  651. package/Shaders/ShadersInclude/lightFragmentDeclaration.js +54 -22
  652. package/Shaders/ShadersInclude/lightFragmentDeclaration.js.map +1 -1
  653. package/Shaders/ShadersInclude/lightUboDeclaration.js +51 -20
  654. package/Shaders/ShadersInclude/lightUboDeclaration.js.map +1 -1
  655. package/Shaders/ShadersInclude/lightVxFragmentDeclaration.js +18 -9
  656. package/Shaders/ShadersInclude/lightVxFragmentDeclaration.js.map +1 -1
  657. package/Shaders/ShadersInclude/lightVxUboDeclaration.js +15 -7
  658. package/Shaders/ShadersInclude/lightVxUboDeclaration.js.map +1 -1
  659. package/Shaders/ShadersInclude/lightsFragmentFunctions.js +48 -20
  660. package/Shaders/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
  661. package/Shaders/ShadersInclude/logDepthDeclaration.js +2 -1
  662. package/Shaders/ShadersInclude/logDepthDeclaration.js.map +1 -1
  663. package/Shaders/ShadersInclude/logDepthFragment.js +2 -1
  664. package/Shaders/ShadersInclude/logDepthFragment.js.map +1 -1
  665. package/Shaders/ShadersInclude/logDepthVertex.js +2 -1
  666. package/Shaders/ShadersInclude/logDepthVertex.js.map +1 -1
  667. package/Shaders/ShadersInclude/mainUVVaryingDeclaration.js +2 -1
  668. package/Shaders/ShadersInclude/mainUVVaryingDeclaration.js.map +1 -1
  669. package/Shaders/ShadersInclude/meshFragmentDeclaration.js +2 -1
  670. package/Shaders/ShadersInclude/meshFragmentDeclaration.js.map +1 -1
  671. package/Shaders/ShadersInclude/meshUboDeclaration.js +5 -2
  672. package/Shaders/ShadersInclude/meshUboDeclaration.js.map +1 -1
  673. package/Shaders/ShadersInclude/meshVertexDeclaration.js +2 -1
  674. package/Shaders/ShadersInclude/meshVertexDeclaration.js.map +1 -1
  675. package/Shaders/ShadersInclude/morphTargetsVertex.js +16 -8
  676. package/Shaders/ShadersInclude/morphTargetsVertex.js.map +1 -1
  677. package/Shaders/ShadersInclude/morphTargetsVertexDeclaration.js +8 -4
  678. package/Shaders/ShadersInclude/morphTargetsVertexDeclaration.js.map +1 -1
  679. package/Shaders/ShadersInclude/morphTargetsVertexGlobal.js +2 -1
  680. package/Shaders/ShadersInclude/morphTargetsVertexGlobal.js.map +1 -1
  681. package/Shaders/ShadersInclude/morphTargetsVertexGlobalDeclaration.js +7 -2
  682. package/Shaders/ShadersInclude/morphTargetsVertexGlobalDeclaration.js.map +1 -1
  683. package/Shaders/ShadersInclude/oitDeclaration.js +5 -2
  684. package/Shaders/ShadersInclude/oitDeclaration.js.map +1 -1
  685. package/Shaders/ShadersInclude/oitFragment.js +24 -12
  686. package/Shaders/ShadersInclude/oitFragment.js.map +1 -1
  687. package/Shaders/ShadersInclude/packingFunctions.js +4 -1
  688. package/Shaders/ShadersInclude/packingFunctions.js.map +1 -1
  689. package/Shaders/ShadersInclude/pbrBRDFFunctions.js +118 -42
  690. package/Shaders/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  691. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +49 -20
  692. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
  693. package/Shaders/ShadersInclude/pbrBlockAlphaFresnel.js +25 -8
  694. package/Shaders/ShadersInclude/pbrBlockAlphaFresnel.js.map +1 -1
  695. package/Shaders/ShadersInclude/pbrBlockAmbientOcclusion.js +26 -11
  696. package/Shaders/ShadersInclude/pbrBlockAmbientOcclusion.js.map +1 -1
  697. package/Shaders/ShadersInclude/pbrBlockAnisotropic.js +32 -12
  698. package/Shaders/ShadersInclude/pbrBlockAnisotropic.js.map +1 -1
  699. package/Shaders/ShadersInclude/pbrBlockClearcoat.js +194 -84
  700. package/Shaders/ShadersInclude/pbrBlockClearcoat.js.map +1 -1
  701. package/Shaders/ShadersInclude/pbrBlockDirectLighting.js +12 -6
  702. package/Shaders/ShadersInclude/pbrBlockDirectLighting.js.map +1 -1
  703. package/Shaders/ShadersInclude/pbrBlockFinalColorComposition.js +30 -14
  704. package/Shaders/ShadersInclude/pbrBlockFinalColorComposition.js.map +1 -1
  705. package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js +56 -28
  706. package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
  707. package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js +18 -9
  708. package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -1
  709. package/Shaders/ShadersInclude/pbrBlockGeometryInfo.js +14 -7
  710. package/Shaders/ShadersInclude/pbrBlockGeometryInfo.js.map +1 -1
  711. package/Shaders/ShadersInclude/pbrBlockImageProcessing.js +8 -4
  712. package/Shaders/ShadersInclude/pbrBlockImageProcessing.js.map +1 -1
  713. package/Shaders/ShadersInclude/pbrBlockIridescence.js +36 -15
  714. package/Shaders/ShadersInclude/pbrBlockIridescence.js.map +1 -1
  715. package/Shaders/ShadersInclude/pbrBlockLightmapInit.js +8 -4
  716. package/Shaders/ShadersInclude/pbrBlockLightmapInit.js.map +1 -1
  717. package/Shaders/ShadersInclude/pbrBlockNormalFinal.js +8 -4
  718. package/Shaders/ShadersInclude/pbrBlockNormalFinal.js.map +1 -1
  719. package/Shaders/ShadersInclude/pbrBlockNormalGeometric.js +10 -5
  720. package/Shaders/ShadersInclude/pbrBlockNormalGeometric.js.map +1 -1
  721. package/Shaders/ShadersInclude/pbrBlockReflectance.js +12 -6
  722. package/Shaders/ShadersInclude/pbrBlockReflectance.js.map +1 -1
  723. package/Shaders/ShadersInclude/pbrBlockReflectance0.js +8 -4
  724. package/Shaders/ShadersInclude/pbrBlockReflectance0.js.map +1 -1
  725. package/Shaders/ShadersInclude/pbrBlockReflection.js +197 -77
  726. package/Shaders/ShadersInclude/pbrBlockReflection.js.map +1 -1
  727. package/Shaders/ShadersInclude/pbrBlockReflectivity.js +79 -36
  728. package/Shaders/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
  729. package/Shaders/ShadersInclude/pbrBlockSheen.js +145 -60
  730. package/Shaders/ShadersInclude/pbrBlockSheen.js.map +1 -1
  731. package/Shaders/ShadersInclude/pbrBlockSubSurface.js +226 -100
  732. package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  733. package/Shaders/ShadersInclude/pbrDebug.js +146 -67
  734. package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
  735. package/Shaders/ShadersInclude/pbrDirectLightingFalloffFunctions.js +34 -8
  736. package/Shaders/ShadersInclude/pbrDirectLightingFalloffFunctions.js.map +1 -1
  737. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +53 -22
  738. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  739. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js +12 -5
  740. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
  741. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +88 -44
  742. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
  743. package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js +10 -5
  744. package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js.map +1 -1
  745. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +30 -15
  746. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  747. package/Shaders/ShadersInclude/pbrHelperFunctions.js +27 -8
  748. package/Shaders/ShadersInclude/pbrHelperFunctions.js.map +1 -1
  749. package/Shaders/ShadersInclude/pbrIBLFunctions.js +9 -4
  750. package/Shaders/ShadersInclude/pbrIBLFunctions.js.map +1 -1
  751. package/Shaders/ShadersInclude/pbrUboDeclaration.js +4 -2
  752. package/Shaders/ShadersInclude/pbrUboDeclaration.js.map +1 -1
  753. package/Shaders/ShadersInclude/pbrVertexDeclaration.js +64 -32
  754. package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
  755. package/Shaders/ShadersInclude/pointCloudVertex.js +2 -1
  756. package/Shaders/ShadersInclude/pointCloudVertex.js.map +1 -1
  757. package/Shaders/ShadersInclude/pointCloudVertexDeclaration.js +2 -1
  758. package/Shaders/ShadersInclude/pointCloudVertexDeclaration.js.map +1 -1
  759. package/Shaders/ShadersInclude/prePassVertex.js +24 -12
  760. package/Shaders/ShadersInclude/prePassVertex.js.map +1 -1
  761. package/Shaders/ShadersInclude/prePassVertexDeclaration.js +4 -2
  762. package/Shaders/ShadersInclude/prePassVertexDeclaration.js.map +1 -1
  763. package/Shaders/ShadersInclude/reflectionFunction.js +52 -17
  764. package/Shaders/ShadersInclude/reflectionFunction.js.map +1 -1
  765. package/Shaders/ShadersInclude/samplerFragmentAlternateDeclaration.js +2 -1
  766. package/Shaders/ShadersInclude/samplerFragmentAlternateDeclaration.js.map +1 -1
  767. package/Shaders/ShadersInclude/samplerFragmentDeclaration.js +4 -2
  768. package/Shaders/ShadersInclude/samplerFragmentDeclaration.js.map +1 -1
  769. package/Shaders/ShadersInclude/samplerVertexDeclaration.js +2 -1
  770. package/Shaders/ShadersInclude/samplerVertexDeclaration.js.map +1 -1
  771. package/Shaders/ShadersInclude/samplerVertexImplementation.js +18 -6
  772. package/Shaders/ShadersInclude/samplerVertexImplementation.js.map +1 -1
  773. package/Shaders/ShadersInclude/sceneFragmentDeclaration.js +6 -3
  774. package/Shaders/ShadersInclude/sceneFragmentDeclaration.js.map +1 -1
  775. package/Shaders/ShadersInclude/sceneUboDeclaration.js +6 -3
  776. package/Shaders/ShadersInclude/sceneUboDeclaration.js.map +1 -1
  777. package/Shaders/ShadersInclude/sceneVertexDeclaration.js +6 -3
  778. package/Shaders/ShadersInclude/sceneVertexDeclaration.js.map +1 -1
  779. package/Shaders/ShadersInclude/screenSpaceRayTrace.js +109 -24
  780. package/Shaders/ShadersInclude/screenSpaceRayTrace.js.map +1 -1
  781. package/Shaders/ShadersInclude/shadowMapFragment.js +20 -10
  782. package/Shaders/ShadersInclude/shadowMapFragment.js.map +1 -1
  783. package/Shaders/ShadersInclude/shadowMapFragmentExtraDeclaration.js +10 -5
  784. package/Shaders/ShadersInclude/shadowMapFragmentExtraDeclaration.js.map +1 -1
  785. package/Shaders/ShadersInclude/shadowMapFragmentSoftTransparentShadow.js +2 -1
  786. package/Shaders/ShadersInclude/shadowMapFragmentSoftTransparentShadow.js.map +1 -1
  787. package/Shaders/ShadersInclude/shadowMapUboDeclaration.js +2 -1
  788. package/Shaders/ShadersInclude/shadowMapUboDeclaration.js.map +1 -1
  789. package/Shaders/ShadersInclude/shadowMapVertexExtraDeclaration.js +8 -4
  790. package/Shaders/ShadersInclude/shadowMapVertexExtraDeclaration.js.map +1 -1
  791. package/Shaders/ShadersInclude/shadowMapVertexMetric.js +12 -6
  792. package/Shaders/ShadersInclude/shadowMapVertexMetric.js.map +1 -1
  793. package/Shaders/ShadersInclude/shadowMapVertexNormalBias.js +6 -3
  794. package/Shaders/ShadersInclude/shadowMapVertexNormalBias.js.map +1 -1
  795. package/Shaders/ShadersInclude/shadowsFragmentFunctions.js +311 -54
  796. package/Shaders/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
  797. package/Shaders/ShadersInclude/shadowsVertex.js +14 -7
  798. package/Shaders/ShadersInclude/shadowsVertex.js.map +1 -1
  799. package/Shaders/ShadersInclude/subSurfaceScatteringFunctions.js +2 -1
  800. package/Shaders/ShadersInclude/subSurfaceScatteringFunctions.js.map +1 -1
  801. package/Shaders/ShadersInclude/uvAttributeDeclaration.js +2 -1
  802. package/Shaders/ShadersInclude/uvAttributeDeclaration.js.map +1 -1
  803. package/Shaders/ShadersInclude/uvVariableDeclaration.js +4 -2
  804. package/Shaders/ShadersInclude/uvVariableDeclaration.js.map +1 -1
  805. package/Shaders/ShadersInclude/vertexColorMixing.js +8 -4
  806. package/Shaders/ShadersInclude/vertexColorMixing.js.map +1 -1
  807. package/Shaders/anaglyph.fragment.js +4 -2
  808. package/Shaders/anaglyph.fragment.js.map +1 -1
  809. package/Shaders/background.fragment.js +133 -62
  810. package/Shaders/background.fragment.js.map +1 -1
  811. package/Shaders/background.vertex.js +63 -30
  812. package/Shaders/background.vertex.js.map +1 -1
  813. package/Shaders/blackAndWhite.fragment.js +5 -2
  814. package/Shaders/blackAndWhite.fragment.js.map +1 -1
  815. package/Shaders/bloomMerge.fragment.js +5 -2
  816. package/Shaders/bloomMerge.fragment.js.map +1 -1
  817. package/Shaders/blur.fragment.js +6 -2
  818. package/Shaders/blur.fragment.js.map +1 -1
  819. package/Shaders/boundingBoxRenderer.fragment.js +4 -2
  820. package/Shaders/boundingBoxRenderer.fragment.js.map +1 -1
  821. package/Shaders/boundingBoxRenderer.vertex.js +12 -6
  822. package/Shaders/boundingBoxRenderer.vertex.js.map +1 -1
  823. package/Shaders/chromaticAberration.fragment.js +8 -2
  824. package/Shaders/chromaticAberration.fragment.js.map +1 -1
  825. package/Shaders/circleOfConfusion.fragment.js +9 -4
  826. package/Shaders/circleOfConfusion.fragment.js.map +1 -1
  827. package/Shaders/clearQuad.fragment.js +2 -1
  828. package/Shaders/clearQuad.fragment.js.map +1 -1
  829. package/Shaders/clearQuad.vertex.js +11 -4
  830. package/Shaders/clearQuad.vertex.js.map +1 -1
  831. package/Shaders/color.fragment.js +10 -5
  832. package/Shaders/color.fragment.js.map +1 -1
  833. package/Shaders/color.vertex.js +18 -9
  834. package/Shaders/color.vertex.js.map +1 -1
  835. package/Shaders/colorCorrection.fragment.js +10 -2
  836. package/Shaders/colorCorrection.fragment.js.map +1 -1
  837. package/Shaders/convolution.fragment.js +23 -2
  838. package/Shaders/convolution.fragment.js.map +1 -1
  839. package/Shaders/copyTextureToTexture.fragment.js +12 -5
  840. package/Shaders/copyTextureToTexture.fragment.js.map +1 -1
  841. package/Shaders/default.fragment.js +142 -71
  842. package/Shaders/default.fragment.js.map +1 -1
  843. package/Shaders/default.vertex.js +58 -29
  844. package/Shaders/default.vertex.js.map +1 -1
  845. package/Shaders/depth.fragment.js +24 -11
  846. package/Shaders/depth.fragment.js.map +1 -1
  847. package/Shaders/depth.vertex.js +35 -17
  848. package/Shaders/depth.vertex.js.map +1 -1
  849. package/Shaders/depthBoxBlur.fragment.js +6 -2
  850. package/Shaders/depthBoxBlur.fragment.js.map +1 -1
  851. package/Shaders/depthOfField.fragment.js +28 -3
  852. package/Shaders/depthOfField.fragment.js.map +1 -1
  853. package/Shaders/depthOfFieldMerge.fragment.js +17 -8
  854. package/Shaders/depthOfFieldMerge.fragment.js.map +1 -1
  855. package/Shaders/displayPass.fragment.js +4 -2
  856. package/Shaders/displayPass.fragment.js.map +1 -1
  857. package/Shaders/extractHighlights.fragment.js +4 -2
  858. package/Shaders/extractHighlights.fragment.js.map +1 -1
  859. package/Shaders/filter.fragment.js +4 -2
  860. package/Shaders/filter.fragment.js.map +1 -1
  861. package/Shaders/fluidRenderingBilateralBlur.fragment.js +4 -1
  862. package/Shaders/fluidRenderingBilateralBlur.fragment.js.map +1 -1
  863. package/Shaders/fluidRenderingParticleDepth.fragment.js +22 -11
  864. package/Shaders/fluidRenderingParticleDepth.fragment.js.map +1 -1
  865. package/Shaders/fluidRenderingParticleDepth.vertex.js +10 -5
  866. package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -1
  867. package/Shaders/fluidRenderingParticleDiffuse.fragment.js +2 -1
  868. package/Shaders/fluidRenderingParticleDiffuse.fragment.js.map +1 -1
  869. package/Shaders/fluidRenderingParticleDiffuse.vertex.js +0 -1
  870. package/Shaders/fluidRenderingParticleDiffuse.vertex.js.map +1 -1
  871. package/Shaders/fluidRenderingParticleThickness.fragment.js +2 -1
  872. package/Shaders/fluidRenderingParticleThickness.fragment.js.map +1 -1
  873. package/Shaders/fluidRenderingParticleThickness.vertex.js +2 -1
  874. package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -1
  875. package/Shaders/fluidRenderingRender.fragment.js +76 -35
  876. package/Shaders/fluidRenderingRender.fragment.js.map +1 -1
  877. package/Shaders/fluidRenderingStandardBlur.fragment.js +4 -1
  878. package/Shaders/fluidRenderingStandardBlur.fragment.js.map +1 -1
  879. package/Shaders/fxaa.fragment.js +47 -6
  880. package/Shaders/fxaa.fragment.js.map +1 -1
  881. package/Shaders/fxaa.vertex.js +6 -3
  882. package/Shaders/fxaa.vertex.js.map +1 -1
  883. package/Shaders/geometry.fragment.js +85 -42
  884. package/Shaders/geometry.fragment.js.map +1 -1
  885. package/Shaders/geometry.vertex.js +91 -45
  886. package/Shaders/geometry.vertex.js.map +1 -1
  887. package/Shaders/glowBlurPostProcess.fragment.js +7 -2
  888. package/Shaders/glowBlurPostProcess.fragment.js.map +1 -1
  889. package/Shaders/glowMapGeneration.fragment.js +46 -22
  890. package/Shaders/glowMapGeneration.fragment.js.map +1 -1
  891. package/Shaders/glowMapGeneration.vertex.js +41 -20
  892. package/Shaders/glowMapGeneration.vertex.js.map +1 -1
  893. package/Shaders/glowMapMerge.fragment.js +20 -10
  894. package/Shaders/glowMapMerge.fragment.js.map +1 -1
  895. package/Shaders/glowMapMerge.vertex.js +6 -3
  896. package/Shaders/glowMapMerge.vertex.js.map +1 -1
  897. package/Shaders/gpuRenderParticles.fragment.js +16 -8
  898. package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
  899. package/Shaders/gpuRenderParticles.vertex.js +77 -39
  900. package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
  901. package/Shaders/gpuUpdateParticles.fragment.js +2 -1
  902. package/Shaders/gpuUpdateParticles.fragment.js.map +1 -1
  903. package/Shaders/gpuUpdateParticles.vertex.js +206 -100
  904. package/Shaders/gpuUpdateParticles.vertex.js.map +1 -1
  905. package/Shaders/grain.fragment.js +5 -2
  906. package/Shaders/grain.fragment.js.map +1 -1
  907. package/Shaders/hdrFiltering.fragment.js +1 -1
  908. package/Shaders/hdrFiltering.fragment.js.map +1 -1
  909. package/Shaders/hdrFiltering.vertex.js +6 -3
  910. package/Shaders/hdrFiltering.vertex.js.map +1 -1
  911. package/Shaders/highlights.fragment.js +4 -2
  912. package/Shaders/highlights.fragment.js.map +1 -1
  913. package/Shaders/imageProcessing.fragment.js +12 -6
  914. package/Shaders/imageProcessing.fragment.js.map +1 -1
  915. package/Shaders/kernelBlur.fragment.js +24 -11
  916. package/Shaders/kernelBlur.fragment.js.map +1 -1
  917. package/Shaders/kernelBlur.vertex.js +10 -5
  918. package/Shaders/kernelBlur.vertex.js.map +1 -1
  919. package/Shaders/layer.fragment.js +13 -6
  920. package/Shaders/layer.fragment.js.map +1 -1
  921. package/Shaders/layer.vertex.js +6 -3
  922. package/Shaders/layer.vertex.js.map +1 -1
  923. package/Shaders/lensFlare.fragment.js +6 -3
  924. package/Shaders/lensFlare.fragment.js.map +1 -1
  925. package/Shaders/lensFlare.vertex.js +6 -3
  926. package/Shaders/lensFlare.vertex.js.map +1 -1
  927. package/Shaders/lensHighlights.fragment.js +14 -5
  928. package/Shaders/lensHighlights.fragment.js.map +1 -1
  929. package/Shaders/line.fragment.js +6 -3
  930. package/Shaders/line.fragment.js.map +1 -1
  931. package/Shaders/line.vertex.js +8 -4
  932. package/Shaders/line.vertex.js.map +1 -1
  933. package/Shaders/meshUVSpaceRenderer.fragment.js +3 -1
  934. package/Shaders/meshUVSpaceRenderer.fragment.js.map +1 -1
  935. package/Shaders/meshUVSpaceRenderer.vertex.js +14 -7
  936. package/Shaders/meshUVSpaceRenderer.vertex.js.map +1 -1
  937. package/Shaders/minmaxRedux.fragment.js +21 -8
  938. package/Shaders/minmaxRedux.fragment.js.map +1 -1
  939. package/Shaders/motionBlur.fragment.js +35 -14
  940. package/Shaders/motionBlur.fragment.js.map +1 -1
  941. package/Shaders/noise.fragment.js +13 -2
  942. package/Shaders/noise.fragment.js.map +1 -1
  943. package/Shaders/oitBackBlend.fragment.js +2 -1
  944. package/Shaders/oitBackBlend.fragment.js.map +1 -1
  945. package/Shaders/oitFinal.fragment.js +4 -1
  946. package/Shaders/oitFinal.fragment.js.map +1 -1
  947. package/Shaders/outline.fragment.js +11 -5
  948. package/Shaders/outline.fragment.js.map +1 -1
  949. package/Shaders/outline.vertex.js +27 -13
  950. package/Shaders/outline.vertex.js.map +1 -1
  951. package/Shaders/particles.fragment.js +18 -9
  952. package/Shaders/particles.fragment.js.map +1 -1
  953. package/Shaders/particles.vertex.js +58 -29
  954. package/Shaders/particles.vertex.js.map +1 -1
  955. package/Shaders/pass.fragment.js +4 -2
  956. package/Shaders/pass.fragment.js.map +1 -1
  957. package/Shaders/passCube.fragment.js +17 -8
  958. package/Shaders/passCube.fragment.js.map +1 -1
  959. package/Shaders/pbr.fragment.js +389 -154
  960. package/Shaders/pbr.fragment.js.map +1 -1
  961. package/Shaders/pbr.vertex.js +70 -35
  962. package/Shaders/pbr.vertex.js.map +1 -1
  963. package/Shaders/postprocess.vertex.js +6 -3
  964. package/Shaders/postprocess.vertex.js.map +1 -1
  965. package/Shaders/procedural.vertex.js +6 -3
  966. package/Shaders/procedural.vertex.js.map +1 -1
  967. package/Shaders/refraction.fragment.js +1 -1
  968. package/Shaders/refraction.fragment.js.map +1 -1
  969. package/Shaders/rgbdDecode.fragment.js +4 -2
  970. package/Shaders/rgbdDecode.fragment.js.map +1 -1
  971. package/Shaders/rgbdEncode.fragment.js +4 -2
  972. package/Shaders/rgbdEncode.fragment.js.map +1 -1
  973. package/Shaders/screenSpaceCurvature.fragment.js +11 -3
  974. package/Shaders/screenSpaceCurvature.fragment.js.map +1 -1
  975. package/Shaders/screenSpaceReflection.fragment.js +57 -15
  976. package/Shaders/screenSpaceReflection.fragment.js.map +1 -1
  977. package/Shaders/screenSpaceReflection2.fragment.js +125 -51
  978. package/Shaders/screenSpaceReflection2.fragment.js.map +1 -1
  979. package/Shaders/screenSpaceReflection2Blur.fragment.js +7 -1
  980. package/Shaders/screenSpaceReflection2Blur.fragment.js.map +1 -1
  981. package/Shaders/screenSpaceReflection2BlurCombiner.fragment.js +28 -13
  982. package/Shaders/screenSpaceReflection2BlurCombiner.fragment.js.map +1 -1
  983. package/Shaders/shadowMap.fragment.js +14 -6
  984. package/Shaders/shadowMap.fragment.js.map +1 -1
  985. package/Shaders/shadowMap.vertex.js +35 -17
  986. package/Shaders/shadowMap.vertex.js.map +1 -1
  987. package/Shaders/sharpen.fragment.js +8 -2
  988. package/Shaders/sharpen.fragment.js.map +1 -1
  989. package/Shaders/spriteMap.fragment.js +17 -4
  990. package/Shaders/spriteMap.fragment.js.map +1 -1
  991. package/Shaders/spriteMap.vertex.js +2 -1
  992. package/Shaders/spriteMap.vertex.js.map +1 -1
  993. package/Shaders/sprites.fragment.js +17 -7
  994. package/Shaders/sprites.fragment.js.map +1 -1
  995. package/Shaders/sprites.vertex.js +10 -4
  996. package/Shaders/sprites.vertex.js.map +1 -1
  997. package/Shaders/ssao.fragment.js +0 -2
  998. package/Shaders/ssao.fragment.js.map +1 -1
  999. package/Shaders/ssao2.fragment.js +0 -2
  1000. package/Shaders/ssao2.fragment.js.map +1 -1
  1001. package/Shaders/ssaoCombine.fragment.js +8 -4
  1002. package/Shaders/ssaoCombine.fragment.js.map +1 -1
  1003. package/Shaders/standard.fragment.js +101 -25
  1004. package/Shaders/standard.fragment.js.map +1 -1
  1005. package/Shaders/stereoscopicInterlace.fragment.js +14 -6
  1006. package/Shaders/stereoscopicInterlace.fragment.js.map +1 -1
  1007. package/Shaders/subSurfaceScattering.fragment.js +58 -12
  1008. package/Shaders/subSurfaceScattering.fragment.js.map +1 -1
  1009. package/Shaders/tonemap.fragment.js +21 -9
  1010. package/Shaders/tonemap.fragment.js.map +1 -1
  1011. package/Shaders/velocity.fragment.js +8 -4
  1012. package/Shaders/velocity.fragment.js.map +1 -1
  1013. package/Shaders/velocity.vertex.js +18 -9
  1014. package/Shaders/velocity.vertex.js.map +1 -1
  1015. package/Shaders/volumetricLightScattering.fragment.js +9 -4
  1016. package/Shaders/volumetricLightScattering.fragment.js.map +1 -1
  1017. package/Shaders/volumetricLightScatteringPass.fragment.js +12 -5
  1018. package/Shaders/volumetricLightScatteringPass.fragment.js.map +1 -1
  1019. package/Shaders/volumetricLightScatteringPass.vertex.js +23 -11
  1020. package/Shaders/volumetricLightScatteringPass.vertex.js.map +1 -1
  1021. package/Shaders/vrDistortionCorrection.fragment.js +6 -2
  1022. package/Shaders/vrDistortionCorrection.fragment.js.map +1 -1
  1023. package/Shaders/vrMultiviewToSingleview.fragment.js +4 -2
  1024. package/Shaders/vrMultiviewToSingleview.fragment.js.map +1 -1
  1025. package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js +24 -12
  1026. package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js.map +1 -1
  1027. package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.js +7 -3
  1028. package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.js.map +1 -1
  1029. package/ShadersWGSL/ShadersInclude/bonesDeclaration.js +14 -6
  1030. package/ShadersWGSL/ShadersInclude/bonesDeclaration.js.map +1 -1
  1031. package/ShadersWGSL/ShadersInclude/bonesVertex.js +36 -18
  1032. package/ShadersWGSL/ShadersInclude/bonesVertex.js.map +1 -1
  1033. package/ShadersWGSL/ShadersInclude/clipPlaneFragment.js +20 -7
  1034. package/ShadersWGSL/ShadersInclude/clipPlaneFragment.js.map +1 -1
  1035. package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.js +12 -6
  1036. package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.js.map +1 -1
  1037. package/ShadersWGSL/ShadersInclude/clipPlaneVertex.js +12 -6
  1038. package/ShadersWGSL/ShadersInclude/clipPlaneVertex.js.map +1 -1
  1039. package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.js +12 -6
  1040. package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.js.map +1 -1
  1041. package/ShadersWGSL/ShadersInclude/instancesDeclaration.js +14 -7
  1042. package/ShadersWGSL/ShadersInclude/instancesDeclaration.js.map +1 -1
  1043. package/ShadersWGSL/ShadersInclude/instancesVertex.js +16 -8
  1044. package/ShadersWGSL/ShadersInclude/instancesVertex.js.map +1 -1
  1045. package/ShadersWGSL/ShadersInclude/meshUboDeclaration.js +3 -1
  1046. package/ShadersWGSL/ShadersInclude/meshUboDeclaration.js.map +1 -1
  1047. package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js +16 -8
  1048. package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js.map +1 -1
  1049. package/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.js +8 -4
  1050. package/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.js.map +1 -1
  1051. package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobal.js +2 -1
  1052. package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobal.js.map +1 -1
  1053. package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobalDeclaration.js +6 -2
  1054. package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobalDeclaration.js.map +1 -1
  1055. package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js +8 -3
  1056. package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js.map +1 -1
  1057. package/ShadersWGSL/gpuUpdateParticles.compute.js +229 -90
  1058. package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
  1059. package/ShadersWGSL/postprocess.vertex.js +9 -4
  1060. package/ShadersWGSL/postprocess.vertex.js.map +1 -1
  1061. package/assetContainer.d.ts +7 -0
  1062. package/assetContainer.js +46 -0
  1063. package/assetContainer.js.map +1 -1
  1064. package/index.d.ts +1 -0
  1065. package/index.js +1 -0
  1066. package/index.js.map +1 -1
  1067. package/package.json +1 -1
  1068. package/scene.js +5 -0
  1069. package/scene.js.map +1 -1
  1070. package/Materials/Node/nodeMaterialDecorator.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"planeRotationGizmo.js","sourceRoot":"","sources":["../../../../dev/core/src/Gizmos/planeRotationGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { PointerInfo } from \"../Events/pointerEvents\";\r\nimport { Quaternion, Matrix, Vector3, TmpVectors } from \"../Maths/math.vector\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport \"../Meshes/Builders/linesBuilder\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport type { Node } from \"../node\";\r\nimport { PointerDragBehavior } from \"../Behaviors/Meshes/pointerDragBehavior\";\r\nimport type { GizmoAxisCache, IGizmo } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport type { RotationGizmo } from \"./rotationGizmo\";\r\nimport { ShaderMaterial } from \"../Materials/shaderMaterial\";\r\nimport { Effect } from \"../Materials/effect\";\r\nimport { CreatePlane } from \"../Meshes/Builders/planeBuilder\";\r\nimport { CreateTorus } from \"../Meshes/Builders/torusBuilder\";\r\nimport { Epsilon } from \"../Maths/math.constants\";\r\nimport { Logger } from \"../Misc/logger\";\r\n\r\n/**\r\n * Interface for plane rotation gizmo\r\n */\r\nexport interface IPlaneRotationGizmo extends IGizmo {\r\n /** Drag behavior responsible for the gizmos dragging interactions */\r\n dragBehavior: PointerDragBehavior;\r\n /** Drag distance in babylon units that the gizmo will snap to when dragged */\r\n snapDistance: number;\r\n /**\r\n * Event that fires each time the gizmo snaps to a new location.\r\n * * snapDistance is the the change in distance\r\n */\r\n onSnapObservable: Observable<{ snapDistance: number }>;\r\n /** Accumulated relative angle value for rotation on the axis. */\r\n angle: number;\r\n /** If the gizmo is enabled */\r\n isEnabled: boolean;\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n coloredMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is hovered with mouse*/\r\n hoverMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is disabled. typically grey.*/\r\n disableMaterial: StandardMaterial;\r\n}\r\n\r\n/**\r\n * Single plane rotation gizmo\r\n */\r\nexport class PlaneRotationGizmo extends Gizmo implements IPlaneRotationGizmo {\r\n /**\r\n * Drag behavior responsible for the gizmos dragging interactions\r\n */\r\n public dragBehavior: PointerDragBehavior;\r\n protected _pointerObserver: Nullable<Observer<PointerInfo>> = null;\r\n\r\n /**\r\n * Rotation distance in radians that the gizmo will snap to (Default: 0)\r\n */\r\n public snapDistance = 0;\r\n /**\r\n * Event that fires each time the gizmo snaps to a new location.\r\n * * snapDistance is the the change in distance\r\n */\r\n public onSnapObservable = new Observable<{ snapDistance: number }>();\r\n\r\n /**\r\n * The maximum angle between the camera and the rotation allowed for interaction\r\n * If a rotation plane appears 'flat', a lower value allows interaction.\r\n */\r\n public static MaxDragAngle: number = (Math.PI * 9) / 20;\r\n\r\n /**\r\n * Accumulated relative angle value for rotation on the axis. Reset to 0 when a dragStart occurs\r\n */\r\n public angle: number = 0;\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n public get coloredMaterial() {\r\n return this._coloredMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is hovered with mouse*/\r\n public get hoverMaterial() {\r\n return this._hoverMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is disabled. typically grey.*/\r\n public get disableMaterial() {\r\n return this._disableMaterial;\r\n }\r\n protected _isEnabled: boolean = true;\r\n protected _parent: Nullable<RotationGizmo> = null;\r\n protected _coloredMaterial: StandardMaterial;\r\n protected _hoverMaterial: StandardMaterial;\r\n protected _disableMaterial: StandardMaterial;\r\n protected _gizmoMesh: Mesh;\r\n protected _rotationDisplayPlane: Mesh;\r\n protected _dragging: boolean = false;\r\n protected _angles = new Vector3();\r\n\r\n protected static _RotationGizmoVertexShader = `\r\n precision highp float;\r\n attribute vec3 position;\r\n attribute vec2 uv;\r\n uniform mat4 worldViewProjection;\r\n varying vec3 vPosition;\r\n varying vec2 vUV;\r\n void main(void) {\r\n gl_Position = worldViewProjection * vec4(position, 1.0);\r\n vUV = uv;\r\n }`;\r\n\r\n protected static _RotationGizmoFragmentShader = `\r\n precision highp float;\r\n varying vec2 vUV;\r\n varying vec3 vPosition;\r\n uniform vec3 angles;\r\n #define twopi 6.283185307\r\n void main(void) {\r\n vec2 uv = vUV - vec2(0.5);\r\n float angle = atan(uv.y, uv.x) + 3.141592;\r\n float delta = gl_FrontFacing ? angles.y : -angles.y;\r\n float begin = angles.x - delta * angles.z;\r\n float start = (begin < (begin + delta)) ? begin : (begin + delta);\r\n float end = (begin > (begin + delta)) ? begin : (begin + delta);\r\n float len = sqrt(dot(uv,uv));\r\n float opacity = 1. - step(0.5, len);\r\n\r\n float base = abs(floor(start / twopi)) * twopi;\r\n start += base;\r\n end += base;\r\n\r\n float intensity = 0.;\r\n for (int i = 0; i < 5; i++)\r\n {\r\n intensity += max(step(start, angle) - step(end, angle), 0.);\r\n angle += twopi;\r\n }\r\n gl_FragColor = vec4(1.,1.,0., min(intensity * 0.25, 0.8)) * opacity;\r\n }`;\r\n\r\n protected _rotationShaderMaterial: ShaderMaterial;\r\n\r\n /**\r\n * Creates a PlaneRotationGizmo\r\n * @param planeNormal The normal of the plane which the gizmo will be able to rotate on\r\n * @param color The color of the gizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n * @param tessellation Amount of tessellation to be used when creating rotation circles\r\n * @param parent\r\n * @param useEulerRotation Use and update Euler angle instead of quaternion\r\n * @param thickness display gizmo axis thickness\r\n */\r\n constructor(\r\n planeNormal: Vector3,\r\n color: Color3 = Color3.Gray(),\r\n gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer,\r\n tessellation = 32,\r\n parent: Nullable<RotationGizmo> = null,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n useEulerRotation = false,\r\n thickness: number = 1\r\n ) {\r\n super(gizmoLayer);\r\n this._parent = parent;\r\n // Create Material\r\n this._coloredMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._coloredMaterial.diffuseColor = color;\r\n this._coloredMaterial.specularColor = color.subtract(new Color3(0.1, 0.1, 0.1));\r\n\r\n this._hoverMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._hoverMaterial.diffuseColor = Color3.Yellow();\r\n\r\n this._disableMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._disableMaterial.diffuseColor = Color3.Gray();\r\n this._disableMaterial.alpha = 0.4;\r\n\r\n // Build mesh on root node\r\n this._gizmoMesh = new Mesh(\"\", gizmoLayer.utilityLayerScene);\r\n const { rotationMesh, collider } = this._createGizmoMesh(this._gizmoMesh, thickness, tessellation);\r\n\r\n // Setup Rotation Circle\r\n this._rotationDisplayPlane = CreatePlane(\"rotationDisplay\", { size: 0.6, updatable: false }, this.gizmoLayer.utilityLayerScene);\r\n this._rotationDisplayPlane.rotation.z = Math.PI * 0.5;\r\n this._rotationDisplayPlane.parent = this._gizmoMesh;\r\n this._rotationDisplayPlane.setEnabled(false);\r\n\r\n Effect.ShadersStore[\"rotationGizmoVertexShader\"] = PlaneRotationGizmo._RotationGizmoVertexShader;\r\n Effect.ShadersStore[\"rotationGizmoFragmentShader\"] = PlaneRotationGizmo._RotationGizmoFragmentShader;\r\n this._rotationShaderMaterial = new ShaderMaterial(\r\n \"shader\",\r\n this.gizmoLayer.utilityLayerScene,\r\n {\r\n vertex: \"rotationGizmo\",\r\n fragment: \"rotationGizmo\",\r\n },\r\n {\r\n attributes: [\"position\", \"uv\"],\r\n uniforms: [\"worldViewProjection\", \"angles\"],\r\n }\r\n );\r\n this._rotationShaderMaterial.backFaceCulling = false;\r\n\r\n this._rotationDisplayPlane.material = this._rotationShaderMaterial;\r\n this._rotationDisplayPlane.visibility = 0.999;\r\n\r\n this._gizmoMesh.lookAt(this._rootMesh.position.add(planeNormal));\r\n this._rootMesh.addChild(this._gizmoMesh, Gizmo.PreserveScaling);\r\n this._gizmoMesh.scaling.scaleInPlace(1 / 3);\r\n // Add drag behavior to handle events when the gizmo is dragged\r\n this.dragBehavior = new PointerDragBehavior({ dragPlaneNormal: planeNormal });\r\n this.dragBehavior.moveAttached = false;\r\n this.dragBehavior.maxDragAngle = PlaneRotationGizmo.MaxDragAngle;\r\n this.dragBehavior._useAlternatePickedPointAboveMaxDragAngle = true;\r\n this._rootMesh.addBehavior(this.dragBehavior);\r\n\r\n // Closures for drag logic\r\n const lastDragPosition = new Vector3();\r\n\r\n const rotationMatrix = new Matrix();\r\n const planeNormalTowardsCamera = new Vector3();\r\n let localPlaneNormalTowardsCamera = new Vector3();\r\n\r\n this.dragBehavior.onDragStartObservable.add((e) => {\r\n if (this.attachedNode) {\r\n lastDragPosition.copyFrom(e.dragPlanePoint);\r\n this._rotationDisplayPlane.setEnabled(true);\r\n\r\n this._rotationDisplayPlane.getWorldMatrix().invertToRef(rotationMatrix);\r\n Vector3.TransformCoordinatesToRef(e.dragPlanePoint, rotationMatrix, lastDragPosition);\r\n\r\n this._angles.x = Math.atan2(lastDragPosition.y, lastDragPosition.x) + Math.PI;\r\n this._angles.y = 0;\r\n this._angles.z = this.updateGizmoRotationToMatchAttachedMesh ? 1 : 0;\r\n this._dragging = true;\r\n lastDragPosition.copyFrom(e.dragPlanePoint);\r\n this._rotationShaderMaterial.setVector3(\"angles\", this._angles);\r\n this.angle = 0;\r\n }\r\n });\r\n\r\n this.dragBehavior.onDragEndObservable.add(() => {\r\n this._dragging = false;\r\n this._rotationDisplayPlane.setEnabled(false);\r\n });\r\n\r\n const tmpSnapEvent = { snapDistance: 0 };\r\n let currentSnapDragDistance = 0;\r\n const tmpMatrix = new Matrix();\r\n const amountToRotate = new Quaternion();\r\n this.dragBehavior.onDragObservable.add((event) => {\r\n if (this.attachedNode) {\r\n // Calc angle over full 360 degree (https://stackoverflow.com/questions/43493711/the-angle-between-two-3d-vectors-with-a-result-range-0-360)\r\n const nodeScale = new Vector3(1, 1, 1);\r\n const nodeQuaternion = new Quaternion(0, 0, 0, 1);\r\n const nodeTranslation = new Vector3(0, 0, 0);\r\n this._handlePivot();\r\n\r\n this.attachedNode.getWorldMatrix().decompose(nodeScale, nodeQuaternion, nodeTranslation);\r\n // uniform scaling of absolute value of components\r\n // (-1,1,1) is uniform but (1,1.001,1) is not\r\n const uniformScaling = Math.abs(Math.abs(nodeScale.x) - Math.abs(nodeScale.y)) <= Epsilon && Math.abs(Math.abs(nodeScale.x) - Math.abs(nodeScale.z)) <= Epsilon;\r\n if (!uniformScaling && this.updateGizmoRotationToMatchAttachedMesh) {\r\n Logger.Warn(\r\n \"Unable to use a rotation gizmo matching mesh rotation with non uniform scaling. Use uniform scaling or set updateGizmoRotationToMatchAttachedMesh to false.\"\r\n );\r\n return;\r\n }\r\n nodeQuaternion.normalize();\r\n\r\n const nodeTranslationForOperation = this.updateGizmoPositionToMatchAttachedMesh ? nodeTranslation : this._rootMesh.absolutePosition;\r\n const newVector = event.dragPlanePoint.subtract(nodeTranslationForOperation).normalize();\r\n const originalVector = lastDragPosition.subtract(nodeTranslationForOperation).normalize();\r\n const cross = Vector3.Cross(newVector, originalVector);\r\n const dot = Vector3.Dot(newVector, originalVector);\r\n let angle = Math.atan2(cross.length(), dot);\r\n planeNormalTowardsCamera.copyFrom(planeNormal);\r\n localPlaneNormalTowardsCamera.copyFrom(planeNormal);\r\n if (this.updateGizmoRotationToMatchAttachedMesh) {\r\n nodeQuaternion.toRotationMatrix(rotationMatrix);\r\n localPlaneNormalTowardsCamera = Vector3.TransformCoordinates(planeNormalTowardsCamera, rotationMatrix);\r\n }\r\n // Flip up vector depending on which side the camera is on\r\n let cameraFlipped = false;\r\n if (gizmoLayer.utilityLayerScene.activeCamera) {\r\n const camVec = gizmoLayer.utilityLayerScene.activeCamera.position.subtract(nodeTranslationForOperation).normalize();\r\n if (Vector3.Dot(camVec, localPlaneNormalTowardsCamera) > 0) {\r\n planeNormalTowardsCamera.scaleInPlace(-1);\r\n localPlaneNormalTowardsCamera.scaleInPlace(-1);\r\n cameraFlipped = true;\r\n }\r\n }\r\n const halfCircleSide = Vector3.Dot(localPlaneNormalTowardsCamera, cross) > 0.0;\r\n if (halfCircleSide) {\r\n angle = -angle;\r\n }\r\n\r\n // Snapping logic\r\n let snapped = false;\r\n if (this.snapDistance != 0) {\r\n currentSnapDragDistance += angle;\r\n if (Math.abs(currentSnapDragDistance) > this.snapDistance) {\r\n let dragSteps = Math.floor(Math.abs(currentSnapDragDistance) / this.snapDistance);\r\n if (currentSnapDragDistance < 0) {\r\n dragSteps *= -1;\r\n }\r\n currentSnapDragDistance = currentSnapDragDistance % this.snapDistance;\r\n angle = this.snapDistance * dragSteps;\r\n snapped = true;\r\n } else {\r\n angle = 0;\r\n }\r\n }\r\n\r\n // Convert angle and axis to quaternion (http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm)\r\n const quaternionCoefficient = Math.sin(angle / 2);\r\n amountToRotate.set(\r\n planeNormalTowardsCamera.x * quaternionCoefficient,\r\n planeNormalTowardsCamera.y * quaternionCoefficient,\r\n planeNormalTowardsCamera.z * quaternionCoefficient,\r\n Math.cos(angle / 2)\r\n );\r\n\r\n // If the meshes local scale is inverted (eg. loaded gltf file parent with z scale of -1) the rotation needs to be inverted on the y axis\r\n if (tmpMatrix.determinant() > 0) {\r\n const tmpVector = new Vector3();\r\n amountToRotate.toEulerAnglesToRef(tmpVector);\r\n Quaternion.RotationYawPitchRollToRef(tmpVector.y, -tmpVector.x, -tmpVector.z, amountToRotate);\r\n }\r\n\r\n if (this.updateGizmoRotationToMatchAttachedMesh) {\r\n // Rotate selected mesh quaternion over fixed axis\r\n nodeQuaternion.multiplyToRef(amountToRotate, nodeQuaternion);\r\n // recompose matrix\r\n Matrix.ComposeToRef(nodeScale, nodeQuaternion, nodeTranslation, this.attachedNode.getWorldMatrix());\r\n } else {\r\n // Rotate selected mesh quaternion over rotated axis\r\n amountToRotate.toRotationMatrix(TmpVectors.Matrix[0]);\r\n const translation = this.attachedNode.getWorldMatrix().getTranslation();\r\n this.attachedNode.getWorldMatrix().multiplyToRef(TmpVectors.Matrix[0], this.attachedNode.getWorldMatrix());\r\n this.attachedNode.getWorldMatrix().setTranslation(translation);\r\n }\r\n\r\n lastDragPosition.copyFrom(event.dragPlanePoint);\r\n if (snapped) {\r\n tmpSnapEvent.snapDistance = angle;\r\n this.onSnapObservable.notifyObservers(tmpSnapEvent);\r\n }\r\n this._angles.y += angle;\r\n this.angle += cameraFlipped ? -angle : angle;\r\n this._rotationShaderMaterial.setVector3(\"angles\", this._angles);\r\n this._matrixChanged();\r\n }\r\n });\r\n\r\n const light = gizmoLayer._getSharedGizmoLight();\r\n light.includedOnlyMeshes = light.includedOnlyMeshes.concat(this._rootMesh.getChildMeshes(false));\r\n\r\n const cache: GizmoAxisCache = {\r\n colliderMeshes: [collider],\r\n gizmoMeshes: [rotationMesh],\r\n material: this._coloredMaterial,\r\n hoverMaterial: this._hoverMaterial,\r\n disableMaterial: this._disableMaterial,\r\n active: false,\r\n dragBehavior: this.dragBehavior,\r\n };\r\n this._parent?.addToAxisCache(this._gizmoMesh, cache);\r\n\r\n this._pointerObserver = gizmoLayer.utilityLayerScene.onPointerObservable.add((pointerInfo) => {\r\n if (this._customMeshSet) {\r\n return;\r\n }\r\n // updating here the maxangle because ondragstart is too late (value already used) and the updated value is not taken into account\r\n this.dragBehavior.maxDragAngle = PlaneRotationGizmo.MaxDragAngle;\r\n this._isHovered = !!(cache.colliderMeshes.indexOf(<Mesh>pointerInfo?.pickInfo?.pickedMesh) != -1);\r\n if (!this._parent) {\r\n const material = cache.dragBehavior.enabled ? (this._isHovered || this._dragging ? this._hoverMaterial : this._coloredMaterial) : this._disableMaterial;\r\n this._setGizmoMeshMaterial(cache.gizmoMeshes, material);\r\n }\r\n });\r\n\r\n this.dragBehavior.onEnabledObservable.add((newState) => {\r\n this._setGizmoMeshMaterial(cache.gizmoMeshes, newState ? this._coloredMaterial : this._disableMaterial);\r\n });\r\n }\r\n\r\n /**\r\n * Create Geometry for Gizmo\r\n * @param parentMesh\r\n * @param thickness\r\n * @param tessellation\r\n */\r\n protected _createGizmoMesh(parentMesh: AbstractMesh, thickness: number, tessellation: number) {\r\n const collider = CreateTorus(\r\n \"ignore\",\r\n {\r\n diameter: 0.6,\r\n thickness: 0.03 * thickness,\r\n tessellation,\r\n },\r\n this.gizmoLayer.utilityLayerScene\r\n );\r\n collider.visibility = 0;\r\n const rotationMesh = CreateTorus(\r\n \"\",\r\n {\r\n diameter: 0.6,\r\n thickness: 0.005 * thickness,\r\n tessellation,\r\n },\r\n this.gizmoLayer.utilityLayerScene\r\n );\r\n rotationMesh.material = this._coloredMaterial;\r\n\r\n // Position arrow pointing in its drag axis\r\n rotationMesh.rotation.x = Math.PI / 2;\r\n collider.rotation.x = Math.PI / 2;\r\n\r\n parentMesh.addChild(rotationMesh, Gizmo.PreserveScaling);\r\n parentMesh.addChild(collider, Gizmo.PreserveScaling);\r\n return { rotationMesh, collider };\r\n }\r\n\r\n protected _attachedNodeChanged(value: Nullable<Node>) {\r\n if (this.dragBehavior) {\r\n this.dragBehavior.enabled = value ? true : false;\r\n }\r\n }\r\n\r\n /**\r\n * If the gizmo is enabled\r\n */\r\n public set isEnabled(value: boolean) {\r\n this._isEnabled = value;\r\n if (!value) {\r\n this.attachedMesh = null;\r\n } else {\r\n if (this._parent) {\r\n this.attachedMesh = this._parent.attachedMesh;\r\n }\r\n }\r\n }\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n /**\r\n * Disposes of the gizmo\r\n */\r\n public dispose() {\r\n this.onSnapObservable.clear();\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(this._pointerObserver);\r\n this.dragBehavior.detach();\r\n if (this._gizmoMesh) {\r\n this._gizmoMesh.dispose();\r\n }\r\n if (this._rotationDisplayPlane) {\r\n this._rotationDisplayPlane.dispose();\r\n }\r\n if (this._rotationShaderMaterial) {\r\n this._rotationShaderMaterial.dispose();\r\n }\r\n [this._coloredMaterial, this._hoverMaterial, this._disableMaterial].forEach((matl) => {\r\n if (matl) {\r\n matl.dispose();\r\n }\r\n });\r\n super.dispose();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"planeRotationGizmo.js","sourceRoot":"","sources":["../../../../dev/core/src/Gizmos/planeRotationGizmo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,iCAAiC,CAAC;AAEzC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAE9E,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AA8BxC;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAiCzC,4EAA4E;IAC5E,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAED,8DAA8D;IAC9D,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,qEAAqE;IACrE,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAuDD;;;;;;;;;OASG;IACH,YACI,WAAoB,EACpB,QAAgB,MAAM,CAAC,IAAI,EAAE,EAC7B,aAAmC,oBAAoB,CAAC,mBAAmB,EAC3E,YAAY,GAAG,EAAE,EACjB,SAAkC,IAAI;IACtC,6DAA6D;IAC7D,gBAAgB,GAAG,KAAK,EACxB,YAAoB,CAAC;;QAErB,KAAK,CAAC,UAAU,CAAC,CAAC;QApHZ,qBAAgB,GAAoC,IAAI,CAAC;QAEnE;;WAEG;QACI,iBAAY,GAAG,CAAC,CAAC;QACxB;;;WAGG;QACI,qBAAgB,GAAG,IAAI,UAAU,EAA4B,CAAC;QAQrE;;WAEG;QACI,UAAK,GAAW,CAAC,CAAC;QAEzB;;WAEG;QACI,gBAAW,GAAG,CAAC,CAAC;QAiBb,eAAU,GAAY,IAAI,CAAC;QAC3B,YAAO,GAA4B,IAAI,CAAC;QAMxC,cAAS,GAAY,KAAK,CAAC;QAC3B,YAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAkE9B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,kBAAkB;QAClB,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,EAAE,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC/E,IAAI,CAAC,gBAAgB,CAAC,YAAY,GAAG,KAAK,CAAC;QAC3C,IAAI,CAAC,gBAAgB,CAAC,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAEhF,IAAI,CAAC,cAAc,GAAG,IAAI,gBAAgB,CAAC,EAAE,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC7E,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAEnD,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,EAAE,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC/E,IAAI,CAAC,gBAAgB,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QACnD,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,GAAG,CAAC;QAElC,0BAA0B;QAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC7D,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QAEnG,wBAAwB;QACxB,IAAI,CAAC,qBAAqB,GAAG,WAAW,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAChI,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;QACtD,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;QACpD,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAE7C,MAAM,CAAC,YAAY,CAAC,2BAA2B,CAAC,GAAG,kBAAkB,CAAC,0BAA0B,CAAC;QACjG,MAAM,CAAC,YAAY,CAAC,6BAA6B,CAAC,GAAG,kBAAkB,CAAC,4BAA4B,CAAC;QACrG,IAAI,CAAC,uBAAuB,GAAG,IAAI,cAAc,CAC7C,QAAQ,EACR,IAAI,CAAC,UAAU,CAAC,iBAAiB,EACjC;YACI,MAAM,EAAE,eAAe;YACvB,QAAQ,EAAE,eAAe;SAC5B,EACD;YACI,UAAU,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC;YAC9B,QAAQ,EAAE,CAAC,qBAAqB,EAAE,QAAQ,CAAC;SAC9C,CACJ,CAAC;QACF,IAAI,CAAC,uBAAuB,CAAC,eAAe,GAAG,KAAK,CAAC;QAErD,IAAI,CAAC,qBAAqB,CAAC,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC;QACnE,IAAI,CAAC,qBAAqB,CAAC,UAAU,GAAG,KAAK,CAAC;QAE9C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;QAChE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5C,+DAA+D;QAC/D,IAAI,CAAC,YAAY,GAAG,IAAI,mBAAmB,CAAC,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC,CAAC;QAC9E,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,KAAK,CAAC;QACvC,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,kBAAkB,CAAC,YAAY,CAAC;QACjE,IAAI,CAAC,YAAY,CAAC,yCAAyC,GAAG,IAAI,CAAC;QACnE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE9C,0BAA0B;QAC1B,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAAE,CAAC;QAEvC,MAAM,cAAc,GAAG,IAAI,MAAM,EAAE,CAAC;QACpC,MAAM,wBAAwB,GAAG,IAAI,OAAO,EAAE,CAAC;QAC/C,IAAI,6BAA6B,GAAG,IAAI,OAAO,EAAE,CAAC;QAElD,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC9C,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;gBAC5C,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAE5C,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;gBACxE,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC,cAAc,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;gBAEtF,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;gBAC9E,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;gBACnB,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;gBAC5C,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAChE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;aAClB;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE;YAC3C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QACzC,IAAI,uBAAuB,GAAG,CAAC,CAAC;QAChC,MAAM,SAAS,GAAG,IAAI,MAAM,EAAE,CAAC;QAC/B,MAAM,cAAc,GAAG,IAAI,UAAU,EAAE,CAAC;QACxC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC7C,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,4IAA4I;gBAC5I,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvC,MAAM,cAAc,GAAG,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAClD,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7C,IAAI,CAAC,YAAY,EAAE,CAAC;gBAEpB,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;gBACzF,kDAAkD;gBAClD,6CAA6C;gBAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;gBAChK,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,sCAAsC,EAAE;oBAChE,MAAM,CAAC,IAAI,CACP,6JAA6J,CAChK,CAAC;oBACF,OAAO;iBACV;gBACD,cAAc,CAAC,SAAS,EAAE,CAAC;gBAE3B,MAAM,2BAA2B,GAAG,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;gBACpI,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,SAAS,EAAE,CAAC;gBACzF,MAAM,cAAc,GAAG,gBAAgB,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,SAAS,EAAE,CAAC;gBAC1F,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;gBACvD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;gBACnD,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;gBAC/D,wBAAwB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBAC/C,6BAA6B,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBACpD,IAAI,IAAI,CAAC,sCAAsC,EAAE;oBAC7C,cAAc,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;oBAChD,6BAA6B,GAAG,OAAO,CAAC,oBAAoB,CAAC,wBAAwB,EAAE,cAAc,CAAC,CAAC;iBAC1G;gBACD,0DAA0D;gBAC1D,IAAI,aAAa,GAAG,KAAK,CAAC;gBAC1B,IAAI,UAAU,CAAC,iBAAiB,CAAC,YAAY,EAAE;oBAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,iBAAiB,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,SAAS,EAAE,CAAC;oBACpH,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,6BAA6B,CAAC,GAAG,CAAC,EAAE;wBACxD,wBAAwB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC1C,6BAA6B,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC/C,aAAa,GAAG,IAAI,CAAC;qBACxB;iBACJ;gBACD,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC;gBAC/E,IAAI,cAAc,EAAE;oBAChB,KAAK,GAAG,CAAC,KAAK,CAAC;iBAClB;gBAED,iBAAiB;gBACjB,IAAI,OAAO,GAAG,KAAK,CAAC;gBACpB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE;oBACxB,uBAAuB,IAAI,KAAK,CAAC;oBACjC,IAAI,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE;wBACvD,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;wBAClF,IAAI,uBAAuB,GAAG,CAAC,EAAE;4BAC7B,SAAS,IAAI,CAAC,CAAC,CAAC;yBACnB;wBACD,uBAAuB,GAAG,uBAAuB,GAAG,IAAI,CAAC,YAAY,CAAC;wBACtE,KAAK,GAAG,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;wBACtC,OAAO,GAAG,IAAI,CAAC;qBAClB;yBAAM;wBACH,KAAK,GAAG,CAAC,CAAC;qBACb;iBACJ;gBAED,wIAAwI;gBACxI,MAAM,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAClD,cAAc,CAAC,GAAG,CACd,wBAAwB,CAAC,CAAC,GAAG,qBAAqB,EAClD,wBAAwB,CAAC,CAAC,GAAG,qBAAqB,EAClD,wBAAwB,CAAC,CAAC,GAAG,qBAAqB,EAClD,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CACtB,CAAC;gBAEF,yIAAyI;gBACzI,IAAI,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE;oBAC7B,MAAM,SAAS,GAAG,IAAI,OAAO,EAAE,CAAC;oBAChC,cAAc,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;oBAC7C,UAAU,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;iBACjG;gBAED,IAAI,IAAI,CAAC,sCAAsC,EAAE;oBAC7C,kDAAkD;oBAClD,cAAc,CAAC,aAAa,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;oBAC7D,mBAAmB;oBACnB,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,CAAC;iBACvG;qBAAM;oBACH,oDAAoD;oBACpD,cAAc,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtD,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,cAAc,EAAE,CAAC;oBACxE,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,CAAC;oBAC3G,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;iBAClE;gBAED,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBAChD,IAAI,OAAO,EAAE;oBACT,YAAY,CAAC,YAAY,GAAG,KAAK,CAAC;oBAClC,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;iBACvD;gBACD,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC;gBACxB,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC7C,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAChE,IAAI,CAAC,cAAc,EAAE,CAAC;aACzB;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,UAAU,CAAC,oBAAoB,EAAE,CAAC;QAChD,KAAK,CAAC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QAEjG,MAAM,KAAK,GAAmB;YAC1B,cAAc,EAAE,CAAC,QAAQ,CAAC;YAC1B,WAAW,EAAE,CAAC,YAAY,CAAC;YAC3B,QAAQ,EAAE,IAAI,CAAC,gBAAgB;YAC/B,aAAa,EAAE,IAAI,CAAC,cAAc;YAClC,eAAe,EAAE,IAAI,CAAC,gBAAgB;YACtC,MAAM,EAAE,KAAK;YACb,YAAY,EAAE,IAAI,CAAC,YAAY;SAClC,CAAC;QACF,MAAA,IAAI,CAAC,OAAO,0CAAE,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAErD,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE;;YACzF,IAAI,IAAI,CAAC,cAAc,EAAE;gBACrB,OAAO;aACV;YACD,kIAAkI;YAClI,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,kBAAkB,CAAC,YAAY,CAAC;YACjE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAO,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,QAAQ,0CAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACf,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC;gBACxJ,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;aAC3D;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YACnD,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC5G,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;OAKG;IACO,gBAAgB,CAAC,UAAwB,EAAE,SAAiB,EAAE,YAAoB;QACxF,MAAM,QAAQ,GAAG,WAAW,CACxB,QAAQ,EACR;YACI,QAAQ,EAAE,GAAG;YACb,SAAS,EAAE,IAAI,GAAG,SAAS;YAC3B,YAAY;SACf,EACD,IAAI,CAAC,UAAU,CAAC,iBAAiB,CACpC,CAAC;QACF,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC;QACxB,MAAM,YAAY,GAAG,WAAW,CAC5B,EAAE,EACF;YACI,QAAQ,EAAE,GAAG;YACb,SAAS,EAAE,KAAK,GAAG,SAAS;YAC5B,YAAY;SACf,EACD,IAAI,CAAC,UAAU,CAAC,iBAAiB,CACpC,CAAC;QACF,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAE9C,2CAA2C;QAC3C,YAAY,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACtC,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAElC,UAAU,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;QACzD,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;QACrD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;IACtC,CAAC;IAES,oBAAoB,CAAC,KAAqB;QAChD,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;SACpD;IACL,CAAC;IAED;;OAEG;IACH,IAAW,SAAS,CAAC,KAAc;QAC/B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,KAAK,EAAE;YACR,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC5B;aAAM;YACH,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;aACjD;SACJ;IACL,CAAC;IACD,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IACD;;OAEG;IACI,OAAO;QACV,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACpF,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;SAC7B;QACD,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC5B,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,CAAC;SACxC;QACD,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,CAAC;SAC1C;QACD,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACjF,IAAI,IAAI,EAAE;gBACN,IAAI,CAAC,OAAO,EAAE,CAAC;aAClB;QACL,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC;;AAzZD;;;GAGG;AACW,+BAAY,GAAW,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,AAA7B,CAA8B;AAqCvC,6CAA0B,GAAG;;;;;;;;;;UAUxC,AAVqC,CAUpC;AAEU,+CAA4B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;UA2B1C,AA3BuC,CA2BtC","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { PointerInfo } from \"../Events/pointerEvents\";\r\nimport { Quaternion, Matrix, Vector3, TmpVectors } from \"../Maths/math.vector\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport \"../Meshes/Builders/linesBuilder\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport type { Node } from \"../node\";\r\nimport { PointerDragBehavior } from \"../Behaviors/Meshes/pointerDragBehavior\";\r\nimport type { GizmoAxisCache, IGizmo } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport type { RotationGizmo } from \"./rotationGizmo\";\r\nimport { ShaderMaterial } from \"../Materials/shaderMaterial\";\r\nimport { Effect } from \"../Materials/effect\";\r\nimport { CreatePlane } from \"../Meshes/Builders/planeBuilder\";\r\nimport { CreateTorus } from \"../Meshes/Builders/torusBuilder\";\r\nimport { Epsilon } from \"../Maths/math.constants\";\r\nimport { Logger } from \"../Misc/logger\";\r\n\r\n/**\r\n * Interface for plane rotation gizmo\r\n */\r\nexport interface IPlaneRotationGizmo extends IGizmo {\r\n /** Drag behavior responsible for the gizmos dragging interactions */\r\n dragBehavior: PointerDragBehavior;\r\n /** Drag distance in babylon units that the gizmo will snap to when dragged */\r\n snapDistance: number;\r\n /** Sensitivity factor for dragging */\r\n sensitivity: number;\r\n /**\r\n * Event that fires each time the gizmo snaps to a new location.\r\n * * snapDistance is the the change in distance\r\n */\r\n onSnapObservable: Observable<{ snapDistance: number }>;\r\n /** Accumulated relative angle value for rotation on the axis. */\r\n angle: number;\r\n /** If the gizmo is enabled */\r\n isEnabled: boolean;\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n coloredMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is hovered with mouse*/\r\n hoverMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is disabled. typically grey.*/\r\n disableMaterial: StandardMaterial;\r\n}\r\n\r\n/**\r\n * Single plane rotation gizmo\r\n */\r\nexport class PlaneRotationGizmo extends Gizmo implements IPlaneRotationGizmo {\r\n /**\r\n * Drag behavior responsible for the gizmos dragging interactions\r\n */\r\n public dragBehavior: PointerDragBehavior;\r\n protected _pointerObserver: Nullable<Observer<PointerInfo>> = null;\r\n\r\n /**\r\n * Rotation distance in radians that the gizmo will snap to (Default: 0)\r\n */\r\n public snapDistance = 0;\r\n /**\r\n * Event that fires each time the gizmo snaps to a new location.\r\n * * snapDistance is the the change in distance\r\n */\r\n public onSnapObservable = new Observable<{ snapDistance: number }>();\r\n\r\n /**\r\n * The maximum angle between the camera and the rotation allowed for interaction\r\n * If a rotation plane appears 'flat', a lower value allows interaction.\r\n */\r\n public static MaxDragAngle: number = (Math.PI * 9) / 20;\r\n\r\n /**\r\n * Accumulated relative angle value for rotation on the axis. Reset to 0 when a dragStart occurs\r\n */\r\n public angle: number = 0;\r\n\r\n /**\r\n * Custom sensitivity value for the drag strength\r\n */\r\n public sensitivity = 1;\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n public get coloredMaterial() {\r\n return this._coloredMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is hovered with mouse*/\r\n public get hoverMaterial() {\r\n return this._hoverMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is disabled. typically grey.*/\r\n public get disableMaterial() {\r\n return this._disableMaterial;\r\n }\r\n\r\n protected _isEnabled: boolean = true;\r\n protected _parent: Nullable<RotationGizmo> = null;\r\n protected _coloredMaterial: StandardMaterial;\r\n protected _hoverMaterial: StandardMaterial;\r\n protected _disableMaterial: StandardMaterial;\r\n protected _gizmoMesh: Mesh;\r\n protected _rotationDisplayPlane: Mesh;\r\n protected _dragging: boolean = false;\r\n protected _angles = new Vector3();\r\n\r\n protected static _RotationGizmoVertexShader = `\r\n precision highp float;\r\n attribute vec3 position;\r\n attribute vec2 uv;\r\n uniform mat4 worldViewProjection;\r\n varying vec3 vPosition;\r\n varying vec2 vUV;\r\n void main(void) {\r\n gl_Position = worldViewProjection * vec4(position, 1.0);\r\n vUV = uv;\r\n }`;\r\n\r\n protected static _RotationGizmoFragmentShader = `\r\n precision highp float;\r\n varying vec2 vUV;\r\n varying vec3 vPosition;\r\n uniform vec3 angles;\r\n #define twopi 6.283185307\r\n void main(void) {\r\n vec2 uv = vUV - vec2(0.5);\r\n float angle = atan(uv.y, uv.x) + 3.141592;\r\n float delta = gl_FrontFacing ? angles.y : -angles.y;\r\n float begin = angles.x - delta * angles.z;\r\n float start = (begin < (begin + delta)) ? begin : (begin + delta);\r\n float end = (begin > (begin + delta)) ? begin : (begin + delta);\r\n float len = sqrt(dot(uv,uv));\r\n float opacity = 1. - step(0.5, len);\r\n\r\n float base = abs(floor(start / twopi)) * twopi;\r\n start += base;\r\n end += base;\r\n\r\n float intensity = 0.;\r\n for (int i = 0; i < 5; i++)\r\n {\r\n intensity += max(step(start, angle) - step(end, angle), 0.);\r\n angle += twopi;\r\n }\r\n gl_FragColor = vec4(1.,1.,0., min(intensity * 0.25, 0.8)) * opacity;\r\n }`;\r\n\r\n protected _rotationShaderMaterial: ShaderMaterial;\r\n\r\n /**\r\n * Creates a PlaneRotationGizmo\r\n * @param planeNormal The normal of the plane which the gizmo will be able to rotate on\r\n * @param color The color of the gizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n * @param tessellation Amount of tessellation to be used when creating rotation circles\r\n * @param parent\r\n * @param useEulerRotation Use and update Euler angle instead of quaternion\r\n * @param thickness display gizmo axis thickness\r\n */\r\n constructor(\r\n planeNormal: Vector3,\r\n color: Color3 = Color3.Gray(),\r\n gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer,\r\n tessellation = 32,\r\n parent: Nullable<RotationGizmo> = null,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n useEulerRotation = false,\r\n thickness: number = 1\r\n ) {\r\n super(gizmoLayer);\r\n this._parent = parent;\r\n // Create Material\r\n this._coloredMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._coloredMaterial.diffuseColor = color;\r\n this._coloredMaterial.specularColor = color.subtract(new Color3(0.1, 0.1, 0.1));\r\n\r\n this._hoverMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._hoverMaterial.diffuseColor = Color3.Yellow();\r\n\r\n this._disableMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._disableMaterial.diffuseColor = Color3.Gray();\r\n this._disableMaterial.alpha = 0.4;\r\n\r\n // Build mesh on root node\r\n this._gizmoMesh = new Mesh(\"\", gizmoLayer.utilityLayerScene);\r\n const { rotationMesh, collider } = this._createGizmoMesh(this._gizmoMesh, thickness, tessellation);\r\n\r\n // Setup Rotation Circle\r\n this._rotationDisplayPlane = CreatePlane(\"rotationDisplay\", { size: 0.6, updatable: false }, this.gizmoLayer.utilityLayerScene);\r\n this._rotationDisplayPlane.rotation.z = Math.PI * 0.5;\r\n this._rotationDisplayPlane.parent = this._gizmoMesh;\r\n this._rotationDisplayPlane.setEnabled(false);\r\n\r\n Effect.ShadersStore[\"rotationGizmoVertexShader\"] = PlaneRotationGizmo._RotationGizmoVertexShader;\r\n Effect.ShadersStore[\"rotationGizmoFragmentShader\"] = PlaneRotationGizmo._RotationGizmoFragmentShader;\r\n this._rotationShaderMaterial = new ShaderMaterial(\r\n \"shader\",\r\n this.gizmoLayer.utilityLayerScene,\r\n {\r\n vertex: \"rotationGizmo\",\r\n fragment: \"rotationGizmo\",\r\n },\r\n {\r\n attributes: [\"position\", \"uv\"],\r\n uniforms: [\"worldViewProjection\", \"angles\"],\r\n }\r\n );\r\n this._rotationShaderMaterial.backFaceCulling = false;\r\n\r\n this._rotationDisplayPlane.material = this._rotationShaderMaterial;\r\n this._rotationDisplayPlane.visibility = 0.999;\r\n\r\n this._gizmoMesh.lookAt(this._rootMesh.position.add(planeNormal));\r\n this._rootMesh.addChild(this._gizmoMesh, Gizmo.PreserveScaling);\r\n this._gizmoMesh.scaling.scaleInPlace(1 / 3);\r\n // Add drag behavior to handle events when the gizmo is dragged\r\n this.dragBehavior = new PointerDragBehavior({ dragPlaneNormal: planeNormal });\r\n this.dragBehavior.moveAttached = false;\r\n this.dragBehavior.maxDragAngle = PlaneRotationGizmo.MaxDragAngle;\r\n this.dragBehavior._useAlternatePickedPointAboveMaxDragAngle = true;\r\n this._rootMesh.addBehavior(this.dragBehavior);\r\n\r\n // Closures for drag logic\r\n const lastDragPosition = new Vector3();\r\n\r\n const rotationMatrix = new Matrix();\r\n const planeNormalTowardsCamera = new Vector3();\r\n let localPlaneNormalTowardsCamera = new Vector3();\r\n\r\n this.dragBehavior.onDragStartObservable.add((e) => {\r\n if (this.attachedNode) {\r\n lastDragPosition.copyFrom(e.dragPlanePoint);\r\n this._rotationDisplayPlane.setEnabled(true);\r\n\r\n this._rotationDisplayPlane.getWorldMatrix().invertToRef(rotationMatrix);\r\n Vector3.TransformCoordinatesToRef(e.dragPlanePoint, rotationMatrix, lastDragPosition);\r\n\r\n this._angles.x = Math.atan2(lastDragPosition.y, lastDragPosition.x) + Math.PI;\r\n this._angles.y = 0;\r\n this._angles.z = this.updateGizmoRotationToMatchAttachedMesh ? 1 : 0;\r\n this._dragging = true;\r\n lastDragPosition.copyFrom(e.dragPlanePoint);\r\n this._rotationShaderMaterial.setVector3(\"angles\", this._angles);\r\n this.angle = 0;\r\n }\r\n });\r\n\r\n this.dragBehavior.onDragEndObservable.add(() => {\r\n this._dragging = false;\r\n this._rotationDisplayPlane.setEnabled(false);\r\n });\r\n\r\n const tmpSnapEvent = { snapDistance: 0 };\r\n let currentSnapDragDistance = 0;\r\n const tmpMatrix = new Matrix();\r\n const amountToRotate = new Quaternion();\r\n this.dragBehavior.onDragObservable.add((event) => {\r\n if (this.attachedNode) {\r\n // Calc angle over full 360 degree (https://stackoverflow.com/questions/43493711/the-angle-between-two-3d-vectors-with-a-result-range-0-360)\r\n const nodeScale = new Vector3(1, 1, 1);\r\n const nodeQuaternion = new Quaternion(0, 0, 0, 1);\r\n const nodeTranslation = new Vector3(0, 0, 0);\r\n this._handlePivot();\r\n\r\n this.attachedNode.getWorldMatrix().decompose(nodeScale, nodeQuaternion, nodeTranslation);\r\n // uniform scaling of absolute value of components\r\n // (-1,1,1) is uniform but (1,1.001,1) is not\r\n const uniformScaling = Math.abs(Math.abs(nodeScale.x) - Math.abs(nodeScale.y)) <= Epsilon && Math.abs(Math.abs(nodeScale.x) - Math.abs(nodeScale.z)) <= Epsilon;\r\n if (!uniformScaling && this.updateGizmoRotationToMatchAttachedMesh) {\r\n Logger.Warn(\r\n \"Unable to use a rotation gizmo matching mesh rotation with non uniform scaling. Use uniform scaling or set updateGizmoRotationToMatchAttachedMesh to false.\"\r\n );\r\n return;\r\n }\r\n nodeQuaternion.normalize();\r\n\r\n const nodeTranslationForOperation = this.updateGizmoPositionToMatchAttachedMesh ? nodeTranslation : this._rootMesh.absolutePosition;\r\n const newVector = event.dragPlanePoint.subtract(nodeTranslationForOperation).normalize();\r\n const originalVector = lastDragPosition.subtract(nodeTranslationForOperation).normalize();\r\n const cross = Vector3.Cross(newVector, originalVector);\r\n const dot = Vector3.Dot(newVector, originalVector);\r\n let angle = Math.atan2(cross.length(), dot) * this.sensitivity;\r\n planeNormalTowardsCamera.copyFrom(planeNormal);\r\n localPlaneNormalTowardsCamera.copyFrom(planeNormal);\r\n if (this.updateGizmoRotationToMatchAttachedMesh) {\r\n nodeQuaternion.toRotationMatrix(rotationMatrix);\r\n localPlaneNormalTowardsCamera = Vector3.TransformCoordinates(planeNormalTowardsCamera, rotationMatrix);\r\n }\r\n // Flip up vector depending on which side the camera is on\r\n let cameraFlipped = false;\r\n if (gizmoLayer.utilityLayerScene.activeCamera) {\r\n const camVec = gizmoLayer.utilityLayerScene.activeCamera.position.subtract(nodeTranslationForOperation).normalize();\r\n if (Vector3.Dot(camVec, localPlaneNormalTowardsCamera) > 0) {\r\n planeNormalTowardsCamera.scaleInPlace(-1);\r\n localPlaneNormalTowardsCamera.scaleInPlace(-1);\r\n cameraFlipped = true;\r\n }\r\n }\r\n const halfCircleSide = Vector3.Dot(localPlaneNormalTowardsCamera, cross) > 0.0;\r\n if (halfCircleSide) {\r\n angle = -angle;\r\n }\r\n\r\n // Snapping logic\r\n let snapped = false;\r\n if (this.snapDistance != 0) {\r\n currentSnapDragDistance += angle;\r\n if (Math.abs(currentSnapDragDistance) > this.snapDistance) {\r\n let dragSteps = Math.floor(Math.abs(currentSnapDragDistance) / this.snapDistance);\r\n if (currentSnapDragDistance < 0) {\r\n dragSteps *= -1;\r\n }\r\n currentSnapDragDistance = currentSnapDragDistance % this.snapDistance;\r\n angle = this.snapDistance * dragSteps;\r\n snapped = true;\r\n } else {\r\n angle = 0;\r\n }\r\n }\r\n\r\n // Convert angle and axis to quaternion (http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm)\r\n const quaternionCoefficient = Math.sin(angle / 2);\r\n amountToRotate.set(\r\n planeNormalTowardsCamera.x * quaternionCoefficient,\r\n planeNormalTowardsCamera.y * quaternionCoefficient,\r\n planeNormalTowardsCamera.z * quaternionCoefficient,\r\n Math.cos(angle / 2)\r\n );\r\n\r\n // If the meshes local scale is inverted (eg. loaded gltf file parent with z scale of -1) the rotation needs to be inverted on the y axis\r\n if (tmpMatrix.determinant() > 0) {\r\n const tmpVector = new Vector3();\r\n amountToRotate.toEulerAnglesToRef(tmpVector);\r\n Quaternion.RotationYawPitchRollToRef(tmpVector.y, -tmpVector.x, -tmpVector.z, amountToRotate);\r\n }\r\n\r\n if (this.updateGizmoRotationToMatchAttachedMesh) {\r\n // Rotate selected mesh quaternion over fixed axis\r\n nodeQuaternion.multiplyToRef(amountToRotate, nodeQuaternion);\r\n // recompose matrix\r\n Matrix.ComposeToRef(nodeScale, nodeQuaternion, nodeTranslation, this.attachedNode.getWorldMatrix());\r\n } else {\r\n // Rotate selected mesh quaternion over rotated axis\r\n amountToRotate.toRotationMatrix(TmpVectors.Matrix[0]);\r\n const translation = this.attachedNode.getWorldMatrix().getTranslation();\r\n this.attachedNode.getWorldMatrix().multiplyToRef(TmpVectors.Matrix[0], this.attachedNode.getWorldMatrix());\r\n this.attachedNode.getWorldMatrix().setTranslation(translation);\r\n }\r\n\r\n lastDragPosition.copyFrom(event.dragPlanePoint);\r\n if (snapped) {\r\n tmpSnapEvent.snapDistance = angle;\r\n this.onSnapObservable.notifyObservers(tmpSnapEvent);\r\n }\r\n this._angles.y += angle;\r\n this.angle += cameraFlipped ? -angle : angle;\r\n this._rotationShaderMaterial.setVector3(\"angles\", this._angles);\r\n this._matrixChanged();\r\n }\r\n });\r\n\r\n const light = gizmoLayer._getSharedGizmoLight();\r\n light.includedOnlyMeshes = light.includedOnlyMeshes.concat(this._rootMesh.getChildMeshes(false));\r\n\r\n const cache: GizmoAxisCache = {\r\n colliderMeshes: [collider],\r\n gizmoMeshes: [rotationMesh],\r\n material: this._coloredMaterial,\r\n hoverMaterial: this._hoverMaterial,\r\n disableMaterial: this._disableMaterial,\r\n active: false,\r\n dragBehavior: this.dragBehavior,\r\n };\r\n this._parent?.addToAxisCache(this._gizmoMesh, cache);\r\n\r\n this._pointerObserver = gizmoLayer.utilityLayerScene.onPointerObservable.add((pointerInfo) => {\r\n if (this._customMeshSet) {\r\n return;\r\n }\r\n // updating here the maxangle because ondragstart is too late (value already used) and the updated value is not taken into account\r\n this.dragBehavior.maxDragAngle = PlaneRotationGizmo.MaxDragAngle;\r\n this._isHovered = !!(cache.colliderMeshes.indexOf(<Mesh>pointerInfo?.pickInfo?.pickedMesh) != -1);\r\n if (!this._parent) {\r\n const material = cache.dragBehavior.enabled ? (this._isHovered || this._dragging ? this._hoverMaterial : this._coloredMaterial) : this._disableMaterial;\r\n this._setGizmoMeshMaterial(cache.gizmoMeshes, material);\r\n }\r\n });\r\n\r\n this.dragBehavior.onEnabledObservable.add((newState) => {\r\n this._setGizmoMeshMaterial(cache.gizmoMeshes, newState ? this._coloredMaterial : this._disableMaterial);\r\n });\r\n }\r\n\r\n /**\r\n * Create Geometry for Gizmo\r\n * @param parentMesh\r\n * @param thickness\r\n * @param tessellation\r\n */\r\n protected _createGizmoMesh(parentMesh: AbstractMesh, thickness: number, tessellation: number) {\r\n const collider = CreateTorus(\r\n \"ignore\",\r\n {\r\n diameter: 0.6,\r\n thickness: 0.03 * thickness,\r\n tessellation,\r\n },\r\n this.gizmoLayer.utilityLayerScene\r\n );\r\n collider.visibility = 0;\r\n const rotationMesh = CreateTorus(\r\n \"\",\r\n {\r\n diameter: 0.6,\r\n thickness: 0.005 * thickness,\r\n tessellation,\r\n },\r\n this.gizmoLayer.utilityLayerScene\r\n );\r\n rotationMesh.material = this._coloredMaterial;\r\n\r\n // Position arrow pointing in its drag axis\r\n rotationMesh.rotation.x = Math.PI / 2;\r\n collider.rotation.x = Math.PI / 2;\r\n\r\n parentMesh.addChild(rotationMesh, Gizmo.PreserveScaling);\r\n parentMesh.addChild(collider, Gizmo.PreserveScaling);\r\n return { rotationMesh, collider };\r\n }\r\n\r\n protected _attachedNodeChanged(value: Nullable<Node>) {\r\n if (this.dragBehavior) {\r\n this.dragBehavior.enabled = value ? true : false;\r\n }\r\n }\r\n\r\n /**\r\n * If the gizmo is enabled\r\n */\r\n public set isEnabled(value: boolean) {\r\n this._isEnabled = value;\r\n if (!value) {\r\n this.attachedMesh = null;\r\n } else {\r\n if (this._parent) {\r\n this.attachedMesh = this._parent.attachedMesh;\r\n }\r\n }\r\n }\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n /**\r\n * Disposes of the gizmo\r\n */\r\n public dispose() {\r\n this.onSnapObservable.clear();\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(this._pointerObserver);\r\n this.dragBehavior.detach();\r\n if (this._gizmoMesh) {\r\n this._gizmoMesh.dispose();\r\n }\r\n if (this._rotationDisplayPlane) {\r\n this._rotationDisplayPlane.dispose();\r\n }\r\n if (this._rotationShaderMaterial) {\r\n this._rotationShaderMaterial.dispose();\r\n }\r\n [this._coloredMaterial, this._hoverMaterial, this._disableMaterial].forEach((matl) => {\r\n if (matl) {\r\n matl.dispose();\r\n }\r\n });\r\n super.dispose();\r\n }\r\n}\r\n"]}
@@ -27,6 +27,8 @@ export interface IRotationGizmo extends IGizmo {
27
27
  onDragEndObservable: Observable<unknown>;
28
28
  /** Drag distance in babylon units that the gizmo will snap to when dragged */
29
29
  snapDistance: number;
30
+ /** Custom sensitivity value for the drag strength */
31
+ sensitivity: number;
30
32
  /**
31
33
  * Builds Gizmo Axis Cache to enable features such as hover state preservation and graying out other axis during manipulation
32
34
  * @param mesh Axis gizmo mesh
@@ -88,6 +90,7 @@ export declare class RotationGizmo extends Gizmo implements IRotationGizmo {
88
90
  protected _meshAttached: Nullable<AbstractMesh>;
89
91
  protected _nodeAttached: Nullable<Node>;
90
92
  protected _observables: Observer<PointerInfo>[];
93
+ protected _sensitivity: number;
91
94
  /** Node Caching for quick lookup */
92
95
  protected _gizmoAxisCache: Map<Mesh, GizmoAxisCache>;
93
96
  get attachedMesh(): Nullable<AbstractMesh>;
@@ -95,6 +98,11 @@ export declare class RotationGizmo extends Gizmo implements IRotationGizmo {
95
98
  get attachedNode(): Nullable<Node>;
96
99
  set attachedNode(node: Nullable<Node>);
97
100
  protected _checkBillboardTransform(): void;
101
+ /**
102
+ * Sensitivity factor for dragging (Default: 1)
103
+ */
104
+ set sensitivity(value: number);
105
+ get sensitivity(): number;
98
106
  /**
99
107
  * True when the mouse pointer is hovering a gizmo mesh
100
108
  */
@@ -46,6 +46,20 @@ export class RotationGizmo extends Gizmo {
46
46
  console.log("Rotation Gizmo will not work with transforms in billboard mode.");
47
47
  }
48
48
  }
49
+ /**
50
+ * Sensitivity factor for dragging (Default: 1)
51
+ */
52
+ set sensitivity(value) {
53
+ this._sensitivity = value;
54
+ [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {
55
+ if (gizmo) {
56
+ gizmo.sensitivity = value;
57
+ }
58
+ });
59
+ }
60
+ get sensitivity() {
61
+ return this._sensitivity;
62
+ }
49
63
  /**
50
64
  * True when the mouse pointer is hovering a gizmo mesh
51
65
  */
@@ -72,6 +86,7 @@ export class RotationGizmo extends Gizmo {
72
86
  /** Fires an event when any of it's sub gizmos are released from dragging */
73
87
  this.onDragEndObservable = new Observable();
74
88
  this._observables = [];
89
+ this._sensitivity = 1;
75
90
  /** Node Caching for quick lookup */
76
91
  this._gizmoAxisCache = new Map();
77
92
  const xColor = options && options.xOptions && options.xOptions.color ? options.xOptions.color : Color3.Red().scale(0.5);
@@ -1 +1 @@
1
- {"version":3,"file":"rotationGizmo.js","sourceRoot":"","sources":["../../../../dev/core/src/Gizmos/rotationGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../Misc/logger\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Vector3 } from \"../Maths/math.vector\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { GizmoAnchorPoint, GizmoCoordinatesMode, GizmoAxisCache, IGizmo } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport type { IPlaneRotationGizmo } from \"./planeRotationGizmo\";\r\nimport { PlaneRotationGizmo } from \"./planeRotationGizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport type { Node } from \"../node\";\r\nimport type { PointerInfo } from \"../Events/pointerEvents\";\r\nimport type { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { GizmoManager } from \"./gizmoManager\";\r\n\r\n/**\r\n * Interface for rotation gizmo\r\n */\r\nexport interface IRotationGizmo extends IGizmo {\r\n /** Internal gizmo used for interactions on the x axis */\r\n xGizmo: IPlaneRotationGizmo;\r\n /** Internal gizmo used for interactions on the y axis */\r\n yGizmo: IPlaneRotationGizmo;\r\n /** Internal gizmo used for interactions on the z axis */\r\n zGizmo: IPlaneRotationGizmo;\r\n /** Fires an event when any of it's sub gizmos are dragged */\r\n onDragStartObservable: Observable<unknown>;\r\n /** Fires an event when any of it's sub gizmos are released from dragging */\r\n onDragEndObservable: Observable<unknown>;\r\n /** Drag distance in babylon units that the gizmo will snap to when dragged */\r\n snapDistance: number;\r\n /**\r\n * Builds Gizmo Axis Cache to enable features such as hover state preservation and graying out other axis during manipulation\r\n * @param mesh Axis gizmo mesh\r\n * @param cache Gizmo axis definition used for reactive gizmo UI\r\n */\r\n addToAxisCache(mesh: Mesh, cache: GizmoAxisCache): void;\r\n}\r\n\r\n/**\r\n * Options for each individual plane rotation gizmo contained within RotationGizmo\r\n * @since 5.0.0\r\n */\r\nexport interface PlaneRotationGizmoOptions {\r\n /**\r\n * Color to use for the plane rotation gizmo\r\n */\r\n color?: Color3;\r\n}\r\n\r\n/**\r\n * Additional options for each rotation gizmo\r\n */\r\nexport interface RotationGizmoOptions {\r\n /**\r\n * When set, the gizmo will always appear the same size no matter where the camera is (default: true)\r\n */\r\n updateScale?: boolean;\r\n\r\n /**\r\n * Specific options for xGizmo\r\n */\r\n xOptions?: PlaneRotationGizmoOptions;\r\n\r\n /**\r\n * Specific options for yGizmo\r\n */\r\n yOptions?: PlaneRotationGizmoOptions;\r\n\r\n /**\r\n * Specific options for zGizmo\r\n */\r\n zOptions?: PlaneRotationGizmoOptions;\r\n}\r\n\r\n/**\r\n * Gizmo that enables rotating a mesh along 3 axis\r\n */\r\nexport class RotationGizmo extends Gizmo implements IRotationGizmo {\r\n /**\r\n * Internal gizmo used for interactions on the x axis\r\n */\r\n public xGizmo: IPlaneRotationGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the y axis\r\n */\r\n public yGizmo: IPlaneRotationGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the z axis\r\n */\r\n public zGizmo: IPlaneRotationGizmo;\r\n\r\n /** Fires an event when any of it's sub gizmos are dragged */\r\n public onDragStartObservable = new Observable();\r\n /** Fires an event when any of it's sub gizmos are released from dragging */\r\n public onDragEndObservable = new Observable();\r\n\r\n protected _meshAttached: Nullable<AbstractMesh>;\r\n protected _nodeAttached: Nullable<Node>;\r\n protected _observables: Observer<PointerInfo>[] = [];\r\n\r\n /** Node Caching for quick lookup */\r\n protected _gizmoAxisCache: Map<Mesh, GizmoAxisCache> = new Map();\r\n\r\n public get attachedMesh() {\r\n return this._meshAttached;\r\n }\r\n public set attachedMesh(mesh: Nullable<AbstractMesh>) {\r\n this._meshAttached = mesh;\r\n this._nodeAttached = mesh;\r\n this._checkBillboardTransform();\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n if (gizmo.isEnabled) {\r\n gizmo.attachedMesh = mesh;\r\n } else {\r\n gizmo.attachedMesh = null;\r\n }\r\n });\r\n }\r\n\r\n public get attachedNode() {\r\n return this._nodeAttached;\r\n }\r\n public set attachedNode(node: Nullable<Node>) {\r\n this._meshAttached = null;\r\n this._nodeAttached = node;\r\n this._checkBillboardTransform();\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n if (gizmo.isEnabled) {\r\n gizmo.attachedNode = node;\r\n } else {\r\n gizmo.attachedNode = null;\r\n }\r\n });\r\n }\r\n\r\n protected _checkBillboardTransform() {\r\n if (this._nodeAttached && (<TransformNode>this._nodeAttached).billboardMode) {\r\n console.log(\"Rotation Gizmo will not work with transforms in billboard mode.\");\r\n }\r\n }\r\n\r\n /**\r\n * True when the mouse pointer is hovering a gizmo mesh\r\n */\r\n public get isHovered() {\r\n let hovered = false;\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n hovered = hovered || gizmo.isHovered;\r\n });\r\n return hovered;\r\n }\r\n\r\n /**\r\n * Creates a RotationGizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n * @param tessellation Amount of tessellation to be used when creating rotation circles\r\n * @param useEulerRotation Use and update Euler angle instead of quaternion\r\n * @param thickness display gizmo axis thickness\r\n * @param gizmoManager Gizmo manager\r\n * @param options More options\r\n */\r\n constructor(\r\n gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer,\r\n tessellation = 32,\r\n useEulerRotation = false,\r\n thickness: number = 1,\r\n gizmoManager?: GizmoManager,\r\n options?: RotationGizmoOptions\r\n ) {\r\n super(gizmoLayer);\r\n const xColor = options && options.xOptions && options.xOptions.color ? options.xOptions.color : Color3.Red().scale(0.5);\r\n const yColor = options && options.yOptions && options.yOptions.color ? options.yOptions.color : Color3.Green().scale(0.5);\r\n const zColor = options && options.zOptions && options.zOptions.color ? options.zOptions.color : Color3.Blue().scale(0.5);\r\n this.xGizmo = new PlaneRotationGizmo(new Vector3(1, 0, 0), xColor, gizmoLayer, tessellation, this, useEulerRotation, thickness);\r\n this.yGizmo = new PlaneRotationGizmo(new Vector3(0, 1, 0), yColor, gizmoLayer, tessellation, this, useEulerRotation, thickness);\r\n this.zGizmo = new PlaneRotationGizmo(new Vector3(0, 0, 1), zColor, gizmoLayer, tessellation, this, useEulerRotation, thickness);\r\n // Relay drag events and set update scale\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n //must set updateScale on each gizmo, as setting it on root RotationGizmo doesnt prevent individual gizmos from updating\r\n //currently updateScale is a property with no getter/setter, so no good way to override behavior at runtime, so we will at least set it on startup\r\n if (options && options.updateScale != undefined) {\r\n gizmo.updateScale = options.updateScale;\r\n }\r\n gizmo.dragBehavior.onDragStartObservable.add(() => {\r\n this.onDragStartObservable.notifyObservers({});\r\n });\r\n gizmo.dragBehavior.onDragEndObservable.add(() => {\r\n this.onDragEndObservable.notifyObservers({});\r\n });\r\n });\r\n\r\n this.attachedMesh = null;\r\n this.attachedNode = null;\r\n\r\n if (gizmoManager) {\r\n gizmoManager.addToAxisCache(this._gizmoAxisCache);\r\n } else {\r\n // Only subscribe to pointer event if gizmoManager isnt\r\n Gizmo.GizmoAxisPointerObserver(gizmoLayer, this._gizmoAxisCache);\r\n }\r\n }\r\n\r\n /**\r\n * If set the gizmo's rotation will be updated to match the attached mesh each frame (Default: true)\r\n * NOTE: This is only possible for meshes with uniform scaling, as otherwise it's not possible to decompose the rotation\r\n */\r\n public set updateGizmoRotationToMatchAttachedMesh(value: boolean) {\r\n if (this.xGizmo) {\r\n this.xGizmo.updateGizmoRotationToMatchAttachedMesh = value;\r\n this.yGizmo.updateGizmoRotationToMatchAttachedMesh = value;\r\n this.zGizmo.updateGizmoRotationToMatchAttachedMesh = value;\r\n }\r\n }\r\n public get updateGizmoRotationToMatchAttachedMesh() {\r\n return this.xGizmo.updateGizmoRotationToMatchAttachedMesh;\r\n }\r\n\r\n public set updateGizmoPositionToMatchAttachedMesh(value: boolean) {\r\n if (this.xGizmo) {\r\n this.xGizmo.updateGizmoPositionToMatchAttachedMesh = value;\r\n this.yGizmo.updateGizmoPositionToMatchAttachedMesh = value;\r\n this.zGizmo.updateGizmoPositionToMatchAttachedMesh = value;\r\n }\r\n }\r\n public get updateGizmoPositionToMatchAttachedMesh() {\r\n return this.xGizmo.updateGizmoPositionToMatchAttachedMesh;\r\n }\r\n\r\n public set anchorPoint(value: GizmoAnchorPoint) {\r\n this._anchorPoint = value;\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n gizmo.anchorPoint = value;\r\n });\r\n }\r\n public get anchorPoint() {\r\n return this._anchorPoint;\r\n }\r\n\r\n /**\r\n * Set the coordinate system to use. By default it's local.\r\n * But it's possible for a user to tweak so its local for translation and world for rotation.\r\n * In that case, setting the coordinate system will change `updateGizmoRotationToMatchAttachedMesh` and `updateGizmoPositionToMatchAttachedMesh`\r\n */\r\n public set coordinatesMode(coordinatesMode: GizmoCoordinatesMode) {\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n gizmo.coordinatesMode = coordinatesMode;\r\n });\r\n }\r\n\r\n public set updateScale(value: boolean) {\r\n if (this.xGizmo) {\r\n this.xGizmo.updateScale = value;\r\n this.yGizmo.updateScale = value;\r\n this.zGizmo.updateScale = value;\r\n }\r\n }\r\n public get updateScale() {\r\n return this.xGizmo.updateScale;\r\n }\r\n /**\r\n * Drag distance in babylon units that the gizmo will snap to when dragged (Default: 0)\r\n */\r\n public set snapDistance(value: number) {\r\n if (this.xGizmo) {\r\n this.xGizmo.snapDistance = value;\r\n this.yGizmo.snapDistance = value;\r\n this.zGizmo.snapDistance = value;\r\n }\r\n }\r\n public get snapDistance() {\r\n return this.xGizmo.snapDistance;\r\n }\r\n\r\n /**\r\n * Ratio for the scale of the gizmo (Default: 1)\r\n */\r\n public set scaleRatio(value: number) {\r\n if (this.xGizmo) {\r\n this.xGizmo.scaleRatio = value;\r\n this.yGizmo.scaleRatio = value;\r\n this.zGizmo.scaleRatio = value;\r\n }\r\n }\r\n public get scaleRatio() {\r\n return this.xGizmo.scaleRatio;\r\n }\r\n\r\n /**\r\n * Builds Gizmo Axis Cache to enable features such as hover state preservation and graying out other axis during manipulation\r\n * @param mesh Axis gizmo mesh\r\n * @param cache Gizmo axis definition used for reactive gizmo UI\r\n */\r\n public addToAxisCache(mesh: Mesh, cache: GizmoAxisCache) {\r\n this._gizmoAxisCache.set(mesh, cache);\r\n }\r\n\r\n /**\r\n * Disposes of the gizmo\r\n */\r\n public dispose() {\r\n this.xGizmo.dispose();\r\n this.yGizmo.dispose();\r\n this.zGizmo.dispose();\r\n this.onDragStartObservable.clear();\r\n this.onDragEndObservable.clear();\r\n this._observables.forEach((obs) => {\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(obs);\r\n });\r\n }\r\n\r\n /**\r\n * CustomMeshes are not supported by this gizmo\r\n */\r\n public setCustomMesh() {\r\n Logger.Error(\r\n \"Custom meshes are not supported on this gizmo, please set the custom meshes on the gizmos contained within this one (gizmo.xGizmo, gizmo.yGizmo, gizmo.zGizmo)\"\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"rotationGizmo.js","sourceRoot":"","sources":["../../../../dev/core/src/Gizmos/rotationGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../Misc/logger\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Vector3 } from \"../Maths/math.vector\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { GizmoAnchorPoint, GizmoCoordinatesMode, GizmoAxisCache, IGizmo } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport type { IPlaneRotationGizmo } from \"./planeRotationGizmo\";\r\nimport { PlaneRotationGizmo } from \"./planeRotationGizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport type { Node } from \"../node\";\r\nimport type { PointerInfo } from \"../Events/pointerEvents\";\r\nimport type { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { GizmoManager } from \"./gizmoManager\";\r\n\r\n/**\r\n * Interface for rotation gizmo\r\n */\r\nexport interface IRotationGizmo extends IGizmo {\r\n /** Internal gizmo used for interactions on the x axis */\r\n xGizmo: IPlaneRotationGizmo;\r\n /** Internal gizmo used for interactions on the y axis */\r\n yGizmo: IPlaneRotationGizmo;\r\n /** Internal gizmo used for interactions on the z axis */\r\n zGizmo: IPlaneRotationGizmo;\r\n /** Fires an event when any of it's sub gizmos are dragged */\r\n onDragStartObservable: Observable<unknown>;\r\n /** Fires an event when any of it's sub gizmos are released from dragging */\r\n onDragEndObservable: Observable<unknown>;\r\n /** Drag distance in babylon units that the gizmo will snap to when dragged */\r\n snapDistance: number;\r\n /** Custom sensitivity value for the drag strength */\r\n sensitivity: number;\r\n /**\r\n * Builds Gizmo Axis Cache to enable features such as hover state preservation and graying out other axis during manipulation\r\n * @param mesh Axis gizmo mesh\r\n * @param cache Gizmo axis definition used for reactive gizmo UI\r\n */\r\n addToAxisCache(mesh: Mesh, cache: GizmoAxisCache): void;\r\n}\r\n\r\n/**\r\n * Options for each individual plane rotation gizmo contained within RotationGizmo\r\n * @since 5.0.0\r\n */\r\nexport interface PlaneRotationGizmoOptions {\r\n /**\r\n * Color to use for the plane rotation gizmo\r\n */\r\n color?: Color3;\r\n}\r\n\r\n/**\r\n * Additional options for each rotation gizmo\r\n */\r\nexport interface RotationGizmoOptions {\r\n /**\r\n * When set, the gizmo will always appear the same size no matter where the camera is (default: true)\r\n */\r\n updateScale?: boolean;\r\n\r\n /**\r\n * Specific options for xGizmo\r\n */\r\n xOptions?: PlaneRotationGizmoOptions;\r\n\r\n /**\r\n * Specific options for yGizmo\r\n */\r\n yOptions?: PlaneRotationGizmoOptions;\r\n\r\n /**\r\n * Specific options for zGizmo\r\n */\r\n zOptions?: PlaneRotationGizmoOptions;\r\n}\r\n\r\n/**\r\n * Gizmo that enables rotating a mesh along 3 axis\r\n */\r\nexport class RotationGizmo extends Gizmo implements IRotationGizmo {\r\n /**\r\n * Internal gizmo used for interactions on the x axis\r\n */\r\n public xGizmo: IPlaneRotationGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the y axis\r\n */\r\n public yGizmo: IPlaneRotationGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the z axis\r\n */\r\n public zGizmo: IPlaneRotationGizmo;\r\n\r\n /** Fires an event when any of it's sub gizmos are dragged */\r\n public onDragStartObservable = new Observable();\r\n /** Fires an event when any of it's sub gizmos are released from dragging */\r\n public onDragEndObservable = new Observable();\r\n\r\n protected _meshAttached: Nullable<AbstractMesh>;\r\n protected _nodeAttached: Nullable<Node>;\r\n protected _observables: Observer<PointerInfo>[] = [];\r\n protected _sensitivity: number = 1;\r\n\r\n /** Node Caching for quick lookup */\r\n protected _gizmoAxisCache: Map<Mesh, GizmoAxisCache> = new Map();\r\n\r\n public get attachedMesh() {\r\n return this._meshAttached;\r\n }\r\n public set attachedMesh(mesh: Nullable<AbstractMesh>) {\r\n this._meshAttached = mesh;\r\n this._nodeAttached = mesh;\r\n this._checkBillboardTransform();\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n if (gizmo.isEnabled) {\r\n gizmo.attachedMesh = mesh;\r\n } else {\r\n gizmo.attachedMesh = null;\r\n }\r\n });\r\n }\r\n\r\n public get attachedNode() {\r\n return this._nodeAttached;\r\n }\r\n public set attachedNode(node: Nullable<Node>) {\r\n this._meshAttached = null;\r\n this._nodeAttached = node;\r\n this._checkBillboardTransform();\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n if (gizmo.isEnabled) {\r\n gizmo.attachedNode = node;\r\n } else {\r\n gizmo.attachedNode = null;\r\n }\r\n });\r\n }\r\n\r\n protected _checkBillboardTransform() {\r\n if (this._nodeAttached && (<TransformNode>this._nodeAttached).billboardMode) {\r\n console.log(\"Rotation Gizmo will not work with transforms in billboard mode.\");\r\n }\r\n }\r\n\r\n /**\r\n * Sensitivity factor for dragging (Default: 1)\r\n */\r\n public set sensitivity(value: number) {\r\n this._sensitivity = value;\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.sensitivity = value;\r\n }\r\n });\r\n }\r\n public get sensitivity() {\r\n return this._sensitivity;\r\n }\r\n\r\n /**\r\n * True when the mouse pointer is hovering a gizmo mesh\r\n */\r\n public get isHovered() {\r\n let hovered = false;\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n hovered = hovered || gizmo.isHovered;\r\n });\r\n return hovered;\r\n }\r\n\r\n /**\r\n * Creates a RotationGizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n * @param tessellation Amount of tessellation to be used when creating rotation circles\r\n * @param useEulerRotation Use and update Euler angle instead of quaternion\r\n * @param thickness display gizmo axis thickness\r\n * @param gizmoManager Gizmo manager\r\n * @param options More options\r\n */\r\n constructor(\r\n gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer,\r\n tessellation = 32,\r\n useEulerRotation = false,\r\n thickness: number = 1,\r\n gizmoManager?: GizmoManager,\r\n options?: RotationGizmoOptions\r\n ) {\r\n super(gizmoLayer);\r\n const xColor = options && options.xOptions && options.xOptions.color ? options.xOptions.color : Color3.Red().scale(0.5);\r\n const yColor = options && options.yOptions && options.yOptions.color ? options.yOptions.color : Color3.Green().scale(0.5);\r\n const zColor = options && options.zOptions && options.zOptions.color ? options.zOptions.color : Color3.Blue().scale(0.5);\r\n this.xGizmo = new PlaneRotationGizmo(new Vector3(1, 0, 0), xColor, gizmoLayer, tessellation, this, useEulerRotation, thickness);\r\n this.yGizmo = new PlaneRotationGizmo(new Vector3(0, 1, 0), yColor, gizmoLayer, tessellation, this, useEulerRotation, thickness);\r\n this.zGizmo = new PlaneRotationGizmo(new Vector3(0, 0, 1), zColor, gizmoLayer, tessellation, this, useEulerRotation, thickness);\r\n // Relay drag events and set update scale\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n //must set updateScale on each gizmo, as setting it on root RotationGizmo doesnt prevent individual gizmos from updating\r\n //currently updateScale is a property with no getter/setter, so no good way to override behavior at runtime, so we will at least set it on startup\r\n if (options && options.updateScale != undefined) {\r\n gizmo.updateScale = options.updateScale;\r\n }\r\n gizmo.dragBehavior.onDragStartObservable.add(() => {\r\n this.onDragStartObservable.notifyObservers({});\r\n });\r\n gizmo.dragBehavior.onDragEndObservable.add(() => {\r\n this.onDragEndObservable.notifyObservers({});\r\n });\r\n });\r\n\r\n this.attachedMesh = null;\r\n this.attachedNode = null;\r\n\r\n if (gizmoManager) {\r\n gizmoManager.addToAxisCache(this._gizmoAxisCache);\r\n } else {\r\n // Only subscribe to pointer event if gizmoManager isnt\r\n Gizmo.GizmoAxisPointerObserver(gizmoLayer, this._gizmoAxisCache);\r\n }\r\n }\r\n\r\n /**\r\n * If set the gizmo's rotation will be updated to match the attached mesh each frame (Default: true)\r\n * NOTE: This is only possible for meshes with uniform scaling, as otherwise it's not possible to decompose the rotation\r\n */\r\n public set updateGizmoRotationToMatchAttachedMesh(value: boolean) {\r\n if (this.xGizmo) {\r\n this.xGizmo.updateGizmoRotationToMatchAttachedMesh = value;\r\n this.yGizmo.updateGizmoRotationToMatchAttachedMesh = value;\r\n this.zGizmo.updateGizmoRotationToMatchAttachedMesh = value;\r\n }\r\n }\r\n public get updateGizmoRotationToMatchAttachedMesh() {\r\n return this.xGizmo.updateGizmoRotationToMatchAttachedMesh;\r\n }\r\n\r\n public set updateGizmoPositionToMatchAttachedMesh(value: boolean) {\r\n if (this.xGizmo) {\r\n this.xGizmo.updateGizmoPositionToMatchAttachedMesh = value;\r\n this.yGizmo.updateGizmoPositionToMatchAttachedMesh = value;\r\n this.zGizmo.updateGizmoPositionToMatchAttachedMesh = value;\r\n }\r\n }\r\n public get updateGizmoPositionToMatchAttachedMesh() {\r\n return this.xGizmo.updateGizmoPositionToMatchAttachedMesh;\r\n }\r\n\r\n public set anchorPoint(value: GizmoAnchorPoint) {\r\n this._anchorPoint = value;\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n gizmo.anchorPoint = value;\r\n });\r\n }\r\n public get anchorPoint() {\r\n return this._anchorPoint;\r\n }\r\n\r\n /**\r\n * Set the coordinate system to use. By default it's local.\r\n * But it's possible for a user to tweak so its local for translation and world for rotation.\r\n * In that case, setting the coordinate system will change `updateGizmoRotationToMatchAttachedMesh` and `updateGizmoPositionToMatchAttachedMesh`\r\n */\r\n public set coordinatesMode(coordinatesMode: GizmoCoordinatesMode) {\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n gizmo.coordinatesMode = coordinatesMode;\r\n });\r\n }\r\n\r\n public set updateScale(value: boolean) {\r\n if (this.xGizmo) {\r\n this.xGizmo.updateScale = value;\r\n this.yGizmo.updateScale = value;\r\n this.zGizmo.updateScale = value;\r\n }\r\n }\r\n public get updateScale() {\r\n return this.xGizmo.updateScale;\r\n }\r\n /**\r\n * Drag distance in babylon units that the gizmo will snap to when dragged (Default: 0)\r\n */\r\n public set snapDistance(value: number) {\r\n if (this.xGizmo) {\r\n this.xGizmo.snapDistance = value;\r\n this.yGizmo.snapDistance = value;\r\n this.zGizmo.snapDistance = value;\r\n }\r\n }\r\n public get snapDistance() {\r\n return this.xGizmo.snapDistance;\r\n }\r\n\r\n /**\r\n * Ratio for the scale of the gizmo (Default: 1)\r\n */\r\n public set scaleRatio(value: number) {\r\n if (this.xGizmo) {\r\n this.xGizmo.scaleRatio = value;\r\n this.yGizmo.scaleRatio = value;\r\n this.zGizmo.scaleRatio = value;\r\n }\r\n }\r\n public get scaleRatio() {\r\n return this.xGizmo.scaleRatio;\r\n }\r\n\r\n /**\r\n * Builds Gizmo Axis Cache to enable features such as hover state preservation and graying out other axis during manipulation\r\n * @param mesh Axis gizmo mesh\r\n * @param cache Gizmo axis definition used for reactive gizmo UI\r\n */\r\n public addToAxisCache(mesh: Mesh, cache: GizmoAxisCache) {\r\n this._gizmoAxisCache.set(mesh, cache);\r\n }\r\n\r\n /**\r\n * Disposes of the gizmo\r\n */\r\n public dispose() {\r\n this.xGizmo.dispose();\r\n this.yGizmo.dispose();\r\n this.zGizmo.dispose();\r\n this.onDragStartObservable.clear();\r\n this.onDragEndObservable.clear();\r\n this._observables.forEach((obs) => {\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(obs);\r\n });\r\n }\r\n\r\n /**\r\n * CustomMeshes are not supported by this gizmo\r\n */\r\n public setCustomMesh() {\r\n Logger.Error(\r\n \"Custom meshes are not supported on this gizmo, please set the custom meshes on the gizmos contained within this one (gizmo.xGizmo, gizmo.yGizmo, gizmo.zGizmo)\"\r\n );\r\n }\r\n}\r\n"]}
package/Layers/layer.js CHANGED
@@ -171,7 +171,7 @@ export class Layer {
171
171
  defines = "#define ALPHATEST";
172
172
  }
173
173
  if (this.texture && !this.texture.gammaSpace) {
174
- defines += "\r\n#define LINEAR";
174
+ defines += "\n#define LINEAR";
175
175
  }
176
176
  if (this._previousDefines !== defines) {
177
177
  this._previousDefines = defines;
@@ -1 +1 @@
1
- {"version":3,"file":"layer.js","sourceRoot":"","sources":["../../../../dev/core/src/Layers/layer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Vector2 } from \"../Maths/math.vector\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport type { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { SceneComponentConstants } from \"../sceneComponent\";\r\nimport { LayerSceneComponent } from \"./layerSceneComponent\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { DrawWrapper } from \"../Materials/drawWrapper\";\r\n\r\nimport \"../Shaders/layer.fragment\";\r\nimport \"../Shaders/layer.vertex\";\r\n\r\n/**\r\n * This represents a full screen 2d layer.\r\n * This can be useful to display a picture in the background of your scene for instance.\r\n * @see https://www.babylonjs-playground.com/#08A2BS#1\r\n */\r\nexport class Layer {\r\n /**\r\n * Define the texture the layer should display.\r\n */\r\n public texture: Nullable<BaseTexture>;\r\n\r\n /**\r\n * Is the layer in background or foreground.\r\n */\r\n public isBackground: boolean;\r\n\r\n private _applyPostProcess: boolean = true;\r\n /**\r\n * Determines if the layer is drawn before (true) or after (false) post-processing.\r\n * If the layer is background, it is always before.\r\n */\r\n public set applyPostProcess(value: boolean) {\r\n this._applyPostProcess = value;\r\n }\r\n public get applyPostProcess(): boolean {\r\n return this.isBackground || this._applyPostProcess;\r\n }\r\n\r\n /**\r\n * Define the color of the layer (instead of texture).\r\n */\r\n public color: Color4;\r\n\r\n /**\r\n * Define the scale of the layer in order to zoom in out of the texture.\r\n */\r\n public scale = new Vector2(1, 1);\r\n\r\n /**\r\n * Define an offset for the layer in order to shift the texture.\r\n */\r\n public offset = new Vector2(0, 0);\r\n\r\n /**\r\n * Define the alpha blending mode used in the layer in case the texture or color has an alpha.\r\n */\r\n public alphaBlendingMode = Constants.ALPHA_COMBINE;\r\n\r\n /**\r\n * Define if the layer should alpha test or alpha blend with the rest of the scene.\r\n * Alpha test will not mix with the background color in case of transparency.\r\n * It will either use the texture color or the background depending on the alpha value of the current pixel.\r\n */\r\n public alphaTest: boolean;\r\n\r\n /**\r\n * Define a mask to restrict the layer to only some of the scene cameras.\r\n */\r\n public layerMask: number = 0x0fffffff;\r\n\r\n /**\r\n * Define the list of render target the layer is visible into.\r\n */\r\n public renderTargetTextures: RenderTargetTexture[] = [];\r\n\r\n /**\r\n * Define if the layer is only used in renderTarget or if it also\r\n * renders in the main frame buffer of the canvas.\r\n */\r\n public renderOnlyInRenderTargetTextures = false;\r\n\r\n /**\r\n * Define if the layer is enabled (ie. should be displayed). Default: true\r\n */\r\n public isEnabled = true;\r\n\r\n private _scene: Scene;\r\n private _vertexBuffers: { [key: string]: Nullable<VertexBuffer> } = {};\r\n private _indexBuffer: Nullable<DataBuffer>;\r\n private _drawWrapper: DrawWrapper;\r\n private _previousDefines: string;\r\n\r\n /**\r\n * An event triggered when the layer is disposed.\r\n */\r\n public onDisposeObservable = new Observable<Layer>();\r\n\r\n private _onDisposeObserver: Nullable<Observer<Layer>>;\r\n /**\r\n * Back compatibility with callback before the onDisposeObservable existed.\r\n * The set callback will be triggered when the layer has been disposed.\r\n */\r\n public set onDispose(callback: () => void) {\r\n if (this._onDisposeObserver) {\r\n this.onDisposeObservable.remove(this._onDisposeObserver);\r\n }\r\n this._onDisposeObserver = this.onDisposeObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered before rendering the scene\r\n */\r\n public onBeforeRenderObservable = new Observable<Layer>();\r\n\r\n private _onBeforeRenderObserver: Nullable<Observer<Layer>>;\r\n /**\r\n * Back compatibility with callback before the onBeforeRenderObservable existed.\r\n * The set callback will be triggered just before rendering the layer.\r\n */\r\n public set onBeforeRender(callback: () => void) {\r\n if (this._onBeforeRenderObserver) {\r\n this.onBeforeRenderObservable.remove(this._onBeforeRenderObserver);\r\n }\r\n this._onBeforeRenderObserver = this.onBeforeRenderObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered after rendering the scene\r\n */\r\n public onAfterRenderObservable = new Observable<Layer>();\r\n\r\n private _onAfterRenderObserver: Nullable<Observer<Layer>>;\r\n /**\r\n * Back compatibility with callback before the onAfterRenderObservable existed.\r\n * The set callback will be triggered just after rendering the layer.\r\n */\r\n public set onAfterRender(callback: () => void) {\r\n if (this._onAfterRenderObserver) {\r\n this.onAfterRenderObservable.remove(this._onAfterRenderObserver);\r\n }\r\n this._onAfterRenderObserver = this.onAfterRenderObservable.add(callback);\r\n }\r\n\r\n /**\r\n * Instantiates a new layer.\r\n * This represents a full screen 2d layer.\r\n * This can be useful to display a picture in the background of your scene for instance.\r\n * @see https://www.babylonjs-playground.com/#08A2BS#1\r\n * @param name Define the name of the layer in the scene\r\n * @param imgUrl Define the url of the texture to display in the layer\r\n * @param scene Define the scene the layer belongs to\r\n * @param isBackground Defines whether the layer is displayed in front or behind the scene\r\n * @param color Defines a color for the layer\r\n */\r\n constructor(\r\n /**\r\n * Define the name of the layer.\r\n */\r\n public name: string,\r\n imgUrl: Nullable<string>,\r\n scene: Nullable<Scene>,\r\n isBackground?: boolean,\r\n color?: Color4\r\n ) {\r\n this.texture = imgUrl ? new Texture(imgUrl, scene, true) : null;\r\n this.isBackground = isBackground === undefined ? true : isBackground;\r\n this.color = color === undefined ? new Color4(1, 1, 1, 1) : color;\r\n\r\n this._scene = <Scene>(scene || EngineStore.LastCreatedScene);\r\n let layerComponent = this._scene._getComponent(SceneComponentConstants.NAME_LAYER) as LayerSceneComponent;\r\n if (!layerComponent) {\r\n layerComponent = new LayerSceneComponent(this._scene);\r\n this._scene._addComponent(layerComponent);\r\n }\r\n this._scene.layers.push(this);\r\n\r\n const engine = this._scene.getEngine();\r\n\r\n this._drawWrapper = new DrawWrapper(engine);\r\n\r\n // VBO\r\n const vertices = [];\r\n vertices.push(1, 1);\r\n vertices.push(-1, 1);\r\n vertices.push(-1, -1);\r\n vertices.push(1, -1);\r\n\r\n const vertexBuffer = new VertexBuffer(engine, vertices, VertexBuffer.PositionKind, false, false, 2);\r\n this._vertexBuffers[VertexBuffer.PositionKind] = vertexBuffer;\r\n\r\n this._createIndexBuffer();\r\n }\r\n\r\n private _createIndexBuffer(): void {\r\n const engine = this._scene.getEngine();\r\n\r\n // Indices\r\n const indices = [];\r\n indices.push(0);\r\n indices.push(1);\r\n indices.push(2);\r\n\r\n indices.push(0);\r\n indices.push(2);\r\n indices.push(3);\r\n\r\n this._indexBuffer = engine.createIndexBuffer(indices);\r\n }\r\n\r\n /** @internal */\r\n public _rebuild(): void {\r\n const vb = this._vertexBuffers[VertexBuffer.PositionKind];\r\n\r\n if (vb) {\r\n vb._rebuild();\r\n }\r\n\r\n this._createIndexBuffer();\r\n }\r\n\r\n /**\r\n * Checks if the layer is ready to be rendered\r\n * @returns true if the layer is ready. False otherwise.\r\n */\r\n public isReady() {\r\n const engine = this._scene.getEngine();\r\n\r\n let defines = \"\";\r\n\r\n if (this.alphaTest) {\r\n defines = \"#define ALPHATEST\";\r\n }\r\n\r\n if (this.texture && !this.texture.gammaSpace) {\r\n defines += \"\\r\\n#define LINEAR\";\r\n }\r\n\r\n if (this._previousDefines !== defines) {\r\n this._previousDefines = defines;\r\n this._drawWrapper.effect = engine.createEffect(\"layer\", [VertexBuffer.PositionKind], [\"textureMatrix\", \"color\", \"scale\", \"offset\"], [\"textureSampler\"], defines);\r\n }\r\n\r\n const currentEffect = this._drawWrapper.effect;\r\n\r\n return currentEffect?.isReady() && this.texture?.isReady();\r\n }\r\n\r\n /**\r\n * Renders the layer in the scene.\r\n */\r\n public render(): void {\r\n if (!this.isEnabled) {\r\n return;\r\n }\r\n\r\n const engine = this._scene.getEngine();\r\n\r\n // Check\r\n if (!this.isReady()) {\r\n return;\r\n }\r\n\r\n const currentEffect = this._drawWrapper.effect!;\r\n\r\n this.onBeforeRenderObservable.notifyObservers(this);\r\n\r\n // Render\r\n engine.enableEffect(this._drawWrapper);\r\n engine.setState(false);\r\n\r\n // Texture\r\n currentEffect.setTexture(\"textureSampler\", this.texture);\r\n currentEffect.setMatrix(\"textureMatrix\", this.texture!.getTextureMatrix());\r\n\r\n // Color\r\n currentEffect.setFloat4(\"color\", this.color.r, this.color.g, this.color.b, this.color.a);\r\n\r\n // Scale / offset\r\n currentEffect.setVector2(\"offset\", this.offset);\r\n currentEffect.setVector2(\"scale\", this.scale);\r\n\r\n // VBOs\r\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, currentEffect);\r\n\r\n // Draw order\r\n if (!this.alphaTest) {\r\n engine.setAlphaMode(this.alphaBlendingMode);\r\n engine.drawElementsType(Material.TriangleFillMode, 0, 6);\r\n engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n } else {\r\n engine.drawElementsType(Material.TriangleFillMode, 0, 6);\r\n }\r\n\r\n this.onAfterRenderObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Disposes and releases the associated resources.\r\n */\r\n public dispose(): void {\r\n const vertexBuffer = this._vertexBuffers[VertexBuffer.PositionKind];\r\n if (vertexBuffer) {\r\n vertexBuffer.dispose();\r\n this._vertexBuffers[VertexBuffer.PositionKind] = null;\r\n }\r\n\r\n if (this._indexBuffer) {\r\n this._scene.getEngine()._releaseBuffer(this._indexBuffer);\r\n this._indexBuffer = null;\r\n }\r\n\r\n if (this.texture) {\r\n this.texture.dispose();\r\n this.texture = null;\r\n }\r\n\r\n // Clean RTT list\r\n this.renderTargetTextures = [];\r\n\r\n // Remove from scene\r\n const index = this._scene.layers.indexOf(this);\r\n this._scene.layers.splice(index, 1);\r\n\r\n // Callback\r\n this.onDisposeObservable.notifyObservers(this);\r\n\r\n this.onDisposeObservable.clear();\r\n this.onAfterRenderObservable.clear();\r\n this.onBeforeRenderObservable.clear();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"layer.js","sourceRoot":"","sources":["../../../../dev/core/src/Layers/layer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Vector2 } from \"../Maths/math.vector\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport type { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { SceneComponentConstants } from \"../sceneComponent\";\r\nimport { LayerSceneComponent } from \"./layerSceneComponent\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { DrawWrapper } from \"../Materials/drawWrapper\";\r\n\r\nimport \"../Shaders/layer.fragment\";\r\nimport \"../Shaders/layer.vertex\";\r\n\r\n/**\r\n * This represents a full screen 2d layer.\r\n * This can be useful to display a picture in the background of your scene for instance.\r\n * @see https://www.babylonjs-playground.com/#08A2BS#1\r\n */\r\nexport class Layer {\r\n /**\r\n * Define the texture the layer should display.\r\n */\r\n public texture: Nullable<BaseTexture>;\r\n\r\n /**\r\n * Is the layer in background or foreground.\r\n */\r\n public isBackground: boolean;\r\n\r\n private _applyPostProcess: boolean = true;\r\n /**\r\n * Determines if the layer is drawn before (true) or after (false) post-processing.\r\n * If the layer is background, it is always before.\r\n */\r\n public set applyPostProcess(value: boolean) {\r\n this._applyPostProcess = value;\r\n }\r\n public get applyPostProcess(): boolean {\r\n return this.isBackground || this._applyPostProcess;\r\n }\r\n\r\n /**\r\n * Define the color of the layer (instead of texture).\r\n */\r\n public color: Color4;\r\n\r\n /**\r\n * Define the scale of the layer in order to zoom in out of the texture.\r\n */\r\n public scale = new Vector2(1, 1);\r\n\r\n /**\r\n * Define an offset for the layer in order to shift the texture.\r\n */\r\n public offset = new Vector2(0, 0);\r\n\r\n /**\r\n * Define the alpha blending mode used in the layer in case the texture or color has an alpha.\r\n */\r\n public alphaBlendingMode = Constants.ALPHA_COMBINE;\r\n\r\n /**\r\n * Define if the layer should alpha test or alpha blend with the rest of the scene.\r\n * Alpha test will not mix with the background color in case of transparency.\r\n * It will either use the texture color or the background depending on the alpha value of the current pixel.\r\n */\r\n public alphaTest: boolean;\r\n\r\n /**\r\n * Define a mask to restrict the layer to only some of the scene cameras.\r\n */\r\n public layerMask: number = 0x0fffffff;\r\n\r\n /**\r\n * Define the list of render target the layer is visible into.\r\n */\r\n public renderTargetTextures: RenderTargetTexture[] = [];\r\n\r\n /**\r\n * Define if the layer is only used in renderTarget or if it also\r\n * renders in the main frame buffer of the canvas.\r\n */\r\n public renderOnlyInRenderTargetTextures = false;\r\n\r\n /**\r\n * Define if the layer is enabled (ie. should be displayed). Default: true\r\n */\r\n public isEnabled = true;\r\n\r\n private _scene: Scene;\r\n private _vertexBuffers: { [key: string]: Nullable<VertexBuffer> } = {};\r\n private _indexBuffer: Nullable<DataBuffer>;\r\n private _drawWrapper: DrawWrapper;\r\n private _previousDefines: string;\r\n\r\n /**\r\n * An event triggered when the layer is disposed.\r\n */\r\n public onDisposeObservable = new Observable<Layer>();\r\n\r\n private _onDisposeObserver: Nullable<Observer<Layer>>;\r\n /**\r\n * Back compatibility with callback before the onDisposeObservable existed.\r\n * The set callback will be triggered when the layer has been disposed.\r\n */\r\n public set onDispose(callback: () => void) {\r\n if (this._onDisposeObserver) {\r\n this.onDisposeObservable.remove(this._onDisposeObserver);\r\n }\r\n this._onDisposeObserver = this.onDisposeObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered before rendering the scene\r\n */\r\n public onBeforeRenderObservable = new Observable<Layer>();\r\n\r\n private _onBeforeRenderObserver: Nullable<Observer<Layer>>;\r\n /**\r\n * Back compatibility with callback before the onBeforeRenderObservable existed.\r\n * The set callback will be triggered just before rendering the layer.\r\n */\r\n public set onBeforeRender(callback: () => void) {\r\n if (this._onBeforeRenderObserver) {\r\n this.onBeforeRenderObservable.remove(this._onBeforeRenderObserver);\r\n }\r\n this._onBeforeRenderObserver = this.onBeforeRenderObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered after rendering the scene\r\n */\r\n public onAfterRenderObservable = new Observable<Layer>();\r\n\r\n private _onAfterRenderObserver: Nullable<Observer<Layer>>;\r\n /**\r\n * Back compatibility with callback before the onAfterRenderObservable existed.\r\n * The set callback will be triggered just after rendering the layer.\r\n */\r\n public set onAfterRender(callback: () => void) {\r\n if (this._onAfterRenderObserver) {\r\n this.onAfterRenderObservable.remove(this._onAfterRenderObserver);\r\n }\r\n this._onAfterRenderObserver = this.onAfterRenderObservable.add(callback);\r\n }\r\n\r\n /**\r\n * Instantiates a new layer.\r\n * This represents a full screen 2d layer.\r\n * This can be useful to display a picture in the background of your scene for instance.\r\n * @see https://www.babylonjs-playground.com/#08A2BS#1\r\n * @param name Define the name of the layer in the scene\r\n * @param imgUrl Define the url of the texture to display in the layer\r\n * @param scene Define the scene the layer belongs to\r\n * @param isBackground Defines whether the layer is displayed in front or behind the scene\r\n * @param color Defines a color for the layer\r\n */\r\n constructor(\r\n /**\r\n * Define the name of the layer.\r\n */\r\n public name: string,\r\n imgUrl: Nullable<string>,\r\n scene: Nullable<Scene>,\r\n isBackground?: boolean,\r\n color?: Color4\r\n ) {\r\n this.texture = imgUrl ? new Texture(imgUrl, scene, true) : null;\r\n this.isBackground = isBackground === undefined ? true : isBackground;\r\n this.color = color === undefined ? new Color4(1, 1, 1, 1) : color;\r\n\r\n this._scene = <Scene>(scene || EngineStore.LastCreatedScene);\r\n let layerComponent = this._scene._getComponent(SceneComponentConstants.NAME_LAYER) as LayerSceneComponent;\r\n if (!layerComponent) {\r\n layerComponent = new LayerSceneComponent(this._scene);\r\n this._scene._addComponent(layerComponent);\r\n }\r\n this._scene.layers.push(this);\r\n\r\n const engine = this._scene.getEngine();\r\n\r\n this._drawWrapper = new DrawWrapper(engine);\r\n\r\n // VBO\r\n const vertices = [];\r\n vertices.push(1, 1);\r\n vertices.push(-1, 1);\r\n vertices.push(-1, -1);\r\n vertices.push(1, -1);\r\n\r\n const vertexBuffer = new VertexBuffer(engine, vertices, VertexBuffer.PositionKind, false, false, 2);\r\n this._vertexBuffers[VertexBuffer.PositionKind] = vertexBuffer;\r\n\r\n this._createIndexBuffer();\r\n }\r\n\r\n private _createIndexBuffer(): void {\r\n const engine = this._scene.getEngine();\r\n\r\n // Indices\r\n const indices = [];\r\n indices.push(0);\r\n indices.push(1);\r\n indices.push(2);\r\n\r\n indices.push(0);\r\n indices.push(2);\r\n indices.push(3);\r\n\r\n this._indexBuffer = engine.createIndexBuffer(indices);\r\n }\r\n\r\n /** @internal */\r\n public _rebuild(): void {\r\n const vb = this._vertexBuffers[VertexBuffer.PositionKind];\r\n\r\n if (vb) {\r\n vb._rebuild();\r\n }\r\n\r\n this._createIndexBuffer();\r\n }\r\n\r\n /**\r\n * Checks if the layer is ready to be rendered\r\n * @returns true if the layer is ready. False otherwise.\r\n */\r\n public isReady() {\r\n const engine = this._scene.getEngine();\r\n\r\n let defines = \"\";\r\n\r\n if (this.alphaTest) {\r\n defines = \"#define ALPHATEST\";\r\n }\r\n\r\n if (this.texture && !this.texture.gammaSpace) {\r\n defines += \"\\n#define LINEAR\";\r\n }\r\n\r\n if (this._previousDefines !== defines) {\r\n this._previousDefines = defines;\r\n this._drawWrapper.effect = engine.createEffect(\"layer\", [VertexBuffer.PositionKind], [\"textureMatrix\", \"color\", \"scale\", \"offset\"], [\"textureSampler\"], defines);\r\n }\r\n\r\n const currentEffect = this._drawWrapper.effect;\r\n\r\n return currentEffect?.isReady() && this.texture?.isReady();\r\n }\r\n\r\n /**\r\n * Renders the layer in the scene.\r\n */\r\n public render(): void {\r\n if (!this.isEnabled) {\r\n return;\r\n }\r\n\r\n const engine = this._scene.getEngine();\r\n\r\n // Check\r\n if (!this.isReady()) {\r\n return;\r\n }\r\n\r\n const currentEffect = this._drawWrapper.effect!;\r\n\r\n this.onBeforeRenderObservable.notifyObservers(this);\r\n\r\n // Render\r\n engine.enableEffect(this._drawWrapper);\r\n engine.setState(false);\r\n\r\n // Texture\r\n currentEffect.setTexture(\"textureSampler\", this.texture);\r\n currentEffect.setMatrix(\"textureMatrix\", this.texture!.getTextureMatrix());\r\n\r\n // Color\r\n currentEffect.setFloat4(\"color\", this.color.r, this.color.g, this.color.b, this.color.a);\r\n\r\n // Scale / offset\r\n currentEffect.setVector2(\"offset\", this.offset);\r\n currentEffect.setVector2(\"scale\", this.scale);\r\n\r\n // VBOs\r\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, currentEffect);\r\n\r\n // Draw order\r\n if (!this.alphaTest) {\r\n engine.setAlphaMode(this.alphaBlendingMode);\r\n engine.drawElementsType(Material.TriangleFillMode, 0, 6);\r\n engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n } else {\r\n engine.drawElementsType(Material.TriangleFillMode, 0, 6);\r\n }\r\n\r\n this.onAfterRenderObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Disposes and releases the associated resources.\r\n */\r\n public dispose(): void {\r\n const vertexBuffer = this._vertexBuffers[VertexBuffer.PositionKind];\r\n if (vertexBuffer) {\r\n vertexBuffer.dispose();\r\n this._vertexBuffers[VertexBuffer.PositionKind] = null;\r\n }\r\n\r\n if (this._indexBuffer) {\r\n this._scene.getEngine()._releaseBuffer(this._indexBuffer);\r\n this._indexBuffer = null;\r\n }\r\n\r\n if (this.texture) {\r\n this.texture.dispose();\r\n this.texture = null;\r\n }\r\n\r\n // Clean RTT list\r\n this.renderTargetTextures = [];\r\n\r\n // Remove from scene\r\n const index = this._scene.layers.indexOf(this);\r\n this._scene.layers.splice(index, 1);\r\n\r\n // Callback\r\n this.onDisposeObservable.notifyObservers(this);\r\n\r\n this.onDisposeObservable.clear();\r\n this.onAfterRenderObservable.clear();\r\n this.onBeforeRenderObservable.clear();\r\n }\r\n}\r\n"]}
@@ -240,8 +240,9 @@ export declare class CascadedShadowGenerator extends ShadowGenerator {
240
240
  * @param light The directional light object generating the shadows.
241
241
  * @param usefulFloatFirst By default the generator will try to use half float textures but if you need precision (for self shadowing for instance), you can use this option to enforce full float texture.
242
242
  * @param camera Camera associated with this shadow generator (default: null). If null, takes the scene active camera at the time we need to access it
243
+ * @param useRedTextureType Forces the generator to use a Red instead of a RGBA type for the shadow map texture format (default: true)
243
244
  */
244
- constructor(mapSize: number, light: DirectionalLight, usefulFloatFirst?: boolean, camera?: Nullable<Camera>);
245
+ constructor(mapSize: number, light: DirectionalLight, usefulFloatFirst?: boolean, camera?: Nullable<Camera>, useRedTextureType?: boolean);
245
246
  protected _initializeGenerator(): void;
246
247
  protected _createTargetRenderTexture(): void;
247
248
  protected _initializeShadowMap(): void;
@@ -512,13 +512,14 @@ export class CascadedShadowGenerator extends ShadowGenerator {
512
512
  * @param light The directional light object generating the shadows.
513
513
  * @param usefulFloatFirst By default the generator will try to use half float textures but if you need precision (for self shadowing for instance), you can use this option to enforce full float texture.
514
514
  * @param camera Camera associated with this shadow generator (default: null). If null, takes the scene active camera at the time we need to access it
515
+ * @param useRedTextureType Forces the generator to use a Red instead of a RGBA type for the shadow map texture format (default: true)
515
516
  */
516
- constructor(mapSize, light, usefulFloatFirst, camera) {
517
+ constructor(mapSize, light, usefulFloatFirst, camera, useRedTextureType = true) {
517
518
  if (!CascadedShadowGenerator.IsSupported) {
518
519
  Logger.Error("CascadedShadowMap is not supported by the current engine.");
519
520
  return;
520
521
  }
521
- super(mapSize, light, usefulFloatFirst, camera);
522
+ super(mapSize, light, usefulFloatFirst, camera, useRedTextureType);
522
523
  this.usePercentageCloserFiltering = true;
523
524
  }
524
525
  _initializeGenerator() {
@@ -547,7 +548,7 @@ export class CascadedShadowGenerator extends ShadowGenerator {
547
548
  _createTargetRenderTexture() {
548
549
  const engine = this._scene.getEngine();
549
550
  const size = { width: this._mapSize, height: this._mapSize, layers: this.numCascades };
550
- this._shadowMap = new RenderTargetTexture(this._light.name + "_CSMShadowMap", size, this._scene, false, true, this._textureType, false, undefined, false, false, undefined /*, 6*/);
551
+ this._shadowMap = new RenderTargetTexture(this._light.name + "_CSMShadowMap", size, this._scene, false, true, this._textureType, false, undefined, false, false, undefined, this._useRedTextureType ? 6 : 5);
551
552
  this._shadowMap.createDepthStencilTexture(engine.useReverseDepthBuffer ? 516 : 513, true);
552
553
  this._shadowMap.noPrePassRenderer = true;
553
554
  }