@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,158 @@
1
+ import { aH as PBR_HAS_THICKNESS_MAP, aI as PBR_HAS_SUBSURFACE, aJ as PBR2_HAS_THICKNESS_GLTF_CHANNEL } from "./index-C8HOR2sB.js";
2
+ const SS_HELPERS = `
3
+ fn transmittanceBRDF_Burley(tintColor: vec3<f32>, diffusionDistance: vec3<f32>, thickness: f32) -> vec3<f32> {
4
+ let S = 1.0 / max(vec3<f32>(0.000001), diffusionDistance);
5
+ let temp = exp((-0.333333333 * thickness) * S);
6
+ return tintColor * 0.25 * (temp * temp * temp + 3.0 * temp);
7
+ }
8
+ fn computeWrappedDiffuseNdotL(NdotL: f32, w: f32) -> f32 {
9
+ let t = 1.0 + w;
10
+ let invt2 = 1.0 / (t * t);
11
+ return saturate((NdotL + w) * invt2);
12
+ }
13
+ `;
14
+ const SS_SCOPE_VARS = `var translucencyDirect = vec3<f32>(0.0);
15
+ var ssTransmittance = vec3<f32>(0.0);
16
+ var ssIntensity = 0.0;`;
17
+ function makeThicknessBlock(hasThicknessMap, useGltfChannel) {
18
+ const chan = useGltfChannel ? "g" : "r";
19
+ const texSample = hasThicknessMap ? `let thicknessSample = textureSample(thicknessTexture_, thicknessSampler_, input.uv).${chan};` : `let thicknessSample = 1.0;`;
20
+ return `${texSample}
21
+ let ssThickness = max(material.subsurfaceParams.y + thicknessSample * material.subsurfaceParams.z, 0.000001);
22
+ let ssTranslucencyColor = material.subsurfaceParams3.rgb;
23
+ let ssDiffDist = material.subsurfaceParams2.rgb;
24
+ ssIntensity = material.subsurfaceParams.x;
25
+ ssTransmittance = transmittanceBRDF_Burley(ssTranslucencyColor, ssDiffDist, ssThickness) * ssIntensity;`;
26
+ }
27
+ const SS_DIRECT = `{
28
+ let NdotLU = dot(N, L);
29
+ if (NdotLU < 0.0) {
30
+ let wrapNdotL = computeWrappedDiffuseNdotL(abs(NdotLU), 0.02);
31
+ translucencyDirect += (1.0 / PI) * wrapNdotL * ssTransmittance * lightAtten * lightColor * material.directIntensity;
32
+ }
33
+ }`;
34
+ const SS_IBL_MOD = `{
35
+ let N_back = -N_env;
36
+ let envIrrBack = (scene.vSphericalL00.rgb
37
+ + scene.vSphericalL1_1.rgb * N_back.y + scene.vSphericalL10.rgb * N_back.z + scene.vSphericalL11.rgb * N_back.x
38
+ + scene.vSphericalL2_2.rgb * (N_back.y * N_back.x) + scene.vSphericalL2_1.rgb * (N_back.y * N_back.z)
39
+ + scene.vSphericalL20.rgb * (3.0 * N_back.z * N_back.z - 1.0) + scene.vSphericalL21.rgb * (N_back.z * N_back.x)
40
+ + scene.vSphericalL22.rgb * (N_back.x * N_back.x - N_back.y * N_back.y)) * material.environmentIntensity;
41
+ let refractionIrradiance = envIrrBack * ssTransmittance;
42
+ color -= finalIrradiance * ssIntensity;
43
+ color += refractionIrradiance * occlusion;
44
+ color -= directDiffuse * ssIntensity;
45
+ color += translucencyDirect * occlusion;
46
+ }`;
47
+ const SS_NO_IBL_MOD = `color -= directDiffuse * ssIntensity;
48
+ color += translucencyDirect;`;
49
+ const STAGE_FRAGMENT = 2;
50
+ function createSubsurfaceFragment(hasThicknessMap, hasIbl, useGltfThicknessChannel) {
51
+ const bindings = hasThicknessMap ? [
52
+ { _name: "thicknessTexture_", _type: { _kind: "texture", _textureType: "texture_2d<f32>" }, _visibility: STAGE_FRAGMENT },
53
+ { _name: "thicknessSampler_", _type: { _kind: "sampler", _samplerType: "sampler" }, _visibility: STAGE_FRAGMENT }
54
+ ] : [];
55
+ const slots = {
56
+ SV: SS_SCOPE_VARS,
57
+ AT: makeThicknessBlock(hasThicknessMap, useGltfThicknessChannel),
58
+ AD: SS_DIRECT
59
+ };
60
+ if (hasIbl) {
61
+ slots.AI = SS_IBL_MOD;
62
+ } else {
63
+ slots.NI = SS_NO_IBL_MOD;
64
+ }
65
+ const deps = [];
66
+ if (hasIbl) {
67
+ deps.push("ibl");
68
+ }
69
+ return {
70
+ _id: "subsurface",
71
+ _dependencies: deps.length > 0 ? deps : void 0,
72
+ _bindings: bindings.length > 0 ? bindings : void 0,
73
+ _uboFields: [
74
+ { _name: "subsurfaceParams", _type: "vec4<f32>" },
75
+ { _name: "subsurfaceParams2", _type: "vec4<f32>" },
76
+ { _name: "subsurfaceParams3", _type: "vec4<f32>" }
77
+ ],
78
+ _helperFunctions: SS_HELPERS,
79
+ _fragmentSlots: slots
80
+ };
81
+ }
82
+ function writeSubsurfaceUBO(data, ss, offsets) {
83
+ const trans = ss.translucency;
84
+ const thick = ss.thickness;
85
+ const off = offsets.get("subsurfaceParams") / 4;
86
+ data[off] = trans.intensity ?? 1;
87
+ const minThick = (thick == null ? void 0 : thick.min) ?? 0;
88
+ const maxThick = (thick == null ? void 0 : thick.max) ?? 1;
89
+ data[off + 1] = minThick;
90
+ data[off + 2] = maxThick - minThick;
91
+ const off2 = offsets.get("subsurfaceParams2") / 4;
92
+ const dd = trans.diffusionDistance ?? [1, 1, 1];
93
+ data[off2] = dd[0];
94
+ data[off2 + 1] = dd[1];
95
+ data[off2 + 2] = dd[2];
96
+ const off3 = offsets.get("subsurfaceParams3") / 4;
97
+ const tc = trans.color ?? [1, 1, 1];
98
+ data[off3] = tc[0];
99
+ data[off3 + 1] = tc[1];
100
+ data[off3 + 2] = tc[2];
101
+ }
102
+ const pbrExt = {
103
+ id: "subsurface",
104
+ phase: "fragment",
105
+ detect(mat) {
106
+ var _a, _b, _c;
107
+ const m = mat;
108
+ if (!((_a = m.subsurface) == null ? void 0 : _a.translucency)) {
109
+ return { f: 0, f2: 0 };
110
+ }
111
+ let f = PBR_HAS_SUBSURFACE;
112
+ let f2 = 0;
113
+ if ((_b = m.subsurface.thickness) == null ? void 0 : _b.texture) {
114
+ f |= PBR_HAS_THICKNESS_MAP;
115
+ }
116
+ if ((_c = m.subsurface.thickness) == null ? void 0 : _c.useGlTFChannel) {
117
+ f2 |= PBR2_HAS_THICKNESS_GLTF_CHANNEL;
118
+ }
119
+ return { f, f2 };
120
+ },
121
+ frag(ctx) {
122
+ if (!(ctx._features & PBR_HAS_SUBSURFACE)) {
123
+ return null;
124
+ }
125
+ return createSubsurfaceFragment((ctx._features & PBR_HAS_THICKNESS_MAP) !== 0, ctx._hasIbl, (ctx._features2 & PBR2_HAS_THICKNESS_GLTF_CHANNEL) !== 0);
126
+ },
127
+ writeUbo(data, mat, offsets) {
128
+ var _a;
129
+ const m = mat;
130
+ if (((_a = m.subsurface) == null ? void 0 : _a.translucency) && offsets.has("subsurfaceParams")) {
131
+ writeSubsurfaceUBO(data, m.subsurface, offsets);
132
+ }
133
+ },
134
+ bind(ctx, entries, b) {
135
+ var _a, _b;
136
+ if ((ctx._features & PBR_HAS_THICKNESS_MAP) !== 0) {
137
+ const tex = (_b = (_a = ctx._material.subsurface) == null ? void 0 : _a.thickness) == null ? void 0 : _b.texture;
138
+ if (tex) {
139
+ entries.push({ binding: b++, resource: tex.view });
140
+ entries.push({ binding: b++, resource: tex.sampler });
141
+ }
142
+ }
143
+ return b;
144
+ },
145
+ textures(mat, out) {
146
+ var _a, _b;
147
+ const t = (_b = (_a = mat.subsurface) == null ? void 0 : _a.thickness) == null ? void 0 : _b.texture;
148
+ if (t) {
149
+ out.push(t);
150
+ }
151
+ }
152
+ };
153
+ export {
154
+ createSubsurfaceFragment,
155
+ pbrExt,
156
+ writeSubsurfaceUBO
157
+ };
158
+ //# sourceMappingURL=subsurface-fragment-liM3y2-P.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subsurface-fragment-liM3y2-P.js","sources":["../src/material/pbr/fragments/subsurface-fragment.ts"],"sourcesContent":["/**\n * Subsurface Fragment\n *\n * Adds translucency — light passing through thin surfaces.\n * Only bundled when a scene uses PbrMaterialProps.subsurface.\n *\n * Math follows BJS PBRSubSurfaceConfiguration:\n * - Burley transmittance BRDF: exp-based approximation\n * - Thickness from texture (.g channel, BJS glTF-style default)\n * - Direct: wrap-around diffuse scaled by transmittance\n * - IBL: irradiance reduced by (1 - intensity), transmittance-weighted contribution added\n */\n\nimport type { ShaderFragment } from \"../../../shader/fragment-types.js\";\nimport type { PbrMaterialProps, SubSurfaceProps } from \"../pbr-material.js\";\nimport type { Texture2D } from \"../../../texture/texture-2d.js\";\nimport type { PbrExt } from \"../pbr-flags.js\";\nimport { PBR_HAS_SUBSURFACE, PBR_HAS_THICKNESS_MAP, PBR2_HAS_THICKNESS_GLTF_CHANNEL } from \"../pbr-flag-bits.js\";\n\nconst SS_HELPERS = `\nfn transmittanceBRDF_Burley(tintColor: vec3<f32>, diffusionDistance: vec3<f32>, thickness: f32) -> vec3<f32> {\nlet S = 1.0 / max(vec3<f32>(0.000001), diffusionDistance);\nlet temp = exp((-0.333333333 * thickness) * S);\nreturn tintColor * 0.25 * (temp * temp * temp + 3.0 * temp);\n}\nfn computeWrappedDiffuseNdotL(NdotL: f32, w: f32) -> f32 {\nlet t = 1.0 + w;\nlet invt2 = 1.0 / (t * t);\nreturn saturate((NdotL + w) * invt2);\n}\n`;\n\n// SV: declare subsurface scope variables\nconst SS_SCOPE_VARS = `var translucencyDirect = vec3<f32>(0.0);\nvar ssTransmittance = vec3<f32>(0.0);\nvar ssIntensity = 0.0;`;\n\n// AT: sample thickness + compute transmittance.\n// Channel: R by default (matches existing non-glTF path); G when the glTF\n// KHR_materials_volume flag is on (spec mandates G channel).\nfunction makeThicknessBlock(hasThicknessMap: boolean, useGltfChannel: boolean): string {\n const chan = useGltfChannel ? \"g\" : \"r\";\n const texSample = hasThicknessMap ? `let thicknessSample = textureSample(thicknessTexture_, thicknessSampler_, input.uv).${chan};` : `let thicknessSample = 1.0;`;\n return `${texSample}\nlet ssThickness = max(material.subsurfaceParams.y + thicknessSample * material.subsurfaceParams.z, 0.000001);\nlet ssTranslucencyColor = material.subsurfaceParams3.rgb;\nlet ssDiffDist = material.subsurfaceParams2.rgb;\nssIntensity = material.subsurfaceParams.x;\nssTransmittance = transmittanceBRDF_Burley(ssTranslucencyColor, ssDiffDist, ssThickness) * ssIntensity;`;\n}\n\n// AD: direct-light translucency lobe (back-facing only, wrap 0.02, 1/PI diffuse BRDF).\n// BJS also scales the front-facing direct diffuse by (1 - ssIntensity); we cannot easily\n// modify `directDiffuse` at compute time, so compensate via `color -= directDiffuse * ssIntensity`\n// in the AI/NI slot below.\nconst SS_DIRECT = `{\nlet NdotLU = dot(N, L);\nif (NdotLU < 0.0) {\nlet wrapNdotL = computeWrappedDiffuseNdotL(abs(NdotLU), 0.02);\ntranslucencyDirect += (1.0 / PI) * wrapNdotL * ssTransmittance * lightAtten * lightColor * material.directIntensity;\n}\n}`;\n\n// AI: subsurface IBL modification (runs after IBL sets `color`).\n// BJS: finalIrradiance *= (1 - ssI); finalIrradiance += refractionIrradiance;\n// where refractionIrradiance = environmentIrradiance(-N) * transmittance (no albedo by default).\n// AO/occlusion applies to the full finalIrradiance in BJS.\n// Also: scale direct diffuse by (1-ssI) and add translucencyDirect lobe.\nconst SS_IBL_MOD = `{\nlet N_back = -N_env;\nlet envIrrBack = (scene.vSphericalL00.rgb\n + scene.vSphericalL1_1.rgb * N_back.y + scene.vSphericalL10.rgb * N_back.z + scene.vSphericalL11.rgb * N_back.x\n + scene.vSphericalL2_2.rgb * (N_back.y * N_back.x) + scene.vSphericalL2_1.rgb * (N_back.y * N_back.z)\n + scene.vSphericalL20.rgb * (3.0 * N_back.z * N_back.z - 1.0) + scene.vSphericalL21.rgb * (N_back.z * N_back.x)\n + scene.vSphericalL22.rgb * (N_back.x * N_back.x - N_back.y * N_back.y)) * material.environmentIntensity;\nlet refractionIrradiance = envIrrBack * ssTransmittance;\ncolor -= finalIrradiance * ssIntensity;\ncolor += refractionIrradiance * occlusion;\ncolor -= directDiffuse * ssIntensity;\ncolor += translucencyDirect * occlusion;\n}`;\n\n// NI: no-IBL path — just scale direct diffuse and add translucency lobe.\nconst SS_NO_IBL_MOD = `color -= directDiffuse * ssIntensity;\ncolor += translucencyDirect;`;\n\nconst STAGE_FRAGMENT = 0x2;\n\n/**\n * Create a subsurface translucency fragment.\n * @param hasThicknessMap - Whether the material has a thickness texture.\n * @param hasIbl - Whether the scene has IBL.\n * @param useGltfThicknessChannel - Sample the thickness texture's G channel\n * (KHR_materials_volume) instead of R (BJS default).\n */\nexport function createSubsurfaceFragment(hasThicknessMap: boolean, hasIbl: boolean, useGltfThicknessChannel: boolean): ShaderFragment {\n const bindings = hasThicknessMap\n ? [\n { _name: \"thicknessTexture_\", _type: { _kind: \"texture\" as const, _textureType: \"texture_2d<f32>\" as const }, _visibility: STAGE_FRAGMENT },\n { _name: \"thicknessSampler_\", _type: { _kind: \"sampler\" as const, _samplerType: \"sampler\" as const }, _visibility: STAGE_FRAGMENT },\n ]\n : [];\n\n const slots: Partial<Record<string, string>> = {\n SV: SS_SCOPE_VARS,\n AT: makeThicknessBlock(hasThicknessMap, useGltfThicknessChannel),\n AD: SS_DIRECT,\n };\n if (hasIbl) {\n slots.AI = SS_IBL_MOD;\n } else {\n slots.NI = SS_NO_IBL_MOD;\n }\n\n const deps: string[] = [];\n if (hasIbl) {\n deps.push(\"ibl\");\n }\n\n return {\n _id: \"subsurface\",\n _dependencies: deps.length > 0 ? deps : undefined,\n _bindings: bindings.length > 0 ? bindings : undefined,\n _uboFields: [\n { _name: \"subsurfaceParams\", _type: \"vec4<f32>\" as const },\n { _name: \"subsurfaceParams2\", _type: \"vec4<f32>\" as const },\n { _name: \"subsurfaceParams3\", _type: \"vec4<f32>\" as const },\n ],\n _helperFunctions: SS_HELPERS,\n _fragmentSlots: slots,\n };\n}\n\n/** Write subsurface UBO data. Called from pbr-renderable.ts only when subsurface is active. */\nexport function writeSubsurfaceUBO(data: Float32Array, ss: SubSurfaceProps, offsets: ReadonlyMap<string, number>): void {\n const trans = ss.translucency!;\n const thick = ss.thickness;\n\n const off = offsets.get(\"subsurfaceParams\")! / 4;\n data[off] = trans.intensity ?? 1.0;\n const minThick = thick?.min ?? 0;\n const maxThick = thick?.max ?? 1.0;\n data[off + 1] = minThick;\n data[off + 2] = maxThick - minThick;\n\n const off2 = offsets.get(\"subsurfaceParams2\")! / 4;\n const dd = trans.diffusionDistance ?? [1, 1, 1];\n data[off2] = dd[0]!;\n data[off2 + 1] = dd[1]!;\n data[off2 + 2] = dd[2]!;\n\n const off3 = offsets.get(\"subsurfaceParams3\")! / 4;\n const tc = trans.color ?? [1, 1, 1];\n data[off3] = tc[0]!;\n data[off3 + 1] = tc[1]!;\n data[off3 + 2] = tc[2]!;\n}\n\nexport const pbrExt: PbrExt = {\n id: \"subsurface\",\n phase: \"fragment\",\n detect(mat) {\n const m = mat as PbrMaterialProps;\n if (!m.subsurface?.translucency) {\n return { f: 0, f2: 0 };\n }\n let f = PBR_HAS_SUBSURFACE;\n let f2 = 0;\n if (m.subsurface.thickness?.texture) {\n f |= PBR_HAS_THICKNESS_MAP;\n }\n if (m.subsurface.thickness?.useGlTFChannel) {\n f2 |= PBR2_HAS_THICKNESS_GLTF_CHANNEL;\n }\n return { f, f2 };\n },\n frag(ctx) {\n if (!(ctx._features & PBR_HAS_SUBSURFACE)) {\n return null;\n }\n return createSubsurfaceFragment((ctx._features & PBR_HAS_THICKNESS_MAP) !== 0, ctx._hasIbl, (ctx._features2 & PBR2_HAS_THICKNESS_GLTF_CHANNEL) !== 0);\n },\n writeUbo(data, mat, offsets) {\n const m = mat as PbrMaterialProps;\n if (m.subsurface?.translucency && offsets.has(\"subsurfaceParams\")) {\n writeSubsurfaceUBO(data, m.subsurface as SubSurfaceProps, offsets);\n }\n },\n bind(ctx, entries, b) {\n if ((ctx._features & PBR_HAS_THICKNESS_MAP) !== 0) {\n const tex = (ctx._material as PbrMaterialProps).subsurface?.thickness?.texture as Texture2D | undefined;\n if (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, out) {\n const t = (mat as PbrMaterialProps).subsurface?.thickness?.texture;\n if (t) {\n out.push(t);\n }\n },\n};\n"],"names":[],"mappings":";AAmBA,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcnB,MAAM,gBAAgB;AAAA;AAAA;AAOtB,SAAS,mBAAmB,iBAA0B,gBAAiC;AACnF,QAAM,OAAO,iBAAiB,MAAM;AACpC,QAAM,YAAY,kBAAkB,uFAAuF,IAAI,MAAM;AACrI,SAAO,GAAG,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAMvB;AAMA,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAalB,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAenB,MAAM,gBAAgB;AAAA;AAGtB,MAAM,iBAAiB;AAShB,SAAS,yBAAyB,iBAA0B,QAAiB,yBAAkD;AAClI,QAAM,WAAW,kBACX;AAAA,IACI,EAAE,OAAO,qBAAqB,OAAO,EAAE,OAAO,WAAoB,cAAc,kBAAA,GAA8B,aAAa,eAAA;AAAA,IAC3H,EAAE,OAAO,qBAAqB,OAAO,EAAE,OAAO,WAAoB,cAAc,aAAsB,aAAa,eAAA;AAAA,EAAe,IAEtI,CAAA;AAEN,QAAM,QAAyC;AAAA,IAC3C,IAAI;AAAA,IACJ,IAAI,mBAAmB,iBAAiB,uBAAuB;AAAA,IAC/D,IAAI;AAAA,EAAA;AAER,MAAI,QAAQ;AACR,UAAM,KAAK;AAAA,EACf,OAAO;AACH,UAAM,KAAK;AAAA,EACf;AAEA,QAAM,OAAiB,CAAA;AACvB,MAAI,QAAQ;AACR,SAAK,KAAK,KAAK;AAAA,EACnB;AAEA,SAAO;AAAA,IACH,KAAK;AAAA,IACL,eAAe,KAAK,SAAS,IAAI,OAAO;AAAA,IACxC,WAAW,SAAS,SAAS,IAAI,WAAW;AAAA,IAC5C,YAAY;AAAA,MACR,EAAE,OAAO,oBAAoB,OAAO,YAAA;AAAA,MACpC,EAAE,OAAO,qBAAqB,OAAO,YAAA;AAAA,MACrC,EAAE,OAAO,qBAAqB,OAAO,YAAA;AAAA,IAAqB;AAAA,IAE9D,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,EAAA;AAExB;AAGO,SAAS,mBAAmB,MAAoB,IAAqB,SAA4C;AACpH,QAAM,QAAQ,GAAG;AACjB,QAAM,QAAQ,GAAG;AAEjB,QAAM,MAAM,QAAQ,IAAI,kBAAkB,IAAK;AAC/C,OAAK,GAAG,IAAI,MAAM,aAAa;AAC/B,QAAM,YAAW,+BAAO,QAAO;AAC/B,QAAM,YAAW,+BAAO,QAAO;AAC/B,OAAK,MAAM,CAAC,IAAI;AAChB,OAAK,MAAM,CAAC,IAAI,WAAW;AAE3B,QAAM,OAAO,QAAQ,IAAI,mBAAmB,IAAK;AACjD,QAAM,KAAK,MAAM,qBAAqB,CAAC,GAAG,GAAG,CAAC;AAC9C,OAAK,IAAI,IAAI,GAAG,CAAC;AACjB,OAAK,OAAO,CAAC,IAAI,GAAG,CAAC;AACrB,OAAK,OAAO,CAAC,IAAI,GAAG,CAAC;AAErB,QAAM,OAAO,QAAQ,IAAI,mBAAmB,IAAK;AACjD,QAAM,KAAK,MAAM,SAAS,CAAC,GAAG,GAAG,CAAC;AAClC,OAAK,IAAI,IAAI,GAAG,CAAC;AACjB,OAAK,OAAO,CAAC,IAAI,GAAG,CAAC;AACrB,OAAK,OAAO,CAAC,IAAI,GAAG,CAAC;AACzB;AAEO,MAAM,SAAiB;AAAA,EAC1B,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,OAAO,KAAK;;AACR,UAAM,IAAI;AACV,QAAI,GAAC,OAAE,eAAF,mBAAc,eAAc;AAC7B,aAAO,EAAE,GAAG,GAAG,IAAI,EAAA;AAAA,IACvB;AACA,QAAI,IAAI;AACR,QAAI,KAAK;AACT,SAAI,OAAE,WAAW,cAAb,mBAAwB,SAAS;AACjC,WAAK;AAAA,IACT;AACA,SAAI,OAAE,WAAW,cAAb,mBAAwB,gBAAgB;AACxC,YAAM;AAAA,IACV;AACA,WAAO,EAAE,GAAG,GAAA;AAAA,EAChB;AAAA,EACA,KAAK,KAAK;AACN,QAAI,EAAE,IAAI,YAAY,qBAAqB;AACvC,aAAO;AAAA,IACX;AACA,WAAO,0BAA0B,IAAI,YAAY,2BAA2B,GAAG,IAAI,UAAU,IAAI,aAAa,qCAAqC,CAAC;AAAA,EACxJ;AAAA,EACA,SAAS,MAAM,KAAK,SAAS;;AACzB,UAAM,IAAI;AACV,UAAI,OAAE,eAAF,mBAAc,iBAAgB,QAAQ,IAAI,kBAAkB,GAAG;AAC/D,yBAAmB,MAAM,EAAE,YAA+B,OAAO;AAAA,IACrE;AAAA,EACJ;AAAA,EACA,KAAK,KAAK,SAAS,GAAG;;AAClB,SAAK,IAAI,YAAY,2BAA2B,GAAG;AAC/C,YAAM,OAAO,eAAI,UAA+B,eAAnC,mBAA+C,cAA/C,mBAA0D;AACvE,UAAI,KAAK;AACL,gBAAQ,KAAK,EAAE,SAAS,KAAK,UAAU,IAAI,MAAM;AACjD,gBAAQ,KAAK,EAAE,SAAS,KAAK,UAAU,IAAI,SAAS;AAAA,MACxD;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,SAAS,KAAK,KAAK;;AACf,UAAM,KAAK,eAAyB,eAAzB,mBAAqC,cAArC,mBAAgD;AAC3D,QAAI,GAAG;AACH,UAAI,KAAK,CAAC;AAAA,IACd;AAAA,EACJ;AACJ;"}
@@ -0,0 +1,6 @@
1
+ import { b as binaryEmitter } from "./_math-factory-C-QqW-Wi.js";
2
+ const emitter = binaryEmitter("SubtractBlock", (l, r) => `${l} - ${r}`);
3
+ export {
4
+ emitter
5
+ };
6
+ //# sourceMappingURL=subtract-block-NPfKvzQP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subtract-block-NPfKvzQP.js","sources":["../src/material/node/blocks/subtract-block.ts"],"sourcesContent":["import { binaryEmitter } from \"./_math-factory.js\";\nexport const emitter = binaryEmitter(\"SubtractBlock\", (l, r) => `${l} - ${r}`);\n"],"names":[],"mappings":";AACO,MAAM,UAAU,cAAc,iBAAiB,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE;"}
@@ -0,0 +1,35 @@
1
+ function getDefaultSwapchainTask(scene) {
2
+ for (const task of scene._frameGraph._tasks) {
3
+ const ptask = task;
4
+ if (!(ptask == null ? void 0 : ptask._config) || !ptask._colorAttachment) {
5
+ continue;
6
+ }
7
+ const renderTask = task;
8
+ if (renderTask._config.rt._descriptor.resolveToSwapchain === true) {
9
+ return renderTask;
10
+ }
11
+ }
12
+ return null;
13
+ }
14
+ function configureSwapchainOverlayScene(engine, overlay) {
15
+ const base = engine._renderingContexts[engine._renderingContexts.length - 1];
16
+ if (!(base == null ? void 0 : base._frameGraph)) {
17
+ return;
18
+ }
19
+ const baseTask = getDefaultSwapchainTask(base);
20
+ const overlayTask = getDefaultSwapchainTask(overlay);
21
+ if (!baseTask || !overlayTask) {
22
+ return;
23
+ }
24
+ overlayTask._config.clr = false;
25
+ overlay._beforeRender.unshift(() => {
26
+ const view = baseTask._colorAttachment.view;
27
+ if (engine.msaaSamples > 1 && view) {
28
+ overlayTask._colorAttachment.view = view;
29
+ }
30
+ });
31
+ }
32
+ export {
33
+ configureSwapchainOverlayScene
34
+ };
35
+ //# sourceMappingURL=swapchain-overlay-DcCSFDp7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swapchain-overlay-DcCSFDp7.js","sources":["../src/scene/swapchain-overlay.ts"],"sourcesContent":["import type { EngineContext } from \"../engine/engine.js\";\nimport type { RenderTask } from \"../frame-graph/render-task.js\";\nimport type { SceneContext } from \"./scene-core.js\";\n\nfunction getDefaultSwapchainTask(scene: SceneContext): RenderTask | null {\n for (const task of scene._frameGraph._tasks) {\n const ptask = task as Partial<RenderTask> | undefined;\n if (!ptask?._config || !ptask._colorAttachment) {\n continue;\n }\n const renderTask = task as RenderTask;\n if (renderTask._config.rt._descriptor.resolveToSwapchain === true) {\n return renderTask;\n }\n }\n return null;\n}\n\n/** @internal Configure a later scene to preserve pixels already rendered into the same swapchain. */\nexport function configureSwapchainOverlayScene(engine: EngineContext, overlay: SceneContext): void {\n const base = engine._renderingContexts[engine._renderingContexts.length - 1] as Partial<SceneContext> | undefined;\n if (!base?._frameGraph) {\n return;\n }\n const baseTask = getDefaultSwapchainTask(base as SceneContext);\n const overlayTask = getDefaultSwapchainTask(overlay);\n if (!baseTask || !overlayTask) {\n return;\n }\n\n overlayTask._config.clr = false;\n overlay._beforeRender.unshift(() => {\n const view = baseTask._colorAttachment.view;\n if (engine.msaaSamples > 1 && view) {\n overlayTask._colorAttachment.view = view;\n }\n });\n}\n"],"names":[],"mappings":"AAIA,SAAS,wBAAwB,OAAwC;AACrE,aAAW,QAAQ,MAAM,YAAY,QAAQ;AACzC,UAAM,QAAQ;AACd,QAAI,EAAC,+BAAO,YAAW,CAAC,MAAM,kBAAkB;AAC5C;AAAA,IACJ;AACA,UAAM,aAAa;AACnB,QAAI,WAAW,QAAQ,GAAG,YAAY,uBAAuB,MAAM;AAC/D,aAAO;AAAA,IACX;AAAA,EACJ;AACA,SAAO;AACX;AAGO,SAAS,+BAA+B,QAAuB,SAA6B;AAC/F,QAAM,OAAO,OAAO,mBAAmB,OAAO,mBAAmB,SAAS,CAAC;AAC3E,MAAI,EAAC,6BAAM,cAAa;AACpB;AAAA,EACJ;AACA,QAAM,WAAW,wBAAwB,IAAoB;AAC7D,QAAM,cAAc,wBAAwB,OAAO;AACnD,MAAI,CAAC,YAAY,CAAC,aAAa;AAC3B;AAAA,EACJ;AAEA,cAAY,QAAQ,MAAM;AAC1B,UAAQ,cAAc,QAAQ,MAAM;AAChC,UAAM,OAAO,SAAS,iBAAiB;AACvC,QAAI,OAAO,cAAc,KAAK,MAAM;AAChC,kBAAY,iBAAiB,OAAO;AAAA,IACxC;AAAA,EACJ,CAAC;AACL;"}
@@ -0,0 +1,43 @@
1
+ function emitTbnRows(block, stage, state, ctx) {
2
+ const stageState = stage === "vertex" ? state.vertex : state.fragment;
3
+ const memoKey = `_tbn_${block.id}`;
4
+ const existing = stageState.memo.get(memoKey);
5
+ if (existing) {
6
+ return existing;
7
+ }
8
+ const normal = ctx.cast(ctx.resolve(block, "normal", stage, state), "vec3f").expr;
9
+ const tangent = ctx.cast(ctx.resolve(block, "tangent", stage, state), "vec4f").expr;
10
+ const world = ctx.cast(ctx.resolve(block, "world", stage, state), "mat4f").expr;
11
+ const prefix = `_tbn${ctx.temp(state, "tbn")}`;
12
+ stageState.body.push(`let ${prefix}_normal = normalize(${normal});`);
13
+ stageState.body.push(`let ${prefix}_tangent = normalize((${tangent}).xyz);`);
14
+ stageState.body.push(`let ${prefix}_bitangent = cross(${prefix}_normal, ${prefix}_tangent) * (${tangent}).w;`);
15
+ stageState.body.push(
16
+ `let ${prefix}_mat = mat3x3<f32>((${world})[0].xyz, (${world})[1].xyz, (${world})[2].xyz) * mat3x3<f32>(${prefix}_tangent, ${prefix}_bitangent, ${prefix}_normal);`
17
+ );
18
+ stageState.body.push(`let ${prefix}_rows = vec4<f32>(${prefix}_mat[0][0], ${prefix}_mat[1][1], ${prefix}_mat[2][2], 0.0);`);
19
+ const result = { expr: `${prefix}_rows`, type: "vec4f" };
20
+ stageState.memo.set(memoKey, result);
21
+ return result;
22
+ }
23
+ const emitter = {
24
+ className: "TBNBlock",
25
+ stage: "fragment",
26
+ emit(block, outputName, stage, state, ctx) {
27
+ if (outputName === "TBN") {
28
+ throw new Error("NodeMaterial: TBNBlock object output is not supported; use row0/row1/row2 outputs");
29
+ }
30
+ const rows = emitTbnRows(block, stage, state, ctx).expr;
31
+ if (outputName === "row1") {
32
+ return { expr: `vec3<f32>(0.0, (${rows}).y, 0.0)`, type: "vec3f" };
33
+ }
34
+ if (outputName === "row2") {
35
+ return { expr: `vec3<f32>(0.0, 0.0, (${rows}).z)`, type: "vec3f" };
36
+ }
37
+ return { expr: `vec3<f32>((${rows}).x, 0.0, 0.0)`, type: "vec3f" };
38
+ }
39
+ };
40
+ export {
41
+ emitter
42
+ };
43
+ //# sourceMappingURL=tbn-block-ByOI6Y43.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tbn-block-ByOI6Y43.js","sources":["../src/material/node/blocks/tbn-block.ts"],"sourcesContent":["import type { BlockEmitter, NodeExpr } from \"../node-types.js\";\n\nfunction emitTbnRows(\n block: Parameters<BlockEmitter[\"emit\"]>[0],\n stage: Parameters<BlockEmitter[\"emit\"]>[2],\n state: Parameters<BlockEmitter[\"emit\"]>[3],\n ctx: Parameters<BlockEmitter[\"emit\"]>[4]\n): NodeExpr {\n const stageState = stage === \"vertex\" ? state.vertex : state.fragment;\n const memoKey = `_tbn_${block.id}`;\n const existing = stageState.memo.get(memoKey);\n if (existing) {\n return existing;\n }\n\n const normal = ctx.cast(ctx.resolve(block, \"normal\", stage, state), \"vec3f\").expr;\n const tangent = ctx.cast(ctx.resolve(block, \"tangent\", stage, state), \"vec4f\").expr;\n const world = ctx.cast(ctx.resolve(block, \"world\", stage, state), \"mat4f\").expr;\n const prefix = `_tbn${ctx.temp(state, \"tbn\")}`;\n stageState.body.push(`let ${prefix}_normal = normalize(${normal});`);\n stageState.body.push(`let ${prefix}_tangent = normalize((${tangent}).xyz);`);\n stageState.body.push(`let ${prefix}_bitangent = cross(${prefix}_normal, ${prefix}_tangent) * (${tangent}).w;`);\n stageState.body.push(\n `let ${prefix}_mat = mat3x3<f32>((${world})[0].xyz, (${world})[1].xyz, (${world})[2].xyz) * mat3x3<f32>(${prefix}_tangent, ${prefix}_bitangent, ${prefix}_normal);`\n );\n stageState.body.push(`let ${prefix}_rows = vec4<f32>(${prefix}_mat[0][0], ${prefix}_mat[1][1], ${prefix}_mat[2][2], 0.0);`);\n const result = { expr: `${prefix}_rows`, type: \"vec4f\" } as const;\n stageState.memo.set(memoKey, result);\n return result;\n}\n\nexport const emitter: BlockEmitter = {\n className: \"TBNBlock\",\n stage: \"fragment\",\n emit(block, outputName, stage, state, ctx) {\n if (outputName === \"TBN\") {\n throw new Error(\"NodeMaterial: TBNBlock object output is not supported; use row0/row1/row2 outputs\");\n }\n const rows = emitTbnRows(block, stage, state, ctx).expr;\n if (outputName === \"row1\") {\n return { expr: `vec3<f32>(0.0, (${rows}).y, 0.0)`, type: \"vec3f\" };\n }\n if (outputName === \"row2\") {\n return { expr: `vec3<f32>(0.0, 0.0, (${rows}).z)`, type: \"vec3f\" };\n }\n return { expr: `vec3<f32>((${rows}).x, 0.0, 0.0)`, type: \"vec3f\" };\n },\n};\n"],"names":[],"mappings":"AAEA,SAAS,YACL,OACA,OACA,OACA,KACQ;AACR,QAAM,aAAa,UAAU,WAAW,MAAM,SAAS,MAAM;AAC7D,QAAM,UAAU,QAAQ,MAAM,EAAE;AAChC,QAAM,WAAW,WAAW,KAAK,IAAI,OAAO;AAC5C,MAAI,UAAU;AACV,WAAO;AAAA,EACX;AAEA,QAAM,SAAS,IAAI,KAAK,IAAI,QAAQ,OAAO,UAAU,OAAO,KAAK,GAAG,OAAO,EAAE;AAC7E,QAAM,UAAU,IAAI,KAAK,IAAI,QAAQ,OAAO,WAAW,OAAO,KAAK,GAAG,OAAO,EAAE;AAC/E,QAAM,QAAQ,IAAI,KAAK,IAAI,QAAQ,OAAO,SAAS,OAAO,KAAK,GAAG,OAAO,EAAE;AAC3E,QAAM,SAAS,OAAO,IAAI,KAAK,OAAO,KAAK,CAAC;AAC5C,aAAW,KAAK,KAAK,OAAO,MAAM,uBAAuB,MAAM,IAAI;AACnE,aAAW,KAAK,KAAK,OAAO,MAAM,yBAAyB,OAAO,SAAS;AAC3E,aAAW,KAAK,KAAK,OAAO,MAAM,sBAAsB,MAAM,YAAY,MAAM,gBAAgB,OAAO,MAAM;AAC7G,aAAW,KAAK;AAAA,IACZ,OAAO,MAAM,uBAAuB,KAAK,cAAc,KAAK,cAAc,KAAK,2BAA2B,MAAM,aAAa,MAAM,eAAe,MAAM;AAAA,EAAA;AAE5J,aAAW,KAAK,KAAK,OAAO,MAAM,qBAAqB,MAAM,eAAe,MAAM,eAAe,MAAM,mBAAmB;AAC1H,QAAM,SAAS,EAAE,MAAM,GAAG,MAAM,SAAS,MAAM,QAAA;AAC/C,aAAW,KAAK,IAAI,SAAS,MAAM;AACnC,SAAO;AACX;AAEO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,OAAO;AAAA,EACP,KAAK,OAAO,YAAY,OAAO,OAAO,KAAK;AACvC,QAAI,eAAe,OAAO;AACtB,YAAM,IAAI,MAAM,mFAAmF;AAAA,IACvG;AACA,UAAM,OAAO,YAAY,OAAO,OAAO,OAAO,GAAG,EAAE;AACnD,QAAI,eAAe,QAAQ;AACvB,aAAO,EAAE,MAAM,mBAAmB,IAAI,aAAa,MAAM,QAAA;AAAA,IAC7D;AACA,QAAI,eAAe,QAAQ;AACvB,aAAO,EAAE,MAAM,wBAAwB,IAAI,QAAQ,MAAM,QAAA;AAAA,IAC7D;AACA,WAAO,EAAE,MAAM,cAAc,IAAI,kBAAkB,MAAM,QAAA;AAAA,EAC7D;AACJ;"}
@@ -0,0 +1,10 @@
1
+ const emitter = {
2
+ className: "NodeMaterialTeleportInBlock",
3
+ emit(block, _outputName, stage, state, ctx) {
4
+ return ctx.resolve(block, "input", stage, state);
5
+ }
6
+ };
7
+ export {
8
+ emitter
9
+ };
10
+ //# sourceMappingURL=teleport-in-block-BMa17cqq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teleport-in-block-BMa17cqq.js","sources":["../src/material/node/blocks/teleport-in-block.ts"],"sourcesContent":["import type { BlockEmitter } from \"../node-types.js\";\n\nexport const emitter: BlockEmitter = {\n className: \"NodeMaterialTeleportInBlock\",\n emit(block, _outputName, stage, state, ctx) {\n return ctx.resolve(block, \"input\", stage, state);\n },\n};\n"],"names":[],"mappings":"AAEO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,KAAK,OAAO,aAAa,OAAO,OAAO,KAAK;AACxC,WAAO,IAAI,QAAQ,OAAO,SAAS,OAAO,KAAK;AAAA,EACnD;AACJ;"}
@@ -0,0 +1,19 @@
1
+ const emitter = {
2
+ className: "NodeMaterialTeleportOutBlock",
3
+ emit(block, _outputName, stage, state, ctx) {
4
+ const entryPoint = block.serialized["entryPoint"];
5
+ const entryPointId = typeof entryPoint === "number" ? entryPoint : typeof entryPoint === "string" && entryPoint.length > 0 ? Number(entryPoint) : NaN;
6
+ if (!Number.isFinite(entryPointId)) {
7
+ throw new Error(`NodeMaterial: TeleportOutBlock (id=${block.id}) has no entryPoint`);
8
+ }
9
+ const entryBlock = ctx.graph.blocks.get(entryPointId);
10
+ if (!entryBlock || entryBlock.className !== "NodeMaterialTeleportInBlock") {
11
+ throw new Error(`NodeMaterial: TeleportOutBlock (id=${block.id}) points to missing TeleportInBlock ${entryPointId}`);
12
+ }
13
+ return ctx.resolve(entryBlock, "input", stage, state);
14
+ }
15
+ };
16
+ export {
17
+ emitter
18
+ };
19
+ //# sourceMappingURL=teleport-out-block-5AkB25H6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teleport-out-block-5AkB25H6.js","sources":["../src/material/node/blocks/teleport-out-block.ts"],"sourcesContent":["import type { BlockEmitter } from \"../node-types.js\";\n\nexport const emitter: BlockEmitter = {\n className: \"NodeMaterialTeleportOutBlock\",\n emit(block, _outputName, stage, state, ctx) {\n const entryPoint = block.serialized[\"entryPoint\"];\n const entryPointId = typeof entryPoint === \"number\" ? entryPoint : typeof entryPoint === \"string\" && entryPoint.length > 0 ? Number(entryPoint) : NaN;\n if (!Number.isFinite(entryPointId)) {\n throw new Error(`NodeMaterial: TeleportOutBlock (id=${block.id}) has no entryPoint`);\n }\n const entryBlock = ctx.graph.blocks.get(entryPointId);\n if (!entryBlock || entryBlock.className !== \"NodeMaterialTeleportInBlock\") {\n throw new Error(`NodeMaterial: TeleportOutBlock (id=${block.id}) points to missing TeleportInBlock ${entryPointId}`);\n }\n return ctx.resolve(entryBlock, \"input\", stage, state);\n },\n};\n"],"names":[],"mappings":"AAEO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,KAAK,OAAO,aAAa,OAAO,OAAO,KAAK;AACxC,UAAM,aAAa,MAAM,WAAW,YAAY;AAChD,UAAM,eAAe,OAAO,eAAe,WAAW,aAAa,OAAO,eAAe,YAAY,WAAW,SAAS,IAAI,OAAO,UAAU,IAAI;AAClJ,QAAI,CAAC,OAAO,SAAS,YAAY,GAAG;AAChC,YAAM,IAAI,MAAM,sCAAsC,MAAM,EAAE,qBAAqB;AAAA,IACvF;AACA,UAAM,aAAa,IAAI,MAAM,OAAO,IAAI,YAAY;AACpD,QAAI,CAAC,cAAc,WAAW,cAAc,+BAA+B;AACvE,YAAM,IAAI,MAAM,sCAAsC,MAAM,EAAE,uCAAuC,YAAY,EAAE;AAAA,IACvH;AACA,WAAO,IAAI,QAAQ,YAAY,SAAS,OAAO,KAAK;AAAA,EACxD;AACJ;"}
@@ -0,0 +1,70 @@
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 applyColorSpace(expr, outputName, convertToLinear, convertToGamma) {
10
+ if (!convertToLinear && !convertToGamma) {
11
+ return expr;
12
+ }
13
+ const power = convertToLinear ? "2.2" : "0.45454545";
14
+ if (outputName === "rgba") {
15
+ return `vec4<f32>(pow(max(${expr}.xyz, vec3<f32>(0.0)), vec3<f32>(${power})), ${expr}.w)`;
16
+ }
17
+ if (outputName === "rgb") {
18
+ return `pow(max(${expr}.xyz, vec3<f32>(0.0)), vec3<f32>(${power}))`;
19
+ }
20
+ if (outputName === "r" || outputName === "g" || outputName === "b") {
21
+ return `pow(max(${expr}${OUTPUT[outputName].swizzle}, 0.0), ${power})`;
22
+ }
23
+ return expr;
24
+ }
25
+ function sanitize(name) {
26
+ return name.replace(/[^A-Za-z0-9_]/g, "_");
27
+ }
28
+ const emitter = {
29
+ className: "TextureBlock",
30
+ emit(block, outputName, stage, state, ctx) {
31
+ let bindingName;
32
+ const source = block.inputs.get("source");
33
+ if (source == null ? void 0 : source.source) {
34
+ const producer = ctx.graph.blocks.get(source.source.blockId);
35
+ bindingName = sanitize((producer == null ? void 0 : producer.name) || `tex${block.id}`);
36
+ } else {
37
+ bindingName = sanitize(block.name || `tex${block.id}`);
38
+ }
39
+ if (!state.textures.find((t) => t.name === bindingName)) {
40
+ state.textures.push({ name: bindingName, kind: "texture2d", texture: null });
41
+ }
42
+ const uvInput = block.inputs.get("uv");
43
+ let uv;
44
+ if (uvInput == null ? void 0 : uvInput.source) {
45
+ uv = ctx.cast(ctx.resolve(block, "uv", stage, state), "vec2f");
46
+ } else {
47
+ uv = { expr: "vec2<f32>(0.0, 0.0)", type: "vec2f" };
48
+ }
49
+ const memoKey = `_tex_${block.id}_sample`;
50
+ const stageState = stage === "vertex" ? state.vertex : state.fragment;
51
+ let sampleExpr = stageState.memo.get(memoKey);
52
+ if (!sampleExpr) {
53
+ const sampleVar = `_s${ctx.temp(state, "tex")}`;
54
+ stageState.body.push(`let ${sampleVar} = textureSample(nodeTex_${bindingName}, nodeSamp_${bindingName}, ${uv.expr});`);
55
+ sampleExpr = { expr: sampleVar, type: "vec4f" };
56
+ stageState.memo.set(memoKey, sampleExpr);
57
+ }
58
+ if (outputName === "level") {
59
+ return { expr: "0.0", type: "f32" };
60
+ }
61
+ const out = OUTPUT[outputName] ?? OUTPUT.rgba;
62
+ const serialized = block.serialized;
63
+ const expr = applyColorSpace(sampleExpr.expr, outputName, serialized.convertToLinearSpace === true, serialized.convertToGammaSpace === true);
64
+ return { expr: expr === sampleExpr.expr ? `${sampleExpr.expr}${out.swizzle}` : expr, type: out.type };
65
+ }
66
+ };
67
+ export {
68
+ emitter
69
+ };
70
+ //# sourceMappingURL=texture-block-rr21KIL_.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"texture-block-rr21KIL_.js","sources":["../src/material/node/blocks/texture-block.ts"],"sourcesContent":["/** TextureBlock — samples a 2D texture.\n *\n * Inputs:\n * - `uv`: vec2 texture coordinates.\n * - `source` (optional): ImageSourceBlock.output that names the binding. When\n * absent, this block owns its own binding named after itself.\n * Outputs: `rgba`, `rgb`, `r`, `g`, `b`, `a`, `level`.\n */\n\nimport type { BlockEmitter, NodeExpr, NodeValueType } 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\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 sanitize(name: string): string {\n return name.replace(/[^A-Za-z0-9_]/g, \"_\");\n}\n\nexport const emitter: BlockEmitter = {\n className: \"TextureBlock\",\n emit(block, outputName, stage, state, ctx) {\n // Resolve source binding: if `source` input is connected, use that producer's name;\n // otherwise name the binding after this block.\n let bindingName: string;\n const source = block.inputs.get(\"source\");\n if (source?.source) {\n const producer = ctx.graph.blocks.get(source.source.blockId);\n bindingName = sanitize(producer?.name || `tex${block.id}`);\n } else {\n bindingName = sanitize(block.name || `tex${block.id}`);\n }\n\n // Dedup binding.\n if (!state.textures.find((t) => t.name === bindingName)) {\n state.textures.push({ name: bindingName, kind: \"texture2d\", texture: null });\n }\n\n // Resolve UV.\n const uvInput = block.inputs.get(\"uv\");\n let uv: NodeExpr;\n if (uvInput?.source) {\n uv = ctx.cast(ctx.resolve(block, \"uv\", stage, state), \"vec2f\");\n } else {\n // Fallback: a zero UV so shader still compiles (matches BJS behaviour when unhooked).\n uv = { expr: \"vec2<f32>(0.0, 0.0)\", type: \"vec2f\" };\n }\n\n // Memoize the full sample per-stage so rgba/rgb/r/... share one textureSample call.\n const memoKey = `_tex_${block.id}_sample`;\n const stageState = stage === \"vertex\" ? state.vertex : state.fragment;\n let sampleExpr = stageState.memo.get(memoKey);\n if (!sampleExpr) {\n const sampleVar = `_s${ctx.temp(state, \"tex\")}`;\n stageState.body.push(`let ${sampleVar} = textureSample(nodeTex_${bindingName}, nodeSamp_${bindingName}, ${uv.expr});`);\n sampleExpr = { expr: sampleVar, type: \"vec4f\" };\n stageState.memo.set(memoKey, sampleExpr);\n }\n\n // Special case: `level` output returns a pseudo-f32 (0.0 for now — proper LOD calc TBD).\n if (outputName === \"level\") {\n return { expr: \"0.0\", type: \"f32\" };\n }\n\n const out = OUTPUT[outputName] ?? OUTPUT.rgba!;\n const serialized = block.serialized as { convertToLinearSpace?: boolean; convertToGammaSpace?: boolean };\n const expr = applyColorSpace(sampleExpr.expr, outputName, serialized.convertToLinearSpace === true, serialized.convertToGammaSpace === true);\n return { expr: expr === sampleExpr.expr ? `${sampleExpr.expr}${out.swizzle}` : expr, type: out.type };\n },\n};\n"],"names":[],"mappings":"AAWA,MAAM,SAAmE;AAAA,EACrE,MAAM,EAAE,SAAS,IAAI,MAAM,QAAA;AAAA,EAC3B,KAAK,EAAE,SAAS,QAAQ,MAAM,QAAA;AAAA,EAC9B,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;AAEA,SAAS,gBAAgB,MAAc,YAAoB,iBAA0B,gBAAiC;AAClH,MAAI,CAAC,mBAAmB,CAAC,gBAAgB;AACrC,WAAO;AAAA,EACX;AACA,QAAM,QAAQ,kBAAkB,QAAQ;AACxC,MAAI,eAAe,QAAQ;AACvB,WAAO,qBAAqB,IAAI,oCAAoC,KAAK,OAAO,IAAI;AAAA,EACxF;AACA,MAAI,eAAe,OAAO;AACtB,WAAO,WAAW,IAAI,oCAAoC,KAAK;AAAA,EACnE;AACA,MAAI,eAAe,OAAO,eAAe,OAAO,eAAe,KAAK;AAChE,WAAO,WAAW,IAAI,GAAG,OAAO,UAAU,EAAG,OAAO,WAAW,KAAK;AAAA,EACxE;AACA,SAAO;AACX;AAEA,SAAS,SAAS,MAAsB;AACpC,SAAO,KAAK,QAAQ,kBAAkB,GAAG;AAC7C;AAEO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,KAAK,OAAO,YAAY,OAAO,OAAO,KAAK;AAGvC,QAAI;AACJ,UAAM,SAAS,MAAM,OAAO,IAAI,QAAQ;AACxC,QAAI,iCAAQ,QAAQ;AAChB,YAAM,WAAW,IAAI,MAAM,OAAO,IAAI,OAAO,OAAO,OAAO;AAC3D,oBAAc,UAAS,qCAAU,SAAQ,MAAM,MAAM,EAAE,EAAE;AAAA,IAC7D,OAAO;AACH,oBAAc,SAAS,MAAM,QAAQ,MAAM,MAAM,EAAE,EAAE;AAAA,IACzD;AAGA,QAAI,CAAC,MAAM,SAAS,KAAK,CAAC,MAAM,EAAE,SAAS,WAAW,GAAG;AACrD,YAAM,SAAS,KAAK,EAAE,MAAM,aAAa,MAAM,aAAa,SAAS,MAAM;AAAA,IAC/E;AAGA,UAAM,UAAU,MAAM,OAAO,IAAI,IAAI;AACrC,QAAI;AACJ,QAAI,mCAAS,QAAQ;AACjB,WAAK,IAAI,KAAK,IAAI,QAAQ,OAAO,MAAM,OAAO,KAAK,GAAG,OAAO;AAAA,IACjE,OAAO;AAEH,WAAK,EAAE,MAAM,uBAAuB,MAAM,QAAA;AAAA,IAC9C;AAGA,UAAM,UAAU,QAAQ,MAAM,EAAE;AAChC,UAAM,aAAa,UAAU,WAAW,MAAM,SAAS,MAAM;AAC7D,QAAI,aAAa,WAAW,KAAK,IAAI,OAAO;AAC5C,QAAI,CAAC,YAAY;AACb,YAAM,YAAY,KAAK,IAAI,KAAK,OAAO,KAAK,CAAC;AAC7C,iBAAW,KAAK,KAAK,OAAO,SAAS,4BAA4B,WAAW,cAAc,WAAW,KAAK,GAAG,IAAI,IAAI;AACrH,mBAAa,EAAE,MAAM,WAAW,MAAM,QAAA;AACtC,iBAAW,KAAK,IAAI,SAAS,UAAU;AAAA,IAC3C;AAGA,QAAI,eAAe,SAAS;AACxB,aAAO,EAAE,MAAM,OAAO,MAAM,MAAA;AAAA,IAChC;AAEA,UAAM,MAAM,OAAO,UAAU,KAAK,OAAO;AACzC,UAAM,aAAa,MAAM;AACzB,UAAM,OAAO,gBAAgB,WAAW,MAAM,YAAY,WAAW,yBAAyB,MAAM,WAAW,wBAAwB,IAAI;AAC3I,WAAO,EAAE,MAAM,SAAS,WAAW,OAAO,GAAG,WAAW,IAAI,GAAG,IAAI,OAAO,KAAK,MAAM,MAAM,IAAI,KAAA;AAAA,EACnG;AACJ;"}
@@ -0,0 +1,69 @@
1
+ function createThinInstanceFragment(hasInstanceColor) {
2
+ const attrs = [
3
+ {
4
+ _name: "world0",
5
+ _type: "vec4<f32>",
6
+ _gpuFormat: "float32x4",
7
+ _arrayStride: 64,
8
+ _stepMode: "instance",
9
+ _bufferGroup: "ti-matrix",
10
+ _offset: 0
11
+ },
12
+ {
13
+ _name: "world1",
14
+ _type: "vec4<f32>",
15
+ _gpuFormat: "float32x4",
16
+ _arrayStride: 64,
17
+ _stepMode: "instance",
18
+ _bufferGroup: "ti-matrix",
19
+ _offset: 16
20
+ },
21
+ {
22
+ _name: "world2",
23
+ _type: "vec4<f32>",
24
+ _gpuFormat: "float32x4",
25
+ _arrayStride: 64,
26
+ _stepMode: "instance",
27
+ _bufferGroup: "ti-matrix",
28
+ _offset: 32
29
+ },
30
+ {
31
+ _name: "world3",
32
+ _type: "vec4<f32>",
33
+ _gpuFormat: "float32x4",
34
+ _arrayStride: 64,
35
+ _stepMode: "instance",
36
+ _bufferGroup: "ti-matrix",
37
+ _offset: 48
38
+ }
39
+ ];
40
+ if (hasInstanceColor) {
41
+ attrs.push({
42
+ _name: "instanceColor",
43
+ _type: "vec4<f32>",
44
+ _gpuFormat: "float32x4",
45
+ _arrayStride: 16,
46
+ _stepMode: "instance",
47
+ _bufferGroup: "ti-color",
48
+ _offset: 0
49
+ });
50
+ }
51
+ return {
52
+ _id: "thin-instance",
53
+ _vertexAttributes: attrs,
54
+ _varyings: hasInstanceColor ? [{ _name: "vInstanceColor", _type: "vec4<f32>" }] : [],
55
+ _vertexSlots: {
56
+ VW: `let instanceWorld = mat4x4<f32>(world0, world1, world2, world3);
57
+ finalWorld = mesh.world * instanceWorld;`,
58
+ VB: hasInstanceColor ? `out.vInstanceColor = instanceColor;` : ""
59
+ },
60
+ _fragmentSlots: hasInstanceColor ? {
61
+ AT: `baseColor *= input.vInstanceColor.rgb;
62
+ alpha *= input.vInstanceColor.a;`
63
+ } : {}
64
+ };
65
+ }
66
+ export {
67
+ createThinInstanceFragment
68
+ };
69
+ //# sourceMappingURL=thin-instance-fragment-hsv-RyDs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thin-instance-fragment-hsv-RyDs.js","sources":["../src/shader/fragments/thin-instance-fragment.ts"],"sourcesContent":["/**\n * Thin Instance Fragment\n *\n * Shared between PBR and Standard materials.\n * Replaces the regex-based string surgery in pbr-thin-instance-ext.ts\n * with clean declarative vertex attributes and slot injection.\n *\n * Zero bytes in bundles for scenes that don't use thin instances.\n */\n\nimport type { ShaderFragment } from \"../fragment-types.js\";\n\n/**\n * Create a thin-instance fragment.\n * @param hasInstanceColor - Whether meshes have per-instance color data.\n */\nexport function createThinInstanceFragment(hasInstanceColor: boolean): ShaderFragment {\n const attrs = [\n {\n _name: \"world0\",\n _type: \"vec4<f32>\",\n _gpuFormat: \"float32x4\" as GPUVertexFormat,\n _arrayStride: 64,\n _stepMode: \"instance\" as GPUVertexStepMode,\n _bufferGroup: \"ti-matrix\",\n _offset: 0,\n },\n {\n _name: \"world1\",\n _type: \"vec4<f32>\",\n _gpuFormat: \"float32x4\" as GPUVertexFormat,\n _arrayStride: 64,\n _stepMode: \"instance\" as GPUVertexStepMode,\n _bufferGroup: \"ti-matrix\",\n _offset: 16,\n },\n {\n _name: \"world2\",\n _type: \"vec4<f32>\",\n _gpuFormat: \"float32x4\" as GPUVertexFormat,\n _arrayStride: 64,\n _stepMode: \"instance\" as GPUVertexStepMode,\n _bufferGroup: \"ti-matrix\",\n _offset: 32,\n },\n {\n _name: \"world3\",\n _type: \"vec4<f32>\",\n _gpuFormat: \"float32x4\" as GPUVertexFormat,\n _arrayStride: 64,\n _stepMode: \"instance\" as GPUVertexStepMode,\n _bufferGroup: \"ti-matrix\",\n _offset: 48,\n },\n ];\n\n if (hasInstanceColor) {\n attrs.push({\n _name: \"instanceColor\",\n _type: \"vec4<f32>\",\n _gpuFormat: \"float32x4\" as GPUVertexFormat,\n _arrayStride: 16,\n _stepMode: \"instance\" as GPUVertexStepMode,\n _bufferGroup: \"ti-color\",\n _offset: 0,\n });\n }\n\n return {\n _id: \"thin-instance\",\n\n _vertexAttributes: attrs,\n\n _varyings: hasInstanceColor ? [{ _name: \"vInstanceColor\", _type: \"vec4<f32>\" }] : [],\n\n _vertexSlots: {\n VW: `let instanceWorld = mat4x4<f32>(world0, world1, world2, world3);\\nfinalWorld = mesh.world * instanceWorld;`,\n VB: hasInstanceColor ? `out.vInstanceColor = instanceColor;` : \"\",\n },\n\n _fragmentSlots: hasInstanceColor\n ? {\n AT: `baseColor *= input.vInstanceColor.rgb;\\nalpha *= input.vInstanceColor.a;`,\n }\n : {},\n };\n}\n"],"names":[],"mappings":"AAgBO,SAAS,2BAA2B,kBAA2C;AAClF,QAAM,QAAQ;AAAA,IACV;AAAA,MACI,OAAO;AAAA,MACP,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,WAAW;AAAA,MACX,cAAc;AAAA,MACd,SAAS;AAAA,IAAA;AAAA,IAEb;AAAA,MACI,OAAO;AAAA,MACP,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,WAAW;AAAA,MACX,cAAc;AAAA,MACd,SAAS;AAAA,IAAA;AAAA,IAEb;AAAA,MACI,OAAO;AAAA,MACP,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,WAAW;AAAA,MACX,cAAc;AAAA,MACd,SAAS;AAAA,IAAA;AAAA,IAEb;AAAA,MACI,OAAO;AAAA,MACP,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,WAAW;AAAA,MACX,cAAc;AAAA,MACd,SAAS;AAAA,IAAA;AAAA,EACb;AAGJ,MAAI,kBAAkB;AAClB,UAAM,KAAK;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,WAAW;AAAA,MACX,cAAc;AAAA,MACd,SAAS;AAAA,IAAA,CACZ;AAAA,EACL;AAEA,SAAO;AAAA,IACH,KAAK;AAAA,IAEL,mBAAmB;AAAA,IAEnB,WAAW,mBAAmB,CAAC,EAAE,OAAO,kBAAkB,OAAO,YAAA,CAAa,IAAI,CAAA;AAAA,IAElF,cAAc;AAAA,MACV,IAAI;AAAA;AAAA,MACJ,IAAI,mBAAmB,wCAAwC;AAAA,IAAA;AAAA,IAGnE,gBAAgB,mBACV;AAAA,MACI,IAAI;AAAA;AAAA,IAAA,IAER,CAAA;AAAA,EAAC;AAEf;"}
@@ -0,0 +1,62 @@
1
+ function syncThinInstanceGpuData(engine, ti, hasColor) {
2
+ var _a, _b;
3
+ const device = engine._device;
4
+ const needsStorage = ti._gpuCullingEnabled;
5
+ if (ti._version !== ti._gpuVersion || ti._gpuBufferStorage !== needsStorage) {
6
+ const byteSize = ti.count * 64;
7
+ let bufferRecreated = false;
8
+ if (!ti._gpuBuffer || ti._gpuBuffer.size < byteSize || ti._gpuBufferStorage !== needsStorage) {
9
+ (_a = ti._gpuBuffer) == null ? void 0 : _a.destroy();
10
+ ti._gpuBuffer = device.createBuffer({
11
+ size: Math.max(ti._capacity * 64, 4),
12
+ usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST | (needsStorage ? GPUBufferUsage.STORAGE : 0)
13
+ });
14
+ ti._gpuBufferStorage = needsStorage;
15
+ bufferRecreated = true;
16
+ }
17
+ const dirtyMin = bufferRecreated ? 0 : ti._dirtyMin;
18
+ const dirtyMax = bufferRecreated ? ti.count : Math.min(ti._dirtyMax, ti.count);
19
+ if (dirtyMax > dirtyMin) {
20
+ const minByte = dirtyMin * 64;
21
+ const maxByte = dirtyMax * 64;
22
+ device.queue.writeBuffer(ti._gpuBuffer, minByte, ti.matrices.buffer, ti.matrices.byteOffset + minByte, maxByte - minByte);
23
+ }
24
+ ti._dirtyMin = ti.count;
25
+ ti._dirtyMax = 0;
26
+ ti._gpuVersion = ti._version;
27
+ }
28
+ if (hasColor && ti.colors) {
29
+ if (ti._colorVersion !== ti._colorGpuVersion || ti._colorGpuBufferStorage !== needsStorage) {
30
+ const colorByteSize = ti.count * 16;
31
+ if (!ti._colorGpuBuffer || ti._colorGpuBuffer.size < colorByteSize || ti._colorGpuBufferStorage !== needsStorage) {
32
+ (_b = ti._colorGpuBuffer) == null ? void 0 : _b.destroy();
33
+ ti._colorGpuBuffer = device.createBuffer({
34
+ size: Math.max(ti._capacity * 16, 4),
35
+ usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST | (needsStorage ? GPUBufferUsage.STORAGE : 0)
36
+ });
37
+ ti._colorGpuBufferStorage = needsStorage;
38
+ }
39
+ device.queue.writeBuffer(ti._colorGpuBuffer, 0, ti.colors.buffer, ti.colors.byteOffset, colorByteSize);
40
+ ti._colorGpuVersion = ti._colorVersion;
41
+ }
42
+ }
43
+ }
44
+ function syncThinInstanceBuffers(engine, ti, pass, slot, hasColor, drawBuffers) {
45
+ syncThinInstanceGpuData(engine, ti, hasColor);
46
+ const matrixBuffer = (drawBuffers == null ? void 0 : drawBuffers.matrixBuffer) ?? ti._gpuBuffer;
47
+ if (matrixBuffer) {
48
+ pass.setVertexBuffer(slot++, matrixBuffer);
49
+ }
50
+ if (hasColor) {
51
+ const colorBuffer = (drawBuffers == null ? void 0 : drawBuffers.colorBuffer) ?? ti._colorGpuBuffer;
52
+ if (colorBuffer) {
53
+ pass.setVertexBuffer(slot++, colorBuffer);
54
+ }
55
+ }
56
+ return slot;
57
+ }
58
+ export {
59
+ syncThinInstanceBuffers,
60
+ syncThinInstanceGpuData
61
+ };
62
+ //# sourceMappingURL=thin-instance-gpu-C9Gv_Z1w.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thin-instance-gpu-C9Gv_Z1w.js","sources":["../src/mesh/thin-instance-gpu.ts"],"sourcesContent":["/** Thin instance GPU buffer sync — dynamically loaded only by scenes with thin instances.\n * Keeps the standard renderable chunk unchanged for scenes without thin instances. */\n\nimport type { ThinInstanceData } from \"./thin-instance.js\";\nimport type { EngineContext } from \"../engine/engine.js\";\n\n/** @internal Optional replacement buffers used by GPU culling after it compacts visible instances. */\nexport interface ThinInstanceDrawBuffers {\n readonly matrixBuffer: GPUBuffer;\n readonly colorBuffer: GPUBuffer | null;\n}\n\n/** @internal Sync CPU thin-instance data to GPU buffers, optionally with STORAGE usage for compute culling. */\nexport function syncThinInstanceGpuData(engine: EngineContext, ti: ThinInstanceData, hasColor: boolean): void {\n const device = engine._device;\n const needsStorage = ti._gpuCullingEnabled;\n if (ti._version !== ti._gpuVersion || ti._gpuBufferStorage !== needsStorage) {\n const byteSize = ti.count * 64;\n let bufferRecreated = false;\n if (!ti._gpuBuffer || ti._gpuBuffer.size < byteSize || ti._gpuBufferStorage !== needsStorage) {\n ti._gpuBuffer?.destroy();\n ti._gpuBuffer = device.createBuffer({\n size: Math.max(ti._capacity * 64, 4),\n usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST | (needsStorage ? GPUBufferUsage.STORAGE : 0),\n });\n ti._gpuBufferStorage = needsStorage;\n bufferRecreated = true;\n }\n // Upload only the dirty range (or full range if buffer was just created)\n const dirtyMin = bufferRecreated ? 0 : ti._dirtyMin;\n const dirtyMax = bufferRecreated ? ti.count : Math.min(ti._dirtyMax, ti.count);\n if (dirtyMax > dirtyMin) {\n const minByte = dirtyMin * 64;\n const maxByte = dirtyMax * 64;\n device.queue.writeBuffer(ti._gpuBuffer, minByte, ti.matrices.buffer, ti.matrices.byteOffset + minByte, maxByte - minByte);\n }\n ti._dirtyMin = ti.count;\n ti._dirtyMax = 0;\n ti._gpuVersion = ti._version;\n }\n\n if (hasColor && ti.colors) {\n if (ti._colorVersion !== ti._colorGpuVersion || ti._colorGpuBufferStorage !== needsStorage) {\n const colorByteSize = ti.count * 16;\n if (!ti._colorGpuBuffer || ti._colorGpuBuffer.size < colorByteSize || ti._colorGpuBufferStorage !== needsStorage) {\n ti._colorGpuBuffer?.destroy();\n ti._colorGpuBuffer = device.createBuffer({\n size: Math.max(ti._capacity * 16, 4),\n usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST | (needsStorage ? GPUBufferUsage.STORAGE : 0),\n });\n ti._colorGpuBufferStorage = needsStorage;\n }\n device.queue.writeBuffer(ti._colorGpuBuffer, 0, ti.colors.buffer, ti.colors.byteOffset, colorByteSize);\n ti._colorGpuVersion = ti._colorVersion;\n }\n }\n}\n\n/** Sync thin instance matrix + optional color GPU buffers and bind to vertex slots. */\nexport function syncThinInstanceBuffers(\n engine: EngineContext,\n ti: ThinInstanceData,\n pass: GPURenderPassEncoder | GPURenderBundleEncoder,\n slot: number,\n hasColor: boolean,\n drawBuffers?: ThinInstanceDrawBuffers | null\n): number {\n syncThinInstanceGpuData(engine, ti, hasColor);\n const matrixBuffer = drawBuffers?.matrixBuffer ?? ti._gpuBuffer;\n if (matrixBuffer) {\n pass.setVertexBuffer(slot++, matrixBuffer);\n }\n\n if (hasColor) {\n const colorBuffer = drawBuffers?.colorBuffer ?? ti._colorGpuBuffer;\n if (colorBuffer) {\n pass.setVertexBuffer(slot++, colorBuffer);\n }\n }\n\n return slot;\n}\n"],"names":[],"mappings":"AAaO,SAAS,wBAAwB,QAAuB,IAAsB,UAAyB;AAAvG;AACH,QAAM,SAAS,OAAO;AACtB,QAAM,eAAe,GAAG;AACxB,MAAI,GAAG,aAAa,GAAG,eAAe,GAAG,sBAAsB,cAAc;AACzE,UAAM,WAAW,GAAG,QAAQ;AAC5B,QAAI,kBAAkB;AACtB,QAAI,CAAC,GAAG,cAAc,GAAG,WAAW,OAAO,YAAY,GAAG,sBAAsB,cAAc;AAC1F,eAAG,eAAH,mBAAe;AACf,SAAG,aAAa,OAAO,aAAa;AAAA,QAChC,MAAM,KAAK,IAAI,GAAG,YAAY,IAAI,CAAC;AAAA,QACnC,OAAO,eAAe,SAAS,eAAe,YAAY,eAAe,eAAe,UAAU;AAAA,MAAA,CACrG;AACD,SAAG,oBAAoB;AACvB,wBAAkB;AAAA,IACtB;AAEA,UAAM,WAAW,kBAAkB,IAAI,GAAG;AAC1C,UAAM,WAAW,kBAAkB,GAAG,QAAQ,KAAK,IAAI,GAAG,WAAW,GAAG,KAAK;AAC7E,QAAI,WAAW,UAAU;AACrB,YAAM,UAAU,WAAW;AAC3B,YAAM,UAAU,WAAW;AAC3B,aAAO,MAAM,YAAY,GAAG,YAAY,SAAS,GAAG,SAAS,QAAQ,GAAG,SAAS,aAAa,SAAS,UAAU,OAAO;AAAA,IAC5H;AACA,OAAG,YAAY,GAAG;AAClB,OAAG,YAAY;AACf,OAAG,cAAc,GAAG;AAAA,EACxB;AAEA,MAAI,YAAY,GAAG,QAAQ;AACvB,QAAI,GAAG,kBAAkB,GAAG,oBAAoB,GAAG,2BAA2B,cAAc;AACxF,YAAM,gBAAgB,GAAG,QAAQ;AACjC,UAAI,CAAC,GAAG,mBAAmB,GAAG,gBAAgB,OAAO,iBAAiB,GAAG,2BAA2B,cAAc;AAC9G,iBAAG,oBAAH,mBAAoB;AACpB,WAAG,kBAAkB,OAAO,aAAa;AAAA,UACrC,MAAM,KAAK,IAAI,GAAG,YAAY,IAAI,CAAC;AAAA,UACnC,OAAO,eAAe,SAAS,eAAe,YAAY,eAAe,eAAe,UAAU;AAAA,QAAA,CACrG;AACD,WAAG,yBAAyB;AAAA,MAChC;AACA,aAAO,MAAM,YAAY,GAAG,iBAAiB,GAAG,GAAG,OAAO,QAAQ,GAAG,OAAO,YAAY,aAAa;AACrG,SAAG,mBAAmB,GAAG;AAAA,IAC7B;AAAA,EACJ;AACJ;AAGO,SAAS,wBACZ,QACA,IACA,MACA,MACA,UACA,aACM;AACN,0BAAwB,QAAQ,IAAI,QAAQ;AAC5C,QAAM,gBAAe,2CAAa,iBAAgB,GAAG;AACrD,MAAI,cAAc;AACd,SAAK,gBAAgB,QAAQ,YAAY;AAAA,EAC7C;AAEA,MAAI,UAAU;AACV,UAAM,eAAc,2CAAa,gBAAe,GAAG;AACnD,QAAI,aAAa;AACb,WAAK,gBAAgB,QAAQ,WAAW;AAAA,IAC5C;AAAA,EACJ;AAEA,SAAO;AACX;"}