playcanvas 2.24.0-beta.32 → 2.24.0-beta.34

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 (217) hide show
  1. package/build/playcanvas/src/core/core.js +2 -2
  2. package/build/playcanvas/src/extras/input/controllers/orbit-controller.d.ts +9 -0
  3. package/build/playcanvas/src/extras/input/controllers/orbit-controller.js +8 -2
  4. package/build/playcanvas/src/framework/components/gsplat/component.d.ts +4 -4
  5. package/build/playcanvas/src/framework/components/particle-system/component.d.ts +5 -5
  6. package/build/playcanvas/src/framework/parsers/sog-bundle.js +20 -3
  7. package/build/playcanvas/src/framework/parsers/sog.js +23 -7
  8. package/build/playcanvas/src/scene/gsplat/gsplat-data.d.ts +7 -0
  9. package/build/playcanvas/src/scene/gsplat/gsplat-data.js +1 -0
  10. package/build/playcanvas/src/scene/gsplat/gsplat-resource-base.d.ts +8 -0
  11. package/build/playcanvas/src/scene/gsplat/gsplat-resource-base.js +3 -0
  12. package/build/playcanvas/src/scene/gsplat/gsplat-resource.d.ts +2 -1
  13. package/build/playcanvas/src/scene/gsplat/gsplat-resource.js +8 -1
  14. package/build/playcanvas/src/scene/gsplat/gsplat-sog-blind.d.ts +55 -0
  15. package/build/playcanvas/src/scene/gsplat/gsplat-sog-blind.js +55 -0
  16. package/build/playcanvas/src/scene/gsplat/gsplat-sog-data.d.ts +9 -3
  17. package/build/playcanvas/src/scene/gsplat/gsplat-sog-data.js +58 -29
  18. package/build/playcanvas/src/scene/gsplat/gsplat-sog-resource.d.ts +8 -0
  19. package/build/playcanvas/src/scene/gsplat/gsplat-sog-resource.js +29 -8
  20. package/build/playcanvas/src/scene/gsplat-unified/gsplat-octree.resource.d.ts +8 -0
  21. package/build/playcanvas/src/scene/gsplat-unified/gsplat-octree.resource.js +3 -0
  22. package/build/playcanvas/src/scene/gsplat-unified/gsplat-params.d.ts +3 -2
  23. package/build/playcanvas/src/scene/gsplat-unified/gsplat-params.js +4 -4
  24. package/build/playcanvas/src/scene/gsplat-unified/gsplat-projector.js +1 -1
  25. package/build/playcanvas/src/scene/materials/lit-material-options-builder.js +0 -2
  26. package/build/playcanvas/src/scene/materials/lit-material.js +5 -0
  27. package/build/playcanvas/src/scene/materials/material-property.d.ts +9 -0
  28. package/build/playcanvas/src/scene/materials/material-property.js +4 -0
  29. package/build/playcanvas/src/scene/materials/standard-material-options-builder.js +1 -3
  30. package/build/playcanvas/src/scene/materials/standard-material.js +19 -4
  31. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/frag/formats/containerCompactWrite.d.ts +1 -1
  32. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/frag/formats/containerCompactWrite.js +1 -1
  33. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/frag/gsplat.d.ts +1 -1
  34. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/frag/gsplat.js +10 -1
  35. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/containerCompactRead.d.ts +1 -1
  36. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/containerCompactRead.js +2 -1
  37. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sog.d.ts +1 -1
  38. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sog.js +25 -5
  39. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogBlind.d.ts +2 -0
  40. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogBlind.js +19 -0
  41. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogBlindField.d.ts +2 -0
  42. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogBlindField.js +6 -0
  43. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogSH.d.ts +1 -1
  44. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogSH.js +5 -2
  45. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplat.d.ts +1 -1
  46. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplat.js +4 -1
  47. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplatCommon.d.ts +1 -1
  48. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplatCommon.js +5 -1
  49. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplatHelpers.d.ts +1 -1
  50. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplatHelpers.js +4 -0
  51. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardBackend.d.ts +1 -1
  52. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardBackend.js +2 -6
  53. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardDeclaration.d.ts +1 -1
  54. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardDeclaration.js +6 -0
  55. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardMain.d.ts +1 -1
  56. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardMain.js +2 -2
  57. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardPreCode.d.ts +1 -1
  58. package/build/playcanvas/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardPreCode.js +1 -1
  59. package/build/playcanvas/src/scene/shader-lib/glsl/collections/gsplat-chunks-glsl.d.ts +2 -0
  60. package/build/playcanvas/src/scene/shader-lib/glsl/collections/gsplat-chunks-glsl.js +2 -0
  61. package/build/playcanvas/src/scene/shader-lib/programs/lit-shader-options.d.ts +0 -8
  62. package/build/playcanvas/src/scene/shader-lib/programs/lit-shader-options.js +0 -2
  63. package/build/playcanvas/src/scene/shader-lib/programs/lit-shader.js +0 -2
  64. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/compute-gsplat-projector.d.ts +1 -1
  65. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/compute-gsplat-projector.js +2 -2
  66. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/frag/formats/containerCompactWrite.d.ts +1 -1
  67. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/frag/formats/containerCompactWrite.js +1 -1
  68. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/frag/gsplat.d.ts +1 -1
  69. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/frag/gsplat.js +11 -2
  70. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/containerCompactRead.d.ts +1 -1
  71. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/containerCompactRead.js +2 -1
  72. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sog.d.ts +1 -1
  73. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sog.js +28 -8
  74. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogBlind.d.ts +2 -0
  75. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogBlind.js +19 -0
  76. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogBlindField.d.ts +2 -0
  77. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogBlindField.js +6 -0
  78. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogSH.d.ts +1 -1
  79. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogSH.js +18 -3
  80. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplat.d.ts +1 -1
  81. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplat.js +4 -1
  82. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatCommon.d.ts +1 -1
  83. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatCommon.js +5 -1
  84. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatHelpers.d.ts +1 -1
  85. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatHelpers.js +4 -0
  86. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatHybrid.d.ts +1 -1
  87. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatHybrid.js +12 -5
  88. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardBackend.d.ts +1 -1
  89. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardBackend.js +2 -6
  90. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardDeclaration.d.ts +1 -1
  91. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardDeclaration.js +6 -0
  92. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardMain.d.ts +1 -1
  93. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardMain.js +2 -2
  94. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardPreCode.d.ts +1 -1
  95. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardPreCode.js +1 -1
  96. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/particle/vert/particleAnimFrameClamp.d.ts +1 -1
  97. package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/particle/vert/particleAnimFrameClamp.js +1 -1
  98. package/build/playcanvas/src/scene/shader-lib/wgsl/collections/gsplat-chunks-wgsl.d.ts +2 -0
  99. package/build/playcanvas/src/scene/shader-lib/wgsl/collections/gsplat-chunks-wgsl.js +2 -0
  100. package/build/playcanvas.d.ts +63 -23
  101. package/build/playcanvas.dbg/src/core/core.js +2 -2
  102. package/build/playcanvas.dbg/src/extras/input/controllers/orbit-controller.js +14 -2
  103. package/build/playcanvas.dbg/src/framework/parsers/sog-bundle.js +20 -3
  104. package/build/playcanvas.dbg/src/framework/parsers/sog.js +23 -7
  105. package/build/playcanvas.dbg/src/scene/gsplat/gsplat-data.js +7 -0
  106. package/build/playcanvas.dbg/src/scene/gsplat/gsplat-resource-base.js +10 -0
  107. package/build/playcanvas.dbg/src/scene/gsplat/gsplat-resource.js +10 -2
  108. package/build/playcanvas.dbg/src/scene/gsplat/gsplat-sog-blind.js +65 -0
  109. package/build/playcanvas.dbg/src/scene/gsplat/gsplat-sog-data.js +66 -32
  110. package/build/playcanvas.dbg/src/scene/gsplat/gsplat-sog-resource.js +42 -8
  111. package/build/playcanvas.dbg/src/scene/gsplat-unified/gsplat-octree.resource.js +10 -0
  112. package/build/playcanvas.dbg/src/scene/gsplat-unified/gsplat-params.js +7 -6
  113. package/build/playcanvas.dbg/src/scene/gsplat-unified/gsplat-projector.js +1 -1
  114. package/build/playcanvas.dbg/src/scene/materials/lit-material-options-builder.js +0 -2
  115. package/build/playcanvas.dbg/src/scene/materials/lit-material.js +6 -0
  116. package/build/playcanvas.dbg/src/scene/materials/material-property.js +4 -0
  117. package/build/playcanvas.dbg/src/scene/materials/standard-material-options-builder.js +1 -3
  118. package/build/playcanvas.dbg/src/scene/materials/standard-material.js +19 -4
  119. package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/gsplat/frag/formats/containerCompactWrite.js +2 -1
  120. package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/gsplat/frag/gsplat.js +15 -1
  121. package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/containerCompactRead.js +3 -1
  122. package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sog.js +30 -6
  123. package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogBlind.js +27 -0
  124. package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogBlindField.js +9 -0
  125. package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogSH.js +6 -3
  126. package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplat.js +7 -1
  127. package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplatCommon.js +6 -1
  128. package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplatHelpers.js +15 -0
  129. package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardBackend.js +4 -6
  130. package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardDeclaration.js +8 -0
  131. package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardMain.js +4 -3
  132. package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardPreCode.js +1 -1
  133. package/build/playcanvas.dbg/src/scene/shader-lib/glsl/collections/gsplat-chunks-glsl.js +2 -0
  134. package/build/playcanvas.dbg/src/scene/shader-lib/programs/lit-shader-options.js +0 -8
  135. package/build/playcanvas.dbg/src/scene/shader-lib/programs/lit-shader.js +0 -2
  136. package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/compute-gsplat-projector.js +4 -2
  137. package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/frag/formats/containerCompactWrite.js +2 -1
  138. package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/frag/gsplat.js +15 -2
  139. package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/containerCompactRead.js +3 -1
  140. package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sog.js +33 -9
  141. package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogBlind.js +27 -0
  142. package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogBlindField.js +9 -0
  143. package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogSH.js +19 -4
  144. package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplat.js +7 -1
  145. package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatCommon.js +6 -1
  146. package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatHelpers.js +15 -0
  147. package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatHybrid.js +16 -5
  148. package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardBackend.js +4 -6
  149. package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardDeclaration.js +8 -0
  150. package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardMain.js +4 -3
  151. package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardPreCode.js +1 -1
  152. package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/particle/vert/particleAnimFrameClamp.js +1 -1
  153. package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/collections/gsplat-chunks-wgsl.js +2 -0
  154. package/build/playcanvas.dbg.js +608 -145
  155. package/build/playcanvas.dbg.mjs +608 -145
  156. package/build/playcanvas.js +454 -127
  157. package/build/playcanvas.min.js +936 -789
  158. package/build/playcanvas.min.mjs +923 -776
  159. package/build/playcanvas.mjs +449 -127
  160. package/build/playcanvas.prf/src/core/core.js +2 -2
  161. package/build/playcanvas.prf/src/extras/input/controllers/orbit-controller.js +8 -2
  162. package/build/playcanvas.prf/src/framework/parsers/sog-bundle.js +20 -3
  163. package/build/playcanvas.prf/src/framework/parsers/sog.js +23 -7
  164. package/build/playcanvas.prf/src/scene/gsplat/gsplat-data.js +1 -0
  165. package/build/playcanvas.prf/src/scene/gsplat/gsplat-resource-base.js +3 -0
  166. package/build/playcanvas.prf/src/scene/gsplat/gsplat-resource.js +8 -1
  167. package/build/playcanvas.prf/src/scene/gsplat/gsplat-sog-blind.js +55 -0
  168. package/build/playcanvas.prf/src/scene/gsplat/gsplat-sog-data.js +58 -29
  169. package/build/playcanvas.prf/src/scene/gsplat/gsplat-sog-resource.js +29 -8
  170. package/build/playcanvas.prf/src/scene/gsplat-unified/gsplat-octree.resource.js +3 -0
  171. package/build/playcanvas.prf/src/scene/gsplat-unified/gsplat-params.js +4 -4
  172. package/build/playcanvas.prf/src/scene/gsplat-unified/gsplat-projector.js +1 -1
  173. package/build/playcanvas.prf/src/scene/materials/lit-material-options-builder.js +0 -2
  174. package/build/playcanvas.prf/src/scene/materials/lit-material.js +5 -0
  175. package/build/playcanvas.prf/src/scene/materials/material-property.js +4 -0
  176. package/build/playcanvas.prf/src/scene/materials/standard-material-options-builder.js +1 -3
  177. package/build/playcanvas.prf/src/scene/materials/standard-material.js +19 -4
  178. package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/gsplat/frag/formats/containerCompactWrite.js +1 -1
  179. package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/gsplat/frag/gsplat.js +10 -1
  180. package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/containerCompactRead.js +2 -1
  181. package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sog.js +25 -5
  182. package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogBlind.js +19 -0
  183. package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogBlindField.js +6 -0
  184. package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogSH.js +5 -2
  185. package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplat.js +4 -1
  186. package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplatCommon.js +5 -1
  187. package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplatHelpers.js +4 -0
  188. package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardBackend.js +2 -6
  189. package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardDeclaration.js +6 -0
  190. package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardMain.js +2 -2
  191. package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardPreCode.js +1 -1
  192. package/build/playcanvas.prf/src/scene/shader-lib/glsl/collections/gsplat-chunks-glsl.js +2 -0
  193. package/build/playcanvas.prf/src/scene/shader-lib/programs/lit-shader-options.js +0 -2
  194. package/build/playcanvas.prf/src/scene/shader-lib/programs/lit-shader.js +0 -2
  195. package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/compute-gsplat-projector.js +2 -2
  196. package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/frag/formats/containerCompactWrite.js +1 -1
  197. package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/frag/gsplat.js +11 -2
  198. package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/containerCompactRead.js +2 -1
  199. package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sog.js +28 -8
  200. package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogBlind.js +19 -0
  201. package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogBlindField.js +6 -0
  202. package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogSH.js +18 -3
  203. package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplat.js +4 -1
  204. package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatCommon.js +5 -1
  205. package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatHelpers.js +4 -0
  206. package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatHybrid.js +12 -5
  207. package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardBackend.js +2 -6
  208. package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardDeclaration.js +6 -0
  209. package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardMain.js +2 -2
  210. package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardPreCode.js +1 -1
  211. package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/particle/vert/particleAnimFrameClamp.js +1 -1
  212. package/build/playcanvas.prf/src/scene/shader-lib/wgsl/collections/gsplat-chunks-wgsl.js +2 -0
  213. package/build/playcanvas.prf.js +454 -127
  214. package/build/playcanvas.prf.mjs +449 -127
  215. package/package.json +1 -1
  216. package/scripts/esm/blurred-planar-reflection.mjs +10 -4
  217. package/scripts/esm/camera-controls.mjs +283 -13
