@babylonjs/lite 0.1.1

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 (417) hide show
  1. package/_math-factory-C-QqW-Wi.js +55 -0
  2. package/_math-factory-C-QqW-Wi.js.map +1 -0
  3. package/add-block-CikX5gWy.js +6 -0
  4. package/add-block-CikX5gWy.js.map +1 -0
  5. package/alpha-test-fragment-CUiHCw7W.js +22 -0
  6. package/alpha-test-fragment-CUiHCw7W.js.map +1 -0
  7. package/ambient-occlusion-block-DForhWL3.js +77 -0
  8. package/ambient-occlusion-block-DForhWL3.js.map +1 -0
  9. package/anisotropy-block-D5fXH_OY.js +12 -0
  10. package/anisotropy-block-D5fXH_OY.js.map +1 -0
  11. package/anisotropy-fragment-HgasXS7l.js +89 -0
  12. package/anisotropy-fragment-HgasXS7l.js.map +1 -0
  13. package/arc-tan2-block-d8sWt_x0.js +12 -0
  14. package/arc-tan2-block-d8sWt_x0.js.map +1 -0
  15. package/assets/splat-sort-worker-Crg3CaCc.js.map +1 -0
  16. package/background-dds-skybox-yHTqabU3.js +221 -0
  17. package/background-dds-skybox-yHTqabU3.js.map +1 -0
  18. package/background-ground-DIw6D3qf.js +235 -0
  19. package/background-ground-DIw6D3qf.js.map +1 -0
  20. package/background-hdr-skybox-c4uuTmkP.js +179 -0
  21. package/background-hdr-skybox-c4uuTmkP.js.map +1 -0
  22. package/background-solid-skybox-DPGBpPbm.js +235 -0
  23. package/background-solid-skybox-DPGBpPbm.js.map +1 -0
  24. package/bake-local-matrix-Dfpd3b06.js +28 -0
  25. package/bake-local-matrix-Dfpd3b06.js.map +1 -0
  26. package/billboard-renderable-D8mlVGCd.js +242 -0
  27. package/billboard-renderable-D8mlVGCd.js.map +1 -0
  28. package/biplanar-block-DZnKuV81.js +115 -0
  29. package/biplanar-block-DZnKuV81.js.map +1 -0
  30. package/bones-block-D6IhqUVV.js +31 -0
  31. package/bones-block-D6IhqUVV.js.map +1 -0
  32. package/clamp-block-BdII67hT.js +21 -0
  33. package/clamp-block-BdII67hT.js.map +1 -0
  34. package/clearcoat-block-BGML4npi.js +12 -0
  35. package/clearcoat-block-BGML4npi.js.map +1 -0
  36. package/clearcoat-fragment-LCiG98Rf.js +256 -0
  37. package/clearcoat-fragment-LCiG98Rf.js.map +1 -0
  38. package/clip-planes-block-BPfFJrbf.js +26 -0
  39. package/clip-planes-block-BPfFJrbf.js.map +1 -0
  40. package/cloud-block-BeVrangc.js +90 -0
  41. package/cloud-block-BeVrangc.js.map +1 -0
  42. package/color-converter-block-CvwKiW4k.js +123 -0
  43. package/color-converter-block-CvwKiW4k.js.map +1 -0
  44. package/color-merger-CCu21ZII.js +57 -0
  45. package/color-merger-CCu21ZII.js.map +1 -0
  46. package/color-splitter-CGn1G4ow.js +33 -0
  47. package/color-splitter-CGn1G4ow.js.map +1 -0
  48. package/conditional-block-Cd2pbejI.js +51 -0
  49. package/conditional-block-Cd2pbejI.js.map +1 -0
  50. package/create-skeleton-C9JdIJnb.js +44 -0
  51. package/create-skeleton-C9JdIJnb.js.map +1 -0
  52. package/cross-block-DCrLwCpt.js +12 -0
  53. package/cross-block-DCrLwCpt.js.map +1 -0
  54. package/cubemap-skybox-material-DvXMVc4k.js +79 -0
  55. package/cubemap-skybox-material-DvXMVc4k.js.map +1 -0
  56. package/curve-block-BlJpXVYv.js +89 -0
  57. package/curve-block-BlJpXVYv.js.map +1 -0
  58. package/debug-block-D2pg4Yf6.js +14 -0
  59. package/debug-block-D2pg4Yf6.js.map +1 -0
  60. package/derivative-block-B8KjtaWs.js +20 -0
  61. package/derivative-block-B8KjtaWs.js.map +1 -0
  62. package/desaturate-block-C1RghNSB.js +15 -0
  63. package/desaturate-block-C1RghNSB.js.map +1 -0
  64. package/discard-block-B2jKjaEL.js +21 -0
  65. package/discard-block-B2jKjaEL.js.map +1 -0
  66. package/distance-block-3NkgFZ3f.js +16 -0
  67. package/distance-block-3NkgFZ3f.js.map +1 -0
  68. package/divide-block-ZyepIg_-.js +6 -0
  69. package/divide-block-ZyepIg_-.js.map +1 -0
  70. package/dot-block-VlfAC6cD.js +16 -0
  71. package/dot-block-VlfAC6cD.js.map +1 -0
  72. package/elbow-block-NEOiIxzO.js +10 -0
  73. package/elbow-block-NEOiIxzO.js.map +1 -0
  74. package/emissive-fragment-BnNvbBCw.js +39 -0
  75. package/emissive-fragment-BnNvbBCw.js.map +1 -0
  76. package/esm-shadow-view-DGKdF1NI.js +18 -0
  77. package/esm-shadow-view-DGKdF1NI.js.map +1 -0
  78. package/esm-shadow-view-DN9HIaM4.js +15 -0
  79. package/esm-shadow-view-DN9HIaM4.js.map +1 -0
  80. package/esm-shadow-view-Dk9NFtLq.js +15 -0
  81. package/esm-shadow-view-Dk9NFtLq.js.map +1 -0
  82. package/fog-block-DJ9hEolm.js +41 -0
  83. package/fog-block-DJ9hEolm.js.map +1 -0
  84. package/frag-coord-block-DzXfFgfV.js +25 -0
  85. package/frag-coord-block-DzXfFgfV.js.map +1 -0
  86. package/frag-depth-block-UQbeKP2D.js +34 -0
  87. package/frag-depth-block-UQbeKP2D.js.map +1 -0
  88. package/fragment-output-BOphkIeh.js +26 -0
  89. package/fragment-output-BOphkIeh.js.map +1 -0
  90. package/fresnel-block-DefHWeO-.js +20 -0
  91. package/fresnel-block-DefHWeO-.js.map +1 -0
  92. package/front-facing-0d6aiyrv.js +11 -0
  93. package/front-facing-0d6aiyrv.js.map +1 -0
  94. package/gaussian-splatting-pipeline-sh-DgJl7l56.js +500 -0
  95. package/gaussian-splatting-pipeline-sh-DgJl7l56.js.map +1 -0
  96. package/gltf-animation-D7uyTyO3.js +245 -0
  97. package/gltf-animation-D7uyTyO3.js.map +1 -0
  98. package/gltf-ext-anisotropy-CknJiJK8.js +22 -0
  99. package/gltf-ext-anisotropy-CknJiJK8.js.map +1 -0
  100. package/gltf-ext-basisu-CPg5kPrx.js +452 -0
  101. package/gltf-ext-basisu-CPg5kPrx.js.map +1 -0
  102. package/gltf-ext-clearcoat-CLH2SVph.js +31 -0
  103. package/gltf-ext-clearcoat-CLH2SVph.js.map +1 -0
  104. package/gltf-ext-dielectric-qHzlnvdl.js +105 -0
  105. package/gltf-ext-dielectric-qHzlnvdl.js.map +1 -0
  106. package/gltf-ext-emissive-strength-nzGZXZVK.js +19 -0
  107. package/gltf-ext-emissive-strength-nzGZXZVK.js.map +1 -0
  108. package/gltf-ext-iridescence-C6bq7jiM.js +26 -0
  109. package/gltf-ext-iridescence-C6bq7jiM.js.map +1 -0
  110. package/gltf-ext-node-visibility-MafA9ot2.js +25 -0
  111. package/gltf-ext-node-visibility-MafA9ot2.js.map +1 -0
  112. package/gltf-ext-orm-CT18G_vQ.js +33 -0
  113. package/gltf-ext-orm-CT18G_vQ.js.map +1 -0
  114. package/gltf-ext-quantization-CpZyLDIz.js +94 -0
  115. package/gltf-ext-quantization-CpZyLDIz.js.map +1 -0
  116. package/gltf-ext-sheen-BgIxUzyZ.js +25 -0
  117. package/gltf-ext-sheen-BgIxUzyZ.js.map +1 -0
  118. package/gltf-ext-spec-gloss-D0LJLBUM.js +24 -0
  119. package/gltf-ext-spec-gloss-D0LJLBUM.js.map +1 -0
  120. package/gltf-ext-unlit-D2ANui0V.js +16 -0
  121. package/gltf-ext-unlit-D2ANui0V.js.map +1 -0
  122. package/gltf-ext-uv-transform-CE_-T1Tr.js +38 -0
  123. package/gltf-ext-uv-transform-CE_-T1Tr.js.map +1 -0
  124. package/gltf-feature-animation-pointer-BjpwOOqo.js +88 -0
  125. package/gltf-feature-animation-pointer-BjpwOOqo.js.map +1 -0
  126. package/gltf-feature-animations-CCizegp8.js +15 -0
  127. package/gltf-feature-animations-CCizegp8.js.map +1 -0
  128. package/gltf-feature-draco-yGSMGTE3.js +124 -0
  129. package/gltf-feature-draco-yGSMGTE3.js.map +1 -0
  130. package/gltf-feature-gpu-instancing-2e_CFQnl.js +151 -0
  131. package/gltf-feature-gpu-instancing-2e_CFQnl.js.map +1 -0
  132. package/gltf-feature-lights-punctual-DDDg4j0U.js +71 -0
  133. package/gltf-feature-lights-punctual-DDDg4j0U.js.map +1 -0
  134. package/gltf-feature-meshopt-Des96YFI.js +84 -0
  135. package/gltf-feature-meshopt-Des96YFI.js.map +1 -0
  136. package/gltf-feature-morph-CKCw6tkX.js +29 -0
  137. package/gltf-feature-morph-CKCw6tkX.js.map +1 -0
  138. package/gltf-feature-skeleton-D8hWLqi2.js +36 -0
  139. package/gltf-feature-skeleton-D8hWLqi2.js.map +1 -0
  140. package/gltf-feature-variants-Ds6v9byg.js +17 -0
  141. package/gltf-feature-variants-Ds6v9byg.js.map +1 -0
  142. package/gltf-feature-xmp-BUfq_IVG.js +15 -0
  143. package/gltf-feature-xmp-BUfq_IVG.js.map +1 -0
  144. package/gltf-glb-parser-D6UZWFuC.js +27 -0
  145. package/gltf-glb-parser-D6UZWFuC.js.map +1 -0
  146. package/gltf-interleave-DGnUlz28.js +241 -0
  147. package/gltf-interleave-DGnUlz28.js.map +1 -0
  148. package/gltf-pbr-builder-ext-BFOxOCnQ.js +85 -0
  149. package/gltf-pbr-builder-ext-BFOxOCnQ.js.map +1 -0
  150. package/gltf-variants-DFbr8EES.js +88 -0
  151. package/gltf-variants-DFbr8EES.js.map +1 -0
  152. package/gradient-block-DL_60sDc.js +50 -0
  153. package/gradient-block-DL_60sDc.js.map +1 -0
  154. package/gs-picking-pipeline-DzfMASL9.js +280 -0
  155. package/gs-picking-pipeline-DzfMASL9.js.map +1 -0
  156. package/height-to-normal-block-DhPHkDFg.js +65 -0
  157. package/height-to-normal-block-DhPHkDFg.js.map +1 -0
  158. package/ibl-fragment-DqQVi8k0.js +91 -0
  159. package/ibl-fragment-DqQVi8k0.js.map +1 -0
  160. package/ibl-skybox-wgsl-DCah0kWV.js +13 -0
  161. package/ibl-skybox-wgsl-DCah0kWV.js.map +1 -0
  162. package/image-processing-block-DwrhhmuF.js +40 -0
  163. package/image-processing-block-DwrhhmuF.js.map +1 -0
  164. package/image-source-BuMJgd9-.js +17 -0
  165. package/image-source-BuMJgd9-.js.map +1 -0
  166. package/index-C8HOR2sB.js +19222 -0
  167. package/index-C8HOR2sB.js.map +1 -0
  168. package/index.d.ts +4611 -0
  169. package/index.js +309 -0
  170. package/index.js.map +1 -0
  171. package/input-block-DgAJBzN_.js +109 -0
  172. package/input-block-DgAJBzN_.js.map +1 -0
  173. package/instances-block-BaSSiz8m.js +12 -0
  174. package/instances-block-BaSSiz8m.js.map +1 -0
  175. package/iridescence-block-B0pRFoOU.js +67 -0
  176. package/iridescence-block-B0pRFoOU.js.map +1 -0
  177. package/iridescence-fragment-Gymp7or5.js +243 -0
  178. package/iridescence-fragment-Gymp7or5.js.map +1 -0
  179. package/length-block-ChOkeiHR.js +11 -0
  180. package/length-block-ChOkeiHR.js.map +1 -0
  181. package/lerp-block-DjI2SfmI.js +18 -0
  182. package/lerp-block-DjI2SfmI.js.map +1 -0
  183. package/light-block-B11ew7FA.js +123 -0
  184. package/light-block-B11ew7FA.js.map +1 -0
  185. package/light-information-VJbW0jbs.js +19 -0
  186. package/light-information-VJbW0jbs.js.map +1 -0
  187. package/loop-block-Bb23EOMb.js +71 -0
  188. package/loop-block-Bb23EOMb.js.map +1 -0
  189. package/manifold-AS8POaOr.js +3022 -0
  190. package/manifold-AS8POaOr.js.map +1 -0
  191. package/manifold-RCa7RkKz.js +5 -0
  192. package/manifold-RCa7RkKz.js.map +1 -0
  193. package/matrix-blocks-acWn_V6g.js +51 -0
  194. package/matrix-blocks-acWn_V6g.js.map +1 -0
  195. package/max-block-CjFgljZ7.js +6 -0
  196. package/max-block-CjFgljZ7.js.map +1 -0
  197. package/mesh-attribute-exists-block-BfK8UiSL.js +44 -0
  198. package/mesh-attribute-exists-block-BfK8UiSL.js.map +1 -0
  199. package/mesh-features-BLENkYVt.js +341 -0
  200. package/mesh-features-BLENkYVt.js.map +1 -0
  201. package/min-block-CHtBngNl.js +6 -0
  202. package/min-block-CHtBngNl.js.map +1 -0
  203. package/mod-block-Ceizv8Y7.js +6 -0
  204. package/mod-block-Ceizv8Y7.js.map +1 -0
  205. package/morph-fragment-DOVo70gP.js +59 -0
  206. package/morph-fragment-DOVo70gP.js.map +1 -0
  207. package/morph-targets-55z342ZB.js +35 -0
  208. package/morph-targets-55z342ZB.js.map +1 -0
  209. package/multilight-wgsl-BGyiIOp3.js +112 -0
  210. package/multilight-wgsl-BGyiIOp3.js.map +1 -0
  211. package/multiply-block-DaXLJ7Ud.js +6 -0
  212. package/multiply-block-DaXLJ7Ud.js.map +1 -0
  213. package/negate-block-9CSLc5pM.js +6 -0
  214. package/negate-block-9CSLc5pM.js.map +1 -0
  215. package/nlerp-block-BNK1adIb.js +21 -0
  216. package/nlerp-block-BNK1adIb.js.map +1 -0
  217. package/node-env-BPZXZzBf.js +39 -0
  218. package/node-env-BPZXZzBf.js.map +1 -0
  219. package/node-registry-DwgC4yth.js +190 -0
  220. package/node-registry-DwgC4yth.js.map +1 -0
  221. package/node-registry-extra-advanced-2DJVt67-.js +45 -0
  222. package/node-registry-extra-advanced-2DJVt67-.js.map +1 -0
  223. package/node-registry-extra-compat-Dhrw8fDQ.js +41 -0
  224. package/node-registry-extra-compat-Dhrw8fDQ.js.map +1 -0
  225. package/node-registry-extra-math-CsAHvIZo.js +49 -0
  226. package/node-registry-extra-math-CsAHvIZo.js.map +1 -0
  227. package/node-registry-extra-procedural-5pLQ3Bhz.js +45 -0
  228. package/node-registry-extra-procedural-5pLQ3Bhz.js.map +1 -0
  229. package/node-renderable-DlLIdBmd.js +269 -0
  230. package/node-renderable-DlLIdBmd.js.map +1 -0
  231. package/node-shadow-DKrcqmNg.js +122 -0
  232. package/node-shadow-DKrcqmNg.js.map +1 -0
  233. package/node-snippet-DUMm9qEO.js +22 -0
  234. package/node-snippet-DUMm9qEO.js.map +1 -0
  235. package/normal-blend-block-BfH_nBoj.js +29 -0
  236. package/normal-blend-block-BfH_nBoj.js.map +1 -0
  237. package/normal-map-fragment-DpsIXrJf.js +38 -0
  238. package/normal-map-fragment-DpsIXrJf.js.map +1 -0
  239. package/normalize-block-F2bLNj9K.js +6 -0
  240. package/normalize-block-F2bLNj9K.js.map +1 -0
  241. package/oneminus-block-BP9x4Dc3.js +6 -0
  242. package/oneminus-block-BP9x4Dc3.js.map +1 -0
  243. package/opposite-block-Cnqmm-lH.js +6 -0
  244. package/opposite-block-Cnqmm-lH.js.map +1 -0
  245. package/package.json +26 -0
  246. package/panner-block-BwMQq-6Y.js +13 -0
  247. package/panner-block-BwMQq-6Y.js.map +1 -0
  248. package/parse-camera-DM3oJJeT.js +23 -0
  249. package/parse-camera-DM3oJJeT.js.map +1 -0
  250. package/pbr-aces-wgsl-HpiQHGN_.js +13 -0
  251. package/pbr-aces-wgsl-HpiQHGN_.js.map +1 -0
  252. package/pbr-metallic-roughness-block-full-6vMm1Jk6.js +763 -0
  253. package/pbr-metallic-roughness-block-full-6vMm1Jk6.js.map +1 -0
  254. package/pbr-metallic-roughness-block-h_KAOZrW.js +104 -0
  255. package/pbr-metallic-roughness-block-h_KAOZrW.js.map +1 -0
  256. package/pbr-mr-helper-core-CIwm-T1G.js +237 -0
  257. package/pbr-mr-helper-core-CIwm-T1G.js.map +1 -0
  258. package/pbr-refraction-DGmMSa2v.js +17 -0
  259. package/pbr-refraction-DGmMSa2v.js.map +1 -0
  260. package/pbr-renderable-BJxUtPBb.js +961 -0
  261. package/pbr-renderable-BJxUtPBb.js.map +1 -0
  262. package/pbr-shadow-fragment-LO9SlbJj.js +14 -0
  263. package/pbr-shadow-fragment-LO9SlbJj.js.map +1 -0
  264. package/pbr-template-ext-8q7BcTDf.js +88 -0
  265. package/pbr-template-ext-8q7BcTDf.js.map +1 -0
  266. package/pbr-tracking-B3alzn91.js +31 -0
  267. package/pbr-tracking-B3alzn91.js.map +1 -0
  268. package/pbr-transmission-ext-BxW4CEGu.js +581 -0
  269. package/pbr-transmission-ext-BxW4CEGu.js.map +1 -0
  270. package/perturb-normal-0Q8EM9ig.js +39 -0
  271. package/perturb-normal-0Q8EM9ig.js.map +1 -0
  272. package/posterize-block-DfdKsbEf.js +28 -0
  273. package/posterize-block-DfdKsbEf.js.map +1 -0
  274. package/pow-block-DI5ICzhc.js +13 -0
  275. package/pow-block-DI5ICzhc.js.map +1 -0
  276. package/random-number-block-2OyRYljF.js +15 -0
  277. package/random-number-block-2OyRYljF.js.map +1 -0
  278. package/reciprocal-block-Ck3CW-j-.js +14 -0
  279. package/reciprocal-block-Ck3CW-j-.js.map +1 -0
  280. package/reflect-block-CizpzrX4.js +12 -0
  281. package/reflect-block-CizpzrX4.js.map +1 -0
  282. package/reflectance-fragment-BCrgPmrt.js +143 -0
  283. package/reflectance-fragment-BCrgPmrt.js.map +1 -0
  284. package/reflection-block-DqcwyYqr.js +12 -0
  285. package/reflection-block-DqcwyYqr.js.map +1 -0
  286. package/reflection-texture-base-block-1xmJ0HDj.js +10 -0
  287. package/reflection-texture-base-block-1xmJ0HDj.js.map +1 -0
  288. package/reflection-texture-block-C3QtzoV8.js +60 -0
  289. package/reflection-texture-block-C3QtzoV8.js.map +1 -0
  290. package/refract-block-HHiAk-7U.js +13 -0
  291. package/refract-block-HHiAk-7U.js.map +1 -0
  292. package/refraction-block-U8y6XiXs.js +11 -0
  293. package/refraction-block-U8y6XiXs.js.map +1 -0
  294. package/refraction-dispersion-wgsl-DdQCyyO1.js +16 -0
  295. package/refraction-dispersion-wgsl-DdQCyyO1.js.map +1 -0
  296. package/remap-block-DxK1W1vp.js +27 -0
  297. package/remap-block-DxK1W1vp.js.map +1 -0
  298. package/replace-color-block-1m--hiru.js +17 -0
  299. package/replace-color-block-1m--hiru.js.map +1 -0
  300. package/rgbd-decode-DCvzUYeI.js +110 -0
  301. package/rgbd-decode-DCvzUYeI.js.map +1 -0
  302. package/rotate2d-block-nEe1N2MJ.js +15 -0
  303. package/rotate2d-block-nEe1N2MJ.js.map +1 -0
  304. package/scale-block-C5Z8159G.js +13 -0
  305. package/scale-block-C5Z8159G.js.map +1 -0
  306. package/scene-material-swap-C2ykv55W.js +34 -0
  307. package/scene-material-swap-C2ykv55W.js.map +1 -0
  308. package/screen-size-block-BVNnOvE8.js +21 -0
  309. package/screen-size-block-BVNnOvE8.js.map +1 -0
  310. package/screen-space-block-CwaxdfSe.js +28 -0
  311. package/screen-space-block-CwaxdfSe.js.map +1 -0
  312. package/shader-renderable-D-6796KR.js +531 -0
  313. package/shader-renderable-D-6796KR.js.map +1 -0
  314. package/shadow-fragment-core-DHN2G6FI.js +110 -0
  315. package/shadow-fragment-core-DHN2G6FI.js.map +1 -0
  316. package/shadow-map-CQNQC-Fw.js +13 -0
  317. package/shadow-map-CQNQC-Fw.js.map +1 -0
  318. package/sheen-block-BugfJqK3.js +12 -0
  319. package/sheen-block-BugfJqK3.js.map +1 -0
  320. package/sheen-fragment-Dze2f7XJ.js +215 -0
  321. package/sheen-fragment-Dze2f7XJ.js.map +1 -0
  322. package/simplex-perlin-3d-block-CcMtofzV.js +58 -0
  323. package/simplex-perlin-3d-block-CcMtofzV.js.map +1 -0
  324. package/singlelight-directional-wgsl-CmUDZxwz.js +39 -0
  325. package/singlelight-directional-wgsl-CmUDZxwz.js.map +1 -0
  326. package/singlelight-hemispheric-wgsl-t-83IP_s.js +40 -0
  327. package/singlelight-hemispheric-wgsl-t-83IP_s.js.map +1 -0
  328. package/singlelight-point-wgsl-CLzULIYV.js +45 -0
  329. package/singlelight-point-wgsl-CLzULIYV.js.map +1 -0
  330. package/singlelight-spot-wgsl-DEEUrfVM.js +47 -0
  331. package/singlelight-spot-wgsl-DEEUrfVM.js.map +1 -0
  332. package/skeleton-fragment-B_XlFbtx.js +71 -0
  333. package/skeleton-fragment-B_XlFbtx.js.map +1 -0
  334. package/skybox-renderable-DDwzu-PT.js +92 -0
  335. package/skybox-renderable-DDwzu-PT.js.map +1 -0
  336. package/skybox.vertex-DJgi072W.js +5 -0
  337. package/skybox.vertex-DJgi072W.js.map +1 -0
  338. package/smoothstep-block-Di4t37x-.js +15 -0
  339. package/smoothstep-block-Di4t37x-.js.map +1 -0
  340. package/splat-ply-compressed-BahdBG1r.js +394 -0
  341. package/splat-ply-compressed-BahdBG1r.js.map +1 -0
  342. package/standard-renderable-GjxL9xSf.js +636 -0
  343. package/standard-renderable-GjxL9xSf.js.map +1 -0
  344. package/std-ambient-fragment-BoUsD06w.js +37 -0
  345. package/std-ambient-fragment-BoUsD06w.js.map +1 -0
  346. package/std-cube-reflection-fragment-ulqc3bsP.js +31 -0
  347. package/std-cube-reflection-fragment-ulqc3bsP.js.map +1 -0
  348. package/std-emissive-fragment-DNGj1HdQ.js +40 -0
  349. package/std-emissive-fragment-DNGj1HdQ.js.map +1 -0
  350. package/std-lightmap-fragment-Bqj89aIe.js +37 -0
  351. package/std-lightmap-fragment-Bqj89aIe.js.map +1 -0
  352. package/std-opacity-fragment-KuPh5N2Z.js +37 -0
  353. package/std-opacity-fragment-KuPh5N2Z.js.map +1 -0
  354. package/std-reflection-fragment-BA5Ghn_M.js +57 -0
  355. package/std-reflection-fragment-BA5Ghn_M.js.map +1 -0
  356. package/std-shadow-fragment-FNQfrJuC.js +8 -0
  357. package/std-shadow-fragment-FNQfrJuC.js.map +1 -0
  358. package/std-specular-fragment-CE-6scqd.js +37 -0
  359. package/std-specular-fragment-CE-6scqd.js.map +1 -0
  360. package/std-tracking-CNKZ-hJN.js +15 -0
  361. package/std-tracking-CNKZ-hJN.js.map +1 -0
  362. package/step-block-BkywzTYm.js +13 -0
  363. package/step-block-BkywzTYm.js.map +1 -0
  364. package/storage-read-block-BdzhJfln.js +25 -0
  365. package/storage-read-block-BdzhJfln.js.map +1 -0
  366. package/storage-write-block-DjLKZ0Ro.js +11 -0
  367. package/storage-write-block-DjLKZ0Ro.js.map +1 -0
  368. package/subsurface-block-CBhxT9ui.js +12 -0
  369. package/subsurface-block-CBhxT9ui.js.map +1 -0
  370. package/subsurface-fragment-liM3y2-P.js +158 -0
  371. package/subsurface-fragment-liM3y2-P.js.map +1 -0
  372. package/subtract-block-NPfKvzQP.js +6 -0
  373. package/subtract-block-NPfKvzQP.js.map +1 -0
  374. package/swapchain-overlay-DcCSFDp7.js +35 -0
  375. package/swapchain-overlay-DcCSFDp7.js.map +1 -0
  376. package/tbn-block-ByOI6Y43.js +43 -0
  377. package/tbn-block-ByOI6Y43.js.map +1 -0
  378. package/teleport-in-block-BMa17cqq.js +10 -0
  379. package/teleport-in-block-BMa17cqq.js.map +1 -0
  380. package/teleport-out-block-5AkB25H6.js +19 -0
  381. package/teleport-out-block-5AkB25H6.js.map +1 -0
  382. package/texture-block-rr21KIL_.js +70 -0
  383. package/texture-block-rr21KIL_.js.map +1 -0
  384. package/thin-instance-fragment-hsv-RyDs.js +69 -0
  385. package/thin-instance-fragment-hsv-RyDs.js.map +1 -0
  386. package/thin-instance-gpu-C9Gv_Z1w.js +62 -0
  387. package/thin-instance-gpu-C9Gv_Z1w.js.map +1 -0
  388. package/tracking-primitives-wgdBY85t.js +82 -0
  389. package/tracking-primitives-wgdBY85t.js.map +1 -0
  390. package/transform-block-DbRph9JI.js +32 -0
  391. package/transform-block-DbRph9JI.js.map +1 -0
  392. package/trigonometry-block-BYQcTHiD.js +36 -0
  393. package/trigonometry-block-BYQcTHiD.js.map +1 -0
  394. package/triplanar-block-BZHkD9hX.js +148 -0
  395. package/triplanar-block-BZHkD9hX.js.map +1 -0
  396. package/twirl-block-78WtdiBd.js +39 -0
  397. package/twirl-block-78WtdiBd.js.map +1 -0
  398. package/unlit-fragment-BIlhJpz6.js +43 -0
  399. package/unlit-fragment-BIlhJpz6.js.map +1 -0
  400. package/uv-transform-fragment-hYujGpZg.js +47 -0
  401. package/uv-transform-fragment-hYujGpZg.js.map +1 -0
  402. package/vector-merger-CrW-ONB0.js +43 -0
  403. package/vector-merger-CrW-ONB0.js.map +1 -0
  404. package/vector-splitter-BoJuHrAU.js +34 -0
  405. package/vector-splitter-BoJuHrAU.js.map +1 -0
  406. package/vertex-output-Cvft64y0.js +14 -0
  407. package/vertex-output-Cvft64y0.js.map +1 -0
  408. package/view-direction-CWVucfnT.js +12 -0
  409. package/view-direction-CWVucfnT.js.map +1 -0
  410. package/voronoi-noise-block-iNQxa_Ls.js +43 -0
  411. package/voronoi-noise-block-iNQxa_Ls.js.map +1 -0
  412. package/wave-block-CY_mk1ec.js +41 -0
  413. package/wave-block-CY_mk1ec.js.map +1 -0
  414. package/wgsl-helpers-DyzNzCeE.js +48 -0
  415. package/wgsl-helpers-DyzNzCeE.js.map +1 -0
  416. package/worley-noise-3d-block-CyR2-k4s.js +58 -0
  417. package/worley-noise-3d-block-CyR2-k4s.js.map +1 -0
