@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,51 @@
1
+ const SPLIT_OUTPUT = {
2
+ row0: { expr: (input) => `(${input})[0]`, type: "vec4f" },
3
+ row1: { expr: (input) => `(${input})[1]`, type: "vec4f" },
4
+ row2: { expr: (input) => `(${input})[2]`, type: "vec4f" },
5
+ row3: { expr: (input) => `(${input})[3]`, type: "vec4f" },
6
+ col0: { expr: (input) => `vec4<f32>((${input})[0][0], (${input})[1][0], (${input})[2][0], (${input})[3][0])`, type: "vec4f" },
7
+ col1: { expr: (input) => `vec4<f32>((${input})[0][1], (${input})[1][1], (${input})[2][1], (${input})[3][1])`, type: "vec4f" },
8
+ col2: { expr: (input) => `vec4<f32>((${input})[0][2], (${input})[1][2], (${input})[2][2], (${input})[3][2])`, type: "vec4f" },
9
+ col3: { expr: (input) => `vec4<f32>((${input})[0][3], (${input})[1][3], (${input})[2][3], (${input})[3][3])`, type: "vec4f" }
10
+ };
11
+ function optionalVec4(block, inputName, fallback, stage, state, ctx) {
12
+ const input = block.inputs.get(inputName);
13
+ if (!(input == null ? void 0 : input.source)) {
14
+ return fallback;
15
+ }
16
+ return ctx.cast(ctx.resolve(block, inputName, stage, state), "vec4f").expr;
17
+ }
18
+ function emitMatrixBuilder(block, stage, state, ctx) {
19
+ const row0 = optionalVec4(block, "row0", "vec4<f32>(1.0, 0.0, 0.0, 0.0)", stage, state, ctx);
20
+ const row1 = optionalVec4(block, "row1", "vec4<f32>(0.0, 1.0, 0.0, 0.0)", stage, state, ctx);
21
+ const row2 = optionalVec4(block, "row2", "vec4<f32>(0.0, 0.0, 1.0, 0.0)", stage, state, ctx);
22
+ const row3 = optionalVec4(block, "row3", "vec4<f32>(0.0, 0.0, 0.0, 1.0)", stage, state, ctx);
23
+ return { expr: `mat4x4<f32>(${row0}, ${row1}, ${row2}, ${row3})`, type: "mat4f" };
24
+ }
25
+ const emitter = {
26
+ className: "MatrixBlocks",
27
+ emit(block, outputName, stage, state, ctx) {
28
+ if (block.className === "MatrixBuilder") {
29
+ return emitMatrixBuilder(block, stage, state, ctx);
30
+ }
31
+ const input = ctx.cast(ctx.resolve(block, "input", stage, state), "mat4f");
32
+ if (block.className === "MatrixTransposeBlock") {
33
+ return { expr: `transpose(${input.expr})`, type: "mat4f" };
34
+ }
35
+ if (block.className === "MatrixDeterminantBlock") {
36
+ return { expr: `determinant(${input.expr})`, type: "f32" };
37
+ }
38
+ if (block.className === "MatrixSplitterBlock") {
39
+ const output = SPLIT_OUTPUT[outputName];
40
+ if (!output) {
41
+ throw new Error(`NodeMaterial: MatrixSplitterBlock has no output "${outputName}"`);
42
+ }
43
+ return { expr: output.expr(input.expr), type: output.type };
44
+ }
45
+ throw new Error(`NodeMaterial: unsupported matrix block "${block.className}"`);
46
+ }
47
+ };
48
+ export {
49
+ emitter
50
+ };
51
+ //# sourceMappingURL=matrix-blocks-acWn_V6g.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrix-blocks-acWn_V6g.js","sources":["../src/material/node/blocks/matrix-blocks.ts"],"sourcesContent":["/** Matrix operation emitters.\n *\n * Supports MatrixBuilder, MatrixSplitterBlock, MatrixTransposeBlock, and\n * MatrixDeterminantBlock. Babylon.js' WGSL MatrixBuilder path emits\n * `mat4x4f(row0, row1, row2, row3)`; WGSL matrix constructors take column\n * vectors, so Lite follows that exact constructor ordering.\n */\n\nimport type { BlockEmitter, NodeBlock, NodeBuildState, NodeEmitContext, NodeExpr, NodeValueType, Stage } from \"../node-types.js\";\n\nconst SPLIT_OUTPUT: Record<string, { readonly expr: (input: string) => string; readonly type: NodeValueType }> = {\n row0: { expr: (input) => `(${input})[0]`, type: \"vec4f\" },\n row1: { expr: (input) => `(${input})[1]`, type: \"vec4f\" },\n row2: { expr: (input) => `(${input})[2]`, type: \"vec4f\" },\n row3: { expr: (input) => `(${input})[3]`, type: \"vec4f\" },\n col0: { expr: (input) => `vec4<f32>((${input})[0][0], (${input})[1][0], (${input})[2][0], (${input})[3][0])`, type: \"vec4f\" },\n col1: { expr: (input) => `vec4<f32>((${input})[0][1], (${input})[1][1], (${input})[2][1], (${input})[3][1])`, type: \"vec4f\" },\n col2: { expr: (input) => `vec4<f32>((${input})[0][2], (${input})[1][2], (${input})[2][2], (${input})[3][2])`, type: \"vec4f\" },\n col3: { expr: (input) => `vec4<f32>((${input})[0][3], (${input})[1][3], (${input})[2][3], (${input})[3][3])`, type: \"vec4f\" },\n};\n\nfunction optionalVec4(block: NodeBlock, inputName: string, fallback: string, stage: Stage, state: NodeBuildState, ctx: NodeEmitContext): string {\n const input = block.inputs.get(inputName);\n if (!input?.source) {\n return fallback;\n }\n return ctx.cast(ctx.resolve(block, inputName, stage, state), \"vec4f\").expr;\n}\n\nfunction emitMatrixBuilder(block: NodeBlock, stage: Stage, state: NodeBuildState, ctx: NodeEmitContext): NodeExpr {\n const row0 = optionalVec4(block, \"row0\", \"vec4<f32>(1.0, 0.0, 0.0, 0.0)\", stage, state, ctx);\n const row1 = optionalVec4(block, \"row1\", \"vec4<f32>(0.0, 1.0, 0.0, 0.0)\", stage, state, ctx);\n const row2 = optionalVec4(block, \"row2\", \"vec4<f32>(0.0, 0.0, 1.0, 0.0)\", stage, state, ctx);\n const row3 = optionalVec4(block, \"row3\", \"vec4<f32>(0.0, 0.0, 0.0, 1.0)\", stage, state, ctx);\n return { expr: `mat4x4<f32>(${row0}, ${row1}, ${row2}, ${row3})`, type: \"mat4f\" };\n}\n\nexport const emitter: BlockEmitter = {\n className: \"MatrixBlocks\",\n emit(block, outputName, stage, state, ctx) {\n if (block.className === \"MatrixBuilder\") {\n return emitMatrixBuilder(block, stage, state, ctx);\n }\n const input = ctx.cast(ctx.resolve(block, \"input\", stage, state), \"mat4f\");\n if (block.className === \"MatrixTransposeBlock\") {\n return { expr: `transpose(${input.expr})`, type: \"mat4f\" };\n }\n if (block.className === \"MatrixDeterminantBlock\") {\n return { expr: `determinant(${input.expr})`, type: \"f32\" };\n }\n if (block.className === \"MatrixSplitterBlock\") {\n const output = SPLIT_OUTPUT[outputName];\n if (!output) {\n throw new Error(`NodeMaterial: MatrixSplitterBlock has no output \"${outputName}\"`);\n }\n return { expr: output.expr(input.expr), type: output.type };\n }\n throw new Error(`NodeMaterial: unsupported matrix block \"${block.className}\"`);\n },\n};\n"],"names":[],"mappings":"AAUA,MAAM,eAA2G;AAAA,EAC7G,MAAM,EAAE,MAAM,CAAC,UAAU,IAAI,KAAK,QAAQ,MAAM,QAAA;AAAA,EAChD,MAAM,EAAE,MAAM,CAAC,UAAU,IAAI,KAAK,QAAQ,MAAM,QAAA;AAAA,EAChD,MAAM,EAAE,MAAM,CAAC,UAAU,IAAI,KAAK,QAAQ,MAAM,QAAA;AAAA,EAChD,MAAM,EAAE,MAAM,CAAC,UAAU,IAAI,KAAK,QAAQ,MAAM,QAAA;AAAA,EAChD,MAAM,EAAE,MAAM,CAAC,UAAU,cAAc,KAAK,aAAa,KAAK,aAAa,KAAK,aAAa,KAAK,YAAY,MAAM,QAAA;AAAA,EACpH,MAAM,EAAE,MAAM,CAAC,UAAU,cAAc,KAAK,aAAa,KAAK,aAAa,KAAK,aAAa,KAAK,YAAY,MAAM,QAAA;AAAA,EACpH,MAAM,EAAE,MAAM,CAAC,UAAU,cAAc,KAAK,aAAa,KAAK,aAAa,KAAK,aAAa,KAAK,YAAY,MAAM,QAAA;AAAA,EACpH,MAAM,EAAE,MAAM,CAAC,UAAU,cAAc,KAAK,aAAa,KAAK,aAAa,KAAK,aAAa,KAAK,YAAY,MAAM,QAAA;AACxH;AAEA,SAAS,aAAa,OAAkB,WAAmB,UAAkB,OAAc,OAAuB,KAA8B;AAC5I,QAAM,QAAQ,MAAM,OAAO,IAAI,SAAS;AACxC,MAAI,EAAC,+BAAO,SAAQ;AAChB,WAAO;AAAA,EACX;AACA,SAAO,IAAI,KAAK,IAAI,QAAQ,OAAO,WAAW,OAAO,KAAK,GAAG,OAAO,EAAE;AAC1E;AAEA,SAAS,kBAAkB,OAAkB,OAAc,OAAuB,KAAgC;AAC9G,QAAM,OAAO,aAAa,OAAO,QAAQ,iCAAiC,OAAO,OAAO,GAAG;AAC3F,QAAM,OAAO,aAAa,OAAO,QAAQ,iCAAiC,OAAO,OAAO,GAAG;AAC3F,QAAM,OAAO,aAAa,OAAO,QAAQ,iCAAiC,OAAO,OAAO,GAAG;AAC3F,QAAM,OAAO,aAAa,OAAO,QAAQ,iCAAiC,OAAO,OAAO,GAAG;AAC3F,SAAO,EAAE,MAAM,eAAe,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,QAAA;AAC5E;AAEO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,KAAK,OAAO,YAAY,OAAO,OAAO,KAAK;AACvC,QAAI,MAAM,cAAc,iBAAiB;AACrC,aAAO,kBAAkB,OAAO,OAAO,OAAO,GAAG;AAAA,IACrD;AACA,UAAM,QAAQ,IAAI,KAAK,IAAI,QAAQ,OAAO,SAAS,OAAO,KAAK,GAAG,OAAO;AACzE,QAAI,MAAM,cAAc,wBAAwB;AAC5C,aAAO,EAAE,MAAM,aAAa,MAAM,IAAI,KAAK,MAAM,QAAA;AAAA,IACrD;AACA,QAAI,MAAM,cAAc,0BAA0B;AAC9C,aAAO,EAAE,MAAM,eAAe,MAAM,IAAI,KAAK,MAAM,MAAA;AAAA,IACvD;AACA,QAAI,MAAM,cAAc,uBAAuB;AAC3C,YAAM,SAAS,aAAa,UAAU;AACtC,UAAI,CAAC,QAAQ;AACT,cAAM,IAAI,MAAM,oDAAoD,UAAU,GAAG;AAAA,MACrF;AACA,aAAO,EAAE,MAAM,OAAO,KAAK,MAAM,IAAI,GAAG,MAAM,OAAO,KAAA;AAAA,IACzD;AACA,UAAM,IAAI,MAAM,2CAA2C,MAAM,SAAS,GAAG;AAAA,EACjF;AACJ;"}
@@ -0,0 +1,6 @@
1
+ import { b as binaryEmitter } from "./_math-factory-C-QqW-Wi.js";
2
+ const emitter = binaryEmitter("MaxBlock", (l, r) => `max(${l}, ${r})`);
3
+ export {
4
+ emitter
5
+ };
6
+ //# sourceMappingURL=max-block-CjFgljZ7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"max-block-CjFgljZ7.js","sources":["../src/material/node/blocks/max-block.ts"],"sourcesContent":["import { binaryEmitter } from \"./_math-factory.js\";\nexport const emitter = binaryEmitter(\"MaxBlock\", (l, r) => `max(${l}, ${r})`);\n"],"names":[],"mappings":";AACO,MAAM,UAAU,cAAc,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG;"}
@@ -0,0 +1,44 @@
1
+ function attributeFlag(attributeType) {
2
+ switch (attributeType) {
3
+ case 1:
4
+ return "1.0";
5
+ case 2:
6
+ return "meshU.receivesShadow.z";
7
+ case 3:
8
+ return "meshU.receivesShadow.w";
9
+ case 4:
10
+ return "meshU.receivesShadow.y";
11
+ case 5:
12
+ return "0.0";
13
+ case 6:
14
+ // UV3
15
+ case 7:
16
+ // UV4
17
+ case 8:
18
+ // UV5
19
+ case 9:
20
+ return "0.0";
21
+ default:
22
+ return null;
23
+ }
24
+ }
25
+ const emitter = {
26
+ className: "MeshAttributeExistsBlock",
27
+ emit(block, _outputName, stage, state, ctx) {
28
+ state.usesMeshAttributeExists = true;
29
+ const input = ctx.resolve(block, "input", stage, state);
30
+ const flag = attributeFlag(block.serialized["attributeType"] ?? 0);
31
+ if (flag === null) {
32
+ return input;
33
+ }
34
+ const fallback = ctx.cast(ctx.resolve(block, "fallback", stage, state), input.type);
35
+ const expr = ctx.temp(state, "attr");
36
+ const s = stage === "vertex" ? state.vertex : state.fragment;
37
+ s.body.push(`let ${expr} = select(${fallback.expr}, ${input.expr}, ${flag} > 0.5);`);
38
+ return { expr, type: input.type };
39
+ }
40
+ };
41
+ export {
42
+ emitter
43
+ };
44
+ //# sourceMappingURL=mesh-attribute-exists-block-BfK8UiSL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-attribute-exists-block-BfK8UiSL.js","sources":["../src/material/node/blocks/mesh-attribute-exists-block.ts"],"sourcesContent":["/** MeshAttributeExistsBlock — per-mesh attribute branch.\n *\n * Babylon.js emits preprocessor branches based on the mesh attribute defines\n * (`UV1`, `TANGENT`, `VERTEXCOLOR_NME`, ...). Babylon Lite batches meshes that\n * share the same NME pipeline, so the equivalent decision is a per-mesh uniform\n * flag written beside the world matrix. Missing attributes still bind zero\n * buffers to satisfy the pipeline layout, but this block selects the serialized\n * fallback value when the real mesh attribute is absent.\n */\n\nimport type { BlockEmitter, NodeExpr } from \"../node-types.js\";\n\nfunction attributeFlag(attributeType: number): string | null {\n switch (attributeType) {\n case 1: // Normal\n return \"1.0\";\n case 2: // Tangent\n return \"meshU.receivesShadow.z\";\n case 3: // VertexColor\n return \"meshU.receivesShadow.w\";\n case 4: // UV1\n return \"meshU.receivesShadow.y\";\n case 5: // UV2\n return \"0.0\";\n case 6: // UV3\n case 7: // UV4\n case 8: // UV5\n case 9: // UV6\n return \"0.0\";\n default:\n return null;\n }\n}\n\nexport const emitter: BlockEmitter = {\n className: \"MeshAttributeExistsBlock\",\n emit(block, _outputName, stage, state, ctx) {\n state.usesMeshAttributeExists = true;\n const input = ctx.resolve(block, \"input\", stage, state);\n const flag = attributeFlag((block.serialized[\"attributeType\"] as number | undefined) ?? 0);\n if (flag === null) {\n return input;\n }\n const fallback = ctx.cast(ctx.resolve(block, \"fallback\", stage, state), input.type);\n const expr = ctx.temp(state, \"attr\");\n const s = stage === \"vertex\" ? state.vertex : state.fragment;\n s.body.push(`let ${expr} = select(${fallback.expr}, ${input.expr}, ${flag} > 0.5);`);\n return { expr, type: input.type } as NodeExpr;\n },\n};\n"],"names":[],"mappings":"AAYA,SAAS,cAAc,eAAsC;AACzD,UAAQ,eAAA;AAAA,IACJ,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AAAA;AAAA,IACL,KAAK;AAAA;AAAA,IACL,KAAK;AAAA;AAAA,IACL,KAAK;AACD,aAAO;AAAA,IACX;AACI,aAAO;AAAA,EAAA;AAEnB;AAEO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,KAAK,OAAO,aAAa,OAAO,OAAO,KAAK;AACxC,UAAM,0BAA0B;AAChC,UAAM,QAAQ,IAAI,QAAQ,OAAO,SAAS,OAAO,KAAK;AACtD,UAAM,OAAO,cAAe,MAAM,WAAW,eAAe,KAA4B,CAAC;AACzF,QAAI,SAAS,MAAM;AACf,aAAO;AAAA,IACX;AACA,UAAM,WAAW,IAAI,KAAK,IAAI,QAAQ,OAAO,YAAY,OAAO,KAAK,GAAG,MAAM,IAAI;AAClF,UAAM,OAAO,IAAI,KAAK,OAAO,MAAM;AACnC,UAAM,IAAI,UAAU,WAAW,MAAM,SAAS,MAAM;AACpD,MAAE,KAAK,KAAK,OAAO,IAAI,aAAa,SAAS,IAAI,KAAK,MAAM,IAAI,KAAK,IAAI,UAAU;AACnF,WAAO,EAAE,MAAM,MAAM,MAAM,KAAA;AAAA,EAC/B;AACJ;"}
@@ -0,0 +1,341 @@
1
+ import { aV as computeUboLayout, aW as SCENE_UBO_WGSL } from "./index-C8HOR2sB.js";
2
+ const STAGE_VERTEX = 1;
3
+ const STAGE_FRAGMENT = 2;
4
+ function topoSort(fragments) {
5
+ const byId = /* @__PURE__ */ new Map();
6
+ for (const f of fragments) {
7
+ if (byId.has(f._id)) {
8
+ throw Error();
9
+ }
10
+ byId.set(f._id, f);
11
+ }
12
+ const inDeg = /* @__PURE__ */ new Map();
13
+ const deps = /* @__PURE__ */ new Map();
14
+ for (const f of fragments) {
15
+ if (!inDeg.has(f._id)) {
16
+ inDeg.set(f._id, 0);
17
+ }
18
+ for (const d of f._dependencies ?? []) {
19
+ if (!byId.has(d)) {
20
+ throw Error();
21
+ }
22
+ inDeg.set(f._id, (inDeg.get(f._id) ?? 0) + 1);
23
+ let arr = deps.get(d);
24
+ if (!arr) {
25
+ arr = [];
26
+ deps.set(d, arr);
27
+ }
28
+ arr.push(f._id);
29
+ }
30
+ }
31
+ const q = [];
32
+ for (const [id, d] of inDeg) {
33
+ if (d === 0) {
34
+ q.push(id);
35
+ }
36
+ }
37
+ q.sort();
38
+ const out = [];
39
+ let qi = 0;
40
+ while (qi < q.length) {
41
+ const id = q[qi++];
42
+ out.push(byId.get(id));
43
+ for (const d of deps.get(id) ?? []) {
44
+ const nd = (inDeg.get(d) ?? 1) - 1;
45
+ inDeg.set(d, nd);
46
+ if (nd === 0) {
47
+ let i = qi;
48
+ while (i < q.length && q[i] < d) {
49
+ i++;
50
+ }
51
+ q.splice(i, 0, d);
52
+ }
53
+ }
54
+ }
55
+ if (out.length !== fragments.length) {
56
+ throw Error();
57
+ }
58
+ return out;
59
+ }
60
+ function dedup(base, extra) {
61
+ const seen = /* @__PURE__ */ new Set();
62
+ const all = [];
63
+ for (const v of base) {
64
+ if (!seen.has(v._name)) {
65
+ seen.add(v._name);
66
+ all.push(v);
67
+ }
68
+ }
69
+ for (const v of extra) {
70
+ if (!seen.has(v._name)) {
71
+ seen.add(v._name);
72
+ all.push(v);
73
+ }
74
+ }
75
+ return all;
76
+ }
77
+ function bglEntry(binding, decl) {
78
+ const e = { binding, visibility: decl._visibility };
79
+ switch (decl._type._kind) {
80
+ case "uniform-buffer":
81
+ e.buffer = { type: "uniform" };
82
+ break;
83
+ case "texture": {
84
+ const def = decl._type._textureType === "texture_depth_2d" ? "depth" : decl._type._textureType === "texture_2d<u32>" ? "uint" : "float";
85
+ e.texture = { sampleType: decl._type._sampleType ?? def, viewDimension: decl._type._textureType.includes("cube") ? "cube" : "2d" };
86
+ break;
87
+ }
88
+ case "sampler":
89
+ e.sampler = {
90
+ type: decl._type._samplerType === "sampler_comparison" ? "comparison" : decl._type._samplerType === "sampler_non_filtering" ? "non-filtering" : "filtering"
91
+ };
92
+ break;
93
+ case "storage-texture":
94
+ e.storageTexture = { access: decl._type._access, format: decl._type._format };
95
+ break;
96
+ }
97
+ return e;
98
+ }
99
+ function declWGSL(g, b, d) {
100
+ switch (d._type._kind) {
101
+ case "uniform-buffer":
102
+ return `@group(${g})@binding(${b}) var<uniform> ${d._name}:${d._name}Uniforms;`;
103
+ case "texture":
104
+ return `@group(${g})@binding(${b}) var ${d._name}:${d._type._textureType};`;
105
+ case "sampler":
106
+ return `@group(${g})@binding(${b}) var ${d._name}:${d._type._samplerType === "sampler_non_filtering" ? "sampler" : d._type._samplerType};`;
107
+ case "storage-texture":
108
+ return `@group(${g})@binding(${b}) var ${d._name}:texture_storage_2d<${d._type._format},${d._type._access}>;`;
109
+ }
110
+ }
111
+ const SLOT_RE = /\/\*([A-Z_0-9]+)\*\//g;
112
+ function injectSlots(tpl, sorted, key) {
113
+ return tpl.replace(SLOT_RE, (_, slot) => {
114
+ const parts = [];
115
+ for (const f of sorted) {
116
+ const s = f[key];
117
+ if (s == null ? void 0 : s[slot]) {
118
+ parts.push(s[slot]);
119
+ }
120
+ }
121
+ return parts.join("\n");
122
+ });
123
+ }
124
+ function composeShader(template, fragments) {
125
+ var _a;
126
+ const sorted = topoSort(fragments);
127
+ const fragAttrs = [];
128
+ const fragVaryings = [];
129
+ const helpers = [];
130
+ const vHelpers = [];
131
+ const vBuiltins = [];
132
+ for (const f of sorted) {
133
+ if (f._vertexAttributes) {
134
+ fragAttrs.push(...f._vertexAttributes);
135
+ }
136
+ if (f._varyings) {
137
+ fragVaryings.push(...f._varyings);
138
+ }
139
+ if (f._helperFunctions) {
140
+ helpers.push(f._helperFunctions);
141
+ }
142
+ if (f._vertexHelperFunctions) {
143
+ vHelpers.push(f._vertexHelperFunctions);
144
+ }
145
+ for (const b of f._vertexBuiltins ?? []) {
146
+ vBuiltins.push(`@builtin(${b._builtin}) ${b._name}:${b._type},`);
147
+ }
148
+ }
149
+ const allAttrs = dedup(template._baseVertexAttributes, fragAttrs);
150
+ const inputLines = [];
151
+ const _vertexBufferLayouts = [];
152
+ const groups = /* @__PURE__ */ new Map();
153
+ const firstOfGroup = /* @__PURE__ */ new Map();
154
+ for (let i = 0; i < allAttrs.length; i++) {
155
+ const a = allAttrs[i];
156
+ inputLines.push(`@location(${i}) ${a._name}:${a._type},`);
157
+ if (a._bufferGroup) {
158
+ if (!groups.has(a._bufferGroup)) {
159
+ groups.set(a._bufferGroup, []);
160
+ firstOfGroup.set(a._bufferGroup, a);
161
+ }
162
+ groups.get(a._bufferGroup).push({ loc: i, off: a._offset ?? 0, fmt: a._gpuFormat });
163
+ } else {
164
+ _vertexBufferLayouts.push({
165
+ arrayStride: a._arrayStride,
166
+ stepMode: a._stepMode ?? "vertex",
167
+ attributes: [{ shaderLocation: i, offset: a._offset ?? 0, format: a._gpuFormat }]
168
+ });
169
+ }
170
+ }
171
+ for (const [grp, attrs] of groups) {
172
+ const f = firstOfGroup.get(grp);
173
+ _vertexBufferLayouts.push({
174
+ arrayStride: f._arrayStride,
175
+ stepMode: f._stepMode ?? "vertex",
176
+ attributes: attrs.map((a) => ({ shaderLocation: a.loc, offset: a.off, format: a.fmt }))
177
+ });
178
+ }
179
+ let nextLoc = allAttrs.length;
180
+ for (const f of sorted) {
181
+ if (f._pipelineVertexBuffers) {
182
+ const r = f._pipelineVertexBuffers(nextLoc);
183
+ _vertexBufferLayouts.push(...r._buffers);
184
+ nextLoc = r._nextLoc;
185
+ }
186
+ }
187
+ const allVary = dedup(template._baseVaryings, fragVaryings);
188
+ const varyBody = `@builtin(position) clipPos:vec4f,
189
+ ` + allVary.map((v, i) => `@location(${i}) ${v._name}:${v._type},`).join("\n");
190
+ const hasMaterialUbo = !!(template._baseMaterialUboFields && template._baseMaterialUboFields.length > 0);
191
+ const meshFields = [...template._baseMeshUboFields];
192
+ const materialFields = hasMaterialUbo ? [...template._baseMaterialUboFields] : [];
193
+ for (const f of sorted) {
194
+ if ((_a = f._uboFields) == null ? void 0 : _a.length) {
195
+ (hasMaterialUbo ? materialFields : meshFields).push(...f._uboFields);
196
+ }
197
+ }
198
+ const _meshUboSpec = computeUboLayout(meshFields);
199
+ const _materialUboSpec = hasMaterialUbo ? computeUboLayout(materialFields) : void 0;
200
+ const meshBGL = [{ binding: 0, visibility: STAGE_VERTEX | STAGE_FRAGMENT, buffer: { type: "uniform" } }];
201
+ if (hasMaterialUbo) {
202
+ meshBGL.push({ binding: 1, visibility: STAGE_FRAGMENT, buffer: { type: "uniform" } });
203
+ }
204
+ const shadowBGL = [];
205
+ const vDecls = [];
206
+ const fDecls = [];
207
+ let mb = hasMaterialUbo ? 2 : 1, sb = 0;
208
+ function addBinding(d, _isVertex) {
209
+ const isShadow = d._group === "shadow";
210
+ const b = isShadow ? sb++ : mb++;
211
+ const g = isShadow ? 2 : 1;
212
+ (isShadow ? shadowBGL : meshBGL).push(bglEntry(b, d));
213
+ const w = declWGSL(g, b, d);
214
+ if (d._visibility & STAGE_VERTEX) {
215
+ vDecls.push(w);
216
+ }
217
+ if (d._visibility & STAGE_FRAGMENT) {
218
+ fDecls.push(w);
219
+ }
220
+ }
221
+ for (const d of template._baseVertexBindings ?? []) {
222
+ addBinding(d);
223
+ }
224
+ for (const f of sorted) {
225
+ for (const d of f._vertexBindings ?? []) {
226
+ addBinding(d);
227
+ }
228
+ }
229
+ for (const d of template._baseBindings ?? []) {
230
+ addBinding(d);
231
+ }
232
+ for (const f of sorted) {
233
+ for (const d of (f._bindings ?? []).filter((b) => (b._group ?? "mesh") === "mesh")) {
234
+ addBinding(d);
235
+ }
236
+ }
237
+ for (const f of sorted) {
238
+ for (const d of (f._bindings ?? []).filter((b) => b._group === "shadow")) {
239
+ addBinding(d);
240
+ }
241
+ }
242
+ const _fragmentKey = sorted.map((f) => f._id).join("|");
243
+ const vParams = (vBuiltins.length ? vBuiltins.join("\n") + "\n" : "") + inputLines.join("\n");
244
+ const meshStruct = `struct MeshUniforms{
245
+ ${_meshUboSpec._structBody}
246
+ }`;
247
+ const materialStruct = _materialUboSpec ? `
248
+ struct MaterialUniforms{
249
+ ${_materialUboSpec._structBody}
250
+ }
251
+ @group(1)@binding(1) var<uniform> material:MaterialUniforms;` : "";
252
+ let _vertexWGSL = template._vertexTemplate;
253
+ _vertexWGSL = _vertexWGSL.replace("/*SU*/", SCENE_UBO_WGSL);
254
+ _vertexWGSL = _vertexWGSL.replace("/*MU*/", meshStruct);
255
+ _vertexWGSL = _vertexWGSL.replace("/*VI*/", `struct VertexInput{
256
+ ${inputLines.join("\n")}
257
+ }`);
258
+ _vertexWGSL = _vertexWGSL.replace("/*VO*/", `struct VertexOutput{
259
+ ${varyBody}
260
+ }`);
261
+ _vertexWGSL = _vertexWGSL.replace("/*VD*/", vDecls.join("\n"));
262
+ _vertexWGSL = _vertexWGSL.replace("/*VP*/", vParams);
263
+ _vertexWGSL = _vertexWGSL.replace("/*VH*/", vHelpers.join("\n"));
264
+ _vertexWGSL = injectSlots(_vertexWGSL, sorted, "_vertexSlots");
265
+ let _fragmentWGSL = template._fragmentTemplate;
266
+ _fragmentWGSL = _fragmentWGSL.replace("/*SU*/", SCENE_UBO_WGSL);
267
+ _fragmentWGSL = _fragmentWGSL.replace("/*MU*/", meshStruct + materialStruct);
268
+ _fragmentWGSL = _fragmentWGSL.replace("/*FI*/", `struct FragmentInput{
269
+ ${varyBody}
270
+ }`);
271
+ _fragmentWGSL = _fragmentWGSL.replace("/*HF*/", helpers.join("\n"));
272
+ _fragmentWGSL = _fragmentWGSL.replace("/*FB*/", fDecls.join("\n"));
273
+ _fragmentWGSL = injectSlots(_fragmentWGSL, sorted, "_fragmentSlots");
274
+ const _meshBGLDescriptor = { entries: meshBGL };
275
+ const _shadowBGLDescriptor = shadowBGL.length ? { entries: shadowBGL } : null;
276
+ return {
277
+ _vertexWGSL,
278
+ _fragmentWGSL,
279
+ _meshBGLDescriptor,
280
+ _shadowBGLDescriptor,
281
+ _vertexBufferLayouts,
282
+ _meshUboSpec,
283
+ _materialUboSpec,
284
+ _fragmentKey
285
+ };
286
+ }
287
+ const MSH_HAS_TANGENTS = 1 << 0;
288
+ const MSH_HAS_SKELETON = 1 << 1;
289
+ const MSH_HAS_SKELETON_8 = 1 << 2;
290
+ const MSH_HAS_MORPH_TARGETS = 1 << 3;
291
+ const MSH_HAS_THIN_INSTANCES = 1 << 4;
292
+ const MSH_HAS_INSTANCE_COLOR = 1 << 5;
293
+ const MSH_HAS_VERTEX_COLOR = 1 << 6;
294
+ const MSH_HAS_UV2 = 1 << 7;
295
+ const MSH_RECEIVE_SHADOWS = 1 << 8;
296
+ function _computeMeshFeatures(mesh, receiveShadows = false) {
297
+ const gpu = mesh._gpu;
298
+ let features = 0;
299
+ if (gpu.tangentBuffer) {
300
+ features |= MSH_HAS_TANGENTS;
301
+ }
302
+ if (mesh.skeleton) {
303
+ features |= MSH_HAS_SKELETON;
304
+ if (mesh.skeleton.joints1Buffer) {
305
+ features |= MSH_HAS_SKELETON_8;
306
+ }
307
+ }
308
+ if (mesh.morphTargets) {
309
+ features |= MSH_HAS_MORPH_TARGETS;
310
+ }
311
+ if (mesh.thinInstances) {
312
+ features |= MSH_HAS_THIN_INSTANCES;
313
+ if (mesh.thinInstances.colors) {
314
+ features |= MSH_HAS_INSTANCE_COLOR;
315
+ }
316
+ }
317
+ if (gpu.colorBuffer) {
318
+ features |= MSH_HAS_VERTEX_COLOR;
319
+ }
320
+ if (gpu.uv2Buffer) {
321
+ features |= MSH_HAS_UV2;
322
+ }
323
+ if (receiveShadows) {
324
+ features |= MSH_RECEIVE_SHADOWS;
325
+ }
326
+ return features;
327
+ }
328
+ export {
329
+ MSH_HAS_SKELETON as M,
330
+ _computeMeshFeatures as _,
331
+ MSH_HAS_SKELETON_8 as a,
332
+ MSH_HAS_MORPH_TARGETS as b,
333
+ MSH_HAS_UV2 as c,
334
+ MSH_HAS_TANGENTS as d,
335
+ composeShader as e,
336
+ MSH_RECEIVE_SHADOWS as f,
337
+ MSH_HAS_THIN_INSTANCES as g,
338
+ MSH_HAS_VERTEX_COLOR as h,
339
+ MSH_HAS_INSTANCE_COLOR as i
340
+ };
341
+ //# sourceMappingURL=mesh-features-BLENkYVt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-features-BLENkYVt.js","sources":["../src/shader/shader-composer.ts","../src/material/mesh-features.ts"],"sourcesContent":["/**\n * Shader Composer — assembles ShaderFragment[] + ShaderTemplate into\n * final WGSL source + GPU layout descriptors. Pure function, no global state.\n * All shader text comes from template + fragment modules.\n */\nimport type { BindingDecl, ComposedShader, FragmentSlot, ShaderFragment, ShaderTemplate, VertexAttribute, VertexSlot, Varying } from \"./fragment-types.js\";\nimport { computeUboLayout } from \"./ubo-layout.js\";\nimport { SCENE_UBO_WGSL } from \"./scene-uniforms.js\";\n\nconst STAGE_VERTEX = 0x1;\nconst STAGE_FRAGMENT = 0x2;\n\nfunction topoSort(fragments: readonly ShaderFragment[]): ShaderFragment[] {\n const byId = new Map<string, ShaderFragment>();\n for (const f of fragments) {\n if (byId.has(f._id)) {\n throw Error();\n }\n byId.set(f._id, f);\n }\n const inDeg = new Map<string, number>();\n const deps = new Map<string, string[]>();\n for (const f of fragments) {\n if (!inDeg.has(f._id)) {\n inDeg.set(f._id, 0);\n }\n for (const d of f._dependencies ?? []) {\n if (!byId.has(d)) {\n throw Error();\n }\n inDeg.set(f._id, (inDeg.get(f._id) ?? 0) + 1);\n let arr = deps.get(d);\n if (!arr) {\n arr = [];\n deps.set(d, arr);\n }\n arr.push(f._id);\n }\n }\n const q: string[] = [];\n for (const [id, d] of inDeg) {\n if (d === 0) {\n q.push(id);\n }\n }\n q.sort();\n const out: ShaderFragment[] = [];\n let qi = 0;\n while (qi < q.length) {\n const id = q[qi++]!;\n out.push(byId.get(id)!);\n for (const d of deps.get(id) ?? []) {\n const nd = (inDeg.get(d) ?? 1) - 1;\n inDeg.set(d, nd);\n if (nd === 0) {\n let i = qi;\n while (i < q.length && q[i]! < d) {\n i++;\n }\n q.splice(i, 0, d);\n }\n }\n }\n if (out.length !== fragments.length) {\n throw Error();\n }\n return out;\n}\n\nfunction dedup<T extends { _name: string }>(base: readonly T[], extra: readonly T[]): T[] {\n const seen = new Set<string>();\n const all: T[] = [];\n for (const v of base) {\n if (!seen.has(v._name)) {\n seen.add(v._name);\n all.push(v);\n }\n }\n for (const v of extra) {\n if (!seen.has(v._name)) {\n seen.add(v._name);\n all.push(v);\n }\n }\n return all;\n}\n\nfunction bglEntry(binding: number, decl: BindingDecl): GPUBindGroupLayoutEntry {\n const e: GPUBindGroupLayoutEntry = { binding, visibility: decl._visibility };\n switch (decl._type._kind) {\n case \"uniform-buffer\":\n e.buffer = { type: \"uniform\" };\n break;\n case \"texture\": {\n const def = decl._type._textureType === \"texture_depth_2d\" ? \"depth\" : decl._type._textureType === \"texture_2d<u32>\" ? \"uint\" : \"float\";\n e.texture = { sampleType: (decl._type._sampleType ?? def) as GPUTextureSampleType, viewDimension: decl._type._textureType.includes(\"cube\") ? \"cube\" : \"2d\" };\n break;\n }\n case \"sampler\":\n e.sampler = {\n type: decl._type._samplerType === \"sampler_comparison\" ? \"comparison\" : decl._type._samplerType === \"sampler_non_filtering\" ? \"non-filtering\" : \"filtering\",\n };\n break;\n case \"storage-texture\":\n e.storageTexture = { access: decl._type._access as GPUStorageTextureAccess, format: decl._type._format as GPUTextureFormat };\n break;\n }\n return e;\n}\n\nfunction declWGSL(g: number, b: number, d: BindingDecl): string {\n switch (d._type._kind) {\n case \"uniform-buffer\":\n return `@group(${g})@binding(${b}) var<uniform> ${d._name}:${d._name}Uniforms;`;\n case \"texture\":\n return `@group(${g})@binding(${b}) var ${d._name}:${d._type._textureType};`;\n case \"sampler\":\n return `@group(${g})@binding(${b}) var ${d._name}:${d._type._samplerType === \"sampler_non_filtering\" ? \"sampler\" : d._type._samplerType};`;\n case \"storage-texture\":\n return `@group(${g})@binding(${b}) var ${d._name}:texture_storage_2d<${d._type._format},${d._type._access}>;`;\n }\n}\n\nconst SLOT_RE = /\\/\\*([A-Z_0-9]+)\\*\\//g;\nfunction injectSlots(tpl: string, sorted: readonly ShaderFragment[], key: \"_fragmentSlots\" | \"_vertexSlots\"): string {\n return tpl.replace(SLOT_RE, (_, slot: string) => {\n const parts: string[] = [];\n for (const f of sorted) {\n const s = f[key] as Partial<Record<FragmentSlot | VertexSlot, string>> | undefined;\n if (s?.[slot as FragmentSlot | VertexSlot]) {\n parts.push(s[slot as FragmentSlot | VertexSlot]!);\n }\n }\n return parts.join(\"\\n\");\n });\n}\n\nexport function composeShader(template: ShaderTemplate, fragments: readonly ShaderFragment[]): ComposedShader {\n const sorted = topoSort(fragments);\n\n // Collect fragment data\n const fragAttrs: VertexAttribute[] = [];\n const fragVaryings: Varying[] = [];\n const helpers: string[] = [];\n const vHelpers: string[] = [];\n const vBuiltins: string[] = [];\n for (const f of sorted) {\n if (f._vertexAttributes) {\n fragAttrs.push(...f._vertexAttributes);\n }\n if (f._varyings) {\n fragVaryings.push(...f._varyings);\n }\n if (f._helperFunctions) {\n helpers.push(f._helperFunctions);\n }\n if (f._vertexHelperFunctions) {\n vHelpers.push(f._vertexHelperFunctions);\n }\n for (const b of f._vertexBuiltins ?? []) {\n vBuiltins.push(`@builtin(${b._builtin}) ${b._name}:${b._type},`);\n }\n }\n\n // Vertex attributes + layouts\n const allAttrs = dedup(template._baseVertexAttributes, fragAttrs);\n const inputLines: string[] = [];\n const _vertexBufferLayouts: GPUVertexBufferLayout[] = [];\n const groups = new Map<string, { loc: number; off: number; fmt: GPUVertexFormat }[]>();\n const firstOfGroup = new Map<string, VertexAttribute>();\n for (let i = 0; i < allAttrs.length; i++) {\n const a = allAttrs[i]!;\n inputLines.push(`@location(${i}) ${a._name}:${a._type},`);\n if (a._bufferGroup) {\n if (!groups.has(a._bufferGroup)) {\n groups.set(a._bufferGroup, []);\n firstOfGroup.set(a._bufferGroup, a);\n }\n groups.get(a._bufferGroup)!.push({ loc: i, off: a._offset ?? 0, fmt: a._gpuFormat });\n } else {\n _vertexBufferLayouts.push({\n arrayStride: a._arrayStride,\n stepMode: a._stepMode ?? \"vertex\",\n attributes: [{ shaderLocation: i, offset: a._offset ?? 0, format: a._gpuFormat }],\n });\n }\n }\n for (const [grp, attrs] of groups) {\n const f = firstOfGroup.get(grp)!;\n _vertexBufferLayouts.push({\n arrayStride: f._arrayStride,\n stepMode: f._stepMode ?? \"vertex\",\n attributes: attrs.map((a) => ({ shaderLocation: a.loc, offset: a.off, format: a.fmt })),\n });\n }\n let nextLoc = allAttrs.length;\n for (const f of sorted) {\n if (f._pipelineVertexBuffers) {\n const r = f._pipelineVertexBuffers(nextLoc);\n _vertexBufferLayouts.push(...r._buffers);\n nextLoc = r._nextLoc;\n }\n }\n\n // Varyings\n const allVary = dedup(template._baseVaryings, fragVaryings);\n const varyBody = `@builtin(position) clipPos:vec4f,\\n` + allVary.map((v, i) => `@location(${i}) ${v._name}:${v._type},`).join(\"\\n\");\n\n // UBO layouts\n const hasMaterialUbo = !!(template._baseMaterialUboFields && template._baseMaterialUboFields.length > 0);\n const meshFields = [...template._baseMeshUboFields];\n const materialFields = hasMaterialUbo ? [...template._baseMaterialUboFields] : [];\n for (const f of sorted) {\n if (f._uboFields?.length) {\n (hasMaterialUbo ? materialFields : meshFields).push(...f._uboFields);\n }\n }\n const _meshUboSpec = computeUboLayout(meshFields);\n const _materialUboSpec = hasMaterialUbo ? computeUboLayout(materialFields) : undefined;\n\n // Bindings\n const meshBGL: GPUBindGroupLayoutEntry[] = [{ binding: 0, visibility: STAGE_VERTEX | STAGE_FRAGMENT, buffer: { type: \"uniform\" } }];\n if (hasMaterialUbo) {\n meshBGL.push({ binding: 1, visibility: STAGE_FRAGMENT, buffer: { type: \"uniform\" } });\n }\n const shadowBGL: GPUBindGroupLayoutEntry[] = [];\n const vDecls: string[] = [];\n const fDecls: string[] = [];\n let mb = hasMaterialUbo ? 2 : 1,\n sb = 0;\n\n function addBinding(d: BindingDecl, _isVertex: boolean) {\n const isShadow = d._group === \"shadow\";\n const b = isShadow ? sb++ : mb++;\n const g = isShadow ? 2 : 1;\n (isShadow ? shadowBGL : meshBGL).push(bglEntry(b, d));\n const w = declWGSL(g, b, d);\n if (d._visibility & STAGE_VERTEX) {\n vDecls.push(w);\n }\n if (d._visibility & STAGE_FRAGMENT) {\n fDecls.push(w);\n }\n }\n\n for (const d of template._baseVertexBindings ?? []) {\n addBinding(d, true);\n }\n for (const f of sorted) {\n for (const d of f._vertexBindings ?? []) {\n addBinding(d, true);\n }\n }\n for (const d of template._baseBindings ?? []) {\n addBinding(d, false);\n }\n for (const f of sorted) {\n for (const d of (f._bindings ?? []).filter((b) => (b._group ?? \"mesh\") === \"mesh\")) {\n addBinding(d, false);\n }\n }\n for (const f of sorted) {\n for (const d of (f._bindings ?? []).filter((b) => b._group === \"shadow\")) {\n addBinding(d, false);\n }\n }\n\n const _fragmentKey = sorted.map((f) => f._id).join(\"|\");\n const vParams = (vBuiltins.length ? vBuiltins.join(\"\\n\") + \"\\n\" : \"\") + inputLines.join(\"\\n\");\n const meshStruct = `struct MeshUniforms{\\n${_meshUboSpec._structBody}\\n}`;\n const materialStruct = _materialUboSpec ? `\\nstruct MaterialUniforms{\\n${_materialUboSpec._structBody}\\n}\\n@group(1)@binding(1) var<uniform> material:MaterialUniforms;` : \"\";\n\n let _vertexWGSL = template._vertexTemplate;\n _vertexWGSL = _vertexWGSL.replace(\"/*SU*/\", SCENE_UBO_WGSL);\n _vertexWGSL = _vertexWGSL.replace(\"/*MU*/\", meshStruct);\n _vertexWGSL = _vertexWGSL.replace(\"/*VI*/\", `struct VertexInput{\\n${inputLines.join(\"\\n\")}\\n}`);\n _vertexWGSL = _vertexWGSL.replace(\"/*VO*/\", `struct VertexOutput{\\n${varyBody}\\n}`);\n _vertexWGSL = _vertexWGSL.replace(\"/*VD*/\", vDecls.join(\"\\n\"));\n _vertexWGSL = _vertexWGSL.replace(\"/*VP*/\", vParams);\n _vertexWGSL = _vertexWGSL.replace(\"/*VH*/\", vHelpers.join(\"\\n\"));\n // These dynamic keys are reserved from Terser property mangling in bundle-scenes-core.ts.\n _vertexWGSL = injectSlots(_vertexWGSL, sorted, \"_vertexSlots\");\n\n let _fragmentWGSL = template._fragmentTemplate;\n _fragmentWGSL = _fragmentWGSL.replace(\"/*SU*/\", SCENE_UBO_WGSL);\n _fragmentWGSL = _fragmentWGSL.replace(\"/*MU*/\", meshStruct + materialStruct);\n _fragmentWGSL = _fragmentWGSL.replace(\"/*FI*/\", `struct FragmentInput{\\n${varyBody}\\n}`);\n _fragmentWGSL = _fragmentWGSL.replace(\"/*HF*/\", helpers.join(\"\\n\"));\n _fragmentWGSL = _fragmentWGSL.replace(\"/*FB*/\", fDecls.join(\"\\n\"));\n _fragmentWGSL = injectSlots(_fragmentWGSL, sorted, \"_fragmentSlots\");\n\n const _meshBGLDescriptor = { entries: meshBGL };\n const _shadowBGLDescriptor = shadowBGL.length ? { entries: shadowBGL } : null;\n\n return {\n _vertexWGSL,\n _fragmentWGSL,\n _meshBGLDescriptor,\n _shadowBGLDescriptor,\n _vertexBufferLayouts,\n _meshUboSpec,\n _materialUboSpec,\n _fragmentKey,\n };\n}\n","import type { Mesh } from \"../mesh/mesh.js\";\n\nexport const MSH_HAS_TANGENTS = 1 << 0;\nexport const MSH_HAS_SKELETON = 1 << 1;\nexport const MSH_HAS_SKELETON_8 = 1 << 2;\nexport const MSH_HAS_MORPH_TARGETS = 1 << 3;\nexport const MSH_HAS_THIN_INSTANCES = 1 << 4;\nexport const MSH_HAS_INSTANCE_COLOR = 1 << 5;\nexport const MSH_HAS_VERTEX_COLOR = 1 << 6;\nexport const MSH_HAS_UV2 = 1 << 7;\nexport const MSH_RECEIVE_SHADOWS = 1 << 8;\n\n/** @internal Compute mesh/pass feature bits shared by material renderers. */\nexport function _computeMeshFeatures(mesh: Mesh, receiveShadows = false): number {\n const gpu = mesh._gpu;\n let features = 0;\n if (gpu.tangentBuffer) {\n features |= MSH_HAS_TANGENTS;\n }\n if (mesh.skeleton) {\n features |= MSH_HAS_SKELETON;\n if (mesh.skeleton.joints1Buffer) {\n features |= MSH_HAS_SKELETON_8;\n }\n }\n if (mesh.morphTargets) {\n features |= MSH_HAS_MORPH_TARGETS;\n }\n if (mesh.thinInstances) {\n features |= MSH_HAS_THIN_INSTANCES;\n if (mesh.thinInstances.colors) {\n features |= MSH_HAS_INSTANCE_COLOR;\n }\n }\n if (gpu.colorBuffer) {\n features |= MSH_HAS_VERTEX_COLOR;\n }\n if (gpu.uv2Buffer) {\n features |= MSH_HAS_UV2;\n }\n if (receiveShadows) {\n features |= MSH_RECEIVE_SHADOWS;\n }\n return features;\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { b as binaryEmitter } from "./_math-factory-C-QqW-Wi.js";
2
+ const emitter = binaryEmitter("MinBlock", (l, r) => `min(${l}, ${r})`);
3
+ export {
4
+ emitter
5
+ };
6
+ //# sourceMappingURL=min-block-CHtBngNl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"min-block-CHtBngNl.js","sources":["../src/material/node/blocks/min-block.ts"],"sourcesContent":["import { binaryEmitter } from \"./_math-factory.js\";\nexport const emitter = binaryEmitter(\"MinBlock\", (l, r) => `min(${l}, ${r})`);\n"],"names":[],"mappings":";AACO,MAAM,UAAU,cAAc,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG;"}
@@ -0,0 +1,6 @@
1
+ import { b as binaryEmitter } from "./_math-factory-C-QqW-Wi.js";
2
+ const emitter = binaryEmitter("ModBlock", (l, r) => `${l} % ${r}`);
3
+ export {
4
+ emitter
5
+ };
6
+ //# sourceMappingURL=mod-block-Ceizv8Y7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod-block-Ceizv8Y7.js","sources":["../src/material/node/blocks/mod-block.ts"],"sourcesContent":["import { binaryEmitter } from \"./_math-factory.js\";\n\nexport const emitter = binaryEmitter(\"ModBlock\", (l, r) => `${l} % ${r}`);\n"],"names":[],"mappings":";AAEO,MAAM,UAAU,cAAc,YAAY,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE;"}
@@ -0,0 +1,59 @@
1
+ import { b as MSH_HAS_MORPH_TARGETS } from "./mesh-features-BLENkYVt.js";
2
+ const STAGE_VERTEX = 1;
3
+ const MORPH_PRE_SKINNING = `var morphedPos = position;
4
+ var morphedNorm = normal;
5
+ let mCol = i32(vertexIndex % morph.texWidth);
6
+ let mRowInBand = i32(vertexIndex / morph.texWidth);
7
+ for (var i = 0u; i < morph.count; i = i + 1u) {
8
+ let w = morph.weights[i];
9
+ let posBase = i32(i * 2u) * i32(morph.rowsPerBand);
10
+ let normBase = i32(i * 2u + 1u) * i32(morph.rowsPerBand);
11
+ morphedPos = morphedPos + w * textureLoad(morphTargets, vec2<i32>(mCol, posBase + mRowInBand), 0).xyz;
12
+ morphedNorm = morphedNorm + w * textureLoad(morphTargets, vec2<i32>(mCol, normBase + mRowInBand), 0).xyz;
13
+ }`;
14
+ function createMorphFragment() {
15
+ return {
16
+ _id: "morph",
17
+ _vertexBuiltins: [{ _name: "vertexIndex", _builtin: "vertex_index", _type: "u32" }],
18
+ _vertexHelperFunctions: `struct morphUniforms {
19
+ weights: vec4<f32>,
20
+ count: u32,
21
+ texWidth: u32,
22
+ rowsPerBand: u32,
23
+ _p0: u32,
24
+ }`,
25
+ _vertexBindings: [
26
+ { _name: "morphTargets", _type: { _kind: "texture", _textureType: "texture_2d<f32>", _sampleType: "unfilterable-float" }, _visibility: STAGE_VERTEX },
27
+ { _name: "morph", _type: { _kind: "uniform-buffer" }, _visibility: STAGE_VERTEX }
28
+ ],
29
+ _vertexSlots: {
30
+ VR: MORPH_PRE_SKINNING
31
+ }
32
+ };
33
+ }
34
+ const pbrExt = {
35
+ id: "morph",
36
+ phase: "vertex",
37
+ frag(ctx) {
38
+ if (!(ctx._meshFeatures & MSH_HAS_MORPH_TARGETS)) {
39
+ return null;
40
+ }
41
+ return createMorphFragment();
42
+ },
43
+ bind(ctx, entries, b) {
44
+ const mesh = ctx._mesh;
45
+ if (!(ctx._meshFeatures & MSH_HAS_MORPH_TARGETS) || !(mesh == null ? void 0 : mesh.morphTargets)) {
46
+ return b;
47
+ }
48
+ entries.push({ binding: b++, resource: mesh.morphTargets.texture.createView() });
49
+ if (mesh.morphTargets.weightsBuffer) {
50
+ entries.push({ binding: b++, resource: { buffer: mesh.morphTargets.weightsBuffer } });
51
+ }
52
+ return b;
53
+ }
54
+ };
55
+ export {
56
+ createMorphFragment,
57
+ pbrExt
58
+ };
59
+ //# sourceMappingURL=morph-fragment-DOVo70gP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"morph-fragment-DOVo70gP.js","sources":["../src/material/pbr/fragments/morph-fragment.ts"],"sourcesContent":["/**\n * Morph Target Fragment\n *\n * Vertex-stage morph target animation: texture-based morph deltas\n * applied before skinning. Only bundled when a scene uses morph targets.\n */\n\nimport type { ShaderFragment } from \"../../../shader/fragment-types.js\";\n\n// WebGPU shader stage constants\nconst STAGE_VERTEX = 0x1;\n\nconst MORPH_PRE_SKINNING = `var morphedPos = position;\nvar morphedNorm = normal;\nlet mCol = i32(vertexIndex % morph.texWidth);\nlet mRowInBand = i32(vertexIndex / morph.texWidth);\nfor (var i = 0u; i < morph.count; i = i + 1u) {\n let w = morph.weights[i];\n let posBase = i32(i * 2u) * i32(morph.rowsPerBand);\n let normBase = i32(i * 2u + 1u) * i32(morph.rowsPerBand);\n morphedPos = morphedPos + w * textureLoad(morphTargets, vec2<i32>(mCol, posBase + mRowInBand), 0).xyz;\n morphedNorm = morphedNorm + w * textureLoad(morphTargets, vec2<i32>(mCol, normBase + mRowInBand), 0).xyz;\n}`;\n\n/**\n * Create a morph target fragment.\n * The morph extension modifies position/normal variables before the world\n * transform, using morphedPos/morphedNorm in place of position/normal.\n */\nexport function createMorphFragment(): ShaderFragment {\n return {\n _id: \"morph\",\n\n _vertexBuiltins: [{ _name: \"vertexIndex\", _builtin: \"vertex_index\", _type: \"u32\" }],\n\n _vertexHelperFunctions: `struct morphUniforms {\\nweights: vec4<f32>,\\ncount: u32,\\ntexWidth: u32,\\nrowsPerBand: u32,\\n_p0: u32,\\n}`,\n\n _vertexBindings: [\n { _name: \"morphTargets\", _type: { _kind: \"texture\", _textureType: \"texture_2d<f32>\" as const, _sampleType: \"unfilterable-float\" as const }, _visibility: STAGE_VERTEX },\n { _name: \"morph\", _type: { _kind: \"uniform-buffer\" as const }, _visibility: STAGE_VERTEX },\n ],\n\n _vertexSlots: {\n VR: MORPH_PRE_SKINNING,\n },\n };\n}\n\nimport type { PbrExt } from \"../pbr-flags.js\";\nimport { MSH_HAS_MORPH_TARGETS } from \"../../mesh-features.js\";\n\nexport const pbrExt: PbrExt = {\n id: \"morph\",\n phase: \"vertex\",\n frag(ctx) {\n if (!(ctx._meshFeatures & MSH_HAS_MORPH_TARGETS)) {\n return null;\n }\n return createMorphFragment();\n },\n bind(ctx, entries, b) {\n const mesh = ctx._mesh;\n if (!(ctx._meshFeatures & MSH_HAS_MORPH_TARGETS) || !mesh?.morphTargets) {\n return b;\n }\n entries.push({ binding: b++, resource: mesh.morphTargets.texture.createView() });\n // Weights UBO is pushed separately by the pipeline (needs engine-side buffer handle).\n // Caller supplies weightsBuffer on mesh.morphTargets.\n if (mesh.morphTargets.weightsBuffer) {\n entries.push({ binding: b++, resource: { buffer: mesh.morphTargets.weightsBuffer } });\n }\n return b;\n },\n};\n"],"names":[],"mappings":";AAUA,MAAM,eAAe;AAErB,MAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBpB,SAAS,sBAAsC;AAClD,SAAO;AAAA,IACH,KAAK;AAAA,IAEL,iBAAiB,CAAC,EAAE,OAAO,eAAe,UAAU,gBAAgB,OAAO,OAAO;AAAA,IAElF,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAExB,iBAAiB;AAAA,MACb,EAAE,OAAO,gBAAgB,OAAO,EAAE,OAAO,WAAW,cAAc,mBAA4B,aAAa,wBAAiC,aAAa,aAAA;AAAA,MACzJ,EAAE,OAAO,SAAS,OAAO,EAAE,OAAO,iBAAA,GAA6B,aAAa,aAAA;AAAA,IAAa;AAAA,IAG7F,cAAc;AAAA,MACV,IAAI;AAAA,IAAA;AAAA,EACR;AAER;AAKO,MAAM,SAAiB;AAAA,EAC1B,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,KAAK,KAAK;AACN,QAAI,EAAE,IAAI,gBAAgB,wBAAwB;AAC9C,aAAO;AAAA,IACX;AACA,WAAO,oBAAA;AAAA,EACX;AAAA,EACA,KAAK,KAAK,SAAS,GAAG;AAClB,UAAM,OAAO,IAAI;AACjB,QAAI,EAAE,IAAI,gBAAgB,0BAA0B,EAAC,6BAAM,eAAc;AACrE,aAAO;AAAA,IACX;AACA,YAAQ,KAAK,EAAE,SAAS,KAAK,UAAU,KAAK,aAAa,QAAQ,WAAA,EAAW,CAAG;AAG/E,QAAI,KAAK,aAAa,eAAe;AACjC,cAAQ,KAAK,EAAE,SAAS,KAAK,UAAU,EAAE,QAAQ,KAAK,aAAa,cAAA,EAAc,CAAG;AAAA,IACxF;AACA,WAAO;AAAA,EACX;AACJ;"}
@@ -0,0 +1,35 @@
1
+ const PASSTHROUGH_KINDS = /* @__PURE__ */ new Set(["tangent", "uv", "uv2"]);
2
+ const emitter = {
3
+ className: "MorphTargetsBlock",
4
+ stage: "vertex",
5
+ emit(block, outputName, stage, state, ctx) {
6
+ state.usesMorphTargets = true;
7
+ const kind = outputName.replace(/Output$/, "");
8
+ const input = block.inputs.get(kind);
9
+ if (!(input == null ? void 0 : input.source)) {
10
+ return fallback(kind);
11
+ }
12
+ const v = ctx.resolve(block, kind, stage, state);
13
+ if (kind === "position") {
14
+ const base = ctx.cast(v, "vec3f").expr;
15
+ return { expr: `nme_morphPosition(${base}, vertexIndex)`, type: "vec3f" };
16
+ }
17
+ if (kind === "normal") {
18
+ const base = ctx.cast(v, "vec3f").expr;
19
+ return { expr: `nme_morphNormal(${base}, vertexIndex)`, type: "vec3f" };
20
+ }
21
+ if (PASSTHROUGH_KINDS.has(kind)) {
22
+ return v;
23
+ }
24
+ return v;
25
+ }
26
+ };
27
+ function fallback(kind) {
28
+ const type = kind === "uv" || kind === "uv2" ? "vec2f" : kind === "tangent" ? "vec4f" : "vec3f";
29
+ const zero = type === "vec2f" ? "vec2<f32>(0.0)" : type === "vec4f" ? "vec4<f32>(0.0)" : "vec3<f32>(0.0)";
30
+ return { expr: zero, type };
31
+ }
32
+ export {
33
+ emitter
34
+ };
35
+ //# sourceMappingURL=morph-targets-55z342ZB.js.map