@babylonjs/lite 0.2.0 → 1.0.0

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 (249) hide show
  1. package/{_mat4-storage-f64-Bvh5TymE.js → _mat4-storage-f64-CjDoht2w.js} +3 -2
  2. package/_mat4-storage-f64-CjDoht2w.js.map +1 -0
  3. package/{alpha-test-fragment-BCChpzaV.js → alpha-test-fragment-B7DjSnF7.js} +2 -2
  4. package/{alpha-test-fragment-BCChpzaV.js.map → alpha-test-fragment-B7DjSnF7.js.map} +1 -1
  5. package/assets/splat-sort-worker-DT3eybMZ.js.map +1 -0
  6. package/{background-dds-skybox-ZjrSIxrT.js → background-dds-skybox-BEX309u3.js} +13 -13
  7. package/background-dds-skybox-BEX309u3.js.map +1 -0
  8. package/{background-ground-B2Mie-MI.js → background-ground-BU0HOcM4.js} +19 -19
  9. package/background-ground-BU0HOcM4.js.map +1 -0
  10. package/{background-hdr-skybox-DDRJYuT2.js → background-hdr-skybox--RRRic_K.js} +10 -10
  11. package/background-hdr-skybox--RRRic_K.js.map +1 -0
  12. package/{background-solid-skybox-fjXlnWaD.js → background-solid-skybox-BrH2fXSu.js} +11 -12
  13. package/background-solid-skybox-BrH2fXSu.js.map +1 -0
  14. package/{billboard-renderable-DKmlOgbM.js → billboard-renderable-BHWryAeC.js} +46 -10
  15. package/billboard-renderable-BHWryAeC.js.map +1 -0
  16. package/{clamp-block-CxRBPlUq.js → clamp-block-DqbwnQGW.js} +2 -2
  17. package/{clamp-block-CxRBPlUq.js.map → clamp-block-DqbwnQGW.js.map} +1 -1
  18. package/{clearcoat-fragment-KbZAa0TA.js → clearcoat-fragment-D6FSCie1.js} +2 -2
  19. package/{clearcoat-fragment-KbZAa0TA.js.map → clearcoat-fragment-D6FSCie1.js.map} +1 -1
  20. package/{create-skeleton-BBI5urcj.js → create-skeleton-D_uplboC.js} +9 -9
  21. package/create-skeleton-D_uplboC.js.map +1 -0
  22. package/{cubemap-skybox-material-DvW81drX.js → cubemap-skybox-material-DQcMMdf-.js} +6 -7
  23. package/cubemap-skybox-material-DQcMMdf-.js.map +1 -0
  24. package/{curve-block-Dh_xdUj-.js → curve-block-21rT0JjG.js} +2 -2
  25. package/{curve-block-Dh_xdUj-.js.map → curve-block-21rT0JjG.js.map} +1 -1
  26. package/{emissive-fragment-DD8cvHyx.js → emissive-fragment-C5FtBs3y.js} +3 -3
  27. package/emissive-fragment-C5FtBs3y.js.map +1 -0
  28. package/{esm-shadow-view-DYAc62Kl.js → esm-shadow-view-Cl3rPGof.js} +2 -2
  29. package/{esm-shadow-view-DYAc62Kl.js.map → esm-shadow-view-Cl3rPGof.js.map} +1 -1
  30. package/{esm-shadow-view-DHVS9r7H.js → esm-shadow-view-Gtd1LWRP.js} +2 -2
  31. package/{esm-shadow-view-DHVS9r7H.js.map → esm-shadow-view-Gtd1LWRP.js.map} +1 -1
  32. package/{esm-shadow-view-15S4JK6p.js → esm-shadow-view-c5YV4Eg9.js} +2 -2
  33. package/{esm-shadow-view-15S4JK6p.js.map → esm-shadow-view-c5YV4Eg9.js.map} +1 -1
  34. package/{gaussian-splatting-pipeline-sh-BvkUhA9V.js → gaussian-splatting-pipeline-sh-7J31V23x.js} +19 -19
  35. package/gaussian-splatting-pipeline-sh-7J31V23x.js.map +1 -0
  36. package/geometry-texture-output-dXk4E9uu.js +41 -0
  37. package/geometry-texture-output-dXk4E9uu.js.map +1 -0
  38. package/geometry-view-BsFJpBJa.js +404 -0
  39. package/geometry-view-BsFJpBJa.js.map +1 -0
  40. package/{gltf-animation-KnPzeOIY.js → gltf-animation-K_zZxj_d.js} +6 -6
  41. package/gltf-animation-K_zZxj_d.js.map +1 -0
  42. package/{gltf-ext-basisu-kmth3UWX.js → gltf-ext-basisu-CDbPclzZ.js} +48 -16
  43. package/gltf-ext-basisu-CDbPclzZ.js.map +1 -0
  44. package/{gltf-ext-node-visibility-BjRRd6si.js → gltf-ext-node-visibility-DXCJEYr6.js} +2 -2
  45. package/{gltf-ext-node-visibility-BjRRd6si.js.map → gltf-ext-node-visibility-DXCJEYr6.js.map} +1 -1
  46. package/{gltf-ext-quantization-CpZyLDIz.js → gltf-ext-quantization-CvHI_0Vg.js} +4 -3
  47. package/gltf-ext-quantization-CvHI_0Vg.js.map +1 -0
  48. package/{gltf-ext-uv-transform-MHmR-YyM.js → gltf-ext-uv-transform-DgYazJBs.js} +2 -2
  49. package/{gltf-ext-uv-transform-MHmR-YyM.js.map → gltf-ext-uv-transform-DgYazJBs.js.map} +1 -1
  50. package/{gltf-feature-animation-pointer-rFqLfbO_.js → gltf-feature-animation-pointer-D1RJRFBw.js} +9 -9
  51. package/gltf-feature-animation-pointer-D1RJRFBw.js.map +1 -0
  52. package/{gltf-feature-animations-DikONdzi.js → gltf-feature-animations-Cmc1uoIu.js} +2 -2
  53. package/{gltf-feature-animations-DikONdzi.js.map → gltf-feature-animations-Cmc1uoIu.js.map} +1 -1
  54. package/{gltf-feature-draco-yGSMGTE3.js → gltf-feature-draco-CKKzT5E3.js} +6 -5
  55. package/gltf-feature-draco-CKKzT5E3.js.map +1 -0
  56. package/{gltf-feature-gpu-instancing-Cj1XjmM6.js → gltf-feature-gpu-instancing-n87SO6Vh.js} +4 -4
  57. package/gltf-feature-gpu-instancing-n87SO6Vh.js.map +1 -0
  58. package/{gltf-feature-lights-punctual-C-0SlGmD.js → gltf-feature-lights-punctual-Ckm3ciL8.js} +5 -5
  59. package/{gltf-feature-lights-punctual-C-0SlGmD.js.map → gltf-feature-lights-punctual-Ckm3ciL8.js.map} +1 -1
  60. package/{gltf-feature-meshopt-Des96YFI.js → gltf-feature-meshopt-DLC4SF1E.js} +7 -6
  61. package/gltf-feature-meshopt-DLC4SF1E.js.map +1 -0
  62. package/{gltf-feature-morph-BAcY14XU.js → gltf-feature-morph-Cjtu7hYa.js} +4 -4
  63. package/gltf-feature-morph-Cjtu7hYa.js.map +1 -0
  64. package/{gltf-feature-registry-97sY_x5O.js → gltf-feature-registry-C63Hjp9w.js} +15 -15
  65. package/{gltf-feature-registry-97sY_x5O.js.map → gltf-feature-registry-C63Hjp9w.js.map} +1 -1
  66. package/{gltf-feature-skeleton-lVjkDfIU.js → gltf-feature-skeleton-DKbOGidp.js} +3 -3
  67. package/{gltf-feature-skeleton-lVjkDfIU.js.map → gltf-feature-skeleton-DKbOGidp.js.map} +1 -1
  68. package/{gltf-feature-variants-BphF4JmV.js → gltf-feature-variants-Cmzu0O0e.js} +2 -2
  69. package/{gltf-feature-variants-BphF4JmV.js.map → gltf-feature-variants-Cmzu0O0e.js.map} +1 -1
  70. package/{gltf-glb-parser-D6UZWFuC.js → gltf-glb-parser-Cj5MHS-v.js} +5 -4
  71. package/gltf-glb-parser-Cj5MHS-v.js.map +1 -0
  72. package/{gltf-interleave-C9eBqH_F.js → gltf-interleave-gHf9_t0i.js} +14 -14
  73. package/gltf-interleave-gHf9_t0i.js.map +1 -0
  74. package/{gltf-pbr-builder-ext-DPC0zg_u.js → gltf-pbr-builder-ext-edNcjwPf.js} +5 -5
  75. package/gltf-pbr-builder-ext-edNcjwPf.js.map +1 -0
  76. package/{gltf-variants-CnBEZr0o.js → gltf-variants-CPxNdtP4.js} +4 -4
  77. package/{gltf-variants-CnBEZr0o.js.map → gltf-variants-CPxNdtP4.js.map} +1 -1
  78. package/{gs-picking-pipeline-Bx8LTav6.js → gs-picking-pipeline-DYaW_Lg3.js} +14 -14
  79. package/gs-picking-pipeline-DYaW_Lg3.js.map +1 -0
  80. package/havok-floating-origin-Dr-18Nds.js +198 -0
  81. package/havok-floating-origin-Dr-18Nds.js.map +1 -0
  82. package/index-CLElg2Bo.js +39209 -0
  83. package/index-CLElg2Bo.js.map +1 -0
  84. package/index-CYZDclhF.js +918 -0
  85. package/index-CYZDclhF.js.map +1 -0
  86. package/index-SMJ67XwT.js +3330 -0
  87. package/index-SMJ67XwT.js.map +1 -0
  88. package/index.d.ts +2007 -105
  89. package/index.js +446 -322
  90. package/{input-block-Coi_aZwl.js → input-block-DqEedWF2.js} +2 -2
  91. package/{input-block-Coi_aZwl.js.map → input-block-DqEedWF2.js.map} +1 -1
  92. package/{iridescence-fragment-DwZcCTdD.js → iridescence-fragment-BHU59-gQ.js} +2 -2
  93. package/{iridescence-fragment-DwZcCTdD.js.map → iridescence-fragment-BHU59-gQ.js.map} +1 -1
  94. package/{light-block-Np_h5gPI.js → light-block-Bv37V8vl.js} +2 -2
  95. package/{light-block-Np_h5gPI.js.map → light-block-Bv37V8vl.js.map} +1 -1
  96. package/{loop-block-BFkLFYGm.js → loop-block-qTg8vb99.js} +2 -2
  97. package/{loop-block-BFkLFYGm.js.map → loop-block-qTg8vb99.js.map} +1 -1
  98. package/{morph-fragment-DqH-w61u.js → morph-fragment-BRCUr2wQ.js} +2 -2
  99. package/{morph-fragment-DqH-w61u.js.map → morph-fragment-BRCUr2wQ.js.map} +1 -1
  100. package/{multilight-wgsl-B9Mf9d-q.js → multilight-wgsl-DMeppAdZ.js} +2 -2
  101. package/{multilight-wgsl-B9Mf9d-q.js.map → multilight-wgsl-DMeppAdZ.js.map} +1 -1
  102. package/{node-env-BPZXZzBf.js → node-env-Bc559GmY.js} +6 -5
  103. package/node-env-Bc559GmY.js.map +1 -0
  104. package/node-geometry-view-COmWsRXK.js +291 -0
  105. package/node-geometry-view-COmWsRXK.js.map +1 -0
  106. package/{node-registry-extra-compat-Ch7ApZHF.js → node-registry-extra-compat-dWrv7gpS.js} +2 -2
  107. package/{node-registry-extra-compat-Ch7ApZHF.js.map → node-registry-extra-compat-dWrv7gpS.js.map} +1 -1
  108. package/{node-registry-extra-math-6ezzTkPj.js → node-registry-extra-math-Bn854sX9.js} +2 -2
  109. package/{node-registry-extra-math-6ezzTkPj.js.map → node-registry-extra-math-Bn854sX9.js.map} +1 -1
  110. package/{node-renderable-CS0CmsSp.js → node-renderable-B5G8WcdH.js} +15 -13
  111. package/node-renderable-B5G8WcdH.js.map +1 -0
  112. package/{node-shadow-CpnrdvtJ.js → node-shadow-CVIUlNf0.js} +7 -7
  113. package/node-shadow-CVIUlNf0.js.map +1 -0
  114. package/{normal-map-fragment-DradEMl-.js → normal-map-fragment-CQSxhjCy.js} +2 -2
  115. package/{normal-map-fragment-DradEMl-.js.map → normal-map-fragment-CQSxhjCy.js.map} +1 -1
  116. package/package.json +3 -10
  117. package/{parse-camera-CgV4bWc0.js → parse-camera-pBRT_6i5.js} +2 -2
  118. package/{parse-camera-CgV4bWc0.js.map → parse-camera-pBRT_6i5.js.map} +1 -1
  119. package/pbr-geometry-view-NiZY_juX.js +491 -0
  120. package/pbr-geometry-view-NiZY_juX.js.map +1 -0
  121. package/{pbr-metallic-roughness-block-BFwZj2Nw.js → pbr-metallic-roughness-block-JBSi-tQN.js} +2 -2
  122. package/{pbr-metallic-roughness-block-BFwZj2Nw.js.map → pbr-metallic-roughness-block-JBSi-tQN.js.map} +1 -1
  123. package/{pbr-metallic-roughness-block-full-5t0HT3xl.js → pbr-metallic-roughness-block-full-Ta9lR2cz.js} +2 -2
  124. package/{pbr-metallic-roughness-block-full-5t0HT3xl.js.map → pbr-metallic-roughness-block-full-Ta9lR2cz.js.map} +1 -1
  125. package/{pbr-mr-helper-core-R5tOZ8Ap.js → pbr-mr-helper-core-BVWNR08D.js} +2 -2
  126. package/{pbr-mr-helper-core-R5tOZ8Ap.js.map → pbr-mr-helper-core-BVWNR08D.js.map} +1 -1
  127. package/{pbr-refraction-Dd11HnaI.js → pbr-refraction-C9FvFmAp.js} +2 -2
  128. package/{pbr-refraction-Dd11HnaI.js.map → pbr-refraction-C9FvFmAp.js.map} +1 -1
  129. package/{pbr-renderable-BHAdF5Vw.js → pbr-renderable-DzUF2QIk.js} +60 -42
  130. package/pbr-renderable-DzUF2QIk.js.map +1 -0
  131. package/{pbr-shadow-fragment-BxUrFJYZ.js → pbr-shadow-fragment-CnqnbGYS.js} +2 -2
  132. package/{pbr-shadow-fragment-BxUrFJYZ.js.map → pbr-shadow-fragment-CnqnbGYS.js.map} +1 -1
  133. package/{pbr-tracking-D6i3yPb7.js → pbr-tracking-3tU1kqea.js} +2 -2
  134. package/{pbr-tracking-D6i3yPb7.js.map → pbr-tracking-3tU1kqea.js.map} +1 -1
  135. package/{pbr-transmission-ext-Dll8EYwE.js → pbr-transmission-ext-BcLjRxfB.js} +2 -2
  136. package/{pbr-transmission-ext-Dll8EYwE.js.map → pbr-transmission-ext-BcLjRxfB.js.map} +1 -1
  137. package/recast-navigation.wasm-DG_0AFuk.js +8706 -0
  138. package/recast-navigation.wasm-DG_0AFuk.js.map +1 -0
  139. package/recast-navigation.wasm-compat-C-Bf2ylB.js +8692 -0
  140. package/recast-navigation.wasm-compat-C-Bf2ylB.js.map +1 -0
  141. package/{reflectance-fragment-ejMJ4O1o.js → reflectance-fragment-Dbpgw3Jt.js} +2 -2
  142. package/{reflectance-fragment-ejMJ4O1o.js.map → reflectance-fragment-Dbpgw3Jt.js.map} +1 -1
  143. package/{rgbd-decode-DCvzUYeI.js → rgbd-decode-DoyUquy3.js} +7 -6
  144. package/rgbd-decode-DoyUquy3.js.map +1 -0
  145. package/{scene-material-swap-C2ykv55W.js → scene-material-swap-nNUH4nGn.js} +11 -4
  146. package/scene-material-swap-nNUH4nGn.js.map +1 -0
  147. package/screenshot-readback-D0Sj9qq3.js +92 -0
  148. package/screenshot-readback-D0Sj9qq3.js.map +1 -0
  149. package/{mesh-features-BAJpbMog.js → shader-composer-BUD_pSX4.js} +3 -54
  150. package/shader-composer-BUD_pSX4.js.map +1 -0
  151. package/{shader-renderable-BMf_vvO0.js → shader-renderable-D7-RyVxa.js} +25 -19
  152. package/shader-renderable-D7-RyVxa.js.map +1 -0
  153. package/{shader-thin-instance-5_WUfi3m.js → shader-thin-instance-DuBotxDO.js} +4 -4
  154. package/shader-thin-instance-DuBotxDO.js.map +1 -0
  155. package/{sheen-fragment-CS6z29Fs.js → sheen-fragment-1MkEMcbc.js} +2 -2
  156. package/{sheen-fragment-CS6z29Fs.js.map → sheen-fragment-1MkEMcbc.js.map} +1 -1
  157. package/{singlelight-directional-wgsl-4MIgZMeC.js → singlelight-directional-wgsl-BsV8G456.js} +2 -2
  158. package/{singlelight-directional-wgsl-4MIgZMeC.js.map → singlelight-directional-wgsl-BsV8G456.js.map} +1 -1
  159. package/{singlelight-hemispheric-wgsl-CK-GUYWe.js → singlelight-hemispheric-wgsl-Bo0jKlW5.js} +2 -2
  160. package/{singlelight-hemispheric-wgsl-CK-GUYWe.js.map → singlelight-hemispheric-wgsl-Bo0jKlW5.js.map} +1 -1
  161. package/{singlelight-point-wgsl-CYtzqCbP.js → singlelight-point-wgsl-DV39UP5Y.js} +2 -2
  162. package/{singlelight-point-wgsl-CYtzqCbP.js.map → singlelight-point-wgsl-DV39UP5Y.js.map} +1 -1
  163. package/{singlelight-spot-wgsl-DVbaVufF.js → singlelight-spot-wgsl-yg3od6vL.js} +2 -2
  164. package/{singlelight-spot-wgsl-DVbaVufF.js.map → singlelight-spot-wgsl-yg3od6vL.js.map} +1 -1
  165. package/{skeleton-fragment-BOVmc8YS.js → skeleton-fragment-DdxYG6kv.js} +2 -2
  166. package/{skeleton-fragment-BOVmc8YS.js.map → skeleton-fragment-DdxYG6kv.js.map} +1 -1
  167. package/{skybox-renderable-DDcCPSly.js → skybox-renderable-CJD4XmX5.js} +7 -8
  168. package/skybox-renderable-CJD4XmX5.js.map +1 -0
  169. package/{splat-ply-compressed-BahdBG1r.js → splat-ply-compressed-DHjyiVmI.js} +9 -8
  170. package/splat-ply-compressed-DHjyiVmI.js.map +1 -0
  171. package/{standard-renderable-D1bhoF0K.js → standard-pipeline-XTbHL7MY.js} +11 -202
  172. package/standard-pipeline-XTbHL7MY.js.map +1 -0
  173. package/standard-renderable-CREWLNHI.js +191 -0
  174. package/standard-renderable-CREWLNHI.js.map +1 -0
  175. package/{std-ambient-fragment-C6WNm8dQ.js → std-ambient-fragment-Bjx3VFrr.js} +2 -2
  176. package/{std-ambient-fragment-C6WNm8dQ.js.map → std-ambient-fragment-Bjx3VFrr.js.map} +1 -1
  177. package/{std-cube-reflection-fragment-Bqutpy2q.js → std-cube-reflection-fragment-y9WWdXUt.js} +2 -2
  178. package/{std-cube-reflection-fragment-Bqutpy2q.js.map → std-cube-reflection-fragment-y9WWdXUt.js.map} +1 -1
  179. package/{std-emissive-fragment-B-A83rqX.js → std-emissive-fragment-C8Lnmojh.js} +2 -2
  180. package/{std-emissive-fragment-B-A83rqX.js.map → std-emissive-fragment-C8Lnmojh.js.map} +1 -1
  181. package/{std-lightmap-fragment-Df7KJezh.js → std-lightmap-fragment-DFxGcoA5.js} +2 -2
  182. package/{std-lightmap-fragment-Df7KJezh.js.map → std-lightmap-fragment-DFxGcoA5.js.map} +1 -1
  183. package/{std-opacity-fragment-D9et2jip.js → std-opacity-fragment-EXzFWiSp.js} +2 -2
  184. package/{std-opacity-fragment-D9et2jip.js.map → std-opacity-fragment-EXzFWiSp.js.map} +1 -1
  185. package/{std-reflection-fragment-DBJeT-yg.js → std-reflection-fragment-BoJORqpG.js} +2 -2
  186. package/{std-reflection-fragment-DBJeT-yg.js.map → std-reflection-fragment-BoJORqpG.js.map} +1 -1
  187. package/{std-shadow-fragment-C6fD8rW-.js → std-shadow-fragment-Bq-Wc8UJ.js} +2 -2
  188. package/{std-shadow-fragment-C6fD8rW-.js.map → std-shadow-fragment-Bq-Wc8UJ.js.map} +1 -1
  189. package/{std-specular-fragment-C2ZOss-t.js → std-specular-fragment-CM5R5j2g.js} +2 -2
  190. package/{std-specular-fragment-C2ZOss-t.js.map → std-specular-fragment-CM5R5j2g.js.map} +1 -1
  191. package/{std-tracking-C4L4nQGc.js → std-tracking-Cif_wXeT.js} +2 -2
  192. package/{std-tracking-C4L4nQGc.js.map → std-tracking-Cif_wXeT.js.map} +1 -1
  193. package/{subsurface-fragment-C1H4ytqK.js → subsurface-fragment-BEaAXYXz.js} +2 -2
  194. package/{subsurface-fragment-C1H4ytqK.js.map → subsurface-fragment-BEaAXYXz.js.map} +1 -1
  195. package/swapchain-overlay-UCLilhbq.js +37 -0
  196. package/swapchain-overlay-UCLilhbq.js.map +1 -0
  197. package/{thin-instance-cull-binding-CCxrPNO6.js → thin-instance-cull-binding-DWKUt5ZN.js} +12 -12
  198. package/thin-instance-cull-binding-DWKUt5ZN.js.map +1 -0
  199. package/{thin-instance-gpu-E8DBd8XL.js → thin-instance-gpu-BDdRcNAh.js} +15 -7
  200. package/thin-instance-gpu-BDdRcNAh.js.map +1 -0
  201. package/{tracking-primitives-w4BVV9p9.js → tracking-primitives-CglRNTlX.js} +2 -2
  202. package/{tracking-primitives-w4BVV9p9.js.map → tracking-primitives-CglRNTlX.js.map} +1 -1
  203. package/{unlit-fragment-DU9_mhzZ.js → unlit-fragment-kxfZWlnp.js} +2 -2
  204. package/{unlit-fragment-DU9_mhzZ.js.map → unlit-fragment-kxfZWlnp.js.map} +1 -1
  205. package/_mat4-storage-f64-Bvh5TymE.js.map +0 -1
  206. package/assets/splat-sort-worker-Crg3CaCc.js.map +0 -1
  207. package/background-dds-skybox-ZjrSIxrT.js.map +0 -1
  208. package/background-ground-B2Mie-MI.js.map +0 -1
  209. package/background-hdr-skybox-DDRJYuT2.js.map +0 -1
  210. package/background-solid-skybox-fjXlnWaD.js.map +0 -1
  211. package/billboard-renderable-DKmlOgbM.js.map +0 -1
  212. package/create-skeleton-BBI5urcj.js.map +0 -1
  213. package/cubemap-skybox-material-DvW81drX.js.map +0 -1
  214. package/emissive-fragment-DD8cvHyx.js.map +0 -1
  215. package/gaussian-splatting-pipeline-sh-BvkUhA9V.js.map +0 -1
  216. package/gltf-animation-KnPzeOIY.js.map +0 -1
  217. package/gltf-ext-basisu-kmth3UWX.js.map +0 -1
  218. package/gltf-ext-quantization-CpZyLDIz.js.map +0 -1
  219. package/gltf-feature-animation-pointer-rFqLfbO_.js.map +0 -1
  220. package/gltf-feature-draco-yGSMGTE3.js.map +0 -1
  221. package/gltf-feature-gpu-instancing-Cj1XjmM6.js.map +0 -1
  222. package/gltf-feature-meshopt-Des96YFI.js.map +0 -1
  223. package/gltf-feature-morph-BAcY14XU.js.map +0 -1
  224. package/gltf-glb-parser-D6UZWFuC.js.map +0 -1
  225. package/gltf-interleave-C9eBqH_F.js.map +0 -1
  226. package/gltf-pbr-builder-ext-DPC0zg_u.js.map +0 -1
  227. package/gs-picking-pipeline-Bx8LTav6.js.map +0 -1
  228. package/index-B7Qhw0xL.js +0 -21232
  229. package/index-B7Qhw0xL.js.map +0 -1
  230. package/mesh-features-BAJpbMog.js.map +0 -1
  231. package/no-color-view-DsyLSL-W.js +0 -8
  232. package/no-color-view-DsyLSL-W.js.map +0 -1
  233. package/node-env-BPZXZzBf.js.map +0 -1
  234. package/node-registry-Bd-AlrgC.js +0 -190
  235. package/node-registry-Bd-AlrgC.js.map +0 -1
  236. package/node-renderable-CS0CmsSp.js.map +0 -1
  237. package/node-shadow-CpnrdvtJ.js.map +0 -1
  238. package/pbr-renderable-BHAdF5Vw.js.map +0 -1
  239. package/rgbd-decode-DCvzUYeI.js.map +0 -1
  240. package/scene-material-swap-C2ykv55W.js.map +0 -1
  241. package/shader-renderable-BMf_vvO0.js.map +0 -1
  242. package/shader-thin-instance-5_WUfi3m.js.map +0 -1
  243. package/skybox-renderable-DDcCPSly.js.map +0 -1
  244. package/splat-ply-compressed-BahdBG1r.js.map +0 -1
  245. package/standard-renderable-D1bhoF0K.js.map +0 -1
  246. package/swapchain-overlay-DcCSFDp7.js +0 -35
  247. package/swapchain-overlay-DcCSFDp7.js.map +0 -1
  248. package/thin-instance-cull-binding-CCxrPNO6.js.map +0 -1
  249. package/thin-instance-gpu-E8DBd8XL.js.map +0 -1
