@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,243 @@
1
+ import { aE as PBR2_HAS_IRIDESCENCE_MAP, aF as PBR2_HAS_IRIDESCENCE_THICKNESS_MAP, aG as PBR2_HAS_IRIDESCENCE, aq as PBR_HAS_METALLIC_REFLECTANCE_MAP, ar as PBR_HAS_REFLECTANCE_MAP, as as PBR2_HAS_REFLECTANCE_FACTORS } from "./index-C8HOR2sB.js";
2
+ const STAGE_FRAGMENT = 2;
3
+ const PBR2_HAS_IRIDESCENCE_UV_TX = 1 << 20;
4
+ const PBR2_HAS_IRIDESCENCE_THICKNESS_UV_TX = 1 << 21;
5
+ const PBR2_HAS_IRIDESCENCE_UV2 = 1 << 22;
6
+ const PBR2_HAS_IRIDESCENCE_THICKNESS_UV2 = 1 << 23;
7
+ const IRI_MSH_HAS_UV2 = 1 << 7;
8
+ const IRIDESCENCE_HELPERS = `const IRI_XYZ_TO_REC709:mat3x3<f32>=mat3x3<f32>(
9
+ 3.2404542,-0.9692660,0.0556434,
10
+ -1.5371385,1.8760108,-0.2040259,
11
+ -0.4985314,0.0415560,1.0572252);
12
+ fn iri_square3(x:vec3<f32>)->vec3<f32>{return x*x;}
13
+ fn iri_iorFromAirF0(f0:vec3<f32>)->vec3<f32>{
14
+ let s=sqrt(clamp(f0,vec3<f32>(0.0),vec3<f32>(0.9999)));
15
+ return (vec3<f32>(1.0)+s)/(vec3<f32>(1.0)-s);
16
+ }
17
+ fn iri_r0FromIor3(iorT:vec3<f32>,iorI:f32)->vec3<f32>{return iri_square3((iorT-vec3<f32>(iorI))/(iorT+vec3<f32>(iorI)));}
18
+ fn iri_r0FromIor(iorT:f32,iorI:f32)->f32{let r=(iorT-iorI)/(iorT+iorI);return r*r;}
19
+ fn iri_fresSchlick(c:f32,F0:vec3<f32>,F90:vec3<f32>)->vec3<f32>{
20
+ let t=1.0-c;
21
+ let t2=t*t;
22
+ return F0+(F90-F0)*(t2*t2*t);
23
+ }
24
+ fn iri_evalSensitivity(opd:f32,shift:vec3<f32>)->vec3<f32>{
25
+ let phase=6.283185307179586*opd*1.0e-9;
26
+ let val=vec3<f32>(5.4856e-13,4.4201e-13,5.2481e-13);
27
+ let pos=vec3<f32>(1.6810e+06,1.7953e+06,2.2084e+06);
28
+ let vr=vec3<f32>(4.3278e+09,9.3046e+09,6.6121e+09);
29
+ var xyz=val*sqrt(6.283185307179586*vr)*cos(pos*phase+shift)*exp(-(phase*phase)*vr);
30
+ xyz.x=xyz.x+9.7470e-14*sqrt(6.283185307179586*4.5282e+09)*cos(2.2399e+06*phase+shift.x)*exp(-4.5282e+09*phase*phase);
31
+ xyz=xyz/1.0685e-7;
32
+ return IRI_XYZ_TO_REC709*xyz;
33
+ }
34
+ fn iri_eval(outsideIor:f32,eta2:f32,cosTheta1:f32,thickness:f32,baseF0:vec3<f32>)->vec3<f32>{
35
+ let iridescenceIor=mix(outsideIor,eta2,smoothstep(0.0,0.03,thickness));
36
+ let eta=outsideIor/iridescenceIor;
37
+ let sinTheta2Sq=eta*eta*(1.0-cosTheta1*cosTheta1);
38
+ let cosTheta2Sq=1.0-sinTheta2Sq;
39
+ if(cosTheta2Sq<0.0){return vec3<f32>(1.0);}
40
+ let cosTheta2=sqrt(cosTheta2Sq);
41
+ let r0=iri_r0FromIor(iridescenceIor,outsideIor);
42
+ let r12=iri_fresSchlick(cosTheta1,vec3<f32>(r0),vec3<f32>(1.0)).x;
43
+ let t121=1.0-r12;
44
+ var phi12=0.0;
45
+ if(iridescenceIor<outsideIor){phi12=3.141592653589793;}
46
+ let phi21=3.141592653589793-phi12;
47
+ let baseIor=iri_iorFromAirF0(baseF0);
48
+ let r1=iri_r0FromIor3(baseIor,iridescenceIor);
49
+ let r23=iri_fresSchlick(cosTheta2,r1,vec3<f32>(1.0));
50
+ var phi23=vec3<f32>(0.0);
51
+ if(baseIor.x<iridescenceIor){phi23.x=3.141592653589793;}
52
+ if(baseIor.y<iridescenceIor){phi23.y=3.141592653589793;}
53
+ if(baseIor.z<iridescenceIor){phi23.z=3.141592653589793;}
54
+ let opd=2.0*iridescenceIor*thickness*cosTheta2;
55
+ let phi=vec3<f32>(phi21)+phi23;
56
+ let r123=clamp(vec3<f32>(r12)*r23,vec3<f32>(1e-5),vec3<f32>(0.9999));
57
+ let smallR123=sqrt(r123);
58
+ let rs=(t121*t121)*r23/(vec3<f32>(1.0)-r123);
59
+ var outI=vec3<f32>(r12)+rs;
60
+ var cm=rs-vec3<f32>(t121);
61
+ for(var m:i32=1;m<=2;m=m+1){
62
+ cm=cm*smallR123;
63
+ outI=outI+cm*(2.0*iri_evalSensitivity(f32(m)*opd,f32(m)*phi));
64
+ }
65
+ return max(outI,vec3<f32>(0.0));
66
+ }`;
67
+ const IRI_TEX = [
68
+ [PBR2_HAS_IRIDESCENCE_MAP, "texture"],
69
+ [PBR2_HAS_IRIDESCENCE_THICKNESS_MAP, "thicknessTexture"]
70
+ ];
71
+ function uvBaseExpr(features2, meshFeatures, uv2Flag) {
72
+ return (features2 & uv2Flag) !== 0 && (meshFeatures & IRI_MSH_HAS_UV2) !== 0 ? "input.uv2" : "input.uv";
73
+ }
74
+ function uvDecl(name, baseUv, hasTx) {
75
+ return hasTx ? `let ${name}=vec2<f32>(dot(material.${name}m.xy,${baseUv}),dot(material.${name}m.zw,${baseUv}))+material.${name}t.xy;` : `let ${name}=${baseUv};`;
76
+ }
77
+ function uvTransformUboFields(name) {
78
+ return [
79
+ { _name: `${name}m`, _type: "vec4<f32>" },
80
+ { _name: `${name}t`, _type: "vec4<f32>" }
81
+ ];
82
+ }
83
+ function writeUvTransform(data, offsets, name, tex) {
84
+ const mOff = offsets.get(`${name}m`);
85
+ const tOff = offsets.get(`${name}t`);
86
+ if (mOff === void 0 || tOff === void 0) {
87
+ return;
88
+ }
89
+ const mi = mOff / 4;
90
+ const ti = tOff / 4;
91
+ const sx = (tex == null ? void 0 : tex.uScale) ?? 1;
92
+ const sy = (tex == null ? void 0 : tex.vScale) ?? 1;
93
+ const ang = (tex == null ? void 0 : tex.uAng) ?? 0;
94
+ const ox = (tex == null ? void 0 : tex.uOffset) ?? 0;
95
+ const oy = (tex == null ? void 0 : tex.vOffset) ?? 0;
96
+ if (ang === 0) {
97
+ data[mi] = sx;
98
+ data[mi + 1] = 0;
99
+ data[mi + 2] = 0;
100
+ data[mi + 3] = sy;
101
+ } else {
102
+ const c = Math.cos(ang);
103
+ const s = Math.sin(ang);
104
+ data[mi] = c * sx;
105
+ data[mi + 1] = -s * sy;
106
+ data[mi + 2] = s * sx;
107
+ data[mi + 3] = c * sy;
108
+ }
109
+ data[ti] = ox;
110
+ data[ti + 1] = oy;
111
+ data[ti + 2] = 0;
112
+ data[ti + 3] = 0;
113
+ }
114
+ function createIridescenceFragment(features, features2, meshFeatures) {
115
+ if ((features2 & PBR2_HAS_IRIDESCENCE) === 0) {
116
+ return null;
117
+ }
118
+ const hasIntensityMap = (features2 & PBR2_HAS_IRIDESCENCE_MAP) !== 0;
119
+ const hasThicknessMap = (features2 & PBR2_HAS_IRIDESCENCE_THICKNESS_MAP) !== 0;
120
+ const hasIntensityUvTx = (features2 & PBR2_HAS_IRIDESCENCE_UV_TX) !== 0;
121
+ const hasThicknessUvTx = (features2 & PBR2_HAS_IRIDESCENCE_THICKNESS_UV_TX) !== 0;
122
+ const bindings = [];
123
+ const uboFields = [{ _name: "iridescenceParams", _type: "vec4<f32>" }];
124
+ if (hasIntensityMap) {
125
+ bindings.push(
126
+ { _name: "iridescenceTexture", _type: { _kind: "texture", _textureType: "texture_2d<f32>" }, _visibility: STAGE_FRAGMENT },
127
+ { _name: "iridescenceSampler_", _type: { _kind: "sampler", _samplerType: "sampler" }, _visibility: STAGE_FRAGMENT }
128
+ );
129
+ if (hasIntensityUvTx) {
130
+ uboFields.push(...uvTransformUboFields("iridescenceUV"));
131
+ }
132
+ }
133
+ if (hasThicknessMap) {
134
+ bindings.push(
135
+ { _name: "iridescenceThicknessTexture", _type: { _kind: "texture", _textureType: "texture_2d<f32>" }, _visibility: STAGE_FRAGMENT },
136
+ { _name: "iridescenceThicknessSampler_", _type: { _kind: "sampler", _samplerType: "sampler" }, _visibility: STAGE_FRAGMENT }
137
+ );
138
+ if (hasThicknessUvTx) {
139
+ uboFields.push(...uvTransformUboFields("iridescenceThicknessUV"));
140
+ }
141
+ }
142
+ const scopeVars = [];
143
+ if (hasIntensityMap) {
144
+ scopeVars.push(uvDecl("iridescenceUV", uvBaseExpr(features2, meshFeatures, PBR2_HAS_IRIDESCENCE_UV2), hasIntensityUvTx));
145
+ }
146
+ if (hasThicknessMap) {
147
+ scopeVars.push(uvDecl("iridescenceThicknessUV", uvBaseExpr(features2, meshFeatures, PBR2_HAS_IRIDESCENCE_THICKNESS_UV2), hasThicknessUvTx));
148
+ }
149
+ const intensity = hasIntensityMap ? "material.iridescenceParams.x*textureSample(iridescenceTexture,iridescenceSampler_,iridescenceUV).r" : "material.iridescenceParams.x";
150
+ const thickness = hasThicknessMap ? "mix(material.iridescenceParams.z,material.iridescenceParams.w,textureSample(iridescenceThicknessTexture,iridescenceThicknessSampler_,iridescenceThicknessUV).g)" : "material.iridescenceParams.w";
151
+ return {
152
+ _id: "iridescence",
153
+ _dependencies: (features & (PBR_HAS_METALLIC_REFLECTANCE_MAP | PBR_HAS_REFLECTANCE_MAP)) !== 0 || (features2 & PBR2_HAS_REFLECTANCE_FACTORS) !== 0 ? ["reflectance"] : void 0,
154
+ _uboFields: uboFields,
155
+ _bindings: bindings,
156
+ _helperFunctions: IRIDESCENCE_HELPERS,
157
+ _fragmentSlots: {
158
+ ...scopeVars.length ? { SV: scopeVars.join("\n") } : void 0,
159
+ MF: `{
160
+ let iriIntensity=clamp(${intensity},0.0,1.0);
161
+ let iriThickness=max(${thickness},0.0);
162
+ let iriF0=iri_eval(1.0,max(material.iridescenceParams.y,1.0001),NdotV,iriThickness,colorF0);
163
+ colorF0=mix(colorF0,iriF0,iriIntensity);
164
+ }`
165
+ }
166
+ };
167
+ }
168
+ function writeIridescenceUBO(data, material, offsets) {
169
+ const iri = material.iridescence;
170
+ if (!(iri == null ? void 0 : iri.isEnabled) || !offsets.has("iridescenceParams")) {
171
+ return;
172
+ }
173
+ const off = offsets.get("iridescenceParams") / 4;
174
+ data[off] = iri.intensity ?? 1;
175
+ data[off + 1] = iri.indexOfRefraction ?? 1.3;
176
+ data[off + 2] = iri.minimumThickness ?? 100;
177
+ data[off + 3] = iri.maximumThickness ?? 400;
178
+ writeUvTransform(data, offsets, "iridescenceUV", iri.texture);
179
+ writeUvTransform(data, offsets, "iridescenceThicknessUV", iri.thicknessTexture);
180
+ }
181
+ const pbrExt = {
182
+ id: "iridescence",
183
+ phase: "base-tex",
184
+ detect(mat) {
185
+ const iri = mat.iridescence;
186
+ if (!(iri == null ? void 0 : iri.isEnabled)) {
187
+ return { f: 0, f2: 0 };
188
+ }
189
+ let f2 = PBR2_HAS_IRIDESCENCE;
190
+ if (iri.texture) {
191
+ f2 |= PBR2_HAS_IRIDESCENCE_MAP;
192
+ if (iri.texture._hasTx) {
193
+ f2 |= PBR2_HAS_IRIDESCENCE_UV_TX;
194
+ }
195
+ if (iri.texture._texCoord === 1) {
196
+ f2 |= PBR2_HAS_IRIDESCENCE_UV2;
197
+ }
198
+ }
199
+ if (iri.thicknessTexture) {
200
+ f2 |= PBR2_HAS_IRIDESCENCE_THICKNESS_MAP;
201
+ if (iri.thicknessTexture._hasTx) {
202
+ f2 |= PBR2_HAS_IRIDESCENCE_THICKNESS_UV_TX;
203
+ }
204
+ if (iri.thicknessTexture._texCoord === 1) {
205
+ f2 |= PBR2_HAS_IRIDESCENCE_THICKNESS_UV2;
206
+ }
207
+ }
208
+ return { f: 0, f2 };
209
+ },
210
+ frag: (ctx) => createIridescenceFragment(ctx._features, ctx._features2, ctx._meshFeatures),
211
+ writeUbo: writeIridescenceUBO,
212
+ bind(ctx, entries, b) {
213
+ const iri = ctx._material.iridescence;
214
+ if (!iri) {
215
+ return b;
216
+ }
217
+ for (const [flag, key] of IRI_TEX) {
218
+ const tex = iri[key];
219
+ if ((ctx._features2 & flag) !== 0 && tex) {
220
+ entries.push({ binding: b++, resource: tex.view });
221
+ entries.push({ binding: b++, resource: tex.sampler });
222
+ }
223
+ }
224
+ return b;
225
+ },
226
+ textures(mat, t) {
227
+ const iri = mat.iridescence;
228
+ if (!iri) {
229
+ return;
230
+ }
231
+ for (const [, key] of IRI_TEX) {
232
+ const tex = iri[key];
233
+ if (tex) {
234
+ t.push(tex);
235
+ }
236
+ }
237
+ }
238
+ };
239
+ export {
240
+ pbrExt,
241
+ writeIridescenceUBO
242
+ };
243
+ //# sourceMappingURL=iridescence-fragment-Gymp7or5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iridescence-fragment-Gymp7or5.js","sources":["../src/material/pbr/fragments/iridescence-fragment.ts"],"sourcesContent":["/**\n * Iridescence Fragment\n *\n * Native PBR thin-film iridescence (BJS PBRMaterial.iridescence and\n * KHR_materials_iridescence). Modifies the already-computed base-layer colorF0\n * before direct and IBL lighting consume it.\n */\n\nimport type { BindingDecl, ShaderFragment, UboField } from \"../../../shader/fragment-types.js\";\nimport type { Texture2D } from \"../../../texture/texture-2d.js\";\nimport type { PbrExt } from \"../pbr-flags.js\";\nimport type { IridescenceProps, PbrMaterialProps } from \"../pbr-material.js\";\nimport {\n PBR_HAS_METALLIC_REFLECTANCE_MAP,\n PBR_HAS_REFLECTANCE_MAP,\n PBR2_HAS_IRIDESCENCE,\n PBR2_HAS_IRIDESCENCE_MAP,\n PBR2_HAS_IRIDESCENCE_THICKNESS_MAP,\n PBR2_HAS_REFLECTANCE_FACTORS,\n} from \"../pbr-flag-bits.js\";\n\nconst STAGE_FRAGMENT = 0x2;\nconst PBR2_HAS_IRIDESCENCE_UV_TX = 1 << 20;\nconst PBR2_HAS_IRIDESCENCE_THICKNESS_UV_TX = 1 << 21;\nconst PBR2_HAS_IRIDESCENCE_UV2 = 1 << 22;\nconst PBR2_HAS_IRIDESCENCE_THICKNESS_UV2 = 1 << 23;\nconst IRI_MSH_HAS_UV2 = 1 << 7;\n\nconst IRIDESCENCE_HELPERS = `const IRI_XYZ_TO_REC709:mat3x3<f32>=mat3x3<f32>(\n3.2404542,-0.9692660,0.0556434,\n-1.5371385,1.8760108,-0.2040259,\n-0.4985314,0.0415560,1.0572252);\nfn iri_square3(x:vec3<f32>)->vec3<f32>{return x*x;}\nfn iri_iorFromAirF0(f0:vec3<f32>)->vec3<f32>{\nlet s=sqrt(clamp(f0,vec3<f32>(0.0),vec3<f32>(0.9999)));\nreturn (vec3<f32>(1.0)+s)/(vec3<f32>(1.0)-s);\n}\nfn iri_r0FromIor3(iorT:vec3<f32>,iorI:f32)->vec3<f32>{return iri_square3((iorT-vec3<f32>(iorI))/(iorT+vec3<f32>(iorI)));}\nfn iri_r0FromIor(iorT:f32,iorI:f32)->f32{let r=(iorT-iorI)/(iorT+iorI);return r*r;}\nfn iri_fresSchlick(c:f32,F0:vec3<f32>,F90:vec3<f32>)->vec3<f32>{\nlet t=1.0-c;\nlet t2=t*t;\nreturn F0+(F90-F0)*(t2*t2*t);\n}\nfn iri_evalSensitivity(opd:f32,shift:vec3<f32>)->vec3<f32>{\nlet phase=6.283185307179586*opd*1.0e-9;\nlet val=vec3<f32>(5.4856e-13,4.4201e-13,5.2481e-13);\nlet pos=vec3<f32>(1.6810e+06,1.7953e+06,2.2084e+06);\nlet vr=vec3<f32>(4.3278e+09,9.3046e+09,6.6121e+09);\nvar xyz=val*sqrt(6.283185307179586*vr)*cos(pos*phase+shift)*exp(-(phase*phase)*vr);\nxyz.x=xyz.x+9.7470e-14*sqrt(6.283185307179586*4.5282e+09)*cos(2.2399e+06*phase+shift.x)*exp(-4.5282e+09*phase*phase);\nxyz=xyz/1.0685e-7;\nreturn IRI_XYZ_TO_REC709*xyz;\n}\nfn iri_eval(outsideIor:f32,eta2:f32,cosTheta1:f32,thickness:f32,baseF0:vec3<f32>)->vec3<f32>{\nlet iridescenceIor=mix(outsideIor,eta2,smoothstep(0.0,0.03,thickness));\nlet eta=outsideIor/iridescenceIor;\nlet sinTheta2Sq=eta*eta*(1.0-cosTheta1*cosTheta1);\nlet cosTheta2Sq=1.0-sinTheta2Sq;\nif(cosTheta2Sq<0.0){return vec3<f32>(1.0);}\nlet cosTheta2=sqrt(cosTheta2Sq);\nlet r0=iri_r0FromIor(iridescenceIor,outsideIor);\nlet r12=iri_fresSchlick(cosTheta1,vec3<f32>(r0),vec3<f32>(1.0)).x;\nlet t121=1.0-r12;\nvar phi12=0.0;\nif(iridescenceIor<outsideIor){phi12=3.141592653589793;}\nlet phi21=3.141592653589793-phi12;\nlet baseIor=iri_iorFromAirF0(baseF0);\nlet r1=iri_r0FromIor3(baseIor,iridescenceIor);\nlet r23=iri_fresSchlick(cosTheta2,r1,vec3<f32>(1.0));\nvar phi23=vec3<f32>(0.0);\nif(baseIor.x<iridescenceIor){phi23.x=3.141592653589793;}\nif(baseIor.y<iridescenceIor){phi23.y=3.141592653589793;}\nif(baseIor.z<iridescenceIor){phi23.z=3.141592653589793;}\nlet opd=2.0*iridescenceIor*thickness*cosTheta2;\nlet phi=vec3<f32>(phi21)+phi23;\nlet r123=clamp(vec3<f32>(r12)*r23,vec3<f32>(1e-5),vec3<f32>(0.9999));\nlet smallR123=sqrt(r123);\nlet rs=(t121*t121)*r23/(vec3<f32>(1.0)-r123);\nvar outI=vec3<f32>(r12)+rs;\nvar cm=rs-vec3<f32>(t121);\nfor(var m:i32=1;m<=2;m=m+1){\ncm=cm*smallR123;\noutI=outI+cm*(2.0*iri_evalSensitivity(f32(m)*opd,f32(m)*phi));\n}\nreturn max(outI,vec3<f32>(0.0));\n}`;\n\nconst IRI_TEX: ReadonlyArray<readonly [number, \"texture\" | \"thicknessTexture\"]> = [\n [PBR2_HAS_IRIDESCENCE_MAP, \"texture\"],\n [PBR2_HAS_IRIDESCENCE_THICKNESS_MAP, \"thicknessTexture\"],\n];\n\nfunction uvBaseExpr(features2: number, meshFeatures: number, uv2Flag: number): string {\n return (features2 & uv2Flag) !== 0 && (meshFeatures & IRI_MSH_HAS_UV2) !== 0 ? \"input.uv2\" : \"input.uv\";\n}\n\nfunction uvDecl(name: string, baseUv: string, hasTx: boolean): string {\n return hasTx ? `let ${name}=vec2<f32>(dot(material.${name}m.xy,${baseUv}),dot(material.${name}m.zw,${baseUv}))+material.${name}t.xy;` : `let ${name}=${baseUv};`;\n}\n\nfunction uvTransformUboFields(name: string): UboField[] {\n return [\n { _name: `${name}m`, _type: \"vec4<f32>\" },\n { _name: `${name}t`, _type: \"vec4<f32>\" },\n ];\n}\n\nfunction writeUvTransform(data: Float32Array, offsets: ReadonlyMap<string, number>, name: string, tex: Texture2D | undefined): void {\n const mOff = offsets.get(`${name}m`);\n const tOff = offsets.get(`${name}t`);\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\nfunction createIridescenceFragment(features: number, features2: number, meshFeatures: number): ShaderFragment | null {\n if ((features2 & PBR2_HAS_IRIDESCENCE) === 0) {\n return null;\n }\n const hasIntensityMap = (features2 & PBR2_HAS_IRIDESCENCE_MAP) !== 0;\n const hasThicknessMap = (features2 & PBR2_HAS_IRIDESCENCE_THICKNESS_MAP) !== 0;\n const hasIntensityUvTx = (features2 & PBR2_HAS_IRIDESCENCE_UV_TX) !== 0;\n const hasThicknessUvTx = (features2 & PBR2_HAS_IRIDESCENCE_THICKNESS_UV_TX) !== 0;\n const bindings: BindingDecl[] = [];\n const uboFields: UboField[] = [{ _name: \"iridescenceParams\", _type: \"vec4<f32>\" }];\n if (hasIntensityMap) {\n bindings.push(\n { _name: \"iridescenceTexture\", _type: { _kind: \"texture\", _textureType: \"texture_2d<f32>\" }, _visibility: STAGE_FRAGMENT },\n { _name: \"iridescenceSampler_\", _type: { _kind: \"sampler\", _samplerType: \"sampler\" }, _visibility: STAGE_FRAGMENT }\n );\n if (hasIntensityUvTx) {\n uboFields.push(...uvTransformUboFields(\"iridescenceUV\"));\n }\n }\n if (hasThicknessMap) {\n bindings.push(\n { _name: \"iridescenceThicknessTexture\", _type: { _kind: \"texture\", _textureType: \"texture_2d<f32>\" }, _visibility: STAGE_FRAGMENT },\n { _name: \"iridescenceThicknessSampler_\", _type: { _kind: \"sampler\", _samplerType: \"sampler\" }, _visibility: STAGE_FRAGMENT }\n );\n if (hasThicknessUvTx) {\n uboFields.push(...uvTransformUboFields(\"iridescenceThicknessUV\"));\n }\n }\n\n const scopeVars: string[] = [];\n if (hasIntensityMap) {\n scopeVars.push(uvDecl(\"iridescenceUV\", uvBaseExpr(features2, meshFeatures, PBR2_HAS_IRIDESCENCE_UV2), hasIntensityUvTx));\n }\n if (hasThicknessMap) {\n scopeVars.push(uvDecl(\"iridescenceThicknessUV\", uvBaseExpr(features2, meshFeatures, PBR2_HAS_IRIDESCENCE_THICKNESS_UV2), hasThicknessUvTx));\n }\n\n const intensity = hasIntensityMap ? \"material.iridescenceParams.x*textureSample(iridescenceTexture,iridescenceSampler_,iridescenceUV).r\" : \"material.iridescenceParams.x\";\n const thickness = hasThicknessMap\n ? \"mix(material.iridescenceParams.z,material.iridescenceParams.w,textureSample(iridescenceThicknessTexture,iridescenceThicknessSampler_,iridescenceThicknessUV).g)\"\n : \"material.iridescenceParams.w\";\n return {\n _id: \"iridescence\",\n _dependencies:\n (features & (PBR_HAS_METALLIC_REFLECTANCE_MAP | PBR_HAS_REFLECTANCE_MAP)) !== 0 || (features2 & PBR2_HAS_REFLECTANCE_FACTORS) !== 0 ? [\"reflectance\"] : undefined,\n _uboFields: uboFields,\n _bindings: bindings,\n _helperFunctions: IRIDESCENCE_HELPERS,\n _fragmentSlots: {\n ...(scopeVars.length ? { SV: scopeVars.join(\"\\n\") } : undefined),\n MF: `{\nlet iriIntensity=clamp(${intensity},0.0,1.0);\nlet iriThickness=max(${thickness},0.0);\nlet iriF0=iri_eval(1.0,max(material.iridescenceParams.y,1.0001),NdotV,iriThickness,colorF0);\ncolorF0=mix(colorF0,iriF0,iriIntensity);\n}`,\n },\n };\n}\n\nexport function writeIridescenceUBO(data: Float32Array, material: PbrMaterialProps, offsets: ReadonlyMap<string, number>): void {\n const iri = material.iridescence as IridescenceProps | undefined;\n if (!iri?.isEnabled || !offsets.has(\"iridescenceParams\")) {\n return;\n }\n const off = offsets.get(\"iridescenceParams\")! / 4;\n data[off] = iri.intensity ?? 1.0;\n data[off + 1] = iri.indexOfRefraction ?? 1.3;\n data[off + 2] = iri.minimumThickness ?? 100;\n data[off + 3] = iri.maximumThickness ?? 400;\n writeUvTransform(data, offsets, \"iridescenceUV\", iri.texture);\n writeUvTransform(data, offsets, \"iridescenceThicknessUV\", iri.thicknessTexture);\n}\n\nexport const pbrExt: PbrExt = {\n id: \"iridescence\",\n phase: \"base-tex\",\n detect(mat) {\n const iri = (mat as PbrMaterialProps).iridescence;\n if (!iri?.isEnabled) {\n return { f: 0, f2: 0 };\n }\n let f2 = PBR2_HAS_IRIDESCENCE;\n if (iri.texture) {\n f2 |= PBR2_HAS_IRIDESCENCE_MAP;\n if ((iri.texture as { _hasTx?: boolean })._hasTx) {\n f2 |= PBR2_HAS_IRIDESCENCE_UV_TX;\n }\n if ((iri.texture as { _texCoord?: number })._texCoord === 1) {\n f2 |= PBR2_HAS_IRIDESCENCE_UV2;\n }\n }\n if (iri.thicknessTexture) {\n f2 |= PBR2_HAS_IRIDESCENCE_THICKNESS_MAP;\n if ((iri.thicknessTexture as { _hasTx?: boolean })._hasTx) {\n f2 |= PBR2_HAS_IRIDESCENCE_THICKNESS_UV_TX;\n }\n if ((iri.thicknessTexture as { _texCoord?: number })._texCoord === 1) {\n f2 |= PBR2_HAS_IRIDESCENCE_THICKNESS_UV2;\n }\n }\n return { f: 0, f2 };\n },\n frag: (ctx) => createIridescenceFragment(ctx._features, ctx._features2, ctx._meshFeatures),\n writeUbo: writeIridescenceUBO as PbrExt[\"writeUbo\"],\n bind(ctx, entries, b) {\n const iri = (ctx._material as PbrMaterialProps).iridescence;\n if (!iri) {\n return b;\n }\n for (const [flag, key] of IRI_TEX) {\n const tex = iri[key];\n if ((ctx._features2 & flag) !== 0 && tex) {\n entries.push({ binding: b++, resource: tex.view });\n entries.push({ binding: b++, resource: tex.sampler });\n }\n }\n return b;\n },\n textures(mat, t) {\n const iri = (mat as PbrMaterialProps).iridescence;\n if (!iri) {\n return;\n }\n for (const [, key] of IRI_TEX) {\n const tex = iri[key];\n if (tex) {\n t.push(tex);\n }\n }\n },\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ const emitter = {
2
+ className: "LengthBlock",
3
+ emit(block, _outputName, stage, state, ctx) {
4
+ const value = ctx.resolve(block, "value", stage, state);
5
+ return { expr: `length(${value.expr})`, type: "f32" };
6
+ }
7
+ };
8
+ export {
9
+ emitter
10
+ };
11
+ //# sourceMappingURL=length-block-ChOkeiHR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"length-block-ChOkeiHR.js","sources":["../src/material/node/blocks/length-block.ts"],"sourcesContent":["import type { BlockEmitter } from \"../node-types.js\";\n\nexport const emitter: BlockEmitter = {\n className: \"LengthBlock\",\n emit(block, _outputName, stage, state, ctx) {\n const value = ctx.resolve(block, \"value\", stage, state);\n return { expr: `length(${value.expr})`, type: \"f32\" };\n },\n};\n"],"names":[],"mappings":"AAEO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,KAAK,OAAO,aAAa,OAAO,OAAO,KAAK;AACxC,UAAM,QAAQ,IAAI,QAAQ,OAAO,SAAS,OAAO,KAAK;AACtD,WAAO,EAAE,MAAM,UAAU,MAAM,IAAI,KAAK,MAAM,MAAA;AAAA,EAClD;AACJ;"}
@@ -0,0 +1,18 @@
1
+ import { w as widerType } from "./_math-factory-C-QqW-Wi.js";
2
+ const emitter = {
3
+ className: "LerpBlock",
4
+ emit(block, _outputName, stage, state, ctx) {
5
+ const left = ctx.resolve(block, "left", stage, state);
6
+ const right = ctx.resolve(block, "right", stage, state);
7
+ const gradient = ctx.resolve(block, "gradient", stage, state);
8
+ const t = widerType(left.type, right.type);
9
+ const lc = ctx.cast(left, t).expr;
10
+ const rc = ctx.cast(right, t).expr;
11
+ const gc = ctx.cast(gradient, t).expr;
12
+ return { expr: `mix(${lc}, ${rc}, ${gc})`, type: t };
13
+ }
14
+ };
15
+ export {
16
+ emitter
17
+ };
18
+ //# sourceMappingURL=lerp-block-DjI2SfmI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lerp-block-DjI2SfmI.js","sources":["../src/material/node/blocks/lerp-block.ts"],"sourcesContent":["import type { BlockEmitter } from \"../node-types.js\";\nimport { widerType } from \"./_math-factory.js\";\n\nexport const emitter: BlockEmitter = {\n className: \"LerpBlock\",\n emit(block, _outputName, stage, state, ctx) {\n const left = ctx.resolve(block, \"left\", stage, state);\n const right = ctx.resolve(block, \"right\", stage, state);\n const gradient = ctx.resolve(block, \"gradient\", stage, state);\n const t = widerType(left.type, right.type);\n const lc = ctx.cast(left, t).expr;\n const rc = ctx.cast(right, t).expr;\n // Gradient can be scalar (broadcast) or vector (per-component). Cast to result type.\n const gc = ctx.cast(gradient, t).expr;\n return { expr: `mix(${lc}, ${rc}, ${gc})`, type: t };\n },\n};\n"],"names":[],"mappings":";AAGO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,KAAK,OAAO,aAAa,OAAO,OAAO,KAAK;AACxC,UAAM,OAAO,IAAI,QAAQ,OAAO,QAAQ,OAAO,KAAK;AACpD,UAAM,QAAQ,IAAI,QAAQ,OAAO,SAAS,OAAO,KAAK;AACtD,UAAM,WAAW,IAAI,QAAQ,OAAO,YAAY,OAAO,KAAK;AAC5D,UAAM,IAAI,UAAU,KAAK,MAAM,MAAM,IAAI;AACzC,UAAM,KAAK,IAAI,KAAK,MAAM,CAAC,EAAE;AAC7B,UAAM,KAAK,IAAI,KAAK,OAAO,CAAC,EAAE;AAE9B,UAAM,KAAK,IAAI,KAAK,UAAU,CAAC,EAAE;AACjC,WAAO,EAAE,MAAM,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,MAAM,EAAA;AAAA,EACrD;AACJ;"}
@@ -0,0 +1,123 @@
1
+ import { M as MAX_LIGHTS } from "./index-C8HOR2sB.js";
2
+ const NME_LIGHTING_HELPER_KEY = "nme_lighting";
3
+ const NME_LIGHTING_HELPER_WGSL = `struct NmeLightResult {
4
+ diffuse: vec3<f32>,
5
+ specular: vec3<f32>,
6
+ shadow: f32,
7
+ };
8
+
9
+ fn nme_computeLighting(
10
+ worldPos: vec3<f32>,
11
+ worldNormal: vec3<f32>,
12
+ cameraPos: vec3<f32>,
13
+ diffuseColor: vec3<f32>,
14
+ specularColor: vec3<f32>,
15
+ glossiness: f32,
16
+ shadowFactors: array<f32, ${MAX_LIGHTS}>
17
+ ) -> NmeLightResult {
18
+ var result: NmeLightResult;
19
+ result.diffuse = vec3<f32>(0.0);
20
+ result.specular = vec3<f32>(0.0);
21
+ var aggShadow: f32 = 0.0;
22
+ var numLights: f32 = 0.0;
23
+ let viewDir = normalize(cameraPos - worldPos);
24
+ let N = normalize(worldNormal);
25
+ let lc = min(meshU.lc, ${MAX_LIGHTS}u);
26
+ for (var i: u32 = 0u; i < lc; i = i + 1u) {
27
+ let lightIndex = nli(i);
28
+ let L = nmeLights.lights[lightIndex];
29
+ let t = u32(L.vLightData.w);
30
+ let sh = shadowFactors[lightIndex];
31
+ var lv: vec3<f32>;
32
+ var atten: f32 = 1.0;
33
+ if (t == 3u) {
34
+ // Hemispheric: ground/sky mix via half-lambert.
35
+ let nl = 0.5 + 0.5 * dot(N, normalize(L.vLightData.xyz));
36
+ let diff = mix(L.vLightDirection.xyz, L.vLightDiffuse.rgb, nl);
37
+ result.diffuse = result.diffuse + diff * diffuseColor * sh;
38
+ let H = normalize(viewDir + normalize(L.vLightData.xyz));
39
+ let sf = pow(max(0.0, dot(N, H)), max(1.0, glossiness));
40
+ result.specular = result.specular + sf * L.vLightSpecular.rgb * specularColor * sh;
41
+ aggShadow = aggShadow + sh;
42
+ numLights = numLights + 1.0;
43
+ continue;
44
+ }
45
+ if (t == 1u) {
46
+ // Directional: vLightData.xyz is the light's forward direction.
47
+ lv = normalize(-L.vLightData.xyz);
48
+ } else {
49
+ // Point / Spot: vLightData.xyz is world-space position; range in vLightDiffuse.a.
50
+ let d = L.vLightData.xyz - worldPos;
51
+ atten = max(0.0, 1.0 - length(d) / L.vLightDiffuse.a);
52
+ lv = normalize(d);
53
+ if (t == 2u) {
54
+ // Spot cone falloff (vLightDirection.xyz=dir, .w=cosHalfAngle; vLightSpecular.a=exp).
55
+ let c = max(0.0, dot(L.vLightDirection.xyz, -lv));
56
+ if (c >= L.vLightDirection.w) {
57
+ atten = atten * max(0.0, pow(c, L.vLightSpecular.a));
58
+ } else {
59
+ atten = 0.0;
60
+ }
61
+ }
62
+ }
63
+ let NdotL = max(0.0, dot(N, lv));
64
+ result.diffuse = result.diffuse + L.vLightDiffuse.rgb * diffuseColor * NdotL * atten * sh;
65
+ let H = normalize(lv + viewDir);
66
+ let NdotH = max(0.0, dot(N, H));
67
+ let specFactor = pow(NdotH, max(1.0, glossiness));
68
+ result.specular = result.specular + L.vLightSpecular.rgb * specularColor * specFactor * atten * sh;
69
+ aggShadow = aggShadow + sh;
70
+ numLights = numLights + 1.0;
71
+ }
72
+ if (numLights > 0.0) {
73
+ result.shadow = aggShadow / numLights;
74
+ } else {
75
+ result.shadow = 1.0;
76
+ }
77
+ return result;
78
+ }
79
+ `;
80
+ const SHADOW_FACTORS_ONE = `array<f32, ${MAX_LIGHTS}>(${new Array(MAX_LIGHTS).fill("1.0").join(", ")})`;
81
+ function resolveOptional(block, inputName, fallback, stage, state, ctx, target) {
82
+ const input = block.inputs.get(inputName);
83
+ if (input == null ? void 0 : input.source) {
84
+ return ctx.cast(ctx.resolve(block, inputName, stage, state), target).expr;
85
+ }
86
+ return fallback;
87
+ }
88
+ const emitter = {
89
+ className: "LightBlock",
90
+ stage: "fragment",
91
+ emit(block, outputName, stage, state, ctx) {
92
+ state.fragment.helpers.set(NME_LIGHTING_HELPER_KEY, NME_LIGHTING_HELPER_WGSL);
93
+ state.usesLightsUbo = true;
94
+ const memoKey = `_light_${block.id}_call`;
95
+ const callExpr = state.fragment.memo.get(memoKey);
96
+ let callVar;
97
+ if (!callExpr) {
98
+ const wp = resolveOptional(block, "worldPosition", "vec3<f32>(0.0)", stage, state, ctx, "vec3f");
99
+ const wn = resolveOptional(block, "worldNormal", "vec3<f32>(0.0, 1.0, 0.0)", stage, state, ctx, "vec3f");
100
+ const cp = resolveOptional(block, "cameraPosition", "_NME_CAMERA_POS_", stage, state, ctx, "vec3f");
101
+ const dc = resolveOptional(block, "diffuseColor", "vec3<f32>(1.0)", stage, state, ctx, "vec3f");
102
+ const sc = resolveOptional(block, "specularColor", "vec3<f32>(1.0)", stage, state, ctx, "vec3f");
103
+ const gl = resolveOptional(block, "glossiness", "1.0", stage, state, ctx, "f32");
104
+ const gp = resolveOptional(block, "glossPower", "1024.0", stage, state, ctx, "f32");
105
+ const sf = state.shadowLights.length > 0 ? `nme_computeShadowFactors(in)` : SHADOW_FACTORS_ONE;
106
+ callVar = `_lt${ctx.temp(state, "light")}`;
107
+ state.fragment.body.push(`let ${callVar} = nme_computeLighting(${wp}, ${wn}, ${cp}, ${dc}, ${sc}, (${gl}) * (${gp}), ${sf});`);
108
+ state.fragment.memo.set(memoKey, { expr: callVar, type: "vec4f" });
109
+ } else {
110
+ callVar = callExpr.expr;
111
+ }
112
+ const out = {
113
+ diffuseOutput: { expr: `${callVar}.diffuse`, type: "vec3f" },
114
+ specularOutput: { expr: `${callVar}.specular`, type: "vec3f" },
115
+ shadow: { expr: `${callVar}.shadow`, type: "f32" }
116
+ };
117
+ return out[outputName] ?? { expr: `${callVar}.diffuse`, type: "vec3f" };
118
+ }
119
+ };
120
+ export {
121
+ emitter
122
+ };
123
+ //# sourceMappingURL=light-block-B11ew7FA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"light-block-B11ew7FA.js","sources":["../src/material/node/blocks/_lighting-helper.ts","../src/material/node/blocks/light-block.ts"],"sourcesContent":["/** Shared WGSL helper source for LightBlock.\n *\n * This module exports just the `nme_computeLighting` function definition.\n * The surrounding `LightEntry` / `lightsUniforms` struct decls and the\n * `@group(1) @binding(N) var<uniform> nmeLights` declaration are injected\n * by the pipeline builder (see node-pipeline.ts) once `state.usesLightsUbo`\n * is true. Keeping them out of the helper lets a single `MAX_LIGHTS` value\n * (at compile time) drive both the WGSL array length and the BGL entry size.\n */\n\nimport { MAX_LIGHTS } from \"../../../light/types.js\";\n\nexport const NME_LIGHTING_HELPER_KEY = \"nme_lighting\";\n\nexport const NME_LIGHTING_HELPER_WGSL = `struct NmeLightResult {\n diffuse: vec3<f32>,\n specular: vec3<f32>,\n shadow: f32,\n};\n\nfn nme_computeLighting(\n worldPos: vec3<f32>,\n worldNormal: vec3<f32>,\n cameraPos: vec3<f32>,\n diffuseColor: vec3<f32>,\n specularColor: vec3<f32>,\n glossiness: f32,\n shadowFactors: array<f32, ${MAX_LIGHTS}>\n) -> NmeLightResult {\n var result: NmeLightResult;\n result.diffuse = vec3<f32>(0.0);\n result.specular = vec3<f32>(0.0);\n var aggShadow: f32 = 0.0;\n var numLights: f32 = 0.0;\n let viewDir = normalize(cameraPos - worldPos);\n let N = normalize(worldNormal);\n let lc = min(meshU.lc, ${MAX_LIGHTS}u);\n for (var i: u32 = 0u; i < lc; i = i + 1u) {\n let lightIndex = nli(i);\n let L = nmeLights.lights[lightIndex];\n let t = u32(L.vLightData.w);\n let sh = shadowFactors[lightIndex];\n var lv: vec3<f32>;\n var atten: f32 = 1.0;\n if (t == 3u) {\n // Hemispheric: ground/sky mix via half-lambert.\n let nl = 0.5 + 0.5 * dot(N, normalize(L.vLightData.xyz));\n let diff = mix(L.vLightDirection.xyz, L.vLightDiffuse.rgb, nl);\n result.diffuse = result.diffuse + diff * diffuseColor * sh;\n let H = normalize(viewDir + normalize(L.vLightData.xyz));\n let sf = pow(max(0.0, dot(N, H)), max(1.0, glossiness));\n result.specular = result.specular + sf * L.vLightSpecular.rgb * specularColor * sh;\n aggShadow = aggShadow + sh;\n numLights = numLights + 1.0;\n continue;\n }\n if (t == 1u) {\n // Directional: vLightData.xyz is the light's forward direction.\n lv = normalize(-L.vLightData.xyz);\n } else {\n // Point / Spot: vLightData.xyz is world-space position; range in vLightDiffuse.a.\n let d = L.vLightData.xyz - worldPos;\n atten = max(0.0, 1.0 - length(d) / L.vLightDiffuse.a);\n lv = normalize(d);\n if (t == 2u) {\n // Spot cone falloff (vLightDirection.xyz=dir, .w=cosHalfAngle; vLightSpecular.a=exp).\n let c = max(0.0, dot(L.vLightDirection.xyz, -lv));\n if (c >= L.vLightDirection.w) {\n atten = atten * max(0.0, pow(c, L.vLightSpecular.a));\n } else {\n atten = 0.0;\n }\n }\n }\n let NdotL = max(0.0, dot(N, lv));\n result.diffuse = result.diffuse + L.vLightDiffuse.rgb * diffuseColor * NdotL * atten * sh;\n let H = normalize(lv + viewDir);\n let NdotH = max(0.0, dot(N, H));\n let specFactor = pow(NdotH, max(1.0, glossiness));\n result.specular = result.specular + L.vLightSpecular.rgb * specularColor * specFactor * atten * sh;\n aggShadow = aggShadow + sh;\n numLights = numLights + 1.0;\n }\n if (numLights > 0.0) {\n result.shadow = aggShadow / numLights;\n } else {\n result.shadow = 1.0;\n }\n return result;\n}\n`;\n","/** LightBlock — classic Blinn-Phong lighting.\n *\n * Inputs: worldPosition, worldNormal, cameraPosition, glossiness, glossPower\n * (optional), diffuseColor, specularColor.\n * Outputs: diffuseOutput (vec3), specularOutput (vec3), shadow (f32).\n *\n * The actual math lives in `_lighting-helper.ts` and is injected into the\n * fragment helper map. The pipeline builder is responsible for binding the\n * scene's Lights UBO under `nmeLights` / `nmeLightsCount` at group/binding\n * slots reserved for NME.\n */\n\nimport type { BlockEmitter, NodeExpr } from \"../node-types.js\";\nimport { NME_LIGHTING_HELPER_KEY, NME_LIGHTING_HELPER_WGSL } from \"./_lighting-helper.js\";\nimport { MAX_LIGHTS } from \"../../../light/types.js\";\n\nconst SHADOW_FACTORS_ONE = `array<f32, ${MAX_LIGHTS}>(${new Array(MAX_LIGHTS).fill(\"1.0\").join(\", \")})`;\n\nfunction resolveOptional(\n block: Parameters<BlockEmitter[\"emit\"]>[0],\n inputName: string,\n fallback: string,\n stage: Parameters<BlockEmitter[\"emit\"]>[2],\n state: Parameters<BlockEmitter[\"emit\"]>[3],\n ctx: Parameters<BlockEmitter[\"emit\"]>[4],\n target: \"vec3f\" | \"f32\"\n): string {\n const input = block.inputs.get(inputName);\n if (input?.source) {\n return ctx.cast(ctx.resolve(block, inputName, stage, state), target).expr;\n }\n return fallback;\n}\n\nexport const emitter: BlockEmitter = {\n className: \"LightBlock\",\n stage: \"fragment\",\n emit(block, outputName, stage, state, ctx) {\n // Inject helper + mark the lights UBO as required.\n state.fragment.helpers.set(NME_LIGHTING_HELPER_KEY, NME_LIGHTING_HELPER_WGSL);\n state.usesLightsUbo = true;\n\n const memoKey = `_light_${block.id}_call`;\n const callExpr = state.fragment.memo.get(memoKey);\n let callVar: string;\n if (!callExpr) {\n const wp = resolveOptional(block, \"worldPosition\", \"vec3<f32>(0.0)\", stage, state, ctx, \"vec3f\");\n const wn = resolveOptional(block, \"worldNormal\", \"vec3<f32>(0.0, 1.0, 0.0)\", stage, state, ctx, \"vec3f\");\n const cp = resolveOptional(block, \"cameraPosition\", \"_NME_CAMERA_POS_\", stage, state, ctx, \"vec3f\");\n const dc = resolveOptional(block, \"diffuseColor\", \"vec3<f32>(1.0)\", stage, state, ctx, \"vec3f\");\n const sc = resolveOptional(block, \"specularColor\", \"vec3<f32>(1.0)\", stage, state, ctx, \"vec3f\");\n const gl = resolveOptional(block, \"glossiness\", \"1.0\", stage, state, ctx, \"f32\");\n // BJS multiplies glossiness * glossPower; default glossPower is 1024 when unconnected.\n const gp = resolveOptional(block, \"glossPower\", \"1024.0\", stage, state, ctx, \"f32\");\n const sf = state.shadowLights.length > 0 ? `nme_computeShadowFactors(in)` : SHADOW_FACTORS_ONE;\n callVar = `_lt${ctx.temp(state, \"light\")}`;\n state.fragment.body.push(`let ${callVar} = nme_computeLighting(${wp}, ${wn}, ${cp}, ${dc}, ${sc}, (${gl}) * (${gp}), ${sf});`);\n state.fragment.memo.set(memoKey, { expr: callVar, type: \"vec4f\" });\n } else {\n callVar = callExpr.expr;\n }\n\n const out: Record<string, NodeExpr> = {\n diffuseOutput: { expr: `${callVar}.diffuse`, type: \"vec3f\" },\n specularOutput: { expr: `${callVar}.specular`, type: \"vec3f\" },\n shadow: { expr: `${callVar}.shadow`, type: \"f32\" },\n };\n return out[outputName] ?? { expr: `${callVar}.diffuse`, type: \"vec3f\" };\n },\n};\n"],"names":[],"mappings":";AAYO,MAAM,0BAA0B;AAEhC,MAAM,2BAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAaR,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BASZ,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACpBxC,MAAM,qBAAqB,cAAc,UAAU,KAAK,IAAI,MAAM,UAAU,EAAE,KAAK,KAAK,EAAE,KAAK,IAAI,CAAC;AAEpG,SAAS,gBACL,OACA,WACA,UACA,OACA,OACA,KACA,QACM;AACN,QAAM,QAAQ,MAAM,OAAO,IAAI,SAAS;AACxC,MAAI,+BAAO,QAAQ;AACf,WAAO,IAAI,KAAK,IAAI,QAAQ,OAAO,WAAW,OAAO,KAAK,GAAG,MAAM,EAAE;AAAA,EACzE;AACA,SAAO;AACX;AAEO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,OAAO;AAAA,EACP,KAAK,OAAO,YAAY,OAAO,OAAO,KAAK;AAEvC,UAAM,SAAS,QAAQ,IAAI,yBAAyB,wBAAwB;AAC5E,UAAM,gBAAgB;AAEtB,UAAM,UAAU,UAAU,MAAM,EAAE;AAClC,UAAM,WAAW,MAAM,SAAS,KAAK,IAAI,OAAO;AAChD,QAAI;AACJ,QAAI,CAAC,UAAU;AACX,YAAM,KAAK,gBAAgB,OAAO,iBAAiB,kBAAkB,OAAO,OAAO,KAAK,OAAO;AAC/F,YAAM,KAAK,gBAAgB,OAAO,eAAe,4BAA4B,OAAO,OAAO,KAAK,OAAO;AACvG,YAAM,KAAK,gBAAgB,OAAO,kBAAkB,oBAAoB,OAAO,OAAO,KAAK,OAAO;AAClG,YAAM,KAAK,gBAAgB,OAAO,gBAAgB,kBAAkB,OAAO,OAAO,KAAK,OAAO;AAC9F,YAAM,KAAK,gBAAgB,OAAO,iBAAiB,kBAAkB,OAAO,OAAO,KAAK,OAAO;AAC/F,YAAM,KAAK,gBAAgB,OAAO,cAAc,OAAO,OAAO,OAAO,KAAK,KAAK;AAE/E,YAAM,KAAK,gBAAgB,OAAO,cAAc,UAAU,OAAO,OAAO,KAAK,KAAK;AAClF,YAAM,KAAK,MAAM,aAAa,SAAS,IAAI,iCAAiC;AAC5E,gBAAU,MAAM,IAAI,KAAK,OAAO,OAAO,CAAC;AACxC,YAAM,SAAS,KAAK,KAAK,OAAO,OAAO,0BAA0B,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI;AAC7H,YAAM,SAAS,KAAK,IAAI,SAAS,EAAE,MAAM,SAAS,MAAM,SAAS;AAAA,IACrE,OAAO;AACH,gBAAU,SAAS;AAAA,IACvB;AAEA,UAAM,MAAgC;AAAA,MAClC,eAAe,EAAE,MAAM,GAAG,OAAO,YAAY,MAAM,QAAA;AAAA,MACnD,gBAAgB,EAAE,MAAM,GAAG,OAAO,aAAa,MAAM,QAAA;AAAA,MACrD,QAAQ,EAAE,MAAM,GAAG,OAAO,WAAW,MAAM,MAAA;AAAA,IAAM;AAErD,WAAO,IAAI,UAAU,KAAK,EAAE,MAAM,GAAG,OAAO,YAAY,MAAM,QAAA;AAAA,EAClE;AACJ;"}
@@ -0,0 +1,19 @@
1
+ const emitter = {
2
+ className: "LightInformationBlock",
3
+ emit(block, outputName, _stage, state, _ctx) {
4
+ state.usesLightsUbo = true;
5
+ const idxRaw = block.serialized.lightId;
6
+ const idx = typeof idxRaw === "number" ? idxRaw : 0;
7
+ const base = `nmeLights.lights[nli(${idx}u)]`;
8
+ const out = {
9
+ direction: { expr: `${base}.vLightData.xyz`, type: "vec3f" },
10
+ color: { expr: `${base}.vLightDiffuse.rgb`, type: "vec3f" },
11
+ intensity: { expr: `${base}.vLightDiffuse.a`, type: "f32" }
12
+ };
13
+ return out[outputName] ?? out.direction;
14
+ }
15
+ };
16
+ export {
17
+ emitter
18
+ };
19
+ //# sourceMappingURL=light-information-VJbW0jbs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"light-information-VJbW0jbs.js","sources":["../src/material/node/blocks/light-information.ts"],"sourcesContent":["/** LightInformationBlock — exposes a specific light's direction / color / intensity.\n *\n * BJS picks the light by index (serialized as `lightId` or picked default 0).\n * The pipeline builder binds the scene's shared lights UBO under `nmeLights`\n * (an array of `LightEntry` in `lightsUniforms`).\n */\n\nimport type { BlockEmitter, NodeExpr } from \"../node-types.js\";\n\nexport const emitter: BlockEmitter = {\n className: \"LightInformationBlock\",\n emit(block, outputName, _stage, state, _ctx) {\n state.usesLightsUbo = true;\n const idxRaw = block.serialized.lightId;\n const idx = typeof idxRaw === \"number\" ? idxRaw : 0;\n const base = `nmeLights.lights[nli(${idx}u)]`;\n const out: Record<string, NodeExpr> = {\n direction: { expr: `${base}.vLightData.xyz`, type: \"vec3f\" },\n color: { expr: `${base}.vLightDiffuse.rgb`, type: \"vec3f\" },\n intensity: { expr: `${base}.vLightDiffuse.a`, type: \"f32\" },\n };\n return out[outputName] ?? out.direction!;\n },\n};\n"],"names":[],"mappings":"AASO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,KAAK,OAAO,YAAY,QAAQ,OAAO,MAAM;AACzC,UAAM,gBAAgB;AACtB,UAAM,SAAS,MAAM,WAAW;AAChC,UAAM,MAAM,OAAO,WAAW,WAAW,SAAS;AAClD,UAAM,OAAO,wBAAwB,GAAG;AACxC,UAAM,MAAgC;AAAA,MAClC,WAAW,EAAE,MAAM,GAAG,IAAI,mBAAmB,MAAM,QAAA;AAAA,MACnD,OAAO,EAAE,MAAM,GAAG,IAAI,sBAAsB,MAAM,QAAA;AAAA,MAClD,WAAW,EAAE,MAAM,GAAG,IAAI,oBAAoB,MAAM,MAAA;AAAA,IAAM;AAE9D,WAAO,IAAI,UAAU,KAAK,IAAI;AAAA,EAClC;AACJ;"}
@@ -0,0 +1,71 @@
1
+ import { aS as WGSL } from "./index-C8HOR2sB.js";
2
+ function loopKey(stage, blockId) {
3
+ return `${stage}|${blockId}`;
4
+ }
5
+ function storageWritesForLoop(block, ctx) {
6
+ var _a;
7
+ const writes = [];
8
+ for (const candidate of ctx.graph.blocks.values()) {
9
+ if (candidate.className !== "StorageWriteBlock") {
10
+ continue;
11
+ }
12
+ const loopID = (_a = candidate.inputs.get("loopID")) == null ? void 0 : _a.source;
13
+ if ((loopID == null ? void 0 : loopID.blockId) === block.id && loopID.outputName === "loopID") {
14
+ writes.push(candidate);
15
+ }
16
+ }
17
+ return writes;
18
+ }
19
+ const emitter = {
20
+ className: "LoopBlock",
21
+ emit(block, outputName, stage, state, ctx) {
22
+ const active = state.loopVariables.get(loopKey(stage, block.id));
23
+ if (outputName === "index") {
24
+ if (!active) {
25
+ throw new Error(`LoopBlock "${block.name}": index can only be read while emitting the loop body`);
26
+ }
27
+ return { expr: `f32(${active.indexVar})`, type: "f32" };
28
+ }
29
+ if (outputName === "loopID") {
30
+ throw new Error(`LoopBlock "${block.name}": loopID can only be consumed by StorageReadBlock/StorageWriteBlock`);
31
+ }
32
+ if (outputName !== "output") {
33
+ throw new Error(`LoopBlock "${block.name}": unsupported output "${outputName}"`);
34
+ }
35
+ const initial = ctx.resolve(block, "input", stage, state);
36
+ const valueVar = ctx.temp(state, "loop");
37
+ const indexVar = ctx.temp(state, "loopIndex");
38
+ const body = stage === "vertex" ? state.vertex.body : state.fragment.body;
39
+ body.push(`var ${valueVar}: ${WGSL[initial.type]} = ${initial.expr};`);
40
+ const iterationsInput = block.inputs.get("iterations");
41
+ const iterations = (iterationsInput == null ? void 0 : iterationsInput.source) ? `i32(${ctx.cast(ctx.resolve(block, "iterations", stage, state), "f32").expr})` : String(Math.max(0, Math.floor(block.serialized["iterations"] ?? 4)));
42
+ body.push(`for (var ${indexVar} = 0; ${indexVar} < ${iterations}; ${indexVar} = ${indexVar} + 1) {`);
43
+ const key = loopKey(stage, block.id);
44
+ const previous = state.loopVariables.get(key);
45
+ const stageState = stage === "vertex" ? state.vertex : state.fragment;
46
+ const previousMemo = new Map(stageState.memo);
47
+ state.loopVariables.set(key, { valueVar, valueType: initial.type, indexVar });
48
+ try {
49
+ for (const write of storageWritesForLoop(block, ctx)) {
50
+ const value = ctx.cast(ctx.resolve(write, "value", stage, state), initial.type);
51
+ body.push(`${valueVar} = ${value.expr};`);
52
+ }
53
+ } finally {
54
+ stageState.memo.clear();
55
+ for (const [memoKey, memoValue] of previousMemo) {
56
+ stageState.memo.set(memoKey, memoValue);
57
+ }
58
+ if (previous) {
59
+ state.loopVariables.set(key, previous);
60
+ } else {
61
+ state.loopVariables.delete(key);
62
+ }
63
+ }
64
+ body.push("}");
65
+ return { expr: valueVar, type: initial.type };
66
+ }
67
+ };
68
+ export {
69
+ emitter
70
+ };
71
+ //# sourceMappingURL=loop-block-Bb23EOMb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-block-Bb23EOMb.js","sources":["../src/material/node/blocks/loop-block.ts"],"sourcesContent":["import type { BlockEmitter, NodeBlock, Stage } from \"../node-types.js\";\nimport { WGSL } from \"../node-types.js\";\n\nfunction loopKey(stage: Stage, blockId: number): string {\n return `${stage}|${blockId}`;\n}\n\nfunction storageWritesForLoop(block: NodeBlock, ctx: Parameters<BlockEmitter[\"emit\"]>[4]): NodeBlock[] {\n const writes: NodeBlock[] = [];\n for (const candidate of ctx.graph.blocks.values()) {\n if (candidate.className !== \"StorageWriteBlock\") {\n continue;\n }\n const loopID = candidate.inputs.get(\"loopID\")?.source;\n if (loopID?.blockId === block.id && loopID.outputName === \"loopID\") {\n writes.push(candidate);\n }\n }\n return writes;\n}\n\nexport const emitter: BlockEmitter = {\n className: \"LoopBlock\",\n emit(block, outputName, stage, state, ctx) {\n const active = state.loopVariables.get(loopKey(stage, block.id));\n if (outputName === \"index\") {\n if (!active) {\n throw new Error(`LoopBlock \"${block.name}\": index can only be read while emitting the loop body`);\n }\n return { expr: `f32(${active.indexVar})`, type: \"f32\" };\n }\n if (outputName === \"loopID\") {\n throw new Error(`LoopBlock \"${block.name}\": loopID can only be consumed by StorageReadBlock/StorageWriteBlock`);\n }\n if (outputName !== \"output\") {\n throw new Error(`LoopBlock \"${block.name}\": unsupported output \"${outputName}\"`);\n }\n\n const initial = ctx.resolve(block, \"input\", stage, state);\n const valueVar = ctx.temp(state, \"loop\");\n const indexVar = ctx.temp(state, \"loopIndex\");\n const body = stage === \"vertex\" ? state.vertex.body : state.fragment.body;\n body.push(`var ${valueVar}: ${WGSL[initial.type]} = ${initial.expr};`);\n\n const iterationsInput = block.inputs.get(\"iterations\");\n const iterations = iterationsInput?.source\n ? `i32(${ctx.cast(ctx.resolve(block, \"iterations\", stage, state), \"f32\").expr})`\n : String(Math.max(0, Math.floor((block.serialized[\"iterations\"] as number | undefined) ?? 4)));\n\n body.push(`for (var ${indexVar} = 0; ${indexVar} < ${iterations}; ${indexVar} = ${indexVar} + 1) {`);\n const key = loopKey(stage, block.id);\n const previous = state.loopVariables.get(key);\n const stageState = stage === \"vertex\" ? state.vertex : state.fragment;\n const previousMemo = new Map(stageState.memo);\n state.loopVariables.set(key, { valueVar, valueType: initial.type, indexVar });\n try {\n for (const write of storageWritesForLoop(block, ctx)) {\n const value = ctx.cast(ctx.resolve(write, \"value\", stage, state), initial.type);\n body.push(`${valueVar} = ${value.expr};`);\n }\n } finally {\n stageState.memo.clear();\n for (const [memoKey, memoValue] of previousMemo) {\n stageState.memo.set(memoKey, memoValue);\n }\n if (previous) {\n state.loopVariables.set(key, previous);\n } else {\n state.loopVariables.delete(key);\n }\n }\n body.push(\"}\");\n return { expr: valueVar, type: initial.type };\n },\n};\n"],"names":[],"mappings":";AAGA,SAAS,QAAQ,OAAc,SAAyB;AACpD,SAAO,GAAG,KAAK,IAAI,OAAO;AAC9B;AAEA,SAAS,qBAAqB,OAAkB,KAAuD;;AACnG,QAAM,SAAsB,CAAA;AAC5B,aAAW,aAAa,IAAI,MAAM,OAAO,UAAU;AAC/C,QAAI,UAAU,cAAc,qBAAqB;AAC7C;AAAA,IACJ;AACA,UAAM,UAAS,eAAU,OAAO,IAAI,QAAQ,MAA7B,mBAAgC;AAC/C,SAAI,iCAAQ,aAAY,MAAM,MAAM,OAAO,eAAe,UAAU;AAChE,aAAO,KAAK,SAAS;AAAA,IACzB;AAAA,EACJ;AACA,SAAO;AACX;AAEO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,KAAK,OAAO,YAAY,OAAO,OAAO,KAAK;AACvC,UAAM,SAAS,MAAM,cAAc,IAAI,QAAQ,OAAO,MAAM,EAAE,CAAC;AAC/D,QAAI,eAAe,SAAS;AACxB,UAAI,CAAC,QAAQ;AACT,cAAM,IAAI,MAAM,cAAc,MAAM,IAAI,wDAAwD;AAAA,MACpG;AACA,aAAO,EAAE,MAAM,OAAO,OAAO,QAAQ,KAAK,MAAM,MAAA;AAAA,IACpD;AACA,QAAI,eAAe,UAAU;AACzB,YAAM,IAAI,MAAM,cAAc,MAAM,IAAI,sEAAsE;AAAA,IAClH;AACA,QAAI,eAAe,UAAU;AACzB,YAAM,IAAI,MAAM,cAAc,MAAM,IAAI,0BAA0B,UAAU,GAAG;AAAA,IACnF;AAEA,UAAM,UAAU,IAAI,QAAQ,OAAO,SAAS,OAAO,KAAK;AACxD,UAAM,WAAW,IAAI,KAAK,OAAO,MAAM;AACvC,UAAM,WAAW,IAAI,KAAK,OAAO,WAAW;AAC5C,UAAM,OAAO,UAAU,WAAW,MAAM,OAAO,OAAO,MAAM,SAAS;AACrE,SAAK,KAAK,OAAO,QAAQ,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AAErE,UAAM,kBAAkB,MAAM,OAAO,IAAI,YAAY;AACrD,UAAM,cAAa,mDAAiB,UAC9B,OAAO,IAAI,KAAK,IAAI,QAAQ,OAAO,cAAc,OAAO,KAAK,GAAG,KAAK,EAAE,IAAI,MAC3E,OAAO,KAAK,IAAI,GAAG,KAAK,MAAO,MAAM,WAAW,YAAY,KAA4B,CAAC,CAAC,CAAC;AAEjG,SAAK,KAAK,YAAY,QAAQ,SAAS,QAAQ,MAAM,UAAU,KAAK,QAAQ,MAAM,QAAQ,SAAS;AACnG,UAAM,MAAM,QAAQ,OAAO,MAAM,EAAE;AACnC,UAAM,WAAW,MAAM,cAAc,IAAI,GAAG;AAC5C,UAAM,aAAa,UAAU,WAAW,MAAM,SAAS,MAAM;AAC7D,UAAM,eAAe,IAAI,IAAI,WAAW,IAAI;AAC5C,UAAM,cAAc,IAAI,KAAK,EAAE,UAAU,WAAW,QAAQ,MAAM,UAAU;AAC5E,QAAI;AACA,iBAAW,SAAS,qBAAqB,OAAO,GAAG,GAAG;AAClD,cAAM,QAAQ,IAAI,KAAK,IAAI,QAAQ,OAAO,SAAS,OAAO,KAAK,GAAG,QAAQ,IAAI;AAC9E,aAAK,KAAK,GAAG,QAAQ,MAAM,MAAM,IAAI,GAAG;AAAA,MAC5C;AAAA,IACJ,UAAA;AACI,iBAAW,KAAK,MAAA;AAChB,iBAAW,CAAC,SAAS,SAAS,KAAK,cAAc;AAC7C,mBAAW,KAAK,IAAI,SAAS,SAAS;AAAA,MAC1C;AACA,UAAI,UAAU;AACV,cAAM,cAAc,IAAI,KAAK,QAAQ;AAAA,MACzC,OAAO;AACH,cAAM,cAAc,OAAO,GAAG;AAAA,MAClC;AAAA,IACJ;AACA,SAAK,KAAK,GAAG;AACb,WAAO,EAAE,MAAM,UAAU,MAAM,QAAQ,KAAA;AAAA,EAC3C;AACJ;"}