@babylonjs/core 7.30.0 → 7.31.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 (116) hide show
  1. package/Engines/WebGPU/webgpuCacheBindGroups.js +13 -2
  2. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  3. package/Engines/WebGPU/webgpuCacheSampler.js +2 -3
  4. package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
  5. package/Engines/abstractEngine.js +2 -2
  6. package/Engines/abstractEngine.js.map +1 -1
  7. package/Materials/Background/backgroundMaterial.js +1 -11
  8. package/Materials/Background/backgroundMaterial.js.map +1 -1
  9. package/Materials/GaussianSplatting/gaussianSplattingMaterial.d.ts +8 -0
  10. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +43 -34
  11. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  12. package/Materials/Node/Blocks/GaussianSplatting/gaussianBlock.d.ts +32 -0
  13. package/Materials/Node/Blocks/GaussianSplatting/gaussianBlock.js +64 -0
  14. package/Materials/Node/Blocks/GaussianSplatting/gaussianBlock.js.map +1 -0
  15. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.d.ts +48 -0
  16. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.js +102 -0
  17. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.js.map +1 -0
  18. package/Materials/Node/Blocks/GaussianSplatting/index.d.ts +3 -0
  19. package/Materials/Node/Blocks/GaussianSplatting/index.js +4 -0
  20. package/Materials/Node/Blocks/GaussianSplatting/index.js.map +1 -0
  21. package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.d.ts +40 -0
  22. package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.js +96 -0
  23. package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.js.map +1 -0
  24. package/Materials/Node/Blocks/Input/inputBlock.js +6 -0
  25. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  26. package/Materials/Node/Blocks/index.d.ts +1 -0
  27. package/Materials/Node/Blocks/index.js +1 -0
  28. package/Materials/Node/Blocks/index.js.map +1 -1
  29. package/Materials/Node/Enums/nodeMaterialModes.d.ts +3 -1
  30. package/Materials/Node/Enums/nodeMaterialModes.js +2 -0
  31. package/Materials/Node/Enums/nodeMaterialModes.js.map +1 -1
  32. package/Materials/Node/index.d.ts +1 -0
  33. package/Materials/Node/index.js +1 -0
  34. package/Materials/Node/index.js.map +1 -1
  35. package/Materials/Node/nodeMaterialDefault.d.ts +6 -0
  36. package/Materials/Node/nodeMaterialDefault.js +53 -0
  37. package/Materials/Node/nodeMaterialDefault.js.map +1 -0
  38. package/Materials/PBR/pbrBaseMaterial.js +1 -11
  39. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  40. package/Materials/Textures/texture.js +7 -3
  41. package/Materials/Textures/texture.js.map +1 -1
  42. package/Materials/Textures/textureSampler.d.ts +1 -1
  43. package/Materials/Textures/textureSampler.js.map +1 -1
  44. package/Materials/material.d.ts +5 -1
  45. package/Materials/material.js +19 -1
  46. package/Materials/material.js.map +1 -1
  47. package/Materials/materialPluginManager.js +2 -2
  48. package/Materials/materialPluginManager.js.map +1 -1
  49. package/Materials/pushMaterial.d.ts +1 -1
  50. package/Materials/pushMaterial.js +2 -2
  51. package/Materials/pushMaterial.js.map +1 -1
  52. package/Materials/standardMaterial.js +1 -11
  53. package/Materials/standardMaterial.js.map +1 -1
  54. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +11 -0
  55. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +264 -61
  56. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  57. package/Meshes/Node/Blocks/Set/aggregatorBlock.d.ts +76 -0
  58. package/Meshes/Node/Blocks/Set/aggregatorBlock.js +210 -0
  59. package/Meshes/Node/Blocks/Set/aggregatorBlock.js.map +1 -0
  60. package/Meshes/Node/Blocks/booleanGeometryBlock.d.ts +6 -0
  61. package/Meshes/Node/Blocks/booleanGeometryBlock.js +16 -4
  62. package/Meshes/Node/Blocks/booleanGeometryBlock.js.map +1 -1
  63. package/Meshes/Node/Blocks/geometryTransformBlock.d.ts +6 -0
  64. package/Meshes/Node/Blocks/geometryTransformBlock.js +14 -2
  65. package/Meshes/Node/Blocks/geometryTransformBlock.js.map +1 -1
  66. package/Meshes/Node/index.d.ts +1 -0
  67. package/Meshes/Node/index.js +1 -0
  68. package/Meshes/Node/index.js.map +1 -1
  69. package/Meshes/Node/nodeGeometry.d.ts +1 -1
  70. package/Meshes/Node/nodeGeometry.js +14 -1
  71. package/Meshes/Node/nodeGeometry.js.map +1 -1
  72. package/Meshes/Node/nodeGeometryBlock.d.ts +4 -0
  73. package/Meshes/Node/nodeGeometryBlock.js +6 -0
  74. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  75. package/Meshes/csg.d.ts +1 -0
  76. package/Meshes/csg.js +1 -0
  77. package/Meshes/csg.js.map +1 -1
  78. package/Meshes/csg2.d.ts +131 -0
  79. package/Meshes/csg2.js +355 -0
  80. package/Meshes/csg2.js.map +1 -0
  81. package/Meshes/index.d.ts +1 -0
  82. package/Meshes/index.js +1 -0
  83. package/Meshes/index.js.map +1 -1
  84. package/Meshes/mesh.js +3 -1
  85. package/Meshes/mesh.js.map +1 -1
  86. package/Meshes/mesh.vertexData.d.ts +66 -1
  87. package/Meshes/mesh.vertexData.js.map +1 -1
  88. package/Misc/dumpTools.js +1 -0
  89. package/Misc/dumpTools.js.map +1 -1
  90. package/Misc/tools.d.ts +2 -1
  91. package/Misc/tools.internals.d.ts +13 -0
  92. package/Misc/tools.internals.js +48 -0
  93. package/Misc/tools.internals.js.map +1 -0
  94. package/Misc/tools.js +13 -4
  95. package/Misc/tools.js.map +1 -1
  96. package/Morph/morphTarget.js +1 -0
  97. package/Morph/morphTarget.js.map +1 -1
  98. package/Shaders/ShadersInclude/gaussianSplatting.d.ts +5 -0
  99. package/Shaders/ShadersInclude/gaussianSplatting.js +33 -0
  100. package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -0
  101. package/Shaders/ShadersInclude/gaussianSplattingFragmentDeclaration.d.ts +7 -0
  102. package/Shaders/ShadersInclude/gaussianSplattingFragmentDeclaration.js +19 -0
  103. package/Shaders/ShadersInclude/gaussianSplattingFragmentDeclaration.js.map +1 -0
  104. package/Shaders/ShadersInclude/gaussianSplattingUboDeclaration.js +1 -1
  105. package/Shaders/ShadersInclude/gaussianSplattingUboDeclaration.js.map +1 -1
  106. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +1 -2
  107. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
  108. package/Shaders/gaussianSplatting.fragment.d.ts +1 -2
  109. package/Shaders/gaussianSplatting.fragment.js +5 -10
  110. package/Shaders/gaussianSplatting.fragment.js.map +1 -1
  111. package/Shaders/gaussianSplatting.vertex.d.ts +1 -0
  112. package/Shaders/gaussianSplatting.vertex.js +4 -21
  113. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  114. package/Shaders/lod.fragment.js +1 -1
  115. package/Shaders/lod.fragment.js.map +1 -1
  116. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"gaussianSplattingMesh.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/GaussianSplatting/gaussianSplattingMesh.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,mCAA+B;AAC1F,OAAO,EAAE,MAAM,EAAE,6BAAyB;AAC1C,OAAO,EAAE,yBAAyB,EAAE,uEAAmE;AACvG,OAAO,EAAE,UAAU,EAAE,+CAA2C;AAChE,OAAO,EAAE,SAAS,EAAE,mCAA+B;AACnD,OAAO,EAAE,KAAK,EAAE,4BAAwB;AACxC,gCAAsC;AAStC;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,IAAI;IAwB3C;;OAEG;IACH,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED;;;;;;OAMG;IACH,YAAY,IAAY,EAAE,MAAwB,IAAI,EAAE,QAAyB,IAAI,EAAE,YAAqB,KAAK;QAC7G,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QA3Df,iBAAY,GAAG,CAAC,CAAC;QACjB,YAAO,GAAqB,IAAI,CAAC;QACjC,uBAAkB,GAAG,CAAC,CAAC,CAAC;QACxB,qBAAgB,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAErC,qBAAgB,GAAG,IAAI,CAAC;QACxB,oBAAe,GAAG,KAAK,CAAC;QACxB,yBAAoB,GAA0B,IAAI,CAAC;QACnD,yBAAoB,GAA0B,IAAI,CAAC;QACnD,oBAAe,GAA0B,IAAI,CAAC;QAC9C,mBAAc,GAA0B,IAAI,CAAC;QAC7C,oBAAe,GAA2B,IAAI,CAAC;QAC/C,gBAAW,GAA2B,IAAI,CAAC;QACnD,kBAAkB;QACV,kBAAa,GAA2B,IAAI,CAAC;QACrD,kBAAkB;QACV,kBAAa,GAA2B,IAAI,CAAC;QACrD,kBAAkB;QACV,YAAO,GAA2B,IAAI,CAAC;QAC9B,eAAU,GAAY,KAAK,CAAC;QAErC,0BAAqB,GAAmC,IAAI,CAAC;QAC7D,kBAAa,GAAG,IAAI,OAAO,EAAE,CAAC;QAuClC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QAEpC,UAAU,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAChE,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE7B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAEjC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAEvB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,GAAG,EAAE;YACL,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;SAC3B;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,yBAAyB,CAAC,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACxF,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,uBAAuB,CAAC;IACnC,CAAC;IAED;;;OAGG;IACa,gBAAgB;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACa,OAAO,CAAC,aAAa,GAAG,KAAK;QACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE;YACrC,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACvB,wDAAwD;YACxD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACzB,OAAO,KAAK,CAAC;SAChB;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAES,aAAa,CAAC,MAAM,GAAG,KAAK;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,CAAC;QAC7C,IAAI,OAAO,KAAK,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,gBAAgB,EAAE;YAC1G,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;YAC9D,IAAI,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACzE,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAChF,OAAO,CAAC,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7H,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YAElC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACnE,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE;gBACrC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnD,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC;gBAClC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;gBAC9B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,EAAE;oBAC1I,IAAI,CAAC,SAAS,CAAC,MAAM;iBACxB,CAAC,CAAC;aACN;SACJ;IACL,CAAC;IACD;;;;;;OAMG;IACa,MAAM,CAAC,OAAgB,EAAE,eAAwB,EAAE,wBAAuC;QACtG,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,wBAAwB,CAAC,CAAC;IAC5E,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,iBAAiB,CAAC,IAAiB;QAC7C,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;QAClE,MAAM,SAAS,GAAG,cAAc,CAAC;QACjC,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,cAAc,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE;YAC/B,OAAO,IAAI,CAAC;SACf;QACD,MAAM,WAAW,GAAG,QAAQ,CAAC,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAExE,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,MAAM,OAAO,GAA2B;YACpC,MAAM,EAAE,CAAC;YACT,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,CAAC;SACX,CAAC;QAOF,MAAM,UAAU,GAAkB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM;aAClB,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC;aACxB,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;QAC9C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;YACzB,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YACnD,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;gBACf,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;aAC9B;iBAAM;gBACH,MAAM,CAAC,KAAK,CAAC,8BAA8B,IAAI,sDAAsD,CAAC,CAAC;gBACvG,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;aAC7B;SACJ;QAED,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,mBAAmB,CAAC;QAElC,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,SAAS,GAAG,WAAW,CAAC,CAAC;QACxD,MAAM,CAAC,GAAG,IAAI,UAAU,EAAE,CAAC;QAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;YAClC,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YAC9D,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YAClE,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YAEjE,IAAI,EAAE,GAAW,GAAG,CAAC;YACrB,IAAI,EAAE,GAAW,CAAC,CAAC;YACnB,IAAI,EAAE,GAAW,CAAC,CAAC;YACnB,IAAI,EAAE,GAAW,CAAC,CAAC;YAEnB,KAAK,IAAI,aAAa,GAAG,CAAC,EAAE,aAAa,GAAG,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE;gBAC5E,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;gBAC3C,IAAI,KAAK,CAAC;gBACV,QAAQ,QAAQ,CAAC,IAAI,EAAE;oBACnB,KAAK,OAAO;wBACR,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,CAAC;wBACnE,MAAM;oBACV,KAAK,KAAK;wBACN,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,CAAC;wBACjE,MAAM;oBACV;wBACI,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;iBACtE;gBAED,QAAQ,QAAQ,CAAC,IAAI,EAAE;oBACnB,KAAK,GAAG;wBACJ,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;wBACpB,MAAM;oBACV,KAAK,GAAG;wBACJ,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;wBACpB,MAAM;oBACV,KAAK,GAAG;wBACJ,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;wBACpB,MAAM;oBACV,KAAK,SAAS;wBACV,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC3B,MAAM;oBACV,KAAK,SAAS;wBACV,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC3B,MAAM;oBACV,KAAK,SAAS;wBACV,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC3B,MAAM;oBACV,KAAK,KAAK;wBACN,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;wBAChB,MAAM;oBACV,KAAK,OAAO;wBACR,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;wBAChB,MAAM;oBACV,KAAK,MAAM;wBACP,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;wBAChB,MAAM;oBACV,KAAK,QAAQ;wBACT,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC;wBACtC,MAAM;oBACV,KAAK,QAAQ;wBACT,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC;wBACtC,MAAM;oBACV,KAAK,QAAQ;wBACT,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC;wBACtC,MAAM;oBACV,KAAK,QAAQ;wBACT,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC;wBACtC,MAAM;oBACV,KAAK,SAAS;wBACV,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;wBAC7C,MAAM;oBACV,KAAK,OAAO;wBACR,EAAE,GAAG,KAAK,CAAC;wBACX,MAAM;oBACV,KAAK,OAAO;wBACR,EAAE,GAAG,KAAK,CAAC;wBACX,MAAM;oBACV,KAAK,OAAO;wBACR,EAAE,GAAG,KAAK,CAAC;wBACX,MAAM;oBACV,KAAK,OAAO;wBACR,EAAE,GAAG,KAAK,CAAC;wBACX,MAAM;iBACb;aACJ;YAED,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACtB,CAAC,CAAC,SAAS,EAAE,CAAC;YACd,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;YACzB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;YACzB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;YACzB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;SAC5B;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;OAIG;IAEI,aAAa,CAAC,IAAiB;QAClC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,CAAC;IAED;;;;;OAKG;IACI,aAAa,CAAC,GAAW;QAC5B,OAAO,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YAChD,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;OAGG;IACa,OAAO,CAAC,YAAsB;QAC1C,IAAI,CAAC,oBAAoB,EAAE,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC,oBAAoB,EAAE,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC;QAChC,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC;QAE/B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAE3B,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAEO,aAAa,CAAC,MAA6B;QAC/C,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,mBAAmB,EAAE,KAAK,EAAG,CAAC;QACjE,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,mBAAmB,EAAE,KAAK,EAAG,CAAC;QACjE,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,cAAc,EAAE,KAAK,EAAG,CAAC;QACvD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,EAAE,KAAK,EAAG,CAAC;IACzD,CAAC;IAED;;;;OAIG;IACa,KAAK,CAAC,OAAe,EAAE;QACnC,MAAM,KAAK,GAAG,IAAI,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1E,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACxB,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAC3B,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACvC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1B,KAAK,CAAC,gBAAgB,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC3C,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC7C,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC;QAC9B,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAE3B,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACrC,KAAK,CAAC,eAAe,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAEzF,KAAK,CAAC,mBAAmB,GAAG,KAAK,CAAC,YAAY,CAAC;QAC/C,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,KAAK,CAAC;IACjB,CAAC;IAgDD;;;;OAIG;IACI,UAAU,CAAC,IAAiB;QAC/B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,OAAO;SACV;QAED,6EAA6E;QAC7E,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAC5B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;SAChC;QAED,iBAAiB;QACjB,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEjD,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;QAC/C,IAAI,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE;YAClC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;SAC7C;QACD,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAEhC,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;QAEpD,IAAI,CAAC,eAAe,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;QAEjD,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAE5C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAClF,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAErF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;YAClC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9B,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAE7B,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAEpC,OAAO,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3C,OAAO,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE3C,UAAU,CAAC,GAAG,CACV,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,EACtC,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,EACtC,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,EACtC,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAC1C,CAAC;YACF,UAAU,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;YAE5C,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;YAErH,MAAM,CAAC,GAAG,cAAc,CAAC,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAE5E,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;SAC/D;QAED,kBAAkB;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACrC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAE3D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAEtB,sBAAsB;QACtB,MAAM,qBAAqB,GAAG,CAAC,IAAkB,EAAE,KAAa,EAAE,MAAc,EAAE,MAAc,EAAE,EAAE;YAChG,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,6BAA6B,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACxJ,CAAC,CAAC;QAEF,MAAM,gBAAgB,GAAG,CAAC,GAAiB,EAAE,EAAE;YAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,EAAE,CAAC,EAAE;gBAC5B,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;aACzB;YACD,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE;YACxC,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;YACvD,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;YACvD,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;YACvD,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;SAC1D;QAED,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;SAC7B;QACD,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,qBAAqB,GAAG,EAAE,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YACjK,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,eAAgB,CAAC,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;YACtC,IAAI,CAAC,OAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YAE1E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SAC5B;aAAM;YACH,IAAI,CAAC,oBAAoB,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,SAAS,CAAC,kBAAkB,CAAC,CAAC;YACtI,IAAI,CAAC,oBAAoB,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,SAAS,CAAC,kBAAkB,CAAC,CAAC;YACtI,IAAI,CAAC,eAAe,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,SAAS,CAAC,kBAAkB,CAAC,CAAC;YACjJ,IAAI,CAAC,cAAc,GAAG,qBAAqB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,SAAS,CAAC,kBAAkB,CAAC,CAAC;YACpH,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC7B;IACL,CAAC;IAEO,SAAS,CAAC,IAAiB;QAC/B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,OAAO;SACV;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,4BAA4B;IACpB,uBAAuB,CAAC,WAAmB;QAC/C,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;YAC5D,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC;YAEjD,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;SACxE;QACD,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC;IAC3C,CAAC;IAEO,kBAAkB;QACtB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpB,OAAO;SACV;QACD,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEhD,0BAA0B;QAC1B,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CACrB,GAAG,CAAC,eAAe,CACf,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,qBAAqB,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC,EAAE;YACvE,IAAI,EAAE,wBAAwB;SACjC,CAAC,CACL,CACJ,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,eAAgB,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;QAEtC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAEzE,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE;YAC3B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;YACjC,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACzD,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE;oBACxC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;iBACzC;aACJ;YACD,IAAI,IAAI,CAAC,qBAAqB,EAAE;gBAC5B,MAAM,qBAAqB,GAAG,CAAC,OAAoB,EAAE,IAAkB,EAAE,KAAa,EAAE,MAAc,EAAE,EAAE;oBACrG,IAAI,CAAC,SAAS,EAAiB,CAAC,iBAAiB,CAAC,OAAO,CAAC,kBAAkB,EAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC9H,CAAC,CAAC;gBACF,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;gBACtD,qBAAqB,CAAC,IAAI,CAAC,oBAAqB,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;gBACjH,qBAAqB,CAAC,IAAI,CAAC,oBAAqB,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;gBACjH,qBAAqB,CAAC,IAAI,CAAC,eAAgB,EAAE,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC/G,qBAAqB,CAAC,IAAI,CAAC,cAAe,EAAE,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC7G,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;aACrC;YACD,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC;YAC7C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAChC,CAAC,CAAC;IACN,CAAC;IAEO,eAAe,CAAC,MAAc;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,cAAc,CAAC;QAE9C,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YAC1C,OAAO,KAAK,GAAG,MAAM,GAAG,MAAM,EAAE;gBAC5B,MAAM,IAAI,CAAC,CAAC;aACf;SACJ;aAAM;YACH,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;SACtC;QAED,IAAI,MAAM,GAAG,KAAK,EAAE;YAChB,MAAM,CAAC,KAAK,CAAC,mCAAmC,GAAG,KAAK,GAAG,IAAI,GAAG,MAAM,GAAG,qBAAqB,GAAG,KAAK,CAAC,CAAC;YAC1G,MAAM,GAAG,KAAK,CAAC;SAClB;QAED,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;;AA9Pc,mCAAa,GAAG,UAAU,IAAY;IACjD,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,SAAuB,CAAC;IAC5B,IAAI,QAAuB,CAAC;IAC5B,IAAI,OAAoB,CAAC;IACzB,IAAI,QAAsB,CAAC;IAE3B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAM,EAAE,EAAE;QACxB,kBAAkB;QAClB,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE;YAClB,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;YAC7B,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;SACpC;QACD,yBAAyB;aACpB;YACD,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7B,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE;gBACzB,qCAAqC;gBACrC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;aACxD;YAED,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC3B,OAAO,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC3C,QAAQ,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAE7C,OAAO;YACP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;gBAClC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;aACtB;YAED,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE;gBAC7B,WAAW,GAAG,CAAC,CAAC;aACnB;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;gBAClC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;aAC/J;YAED,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEhB,IAAI,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;SACrD;IACL,CAAC,CAAC;AACN,CAAC,AA5C2B,CA4C1B","sourcesContent":["import type { Scene } from \"core/scene\";\r\nimport type { Nullable } from \"core/types\";\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { SubMesh } from \"../subMesh\";\r\nimport type { AbstractMesh } from \"../abstractMesh\";\r\nimport { Mesh } from \"../mesh\";\r\nimport { VertexData } from \"../mesh.vertexData\";\r\nimport { Matrix, Quaternion, TmpVectors, Vector2, Vector3 } from \"core/Maths/math.vector\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { GaussianSplattingMaterial } from \"core/Materials/GaussianSplatting/gaussianSplattingMaterial\";\r\nimport { RawTexture } from \"core/Materials/Textures/rawTexture\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport \"core/Meshes/thinInstanceMesh\";\r\nimport type { ThinEngine } from \"core/Engines/thinEngine\";\r\n\r\ninterface DelayedTextureUpdate {\r\n covA: Float32Array;\r\n covB: Float32Array;\r\n colors: Float32Array;\r\n centers: Float32Array;\r\n}\r\n/**\r\n * Class used to render a gaussian splatting mesh\r\n */\r\nexport class GaussianSplattingMesh extends Mesh {\r\n private _vertexCount = 0;\r\n private _worker: Nullable<Worker> = null;\r\n private _frameIdLastUpdate = -1;\r\n private _modelViewMatrix = Matrix.Identity();\r\n private _depthMix: BigInt64Array;\r\n private _canPostToWorker = true;\r\n private _readyToDisplay = false;\r\n private _covariancesATexture: Nullable<BaseTexture> = null;\r\n private _covariancesBTexture: Nullable<BaseTexture> = null;\r\n private _centersTexture: Nullable<BaseTexture> = null;\r\n private _colorsTexture: Nullable<BaseTexture> = null;\r\n private _splatPositions: Nullable<Float32Array> = null;\r\n private _splatIndex: Nullable<Float32Array> = null;\r\n //@ts-expect-error\r\n private _covariancesA: Nullable<Float32Array> = null;\r\n //@ts-expect-error\r\n private _covariancesB: Nullable<Float32Array> = null;\r\n //@ts-expect-error\r\n private _colors: Nullable<Float32Array> = null;\r\n private readonly _keepInRam: boolean = false;\r\n\r\n private _delayedTextureUpdate: Nullable<DelayedTextureUpdate> = null;\r\n private _oldDirection = new Vector3();\r\n /**\r\n * Gets the covariancesA texture\r\n */\r\n public get covariancesATexture() {\r\n return this._covariancesATexture;\r\n }\r\n\r\n /**\r\n * Gets the covariancesB texture\r\n */\r\n public get covariancesBTexture() {\r\n return this._covariancesBTexture;\r\n }\r\n\r\n /**\r\n * Gets the centers texture\r\n */\r\n public get centersTexture() {\r\n return this._centersTexture;\r\n }\r\n\r\n /**\r\n * Gets the colors texture\r\n */\r\n public get colorsTexture() {\r\n return this._colorsTexture;\r\n }\r\n\r\n /**\r\n * Creates a new gaussian splatting mesh\r\n * @param name defines the name of the mesh\r\n * @param url defines the url to load from (optional)\r\n * @param scene defines the hosting scene (optional)\r\n * @param keepInRam keep datas in ram for editing purpose\r\n */\r\n constructor(name: string, url: Nullable<string> = null, scene: Nullable<Scene> = null, keepInRam: boolean = false) {\r\n super(name, scene);\r\n\r\n const vertexData = new VertexData();\r\n\r\n vertexData.positions = [-2, -2, 0, 2, -2, 0, 2, 2, 0, -2, 2, 0];\r\n vertexData.indices = [0, 1, 2, 0, 2, 3];\r\n vertexData.applyToMesh(this);\r\n\r\n this.subMeshes = [];\r\n new SubMesh(0, 0, 4, 0, 6, this);\r\n\r\n this.setEnabled(false);\r\n\r\n this._keepInRam = keepInRam;\r\n if (url) {\r\n this.loadFileAsync(url);\r\n }\r\n this.material = new GaussianSplattingMaterial(this.name + \"_material\", this._scene);\r\n }\r\n\r\n /**\r\n * Returns the class name\r\n * @returns \"GaussianSplattingMesh\"\r\n */\r\n public override getClassName(): string {\r\n return \"GaussianSplattingMesh\";\r\n }\r\n\r\n /**\r\n * Returns the total number of vertices (splats) within the mesh\r\n * @returns the total number of vertices\r\n */\r\n public override getTotalVertices(): number {\r\n return this._vertexCount;\r\n }\r\n\r\n /**\r\n * Is this node ready to be used/rendered\r\n * @param completeCheck defines if a complete check (including materials and lights) has to be done (false by default)\r\n * @returns true when ready\r\n */\r\n public override isReady(completeCheck = false): boolean {\r\n if (!super.isReady(completeCheck, true)) {\r\n return false;\r\n }\r\n\r\n if (!this._readyToDisplay) {\r\n // mesh is ready when worker has done at least 1 sorting\r\n this._postToWorker(true);\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n protected _postToWorker(forced = false): void {\r\n const frameId = this.getScene().getFrameId();\r\n if (frameId !== this._frameIdLastUpdate && this._worker && this._scene.activeCamera && this._canPostToWorker) {\r\n const cameraMatrix = this._scene.activeCamera.getViewMatrix();\r\n this.getWorldMatrix().multiplyToRef(cameraMatrix, this._modelViewMatrix);\r\n cameraMatrix.invertToRef(TmpVectors.Matrix[0]);\r\n this.getWorldMatrix().multiplyToRef(TmpVectors.Matrix[0], TmpVectors.Matrix[1]);\r\n Vector3.TransformNormalToRef(Vector3.Forward(this._scene.useRightHandedSystem), TmpVectors.Matrix[1], TmpVectors.Vector3[2]);\r\n TmpVectors.Vector3[2].normalize();\r\n\r\n const dot = Vector3.Dot(TmpVectors.Vector3[2], this._oldDirection);\r\n if (forced || Math.abs(dot - 1) >= 0.01) {\r\n this._oldDirection.copyFrom(TmpVectors.Vector3[2]);\r\n this._frameIdLastUpdate = frameId;\r\n this._canPostToWorker = false;\r\n this._worker.postMessage({ view: this._modelViewMatrix.m, depthMix: this._depthMix, useRightHandedSystem: this._scene.useRightHandedSystem }, [\r\n this._depthMix.buffer,\r\n ]);\r\n }\r\n }\r\n }\r\n /**\r\n * Triggers the draw call for the mesh. Usually, you don't need to call this method by your own because the mesh rendering is handled by the scene rendering manager\r\n * @param subMesh defines the subMesh to render\r\n * @param enableAlphaMode defines if alpha mode can be changed\r\n * @param effectiveMeshReplacement defines an optional mesh used to provide info for the rendering\r\n * @returns the current mesh\r\n */\r\n public override render(subMesh: SubMesh, enableAlphaMode: boolean, effectiveMeshReplacement?: AbstractMesh): Mesh {\r\n this._postToWorker();\r\n return super.render(subMesh, enableAlphaMode, effectiveMeshReplacement);\r\n }\r\n\r\n /**\r\n * Code from https://github.com/dylanebert/gsplat.js/blob/main/src/loaders/PLYLoader.ts Under MIT license\r\n * Converts a .ply data array buffer to splat\r\n * if data array buffer is not ply, returns the original buffer\r\n * @param data the .ply data to load\r\n * @returns the loaded splat buffer\r\n * @deprecated Please use SceneLoader.ImportMeshAsync instead\r\n */\r\n public static ConvertPLYToSplat(data: ArrayBuffer): ArrayBuffer {\r\n const ubuf = new Uint8Array(data);\r\n const header = new TextDecoder().decode(ubuf.slice(0, 1024 * 10));\r\n const headerEnd = \"end_header\\n\";\r\n const headerEndIndex = header.indexOf(headerEnd);\r\n if (headerEndIndex < 0 || !header) {\r\n return data;\r\n }\r\n const vertexCount = parseInt(/element vertex (\\d+)\\n/.exec(header)![1]);\r\n\r\n let rowOffset = 0;\r\n const offsets: Record<string, number> = {\r\n double: 8,\r\n int: 4,\r\n uint: 4,\r\n float: 4,\r\n short: 2,\r\n ushort: 2,\r\n uchar: 1,\r\n };\r\n\r\n type PlyProperty = {\r\n name: string;\r\n type: string;\r\n offset: number;\r\n };\r\n const properties: PlyProperty[] = [];\r\n const filtered = header\r\n .slice(0, headerEndIndex)\r\n .split(\"\\n\")\r\n .filter((k) => k.startsWith(\"property \"));\r\n for (const prop of filtered) {\r\n const [, type, name] = prop.split(\" \");\r\n properties.push({ name, type, offset: rowOffset });\r\n if (offsets[type]) {\r\n rowOffset += offsets[type];\r\n } else {\r\n Logger.Error(`Unsupported property type: ${type}. Are you sure it's a valid Gaussian Splatting file?`);\r\n return new ArrayBuffer(0);\r\n }\r\n }\r\n\r\n const rowLength = 3 * 4 + 3 * 4 + 4 + 4;\r\n const SH_C0 = 0.28209479177387814;\r\n\r\n const dataView = new DataView(data, headerEndIndex + headerEnd.length);\r\n const buffer = new ArrayBuffer(rowLength * vertexCount);\r\n const q = new Quaternion();\r\n\r\n for (let i = 0; i < vertexCount; i++) {\r\n const position = new Float32Array(buffer, i * rowLength, 3);\r\n const scale = new Float32Array(buffer, i * rowLength + 12, 3);\r\n const rgba = new Uint8ClampedArray(buffer, i * rowLength + 24, 4);\r\n const rot = new Uint8ClampedArray(buffer, i * rowLength + 28, 4);\r\n\r\n let r0: number = 255;\r\n let r1: number = 0;\r\n let r2: number = 0;\r\n let r3: number = 0;\r\n\r\n for (let propertyIndex = 0; propertyIndex < properties.length; propertyIndex++) {\r\n const property = properties[propertyIndex];\r\n let value;\r\n switch (property.type) {\r\n case \"float\":\r\n value = dataView.getFloat32(property.offset + i * rowOffset, true);\r\n break;\r\n case \"int\":\r\n value = dataView.getInt32(property.offset + i * rowOffset, true);\r\n break;\r\n default:\r\n throw new Error(`Unsupported property type: ${property.type}`);\r\n }\r\n\r\n switch (property.name) {\r\n case \"x\":\r\n position[0] = value;\r\n break;\r\n case \"y\":\r\n position[1] = value;\r\n break;\r\n case \"z\":\r\n position[2] = value;\r\n break;\r\n case \"scale_0\":\r\n scale[0] = Math.exp(value);\r\n break;\r\n case \"scale_1\":\r\n scale[1] = Math.exp(value);\r\n break;\r\n case \"scale_2\":\r\n scale[2] = Math.exp(value);\r\n break;\r\n case \"red\":\r\n rgba[0] = value;\r\n break;\r\n case \"green\":\r\n rgba[1] = value;\r\n break;\r\n case \"blue\":\r\n rgba[2] = value;\r\n break;\r\n case \"f_dc_0\":\r\n rgba[0] = (0.5 + SH_C0 * value) * 255;\r\n break;\r\n case \"f_dc_1\":\r\n rgba[1] = (0.5 + SH_C0 * value) * 255;\r\n break;\r\n case \"f_dc_2\":\r\n rgba[2] = (0.5 + SH_C0 * value) * 255;\r\n break;\r\n case \"f_dc_3\":\r\n rgba[3] = (0.5 + SH_C0 * value) * 255;\r\n break;\r\n case \"opacity\":\r\n rgba[3] = (1 / (1 + Math.exp(-value))) * 255;\r\n break;\r\n case \"rot_0\":\r\n r0 = value;\r\n break;\r\n case \"rot_1\":\r\n r1 = value;\r\n break;\r\n case \"rot_2\":\r\n r2 = value;\r\n break;\r\n case \"rot_3\":\r\n r3 = value;\r\n break;\r\n }\r\n }\r\n\r\n q.set(r1, r2, r3, r0);\r\n q.normalize();\r\n rot[0] = q.w * 128 + 128;\r\n rot[1] = q.x * 128 + 128;\r\n rot[2] = q.y * 128 + 128;\r\n rot[3] = q.z * 128 + 128;\r\n }\r\n\r\n return buffer;\r\n }\r\n\r\n /**\r\n * Loads a .splat Gaussian Splatting array buffer asynchronously\r\n * @param data arraybuffer containing splat file\r\n * @returns a promise that resolves when the operation is complete\r\n */\r\n\r\n public loadDataAsync(data: ArrayBuffer): Promise<void> {\r\n return Promise.resolve(this._loadData(data));\r\n }\r\n\r\n /**\r\n * Loads a .splat Gaussian or .ply Splatting file asynchronously\r\n * @param url path to the splat file to load\r\n * @returns a promise that resolves when the operation is complete\r\n * @deprecated Please use SceneLoader.ImportMeshAsync instead\r\n */\r\n public loadFileAsync(url: string): Promise<void> {\r\n return Tools.LoadFileAsync(url, true).then((data) => {\r\n this._loadData(GaussianSplattingMesh.ConvertPLYToSplat(data));\r\n });\r\n }\r\n\r\n /**\r\n * Releases resources associated with this mesh.\r\n * @param doNotRecurse Set to true to not recurse into each children (recurse into each children by default)\r\n */\r\n public override dispose(doNotRecurse?: boolean): void {\r\n this._covariancesATexture?.dispose();\r\n this._covariancesBTexture?.dispose();\r\n this._centersTexture?.dispose();\r\n this._colorsTexture?.dispose();\r\n\r\n this._covariancesATexture = null;\r\n this._covariancesBTexture = null;\r\n this._centersTexture = null;\r\n this._colorsTexture = null;\r\n\r\n this._worker?.terminate();\r\n this._worker = null;\r\n\r\n super.dispose(doNotRecurse, true);\r\n }\r\n\r\n private _copyTextures(source: GaussianSplattingMesh): void {\r\n this._covariancesATexture = source.covariancesATexture?.clone()!;\r\n this._covariancesBTexture = source.covariancesBTexture?.clone()!;\r\n this._centersTexture = source.centersTexture?.clone()!;\r\n this._colorsTexture = source.colorsTexture?.clone()!;\r\n }\r\n\r\n /**\r\n * Returns a new Mesh object generated from the current mesh properties.\r\n * @param name is a string, the name given to the new mesh\r\n * @returns a new Gaussian Splatting Mesh\r\n */\r\n public override clone(name: string = \"\"): GaussianSplattingMesh {\r\n const newGS = new GaussianSplattingMesh(name, undefined, this.getScene());\r\n newGS._copySource(this);\r\n newGS.makeGeometryUnique();\r\n newGS._vertexCount = this._vertexCount;\r\n newGS._copyTextures(this);\r\n newGS._modelViewMatrix = Matrix.Identity();\r\n newGS._splatPositions = this._splatPositions;\r\n newGS._readyToDisplay = false;\r\n newGS._instanciateWorker();\r\n\r\n const binfo = this.getBoundingInfo();\r\n newGS.getBoundingInfo().reConstruct(binfo.minimum, binfo.maximum, this.getWorldMatrix());\r\n\r\n newGS.forcedInstanceCount = newGS._vertexCount;\r\n newGS.setEnabled(true);\r\n return newGS;\r\n }\r\n\r\n private static _CreateWorker = function (self: Worker) {\r\n let vertexCount = 0;\r\n let positions: Float32Array;\r\n let depthMix: BigInt64Array;\r\n let indices: Uint32Array;\r\n let floatMix: Float32Array;\r\n\r\n self.onmessage = (e: any) => {\r\n // updated on init\r\n if (e.data.positions) {\r\n positions = e.data.positions;\r\n vertexCount = e.data.vertexCount;\r\n }\r\n // udpate on view changed\r\n else {\r\n const viewProj = e.data.view;\r\n if (!positions || !viewProj) {\r\n // Sanity check, it shouldn't happen!\r\n throw new Error(\"positions or view is not defined!\");\r\n }\r\n\r\n depthMix = e.data.depthMix;\r\n indices = new Uint32Array(depthMix.buffer);\r\n floatMix = new Float32Array(depthMix.buffer);\r\n\r\n // Sort\r\n for (let j = 0; j < vertexCount; j++) {\r\n indices[2 * j] = j;\r\n }\r\n\r\n let depthFactor = -1;\r\n if (e.data.useRightHandedSystem) {\r\n depthFactor = 1;\r\n }\r\n\r\n for (let j = 0; j < vertexCount; j++) {\r\n floatMix[2 * j + 1] = 10000 + (viewProj[2] * positions[3 * j + 0] + viewProj[6] * positions[3 * j + 1] + viewProj[10] * positions[3 * j + 2]) * depthFactor;\r\n }\r\n\r\n depthMix.sort();\r\n\r\n self.postMessage({ depthMix }, [depthMix.buffer]);\r\n }\r\n };\r\n };\r\n\r\n /**\r\n * @experimental\r\n * Update data from GS (position, orientation, color, scaling)\r\n * @param data array that contain all the datas\r\n */\r\n public updateData(data: ArrayBuffer): void {\r\n if (!data.byteLength) {\r\n return;\r\n }\r\n\r\n // if a covariance texture is present, then it's not a creation but an update\r\n if (!this._covariancesATexture) {\r\n this._readyToDisplay = false;\r\n }\r\n\r\n // Parse the data\r\n const uBuffer = new Uint8Array(data);\r\n const fBuffer = new Float32Array(uBuffer.buffer);\r\n\r\n const rowLength = 3 * 4 + 3 * 4 + 4 + 4;\r\n const vertexCount = uBuffer.length / rowLength;\r\n if (vertexCount != this._vertexCount) {\r\n this._updateSplatIndexBuffer(vertexCount);\r\n }\r\n this._vertexCount = vertexCount;\r\n\r\n const textureSize = this._getTextureSize(vertexCount);\r\n const textureLength = textureSize.x * textureSize.y;\r\n\r\n this._splatPositions = new Float32Array(3 * textureLength);\r\n const covA = new Float32Array(3 * textureLength);\r\n const covB = new Float32Array(3 * textureLength);\r\n\r\n const matrixRotation = TmpVectors.Matrix[0];\r\n const matrixScale = TmpVectors.Matrix[1];\r\n const quaternion = TmpVectors.Quaternion[0];\r\n\r\n const minimum = new Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n const maximum = new Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\r\n\r\n for (let i = 0; i < vertexCount; i++) {\r\n const x = fBuffer[8 * i + 0];\r\n const y = -fBuffer[8 * i + 1];\r\n const z = fBuffer[8 * i + 2];\r\n\r\n this._splatPositions[3 * i + 0] = x;\r\n this._splatPositions[3 * i + 1] = y;\r\n this._splatPositions[3 * i + 2] = z;\r\n\r\n minimum.minimizeInPlaceFromFloats(x, y, z);\r\n maximum.maximizeInPlaceFromFloats(x, y, z);\r\n\r\n quaternion.set(\r\n (uBuffer[32 * i + 28 + 1] - 128) / 128,\r\n (uBuffer[32 * i + 28 + 2] - 128) / 128,\r\n (uBuffer[32 * i + 28 + 3] - 128) / 128,\r\n -(uBuffer[32 * i + 28 + 0] - 128) / 128\r\n );\r\n quaternion.toRotationMatrix(matrixRotation);\r\n\r\n Matrix.ScalingToRef(fBuffer[8 * i + 3 + 0] * 2, fBuffer[8 * i + 3 + 1] * 2, fBuffer[8 * i + 3 + 2] * 2, matrixScale);\r\n\r\n const M = matrixRotation.multiplyToRef(matrixScale, TmpVectors.Matrix[0]).m;\r\n\r\n covA[i * 3 + 0] = M[0] * M[0] + M[1] * M[1] + M[2] * M[2];\r\n covA[i * 3 + 1] = M[0] * M[4] + M[1] * M[5] + M[2] * M[6];\r\n covA[i * 3 + 2] = M[0] * M[8] + M[1] * M[9] + M[2] * M[10];\r\n covB[i * 3 + 0] = M[4] * M[4] + M[5] * M[5] + M[6] * M[6];\r\n covB[i * 3 + 1] = M[4] * M[8] + M[5] * M[9] + M[6] * M[10];\r\n covB[i * 3 + 2] = M[8] * M[8] + M[9] * M[9] + M[10] * M[10];\r\n }\r\n\r\n // Update the mesh\r\n const binfo = this.getBoundingInfo();\r\n binfo.reConstruct(minimum, maximum, this.getWorldMatrix());\r\n\r\n this.setEnabled(true);\r\n\r\n // Update the material\r\n const createTextureFromData = (data: Float32Array, width: number, height: number, format: number) => {\r\n return new RawTexture(data, width, height, format, this._scene, false, false, Constants.TEXTURE_BILINEAR_SAMPLINGMODE, Constants.TEXTURETYPE_FLOAT);\r\n };\r\n\r\n const convertRgbToRgba = (rgb: Float32Array) => {\r\n const count = rgb.length / 3;\r\n const rgba = new Float32Array(count * 4);\r\n for (let i = 0; i < count; ++i) {\r\n rgba[i * 4 + 0] = rgb[i * 3 + 0];\r\n rgba[i * 4 + 1] = rgb[i * 3 + 1];\r\n rgba[i * 4 + 2] = rgb[i * 3 + 2];\r\n rgba[i * 4 + 3] = 1.0;\r\n }\r\n return rgba;\r\n };\r\n\r\n const colorArray = new Float32Array(textureSize.x * textureSize.y * 4);\r\n for (let i = 0; i < this._vertexCount; ++i) {\r\n colorArray[i * 4 + 0] = uBuffer[32 * i + 24 + 0] / 255;\r\n colorArray[i * 4 + 1] = uBuffer[32 * i + 24 + 1] / 255;\r\n colorArray[i * 4 + 2] = uBuffer[32 * i + 24 + 2] / 255;\r\n colorArray[i * 4 + 3] = uBuffer[32 * i + 24 + 3] / 255;\r\n }\r\n\r\n if (this._keepInRam) {\r\n this._covariancesA = covA;\r\n this._covariancesB = covB;\r\n this._colors = colorArray;\r\n }\r\n if (this._covariancesATexture) {\r\n this._delayedTextureUpdate = { covA: convertRgbToRgba(covA), covB: convertRgbToRgba(covB), colors: colorArray, centers: convertRgbToRgba(this._splatPositions) };\r\n const positions = Float32Array.from(this._splatPositions!);\r\n const vertexCount = this._vertexCount;\r\n this._worker!.postMessage({ positions, vertexCount }, [positions.buffer]);\r\n\r\n this._postToWorker(true);\r\n } else {\r\n this._covariancesATexture = createTextureFromData(convertRgbToRgba(covA), textureSize.x, textureSize.y, Constants.TEXTUREFORMAT_RGBA);\r\n this._covariancesBTexture = createTextureFromData(convertRgbToRgba(covB), textureSize.x, textureSize.y, Constants.TEXTUREFORMAT_RGBA);\r\n this._centersTexture = createTextureFromData(convertRgbToRgba(this._splatPositions), textureSize.x, textureSize.y, Constants.TEXTUREFORMAT_RGBA);\r\n this._colorsTexture = createTextureFromData(colorArray, textureSize.x, textureSize.y, Constants.TEXTUREFORMAT_RGBA);\r\n this._instanciateWorker();\r\n }\r\n }\r\n\r\n private _loadData(data: ArrayBuffer): void {\r\n if (!data.byteLength) {\r\n return;\r\n }\r\n this.updateData(data);\r\n }\r\n\r\n // in case size is different\r\n private _updateSplatIndexBuffer(vertexCount: number): void {\r\n if (!this._splatIndex || vertexCount > this._splatIndex.length) {\r\n this._splatIndex = new Float32Array(vertexCount);\r\n\r\n this.thinInstanceSetBuffer(\"splatIndex\", this._splatIndex, 1, false);\r\n }\r\n this.forcedInstanceCount = vertexCount;\r\n }\r\n\r\n private _instanciateWorker(): void {\r\n if (!this._vertexCount) {\r\n return;\r\n }\r\n this._updateSplatIndexBuffer(this._vertexCount);\r\n\r\n // Start the worker thread\r\n this._worker?.terminate();\r\n this._worker = new Worker(\r\n URL.createObjectURL(\r\n new Blob([\"(\", GaussianSplattingMesh._CreateWorker.toString(), \")(self)\"], {\r\n type: \"application/javascript\",\r\n })\r\n )\r\n );\r\n\r\n this._depthMix = new BigInt64Array(this._vertexCount);\r\n const positions = Float32Array.from(this._splatPositions!);\r\n const vertexCount = this._vertexCount;\r\n\r\n this._worker.postMessage({ positions, vertexCount }, [positions.buffer]);\r\n\r\n this._worker.onmessage = (e) => {\r\n this._depthMix = e.data.depthMix;\r\n const indexMix = new Uint32Array(e.data.depthMix.buffer);\r\n if (this._splatIndex) {\r\n for (let j = 0; j < this._vertexCount; j++) {\r\n this._splatIndex[j] = indexMix[2 * j];\r\n }\r\n }\r\n if (this._delayedTextureUpdate) {\r\n const updateTextureFromData = (texture: BaseTexture, data: Float32Array, width: number, height: number) => {\r\n (this.getEngine() as ThinEngine).updateTextureData(texture.getInternalTexture()!, data, 0, 0, width, height, 0, 0, false);\r\n };\r\n const textureSize = this._getTextureSize(vertexCount);\r\n updateTextureFromData(this._covariancesATexture!, this._delayedTextureUpdate.covA, textureSize.x, textureSize.y);\r\n updateTextureFromData(this._covariancesBTexture!, this._delayedTextureUpdate.covB, textureSize.x, textureSize.y);\r\n updateTextureFromData(this._centersTexture!, this._delayedTextureUpdate.centers, textureSize.x, textureSize.y);\r\n updateTextureFromData(this._colorsTexture!, this._delayedTextureUpdate.colors, textureSize.x, textureSize.y);\r\n this._delayedTextureUpdate = null;\r\n }\r\n this.thinInstanceBufferUpdated(\"splatIndex\");\r\n this._canPostToWorker = true;\r\n this._readyToDisplay = true;\r\n };\r\n }\r\n\r\n private _getTextureSize(length: number): Vector2 {\r\n const engine = this._scene.getEngine();\r\n const width = engine.getCaps().maxTextureSize;\r\n\r\n let height = 1;\r\n\r\n if (engine.version === 1 && !engine.isWebGPU) {\r\n while (width * height < length) {\r\n height *= 2;\r\n }\r\n } else {\r\n height = Math.ceil(length / width);\r\n }\r\n\r\n if (height > width) {\r\n Logger.Error(\"GaussianSplatting texture size: (\" + width + \", \" + height + \"), maxTextureSize: \" + width);\r\n height = width;\r\n }\r\n\r\n return new Vector2(width, height);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"gaussianSplattingMesh.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/GaussianSplatting/gaussianSplattingMesh.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene } from \"core/scene\";\r\nimport type { Nullable } from \"core/types\";\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { SubMesh } from \"../subMesh\";\r\nimport type { AbstractMesh } from \"../abstractMesh\";\r\nimport { Mesh } from \"../mesh\";\r\nimport { VertexData } from \"../mesh.vertexData\";\r\nimport { Matrix, Quaternion, TmpVectors, Vector2, Vector3 } from \"core/Maths/math.vector\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { GaussianSplattingMaterial } from \"core/Materials/GaussianSplatting/gaussianSplattingMaterial\";\r\nimport { RawTexture } from \"core/Materials/Textures/rawTexture\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport \"core/Meshes/thinInstanceMesh\";\r\nimport type { ThinEngine } from \"core/Engines/thinEngine\";\r\nimport { ToHalfFloat } from \"core/Misc/textureTools\";\r\nimport type { Material } from \"core/Materials/material\";\r\nimport { Scalar } from \"core/Maths/math.scalar\";\r\n\r\ninterface DelayedTextureUpdate {\r\n covA: Uint16Array;\r\n covB: Uint16Array;\r\n colors: Uint8Array;\r\n centers: Float32Array;\r\n}\r\n/**\r\n * Class used to render a gaussian splatting mesh\r\n */\r\nexport class GaussianSplattingMesh extends Mesh {\r\n private _vertexCount = 0;\r\n private _worker: Nullable<Worker> = null;\r\n private _frameIdLastUpdate = -1;\r\n private _modelViewMatrix = Matrix.Identity();\r\n private _depthMix: BigInt64Array;\r\n private _canPostToWorker = true;\r\n private _readyToDisplay = false;\r\n private _covariancesATexture: Nullable<BaseTexture> = null;\r\n private _covariancesBTexture: Nullable<BaseTexture> = null;\r\n private _centersTexture: Nullable<BaseTexture> = null;\r\n private _colorsTexture: Nullable<BaseTexture> = null;\r\n private _splatPositions: Nullable<Float32Array> = null;\r\n private _splatIndex: Nullable<Float32Array> = null;\r\n //@ts-expect-error\r\n private _covariancesA: Nullable<Uint16Array> = null;\r\n //@ts-expect-error\r\n private _covariancesB: Nullable<Uint16Array> = null;\r\n //@ts-expect-error\r\n private _colors: Nullable<Uint8Array> = null;\r\n private readonly _keepInRam: boolean = false;\r\n\r\n private _delayedTextureUpdate: Nullable<DelayedTextureUpdate> = null;\r\n private _oldDirection = new Vector3();\r\n private _useRGBACovariants = false;\r\n private _material: Nullable<Material> = null;\r\n\r\n /**\r\n * Gets the covariancesA texture\r\n */\r\n public get covariancesATexture() {\r\n return this._covariancesATexture;\r\n }\r\n\r\n /**\r\n * Gets the covariancesB texture\r\n */\r\n public get covariancesBTexture() {\r\n return this._covariancesBTexture;\r\n }\r\n\r\n /**\r\n * Gets the centers texture\r\n */\r\n public get centersTexture() {\r\n return this._centersTexture;\r\n }\r\n\r\n /**\r\n * Gets the colors texture\r\n */\r\n public get colorsTexture() {\r\n return this._colorsTexture;\r\n }\r\n\r\n /**\r\n * set rendering material\r\n */\r\n public override set material(value: Material) {\r\n this._material = value;\r\n this._material.backFaceCulling = true;\r\n this._material.cullBackFaces = false;\r\n }\r\n\r\n /**\r\n * get rendering material\r\n */\r\n public override get material(): Nullable<Material> {\r\n return this._material;\r\n }\r\n\r\n /**\r\n * Creates a new gaussian splatting mesh\r\n * @param name defines the name of the mesh\r\n * @param url defines the url to load from (optional)\r\n * @param scene defines the hosting scene (optional)\r\n * @param keepInRam keep datas in ram for editing purpose\r\n */\r\n constructor(name: string, url: Nullable<string> = null, scene: Nullable<Scene> = null, keepInRam: boolean = false) {\r\n super(name, scene);\r\n\r\n const vertexData = new VertexData();\r\n\r\n vertexData.positions = [-2, -2, 0, 2, -2, 0, 2, 2, 0, -2, 2, 0];\r\n vertexData.indices = [0, 1, 2, 0, 2, 3];\r\n vertexData.applyToMesh(this);\r\n\r\n this.subMeshes = [];\r\n new SubMesh(0, 0, 4, 0, 6, this);\r\n\r\n this.setEnabled(false);\r\n // webGL2 and webGPU support for RG texture with float16 is fine. not webGL1\r\n this._useRGBACovariants = !this.getEngine().isWebGPU && this.getEngine().version === 1.0;\r\n\r\n this._keepInRam = keepInRam;\r\n if (url) {\r\n this.loadFileAsync(url);\r\n }\r\n this._material = new GaussianSplattingMaterial(this.name + \"_material\", this._scene);\r\n }\r\n\r\n /**\r\n * Returns the class name\r\n * @returns \"GaussianSplattingMesh\"\r\n */\r\n public override getClassName(): string {\r\n return \"GaussianSplattingMesh\";\r\n }\r\n\r\n /**\r\n * Returns the total number of vertices (splats) within the mesh\r\n * @returns the total number of vertices\r\n */\r\n public override getTotalVertices(): number {\r\n return this._vertexCount;\r\n }\r\n\r\n /**\r\n * Is this node ready to be used/rendered\r\n * @param completeCheck defines if a complete check (including materials and lights) has to be done (false by default)\r\n * @returns true when ready\r\n */\r\n public override isReady(completeCheck = false): boolean {\r\n if (!super.isReady(completeCheck, true)) {\r\n return false;\r\n }\r\n\r\n if (!this._readyToDisplay) {\r\n // mesh is ready when worker has done at least 1 sorting\r\n this._postToWorker(true);\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n protected _postToWorker(forced = false): void {\r\n const frameId = this.getScene().getFrameId();\r\n if (frameId !== this._frameIdLastUpdate && this._worker && this._scene.activeCamera && this._canPostToWorker) {\r\n const cameraMatrix = this._scene.activeCamera.getViewMatrix();\r\n this.getWorldMatrix().multiplyToRef(cameraMatrix, this._modelViewMatrix);\r\n cameraMatrix.invertToRef(TmpVectors.Matrix[0]);\r\n this.getWorldMatrix().multiplyToRef(TmpVectors.Matrix[0], TmpVectors.Matrix[1]);\r\n Vector3.TransformNormalToRef(Vector3.Forward(this._scene.useRightHandedSystem), TmpVectors.Matrix[1], TmpVectors.Vector3[2]);\r\n TmpVectors.Vector3[2].normalize();\r\n\r\n const dot = Vector3.Dot(TmpVectors.Vector3[2], this._oldDirection);\r\n if (forced || Math.abs(dot - 1) >= 0.01) {\r\n this._oldDirection.copyFrom(TmpVectors.Vector3[2]);\r\n this._frameIdLastUpdate = frameId;\r\n this._canPostToWorker = false;\r\n this._worker.postMessage({ view: this._modelViewMatrix.m, depthMix: this._depthMix, useRightHandedSystem: this._scene.useRightHandedSystem }, [\r\n this._depthMix.buffer,\r\n ]);\r\n }\r\n }\r\n }\r\n /**\r\n * Triggers the draw call for the mesh. Usually, you don't need to call this method by your own because the mesh rendering is handled by the scene rendering manager\r\n * @param subMesh defines the subMesh to render\r\n * @param enableAlphaMode defines if alpha mode can be changed\r\n * @param effectiveMeshReplacement defines an optional mesh used to provide info for the rendering\r\n * @returns the current mesh\r\n */\r\n public override render(subMesh: SubMesh, enableAlphaMode: boolean, effectiveMeshReplacement?: AbstractMesh): Mesh {\r\n this._postToWorker();\r\n return super.render(subMesh, enableAlphaMode, effectiveMeshReplacement);\r\n }\r\n\r\n /**\r\n * Code from https://github.com/dylanebert/gsplat.js/blob/main/src/loaders/PLYLoader.ts Under MIT license\r\n * Converts a .ply data array buffer to splat\r\n * if data array buffer is not ply, returns the original buffer\r\n * @param data the .ply data to load\r\n * @returns the loaded splat buffer\r\n * @deprecated Please use SceneLoader.ImportMeshAsync instead\r\n */\r\n public static ConvertPLYToSplat(data: ArrayBuffer): ArrayBuffer {\r\n const ubuf = new Uint8Array(data);\r\n const header = new TextDecoder().decode(ubuf.slice(0, 1024 * 10));\r\n const headerEnd = \"end_header\\n\";\r\n const headerEndIndex = header.indexOf(headerEnd);\r\n if (headerEndIndex < 0 || !header) {\r\n // standard splat\r\n return data;\r\n }\r\n const vertexCount = parseInt(/element vertex (\\d+)\\n/.exec(header)![1]);\r\n const chunkElement = /element chunk (\\d+)\\n/.exec(header);\r\n let chunkCount = 0;\r\n if (chunkElement) {\r\n chunkCount = parseInt(chunkElement[1]);\r\n }\r\n let rowVertexOffset = 0;\r\n let rowChunkOffset = 0;\r\n const offsets: Record<string, number> = {\r\n double: 8,\r\n int: 4,\r\n uint: 4,\r\n float: 4,\r\n short: 2,\r\n ushort: 2,\r\n uchar: 1,\r\n list: 0,\r\n };\r\n\r\n type PlyProperty = {\r\n name: string;\r\n type: string;\r\n offset: number;\r\n };\r\n\r\n const enum ElementMode {\r\n Vertex = 0,\r\n Chunk = 1,\r\n }\r\n let chunkMode = ElementMode.Chunk;\r\n const vertexProperties: PlyProperty[] = [];\r\n const chunkProperties: PlyProperty[] = [];\r\n const filtered = header.slice(0, headerEndIndex).split(\"\\n\");\r\n for (const prop of filtered) {\r\n if (prop.startsWith(\"property \")) {\r\n const [, type, name] = prop.split(\" \");\r\n\r\n if (chunkMode == ElementMode.Chunk) {\r\n chunkProperties.push({ name, type, offset: rowChunkOffset });\r\n rowChunkOffset += offsets[type];\r\n } else if (chunkMode == ElementMode.Vertex) {\r\n vertexProperties.push({ name, type, offset: rowVertexOffset });\r\n rowVertexOffset += offsets[type];\r\n }\r\n\r\n if (!offsets[type]) {\r\n Logger.Warn(`Unsupported property type: ${type}.`);\r\n }\r\n } else if (prop.startsWith(\"element \")) {\r\n const [, type] = prop.split(\" \");\r\n if (type == \"chunk\") {\r\n chunkMode = ElementMode.Chunk;\r\n } else if (type == \"vertex\") {\r\n chunkMode = ElementMode.Vertex;\r\n }\r\n }\r\n }\r\n\r\n const rowVertexLength = rowVertexOffset;\r\n const rowChunkLength = rowChunkOffset;\r\n\r\n const rowOutputLength = 3 * 4 + 3 * 4 + 4 + 4; // Vector3 position, Vector3 scale, 1 u8 quaternion, 1 color with alpha\r\n const SH_C0 = 0.28209479177387814;\r\n let offset = 0;\r\n\r\n const dataView = new DataView(data, headerEndIndex + headerEnd.length);\r\n const buffer = new ArrayBuffer(rowOutputLength * vertexCount);\r\n const q = new Quaternion();\r\n const temp3 = TmpVectors.Vector3[0];\r\n\r\n const unpackUnorm = (value: number, bits: number) => {\r\n const t = (1 << bits) - 1;\r\n return (value & t) / t;\r\n };\r\n\r\n const unpack111011 = (value: number, result: Vector3) => {\r\n result.x = unpackUnorm(value >>> 21, 11);\r\n result.y = unpackUnorm(value >>> 11, 10);\r\n result.z = unpackUnorm(value, 11);\r\n };\r\n\r\n const unpack8888 = (value: number, result: Uint8ClampedArray) => {\r\n result[0] = unpackUnorm(value >>> 24, 8) * 255;\r\n result[1] = unpackUnorm(value >>> 16, 8) * 255;\r\n result[2] = unpackUnorm(value >>> 8, 8) * 255;\r\n result[3] = unpackUnorm(value, 8) * 255;\r\n };\r\n\r\n // unpack quaternion with 2,10,10,10 format (largest element, 3x10bit element)\r\n const unpackRot = (value: number, result: Quaternion) => {\r\n const norm = 1.0 / (Math.sqrt(2) * 0.5);\r\n const a = (unpackUnorm(value >>> 20, 10) - 0.5) * norm;\r\n const b = (unpackUnorm(value >>> 10, 10) - 0.5) * norm;\r\n const c = (unpackUnorm(value, 10) - 0.5) * norm;\r\n const m = Math.sqrt(1.0 - (a * a + b * b + c * c));\r\n\r\n switch (value >>> 30) {\r\n case 0:\r\n result.set(m, a, b, c);\r\n break;\r\n case 1:\r\n result.set(a, m, b, c);\r\n break;\r\n case 2:\r\n result.set(a, b, m, c);\r\n break;\r\n case 3:\r\n result.set(a, b, c, m);\r\n break;\r\n }\r\n };\r\n\r\n interface CompressedPLYChunk {\r\n min: Vector3;\r\n max: Vector3;\r\n minScale: Vector3;\r\n maxScale: Vector3;\r\n }\r\n const compressedChunks = new Array<CompressedPLYChunk>(chunkCount);\r\n for (let i = 0; i < chunkCount; i++) {\r\n const currentChunk = { min: new Vector3(), max: new Vector3(), minScale: new Vector3(), maxScale: new Vector3() };\r\n compressedChunks[i] = currentChunk;\r\n for (let propertyIndex = 0; propertyIndex < chunkProperties.length; propertyIndex++) {\r\n const property = chunkProperties[propertyIndex];\r\n let value;\r\n switch (property.type) {\r\n case \"float\":\r\n value = dataView.getFloat32(property.offset + offset, true);\r\n break;\r\n default:\r\n continue;\r\n }\r\n\r\n switch (property.name) {\r\n case \"min_x\":\r\n currentChunk.min.x = value;\r\n break;\r\n case \"min_y\":\r\n currentChunk.min.y = value;\r\n break;\r\n case \"min_z\":\r\n currentChunk.min.z = value;\r\n break;\r\n case \"max_x\":\r\n currentChunk.max.x = value;\r\n break;\r\n case \"max_y\":\r\n currentChunk.max.y = value;\r\n break;\r\n case \"max_z\":\r\n currentChunk.max.z = value;\r\n break;\r\n case \"min_scale_x\":\r\n currentChunk.minScale.x = value;\r\n break;\r\n case \"min_scale_y\":\r\n currentChunk.minScale.y = value;\r\n break;\r\n case \"min_scale_z\":\r\n currentChunk.minScale.z = value;\r\n break;\r\n case \"max_scale_x\":\r\n currentChunk.maxScale.x = value;\r\n break;\r\n case \"max_scale_y\":\r\n currentChunk.maxScale.y = value;\r\n break;\r\n case \"max_scale_z\":\r\n currentChunk.maxScale.z = value;\r\n break;\r\n }\r\n }\r\n offset += rowChunkLength;\r\n }\r\n\r\n for (let i = 0; i < vertexCount; i++) {\r\n const position = new Float32Array(buffer, i * rowOutputLength, 3);\r\n const scale = new Float32Array(buffer, i * rowOutputLength + 12, 3);\r\n const rgba = new Uint8ClampedArray(buffer, i * rowOutputLength + 24, 4);\r\n const rot = new Uint8ClampedArray(buffer, i * rowOutputLength + 28, 4);\r\n const chunkIndex = i >> 8;\r\n let r0: number = 255;\r\n let r1: number = 0;\r\n let r2: number = 0;\r\n let r3: number = 0;\r\n\r\n for (let propertyIndex = 0; propertyIndex < vertexProperties.length; propertyIndex++) {\r\n const property = vertexProperties[propertyIndex];\r\n let value;\r\n switch (property.type) {\r\n case \"float\":\r\n value = dataView.getFloat32(offset + property.offset, true);\r\n break;\r\n case \"int\":\r\n value = dataView.getInt32(offset + property.offset, true);\r\n break;\r\n case \"uint\":\r\n value = dataView.getUint32(offset + property.offset, true);\r\n break;\r\n case \"double\":\r\n value = dataView.getFloat64(offset + property.offset, true);\r\n break;\r\n case \"uchar\":\r\n value = dataView.getUint8(offset + property.offset);\r\n break;\r\n default:\r\n //throw new Error(`Unsupported property type: ${property.type}`);\r\n continue;\r\n }\r\n\r\n switch (property.name) {\r\n case \"packed_position\":\r\n {\r\n const compressedChunk = compressedChunks[chunkIndex];\r\n unpack111011(value, temp3);\r\n position[0] = Scalar.Lerp(compressedChunk.min.x, compressedChunk.max.x, temp3.x);\r\n position[1] = -Scalar.Lerp(compressedChunk.min.y, compressedChunk.max.y, temp3.y);\r\n position[2] = Scalar.Lerp(compressedChunk.min.z, compressedChunk.max.z, temp3.z);\r\n }\r\n break;\r\n case \"packed_rotation\":\r\n {\r\n unpackRot(value, q);\r\n r0 = q.w;\r\n r1 = q.z;\r\n r2 = q.y;\r\n r3 = q.x;\r\n }\r\n break;\r\n case \"packed_scale\":\r\n {\r\n const compressedChunk = compressedChunks[chunkIndex];\r\n unpack111011(value, temp3);\r\n scale[0] = Math.exp(Scalar.Lerp(compressedChunk.minScale.x, compressedChunk.maxScale.x, temp3.x));\r\n scale[1] = Math.exp(Scalar.Lerp(compressedChunk.minScale.y, compressedChunk.maxScale.y, temp3.y));\r\n scale[2] = Math.exp(Scalar.Lerp(compressedChunk.minScale.z, compressedChunk.maxScale.z, temp3.z));\r\n }\r\n break;\r\n case \"packed_color\":\r\n unpack8888(value, rgba);\r\n break;\r\n case \"x\":\r\n position[0] = value;\r\n break;\r\n case \"y\":\r\n position[1] = value;\r\n break;\r\n case \"z\":\r\n position[2] = value;\r\n break;\r\n case \"scale_0\":\r\n scale[0] = Math.exp(value);\r\n break;\r\n case \"scale_1\":\r\n scale[1] = Math.exp(value);\r\n break;\r\n case \"scale_2\":\r\n scale[2] = Math.exp(value);\r\n break;\r\n case \"diffuse_red\":\r\n case \"red\":\r\n rgba[0] = value;\r\n break;\r\n case \"diffuse_green\":\r\n case \"green\":\r\n rgba[1] = value;\r\n break;\r\n case \"diffuse_blue\":\r\n case \"blue\":\r\n rgba[2] = value;\r\n break;\r\n case \"f_dc_0\":\r\n rgba[0] = (0.5 + SH_C0 * value) * 255;\r\n break;\r\n case \"f_dc_1\":\r\n rgba[1] = (0.5 + SH_C0 * value) * 255;\r\n break;\r\n case \"f_dc_2\":\r\n rgba[2] = (0.5 + SH_C0 * value) * 255;\r\n break;\r\n case \"f_dc_3\":\r\n rgba[3] = (0.5 + SH_C0 * value) * 255;\r\n break;\r\n case \"opacity\":\r\n rgba[3] = (1 / (1 + Math.exp(-value))) * 255;\r\n break;\r\n case \"rot_0\":\r\n r0 = value;\r\n break;\r\n case \"rot_1\":\r\n r1 = value;\r\n break;\r\n case \"rot_2\":\r\n r2 = value;\r\n break;\r\n case \"rot_3\":\r\n r3 = value;\r\n break;\r\n }\r\n }\r\n\r\n q.set(r1, r2, r3, r0);\r\n q.normalize();\r\n rot[0] = q.w * 128 + 128;\r\n rot[1] = q.x * 128 + 128;\r\n rot[2] = q.y * 128 + 128;\r\n rot[3] = q.z * 128 + 128;\r\n offset += rowVertexLength;\r\n }\r\n\r\n return buffer;\r\n }\r\n\r\n /**\r\n * Loads a .splat Gaussian Splatting array buffer asynchronously\r\n * @param data arraybuffer containing splat file\r\n * @returns a promise that resolves when the operation is complete\r\n */\r\n\r\n public loadDataAsync(data: ArrayBuffer): Promise<void> {\r\n return Promise.resolve(this._loadData(data));\r\n }\r\n\r\n /**\r\n * Loads a .splat Gaussian or .ply Splatting file asynchronously\r\n * @param url path to the splat file to load\r\n * @returns a promise that resolves when the operation is complete\r\n * @deprecated Please use SceneLoader.ImportMeshAsync instead\r\n */\r\n public loadFileAsync(url: string): Promise<void> {\r\n return Tools.LoadFileAsync(url, true).then((data) => {\r\n this._loadData(GaussianSplattingMesh.ConvertPLYToSplat(data));\r\n });\r\n }\r\n\r\n /**\r\n * Releases resources associated with this mesh.\r\n * @param doNotRecurse Set to true to not recurse into each children (recurse into each children by default)\r\n */\r\n public override dispose(doNotRecurse?: boolean): void {\r\n this._covariancesATexture?.dispose();\r\n this._covariancesBTexture?.dispose();\r\n this._centersTexture?.dispose();\r\n this._colorsTexture?.dispose();\r\n\r\n this._covariancesATexture = null;\r\n this._covariancesBTexture = null;\r\n this._centersTexture = null;\r\n this._colorsTexture = null;\r\n\r\n this._worker?.terminate();\r\n this._worker = null;\r\n\r\n super.dispose(doNotRecurse, true);\r\n }\r\n\r\n private _copyTextures(source: GaussianSplattingMesh): void {\r\n this._covariancesATexture = source.covariancesATexture?.clone()!;\r\n this._covariancesBTexture = source.covariancesBTexture?.clone()!;\r\n this._centersTexture = source.centersTexture?.clone()!;\r\n this._colorsTexture = source.colorsTexture?.clone()!;\r\n }\r\n\r\n /**\r\n * Returns a new Mesh object generated from the current mesh properties.\r\n * @param name is a string, the name given to the new mesh\r\n * @returns a new Gaussian Splatting Mesh\r\n */\r\n public override clone(name: string = \"\"): GaussianSplattingMesh {\r\n const newGS = new GaussianSplattingMesh(name, undefined, this.getScene());\r\n newGS._copySource(this);\r\n newGS.makeGeometryUnique();\r\n newGS._vertexCount = this._vertexCount;\r\n newGS._copyTextures(this);\r\n newGS._modelViewMatrix = Matrix.Identity();\r\n newGS._splatPositions = this._splatPositions;\r\n newGS._readyToDisplay = false;\r\n newGS._instanciateWorker();\r\n\r\n const binfo = this.getBoundingInfo();\r\n newGS.getBoundingInfo().reConstruct(binfo.minimum, binfo.maximum, this.getWorldMatrix());\r\n\r\n newGS.forcedInstanceCount = newGS._vertexCount;\r\n newGS.setEnabled(true);\r\n return newGS;\r\n }\r\n\r\n private static _CreateWorker = function (self: Worker) {\r\n let vertexCount = 0;\r\n let positions: Float32Array;\r\n let depthMix: BigInt64Array;\r\n let indices: Uint32Array;\r\n let floatMix: Float32Array;\r\n\r\n self.onmessage = (e: any) => {\r\n // updated on init\r\n if (e.data.positions) {\r\n positions = e.data.positions;\r\n vertexCount = e.data.vertexCount;\r\n }\r\n // udpate on view changed\r\n else {\r\n const viewProj = e.data.view;\r\n if (!positions || !viewProj) {\r\n // Sanity check, it shouldn't happen!\r\n throw new Error(\"positions or view is not defined!\");\r\n }\r\n\r\n depthMix = e.data.depthMix;\r\n indices = new Uint32Array(depthMix.buffer);\r\n floatMix = new Float32Array(depthMix.buffer);\r\n\r\n // Sort\r\n for (let j = 0; j < vertexCount; j++) {\r\n indices[2 * j] = j;\r\n }\r\n\r\n let depthFactor = -1;\r\n if (e.data.useRightHandedSystem) {\r\n depthFactor = 1;\r\n }\r\n\r\n for (let j = 0; j < vertexCount; j++) {\r\n floatMix[2 * j + 1] = 10000 + (viewProj[2] * positions[4 * j + 0] + viewProj[6] * positions[4 * j + 1] + viewProj[10] * positions[4 * j + 2]) * depthFactor;\r\n }\r\n\r\n depthMix.sort();\r\n\r\n self.postMessage({ depthMix }, [depthMix.buffer]);\r\n }\r\n };\r\n };\r\n\r\n /**\r\n * @experimental\r\n * Update data from GS (position, orientation, color, scaling)\r\n * @param data array that contain all the datas\r\n */\r\n public updateData(data: ArrayBuffer): void {\r\n if (!data.byteLength) {\r\n return;\r\n }\r\n\r\n // if a covariance texture is present, then it's not a creation but an update\r\n if (!this._covariancesATexture) {\r\n this._readyToDisplay = false;\r\n }\r\n\r\n // Parse the data\r\n const uBuffer = new Uint8Array(data);\r\n const fBuffer = new Float32Array(uBuffer.buffer);\r\n\r\n const rowLength = 3 * 4 + 3 * 4 + 4 + 4;\r\n const vertexCount = uBuffer.length / rowLength;\r\n if (vertexCount != this._vertexCount) {\r\n this._updateSplatIndexBuffer(vertexCount);\r\n }\r\n this._vertexCount = vertexCount;\r\n\r\n const textureSize = this._getTextureSize(vertexCount);\r\n const textureLength = textureSize.x * textureSize.y;\r\n\r\n this._splatPositions = new Float32Array(4 * textureLength);\r\n const covA = new Uint16Array(4 * textureLength);\r\n const covB = new Uint16Array((this._useRGBACovariants ? 4 : 2) * textureLength);\r\n\r\n const matrixRotation = TmpVectors.Matrix[0];\r\n const matrixScale = TmpVectors.Matrix[1];\r\n const quaternion = TmpVectors.Quaternion[0];\r\n\r\n const minimum = new Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n const maximum = new Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\r\n\r\n const covariances = [0, 0, 0, 0, 0, 0];\r\n const covBSplatSize = this._useRGBACovariants ? 4 : 2;\r\n for (let i = 0; i < vertexCount; i++) {\r\n const x = fBuffer[8 * i + 0];\r\n const y = -fBuffer[8 * i + 1];\r\n const z = fBuffer[8 * i + 2];\r\n\r\n this._splatPositions[4 * i + 0] = x;\r\n this._splatPositions[4 * i + 1] = y;\r\n this._splatPositions[4 * i + 2] = z;\r\n\r\n minimum.minimizeInPlaceFromFloats(x, y, z);\r\n maximum.maximizeInPlaceFromFloats(x, y, z);\r\n\r\n quaternion.set(\r\n (uBuffer[32 * i + 28 + 1] - 128) / 128,\r\n (uBuffer[32 * i + 28 + 2] - 128) / 128,\r\n (uBuffer[32 * i + 28 + 3] - 128) / 128,\r\n -(uBuffer[32 * i + 28 + 0] - 128) / 128\r\n );\r\n quaternion.toRotationMatrix(matrixRotation);\r\n\r\n Matrix.ScalingToRef(fBuffer[8 * i + 3 + 0] * 2, fBuffer[8 * i + 3 + 1] * 2, fBuffer[8 * i + 3 + 2] * 2, matrixScale);\r\n\r\n const M = matrixRotation.multiplyToRef(matrixScale, TmpVectors.Matrix[0]).m;\r\n\r\n covariances[0] = M[0] * M[0] + M[1] * M[1] + M[2] * M[2];\r\n covariances[1] = M[0] * M[4] + M[1] * M[5] + M[2] * M[6];\r\n covariances[2] = M[0] * M[8] + M[1] * M[9] + M[2] * M[10];\r\n covariances[3] = M[4] * M[4] + M[5] * M[5] + M[6] * M[6];\r\n covariances[4] = M[4] * M[8] + M[5] * M[9] + M[6] * M[10];\r\n covariances[5] = M[8] * M[8] + M[9] * M[9] + M[10] * M[10];\r\n\r\n // normalize covA, covB\r\n let factor = -10000;\r\n for (let covIndex = 0; covIndex < 6; covIndex++) {\r\n factor = Math.max(factor, Math.abs(covariances[covIndex]));\r\n }\r\n\r\n this._splatPositions[4 * i + 3] = factor;\r\n const transform = factor;\r\n\r\n covA[i * 4 + 0] = ToHalfFloat(covariances[0] / transform);\r\n covA[i * 4 + 1] = ToHalfFloat(covariances[1] / transform);\r\n covA[i * 4 + 2] = ToHalfFloat(covariances[2] / transform);\r\n covA[i * 4 + 3] = ToHalfFloat(covariances[3] / transform);\r\n covB[i * covBSplatSize + 0] = ToHalfFloat(covariances[4] / transform);\r\n covB[i * covBSplatSize + 1] = ToHalfFloat(covariances[5] / transform);\r\n }\r\n\r\n // Update the mesh\r\n const binfo = this.getBoundingInfo();\r\n binfo.reConstruct(minimum, maximum, this.getWorldMatrix());\r\n\r\n this.setEnabled(true);\r\n\r\n // Update the material\r\n const createTextureFromData = (data: Float32Array, width: number, height: number, format: number) => {\r\n return new RawTexture(data, width, height, format, this._scene, false, false, Constants.TEXTURE_BILINEAR_SAMPLINGMODE, Constants.TEXTURETYPE_FLOAT);\r\n };\r\n\r\n const createTextureFromDataU8 = (data: Uint8Array, width: number, height: number, format: number) => {\r\n return new RawTexture(data, width, height, format, this._scene, false, false, Constants.TEXTURE_BILINEAR_SAMPLINGMODE, Constants.TEXTURETYPE_UNSIGNED_BYTE);\r\n };\r\n\r\n const createTextureFromDataF16 = (data: Uint16Array, width: number, height: number, format: number) => {\r\n return new RawTexture(data, width, height, format, this._scene, false, false, Constants.TEXTURE_BILINEAR_SAMPLINGMODE, Constants.TEXTURETYPE_HALF_FLOAT);\r\n };\r\n\r\n const colorArray = new Uint8Array(textureSize.x * textureSize.y * 4);\r\n for (let i = 0; i < this._vertexCount; ++i) {\r\n colorArray[i * 4 + 0] = uBuffer[32 * i + 24 + 0];\r\n colorArray[i * 4 + 1] = uBuffer[32 * i + 24 + 1];\r\n colorArray[i * 4 + 2] = uBuffer[32 * i + 24 + 2];\r\n colorArray[i * 4 + 3] = uBuffer[32 * i + 24 + 3];\r\n }\r\n\r\n if (this._keepInRam) {\r\n this._covariancesA = covA;\r\n this._covariancesB = covB;\r\n this._colors = colorArray;\r\n }\r\n if (this._covariancesATexture) {\r\n this._delayedTextureUpdate = { covA: covA, covB: covB, colors: colorArray, centers: this._splatPositions };\r\n const positions = Float32Array.from(this._splatPositions!);\r\n const vertexCount = this._vertexCount;\r\n this._worker!.postMessage({ positions, vertexCount }, [positions.buffer]);\r\n\r\n this._postToWorker(true);\r\n } else {\r\n this._covariancesATexture = createTextureFromDataF16(covA, textureSize.x, textureSize.y, Constants.TEXTUREFORMAT_RGBA);\r\n this._covariancesBTexture = createTextureFromDataF16(\r\n covB,\r\n textureSize.x,\r\n textureSize.y,\r\n this._useRGBACovariants ? Constants.TEXTUREFORMAT_RGBA : Constants.TEXTUREFORMAT_RG\r\n );\r\n this._centersTexture = createTextureFromData(this._splatPositions, textureSize.x, textureSize.y, Constants.TEXTUREFORMAT_RGBA);\r\n this._colorsTexture = createTextureFromDataU8(colorArray, textureSize.x, textureSize.y, Constants.TEXTUREFORMAT_RGBA);\r\n this._instanciateWorker();\r\n }\r\n }\r\n\r\n private _loadData(data: ArrayBuffer): void {\r\n if (!data.byteLength) {\r\n return;\r\n }\r\n this.updateData(data);\r\n }\r\n\r\n // in case size is different\r\n private _updateSplatIndexBuffer(vertexCount: number): void {\r\n if (!this._splatIndex || vertexCount > this._splatIndex.length) {\r\n this._splatIndex = new Float32Array(vertexCount);\r\n\r\n this.thinInstanceSetBuffer(\"splatIndex\", this._splatIndex, 1, false);\r\n }\r\n this.forcedInstanceCount = vertexCount;\r\n }\r\n\r\n private _instanciateWorker(): void {\r\n if (!this._vertexCount) {\r\n return;\r\n }\r\n this._updateSplatIndexBuffer(this._vertexCount);\r\n\r\n // Start the worker thread\r\n this._worker?.terminate();\r\n this._worker = new Worker(\r\n URL.createObjectURL(\r\n new Blob([\"(\", GaussianSplattingMesh._CreateWorker.toString(), \")(self)\"], {\r\n type: \"application/javascript\",\r\n })\r\n )\r\n );\r\n\r\n this._depthMix = new BigInt64Array(this._vertexCount);\r\n const positions = Float32Array.from(this._splatPositions!);\r\n const vertexCount = this._vertexCount;\r\n\r\n this._worker.postMessage({ positions, vertexCount }, [positions.buffer]);\r\n\r\n this._worker.onmessage = (e) => {\r\n this._depthMix = e.data.depthMix;\r\n const indexMix = new Uint32Array(e.data.depthMix.buffer);\r\n if (this._splatIndex) {\r\n for (let j = 0; j < this._vertexCount; j++) {\r\n this._splatIndex[j] = indexMix[2 * j];\r\n }\r\n }\r\n if (this._delayedTextureUpdate) {\r\n const updateTextureFromData = (texture: BaseTexture, data: Float32Array, width: number, height: number) => {\r\n (this.getEngine() as ThinEngine).updateTextureData(texture.getInternalTexture()!, data, 0, 0, width, height, 0, 0, false);\r\n };\r\n const updateTextureFromDataU8 = (texture: BaseTexture, data: Uint8Array, width: number, height: number) => {\r\n (this.getEngine() as ThinEngine).updateTextureData(texture.getInternalTexture()!, data, 0, 0, width, height, 0, 0, false);\r\n };\r\n\r\n const updateTextureFromDataF16 = (texture: BaseTexture, data: Uint16Array, width: number, height: number) => {\r\n (this.getEngine() as ThinEngine).updateTextureData(texture.getInternalTexture()!, data, 0, 0, width, height, 0, 0, false);\r\n };\r\n const textureSize = this._getTextureSize(vertexCount);\r\n updateTextureFromDataF16(this._covariancesATexture!, this._delayedTextureUpdate.covA, textureSize.x, textureSize.y);\r\n updateTextureFromDataF16(this._covariancesBTexture!, this._delayedTextureUpdate.covB, textureSize.x, textureSize.y);\r\n updateTextureFromData(this._centersTexture!, this._delayedTextureUpdate.centers, textureSize.x, textureSize.y);\r\n updateTextureFromDataU8(this._colorsTexture!, this._delayedTextureUpdate.colors, textureSize.x, textureSize.y);\r\n this._delayedTextureUpdate = null;\r\n }\r\n this.thinInstanceBufferUpdated(\"splatIndex\");\r\n this._canPostToWorker = true;\r\n this._readyToDisplay = true;\r\n };\r\n }\r\n\r\n private _getTextureSize(length: number): Vector2 {\r\n const engine = this._scene.getEngine();\r\n const width = engine.getCaps().maxTextureSize;\r\n\r\n let height = 1;\r\n\r\n if (engine.version === 1 && !engine.isWebGPU) {\r\n while (width * height < length) {\r\n height *= 2;\r\n }\r\n } else {\r\n height = Math.ceil(length / width);\r\n }\r\n\r\n if (height > width) {\r\n Logger.Error(\"GaussianSplatting texture size: (\" + width + \", \" + height + \"), maxTextureSize: \" + width);\r\n height = width;\r\n }\r\n\r\n return new Vector2(width, height);\r\n }\r\n}\r\n"]}