@@ -0,0 +1,291 @@
1
+ import { B as BU, p as packMat4IntoF32, M as MAX_LIGHTS, bv as findBlockByClassName, bw as emitGraph, x as targetSignatureKey, c as compileNodePipeline, S as SS, a as F32, G as GeometryTextureType, b as writeMeshLightSelection, bx as sanitize, by as bjsTypeToNodeType, bz as extractDefault, bA as floatCount, O as createMaterialView, bB as NODE_GEOMETRY_OUTPUT } from "./index-CLElg2Bo.js";
2
+ import { getAttrBuffer, writeAttributeFlags } from "./node-renderable-B5G8WcdH.js";
3
+ const nodeGeometryGroupBuilder = (async () => {
4
+ throw new Error("node-geometry view does not support scene group building");
5
+ });
6
+ nodeGeometryGroupBuilder._rebuildSingle = (scene, mesh, materialOverride) => {
7
+ const view = materialOverride ?? mesh.material;
8
+ return buildNodeGeometryRenderable(scene, mesh, view);
9
+ };
10
+ nodeGeometryGroupBuilder._materialFamily = "node";
11
+ const ZERO = (wg) => `vec4<f32>(0.0, 0.0, 0.0, ${wg})`;
12
+ function geomWrite(type, inputs, gpRef) {
13
+ const wg = "1.0";
14
+ const v = inputs.get(type);
15
+ const wp = inputs.get(GeometryTextureType.WORLD_POSITION);
16
+ switch (type) {
17
+ case GeometryTextureType.WORLD_POSITION:
18
+ return v ? `vec4<f32>(${v.expr}, ${wg})` : ZERO(wg);
19
+ case GeometryTextureType.LOCAL_POSITION:
20
+ return v ? `vec4<f32>(${v.expr}, ${wg})` : ZERO(wg);
21
+ case GeometryTextureType.WORLD_NORMAL:
22
+ return v ? `vec4<f32>(normalize(${v.expr}) * 0.5 + vec3<f32>(0.5), ${wg})` : ZERO(wg);
23
+ case GeometryTextureType.VIEW_NORMAL:
24
+ return v ? `vec4<f32>(normalize(${v.expr}), ${wg})` : ZERO(wg);
25
+ case GeometryTextureType.REFLECTIVITY:
26
+ return v ? `(${v.expr}) * ${wg}` : ZERO(wg);
27
+ case GeometryTextureType.ALBEDO:
28
+ return v ? `vec4<f32>(${v.expr}, ${wg})` : ZERO(wg);
29
+ case GeometryTextureType.IRRADIANCE:
30
+ return v ? `vec4<f32>(${v.expr}, ${wg})` : ZERO(wg);
31
+ case GeometryTextureType.SCREENSPACE_DEPTH:
32
+ return v ? `vec4<f32>(${v.expr}, 0.0, 0.0, ${wg})` : `vec4<f32>(in.position.z, 0.0, 0.0, ${wg})`;
33
+ case GeometryTextureType.VIEW_DEPTH:
34
+ if (v) {
35
+ return `vec4<f32>(${v.expr}, 0.0, 0.0, ${wg})`;
36
+ }
37
+ return wp ? `vec4<f32>((scene.view * vec4<f32>(${wp.expr}, 1.0)).z, 0.0, 0.0, ${wg})` : ZERO(wg);
38
+ case GeometryTextureType.NORMALIZED_VIEW_DEPTH:
39
+ if (v) {
40
+ return `vec4<f32>(${v.expr}, 0.0, 0.0, ${wg})`;
41
+ }
42
+ if (wp) {
43
+ gpRef.needsGp = true;
44
+ return `vec4<f32>(((scene.view * vec4<f32>(${wp.expr}, 1.0)).z - nmeGeom.cameraNearFar.x) / (nmeGeom.cameraNearFar.y - nmeGeom.cameraNearFar.x), 0.0, 0.0, ${wg})`;
45
+ }
46
+ return ZERO(wg);
47
+ case GeometryTextureType.LINEAR_VELOCITY:
48
+ return v ? `vec4<f32>(${v.expr}, ${wg})` : ZERO(wg);
49
+ }
50
+ }
51
+ function ensureGeometryResources(view) {
52
+ const cached = view._geometry;
53
+ if (cached) {
54
+ return cached;
55
+ }
56
+ const source = view.source;
57
+ const graph = source._graph;
58
+ const geomRoot = findBlockByClassName(graph, "GeometryTextureOutputBlock");
59
+ if (!geomRoot) {
60
+ throw new Error("NodeMaterial geometry view: graph has no GeometryTextureOutputBlock");
61
+ }
62
+ const vertRoot = findBlockByClassName(graph, "VertexOutputBlock");
63
+ const { vertexWgsl, fragmentWgsl, state } = emitGraph(
64
+ graph,
65
+ source._emitters,
66
+ geomRoot.id,
67
+ vertRoot ? vertRoot.id : null,
68
+ [],
69
+ {
70
+ hasSkeleton: source._hasSkeleton,
71
+ hasInstances: source._hasInstances
72
+ }
73
+ );
74
+ if (state.usesMorphTargets || state.usesEnv || state.shadowLights.length > 0) {
75
+ throw new Error("NodeMaterial geometry view: morph / env / shadow inputs are not supported in the geometry pass");
76
+ }
77
+ const inputs = state._geometryInputs ?? /* @__PURE__ */ new Map();
78
+ const attachments = view._geometryAttachments;
79
+ const gpRef = { needsGp: false };
80
+ const structLines = attachments.map((_, i) => `@location(${i}) f${i}: vec4<f32>,`);
81
+ const struct = `struct FragmentOutput {
82
+ ${structLines.join("\n")}
83
+ };`;
84
+ const writeLines = attachments.map((type, i) => `out.f${i} = ${geomWrite(type, inputs, gpRef)};`);
85
+ const fsReturn = ["var out: FragmentOutput;", ...writeLines, "return out;"].map((l) => ` ${l}`).join("\n") + "\n";
86
+ const res = {
87
+ _vertexWgsl: vertexWgsl,
88
+ _fragmentWgsl: fragmentWgsl,
89
+ _geomState: state,
90
+ _struct: struct,
91
+ _fsReturn: fsReturn,
92
+ _needsGpUbo: gpRef.needsGp,
93
+ _attrNames: state.vertexAttributes.map((a) => a._name),
94
+ _compileBySig: /* @__PURE__ */ new Map(),
95
+ _nodeUBO: null,
96
+ _nodeUBOReady: false
97
+ };
98
+ Object.defineProperty(view, "_geometry", { value: res, enumerable: false, configurable: true });
99
+ return res;
100
+ }
101
+ function ensureGeometryCompile(view, res, engine, sig) {
102
+ const key = targetSignatureKey(sig);
103
+ const cached = res._compileBySig.get(key);
104
+ if (cached) {
105
+ return cached;
106
+ }
107
+ const source = view.source;
108
+ const colorFormats = sig._colorFormats ?? (sig._colorFormat ? [sig._colorFormat] : []);
109
+ if (colorFormats.length === 0) {
110
+ throw new Error("node-geometry: render target has no color attachments");
111
+ }
112
+ const cullMode = source._graph.backFaceCulling ? view._reverseCulling ? "front" : "back" : "none";
113
+ const mrtOutput = {
114
+ _struct: res._struct,
115
+ _fsReturnType: " -> FragmentOutput",
116
+ _fsReturn: res._fsReturn,
117
+ _cacheKey: `3|mrt:${colorFormats.join()}:${cullMode}`,
118
+ _needsGpUbo: res._needsGpUbo,
119
+ _buildGeomUbo: (binding) => ({
120
+ _wgsl: `struct NmeGeomParams { previousViewProjection: mat4x4<f32>, cameraNearFar: vec4<f32> };
121
+ @group(1) @binding(${binding}) var<uniform> nmeGeom: NmeGeomParams;`,
122
+ _bglEntry: { binding, visibility: SS.FRAGMENT, buffer: { type: "uniform" } }
123
+ }),
124
+ // Geometry MRT renders upright into offscreen targets (the task packs an
125
+ // un-flipped scene UBO), matching the Standard/PBR geometry renderables.
126
+ _buildPipeline: (device, a) => device.createRenderPipeline({
127
+ label: "node-material-geometry",
128
+ layout: device.createPipelineLayout({ bindGroupLayouts: [a._sceneBGL, a._meshBGL] }),
129
+ vertex: { module: a._shaderModule, entryPoint: "vs_main", buffers: a._vertexBuffers },
130
+ fragment: { module: a._shaderModule, entryPoint: "fs_main", targets: colorFormats.map((f) => ({ format: f })) },
131
+ depthStencil: { format: a._depthFormat, depthCompare: a._depthCompare, depthWriteEnabled: true },
132
+ multisample: { count: a._msaaSamples },
133
+ primitive: { topology: "triangle-list", cullMode, frontFace: "ccw" }
134
+ })
135
+ };
136
+ const compile = compileNodePipeline(res._geomState, res._vertexWgsl, res._fragmentWgsl, {
137
+ _engine: engine,
138
+ _format: engine.format,
139
+ _depthStencilFormat: sig._depthStencilFormat,
140
+ _depthCompare: sig._depthCompare ?? "greater-equal",
141
+ _msaaSamples: sig._sampleCount,
142
+ _backFaceCulling: source._graph.backFaceCulling,
143
+ _alphaMode: 0,
144
+ _mrtOutput: mrtOutput
145
+ });
146
+ res._compileBySig.set(key, compile);
147
+ return compile;
148
+ }
149
+ function extractNodeUniformDefault(graph, sanitizedName) {
150
+ for (const block of graph.blocks.values()) {
151
+ if (block.className !== "InputBlock") {
152
+ continue;
153
+ }
154
+ if (sanitize(block.name || `input${block.id}`) !== sanitizedName) {
155
+ continue;
156
+ }
157
+ const type = bjsTypeToNodeType(block.serialized["type"] ?? 16);
158
+ if (type === "mat4f") {
159
+ return null;
160
+ }
161
+ const values = new F32(floatCount(type));
162
+ values.set(extractDefault(block.serialized["value"], type));
163
+ return values;
164
+ }
165
+ return null;
166
+ }
167
+ function ensureGeometryNodeUBO(res, compile, engine, source) {
168
+ if (res._nodeUBOReady) {
169
+ return res._nodeUBO;
170
+ }
171
+ res._nodeUBOReady = true;
172
+ if (compile._nodeUboBinding === null || compile._nodeUboSize === 0) {
173
+ return null;
174
+ }
175
+ const scratch = new F32(compile._nodeUboSize / 4);
176
+ for (const [name, offsetBytes] of compile._nodeUboOffsets) {
177
+ const live = source._uniformValues.get(name);
178
+ if (live) {
179
+ scratch.set(live._values, offsetBytes >> 2);
180
+ continue;
181
+ }
182
+ const def = extractNodeUniformDefault(source._graph, name);
183
+ if (def) {
184
+ scratch.set(def, offsetBytes >> 2);
185
+ }
186
+ }
187
+ const ubo = engine._device.createBuffer({ label: "node-geom-ubo", size: compile._nodeUboSize, usage: BU.UNIFORM | BU.COPY_DST });
188
+ engine._device.queue.writeBuffer(ubo, 0, scratch);
189
+ res._nodeUBO = ubo;
190
+ return ubo;
191
+ }
192
+ function buildGeometryBindGroup(engine, source, compile, meshUBO, nodeUBO, view) {
193
+ var _a;
194
+ const entries = [{ binding: 0, resource: { buffer: meshUBO } }];
195
+ if (nodeUBO && compile._nodeUboBinding !== null) {
196
+ entries.push({ binding: compile._nodeUboBinding, resource: { buffer: nodeUBO } });
197
+ }
198
+ for (const tb of compile._textureBindings) {
199
+ const tex = (_a = source._textureSlots.get(tb._name)) == null ? void 0 : _a.current;
200
+ if (!tex) {
201
+ throw new Error(`NodeMaterial geometry view: texture binding "${tb._name}" not set. Provide it via material.inputs["${tb._name}"].texture before the first render.`);
202
+ }
203
+ entries.push({ binding: tb._texBinding, resource: tex.view }, { binding: tb._sampBinding, resource: tex.sampler });
204
+ }
205
+ if (compile._geometryGpBinding !== null) {
206
+ if (!view._gpUBO) {
207
+ throw new Error("NodeMaterial geometry view: NORMALIZED_VIEW_DEPTH requested but no geometry-params UBO was provided by the task.");
208
+ }
209
+ entries.push({ binding: compile._geometryGpBinding, resource: { buffer: view._gpUBO } });
210
+ }
211
+ return engine._device.createBindGroup({ label: "node-geom-bg", layout: compile._meshBGL, entries });
212
+ }
213
+ function buildNodeGeometryRenderable(scene, mesh, view) {
214
+ var _a;
215
+ const engine = scene.surface.engine;
216
+ const device = engine._device;
217
+ const source = view.source;
218
+ const res = ensureGeometryResources(view);
219
+ const meshUboBytes = 96 + 16 * Math.ceil(MAX_LIGHTS / 4) + 15 & -16;
220
+ const meshUBO = device.createBuffer({ label: "node-geom-mesh-ubo", size: meshUboBytes, usage: BU.UNIFORM | BU.COPY_DST });
221
+ const meshScratch = new F32(meshUboBytes / 4);
222
+ const packMeshWorld = ((_a = engine._makePackMeshWorld) == null ? void 0 : _a.call(engine, scene)) ?? packMat4IntoF32;
223
+ let needsAttrFlags = false;
224
+ const writeMesh = () => {
225
+ packMeshWorld(meshScratch, mesh.worldMatrix, 0, 0);
226
+ meshScratch[16] = mesh.receiveShadows ? 1 : 0;
227
+ if (needsAttrFlags) {
228
+ writeAttributeFlags(mesh, meshScratch);
229
+ }
230
+ writeMeshLightSelection(mesh, scene.lights, meshScratch.subarray(4));
231
+ device.queue.writeBuffer(meshUBO, 0, meshScratch);
232
+ };
233
+ let bindGroup = null;
234
+ let lastWorldVersion = -1;
235
+ let lastLightsCount = -1;
236
+ const sortCenter = [mesh.worldMatrix[12], mesh.worldMatrix[13], mesh.worldMatrix[14]];
237
+ const r = {
238
+ order: mesh.renderOrder ?? 100,
239
+ isTransparent: false,
240
+ mesh,
241
+ bind(eng, sig) {
242
+ const compile = ensureGeometryCompile(view, res, eng, sig);
243
+ needsAttrFlags = compile._usesMeshAttributeFlags;
244
+ const nodeUBO = ensureGeometryNodeUBO(res, compile, eng, source);
245
+ bindGroup = buildGeometryBindGroup(eng, source, compile, meshUBO, nodeUBO, view);
246
+ const update = () => {
247
+ if (mesh.worldMatrixVersion !== lastWorldVersion || scene.lights.length !== lastLightsCount) {
248
+ writeMesh();
249
+ sortCenter[0] = mesh.worldMatrix[12];
250
+ sortCenter[1] = mesh.worldMatrix[13];
251
+ sortCenter[2] = mesh.worldMatrix[14];
252
+ lastWorldVersion = mesh.worldMatrixVersion;
253
+ lastLightsCount = scene.lights.length;
254
+ }
255
+ };
256
+ const draw = (pass) => {
257
+ if (mesh.visible === false) {
258
+ return 0;
259
+ }
260
+ const g = mesh._gpu;
261
+ for (let i = 0; i < res._attrNames.length; i++) {
262
+ pass.setVertexBuffer(i, getAttrBuffer(engine, g, res._attrNames[i]));
263
+ }
264
+ pass.setIndexBuffer(g.indexBuffer, g.indexFormat);
265
+ pass.setBindGroup(1, bindGroup);
266
+ pass.drawIndexed(g.indexCount);
267
+ return 1;
268
+ };
269
+ return { renderable: r, pipeline: compile._pipeline, update, draw };
270
+ }
271
+ };
272
+ r._worldCenter = sortCenter;
273
+ return r;
274
+ }
275
+ function createNodeGeometryMaterialView(source, config) {
276
+ var _a;
277
+ if (config.emitColor) {
278
+ throw new Error("NodeMaterial geometry view: emitColor (real-color target) is not supported — omit targetTexture on the geometry task.");
279
+ }
280
+ const baseFeatures = ((_a = source._renderFeatures) == null ? void 0 : _a.features) ?? 0;
281
+ const view = createMaterialView(source, { features: baseFeatures | NODE_GEOMETRY_OUTPUT });
282
+ Object.defineProperty(view, "_geometryAttachments", { value: config.attachments, enumerable: false });
283
+ Object.defineProperty(view, "_gpUBO", { value: config.gpUBO ?? null, enumerable: false });
284
+ Object.defineProperty(view, "_reverseCulling", { value: config.reverseCulling ?? false, enumerable: false });
285
+ Object.defineProperty(view, "_buildGroup", { value: nodeGeometryGroupBuilder, enumerable: false });
286
+ return view;
287
+ }
288
+ export {
289
+ createNodeGeometryMaterialView
290
+ };
291
+ //# sourceMappingURL=node-geometry-view-COmWsRXK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-geometry-view-COmWsRXK.js","sources":["../src/material/node/node-geometry-renderable.ts","../src/material/node/node-geometry-view.ts"],"sourcesContent":["/** Node Material geometry-MRT renderable factory.\n *\n * Builds a {@link Renderable} that draws a single mesh through a\n * {@link createNodeGeometryMaterialView} into the geometry renderer task's\n * multi-attachment render target. Parallel to\n * `standard-geometry-renderable.ts` / `pbr-geometry-renderable.ts` but for the\n * NodeMaterial family.\n *\n * The geometry shader is produced by **re-walking** the parsed graph from the\n * `GeometryTextureOutputBlock` terminal (instead of `FragmentOutputBlock`).\n * That second `emitGraph` pass fills `state._geometryInputs` with the WGSL\n * expression for every connected geometry input; this module turns those into\n * the per-attachment `FragmentOutput` writes (falling back to the engine\n * default for unconnected attachments) and feeds them to\n * {@link compileNodePipeline} via its `_mrtOutput` option.\n *\n * This module is imported only by {@link createNodeGeometryMaterialView}, which\n * the geometry renderer task dynamic-imports — node scenes that never use the\n * geometry renderer pay zero bytes for it.\n */\n\nimport { F32 } from \"../../engine/typed-arrays.js\";\nimport { BU, SS } from \"../../engine/gpu-flags.js\";\nimport type { EngineContext } from \"../../engine/engine.js\";\nimport type { RenderTargetSignature } from \"../../engine/render-target.js\";\nimport { targetSignatureKey } from \"../../engine/render-target.js\";\nimport type { Mesh } from \"../../mesh/mesh.js\";\nimport type { MeshGroupBuilder, Renderable } from \"../../render/renderable.js\";\nimport { writeMeshLightSelection } from \"../../render/lights-ubo.js\";\nimport { MAX_LIGHTS } from \"../../light/types.js\";\nimport { packMat4IntoF32 } from \"../../math/pack-mat4-into-f32.js\";\nimport type { SceneContext } from \"../../scene/scene-core.js\";\nimport type { Material } from \"../material.js\";\nimport { GeometryTextureType } from \"../../frame-graph/geometry-types.js\";\nimport type { NodeExpr, NodeBuildState, NodeGraph } from \"./node-types.js\";\nimport { emitGraph } from \"./node-emitter.js\";\nimport { findBlockByClassName } from \"./node-parser.js\";\nimport { compileNodePipeline, type NodeCompileResult, type MrtOutputOpts } from \"./node-pipeline.js\";\nimport type { NodeMaterial } from \"./node-material.js\";\nimport { sanitize, bjsTypeToNodeType, floatCount, extractDefault } from \"./node-material.js\";\nimport { getAttrBuffer, writeAttributeFlags } from \"./node-renderable.js\";\nimport type { NodeGeometryMaterialView } from \"./node-geometry-view.js\";\n\n/** Singleton {@link MeshGroupBuilder} that node geometry views point at via their\n * overridden `_buildGroup`. The async builder body is unreachable — geometry\n * views are dispatched per-mesh via the geometry renderer task which calls\n * `_rebuildSingle` directly. */\nexport const nodeGeometryGroupBuilder: MeshGroupBuilder = (async () => {\n throw new Error(\"node-geometry view does not support scene group building\");\n}) as MeshGroupBuilder;\nnodeGeometryGroupBuilder._rebuildSingle = (scene: SceneContext, mesh: Mesh, materialOverride?: Material): Renderable => {\n const view = (materialOverride ?? mesh.material) as NodeGeometryMaterialView;\n return buildNodeGeometryRenderable(scene, mesh, view);\n};\nnodeGeometryGroupBuilder._materialFamily = \"node\";\n\n/** Shared per-view geometry resources, computed once and cached on the view. */\ninterface NodeGeometryViewResources {\n readonly _vertexWgsl: string;\n readonly _fragmentWgsl: string;\n readonly _geomState: NodeBuildState;\n readonly _struct: string;\n /** Fully-assembled fs_main return body (`var out…; return out;`), indented\n * one level with a trailing newline — ready to splice straight into the\n * node pipeline's `fs_main` (no WGSL assembly leaks into node-pipeline.ts). */\n readonly _fsReturn: string;\n readonly _needsGpUbo: boolean;\n readonly _attrNames: readonly string[];\n /** Per-target-signature compile (pipeline + BGL). */\n readonly _compileBySig: Map<string, NodeCompileResult>;\n /** Shared node UBO (one per material, format-independent). Allocated on first compile. */\n _nodeUBO: GPUBuffer | null;\n _nodeUBOReady: boolean;\n}\n\nconst ZERO = (wg: string): string => `vec4<f32>(0.0, 0.0, 0.0, ${wg})`;\n\n/** Build the per-attachment WGSL write for one geometry texture type, reading a\n * connected graph input when present and falling back to the engine default. */\nfunction geomWrite(type: GeometryTextureType, inputs: Map<GeometryTextureType, NodeExpr>, gpRef: { needsGp: boolean }): string {\n const wg = \"1.0\"; // opaque node materials: writeGeometryInfo gate is always 1.\n const v = inputs.get(type);\n const wp = inputs.get(GeometryTextureType.WORLD_POSITION);\n switch (type) {\n case GeometryTextureType.WORLD_POSITION:\n return v ? `vec4<f32>(${v.expr}, ${wg})` : ZERO(wg);\n case GeometryTextureType.LOCAL_POSITION:\n return v ? `vec4<f32>(${v.expr}, ${wg})` : ZERO(wg);\n case GeometryTextureType.WORLD_NORMAL:\n return v ? `vec4<f32>(normalize(${v.expr}) * 0.5 + vec3<f32>(0.5), ${wg})` : ZERO(wg);\n case GeometryTextureType.VIEW_NORMAL:\n return v ? `vec4<f32>(normalize(${v.expr}), ${wg})` : ZERO(wg);\n case GeometryTextureType.REFLECTIVITY:\n // Stored as vec4 — vec4(rgb, a) * writeGeometryInfo.\n return v ? `(${v.expr}) * ${wg}` : ZERO(wg);\n case GeometryTextureType.ALBEDO:\n return v ? `vec4<f32>(${v.expr}, ${wg})` : ZERO(wg);\n case GeometryTextureType.IRRADIANCE:\n return v ? `vec4<f32>(${v.expr}, ${wg})` : ZERO(wg);\n case GeometryTextureType.SCREENSPACE_DEPTH:\n return v ? `vec4<f32>(${v.expr}, 0.0, 0.0, ${wg})` : `vec4<f32>(in.position.z, 0.0, 0.0, ${wg})`;\n case GeometryTextureType.VIEW_DEPTH:\n if (v) {\n return `vec4<f32>(${v.expr}, 0.0, 0.0, ${wg})`;\n }\n return wp ? `vec4<f32>((scene.view * vec4<f32>(${wp.expr}, 1.0)).z, 0.0, 0.0, ${wg})` : ZERO(wg);\n case GeometryTextureType.NORMALIZED_VIEW_DEPTH:\n if (v) {\n return `vec4<f32>(${v.expr}, 0.0, 0.0, ${wg})`;\n }\n if (wp) {\n gpRef.needsGp = true;\n return `vec4<f32>(((scene.view * vec4<f32>(${wp.expr}, 1.0)).z - nmeGeom.cameraNearFar.x) / (nmeGeom.cameraNearFar.y - nmeGeom.cameraNearFar.x), 0.0, 0.0, ${wg})`;\n }\n return ZERO(wg);\n case GeometryTextureType.LINEAR_VELOCITY:\n // Stored as vec3 — node materials do not compute velocity, default 0.\n return v ? `vec4<f32>(${v.expr}, ${wg})` : ZERO(wg);\n }\n}\n\n/** Re-emit the graph from the GeometryTextureOutputBlock terminal and build the\n * shared geometry resources (WGSL bodies + FragmentOutput struct + writes). */\nfunction ensureGeometryResources(view: NodeGeometryMaterialView): NodeGeometryViewResources {\n const cached = view._geometry as NodeGeometryViewResources | undefined;\n if (cached) {\n return cached;\n }\n const source = view.source as NodeMaterial;\n const graph = source._graph;\n const geomRoot = findBlockByClassName(graph, \"GeometryTextureOutputBlock\");\n if (!geomRoot) {\n throw new Error(\"NodeMaterial geometry view: graph has no GeometryTextureOutputBlock\");\n }\n const vertRoot = findBlockByClassName(graph, \"VertexOutputBlock\");\n const { vertexWgsl, fragmentWgsl, state } = emitGraph(\n graph,\n source._emitters as Map<string, import(\"./node-types.js\").BlockEmitter>,\n geomRoot.id,\n vertRoot ? vertRoot.id : null,\n [],\n {\n hasSkeleton: source._hasSkeleton,\n hasInstances: source._hasInstances,\n }\n );\n if (state.usesMorphTargets || state.usesEnv || state.shadowLights.length > 0) {\n throw new Error(\"NodeMaterial geometry view: morph / env / shadow inputs are not supported in the geometry pass\");\n }\n\n const inputs = state._geometryInputs ?? new Map<GeometryTextureType, NodeExpr>();\n const attachments = view._geometryAttachments;\n const gpRef = { needsGp: false };\n const structLines = attachments.map((_, i) => `@location(${i}) f${i}: vec4<f32>,`);\n const struct = `struct FragmentOutput {\\n${structLines.join(\"\\n\")}\\n};`;\n const writeLines = attachments.map((type, i) => `out.f${i} = ${geomWrite(type, inputs, gpRef)};`);\n // Pre-indent the full return body here (one level + trailing newline) so the\n // node pipeline just splices the string — no geometry WGSL assembly in the\n // always-loaded compileNodePipeline.\n const fsReturn = [\"var out: FragmentOutput;\", ...writeLines, \"return out;\"].map((l) => ` ${l}`).join(\"\\n\") + \"\\n\";\n\n const res: NodeGeometryViewResources = {\n _vertexWgsl: vertexWgsl,\n _fragmentWgsl: fragmentWgsl,\n _geomState: state,\n _struct: struct,\n _fsReturn: fsReturn,\n _needsGpUbo: gpRef.needsGp,\n _attrNames: state.vertexAttributes.map((a) => a._name),\n _compileBySig: new Map(),\n _nodeUBO: null,\n _nodeUBOReady: false,\n };\n Object.defineProperty(view, \"_geometry\", { value: res, enumerable: false, configurable: true });\n return res;\n}\n\n/** Compile (or fetch cached) the geometry MRT pipeline for a target signature. */\nfunction ensureGeometryCompile(view: NodeGeometryMaterialView, res: NodeGeometryViewResources, engine: EngineContext, sig: RenderTargetSignature): NodeCompileResult {\n const key = targetSignatureKey(sig);\n const cached = res._compileBySig.get(key);\n if (cached) {\n return cached;\n }\n const source = view.source as NodeMaterial;\n const colorFormats = (sig as RenderTargetSignature & { _colorFormats?: readonly GPUTextureFormat[] })._colorFormats ?? (sig._colorFormat ? [sig._colorFormat] : []);\n if (colorFormats.length === 0) {\n throw new Error(\"node-geometry: render target has no color attachments\");\n }\n const cullMode: GPUCullMode = source._graph.backFaceCulling ? (view._reverseCulling ? \"front\" : \"back\") : \"none\";\n // All geometry-specific WGSL object-literals + the MRT pipeline descriptor\n // live here (lazy module). compileNodePipeline only splices strings + calls\n // these callbacks, so non-geometry node scenes bundle none of it.\n const mrtOutput: MrtOutputOpts = {\n _struct: res._struct,\n _fsReturnType: \" -> FragmentOutput\",\n _fsReturn: res._fsReturn,\n _cacheKey: `3|mrt:${colorFormats.join()}:${cullMode}`,\n _needsGpUbo: res._needsGpUbo,\n _buildGeomUbo: (binding) => ({\n _wgsl: `struct NmeGeomParams { previousViewProjection: mat4x4<f32>, cameraNearFar: vec4<f32> };\\n@group(1) @binding(${binding}) var<uniform> nmeGeom: NmeGeomParams;`,\n _bglEntry: { binding, visibility: SS.FRAGMENT, buffer: { type: \"uniform\" } },\n }),\n // Geometry MRT renders upright into offscreen targets (the task packs an\n // un-flipped scene UBO), matching the Standard/PBR geometry renderables.\n _buildPipeline: (device, a) =>\n device.createRenderPipeline({\n label: \"node-material-geometry\",\n layout: device.createPipelineLayout({ bindGroupLayouts: [a._sceneBGL, a._meshBGL] }),\n vertex: { module: a._shaderModule, entryPoint: \"vs_main\", buffers: a._vertexBuffers },\n fragment: { module: a._shaderModule, entryPoint: \"fs_main\", targets: colorFormats.map((f) => ({ format: f })) },\n depthStencil: { format: a._depthFormat, depthCompare: a._depthCompare, depthWriteEnabled: true },\n multisample: { count: a._msaaSamples },\n primitive: { topology: \"triangle-list\", cullMode, frontFace: \"ccw\" },\n }),\n };\n const compile = compileNodePipeline(res._geomState, res._vertexWgsl, res._fragmentWgsl, {\n _engine: engine,\n _format: engine.format,\n _depthStencilFormat: sig._depthStencilFormat,\n _depthCompare: sig._depthCompare ?? \"greater-equal\",\n _msaaSamples: sig._sampleCount,\n _backFaceCulling: source._graph.backFaceCulling,\n _alphaMode: 0,\n _mrtOutput: mrtOutput,\n });\n res._compileBySig.set(key, compile);\n return compile;\n}\n\n/** Resolve the default uniform value (as a Float32Array) for the InputBlock\n * whose sanitized name matches `sanitizedName`. Used by {@link ensureGeometryNodeUBO}\n * for uniforms that only appear in the geometry re-emit — e.g. a constant\n * reflectivity colour referenced solely by the GeometryTextureOutputBlock\n * terminal and therefore absent from the colour pass's `_uniformValues`.\n * Returns null when no matching scalar/vector uniform InputBlock exists. Lives\n * here (not in the always-loaded `node-material.ts`) so non-geometry node\n * scenes pay zero bytes for it; the tiny helpers it calls (`sanitize`,\n * `bjsTypeToNodeType`, `floatCount`, `extractDefault`) are already retained by\n * the always-loaded UBO writer and merely re-exported. */\nfunction extractNodeUniformDefault(graph: NodeGraph, sanitizedName: string): Float32Array | null {\n for (const block of graph.blocks.values()) {\n if (block.className !== \"InputBlock\") {\n continue;\n }\n if (sanitize(block.name || `input${block.id}`) !== sanitizedName) {\n continue;\n }\n const type = bjsTypeToNodeType((block.serialized[\"type\"] as number | undefined) ?? 0x10);\n if (type === \"mat4f\") {\n return null;\n }\n const values = new F32(floatCount(type));\n values.set(extractDefault(block.serialized[\"value\"], type));\n return values;\n }\n return null;\n}\n\n/** Build / refresh the shared geometry node UBO (constants + live uniform overlays). */\nfunction ensureGeometryNodeUBO(res: NodeGeometryViewResources, compile: NodeCompileResult, engine: EngineContext, source: NodeMaterial): GPUBuffer | null {\n if (res._nodeUBOReady) {\n return res._nodeUBO;\n }\n res._nodeUBOReady = true;\n if (compile._nodeUboBinding === null || compile._nodeUboSize === 0) {\n return null;\n }\n const scratch = new F32(compile._nodeUboSize / 4);\n for (const [name, offsetBytes] of compile._nodeUboOffsets) {\n const live = source._uniformValues.get(name);\n if (live) {\n scratch.set(live._values, offsetBytes >> 2);\n continue;\n }\n const def = extractNodeUniformDefault(source._graph, name);\n if (def) {\n scratch.set(def, offsetBytes >> 2);\n }\n }\n const ubo = engine._device.createBuffer({ label: \"node-geom-ubo\", size: compile._nodeUboSize, usage: BU.UNIFORM | BU.COPY_DST });\n engine._device.queue.writeBuffer(ubo, 0, scratch);\n res._nodeUBO = ubo;\n return ubo;\n}\n\nfunction buildGeometryBindGroup(\n engine: EngineContext,\n source: NodeMaterial,\n compile: NodeCompileResult,\n meshUBO: GPUBuffer,\n nodeUBO: GPUBuffer | null,\n view: NodeGeometryMaterialView\n): GPUBindGroup {\n const entries: GPUBindGroupEntry[] = [{ binding: 0, resource: { buffer: meshUBO } }];\n if (nodeUBO && compile._nodeUboBinding !== null) {\n entries.push({ binding: compile._nodeUboBinding, resource: { buffer: nodeUBO } });\n }\n for (const tb of compile._textureBindings) {\n const tex = source._textureSlots.get(tb._name)?.current;\n if (!tex) {\n throw new Error(`NodeMaterial geometry view: texture binding \"${tb._name}\" not set. Provide it via material.inputs[\"${tb._name}\"].texture before the first render.`);\n }\n entries.push({ binding: tb._texBinding, resource: tex.view }, { binding: tb._sampBinding, resource: tex.sampler });\n }\n if (compile._geometryGpBinding !== null) {\n if (!view._gpUBO) {\n throw new Error(\"NodeMaterial geometry view: NORMALIZED_VIEW_DEPTH requested but no geometry-params UBO was provided by the task.\");\n }\n entries.push({ binding: compile._geometryGpBinding, resource: { buffer: view._gpUBO } });\n }\n return engine._device.createBindGroup({ label: \"node-geom-bg\", layout: compile._meshBGL, entries });\n}\n\n/** Build a {@link Renderable} for one mesh drawn through a NodeMaterial geometry view. */\nexport function buildNodeGeometryRenderable(scene: SceneContext, mesh: Mesh, view: NodeGeometryMaterialView): Renderable {\n const engine = scene.surface.engine;\n const device = engine._device;\n const source = view.source as NodeMaterial;\n const res = ensureGeometryResources(view);\n\n // Per-mesh UBO: world (64B) + receivesShadow (vec4) + light count/indices.\n const meshUboBytes = (96 + 16 * Math.ceil(MAX_LIGHTS / 4) + 15) & ~15;\n const meshUBO = device.createBuffer({ label: \"node-geom-mesh-ubo\", size: meshUboBytes, usage: BU.UNIFORM | BU.COPY_DST });\n const meshScratch = new F32(meshUboBytes / 4);\n const packMeshWorld = engine._makePackMeshWorld?.(scene) ?? packMat4IntoF32;\n\n let needsAttrFlags = false;\n const writeMesh = (): void => {\n packMeshWorld(meshScratch, mesh.worldMatrix, 0, 0);\n meshScratch[16] = mesh.receiveShadows ? 1 : 0;\n if (needsAttrFlags) {\n writeAttributeFlags(mesh, meshScratch);\n }\n writeMeshLightSelection(mesh, scene.lights, meshScratch.subarray(4));\n device.queue.writeBuffer(meshUBO, 0, meshScratch as Float32Array<ArrayBuffer>);\n };\n\n let bindGroup: GPUBindGroup | null = null;\n let lastWorldVersion = -1;\n let lastLightsCount = -1;\n\n const sortCenter: [number, number, number] = [mesh.worldMatrix[12]!, mesh.worldMatrix[13]!, mesh.worldMatrix[14]!];\n\n const r: Renderable = {\n order: mesh.renderOrder ?? 100,\n isTransparent: false,\n mesh,\n bind(eng: EngineContext, sig: RenderTargetSignature) {\n const compile = ensureGeometryCompile(view, res, eng as EngineContext, sig);\n needsAttrFlags = compile._usesMeshAttributeFlags;\n const nodeUBO = ensureGeometryNodeUBO(res, compile, eng as EngineContext, source);\n bindGroup = buildGeometryBindGroup(eng as EngineContext, source, compile, meshUBO, nodeUBO, view);\n\n const update = (): void => {\n if (mesh.worldMatrixVersion !== lastWorldVersion || scene.lights.length !== lastLightsCount) {\n writeMesh();\n sortCenter[0] = mesh.worldMatrix[12]!;\n sortCenter[1] = mesh.worldMatrix[13]!;\n sortCenter[2] = mesh.worldMatrix[14]!;\n lastWorldVersion = mesh.worldMatrixVersion;\n lastLightsCount = scene.lights.length;\n }\n };\n const draw = (pass: GPURenderPassEncoder | GPURenderBundleEncoder): number => {\n if (mesh.visible === false) {\n return 0;\n }\n const g = mesh._gpu;\n for (let i = 0; i < res._attrNames.length; i++) {\n pass.setVertexBuffer(i, getAttrBuffer(engine, g, res._attrNames[i]!));\n }\n pass.setIndexBuffer(g.indexBuffer, g.indexFormat);\n pass.setBindGroup(1, bindGroup!);\n pass.drawIndexed(g.indexCount);\n return 1;\n };\n return { renderable: r, pipeline: compile._pipeline, update, draw };\n },\n };\n r._worldCenter = sortCenter;\n return r;\n}\n","/** NodeMaterial view helper that targets geometry-rendering MRT output.\n *\n * The geometry renderer task wraps each NodeMaterial caster in a\n * `NodeGeometryMaterialView`. The view carries the per-task attachment list,\n * optional `gp` UBO (camera near/far, shared across the task's materials), and\n * reverse-culling flag, and shadows {@link Material._buildGroup} with\n * {@link nodeGeometryGroupBuilder} so the geometry renderer task materialises a\n * {@link Renderable} through the node geometry renderable infrastructure — no\n * view-aware branching needed in core render-task.\n *\n * The geometry-output WGSL itself is produced by re-walking the parsed graph\n * from the `GeometryTextureOutputBlock` terminal in\n * `./node-geometry-renderable.ts`. Mirrors `material/standard/geometry-view.ts`\n * and `material/node/esm-shadow-view.ts`. */\n\nimport { createMaterialView } from \"../material-view.js\";\nimport type { MaterialView } from \"../material.js\";\nimport type { GeometryTextureType } from \"../../frame-graph/geometry-types.js\";\nimport { NODE_GEOMETRY_OUTPUT } from \"./node-flags.js\";\nimport type { NodeMaterial } from \"./node-material.js\";\nimport { nodeGeometryGroupBuilder } from \"./node-geometry-renderable.js\";\n\n/** Per-task ordered attachment list driving the geometry template. The array\n * index is the MRT color-attachment slot used in `@location(i)`. */\nexport type NodeGeometryAttachments = readonly GeometryTextureType[];\n\n/** Per-(task, material) NodeMaterial geometry view configuration. */\nexport interface NodeGeometryViewConfig {\n /** Ordered MRT attachment list — index = `@location(i)`. */\n readonly attachments: NodeGeometryAttachments;\n /** When true the task additionally wants the real (lit) material color at\n * `@location(N)`. NodeMaterial geometry views do not implement the extra\n * color attachment (the realColor impostor is dropped); passing `true`\n * throws so callers don't silently mismatch the render-pass attachments. */\n readonly emitColor: boolean;\n /** Per-task camera-near-far UBO. Required when {@link attachments} contains\n * `NORMALIZED_VIEW_DEPTH` (and the input is left unconnected). */\n readonly gpUBO?: GPUBuffer | null;\n /** Flip culling direction. */\n readonly reverseCulling?: boolean;\n}\n\n/** NodeMaterial view that emits geometry textures instead of shaded colour. */\nexport interface NodeGeometryMaterialView extends MaterialView {\n /** @internal Ordered MRT attachment list — index = `@location(i)`. */\n readonly _geometryAttachments: NodeGeometryAttachments;\n /** @internal Optional per-task geometry-params UBO. */\n readonly _gpUBO: GPUBuffer | null;\n /** @internal */\n readonly _reverseCulling: boolean;\n /** @internal Shared per-view resources cache populated lazily by the renderable factory. */\n _geometry?: unknown;\n}\n\n/** Wrap a NodeMaterial as a geometry-output view.\n * - Sets the `NODE_GEOMETRY_OUTPUT` feature bit.\n * - Shadows `_buildGroup` with {@link nodeGeometryGroupBuilder} so the natural\n * `material._buildGroup._rebuildSingle` dispatch builds a geometry-MRT\n * renderable for this view. */\nexport function createNodeGeometryMaterialView(source: NodeMaterial, config: NodeGeometryViewConfig): NodeGeometryMaterialView {\n if (config.emitColor) {\n throw new Error(\"NodeMaterial geometry view: emitColor (real-color target) is not supported — omit targetTexture on the geometry task.\");\n }\n const baseFeatures = source._renderFeatures?.features ?? 0;\n const view = createMaterialView(source, { features: baseFeatures | NODE_GEOMETRY_OUTPUT }) as NodeGeometryMaterialView;\n Object.defineProperty(view, \"_geometryAttachments\", { value: config.attachments, enumerable: false });\n Object.defineProperty(view, \"_gpUBO\", { value: config.gpUBO ?? null, enumerable: false });\n Object.defineProperty(view, \"_reverseCulling\", { value: config.reverseCulling ?? false, enumerable: false });\n Object.defineProperty(view, \"_buildGroup\", { value: nodeGeometryGroupBuilder, enumerable: false });\n return view;\n}\n"],"names":[],"mappings":"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"}
@@ -19,7 +19,7 @@ function blockLoader(key) {
19
19
  case "IridescenceBlock":
20
20
  return () => import("./iridescence-block-B0pRFoOU.js");
21
21
  case "LoopBlock":
22
- return () => import("./loop-block-BFkLFYGm.js");
22
+ return () => import("./loop-block-qTg8vb99.js");
23
23
  case "StorageReadBlock":
24
24
  return () => import("./storage-read-block-BdzhJfln.js");
25
25
  case "StorageWriteBlock":
@@ -38,4 +38,4 @@ async function loadExtraEmitter(key) {
38
38
  export {
39
39
  loadExtraEmitter
40
40
  };
41
- //# sourceMappingURL=node-registry-extra-compat-Ch7ApZHF.js.map
41
+ //# sourceMappingURL=node-registry-extra-compat-dWrv7gpS.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"node-registry-extra-compat-Ch7ApZHF.js","sources":["../src/material/node/node-registry-extra-compat.ts"],"sourcesContent":["import type { BlockEmitter } from \"./node-types.js\";\nimport type { BlockLoader } from \"./node-registry.js\";\n\nfunction blockLoader(key: string): BlockLoader | null {\n switch (key) {\n case \"ElbowBlock\":\n return () => import(\"./blocks/elbow-block.js\");\n case \"NodeMaterialTeleportInBlock\":\n return () => import(\"./blocks/teleport-in-block.js\");\n case \"NodeMaterialTeleportOutBlock\":\n return () => import(\"./blocks/teleport-out-block.js\");\n case \"NodeMaterialDebugBlock\":\n return () => import(\"./blocks/debug-block.js\");\n case \"MeshAttributeExistsBlock\":\n return () => import(\"./blocks/mesh-attribute-exists-block.js\");\n case \"ClipPlanesBlock\":\n return () => import(\"./blocks/clip-planes-block.js\");\n case \"ReflectionTextureBaseBlock\":\n return () => import(\"./blocks/reflection-texture-base-block.js\");\n case \"ImageProcessingBlock\":\n return () => import(\"./blocks/image-processing-block.js\");\n case \"IridescenceBlock\":\n return () => import(\"./blocks/iridescence-block.js\");\n case \"LoopBlock\":\n return () => import(\"./blocks/loop-block.js\");\n case \"StorageReadBlock\":\n return () => import(\"./blocks/storage-read-block.js\");\n case \"StorageWriteBlock\":\n return () => import(\"./blocks/storage-write-block.js\");\n default:\n return null;\n }\n}\n\nexport async function loadExtraEmitter(key: string): Promise<BlockEmitter> {\n const loader = blockLoader(key);\n if (!loader) {\n throw new Error(`NodeMaterial: no compatibility extension emitter registered for block \"${key}\"`);\n }\n return (await loader()).emitter;\n}\n"],"names":[],"mappings":"AAGA,SAAS,YAAY,KAAiC;AAClD,UAAQ,KAAA;AAAA,IACJ,KAAK;AACD,aAAO,MAAM,OAAO,2BAAyB;AAAA,IACjD,KAAK;AACD,aAAO,MAAM,OAAO,iCAA+B;AAAA,IACvD,KAAK;AACD,aAAO,MAAM,OAAO,kCAAgC;AAAA,IACxD,KAAK;AACD,aAAO,MAAM,OAAO,2BAAyB;AAAA,IACjD,KAAK;AACD,aAAO,MAAM,OAAO,2CAAyC;AAAA,IACjE,KAAK;AACD,aAAO,MAAM,OAAO,iCAA+B;AAAA,IACvD,KAAK;AACD,aAAO,MAAM,OAAO,6CAA2C;AAAA,IACnE,KAAK;AACD,aAAO,MAAM,OAAO,sCAAoC;AAAA,IAC5D,KAAK;AACD,aAAO,MAAM,OAAO,iCAA+B;AAAA,IACvD,KAAK;AACD,aAAO,MAAM,OAAO,0BAAwB;AAAA,IAChD,KAAK;AACD,aAAO,MAAM,OAAO,kCAAgC;AAAA,IACxD,KAAK;AACD,aAAO,MAAM,OAAO,mCAAiC;AAAA,IACzD;AACI,aAAO;AAAA,EAAA;AAEnB;AAEA,eAAsB,iBAAiB,KAAoC;AACvE,QAAM,SAAS,YAAY,GAAG;AAC9B,MAAI,CAAC,QAAQ;AACT,UAAM,IAAI,MAAM,0EAA0E,GAAG,GAAG;AAAA,EACpG;AACA,UAAQ,MAAM,UAAU;AAC5B;"}
1
+ {"version":3,"file":"node-registry-extra-compat-dWrv7gpS.js","sources":["../src/material/node/node-registry-extra-compat.ts"],"sourcesContent":["import type { BlockEmitter } from \"./node-types.js\";\nimport type { BlockLoader } from \"./node-registry.js\";\n\nfunction blockLoader(key: string): BlockLoader | null {\n switch (key) {\n case \"ElbowBlock\":\n return () => import(\"./blocks/elbow-block.js\");\n case \"NodeMaterialTeleportInBlock\":\n return () => import(\"./blocks/teleport-in-block.js\");\n case \"NodeMaterialTeleportOutBlock\":\n return () => import(\"./blocks/teleport-out-block.js\");\n case \"NodeMaterialDebugBlock\":\n return () => import(\"./blocks/debug-block.js\");\n case \"MeshAttributeExistsBlock\":\n return () => import(\"./blocks/mesh-attribute-exists-block.js\");\n case \"ClipPlanesBlock\":\n return () => import(\"./blocks/clip-planes-block.js\");\n case \"ReflectionTextureBaseBlock\":\n return () => import(\"./blocks/reflection-texture-base-block.js\");\n case \"ImageProcessingBlock\":\n return () => import(\"./blocks/image-processing-block.js\");\n case \"IridescenceBlock\":\n return () => import(\"./blocks/iridescence-block.js\");\n case \"LoopBlock\":\n return () => import(\"./blocks/loop-block.js\");\n case \"StorageReadBlock\":\n return () => import(\"./blocks/storage-read-block.js\");\n case \"StorageWriteBlock\":\n return () => import(\"./blocks/storage-write-block.js\");\n default:\n return null;\n }\n}\n\nexport async function loadExtraEmitter(key: string): Promise<BlockEmitter> {\n const loader = blockLoader(key);\n if (!loader) {\n throw new Error(`NodeMaterial: no compatibility extension emitter registered for block \"${key}\"`);\n }\n return (await loader()).emitter;\n}\n"],"names":[],"mappings":"AAGA,SAAS,YAAY,KAAiC;AAClD,UAAQ,KAAA;AAAA,IACJ,KAAK;AACD,aAAO,MAAM,OAAO,2BAAyB;AAAA,IACjD,KAAK;AACD,aAAO,MAAM,OAAO,iCAA+B;AAAA,IACvD,KAAK;AACD,aAAO,MAAM,OAAO,kCAAgC;AAAA,IACxD,KAAK;AACD,aAAO,MAAM,OAAO,2BAAyB;AAAA,IACjD,KAAK;AACD,aAAO,MAAM,OAAO,2CAAyC;AAAA,IACjE,KAAK;AACD,aAAO,MAAM,OAAO,iCAA+B;AAAA,IACvD,KAAK;AACD,aAAO,MAAM,OAAO,6CAA2C;AAAA,IACnE,KAAK;AACD,aAAO,MAAM,OAAO,sCAAoC;AAAA,IAC5D,KAAK;AACD,aAAO,MAAM,OAAO,iCAA+B;AAAA,IACvD,KAAK;AACD,aAAO,MAAM,OAAO,0BAAwB;AAAA,IAChD,KAAK;AACD,aAAO,MAAM,OAAO,kCAAgC;AAAA,IACxD,KAAK;AACD,aAAO,MAAM,OAAO,mCAAiC;AAAA,IACzD;AACI,aAAO;AAAA,EAAA;AAEnB;AAEA,eAAsB,iBAAiB,KAAoC;AACvE,QAAM,SAAS,YAAY,GAAG;AAC9B,MAAI,CAAC,QAAQ;AACT,UAAM,IAAI,MAAM,0EAA0E,GAAG,GAAG;AAAA,EACpG;AACA,UAAQ,MAAM,UAAU;AAC5B;"}
@@ -27,7 +27,7 @@ function blockLoader(key) {
27
27
  case "ConditionalBlock":
28
28
  return () => import("./conditional-block-Cd2pbejI.js");
29
29
  case "CurveBlock":
30
- return () => import("./curve-block-Dh_xdUj-.js");
30
+ return () => import("./curve-block-21rT0JjG.js");
31
31
  case "WaveBlock":
32
32
  return () => import("./wave-block-CY_mk1ec.js");
33
33
  case "RandomNumberBlock":
@@ -46,4 +46,4 @@ async function loadExtraEmitter(key) {
46
46
  export {
47
47
  loadExtraEmitter
48
48
  };
49
- //# sourceMappingURL=node-registry-extra-math-6ezzTkPj.js.map
49
+ //# sourceMappingURL=node-registry-extra-math-Bn854sX9.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"node-registry-extra-math-6ezzTkPj.js","sources":["../src/material/node/node-registry-extra-math.ts"],"sourcesContent":["import type { BlockEmitter } from \"./node-types.js\";\nimport type { BlockLoader } from \"./node-registry.js\";\n\nfunction blockLoader(key: string): BlockLoader | null {\n switch (key) {\n case \"DivideBlock\":\n return () => import(\"./blocks/divide-block.js\");\n case \"ModBlock\":\n return () => import(\"./blocks/mod-block.js\");\n case \"ReciprocalBlock\":\n return () => import(\"./blocks/reciprocal-block.js\");\n case \"LengthBlock\":\n return () => import(\"./blocks/length-block.js\");\n case \"DistanceBlock\":\n return () => import(\"./blocks/distance-block.js\");\n case \"CrossBlock\":\n return () => import(\"./blocks/cross-block.js\");\n case \"ReflectBlock\":\n return () => import(\"./blocks/reflect-block.js\");\n case \"RefractBlock\":\n return () => import(\"./blocks/refract-block.js\");\n case \"ArcTan2Block\":\n return () => import(\"./blocks/arc-tan2-block.js\");\n case \"FresnelBlock\":\n return () => import(\"./blocks/fresnel-block.js\");\n case \"OppositeBlock\":\n return () => import(\"./blocks/opposite-block.js\");\n case \"NLerpBlock\":\n return () => import(\"./blocks/nlerp-block.js\");\n case \"ConditionalBlock\":\n return () => import(\"./blocks/conditional-block.js\");\n case \"CurveBlock\":\n return () => import(\"./blocks/curve-block.js\");\n case \"WaveBlock\":\n return () => import(\"./blocks/wave-block.js\");\n case \"RandomNumberBlock\":\n return () => import(\"./blocks/random-number-block.js\");\n default:\n return null;\n }\n}\n\nexport async function loadExtraEmitter(key: string): Promise<BlockEmitter> {\n const loader = blockLoader(key);\n if (!loader) {\n throw new Error(`NodeMaterial: no math extension emitter registered for block \"${key}\"`);\n }\n return (await loader()).emitter;\n}\n"],"names":[],"mappings":"AAGA,SAAS,YAAY,KAAiC;AAClD,UAAQ,KAAA;AAAA,IACJ,KAAK;AACD,aAAO,MAAM,OAAO,4BAA0B;AAAA,IAClD,KAAK;AACD,aAAO,MAAM,OAAO,yBAAuB;AAAA,IAC/C,KAAK;AACD,aAAO,MAAM,OAAO,gCAA8B;AAAA,IACtD,KAAK;AACD,aAAO,MAAM,OAAO,4BAA0B;AAAA,IAClD,KAAK;AACD,aAAO,MAAM,OAAO,8BAA4B;AAAA,IACpD,KAAK;AACD,aAAO,MAAM,OAAO,2BAAyB;AAAA,IACjD,KAAK;AACD,aAAO,MAAM,OAAO,6BAA2B;AAAA,IACnD,KAAK;AACD,aAAO,MAAM,OAAO,6BAA2B;AAAA,IACnD,KAAK;AACD,aAAO,MAAM,OAAO,8BAA4B;AAAA,IACpD,KAAK;AACD,aAAO,MAAM,OAAO,6BAA2B;AAAA,IACnD,KAAK;AACD,aAAO,MAAM,OAAO,8BAA4B;AAAA,IACpD,KAAK;AACD,aAAO,MAAM,OAAO,2BAAyB;AAAA,IACjD,KAAK;AACD,aAAO,MAAM,OAAO,iCAA+B;AAAA,IACvD,KAAK;AACD,aAAO,MAAM,OAAO,2BAAyB;AAAA,IACjD,KAAK;AACD,aAAO,MAAM,OAAO,0BAAwB;AAAA,IAChD,KAAK;AACD,aAAO,MAAM,OAAO,mCAAiC;AAAA,IACzD;AACI,aAAO;AAAA,EAAA;AAEnB;AAEA,eAAsB,iBAAiB,KAAoC;AACvE,QAAM,SAAS,YAAY,GAAG;AAC9B,MAAI,CAAC,QAAQ;AACT,UAAM,IAAI,MAAM,iEAAiE,GAAG,GAAG;AAAA,EAC3F;AACA,UAAQ,MAAM,UAAU;AAC5B;"}
1
+ {"version":3,"file":"node-registry-extra-math-Bn854sX9.js","sources":["../src/material/node/node-registry-extra-math.ts"],"sourcesContent":["import type { BlockEmitter } from \"./node-types.js\";\nimport type { BlockLoader } from \"./node-registry.js\";\n\nfunction blockLoader(key: string): BlockLoader | null {\n switch (key) {\n case \"DivideBlock\":\n return () => import(\"./blocks/divide-block.js\");\n case \"ModBlock\":\n return () => import(\"./blocks/mod-block.js\");\n case \"ReciprocalBlock\":\n return () => import(\"./blocks/reciprocal-block.js\");\n case \"LengthBlock\":\n return () => import(\"./blocks/length-block.js\");\n case \"DistanceBlock\":\n return () => import(\"./blocks/distance-block.js\");\n case \"CrossBlock\":\n return () => import(\"./blocks/cross-block.js\");\n case \"ReflectBlock\":\n return () => import(\"./blocks/reflect-block.js\");\n case \"RefractBlock\":\n return () => import(\"./blocks/refract-block.js\");\n case \"ArcTan2Block\":\n return () => import(\"./blocks/arc-tan2-block.js\");\n case \"FresnelBlock\":\n return () => import(\"./blocks/fresnel-block.js\");\n case \"OppositeBlock\":\n return () => import(\"./blocks/opposite-block.js\");\n case \"NLerpBlock\":\n return () => import(\"./blocks/nlerp-block.js\");\n case \"ConditionalBlock\":\n return () => import(\"./blocks/conditional-block.js\");\n case \"CurveBlock\":\n return () => import(\"./blocks/curve-block.js\");\n case \"WaveBlock\":\n return () => import(\"./blocks/wave-block.js\");\n case \"RandomNumberBlock\":\n return () => import(\"./blocks/random-number-block.js\");\n default:\n return null;\n }\n}\n\nexport async function loadExtraEmitter(key: string): Promise<BlockEmitter> {\n const loader = blockLoader(key);\n if (!loader) {\n throw new Error(`NodeMaterial: no math extension emitter registered for block \"${key}\"`);\n }\n return (await loader()).emitter;\n}\n"],"names":[],"mappings":"AAGA,SAAS,YAAY,KAAiC;AAClD,UAAQ,KAAA;AAAA,IACJ,KAAK;AACD,aAAO,MAAM,OAAO,4BAA0B;AAAA,IAClD,KAAK;AACD,aAAO,MAAM,OAAO,yBAAuB;AAAA,IAC/C,KAAK;AACD,aAAO,MAAM,OAAO,gCAA8B;AAAA,IACtD,KAAK;AACD,aAAO,MAAM,OAAO,4BAA0B;AAAA,IAClD,KAAK;AACD,aAAO,MAAM,OAAO,8BAA4B;AAAA,IACpD,KAAK;AACD,aAAO,MAAM,OAAO,2BAAyB;AAAA,IACjD,KAAK;AACD,aAAO,MAAM,OAAO,6BAA2B;AAAA,IACnD,KAAK;AACD,aAAO,MAAM,OAAO,6BAA2B;AAAA,IACnD,KAAK;AACD,aAAO,MAAM,OAAO,8BAA4B;AAAA,IACpD,KAAK;AACD,aAAO,MAAM,OAAO,6BAA2B;AAAA,IACnD,KAAK;AACD,aAAO,MAAM,OAAO,8BAA4B;AAAA,IACpD,KAAK;AACD,aAAO,MAAM,OAAO,2BAAyB;AAAA,IACjD,KAAK;AACD,aAAO,MAAM,OAAO,iCAA+B;AAAA,IACvD,KAAK;AACD,aAAO,MAAM,OAAO,2BAAyB;AAAA,IACjD,KAAK;AACD,aAAO,MAAM,OAAO,0BAAwB;AAAA,IAChD,KAAK;AACD,aAAO,MAAM,OAAO,mCAAiC;AAAA,IACzD;AACI,aAAO;AAAA,EAAA;AAEnB;AAEA,eAAsB,iBAAiB,KAAoC;AACvE,QAAM,SAAS,YAAY,GAAG;AAC9B,MAAI,CAAC,QAAQ;AACT,UAAM,IAAI,MAAM,iEAAiE,GAAG,GAAG;AAAA,EAC3F;AACA,UAAQ,MAAM,UAAU;AAC5B;"}
@@ -1,4 +1,4 @@
1
- import { c as compileNodePipeline, w as writeNodeUBO, p as packMat4IntoF32, a as writeMeshLightSelection, N as NODE_ESM_SHADOW_OUTPUT, b as NODE_NO_COLOR_OUTPUT, M as MAX_LIGHTS } from "./index-B7Qhw0xL.js";
1
+ import { c as compileNodePipeline, B as BU, w as writeNodeUBO, p as packMat4IntoF32, a as F32, b as writeMeshLightSelection, N as NODE_ESM_SHADOW_OUTPUT, d as NODE_NO_COLOR_OUTPUT, M as MAX_LIGHTS, T as TU, U as U32, e as U8 } from "./index-CLElg2Bo.js";
2
2
  const emptyMorphByEngine = /* @__PURE__ */ new WeakMap();
3
3
  function getEmptyMorph(engine) {
4
4
  const cached = emptyMorphByEngine.get(engine);
@@ -9,23 +9,23 @@ function getEmptyMorph(engine) {
9
9
  label: "node-morph-empty",
10
10
  size: [1, 1],
11
11
  format: "rgba32float",
12
- usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST
12
+ usage: TU.TEXTURE_BINDING | TU.COPY_DST
13
13
  });
14
- engine._device.queue.writeTexture({ texture }, new Float32Array([0, 0, 0, 0]).buffer, { bytesPerRow: 16 }, { width: 1, height: 1 });
14
+ engine._device.queue.writeTexture({ texture }, new F32([0, 0, 0, 0]).buffer, { bytesPerRow: 16 }, { width: 1, height: 1 });
15
15
  const ubo = new ArrayBuffer(32);
16
- const u32 = new Uint32Array(ubo, 16, 4);
16
+ const u32 = new U32(ubo, 16, 4);
17
17
  u32[0] = 0;
18
18
  u32[1] = 1;
19
19
  u32[2] = 1;
20
- const weightsBuffer = engine._device.createBuffer({ label: "node-morph-empty-ubo", size: 32, usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST });
21
- engine._device.queue.writeBuffer(weightsBuffer, 0, new Uint8Array(ubo));
20
+ const weightsBuffer = engine._device.createBuffer({ label: "node-morph-empty-ubo", size: 32, usage: BU.UNIFORM | BU.COPY_DST });
21
+ engine._device.queue.writeBuffer(weightsBuffer, 0, new U8(ubo));
22
22
  const entry = { texture, weightsBuffer };
23
23
  emptyMorphByEngine.set(engine, entry);
24
24
  return entry;
25
25
  }
26
26
  function buildNodeMeshRenderables(scene, meshes, materialOverride) {
27
27
  var _a, _b, _c, _d, _e, _f, _g, _h;
28
- const engine = scene.engine;
28
+ const engine = scene.surface.engine;
29
29
  const device = engine._device;
30
30
  const byMaterial = /* @__PURE__ */ new Map();
31
31
  for (const m of meshes) {
@@ -64,7 +64,7 @@ function buildNodeMeshRenderables(scene, meshes, materialOverride) {
64
64
  const meshBGL = compile._meshBGL;
65
65
  let nodeUBO = null;
66
66
  if (compile._nodeUboBinding !== null && compile._nodeUboSize > 0) {
67
- nodeUBO = device.createBuffer({ label: "node-ubo", size: compile._nodeUboSize, usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST });
67
+ nodeUBO = device.createBuffer({ label: "node-ubo", size: compile._nodeUboSize, usage: BU.UNIFORM | BU.COPY_DST });
68
68
  writeNodeUBO(engine, nodeUBO, material);
69
69
  material._nodeUBO = nodeUBO;
70
70
  }
@@ -72,8 +72,8 @@ function buildNodeMeshRenderables(scene, meshes, materialOverride) {
72
72
  const packets = [];
73
73
  for (const _mesh of matMeshes) {
74
74
  const meshUboBytes = 96 + 16 * Math.ceil(MAX_LIGHTS / 4);
75
- const _meshUBO = device.createBuffer({ label: "node-mesh-ubo", size: meshUboBytes + 15 & -16, usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST });
76
- const _meshScratch = new Float32Array((meshUboBytes + 15 & -16) / 4);
75
+ const _meshUBO = device.createBuffer({ label: "node-mesh-ubo", size: meshUboBytes + 15 & -16, usage: BU.UNIFORM | BU.COPY_DST });
76
+ const _meshScratch = new F32((meshUboBytes + 15 & -16) / 4);
77
77
  _packMeshWorld(_meshScratch, _mesh.worldMatrix, 0, 0);
78
78
  const recv = _mesh.receiveShadows ? 1 : 0;
79
79
  _meshScratch[16] = recv;
@@ -252,7 +252,7 @@ function getZeroAttrBuffer(engine, gpu, name) {
252
252
  }
253
253
  const vertexCount = gpu.positionBuffer.size / 12;
254
254
  const stride = name === "uv" || name === "uv2" ? 8 : name === "normal" ? 12 : name === "tangent" || name === "color" ? 16 : 16;
255
- const buf = engine._device.createBuffer({ label: `node-zero-${name}`, size: vertexCount * stride, usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST });
255
+ const buf = engine._device.createBuffer({ label: `node-zero-${name}`, size: vertexCount * stride, usage: BU.VERTEX | BU.COPY_DST });
256
256
  cache.set(name, buf);
257
257
  return buf;
258
258
  }
@@ -281,6 +281,8 @@ function writeAttributeFlags(mesh, scratch) {
281
281
  scratch[19] = gpu.hasColor ? 1 : 0;
282
282
  }
283
283
  export {
284
- buildNodeMeshRenderables
284
+ buildNodeMeshRenderables,
285
+ getAttrBuffer,
286
+ writeAttributeFlags
285
287
  };
286
- //# sourceMappingURL=node-renderable-CS0CmsSp.js.map
288
+ //# sourceMappingURL=node-renderable-B5G8WcdH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-renderable-B5G8WcdH.js","sources":["../src/material/node/node-renderable.ts"],"sourcesContent":["/** Node Material — MeshGroupBuilder + Renderable implementation.\n *\n * Parallel to `standard-renderable.ts`. Each NodeMaterial owns one compile\n * result (pipeline + BGLs); this builder creates per-mesh GPU resources\n * (mesh UBO, node UBO, bind groups) and returns a Renderable\n * that emits draws in the main pass.\n */\n\nimport { F32, U32, U8 } from \"../../engine/typed-arrays.js\";\nimport { TU, BU } from \"../../engine/gpu-flags.js\";\nimport type { EngineContext } from \"../../engine/engine.js\";\nimport type { SceneContext } from \"../../scene/scene.js\";\nimport type { Mesh } from \"../../mesh/mesh.js\";\nimport type { MeshGPU } from \"../../mesh/mesh.js\";\nimport type { MeshGroupBuildResult, Renderable } from \"../../render/renderable.js\";\nimport type { Material } from \"../material.js\";\nimport type { NodeMaterial } from \"./node-material.js\";\nimport { writeNodeUBO } from \"./node-material.js\";\nimport { compileNodePipeline } from \"./node-pipeline.js\";\nimport { NODE_ESM_SHADOW_OUTPUT, NODE_NO_COLOR_OUTPUT } from \"./node-flags.js\";\nimport { writeMeshLightSelection } from \"../../render/lights-ubo.js\";\nimport { MAX_LIGHTS } from \"../../light/types.js\";\nimport { packMat4IntoF32 } from \"../../math/pack-mat4-into-f32.js\";\n\n// Per-engine cached no-op morph target: a 1×1 rgba32float texture + a UBO with\n// count=0 + sensible texWidth/rowsPerBand. Meshes without their own morph\n// targets reuse this so materials that contain a MorphTargetsBlock still work\n// (the WGSL loops over `count` and passes through when zero).\nconst emptyMorphByEngine = new WeakMap<EngineContext, { texture: GPUTexture; weightsBuffer: GPUBuffer }>();\nfunction getEmptyMorph(engine: EngineContext): { texture: GPUTexture; weightsBuffer: GPUBuffer } {\n const cached = emptyMorphByEngine.get(engine);\n if (cached) {\n return cached;\n }\n const texture = engine._device.createTexture({\n label: \"node-morph-empty\",\n size: [1, 1],\n format: \"rgba32float\",\n usage: TU.TEXTURE_BINDING | TU.COPY_DST,\n });\n engine._device.queue.writeTexture({ texture }, new F32([0, 0, 0, 0]).buffer, { bytesPerRow: 16 }, { width: 1, height: 1 });\n const ubo = new ArrayBuffer(32);\n const u32 = new U32(ubo, 16, 4);\n u32[0] = 0; // count\n u32[1] = 1; // texWidth\n u32[2] = 1; // rowsPerBand\n const weightsBuffer = engine._device.createBuffer({ label: \"node-morph-empty-ubo\", size: 32, usage: BU.UNIFORM | BU.COPY_DST });\n engine._device.queue.writeBuffer(weightsBuffer, 0, new U8(ubo));\n const entry = { texture, weightsBuffer };\n emptyMorphByEngine.set(engine, entry);\n return entry;\n}\n\ninterface NodePacket {\n readonly _mesh: Mesh;\n readonly _meshUBO: GPUBuffer;\n readonly _meshBG: GPUBindGroup;\n readonly _meshScratch: Float32Array;\n _lastWorldVersion: number;\n _lastReceivesShadow: number;\n _lastLightsCount: number;\n}\n\ntype NodeRenderPass = GPURenderPassEncoder | GPURenderBundleEncoder;\n\n/** Build NME renderables for a set of meshes that share a NodeMaterial. */\nexport function buildNodeMeshRenderables(scene: SceneContext, meshes: Mesh[], materialOverride?: Material): MeshGroupBuildResult {\n const engine = scene.surface.engine;\n const device = engine._device;\n\n // All meshes in this group use the same NodeMaterial (scene-core batches by ctor).\n // We deliberately do NOT re-group by material instance: each renderable loops\n // packets of the same pipeline. For phase 1 every mesh with an NME material\n // shares that one material instance.\n const byMaterial = new Map<NodeMaterial, Mesh[]>();\n for (const m of meshes) {\n const mat = (materialOverride ?? m.material) as NodeMaterial;\n let list = byMaterial.get(mat);\n if (!list) {\n list = [];\n byMaterial.set(mat, list);\n }\n list.push(m);\n }\n\n const renderables: Renderable[] = [];\n\n for (const [material, matMeshes] of byMaterial) {\n const featureFlags = material._renderFeatures?.features ?? 0;\n const noColorOutput = (featureFlags & NODE_NO_COLOR_OUTPUT) !== 0;\n const esmShadowOutput = (featureFlags & NODE_ESM_SHADOW_OUTPUT) !== 0;\n const shadowOutput = noColorOutput || esmShadowOutput;\n const compile = shadowOutput\n ? compileNodePipeline(material._state, material._vertexBody, material._fragmentBody, {\n _engine: engine,\n _format: esmShadowOutput ? \"rgba16float\" : engine.format,\n _depthStencilFormat: \"depth32float\",\n _depthCompare: \"less-equal\",\n _msaaSamples: 1,\n _backFaceCulling: material._graph.backFaceCulling,\n _noColorOutput: noColorOutput,\n _esmShadowOutput: esmShadowOutput,\n _esmShadowDepthCode: esmShadowOutput ? material._esmShadowDepthCode : undefined,\n _alphaMode: esmShadowOutput ? 0 : undefined,\n // The shared fragment body still references env IBL/BRDF samplers\n // (e.g. nmeBrdfLUT) even in the no-color shadow-depth variant, so we\n // must emit the env decls + BGL entries here too; otherwise WGSL fails\n // to resolve those identifiers. _envEmitter is undefined for non-env\n // materials (state.usesEnv === false), leaving them unaffected.\n _envEmitter: material._envHelpers?.emitEnv,\n })\n : material._compile;\n const meshBGL = compile._meshBGL;\n\n // Node UBO is per-material (same across all meshes using it).\n let nodeUBO: GPUBuffer | null = null;\n if (compile._nodeUboBinding !== null && compile._nodeUboSize > 0) {\n nodeUBO = device.createBuffer({ label: \"node-ubo\", size: compile._nodeUboSize, usage: BU.UNIFORM | BU.COPY_DST });\n writeNodeUBO(engine, nodeUBO, material);\n material._nodeUBO = nodeUBO;\n }\n\n const _packMeshWorld = engine._makePackMeshWorld?.(scene as SceneContext) ?? packMat4IntoF32;\n const packets: NodePacket[] = [];\n for (const _mesh of matMeshes) {\n // Mesh UBO layout: world (64B) + receivesShadow (vec4, 16B) + lightCount/indices.\n const meshUboBytes = 96 + 16 * Math.ceil(MAX_LIGHTS / 4);\n const _meshUBO = device.createBuffer({ label: \"node-mesh-ubo\", size: (meshUboBytes + 15) & ~15, usage: BU.UNIFORM | BU.COPY_DST });\n const _meshScratch = new F32(((meshUboBytes + 15) & ~15) / 4);\n _packMeshWorld(_meshScratch, _mesh.worldMatrix, 0, 0);\n const recv = _mesh.receiveShadows ? 1 : 0;\n _meshScratch[16] = recv;\n if (compile._usesMeshAttributeFlags) {\n writeAttributeFlags(_mesh, _meshScratch);\n }\n writeMeshLightSelection(_mesh, scene.lights, _meshScratch.subarray(4));\n device.queue.writeBuffer(_meshUBO, 0, _meshScratch);\n\n const entries: GPUBindGroupEntry[] = [{ binding: 0, resource: { buffer: _meshUBO } }];\n if (nodeUBO) {\n entries.push({ binding: compile._nodeUboBinding!, resource: { buffer: nodeUBO } });\n }\n for (const tb of compile._textureBindings) {\n const slot = material._textureSlots.get(tb._name);\n const tex = slot?.current;\n if (!tex) {\n throw new Error(\n `NodeMaterial: texture binding \"${tb._name}\" not set. Provide it via options.textures or material.inputs[\"${tb._name}\"].texture before the first render.`\n );\n }\n entries.push({ binding: tb._texBinding, resource: tex.view });\n entries.push({ binding: tb._sampBinding, resource: tex.sampler });\n }\n if (compile._morphBindings !== null) {\n const mt = (_mesh as { morphTargets?: { texture: GPUTexture; weightsBuffer: GPUBuffer } | null }).morphTargets ?? getEmptyMorph(engine);\n entries.push({ binding: compile._morphBindings._textureBinding, resource: mt.texture.createView() });\n entries.push({ binding: compile._morphBindings._uboBinding, resource: { buffer: mt.weightsBuffer } });\n }\n if (compile._envBindings) {\n material._envHelpers!.pushEnvBindGroupEntries(scene, compile._envBindings, entries);\n }\n for (let si = 0; si < compile._shadowBindings.length; si++) {\n const sb = compile._shadowBindings[si]!;\n const sg = material._shadowGenerators[si];\n if (!sg) {\n throw new Error(`NodeMaterial: material requires shadow generator #${si} but none was supplied to parseNodeMaterialFromSnippet({ shadowGenerators }).`);\n }\n entries.push({ binding: sb._texBinding, resource: sg._depthTexture.createView() });\n entries.push({ binding: sb._sampBinding, resource: sg._depthSampler });\n entries.push({ binding: sb._uboBinding, resource: { buffer: sg._shadowUBO } });\n }\n if (compile._esmShadowParamsBinding !== null) {\n entries.push({\n binding: compile._esmShadowParamsBinding,\n resource: { buffer: material._esmShadowParamsUBO! },\n });\n }\n const _meshBG = device.createBindGroup({ label: \"node-mesh-bg\", layout: meshBGL, entries });\n\n packets.push({\n _mesh,\n _meshUBO,\n _meshBG,\n _meshScratch,\n _lastWorldVersion: _mesh.worldMatrixVersion,\n _lastReceivesShadow: recv,\n _lastLightsCount: scene.lights.length,\n });\n }\n\n // Vertex attribute order (matches compile.state — captured on material).\n const attrNames = material._vertexAttrNames;\n\n const updatePacketUBO = (pkt: NodePacket): void => {\n const recv = pkt._mesh.receiveShadows ? 1 : 0;\n const worldVersion = pkt._mesh.worldMatrixVersion;\n const worldChanged = worldVersion !== pkt._lastWorldVersion;\n const recvChanged = recv !== pkt._lastReceivesShadow;\n const lightsChanged = scene.lights.length !== pkt._lastLightsCount;\n if (worldChanged || recvChanged || lightsChanged) {\n _packMeshWorld(pkt._meshScratch, pkt._mesh.worldMatrix, 0, 0);\n pkt._meshScratch[16] = recv;\n if (compile._usesMeshAttributeFlags) {\n writeAttributeFlags(pkt._mesh, pkt._meshScratch);\n }\n writeMeshLightSelection(pkt._mesh, scene.lights, pkt._meshScratch.subarray(4));\n device.queue.writeBuffer(pkt._meshUBO, 0, pkt._meshScratch as Float32Array<ArrayBuffer>);\n pkt._lastWorldVersion = worldVersion;\n pkt._lastReceivesShadow = recv;\n pkt._lastLightsCount = scene.lights.length;\n }\n };\n\n const updateNodeUBO = (): void => {\n if (nodeUBO && material._uboDirty) {\n material._uboDirty = false;\n writeNodeUBO(engine, nodeUBO, material);\n }\n };\n\n const drawPacket = (pass: NodeRenderPass, pkt: NodePacket): void => {\n const g = pkt._mesh._gpu;\n for (let i = 0; i < attrNames.length; i++) {\n const buf = getAttrBuffer(engine, g, attrNames[i]!);\n pass.setVertexBuffer(i, buf);\n }\n pass.setIndexBuffer(g.indexBuffer, g.indexFormat);\n pass.setBindGroup(1, pkt._meshBG);\n pass.drawIndexed(g.indexCount);\n };\n\n const isTransparent = !noColorOutput && !esmShadowOutput && material._needsAlphaBlending;\n\n if (isTransparent) {\n // Transparent materials: one renderable per mesh so each gets an\n // independent _worldCenter for back-to-front distance sorting.\n for (const pkt of packets) {\n const wm = pkt._mesh.worldMatrix as unknown as ArrayLike<number>;\n const cx = pkt._mesh.position?.x ?? wm[12]!;\n const cy = pkt._mesh.position?.y ?? wm[13]!;\n const cz = pkt._mesh.position?.z ?? wm[14]!;\n const sortCenter: [number, number, number] = [cx, cy, cz];\n const _baseUpdate = (): void => {\n updatePacketUBO(pkt);\n updateNodeUBO();\n // Update world center for sorting.\n const m = pkt._mesh.worldMatrix as unknown as ArrayLike<number>;\n sortCenter[0] = m[12]!;\n sortCenter[1] = m[13]!;\n sortCenter[2] = m[14]!;\n };\n const _invalidate = (): void => {\n pkt._lastWorldVersion = -1;\n };\n const update = engine._wrapRenderableForFO?.(_baseUpdate, scene as SceneContext, _invalidate) ?? _baseUpdate;\n const draw = (pass: NodeRenderPass): number => {\n drawPacket(pass, pkt);\n return 1;\n };\n const rTrans: Renderable = {\n order: 200,\n isTransparent: true,\n mesh: pkt._mesh,\n _worldCenter: sortCenter,\n bind() {\n return { renderable: rTrans, pipeline: compile._pipeline, update, draw };\n },\n };\n renderables.push(rTrans);\n }\n } else {\n // Opaque: batch all meshes into one renderable for state efficiency.\n const _baseUpdate = (): void => {\n for (const pkt of packets) {\n updatePacketUBO(pkt);\n }\n updateNodeUBO();\n };\n const _invalidate = (): void => {\n for (const pkt of packets) {\n pkt._lastWorldVersion = -1;\n }\n };\n const update = engine._wrapRenderableForFO?.(_baseUpdate, scene as SceneContext, _invalidate) ?? _baseUpdate;\n const draw = (pass: NodeRenderPass): number => {\n let draws = 0;\n for (const pkt of packets) {\n drawPacket(pass, pkt);\n draws++;\n }\n return draws;\n };\n const rOpaque: Renderable = {\n order: 100,\n isTransparent: false,\n bind() {\n return { renderable: rOpaque, pipeline: compile._pipeline, update, draw };\n },\n };\n renderables.push(rOpaque);\n }\n }\n\n const rebuildSingle = (s: SceneContext, mesh: Mesh, override?: Material): Renderable => {\n return buildNodeMeshRenderables(s, [mesh], override).renderables[0]!;\n };\n\n return { renderables, rebuildSingle };\n}\n\n// Per-gpu-object cached zero buffers for attributes that a NodeMaterial's\n// vertex layout declares but the mesh itself doesn't provide (e.g. vertex\n// color on meshes that don't use VERTEXCOLOR). We allocate one zero buffer\n// lazily per gpu object, sized to its position vertex count × stride.\nconst zeroAttrCache = new WeakMap<object, Map<string, GPUBuffer>>();\nfunction getZeroAttrBuffer(engine: EngineContext, gpu: MeshGPU, name: string): GPUBuffer {\n let cache = zeroAttrCache.get(gpu as unknown as object);\n if (!cache) {\n cache = new Map();\n zeroAttrCache.set(gpu as unknown as object, cache);\n }\n const existing = cache.get(name);\n if (existing) {\n return existing;\n }\n // position buffer size in bytes / 12 (vec3) = vertex count.\n const vertexCount = gpu.positionBuffer.size / 12;\n const stride = name === \"uv\" || name === \"uv2\" ? 8 : name === \"normal\" ? 12 : name === \"tangent\" || name === \"color\" ? 16 : 16;\n const buf = engine._device.createBuffer({ label: `node-zero-${name}`, size: vertexCount * stride, usage: BU.VERTEX | BU.COPY_DST });\n // Initialize with zeros (buffer starts zeroed when not mappedAtCreation).\n cache.set(name, buf);\n return buf;\n}\n\nexport function getAttrBuffer(engine: EngineContext, gpu: MeshGPU, name: string): GPUBuffer {\n switch (name) {\n case \"position\":\n return gpu.positionBuffer;\n case \"normal\":\n return gpu.normalBuffer;\n case \"uv\":\n return gpu.uvBuffer;\n case \"uv2\":\n return gpu.uv2Buffer ?? getZeroAttrBuffer(engine, gpu, \"uv2\");\n case \"tangent\":\n return gpu.tangentBuffer ?? getZeroAttrBuffer(engine, gpu, \"tangent\");\n case \"color\":\n return gpu.colorBuffer ?? getZeroAttrBuffer(engine, gpu, \"color\");\n default:\n throw new Error(`NodeMaterial: unsupported attribute \"${name}\"`);\n }\n}\n\nexport function writeAttributeFlags(mesh: Mesh, scratch: Float32Array): void {\n const gpu = mesh._gpu;\n scratch[17] = gpu.hasUv === false ? 0 : 1;\n scratch[18] = gpu.hasTangent ? 1 : 0;\n scratch[19] = gpu.hasColor ? 1 : 0;\n}\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { M as MAX_LIGHTS } from "./index-B7Qhw0xL.js";
1
+ import { M as MAX_LIGHTS, S as SS } from "./index-CLElg2Bo.js";
2
2
  const SHADOW_FACTORS_TYPE = `array<f32, ${MAX_LIGHTS}>`;
3
3
  const SHADOW_FACTORS_ONE = `${SHADOW_FACTORS_TYPE}(${new Array(MAX_LIGHTS).fill("1.0").join(", ")})`;
4
4
  function emitShadow(shadowLights, startBinding, varyings) {
@@ -64,8 +64,8 @@ function emitShadow(shadowLights, startBinding, varyings) {
64
64
  `_sf[${sl.lightIndex}] = computeShadowPCF${suf}(input.vPosFromLight${suf}, input.vDepthMetric${suf}, shadowInfo${suf}.shadowsInfo.x, shadowInfo${suf}.shadowsInfo.y, shadowInfo${suf}.shadowsInfo.z);`
65
65
  );
66
66
  _bglEntries.push(
67
- { binding: _texBinding, visibility: GPUShaderStage.FRAGMENT, texture: { sampleType: "depth", viewDimension: "2d" } },
68
- { binding: _sampBinding, visibility: GPUShaderStage.FRAGMENT, sampler: { type: "comparison" } }
67
+ { binding: _texBinding, visibility: SS.FRAGMENT, texture: { sampleType: "depth", viewDimension: "2d" } },
68
+ { binding: _sampBinding, visibility: SS.FRAGMENT, sampler: { type: "comparison" } }
69
69
  );
70
70
  } else {
71
71
  wgslDecls.push(
@@ -89,8 +89,8 @@ fn computeShadowESM${suf}(posFromLight: vec4<f32>, depthMetric: f32, darkness: f
89
89
  `_sf[${sl.lightIndex}] = computeShadowESM${suf}(input.vPosFromLight${suf}, input.vDepthMetric${suf}, shadowInfo${suf}.shadowsInfo.x, shadowInfo${suf}.shadowsInfo.z, shadowInfo${suf}.shadowsInfo.w);`
90
90
  );
91
91
  _bglEntries.push(
92
- { binding: _texBinding, visibility: GPUShaderStage.FRAGMENT, texture: { sampleType: "float", viewDimension: "2d" } },
93
- { binding: _sampBinding, visibility: GPUShaderStage.FRAGMENT, sampler: { type: "filtering" } }
92
+ { binding: _texBinding, visibility: SS.FRAGMENT, texture: { sampleType: "float", viewDimension: "2d" } },
93
+ { binding: _sampBinding, visibility: SS.FRAGMENT, sampler: { type: "filtering" } }
94
94
  );
95
95
  }
96
96
  vertLines.push(
@@ -99,7 +99,7 @@ fn computeShadowESM${suf}(posFromLight: vec4<f32>, depthMetric: f32, darkness: f
99
99
  );
100
100
  _bglEntries.push({
101
101
  binding: _uboBinding,
102
- visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,
102
+ visibility: SS.VERTEX | SS.FRAGMENT,
103
103
  buffer: { type: "uniform", minBindingSize: 96 }
104
104
  });
105
105
  }
@@ -119,4 +119,4 @@ fn computeShadowESM${suf}(posFromLight: vec4<f32>, depthMetric: f32, darkness: f
119
119
  export {
120
120
  emitShadow
121
121
  };
122
- //# sourceMappingURL=node-shadow-CpnrdvtJ.js.map
122
+ //# sourceMappingURL=node-shadow-CVIUlNf0.js.map