@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,82 @@
1
+ import { m as markMaterialUboDirty } from "./index-C8HOR2sB.js";
2
+ function observableColor3(r, g, b, owner) {
3
+ const arr = [r, g, b];
4
+ for (let i = 0; i < 3; i++) {
5
+ let val = arr[i];
6
+ Object.defineProperty(arr, i, {
7
+ get() {
8
+ return val;
9
+ },
10
+ set(v) {
11
+ if (val !== v) {
12
+ val = v;
13
+ markMaterialUboDirty(owner);
14
+ }
15
+ },
16
+ configurable: true,
17
+ enumerable: true
18
+ });
19
+ }
20
+ return arr;
21
+ }
22
+ function observableVec2(x, y, owner) {
23
+ const arr = [x, y];
24
+ for (let i = 0; i < 2; i++) {
25
+ let val = arr[i];
26
+ Object.defineProperty(arr, i, {
27
+ get() {
28
+ return val;
29
+ },
30
+ set(v) {
31
+ if (val !== v) {
32
+ val = v;
33
+ markMaterialUboDirty(owner);
34
+ }
35
+ },
36
+ configurable: true,
37
+ enumerable: true
38
+ });
39
+ }
40
+ return arr;
41
+ }
42
+ function trackScalar(obj, key) {
43
+ let val = obj[key];
44
+ Object.defineProperty(obj, key, {
45
+ get() {
46
+ return val;
47
+ },
48
+ set(v) {
49
+ if (val !== v) {
50
+ val = v;
51
+ markMaterialUboDirty(obj);
52
+ }
53
+ },
54
+ configurable: true,
55
+ enumerable: true
56
+ });
57
+ }
58
+ function trackSubProps(parent, sub, keys) {
59
+ for (const key of keys) {
60
+ let val = sub[key];
61
+ Object.defineProperty(sub, key, {
62
+ get() {
63
+ return val;
64
+ },
65
+ set(v) {
66
+ if (val !== v) {
67
+ val = v;
68
+ markMaterialUboDirty(parent);
69
+ }
70
+ },
71
+ configurable: true,
72
+ enumerable: true
73
+ });
74
+ }
75
+ }
76
+ export {
77
+ observableVec2 as a,
78
+ trackSubProps as b,
79
+ observableColor3 as o,
80
+ trackScalar as t
81
+ };
82
+ //# sourceMappingURL=tracking-primitives-wgdBY85t.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking-primitives-wgdBY85t.js","sources":["../src/material/tracking/tracking-primitives.ts"],"sourcesContent":["/** Shared tracking primitives for observable material properties. */\n\nimport type { Material } from \"../material.js\";\nimport { markMaterialUboDirty } from \"../material-dirty.js\";\n\nexport function observableColor3(r: number, g: number, b: number, owner: Material): [number, number, number] {\n const arr = [r, g, b] as [number, number, number];\n for (let i = 0; i < 3; i++) {\n let val = arr[i]!;\n Object.defineProperty(arr, i, {\n get() {\n return val;\n },\n set(v: number) {\n if (val !== v) {\n val = v;\n markMaterialUboDirty(owner);\n }\n },\n configurable: true,\n enumerable: true,\n });\n }\n return arr;\n}\n\nexport function observableVec2(x: number, y: number, owner: Material): [number, number] {\n const arr = [x, y] as [number, number];\n for (let i = 0; i < 2; i++) {\n let val = arr[i]!;\n Object.defineProperty(arr, i, {\n get() {\n return val;\n },\n set(v: number) {\n if (val !== v) {\n val = v;\n markMaterialUboDirty(owner);\n }\n },\n configurable: true,\n enumerable: true,\n });\n }\n return arr;\n}\n\nexport function trackScalar(obj: any, key: string): void {\n let val = obj[key];\n Object.defineProperty(obj, key, {\n get() {\n return val;\n },\n set(v: any) {\n if (val !== v) {\n val = v;\n markMaterialUboDirty(obj as Material);\n }\n },\n configurable: true,\n enumerable: true,\n });\n}\n\nexport function trackSubProps(parent: Material, sub: any, keys: string[]): void {\n for (const key of keys) {\n let val = sub[key];\n Object.defineProperty(sub, key, {\n get() {\n return val;\n },\n set(v: any) {\n if (val !== v) {\n val = v;\n markMaterialUboDirty(parent);\n }\n },\n configurable: true,\n enumerable: true,\n });\n }\n}\n"],"names":[],"mappings":";AAKO,SAAS,iBAAiB,GAAW,GAAW,GAAW,OAA2C;AACzG,QAAM,MAAM,CAAC,GAAG,GAAG,CAAC;AACpB,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,QAAI,MAAM,IAAI,CAAC;AACf,WAAO,eAAe,KAAK,GAAG;AAAA,MAC1B,MAAM;AACF,eAAO;AAAA,MACX;AAAA,MACA,IAAI,GAAW;AACX,YAAI,QAAQ,GAAG;AACX,gBAAM;AACN,+BAAqB,KAAK;AAAA,QAC9B;AAAA,MACJ;AAAA,MACA,cAAc;AAAA,MACd,YAAY;AAAA,IAAA,CACf;AAAA,EACL;AACA,SAAO;AACX;AAEO,SAAS,eAAe,GAAW,GAAW,OAAmC;AACpF,QAAM,MAAM,CAAC,GAAG,CAAC;AACjB,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,QAAI,MAAM,IAAI,CAAC;AACf,WAAO,eAAe,KAAK,GAAG;AAAA,MAC1B,MAAM;AACF,eAAO;AAAA,MACX;AAAA,MACA,IAAI,GAAW;AACX,YAAI,QAAQ,GAAG;AACX,gBAAM;AACN,+BAAqB,KAAK;AAAA,QAC9B;AAAA,MACJ;AAAA,MACA,cAAc;AAAA,MACd,YAAY;AAAA,IAAA,CACf;AAAA,EACL;AACA,SAAO;AACX;AAEO,SAAS,YAAY,KAAU,KAAmB;AACrD,MAAI,MAAM,IAAI,GAAG;AACjB,SAAO,eAAe,KAAK,KAAK;AAAA,IAC5B,MAAM;AACF,aAAO;AAAA,IACX;AAAA,IACA,IAAI,GAAQ;AACR,UAAI,QAAQ,GAAG;AACX,cAAM;AACN,6BAAqB,GAAe;AAAA,MACxC;AAAA,IACJ;AAAA,IACA,cAAc;AAAA,IACd,YAAY;AAAA,EAAA,CACf;AACL;AAEO,SAAS,cAAc,QAAkB,KAAU,MAAsB;AAC5E,aAAW,OAAO,MAAM;AACpB,QAAI,MAAM,IAAI,GAAG;AACjB,WAAO,eAAe,KAAK,KAAK;AAAA,MAC5B,MAAM;AACF,eAAO;AAAA,MACX;AAAA,MACA,IAAI,GAAQ;AACR,YAAI,QAAQ,GAAG;AACX,gBAAM;AACN,+BAAqB,MAAM;AAAA,QAC/B;AAAA,MACJ;AAAA,MACA,cAAc;AAAA,MACd,YAAY;AAAA,IAAA,CACf;AAAA,EACL;AACJ;"}
@@ -0,0 +1,32 @@
1
+ import { f as formatFloat } from "./_math-factory-C-QqW-Wi.js";
2
+ const emitter = {
3
+ className: "TransformBlock",
4
+ stage: "vertex",
5
+ emit(block, _outputName, stage, state, ctx) {
6
+ const vector = ctx.resolve(block, "vector", stage, state);
7
+ const transform = ctx.resolve(block, "transform", stage, state);
8
+ const wRaw = block.serialized.complementW;
9
+ const zRaw = block.serialized.complementZ;
10
+ const cw = formatFloat(typeof wRaw === "number" ? wRaw : 1);
11
+ const cz = formatFloat(typeof zRaw === "number" ? zRaw : 0);
12
+ let vec4;
13
+ switch (vector.type) {
14
+ case "vec4f":
15
+ vec4 = vector.expr;
16
+ break;
17
+ case "vec3f":
18
+ vec4 = `vec4<f32>(${vector.expr}, ${cw})`;
19
+ break;
20
+ case "vec2f":
21
+ vec4 = `vec4<f32>(${vector.expr}, ${cz}, ${cw})`;
22
+ break;
23
+ default:
24
+ vec4 = `vec4<f32>(${ctx.cast(vector, "vec3f").expr}, ${cw})`;
25
+ }
26
+ return { expr: `(${transform.expr} * ${vec4})`, type: "vec4f" };
27
+ }
28
+ };
29
+ export {
30
+ emitter
31
+ };
32
+ //# sourceMappingURL=transform-block-DbRph9JI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-block-DbRph9JI.js","sources":["../src/material/node/blocks/transform-block.ts"],"sourcesContent":["/** TransformBlock — matrix * vector.\n *\n * BJS serializes `complementW` (default 1.0 for positions, 0.0 for directions)\n * and `complementZ` for 2D-vector → 3D promotion. We honour both.\n */\n\nimport type { BlockEmitter } from \"../node-types.js\";\nimport { formatFloat } from \"./_math-factory.js\";\n\nexport const emitter: BlockEmitter = {\n className: \"TransformBlock\",\n stage: \"vertex\",\n emit(block, _outputName, stage, state, ctx) {\n const vector = ctx.resolve(block, \"vector\", stage, state);\n const transform = ctx.resolve(block, \"transform\", stage, state);\n const wRaw = block.serialized.complementW;\n const zRaw = block.serialized.complementZ;\n const cw = formatFloat(typeof wRaw === \"number\" ? wRaw : 1);\n const cz = formatFloat(typeof zRaw === \"number\" ? zRaw : 0);\n\n let vec4: string;\n switch (vector.type) {\n case \"vec4f\":\n vec4 = vector.expr;\n break;\n case \"vec3f\":\n vec4 = `vec4<f32>(${vector.expr}, ${cw})`;\n break;\n case \"vec2f\":\n vec4 = `vec4<f32>(${vector.expr}, ${cz}, ${cw})`;\n break;\n default:\n vec4 = `vec4<f32>(${ctx.cast(vector, \"vec3f\").expr}, ${cw})`;\n }\n return { expr: `(${transform.expr} * ${vec4})`, type: \"vec4f\" };\n },\n};\n"],"names":[],"mappings":";AASO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,OAAO;AAAA,EACP,KAAK,OAAO,aAAa,OAAO,OAAO,KAAK;AACxC,UAAM,SAAS,IAAI,QAAQ,OAAO,UAAU,OAAO,KAAK;AACxD,UAAM,YAAY,IAAI,QAAQ,OAAO,aAAa,OAAO,KAAK;AAC9D,UAAM,OAAO,MAAM,WAAW;AAC9B,UAAM,OAAO,MAAM,WAAW;AAC9B,UAAM,KAAK,YAAY,OAAO,SAAS,WAAW,OAAO,CAAC;AAC1D,UAAM,KAAK,YAAY,OAAO,SAAS,WAAW,OAAO,CAAC;AAE1D,QAAI;AACJ,YAAQ,OAAO,MAAA;AAAA,MACX,KAAK;AACD,eAAO,OAAO;AACd;AAAA,MACJ,KAAK;AACD,eAAO,aAAa,OAAO,IAAI,KAAK,EAAE;AACtC;AAAA,MACJ,KAAK;AACD,eAAO,aAAa,OAAO,IAAI,KAAK,EAAE,KAAK,EAAE;AAC7C;AAAA,MACJ;AACI,eAAO,aAAa,IAAI,KAAK,QAAQ,OAAO,EAAE,IAAI,KAAK,EAAE;AAAA,IAAA;AAEjE,WAAO,EAAE,MAAM,IAAI,UAAU,IAAI,MAAM,IAAI,KAAK,MAAM,QAAA;AAAA,EAC1D;AACJ;"}
@@ -0,0 +1,36 @@
1
+ const OP = {
2
+ 0: "cos",
3
+ 1: "sin",
4
+ 2: "abs",
5
+ 3: "exp",
6
+ 4: "exp2",
7
+ 5: "round",
8
+ 6: "floor",
9
+ 7: "ceil",
10
+ 8: "sqrt",
11
+ 9: "log",
12
+ 10: "tan",
13
+ 11: "atan",
14
+ 12: "acos",
15
+ 13: "asin",
16
+ 14: "fract",
17
+ 15: "sign",
18
+ 16: "radians",
19
+ 17: "degrees"
20
+ };
21
+ const emitter = {
22
+ className: "TrigonometryBlock",
23
+ emit(block, _outputName, stage, state, ctx) {
24
+ const input = ctx.resolve(block, "input", stage, state);
25
+ const opIdx = block.serialized.operation;
26
+ const fn = typeof opIdx === "number" ? OP[opIdx] : void 0;
27
+ if (!fn) {
28
+ throw new Error(`NodeMaterial: unknown TrigonometryBlock operation ${String(opIdx)}`);
29
+ }
30
+ return { expr: `${fn}(${input.expr})`, type: input.type };
31
+ }
32
+ };
33
+ export {
34
+ emitter
35
+ };
36
+ //# sourceMappingURL=trigonometry-block-BYQcTHiD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigonometry-block-BYQcTHiD.js","sources":["../src/material/node/blocks/trigonometry-block.ts"],"sourcesContent":["import type { BlockEmitter } from \"../node-types.js\";\n\n// Matches BJS `TrigonometryBlockOperations` enum.\nconst OP: Record<number, string> = {\n 0: \"cos\",\n 1: \"sin\",\n 2: \"abs\",\n 3: \"exp\",\n 4: \"exp2\",\n 5: \"round\",\n 6: \"floor\",\n 7: \"ceil\",\n 8: \"sqrt\",\n 9: \"log\",\n 10: \"tan\",\n 11: \"atan\",\n 12: \"acos\",\n 13: \"asin\",\n 14: \"fract\",\n 15: \"sign\",\n 16: \"radians\",\n 17: \"degrees\",\n};\n\nexport const emitter: BlockEmitter = {\n className: \"TrigonometryBlock\",\n emit(block, _outputName, stage, state, ctx) {\n const input = ctx.resolve(block, \"input\", stage, state);\n const opIdx = block.serialized.operation;\n const fn = typeof opIdx === \"number\" ? OP[opIdx] : undefined;\n if (!fn) {\n throw new Error(`NodeMaterial: unknown TrigonometryBlock operation ${String(opIdx)}`);\n }\n return { expr: `${fn}(${input.expr})`, type: input.type };\n },\n};\n"],"names":[],"mappings":"AAGA,MAAM,KAA6B;AAAA,EAC/B,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACR;AAEO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,KAAK,OAAO,aAAa,OAAO,OAAO,KAAK;AACxC,UAAM,QAAQ,IAAI,QAAQ,OAAO,SAAS,OAAO,KAAK;AACtD,UAAM,QAAQ,MAAM,WAAW;AAC/B,UAAM,KAAK,OAAO,UAAU,WAAW,GAAG,KAAK,IAAI;AACnD,QAAI,CAAC,IAAI;AACL,YAAM,IAAI,MAAM,qDAAqD,OAAO,KAAK,CAAC,EAAE;AAAA,IACxF;AACA,WAAO,EAAE,MAAM,GAAG,EAAE,IAAI,MAAM,IAAI,KAAK,MAAM,MAAM,KAAA;AAAA,EACvD;AACJ;"}
@@ -0,0 +1,148 @@
1
+ const OUTPUT = {
2
+ rgba: { swizzle: "", type: "vec4f" },
3
+ rgb: { swizzle: ".xyz", type: "vec3f" },
4
+ r: { swizzle: ".x", type: "f32" },
5
+ g: { swizzle: ".y", type: "f32" },
6
+ b: { swizzle: ".z", type: "f32" },
7
+ a: { swizzle: ".w", type: "f32" }
8
+ };
9
+ function sanitize(name) {
10
+ return name.replace(/[^A-Za-z0-9_]/g, "_");
11
+ }
12
+ function formatFloat(value) {
13
+ if (Number.isInteger(value)) {
14
+ return `${value}.0`;
15
+ }
16
+ return `${value}`;
17
+ }
18
+ function textureTransform(block) {
19
+ const tex = block.serialized["texture"];
20
+ const num = (name, fallback) => {
21
+ const value = tex == null ? void 0 : tex[name];
22
+ return typeof value === "number" ? value : fallback;
23
+ };
24
+ return {
25
+ level: num("level", 1),
26
+ uAng: num("uAng", 0),
27
+ vAng: num("vAng", 0),
28
+ wAng: num("wAng", 0),
29
+ uOffset: num("uOffset", 0),
30
+ vOffset: num("vOffset", 0),
31
+ uScale: num("uScale", 1),
32
+ vScale: num("vScale", 1)
33
+ };
34
+ }
35
+ function bindingName(block, inputName, ctx, fallback) {
36
+ const input = block.inputs.get(inputName);
37
+ if (input == null ? void 0 : input.source) {
38
+ const producer = ctx.graph.blocks.get(input.source.blockId);
39
+ return sanitize((producer == null ? void 0 : producer.name) || fallback);
40
+ }
41
+ return sanitize(fallback);
42
+ }
43
+ function ensureBinding(state, name) {
44
+ if (!state.textures.find((t) => t.name === name)) {
45
+ state.textures.push({ name, kind: "texture2d", texture: null });
46
+ }
47
+ }
48
+ function applyColorSpace(expr, outputName, convertToLinear, convertToGamma) {
49
+ if (!convertToLinear && !convertToGamma) {
50
+ return expr;
51
+ }
52
+ const power = convertToLinear ? "2.2" : "0.45454545";
53
+ if (outputName === "rgba") {
54
+ return `vec4<f32>(pow(max(${expr}.xyz, vec3<f32>(0.0)), vec3<f32>(${power})), ${expr}.w)`;
55
+ }
56
+ if (outputName === "rgb") {
57
+ return `pow(max(${expr}.xyz, vec3<f32>(0.0)), vec3<f32>(${power}))`;
58
+ }
59
+ if (outputName === "r" || outputName === "g" || outputName === "b") {
60
+ return `pow(max(${expr}${OUTPUT[outputName].swizzle}, 0.0), ${power})`;
61
+ }
62
+ return expr;
63
+ }
64
+ function emitTriPlanarSample(block, stage, state, ctx) {
65
+ var _a;
66
+ if (stage !== "fragment") {
67
+ throw new Error("TriPlanarBlock: texture projection is supported only in the fragment stage");
68
+ }
69
+ const stageState = state.fragment;
70
+ const memoKey = `_triplanar_${block.id}_sample`;
71
+ const memo = stageState.memo.get(memoKey);
72
+ if (memo) {
73
+ return memo;
74
+ }
75
+ const baseName = sanitize(block.name || `triPlanar${block.id}`);
76
+ const texX = bindingName(block, "source", ctx, baseName);
77
+ const texY = bindingName(block, "sourceY", ctx, texX);
78
+ const texZ = bindingName(block, "sourceZ", ctx, texX);
79
+ ensureBinding(state, texX);
80
+ ensureBinding(state, texY);
81
+ ensureBinding(state, texZ);
82
+ const position = ctx.cast(ctx.resolve(block, "position", stage, state), "vec3f");
83
+ const normal = ctx.cast(ctx.resolve(block, "normal", stage, state), "vec3f");
84
+ const sharpnessInput = ((_a = block.inputs.get("sharpness")) == null ? void 0 : _a.source) ? ctx.cast(ctx.resolve(block, "sharpness", stage, state), "f32").expr : "1.0";
85
+ const transform = textureTransform(block);
86
+ const temp = ctx.temp(state, "tri");
87
+ const n = `_n${temp}`;
88
+ const uvx = `_uvx${temp}`;
89
+ const uvy = `_uvy${temp}`;
90
+ const uvz = `_uvz${temp}`;
91
+ const x = `_x${temp}`;
92
+ const y = `_y${temp}`;
93
+ const z = `_z${temp}`;
94
+ const w = `_w${temp}`;
95
+ const sample = `_sample${temp}`;
96
+ stageState.body.push(`let ${n} = ${normal.expr};`);
97
+ stageState.body.push(`var ${uvx} = (${position.expr}).yz;`);
98
+ stageState.body.push(`var ${uvy} = (${position.expr}).zx;`);
99
+ stageState.body.push(`var ${uvz} = (${position.expr}).xy;`);
100
+ if (block.serialized["projectAsCube"] === true) {
101
+ stageState.body.push(`${uvx} = (${uvx}).yx;`);
102
+ stageState.body.push(`if (${n}.x >= 0.0) { ${uvx}.x = -${uvx}.x; }`);
103
+ stageState.body.push(`if (${n}.y < 0.0) { ${uvy}.y = -${uvy}.y; }`);
104
+ stageState.body.push(`if (${n}.z < 0.0) { ${uvz}.x = -${uvz}.x; }`);
105
+ }
106
+ stageState.body.push(`let _cU${temp} = cos(${formatFloat(transform.uAng)});`);
107
+ stageState.body.push(`let _sU${temp} = sin(${formatFloat(transform.uAng)});`);
108
+ stageState.body.push(`${uvx} = mat2x2<f32>(_cU${temp}, -_sU${temp}, _sU${temp}, _cU${temp}) * ${uvx};`);
109
+ stageState.body.push(`let _cV${temp} = cos(${formatFloat(transform.vAng)});`);
110
+ stageState.body.push(`let _sV${temp} = sin(${formatFloat(transform.vAng)});`);
111
+ stageState.body.push(`${uvy} = mat2x2<f32>(_cV${temp}, _sV${temp}, -_sV${temp}, _cV${temp}) * ${uvy};`);
112
+ stageState.body.push(`let _cW${temp} = cos(${formatFloat(transform.wAng)});`);
113
+ stageState.body.push(`let _sW${temp} = sin(${formatFloat(transform.wAng)});`);
114
+ stageState.body.push(`${uvz} = mat2x2<f32>(_cW${temp}, -_sW${temp}, _sW${temp}, _cW${temp}) * ${uvz};`);
115
+ stageState.body.push(`let _scale${temp} = vec2<f32>(${formatFloat(transform.uScale)}, ${formatFloat(transform.vScale)});`);
116
+ stageState.body.push(`let _offset${temp} = vec2<f32>(${formatFloat(transform.uOffset)}, ${formatFloat(transform.vOffset)});`);
117
+ stageState.body.push(`${uvx} = ${uvx} * _scale${temp} + _offset${temp};`);
118
+ stageState.body.push(`${uvy} = ${uvy} * _scale${temp} + _offset${temp};`);
119
+ stageState.body.push(`${uvz} = ${uvz} * _scale${temp} + _offset${temp};`);
120
+ stageState.body.push(`let ${x} = textureSample(nodeTex_${texX}, nodeSamp_${texX}, ${uvx});`);
121
+ stageState.body.push(`let ${y} = textureSample(nodeTex_${texY}, nodeSamp_${texY}, ${uvy});`);
122
+ stageState.body.push(`let ${z} = textureSample(nodeTex_${texZ}, nodeSamp_${texZ}, ${uvz});`);
123
+ stageState.body.push(`let ${w} = pow(abs(${n}), vec3<f32>(${sharpnessInput}));`);
124
+ stageState.body.push(
125
+ `let ${sample} = ((${x} * ${w}.x + ${y} * ${w}.y + ${z} * ${w}.z) / (${w}.x + ${w}.y + ${w}.z)) * ${formatFloat(block.serialized["disableLevelMultiplication"] === true ? 1 : transform.level)};`
126
+ );
127
+ const result = { expr: sample, type: "vec4f" };
128
+ stageState.memo.set(memoKey, result);
129
+ return result;
130
+ }
131
+ const emitter = {
132
+ className: "TriPlanarBlock",
133
+ emit(block, outputName, stage, state, ctx) {
134
+ if (outputName === "level") {
135
+ const transform = textureTransform(block);
136
+ return { expr: formatFloat(transform.level), type: "f32" };
137
+ }
138
+ const sample = emitTriPlanarSample(block, stage, state, ctx);
139
+ const out = OUTPUT[outputName] ?? OUTPUT.rgba;
140
+ const serialized = block.serialized;
141
+ const converted = applyColorSpace(sample.expr, outputName, serialized.convertToLinearSpace === true, serialized.convertToGammaSpace === true);
142
+ return { expr: converted === sample.expr ? `${sample.expr}${out.swizzle}` : converted, type: out.type };
143
+ }
144
+ };
145
+ export {
146
+ emitter
147
+ };
148
+ //# sourceMappingURL=triplanar-block-BZHkD9hX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triplanar-block-BZHkD9hX.js","sources":["../src/material/node/blocks/triplanar-block.ts"],"sourcesContent":["/** TriPlanarBlock — texture projection from position/normal.\n *\n * Implements the Babylon.js WGSL math for the common texture-source path:\n * uvx = position.yz, uvy = position.zx, uvz = position.xy\n * optional cube-facing flips\n * sample X/Y/Z projections\n * blend by pow(abs(normal), sharpness)\n *\n * Texture transform/level defaults are identity/1.0 unless serialized on the\n * block's embedded texture. Runtime ImageSource texture transforms are not part\n * of Lite's NME binding ABI today, so Scene 81 uses default transforms.\n */\n\nimport type { BlockEmitter, NodeBlock, NodeBuildState, NodeEmitContext, NodeExpr, NodeValueType, Stage } from \"../node-types.js\";\n\nconst OUTPUT: Record<string, { swizzle: string; type: NodeValueType }> = {\n rgba: { swizzle: \"\", type: \"vec4f\" },\n rgb: { swizzle: \".xyz\", type: \"vec3f\" },\n r: { swizzle: \".x\", type: \"f32\" },\n g: { swizzle: \".y\", type: \"f32\" },\n b: { swizzle: \".z\", type: \"f32\" },\n a: { swizzle: \".w\", type: \"f32\" },\n};\n\ninterface TextureTransform {\n readonly level: number;\n readonly uAng: number;\n readonly vAng: number;\n readonly wAng: number;\n readonly uOffset: number;\n readonly vOffset: number;\n readonly uScale: number;\n readonly vScale: number;\n}\n\nfunction sanitize(name: string): string {\n return name.replace(/[^A-Za-z0-9_]/g, \"_\");\n}\n\nfunction formatFloat(value: number): string {\n if (Number.isInteger(value)) {\n return `${value}.0`;\n }\n return `${value}`;\n}\n\nfunction textureTransform(block: NodeBlock): TextureTransform {\n const tex = block.serialized[\"texture\"] as Record<string, unknown> | null | undefined;\n const num = (name: string, fallback: number): number => {\n const value = tex?.[name];\n return typeof value === \"number\" ? value : fallback;\n };\n return {\n level: num(\"level\", 1),\n uAng: num(\"uAng\", 0),\n vAng: num(\"vAng\", 0),\n wAng: num(\"wAng\", 0),\n uOffset: num(\"uOffset\", 0),\n vOffset: num(\"vOffset\", 0),\n uScale: num(\"uScale\", 1),\n vScale: num(\"vScale\", 1),\n };\n}\n\nfunction bindingName(block: NodeBlock, inputName: string, ctx: NodeEmitContext, fallback: string): string {\n const input = block.inputs.get(inputName);\n if (input?.source) {\n const producer = ctx.graph.blocks.get(input.source.blockId);\n return sanitize(producer?.name || fallback);\n }\n return sanitize(fallback);\n}\n\nfunction ensureBinding(state: NodeBuildState, name: string): void {\n if (!state.textures.find((t) => t.name === name)) {\n state.textures.push({ name, kind: \"texture2d\", texture: null });\n }\n}\n\nfunction applyColorSpace(expr: string, outputName: string, convertToLinear: boolean, convertToGamma: boolean): string {\n if (!convertToLinear && !convertToGamma) {\n return expr;\n }\n const power = convertToLinear ? \"2.2\" : \"0.45454545\";\n if (outputName === \"rgba\") {\n return `vec4<f32>(pow(max(${expr}.xyz, vec3<f32>(0.0)), vec3<f32>(${power})), ${expr}.w)`;\n }\n if (outputName === \"rgb\") {\n return `pow(max(${expr}.xyz, vec3<f32>(0.0)), vec3<f32>(${power}))`;\n }\n if (outputName === \"r\" || outputName === \"g\" || outputName === \"b\") {\n return `pow(max(${expr}${OUTPUT[outputName]!.swizzle}, 0.0), ${power})`;\n }\n return expr;\n}\n\nfunction emitTriPlanarSample(block: NodeBlock, stage: Stage, state: NodeBuildState, ctx: NodeEmitContext): NodeExpr {\n if (stage !== \"fragment\") {\n throw new Error(\"TriPlanarBlock: texture projection is supported only in the fragment stage\");\n }\n\n const stageState = state.fragment;\n const memoKey = `_triplanar_${block.id}_sample`;\n const memo = stageState.memo.get(memoKey);\n if (memo) {\n return memo;\n }\n\n const baseName = sanitize(block.name || `triPlanar${block.id}`);\n const texX = bindingName(block, \"source\", ctx, baseName);\n const texY = bindingName(block, \"sourceY\", ctx, texX);\n const texZ = bindingName(block, \"sourceZ\", ctx, texX);\n ensureBinding(state, texX);\n ensureBinding(state, texY);\n ensureBinding(state, texZ);\n\n const position = ctx.cast(ctx.resolve(block, \"position\", stage, state), \"vec3f\");\n const normal = ctx.cast(ctx.resolve(block, \"normal\", stage, state), \"vec3f\");\n const sharpnessInput = block.inputs.get(\"sharpness\")?.source ? ctx.cast(ctx.resolve(block, \"sharpness\", stage, state), \"f32\").expr : \"1.0\";\n const transform = textureTransform(block);\n\n const temp = ctx.temp(state, \"tri\");\n const n = `_n${temp}`;\n const uvx = `_uvx${temp}`;\n const uvy = `_uvy${temp}`;\n const uvz = `_uvz${temp}`;\n const x = `_x${temp}`;\n const y = `_y${temp}`;\n const z = `_z${temp}`;\n const w = `_w${temp}`;\n const sample = `_sample${temp}`;\n\n stageState.body.push(`let ${n} = ${normal.expr};`);\n stageState.body.push(`var ${uvx} = (${position.expr}).yz;`);\n stageState.body.push(`var ${uvy} = (${position.expr}).zx;`);\n stageState.body.push(`var ${uvz} = (${position.expr}).xy;`);\n if (block.serialized[\"projectAsCube\"] === true) {\n stageState.body.push(`${uvx} = (${uvx}).yx;`);\n stageState.body.push(`if (${n}.x >= 0.0) { ${uvx}.x = -${uvx}.x; }`);\n stageState.body.push(`if (${n}.y < 0.0) { ${uvy}.y = -${uvy}.y; }`);\n stageState.body.push(`if (${n}.z < 0.0) { ${uvz}.x = -${uvz}.x; }`);\n }\n stageState.body.push(`let _cU${temp} = cos(${formatFloat(transform.uAng)});`);\n stageState.body.push(`let _sU${temp} = sin(${formatFloat(transform.uAng)});`);\n stageState.body.push(`${uvx} = mat2x2<f32>(_cU${temp}, -_sU${temp}, _sU${temp}, _cU${temp}) * ${uvx};`);\n stageState.body.push(`let _cV${temp} = cos(${formatFloat(transform.vAng)});`);\n stageState.body.push(`let _sV${temp} = sin(${formatFloat(transform.vAng)});`);\n stageState.body.push(`${uvy} = mat2x2<f32>(_cV${temp}, _sV${temp}, -_sV${temp}, _cV${temp}) * ${uvy};`);\n stageState.body.push(`let _cW${temp} = cos(${formatFloat(transform.wAng)});`);\n stageState.body.push(`let _sW${temp} = sin(${formatFloat(transform.wAng)});`);\n stageState.body.push(`${uvz} = mat2x2<f32>(_cW${temp}, -_sW${temp}, _sW${temp}, _cW${temp}) * ${uvz};`);\n stageState.body.push(`let _scale${temp} = vec2<f32>(${formatFloat(transform.uScale)}, ${formatFloat(transform.vScale)});`);\n stageState.body.push(`let _offset${temp} = vec2<f32>(${formatFloat(transform.uOffset)}, ${formatFloat(transform.vOffset)});`);\n stageState.body.push(`${uvx} = ${uvx} * _scale${temp} + _offset${temp};`);\n stageState.body.push(`${uvy} = ${uvy} * _scale${temp} + _offset${temp};`);\n stageState.body.push(`${uvz} = ${uvz} * _scale${temp} + _offset${temp};`);\n stageState.body.push(`let ${x} = textureSample(nodeTex_${texX}, nodeSamp_${texX}, ${uvx});`);\n stageState.body.push(`let ${y} = textureSample(nodeTex_${texY}, nodeSamp_${texY}, ${uvy});`);\n stageState.body.push(`let ${z} = textureSample(nodeTex_${texZ}, nodeSamp_${texZ}, ${uvz});`);\n stageState.body.push(`let ${w} = pow(abs(${n}), vec3<f32>(${sharpnessInput}));`);\n stageState.body.push(\n `let ${sample} = ((${x} * ${w}.x + ${y} * ${w}.y + ${z} * ${w}.z) / (${w}.x + ${w}.y + ${w}.z)) * ${formatFloat(block.serialized[\"disableLevelMultiplication\"] === true ? 1 : transform.level)};`\n );\n\n const result = { expr: sample, type: \"vec4f\" } as const;\n stageState.memo.set(memoKey, result);\n return result;\n}\n\nexport const emitter: BlockEmitter = {\n className: \"TriPlanarBlock\",\n emit(block, outputName, stage, state, ctx) {\n if (outputName === \"level\") {\n const transform = textureTransform(block);\n return { expr: formatFloat(transform.level), type: \"f32\" };\n }\n const sample = emitTriPlanarSample(block, stage, state, ctx);\n const out = OUTPUT[outputName] ?? OUTPUT.rgba!;\n const serialized = block.serialized as { convertToLinearSpace?: boolean; convertToGammaSpace?: boolean };\n const converted = applyColorSpace(sample.expr, outputName, serialized.convertToLinearSpace === true, serialized.convertToGammaSpace === true);\n return { expr: converted === sample.expr ? `${sample.expr}${out.swizzle}` : converted, type: out.type };\n },\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ const OUTPUTS = {
2
+ output: { swizzle: "", type: "vec2f" },
3
+ x: { swizzle: ".x", type: "f32" },
4
+ y: { swizzle: ".y", type: "f32" }
5
+ };
6
+ function defaultVec2(expr) {
7
+ return { expr, type: "vec2f" };
8
+ }
9
+ function defaultF32(expr) {
10
+ return { expr, type: "f32" };
11
+ }
12
+ const emitter = {
13
+ className: "TwirlBlock",
14
+ stage: "fragment",
15
+ emit(block, outputName, stage, state, ctx) {
16
+ var _a, _b, _c;
17
+ const input = ctx.cast(ctx.resolve(block, "input", stage, state), "vec2f");
18
+ const strength = ctx.cast(((_a = block.inputs.get("strength")) == null ? void 0 : _a.source) ? ctx.resolve(block, "strength", stage, state) : defaultF32("1.0"), "f32");
19
+ const center = ctx.cast(((_b = block.inputs.get("center")) == null ? void 0 : _b.source) ? ctx.resolve(block, "center", stage, state) : defaultVec2("vec2<f32>(0.5, 0.5)"), "vec2f");
20
+ const offset = ctx.cast(((_c = block.inputs.get("offset")) == null ? void 0 : _c.source) ? ctx.resolve(block, "offset", stage, state) : defaultVec2("vec2<f32>(0.0, 0.0)"), "vec2f");
21
+ const delta = ctx.temp(state, "twirlDelta");
22
+ const angle = ctx.temp(state, "twirlAngle");
23
+ const result = ctx.temp(state, "twirl");
24
+ state.fragment.body.push(`let ${delta} = ${input.expr} - ${center.expr};`);
25
+ state.fragment.body.push(`let ${angle} = ${strength.expr} * length(${delta});`);
26
+ state.fragment.body.push(
27
+ `let ${result} = vec2<f32>(cos(${angle}) * ${delta}.x - sin(${angle}) * ${delta}.y, sin(${angle}) * ${delta}.x + cos(${angle}) * ${delta}.y) + ${center.expr} + ${offset.expr};`
28
+ );
29
+ const out = OUTPUTS[outputName];
30
+ if (!out) {
31
+ throw new Error(`NodeMaterial: TwirlBlock has no output "${outputName}"`);
32
+ }
33
+ return { expr: `${result}${out.swizzle}`, type: out.type };
34
+ }
35
+ };
36
+ export {
37
+ emitter
38
+ };
39
+ //# sourceMappingURL=twirl-block-78WtdiBd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"twirl-block-78WtdiBd.js","sources":["../src/material/node/blocks/twirl-block.ts"],"sourcesContent":["/** TwirlBlock — rotates a vec2 around a center by strength * distance, then adds offset. */\n\nimport type { BlockEmitter, NodeValueType } from \"../node-types.js\";\n\nconst OUTPUTS: Record<string, { readonly swizzle: string; readonly type: NodeValueType }> = {\n output: { swizzle: \"\", type: \"vec2f\" },\n x: { swizzle: \".x\", type: \"f32\" },\n y: { swizzle: \".y\", type: \"f32\" },\n};\n\nfunction defaultVec2(expr: string): { readonly expr: string; readonly type: \"vec2f\" } {\n return { expr, type: \"vec2f\" };\n}\n\nfunction defaultF32(expr: string): { readonly expr: string; readonly type: \"f32\" } {\n return { expr, type: \"f32\" };\n}\n\nexport const emitter: BlockEmitter = {\n className: \"TwirlBlock\",\n stage: \"fragment\",\n emit(block, outputName, stage, state, ctx) {\n const input = ctx.cast(ctx.resolve(block, \"input\", stage, state), \"vec2f\");\n const strength = ctx.cast(block.inputs.get(\"strength\")?.source ? ctx.resolve(block, \"strength\", stage, state) : defaultF32(\"1.0\"), \"f32\");\n const center = ctx.cast(block.inputs.get(\"center\")?.source ? ctx.resolve(block, \"center\", stage, state) : defaultVec2(\"vec2<f32>(0.5, 0.5)\"), \"vec2f\");\n const offset = ctx.cast(block.inputs.get(\"offset\")?.source ? ctx.resolve(block, \"offset\", stage, state) : defaultVec2(\"vec2<f32>(0.0, 0.0)\"), \"vec2f\");\n const delta = ctx.temp(state, \"twirlDelta\");\n const angle = ctx.temp(state, \"twirlAngle\");\n const result = ctx.temp(state, \"twirl\");\n state.fragment.body.push(`let ${delta} = ${input.expr} - ${center.expr};`);\n state.fragment.body.push(`let ${angle} = ${strength.expr} * length(${delta});`);\n state.fragment.body.push(\n `let ${result} = vec2<f32>(cos(${angle}) * ${delta}.x - sin(${angle}) * ${delta}.y, sin(${angle}) * ${delta}.x + cos(${angle}) * ${delta}.y) + ${center.expr} + ${offset.expr};`\n );\n const out = OUTPUTS[outputName];\n if (!out) {\n throw new Error(`NodeMaterial: TwirlBlock has no output \"${outputName}\"`);\n }\n return { expr: `${result}${out.swizzle}`, type: out.type };\n },\n};\n"],"names":[],"mappings":"AAIA,MAAM,UAAsF;AAAA,EACxF,QAAQ,EAAE,SAAS,IAAI,MAAM,QAAA;AAAA,EAC7B,GAAG,EAAE,SAAS,MAAM,MAAM,MAAA;AAAA,EAC1B,GAAG,EAAE,SAAS,MAAM,MAAM,MAAA;AAC9B;AAEA,SAAS,YAAY,MAAiE;AAClF,SAAO,EAAE,MAAM,MAAM,QAAA;AACzB;AAEA,SAAS,WAAW,MAA+D;AAC/E,SAAO,EAAE,MAAM,MAAM,MAAA;AACzB;AAEO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,OAAO;AAAA,EACP,KAAK,OAAO,YAAY,OAAO,OAAO,KAAK;AAjB/C;AAkBQ,UAAM,QAAQ,IAAI,KAAK,IAAI,QAAQ,OAAO,SAAS,OAAO,KAAK,GAAG,OAAO;AACzE,UAAM,WAAW,IAAI,OAAK,WAAM,OAAO,IAAI,UAAU,MAA3B,mBAA8B,UAAS,IAAI,QAAQ,OAAO,YAAY,OAAO,KAAK,IAAI,WAAW,KAAK,GAAG,KAAK;AACxI,UAAM,SAAS,IAAI,OAAK,WAAM,OAAO,IAAI,QAAQ,MAAzB,mBAA4B,UAAS,IAAI,QAAQ,OAAO,UAAU,OAAO,KAAK,IAAI,YAAY,qBAAqB,GAAG,OAAO;AACrJ,UAAM,SAAS,IAAI,OAAK,WAAM,OAAO,IAAI,QAAQ,MAAzB,mBAA4B,UAAS,IAAI,QAAQ,OAAO,UAAU,OAAO,KAAK,IAAI,YAAY,qBAAqB,GAAG,OAAO;AACrJ,UAAM,QAAQ,IAAI,KAAK,OAAO,YAAY;AAC1C,UAAM,QAAQ,IAAI,KAAK,OAAO,YAAY;AAC1C,UAAM,SAAS,IAAI,KAAK,OAAO,OAAO;AACtC,UAAM,SAAS,KAAK,KAAK,OAAO,KAAK,MAAM,MAAM,IAAI,MAAM,OAAO,IAAI,GAAG;AACzE,UAAM,SAAS,KAAK,KAAK,OAAO,KAAK,MAAM,SAAS,IAAI,aAAa,KAAK,IAAI;AAC9E,UAAM,SAAS,KAAK;AAAA,MAChB,OAAO,MAAM,oBAAoB,KAAK,OAAO,KAAK,YAAY,KAAK,OAAO,KAAK,WAAW,KAAK,OAAO,KAAK,YAAY,KAAK,OAAO,KAAK,SAAS,OAAO,IAAI,MAAM,OAAO,IAAI;AAAA,IAAA;AAEjL,UAAM,MAAM,QAAQ,UAAU;AAC9B,QAAI,CAAC,KAAK;AACN,YAAM,IAAI,MAAM,2CAA2C,UAAU,GAAG;AAAA,IAC5E;AACA,WAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,OAAO,IAAI,MAAM,IAAI,KAAA;AAAA,EACxD;AACJ;"}
@@ -0,0 +1,43 @@
1
+ import { aM as PBR2_HAS_UNLIT } from "./index-C8HOR2sB.js";
2
+ function createUnlitFragment(hasIbl) {
3
+ const assign = `color = baseColor * material.unlitColor;`;
4
+ return {
5
+ _id: "unlit",
6
+ _dependencies: hasIbl ? ["ibl"] : void 0,
7
+ _uboFields: [
8
+ { _name: "unlitColor", _type: "vec3<f32>" },
9
+ { _name: "_unlitColorPad", _type: "f32" }
10
+ ],
11
+ _fragmentSlots: hasIbl ? { AI: assign } : { NI: assign }
12
+ };
13
+ }
14
+ function writeUnlitUBO(data, material, offsets) {
15
+ if (!material.unlit || !offsets.has("unlitColor")) {
16
+ return;
17
+ }
18
+ const off = offsets.get("unlitColor") / 4;
19
+ const tint = material.unlitColor ?? [1, 1, 1];
20
+ data[off] = tint[0];
21
+ data[off + 1] = tint[1];
22
+ data[off + 2] = tint[2];
23
+ }
24
+ const pbrExt = {
25
+ id: "unlit",
26
+ phase: "fragment",
27
+ detect(mat) {
28
+ return mat.unlit ? { f: 0, f2: PBR2_HAS_UNLIT } : { f: 0, f2: 0 };
29
+ },
30
+ frag(ctx) {
31
+ if (!(ctx._features2 & PBR2_HAS_UNLIT)) {
32
+ return null;
33
+ }
34
+ return createUnlitFragment(ctx._hasIbl);
35
+ },
36
+ writeUbo: writeUnlitUBO
37
+ };
38
+ export {
39
+ createUnlitFragment,
40
+ pbrExt,
41
+ writeUnlitUBO
42
+ };
43
+ //# sourceMappingURL=unlit-fragment-BIlhJpz6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unlit-fragment-BIlhJpz6.js","sources":["../src/material/pbr/fragments/unlit-fragment.ts"],"sourcesContent":["/**\n * Unlit Fragment (KHR_materials_unlit).\n *\n * Replaces the lit-color computation with `baseColor * unlitColor` right\n * before the tonemap/gamma/contrast chain runs. Depends on the IBL fragment\n * when present so our AI injection runs *after* IBL's, overwriting the IBL\n * color contribution. The subsequent tonemap/gamma/contrast stages still\n * apply, matching BJS's unlit output under `createDefaultEnvironment`.\n *\n * Zero bytes in bundles for scenes that don't use unlit materials.\n */\n\nimport type { ShaderFragment } from \"../../../shader/fragment-types.js\";\nimport type { PbrMaterialProps } from \"../pbr-material.js\";\nimport type { PbrExt } from \"../pbr-flags.js\";\nimport { PBR2_HAS_UNLIT } from \"../pbr-flag-bits.js\";\n\nexport function createUnlitFragment(hasIbl: boolean): ShaderFragment {\n const assign = `color = baseColor * material.unlitColor;`;\n return {\n _id: \"unlit\",\n _dependencies: hasIbl ? [\"ibl\"] : undefined,\n _uboFields: [\n { _name: \"unlitColor\", _type: \"vec3<f32>\" },\n { _name: \"_unlitColorPad\", _type: \"f32\" },\n ],\n _fragmentSlots: hasIbl ? { AI: assign } : { NI: assign },\n };\n}\n\n/** Write the unlit material-UBO slice. */\nexport function writeUnlitUBO(data: Float32Array, material: PbrMaterialProps, offsets: ReadonlyMap<string, number>): void {\n if (!material.unlit || !offsets.has(\"unlitColor\")) {\n return;\n }\n const off = offsets.get(\"unlitColor\")! / 4;\n const tint = material.unlitColor ?? [1, 1, 1];\n data[off] = tint[0]!;\n data[off + 1] = tint[1]!;\n data[off + 2] = tint[2]!;\n}\n\nexport const pbrExt: PbrExt = {\n id: \"unlit\",\n phase: \"fragment\",\n detect(mat) {\n return (mat as PbrMaterialProps).unlit ? { f: 0, f2: PBR2_HAS_UNLIT } : { f: 0, f2: 0 };\n },\n frag(ctx) {\n if (!(ctx._features2 & PBR2_HAS_UNLIT)) {\n return null;\n }\n return createUnlitFragment(ctx._hasIbl);\n },\n writeUbo: writeUnlitUBO as PbrExt[\"writeUbo\"],\n};\n"],"names":[],"mappings":";AAiBO,SAAS,oBAAoB,QAAiC;AACjE,QAAM,SAAS;AACf,SAAO;AAAA,IACH,KAAK;AAAA,IACL,eAAe,SAAS,CAAC,KAAK,IAAI;AAAA,IAClC,YAAY;AAAA,MACR,EAAE,OAAO,cAAc,OAAO,YAAA;AAAA,MAC9B,EAAE,OAAO,kBAAkB,OAAO,MAAA;AAAA,IAAM;AAAA,IAE5C,gBAAgB,SAAS,EAAE,IAAI,WAAW,EAAE,IAAI,OAAA;AAAA,EAAO;AAE/D;AAGO,SAAS,cAAc,MAAoB,UAA4B,SAA4C;AACtH,MAAI,CAAC,SAAS,SAAS,CAAC,QAAQ,IAAI,YAAY,GAAG;AAC/C;AAAA,EACJ;AACA,QAAM,MAAM,QAAQ,IAAI,YAAY,IAAK;AACzC,QAAM,OAAO,SAAS,cAAc,CAAC,GAAG,GAAG,CAAC;AAC5C,OAAK,GAAG,IAAI,KAAK,CAAC;AAClB,OAAK,MAAM,CAAC,IAAI,KAAK,CAAC;AACtB,OAAK,MAAM,CAAC,IAAI,KAAK,CAAC;AAC1B;AAEO,MAAM,SAAiB;AAAA,EAC1B,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,OAAO,KAAK;AACR,WAAQ,IAAyB,QAAQ,EAAE,GAAG,GAAG,IAAI,eAAA,IAAmB,EAAE,GAAG,GAAG,IAAI,EAAA;AAAA,EACxF;AAAA,EACA,KAAK,KAAK;AACN,QAAI,EAAE,IAAI,aAAa,iBAAiB;AACpC,aAAO;AAAA,IACX;AACA,WAAO,oBAAoB,IAAI,OAAO;AAAA,EAC1C;AAAA,EACA,UAAU;AACd;"}
@@ -0,0 +1,47 @@
1
+ function writeOne(data, offsets, texName, tex) {
2
+ const mOff = offsets.get(`${texName}UVm`);
3
+ const tOff = offsets.get(`${texName}UVt`);
4
+ if (mOff === void 0 || tOff === void 0) {
5
+ return;
6
+ }
7
+ const mi = mOff / 4;
8
+ const ti = tOff / 4;
9
+ const sx = (tex == null ? void 0 : tex.uScale) ?? 1;
10
+ const sy = (tex == null ? void 0 : tex.vScale) ?? 1;
11
+ const ang = (tex == null ? void 0 : tex.uAng) ?? 0;
12
+ const ox = (tex == null ? void 0 : tex.uOffset) ?? 0;
13
+ const oy = (tex == null ? void 0 : tex.vOffset) ?? 0;
14
+ if (ang === 0) {
15
+ data[mi] = sx;
16
+ data[mi + 1] = 0;
17
+ data[mi + 2] = 0;
18
+ data[mi + 3] = sy;
19
+ } else {
20
+ const c = Math.cos(ang);
21
+ const s = Math.sin(ang);
22
+ data[mi] = c * sx;
23
+ data[mi + 1] = -s * sy;
24
+ data[mi + 2] = s * sx;
25
+ data[mi + 3] = c * sy;
26
+ }
27
+ data[ti] = ox;
28
+ data[ti + 1] = oy;
29
+ data[ti + 2] = 0;
30
+ data[ti + 3] = 0;
31
+ }
32
+ const pbrExt = {
33
+ id: "uv-transform",
34
+ phase: "fragment",
35
+ writeUbo(data, material, offsets) {
36
+ const m = material;
37
+ writeOne(data, offsets, "baseColor", m.baseColorTexture);
38
+ writeOne(data, offsets, "normal", m.normalTexture);
39
+ writeOne(data, offsets, "orm", m.ormTexture);
40
+ writeOne(data, offsets, "emissive", m.emissiveTexture);
41
+ writeOne(data, offsets, "specGloss", m.specGlossTexture);
42
+ }
43
+ };
44
+ export {
45
+ pbrExt
46
+ };
47
+ //# sourceMappingURL=uv-transform-fragment-hYujGpZg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uv-transform-fragment-hYujGpZg.js","sources":["../src/material/pbr/fragments/uv-transform-fragment.ts"],"sourcesContent":["/** UV-transform PbrExt. Registered lazily only when a scene actually has a\n * material with PBR2_HAS_UV_TRANSFORM set, so non-UV-transform bundles pay\n * zero bytes. Template-only ext — contributes no fragment or bindings, just\n * a material-UBO slice. */\n\nimport type { Texture2D } from \"../../../texture/texture-2d.js\";\nimport type { PbrMaterialProps } from \"../pbr-material.js\";\nimport type { PbrExt } from \"../pbr-flags.js\";\n\nfunction writeOne(data: Float32Array, offsets: ReadonlyMap<string, number>, texName: string, tex: Texture2D | null | undefined): void {\n const mOff = offsets.get(`${texName}UVm`);\n const tOff = offsets.get(`${texName}UVt`);\n if (mOff === undefined || tOff === undefined) {\n return;\n }\n const mi = mOff / 4;\n const ti = tOff / 4;\n const sx = tex?.uScale ?? 1;\n const sy = tex?.vScale ?? 1;\n const ang = tex?.uAng ?? 0;\n const ox = tex?.uOffset ?? 0;\n const oy = tex?.vOffset ?? 0;\n if (ang === 0) {\n data[mi] = sx;\n data[mi + 1] = 0;\n data[mi + 2] = 0;\n data[mi + 3] = sy;\n } else {\n const c = Math.cos(ang);\n const s = Math.sin(ang);\n data[mi] = c * sx;\n data[mi + 1] = -s * sy;\n data[mi + 2] = s * sx;\n data[mi + 3] = c * sy;\n }\n data[ti] = ox;\n data[ti + 1] = oy;\n data[ti + 2] = 0;\n data[ti + 3] = 0;\n}\n\nexport const pbrExt: PbrExt = {\n id: \"uv-transform\",\n phase: \"fragment\",\n writeUbo(data: Float32Array, material: unknown, offsets: ReadonlyMap<string, number>): void {\n const m = material as PbrMaterialProps;\n writeOne(data, offsets, \"baseColor\", m.baseColorTexture);\n writeOne(data, offsets, \"normal\", m.normalTexture);\n writeOne(data, offsets, \"orm\", m.ormTexture);\n writeOne(data, offsets, \"emissive\", m.emissiveTexture);\n writeOne(data, offsets, \"specGloss\", m.specGlossTexture);\n },\n};\n"],"names":[],"mappings":"AASA,SAAS,SAAS,MAAoB,SAAsC,SAAiB,KAAyC;AAClI,QAAM,OAAO,QAAQ,IAAI,GAAG,OAAO,KAAK;AACxC,QAAM,OAAO,QAAQ,IAAI,GAAG,OAAO,KAAK;AACxC,MAAI,SAAS,UAAa,SAAS,QAAW;AAC1C;AAAA,EACJ;AACA,QAAM,KAAK,OAAO;AAClB,QAAM,KAAK,OAAO;AAClB,QAAM,MAAK,2BAAK,WAAU;AAC1B,QAAM,MAAK,2BAAK,WAAU;AAC1B,QAAM,OAAM,2BAAK,SAAQ;AACzB,QAAM,MAAK,2BAAK,YAAW;AAC3B,QAAM,MAAK,2BAAK,YAAW;AAC3B,MAAI,QAAQ,GAAG;AACX,SAAK,EAAE,IAAI;AACX,SAAK,KAAK,CAAC,IAAI;AACf,SAAK,KAAK,CAAC,IAAI;AACf,SAAK,KAAK,CAAC,IAAI;AAAA,EACnB,OAAO;AACH,UAAM,IAAI,KAAK,IAAI,GAAG;AACtB,UAAM,IAAI,KAAK,IAAI,GAAG;AACtB,SAAK,EAAE,IAAI,IAAI;AACf,SAAK,KAAK,CAAC,IAAI,CAAC,IAAI;AACpB,SAAK,KAAK,CAAC,IAAI,IAAI;AACnB,SAAK,KAAK,CAAC,IAAI,IAAI;AAAA,EACvB;AACA,OAAK,EAAE,IAAI;AACX,OAAK,KAAK,CAAC,IAAI;AACf,OAAK,KAAK,CAAC,IAAI;AACf,OAAK,KAAK,CAAC,IAAI;AACnB;AAEO,MAAM,SAAiB;AAAA,EAC1B,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,SAAS,MAAoB,UAAmB,SAA4C;AACxF,UAAM,IAAI;AACV,aAAS,MAAM,SAAS,aAAa,EAAE,gBAAgB;AACvD,aAAS,MAAM,SAAS,UAAU,EAAE,aAAa;AACjD,aAAS,MAAM,SAAS,OAAO,EAAE,UAAU;AAC3C,aAAS,MAAM,SAAS,YAAY,EAAE,eAAe;AACrD,aAAS,MAAM,SAAS,aAAa,EAAE,gBAAgB;AAAA,EAC3D;AACJ;"}
@@ -0,0 +1,43 @@
1
+ function tryResolve(block, inputName, stage, state, ctx) {
2
+ const input = block.inputs.get(inputName);
3
+ if (!input || !input.source) {
4
+ return null;
5
+ }
6
+ return ctx.resolve(block, inputName, stage, state);
7
+ }
8
+ function tryResolveAny(block, inputNames, stage, state, ctx) {
9
+ for (const inputName of inputNames) {
10
+ const resolved = tryResolve(block, inputName, stage, state, ctx);
11
+ if (resolved) {
12
+ return resolved;
13
+ }
14
+ }
15
+ return null;
16
+ }
17
+ const emitter = {
18
+ className: "VectorMergerBlock",
19
+ emit(block, outputName, stage, state, ctx) {
20
+ const xyzIn = tryResolveAny(block, ["xyzIn", "xyz"], stage, state, ctx);
21
+ const xyIn = tryResolveAny(block, ["xyIn", "xy"], stage, state, ctx);
22
+ const zwIn = tryResolveAny(block, ["zwIn", "zw"], stage, state, ctx);
23
+ const x = tryResolve(block, "x", stage, state, ctx);
24
+ const y = tryResolve(block, "y", stage, state, ctx);
25
+ const z = tryResolve(block, "z", stage, state, ctx);
26
+ const w = tryResolve(block, "w", stage, state, ctx);
27
+ const sx = x ? ctx.cast(x, "f32").expr : xyIn ? `(${xyIn.expr}).x` : xyzIn ? `(${xyzIn.expr}).x` : "0.0";
28
+ const sy = y ? ctx.cast(y, "f32").expr : xyIn ? `(${xyIn.expr}).y` : xyzIn ? `(${xyzIn.expr}).y` : "0.0";
29
+ const sz = z ? ctx.cast(z, "f32").expr : zwIn ? `(${zwIn.expr}).x` : xyzIn ? `(${xyzIn.expr}).z` : "0.0";
30
+ const sw = w ? ctx.cast(w, "f32").expr : zwIn ? `(${zwIn.expr}).y` : "0.0";
31
+ if (outputName === "xy") {
32
+ return { expr: `vec2<f32>(${sx}, ${sy})`, type: "vec2f" };
33
+ }
34
+ if (outputName === "xyz") {
35
+ return { expr: `vec3<f32>(${sx}, ${sy}, ${sz})`, type: "vec3f" };
36
+ }
37
+ return { expr: `vec4<f32>(${sx}, ${sy}, ${sz}, ${sw})`, type: "vec4f" };
38
+ }
39
+ };
40
+ export {
41
+ emitter
42
+ };
43
+ //# sourceMappingURL=vector-merger-CrW-ONB0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-merger-CrW-ONB0.js","sources":["../src/material/node/blocks/vector-merger.ts"],"sourcesContent":["/** VectorMergerBlock emitter.\n *\n * Combines up to 4 scalar/vector inputs into a vector output. BJS input names:\n * `xyIn`, `zwIn`, `xyzIn`, `x`, `y`, `z`, `w`. Outputs: `xyzw`, `xyz`, `xy`.\n * Unconnected inputs default to 0.\n */\n\nimport type { BlockEmitter, NodeExpr, NodeEmitContext, NodeBuildState, NodeBlock, Stage } from \"../node-types.js\";\n\nfunction tryResolve(block: NodeBlock, inputName: string, stage: Stage, state: NodeBuildState, ctx: NodeEmitContext): NodeExpr | null {\n const input = block.inputs.get(inputName);\n if (!input || !input.source) {\n return null;\n }\n return ctx.resolve(block, inputName, stage, state);\n}\n\nfunction tryResolveAny(block: NodeBlock, inputNames: string[], stage: Stage, state: NodeBuildState, ctx: NodeEmitContext): NodeExpr | null {\n for (const inputName of inputNames) {\n const resolved = tryResolve(block, inputName, stage, state, ctx);\n if (resolved) {\n return resolved;\n }\n }\n return null;\n}\n\nexport const emitter: BlockEmitter = {\n className: \"VectorMergerBlock\",\n emit(block, outputName, stage, state, ctx) {\n // Resolve optional inputs. Prefer bundle (xyzIn/xyIn/zwIn) over scalar (x/y/z/w).\n const xyzIn = tryResolveAny(block, [\"xyzIn\", \"xyz\"], stage, state, ctx);\n const xyIn = tryResolveAny(block, [\"xyIn\", \"xy\"], stage, state, ctx);\n const zwIn = tryResolveAny(block, [\"zwIn\", \"zw\"], stage, state, ctx);\n const x = tryResolve(block, \"x\", stage, state, ctx);\n const y = tryResolve(block, \"y\", stage, state, ctx);\n const z = tryResolve(block, \"z\", stage, state, ctx);\n const w = tryResolve(block, \"w\", stage, state, ctx);\n\n const sx = x ? ctx.cast(x, \"f32\").expr : xyIn ? `(${xyIn.expr}).x` : xyzIn ? `(${xyzIn.expr}).x` : \"0.0\";\n const sy = y ? ctx.cast(y, \"f32\").expr : xyIn ? `(${xyIn.expr}).y` : xyzIn ? `(${xyzIn.expr}).y` : \"0.0\";\n const sz = z ? ctx.cast(z, \"f32\").expr : zwIn ? `(${zwIn.expr}).x` : xyzIn ? `(${xyzIn.expr}).z` : \"0.0\";\n const sw = w ? ctx.cast(w, \"f32\").expr : zwIn ? `(${zwIn.expr}).y` : \"0.0\";\n\n if (outputName === \"xy\") {\n return { expr: `vec2<f32>(${sx}, ${sy})`, type: \"vec2f\" };\n }\n if (outputName === \"xyz\") {\n return { expr: `vec3<f32>(${sx}, ${sy}, ${sz})`, type: \"vec3f\" };\n }\n // Default to xyzw.\n return { expr: `vec4<f32>(${sx}, ${sy}, ${sz}, ${sw})`, type: \"vec4f\" };\n },\n};\n"],"names":[],"mappings":"AASA,SAAS,WAAW,OAAkB,WAAmB,OAAc,OAAuB,KAAuC;AACjI,QAAM,QAAQ,MAAM,OAAO,IAAI,SAAS;AACxC,MAAI,CAAC,SAAS,CAAC,MAAM,QAAQ;AACzB,WAAO;AAAA,EACX;AACA,SAAO,IAAI,QAAQ,OAAO,WAAW,OAAO,KAAK;AACrD;AAEA,SAAS,cAAc,OAAkB,YAAsB,OAAc,OAAuB,KAAuC;AACvI,aAAW,aAAa,YAAY;AAChC,UAAM,WAAW,WAAW,OAAO,WAAW,OAAO,OAAO,GAAG;AAC/D,QAAI,UAAU;AACV,aAAO;AAAA,IACX;AAAA,EACJ;AACA,SAAO;AACX;AAEO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,KAAK,OAAO,YAAY,OAAO,OAAO,KAAK;AAEvC,UAAM,QAAQ,cAAc,OAAO,CAAC,SAAS,KAAK,GAAG,OAAO,OAAO,GAAG;AACtE,UAAM,OAAO,cAAc,OAAO,CAAC,QAAQ,IAAI,GAAG,OAAO,OAAO,GAAG;AACnE,UAAM,OAAO,cAAc,OAAO,CAAC,QAAQ,IAAI,GAAG,OAAO,OAAO,GAAG;AACnE,UAAM,IAAI,WAAW,OAAO,KAAK,OAAO,OAAO,GAAG;AAClD,UAAM,IAAI,WAAW,OAAO,KAAK,OAAO,OAAO,GAAG;AAClD,UAAM,IAAI,WAAW,OAAO,KAAK,OAAO,OAAO,GAAG;AAClD,UAAM,IAAI,WAAW,OAAO,KAAK,OAAO,OAAO,GAAG;AAElD,UAAM,KAAK,IAAI,IAAI,KAAK,GAAG,KAAK,EAAE,OAAO,OAAO,IAAI,KAAK,IAAI,QAAQ,QAAQ,IAAI,MAAM,IAAI,QAAQ;AACnG,UAAM,KAAK,IAAI,IAAI,KAAK,GAAG,KAAK,EAAE,OAAO,OAAO,IAAI,KAAK,IAAI,QAAQ,QAAQ,IAAI,MAAM,IAAI,QAAQ;AACnG,UAAM,KAAK,IAAI,IAAI,KAAK,GAAG,KAAK,EAAE,OAAO,OAAO,IAAI,KAAK,IAAI,QAAQ,QAAQ,IAAI,MAAM,IAAI,QAAQ;AACnG,UAAM,KAAK,IAAI,IAAI,KAAK,GAAG,KAAK,EAAE,OAAO,OAAO,IAAI,KAAK,IAAI,QAAQ;AAErE,QAAI,eAAe,MAAM;AACrB,aAAO,EAAE,MAAM,aAAa,EAAE,KAAK,EAAE,KAAK,MAAM,QAAA;AAAA,IACpD;AACA,QAAI,eAAe,OAAO;AACtB,aAAO,EAAE,MAAM,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,MAAM,QAAA;AAAA,IAC3D;AAEA,WAAO,EAAE,MAAM,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,MAAM,QAAA;AAAA,EAClE;AACJ;"}
@@ -0,0 +1,34 @@
1
+ const COMPONENT = {
2
+ xyzw: { swizzle: "", type: "vec4f" },
3
+ xyz: { swizzle: ".xyz", type: "vec3f" },
4
+ xy: { swizzle: ".xy", type: "vec2f" },
5
+ x: { swizzle: ".x", type: "f32" },
6
+ y: { swizzle: ".y", type: "f32" },
7
+ z: { swizzle: ".z", type: "f32" },
8
+ w: { swizzle: ".w", type: "f32" }
9
+ };
10
+ const emitter = {
11
+ className: "VectorSplitterBlock",
12
+ emit(block, outputName, stage, state, ctx) {
13
+ var _a;
14
+ let source = null;
15
+ for (const key of ["xyzw", "xyz", "xy"]) {
16
+ if ((_a = block.inputs.get(key)) == null ? void 0 : _a.source) {
17
+ source = ctx.resolve(block, key, stage, state);
18
+ break;
19
+ }
20
+ }
21
+ if (!source) {
22
+ throw new Error(`NodeMaterial: VectorSplitterBlock (id=${block.id}) has no connected input`);
23
+ }
24
+ const c = COMPONENT[outputName];
25
+ if (!c) {
26
+ throw new Error(`NodeMaterial: VectorSplitterBlock has no output "${outputName}"`);
27
+ }
28
+ return { expr: `(${source.expr})${c.swizzle}`, type: c.type };
29
+ }
30
+ };
31
+ export {
32
+ emitter
33
+ };
34
+ //# sourceMappingURL=vector-splitter-BoJuHrAU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-splitter-BoJuHrAU.js","sources":["../src/material/node/blocks/vector-splitter.ts"],"sourcesContent":["/** VectorSplitterBlock — splits a vector into sub-vectors / components. */\n\nimport type { BlockEmitter, NodeExpr, NodeValueType } from \"../node-types.js\";\n\nconst COMPONENT: Record<string, { swizzle: string; type: NodeValueType }> = {\n xyzw: { swizzle: \"\", type: \"vec4f\" },\n xyz: { swizzle: \".xyz\", type: \"vec3f\" },\n xy: { swizzle: \".xy\", type: \"vec2f\" },\n x: { swizzle: \".x\", type: \"f32\" },\n y: { swizzle: \".y\", type: \"f32\" },\n z: { swizzle: \".z\", type: \"f32\" },\n w: { swizzle: \".w\", type: \"f32\" },\n};\n\nexport const emitter: BlockEmitter = {\n className: \"VectorSplitterBlock\",\n emit(block, outputName, stage, state, ctx) {\n // Pick the widest connected input: xyzw > xyz > xy\n let source: NodeExpr | null = null;\n for (const key of [\"xyzw\", \"xyz\", \"xy\"] as const) {\n if (block.inputs.get(key)?.source) {\n source = ctx.resolve(block, key, stage, state);\n break;\n }\n }\n if (!source) {\n throw new Error(`NodeMaterial: VectorSplitterBlock (id=${block.id}) has no connected input`);\n }\n const c = COMPONENT[outputName];\n if (!c) {\n throw new Error(`NodeMaterial: VectorSplitterBlock has no output \"${outputName}\"`);\n }\n return { expr: `(${source.expr})${c.swizzle}`, type: c.type };\n },\n};\n"],"names":[],"mappings":"AAIA,MAAM,YAAsE;AAAA,EACxE,MAAM,EAAE,SAAS,IAAI,MAAM,QAAA;AAAA,EAC3B,KAAK,EAAE,SAAS,QAAQ,MAAM,QAAA;AAAA,EAC9B,IAAI,EAAE,SAAS,OAAO,MAAM,QAAA;AAAA,EAC5B,GAAG,EAAE,SAAS,MAAM,MAAM,MAAA;AAAA,EAC1B,GAAG,EAAE,SAAS,MAAM,MAAM,MAAA;AAAA,EAC1B,GAAG,EAAE,SAAS,MAAM,MAAM,MAAA;AAAA,EAC1B,GAAG,EAAE,SAAS,MAAM,MAAM,MAAA;AAC9B;AAEO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,KAAK,OAAO,YAAY,OAAO,OAAO,KAAK;AAZ/C;AAcQ,QAAI,SAA0B;AAC9B,eAAW,OAAO,CAAC,QAAQ,OAAO,IAAI,GAAY;AAC9C,WAAI,WAAM,OAAO,IAAI,GAAG,MAApB,mBAAuB,QAAQ;AAC/B,iBAAS,IAAI,QAAQ,OAAO,KAAK,OAAO,KAAK;AAC7C;AAAA,MACJ;AAAA,IACJ;AACA,QAAI,CAAC,QAAQ;AACT,YAAM,IAAI,MAAM,yCAAyC,MAAM,EAAE,0BAA0B;AAAA,IAC/F;AACA,UAAM,IAAI,UAAU,UAAU;AAC9B,QAAI,CAAC,GAAG;AACJ,YAAM,IAAI,MAAM,oDAAoD,UAAU,GAAG;AAAA,IACrF;AACA,WAAO,EAAE,MAAM,IAAI,OAAO,IAAI,IAAI,EAAE,OAAO,IAAI,MAAM,EAAE,KAAA;AAAA,EAC3D;AACJ;"}
@@ -0,0 +1,14 @@
1
+ const emitter = {
2
+ className: "VertexOutputBlock",
3
+ stage: "vertex",
4
+ emit(block, _outputName, _stage, state, ctx) {
5
+ const vector = ctx.resolve(block, "vector", "vertex", state);
6
+ const pos = ctx.cast(vector, "vec4f").expr;
7
+ state.vertex.body.push(`_NME_VTX_OUTPUT_ = ${pos};`);
8
+ return { expr: pos, type: "vec4f" };
9
+ }
10
+ };
11
+ export {
12
+ emitter
13
+ };
14
+ //# sourceMappingURL=vertex-output-Cvft64y0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vertex-output-Cvft64y0.js","sources":["../src/material/node/blocks/vertex-output.ts"],"sourcesContent":["/** VertexOutputBlock — terminal block for the vertex stage.\n *\n * Writes the final clip-space position to the sentinel `_NME_VTX_OUTPUT_`,\n * which the pipeline builder wraps with the vertex entry-point boilerplate.\n */\n\nimport type { BlockEmitter } from \"../node-types.js\";\n\nexport const emitter: BlockEmitter = {\n className: \"VertexOutputBlock\",\n stage: \"vertex\",\n emit(block, _outputName, _stage, state, ctx) {\n const vector = ctx.resolve(block, \"vector\", \"vertex\", state);\n const pos = ctx.cast(vector, \"vec4f\").expr;\n state.vertex.body.push(`_NME_VTX_OUTPUT_ = ${pos};`);\n return { expr: pos, type: \"vec4f\" };\n },\n};\n"],"names":[],"mappings":"AAQO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,OAAO;AAAA,EACP,KAAK,OAAO,aAAa,QAAQ,OAAO,KAAK;AACzC,UAAM,SAAS,IAAI,QAAQ,OAAO,UAAU,UAAU,KAAK;AAC3D,UAAM,MAAM,IAAI,KAAK,QAAQ,OAAO,EAAE;AACtC,UAAM,OAAO,KAAK,KAAK,sBAAsB,GAAG,GAAG;AACnD,WAAO,EAAE,MAAM,KAAK,MAAM,QAAA;AAAA,EAC9B;AACJ;"}