@@ -0,0 +1,76 @@
1
+ import { NodeGeometryBlock } from "../../nodeGeometryBlock";
2
+ import type { NodeGeometryConnectionPoint } from "../../nodeGeometryBlockConnectionPoint";
3
+ import type { NodeGeometryBuildState } from "../../nodeGeometryBuildState";
4
+ import type { INodeGeometryExecutionContext } from "../../Interfaces/nodeGeometryExecutionContext";
5
+ /**
6
+ * Conditions supported by the condition block
7
+ */
8
+ export declare enum Aggregations {
9
+ /** Max */
10
+ Max = 0,
11
+ /** Min */
12
+ Min = 1,
13
+ /** Sum */
14
+ Sum = 2
15
+ }
16
+ /**
17
+ * Block used to extract a valuefrom a geometry
18
+ */
19
+ export declare class AggregatorBlock extends NodeGeometryBlock implements INodeGeometryExecutionContext {
20
+ private _vertexData;
21
+ private _currentIndex;
22
+ /**
23
+ * Gets or sets the test used by the block
24
+ */
25
+ aggregation: Aggregations;
26
+ /**
27
+ * Gets or sets a boolean indicating that this block can evaluate context
28
+ * Build performance is improved when this value is set to false as the system will cache values instead of reevaluating everything per context change
29
+ */
30
+ evaluateContext: boolean;
31
+ /**
32
+ * Create a new SetPositionsBlock
33
+ * @param name defines the block name
34
+ */
35
+ constructor(name: string);
36
+ /**
37
+ * Gets the current index in the current flow
38
+ * @returns the current index
39
+ */
40
+ getExecutionIndex(): number;
41
+ /**
42
+ * Gets the current loop index in the current flow
43
+ * @returns the current loop index
44
+ */
45
+ getExecutionLoopIndex(): number;
46
+ /**
47
+ * Gets the current face index in the current flow
48
+ * @returns the current face index
49
+ */
50
+ getExecutionFaceIndex(): number;
51
+ /**
52
+ * Gets the current class name
53
+ * @returns the class name
54
+ */
55
+ getClassName(): string;
56
+ /**
57
+ * Gets the geometry input component
58
+ */
59
+ get geometry(): NodeGeometryConnectionPoint;
60
+ /**
61
+ * Gets the source input component
62
+ */
63
+ get source(): NodeGeometryConnectionPoint;
64
+ /**
65
+ * Gets the geometry output component
66
+ */
67
+ get output(): NodeGeometryConnectionPoint;
68
+ protected _buildBlock(state: NodeGeometryBuildState): void;
69
+ protected _dumpPropertiesCode(): string;
70
+ /**
71
+ * Serializes this block in a JSON representation
72
+ * @returns the serialized block object
73
+ */
74
+ serialize(): any;
75
+ _deserialize(serializationObject: any): void;
76
+ }
@@ -0,0 +1,210 @@
1
+ import { __decorate } from "../../../../tslib.es6.js";
2
+ import { NodeGeometryBlock } from "../../nodeGeometryBlock.js";
3
+ import { RegisterClass } from "../../../../Misc/typeStore.js";
4
+ import { NodeGeometryBlockConnectionPointTypes } from "../../Enums/nodeGeometryConnectionPointTypes.js";
5
+ import { editableInPropertyPage } from "../../../../Decorators/nodeDecorator.js";
6
+ import { Vector2, Vector3, Vector4 } from "../../../../Maths/math.vector.js";
7
+ /**
8
+ * Conditions supported by the condition block
9
+ */
10
+ export var Aggregations;
11
+ (function (Aggregations) {
12
+ /** Max */
13
+ Aggregations[Aggregations["Max"] = 0] = "Max";
14
+ /** Min */
15
+ Aggregations[Aggregations["Min"] = 1] = "Min";
16
+ /** Sum */
17
+ Aggregations[Aggregations["Sum"] = 2] = "Sum";
18
+ })(Aggregations || (Aggregations = {}));
19
+ /**
20
+ * Block used to extract a valuefrom a geometry
21
+ */
22
+ export class AggregatorBlock extends NodeGeometryBlock {
23
+ /**
24
+ * Create a new SetPositionsBlock
25
+ * @param name defines the block name
26
+ */
27
+ constructor(name) {
28
+ super(name);
29
+ /**
30
+ * Gets or sets the test used by the block
31
+ */
32
+ this.aggregation = Aggregations.Sum;
33
+ /**
34
+ * Gets or sets a boolean indicating that this block can evaluate context
35
+ * Build performance is improved when this value is set to false as the system will cache values instead of reevaluating everything per context change
36
+ */
37
+ this.evaluateContext = true;
38
+ this.registerInput("geometry", NodeGeometryBlockConnectionPointTypes.Geometry);
39
+ this.registerInput("source", NodeGeometryBlockConnectionPointTypes.AutoDetect);
40
+ this.registerOutput("output", NodeGeometryBlockConnectionPointTypes.BasedOnInput);
41
+ this._outputs[0]._typeConnectionSource = this._inputs[1];
42
+ }
43
+ /**
44
+ * Gets the current index in the current flow
45
+ * @returns the current index
46
+ */
47
+ getExecutionIndex() {
48
+ return this._currentIndex;
49
+ }
50
+ /**
51
+ * Gets the current loop index in the current flow
52
+ * @returns the current loop index
53
+ */
54
+ getExecutionLoopIndex() {
55
+ return this._currentIndex;
56
+ }
57
+ /**
58
+ * Gets the current face index in the current flow
59
+ * @returns the current face index
60
+ */
61
+ getExecutionFaceIndex() {
62
+ return 0;
63
+ }
64
+ /**
65
+ * Gets the current class name
66
+ * @returns the class name
67
+ */
68
+ getClassName() {
69
+ return "AggregatorBlock";
70
+ }
71
+ /**
72
+ * Gets the geometry input component
73
+ */
74
+ get geometry() {
75
+ return this._inputs[0];
76
+ }
77
+ /**
78
+ * Gets the source input component
79
+ */
80
+ get source() {
81
+ return this._inputs[1];
82
+ }
83
+ /**
84
+ * Gets the geometry output component
85
+ */
86
+ get output() {
87
+ return this._outputs[0];
88
+ }
89
+ _buildBlock(state) {
90
+ const func = (state) => {
91
+ state.pushExecutionContext(this);
92
+ this._vertexData = this.geometry.getConnectedValue(state);
93
+ state.pushGeometryContext(this._vertexData);
94
+ if (!this._vertexData || !this._vertexData.positions || !this.source.isConnected) {
95
+ state.restoreGeometryContext();
96
+ state.restoreExecutionContext();
97
+ this.output._storedValue = null;
98
+ return;
99
+ }
100
+ // Processing
101
+ const vertexCount = this._vertexData.positions.length / 3;
102
+ const context = [];
103
+ for (this._currentIndex = 0; this._currentIndex < vertexCount; this._currentIndex++) {
104
+ context.push(this.source.getConnectedValue(state));
105
+ }
106
+ // Aggregation
107
+ let func = null;
108
+ switch (this.aggregation) {
109
+ case Aggregations.Max: {
110
+ func = (a, b) => Math.max(a, b);
111
+ break;
112
+ }
113
+ case Aggregations.Min: {
114
+ func = (a, b) => Math.min(a, b);
115
+ break;
116
+ }
117
+ case Aggregations.Sum: {
118
+ func = (a, b) => a + b;
119
+ break;
120
+ }
121
+ }
122
+ if (!func) {
123
+ state.restoreGeometryContext();
124
+ state.restoreExecutionContext();
125
+ this.output._storedFunction = null;
126
+ this.output._storedValue = null;
127
+ return;
128
+ }
129
+ let returnValue;
130
+ switch (this.source.type) {
131
+ case NodeGeometryBlockConnectionPointTypes.Int:
132
+ case NodeGeometryBlockConnectionPointTypes.Float: {
133
+ returnValue = context.reduce(func);
134
+ break;
135
+ }
136
+ case NodeGeometryBlockConnectionPointTypes.Vector2: {
137
+ const x = context.map((v) => v.x).reduce(func);
138
+ const y = context.map((v) => v.y).reduce(func);
139
+ returnValue = new Vector2(x, y);
140
+ break;
141
+ }
142
+ case NodeGeometryBlockConnectionPointTypes.Vector3: {
143
+ const x = context.map((v) => v.x).reduce(func);
144
+ const y = context.map((v) => v.y).reduce(func);
145
+ const z = context.map((v) => v.z).reduce(func);
146
+ returnValue = new Vector3(x, y, z);
147
+ break;
148
+ }
149
+ case NodeGeometryBlockConnectionPointTypes.Vector4: {
150
+ const x = context.map((v) => v.x).reduce(func);
151
+ const y = context.map((v) => v.y).reduce(func);
152
+ const z = context.map((v) => v.z).reduce(func);
153
+ const w = context.map((v) => v.w).reduce(func);
154
+ returnValue = new Vector4(x, y, z, w);
155
+ break;
156
+ }
157
+ }
158
+ // Storage
159
+ state.restoreGeometryContext();
160
+ state.restoreExecutionContext();
161
+ return returnValue;
162
+ };
163
+ if (this.evaluateContext) {
164
+ this.output._storedFunction = func;
165
+ }
166
+ else {
167
+ this.output._storedFunction = null;
168
+ this.output._storedValue = func(state);
169
+ }
170
+ }
171
+ _dumpPropertiesCode() {
172
+ let codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.evaluateContext = ${this.evaluateContext ? "true" : "false"};\n`;
173
+ codeString += `${this._codeVariableName}.aggregation = BABYLON.Aggregations.${Aggregations[this.aggregation]};\n`;
174
+ return codeString;
175
+ }
176
+ /**
177
+ * Serializes this block in a JSON representation
178
+ * @returns the serialized block object
179
+ */
180
+ serialize() {
181
+ const serializationObject = super.serialize();
182
+ serializationObject.evaluateContext = this.evaluateContext;
183
+ serializationObject.aggregation = this.aggregation;
184
+ return serializationObject;
185
+ }
186
+ _deserialize(serializationObject) {
187
+ super._deserialize(serializationObject);
188
+ if (serializationObject.evaluateContext !== undefined) {
189
+ this.evaluateContext = serializationObject.evaluateContext;
190
+ }
191
+ if (serializationObject.aggregation !== undefined) {
192
+ this.aggregation = serializationObject.aggregation;
193
+ }
194
+ }
195
+ }
196
+ __decorate([
197
+ editableInPropertyPage("Aggregation", 4 /* PropertyTypeForEdition.List */, "ADVANCED", {
198
+ notifiers: { rebuild: true },
199
+ options: [
200
+ { label: "Max", value: Aggregations.Max },
201
+ { label: "Min", value: Aggregations.Min },
202
+ { label: "Sum", value: Aggregations.Sum },
203
+ ],
204
+ })
205
+ ], AggregatorBlock.prototype, "aggregation", void 0);
206
+ __decorate([
207
+ editableInPropertyPage("Evaluate context", 0 /* PropertyTypeForEdition.Boolean */, "ADVANCED", { notifiers: { rebuild: true } })
208
+ ], AggregatorBlock.prototype, "evaluateContext", void 0);
209
+ RegisterClass("BABYLON.AggregatorBlock", AggregatorBlock);
210
+ //# sourceMappingURL=aggregatorBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregatorBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Meshes/Node/Blocks/Set/aggregatorBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeGeometryBlock } from \"../../nodeGeometryBlock\";\r\nimport type { NodeGeometryConnectionPoint } from \"../../nodeGeometryBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { NodeGeometryBlockConnectionPointTypes } from \"../../Enums/nodeGeometryConnectionPointTypes\";\r\nimport type { NodeGeometryBuildState } from \"../../nodeGeometryBuildState\";\r\nimport type { INodeGeometryExecutionContext } from \"../../Interfaces/nodeGeometryExecutionContext\";\r\nimport type { VertexData } from \"../../../../Meshes/mesh.vertexData\";\r\nimport { PropertyTypeForEdition, editableInPropertyPage } from \"core/Decorators/nodeDecorator\";\r\nimport { Vector2, Vector3, Vector4 } from \"core/Maths/math.vector\";\r\nimport type { Nullable } from \"core/types\";\r\n\r\n/**\r\n * Conditions supported by the condition block\r\n */\r\nexport enum Aggregations {\r\n /** Max */\r\n Max,\r\n /** Min */\r\n Min,\r\n /** Sum */\r\n Sum,\r\n}\r\n\r\n/**\r\n * Block used to extract a valuefrom a geometry\r\n */\r\nexport class AggregatorBlock extends NodeGeometryBlock implements INodeGeometryExecutionContext {\r\n private _vertexData: VertexData;\r\n private _currentIndex: number;\r\n\r\n /**\r\n * Gets or sets the test used by the block\r\n */\r\n @editableInPropertyPage(\"Aggregation\", PropertyTypeForEdition.List, \"ADVANCED\", {\r\n notifiers: { rebuild: true },\r\n options: [\r\n { label: \"Max\", value: Aggregations.Max },\r\n { label: \"Min\", value: Aggregations.Min },\r\n { label: \"Sum\", value: Aggregations.Sum },\r\n ],\r\n })\r\n public aggregation = Aggregations.Sum;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that this block can evaluate context\r\n * Build performance is improved when this value is set to false as the system will cache values instead of reevaluating everything per context change\r\n */\r\n @editableInPropertyPage(\"Evaluate context\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { notifiers: { rebuild: true } })\r\n public evaluateContext = true;\r\n\r\n /**\r\n * Create a new SetPositionsBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n\r\n this.registerInput(\"geometry\", NodeGeometryBlockConnectionPointTypes.Geometry);\r\n this.registerInput(\"source\", NodeGeometryBlockConnectionPointTypes.AutoDetect);\r\n\r\n this.registerOutput(\"output\", NodeGeometryBlockConnectionPointTypes.BasedOnInput);\r\n this._outputs[0]._typeConnectionSource = this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the current index in the current flow\r\n * @returns the current index\r\n */\r\n public getExecutionIndex(): number {\r\n return this._currentIndex;\r\n }\r\n\r\n /**\r\n * Gets the current loop index in the current flow\r\n * @returns the current loop index\r\n */\r\n public getExecutionLoopIndex(): number {\r\n return this._currentIndex;\r\n }\r\n\r\n /**\r\n * Gets the current face index in the current flow\r\n * @returns the current face index\r\n */\r\n public getExecutionFaceIndex(): number {\r\n return 0;\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"AggregatorBlock\";\r\n }\r\n\r\n /**\r\n * Gets the geometry input component\r\n */\r\n public get geometry(): NodeGeometryConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the source input component\r\n */\r\n public get source(): NodeGeometryConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the geometry output component\r\n */\r\n public get output(): NodeGeometryConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n protected override _buildBlock(state: NodeGeometryBuildState) {\r\n const func = (state: NodeGeometryBuildState) => {\r\n state.pushExecutionContext(this);\r\n\r\n this._vertexData = this.geometry.getConnectedValue(state);\r\n\r\n state.pushGeometryContext(this._vertexData);\r\n\r\n if (!this._vertexData || !this._vertexData.positions || !this.source.isConnected) {\r\n state.restoreGeometryContext();\r\n state.restoreExecutionContext();\r\n this.output._storedValue = null;\r\n return;\r\n }\r\n\r\n // Processing\r\n const vertexCount = this._vertexData.positions.length / 3;\r\n const context: any[] = [];\r\n for (this._currentIndex = 0; this._currentIndex < vertexCount; this._currentIndex++) {\r\n context.push(this.source.getConnectedValue(state));\r\n }\r\n\r\n // Aggregation\r\n let func: Nullable<(a: number, b: number) => number> = null;\r\n\r\n switch (this.aggregation) {\r\n case Aggregations.Max: {\r\n func = (a: number, b: number) => Math.max(a, b);\r\n break;\r\n }\r\n case Aggregations.Min: {\r\n func = (a: number, b: number) => Math.min(a, b);\r\n break;\r\n }\r\n case Aggregations.Sum: {\r\n func = (a: number, b: number) => a + b;\r\n break;\r\n }\r\n }\r\n\r\n if (!func) {\r\n state.restoreGeometryContext();\r\n state.restoreExecutionContext();\r\n this.output._storedFunction = null;\r\n this.output._storedValue = null;\r\n return;\r\n }\r\n\r\n let returnValue: any;\r\n\r\n switch (this.source.type) {\r\n case NodeGeometryBlockConnectionPointTypes.Int:\r\n case NodeGeometryBlockConnectionPointTypes.Float: {\r\n returnValue = (context as number[]).reduce(func!);\r\n break;\r\n }\r\n case NodeGeometryBlockConnectionPointTypes.Vector2: {\r\n const x = (context as Vector2[]).map((v) => v.x).reduce(func!);\r\n const y = (context as Vector2[]).map((v) => v.y).reduce(func!);\r\n returnValue = new Vector2(x, y);\r\n break;\r\n }\r\n case NodeGeometryBlockConnectionPointTypes.Vector3: {\r\n const x = (context as Vector3[]).map((v) => v.x).reduce(func!);\r\n const y = (context as Vector3[]).map((v) => v.y).reduce(func!);\r\n const z = (context as Vector3[]).map((v) => v.z).reduce(func!);\r\n returnValue = new Vector3(x, y, z);\r\n break;\r\n }\r\n case NodeGeometryBlockConnectionPointTypes.Vector4: {\r\n const x = (context as Vector4[]).map((v) => v.x).reduce(func!);\r\n const y = (context as Vector4[]).map((v) => v.y).reduce(func!);\r\n const z = (context as Vector4[]).map((v) => v.z).reduce(func!);\r\n const w = (context as Vector4[]).map((v) => v.w).reduce(func!);\r\n returnValue = new Vector4(x, y, z, w);\r\n break;\r\n }\r\n }\r\n\r\n // Storage\r\n state.restoreGeometryContext();\r\n state.restoreExecutionContext();\r\n return returnValue;\r\n };\r\n\r\n if (this.evaluateContext) {\r\n this.output._storedFunction = func;\r\n } else {\r\n this.output._storedFunction = null;\r\n this.output._storedValue = func(state);\r\n }\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.evaluateContext = ${this.evaluateContext ? \"true\" : \"false\"};\\n`;\r\n codeString += `${this._codeVariableName}.aggregation = BABYLON.Aggregations.${Aggregations[this.aggregation]};\\n`;\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes this block in a JSON representation\r\n * @returns the serialized block object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.evaluateContext = this.evaluateContext;\r\n serializationObject.aggregation = this.aggregation;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any) {\r\n super._deserialize(serializationObject);\r\n\r\n if (serializationObject.evaluateContext !== undefined) {\r\n this.evaluateContext = serializationObject.evaluateContext;\r\n }\r\n if (serializationObject.aggregation !== undefined) {\r\n this.aggregation = serializationObject.aggregation;\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.AggregatorBlock\", AggregatorBlock);\r\n"]}
@@ -1,6 +1,7 @@
1
1
  import { NodeGeometryBlock } from "../nodeGeometryBlock";
2
2
  import type { NodeGeometryConnectionPoint } from "../nodeGeometryBlockConnectionPoint";
3
3
  import type { NodeGeometryBuildState } from "../nodeGeometryBuildState";
4
+ import type { Nullable } from "../../../types.js";
4
5
  /**
5
6
  * Operations supported by the boolean block
6
7
  */
@@ -25,6 +26,11 @@ export declare class BooleanGeometryBlock extends NodeGeometryBlock {
25
26
  * Gets or sets the operation applied by the block
26
27
  */
27
28
  operation: BooleanGeometryOperations;
29
+ private _csg2LoadingPromise;
30
+ /**
31
+ * @internal
32
+ */
33
+ get _isReadyState(): Nullable<Promise<void>>;
28
34
  /**
29
35
  * Create a new BooleanGeometryBlock
30
36
  * @param name defines the block name