@babylonjs/lite 0.1.1 → 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 (262) hide show
  1. package/_mat4-storage-f64-CjDoht2w.js +11 -0
  2. package/_mat4-storage-f64-CjDoht2w.js.map +1 -0
  3. package/{alpha-test-fragment-CUiHCw7W.js → alpha-test-fragment-B7DjSnF7.js} +2 -2
  4. package/{alpha-test-fragment-CUiHCw7W.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-yHTqabU3.js → background-dds-skybox-BEX309u3.js} +14 -14
  7. package/background-dds-skybox-BEX309u3.js.map +1 -0
  8. package/{background-ground-DIw6D3qf.js → background-ground-BU0HOcM4.js} +20 -20
  9. package/background-ground-BU0HOcM4.js.map +1 -0
  10. package/{background-hdr-skybox-c4uuTmkP.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-DPGBpPbm.js → background-solid-skybox-BrH2fXSu.js} +12 -13
  13. package/background-solid-skybox-BrH2fXSu.js.map +1 -0
  14. package/{billboard-renderable-D8mlVGCd.js → billboard-renderable-BHWryAeC.js} +46 -10
  15. package/billboard-renderable-BHWryAeC.js.map +1 -0
  16. package/{clamp-block-BdII67hT.js → clamp-block-DqbwnQGW.js} +2 -2
  17. package/{clamp-block-BdII67hT.js.map → clamp-block-DqbwnQGW.js.map} +1 -1
  18. package/{clearcoat-fragment-LCiG98Rf.js → clearcoat-fragment-D6FSCie1.js} +2 -2
  19. package/{clearcoat-fragment-LCiG98Rf.js.map → clearcoat-fragment-D6FSCie1.js.map} +1 -1
  20. package/{create-skeleton-C9JdIJnb.js → create-skeleton-D_uplboC.js} +9 -9
  21. package/create-skeleton-D_uplboC.js.map +1 -0
  22. package/{cubemap-skybox-material-DvXMVc4k.js → cubemap-skybox-material-DQcMMdf-.js} +6 -7
  23. package/cubemap-skybox-material-DQcMMdf-.js.map +1 -0
  24. package/{curve-block-BlJpXVYv.js → curve-block-21rT0JjG.js} +2 -2
  25. package/{curve-block-BlJpXVYv.js.map → curve-block-21rT0JjG.js.map} +1 -1
  26. package/{emissive-fragment-BnNvbBCw.js → emissive-fragment-C5FtBs3y.js} +3 -3
  27. package/emissive-fragment-C5FtBs3y.js.map +1 -0
  28. package/{esm-shadow-view-DN9HIaM4.js → esm-shadow-view-Cl3rPGof.js} +2 -2
  29. package/{esm-shadow-view-DN9HIaM4.js.map → esm-shadow-view-Cl3rPGof.js.map} +1 -1
  30. package/{esm-shadow-view-Dk9NFtLq.js → esm-shadow-view-Gtd1LWRP.js} +2 -2
  31. package/{esm-shadow-view-Dk9NFtLq.js.map → esm-shadow-view-Gtd1LWRP.js.map} +1 -1
  32. package/{esm-shadow-view-DGKdF1NI.js → esm-shadow-view-c5YV4Eg9.js} +2 -2
  33. package/{esm-shadow-view-DGKdF1NI.js.map → esm-shadow-view-c5YV4Eg9.js.map} +1 -1
  34. package/{gaussian-splatting-pipeline-sh-DgJl7l56.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-D7uyTyO3.js → gltf-animation-K_zZxj_d.js} +7 -7
  41. package/gltf-animation-K_zZxj_d.js.map +1 -0
  42. package/gltf-color-normalize-Qxl-9C48.js +29 -0
  43. package/gltf-color-normalize-Qxl-9C48.js.map +1 -0
  44. package/{gltf-ext-basisu-CPg5kPrx.js → gltf-ext-basisu-CDbPclzZ.js} +53 -18
  45. package/gltf-ext-basisu-CDbPclzZ.js.map +1 -0
  46. package/{gltf-ext-node-visibility-MafA9ot2.js → gltf-ext-node-visibility-DXCJEYr6.js} +2 -2
  47. package/{gltf-ext-node-visibility-MafA9ot2.js.map → gltf-ext-node-visibility-DXCJEYr6.js.map} +1 -1
  48. package/{gltf-ext-quantization-CpZyLDIz.js → gltf-ext-quantization-CvHI_0Vg.js} +4 -3
  49. package/gltf-ext-quantization-CvHI_0Vg.js.map +1 -0
  50. package/{gltf-ext-uv-transform-CE_-T1Tr.js → gltf-ext-uv-transform-DgYazJBs.js} +2 -2
  51. package/{gltf-ext-uv-transform-CE_-T1Tr.js.map → gltf-ext-uv-transform-DgYazJBs.js.map} +1 -1
  52. package/{gltf-feature-animation-pointer-BjpwOOqo.js → gltf-feature-animation-pointer-D1RJRFBw.js} +9 -9
  53. package/gltf-feature-animation-pointer-D1RJRFBw.js.map +1 -0
  54. package/{gltf-feature-animations-CCizegp8.js → gltf-feature-animations-Cmc1uoIu.js} +2 -2
  55. package/{gltf-feature-animations-CCizegp8.js.map → gltf-feature-animations-Cmc1uoIu.js.map} +1 -1
  56. package/{gltf-feature-draco-yGSMGTE3.js → gltf-feature-draco-CKKzT5E3.js} +6 -5
  57. package/gltf-feature-draco-CKKzT5E3.js.map +1 -0
  58. package/{gltf-feature-gpu-instancing-2e_CFQnl.js → gltf-feature-gpu-instancing-n87SO6Vh.js} +7 -6
  59. package/gltf-feature-gpu-instancing-n87SO6Vh.js.map +1 -0
  60. package/{gltf-feature-lights-punctual-DDDg4j0U.js → gltf-feature-lights-punctual-Ckm3ciL8.js} +5 -5
  61. package/{gltf-feature-lights-punctual-DDDg4j0U.js.map → gltf-feature-lights-punctual-Ckm3ciL8.js.map} +1 -1
  62. package/{gltf-feature-meshopt-Des96YFI.js → gltf-feature-meshopt-DLC4SF1E.js} +7 -6
  63. package/gltf-feature-meshopt-DLC4SF1E.js.map +1 -0
  64. package/{gltf-feature-morph-CKCw6tkX.js → gltf-feature-morph-Cjtu7hYa.js} +4 -4
  65. package/gltf-feature-morph-Cjtu7hYa.js.map +1 -0
  66. package/gltf-feature-registry-C63Hjp9w.js +59 -0
  67. package/gltf-feature-registry-C63Hjp9w.js.map +1 -0
  68. package/{gltf-feature-skeleton-D8hWLqi2.js → gltf-feature-skeleton-DKbOGidp.js} +3 -3
  69. package/{gltf-feature-skeleton-D8hWLqi2.js.map → gltf-feature-skeleton-DKbOGidp.js.map} +1 -1
  70. package/{gltf-feature-variants-Ds6v9byg.js → gltf-feature-variants-Cmzu0O0e.js} +2 -2
  71. package/{gltf-feature-variants-Ds6v9byg.js.map → gltf-feature-variants-Cmzu0O0e.js.map} +1 -1
  72. package/{gltf-glb-parser-D6UZWFuC.js → gltf-glb-parser-Cj5MHS-v.js} +5 -4
  73. package/gltf-glb-parser-Cj5MHS-v.js.map +1 -0
  74. package/{gltf-interleave-DGnUlz28.js → gltf-interleave-gHf9_t0i.js} +14 -14
  75. package/gltf-interleave-gHf9_t0i.js.map +1 -0
  76. package/gltf-normals-b2h74380.js +37 -0
  77. package/gltf-normals-b2h74380.js.map +1 -0
  78. package/{gltf-pbr-builder-ext-BFOxOCnQ.js → gltf-pbr-builder-ext-edNcjwPf.js} +5 -5
  79. package/gltf-pbr-builder-ext-edNcjwPf.js.map +1 -0
  80. package/{gltf-variants-DFbr8EES.js → gltf-variants-CPxNdtP4.js} +4 -4
  81. package/{gltf-variants-DFbr8EES.js.map → gltf-variants-CPxNdtP4.js.map} +1 -1
  82. package/{gs-picking-pipeline-DzfMASL9.js → gs-picking-pipeline-DYaW_Lg3.js} +14 -14
  83. package/gs-picking-pipeline-DYaW_Lg3.js.map +1 -0
  84. package/havok-floating-origin-Dr-18Nds.js +198 -0
  85. package/havok-floating-origin-Dr-18Nds.js.map +1 -0
  86. package/index-CLElg2Bo.js +39209 -0
  87. package/index-CLElg2Bo.js.map +1 -0
  88. package/index-CYZDclhF.js +918 -0
  89. package/index-CYZDclhF.js.map +1 -0
  90. package/index-SMJ67XwT.js +3330 -0
  91. package/index-SMJ67XwT.js.map +1 -0
  92. package/index.d.ts +2508 -119
  93. package/index.js +444 -302
  94. package/{input-block-DgAJBzN_.js → input-block-DqEedWF2.js} +2 -2
  95. package/{input-block-DgAJBzN_.js.map → input-block-DqEedWF2.js.map} +1 -1
  96. package/{iridescence-fragment-Gymp7or5.js → iridescence-fragment-BHU59-gQ.js} +2 -2
  97. package/{iridescence-fragment-Gymp7or5.js.map → iridescence-fragment-BHU59-gQ.js.map} +1 -1
  98. package/{light-block-B11ew7FA.js → light-block-Bv37V8vl.js} +2 -2
  99. package/{light-block-B11ew7FA.js.map → light-block-Bv37V8vl.js.map} +1 -1
  100. package/{loop-block-Bb23EOMb.js → loop-block-qTg8vb99.js} +2 -2
  101. package/{loop-block-Bb23EOMb.js.map → loop-block-qTg8vb99.js.map} +1 -1
  102. package/{morph-fragment-DOVo70gP.js → morph-fragment-BRCUr2wQ.js} +2 -2
  103. package/{morph-fragment-DOVo70gP.js.map → morph-fragment-BRCUr2wQ.js.map} +1 -1
  104. package/{multilight-wgsl-BGyiIOp3.js → multilight-wgsl-DMeppAdZ.js} +4 -4
  105. package/{multilight-wgsl-BGyiIOp3.js.map → multilight-wgsl-DMeppAdZ.js.map} +1 -1
  106. package/{node-env-BPZXZzBf.js → node-env-Bc559GmY.js} +6 -5
  107. package/node-env-Bc559GmY.js.map +1 -0
  108. package/node-geometry-view-COmWsRXK.js +291 -0
  109. package/node-geometry-view-COmWsRXK.js.map +1 -0
  110. package/{node-registry-extra-compat-Dhrw8fDQ.js → node-registry-extra-compat-dWrv7gpS.js} +2 -2
  111. package/{node-registry-extra-compat-Dhrw8fDQ.js.map → node-registry-extra-compat-dWrv7gpS.js.map} +1 -1
  112. package/{node-registry-extra-math-CsAHvIZo.js → node-registry-extra-math-Bn854sX9.js} +2 -2
  113. package/{node-registry-extra-math-CsAHvIZo.js.map → node-registry-extra-math-Bn854sX9.js.map} +1 -1
  114. package/{node-renderable-DlLIdBmd.js → node-renderable-B5G8WcdH.js} +41 -22
  115. package/node-renderable-B5G8WcdH.js.map +1 -0
  116. package/{node-shadow-DKrcqmNg.js → node-shadow-CVIUlNf0.js} +7 -7
  117. package/node-shadow-CVIUlNf0.js.map +1 -0
  118. package/{normal-map-fragment-DpsIXrJf.js → normal-map-fragment-CQSxhjCy.js} +3 -3
  119. package/{normal-map-fragment-DpsIXrJf.js.map → normal-map-fragment-CQSxhjCy.js.map} +1 -1
  120. package/pack-mat4-with-offset-BqB8Jqo7.js +37 -0
  121. package/pack-mat4-with-offset-BqB8Jqo7.js.map +1 -0
  122. package/package.json +3 -10
  123. package/{parse-camera-DM3oJJeT.js → parse-camera-pBRT_6i5.js} +2 -2
  124. package/{parse-camera-DM3oJJeT.js.map → parse-camera-pBRT_6i5.js.map} +1 -1
  125. package/pbr-fog-wgsl-BqdCid6r.js +8 -0
  126. package/pbr-fog-wgsl-BqdCid6r.js.map +1 -0
  127. package/pbr-geometry-view-NiZY_juX.js +491 -0
  128. package/pbr-geometry-view-NiZY_juX.js.map +1 -0
  129. package/{pbr-metallic-roughness-block-h_KAOZrW.js → pbr-metallic-roughness-block-JBSi-tQN.js} +2 -2
  130. package/{pbr-metallic-roughness-block-h_KAOZrW.js.map → pbr-metallic-roughness-block-JBSi-tQN.js.map} +1 -1
  131. package/{pbr-metallic-roughness-block-full-6vMm1Jk6.js → pbr-metallic-roughness-block-full-Ta9lR2cz.js} +2 -2
  132. package/{pbr-metallic-roughness-block-full-6vMm1Jk6.js.map → pbr-metallic-roughness-block-full-Ta9lR2cz.js.map} +1 -1
  133. package/{pbr-mr-helper-core-CIwm-T1G.js → pbr-mr-helper-core-BVWNR08D.js} +2 -2
  134. package/{pbr-mr-helper-core-CIwm-T1G.js.map → pbr-mr-helper-core-BVWNR08D.js.map} +1 -1
  135. package/{pbr-refraction-DGmMSa2v.js → pbr-refraction-C9FvFmAp.js} +2 -2
  136. package/{pbr-refraction-DGmMSa2v.js.map → pbr-refraction-C9FvFmAp.js.map} +1 -1
  137. package/{pbr-renderable-BJxUtPBb.js → pbr-renderable-DzUF2QIk.js} +118 -58
  138. package/pbr-renderable-DzUF2QIk.js.map +1 -0
  139. package/{pbr-shadow-fragment-LO9SlbJj.js → pbr-shadow-fragment-CnqnbGYS.js} +6 -1
  140. package/pbr-shadow-fragment-CnqnbGYS.js.map +1 -0
  141. package/{pbr-template-ext-8q7BcTDf.js → pbr-template-ext-CGgB2n2y.js} +3 -2
  142. package/{pbr-template-ext-8q7BcTDf.js.map → pbr-template-ext-CGgB2n2y.js.map} +1 -1
  143. package/{pbr-tracking-B3alzn91.js → pbr-tracking-3tU1kqea.js} +2 -2
  144. package/{pbr-tracking-B3alzn91.js.map → pbr-tracking-3tU1kqea.js.map} +1 -1
  145. package/pbr-transmission-ext-BcLjRxfB.js +190 -0
  146. package/pbr-transmission-ext-BcLjRxfB.js.map +1 -0
  147. package/recast-navigation.wasm-DG_0AFuk.js +8706 -0
  148. package/recast-navigation.wasm-DG_0AFuk.js.map +1 -0
  149. package/recast-navigation.wasm-compat-C-Bf2ylB.js +8692 -0
  150. package/recast-navigation.wasm-compat-C-Bf2ylB.js.map +1 -0
  151. package/{reflectance-fragment-BCrgPmrt.js → reflectance-fragment-Dbpgw3Jt.js} +2 -2
  152. package/{reflectance-fragment-BCrgPmrt.js.map → reflectance-fragment-Dbpgw3Jt.js.map} +1 -1
  153. package/{rgbd-decode-DCvzUYeI.js → rgbd-decode-DoyUquy3.js} +7 -6
  154. package/rgbd-decode-DoyUquy3.js.map +1 -0
  155. package/{scene-material-swap-C2ykv55W.js → scene-material-swap-nNUH4nGn.js} +11 -4
  156. package/scene-material-swap-nNUH4nGn.js.map +1 -0
  157. package/screenshot-readback-D0Sj9qq3.js +92 -0
  158. package/screenshot-readback-D0Sj9qq3.js.map +1 -0
  159. package/{mesh-features-BLENkYVt.js → shader-composer-BUD_pSX4.js} +7 -55
  160. package/shader-composer-BUD_pSX4.js.map +1 -0
  161. package/{shader-renderable-D-6796KR.js → shader-renderable-D7-RyVxa.js} +62 -27
  162. package/shader-renderable-D7-RyVxa.js.map +1 -0
  163. package/shader-thin-instance-DuBotxDO.js +150 -0
  164. package/shader-thin-instance-DuBotxDO.js.map +1 -0
  165. package/shadow-fragment-core-DHN2G6FI.js.map +1 -1
  166. package/{sheen-fragment-Dze2f7XJ.js → sheen-fragment-1MkEMcbc.js} +2 -2
  167. package/{sheen-fragment-Dze2f7XJ.js.map → sheen-fragment-1MkEMcbc.js.map} +1 -1
  168. package/{singlelight-directional-wgsl-CmUDZxwz.js → singlelight-directional-wgsl-BsV8G456.js} +2 -2
  169. package/{singlelight-directional-wgsl-CmUDZxwz.js.map → singlelight-directional-wgsl-BsV8G456.js.map} +1 -1
  170. package/{singlelight-hemispheric-wgsl-t-83IP_s.js → singlelight-hemispheric-wgsl-Bo0jKlW5.js} +2 -2
  171. package/{singlelight-hemispheric-wgsl-t-83IP_s.js.map → singlelight-hemispheric-wgsl-Bo0jKlW5.js.map} +1 -1
  172. package/{singlelight-point-wgsl-CLzULIYV.js → singlelight-point-wgsl-DV39UP5Y.js} +2 -2
  173. package/{singlelight-point-wgsl-CLzULIYV.js.map → singlelight-point-wgsl-DV39UP5Y.js.map} +1 -1
  174. package/{singlelight-spot-wgsl-DEEUrfVM.js → singlelight-spot-wgsl-yg3od6vL.js} +2 -2
  175. package/{singlelight-spot-wgsl-DEEUrfVM.js.map → singlelight-spot-wgsl-yg3od6vL.js.map} +1 -1
  176. package/{skeleton-fragment-B_XlFbtx.js → skeleton-fragment-DdxYG6kv.js} +2 -2
  177. package/{skeleton-fragment-B_XlFbtx.js.map → skeleton-fragment-DdxYG6kv.js.map} +1 -1
  178. package/{skybox-renderable-DDwzu-PT.js → skybox-renderable-CJD4XmX5.js} +8 -9
  179. package/skybox-renderable-CJD4XmX5.js.map +1 -0
  180. package/{splat-ply-compressed-BahdBG1r.js → splat-ply-compressed-DHjyiVmI.js} +9 -8
  181. package/splat-ply-compressed-DHjyiVmI.js.map +1 -0
  182. package/{standard-renderable-GjxL9xSf.js → standard-pipeline-XTbHL7MY.js} +12 -257
  183. package/standard-pipeline-XTbHL7MY.js.map +1 -0
  184. package/standard-renderable-CREWLNHI.js +191 -0
  185. package/standard-renderable-CREWLNHI.js.map +1 -0
  186. package/{std-ambient-fragment-BoUsD06w.js → std-ambient-fragment-Bjx3VFrr.js} +2 -2
  187. package/{std-ambient-fragment-BoUsD06w.js.map → std-ambient-fragment-Bjx3VFrr.js.map} +1 -1
  188. package/{std-cube-reflection-fragment-ulqc3bsP.js → std-cube-reflection-fragment-y9WWdXUt.js} +2 -2
  189. package/{std-cube-reflection-fragment-ulqc3bsP.js.map → std-cube-reflection-fragment-y9WWdXUt.js.map} +1 -1
  190. package/{std-emissive-fragment-DNGj1HdQ.js → std-emissive-fragment-C8Lnmojh.js} +2 -2
  191. package/{std-emissive-fragment-DNGj1HdQ.js.map → std-emissive-fragment-C8Lnmojh.js.map} +1 -1
  192. package/{std-lightmap-fragment-Bqj89aIe.js → std-lightmap-fragment-DFxGcoA5.js} +2 -2
  193. package/{std-lightmap-fragment-Bqj89aIe.js.map → std-lightmap-fragment-DFxGcoA5.js.map} +1 -1
  194. package/{std-opacity-fragment-KuPh5N2Z.js → std-opacity-fragment-EXzFWiSp.js} +2 -2
  195. package/{std-opacity-fragment-KuPh5N2Z.js.map → std-opacity-fragment-EXzFWiSp.js.map} +1 -1
  196. package/{std-reflection-fragment-BA5Ghn_M.js → std-reflection-fragment-BoJORqpG.js} +2 -2
  197. package/{std-reflection-fragment-BA5Ghn_M.js.map → std-reflection-fragment-BoJORqpG.js.map} +1 -1
  198. package/std-shadow-fragment-Bq-Wc8UJ.js +13 -0
  199. package/std-shadow-fragment-Bq-Wc8UJ.js.map +1 -0
  200. package/{std-specular-fragment-CE-6scqd.js → std-specular-fragment-CM5R5j2g.js} +2 -2
  201. package/{std-specular-fragment-CE-6scqd.js.map → std-specular-fragment-CM5R5j2g.js.map} +1 -1
  202. package/{std-tracking-CNKZ-hJN.js → std-tracking-Cif_wXeT.js} +2 -2
  203. package/{std-tracking-CNKZ-hJN.js.map → std-tracking-Cif_wXeT.js.map} +1 -1
  204. package/{subsurface-fragment-liM3y2-P.js → subsurface-fragment-BEaAXYXz.js} +2 -2
  205. package/{subsurface-fragment-liM3y2-P.js.map → subsurface-fragment-BEaAXYXz.js.map} +1 -1
  206. package/swapchain-overlay-UCLilhbq.js +37 -0
  207. package/swapchain-overlay-UCLilhbq.js.map +1 -0
  208. package/thin-instance-cull-binding-DWKUt5ZN.js +310 -0
  209. package/thin-instance-cull-binding-DWKUt5ZN.js.map +1 -0
  210. package/{thin-instance-gpu-C9Gv_Z1w.js → thin-instance-gpu-BDdRcNAh.js} +30 -5
  211. package/thin-instance-gpu-BDdRcNAh.js.map +1 -0
  212. package/{tracking-primitives-wgdBY85t.js → tracking-primitives-CglRNTlX.js} +2 -2
  213. package/{tracking-primitives-wgdBY85t.js.map → tracking-primitives-CglRNTlX.js.map} +1 -1
  214. package/{unlit-fragment-BIlhJpz6.js → unlit-fragment-kxfZWlnp.js} +2 -2
  215. package/{unlit-fragment-BIlhJpz6.js.map → unlit-fragment-kxfZWlnp.js.map} +1 -1
  216. package/{wgsl-helpers-DyzNzCeE.js → wgsl-helpers-D8sl1VVA.js} +4 -4
  217. package/{wgsl-helpers-DyzNzCeE.js.map → wgsl-helpers-D8sl1VVA.js.map} +1 -1
  218. package/assets/splat-sort-worker-Crg3CaCc.js.map +0 -1
  219. package/background-dds-skybox-yHTqabU3.js.map +0 -1
  220. package/background-ground-DIw6D3qf.js.map +0 -1
  221. package/background-hdr-skybox-c4uuTmkP.js.map +0 -1
  222. package/background-solid-skybox-DPGBpPbm.js.map +0 -1
  223. package/billboard-renderable-D8mlVGCd.js.map +0 -1
  224. package/create-skeleton-C9JdIJnb.js.map +0 -1
  225. package/cubemap-skybox-material-DvXMVc4k.js.map +0 -1
  226. package/emissive-fragment-BnNvbBCw.js.map +0 -1
  227. package/gaussian-splatting-pipeline-sh-DgJl7l56.js.map +0 -1
  228. package/gltf-animation-D7uyTyO3.js.map +0 -1
  229. package/gltf-ext-basisu-CPg5kPrx.js.map +0 -1
  230. package/gltf-ext-quantization-CpZyLDIz.js.map +0 -1
  231. package/gltf-feature-animation-pointer-BjpwOOqo.js.map +0 -1
  232. package/gltf-feature-draco-yGSMGTE3.js.map +0 -1
  233. package/gltf-feature-gpu-instancing-2e_CFQnl.js.map +0 -1
  234. package/gltf-feature-meshopt-Des96YFI.js.map +0 -1
  235. package/gltf-feature-morph-CKCw6tkX.js.map +0 -1
  236. package/gltf-glb-parser-D6UZWFuC.js.map +0 -1
  237. package/gltf-interleave-DGnUlz28.js.map +0 -1
  238. package/gltf-pbr-builder-ext-BFOxOCnQ.js.map +0 -1
  239. package/gs-picking-pipeline-DzfMASL9.js.map +0 -1
  240. package/index-C8HOR2sB.js +0 -19222
  241. package/index-C8HOR2sB.js.map +0 -1
  242. package/mesh-features-BLENkYVt.js.map +0 -1
  243. package/node-env-BPZXZzBf.js.map +0 -1
  244. package/node-registry-DwgC4yth.js +0 -190
  245. package/node-registry-DwgC4yth.js.map +0 -1
  246. package/node-renderable-DlLIdBmd.js.map +0 -1
  247. package/node-shadow-DKrcqmNg.js.map +0 -1
  248. package/pbr-renderable-BJxUtPBb.js.map +0 -1
  249. package/pbr-shadow-fragment-LO9SlbJj.js.map +0 -1
  250. package/pbr-transmission-ext-BxW4CEGu.js +0 -581
  251. package/pbr-transmission-ext-BxW4CEGu.js.map +0 -1
  252. package/rgbd-decode-DCvzUYeI.js.map +0 -1
  253. package/scene-material-swap-C2ykv55W.js.map +0 -1
  254. package/shader-renderable-D-6796KR.js.map +0 -1
  255. package/skybox-renderable-DDwzu-PT.js.map +0 -1
  256. package/splat-ply-compressed-BahdBG1r.js.map +0 -1
  257. package/standard-renderable-GjxL9xSf.js.map +0 -1
  258. package/std-shadow-fragment-FNQfrJuC.js +0 -8
  259. package/std-shadow-fragment-FNQfrJuC.js.map +0 -1
  260. package/swapchain-overlay-DcCSFDp7.js +0 -35
  261. package/swapchain-overlay-DcCSFDp7.js.map +0 -1
  262. package/thin-instance-gpu-C9Gv_Z1w.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { e as createMappedBuffer, Z as BILLBOARD_INDEX_DATA, _ as createEmptyUniformBuffer, $ as BILLBOARD_SYSTEM_UBO_BYTES, a0 as createBillboardInstanceBuffer, a1 as _getBillboardFxHook, a2 as createBillboardInstanceSortScratch, a3 as getOrCreateBillboardPipeline, F as getSceneBindGroupLayout, a4 as createBillboardSystemBindGroup, a5 as resetBillboardPipelineCache, a6 as ensureBillboardInstanceBuffer, K as getViewMatrix, a7 as uploadSortedBillboardInstances, a8 as uploadBillboardInstances, a9 as buildBillboardSystemUbo, aa as writeBillboardSystemUboIfDirty, ab as createBillboardPipelineCache } from "./index-C8HOR2sB.js";