@@ -0,0 +1,500 @@
1
+ import { G as disposeGaussianSplattingMesh, H as applyGsFragments, D as targetSignatureKey, F as getSceneBindGroupLayout, J as getRenderTargetSize, K as getViewMatrix, L as getProjectionMatrix, O as getCameraPosition } from "./index-C8HOR2sB.js";
2
+ const SH_TEXTURE_COUNT = [0, 1, 2, 3, 5];
3
+ let _cache = null;
4
+ function buildShShaderSource(shDegree) {
5
+ const shVectorCount = (shDegree + 1) * (shDegree + 1) - 1;
6
+ const shCoefficientCount = shVectorCount * 3;
7
+ const textureCount = Math.ceil(shCoefficientCount / 16);
8
+ let textureBindings = "";
9
+ for (let i = 0; i < textureCount; i++) {
10
+ textureBindings += `@group(1) @binding(${6 + i}) var shTexture${i}: texture_2d<u32>;
11
+ `;
12
+ }
13
+ let textureLoads = "";
14
+ for (let i = 0; i < textureCount; i++) {
15
+ textureLoads += ` let sh${i}_u32 = textureLoad(shTexture${i}, splatUVi32, 0);
16
+ `;
17
+ }
18
+ let shUnpack = ` var sh: array<vec3<f32>, ${shVectorCount + 1}>;
19
+ sh[0] = vec3<f32>(0.0);
20
+ `;
21
+ const byteRef = (j) => {
22
+ const tex = j / 16 | 0;
23
+ const u32Idx = j % 16 / 4 | 0;
24
+ const byteIdx = j % 4;
25
+ const u32Field = ["x", "y", "z", "w"][u32Idx];
26
+ const byteField = ["x", "y", "z", "w"][byteIdx];
27
+ return `decompose(sh${tex}_u32.${u32Field}).${byteField}`;
28
+ };
29
+ for (let k = 0; k < shVectorCount; k++) {
30
+ const j = k * 3;
31
+ shUnpack += ` sh[${k + 1}] = vec3<f32>(${byteRef(j)}, ${byteRef(j + 1)}, ${byteRef(j + 2)});
32
+ `;
33
+ }
34
+ let shPoly = " result = sh[0];\n";
35
+ if (shDegree >= 1) {
36
+ shPoly += ` result += -SH_C1 * y * sh[1] + SH_C1 * z * sh[2] - SH_C1 * x * sh[3];
37
+ `;
38
+ }
39
+ if (shDegree >= 2) {
40
+ shPoly += ` result +=
41
+ SH_C2[0] * xy * sh[4] +
42
+ SH_C2[1] * yz * sh[5] +
43
+ SH_C2[2] * (2.0 * zz - xx - yy) * sh[6] +
44
+ SH_C2[3] * xz * sh[7] +
45
+ SH_C2[4] * (xx - yy) * sh[8];
46
+ `;
47
+ }
48
+ if (shDegree >= 3) {
49
+ shPoly += ` result +=
50
+ SH_C3[0] * y * (3.0 * xx - yy) * sh[9] +
51
+ SH_C3[1] * xy * z * sh[10] +
52
+ SH_C3[2] * y * (4.0 * zz - xx - yy) * sh[11] +
53
+ SH_C3[3] * z * (2.0 * zz - 3.0 * xx - 3.0 * yy) * sh[12] +
54
+ SH_C3[4] * x * (4.0 * zz - xx - yy) * sh[13] +
55
+ SH_C3[5] * z * (xx - yy) * sh[14] +
56
+ SH_C3[6] * x * (xx - 3.0 * yy) * sh[15];
57
+ `;
58
+ }
59
+ if (shDegree >= 4) {
60
+ shPoly += ` result +=
61
+ SH_C4[0] * x * y * (xx - yy) * sh[16] +
62
+ SH_C4[1] * y * z * (3.0 * xx - yy) * sh[17] +
63
+ SH_C4[2] * x * y * (7.0 * zz - 1.0) * sh[18] +
64
+ SH_C4[3] * y * z * (7.0 * zz - 3.0) * sh[19] +
65
+ SH_C4[4] * (zz * (35.0 * zz - 30.0) + 3.0) * sh[20] +
66
+ SH_C4[5] * x * z * (7.0 * zz - 3.0) * sh[21] +
67
+ SH_C4[6] * (xx - yy) * (7.0 * zz - 1.0) * sh[22] +
68
+ SH_C4[7] * x * z * (xx - 3.0 * yy) * sh[23] +
69
+ SH_C4[8] * (xx * (xx - 3.0 * yy) - yy * (3.0 * xx - yy)) * sh[24];
70
+ `;
71
+ }
72
+ let constantsBlock = `const SH_C1: f32 = 0.48860251;
73
+ `;
74
+ if (shDegree >= 2) {
75
+ constantsBlock += `const SH_C2: array<f32, 5> = array<f32, 5>(1.092548430, -1.09254843, 0.315391565, -1.09254843, 0.546274215);
76
+ `;
77
+ }
78
+ if (shDegree >= 3) {
79
+ constantsBlock += `const SH_C3: array<f32, 7> = array<f32, 7>(-0.59004358, 2.890611442, -0.45704579, 0.373176332, -0.45704579, 1.445305721, -0.59004358);
80
+ `;
81
+ }
82
+ if (shDegree >= 4) {
83
+ constantsBlock += `const SH_C4: array<f32, 9> = array<f32, 9>(2.5033429418, -1.7701307698, 0.9461746958, -0.6690465436, 0.1057855469, -0.6690465436, 0.4730873479, -1.7701307698, 0.6258357354);
84
+ `;
85
+ }
86
+ return `// Gaussian Splatting — vertex + fragment WGSL (SH degree ${shDegree}).
87
+ // Generated by buildShShaderSource. Mirrors BJS gaussianSplatting.vertex.fx +
88
+ // gaussianSplatting.fx (SH_DEGREE = ${shDegree}, no compound parts).
89
+ struct U {
90
+ world: mat4x4<f32>,
91
+ view: mat4x4<f32>,
92
+ projection: mat4x4<f32>,
93
+ viewport: vec2<f32>,
94
+ focal: vec2<f32>,
95
+ dataSize: vec2<f32>,
96
+ alpha: f32,
97
+ _pad0: f32,
98
+ eyePosition: vec3<f32>,
99
+ _pad1: f32,
100
+ };
101
+ @group(1) @binding(0) var<uniform> u: U;
102
+ @group(1) @binding(1) var samp: sampler;
103
+ @group(1) @binding(2) var centersTex: texture_2d<f32>;
104
+ @group(1) @binding(3) var covATex: texture_2d<f32>;
105
+ @group(1) @binding(4) var covBTex: texture_2d<f32>;
106
+ @group(1) @binding(5) var colorsTex: texture_2d<f32>;
107
+ ${textureBindings}
108
+
109
+ struct VOut {
110
+ @builtin(position) pos: vec4<f32>,
111
+ @location(0) vColor: vec4<f32>,
112
+ @location(1) vPos: vec2<f32>,
113
+ };
114
+
115
+ ${constantsBlock}
116
+
117
+ fn dataUv(idx: f32) -> vec2<f32> {
118
+ let y = floor(idx / u.dataSize.x);
119
+ let x = idx - y * u.dataSize.x;
120
+ return vec2<f32>((x + 0.5) / u.dataSize.x, (y + 0.5) / u.dataSize.y);
121
+ }
122
+
123
+ fn dataUvI(idx: f32) -> vec2<i32> {
124
+ let y = floor(idx / u.dataSize.x);
125
+ let x = idx - y * u.dataSize.x;
126
+ return vec2<i32>(i32(x), i32(y));
127
+ }
128
+
129
+ // Unpack a u32 of 4 packed bytes into (b0 b1 b2 b3) * 2/255 - 1.
130
+ fn decompose(value: u32) -> vec4<f32> {
131
+ let v = vec4<f32>(
132
+ f32((value >> 0u) & 255u),
133
+ f32((value >> 8u) & 255u),
134
+ f32((value >> 16u) & 255u),
135
+ f32((value >> 24u) & 255u));
136
+ return v * vec4<f32>(2.0 / 255.0) - vec4<f32>(1.0);
137
+ }
138
+
139
+ fn inverseMat3(m: mat3x3<f32>) -> mat3x3<f32> {
140
+ let a00 = m[0][0]; let a01 = m[0][1]; let a02 = m[0][2];
141
+ let a10 = m[1][0]; let a11 = m[1][1]; let a12 = m[1][2];
142
+ let a20 = m[2][0]; let a21 = m[2][1]; let a22 = m[2][2];
143
+ let b01 = a22 * a11 - a12 * a21;
144
+ let b11 = -a22 * a10 + a12 * a20;
145
+ let b21 = a21 * a10 - a11 * a20;
146
+ let det = a00 * b01 + a01 * b11 + a02 * b21;
147
+ return mat3x3<f32>(
148
+ vec3<f32>(b01 / det, (-a22 * a01 + a02 * a21) / det, (a12 * a01 - a02 * a11) / det),
149
+ vec3<f32>(b11 / det, (a22 * a00 - a02 * a20) / det, (-a12 * a00 + a02 * a10) / det),
150
+ vec3<f32>(b21 / det, (-a21 * a00 + a01 * a20) / det, (a11 * a00 - a01 * a10) / det));
151
+ }
152
+
153
+ fn computeSH(dir: vec3<f32>, splatUVi32: vec2<i32>) -> vec3<f32> {
154
+ ${textureLoads}${shUnpack} let x = dir.x;
155
+ let y = dir.y;
156
+ let z = dir.z;
157
+ let xx = x * x; let yy = y * y; let zz = z * z;
158
+ let xy = x * y; let yz = y * z; let xz = x * z;
159
+ var result: vec3<f32>;
160
+ ${shPoly} return result;
161
+ }
162
+
163
+ @vertex
164
+ fn vs(@location(0) corner: vec2<f32>, @location(1) splatIndex: f32) -> VOut {
165
+ var out: VOut;
166
+ let uv = dataUv(splatIndex);
167
+ let splatUVi32 = dataUvI(splatIndex);
168
+ let center = textureSampleLevel(centersTex, samp, uv, 0.0).xyz;
169
+ let color = textureSampleLevel(colorsTex, samp, uv, 0.0);
170
+ let covA = textureSampleLevel(covATex, samp, uv, 0.0).xyz;
171
+ let covB = textureSampleLevel(covBTex, samp, uv, 0.0).xyz;
172
+
173
+ let worldPos = u.world * vec4<f32>(center, 1.0);
174
+ let modelView = u.view * u.world;
175
+ let camspace = u.view * worldPos;
176
+ let pos2d = u.projection * camspace;
177
+
178
+ let bounds = 1.2 * pos2d.w;
179
+ if (pos2d.z < 0.0
180
+ || pos2d.x < -bounds || pos2d.x > bounds
181
+ || pos2d.y < -bounds || pos2d.y > bounds) {
182
+ out.pos = vec4<f32>(0.0, 0.0, 2.0, 1.0);
183
+ out.vColor = vec4<f32>(0.0);
184
+ out.vPos = vec2<f32>(0.0);
185
+ return out;
186
+ }
187
+
188
+ // ── View-dependent SH evaluation ───────────────────────────────────
189
+ let worldRot = mat3x3<f32>(u.world[0].xyz, u.world[1].xyz, u.world[2].xyz);
190
+ let normWorldRot = inverseMat3(worldRot);
191
+ var dir = normalize(normWorldRot * (worldPos.xyz - u.eyePosition));
192
+ // Lite-side Y-flip: compensates for our data-path Y pre-flip vs BJS's
193
+ // mesh.scaling.y *= -1 (see file header for derivation).
194
+ dir.y = -dir.y;
195
+ let shColor = computeSH(dir, splatUVi32);
196
+
197
+ let Vrk = mat3x3<f32>(
198
+ vec3<f32>(covA.x, covA.y, covA.z),
199
+ vec3<f32>(covA.y, covB.x, covB.y),
200
+ vec3<f32>(covA.z, covB.y, covB.z));
201
+
202
+ let invZ = 1.0 / camspace.z;
203
+ let invZ2 = invZ * invZ;
204
+ let J = mat3x3<f32>(
205
+ vec3<f32>(u.focal.x * invZ, 0.0, -u.focal.x * camspace.x * invZ2),
206
+ vec3<f32>(0.0, u.focal.y * invZ, -u.focal.y * camspace.y * invZ2),
207
+ vec3<f32>(0.0, 0.0, 0.0));
208
+
209
+ let mv3 = mat3x3<f32>(modelView[0].xyz, modelView[1].xyz, modelView[2].xyz);
210
+ let T = transpose(mv3) * J;
211
+ var cov2d = transpose(T) * Vrk * T;
212
+
213
+ let kernelSize: f32 = 0.3;
214
+ cov2d[0][0] += kernelSize;
215
+ cov2d[1][1] += kernelSize;
216
+
217
+ let mid = (cov2d[0][0] + cov2d[1][1]) * 0.5;
218
+ let dxy = (cov2d[0][0] - cov2d[1][1]) * 0.5;
219
+ let radius = length(vec2<f32>(dxy, cov2d[0][1]));
220
+ let epsilon: f32 = 0.0001;
221
+ let lambda1 = mid + radius + epsilon;
222
+ let lambda2 = mid - radius + epsilon;
223
+ if (lambda2 < 0.0) {
224
+ out.pos = vec4<f32>(0.0, 0.0, 2.0, 1.0);
225
+ out.vColor = vec4<f32>(0.0);
226
+ out.vPos = vec2<f32>(0.0);
227
+ return out;
228
+ }
229
+
230
+ let diag = normalize(vec2<f32>(cov2d[0][1], lambda1 - cov2d[0][0]));
231
+ let majorAxis = min(sqrt(2.0 * lambda1), 1024.0) * diag;
232
+ let minorAxis = min(sqrt(2.0 * lambda2), 1024.0) * vec2<f32>(diag.y, -diag.x);
233
+
234
+ let vCenter = pos2d.xy;
235
+ out.pos = vec4<f32>(
236
+ vCenter + (corner.x * majorAxis + corner.y * minorAxis) * pos2d.w / u.viewport,
237
+ pos2d.z, pos2d.w);
238
+ out.vColor = vec4<f32>(color.rgb + shColor, color.a * u.alpha);
239
+ out.vPos = corner;
240
+ return out;
241
+ }
242
+
243
+ /*GS_FRAGMENT_DEFINITIONS*/
244
+ @fragment
245
+ fn fs(in: VOut) -> @location(0) vec4<f32> {
246
+ /*GS_FRAGMENT_MAIN_BEGIN*/
247
+ let A = -dot(in.vPos, in.vPos);
248
+ if (A < -4.0) { discard; }
249
+ let B = exp(A) * in.vColor.a;
250
+ var finalColor = vec4<f32>(in.vColor.rgb, B);
251
+ /*GS_FRAGMENT_BEFORE_FRAGCOLOR*/
252
+ /*GS_FRAGMENT_MAIN_END*/
253
+ return finalColor;
254
+ }
255
+ `;
256
+ }
257
+ function getOrCreateShPipeline(engine, sig, shDegree, fragments) {
258
+ const device = engine._device;
259
+ if (!_cache || _cache.device !== device) {
260
+ _cache = { device, modules: /* @__PURE__ */ new Map(), entries: /* @__PURE__ */ new Map() };
261
+ }
262
+ const fragKey = fragments && fragments.length > 0 ? "|" + fragments.map((f) => f.id).join(",") : "";
263
+ let module = _cache.modules.get(shDegree + fragKey);
264
+ if (!module) {
265
+ module = device.createShaderModule({
266
+ code: fragments && fragments.length > 0 ? applyGsFragments(buildShShaderSource(shDegree), fragments) : buildShShaderSource(shDegree)
267
+ });
268
+ _cache.modules.set(shDegree + fragKey, module);
269
+ }
270
+ const key = `${targetSignatureKey(sig)}|sh${shDegree}${fragKey}`;
271
+ let entry = _cache.entries.get(key);
272
+ if (entry) {
273
+ return entry;
274
+ }
275
+ const shTextureCount = SH_TEXTURE_COUNT[shDegree];
276
+ const layoutEntries = [
277
+ { binding: 0, visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT, buffer: { type: "uniform" } },
278
+ { binding: 1, visibility: GPUShaderStage.VERTEX, sampler: { type: "non-filtering" } },
279
+ { binding: 2, visibility: GPUShaderStage.VERTEX, texture: { sampleType: "unfilterable-float" } },
280
+ { binding: 3, visibility: GPUShaderStage.VERTEX, texture: { sampleType: "unfilterable-float" } },
281
+ { binding: 4, visibility: GPUShaderStage.VERTEX, texture: { sampleType: "unfilterable-float" } },
282
+ { binding: 5, visibility: GPUShaderStage.VERTEX, texture: { sampleType: "unfilterable-float" } }
283
+ ];
284
+ for (let i = 0; i < shTextureCount; i++) {
285
+ layoutEntries.push({ binding: 6 + i, visibility: GPUShaderStage.VERTEX, texture: { sampleType: "uint" } });
286
+ }
287
+ const meshBindGroupLayout = device.createBindGroupLayout({ entries: layoutEntries });
288
+ const pipeline = device.createRenderPipeline({
289
+ layout: device.createPipelineLayout({ bindGroupLayouts: [getSceneBindGroupLayout(engine), meshBindGroupLayout] }),
290
+ vertex: {
291
+ module,
292
+ entryPoint: "vs",
293
+ buffers: [
294
+ { arrayStride: 8, stepMode: "vertex", attributes: [{ shaderLocation: 0, offset: 0, format: "float32x2" }] },
295
+ { arrayStride: 4, stepMode: "instance", attributes: [{ shaderLocation: 1, offset: 0, format: "float32" }] }
296
+ ]
297
+ },
298
+ fragment: {
299
+ module,
300
+ entryPoint: "fs",
301
+ targets: [
302
+ {
303
+ format: sig._colorFormat,
304
+ blend: {
305
+ color: { srcFactor: "src-alpha", dstFactor: "one-minus-src-alpha", operation: "add" },
306
+ alpha: { srcFactor: "one", dstFactor: "one-minus-src-alpha", operation: "add" }
307
+ },
308
+ writeMask: GPUColorWrite.ALL
309
+ }
310
+ ]
311
+ },
312
+ primitive: { topology: "triangle-list", cullMode: "none" },
313
+ depthStencil: {
314
+ format: sig._depthStencilFormat ?? "depth24plus-stencil8",
315
+ depthCompare: sig._depthCompare ?? "greater-equal",
316
+ depthWriteEnabled: false
317
+ },
318
+ multisample: { count: sig._sampleCount }
319
+ });
320
+ entry = { pipeline, meshBindGroupLayout, shTextureCount };
321
+ _cache.entries.set(key, entry);
322
+ return entry;
323
+ }
324
+ function buildGaussianSplattingRenderableSH(scene, mesh, fragments) {
325
+ const engine = scene.engine;
326
+ const device = engine._device;
327
+ const UBO_BYTES = 16 * 4 * 3 + 8 * 4 + 4 * 4;
328
+ const ubo = device.createBuffer({
329
+ size: UBO_BYTES,
330
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
331
+ });
332
+ const cpu = new Float32Array(UBO_BYTES / 4);
333
+ cpu[48 + 4] = mesh.textureWidth;
334
+ cpu[48 + 5] = mesh.textureHeight;
335
+ cpu[48 + 6] = 1;
336
+ cpu[48 + 7] = 0;
337
+ const bindGroups = /* @__PURE__ */ new Map();
338
+ const getBindGroup = (entry) => {
339
+ let bg = bindGroups.get(entry.pipeline);
340
+ if (bg) {
341
+ return bg;
342
+ }
343
+ const shViews = mesh._gs._shViews ?? [];
344
+ const entries = [
345
+ { binding: 0, resource: { buffer: ubo } },
346
+ { binding: 1, resource: mesh._gs._sampler },
347
+ { binding: 2, resource: mesh._gs._centersView },
348
+ { binding: 3, resource: mesh._gs._covAView },
349
+ { binding: 4, resource: mesh._gs._covBView },
350
+ { binding: 5, resource: mesh._gs._colorsView }
351
+ ];
352
+ for (let i = 0; i < entry.shTextureCount; i++) {
353
+ entries.push({ binding: 6 + i, resource: shViews[i] });
354
+ }
355
+ bg = device.createBindGroup({ layout: entry.meshBindGroupLayout, entries });
356
+ bindGroups.set(entry.pipeline, bg);
357
+ return bg;
358
+ };
359
+ const SORT_EPS = 1e-4;
360
+ const update = () => {
361
+ const cam = scene.camera;
362
+ if (!cam) {
363
+ return;
364
+ }
365
+ const size = getRenderTargetSize(engine);
366
+ const aspect = size.width / size.height;
367
+ const view = getViewMatrix(cam);
368
+ const proj = getProjectionMatrix(cam, aspect);
369
+ const world = mesh.worldMatrix;
370
+ const camPos = getCameraPosition(cam);
371
+ cpu.set(world, 0);
372
+ cpu.set(view, 16);
373
+ cpu.set(proj, 32);
374
+ cpu[48] = size.width;
375
+ cpu[48 + 1] = size.height;
376
+ cpu[48 + 2] = size.width * 0.5 * proj[0];
377
+ cpu[48 + 3] = size.height * 0.5 * proj[5];
378
+ cpu[56] = camPos.x;
379
+ cpu[57] = camPos.y;
380
+ cpu[58] = camPos.z;
381
+ cpu[59] = 0;
382
+ device.queue.writeBuffer(ubo, 0, cpu.buffer, 0, UBO_BYTES);
383
+ if (!mesh._canPostToWorker) {
384
+ return;
385
+ }
386
+ const cf0 = view[2], cf1 = view[6], cf2 = view[10];
387
+ let dirty = false;
388
+ const lastW = mesh._sortWorldMatrix;
389
+ for (let i = 0; i < 16; i++) {
390
+ if (Math.abs(lastW[i] - world[i]) > SORT_EPS) {
391
+ dirty = true;
392
+ break;
393
+ }
394
+ }
395
+ if (!dirty) {
396
+ const lastCf = mesh._sortCameraForward;
397
+ if (Math.abs(lastCf[0] - cf0) > SORT_EPS || Math.abs(lastCf[1] - cf1) > SORT_EPS || Math.abs(lastCf[2] - cf2) > SORT_EPS) {
398
+ dirty = true;
399
+ }
400
+ }
401
+ if (!dirty) {
402
+ const lastCp = mesh._sortCameraPosition;
403
+ if (Math.abs(lastCp[0] - camPos.x) > SORT_EPS || Math.abs(lastCp[1] - camPos.y) > SORT_EPS || Math.abs(lastCp[2] - camPos.z) > SORT_EPS) {
404
+ dirty = true;
405
+ }
406
+ }
407
+ if (!dirty) {
408
+ return;
409
+ }
410
+ mesh._sortWorldMatrix.set(world);
411
+ mesh._sortCameraForward[0] = cf0;
412
+ mesh._sortCameraForward[1] = cf1;
413
+ mesh._sortCameraForward[2] = cf2;
414
+ mesh._sortCameraPosition[0] = camPos.x;
415
+ mesh._sortCameraPosition[1] = camPos.y;
416
+ mesh._sortCameraPosition[2] = camPos.z;
417
+ mesh._canPostToWorker = false;
418
+ mesh._worker.postMessage(
419
+ {
420
+ m: new Float32Array(world),
421
+ f: new Float32Array([cf0, cf1, cf2]),
422
+ c: new Float32Array([camPos.x, camPos.y, camPos.z]),
423
+ d: mesh._depthMix
424
+ },
425
+ [mesh._depthMix.buffer]
426
+ );
427
+ };
428
+ const r = {
429
+ order: 200,
430
+ isTransparent: true,
431
+ bind(eng, sig) {
432
+ const entry = getOrCreateShPipeline(eng, sig, mesh.shDegree, fragments);
433
+ const bindGroup = getBindGroup(entry);
434
+ return {
435
+ renderable: r,
436
+ pipeline: entry.pipeline,
437
+ update,
438
+ draw(pass) {
439
+ pass.setBindGroup(1, bindGroup);
440
+ pass.setVertexBuffer(0, mesh._gs._quadBuffer);
441
+ pass.setVertexBuffer(1, mesh._gs._splatIndexBuffer);
442
+ pass.setIndexBuffer(mesh._gs._indexBuffer, "uint16");
443
+ pass.drawIndexed(6, mesh.vertexCount);
444
+ return 1;
445
+ }
446
+ };
447
+ }
448
+ };
449
+ return r;
450
+ }
451
+ function attachGaussianSplattingMeshSH(scene, mesh, shFlat, fragments) {
452
+ const engine = scene.engine;
453
+ const device = engine._device;
454
+ const shDegree = mesh.shDegree;
455
+ const shVectorCount = (shDegree + 1) * (shDegree + 1) - 1;
456
+ const shCoefficientCount = shVectorCount * 3;
457
+ const textureCount = Math.ceil(shCoefficientCount / 16);
458
+ const width = mesh.textureWidth;
459
+ const height = mesh.textureHeight;
460
+ const textures = [];
461
+ const views = [];
462
+ const vertexCount = mesh.vertexCount;
463
+ for (let t = 0; t < textureCount; t++) {
464
+ const dst = new Uint8Array(width * height * 16);
465
+ const tBase = t * 16;
466
+ const bytesThisTex = Math.min(16, shCoefficientCount - tBase);
467
+ for (let i = 0; i < vertexCount; i++) {
468
+ const srcOff = i * shCoefficientCount + tBase;
469
+ const dstOff = i * 16;
470
+ for (let b = 0; b < bytesThisTex; b++) {
471
+ dst[dstOff + b] = shFlat[srcOff + b];
472
+ }
473
+ }
474
+ const tex = device.createTexture({
475
+ size: [width, height],
476
+ format: "rgba32uint",
477
+ usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST
478
+ });
479
+ device.queue.writeTexture({ texture: tex }, dst.buffer, { bytesPerRow: width * 16 }, { width, height });
480
+ textures.push(tex);
481
+ views.push(tex.createView());
482
+ }
483
+ mesh._gs._shTextures = textures;
484
+ mesh._gs._shViews = views;
485
+ const ctx = scene;
486
+ ctx._renderables.push(buildGaussianSplattingRenderableSH(scene, mesh, fragments));
487
+ ctx._gsMeshes.push(mesh);
488
+ ctx._disposables.push(() => {
489
+ const i = ctx._gsMeshes.indexOf(mesh);
490
+ if (i >= 0) {
491
+ ctx._gsMeshes.splice(i, 1);
492
+ }
493
+ disposeGaussianSplattingMesh(mesh);
494
+ });
495
+ }
496
+ export {
497
+ attachGaussianSplattingMeshSH,
498
+ buildGaussianSplattingRenderableSH
499
+ };
500
+ //# sourceMappingURL=gaussian-splatting-pipeline-sh-DgJl7l56.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gaussian-splatting-pipeline-sh-DgJl7l56.js","sources":["../src/mesh/GaussianSplatting/gaussian-splatting-pipeline-sh.ts"],"sourcesContent":["/** Gaussian-Splatting SH render pipeline + Renderable.\n *\n * Variant of `gaussian-splatting-pipeline.ts` that adds view-dependent SH\n * shading. Loaded *only* by `loadSplat` (and the SOG / SPZ loaders) via a\n * dynamic `import(...)` when the parsed splat asset includes SH coefficients\n * (`mesh.shDegree > 0`), so plain `.ply` / `.splat` scenes (e.g. scene 120)\n * never pull this module's WGSL or runtime cost into their bundle.\n *\n * WGSL source is generated per-shDegree by `buildShShaderSource`: SH textures,\n * byte-to-vec3 unpacking, and the polynomial evaluation in\n * `computeColorFromSHDegree` all expand to the right size — mirrors the\n * `#if SH_DEGREE > N` blocks in BJS `gaussianSplatting.fx`. Pipeline cache is\n * keyed by `(targetSignatureKey, shDegree)`.\n *\n * The UBO grows by 16 bytes vs the base pipeline to carry `eyePosition`\n * (world-space camera position; see `computeSH(dir)` below).\n *\n * ── Why the Y-flip on the SH direction? ─────────────────────────────────\n * BJS sets `mesh.scaling.y *= -1` to fix coordinate-system handedness; Lite\n * pre-flips Y in `splat-data.ts` at parse time so the runtime mesh transform\n * is identity. World-space splat positions agree across both engines, but\n * the BJS world rotation absorbs an extra `diag(1,-1,1)` factor — i.e.\n * worldRot_bjs = worldRot_user · diag(1,-1,1)\n * which means\n * inverse(worldRot_bjs) · v = diag(1,-1,1) · inverse(worldRot_user) · v\n * so Lite reproduces the BJS SH direction by computing\n * `inverseMat3(worldRot) · (worldPos − eye)` and then negating `.y`. */\n\nimport type { EngineContext } from \"../../engine/engine.js\";\nimport type { SceneContext } from \"../../scene/scene-core.js\";\nimport type { Renderable, DrawBinding } from \"../../render/renderable.js\";\nimport type { RenderTargetSignature } from \"../../engine/render-target.js\";\nimport { targetSignatureKey } from \"../../engine/render-target.js\";\nimport { getViewMatrix, getProjectionMatrix, getCameraPosition } from \"../../camera/camera.js\";\nimport { getSceneBindGroupLayout } from \"../../render/scene-helpers.js\";\nimport { getRenderTargetSize } from \"../../engine/engine.js\";\nimport { disposeGaussianSplattingMesh, type GaussianSplattingMesh, type GsShaderFragment } from \"./gaussian-splatting-mesh.js\";\nimport { applyGsFragments } from \"./gaussian-splatting-pipeline.js\";\n\ninterface PipelineEntry {\n pipeline: GPURenderPipeline;\n meshBindGroupLayout: GPUBindGroupLayout;\n shTextureCount: number;\n}\n\n// shDegree → number of rgba32uint SH textures: 1→1, 2→2, 3→3, 4→5.\nconst SH_TEXTURE_COUNT = [0, 1, 2, 3, 5];\n\nlet _cache: { device: GPUDevice; modules: Map<string, GPUShaderModule>; entries: Map<string, PipelineEntry> } | null = null;\n\n/** Build the WGSL source for a given SH degree (1..4). Mirrors the BJS\n * preprocessor-driven shader structure: declares only the SH textures used\n * by the degree, emits exactly the byte-stream unpacking for that degree,\n * and inlines only the SH polynomial terms up to that degree. */\nfunction buildShShaderSource(shDegree: number): string {\n const shVectorCount = (shDegree + 1) * (shDegree + 1) - 1;\n const shCoefficientCount = shVectorCount * 3;\n const textureCount = Math.ceil(shCoefficientCount / 16);\n\n // ── SH texture bindings (6, 7, …) ───────────────────────────────\n let textureBindings = \"\";\n for (let i = 0; i < textureCount; i++) {\n textureBindings += `@group(1) @binding(${6 + i}) var shTexture${i}: texture_2d<u32>;\\n`;\n }\n\n // ── textureLoad calls inside readSplat ──────────────────────────\n let textureLoads = \"\";\n for (let i = 0; i < textureCount; i++) {\n textureLoads += ` let sh${i}_u32 = textureLoad(shTexture${i}, splatUVi32, 0);\\n`;\n }\n\n // ── Unpack the byte stream into sh[1..shVectorCount] vec3 values.\n //\n // Each rgba32uint texel carries 16 bytes (4 u32s × 4 bytes). The bytes\n // are stored in BJS-coefficient order: byte j of splat i is the j-th\n // component of the [R0,G0,B0, R1,G1,B1, …, R(N-1),G(N-1),B(N-1)] sequence.\n // sh[k+1] (k = 0..shVectorCount-1) reads bytes [3k, 3k+1, 3k+2]. `decompose`\n // returns `(byte * 2/255) - 1`, matching BJS exactly.\n let shUnpack = ` var sh: array<vec3<f32>, ${shVectorCount + 1}>;\\n sh[0] = vec3<f32>(0.0);\\n`;\n const byteRef = (j: number): string => {\n // texture index, u32 index within texel (0..3), byte index within u32 (0..3 == x/y/z/w).\n const tex = (j / 16) | 0;\n const u32Idx = ((j % 16) / 4) | 0;\n const byteIdx = j % 4;\n const u32Field = [\"x\", \"y\", \"z\", \"w\"][u32Idx]!;\n const byteField = [\"x\", \"y\", \"z\", \"w\"][byteIdx]!;\n return `decompose(sh${tex}_u32.${u32Field}).${byteField}`;\n };\n for (let k = 0; k < shVectorCount; k++) {\n const j = k * 3;\n shUnpack += ` sh[${k + 1}] = vec3<f32>(${byteRef(j)}, ${byteRef(j + 1)}, ${byteRef(j + 2)});\\n`;\n }\n\n // ── Polynomial evaluation, conditional on shDegree ──────────────\n let shPoly = \" result = sh[0];\\n\";\n if (shDegree >= 1) {\n shPoly += ` result += -SH_C1 * y * sh[1] + SH_C1 * z * sh[2] - SH_C1 * x * sh[3];\\n`;\n }\n if (shDegree >= 2) {\n shPoly += ` result +=\\n SH_C2[0] * xy * sh[4] +\\n SH_C2[1] * yz * sh[5] +\\n SH_C2[2] * (2.0 * zz - xx - yy) * sh[6] +\\n SH_C2[3] * xz * sh[7] +\\n SH_C2[4] * (xx - yy) * sh[8];\\n`;\n }\n if (shDegree >= 3) {\n shPoly += ` result +=\\n SH_C3[0] * y * (3.0 * xx - yy) * sh[9] +\\n SH_C3[1] * xy * z * sh[10] +\\n SH_C3[2] * y * (4.0 * zz - xx - yy) * sh[11] +\\n SH_C3[3] * z * (2.0 * zz - 3.0 * xx - 3.0 * yy) * sh[12] +\\n SH_C3[4] * x * (4.0 * zz - xx - yy) * sh[13] +\\n SH_C3[5] * z * (xx - yy) * sh[14] +\\n SH_C3[6] * x * (xx - 3.0 * yy) * sh[15];\\n`;\n }\n if (shDegree >= 4) {\n shPoly += ` result +=\\n SH_C4[0] * x * y * (xx - yy) * sh[16] +\\n SH_C4[1] * y * z * (3.0 * xx - yy) * sh[17] +\\n SH_C4[2] * x * y * (7.0 * zz - 1.0) * sh[18] +\\n SH_C4[3] * y * z * (7.0 * zz - 3.0) * sh[19] +\\n SH_C4[4] * (zz * (35.0 * zz - 30.0) + 3.0) * sh[20] +\\n SH_C4[5] * x * z * (7.0 * zz - 3.0) * sh[21] +\\n SH_C4[6] * (xx - yy) * (7.0 * zz - 1.0) * sh[22] +\\n SH_C4[7] * x * z * (xx - 3.0 * yy) * sh[23] +\\n SH_C4[8] * (xx * (xx - 3.0 * yy) - yy * (3.0 * xx - yy)) * sh[24];\\n`;\n }\n\n // SH_C2..SH_C4 constants — only declare what's referenced (silences\n // WGSL \"unused array\" warnings on lower degrees).\n let constantsBlock = `const SH_C1: f32 = 0.48860251;\\n`;\n if (shDegree >= 2) {\n constantsBlock += `const SH_C2: array<f32, 5> = array<f32, 5>(1.092548430, -1.09254843, 0.315391565, -1.09254843, 0.546274215);\\n`;\n }\n if (shDegree >= 3) {\n constantsBlock += `const SH_C3: array<f32, 7> = array<f32, 7>(-0.59004358, 2.890611442, -0.45704579, 0.373176332, -0.45704579, 1.445305721, -0.59004358);\\n`;\n }\n if (shDegree >= 4) {\n constantsBlock += `const SH_C4: array<f32, 9> = array<f32, 9>(2.5033429418, -1.7701307698, 0.9461746958, -0.6690465436, 0.1057855469, -0.6690465436, 0.4730873479, -1.7701307698, 0.6258357354);\\n`;\n }\n\n return `// Gaussian Splatting — vertex + fragment WGSL (SH degree ${shDegree}).\n// Generated by buildShShaderSource. Mirrors BJS gaussianSplatting.vertex.fx +\n// gaussianSplatting.fx (SH_DEGREE = ${shDegree}, no compound parts).\nstruct U {\n world: mat4x4<f32>,\n view: mat4x4<f32>,\n projection: mat4x4<f32>,\n viewport: vec2<f32>,\n focal: vec2<f32>,\n dataSize: vec2<f32>,\n alpha: f32,\n _pad0: f32,\n eyePosition: vec3<f32>,\n _pad1: f32,\n};\n@group(1) @binding(0) var<uniform> u: U;\n@group(1) @binding(1) var samp: sampler;\n@group(1) @binding(2) var centersTex: texture_2d<f32>;\n@group(1) @binding(3) var covATex: texture_2d<f32>;\n@group(1) @binding(4) var covBTex: texture_2d<f32>;\n@group(1) @binding(5) var colorsTex: texture_2d<f32>;\n${textureBindings}\n\nstruct VOut {\n @builtin(position) pos: vec4<f32>,\n @location(0) vColor: vec4<f32>,\n @location(1) vPos: vec2<f32>,\n};\n\n${constantsBlock}\n\nfn dataUv(idx: f32) -> vec2<f32> {\n let y = floor(idx / u.dataSize.x);\n let x = idx - y * u.dataSize.x;\n return vec2<f32>((x + 0.5) / u.dataSize.x, (y + 0.5) / u.dataSize.y);\n}\n\nfn dataUvI(idx: f32) -> vec2<i32> {\n let y = floor(idx / u.dataSize.x);\n let x = idx - y * u.dataSize.x;\n return vec2<i32>(i32(x), i32(y));\n}\n\n// Unpack a u32 of 4 packed bytes into (b0 b1 b2 b3) * 2/255 - 1.\nfn decompose(value: u32) -> vec4<f32> {\n let v = vec4<f32>(\n f32((value >> 0u) & 255u),\n f32((value >> 8u) & 255u),\n f32((value >> 16u) & 255u),\n f32((value >> 24u) & 255u));\n return v * vec4<f32>(2.0 / 255.0) - vec4<f32>(1.0);\n}\n\nfn inverseMat3(m: mat3x3<f32>) -> mat3x3<f32> {\n let a00 = m[0][0]; let a01 = m[0][1]; let a02 = m[0][2];\n let a10 = m[1][0]; let a11 = m[1][1]; let a12 = m[1][2];\n let a20 = m[2][0]; let a21 = m[2][1]; let a22 = m[2][2];\n let b01 = a22 * a11 - a12 * a21;\n let b11 = -a22 * a10 + a12 * a20;\n let b21 = a21 * a10 - a11 * a20;\n let det = a00 * b01 + a01 * b11 + a02 * b21;\n return mat3x3<f32>(\n vec3<f32>(b01 / det, (-a22 * a01 + a02 * a21) / det, (a12 * a01 - a02 * a11) / det),\n vec3<f32>(b11 / det, (a22 * a00 - a02 * a20) / det, (-a12 * a00 + a02 * a10) / det),\n vec3<f32>(b21 / det, (-a21 * a00 + a01 * a20) / det, (a11 * a00 - a01 * a10) / det));\n}\n\nfn computeSH(dir: vec3<f32>, splatUVi32: vec2<i32>) -> vec3<f32> {\n${textureLoads}${shUnpack} let x = dir.x;\n let y = dir.y;\n let z = dir.z;\n let xx = x * x; let yy = y * y; let zz = z * z;\n let xy = x * y; let yz = y * z; let xz = x * z;\n var result: vec3<f32>;\n${shPoly} return result;\n}\n\n@vertex\nfn vs(@location(0) corner: vec2<f32>, @location(1) splatIndex: f32) -> VOut {\n var out: VOut;\n let uv = dataUv(splatIndex);\n let splatUVi32 = dataUvI(splatIndex);\n let center = textureSampleLevel(centersTex, samp, uv, 0.0).xyz;\n let color = textureSampleLevel(colorsTex, samp, uv, 0.0);\n let covA = textureSampleLevel(covATex, samp, uv, 0.0).xyz;\n let covB = textureSampleLevel(covBTex, samp, uv, 0.0).xyz;\n\n let worldPos = u.world * vec4<f32>(center, 1.0);\n let modelView = u.view * u.world;\n let camspace = u.view * worldPos;\n let pos2d = u.projection * camspace;\n\n let bounds = 1.2 * pos2d.w;\n if (pos2d.z < 0.0\n || pos2d.x < -bounds || pos2d.x > bounds\n || pos2d.y < -bounds || pos2d.y > bounds) {\n out.pos = vec4<f32>(0.0, 0.0, 2.0, 1.0);\n out.vColor = vec4<f32>(0.0);\n out.vPos = vec2<f32>(0.0);\n return out;\n }\n\n // ── View-dependent SH evaluation ───────────────────────────────────\n let worldRot = mat3x3<f32>(u.world[0].xyz, u.world[1].xyz, u.world[2].xyz);\n let normWorldRot = inverseMat3(worldRot);\n var dir = normalize(normWorldRot * (worldPos.xyz - u.eyePosition));\n // Lite-side Y-flip: compensates for our data-path Y pre-flip vs BJS's\n // mesh.scaling.y *= -1 (see file header for derivation).\n dir.y = -dir.y;\n let shColor = computeSH(dir, splatUVi32);\n\n let Vrk = mat3x3<f32>(\n vec3<f32>(covA.x, covA.y, covA.z),\n vec3<f32>(covA.y, covB.x, covB.y),\n vec3<f32>(covA.z, covB.y, covB.z));\n\n let invZ = 1.0 / camspace.z;\n let invZ2 = invZ * invZ;\n let J = mat3x3<f32>(\n vec3<f32>(u.focal.x * invZ, 0.0, -u.focal.x * camspace.x * invZ2),\n vec3<f32>(0.0, u.focal.y * invZ, -u.focal.y * camspace.y * invZ2),\n vec3<f32>(0.0, 0.0, 0.0));\n\n let mv3 = mat3x3<f32>(modelView[0].xyz, modelView[1].xyz, modelView[2].xyz);\n let T = transpose(mv3) * J;\n var cov2d = transpose(T) * Vrk * T;\n\n let kernelSize: f32 = 0.3;\n cov2d[0][0] += kernelSize;\n cov2d[1][1] += kernelSize;\n\n let mid = (cov2d[0][0] + cov2d[1][1]) * 0.5;\n let dxy = (cov2d[0][0] - cov2d[1][1]) * 0.5;\n let radius = length(vec2<f32>(dxy, cov2d[0][1]));\n let epsilon: f32 = 0.0001;\n let lambda1 = mid + radius + epsilon;\n let lambda2 = mid - radius + epsilon;\n if (lambda2 < 0.0) {\n out.pos = vec4<f32>(0.0, 0.0, 2.0, 1.0);\n out.vColor = vec4<f32>(0.0);\n out.vPos = vec2<f32>(0.0);\n return out;\n }\n\n let diag = normalize(vec2<f32>(cov2d[0][1], lambda1 - cov2d[0][0]));\n let majorAxis = min(sqrt(2.0 * lambda1), 1024.0) * diag;\n let minorAxis = min(sqrt(2.0 * lambda2), 1024.0) * vec2<f32>(diag.y, -diag.x);\n\n let vCenter = pos2d.xy;\n out.pos = vec4<f32>(\n vCenter + (corner.x * majorAxis + corner.y * minorAxis) * pos2d.w / u.viewport,\n pos2d.z, pos2d.w);\n out.vColor = vec4<f32>(color.rgb + shColor, color.a * u.alpha);\n out.vPos = corner;\n return out;\n}\n\n/*GS_FRAGMENT_DEFINITIONS*/\n@fragment\nfn fs(in: VOut) -> @location(0) vec4<f32> {\n /*GS_FRAGMENT_MAIN_BEGIN*/\n let A = -dot(in.vPos, in.vPos);\n if (A < -4.0) { discard; }\n let B = exp(A) * in.vColor.a;\n var finalColor = vec4<f32>(in.vColor.rgb, B);\n /*GS_FRAGMENT_BEFORE_FRAGCOLOR*/\n /*GS_FRAGMENT_MAIN_END*/\n return finalColor;\n}\n`;\n}\n\nfunction getOrCreateShPipeline(engine: EngineContext, sig: RenderTargetSignature, shDegree: number, fragments?: readonly GsShaderFragment[]): PipelineEntry {\n const device = engine._device;\n if (!_cache || _cache.device !== device) {\n _cache = { device, modules: new Map(), entries: new Map() };\n }\n const fragKey = fragments && fragments.length > 0 ? \"|\" + fragments.map((f) => f.id).join(\",\") : \"\";\n let module = _cache.modules.get(shDegree + fragKey);\n if (!module) {\n module = device.createShaderModule({\n code: fragments && fragments.length > 0 ? applyGsFragments(buildShShaderSource(shDegree), fragments) : buildShShaderSource(shDegree),\n });\n _cache.modules.set(shDegree + fragKey, module);\n }\n const key = `${targetSignatureKey(sig)}|sh${shDegree}${fragKey}`;\n let entry = _cache.entries.get(key);\n if (entry) {\n return entry;\n }\n const shTextureCount = SH_TEXTURE_COUNT[shDegree]!;\n const layoutEntries: GPUBindGroupLayoutEntry[] = [\n { binding: 0, visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT, buffer: { type: \"uniform\" } },\n { binding: 1, visibility: GPUShaderStage.VERTEX, sampler: { type: \"non-filtering\" } },\n { binding: 2, visibility: GPUShaderStage.VERTEX, texture: { sampleType: \"unfilterable-float\" } },\n { binding: 3, visibility: GPUShaderStage.VERTEX, texture: { sampleType: \"unfilterable-float\" } },\n { binding: 4, visibility: GPUShaderStage.VERTEX, texture: { sampleType: \"unfilterable-float\" } },\n { binding: 5, visibility: GPUShaderStage.VERTEX, texture: { sampleType: \"unfilterable-float\" } },\n ];\n for (let i = 0; i < shTextureCount; i++) {\n layoutEntries.push({ binding: 6 + i, visibility: GPUShaderStage.VERTEX, texture: { sampleType: \"uint\" } });\n }\n const meshBindGroupLayout = device.createBindGroupLayout({ entries: layoutEntries });\n const pipeline = device.createRenderPipeline({\n layout: device.createPipelineLayout({ bindGroupLayouts: [getSceneBindGroupLayout(engine), meshBindGroupLayout] }),\n vertex: {\n module,\n entryPoint: \"vs\",\n buffers: [\n { arrayStride: 8, stepMode: \"vertex\", attributes: [{ shaderLocation: 0, offset: 0, format: \"float32x2\" }] },\n { arrayStride: 4, stepMode: \"instance\", attributes: [{ shaderLocation: 1, offset: 0, format: \"float32\" }] },\n ],\n },\n fragment: {\n module,\n entryPoint: \"fs\",\n targets: [\n {\n format: sig._colorFormat!,\n blend: {\n color: { srcFactor: \"src-alpha\", dstFactor: \"one-minus-src-alpha\", operation: \"add\" },\n alpha: { srcFactor: \"one\", dstFactor: \"one-minus-src-alpha\", operation: \"add\" },\n },\n writeMask: GPUColorWrite.ALL,\n },\n ],\n },\n primitive: { topology: \"triangle-list\", cullMode: \"none\" },\n depthStencil: {\n format: sig._depthStencilFormat ?? \"depth24plus-stencil8\",\n depthCompare: sig._depthCompare ?? \"greater-equal\",\n depthWriteEnabled: false,\n },\n multisample: { count: sig._sampleCount },\n });\n entry = { pipeline, meshBindGroupLayout, shTextureCount };\n _cache.entries.set(key, entry);\n return entry;\n}\n\n/** Build the Renderable for a GaussianSplattingMesh with SH coefficients.\n * Mirrors `buildGaussianSplattingRenderable` but adds eyePosition to the UBO\n * and binds the SH textures. */\nexport function buildGaussianSplattingRenderableSH(scene: SceneContext, mesh: GaussianSplattingMesh, fragments?: readonly GsShaderFragment[]): Renderable {\n const engine = scene.engine;\n const device = engine._device;\n\n // 3 mat4 + 8 floats (viewport,focal,dataSize,alpha,pad) + 4 floats (eyePosition + pad) = 240 bytes.\n const UBO_BYTES = 16 * 4 * 3 + 8 * 4 + 4 * 4;\n const ubo = device.createBuffer({\n size: UBO_BYTES,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n });\n const cpu = new Float32Array(UBO_BYTES / 4);\n\n cpu[48 + 4] = mesh.textureWidth;\n cpu[48 + 5] = mesh.textureHeight;\n cpu[48 + 6] = 1; // alpha\n cpu[48 + 7] = 0; // pad\n\n const bindGroups = new Map<GPURenderPipeline, GPUBindGroup>();\n\n const getBindGroup = (entry: PipelineEntry): GPUBindGroup => {\n let bg = bindGroups.get(entry.pipeline);\n if (bg) {\n return bg;\n }\n const shViews = mesh._gs._shViews ?? [];\n const entries: GPUBindGroupEntry[] = [\n { binding: 0, resource: { buffer: ubo } },\n { binding: 1, resource: mesh._gs._sampler },\n { binding: 2, resource: mesh._gs._centersView },\n { binding: 3, resource: mesh._gs._covAView },\n { binding: 4, resource: mesh._gs._covBView },\n { binding: 5, resource: mesh._gs._colorsView },\n ];\n for (let i = 0; i < entry.shTextureCount; i++) {\n entries.push({ binding: 6 + i, resource: shViews[i]! });\n }\n bg = device.createBindGroup({ layout: entry.meshBindGroupLayout, entries });\n bindGroups.set(entry.pipeline, bg);\n return bg;\n };\n\n const SORT_EPS = 1e-4;\n\n const update = (): void => {\n const cam = scene.camera;\n if (!cam) {\n return;\n }\n const size = getRenderTargetSize(engine);\n const aspect = size.width / size.height;\n const view = getViewMatrix(cam) as unknown as Float32Array;\n const proj = getProjectionMatrix(cam, aspect) as unknown as Float32Array;\n const world = mesh.worldMatrix as unknown as Float32Array;\n const camPos = getCameraPosition(cam);\n\n cpu.set(world, 0);\n cpu.set(view, 16);\n cpu.set(proj, 32);\n cpu[48] = size.width;\n cpu[48 + 1] = size.height;\n cpu[48 + 2] = size.width * 0.5 * proj[0]!;\n cpu[48 + 3] = size.height * 0.5 * proj[5]!;\n cpu[56] = camPos.x;\n cpu[57] = camPos.y;\n cpu[58] = camPos.z;\n cpu[59] = 0;\n device.queue.writeBuffer(ubo, 0, cpu.buffer, 0, UBO_BYTES);\n\n if (!mesh._canPostToWorker) {\n return;\n }\n\n const cf0 = view[2]!,\n cf1 = view[6]!,\n cf2 = view[10]!;\n\n let dirty = false;\n const lastW = mesh._sortWorldMatrix;\n for (let i = 0; i < 16; i++) {\n if (Math.abs(lastW[i]! - world[i]!) > SORT_EPS) {\n dirty = true;\n break;\n }\n }\n if (!dirty) {\n const lastCf = mesh._sortCameraForward;\n if (Math.abs(lastCf[0]! - cf0) > SORT_EPS || Math.abs(lastCf[1]! - cf1) > SORT_EPS || Math.abs(lastCf[2]! - cf2) > SORT_EPS) {\n dirty = true;\n }\n }\n if (!dirty) {\n const lastCp = mesh._sortCameraPosition;\n if (Math.abs(lastCp[0]! - camPos.x) > SORT_EPS || Math.abs(lastCp[1]! - camPos.y) > SORT_EPS || Math.abs(lastCp[2]! - camPos.z) > SORT_EPS) {\n dirty = true;\n }\n }\n if (!dirty) {\n return;\n }\n\n mesh._sortWorldMatrix.set(world);\n mesh._sortCameraForward[0] = cf0;\n mesh._sortCameraForward[1] = cf1;\n mesh._sortCameraForward[2] = cf2;\n mesh._sortCameraPosition[0] = camPos.x;\n mesh._sortCameraPosition[1] = camPos.y;\n mesh._sortCameraPosition[2] = camPos.z;\n mesh._canPostToWorker = false;\n mesh._worker.postMessage(\n {\n m: new Float32Array(world),\n f: new Float32Array([cf0, cf1, cf2]),\n c: new Float32Array([camPos.x, camPos.y, camPos.z]),\n d: mesh._depthMix,\n },\n [mesh._depthMix.buffer]\n );\n };\n\n const r: Renderable = {\n order: 200,\n isTransparent: true,\n bind(eng: EngineContext, sig: RenderTargetSignature): DrawBinding {\n const entry = getOrCreateShPipeline(eng as EngineContext, sig, mesh.shDegree, fragments);\n const bindGroup = getBindGroup(entry);\n return {\n renderable: r,\n pipeline: entry.pipeline,\n update,\n draw(pass) {\n pass.setBindGroup(1, bindGroup);\n pass.setVertexBuffer(0, mesh._gs._quadBuffer);\n pass.setVertexBuffer(1, mesh._gs._splatIndexBuffer);\n pass.setIndexBuffer(mesh._gs._indexBuffer, \"uint16\");\n pass.drawIndexed(6, mesh.vertexCount);\n return 1;\n },\n };\n },\n };\n return r;\n}\n\n/** SH-aware variant of `attachGaussianSplattingMesh`. Dynamic-imported by\n * `attachParsedSplat` (in `load-splat.ts`) when the parsed asset carries SH\n * coefficients. Reads `mesh.shDegree` (set at mesh construction), creates\n * the `rgba32uint` SH textures (1..5 depending on degree), patches\n * `mesh._gs` in place, and installs the SH renderable. */\nexport function attachGaussianSplattingMeshSH(scene: SceneContext, mesh: GaussianSplattingMesh, shFlat: Uint8Array, fragments?: readonly GsShaderFragment[]): void {\n const engine = scene.engine;\n const device = engine._device;\n const shDegree = mesh.shDegree;\n const shVectorCount = (shDegree + 1) * (shDegree + 1) - 1;\n const shCoefficientCount = shVectorCount * 3;\n const textureCount = Math.ceil(shCoefficientCount / 16);\n const width = mesh.textureWidth;\n const height = mesh.textureHeight;\n\n // Pack the flat SH byte stream into N textures of 16 bytes per splat each.\n // splat i's bytes [i*shCC .. i*shCC + shCC] are split across textures\n // [t=0..textureCount-1], each carrying up to 16 bytes at offset i*16.\n const textures: GPUTexture[] = [];\n const views: GPUTextureView[] = [];\n const vertexCount = mesh.vertexCount;\n for (let t = 0; t < textureCount; t++) {\n const dst = new Uint8Array(width * height * 16);\n const tBase = t * 16;\n const bytesThisTex = Math.min(16, shCoefficientCount - tBase);\n for (let i = 0; i < vertexCount; i++) {\n const srcOff = i * shCoefficientCount + tBase;\n const dstOff = i * 16;\n for (let b = 0; b < bytesThisTex; b++) {\n dst[dstOff + b] = shFlat[srcOff + b]!;\n }\n }\n const tex = device.createTexture({\n size: [width, height],\n format: \"rgba32uint\",\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST,\n });\n device.queue.writeTexture({ texture: tex }, dst.buffer, { bytesPerRow: width * 16 }, { width, height });\n textures.push(tex);\n views.push(tex.createView());\n }\n mesh._gs._shTextures = textures;\n mesh._gs._shViews = views;\n\n const ctx = scene as unknown as { _renderables: Renderable[]; _disposables: (() => void)[]; _gsMeshes: GaussianSplattingMesh[] };\n ctx._renderables.push(buildGaussianSplattingRenderableSH(scene, mesh, fragments));\n ctx._gsMeshes.push(mesh);\n ctx._disposables.push(() => {\n const i = ctx._gsMeshes.indexOf(mesh);\n if (i >= 0) {\n ctx._gsMeshes.splice(i, 1);\n }\n disposeGaussianSplattingMesh(mesh);\n });\n}\n"],"names":[],"mappings":"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"}