@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,235 @@
1
+ import { s as skyboxVertSrc } from "./skybox.vertex-DJgi072W.js";
2
+ import { e as createMappedBuffer, aY as createUniformBuffer, D as targetSignatureKey, aW as SCENE_UBO_WGSL, E as createDefaultPipelineDescriptor, F as getSceneBindGroupLayout, aZ as createSingleUniformBGL } from "./index-C8HOR2sB.js";
3
+ import { a as WGSL_DITHER } from "./wgsl-helpers-DyzNzCeE.js";
4
+ const skyboxFragSrc = "// Skybox Fragment Shader — matches Babylon BackgroundMaterial\n// BJS loads a separate CDN skybox texture (backgroundSkybox.dds) that produces\n// exactly scene.clearColor when rendered through the BackgroundMaterial pipeline.\n// We replicate this by outputting the pre-computed clearColor directly from a UBO.\n\nstruct MeshUniforms {\n world: mat4x4<f32>,\n primaryColor: vec3<f32>,\n _pad: f32,\n // Pre-computed sRGB output color for the sky background (= scene.clearColor).\n skyOutputColor: vec3<f32>,\n _pad2: f32,\n};\n@group(1) @binding(0) var<uniform> mesh: MeshUniforms;\n\nstruct FragmentInput {\n @location(0) positionUVW: vec3<f32>,\n @location(1) positionW: vec3<f32>,\n};\n\n@fragment\nfn main(input: FragmentInput) -> @location(0) vec4<f32> {\n var result = vec4<f32>(mesh.skyOutputColor, 1.0);\n\n // Dithering (enableNoise=true, variance=0.5)\n result = vec4<f32>(result.rgb + vec3<f32>(dither(input.positionW.xy, 0.5)), result.a);\n result = max(result, vec4<f32>(0.0));\n\n return result;\n}\n";
5
+ const SKY_MESH_UNIFORM_SIZE = 96;
6
+ function createSkyboxBuffers(engine, S) {
7
+ const positions = new Float32Array([
8
+ S,
9
+ -S,
10
+ S,
11
+ -S,
12
+ -S,
13
+ S,
14
+ -S,
15
+ S,
16
+ S,
17
+ S,
18
+ S,
19
+ S,
20
+ S,
21
+ S,
22
+ -S,
23
+ -S,
24
+ S,
25
+ -S,
26
+ -S,
27
+ -S,
28
+ -S,
29
+ S,
30
+ -S,
31
+ -S,
32
+ S,
33
+ S,
34
+ -S,
35
+ S,
36
+ -S,
37
+ -S,
38
+ S,
39
+ -S,
40
+ S,
41
+ S,
42
+ S,
43
+ S,
44
+ -S,
45
+ S,
46
+ S,
47
+ -S,
48
+ -S,
49
+ S,
50
+ -S,
51
+ -S,
52
+ -S,
53
+ -S,
54
+ S,
55
+ -S,
56
+ -S,
57
+ S,
58
+ S,
59
+ -S,
60
+ S,
61
+ -S,
62
+ S,
63
+ S,
64
+ -S,
65
+ S,
66
+ S,
67
+ S,
68
+ S,
69
+ -S,
70
+ S,
71
+ S,
72
+ -S,
73
+ -S,
74
+ -S,
75
+ -S,
76
+ -S,
77
+ -S,
78
+ -S,
79
+ S
80
+ ]);
81
+ const indices = new Uint16Array([
82
+ 2,
83
+ 1,
84
+ 0,
85
+ 3,
86
+ 2,
87
+ 0,
88
+ 6,
89
+ 5,
90
+ 4,
91
+ 7,
92
+ 6,
93
+ 4,
94
+ 10,
95
+ 9,
96
+ 8,
97
+ 11,
98
+ 10,
99
+ 8,
100
+ 14,
101
+ 13,
102
+ 12,
103
+ 15,
104
+ 14,
105
+ 12,
106
+ 18,
107
+ 17,
108
+ 16,
109
+ 19,
110
+ 18,
111
+ 16,
112
+ 22,
113
+ 21,
114
+ 20,
115
+ 23,
116
+ 22,
117
+ 20
118
+ ]);
119
+ return {
120
+ posBuffer: createMappedBuffer(engine, positions, GPUBufferUsage.VERTEX),
121
+ idxBuffer: createMappedBuffer(engine, indices, GPUBufferUsage.INDEX),
122
+ idxCount: 36
123
+ };
124
+ }
125
+ function buildSkyboxWorldMatrix(rootPosition) {
126
+ const world = new Float32Array(16);
127
+ world[0] = 1;
128
+ world[5] = 1;
129
+ world[10] = 1;
130
+ world[15] = 1;
131
+ world[12] = rootPosition[0];
132
+ world[13] = rootPosition[1];
133
+ world[14] = rootPosition[2];
134
+ return world;
135
+ }
136
+ const SKYBOX_POS_BUFFER = [{ arrayStride: 12, attributes: [{ shaderLocation: 0, offset: 0, format: "float32x3" }] }];
137
+ const _skyPipelines = /* @__PURE__ */ new Map();
138
+ let _skyLayout = null;
139
+ let _skyCachedDevice = null;
140
+ function createSkyboxMaterial() {
141
+ function getLayout(engine) {
142
+ const device = engine._device;
143
+ if (_skyLayout && _skyCachedDevice === device) {
144
+ return _skyLayout;
145
+ }
146
+ _skyLayout = createSingleUniformBGL(engine, "skybox-material", GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT);
147
+ return _skyLayout;
148
+ }
149
+ return {
150
+ getPipeline(_engine, sig) {
151
+ const device = _engine._device;
152
+ if (_skyCachedDevice !== device) {
153
+ _skyPipelines.clear();
154
+ _skyLayout = null;
155
+ _skyCachedDevice = device;
156
+ }
157
+ const key = targetSignatureKey(sig);
158
+ const cached = _skyPipelines.get(key);
159
+ if (cached) {
160
+ return cached;
161
+ }
162
+ const _vertModule = device.createShaderModule({ code: SCENE_UBO_WGSL + skyboxVertSrc, label: "skybox-vert" });
163
+ const _fragModule = device.createShaderModule({ code: WGSL_DITHER + skyboxFragSrc, label: "skybox-frag" });
164
+ const pipeline = device.createRenderPipeline(
165
+ createDefaultPipelineDescriptor({
166
+ _label: "skybox-pipeline",
167
+ _engine,
168
+ _bgls: [getSceneBindGroupLayout(_engine), getLayout(_engine)],
169
+ _vertModule,
170
+ _fragModule,
171
+ _vertexBuffers: SKYBOX_POS_BUFFER,
172
+ _format: sig._colorFormat,
173
+ _depthStencilFormat: sig._depthStencilFormat,
174
+ _depthCompare: sig._depthCompare,
175
+ _msaaSamples: sig._sampleCount,
176
+ _depthWriteEnabled: false,
177
+ _flipY: sig._flipY
178
+ })
179
+ );
180
+ _skyPipelines.set(key, pipeline);
181
+ return pipeline;
182
+ },
183
+ createBindGroup(engine, meshUBO, _env) {
184
+ const device = engine._device;
185
+ return device.createBindGroup({
186
+ layout: getLayout(engine),
187
+ entries: [{ binding: 0, resource: { buffer: meshUBO } }]
188
+ });
189
+ }
190
+ };
191
+ }
192
+ function buildSolidSkyboxRenderable(scene, envTextures, skyHalfSize, rootPosition, primaryColor) {
193
+ const engine = scene.engine;
194
+ const skyboxWorld = buildSkyboxWorldMatrix(rootPosition);
195
+ const cc = scene.clearColor;
196
+ const skyBufs = createSkyboxBuffers(engine, skyHalfSize);
197
+ const skyMat = createSkyboxMaterial();
198
+ const skyOutputColor = [cc.r, cc.g, cc.b];
199
+ const skyUBO = createSkyMeshUBO(engine, skyboxWorld, primaryColor, skyOutputColor);
200
+ const skyBG = skyMat.createBindGroup(engine, skyUBO, envTextures);
201
+ const r = {
202
+ order: 0,
203
+ // skybox renders first (behind everything)
204
+ isTransparent: false,
205
+ bind(eng, sig) {
206
+ return {
207
+ renderable: r,
208
+ pipeline: skyMat.getPipeline(eng, sig),
209
+ draw(pass) {
210
+ pass.setBindGroup(1, skyBG);
211
+ pass.setVertexBuffer(0, skyBufs.posBuffer);
212
+ pass.setIndexBuffer(skyBufs.idxBuffer, "uint16");
213
+ pass.drawIndexed(skyBufs.idxCount);
214
+ return 1;
215
+ }
216
+ };
217
+ }
218
+ };
219
+ return r;
220
+ }
221
+ function createSkyMeshUBO(engine, world, primaryColor, skyOutputColor) {
222
+ const data = new Float32Array(SKY_MESH_UNIFORM_SIZE / 4);
223
+ data.set(world, 0);
224
+ data[16] = primaryColor[0];
225
+ data[17] = primaryColor[1];
226
+ data[18] = primaryColor[2];
227
+ data[20] = skyOutputColor[0];
228
+ data[21] = skyOutputColor[1];
229
+ data[22] = skyOutputColor[2];
230
+ return createUniformBuffer(engine, data);
231
+ }
232
+ export {
233
+ buildSolidSkyboxRenderable
234
+ };
235
+ //# sourceMappingURL=background-solid-skybox-DPGBpPbm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background-solid-skybox-DPGBpPbm.js","sources":["../shaders/skybox.fragment.wgsl?raw","../src/material/pbr/background-solid-skybox.ts"],"sourcesContent":["export default \"// Skybox Fragment Shader — matches Babylon BackgroundMaterial\\n// BJS loads a separate CDN skybox texture (backgroundSkybox.dds) that produces\\n// exactly scene.clearColor when rendered through the BackgroundMaterial pipeline.\\n// We replicate this by outputting the pre-computed clearColor directly from a UBO.\\n\\nstruct MeshUniforms {\\n world: mat4x4<f32>,\\n primaryColor: vec3<f32>,\\n _pad: f32,\\n // Pre-computed sRGB output color for the sky background (= scene.clearColor).\\n skyOutputColor: vec3<f32>,\\n _pad2: f32,\\n};\\n@group(1) @binding(0) var<uniform> mesh: MeshUniforms;\\n\\nstruct FragmentInput {\\n @location(0) positionUVW: vec3<f32>,\\n @location(1) positionW: vec3<f32>,\\n};\\n\\n@fragment\\nfn main(input: FragmentInput) -> @location(0) vec4<f32> {\\n var result = vec4<f32>(mesh.skyOutputColor, 1.0);\\n\\n // Dithering (enableNoise=true, variance=0.5)\\n result = vec4<f32>(result.rgb + vec3<f32>(dither(input.positionW.xy, 0.5)), result.a);\\n result = max(result, vec4<f32>(0.0));\\n\\n return result;\\n}\\n\"","/** Solid-color skybox renderable — the clear-color background used by PBR\n * environment scenes when no HDR/DDS skybox is provided.\n *\n * Dynamically imported from `background-renderable.ts` so scenes that pass\n * `skipSkybox: true` (or use a dyn-imported HDR/DDS skybox instead) don't\n * pay for the shader module or cube geometry. */\n\nimport type { SceneContext } from \"../../scene/scene.js\";\nimport type { EngineContext } from \"../../engine/engine.js\";\nimport type { EnvironmentTextures } from \"../../loader-env/load-env.js\";\nimport type { Mat4 } from \"../../math/types.js\";\nimport type { Renderable } from \"../../render/renderable.js\";\nimport type { RenderTargetSignature } from \"../../engine/render-target.js\";\n\nimport skyboxVertSrc from \"../../../shaders/skybox.vertex.wgsl?raw\";\nimport skyboxFragSrc from \"../../../shaders/skybox.fragment.wgsl?raw\";\nimport { createDefaultPipelineDescriptor, getSceneBindGroupLayout } from \"../../render/scene-helpers.js\";\nimport { targetSignatureKey } from \"../../engine/render-target.js\";\nimport { WGSL_DITHER } from \"../../shader/wgsl-helpers.js\";\nimport { SCENE_UBO_WGSL } from \"../../shader/scene-uniforms.js\";\nimport { createMappedBuffer, createUniformBuffer } from \"../../resource/gpu-buffers.js\";\nimport { createSingleUniformBGL } from \"../../shader/bgl-helpers.js\";\n\nconst SKY_MESH_UNIFORM_SIZE = 96; // mat4x4 + primaryColor vec3 + pad + skyOutputColor vec3 + pad\n\nfunction createSkyboxBuffers(engine: EngineContext, S: number): { posBuffer: GPUBuffer; idxBuffer: GPUBuffer; idxCount: number } {\n // prettier-ignore\n const positions = new Float32Array([\n S,-S, S, -S,-S, S, -S, S, S, S, S, S,\n S, S,-S, -S, S,-S, -S,-S,-S, S,-S,-S,\n S, S,-S, S,-S,-S, S,-S, S, S, S, S,\n -S, S, S, -S,-S, S, -S,-S,-S, -S, S,-S,\n -S, S, S, -S, S,-S, S, S,-S, S, S, S,\n S,-S, S, S,-S,-S, -S,-S,-S, -S,-S, S,\n ]);\n // prettier-ignore\n const indices = new Uint16Array([\n 2, 1, 0, 3, 2, 0, 6, 5, 4, 7, 6, 4,\n 10, 9, 8, 11,10, 8, 14,13,12, 15,14,12,\n 18,17,16, 19,18,16, 22,21,20, 23,22,20,\n ]);\n return {\n posBuffer: createMappedBuffer(engine, positions, GPUBufferUsage.VERTEX),\n idxBuffer: createMappedBuffer(engine, indices, GPUBufferUsage.INDEX),\n idxCount: 36,\n };\n}\n\nfunction buildSkyboxWorldMatrix(rootPosition: [number, number, number]): Mat4 {\n const world = new Float32Array(16) as Mat4;\n world[0] = 1;\n world[5] = 1;\n world[10] = 1;\n world[15] = 1;\n world[12] = rootPosition[0];\n world[13] = rootPosition[1];\n world[14] = rootPosition[2];\n return world;\n}\n\ninterface SkyboxMaterial {\n getPipeline(engine: EngineContext, sig: RenderTargetSignature): GPURenderPipeline;\n createBindGroup(engine: EngineContext, meshUBO: GPUBuffer, env: EnvironmentTextures): GPUBindGroup;\n}\n\nconst SKYBOX_POS_BUFFER: GPUVertexBufferLayout[] = [{ arrayStride: 12, attributes: [{ shaderLocation: 0, offset: 0, format: \"float32x3\" as GPUVertexFormat }] }];\n\n/** Module-global pipeline cache shared by all solid-skybox renderables. */\nconst _skyPipelines = new Map<string, GPURenderPipeline>();\nlet _skyLayout: GPUBindGroupLayout | null = null;\nlet _skyCachedDevice: GPUDevice | null = null;\n\nfunction createSkyboxMaterial(): SkyboxMaterial {\n function getLayout(engine: EngineContext): GPUBindGroupLayout {\n const device = engine._device;\n if (_skyLayout && _skyCachedDevice === device) {\n return _skyLayout;\n }\n _skyLayout = createSingleUniformBGL(engine, \"skybox-material\", GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT);\n return _skyLayout;\n }\n\n return {\n getPipeline(_engine, sig) {\n const device = _engine._device;\n if (_skyCachedDevice !== device) {\n _skyPipelines.clear();\n _skyLayout = null;\n _skyCachedDevice = device;\n }\n const key = targetSignatureKey(sig);\n const cached = _skyPipelines.get(key);\n if (cached) {\n return cached;\n }\n const _vertModule = device.createShaderModule({ code: SCENE_UBO_WGSL + skyboxVertSrc, label: \"skybox-vert\" });\n const _fragModule = device.createShaderModule({ code: WGSL_DITHER + skyboxFragSrc, label: \"skybox-frag\" });\n\n const pipeline = device.createRenderPipeline(\n createDefaultPipelineDescriptor({\n _label: \"skybox-pipeline\",\n _engine,\n _bgls: [getSceneBindGroupLayout(_engine), getLayout(_engine)],\n _vertModule,\n _fragModule,\n _vertexBuffers: SKYBOX_POS_BUFFER,\n _format: sig._colorFormat!,\n _depthStencilFormat: sig._depthStencilFormat,\n _depthCompare: sig._depthCompare,\n _msaaSamples: sig._sampleCount,\n _depthWriteEnabled: false,\n _flipY: sig._flipY,\n })\n );\n _skyPipelines.set(key, pipeline);\n return pipeline;\n },\n\n createBindGroup(engine, meshUBO, _env) {\n const device = engine._device;\n return device.createBindGroup({\n layout: getLayout(engine),\n entries: [{ binding: 0, resource: { buffer: meshUBO } }],\n });\n },\n };\n}\n\nexport function buildSolidSkyboxRenderable(\n scene: SceneContext,\n envTextures: EnvironmentTextures,\n skyHalfSize: number,\n rootPosition: [number, number, number],\n primaryColor: [number, number, number]\n): Renderable {\n const engine = scene.engine;\n const skyboxWorld = buildSkyboxWorldMatrix(rootPosition);\n const cc = scene.clearColor;\n const skyBufs = createSkyboxBuffers(engine, skyHalfSize);\n\n const skyMat = createSkyboxMaterial();\n const skyOutputColor: [number, number, number] = [cc.r, cc.g, cc.b];\n const skyUBO = createSkyMeshUBO(engine, skyboxWorld, primaryColor, skyOutputColor);\n const skyBG = skyMat.createBindGroup(engine, skyUBO, envTextures);\n\n const r: Renderable = {\n order: 0, // skybox renders first (behind everything)\n isTransparent: false,\n bind(eng, sig) {\n return {\n renderable: r,\n pipeline: skyMat.getPipeline(eng as EngineContext, sig),\n draw(pass) {\n pass.setBindGroup(1, skyBG);\n pass.setVertexBuffer(0, skyBufs.posBuffer);\n pass.setIndexBuffer(skyBufs.idxBuffer, \"uint16\");\n pass.drawIndexed(skyBufs.idxCount);\n return 1;\n },\n };\n },\n };\n return r;\n}\n\nfunction createSkyMeshUBO(engine: EngineContext, world: Mat4, primaryColor: [number, number, number], skyOutputColor: [number, number, number]): GPUBuffer {\n const data = new Float32Array(SKY_MESH_UNIFORM_SIZE / 4);\n data.set(world, 0);\n data[16] = primaryColor[0];\n data[17] = primaryColor[1];\n data[18] = primaryColor[2];\n data[20] = skyOutputColor[0];\n data[21] = skyOutputColor[1];\n data[22] = skyOutputColor[2];\n return createUniformBuffer(engine, data);\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ function bakeLocalMatrix(positions, normals, lm) {
2
+ const isIdentity = lm[0] === 1 && lm[1] === 0 && lm[2] === 0 && lm[4] === 0 && lm[5] === 1 && lm[6] === 0 && lm[8] === 0 && lm[9] === 0 && lm[10] === 1 && lm[12] === 0 && lm[13] === 0 && lm[14] === 0;
3
+ if (isIdentity) {
4
+ return;
5
+ }
6
+ for (let i = 0; i < positions.length; i += 3) {
7
+ const x = positions[i], y = positions[i + 1], z = positions[i + 2];
8
+ positions[i] = x * lm[0] + y * lm[4] + z * lm[8] + lm[12];
9
+ positions[i + 1] = x * lm[1] + y * lm[5] + z * lm[9] + lm[13];
10
+ positions[i + 2] = x * lm[2] + y * lm[6] + z * lm[10] + lm[14];
11
+ }
12
+ for (let i = 0; i < normals.length; i += 3) {
13
+ const nx = normals[i], ny = normals[i + 1], nz = normals[i + 2];
14
+ const rx = nx * lm[0] + ny * lm[4] + nz * lm[8];
15
+ const ry = nx * lm[1] + ny * lm[5] + nz * lm[9];
16
+ const rz = nx * lm[2] + ny * lm[6] + nz * lm[10];
17
+ const len = Math.sqrt(rx * rx + ry * ry + rz * rz);
18
+ if (len > 1e-10) {
19
+ normals[i] = rx / len;
20
+ normals[i + 1] = ry / len;
21
+ normals[i + 2] = rz / len;
22
+ }
23
+ }
24
+ }
25
+ export {
26
+ bakeLocalMatrix
27
+ };
28
+ //# sourceMappingURL=bake-local-matrix-Dfpd3b06.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bake-local-matrix-Dfpd3b06.js","sources":["../src/loader-babylon/bake-local-matrix.ts"],"sourcesContent":["/** Bake localMatrix (pivot) into vertex positions and normals.\n * Positions: full 4x3 affine. Normals: 3x3 part + renormalize.\n * Dynamically imported only when the scene uses localMatrix. */\nexport function bakeLocalMatrix(positions: Float32Array, normals: Float32Array, lm: number[]): void {\n const isIdentity =\n lm[0] === 1 &&\n lm[1] === 0 &&\n lm[2] === 0 &&\n lm[4] === 0 &&\n lm[5] === 1 &&\n lm[6] === 0 &&\n lm[8] === 0 &&\n lm[9] === 0 &&\n lm[10] === 1 &&\n lm[12] === 0 &&\n lm[13] === 0 &&\n lm[14] === 0;\n if (isIdentity) {\n return;\n }\n\n for (let i = 0; i < positions.length; i += 3) {\n const x = positions[i]!,\n y = positions[i + 1]!,\n z = positions[i + 2]!;\n positions[i] = x * lm[0]! + y * lm[4]! + z * lm[8]! + lm[12]!;\n positions[i + 1] = x * lm[1]! + y * lm[5]! + z * lm[9]! + lm[13]!;\n positions[i + 2] = x * lm[2]! + y * lm[6]! + z * lm[10]! + lm[14]!;\n }\n\n for (let i = 0; i < normals.length; i += 3) {\n const nx = normals[i]!,\n ny = normals[i + 1]!,\n nz = normals[i + 2]!;\n const rx = nx * lm[0]! + ny * lm[4]! + nz * lm[8]!;\n const ry = nx * lm[1]! + ny * lm[5]! + nz * lm[9]!;\n const rz = nx * lm[2]! + ny * lm[6]! + nz * lm[10]!;\n const len = Math.sqrt(rx * rx + ry * ry + rz * rz);\n if (len > 1e-10) {\n normals[i] = rx / len;\n normals[i + 1] = ry / len;\n normals[i + 2] = rz / len;\n }\n }\n}\n"],"names":[],"mappings":"AAGO,SAAS,gBAAgB,WAAyB,SAAuB,IAAoB;AAChG,QAAM,aACF,GAAG,CAAC,MAAM,KACV,GAAG,CAAC,MAAM,KACV,GAAG,CAAC,MAAM,KACV,GAAG,CAAC,MAAM,KACV,GAAG,CAAC,MAAM,KACV,GAAG,CAAC,MAAM,KACV,GAAG,CAAC,MAAM,KACV,GAAG,CAAC,MAAM,KACV,GAAG,EAAE,MAAM,KACX,GAAG,EAAE,MAAM,KACX,GAAG,EAAE,MAAM,KACX,GAAG,EAAE,MAAM;AACf,MAAI,YAAY;AACZ;AAAA,EACJ;AAEA,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK,GAAG;AAC1C,UAAM,IAAI,UAAU,CAAC,GACjB,IAAI,UAAU,IAAI,CAAC,GACnB,IAAI,UAAU,IAAI,CAAC;AACvB,cAAU,CAAC,IAAI,IAAI,GAAG,CAAC,IAAK,IAAI,GAAG,CAAC,IAAK,IAAI,GAAG,CAAC,IAAK,GAAG,EAAE;AAC3D,cAAU,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAK,IAAI,GAAG,CAAC,IAAK,IAAI,GAAG,CAAC,IAAK,GAAG,EAAE;AAC/D,cAAU,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAK,IAAI,GAAG,CAAC,IAAK,IAAI,GAAG,EAAE,IAAK,GAAG,EAAE;AAAA,EACpE;AAEA,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,GAAG;AACxC,UAAM,KAAK,QAAQ,CAAC,GAChB,KAAK,QAAQ,IAAI,CAAC,GAClB,KAAK,QAAQ,IAAI,CAAC;AACtB,UAAM,KAAK,KAAK,GAAG,CAAC,IAAK,KAAK,GAAG,CAAC,IAAK,KAAK,GAAG,CAAC;AAChD,UAAM,KAAK,KAAK,GAAG,CAAC,IAAK,KAAK,GAAG,CAAC,IAAK,KAAK,GAAG,CAAC;AAChD,UAAM,KAAK,KAAK,GAAG,CAAC,IAAK,KAAK,GAAG,CAAC,IAAK,KAAK,GAAG,EAAE;AACjD,UAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;AACjD,QAAI,MAAM,OAAO;AACb,cAAQ,CAAC,IAAI,KAAK;AAClB,cAAQ,IAAI,CAAC,IAAI,KAAK;AACtB,cAAQ,IAAI,CAAC,IAAI,KAAK;AAAA,IAC1B;AAAA,EACJ;AACJ;"}
@@ -0,0 +1,242 @@
1
+ import { e as createMappedBuffer, Z as BILLBOARD_INDEX_DATA, _ as createEmptyUniformBuffer, $ as BILLBOARD_SYSTEM_UBO_BYTES, a0 as createBillboardInstanceBuffer, a1 as _getBillboardFxHook, a2 as createBillboardInstanceSortScratch, a3 as getOrCreateBillboardPipeline, F as getSceneBindGroupLayout, a4 as createBillboardSystemBindGroup, a5 as resetBillboardPipelineCache, a6 as ensureBillboardInstanceBuffer, K as getViewMatrix, a7 as uploadSortedBillboardInstances, a8 as uploadBillboardInstances, a9 as buildBillboardSystemUbo, aa as writeBillboardSystemUboIfDirty, ab as createBillboardPipelineCache } from "./index-C8HOR2sB.js";
2
+ let _sharedPipelineCache = null;
3
+ let _sharedPipelineCacheRefs = 0;
4
+ function acquireSharedPipelineCache() {
5
+ _sharedPipelineCache ?? (_sharedPipelineCache = createBillboardPipelineCache());
6
+ _sharedPipelineCacheRefs++;
7
+ return _sharedPipelineCache;
8
+ }
9
+ function releaseSharedPipelineCache() {
10
+ if (_sharedPipelineCacheRefs === 0) {
11
+ return;
12
+ }
13
+ _sharedPipelineCacheRefs--;
14
+ if (_sharedPipelineCacheRefs === 0 && _sharedPipelineCache) {
15
+ resetBillboardPipelineCache(_sharedPipelineCache);
16
+ _sharedPipelineCache = null;
17
+ }
18
+ }
19
+ function buildBillboardRenderable(engine, system) {
20
+ var _a;
21
+ const indexBuffer = createMappedBuffer(engine, BILLBOARD_INDEX_DATA, GPUBufferUsage.INDEX);
22
+ const uniformBuffer = createEmptyUniformBuffer(engine, BILLBOARD_SYSTEM_UBO_BYTES, `${system._orientation}-billboard-system-ubo`);
23
+ const instanceBuffer = createBillboardInstanceBuffer(engine._device, system, `${system._orientation}-billboard-instances`);
24
+ const fx = ((_a = _getBillboardFxHook()) == null ? void 0 : _a.createLayerFx(engine, `${system._orientation}-billboard-fx-ubo`, system)) ?? null;
25
+ const isTransparent = system._depthMode === "transparent";
26
+ const renderable = {
27
+ order: system.order,
28
+ isTransparent,
29
+ _direct: !isTransparent,
30
+ _engine: engine,
31
+ _system: system,
32
+ _indexBuffer: indexBuffer,
33
+ _uniformBuffer: uniformBuffer,
34
+ _instanceBuffer: instanceBuffer,
35
+ _instanceBufferCapacity: system._capacity,
36
+ _instanceSortScratch: createBillboardInstanceSortScratch(),
37
+ _pipelineCache: acquireSharedPipelineCache(),
38
+ _bindGroups: /* @__PURE__ */ new Map(),
39
+ _uploadedVersion: -1,
40
+ _uploadedCamera: null,
41
+ _uploadedCameraViewVersion: -1,
42
+ _uploadedSorted: false,
43
+ _centerVersion: -1,
44
+ _drawableCount: 0,
45
+ _uboUploaded: false,
46
+ _lastUbo: new Float32Array(BILLBOARD_SYSTEM_UBO_BYTES / 4),
47
+ _scratchUbo: new Float32Array(BILLBOARD_SYSTEM_UBO_BYTES / 4),
48
+ _fx: fx,
49
+ _disposed: false,
50
+ _worldCenter: [0, 0, 0],
51
+ bind(engine2, target) {
52
+ return bindSystem(renderable, engine2, target);
53
+ }
54
+ };
55
+ refreshBillboardWorldCenter(renderable);
56
+ return {
57
+ renderable,
58
+ dispose() {
59
+ disposeRenderable(renderable);
60
+ }
61
+ };
62
+ }
63
+ function bindSystem(renderable, engine, target) {
64
+ if (!target._depthStencilFormat) {
65
+ throw new Error("BillboardSpriteSystem requires a depth-stencil render target.");
66
+ }
67
+ const sampleCount = target._sampleCount === 1 ? 1 : 4;
68
+ const pipeline = getOrCreateBillboardPipeline(
69
+ engine,
70
+ renderable._pipelineCache,
71
+ target._colorFormat,
72
+ sampleCount,
73
+ renderable._system,
74
+ target._depthStencilFormat,
75
+ getSceneBindGroupLayout(engine)
76
+ );
77
+ let bindGroup = renderable._bindGroups.get(pipeline);
78
+ if (!bindGroup) {
79
+ bindGroup = createBillboardSystemBindGroup(engine, pipeline, renderable._system, renderable._uniformBuffer, renderable._fx);
80
+ renderable._bindGroups.set(pipeline, bindGroup);
81
+ }
82
+ return {
83
+ renderable,
84
+ pipeline,
85
+ update(context) {
86
+ uploadSystem(renderable, context);
87
+ },
88
+ draw(pass) {
89
+ return drawSystem(renderable, bindGroup, pass);
90
+ }
91
+ };
92
+ }
93
+ function uploadSystem(renderable, context) {
94
+ if (renderable._disposed) {
95
+ return;
96
+ }
97
+ refreshBillboardWorldCenter(renderable);
98
+ if (!renderable._system.visible || renderable._system.count === 0) {
99
+ if (renderable._system.count === 0) {
100
+ renderable._system._dirtyMin = 0;
101
+ renderable._system._dirtyMax = 0;
102
+ renderable._uploadedVersion = renderable._system._version;
103
+ renderable._uploadedSorted = false;
104
+ }
105
+ return;
106
+ }
107
+ if (renderable._fx) {
108
+ _getBillboardFxHook().updateFx(renderable._fx, renderable._system, renderable._engine._currentDelta);
109
+ }
110
+ const grown = ensureBillboardInstanceBuffer(
111
+ renderable._engine._device,
112
+ renderable._system,
113
+ renderable._instanceBuffer,
114
+ renderable._instanceBufferCapacity,
115
+ `${renderable._system._orientation}-billboard-instances`
116
+ );
117
+ if (grown.reallocated) {
118
+ renderable._instanceBuffer = grown.buffer;
119
+ renderable._instanceBufferCapacity = grown.capacity;
120
+ renderable._uploadedVersion = -1;
121
+ renderable._uploadedCamera = null;
122
+ renderable._uploadedCameraViewVersion = -1;
123
+ renderable._uploadedSorted = false;
124
+ }
125
+ const camera = context._camera;
126
+ if (renderable._system._depthMode === "transparent" && camera) {
127
+ const cameraViewMatrix = getViewMatrix(camera);
128
+ if (!renderable._uploadedSorted || renderable._uploadedVersion !== renderable._system._version || renderable._uploadedCamera !== camera || renderable._uploadedCameraViewVersion !== camera.worldMatrixVersion) {
129
+ uploadSortedBillboardInstances(renderable._engine._device, renderable._system, renderable._instanceBuffer, renderable._instanceSortScratch, cameraViewMatrix);
130
+ renderable._uploadedVersion = renderable._system._version;
131
+ renderable._uploadedCamera = camera;
132
+ renderable._uploadedCameraViewVersion = camera.worldMatrixVersion;
133
+ renderable._uploadedSorted = true;
134
+ }
135
+ } else {
136
+ const uploadedVersion = renderable._uploadedSorted ? -1 : renderable._uploadedVersion;
137
+ renderable._uploadedVersion = uploadBillboardInstances(renderable._engine._device, renderable._system, renderable._instanceBuffer, uploadedVersion);
138
+ renderable._uploadedCamera = null;
139
+ renderable._uploadedCameraViewVersion = -1;
140
+ renderable._uploadedSorted = false;
141
+ }
142
+ buildBillboardSystemUbo(renderable._system, renderable._scratchUbo);
143
+ writeBillboardSystemUboIfDirty(renderable._engine._device, renderable._uniformBuffer, renderable._scratchUbo, renderable._lastUbo, !renderable._uboUploaded);
144
+ renderable._uboUploaded = true;
145
+ }
146
+ function refreshBillboardWorldCenter(renderable) {
147
+ const system = renderable._system;
148
+ if (renderable._centerVersion === system._version) {
149
+ return;
150
+ }
151
+ const center = renderable._worldCenter;
152
+ if (system.count === 0) {
153
+ center[0] = 0;
154
+ center[1] = 0;
155
+ center[2] = 0;
156
+ renderable._drawableCount = 0;
157
+ renderable._centerVersion = system._version;
158
+ return;
159
+ }
160
+ const data = system._instanceData;
161
+ const stride = system._instanceFloatsPerSprite;
162
+ let minX = Infinity;
163
+ let minY = Infinity;
164
+ let minZ = Infinity;
165
+ let maxX = -Infinity;
166
+ let maxY = -Infinity;
167
+ let maxZ = -Infinity;
168
+ let drawableCount = 0;
169
+ for (let index = 0; index < system.count; index++) {
170
+ const base = index * stride;
171
+ const width = data[base + 3];
172
+ const height = data[base + 4];
173
+ if (width === 0 || height === 0) {
174
+ continue;
175
+ }
176
+ const x = data[base];
177
+ const y = data[base + 1];
178
+ const z = data[base + 2];
179
+ if (x < minX) {
180
+ minX = x;
181
+ }
182
+ if (y < minY) {
183
+ minY = y;
184
+ }
185
+ if (z < minZ) {
186
+ minZ = z;
187
+ }
188
+ if (x > maxX) {
189
+ maxX = x;
190
+ }
191
+ if (y > maxY) {
192
+ maxY = y;
193
+ }
194
+ if (z > maxZ) {
195
+ maxZ = z;
196
+ }
197
+ drawableCount++;
198
+ }
199
+ if (drawableCount === 0) {
200
+ center[0] = 0;
201
+ center[1] = 0;
202
+ center[2] = 0;
203
+ } else {
204
+ center[0] = (minX + maxX) * 0.5;
205
+ center[1] = (minY + maxY) * 0.5;
206
+ center[2] = (minZ + maxZ) * 0.5;
207
+ }
208
+ renderable._drawableCount = drawableCount;
209
+ renderable._centerVersion = system._version;
210
+ }
211
+ function drawSystem(renderable, bindGroup, pass) {
212
+ if (renderable._disposed) {
213
+ return 0;
214
+ }
215
+ refreshBillboardWorldCenter(renderable);
216
+ if (!renderable._system.visible || renderable._system.count === 0 || renderable._drawableCount === 0) {
217
+ return 0;
218
+ }
219
+ pass.setBindGroup(1, bindGroup);
220
+ pass.setIndexBuffer(renderable._indexBuffer, "uint16");
221
+ pass.setVertexBuffer(0, renderable._instanceBuffer);
222
+ pass.drawIndexed(6, renderable._system.count, 0, 0, 0);
223
+ return 1;
224
+ }
225
+ function disposeRenderable(renderable) {
226
+ if (renderable._disposed) {
227
+ return;
228
+ }
229
+ renderable._disposed = true;
230
+ renderable._instanceBuffer.destroy();
231
+ renderable._uniformBuffer.destroy();
232
+ renderable._indexBuffer.destroy();
233
+ if (renderable._fx) {
234
+ _getBillboardFxHook().disposeFx(renderable._fx);
235
+ }
236
+ renderable._bindGroups.clear();
237
+ releaseSharedPipelineCache();
238
+ }
239
+ export {
240
+ buildBillboardRenderable
241
+ };
242
+ //# sourceMappingURL=billboard-renderable-D8mlVGCd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billboard-renderable-D8mlVGCd.js","sources":["../src/sprite/billboard-renderable.ts"],"sourcesContent":["import type { EngineContext } from \"../engine/engine.js\";\nimport type { RenderTargetSignature } from \"../engine/render-target.js\";\nimport type { DrawBinding, DrawUpdateContext, Renderable } from \"../render/renderable.js\";\nimport type { Camera } from \"../camera/camera.js\";\nimport { getViewMatrix } from \"../camera/camera.js\";\nimport { getSceneBindGroupLayout } from \"../render/scene-helpers.js\";\nimport { createEmptyUniformBuffer, createMappedBuffer } from \"../resource/gpu-buffers.js\";\nimport type { SpriteLayerFx } from \"./custom-shader-core.js\";\nimport { _getBillboardFxHook } from \"./sprite-fx-hook.js\";\nimport type { BillboardSpriteSystem } from \"./billboard-sprite.js\";\nimport {\n BILLBOARD_INDEX_DATA,\n BILLBOARD_SYSTEM_UBO_BYTES,\n buildBillboardSystemUbo,\n createBillboardInstanceBuffer,\n createBillboardInstanceSortScratch,\n createBillboardPipelineCache,\n createBillboardSystemBindGroup,\n ensureBillboardInstanceBuffer,\n getOrCreateBillboardPipeline,\n resetBillboardPipelineCache,\n uploadBillboardInstances,\n uploadSortedBillboardInstances,\n writeBillboardSystemUboIfDirty,\n} from \"./billboard-pipeline.js\";\nimport type { BillboardInstanceSortScratch, BillboardPipelineCache } from \"./billboard-pipeline.js\";\n\nlet _sharedPipelineCache: BillboardPipelineCache | null = null;\nlet _sharedPipelineCacheRefs = 0;\n\nfunction acquireSharedPipelineCache(): BillboardPipelineCache {\n _sharedPipelineCache ??= createBillboardPipelineCache();\n _sharedPipelineCacheRefs++;\n return _sharedPipelineCache;\n}\n\nfunction releaseSharedPipelineCache(): void {\n if (_sharedPipelineCacheRefs === 0) {\n return;\n }\n _sharedPipelineCacheRefs--;\n if (_sharedPipelineCacheRefs === 0 && _sharedPipelineCache) {\n resetBillboardPipelineCache(_sharedPipelineCache);\n _sharedPipelineCache = null;\n }\n}\n\ninterface BillboardRenderableInternal extends Renderable {\n _engine: EngineContext;\n _system: BillboardSpriteSystem;\n _indexBuffer: GPUBuffer;\n _uniformBuffer: GPUBuffer;\n _instanceBuffer: GPUBuffer;\n _instanceBufferCapacity: number;\n _instanceSortScratch: BillboardInstanceSortScratch;\n _pipelineCache: BillboardPipelineCache;\n _bindGroups: Map<GPURenderPipeline, GPUBindGroup>;\n _uploadedVersion: number;\n _uploadedCamera: Camera | null;\n _uploadedCameraViewVersion: number;\n _uploadedSorted: boolean;\n _centerVersion: number;\n _drawableCount: number;\n _uboUploaded: boolean;\n _lastUbo: Float32Array;\n _scratchUbo: Float32Array;\n _fx: SpriteLayerFx | null;\n _disposed: boolean;\n}\n\nexport function buildBillboardRenderable(engine: EngineContext, system: BillboardSpriteSystem): { renderable: Renderable; dispose: () => void } {\n const indexBuffer = createMappedBuffer(engine, BILLBOARD_INDEX_DATA, GPUBufferUsage.INDEX);\n const uniformBuffer = createEmptyUniformBuffer(engine, BILLBOARD_SYSTEM_UBO_BYTES, `${system._orientation}-billboard-system-ubo`);\n const instanceBuffer = createBillboardInstanceBuffer(engine._device, system, `${system._orientation}-billboard-instances`);\n const fx = _getBillboardFxHook()?.createLayerFx(engine, `${system._orientation}-billboard-fx-ubo`, system) ?? null;\n const isTransparent = system._depthMode === \"transparent\";\n const renderable: BillboardRenderableInternal = {\n order: system.order,\n isTransparent,\n _direct: !isTransparent,\n _engine: engine,\n _system: system,\n _indexBuffer: indexBuffer,\n _uniformBuffer: uniformBuffer,\n _instanceBuffer: instanceBuffer,\n _instanceBufferCapacity: system._capacity,\n _instanceSortScratch: createBillboardInstanceSortScratch(),\n _pipelineCache: acquireSharedPipelineCache(),\n _bindGroups: new Map(),\n _uploadedVersion: -1,\n _uploadedCamera: null,\n _uploadedCameraViewVersion: -1,\n _uploadedSorted: false,\n _centerVersion: -1,\n _drawableCount: 0,\n _uboUploaded: false,\n _lastUbo: new Float32Array(BILLBOARD_SYSTEM_UBO_BYTES / 4),\n _scratchUbo: new Float32Array(BILLBOARD_SYSTEM_UBO_BYTES / 4),\n _fx: fx,\n _disposed: false,\n _worldCenter: [0, 0, 0],\n bind(engine, target) {\n return bindSystem(renderable, engine, target);\n },\n };\n refreshBillboardWorldCenter(renderable);\n return {\n renderable,\n dispose() {\n disposeRenderable(renderable);\n },\n };\n}\n\nfunction bindSystem(renderable: BillboardRenderableInternal, engine: EngineContext, target: RenderTargetSignature): DrawBinding {\n if (!target._depthStencilFormat) {\n throw new Error(\"BillboardSpriteSystem requires a depth-stencil render target.\");\n }\n const sampleCount = target._sampleCount === 1 ? 1 : 4;\n const pipeline = getOrCreateBillboardPipeline(\n engine,\n renderable._pipelineCache,\n target._colorFormat!,\n sampleCount,\n renderable._system,\n target._depthStencilFormat,\n getSceneBindGroupLayout(engine)\n );\n let bindGroup = renderable._bindGroups.get(pipeline);\n if (!bindGroup) {\n bindGroup = createBillboardSystemBindGroup(engine, pipeline, renderable._system, renderable._uniformBuffer, renderable._fx);\n renderable._bindGroups.set(pipeline, bindGroup);\n }\n return {\n renderable,\n pipeline,\n update(context) {\n uploadSystem(renderable, context);\n },\n draw(pass) {\n return drawSystem(renderable, bindGroup, pass);\n },\n };\n}\n\nfunction uploadSystem(renderable: BillboardRenderableInternal, context: DrawUpdateContext): void {\n if (renderable._disposed) {\n return;\n }\n refreshBillboardWorldCenter(renderable);\n if (!renderable._system.visible || renderable._system.count === 0) {\n if (renderable._system.count === 0) {\n renderable._system._dirtyMin = 0;\n renderable._system._dirtyMax = 0;\n renderable._uploadedVersion = renderable._system._version;\n renderable._uploadedSorted = false;\n }\n return;\n }\n // Match the pure-2D `SpriteRenderer` path: advance `fx.time` (and write the FX UBO) only for\n // visible, non-empty systems so time semantics stay consistent and we avoid wasted `writeBuffer` traffic.\n if (renderable._fx) {\n _getBillboardFxHook()!.updateFx(renderable._fx, renderable._system, renderable._engine._currentDelta);\n }\n const grown = ensureBillboardInstanceBuffer(\n renderable._engine._device,\n renderable._system,\n renderable._instanceBuffer,\n renderable._instanceBufferCapacity,\n `${renderable._system._orientation}-billboard-instances`\n );\n if (grown.reallocated) {\n renderable._instanceBuffer = grown.buffer;\n renderable._instanceBufferCapacity = grown.capacity;\n renderable._uploadedVersion = -1;\n renderable._uploadedCamera = null;\n renderable._uploadedCameraViewVersion = -1;\n renderable._uploadedSorted = false;\n }\n const camera = context._camera;\n if (renderable._system._depthMode === \"transparent\" && camera) {\n const cameraViewMatrix = getViewMatrix(camera);\n if (\n !renderable._uploadedSorted ||\n renderable._uploadedVersion !== renderable._system._version ||\n renderable._uploadedCamera !== camera ||\n renderable._uploadedCameraViewVersion !== camera.worldMatrixVersion\n ) {\n uploadSortedBillboardInstances(renderable._engine._device, renderable._system, renderable._instanceBuffer, renderable._instanceSortScratch, cameraViewMatrix);\n renderable._uploadedVersion = renderable._system._version;\n renderable._uploadedCamera = camera;\n renderable._uploadedCameraViewVersion = camera.worldMatrixVersion;\n renderable._uploadedSorted = true;\n }\n } else {\n const uploadedVersion = renderable._uploadedSorted ? -1 : renderable._uploadedVersion;\n renderable._uploadedVersion = uploadBillboardInstances(renderable._engine._device, renderable._system, renderable._instanceBuffer, uploadedVersion);\n renderable._uploadedCamera = null;\n renderable._uploadedCameraViewVersion = -1;\n renderable._uploadedSorted = false;\n }\n buildBillboardSystemUbo(renderable._system, renderable._scratchUbo);\n writeBillboardSystemUboIfDirty(renderable._engine._device, renderable._uniformBuffer, renderable._scratchUbo, renderable._lastUbo, !renderable._uboUploaded);\n renderable._uboUploaded = true;\n}\n\nfunction refreshBillboardWorldCenter(renderable: BillboardRenderableInternal): void {\n const system = renderable._system;\n if (renderable._centerVersion === system._version) {\n return;\n }\n const center = renderable._worldCenter!;\n if (system.count === 0) {\n center[0] = 0;\n center[1] = 0;\n center[2] = 0;\n renderable._drawableCount = 0;\n renderable._centerVersion = system._version;\n return;\n }\n const data = system._instanceData;\n const stride = system._instanceFloatsPerSprite;\n let minX = Infinity;\n let minY = Infinity;\n let minZ = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n let maxZ = -Infinity;\n let drawableCount = 0;\n for (let index = 0; index < system.count; index++) {\n const base = index * stride;\n const width = data[base + 3]!;\n const height = data[base + 4]!;\n if (width === 0 || height === 0) {\n continue;\n }\n const x = data[base]!;\n const y = data[base + 1]!;\n const z = data[base + 2]!;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (z < minZ) {\n minZ = z;\n }\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n if (z > maxZ) {\n maxZ = z;\n }\n drawableCount++;\n }\n if (drawableCount === 0) {\n center[0] = 0;\n center[1] = 0;\n center[2] = 0;\n } else {\n center[0] = (minX + maxX) * 0.5;\n center[1] = (minY + maxY) * 0.5;\n center[2] = (minZ + maxZ) * 0.5;\n }\n renderable._drawableCount = drawableCount;\n renderable._centerVersion = system._version;\n}\n\nfunction drawSystem(renderable: BillboardRenderableInternal, bindGroup: GPUBindGroup, pass: GPURenderPassEncoder | GPURenderBundleEncoder): number {\n if (renderable._disposed) {\n return 0;\n }\n refreshBillboardWorldCenter(renderable);\n if (!renderable._system.visible || renderable._system.count === 0 || renderable._drawableCount === 0) {\n return 0;\n }\n pass.setBindGroup(1, bindGroup);\n pass.setIndexBuffer(renderable._indexBuffer, \"uint16\");\n pass.setVertexBuffer(0, renderable._instanceBuffer);\n pass.drawIndexed(6, renderable._system.count, 0, 0, 0);\n return 1;\n}\n\nfunction disposeRenderable(renderable: BillboardRenderableInternal): void {\n if (renderable._disposed) {\n return;\n }\n renderable._disposed = true;\n renderable._instanceBuffer.destroy();\n renderable._uniformBuffer.destroy();\n renderable._indexBuffer.destroy();\n if (renderable._fx) {\n _getBillboardFxHook()!.disposeFx(renderable._fx);\n }\n renderable._bindGroups.clear();\n releaseSharedPipelineCache();\n}\n"],"names":["engine"],"mappings":"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"}