1
+ import { j as createMappedBuffer, B as BU, Z as BILLBOARD_INDEX_DATA, _ as createEmptyUniformBuffer, $ as BILLBOARD_SYSTEM_UBO_BYTES, a0 as createBillboardInstanceBuffer, a1 as _getBillboardFxHook, a as F32, a2 as createBillboardInstanceSortScratch, a3 as getOrCreateBillboardPipeline, z as getSceneBindGroupLayout, a4 as createBillboardSystemBindGroup, a5 as resetBillboardPipelineCache, a6 as ensureBillboardInstanceBuffer, I as getViewMatrix, a7 as uploadSortedBillboardInstances, a8 as uploadBillboardInstances, a9 as buildBillboardSystemUbo, aa as writeBillboardSystemUboIfDirty, ab as createBillboardPipelineCache } from "./index-CLElg2Bo.js";
2
2
  let _sharedPipelineCache = null;
3
3
  let _sharedPipelineCacheRefs = 0;
4
4
  function acquireSharedPipelineCache() {
@@ -18,7 +18,7 @@ function releaseSharedPipelineCache() {
18
18
  }
19
19
  function buildBillboardRenderable(engine, system) {
20
20
  var _a;
21
- const indexBuffer = createMappedBuffer(engine, BILLBOARD_INDEX_DATA, GPUBufferUsage.INDEX);
21
+ const indexBuffer = createMappedBuffer(engine, BILLBOARD_INDEX_DATA, BU.INDEX);
22
22
  const uniformBuffer = createEmptyUniformBuffer(engine, BILLBOARD_SYSTEM_UBO_BYTES, `${system._orientation}-billboard-system-ubo`);
23
23
  const instanceBuffer = createBillboardInstanceBuffer(engine._device, system, `${system._orientation}-billboard-instances`);
24
24
  const fx = ((_a = _getBillboardFxHook()) == null ? void 0 : _a.createLayerFx(engine, `${system._orientation}-billboard-fx-ubo`, system)) ?? null;
@@ -43,8 +43,8 @@ function buildBillboardRenderable(engine, system) {
43
43
  _centerVersion: -1,
44
44
  _drawableCount: 0,
45
45
  _uboUploaded: false,
46
- _lastUbo: new Float32Array(BILLBOARD_SYSTEM_UBO_BYTES / 4),
47
- _scratchUbo: new Float32Array(BILLBOARD_SYSTEM_UBO_BYTES / 4),
46
+ _lastUbo: new F32(BILLBOARD_SYSTEM_UBO_BYTES / 4),
47
+ _scratchUbo: new F32(BILLBOARD_SYSTEM_UBO_BYTES / 4),
48
48
  _fx: fx,
49
49
  _disposed: false,
50
50
  _worldCenter: [0, 0, 0],
@@ -123,20 +123,56 @@ function uploadSystem(renderable, context) {
123
123
  renderable._uploadedSorted = false;
124
124
  }
125
125
  const camera = context._camera;
126
+ const useFloatingOrigin = renderable._engine.useFloatingOrigin && camera != null;
127
+ let foX = 0;
128
+ let foY = 0;
129
+ let foZ = 0;
130
+ if (useFloatingOrigin) {
131
+ const wm = camera.worldMatrix;
132
+ foX = wm[12];
133
+ foY = wm[13];
134
+ foZ = wm[14];
135
+ }
126
136
  if (renderable._system._depthMode === "transparent" && camera) {
127
137
  const cameraViewMatrix = getViewMatrix(camera);
128
138
  if (!renderable._uploadedSorted || renderable._uploadedVersion !== renderable._system._version || renderable._uploadedCamera !== camera || renderable._uploadedCameraViewVersion !== camera.worldMatrixVersion) {
129
- uploadSortedBillboardInstances(renderable._engine._device, renderable._system, renderable._instanceBuffer, renderable._instanceSortScratch, cameraViewMatrix);
139
+ uploadSortedBillboardInstances(
140
+ renderable._engine._device,
141
+ renderable._system,
142
+ renderable._instanceBuffer,
143
+ renderable._instanceSortScratch,
144
+ cameraViewMatrix,
145
+ foX,
146
+ foY,
147
+ foZ
148
+ );
130
149
  renderable._uploadedVersion = renderable._system._version;
131
150
  renderable._uploadedCamera = camera;
132
151
  renderable._uploadedCameraViewVersion = camera.worldMatrixVersion;
133
152
  renderable._uploadedSorted = true;
134
153
  }
135
154
  } else {
136
- const uploadedVersion = renderable._uploadedSorted ? -1 : renderable._uploadedVersion;
137
- renderable._uploadedVersion = uploadBillboardInstances(renderable._engine._device, renderable._system, renderable._instanceBuffer, uploadedVersion);
138
- renderable._uploadedCamera = null;
139
- renderable._uploadedCameraViewVersion = -1;
155
+ let uploadedVersion = renderable._uploadedSorted ? -1 : renderable._uploadedVersion;
156
+ if (useFloatingOrigin && (renderable._uploadedCamera !== camera || renderable._uploadedCameraViewVersion !== camera.worldMatrixVersion)) {
157
+ uploadedVersion = -1;
158
+ }
159
+ renderable._uploadedVersion = uploadBillboardInstances(
160
+ renderable._engine._device,
161
+ renderable._system,
162
+ renderable._instanceBuffer,
163
+ uploadedVersion,
164
+ foX,
165
+ foY,
166
+ foZ,
167
+ renderable._instanceSortScratch
168
+ );
169
+ if (useFloatingOrigin) {
170
+ renderable._uploadedCamera = camera;
171
+ renderable._uploadedCameraViewVersion = camera.worldMatrixVersion;
172
+ } else {
173
+ renderable._uploadedCamera = null;
174
+ renderable._uploadedCameraViewVersion = -1;
175
+ }
140
176
  renderable._uploadedSorted = false;
141
177
  }
142
178
  buildBillboardSystemUbo(renderable._system, renderable._scratchUbo);
@@ -239,4 +275,4 @@ function disposeRenderable(renderable) {
239
275
  export {
240
276
  buildBillboardRenderable
241
277
  };
242
- //# sourceMappingURL=billboard-renderable-D8mlVGCd.js.map
278
+ //# sourceMappingURL=billboard-renderable-BHWryAeC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billboard-renderable-BHWryAeC.js","sources":["../src/sprite/billboard-renderable.ts"],"sourcesContent":["import { F32 } from \"../engine/typed-arrays.js\";\nimport { BU } from \"../engine/gpu-flags.js\";\nimport type { EngineContext } from \"../engine/engine.js\";\nimport type { RenderTargetSignature } from \"../engine/render-target.js\";\nimport type { DrawBinding, DrawUpdateContext, Renderable } from \"../render/renderable.js\";\nimport type { Camera } from \"../camera/camera.js\";\nimport { getViewMatrix } from \"../camera/camera.js\";\nimport { getSceneBindGroupLayout } from \"../render/scene-helpers.js\";\nimport { createEmptyUniformBuffer, createMappedBuffer } from \"../resource/gpu-buffers.js\";\nimport type { SpriteLayerFx } from \"./custom-shader-core.js\";\nimport { _getBillboardFxHook } from \"./sprite-fx-hook.js\";\nimport type { BillboardSpriteSystem } from \"./billboard-sprite.js\";\nimport {\n BILLBOARD_INDEX_DATA,\n BILLBOARD_SYSTEM_UBO_BYTES,\n buildBillboardSystemUbo,\n createBillboardInstanceBuffer,\n createBillboardInstanceSortScratch,\n createBillboardPipelineCache,\n createBillboardSystemBindGroup,\n ensureBillboardInstanceBuffer,\n getOrCreateBillboardPipeline,\n resetBillboardPipelineCache,\n uploadBillboardInstances,\n uploadSortedBillboardInstances,\n writeBillboardSystemUboIfDirty,\n} from \"./billboard-pipeline.js\";\nimport type { BillboardInstanceSortScratch, BillboardPipelineCache } from \"./billboard-pipeline.js\";\n\nlet _sharedPipelineCache: BillboardPipelineCache | null = null;\nlet _sharedPipelineCacheRefs = 0;\n\nfunction acquireSharedPipelineCache(): BillboardPipelineCache {\n _sharedPipelineCache ??= createBillboardPipelineCache();\n _sharedPipelineCacheRefs++;\n return _sharedPipelineCache;\n}\n\nfunction releaseSharedPipelineCache(): void {\n if (_sharedPipelineCacheRefs === 0) {\n return;\n }\n _sharedPipelineCacheRefs--;\n if (_sharedPipelineCacheRefs === 0 && _sharedPipelineCache) {\n resetBillboardPipelineCache(_sharedPipelineCache);\n _sharedPipelineCache = null;\n }\n}\n\ninterface BillboardRenderableInternal extends Renderable {\n _engine: EngineContext;\n _system: BillboardSpriteSystem;\n _indexBuffer: GPUBuffer;\n _uniformBuffer: GPUBuffer;\n _instanceBuffer: GPUBuffer;\n _instanceBufferCapacity: number;\n _instanceSortScratch: BillboardInstanceSortScratch;\n _pipelineCache: BillboardPipelineCache;\n _bindGroups: Map<GPURenderPipeline, GPUBindGroup>;\n _uploadedVersion: number;\n _uploadedCamera: Camera | null;\n _uploadedCameraViewVersion: number;\n _uploadedSorted: boolean;\n _centerVersion: number;\n _drawableCount: number;\n _uboUploaded: boolean;\n _lastUbo: Float32Array;\n _scratchUbo: Float32Array;\n _fx: SpriteLayerFx | null;\n _disposed: boolean;\n}\n\nexport function buildBillboardRenderable(engine: EngineContext, system: BillboardSpriteSystem): { renderable: Renderable; dispose: () => void } {\n const indexBuffer = createMappedBuffer(engine, BILLBOARD_INDEX_DATA, BU.INDEX);\n const uniformBuffer = createEmptyUniformBuffer(engine, BILLBOARD_SYSTEM_UBO_BYTES, `${system._orientation}-billboard-system-ubo`);\n const instanceBuffer = createBillboardInstanceBuffer(engine._device, system, `${system._orientation}-billboard-instances`);\n const fx = _getBillboardFxHook()?.createLayerFx(engine, `${system._orientation}-billboard-fx-ubo`, system) ?? null;\n const isTransparent = system._depthMode === \"transparent\";\n const renderable: BillboardRenderableInternal = {\n order: system.order,\n isTransparent,\n _direct: !isTransparent,\n _engine: engine,\n _system: system,\n _indexBuffer: indexBuffer,\n _uniformBuffer: uniformBuffer,\n _instanceBuffer: instanceBuffer,\n _instanceBufferCapacity: system._capacity,\n _instanceSortScratch: createBillboardInstanceSortScratch(),\n _pipelineCache: acquireSharedPipelineCache(),\n _bindGroups: new Map(),\n _uploadedVersion: -1,\n _uploadedCamera: null,\n _uploadedCameraViewVersion: -1,\n _uploadedSorted: false,\n _centerVersion: -1,\n _drawableCount: 0,\n _uboUploaded: false,\n _lastUbo: new F32(BILLBOARD_SYSTEM_UBO_BYTES / 4),\n _scratchUbo: new F32(BILLBOARD_SYSTEM_UBO_BYTES / 4),\n _fx: fx,\n _disposed: false,\n _worldCenter: [0, 0, 0],\n bind(engine, target) {\n return bindSystem(renderable, engine, target);\n },\n };\n refreshBillboardWorldCenter(renderable);\n return {\n renderable,\n dispose() {\n disposeRenderable(renderable);\n },\n };\n}\n\nfunction bindSystem(renderable: BillboardRenderableInternal, engine: EngineContext, target: RenderTargetSignature): DrawBinding {\n if (!target._depthStencilFormat) {\n throw new Error(\"BillboardSpriteSystem requires a depth-stencil render target.\");\n }\n const sampleCount = target._sampleCount === 1 ? 1 : 4;\n const pipeline = getOrCreateBillboardPipeline(\n engine,\n renderable._pipelineCache,\n target._colorFormat!,\n sampleCount,\n renderable._system,\n target._depthStencilFormat,\n getSceneBindGroupLayout(engine)\n );\n let bindGroup = renderable._bindGroups.get(pipeline);\n if (!bindGroup) {\n bindGroup = createBillboardSystemBindGroup(engine, pipeline, renderable._system, renderable._uniformBuffer, renderable._fx);\n renderable._bindGroups.set(pipeline, bindGroup);\n }\n return {\n renderable,\n pipeline,\n update(context) {\n uploadSystem(renderable, context);\n },\n draw(pass) {\n return drawSystem(renderable, bindGroup, pass);\n },\n };\n}\n\nfunction uploadSystem(renderable: BillboardRenderableInternal, context: DrawUpdateContext): void {\n if (renderable._disposed) {\n return;\n }\n refreshBillboardWorldCenter(renderable);\n if (!renderable._system.visible || renderable._system.count === 0) {\n if (renderable._system.count === 0) {\n renderable._system._dirtyMin = 0;\n renderable._system._dirtyMax = 0;\n renderable._uploadedVersion = renderable._system._version;\n renderable._uploadedSorted = false;\n }\n return;\n }\n // Match the pure-2D `SpriteRenderer` path: advance `fx.time` (and write the FX UBO) only for\n // visible, non-empty systems so time semantics stay consistent and we avoid wasted `writeBuffer` traffic.\n if (renderable._fx) {\n _getBillboardFxHook()!.updateFx(renderable._fx, renderable._system, renderable._engine._currentDelta);\n }\n const grown = ensureBillboardInstanceBuffer(\n renderable._engine._device,\n renderable._system,\n renderable._instanceBuffer,\n renderable._instanceBufferCapacity,\n `${renderable._system._orientation}-billboard-instances`\n );\n if (grown.reallocated) {\n renderable._instanceBuffer = grown.buffer;\n renderable._instanceBufferCapacity = grown.capacity;\n renderable._uploadedVersion = -1;\n renderable._uploadedCamera = null;\n renderable._uploadedCameraViewVersion = -1;\n renderable._uploadedSorted = false;\n }\n const camera = context._camera;\n const useFloatingOrigin = renderable._engine.useFloatingOrigin && camera != null;\n let foX = 0;\n let foY = 0;\n let foZ = 0;\n if (useFloatingOrigin) {\n const wm = camera!.worldMatrix;\n foX = wm[12]!;\n foY = wm[13]!;\n foZ = wm[14]!;\n }\n if (renderable._system._depthMode === \"transparent\" && camera) {\n const cameraViewMatrix = getViewMatrix(camera);\n if (\n !renderable._uploadedSorted ||\n renderable._uploadedVersion !== renderable._system._version ||\n renderable._uploadedCamera !== camera ||\n renderable._uploadedCameraViewVersion !== camera.worldMatrixVersion\n ) {\n uploadSortedBillboardInstances(\n renderable._engine._device,\n renderable._system,\n renderable._instanceBuffer,\n renderable._instanceSortScratch,\n cameraViewMatrix,\n foX,\n foY,\n foZ\n );\n renderable._uploadedVersion = renderable._system._version;\n renderable._uploadedCamera = camera;\n renderable._uploadedCameraViewVersion = camera.worldMatrixVersion;\n renderable._uploadedSorted = true;\n }\n } else {\n let uploadedVersion = renderable._uploadedSorted ? -1 : renderable._uploadedVersion;\n // Under floating origin the eye-relative anchors depend on the live camera\n // offset, so force a full re-upload whenever the camera (offset) has moved.\n if (useFloatingOrigin && (renderable._uploadedCamera !== camera || renderable._uploadedCameraViewVersion !== camera!.worldMatrixVersion)) {\n uploadedVersion = -1;\n }\n renderable._uploadedVersion = uploadBillboardInstances(\n renderable._engine._device,\n renderable._system,\n renderable._instanceBuffer,\n uploadedVersion,\n foX,\n foY,\n foZ,\n renderable._instanceSortScratch\n );\n if (useFloatingOrigin) {\n renderable._uploadedCamera = camera!;\n renderable._uploadedCameraViewVersion = camera!.worldMatrixVersion;\n } else {\n renderable._uploadedCamera = null;\n renderable._uploadedCameraViewVersion = -1;\n }\n renderable._uploadedSorted = false;\n }\n buildBillboardSystemUbo(renderable._system, renderable._scratchUbo);\n writeBillboardSystemUboIfDirty(renderable._engine._device, renderable._uniformBuffer, renderable._scratchUbo, renderable._lastUbo, !renderable._uboUploaded);\n renderable._uboUploaded = true;\n}\n\nfunction refreshBillboardWorldCenter(renderable: BillboardRenderableInternal): void {\n const system = renderable._system;\n if (renderable._centerVersion === system._version) {\n return;\n }\n const center = renderable._worldCenter!;\n if (system.count === 0) {\n center[0] = 0;\n center[1] = 0;\n center[2] = 0;\n renderable._drawableCount = 0;\n renderable._centerVersion = system._version;\n return;\n }\n const data = system._instanceData;\n const stride = system._instanceFloatsPerSprite;\n let minX = Infinity;\n let minY = Infinity;\n let minZ = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n let maxZ = -Infinity;\n let drawableCount = 0;\n for (let index = 0; index < system.count; index++) {\n const base = index * stride;\n const width = data[base + 3]!;\n const height = data[base + 4]!;\n if (width === 0 || height === 0) {\n continue;\n }\n const x = data[base]!;\n const y = data[base + 1]!;\n const z = data[base + 2]!;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (z < minZ) {\n minZ = z;\n }\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n if (z > maxZ) {\n maxZ = z;\n }\n drawableCount++;\n }\n if (drawableCount === 0) {\n center[0] = 0;\n center[1] = 0;\n center[2] = 0;\n } else {\n center[0] = (minX + maxX) * 0.5;\n center[1] = (minY + maxY) * 0.5;\n center[2] = (minZ + maxZ) * 0.5;\n }\n renderable._drawableCount = drawableCount;\n renderable._centerVersion = system._version;\n}\n\nfunction drawSystem(renderable: BillboardRenderableInternal, bindGroup: GPUBindGroup, pass: GPURenderPassEncoder | GPURenderBundleEncoder): number {\n if (renderable._disposed) {\n return 0;\n }\n refreshBillboardWorldCenter(renderable);\n if (!renderable._system.visible || renderable._system.count === 0 || renderable._drawableCount === 0) {\n return 0;\n }\n pass.setBindGroup(1, bindGroup);\n pass.setIndexBuffer(renderable._indexBuffer, \"uint16\");\n pass.setVertexBuffer(0, renderable._instanceBuffer);\n pass.drawIndexed(6, renderable._system.count, 0, 0, 0);\n return 1;\n}\n\nfunction disposeRenderable(renderable: BillboardRenderableInternal): void {\n if (renderable._disposed) {\n return;\n }\n renderable._disposed = true;\n renderable._instanceBuffer.destroy();\n renderable._uniformBuffer.destroy();\n renderable._indexBuffer.destroy();\n if (renderable._fx) {\n _getBillboardFxHook()!.disposeFx(renderable._fx);\n }\n renderable._bindGroups.clear();\n releaseSharedPipelineCache();\n}\n"],"names":["engine"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { f as formatFloat } from "./_math-factory-C-QqW-Wi.js";
2
- import { aS as WGSL } from "./index-C8HOR2sB.js";
2
+ import { aG as WGSL } from "./index-CLElg2Bo.js";
3
3
  const emitter = {
4
4
  className: "ClampBlock",
5
5
  emit(block, _outputName, stage, state, ctx) {
@@ -18,4 +18,4 @@ const emitter = {
18
18
  export {
19
19
  emitter
20
20
  };
21
- //# sourceMappingURL=clamp-block-BdII67hT.js.map
21
+ //# sourceMappingURL=clamp-block-DqbwnQGW.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clamp-block-BdII67hT.js","sources":["../src/material/node/blocks/clamp-block.ts"],"sourcesContent":["import type { BlockEmitter } from \"../node-types.js\";\nimport { formatFloat } from \"./_math-factory.js\";\nimport { WGSL } from \"../node-types.js\";\n\nexport const emitter: BlockEmitter = {\n className: \"ClampBlock\",\n emit(block, _outputName, stage, state, ctx) {\n const value = ctx.resolve(block, \"value\", stage, state);\n const minRaw = block.serialized.minimum;\n const maxRaw = block.serialized.maximum;\n const minScalar = typeof minRaw === \"number\" ? formatFloat(minRaw) : \"0.0\";\n const maxScalar = typeof maxRaw === \"number\" ? formatFloat(maxRaw) : \"1.0\";\n // WGSL clamp requires all three args to have matching types. Promote\n // scalar bounds to the value's vector type when needed.\n if (value.type === \"f32\") {\n return { expr: `clamp(${value.expr}, ${minScalar}, ${maxScalar})`, type: value.type };\n }\n const t = WGSL[value.type];\n return { expr: `clamp(${value.expr}, ${t}(${minScalar}), ${t}(${maxScalar}))`, type: value.type };\n },\n};\n"],"names":[],"mappings":";;AAIO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,KAAK,OAAO,aAAa,OAAO,OAAO,KAAK;AACxC,UAAM,QAAQ,IAAI,QAAQ,OAAO,SAAS,OAAO,KAAK;AACtD,UAAM,SAAS,MAAM,WAAW;AAChC,UAAM,SAAS,MAAM,WAAW;AAChC,UAAM,YAAY,OAAO,WAAW,WAAW,YAAY,MAAM,IAAI;AACrE,UAAM,YAAY,OAAO,WAAW,WAAW,YAAY,MAAM,IAAI;AAGrE,QAAI,MAAM,SAAS,OAAO;AACtB,aAAO,EAAE,MAAM,SAAS,MAAM,IAAI,KAAK,SAAS,KAAK,SAAS,KAAK,MAAM,MAAM,KAAA;AAAA,IACnF;AACA,UAAM,IAAI,KAAK,MAAM,IAAI;AACzB,WAAO,EAAE,MAAM,SAAS,MAAM,IAAI,KAAK,CAAC,IAAI,SAAS,MAAM,CAAC,IAAI,SAAS,MAAM,MAAM,MAAM,KAAA;AAAA,EAC/F;AACJ;"}
1
+ {"version":3,"file":"clamp-block-DqbwnQGW.js","sources":["../src/material/node/blocks/clamp-block.ts"],"sourcesContent":["import type { BlockEmitter } from \"../node-types.js\";\nimport { formatFloat } from \"./_math-factory.js\";\nimport { WGSL } from \"../node-types.js\";\n\nexport const emitter: BlockEmitter = {\n className: \"ClampBlock\",\n emit(block, _outputName, stage, state, ctx) {\n const value = ctx.resolve(block, \"value\", stage, state);\n const minRaw = block.serialized.minimum;\n const maxRaw = block.serialized.maximum;\n const minScalar = typeof minRaw === \"number\" ? formatFloat(minRaw) : \"0.0\";\n const maxScalar = typeof maxRaw === \"number\" ? formatFloat(maxRaw) : \"1.0\";\n // WGSL clamp requires all three args to have matching types. Promote\n // scalar bounds to the value's vector type when needed.\n if (value.type === \"f32\") {\n return { expr: `clamp(${value.expr}, ${minScalar}, ${maxScalar})`, type: value.type };\n }\n const t = WGSL[value.type];\n return { expr: `clamp(${value.expr}, ${t}(${minScalar}), ${t}(${maxScalar}))`, type: value.type };\n },\n};\n"],"names":[],"mappings":";;AAIO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,KAAK,OAAO,aAAa,OAAO,OAAO,KAAK;AACxC,UAAM,QAAQ,IAAI,QAAQ,OAAO,SAAS,OAAO,KAAK;AACtD,UAAM,SAAS,MAAM,WAAW;AAChC,UAAM,SAAS,MAAM,WAAW;AAChC,UAAM,YAAY,OAAO,WAAW,WAAW,YAAY,MAAM,IAAI;AACrE,UAAM,YAAY,OAAO,WAAW,WAAW,YAAY,MAAM,IAAI;AAGrE,QAAI,MAAM,SAAS,OAAO;AACtB,aAAO,EAAE,MAAM,SAAS,MAAM,IAAI,KAAK,SAAS,KAAK,SAAS,KAAK,MAAM,MAAM,KAAA;AAAA,IACnF;AACA,UAAM,IAAI,KAAK,MAAM,IAAI;AACzB,WAAO,EAAE,MAAM,SAAS,MAAM,IAAI,KAAK,CAAC,IAAI,SAAS,MAAM,CAAC,IAAI,SAAS,MAAM,MAAM,MAAM,KAAA;AAAA,EAC/F;AACJ;"}
@@ -1,4 +1,4 @@
1
- import { av as PBR_HAS_CLEARCOAT, aw as PBR2_CC_INT_MAP, ax as PBR2_CC_ROUGH_MAP, ay as PBR2_CC_NORMAL_MAP, aq as PBR_HAS_METALLIC_REFLECTANCE_MAP, ar as PBR_HAS_REFLECTANCE_MAP, az as PBR2_CC_F0_REMAP_OFF } from "./index-C8HOR2sB.js";
1
+ import { aO as PBR_HAS_CLEARCOAT, aP as PBR2_CC_INT_MAP, aQ as PBR2_CC_ROUGH_MAP, aR as PBR2_CC_NORMAL_MAP, aJ as PBR_HAS_METALLIC_REFLECTANCE_MAP, aK as PBR_HAS_REFLECTANCE_MAP, aS as PBR2_CC_F0_REMAP_OFF } from "./index-CLElg2Bo.js";
2
2
  const STAGE_FRAGMENT = 2;
3
3
  const CC_HELPERS = `
4
4
  fn visibility_Kelemen(VdotH_kl: f32) -> f32 {
@@ -253,4 +253,4 @@ export {
253
253
  pbrExt,
254
254
  writeClearcoatUBO
255
255
  };
256
- //# sourceMappingURL=clearcoat-fragment-LCiG98Rf.js.map
256
+ //# sourceMappingURL=clearcoat-fragment-D6FSCie1.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clearcoat-fragment-LCiG98Rf.js","sources":["../src/material/pbr/fragments/clearcoat-fragment.ts"],"sourcesContent":["/**\n * Clearcoat Fragment\n *\n * Adds a glossy transparent top layer (like car paint or lacquered surfaces).\n * Only bundled when a scene uses PbrMaterialProps.clearCoat.\n *\n * Math follows BJS PBRClearCoatConfiguration:\n * - F0 from IOR: ((1-ior)/(1+ior))^2\n * - F0 remap: base F0 adjusted for coat/base interface\n * - Direct: GGX + Kelemen visibility + Schlick fresnel\n * - IBL: Jones analytical BRDF (not BRDF LUT)\n * - Conservation: base layer attenuated by (1 - fresnel * intensity)\n *\n * Supports glTF KHR_materials_clearcoat textures:\n * - clearcoatTexture (R channel multiplies intensity)\n * - clearcoatRoughnessTexture (G channel multiplies roughness)\n * - clearcoatNormalTexture (tangent-space normal, perturbs coat normal)\n */\n\nimport type { ShaderFragment, BindingDecl } from \"../../../shader/fragment-types.js\";\nimport type { PbrMaterialProps, ClearCoatProps } from \"../pbr-material.js\";\nimport type { PbrExt } from \"../pbr-flags.js\";\nimport {\n PBR_HAS_CLEARCOAT,\n PBR_HAS_METALLIC_REFLECTANCE_MAP,\n PBR_HAS_REFLECTANCE_MAP,\n PBR2_CC_INT_MAP,\n PBR2_CC_ROUGH_MAP,\n PBR2_CC_NORMAL_MAP,\n PBR2_CC_F0_REMAP_OFF,\n} from \"../pbr-flag-bits.js\";\n\nconst STAGE_FRAGMENT = 0x2;\n\nconst CC_HELPERS = `\nfn visibility_Kelemen(VdotH_kl: f32) -> f32 {\nreturn 0.25 / (VdotH_kl * VdotH_kl + 0.0000001);\n}\nfn getR0RemappedForClearCoat(f0_rc: vec3<f32>, ccA: f32, ccB: f32) -> vec3<f32> {\nlet sf0 = sqrt(f0_rc);\nlet num = ccA + ccB * sf0;\nlet den = ccB + ccA * sf0;\nreturn saturate((num / den) * (num / den));\n}\nfn ccSchlick(f0: f32, cosTheta: f32) -> f32 {\nlet t = 1.0 - cosTheta;\nlet t2 = t * t;\nreturn f0 + (1.0 - f0) * (t2 * t2 * t);\n}\n`;\n\nconst CC_INT_TEX = `material.ccParams.x * textureSample(ccIntensityTexture, ccIntensitySampler_, input.uv).r`;\nconst CC_INT_PLAIN = `material.ccParams.x`;\nconst CC_ROUGH_TEX = `clamp(material.ccParams.y * textureSample(ccRoughnessTexture, ccRoughnessSampler_, input.uv).g, 0.0, 1.0)`;\nconst CC_ROUGH_PLAIN = `material.ccParams.y`;\n\n// WGSL fragment: coat-layer normal. Computes ccN (coat world-space normal)\n// using a locally-derived cotangent frame from world-position and UV derivatives.\n// Emitted in /*AC*/ so ccN is in scope for direct + IBL blocks.\nconst CC_NORMAL_COMPUTE = `\nlet cc_dp1 = dpdx(input.worldPos);\nlet cc_dp2 = dpdy(input.worldPos);\nlet cc_duv1 = dpdx(input.uv);\nlet cc_duv2 = dpdy(input.uv);\nlet cc_dp2perp = cross(cc_dp2, N_geom);\nlet cc_dp1perp = cross(N_geom, cc_dp1);\nlet cc_tFrame = cc_dp2perp * cc_duv1.x + cc_dp1perp * cc_duv2.x;\nlet cc_bFrame = -(cc_dp2perp * cc_duv1.y + cc_dp1perp * cc_duv2.y);\nlet cc_det = max(dot(cc_tFrame, cc_tFrame), dot(cc_bFrame, cc_bFrame));\nlet cc_invmax = select(inverseSqrt(cc_det), 0.0, cc_det == 0.0);\nlet cc_frame = mat3x3<f32>(cc_tFrame * cc_invmax, cc_bFrame * cc_invmax, N_geom);\nlet ccNormSampleRaw = textureSample(ccNormalTexture, ccNormalSampler_, input.uv).rgb * 2.0 - 1.0;\nlet ccNormScale = material.ccParams.z;\nvar ccN = normalize(cc_frame * normalize(ccNormSampleRaw * vec3<f32>(ccNormScale, ccNormScale, 1.0)));\n`;\n\nfunction makeF0Remap(intensityExpr: string): string {\n return `\n{\nlet ccInt_r = ${intensityExpr};\nlet remappedF0 = getR0RemappedForClearCoat(colorF0, material.ccRefractionParams.z, material.ccRefractionParams.w);\ncolorF0 = mix(colorF0, remappedF0, ccInt_r);\n}\n`;\n}\n\nfunction makeDirectMod(intensityExpr: string, roughnessExpr: string, hasNormalMap: boolean): string {\n const N = hasNormalMap ? \"ccN\" : \"N_geom\";\n return `\nvar ccDirectAttenuation = 1.0;\nvar ccDirectSpecularTerm = vec3<f32>(0.0);\n{\nlet ccInt_dl = ${intensityExpr};\nlet ccRough_dl = ${roughnessExpr};\nlet ccF0_dl = material.ccRefractionParams.x;\nlet ccAlphaG_dl = ccRough_dl * ccRough_dl + 0.0005;\nlet ccNdotL_dl = saturate(dot(${N}, L));\nlet ccH_dl = normalize(V + L);\nlet ccNdotH_dl = clamp(dot(${N}, ccH_dl), 0.0000001, 1.0);\nlet ccVdotH_dl = saturate(dot(V, ccH_dl));\nlet ccD_dl = distributionGGX(ccNdotH_dl, ccAlphaG_dl);\nlet ccVis_dl = visibility_Kelemen(ccVdotH_dl);\nlet ccFresnel_dl = ccSchlick(ccF0_dl, ccVdotH_dl);\nlet ccTerm = ccFresnel_dl * ccD_dl * ccVis_dl * ccNdotL_dl;\nccDirectSpecularTerm = vec3<f32>(ccTerm) * lightColor * lightAtten * material.directIntensity * ccInt_dl;\nccDirectAttenuation = 1.0 - ccFresnel_dl * ccInt_dl;\n}\n`;\n}\n\nfunction makeIblMod(intensityExpr: string, roughnessExpr: string, hasNormalMap: boolean, hasSpecularAA: boolean, hasBaseNormalMap: boolean): string {\n const N = hasNormalMap ? \"ccN\" : \"N_geom\";\n const alphaG = hasSpecularAA\n ? `let ccAlphaG_ibl_base = ccRough_ibl * ccRough_ibl + 0.0005;\nlet cc_nDfdx_AA = dpdx(${N});\nlet cc_nDfdy_AA = dpdy(${N});\nlet cc_slopeSquare_AA = max(dot(cc_nDfdx_AA, cc_nDfdx_AA), dot(cc_nDfdy_AA, cc_nDfdy_AA));\nlet ccAlphaG_ibl = ccAlphaG_ibl_base + sqrt(cc_slopeSquare_AA) * 0.75;`\n : `let ccAlphaG_ibl = ccRough_ibl * ccRough_ibl + 0.0005;`;\n const ehoLine = hasBaseNormalMap ? `let ccEho_ibl = environmentHorizonOcclusion(-V, ${N}, N_geom);` : `let ccEho_ibl = 1.0;`;\n return `\n{\nlet ccInt_ibl = ${intensityExpr};\nlet ccRough_ibl = ${roughnessExpr};\nlet ccF0_ibl = material.ccRefractionParams.x;\nlet ccR_raw = reflect(-V, ${N});\nlet ccR_ibl = rotateY(ccR_raw, scene.envRotationY);\nlet ccNdotV_ibl = abs(dot(${N}, V)) + 0.0000001;\n${alphaG}\nvar ccSpecLod_ibl = log2(cubemapDim * ccAlphaG_ibl) * scene.vImageInfos.z;\nlet ccEnvRadiance_ibl = textureSampleLevel(iblTexture, iblSampler, ccR_ibl, clamp(ccSpecLod_ibl, 0.0, maxLod)).rgb * material.environmentIntensity;\nlet ccBrdf_ibl = textureSample(brdfLUT, brdfSampler_, vec2<f32>(ccNdotV_ibl, ccRough_ibl)).rgb;\n${ehoLine}\nlet ccSpecEnvRefl = (vec3<f32>(ccF0_ibl) * ccBrdf_ibl.y + (vec3<f32>(1.0) - vec3<f32>(ccF0_ibl)) * ccBrdf_ibl.x) * ccInt_ibl * ccEho_ibl;\nlet ccFresnelIBL = ccSchlick(ccF0_ibl, ccNdotV_ibl);\nlet ccConservation_ibl = 1.0 - ccFresnelIBL * ccInt_ibl;\nlet ccFinalRadiance_ibl = ccEnvRadiance_ibl * ccSpecEnvRefl;\ncolor = finalIrradiance * ccConservation_ibl\n + finalRadianceScaled * ccConservation_ibl\n + finalSpecularScaled * ccDirectAttenuation\n + directDiffuse * ccDirectAttenuation\n + ccDirectSpecularTerm\n + ccFinalRadiance_ibl\n + emissive;\n}\n`;\n}\n\nfunction makeNonIblMod(intensityExpr: string): string {\n return `\n{\nlet ccF0_noIbl = material.ccRefractionParams.x;\nlet ccInt_noIbl = ${intensityExpr};\nlet ccFresnelNoIbl = ccSchlick(ccF0_noIbl, NdotV);\nlet ccCons_noIbl = 1.0 - ccFresnelNoIbl * ccInt_noIbl;\ncolor = (color - emissive) * ccCons_noIbl + emissive + ccDirectSpecularTerm;\n}\n`;\n}\n\nexport function createClearcoatFragment(features: number, features2: number, hasIbl: boolean, hasBaseNormalMap: boolean, hasSpecularAA: boolean): ShaderFragment | null {\n if ((features & PBR_HAS_CLEARCOAT) === 0) {\n return null;\n }\n const hasReflectance = (features & (PBR_HAS_METALLIC_REFLECTANCE_MAP | PBR_HAS_REFLECTANCE_MAP)) !== 0;\n const hasIntensityMap = (features2 & PBR2_CC_INT_MAP) !== 0;\n const hasRoughnessMap = (features2 & PBR2_CC_ROUGH_MAP) !== 0;\n const hasNormalMap = (features2 & PBR2_CC_NORMAL_MAP) !== 0;\n const disableF0Remap = (features2 & PBR2_CC_F0_REMAP_OFF) !== 0;\n const intensityExpr = hasIntensityMap ? CC_INT_TEX : CC_INT_PLAIN;\n const roughnessExpr = hasRoughnessMap ? CC_ROUGH_TEX : CC_ROUGH_PLAIN;\n const slots: Partial<Record<string, string>> = {\n MF: disableF0Remap ? \"\" : makeF0Remap(intensityExpr),\n AD: makeDirectMod(intensityExpr, roughnessExpr, hasNormalMap),\n BL: `var ccDirectAttenuation = 1.0;\\nvar ccDirectSpecularTerm = vec3<f32>(0.0);`,\n };\n if (hasNormalMap) {\n slots.AC = CC_NORMAL_COMPUTE;\n }\n // AI and NI are mutually exclusive — only one path runs\n if (hasIbl) {\n slots.AI = makeIblMod(intensityExpr, roughnessExpr, hasNormalMap, hasSpecularAA, hasBaseNormalMap);\n } else {\n slots.NI = makeNonIblMod(intensityExpr);\n }\n const deps: string[] = [];\n if (hasIbl) {\n deps.push(\"ibl\");\n }\n if (hasReflectance) {\n deps.push(\"reflectance\");\n }\n // Fragment id varies with texture config so shader-composer's fragmentKey\n // (and downstream pipeline cache) distinguishes variants.\n const suffix =\n (hasIntensityMap ? \"I\" : \"\") +\n (hasRoughnessMap ? \"R\" : \"\") +\n (hasNormalMap ? \"N\" : \"\") +\n (disableF0Remap ? \"X\" : \"\") +\n (hasSpecularAA ? \"A\" : \"\") +\n (hasBaseNormalMap ? \"B\" : \"\");\n const bindings: BindingDecl[] = [];\n if (hasIntensityMap) {\n bindings.push(\n { _name: \"ccIntensityTexture\", _type: { _kind: \"texture\", _textureType: \"texture_2d<f32>\" }, _visibility: STAGE_FRAGMENT },\n { _name: \"ccIntensitySampler_\", _type: { _kind: \"sampler\", _samplerType: \"sampler\" }, _visibility: STAGE_FRAGMENT }\n );\n }\n if (hasRoughnessMap) {\n bindings.push(\n { _name: \"ccRoughnessTexture\", _type: { _kind: \"texture\", _textureType: \"texture_2d<f32>\" }, _visibility: STAGE_FRAGMENT },\n { _name: \"ccRoughnessSampler_\", _type: { _kind: \"sampler\", _samplerType: \"sampler\" }, _visibility: STAGE_FRAGMENT }\n );\n }\n if (hasNormalMap) {\n bindings.push(\n { _name: \"ccNormalTexture\", _type: { _kind: \"texture\", _textureType: \"texture_2d<f32>\" }, _visibility: STAGE_FRAGMENT },\n { _name: \"ccNormalSampler_\", _type: { _kind: \"sampler\", _samplerType: \"sampler\" }, _visibility: STAGE_FRAGMENT }\n );\n }\n\n return {\n _id: suffix ? `clearcoat-${suffix}` : \"clearcoat\",\n _dependencies: deps.length > 0 ? deps : undefined,\n\n _uboFields: [\n { _name: \"ccParams\", _type: \"vec4<f32>\" },\n { _name: \"ccRefractionParams\", _type: \"vec4<f32>\" },\n ],\n\n _bindings: bindings,\n\n _helperFunctions: CC_HELPERS,\n\n _fragmentSlots: slots,\n };\n}\n\n/** Write the clearcoat material-UBO slice (ccParams + ccParams2). */\nexport function writeClearcoatUBO(data: Float32Array, material: PbrMaterialProps, offsets: ReadonlyMap<string, number>): void {\n const cc = material.clearCoat as ClearCoatProps | undefined;\n if (!cc?.isEnabled || !offsets.has(\"ccParams\")) {\n return;\n }\n const off = offsets.get(\"ccParams\")! / 4;\n const ior = cc.indexOfRefraction ?? 1.5;\n const a = 1 - ior;\n const b = 1 + ior;\n data[off] = cc.intensity ?? 1.0;\n data[off + 1] = cc.roughness ?? 0.0;\n data[off + 2] = cc.bumpTextureScale ?? 1.0;\n data[off + 4] = Math.pow(-a / b, 2);\n data[off + 5] = 1 / ior;\n data[off + 6] = a;\n data[off + 7] = b;\n}\n\nconst CC_TEX: ReadonlyArray<readonly [number, \"texture\" | \"roughnessTexture\" | \"bumpTexture\"]> = [\n [PBR2_CC_INT_MAP, \"texture\"],\n [PBR2_CC_ROUGH_MAP, \"roughnessTexture\"],\n [PBR2_CC_NORMAL_MAP, \"bumpTexture\"],\n];\n\n/** Clearcoat PBR extension (group 1, base-tex phase). */\nexport const pbrExt: PbrExt = {\n id: \"clearcoat\",\n phase: \"base-tex\",\n detect(mat) {\n const cc = (mat as PbrMaterialProps).clearCoat as ClearCoatProps | undefined;\n if (!cc?.isEnabled) {\n return { f: 0, f2: 0 };\n }\n let f2 = 0;\n for (const [flag, key] of CC_TEX) {\n if (cc[key]) {\n f2 |= flag;\n }\n }\n if (cc.useF0Remap === false) {\n f2 |= PBR2_CC_F0_REMAP_OFF;\n }\n return { f: PBR_HAS_CLEARCOAT, f2 };\n },\n frag: (ctx) => createClearcoatFragment(ctx._features, ctx._features2, ctx._hasIbl, ctx._hasAnyNormal, ctx._hasSpecularAA),\n writeUbo: writeClearcoatUBO as PbrExt[\"writeUbo\"],\n bind(ctx, entries, b) {\n const cc = (ctx._material as PbrMaterialProps).clearCoat as ClearCoatProps | undefined;\n if (!cc) {\n return b;\n }\n for (const [flag, key] of CC_TEX) {\n const tex = cc[key];\n if ((ctx._features2 & flag) !== 0 && tex) {\n entries.push({ binding: b++, resource: tex.view });\n entries.push({ binding: b++, resource: tex.sampler });\n }\n }\n return b;\n },\n textures(mat, t) {\n const cc = (mat as PbrMaterialProps).clearCoat;\n if (!cc) {\n return;\n }\n for (const [, key] of CC_TEX) {\n const tex = cc[key];\n if (tex) {\n t.push(tex);\n }\n }\n },\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clearcoat-fragment-D6FSCie1.js","sources":["../src/material/pbr/fragments/clearcoat-fragment.ts"],"sourcesContent":["/**\n * Clearcoat Fragment\n *\n * Adds a glossy transparent top layer (like car paint or lacquered surfaces).\n * Only bundled when a scene uses PbrMaterialProps.clearCoat.\n *\n * Math follows BJS PBRClearCoatConfiguration:\n * - F0 from IOR: ((1-ior)/(1+ior))^2\n * - F0 remap: base F0 adjusted for coat/base interface\n * - Direct: GGX + Kelemen visibility + Schlick fresnel\n * - IBL: Jones analytical BRDF (not BRDF LUT)\n * - Conservation: base layer attenuated by (1 - fresnel * intensity)\n *\n * Supports glTF KHR_materials_clearcoat textures:\n * - clearcoatTexture (R channel multiplies intensity)\n * - clearcoatRoughnessTexture (G channel multiplies roughness)\n * - clearcoatNormalTexture (tangent-space normal, perturbs coat normal)\n */\n\nimport type { ShaderFragment, BindingDecl } from \"../../../shader/fragment-types.js\";\nimport type { PbrMaterialProps, ClearCoatProps } from \"../pbr-material.js\";\nimport type { PbrExt } from \"../pbr-flags.js\";\nimport {\n PBR_HAS_CLEARCOAT,\n PBR_HAS_METALLIC_REFLECTANCE_MAP,\n PBR_HAS_REFLECTANCE_MAP,\n PBR2_CC_INT_MAP,\n PBR2_CC_ROUGH_MAP,\n PBR2_CC_NORMAL_MAP,\n PBR2_CC_F0_REMAP_OFF,\n} from \"../pbr-flag-bits.js\";\n\nconst STAGE_FRAGMENT = 0x2;\n\nconst CC_HELPERS = `\nfn visibility_Kelemen(VdotH_kl: f32) -> f32 {\nreturn 0.25 / (VdotH_kl * VdotH_kl + 0.0000001);\n}\nfn getR0RemappedForClearCoat(f0_rc: vec3<f32>, ccA: f32, ccB: f32) -> vec3<f32> {\nlet sf0 = sqrt(f0_rc);\nlet num = ccA + ccB * sf0;\nlet den = ccB + ccA * sf0;\nreturn saturate((num / den) * (num / den));\n}\nfn ccSchlick(f0: f32, cosTheta: f32) -> f32 {\nlet t = 1.0 - cosTheta;\nlet t2 = t * t;\nreturn f0 + (1.0 - f0) * (t2 * t2 * t);\n}\n`;\n\nconst CC_INT_TEX = `material.ccParams.x * textureSample(ccIntensityTexture, ccIntensitySampler_, input.uv).r`;\nconst CC_INT_PLAIN = `material.ccParams.x`;\nconst CC_ROUGH_TEX = `clamp(material.ccParams.y * textureSample(ccRoughnessTexture, ccRoughnessSampler_, input.uv).g, 0.0, 1.0)`;\nconst CC_ROUGH_PLAIN = `material.ccParams.y`;\n\n// WGSL fragment: coat-layer normal. Computes ccN (coat world-space normal)\n// using a locally-derived cotangent frame from world-position and UV derivatives.\n// Emitted in /*AC*/ so ccN is in scope for direct + IBL blocks.\nconst CC_NORMAL_COMPUTE = `\nlet cc_dp1 = dpdx(input.worldPos);\nlet cc_dp2 = dpdy(input.worldPos);\nlet cc_duv1 = dpdx(input.uv);\nlet cc_duv2 = dpdy(input.uv);\nlet cc_dp2perp = cross(cc_dp2, N_geom);\nlet cc_dp1perp = cross(N_geom, cc_dp1);\nlet cc_tFrame = cc_dp2perp * cc_duv1.x + cc_dp1perp * cc_duv2.x;\nlet cc_bFrame = -(cc_dp2perp * cc_duv1.y + cc_dp1perp * cc_duv2.y);\nlet cc_det = max(dot(cc_tFrame, cc_tFrame), dot(cc_bFrame, cc_bFrame));\nlet cc_invmax = select(inverseSqrt(cc_det), 0.0, cc_det == 0.0);\nlet cc_frame = mat3x3<f32>(cc_tFrame * cc_invmax, cc_bFrame * cc_invmax, N_geom);\nlet ccNormSampleRaw = textureSample(ccNormalTexture, ccNormalSampler_, input.uv).rgb * 2.0 - 1.0;\nlet ccNormScale = material.ccParams.z;\nvar ccN = normalize(cc_frame * normalize(ccNormSampleRaw * vec3<f32>(ccNormScale, ccNormScale, 1.0)));\n`;\n\nfunction makeF0Remap(intensityExpr: string): string {\n return `\n{\nlet ccInt_r = ${intensityExpr};\nlet remappedF0 = getR0RemappedForClearCoat(colorF0, material.ccRefractionParams.z, material.ccRefractionParams.w);\ncolorF0 = mix(colorF0, remappedF0, ccInt_r);\n}\n`;\n}\n\nfunction makeDirectMod(intensityExpr: string, roughnessExpr: string, hasNormalMap: boolean): string {\n const N = hasNormalMap ? \"ccN\" : \"N_geom\";\n return `\nvar ccDirectAttenuation = 1.0;\nvar ccDirectSpecularTerm = vec3<f32>(0.0);\n{\nlet ccInt_dl = ${intensityExpr};\nlet ccRough_dl = ${roughnessExpr};\nlet ccF0_dl = material.ccRefractionParams.x;\nlet ccAlphaG_dl = ccRough_dl * ccRough_dl + 0.0005;\nlet ccNdotL_dl = saturate(dot(${N}, L));\nlet ccH_dl = normalize(V + L);\nlet ccNdotH_dl = clamp(dot(${N}, ccH_dl), 0.0000001, 1.0);\nlet ccVdotH_dl = saturate(dot(V, ccH_dl));\nlet ccD_dl = distributionGGX(ccNdotH_dl, ccAlphaG_dl);\nlet ccVis_dl = visibility_Kelemen(ccVdotH_dl);\nlet ccFresnel_dl = ccSchlick(ccF0_dl, ccVdotH_dl);\nlet ccTerm = ccFresnel_dl * ccD_dl * ccVis_dl * ccNdotL_dl;\nccDirectSpecularTerm = vec3<f32>(ccTerm) * lightColor * lightAtten * material.directIntensity * ccInt_dl;\nccDirectAttenuation = 1.0 - ccFresnel_dl * ccInt_dl;\n}\n`;\n}\n\nfunction makeIblMod(intensityExpr: string, roughnessExpr: string, hasNormalMap: boolean, hasSpecularAA: boolean, hasBaseNormalMap: boolean): string {\n const N = hasNormalMap ? \"ccN\" : \"N_geom\";\n const alphaG = hasSpecularAA\n ? `let ccAlphaG_ibl_base = ccRough_ibl * ccRough_ibl + 0.0005;\nlet cc_nDfdx_AA = dpdx(${N});\nlet cc_nDfdy_AA = dpdy(${N});\nlet cc_slopeSquare_AA = max(dot(cc_nDfdx_AA, cc_nDfdx_AA), dot(cc_nDfdy_AA, cc_nDfdy_AA));\nlet ccAlphaG_ibl = ccAlphaG_ibl_base + sqrt(cc_slopeSquare_AA) * 0.75;`\n : `let ccAlphaG_ibl = ccRough_ibl * ccRough_ibl + 0.0005;`;\n const ehoLine = hasBaseNormalMap ? `let ccEho_ibl = environmentHorizonOcclusion(-V, ${N}, N_geom);` : `let ccEho_ibl = 1.0;`;\n return `\n{\nlet ccInt_ibl = ${intensityExpr};\nlet ccRough_ibl = ${roughnessExpr};\nlet ccF0_ibl = material.ccRefractionParams.x;\nlet ccR_raw = reflect(-V, ${N});\nlet ccR_ibl = rotateY(ccR_raw, scene.envRotationY);\nlet ccNdotV_ibl = abs(dot(${N}, V)) + 0.0000001;\n${alphaG}\nvar ccSpecLod_ibl = log2(cubemapDim * ccAlphaG_ibl) * scene.vImageInfos.z;\nlet ccEnvRadiance_ibl = textureSampleLevel(iblTexture, iblSampler, ccR_ibl, clamp(ccSpecLod_ibl, 0.0, maxLod)).rgb * material.environmentIntensity;\nlet ccBrdf_ibl = textureSample(brdfLUT, brdfSampler_, vec2<f32>(ccNdotV_ibl, ccRough_ibl)).rgb;\n${ehoLine}\nlet ccSpecEnvRefl = (vec3<f32>(ccF0_ibl) * ccBrdf_ibl.y + (vec3<f32>(1.0) - vec3<f32>(ccF0_ibl)) * ccBrdf_ibl.x) * ccInt_ibl * ccEho_ibl;\nlet ccFresnelIBL = ccSchlick(ccF0_ibl, ccNdotV_ibl);\nlet ccConservation_ibl = 1.0 - ccFresnelIBL * ccInt_ibl;\nlet ccFinalRadiance_ibl = ccEnvRadiance_ibl * ccSpecEnvRefl;\ncolor = finalIrradiance * ccConservation_ibl\n + finalRadianceScaled * ccConservation_ibl\n + finalSpecularScaled * ccDirectAttenuation\n + directDiffuse * ccDirectAttenuation\n + ccDirectSpecularTerm\n + ccFinalRadiance_ibl\n + emissive;\n}\n`;\n}\n\nfunction makeNonIblMod(intensityExpr: string): string {\n return `\n{\nlet ccF0_noIbl = material.ccRefractionParams.x;\nlet ccInt_noIbl = ${intensityExpr};\nlet ccFresnelNoIbl = ccSchlick(ccF0_noIbl, NdotV);\nlet ccCons_noIbl = 1.0 - ccFresnelNoIbl * ccInt_noIbl;\ncolor = (color - emissive) * ccCons_noIbl + emissive + ccDirectSpecularTerm;\n}\n`;\n}\n\nexport function createClearcoatFragment(features: number, features2: number, hasIbl: boolean, hasBaseNormalMap: boolean, hasSpecularAA: boolean): ShaderFragment | null {\n if ((features & PBR_HAS_CLEARCOAT) === 0) {\n return null;\n }\n const hasReflectance = (features & (PBR_HAS_METALLIC_REFLECTANCE_MAP | PBR_HAS_REFLECTANCE_MAP)) !== 0;\n const hasIntensityMap = (features2 & PBR2_CC_INT_MAP) !== 0;\n const hasRoughnessMap = (features2 & PBR2_CC_ROUGH_MAP) !== 0;\n const hasNormalMap = (features2 & PBR2_CC_NORMAL_MAP) !== 0;\n const disableF0Remap = (features2 & PBR2_CC_F0_REMAP_OFF) !== 0;\n const intensityExpr = hasIntensityMap ? CC_INT_TEX : CC_INT_PLAIN;\n const roughnessExpr = hasRoughnessMap ? CC_ROUGH_TEX : CC_ROUGH_PLAIN;\n const slots: Partial<Record<string, string>> = {\n MF: disableF0Remap ? \"\" : makeF0Remap(intensityExpr),\n AD: makeDirectMod(intensityExpr, roughnessExpr, hasNormalMap),\n BL: `var ccDirectAttenuation = 1.0;\\nvar ccDirectSpecularTerm = vec3<f32>(0.0);`,\n };\n if (hasNormalMap) {\n slots.AC = CC_NORMAL_COMPUTE;\n }\n // AI and NI are mutually exclusive — only one path runs\n if (hasIbl) {\n slots.AI = makeIblMod(intensityExpr, roughnessExpr, hasNormalMap, hasSpecularAA, hasBaseNormalMap);\n } else {\n slots.NI = makeNonIblMod(intensityExpr);\n }\n const deps: string[] = [];\n if (hasIbl) {\n deps.push(\"ibl\");\n }\n if (hasReflectance) {\n deps.push(\"reflectance\");\n }\n // Fragment id varies with texture config so shader-composer's fragmentKey\n // (and downstream pipeline cache) distinguishes variants.\n const suffix =\n (hasIntensityMap ? \"I\" : \"\") +\n (hasRoughnessMap ? \"R\" : \"\") +\n (hasNormalMap ? \"N\" : \"\") +\n (disableF0Remap ? \"X\" : \"\") +\n (hasSpecularAA ? \"A\" : \"\") +\n (hasBaseNormalMap ? \"B\" : \"\");\n const bindings: BindingDecl[] = [];\n if (hasIntensityMap) {\n bindings.push(\n { _name: \"ccIntensityTexture\", _type: { _kind: \"texture\", _textureType: \"texture_2d<f32>\" }, _visibility: STAGE_FRAGMENT },\n { _name: \"ccIntensitySampler_\", _type: { _kind: \"sampler\", _samplerType: \"sampler\" }, _visibility: STAGE_FRAGMENT }\n );\n }\n if (hasRoughnessMap) {\n bindings.push(\n { _name: \"ccRoughnessTexture\", _type: { _kind: \"texture\", _textureType: \"texture_2d<f32>\" }, _visibility: STAGE_FRAGMENT },\n { _name: \"ccRoughnessSampler_\", _type: { _kind: \"sampler\", _samplerType: \"sampler\" }, _visibility: STAGE_FRAGMENT }\n );\n }\n if (hasNormalMap) {\n bindings.push(\n { _name: \"ccNormalTexture\", _type: { _kind: \"texture\", _textureType: \"texture_2d<f32>\" }, _visibility: STAGE_FRAGMENT },\n { _name: \"ccNormalSampler_\", _type: { _kind: \"sampler\", _samplerType: \"sampler\" }, _visibility: STAGE_FRAGMENT }\n );\n }\n\n return {\n _id: suffix ? `clearcoat-${suffix}` : \"clearcoat\",\n _dependencies: deps.length > 0 ? deps : undefined,\n\n _uboFields: [\n { _name: \"ccParams\", _type: \"vec4<f32>\" },\n { _name: \"ccRefractionParams\", _type: \"vec4<f32>\" },\n ],\n\n _bindings: bindings,\n\n _helperFunctions: CC_HELPERS,\n\n _fragmentSlots: slots,\n };\n}\n\n/** Write the clearcoat material-UBO slice (ccParams + ccParams2). */\nexport function writeClearcoatUBO(data: Float32Array, material: PbrMaterialProps, offsets: ReadonlyMap<string, number>): void {\n const cc = material.clearCoat as ClearCoatProps | undefined;\n if (!cc?.isEnabled || !offsets.has(\"ccParams\")) {\n return;\n }\n const off = offsets.get(\"ccParams\")! / 4;\n const ior = cc.indexOfRefraction ?? 1.5;\n const a = 1 - ior;\n const b = 1 + ior;\n data[off] = cc.intensity ?? 1.0;\n data[off + 1] = cc.roughness ?? 0.0;\n data[off + 2] = cc.bumpTextureScale ?? 1.0;\n data[off + 4] = Math.pow(-a / b, 2);\n data[off + 5] = 1 / ior;\n data[off + 6] = a;\n data[off + 7] = b;\n}\n\nconst CC_TEX: ReadonlyArray<readonly [number, \"texture\" | \"roughnessTexture\" | \"bumpTexture\"]> = [\n [PBR2_CC_INT_MAP, \"texture\"],\n [PBR2_CC_ROUGH_MAP, \"roughnessTexture\"],\n [PBR2_CC_NORMAL_MAP, \"bumpTexture\"],\n];\n\n/** Clearcoat PBR extension (group 1, base-tex phase). */\nexport const pbrExt: PbrExt = {\n id: \"clearcoat\",\n phase: \"base-tex\",\n detect(mat) {\n const cc = (mat as PbrMaterialProps).clearCoat as ClearCoatProps | undefined;\n if (!cc?.isEnabled) {\n return { f: 0, f2: 0 };\n }\n let f2 = 0;\n for (const [flag, key] of CC_TEX) {\n if (cc[key]) {\n f2 |= flag;\n }\n }\n if (cc.useF0Remap === false) {\n f2 |= PBR2_CC_F0_REMAP_OFF;\n }\n return { f: PBR_HAS_CLEARCOAT, f2 };\n },\n frag: (ctx) => createClearcoatFragment(ctx._features, ctx._features2, ctx._hasIbl, ctx._hasAnyNormal, ctx._hasSpecularAA),\n writeUbo: writeClearcoatUBO as PbrExt[\"writeUbo\"],\n bind(ctx, entries, b) {\n const cc = (ctx._material as PbrMaterialProps).clearCoat as ClearCoatProps | undefined;\n if (!cc) {\n return b;\n }\n for (const [flag, key] of CC_TEX) {\n const tex = cc[key];\n if ((ctx._features2 & flag) !== 0 && tex) {\n entries.push({ binding: b++, resource: tex.view });\n entries.push({ binding: b++, resource: tex.sampler });\n }\n }\n return b;\n },\n textures(mat, t) {\n const cc = (mat as PbrMaterialProps).clearCoat;\n if (!cc) {\n return;\n }\n for (const [, key] of CC_TEX) {\n const tex = cc[key];\n if (tex) {\n t.push(tex);\n }\n }\n },\n};\n"],"names":[],"mappings":"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"}
@@ -1,28 +1,28 @@
1
- import { e as createMappedBuffer } from "./index-C8HOR2sB.js";
1
+ import { T as TU, U as U32, j as createMappedBuffer, B as BU } from "./index-CLElg2Bo.js";
2
2
  function createSkeleton(engine, joints, weights, boneCount, boneData, joints1, weights1) {
3
3
  const device = engine._device;
4
4
  const texWidth = boneCount * 4;
5
5
  const boneTexture = device.createTexture({
6
6
  size: [texWidth, 1],
7
7
  format: "rgba32float",
8
- usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST
8
+ usage: TU.TEXTURE_BINDING | TU.COPY_DST
9
9
  });
10
10
  device.queue.writeTexture({ texture: boneTexture }, boneData.buffer, { bytesPerRow: texWidth * 16 }, { width: texWidth, height: 1 });
11
- const joints32 = new Uint32Array(joints.length);
11
+ const joints32 = new U32(joints.length);
12
12
  for (let i = 0; i < joints.length; i++) {
13
13
  joints32[i] = joints[i];
14
14
  }
15
- const jointsBuffer = createMappedBuffer(engine, joints32, GPUBufferUsage.VERTEX);
16
- const weightsBuffer = createMappedBuffer(engine, weights, GPUBufferUsage.VERTEX);
15
+ const jointsBuffer = createMappedBuffer(engine, joints32, BU.VERTEX);
16
+ const weightsBuffer = createMappedBuffer(engine, weights, BU.VERTEX);
17
17
  let joints1Buffer = null;
18
18
  let weights1Buffer = null;
19
19
  if (joints1 && weights1) {
20
- const joints132 = new Uint32Array(joints1.length);
20
+ const joints132 = new U32(joints1.length);
21
21
  for (let i = 0; i < joints1.length; i++) {
22
22
  joints132[i] = joints1[i];
23
23
  }
24
- joints1Buffer = createMappedBuffer(engine, joints132, GPUBufferUsage.VERTEX);
25
- weights1Buffer = createMappedBuffer(engine, weights1, GPUBufferUsage.VERTEX);
24
+ joints1Buffer = createMappedBuffer(engine, joints132, BU.VERTEX);
25
+ weights1Buffer = createMappedBuffer(engine, weights1, BU.VERTEX);
26
26
  }
27
27
  return {
28
28
  boneTexture,
@@ -41,4 +41,4 @@ function createSkeleton(engine, joints, weights, boneCount, boneData, joints1, w
41
41
  export {
42
42
  createSkeleton
43
43
  };
44
- //# sourceMappingURL=create-skeleton-C9JdIJnb.js.map
44
+ //# sourceMappingURL=create-skeleton-D_uplboC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-skeleton-D_uplboC.js","sources":["../src/skeleton/create-skeleton.ts"],"sourcesContent":["/** Skeleton GPU resource factory.\n *\n * Dynamically imported by load-gltf.ts when a mesh has skeletal data.\n * Scenes without skeletons never import this module.\n * Skinning WGSL is now provided by the skeleton ShaderFragment\n * (shader/fragments/skeleton-fragment.ts) and composed at pipeline\n * creation time — no global registration needed. */\n\nimport { U32 } from \"../engine/typed-arrays.js\";\nimport { TU, BU } from \"../engine/gpu-flags.js\";\nimport type { EngineContext } from \"../engine/engine.js\";\nimport type { SkeletonData } from \"../animation/types.js\";\nimport { createMappedBuffer } from \"../resource/gpu-buffers.js\";\n\n/** Create skeleton GPU data from parsed glTF skin.\n * @param engine - Engine context (provides GPUDevice)\n * @param joints - Joint indices (4 per vertex, u8 or u16)\n * @param weights - Blend weights (4 per vertex, f32)\n * @param boneCount - Number of bones (joints) in the skeleton\n * @param boneData - Initial bone matrices (Float32Array, 16 floats per bone)\n * @param joints1 - Extra joint indices for 8-bone skinning (JOINTS_1)\n * @param weights1 - Extra blend weights for 8-bone skinning (WEIGHTS_1)\n */\nexport function createSkeleton(\n engine: EngineContext,\n joints: Uint16Array | Uint8Array,\n weights: Float32Array,\n boneCount: number,\n boneData: Float32Array,\n joints1?: Uint16Array | Uint8Array | null,\n weights1?: Float32Array | null\n): SkeletonData {\n const device = engine._device;\n // Bone texture: rgba32float, 4 texels per bone (one mat4 column each)\n const texWidth = boneCount * 4;\n const boneTexture = device.createTexture({\n size: [texWidth, 1],\n format: \"rgba32float\",\n usage: TU.TEXTURE_BINDING | TU.COPY_DST,\n });\n device.queue.writeTexture({ texture: boneTexture }, boneData.buffer, { bytesPerRow: texWidth * 16 }, { width: texWidth, height: 1 });\n\n // Expand joints to Uint32Array — pipeline reads uint32x4 vertex format\n const joints32 = new U32(joints.length);\n for (let i = 0; i < joints.length; i++) {\n joints32[i] = joints[i]!;\n }\n\n const jointsBuffer = createMappedBuffer(engine, joints32, BU.VERTEX);\n const weightsBuffer = createMappedBuffer(engine, weights, BU.VERTEX);\n\n let joints1Buffer: GPUBuffer | null = null;\n let weights1Buffer: GPUBuffer | null = null;\n if (joints1 && weights1) {\n const joints132 = new U32(joints1.length);\n for (let i = 0; i < joints1.length; i++) {\n joints132[i] = joints1[i]!;\n }\n joints1Buffer = createMappedBuffer(engine, joints132, BU.VERTEX);\n weights1Buffer = createMappedBuffer(engine, weights1, BU.VERTEX);\n }\n\n return {\n boneTexture,\n boneCount,\n jointsBuffer,\n weightsBuffer,\n joints,\n weights,\n boneMatrices: boneData,\n joints1Buffer,\n weights1Buffer,\n joints1: joints1 ?? null,\n weights1: weights1 ?? null,\n };\n}\n"],"names":[],"mappings":";AAuBO,SAAS,eACZ,QACA,QACA,SACA,WACA,UACA,SACA,UACY;AACZ,QAAM,SAAS,OAAO;AAEtB,QAAM,WAAW,YAAY;AAC7B,QAAM,cAAc,OAAO,cAAc;AAAA,IACrC,MAAM,CAAC,UAAU,CAAC;AAAA,IAClB,QAAQ;AAAA,IACR,OAAO,GAAG,kBAAkB,GAAG;AAAA,EAAA,CAClC;AACD,SAAO,MAAM,aAAa,EAAE,SAAS,YAAA,GAAe,SAAS,QAAQ,EAAE,aAAa,WAAW,MAAM,EAAE,OAAO,UAAU,QAAQ,GAAG;AAGnI,QAAM,WAAW,IAAI,IAAI,OAAO,MAAM;AACtC,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,aAAS,CAAC,IAAI,OAAO,CAAC;AAAA,EAC1B;AAEA,QAAM,eAAe,mBAAmB,QAAQ,UAAU,GAAG,MAAM;AACnE,QAAM,gBAAgB,mBAAmB,QAAQ,SAAS,GAAG,MAAM;AAEnE,MAAI,gBAAkC;AACtC,MAAI,iBAAmC;AACvC,MAAI,WAAW,UAAU;AACrB,UAAM,YAAY,IAAI,IAAI,QAAQ,MAAM;AACxC,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,gBAAU,CAAC,IAAI,QAAQ,CAAC;AAAA,IAC5B;AACA,oBAAgB,mBAAmB,QAAQ,WAAW,GAAG,MAAM;AAC/D,qBAAiB,mBAAmB,QAAQ,UAAU,GAAG,MAAM;AAAA,EACnE;AAEA,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA,SAAS,WAAW;AAAA,IACpB,UAAU,YAAY;AAAA,EAAA;AAE9B;"}
@@ -1,4 +1,4 @@
1
- import { D as targetSignatureKey, E as createDefaultPipelineDescriptor, F as getSceneBindGroupLayout } from "./index-C8HOR2sB.js";
1
+ import { x as targetSignatureKey, y as createDefaultPipelineDescriptor, z as getSceneBindGroupLayout, S as SS } from "./index-CLElg2Bo.js";
2
2
  const SKYBOX_POS_BUFFER = [{ arrayStride: 12, attributes: [{ shaderLocation: 0, offset: 0, format: "float32x3" }] }];
3
3
  const _cmPipelines = /* @__PURE__ */ new Map();
4
4
  const _cmLayouts = /* @__PURE__ */ new Map();
@@ -18,9 +18,9 @@ function createCubemapSkyboxMaterial(label, vertCode, fragCode) {
18
18
  const layout = device.createBindGroupLayout({
19
19
  label: `${label}-material`,
20
20
  entries: [
21
- { binding: 0, visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT, buffer: { type: "uniform" } },
22
- { binding: 1, visibility: GPUShaderStage.FRAGMENT, texture: { sampleType: "float", viewDimension: "cube" } },
23
- { binding: 2, visibility: GPUShaderStage.FRAGMENT, sampler: { type: "filtering" } }
21
+ { binding: 0, visibility: SS.VERTEX | SS.FRAGMENT, buffer: { type: "uniform" } },
22
+ { binding: 1, visibility: SS.FRAGMENT, texture: { sampleType: "float", viewDimension: "cube" } },
23
+ { binding: 2, visibility: SS.FRAGMENT, sampler: { type: "filtering" } }
24
24
  ]
25
25
  });
26
26
  _cmLayouts.set(label, layout);
@@ -53,8 +53,7 @@ function createCubemapSkyboxMaterial(label, vertCode, fragCode) {
53
53
  _depthStencilFormat: sig._depthStencilFormat,
54
54
  _depthCompare: sig._depthCompare,
55
55
  _msaaSamples: sig._sampleCount,
56
- _depthWriteEnabled: false,
57
- _flipY: sig._flipY
56
+ _depthWriteEnabled: false
58
57
  })
59
58
  );
60
59
  _cmPipelines.set(key, pipeline);
@@ -76,4 +75,4 @@ function createCubemapSkyboxMaterial(label, vertCode, fragCode) {
76
75
  export {
77
76
  createCubemapSkyboxMaterial as c
78
77
  };
79
- //# sourceMappingURL=cubemap-skybox-material-DvXMVc4k.js.map
78
+ //# sourceMappingURL=cubemap-skybox-material-DQcMMdf-.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cubemap-skybox-material-DQcMMdf-.js","sources":["../src/material/pbr/cubemap-skybox-material.ts"],"sourcesContent":["/** Shared cubemap skybox material factory — used by DDS and HDR skyboxes.\n * BGL: binding 0 = uniform buffer, binding 1 = cube texture, binding 2 = sampler. */\n\nimport { SS } from \"../../engine/gpu-flags.js\";\nimport type { EngineContext } from \"../../engine/engine.js\";\nimport type { RenderTargetSignature } from \"../../engine/render-target.js\";\nimport { createDefaultPipelineDescriptor, getSceneBindGroupLayout } from \"../../render/scene-helpers.js\";\nimport { targetSignatureKey } from \"../../engine/render-target.js\";\n\nconst SKYBOX_POS_BUFFER: GPUVertexBufferLayout[] = [{ arrayStride: 12, attributes: [{ shaderLocation: 0, offset: 0, format: \"float32x3\" as GPUVertexFormat }] }];\n\nexport interface CubemapSkyboxMaterial {\n getPipeline(engine: EngineContext, sig: RenderTargetSignature): GPURenderPipeline;\n createBindGroup(engine: EngineContext, meshUBO: GPUBuffer, cubeView: GPUTextureView, cubeSampler: GPUSampler): GPUBindGroup;\n}\n\n/** Module-global pipeline + layout caches shared across all cubemap-skybox instances.\n * Keyed by `${label}|${sigKey}` so HDR and DDS variants don't collide. */\nconst _cmPipelines = new Map<string, GPURenderPipeline>();\nconst _cmLayouts = new Map<string, GPUBindGroupLayout>();\nlet _cmCachedDevice: GPUDevice | null = null;\n\nexport function createCubemapSkyboxMaterial(label: string, vertCode: string, fragCode: string): CubemapSkyboxMaterial {\n function getLayout(engine: EngineContext): GPUBindGroupLayout {\n const device = engine._device;\n if (_cmCachedDevice !== device) {\n _cmPipelines.clear();\n _cmLayouts.clear();\n _cmCachedDevice = device;\n }\n const cached = _cmLayouts.get(label);\n if (cached) {\n return cached;\n }\n const layout = device.createBindGroupLayout({\n label: `${label}-material`,\n entries: [\n { binding: 0, visibility: SS.VERTEX | SS.FRAGMENT, buffer: { type: \"uniform\" } },\n { binding: 1, visibility: SS.FRAGMENT, texture: { sampleType: \"float\", viewDimension: \"cube\" } },\n { binding: 2, visibility: SS.FRAGMENT, sampler: { type: \"filtering\" } },\n ],\n });\n _cmLayouts.set(label, layout);\n return layout;\n }\n\n return {\n getPipeline(_engine, sig) {\n const device = _engine._device;\n if (_cmCachedDevice !== device) {\n _cmPipelines.clear();\n _cmLayouts.clear();\n _cmCachedDevice = device;\n }\n const key = `${label}|${targetSignatureKey(sig)}`;\n const cached = _cmPipelines.get(key);\n if (cached) {\n return cached;\n }\n const _vertModule = device.createShaderModule({ code: vertCode, label: `${label}-vert` });\n const _fragModule = device.createShaderModule({ code: fragCode, label: `${label}-frag` });\n\n const pipeline = device.createRenderPipeline(\n createDefaultPipelineDescriptor({\n _label: `${label}-pipeline`,\n _engine,\n _bgls: [getSceneBindGroupLayout(_engine), getLayout(_engine)],\n _vertModule,\n _fragModule,\n _vertexBuffers: SKYBOX_POS_BUFFER,\n _format: sig._colorFormat!,\n _depthStencilFormat: sig._depthStencilFormat,\n _depthCompare: sig._depthCompare,\n _msaaSamples: sig._sampleCount,\n _depthWriteEnabled: false,\n })\n );\n _cmPipelines.set(key, pipeline);\n return pipeline;\n },\n\n createBindGroup(engine, meshUBO, cubeView, cubeSampler) {\n const device = engine._device;\n return device.createBindGroup({\n layout: getLayout(engine),\n entries: [\n { binding: 0, resource: { buffer: meshUBO } },\n { binding: 1, resource: cubeView },\n { binding: 2, resource: cubeSampler },\n ],\n });\n },\n };\n}\n"],"names":[],"mappings":";AASA,MAAM,oBAA6C,CAAC,EAAE,aAAa,IAAI,YAAY,CAAC,EAAE,gBAAgB,GAAG,QAAQ,GAAG,QAAQ,YAAA,CAAgC,GAAG;AAS/J,MAAM,mCAAmB,IAAA;AACzB,MAAM,iCAAiB,IAAA;AACvB,IAAI,kBAAoC;AAEjC,SAAS,4BAA4B,OAAe,UAAkB,UAAyC;AAClH,WAAS,UAAU,QAA2C;AAC1D,UAAM,SAAS,OAAO;AACtB,QAAI,oBAAoB,QAAQ;AAC5B,mBAAa,MAAA;AACb,iBAAW,MAAA;AACX,wBAAkB;AAAA,IACtB;AACA,UAAM,SAAS,WAAW,IAAI,KAAK;AACnC,QAAI,QAAQ;AACR,aAAO;AAAA,IACX;AACA,UAAM,SAAS,OAAO,sBAAsB;AAAA,MACxC,OAAO,GAAG,KAAK;AAAA,MACf,SAAS;AAAA,QACL,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,GAAG,UAAU,QAAQ,EAAE,MAAM,UAAA,EAAU;AAAA,QAC7E,EAAE,SAAS,GAAG,YAAY,GAAG,UAAU,SAAS,EAAE,YAAY,SAAS,eAAe,OAAA,EAAO;AAAA,QAC7F,EAAE,SAAS,GAAG,YAAY,GAAG,UAAU,SAAS,EAAE,MAAM,YAAA,EAAY;AAAA,MAAE;AAAA,IAC1E,CACH;AACD,eAAW,IAAI,OAAO,MAAM;AAC5B,WAAO;AAAA,EACX;AAEA,SAAO;AAAA,IACH,YAAY,SAAS,KAAK;AACtB,YAAM,SAAS,QAAQ;AACvB,UAAI,oBAAoB,QAAQ;AAC5B,qBAAa,MAAA;AACb,mBAAW,MAAA;AACX,0BAAkB;AAAA,MACtB;AACA,YAAM,MAAM,GAAG,KAAK,IAAI,mBAAmB,GAAG,CAAC;AAC/C,YAAM,SAAS,aAAa,IAAI,GAAG;AACnC,UAAI,QAAQ;AACR,eAAO;AAAA,MACX;AACA,YAAM,cAAc,OAAO,mBAAmB,EAAE,MAAM,UAAU,OAAO,GAAG,KAAK,QAAA,CAAS;AACxF,YAAM,cAAc,OAAO,mBAAmB,EAAE,MAAM,UAAU,OAAO,GAAG,KAAK,QAAA,CAAS;AAExF,YAAM,WAAW,OAAO;AAAA,QACpB,gCAAgC;AAAA,UAC5B,QAAQ,GAAG,KAAK;AAAA,UAChB;AAAA,UACA,OAAO,CAAC,wBAAwB,OAAO,GAAG,UAAU,OAAO,CAAC;AAAA,UAC5D;AAAA,UACA;AAAA,UACA,gBAAgB;AAAA,UAChB,SAAS,IAAI;AAAA,UACb,qBAAqB,IAAI;AAAA,UACzB,eAAe,IAAI;AAAA,UACnB,cAAc,IAAI;AAAA,UAClB,oBAAoB;AAAA,QAAA,CACvB;AAAA,MAAA;AAEL,mBAAa,IAAI,KAAK,QAAQ;AAC9B,aAAO;AAAA,IACX;AAAA,IAEA,gBAAgB,QAAQ,SAAS,UAAU,aAAa;AACpD,YAAM,SAAS,OAAO;AACtB,aAAO,OAAO,gBAAgB;AAAA,QAC1B,QAAQ,UAAU,MAAM;AAAA,QACxB,SAAS;AAAA,UACL,EAAE,SAAS,GAAG,UAAU,EAAE,QAAQ,UAAQ;AAAA,UAC1C,EAAE,SAAS,GAAG,UAAU,SAAA;AAAA,UACxB,EAAE,SAAS,GAAG,UAAU,YAAA;AAAA,QAAY;AAAA,MACxC,CACH;AAAA,IACL;AAAA,EAAA;AAER;"}
@@ -1,4 +1,4 @@
1
- import { aS as WGSL } from "./index-C8HOR2sB.js";
1
+ import { aG as WGSL } from "./index-CLElg2Bo.js";
2
2
  function curveScalar(type, v) {
3
3
  switch (type) {
4
4
  case 0:
@@ -86,4 +86,4 @@ const emitter = {
86
86
  export {
87
87
  emitter
88
88
  };
89
- //# sourceMappingURL=curve-block-BlJpXVYv.js.map
89
+ //# sourceMappingURL=curve-block-21rT0JjG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"curve-block-BlJpXVYv.js","sources":["../src/material/node/blocks/curve-block.ts"],"sourcesContent":["import type { BlockEmitter, NodeValueType } from \"../node-types.js\";\nimport { WGSL } from \"../node-types.js\";\n\nfunction curveScalar(type: number, v: string): string {\n switch (type) {\n case 0:\n return `(1.0 - cos((${v} * 3.1415) / 2.0))`;\n case 1:\n return `sin((${v} * 3.1415) / 2.0)`;\n case 2:\n return `(-((cos(${v} * 3.1415) - 1.0)) / 2.0)`;\n case 3:\n return `(${v} * ${v})`;\n case 4:\n return `((1.0 - ${v}) * (1.0 - ${v}))`;\n case 5:\n return `select(1.0 - pow(-2.0 * ${v} + 2.0, 2.0) / 2.0, 2.0 * ${v} * ${v}, ${v} < 0.5)`;\n case 6:\n return `(${v} * ${v} * ${v})`;\n case 7:\n return `(1.0 - pow(1.0 - ${v}, 3.0))`;\n case 8:\n return `select(1.0 - pow(-2.0 * ${v} + 2.0, 3.0) / 2.0, 4.0 * ${v} * ${v} * ${v}, ${v} < 0.5)`;\n case 9:\n return `(${v} * ${v} * ${v} * ${v})`;\n case 10:\n return `(1.0 - pow(1.0 - ${v}, 4.0))`;\n case 11:\n return `select(1.0 - pow(-2.0 * ${v} + 2.0, 4.0) / 2.0, 8.0 * ${v} * ${v} * ${v} * ${v}, ${v} < 0.5)`;\n case 12:\n return `(${v} * ${v} * ${v} * ${v} * ${v})`;\n case 13:\n return `(1.0 - pow(1.0 - ${v}, 5.0))`;\n case 14:\n return `select(1.0 - pow(-2.0 * ${v} + 2.0, 5.0) / 2.0, 16.0 * ${v} * ${v} * ${v} * ${v} * ${v}, ${v} < 0.5)`;\n case 15:\n return `select(pow(2.0, 10.0 * ${v} - 10.0), 0.0, ${v} == 0.0)`;\n case 16:\n return `select(1.0 - pow(2.0, -10.0 * ${v}), 1.0, ${v} == 1.0)`;\n case 17:\n return `select(select(select((2.0 - pow(2.0, -20.0 * ${v} + 10.0)) / 2.0, pow(2.0, 20.0 * ${v} - 10.0) / 2.0, ${v} < 0.5), 1.0, ${v} == 1.0), 0.0, ${v} == 0.0)`;\n case 18:\n return `(1.0 - sqrt(1.0 - pow(${v}, 2.0)))`;\n case 19:\n return `sqrt(1.0 - pow(${v} - 1.0, 2.0))`;\n case 20:\n return `select((sqrt(1.0 - pow(-2.0 * ${v} + 2.0, 2.0)) + 1.0) / 2.0, (1.0 - sqrt(1.0 - pow(2.0 * ${v}, 2.0))) / 2.0, ${v} < 0.5)`;\n case 21:\n return `(2.70158 * ${v} * ${v} * ${v} - 1.70158 * ${v} * ${v})`;\n case 22:\n return `(2.70158 * pow(${v} - 1.0, 3.0) + 1.70158 * pow(${v} - 1.0, 2.0))`;\n case 23:\n return `select((pow(2.0 * ${v} - 2.0, 2.0) * (3.5949095 * (${v} * 2.0 - 2.0) + 3.5949095) + 2.0) / 2.0, (pow(2.0 * ${v}, 2.0) * (3.5949095 * 2.0 * ${v} - 2.5949095)) / 2.0, ${v} < 0.5)`;\n case 24:\n return `select(select(-pow(2.0, 10.0 * ${v} - 10.0) * sin((${v} * 10.0 - 10.75) * ((2.0 * 3.1415) / 3.0)), 1.0, ${v} == 1.0), 0.0, ${v} == 0.0)`;\n case 25:\n return `select(select(pow(2.0, -10.0 * ${v}) * sin((${v} * 10.0 - 0.75) * ((2.0 * 3.1415) / 3.0)) + 1.0, 1.0, ${v} == 1.0), 0.0, ${v} == 0.0)`;\n case 26:\n return `select(select(select((pow(2.0, -20.0 * ${v} + 10.0) * sin((20.0 * ${v} - 11.125) * ((2.0 * 3.1415) / 4.5))) / 2.0 + 1.0, -(pow(2.0, 20.0 * ${v} - 10.0) * sin((20.0 * ${v} - 11.125) * ((2.0 * 3.1415) / 4.5))) / 2.0, ${v} < 0.5), 1.0, ${v} == 1.0), 0.0, ${v} == 0.0)`;\n default:\n throw new Error(`NodeMaterial: unknown CurveBlock curveType ${type}`);\n }\n}\n\nfunction curveExpr(type: number, input: string, inputType: NodeValueType): string {\n if (inputType === \"f32\") {\n return curveScalar(type, input);\n }\n if (inputType === \"vec2f\") {\n return `${WGSL[inputType]}(${curveScalar(type, `(${input}).x`)}, ${curveScalar(type, `(${input}).y`)})`;\n }\n if (inputType === \"vec3f\") {\n return `${WGSL[inputType]}(${curveScalar(type, `(${input}).x`)}, ${curveScalar(type, `(${input}).y`)}, ${curveScalar(type, `(${input}).z`)})`;\n }\n if (inputType === \"vec4f\") {\n return `${WGSL[inputType]}(${curveScalar(type, `(${input}).x`)}, ${curveScalar(type, `(${input}).y`)}, ${curveScalar(type, `(${input}).z`)}, ${curveScalar(type, `(${input}).w`)})`;\n }\n throw new Error(`NodeMaterial: CurveBlock does not support ${inputType}`);\n}\n\nexport const emitter: BlockEmitter = {\n className: \"CurveBlock\",\n emit(block, _outputName, stage, state, ctx) {\n const input = ctx.resolve(block, \"input\", stage, state);\n const rawCurveType = block.serialized.curveType;\n const curveType = typeof rawCurveType === \"number\" ? rawCurveType : 2;\n return { expr: curveExpr(curveType, input.expr, input.type), type: input.type };\n },\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"curve-block-21rT0JjG.js","sources":["../src/material/node/blocks/curve-block.ts"],"sourcesContent":["import type { BlockEmitter, NodeValueType } from \"../node-types.js\";\nimport { WGSL } from \"../node-types.js\";\n\nfunction curveScalar(type: number, v: string): string {\n switch (type) {\n case 0:\n return `(1.0 - cos((${v} * 3.1415) / 2.0))`;\n case 1:\n return `sin((${v} * 3.1415) / 2.0)`;\n case 2:\n return `(-((cos(${v} * 3.1415) - 1.0)) / 2.0)`;\n case 3:\n return `(${v} * ${v})`;\n case 4:\n return `((1.0 - ${v}) * (1.0 - ${v}))`;\n case 5:\n return `select(1.0 - pow(-2.0 * ${v} + 2.0, 2.0) / 2.0, 2.0 * ${v} * ${v}, ${v} < 0.5)`;\n case 6:\n return `(${v} * ${v} * ${v})`;\n case 7:\n return `(1.0 - pow(1.0 - ${v}, 3.0))`;\n case 8:\n return `select(1.0 - pow(-2.0 * ${v} + 2.0, 3.0) / 2.0, 4.0 * ${v} * ${v} * ${v}, ${v} < 0.5)`;\n case 9:\n return `(${v} * ${v} * ${v} * ${v})`;\n case 10:\n return `(1.0 - pow(1.0 - ${v}, 4.0))`;\n case 11:\n return `select(1.0 - pow(-2.0 * ${v} + 2.0, 4.0) / 2.0, 8.0 * ${v} * ${v} * ${v} * ${v}, ${v} < 0.5)`;\n case 12:\n return `(${v} * ${v} * ${v} * ${v} * ${v})`;\n case 13:\n return `(1.0 - pow(1.0 - ${v}, 5.0))`;\n case 14:\n return `select(1.0 - pow(-2.0 * ${v} + 2.0, 5.0) / 2.0, 16.0 * ${v} * ${v} * ${v} * ${v} * ${v}, ${v} < 0.5)`;\n case 15:\n return `select(pow(2.0, 10.0 * ${v} - 10.0), 0.0, ${v} == 0.0)`;\n case 16:\n return `select(1.0 - pow(2.0, -10.0 * ${v}), 1.0, ${v} == 1.0)`;\n case 17:\n return `select(select(select((2.0 - pow(2.0, -20.0 * ${v} + 10.0)) / 2.0, pow(2.0, 20.0 * ${v} - 10.0) / 2.0, ${v} < 0.5), 1.0, ${v} == 1.0), 0.0, ${v} == 0.0)`;\n case 18:\n return `(1.0 - sqrt(1.0 - pow(${v}, 2.0)))`;\n case 19:\n return `sqrt(1.0 - pow(${v} - 1.0, 2.0))`;\n case 20:\n return `select((sqrt(1.0 - pow(-2.0 * ${v} + 2.0, 2.0)) + 1.0) / 2.0, (1.0 - sqrt(1.0 - pow(2.0 * ${v}, 2.0))) / 2.0, ${v} < 0.5)`;\n case 21:\n return `(2.70158 * ${v} * ${v} * ${v} - 1.70158 * ${v} * ${v})`;\n case 22:\n return `(2.70158 * pow(${v} - 1.0, 3.0) + 1.70158 * pow(${v} - 1.0, 2.0))`;\n case 23:\n return `select((pow(2.0 * ${v} - 2.0, 2.0) * (3.5949095 * (${v} * 2.0 - 2.0) + 3.5949095) + 2.0) / 2.0, (pow(2.0 * ${v}, 2.0) * (3.5949095 * 2.0 * ${v} - 2.5949095)) / 2.0, ${v} < 0.5)`;\n case 24:\n return `select(select(-pow(2.0, 10.0 * ${v} - 10.0) * sin((${v} * 10.0 - 10.75) * ((2.0 * 3.1415) / 3.0)), 1.0, ${v} == 1.0), 0.0, ${v} == 0.0)`;\n case 25:\n return `select(select(pow(2.0, -10.0 * ${v}) * sin((${v} * 10.0 - 0.75) * ((2.0 * 3.1415) / 3.0)) + 1.0, 1.0, ${v} == 1.0), 0.0, ${v} == 0.0)`;\n case 26:\n return `select(select(select((pow(2.0, -20.0 * ${v} + 10.0) * sin((20.0 * ${v} - 11.125) * ((2.0 * 3.1415) / 4.5))) / 2.0 + 1.0, -(pow(2.0, 20.0 * ${v} - 10.0) * sin((20.0 * ${v} - 11.125) * ((2.0 * 3.1415) / 4.5))) / 2.0, ${v} < 0.5), 1.0, ${v} == 1.0), 0.0, ${v} == 0.0)`;\n default:\n throw new Error(`NodeMaterial: unknown CurveBlock curveType ${type}`);\n }\n}\n\nfunction curveExpr(type: number, input: string, inputType: NodeValueType): string {\n if (inputType === \"f32\") {\n return curveScalar(type, input);\n }\n if (inputType === \"vec2f\") {\n return `${WGSL[inputType]}(${curveScalar(type, `(${input}).x`)}, ${curveScalar(type, `(${input}).y`)})`;\n }\n if (inputType === \"vec3f\") {\n return `${WGSL[inputType]}(${curveScalar(type, `(${input}).x`)}, ${curveScalar(type, `(${input}).y`)}, ${curveScalar(type, `(${input}).z`)})`;\n }\n if (inputType === \"vec4f\") {\n return `${WGSL[inputType]}(${curveScalar(type, `(${input}).x`)}, ${curveScalar(type, `(${input}).y`)}, ${curveScalar(type, `(${input}).z`)}, ${curveScalar(type, `(${input}).w`)})`;\n }\n throw new Error(`NodeMaterial: CurveBlock does not support ${inputType}`);\n}\n\nexport const emitter: BlockEmitter = {\n className: \"CurveBlock\",\n emit(block, _outputName, stage, state, ctx) {\n const input = ctx.resolve(block, \"input\", stage, state);\n const rawCurveType = block.serialized.curveType;\n const curveType = typeof rawCurveType === \"number\" ? rawCurveType : 2;\n return { expr: curveExpr(curveType, input.expr, input.type), type: input.type };\n },\n};\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { aK as PBR_HAS_EMISSIVE_COLOR, aL as PBR_HAS_EMISSIVE } from "./index-C8HOR2sB.js";
1
+ import { b1 as PBR_HAS_EMISSIVE_COLOR, b2 as PBR_HAS_EMISSIVE } from "./index-CLElg2Bo.js";
2
2
  function createEmissiveColorFragment(hasEmissiveTexture) {
3
3
  return {
4
4
  _id: "emissive-color",
@@ -7,7 +7,7 @@ function createEmissiveColorFragment(hasEmissiveTexture) {
7
7
  { _name: "_emissiveColorPad", _type: "f32" }
8
8
  ],
9
9
  _fragmentSlots: {
10
- AT: hasEmissiveTexture ? `let emissive = material.emissiveColor * textureSample(emissiveTexture, emissiveSampler, input.uv).rgb;` : `let emissive = material.emissiveColor;`
10
+ AT: hasEmissiveTexture ? `emissive=material.emissiveColor*textureSample(emissiveTexture,emissiveSampler,input.uv).rgb;` : `emissive=material.emissiveColor;`
11
11
  }
12
12
  };
13
13
  }
@@ -36,4 +36,4 @@ export {
36
36
  pbrExt,
37
37
  writeEmissiveUBO
38
38
  };
39
- //# sourceMappingURL=emissive-fragment-BnNvbBCw.js.map
39
+ //# sourceMappingURL=emissive-fragment-C5FtBs3y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emissive-fragment-C5FtBs3y.js","sources":["../src/material/pbr/fragments/emissive-fragment.ts"],"sourcesContent":["/**\n * Emissive Color Fragment\n *\n * Adds an emissiveColor vec3 uniform to MeshUniforms and uses it\n * in the fragment shader's emissive computation.\n *\n * Zero bytes in bundles for scenes that don't use emissive color.\n */\n\nimport type { ShaderFragment } from \"../../../shader/fragment-types.js\";\nimport type { PbrMaterialProps } from \"../pbr-material.js\";\nimport type { PbrExt } from \"../pbr-flags.js\";\nimport { PBR_HAS_EMISSIVE_COLOR, PBR_HAS_EMISSIVE } from \"../pbr-flag-bits.js\";\n\n/**\n * Create an emissive-color fragment.\n * @param hasEmissiveTexture - Whether the material also has an emissive texture.\n */\nexport function createEmissiveColorFragment(hasEmissiveTexture: boolean): ShaderFragment {\n return {\n _id: \"emissive-color\",\n\n _uboFields: [\n { _name: \"emissiveColor\", _type: \"vec3<f32>\" },\n { _name: \"_emissiveColorPad\", _type: \"f32\" },\n ],\n\n _fragmentSlots: {\n AT: hasEmissiveTexture ? `emissive=material.emissiveColor*textureSample(emissiveTexture,emissiveSampler,input.uv).rgb;` : `emissive=material.emissiveColor;`,\n },\n };\n}\n\n/** Write the emissive-color material-UBO slice. */\nexport function writeEmissiveUBO(data: Float32Array, material: PbrMaterialProps, offsets: ReadonlyMap<string, number>): void {\n if (!material.emissiveColor || !offsets.has(\"emissiveColor\")) {\n return;\n }\n const off = offsets.get(\"emissiveColor\")! / 4;\n data[off] = material.emissiveColor[0]!;\n data[off + 1] = material.emissiveColor[1]!;\n data[off + 2] = material.emissiveColor[2]!;\n}\n\nexport const pbrExt: PbrExt = {\n id: \"emissive-color\",\n phase: \"fragment\",\n frag(ctx) {\n if (!(ctx._features & PBR_HAS_EMISSIVE_COLOR)) {\n return null;\n }\n return createEmissiveColorFragment((ctx._features & PBR_HAS_EMISSIVE) !== 0);\n },\n writeUbo: writeEmissiveUBO as PbrExt[\"writeUbo\"],\n};\n"],"names":[],"mappings":";AAkBO,SAAS,4BAA4B,oBAA6C;AACrF,SAAO;AAAA,IACH,KAAK;AAAA,IAEL,YAAY;AAAA,MACR,EAAE,OAAO,iBAAiB,OAAO,YAAA;AAAA,MACjC,EAAE,OAAO,qBAAqB,OAAO,MAAA;AAAA,IAAM;AAAA,IAG/C,gBAAgB;AAAA,MACZ,IAAI,qBAAqB,iGAAiG;AAAA,IAAA;AAAA,EAC9H;AAER;AAGO,SAAS,iBAAiB,MAAoB,UAA4B,SAA4C;AACzH,MAAI,CAAC,SAAS,iBAAiB,CAAC,QAAQ,IAAI,eAAe,GAAG;AAC1D;AAAA,EACJ;AACA,QAAM,MAAM,QAAQ,IAAI,eAAe,IAAK;AAC5C,OAAK,GAAG,IAAI,SAAS,cAAc,CAAC;AACpC,OAAK,MAAM,CAAC,IAAI,SAAS,cAAc,CAAC;AACxC,OAAK,MAAM,CAAC,IAAI,SAAS,cAAc,CAAC;AAC5C;AAEO,MAAM,SAAiB;AAAA,EAC1B,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,KAAK,KAAK;AACN,QAAI,EAAE,IAAI,YAAY,yBAAyB;AAC3C,aAAO;AAAA,IACX;AACA,WAAO,6BAA6B,IAAI,YAAY,sBAAsB,CAAC;AAAA,EAC/E;AAAA,EACA,UAAU;AACd;"}
@@ -1,4 +1,4 @@
1
- import { Q as createMaterialView, N as NODE_ESM_SHADOW_OUTPUT } from "./index-C8HOR2sB.js";
1
+ import { O as createMaterialView, N as NODE_ESM_SHADOW_OUTPUT } from "./index-CLElg2Bo.js";
2
2
  const NODE_ESM_SHADOW_DEPTH_CODE = `let depthMetricSM = (in.position.z + nmeShadowParams.depthValues.x) / nmeShadowParams.depthValues.y + nmeShadowParams.biasAndScale.x;
3
3
  let depthSM = clamp(exp(-min(87.0, nmeShadowParams.biasAndScale.z * depthMetricSM)), 0.0, 1.0);
4
4
  return vec4<f32>(depthSM, 1.0, 1.0, 1.0);`;
@@ -12,4 +12,4 @@ function createNodeEsmShadowMaterialView(source, shadowParamsUBO) {
12
12
  export {
13
13
  createNodeEsmShadowMaterialView
14
14
  };
15
- //# sourceMappingURL=esm-shadow-view-DN9HIaM4.js.map
15
+ //# sourceMappingURL=esm-shadow-view-Cl3rPGof.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"esm-shadow-view-DN9HIaM4.js","sources":["../src/material/node/esm-shadow-view.ts"],"sourcesContent":["/** NodeMaterial view helper that writes ESM shadow color. */\n\nimport { createMaterialView } from \"../material-view.js\";\nimport type { MaterialView } from \"../material.js\";\nimport { NODE_ESM_SHADOW_OUTPUT } from \"./node-flags.js\";\nimport type { NodeMaterial } from \"./node-material.js\";\n\nexport interface NodeEsmShadowMaterialView extends MaterialView {\n /** @internal */\n readonly _esmShadowParamsUBO: GPUBuffer;\n /** @internal */\n readonly _esmShadowDepthCode: string;\n}\n\nconst NODE_ESM_SHADOW_DEPTH_CODE = `let depthMetricSM = (in.position.z + nmeShadowParams.depthValues.x) / nmeShadowParams.depthValues.y + nmeShadowParams.biasAndScale.x;\nlet depthSM = clamp(exp(-min(87.0, nmeShadowParams.biasAndScale.z * depthMetricSM)), 0.0, 1.0);\nreturn vec4<f32>(depthSM, 1.0, 1.0, 1.0);`;\n\nexport function createNodeEsmShadowMaterialView(source: NodeMaterial, shadowParamsUBO: GPUBuffer): NodeEsmShadowMaterialView {\n const features = source._renderFeatures ?? { features: 0 };\n const view = createMaterialView(source, { features: features.features | NODE_ESM_SHADOW_OUTPUT }) as NodeEsmShadowMaterialView;\n Object.defineProperty(view, \"_esmShadowParamsUBO\", { value: shadowParamsUBO, enumerable: false });\n Object.defineProperty(view, \"_esmShadowDepthCode\", { value: NODE_ESM_SHADOW_DEPTH_CODE, enumerable: false });\n return view;\n}\n"],"names":[],"mappings":";AAcA,MAAM,6BAA6B;AAAA;AAAA;AAI5B,SAAS,gCAAgC,QAAsB,iBAAuD;AACzH,QAAM,WAAW,OAAO,mBAAmB,EAAE,UAAU,EAAA;AACvD,QAAM,OAAO,mBAAmB,QAAQ,EAAE,UAAU,SAAS,WAAW,wBAAwB;AAChG,SAAO,eAAe,MAAM,uBAAuB,EAAE,OAAO,iBAAiB,YAAY,OAAO;AAChG,SAAO,eAAe,MAAM,uBAAuB,EAAE,OAAO,4BAA4B,YAAY,OAAO;AAC3G,SAAO;AACX;"}
1
+ {"version":3,"file":"esm-shadow-view-Cl3rPGof.js","sources":["../src/material/node/esm-shadow-view.ts"],"sourcesContent":["/** NodeMaterial view helper that writes ESM shadow color. */\n\nimport { createMaterialView } from \"../material-view.js\";\nimport type { MaterialView } from \"../material.js\";\nimport { NODE_ESM_SHADOW_OUTPUT } from \"./node-flags.js\";\nimport type { NodeMaterial } from \"./node-material.js\";\n\nexport interface NodeEsmShadowMaterialView extends MaterialView {\n /** @internal */\n readonly _esmShadowParamsUBO: GPUBuffer;\n /** @internal */\n readonly _esmShadowDepthCode: string;\n}\n\nconst NODE_ESM_SHADOW_DEPTH_CODE = `let depthMetricSM = (in.position.z + nmeShadowParams.depthValues.x) / nmeShadowParams.depthValues.y + nmeShadowParams.biasAndScale.x;\nlet depthSM = clamp(exp(-min(87.0, nmeShadowParams.biasAndScale.z * depthMetricSM)), 0.0, 1.0);\nreturn vec4<f32>(depthSM, 1.0, 1.0, 1.0);`;\n\nexport function createNodeEsmShadowMaterialView(source: NodeMaterial, shadowParamsUBO: GPUBuffer): NodeEsmShadowMaterialView {\n const features = source._renderFeatures ?? { features: 0 };\n const view = createMaterialView(source, { features: features.features | NODE_ESM_SHADOW_OUTPUT }) as NodeEsmShadowMaterialView;\n Object.defineProperty(view, \"_esmShadowParamsUBO\", { value: shadowParamsUBO, enumerable: false });\n Object.defineProperty(view, \"_esmShadowDepthCode\", { value: NODE_ESM_SHADOW_DEPTH_CODE, enumerable: false });\n return view;\n}\n"],"names":[],"mappings":";AAcA,MAAM,6BAA6B;AAAA;AAAA;AAI5B,SAAS,gCAAgC,QAAsB,iBAAuD;AACzH,QAAM,WAAW,OAAO,mBAAmB,EAAE,UAAU,EAAA;AACvD,QAAM,OAAO,mBAAmB,QAAQ,EAAE,UAAU,SAAS,WAAW,wBAAwB;AAChG,SAAO,eAAe,MAAM,uBAAuB,EAAE,OAAO,iBAAiB,YAAY,OAAO;AAChG,SAAO,eAAe,MAAM,uBAAuB,EAAE,OAAO,4BAA4B,YAAY,OAAO;AAC3G,SAAO;AACX;"}
@@ -1,4 +1,4 @@
1
- import { Q as createMaterialView, R as ESM_SHADOW_OUTPUT, S as MATERIAL_ALPHA_BLEND } from "./index-C8HOR2sB.js";
1
+ import { O as createMaterialView, P as ESM_SHADOW_OUTPUT, Q as MATERIAL_ALPHA_BLEND } from "./index-CLElg2Bo.js";
2
2
  const STANDARD_ESM_SHADOW_DEPTH_CODE = `let depthMetricSM = (input.clipPos.z + shadowParams.depthValues.x) / shadowParams.depthValues.y + shadowParams.biasAndScale.x;
3
3
  let depthSM = clamp(exp(-min(87.0, shadowParams.biasAndScale.z * depthMetricSM)), 0.0, 1.0);
4
4
  return vec4<f32>(depthSM, 1.0, 1.0, 1.0);`;
@@ -12,4 +12,4 @@ function createStandardEsmShadowMaterialView(source, shadowParamsUBO) {
12
12
  export {
13
13
  createStandardEsmShadowMaterialView
14
14
  };
15
- //# sourceMappingURL=esm-shadow-view-Dk9NFtLq.js.map
15
+ //# sourceMappingURL=esm-shadow-view-Gtd1LWRP.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"esm-shadow-view-Dk9NFtLq.js","sources":["../src/material/standard/esm-shadow-view.ts"],"sourcesContent":["/** Standard material view helper that writes ESM shadow color. */\n\nimport { createMaterialView } from \"../material-view.js\";\nimport type { MaterialView } from \"../material.js\";\nimport { ESM_SHADOW_OUTPUT, MATERIAL_ALPHA_BLEND } from \"./standard-flags.js\";\nimport type { StandardMaterialProps } from \"./standard-material.js\";\n\nexport interface StandardEsmShadowMaterialView extends MaterialView {\n /** @internal */\n readonly _esmShadowParamsUBO: GPUBuffer;\n /** @internal */\n readonly _esmShadowDepthCode: string;\n}\n\nconst STANDARD_ESM_SHADOW_DEPTH_CODE = `let depthMetricSM = (input.clipPos.z + shadowParams.depthValues.x) / shadowParams.depthValues.y + shadowParams.biasAndScale.x;\nlet depthSM = clamp(exp(-min(87.0, shadowParams.biasAndScale.z * depthMetricSM)), 0.0, 1.0);\nreturn vec4<f32>(depthSM, 1.0, 1.0, 1.0);`;\n\nexport function createStandardEsmShadowMaterialView(source: StandardMaterialProps, shadowParamsUBO: GPUBuffer): StandardEsmShadowMaterialView {\n const features = source._renderFeatures ?? { features: 0 };\n const view = createMaterialView(source, { features: (features.features & ~MATERIAL_ALPHA_BLEND) | ESM_SHADOW_OUTPUT }) as StandardEsmShadowMaterialView;\n Object.defineProperty(view, \"_esmShadowParamsUBO\", { value: shadowParamsUBO, enumerable: false });\n Object.defineProperty(view, \"_esmShadowDepthCode\", { value: STANDARD_ESM_SHADOW_DEPTH_CODE, enumerable: false });\n return view;\n}\n"],"names":[],"mappings":";AAcA,MAAM,iCAAiC;AAAA;AAAA;AAIhC,SAAS,oCAAoC,QAA+B,iBAA2D;AAC1I,QAAM,WAAW,OAAO,mBAAmB,EAAE,UAAU,EAAA;AACvD,QAAM,OAAO,mBAAmB,QAAQ,EAAE,UAAW,SAAS,WAAW,CAAC,uBAAwB,mBAAmB;AACrH,SAAO,eAAe,MAAM,uBAAuB,EAAE,OAAO,iBAAiB,YAAY,OAAO;AAChG,SAAO,eAAe,MAAM,uBAAuB,EAAE,OAAO,gCAAgC,YAAY,OAAO;AAC/G,SAAO;AACX;"}
1
+ {"version":3,"file":"esm-shadow-view-Gtd1LWRP.js","sources":["../src/material/standard/esm-shadow-view.ts"],"sourcesContent":["/** Standard material view helper that writes ESM shadow color. */\n\nimport { createMaterialView } from \"../material-view.js\";\nimport type { MaterialView } from \"../material.js\";\nimport { ESM_SHADOW_OUTPUT, MATERIAL_ALPHA_BLEND } from \"./standard-flags.js\";\nimport type { StandardMaterialProps } from \"./standard-material.js\";\n\nexport interface StandardEsmShadowMaterialView extends MaterialView {\n /** @internal */\n readonly _esmShadowParamsUBO: GPUBuffer;\n /** @internal */\n readonly _esmShadowDepthCode: string;\n}\n\nconst STANDARD_ESM_SHADOW_DEPTH_CODE = `let depthMetricSM = (input.clipPos.z + shadowParams.depthValues.x) / shadowParams.depthValues.y + shadowParams.biasAndScale.x;\nlet depthSM = clamp(exp(-min(87.0, shadowParams.biasAndScale.z * depthMetricSM)), 0.0, 1.0);\nreturn vec4<f32>(depthSM, 1.0, 1.0, 1.0);`;\n\nexport function createStandardEsmShadowMaterialView(source: StandardMaterialProps, shadowParamsUBO: GPUBuffer): StandardEsmShadowMaterialView {\n const features = source._renderFeatures ?? { features: 0 };\n const view = createMaterialView(source, { features: (features.features & ~MATERIAL_ALPHA_BLEND) | ESM_SHADOW_OUTPUT }) as StandardEsmShadowMaterialView;\n Object.defineProperty(view, \"_esmShadowParamsUBO\", { value: shadowParamsUBO, enumerable: false });\n Object.defineProperty(view, \"_esmShadowDepthCode\", { value: STANDARD_ESM_SHADOW_DEPTH_CODE, enumerable: false });\n return view;\n}\n"],"names":[],"mappings":";AAcA,MAAM,iCAAiC;AAAA;AAAA;AAIhC,SAAS,oCAAoC,QAA+B,iBAA2D;AAC1I,QAAM,WAAW,OAAO,mBAAmB,EAAE,UAAU,EAAA;AACvD,QAAM,OAAO,mBAAmB,QAAQ,EAAE,UAAW,SAAS,WAAW,CAAC,uBAAwB,mBAAmB;AACrH,SAAO,eAAe,MAAM,uBAAuB,EAAE,OAAO,iBAAiB,YAAY,OAAO;AAChG,SAAO,eAAe,MAAM,uBAAuB,EAAE,OAAO,gCAAgC,YAAY,OAAO;AAC/G,SAAO;AACX;"}
@@ -1,4 +1,4 @@
1
- import { Q as createMaterialView, U as PBR2_ESM_SHADOW_OUTPUT, V as PBR_HAS_ALPHA_BLEND } from "./index-C8HOR2sB.js";
1
+ import { O as createMaterialView, R as PBR2_ESM_SHADOW_OUTPUT, V as PBR_HAS_ALPHA_BLEND } from "./index-CLElg2Bo.js";
2
2
  const PBR_ESM_SHADOW_DEPTH_CODE = `let depthMetricSM = (input.clipPos.z + shadowParams.depthValues.x) / shadowParams.depthValues.y + shadowParams.biasAndScale.x;
3
3
  let depthSM = clamp(exp(-min(87.0, shadowParams.biasAndScale.z * depthMetricSM)), 0.0, 1.0);
4
4
  return vec4<f32>(depthSM, 1.0, 1.0, 1.0);`;
@@ -15,4 +15,4 @@ function createPbrEsmShadowMaterialView(source, shadowParamsUBO) {
15
15
  export {
16
16
  createPbrEsmShadowMaterialView
17
17
  };
18
- //# sourceMappingURL=esm-shadow-view-DGKdF1NI.js.map
18
+ //# sourceMappingURL=esm-shadow-view-c5YV4Eg9.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"esm-shadow-view-DGKdF1NI.js","sources":["../src/material/pbr/esm-shadow-view.ts"],"sourcesContent":["/** PBR material view helper that writes ESM shadow color. */\n\nimport { createMaterialView } from \"../material-view.js\";\nimport type { MaterialView } from \"../material.js\";\nimport { PBR_HAS_ALPHA_BLEND, PBR2_ESM_SHADOW_OUTPUT } from \"./pbr-flags.js\";\nimport type { PbrMaterialProps } from \"./pbr-material.js\";\n\nexport interface PbrEsmShadowMaterialView extends MaterialView {\n /** @internal */\n readonly _esmShadowParamsUBO: GPUBuffer;\n /** @internal */\n readonly _esmShadowDepthCode: string;\n}\n\nconst PBR_ESM_SHADOW_DEPTH_CODE = `let depthMetricSM = (input.clipPos.z + shadowParams.depthValues.x) / shadowParams.depthValues.y + shadowParams.biasAndScale.x;\nlet depthSM = clamp(exp(-min(87.0, shadowParams.biasAndScale.z * depthMetricSM)), 0.0, 1.0);\nreturn vec4<f32>(depthSM, 1.0, 1.0, 1.0);`;\n\nexport function createPbrEsmShadowMaterialView(source: PbrMaterialProps, shadowParamsUBO: GPUBuffer): PbrEsmShadowMaterialView {\n const features = source._renderFeatures ?? { features: 0, features2: 0 };\n const view = createMaterialView(source, {\n features: features.features & ~PBR_HAS_ALPHA_BLEND,\n features2: (features.features2 ?? 0) | PBR2_ESM_SHADOW_OUTPUT,\n }) as PbrEsmShadowMaterialView;\n Object.defineProperty(view, \"_esmShadowParamsUBO\", { value: shadowParamsUBO, enumerable: false });\n Object.defineProperty(view, \"_esmShadowDepthCode\", { value: PBR_ESM_SHADOW_DEPTH_CODE, enumerable: false });\n return view;\n}\n"],"names":[],"mappings":";AAcA,MAAM,4BAA4B;AAAA;AAAA;AAI3B,SAAS,+BAA+B,QAA0B,iBAAsD;AAC3H,QAAM,WAAW,OAAO,mBAAmB,EAAE,UAAU,GAAG,WAAW,EAAA;AACrE,QAAM,OAAO,mBAAmB,QAAQ;AAAA,IACpC,UAAU,SAAS,WAAW,CAAC;AAAA,IAC/B,YAAY,SAAS,aAAa,KAAK;AAAA,EAAA,CAC1C;AACD,SAAO,eAAe,MAAM,uBAAuB,EAAE,OAAO,iBAAiB,YAAY,OAAO;AAChG,SAAO,eAAe,MAAM,uBAAuB,EAAE,OAAO,2BAA2B,YAAY,OAAO;AAC1G,SAAO;AACX;"}
1
+ {"version":3,"file":"esm-shadow-view-c5YV4Eg9.js","sources":["../src/material/pbr/esm-shadow-view.ts"],"sourcesContent":["/** PBR material view helper that writes ESM shadow color. */\n\nimport { createMaterialView } from \"../material-view.js\";\nimport type { MaterialView } from \"../material.js\";\nimport { PBR_HAS_ALPHA_BLEND, PBR2_ESM_SHADOW_OUTPUT } from \"./pbr-flags.js\";\nimport type { PbrMaterialProps } from \"./pbr-material.js\";\n\nexport interface PbrEsmShadowMaterialView extends MaterialView {\n /** @internal */\n readonly _esmShadowParamsUBO: GPUBuffer;\n /** @internal */\n readonly _esmShadowDepthCode: string;\n}\n\nconst PBR_ESM_SHADOW_DEPTH_CODE = `let depthMetricSM = (input.clipPos.z + shadowParams.depthValues.x) / shadowParams.depthValues.y + shadowParams.biasAndScale.x;\nlet depthSM = clamp(exp(-min(87.0, shadowParams.biasAndScale.z * depthMetricSM)), 0.0, 1.0);\nreturn vec4<f32>(depthSM, 1.0, 1.0, 1.0);`;\n\nexport function createPbrEsmShadowMaterialView(source: PbrMaterialProps, shadowParamsUBO: GPUBuffer): PbrEsmShadowMaterialView {\n const features = source._renderFeatures ?? { features: 0, features2: 0 };\n const view = createMaterialView(source, {\n features: features.features & ~PBR_HAS_ALPHA_BLEND,\n features2: (features.features2 ?? 0) | PBR2_ESM_SHADOW_OUTPUT,\n }) as PbrEsmShadowMaterialView;\n Object.defineProperty(view, \"_esmShadowParamsUBO\", { value: shadowParamsUBO, enumerable: false });\n Object.defineProperty(view, \"_esmShadowDepthCode\", { value: PBR_ESM_SHADOW_DEPTH_CODE, enumerable: false });\n return view;\n}\n"],"names":[],"mappings":";AAcA,MAAM,4BAA4B;AAAA;AAAA;AAI3B,SAAS,+BAA+B,QAA0B,iBAAsD;AAC3H,QAAM,WAAW,OAAO,mBAAmB,EAAE,UAAU,GAAG,WAAW,EAAA;AACrE,QAAM,OAAO,mBAAmB,QAAQ;AAAA,IACpC,UAAU,SAAS,WAAW,CAAC;AAAA,IAC/B,YAAY,SAAS,aAAa,KAAK;AAAA,EAAA,CAC1C;AACD,SAAO,eAAe,MAAM,uBAAuB,EAAE,OAAO,iBAAiB,YAAY,OAAO;AAChG,SAAO,eAAe,MAAM,uBAAuB,EAAE,OAAO,2BAA2B,YAAY,OAAO;AAC1G,SAAO;AACX;"}