@@ -1,5 +1,5 @@
1
- const version = "2.24.0-beta.32";
2
- const revision = "3f0066f";
1
+ const version = "2.24.0-beta.34";
2
+ const revision = "eb5f1c2";
3
3
  function extend(target, ex) {
4
4
  for (const prop in ex) {
5
5
  const copy = ex[prop];
@@ -3,6 +3,8 @@
3
3
  * view around the focus within {@link yawRange} and {@link pitchRange}, the first two `move`
4
4
  * components pan the focus point, and the third scales the distance within {@link zoomRange}.
5
5
  * Motion is smoothed with {@link rotateDamping}, {@link moveDamping} and {@link zoomDamping}.
6
+ * With {@link horizontalPan}, the pan moves the focus point across the ground instead of the
7
+ * plane of the view.
6
8
  *
7
9
  * @category Input
8
10
  * @alpha
@@ -42,6 +44,13 @@ export class OrbitController extends InputController {
42
44
  * The zoom damping. A higher value means more damping. A value of 0 means no damping.
43
45
  */
44
46
  zoomDamping: number;
47
+ /**
48
+ * Whether the pan moves the focus point across the horizontal plane, as when dragging a map,
49
+ * instead of across the plane of the view. The first two `move` components are then the
50
+ * distances to move the focus point to the right and forward, level with the ground, so the
51
+ * height of the focus point does not change. Default is false.
52
+ */
53
+ horizontalPan: boolean;
45
54
  set pitchRange(range: import("../../../index.js").Vec2);
46
55
  get pitchRange(): import("../../../index.js").Vec2;
47
56
  set yawRange(range: import("../../../index.js").Vec2);
@@ -15,6 +15,7 @@ class OrbitController extends InputController {
15
15
  rotateDamping = 0.98;
16
16
  moveDamping = 0.98;
17
17
  zoomDamping = 0.98;
18
+ horizontalPan = false;
18
19
  set pitchRange(range) {
19
20
  this._targetRootPose.pitchRange.copy(range);
20
21
  this._rootPose.copy(this._targetRootPose.rotate(Vec3.ZERO));
@@ -50,8 +51,13 @@ class OrbitController extends InputController {
50
51
  }
51
52
  update(frame, dt) {
52
53
  const { move, rotate } = frame.read();
53
- offset.set(move[0], move[1], 0);
54
- rotation.setFromEulerAngles(this._rootPose.angles).transformVector(offset, offset);
54
+ if (this.horizontalPan) {
55
+ offset.set(move[0], 0, -move[1]);
56
+ rotation.setFromEulerAngles(0, this._rootPose.angles.y, 0).transformVector(offset, offset);
57
+ } else {
58
+ offset.set(move[0], move[1], 0);
59
+ rotation.setFromEulerAngles(this._rootPose.angles).transformVector(offset, offset);
60
+ }
55
61
  this._targetRootPose.move(offset);
56
62
  const { z: dist } = this._targetChildPose.position;
57
63
  this._targetChildPose.move(offset.set(0, 0, dist * (1 + move[2]) - dist));
@@ -29,13 +29,13 @@
29
29
  * - [Billions of Splats](https://playcanvas.github.io/#/gaussian-splatting/billions)
30
30
  * - [Downtown Streaming](https://playcanvas.github.io/#/gaussian-splatting/downtown)
31
31
  * - [Global Sorting](https://playcanvas.github.io/#/gaussian-splatting/global-sorting)
32
- * - [LOD Instances](https://playcanvas.github.io/#/gaussian-splatting/lod-instances)
32
+ * - [LOD Instances](https://playcanvas.github.io/#/gaussian-splatting/streamed-instances)
33
33
  * - [Multi-Splat](https://playcanvas.github.io/#/gaussian-splatting/multi-splat)
34
34
  * - [Multi-View](https://playcanvas.github.io/#/gaussian-splatting/multi-view)
35
35
  * - [Picking](https://playcanvas.github.io/#/gaussian-splatting/picking)
36
- * - [Reveal Effect](https://playcanvas.github.io/#/gaussian-splatting/reveal)
37
- * - [Shader Effects](https://playcanvas.github.io/#/gaussian-splatting/shader-effects)
38
- * - [Spherical Harmonics](https://playcanvas.github.io/#/gaussian-splatting/spherical-harmonics)
36
+ * - [Reveal Effect](https://playcanvas.github.io/#/gaussian-splatting-fx/reveal)
37
+ * - [Shader Effects](https://playcanvas.github.io/#/gaussian-splatting-fx/shader-effects)
38
+ * - [Spherical Harmonics](https://playcanvas.github.io/#/gaussian-splatting/simple-sh)
39
39
  * - [Streamed LCC2](https://playcanvas.github.io/#/gaussian-splatting/streamed-lcc2)
40
40
  * - [Streamed SOG](https://playcanvas.github.io/#/gaussian-splatting/streamed-sog)
41
41
  * - [Streamed SOG with Spherical Harmonics](https://playcanvas.github.io/#/gaussian-splatting/streamed-sog-sh)
@@ -39,11 +39,11 @@ export const _properties: string[];
39
39
  *
40
40
  * Relevant Engine API examples:
41
41
  *
42
- * - [Particle Animated Index](https://playcanvas.github.io/#/graphics/particles-anim-index)
43
- * - [Particle Mesh](https://playcanvas.github.io/#/graphics/particles-mesh)
44
- * - [Particle Random Sprites](https://playcanvas.github.io/#/graphics/particles-random-sprites)
45
- * - [Particle Snow](https://playcanvas.github.io/#/graphics/particles-snow)
46
- * - [Particle Spark](https://playcanvas.github.io/#/graphics/particles-spark)
42
+ * - [Particle Animated Index](https://playcanvas.github.io/#/particles/anim-index)
43
+ * - [Particle Mesh](https://playcanvas.github.io/#/particles/mesh)
44
+ * - [Particle Random Sprites](https://playcanvas.github.io/#/particles/random-sprites)
45
+ * - [Particle Snow](https://playcanvas.github.io/#/particles/snow)
46
+ * - [Particle Spark](https://playcanvas.github.io/#/particles/spark)
47
47
  * - [Particles in a user interface](https://playcanvas.github.io/#/user-interface/particle-system)
48
48
  *
49
49
  * @hideconstructor
@@ -159,7 +159,14 @@ class SogBundleParser {
159
159
  callback(`Error parsing meta.json: ${err}`);
160
160
  return;
161
161
  }
162
- const filenames = ["means", "scales", "quats", "sh0", "shN"].map((key) => meta[key]?.files ?? []).flat();
162
+ if (meta.version !== void 0 && meta.version !== 2 && meta.version !== 3) {
163
+ callback(`Error loading gsplat: unsupported SOG version ${meta.version} in ${url.original}`);
164
+ return;
165
+ }
166
+ const filenames = [
167
+ ...["means", "scales", "quats", "sh0", "shN"].map((key) => meta[key]?.files ?? []).flat(),
168
+ ...(meta.blind ?? []).map((t) => t.files[0])
169
+ ];
163
170
  const promises = [];
164
171
  for (const filename of filenames) {
165
172
  const file = files.find((f) => f.filename === filename);
@@ -194,7 +201,7 @@ class SogBundleParser {
194
201
  promises.push(promise);
195
202
  }
196
203
  Object.values(textures).forEach((t) => this.app.assets.load(t));
197
- await Promise.allSettled(promises);
204
+ const results = await Promise.allSettled(promises);
198
205
  if (this._shouldAbort(asset, unloaded)) {
199
206
  Object.values(textures).forEach((t) => {
200
207
  assets.remove(t);
@@ -203,6 +210,15 @@ class SogBundleParser {
203
210
  callback(null, null);
204
211
  return;
205
212
  }
213
+ const failed = results.findIndex((r) => r.status === "rejected");
214
+ if (failed !== -1) {
215
+ Object.values(textures).forEach((t) => {
216
+ assets.remove(t);
217
+ t.unload();
218
+ });
219
+ callback(`Error loading gsplat: failed to load ${filenames[failed]} in ${url.original}: ${results[failed].reason}`);
220
+ return;
221
+ }
206
222
  Object.values(textures).forEach((t) => {
207
223
  if (t.file) {
208
224
  t.file.contents = null;
@@ -215,11 +231,12 @@ class SogBundleParser {
215
231
  data.numSplats = meta.count;
216
232
  data.means_l = textures[meta.means.files[0]].resource;
217
233
  data.means_u = textures[meta.means.files[1]].resource;
218
- data.quats = textures[meta.quats.files[0]].resource;
234
+ data.quats = meta.quats ? textures[meta.quats.files[0]].resource : null;
219
235
  data.scales = textures[meta.scales.files[0]].resource;
220
236
  data.sh0 = textures[meta.sh0.files[0]].resource;
221
237
  data.sh_centroids = textures[meta.shN?.files[0]]?.resource;
222
238
  data.sh_labels = textures[meta.shN?.files[1]]?.resource;
239
+ data.blind = (meta.blind ?? []).map((t) => textures[t.files[0]].resource);
223
240
  data.shBands = GSplatSogData.calcBands(data.sh_centroids?.width);
224
241
  if (!decompress) {
225
242
  if (this._shouldAbort(asset, unloaded)) {
@@ -81,16 +81,19 @@ class SogParser {
81
81
  }
82
82
  async loadTextures(url, callback, asset, meta) {
83
83
  const gsplatCentersEnabledAtLoad = this.app.scene?.gsplatCentersEnabled !== false;
84
- if (meta.version !== 2) {
84
+ if (meta.version === void 0) {
85
85
  meta = upgradeMeta(meta);
86
+ } else if (meta.version !== 2 && meta.version !== 3) {
87
+ callback(`Error loading gsplat: unsupported SOG version ${meta.version} in ${url.original}`);
88
+ return;
86
89
  }
87
90
  const { assets } = this.app;
88
- const subs = ["means", "quats", "scales", "sh0", "shN"];
91
+ const subs = ["means", "quats", "scales", "sh0", "shN", "blind"];
89
92
  const textures = {};
90
93
  const promises = [];
91
94
  const base = window.document?.baseURI ?? window.location.href;
92
95
  subs.forEach((sub) => {
93
- const files = meta[sub]?.files ?? [];
96
+ const files = sub === "blind" ? (meta.blind ?? []).map((t) => t.files[0]) : meta[sub]?.files ?? [];
94
97
  textures[sub] = files.map((filename) => {
95
98
  const texture = new Asset(filename, "texture", {
96
99
  url: asset.options?.mapUrl?.(filename) ?? new URL(filename, new URL(url.load, base).toString()).toString(),
@@ -125,7 +128,7 @@ class SogParser {
125
128
  });
126
129
  combineProgress(asset, textureAssets);
127
130
  textureAssets.forEach((t) => assets.load(t));
128
- await Promise.allSettled(promises);
131
+ const results = await Promise.allSettled(promises);
129
132
  if (this._shouldAbort(asset, unloaded)) {
130
133
  textureAssets.forEach((t) => {
131
134
  assets.remove(t);
@@ -134,17 +137,27 @@ class SogParser {
134
137
  callback(null, null);
135
138
  return;
136
139
  }
140
+ const failed = results.findIndex((r) => r.status === "rejected");
141
+ if (failed !== -1) {
142
+ textureAssets.forEach((t) => {
143
+ assets.remove(t);
144
+ t.unload();
145
+ });
146
+ callback(`Error loading gsplat: failed to load ${textureAssets[failed].file.filename} in ${url.original}: ${results[failed].reason}`);
147
+ return;
148
+ }
137
149
  const data = new GSplatSogData();
138
150
  data.url = url.original;
139
151
  data.meta = meta;
140
152
  data.numSplats = meta.count;
141
153
  data.means_l = textures.means[0].resource;
142
154
  data.means_u = textures.means[1].resource;
143
- data.quats = textures.quats[0].resource;
155
+ data.quats = textures.quats[0]?.resource ?? null;
144
156
  data.scales = textures.scales[0].resource;
145
157
  data.sh0 = textures.sh0[0].resource;
146
158
  data.sh_centroids = textures.shN?.[0]?.resource;
147
159
  data.sh_labels = textures.shN?.[1]?.resource;
160
+ data.blind = textures.blind.map((t) => t.resource);
148
161
  data.shBands = GSplatSogData.calcBands(data.sh_centroids?.width);
149
162
  const decompress = asset.data?.decompress;
150
163
  if (!decompress) {
@@ -180,8 +193,11 @@ class SogParser {
180
193
  callback(null, resource);
181
194
  }
182
195
  load(url, callback, asset) {
196
+ const loadTextures = (meta) => {
197
+ this.loadTextures(url, callback, asset, meta).catch((err) => callback(`Error loading gsplat: ${url.original} [${err}]`));
198
+ };
183
199
  if (asset.data?.means) {
184
- this.loadTextures(url, callback, asset, asset.data);
200
+ loadTextures(asset.data);
185
201
  } else {
186
202
  if (typeof url === "string") {
187
203
  url = {
@@ -200,7 +216,7 @@ class SogParser {
200
216
  return;
201
217
  }
202
218
  if (!err) {
203
- this.loadTextures(url, callback, asset, meta);
219
+ loadTextures(meta);
204
220
  } else {
205
221
  callback(`Error loading gsplat meta: ${url.original} [${err}]`);
206
222
  }
@@ -28,6 +28,13 @@ export class GSplatData {
28
28
  * @type {boolean}
29
29
  */
30
30
  activated: boolean;
31
+ /**
32
+ * Application-defined data stored with the splat file, as in glTF's `extras`: the `extras`
33
+ * value of a decompressed SOG's meta.json. Undefined when the source has none.
34
+ *
35
+ * @type {*}
36
+ */
37
+ extras: any;
31
38
  getProp(name: any, elementName?: string): import("../../framework/parsers/ply.js").DataType;
32
39
  getElement(name: any): PlyElement;
33
40
  addProp(name: any, storage: any): void;
@@ -69,6 +69,7 @@ class GSplatData {
69
69
  numSplats;
70
70
  comments;
71
71
  activated = false;
72
+ extras;
72
73
  constructor(elements, comments = []) {
73
74
  this.elements = elements;
74
75
  this.numSplats = this.getElement("vertex").count;
@@ -171,6 +171,14 @@ export class GSplatResourceBase {
171
171
  * @ignore
172
172
  */
173
173
  get supportsWorkBufferGeometry(): boolean;
174
+ /**
175
+ * Application-defined data stored with the splat file, as in glTF's `extras`: the `extras`
176
+ * value of a SOG's meta.json. The engine attaches no meaning to it. Undefined when the file
177
+ * has none, and for formats that cannot carry it.
178
+ *
179
+ * @type {*}
180
+ */
181
+ get extras(): any;
174
182
  /**
175
183
  * Gets the number of splats in the resource.
176
184
  *
@@ -77,6 +77,9 @@ class GSplatResourceBase {
77
77
  get supportsWorkBufferGeometry() {
78
78
  return false;
79
79
  }
80
+ get extras() {
81
+ return void 0;
82
+ }
80
83
  static createMesh(device) {
81
84
  const splatInstanceSize = GSplatResourceBase.instanceSize;
82
85
  const meshPositions = new Float32Array(12 * splatInstanceSize);
@@ -22,7 +22,8 @@ export class GSplatResource extends GSplatResourceBase {
22
22
  /**
23
23
  * Updates pixel data of splatColor texture based on the supplied color components and opacity.
24
24
  * Assumes that the texture is using an RGBA format where RGB are color components influenced
25
- * by SH spherical harmonics and A is opacity after a sigmoid transformation.
25
+ * by SH spherical harmonics and A is opacity after a sigmoid transformation, plus the optional
26
+ * `opacity_excess` property: the opacity above 1 that merged (decimated) gaussians carry.
26
27
  *
27
28
  * @param {GSplatData} gsplatData - The source data
28
29
  * @ignore
@@ -57,6 +57,9 @@ class GSplatResource extends GSplatResourceBase {
57
57
  configureMaterialDefines(defines) {
58
58
  defines.set("SH_BANDS", this.shBands);
59
59
  }
60
+ get extras() {
61
+ return this.gsplatData.extras;
62
+ }
60
63
  updateColorData(gsplatData) {
61
64
  const texture = this.streams.getTexture("splatColor");
62
65
  if (!texture) {
@@ -68,13 +71,17 @@ class GSplatResource extends GSplatResourceBase {
68
71
  const cg = gsplatData.getProp("f_dc_1");
69
72
  const cb = gsplatData.getProp("f_dc_2");
70
73
  const ca = gsplatData.getProp("opacity");
74
+ const excess = gsplatData.getProp("opacity_excess");
71
75
  const activated = gsplatData.activated;
72
76
  const SH_C0 = 0.28209479177387814;
73
77
  for (let i = 0; i < this.numSplats; ++i) {
74
78
  const r = cr[i] * SH_C0 + 0.5;
75
79
  const g = cg[i] * SH_C0 + 0.5;
76
80
  const b = cb[i] * SH_C0 + 0.5;
77
- const a = activated ? ca[i] : 1 / (1 + Math.exp(-ca[i]));
81
+ let a = activated ? ca[i] : 1 / (1 + Math.exp(-ca[i]));
82
+ if (excess && excess[i] > 0) {
83
+ a = Math.min(a + excess[i], 1.5625);
84
+ }
78
85
  data[i * 4 + 0] = float2Half(r);
79
86
  data[i * 4 + 1] = float2Half(g);
80
87
  data[i * 4 + 2] = float2Half(b);
@@ -0,0 +1,55 @@
1
+ export type BlindField = {
2
+ /**
3
+ * - Index of the field's texture in `meta.blind`.
4
+ */
5
+ texture: number;
6
+ /**
7
+ * - The field name.
8
+ */
9
+ name: string;
10
+ /**
11
+ * - Shader identifier suffix derived from the name.
12
+ */
13
+ id: string;
14
+ /**
15
+ * - The encoding.
16
+ */
17
+ type: string;
18
+ /**
19
+ * - Index of the field's first byte in the texel (0 = R).
20
+ */
21
+ offset: number;
22
+ /**
23
+ * - Number of bytes.
24
+ */
25
+ bytes: number;
26
+ /**
27
+ * - Value of the smallest code (unorm encodings).
28
+ */
29
+ min: number;
30
+ /**
31
+ * - Value of the largest code (unorm encodings).
32
+ */
33
+ max: number;
34
+ };
35
+ /**
36
+ * Shader code for the blind field accessors, appended to the SOG read code: the
37
+ * `gsplatSogBlindVS` decoding helpers, then one accessor per field from the `sogBlindField`
38
+ * template. The textures are declared as streams `blind0`, `blind1`, ... whose generated
39
+ * `loadBlind<i>()` returns the RGBA8 texel as normalized floats.
40
+ *
41
+ * @param {BlindField[]} fields - The fields, from {@link parseBlindFields}.
42
+ * @param {boolean} wgsl - Generate WGSL (else GLSL).
43
+ * @returns {string} The accessor functions, empty when there are no fields.
44
+ */
45
+ export function blindAccessors(fields: BlindField[], wgsl: boolean): string;
46
+ /**
47
+ * The fields of a SOG meta's blind textures, each with its texture index, byte offset and shader
48
+ * identifier. Fields are packed in order, so each starts where the previous field of its texture
49
+ * ended. The data is assumed valid, as the tools writing it check it; debug builds report
50
+ * problems.
51
+ *
52
+ * @param {object} meta - The SOG meta.json.
53
+ * @returns {BlindField[]} The fields.
54
+ */
55
+ export function parseBlindFields(meta: object): BlindField[];
@@ -0,0 +1,55 @@
1
+ import glslBlindField from "../shader-lib/glsl/chunks/gsplat/vert/formats/sogBlindField.js";
2
+ import wgslBlindField from "../shader-lib/wgsl/chunks/gsplat/vert/formats/sogBlindField.js";
3
+ const BLIND_TYPE_BYTES = { u8: 1, u16: 2, u24: 3, u32: 4, f16: 2, f32: 4, unorm8: 1, unorm16: 2 };
4
+ const DEFAULT_RANGE = [0, 1];
5
+ const isIntegerType = (type) => type[0] === "u" && !type.startsWith("unorm");
6
+ const RE_ID = /\{id\}/g;
7
+ const RE_RETURN_TYPE = /\{returnType\}/g;
8
+ const RE_TEXTURE = /\{texture\}/g;
9
+ const RE_OFFSET = /\{offset\}/g;
10
+ const RE_BYTES = /\{bytes\}/g;
11
+ const RE_DECODE = /\{decode\}/g;
12
+ const blindFieldId = (name) => name.replace(/\W/g, "_").replace(/_+/g, "_").replace(/^_|_$/g, "");
13
+ const parseBlindFields = (meta) => {
14
+ const fields = [];
15
+ (meta.blind ?? []).forEach((texture, t) => {
16
+ let offset = 0;
17
+ for (const f of texture.fields) {
18
+ const bytes = BLIND_TYPE_BYTES[f.type];
19
+ const [min, max] = f.range ?? DEFAULT_RANGE;
20
+ fields.push({ texture: t, name: f.name, id: blindFieldId(f.name), type: f.type, offset, bytes, min, max });
21
+ offset += bytes;
22
+ }
23
+ });
24
+ return fields;
25
+ };
26
+ const floatLiteral = (v) => {
27
+ const s = String(v);
28
+ return /[.e]/i.test(s) ? s : `${s}.0`;
29
+ };
30
+ const blindAccessors = (fields, wgsl) => {
31
+ if (!fields.length) {
32
+ return "";
33
+ }
34
+ const template = wgsl ? wgslBlindField : glslBlindField;
35
+ const accessors = fields.map((f) => {
36
+ const integer = isIntegerType(f.type);
37
+ let decode = "bits";
38
+ if (f.type === "f16") {
39
+ decode = "sogBlindF16(bits)";
40
+ } else if (f.type === "f32") {
41
+ decode = "sogBlindF32(bits)";
42
+ } else if (!integer) {
43
+ const steps = f.type === "unorm8" ? "255.0" : "65535.0";
44
+ decode = `sogBlindUnorm(bits, ${steps}, ${floatLiteral(f.min)}, ${floatLiteral(f.max)})`;
45
+ }
46
+ return template.replace(RE_ID, f.id).replace(RE_RETURN_TYPE, integer ? wgsl ? "u32" : "uint" : wgsl ? "f32" : "float").replace(RE_TEXTURE, String(f.texture)).replace(RE_OFFSET, String(f.offset)).replace(RE_BYTES, String(f.bytes)).replace(RE_DECODE, decode);
47
+ });
48
+ return `
49
+ #include "gsplatSogBlindVS"
50
+ ${accessors.join("")}`;
51
+ };
52
+ export {
53
+ blindAccessors,
54
+ parseBlindFields
55
+ };
@@ -10,7 +10,13 @@ export class GSplatSogData {
10
10
  sh_centroids: any;
11
11
  sh_labels: any;
12
12
  /**
13
- * V2-only codebook LUT (256x1 RGBA32F): .r = scales, .g = sh0, .b = shN, .a unused.
13
+ * V3 per-gaussian blind data textures (RGBA8), one per `meta.blind` entry.
14
+ *
15
+ * @type {Texture[]}
16
+ */
17
+ blind: Texture[];
18
+ /**
19
+ * V2/V3 codebook LUT (256x1 RGBA32F): .r = scales, .g = sh0, .b = shN, .a unused.
14
20
  * Built from meta codebooks in prepareCodebook(). Null for V1 assets.
15
21
  *
16
22
  * @type {Texture|null}
@@ -49,8 +55,8 @@ export class GSplatSogData {
49
55
  decompress(): Promise<GSplatData>;
50
56
  generateCenters(): Promise<void>;
51
57
  /**
52
- * Creates the V2 codebook LUT texture. Packs the three 256-entry scalar codebooks
53
- * (scales, sh0, shN) into a single 256x1 RGBA32F texture:
58
+ * Creates the V2/V3 codebook LUT texture. Packs the 256-entry scalar codebooks into a
59
+ * single 256x1 RGBA32F texture:
54
60
  * - .r = scales codebook
55
61
  * - .g = sh0 codebook
56
62
  * - .b = shN codebook