@zephyr3d/scene 0.9.2 → 0.9.4

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 (513) hide show
  1. package/dist/animation/animationset.js +135 -135
  2. package/dist/animation/animationset.js.map +1 -1
  3. package/dist/animation/ik/ik_chain_builder.js +68 -0
  4. package/dist/animation/ik/ik_chain_builder.js.map +1 -0
  5. package/dist/animation/ik/ik_pole_constraint.js +2 -7
  6. package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
  7. package/dist/animation/joint_dynamics/controller.js +146 -146
  8. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  9. package/dist/animation/joint_dynamics/math.js +16 -0
  10. package/dist/animation/joint_dynamics/math.js.map +1 -0
  11. package/dist/animation/spring/spring_system.js +75 -75
  12. package/dist/animation/spring/spring_system.js.map +1 -1
  13. package/dist/animation/spring2/constraints.js.map +1 -1
  14. package/dist/animation/spring2/controller.js +64 -64
  15. package/dist/animation/spring2/controller.js.map +1 -1
  16. package/dist/animation/spring2/math.js.map +1 -1
  17. package/dist/animation/spring2/spring_system.js +8 -8
  18. package/dist/animation/spring2/spring_system.js.map +1 -1
  19. package/dist/app/engine.js +119 -71
  20. package/dist/app/engine.js.map +1 -1
  21. package/dist/asset/assetmanager.js +296 -244
  22. package/dist/asset/assetmanager.js.map +1 -1
  23. package/dist/asset/loaders/gltf/gltf_loader.js +1 -0
  24. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  25. package/dist/camera/camera.js +184 -184
  26. package/dist/camera/camera.js.map +1 -1
  27. package/dist/index.d.ts +685 -38
  28. package/dist/index.js +11 -2
  29. package/dist/index.js.map +1 -1
  30. package/dist/material/material.js +290 -290
  31. package/dist/material/material.js.map +1 -1
  32. package/dist/material/msdf_text.js +180 -0
  33. package/dist/material/msdf_text.js.map +1 -0
  34. package/dist/material/msdf_text_sprite.js +64 -0
  35. package/dist/material/msdf_text_sprite.js.map +1 -0
  36. package/dist/material/pbrblueprint.js +123 -108
  37. package/dist/material/pbrblueprint.js.map +1 -1
  38. package/dist/material/shader/helper.js +6 -3
  39. package/dist/material/shader/helper.js.map +1 -1
  40. package/dist/material/sprite_sdf.js +106 -0
  41. package/dist/material/sprite_sdf.js.map +1 -0
  42. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  43. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  44. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  45. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  46. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  47. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  48. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  49. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  50. package/dist/posteffect/ssr.js +1 -0
  51. package/dist/posteffect/ssr.js.map +1 -1
  52. package/dist/render/abuffer_oit.js +1 -0
  53. package/dist/render/abuffer_oit.js.map +1 -1
  54. package/dist/render/cluster_light.js +3 -4
  55. package/dist/render/cluster_light.js.map +1 -1
  56. package/dist/render/cull_visitor.js +28 -0
  57. package/dist/render/cull_visitor.js.map +1 -1
  58. package/dist/render/drawable.js.map +1 -1
  59. package/dist/render/drawable_mixin.js +1 -0
  60. package/dist/render/drawable_mixin.js.map +1 -1
  61. package/dist/render/fbm_wavegenerator.js +1 -0
  62. package/dist/render/fbm_wavegenerator.js.map +1 -1
  63. package/dist/render/gerstner_wavegenerator.js +1 -0
  64. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  65. package/dist/render/globalbindgroup_allocator.js +1 -0
  66. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  67. package/dist/render/render_queue.js +1 -0
  68. package/dist/render/render_queue.js.map +1 -1
  69. package/dist/render/rendergraph/history_resource_manager.js +93 -93
  70. package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
  71. package/dist/render/rendergraph/history_resources.js +3 -3
  72. package/dist/render/rendergraph/history_resources.js.map +1 -1
  73. package/dist/render/rendergraph/types.js +22 -22
  74. package/dist/render/rendergraph/types.js.map +1 -1
  75. package/dist/scene/basesprite.js +1 -5
  76. package/dist/scene/basesprite.js.map +1 -1
  77. package/dist/scene/batchgroup.js +29 -17
  78. package/dist/scene/batchgroup.js.map +1 -1
  79. package/dist/scene/environment.js +1 -0
  80. package/dist/scene/environment.js.map +1 -1
  81. package/dist/scene/mesh.js +8 -9
  82. package/dist/scene/mesh.js.map +1 -1
  83. package/dist/scene/meshdrawable.js +96 -0
  84. package/dist/scene/meshdrawable.js.map +1 -0
  85. package/dist/scene/msdftext.js +341 -0
  86. package/dist/scene/msdftext.js.map +1 -0
  87. package/dist/scene/msdftextsprite.js +349 -0
  88. package/dist/scene/msdftextsprite.js.map +1 -0
  89. package/dist/scene/particlesys.js +1 -0
  90. package/dist/scene/particlesys.js.map +1 -1
  91. package/dist/scene/scene.js +1 -0
  92. package/dist/scene/scene.js.map +1 -1
  93. package/dist/scene/scene_node.js +6 -0
  94. package/dist/scene/scene_node.js.map +1 -1
  95. package/dist/scene/sdftextsprite.js +322 -0
  96. package/dist/scene/sdftextsprite.js.map +1 -0
  97. package/dist/scene/terrain-cm/grass.js +1 -0
  98. package/dist/scene/terrain-cm/grass.js.map +1 -1
  99. package/dist/scene/terrain-cm/grassmaterial.js +1 -0
  100. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  101. package/dist/scene/terrain-cm/terrain-cm.js +1 -0
  102. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  103. package/dist/scene/textsprite.js +120 -0
  104. package/dist/scene/textsprite.js.map +1 -0
  105. package/dist/scene/water.js +1 -0
  106. package/dist/scene/water.js.map +1 -1
  107. package/dist/shadow/shader.js +1 -0
  108. package/dist/shadow/shader.js.map +1 -1
  109. package/dist/shapes/torus.js +90 -59
  110. package/dist/shapes/torus.js.map +1 -1
  111. package/dist/src/animation/animation.js +127 -0
  112. package/dist/src/animation/animation.js.map +1 -0
  113. package/dist/src/animation/animationset.js +255 -0
  114. package/dist/src/animation/animationset.js.map +1 -0
  115. package/dist/src/animation/animationtrack.js +34 -0
  116. package/dist/src/animation/animationtrack.js.map +1 -0
  117. package/dist/src/animation/eulerrotationtrack.js +52 -0
  118. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  119. package/dist/src/animation/morphtarget.js +93 -0
  120. package/dist/src/animation/morphtarget.js.map +1 -0
  121. package/dist/src/animation/morphtrack.js +70 -0
  122. package/dist/src/animation/morphtrack.js.map +1 -0
  123. package/dist/src/animation/proptrack.js +161 -0
  124. package/dist/src/animation/proptrack.js.map +1 -0
  125. package/dist/src/animation/rotationtrack.js +51 -0
  126. package/dist/src/animation/rotationtrack.js.map +1 -0
  127. package/dist/src/animation/scaletrack.js +50 -0
  128. package/dist/src/animation/scaletrack.js.map +1 -0
  129. package/dist/src/animation/skeleton.js +204 -0
  130. package/dist/src/animation/skeleton.js.map +1 -0
  131. package/dist/src/animation/translationtrack.js +50 -0
  132. package/dist/src/animation/translationtrack.js.map +1 -0
  133. package/dist/src/app/app.js +129 -0
  134. package/dist/src/app/app.js.map +1 -0
  135. package/dist/src/app/inputmgr.js +267 -0
  136. package/dist/src/app/inputmgr.js.map +1 -0
  137. package/dist/src/asset/assetmanager.js +404 -0
  138. package/dist/src/asset/assetmanager.js.map +1 -0
  139. package/dist/src/asset/builtin.js +337 -0
  140. package/dist/src/asset/builtin.js.map +1 -0
  141. package/dist/src/asset/loaders/dds/dds.js +470 -0
  142. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  143. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  144. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  145. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  146. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  147. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  148. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  149. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  150. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  151. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  152. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  153. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  154. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  155. package/dist/src/asset/loaders/loader.js +45 -0
  156. package/dist/src/asset/loaders/loader.js.map +1 -0
  157. package/dist/src/asset/model.js +414 -0
  158. package/dist/src/asset/model.js.map +1 -0
  159. package/dist/src/blitter/bilateralblur.js +221 -0
  160. package/dist/src/blitter/bilateralblur.js.map +1 -0
  161. package/dist/src/blitter/blitter.js +390 -0
  162. package/dist/src/blitter/blitter.js.map +1 -0
  163. package/dist/src/blitter/box.js +118 -0
  164. package/dist/src/blitter/box.js.map +1 -0
  165. package/dist/src/blitter/copy.js +22 -0
  166. package/dist/src/blitter/copy.js.map +1 -0
  167. package/dist/src/blitter/gaussianblur.js +228 -0
  168. package/dist/src/blitter/gaussianblur.js.map +1 -0
  169. package/dist/src/camera/base.js +92 -0
  170. package/dist/src/camera/base.js.map +1 -0
  171. package/dist/src/camera/camera.js +1005 -0
  172. package/dist/src/camera/camera.js.map +1 -0
  173. package/dist/src/camera/fps.js +238 -0
  174. package/dist/src/camera/fps.js.map +1 -0
  175. package/dist/src/camera/orbit.js +245 -0
  176. package/dist/src/camera/orbit.js.map +1 -0
  177. package/dist/src/camera/orthocamera.js +167 -0
  178. package/dist/src/camera/orthocamera.js.map +1 -0
  179. package/dist/src/camera/perspectivecamera.js +141 -0
  180. package/dist/src/camera/perspectivecamera.js.map +1 -0
  181. package/dist/src/index.js +120 -0
  182. package/dist/src/index.js.map +1 -0
  183. package/dist/src/material/blinn.js +81 -0
  184. package/dist/src/material/blinn.js.map +1 -0
  185. package/dist/src/material/grassmaterial.js +113 -0
  186. package/dist/src/material/grassmaterial.js.map +1 -0
  187. package/dist/src/material/lambert.js +92 -0
  188. package/dist/src/material/lambert.js.map +1 -0
  189. package/dist/src/material/material.js +301 -0
  190. package/dist/src/material/material.js.map +1 -0
  191. package/dist/src/material/meshmaterial.js +704 -0
  192. package/dist/src/material/meshmaterial.js.map +1 -0
  193. package/dist/src/material/mixins/albedocolor.js +76 -0
  194. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  195. package/dist/src/material/mixins/foliage.js +47 -0
  196. package/dist/src/material/mixins/foliage.js.map +1 -0
  197. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  198. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  199. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  200. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  201. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  202. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  203. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  204. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  205. package/dist/src/material/mixins/lit.js +476 -0
  206. package/dist/src/material/mixins/lit.js.map +1 -0
  207. package/dist/src/material/mixins/pbr/common.js +918 -0
  208. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  209. package/dist/src/material/mixins/texture.js +172 -0
  210. package/dist/src/material/mixins/texture.js.map +1 -0
  211. package/dist/src/material/mixins/vertexcolor.js +56 -0
  212. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  213. package/dist/src/material/particle.js +178 -0
  214. package/dist/src/material/particle.js.map +1 -0
  215. package/dist/src/material/pbrmr.js +97 -0
  216. package/dist/src/material/pbrmr.js.map +1 -0
  217. package/dist/src/material/pbrsg.js +97 -0
  218. package/dist/src/material/pbrsg.js.map +1 -0
  219. package/dist/src/material/shader/helper.js +1209 -0
  220. package/dist/src/material/shader/helper.js.map +1 -0
  221. package/dist/src/material/terrain-cm.js +606 -0
  222. package/dist/src/material/terrain-cm.js.map +1 -0
  223. package/dist/src/material/terrainmaterial.js +375 -0
  224. package/dist/src/material/terrainmaterial.js.map +1 -0
  225. package/dist/src/material/unlit.js +41 -0
  226. package/dist/src/material/unlit.js.map +1 -0
  227. package/dist/src/material/water.js +417 -0
  228. package/dist/src/material/water.js.map +1 -0
  229. package/dist/src/posteffect/bloom.js +361 -0
  230. package/dist/src/posteffect/bloom.js.map +1 -0
  231. package/dist/src/posteffect/compositor.js +226 -0
  232. package/dist/src/posteffect/compositor.js.map +1 -0
  233. package/dist/src/posteffect/fxaa.js +273 -0
  234. package/dist/src/posteffect/fxaa.js.map +1 -0
  235. package/dist/src/posteffect/grayscale.js +69 -0
  236. package/dist/src/posteffect/grayscale.js.map +1 -0
  237. package/dist/src/posteffect/motionblur.js +96 -0
  238. package/dist/src/posteffect/motionblur.js.map +1 -0
  239. package/dist/src/posteffect/posteffect.js +126 -0
  240. package/dist/src/posteffect/posteffect.js.map +1 -0
  241. package/dist/src/posteffect/sao.js +324 -0
  242. package/dist/src/posteffect/sao.js.map +1 -0
  243. package/dist/src/posteffect/ssr.js +489 -0
  244. package/dist/src/posteffect/ssr.js.map +1 -0
  245. package/dist/src/posteffect/taa.js +172 -0
  246. package/dist/src/posteffect/taa.js.map +1 -0
  247. package/dist/src/posteffect/tonemap.js +94 -0
  248. package/dist/src/posteffect/tonemap.js.map +1 -0
  249. package/dist/src/render/abuffer_oit.js +361 -0
  250. package/dist/src/render/abuffer_oit.js.map +1 -0
  251. package/dist/src/render/clipmap.js +851 -0
  252. package/dist/src/render/clipmap.js.map +1 -0
  253. package/dist/src/render/cluster_light.js +333 -0
  254. package/dist/src/render/cluster_light.js.map +1 -0
  255. package/dist/src/render/cull_visitor.js +187 -0
  256. package/dist/src/render/cull_visitor.js.map +1 -0
  257. package/dist/src/render/depthpass.js +68 -0
  258. package/dist/src/render/depthpass.js.map +1 -0
  259. package/dist/src/render/drawable_mixin.js +227 -0
  260. package/dist/src/render/drawable_mixin.js.map +1 -0
  261. package/dist/src/render/envlight.js +463 -0
  262. package/dist/src/render/envlight.js.map +1 -0
  263. package/dist/src/render/fbm_wavegenerator.js +251 -0
  264. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  265. package/dist/src/render/fft_wavegenerator.js +1006 -0
  266. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  267. package/dist/src/render/fullscreenquad.js +38 -0
  268. package/dist/src/render/fullscreenquad.js.map +1 -0
  269. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  270. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  271. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  272. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  273. package/dist/src/render/hzb.js +273 -0
  274. package/dist/src/render/hzb.js.map +1 -0
  275. package/dist/src/render/lightpass.js +172 -0
  276. package/dist/src/render/lightpass.js.map +1 -0
  277. package/dist/src/render/objectcolorpass.js +51 -0
  278. package/dist/src/render/objectcolorpass.js.map +1 -0
  279. package/dist/src/render/primitive.js +364 -0
  280. package/dist/src/render/primitive.js.map +1 -0
  281. package/dist/src/render/render_queue.js +467 -0
  282. package/dist/src/render/render_queue.js.map +1 -0
  283. package/dist/src/render/renderbundle_wrapper.js +152 -0
  284. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  285. package/dist/src/render/renderer.js +455 -0
  286. package/dist/src/render/renderer.js.map +1 -0
  287. package/dist/src/render/renderpass.js +200 -0
  288. package/dist/src/render/renderpass.js.map +1 -0
  289. package/dist/src/render/shadowmap_pass.js +56 -0
  290. package/dist/src/render/shadowmap_pass.js.map +1 -0
  291. package/dist/src/render/sky.js +1103 -0
  292. package/dist/src/render/sky.js.map +1 -0
  293. package/dist/src/render/weightedblended_oit.js +168 -0
  294. package/dist/src/render/weightedblended_oit.js.map +1 -0
  295. package/dist/src/scene/batchgroup.js +162 -0
  296. package/dist/src/scene/batchgroup.js.map +1 -0
  297. package/dist/src/scene/environment.js +209 -0
  298. package/dist/src/scene/environment.js.map +1 -0
  299. package/dist/src/scene/graph_node.js +72 -0
  300. package/dist/src/scene/graph_node.js.map +1 -0
  301. package/dist/src/scene/light.js +416 -0
  302. package/dist/src/scene/light.js.map +1 -0
  303. package/dist/src/scene/mesh.js +341 -0
  304. package/dist/src/scene/mesh.js.map +1 -0
  305. package/dist/src/scene/octree.js +649 -0
  306. package/dist/src/scene/octree.js.map +1 -0
  307. package/dist/src/scene/particlesys.js +738 -0
  308. package/dist/src/scene/particlesys.js.map +1 -0
  309. package/dist/src/scene/raycast_visitor.js +103 -0
  310. package/dist/src/scene/raycast_visitor.js.map +1 -0
  311. package/dist/src/scene/scene.js +284 -0
  312. package/dist/src/scene/scene.js.map +1 -0
  313. package/dist/src/scene/scene_node.js +732 -0
  314. package/dist/src/scene/scene_node.js.map +1 -0
  315. package/dist/src/scene/terrain/grass.js +278 -0
  316. package/dist/src/scene/terrain/grass.js.map +1 -0
  317. package/dist/src/scene/terrain/heightfield.js +475 -0
  318. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  319. package/dist/src/scene/terrain/patch.js +530 -0
  320. package/dist/src/scene/terrain/patch.js.map +1 -0
  321. package/dist/src/scene/terrain/quadtree.js +461 -0
  322. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  323. package/dist/src/scene/terrain/terrain.js +246 -0
  324. package/dist/src/scene/terrain/terrain.js.map +1 -0
  325. package/dist/src/scene/terrain-cm/grass.js +594 -0
  326. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  327. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  328. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  329. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  330. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  331. package/dist/src/scene/water.js +374 -0
  332. package/dist/src/scene/water.js.map +1 -0
  333. package/dist/src/shaders/atmosphere.js +957 -0
  334. package/dist/src/shaders/atmosphere.js.map +1 -0
  335. package/dist/src/shaders/fog.js +112 -0
  336. package/dist/src/shaders/fog.js.map +1 -0
  337. package/dist/src/shaders/misc.js +266 -0
  338. package/dist/src/shaders/misc.js.map +1 -0
  339. package/dist/src/shaders/noise.js +222 -0
  340. package/dist/src/shaders/noise.js.map +1 -0
  341. package/dist/src/shaders/pbr.js +51 -0
  342. package/dist/src/shaders/pbr.js.map +1 -0
  343. package/dist/src/shaders/shadow.js +636 -0
  344. package/dist/src/shaders/shadow.js.map +1 -0
  345. package/dist/src/shaders/ssr.js +490 -0
  346. package/dist/src/shaders/ssr.js.map +1 -0
  347. package/dist/src/shaders/temporal.js +215 -0
  348. package/dist/src/shaders/temporal.js.map +1 -0
  349. package/dist/src/shaders/water.js +756 -0
  350. package/dist/src/shaders/water.js.map +1 -0
  351. package/dist/src/shadow/esm.js +237 -0
  352. package/dist/src/shadow/esm.js.map +1 -0
  353. package/dist/src/shadow/pcf_opt.js +181 -0
  354. package/dist/src/shadow/pcf_opt.js.map +1 -0
  355. package/dist/src/shadow/pcf_pd.js +189 -0
  356. package/dist/src/shadow/pcf_pd.js.map +1 -0
  357. package/dist/src/shadow/shader.js +37 -0
  358. package/dist/src/shadow/shader.js.map +1 -0
  359. package/dist/src/shadow/shadow_impl.js +15 -0
  360. package/dist/src/shadow/shadow_impl.js.map +1 -0
  361. package/dist/src/shadow/shadowmapper.js +790 -0
  362. package/dist/src/shadow/shadowmapper.js.map +1 -0
  363. package/dist/src/shadow/ssm.js +159 -0
  364. package/dist/src/shadow/ssm.js.map +1 -0
  365. package/dist/src/shadow/vsm.js +297 -0
  366. package/dist/src/shadow/vsm.js.map +1 -0
  367. package/dist/src/shapes/box.js +386 -0
  368. package/dist/src/shapes/box.js.map +1 -0
  369. package/dist/src/shapes/cylinder.js +125 -0
  370. package/dist/src/shapes/cylinder.js.map +1 -0
  371. package/dist/src/shapes/plane.js +88 -0
  372. package/dist/src/shapes/plane.js.map +1 -0
  373. package/dist/src/shapes/shape.js +87 -0
  374. package/dist/src/shapes/shape.js.map +1 -0
  375. package/dist/src/shapes/sphere.js +114 -0
  376. package/dist/src/shapes/sphere.js.map +1 -0
  377. package/dist/src/shapes/tetrahedron.js +188 -0
  378. package/dist/src/shapes/tetrahedron.js.map +1 -0
  379. package/dist/src/shapes/torus.js +111 -0
  380. package/dist/src/shapes/torus.js.map +1 -0
  381. package/dist/src/utility/aabbtree.js +400 -0
  382. package/dist/src/utility/aabbtree.js.map +1 -0
  383. package/dist/src/utility/bounding_volume.js +29 -0
  384. package/dist/src/utility/bounding_volume.js.map +1 -0
  385. package/dist/src/utility/debug.js +28 -0
  386. package/dist/src/utility/debug.js.map +1 -0
  387. package/dist/src/utility/draco/decoder.js +116 -0
  388. package/dist/src/utility/draco/decoder.js.map +1 -0
  389. package/dist/src/utility/misc.js +105 -0
  390. package/dist/src/utility/misc.js.map +1 -0
  391. package/dist/src/utility/panorama.js +163 -0
  392. package/dist/src/utility/panorama.js.map +1 -0
  393. package/dist/src/utility/pmrem.js +354 -0
  394. package/dist/src/utility/pmrem.js.map +1 -0
  395. package/dist/src/utility/rendermipmap.js +115 -0
  396. package/dist/src/utility/rendermipmap.js.map +1 -0
  397. package/dist/src/utility/serialization/json.js +402 -0
  398. package/dist/src/utility/serialization/json.js.map +1 -0
  399. package/dist/src/utility/serialization/manager.js +623 -0
  400. package/dist/src/utility/serialization/manager.js.map +1 -0
  401. package/dist/src/utility/serialization/scene/animation.js +248 -0
  402. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  403. package/dist/src/utility/serialization/scene/batch.js +59 -0
  404. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  405. package/dist/src/utility/serialization/scene/camera.js +790 -0
  406. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  407. package/dist/src/utility/serialization/scene/common.js +222 -0
  408. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  409. package/dist/src/utility/serialization/scene/light.js +575 -0
  410. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  411. package/dist/src/utility/serialization/scene/material.js +1111 -0
  412. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  413. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  414. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  415. package/dist/src/utility/serialization/scene/misc.js +39 -0
  416. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  417. package/dist/src/utility/serialization/scene/node.js +451 -0
  418. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  419. package/dist/src/utility/serialization/scene/particle.js +425 -0
  420. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  421. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  422. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  423. package/dist/src/utility/serialization/scene/scene.js +704 -0
  424. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  425. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  426. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  427. package/dist/src/utility/serialization/scene/water.js +465 -0
  428. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  429. package/dist/src/utility/shprojector.js +297 -0
  430. package/dist/src/utility/shprojector.js.map +1 -0
  431. package/dist/src/utility/textures/ggxlut.js +213 -0
  432. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  433. package/dist/src/utility/textures/gradientnoise.js +62 -0
  434. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  435. package/dist/src/utility/textures/randomnoise.js +41 -0
  436. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  437. package/dist/src/values.js +162 -0
  438. package/dist/src/values.js.map +1 -0
  439. package/dist/text/font/font_asset.js +884 -0
  440. package/dist/text/font/font_asset.js.map +1 -0
  441. package/dist/text/font/sfnt_reader.js +43 -0
  442. package/dist/text/font/sfnt_reader.js.map +1 -0
  443. package/dist/text/msdf/generator.js +417 -0
  444. package/dist/text/msdf/generator.js.map +1 -0
  445. package/dist/text/msdf/shape.js +143 -0
  446. package/dist/text/msdf/shape.js.map +1 -0
  447. package/dist/text/runtime/msdf_glyph_atlas.js +146 -0
  448. package/dist/text/runtime/msdf_glyph_atlas.js.map +1 -0
  449. package/dist/text/runtime/msdf_text_atlas_manager.js +47 -0
  450. package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -0
  451. package/dist/text/runtime/text_layout.js +96 -0
  452. package/dist/text/runtime/text_layout.js.map +1 -0
  453. package/dist/utility/blueprint/material/common.js +7 -0
  454. package/dist/utility/blueprint/material/common.js.map +1 -0
  455. package/dist/utility/blueprint/material/inputs.js +1275 -1091
  456. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  457. package/dist/utility/blueprint/material/ir.js +505 -490
  458. package/dist/utility/blueprint/material/ir.js.map +1 -1
  459. package/dist/utility/blueprint/material/pbr.js +32 -0
  460. package/dist/utility/blueprint/material/pbr.js.map +1 -1
  461. package/dist/utility/serialization/blueprint/constants.js +255 -0
  462. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  463. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  464. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  465. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  466. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  467. package/dist/utility/serialization/manager.js +55 -11
  468. package/dist/utility/serialization/manager.js.map +1 -1
  469. package/dist/utility/serialization/scene/animation.js +2 -0
  470. package/dist/utility/serialization/scene/animation.js.map +1 -1
  471. package/dist/utility/serialization/scene/batch.js +2 -0
  472. package/dist/utility/serialization/scene/batch.js.map +1 -1
  473. package/dist/utility/serialization/scene/camera.js +2 -0
  474. package/dist/utility/serialization/scene/camera.js.map +1 -1
  475. package/dist/utility/serialization/scene/common.js.map +1 -1
  476. package/dist/utility/serialization/scene/light.js +2 -0
  477. package/dist/utility/serialization/scene/light.js.map +1 -1
  478. package/dist/utility/serialization/scene/material.js +1 -0
  479. package/dist/utility/serialization/scene/material.js.map +1 -1
  480. package/dist/utility/serialization/scene/mesh.js +2 -0
  481. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  482. package/dist/utility/serialization/scene/node.js +2 -0
  483. package/dist/utility/serialization/scene/node.js.map +1 -1
  484. package/dist/utility/serialization/scene/particle.js +2 -0
  485. package/dist/utility/serialization/scene/particle.js.map +1 -1
  486. package/dist/utility/serialization/scene/primitive.js +1 -0
  487. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  488. package/dist/utility/serialization/scene/scene.js.map +1 -1
  489. package/dist/utility/serialization/scene/sprite.js +2 -0
  490. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  491. package/dist/utility/serialization/scene/terrain.js +2 -0
  492. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  493. package/dist/utility/serialization/scene/text.js +516 -0
  494. package/dist/utility/serialization/scene/text.js.map +1 -0
  495. package/dist/utility/serialization/scene/water.js +2 -0
  496. package/dist/utility/serialization/scene/water.js.map +1 -1
  497. package/dist/utility/serialization/types.js +4 -4
  498. package/dist/utility/serialization/types.js.map +1 -1
  499. package/dist/values.js +1 -5
  500. package/dist/values.js.map +1 -1
  501. package/package.json +3 -3
  502. package/dist/animation/joint_dynamics/vrm_spring_bone.js +0 -46
  503. package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +0 -1
  504. package/dist/animation/spring/spring_bone.js +0 -240
  505. package/dist/animation/spring/spring_bone.js.map +0 -1
  506. package/dist/animation/spring/spring_bone_collider.js +0 -198
  507. package/dist/animation/spring/spring_bone_collider.js.map +0 -1
  508. package/dist/animation/spring/spring_bone_constraint.js +0 -170
  509. package/dist/animation/spring/spring_bone_constraint.js.map +0 -1
  510. package/dist/animation/spring/spring_bone_system.js +0 -328
  511. package/dist/animation/spring/spring_bone_system.js.map +0 -1
  512. package/dist/render/sky_motion_vector.js +0 -85
  513. package/dist/render/sky_motion_vector.js.map +0 -1
@@ -12,24 +12,24 @@ const PBR_REFLECTION_MODE = {
12
12
  anisotropic: 2,
13
13
  glint: 3
14
14
  };
15
- /**
16
- * Physically-based rendering material driven by blueprint graphs.
17
- *
18
- * @remarks
19
- * This material extends {@link MeshMaterial} with PBR behavior via
20
- * {@link mixinPBRBluePrint}, and uses {@link MaterialBlueprintIR}
21
- * graphs for both vertex and fragment stages.
22
- *
23
- * - The **vertex blueprint IR** (`vertexIR`) controls vertex
24
- * transformations and per-vertex data.
25
- * - The **fragment blueprint IR** (`fragmentIR`) produces inputs
26
- * for the PBR shading model (albedo, roughness, metalness, etc.).
27
- *
28
- * Uniform values and textures for the blueprints are provided via
29
- * {@link PBRBluePrintMaterial.uniformValues} and
30
- * {@link PBRBluePrintMaterial.uniformTextures}.
31
- *
32
- * @public
15
+ /**
16
+ * Physically-based rendering material driven by blueprint graphs.
17
+ *
18
+ * @remarks
19
+ * This material extends {@link MeshMaterial} with PBR behavior via
20
+ * {@link mixinPBRBluePrint}, and uses {@link MaterialBlueprintIR}
21
+ * graphs for both vertex and fragment stages.
22
+ *
23
+ * - The **vertex blueprint IR** (`vertexIR`) controls vertex
24
+ * transformations and per-vertex data.
25
+ * - The **fragment blueprint IR** (`fragmentIR`) produces inputs
26
+ * for the PBR shading model (albedo, roughness, metalness, etc.).
27
+ *
28
+ * Uniform values and textures for the blueprints are provided via
29
+ * {@link PBRBluePrintMaterial.uniformValues} and
30
+ * {@link PBRBluePrintMaterial.uniformTextures}.
31
+ *
32
+ * @public
33
33
  */ class PBRBluePrintMaterial extends applyMaterialMixins(MeshMaterial, mixinPBRBluePrint) {
34
34
  /** @internal */ static FEATURE_VERTEX_COLOR = this.defineFeature();
35
35
  /** @internal */ static FEATURE_VERTEX_UV = this.defineFeature();
@@ -46,15 +46,15 @@ const PBR_REFLECTION_MODE = {
46
46
  /** @internal */ _anisotropy;
47
47
  /** @internal */ _anisotropyDirection;
48
48
  /** @internal */ _anisotropyDirectionScaleBias;
49
- /**
50
- * Creates a new {@link PBRBluePrintMaterial} instance.
51
- *
52
- * @param irFrag - Optional fragment blueprint IR. If omitted, a default
53
- * IR containing a single {@link PBRBlockNode} is created.
54
- * @param irVertex - Optional vertex blueprint IR. If omitted, a default
55
- * IR containing a single {@link VertexBlockNode} is created.
56
- * @param uniformValues - Optional initial list of uniform value descriptors.
57
- * @param uniformTextures - Optional initial list of texture uniform descriptors.
49
+ /**
50
+ * Creates a new {@link PBRBluePrintMaterial} instance.
51
+ *
52
+ * @param irFrag - Optional fragment blueprint IR. If omitted, a default
53
+ * IR containing a single {@link PBRBlockNode} is created.
54
+ * @param irVertex - Optional vertex blueprint IR. If omitted, a default
55
+ * IR containing a single {@link VertexBlockNode} is created.
56
+ * @param uniformValues - Optional initial list of uniform value descriptors.
57
+ * @param uniformTextures - Optional initial list of texture uniform descriptors.
58
58
  */ constructor(irFrag, irVertex, uniformValues, uniformTextures){
59
59
  super();
60
60
  this._irFrag = irFrag ?? new MaterialBlueprintIR({
@@ -206,8 +206,8 @@ const PBR_REFLECTION_MODE = {
206
206
  this.uniformChanged();
207
207
  }
208
208
  }
209
- /**
210
- * Gets the fragment blueprint IR.
209
+ /**
210
+ * Gets the fragment blueprint IR.
211
211
  */ get fragmentIR() {
212
212
  return this._irFrag;
213
213
  }
@@ -218,8 +218,8 @@ const PBR_REFLECTION_MODE = {
218
218
  this.optionChanged(true);
219
219
  }
220
220
  }
221
- /**
222
- * Gets the vertex blueprint IR.
221
+ /**
222
+ * Gets the vertex blueprint IR.
223
223
  */ get vertexIR() {
224
224
  return this._irVertex;
225
225
  }
@@ -232,8 +232,8 @@ const PBR_REFLECTION_MODE = {
232
232
  this.optionChanged(true);
233
233
  }
234
234
  }
235
- /**
236
- * Gets the list of uniform value descriptors used by the blueprints.
235
+ /**
236
+ * Gets the list of uniform value descriptors used by the blueprints.
237
237
  */ get uniformValues() {
238
238
  return this._uniformValues;
239
239
  }
@@ -243,8 +243,8 @@ const PBR_REFLECTION_MODE = {
243
243
  }));
244
244
  this.uniformChanged();
245
245
  }
246
- /**
247
- * Gets the list of texture uniform descriptors used by the blueprints.
246
+ /**
247
+ * Gets the list of texture uniform descriptors used by the blueprints.
248
248
  */ get uniformTextures() {
249
249
  return this._uniformTextures;
250
250
  }
@@ -273,15 +273,15 @@ const PBR_REFLECTION_MODE = {
273
273
  this.uniformChanged();
274
274
  }
275
275
  }
276
- /**
277
- * Creates a deep copy of this material.
278
- *
279
- * @remarks
280
- * The clone shares the same vertex/fragment IR references and copies
281
- * the current blueprint uniform descriptors, then calls `copyFrom`
282
- * to copy base-class and mixin state.
283
- *
284
- * @returns A new {@link PBRBluePrintMaterial} instance.
276
+ /**
277
+ * Creates a deep copy of this material.
278
+ *
279
+ * @remarks
280
+ * The clone shares the same vertex/fragment IR references and copies
281
+ * the current blueprint uniform descriptors, then calls `copyFrom`
282
+ * to copy base-class and mixin state.
283
+ *
284
+ * @returns A new {@link PBRBluePrintMaterial} instance.
285
285
  */ clone() {
286
286
  const other = new PBRBluePrintMaterial(this._irFrag, this._irVertex, this._uniformValues, this._uniformTextures);
287
287
  other.copyFrom(this);
@@ -299,10 +299,10 @@ const PBR_REFLECTION_MODE = {
299
299
  this.anisotropyDirection = other.anisotropyDirection;
300
300
  this.anisotropyDirectionScaleBias = other.anisotropyDirectionScaleBias;
301
301
  }
302
- /**
303
- * Builds the vertex shader for this PBR blueprint material.
304
- *
305
- * @param scope - The current vertex shader function scope.
302
+ /**
303
+ * Builds the vertex shader for this PBR blueprint material.
304
+ *
305
+ * @param scope - The current vertex shader function scope.
306
306
  */ vertexShader(scope) {
307
307
  super.vertexShader(scope);
308
308
  const pb = scope.$builder;
@@ -337,11 +337,22 @@ const PBR_REFLECTION_MODE = {
337
337
  scope.$l.oTangent = this.getOutput(outputs, 'Tangent') ?? ShaderHelper.resolveVertexTangent(scope);
338
338
  scope.$outputs.zVertexTangent = pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oTangent.xyz, 0)).xyz;
339
339
  scope.$outputs.zVertexBinormal = pb.mul(pb.cross(scope.$outputs.zVertexNormal, scope.$outputs.zVertexTangent), scope.oTangent.w);
340
+ for (const outputName of [
341
+ 'Output1',
342
+ 'Output2',
343
+ 'Output3',
344
+ 'Output4'
345
+ ]){
346
+ const output = this.getOutput(outputs, outputName);
347
+ if (output) {
348
+ scope.$outputs[outputName] = output;
349
+ }
350
+ }
340
351
  }
341
- /**
342
- * Builds the fragment shader for this PBR blueprint material.
343
- *
344
- * @param scope - The current fragment shader function scope.
352
+ /**
353
+ * Builds the fragment shader for this PBR blueprint material.
354
+ *
355
+ * @param scope - The current fragment shader function scope.
345
356
  */ fragmentShader(scope) {
346
357
  super.fragmentShader(scope);
347
358
  const pb = scope.$builder;
@@ -389,17 +400,17 @@ const PBR_REFLECTION_MODE = {
389
400
  this.outputFragmentColor(scope, scope.$inputs.worldPos, null);
390
401
  }
391
402
  }
392
- /**
393
- * Applies runtime uniform values and textures to the given bind group.
394
- *
395
- * @remarks
396
- * - Calls the base implementation first to bind standard mesh/PBR uniforms.
397
- * - If fragment color is needed for the current context, all blueprint
398
- * scalar/vector uniform values and textures are then bound by name.
399
- *
400
- * @param bindGroup - The bind group to which material resources are bound.
401
- * @param ctx - The current draw context.
402
- * @param pass - Index of the active render pass.
403
+ /**
404
+ * Applies runtime uniform values and textures to the given bind group.
405
+ *
406
+ * @remarks
407
+ * - Calls the base implementation first to bind standard mesh/PBR uniforms.
408
+ * - If fragment color is needed for the current context, all blueprint
409
+ * scalar/vector uniform values and textures are then bound by name.
410
+ *
411
+ * @param bindGroup - The bind group to which material resources are bound.
412
+ * @param ctx - The current draw context.
413
+ * @param pass - Index of the active render pass.
403
414
  */ applyUniformValues(bindGroup, ctx, pass) {
404
415
  super.applyUniformValues(bindGroup, ctx, pass);
405
416
  if (this.needFragmentColor(ctx)) {
@@ -407,12 +418,6 @@ const PBR_REFLECTION_MODE = {
407
418
  bindGroup.setValue('zAnisotropy', this._anisotropy);
408
419
  bindGroup.setValue('zAnisotropyDirection', this._anisotropyDirection);
409
420
  bindGroup.setValue('zAnisotropyDirectionScaleBias', this._anisotropyDirectionScaleBias);
410
- for (const u of this._uniformValues){
411
- bindGroup.setValue(u.name, u.finalValue);
412
- }
413
- for (const u of this._uniformTextures){
414
- bindGroup.setTexture(u.name, u.finalTexture.get(), u.finalSampler);
415
- }
416
421
  if (this.subsurfaceScattering && ctx.renderPass.type === RENDER_PASS_TYPE_LIGHT) {
417
422
  bindGroup.setValue('zSubsurfaceColor', this._subsurfaceColor);
418
423
  bindGroup.setValue('zSubsurfaceScale', this._subsurfaceScale);
@@ -420,61 +425,71 @@ const PBR_REFLECTION_MODE = {
420
425
  bindGroup.setValue('zSubsurfaceIntensity', this._subsurfaceIntensity);
421
426
  }
422
427
  }
428
+ for (const u of this._uniformValues){
429
+ if (u.inVertexShader || this.needFragmentColor(ctx)) {
430
+ bindGroup.setValue(u.name, u.finalValue);
431
+ }
432
+ }
433
+ for (const u of this._uniformTextures){
434
+ if (u.inVertexShader || this.needFragmentColor(ctx)) {
435
+ bindGroup.setTexture(u.name, u.finalTexture.get(), u.finalSampler);
436
+ }
437
+ }
423
438
  }
424
- /**
425
- * Creates a unique hash string used for program caching.
426
- *
427
- * @remarks
428
- * The hash includes:
429
- * - The base material hash (`super._createHash()`).
430
- * - The fragment IR hash.
431
- * - The vertex IR hash.
432
- *
433
- * Different blueprint graphs will therefore produce different programs.
434
- *
435
- * @returns A hash string that uniquely identifies this material configuration.
439
+ /**
440
+ * Creates a unique hash string used for program caching.
441
+ *
442
+ * @remarks
443
+ * The hash includes:
444
+ * - The base material hash (`super._createHash()`).
445
+ * - The fragment IR hash.
446
+ * - The vertex IR hash.
447
+ *
448
+ * Different blueprint graphs will therefore produce different programs.
449
+ *
450
+ * @returns A hash string that uniquely identifies this material configuration.
436
451
  */ _createHash() {
437
452
  return `${super._createHash()}:${this._irFrag.hash}:${this._irVertex.hash}`;
438
453
  }
439
- /**
440
- * Creates the GPU program for this blueprint PBR material.
441
- *
442
- * @remarks
443
- * This calls the base implementation and returns its result.
444
- * Commented-out `console.log` lines are provided for debugging the
445
- * generated vertex and fragment shader sources.
446
- *
447
- * @param ctx - The current draw context.
448
- * @param pass - Index of the active render pass.
449
- * @returns The created GPU program.
454
+ /**
455
+ * Creates the GPU program for this blueprint PBR material.
456
+ *
457
+ * @remarks
458
+ * This calls the base implementation and returns its result.
459
+ * Commented-out `console.log` lines are provided for debugging the
460
+ * generated vertex and fragment shader sources.
461
+ *
462
+ * @param ctx - The current draw context.
463
+ * @param pass - Index of the active render pass.
464
+ * @returns The created GPU program.
450
465
  */ createProgram(ctx, pass) {
451
466
  const program = super.createProgram(ctx, pass);
452
467
  //console.log(program.getShaderSource('vertex'));
453
468
  //console.log(program.getShaderSource('fragment'));
454
469
  return program;
455
470
  }
456
- /**
457
- * Disposes resources associated with this material.
458
- *
459
- * @remarks
460
- * - Calls the base `onDispose` to clean up inherited resources.
461
- * - Disposes all `finalTexture` references from the blueprint
462
- * texture uniform descriptors.
463
- *
464
- * This method is intended to be called by the engine's resource
465
- * management system rather than directly by user code.
471
+ /**
472
+ * Disposes resources associated with this material.
473
+ *
474
+ * @remarks
475
+ * - Calls the base `onDispose` to clean up inherited resources.
476
+ * - Disposes all `finalTexture` references from the blueprint
477
+ * texture uniform descriptors.
478
+ *
479
+ * This method is intended to be called by the engine's resource
480
+ * management system rather than directly by user code.
466
481
  */ onDispose() {
467
482
  super.onDispose();
468
483
  for (const u of this._uniformTextures){
469
484
  u.finalTexture.dispose();
470
485
  }
471
486
  }
472
- /**
473
- * Retrieves a named output expression from a blueprint output list.
474
- *
475
- * @param outputs - The list of outputs generated by a blueprint graph.
476
- * @param name - The desired output name (e.g. `"Position"`, `"Color"`, `"UV"`).
477
- * @returns The expression associated with the given name, or `undefined` if not found.
487
+ /**
488
+ * Retrieves a named output expression from a blueprint output list.
489
+ *
490
+ * @param outputs - The list of outputs generated by a blueprint graph.
491
+ * @param name - The desired output name (e.g. `"Position"`, `"Color"`, `"UV"`).
492
+ * @returns The expression associated with the given name, or `undefined` if not found.
478
493
  */ getOutput(outputs, name) {
479
494
  return outputs.find((output)=>output.name === name)?.exp;
480
495
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pbrblueprint.js","sources":["../../src/material/pbrblueprint.ts"],"sourcesContent":["import { MeshMaterial, applyMaterialMixins } from './meshmaterial';\r\nimport type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport { MaterialVaryingFlags, RENDER_PASS_TYPE_LIGHT } from '../values';\r\nimport { DRef, Vector2, Vector3, Vector4, type Clonable, type Immutable } from '@zephyr3d/base';\r\nimport { mixinPBRBluePrint } from './mixins/lightmodel/pbrblueprintmixin';\r\nimport type { BluePrintUniformTexture, BluePrintUniformValue } from '../utility/blueprint/material/ir';\r\nimport { MaterialBlueprintIR } from '../utility/blueprint/material/ir';\r\nimport type { DrawContext } from '../render/drawable';\r\nimport { PBRBlockNode, VertexBlockNode } from '../utility/blueprint/material/pbr';\r\nimport type { PBRReflectionMode } from './mixins/lightmodel/pbrmetallicroughness';\r\n\r\nconst PBR_REFLECTION_MODE: Record<PBRReflectionMode, number> = {\r\n none: 0,\r\n ggx: 1,\r\n anisotropic: 2,\r\n glint: 3\r\n};\r\n\r\n/**\r\n * Physically-based rendering material driven by blueprint graphs.\r\n *\r\n * @remarks\r\n * This material extends {@link MeshMaterial} with PBR behavior via\r\n * {@link mixinPBRBluePrint}, and uses {@link MaterialBlueprintIR}\r\n * graphs for both vertex and fragment stages.\r\n *\r\n * - The **vertex blueprint IR** (`vertexIR`) controls vertex\r\n * transformations and per-vertex data.\r\n * - The **fragment blueprint IR** (`fragmentIR`) produces inputs\r\n * for the PBR shading model (albedo, roughness, metalness, etc.).\r\n *\r\n * Uniform values and textures for the blueprints are provided via\r\n * {@link PBRBluePrintMaterial.uniformValues} and\r\n * {@link PBRBluePrintMaterial.uniformTextures}.\r\n *\r\n * @public\r\n */\r\nexport class PBRBluePrintMaterial\r\n extends applyMaterialMixins(MeshMaterial, mixinPBRBluePrint)\r\n implements Clonable<PBRBluePrintMaterial>\r\n{\r\n /** @internal */\r\n private static readonly FEATURE_VERTEX_COLOR = this.defineFeature();\r\n /** @internal */\r\n private static readonly FEATURE_VERTEX_UV = this.defineFeature();\r\n /** @internal */\r\n private static readonly FEATURE_SUBSURFACE_SCATTERING = this.defineFeature();\r\n /** @internal */\r\n private _irFrag: MaterialBlueprintIR;\r\n /** @internal */\r\n private _irVertex: MaterialBlueprintIR;\r\n /** @internal */\r\n private _uniformValues: BluePrintUniformValue[];\r\n /** @internal */\r\n private _uniformTextures: BluePrintUniformTexture[];\r\n /** @internal */\r\n private _reflectionMode: PBRReflectionMode;\r\n /** @internal */\r\n private readonly _subsurfaceColor: Vector3;\r\n /** @internal */\r\n private _subsurfaceScale: number;\r\n /** @internal */\r\n private _subsurfacePower: number;\r\n /** @internal */\r\n private _subsurfaceIntensity: number;\r\n /** @internal */\r\n private _anisotropy: number;\r\n /** @internal */\r\n private _anisotropyDirection: number;\r\n /** @internal */\r\n private readonly _anisotropyDirectionScaleBias: Vector2;\r\n /**\r\n * Creates a new {@link PBRBluePrintMaterial} instance.\r\n *\r\n * @param irFrag - Optional fragment blueprint IR. If omitted, a default\r\n * IR containing a single {@link PBRBlockNode} is created.\r\n * @param irVertex - Optional vertex blueprint IR. If omitted, a default\r\n * IR containing a single {@link VertexBlockNode} is created.\r\n * @param uniformValues - Optional initial list of uniform value descriptors.\r\n * @param uniformTextures - Optional initial list of texture uniform descriptors.\r\n */\r\n constructor(\r\n irFrag?: MaterialBlueprintIR,\r\n irVertex?: MaterialBlueprintIR,\r\n uniformValues?: BluePrintUniformValue[],\r\n uniformTextures?: BluePrintUniformTexture[]\r\n ) {\r\n super();\r\n this._irFrag =\r\n irFrag ??\r\n new MaterialBlueprintIR(\r\n {\r\n nodeMap: { '1': new PBRBlockNode() },\r\n roots: [1],\r\n order: [1],\r\n graph: { incoming: {}, outgoing: {} }\r\n },\r\n '',\r\n {\r\n nodes: [{ id: 1, title: '', locked: true, node: { ClassName: 'PBRBlockNode', Object: '' } }],\r\n links: []\r\n }\r\n );\r\n this._irVertex =\r\n irVertex ??\r\n new MaterialBlueprintIR(\r\n {\r\n nodeMap: { '1': new VertexBlockNode() },\r\n roots: [1],\r\n order: [1],\r\n graph: { incoming: {}, outgoing: {} }\r\n },\r\n '',\r\n {\r\n nodes: [{ id: 1, title: '', locked: true, node: { ClassName: 'VertexBlockNode', Object: '' } }],\r\n links: []\r\n }\r\n );\r\n this._uniformValues = uniformValues ?? [];\r\n this._uniformTextures = uniformTextures ?? [];\r\n this._reflectionMode = 'ggx';\r\n this._subsurfaceColor = new Vector3(1, 0.3, 0.2);\r\n this._subsurfaceScale = 0.5;\r\n this._subsurfacePower = 1.5;\r\n this._subsurfaceIntensity = 0.5;\r\n this._anisotropy = 0.75;\r\n this._anisotropyDirection = 0;\r\n this._anisotropyDirectionScaleBias = new Vector2(1, 0);\r\n this.useFeature(PBRBluePrintMaterial.FEATURE_SUBSURFACE_SCATTERING, false);\r\n this.useFeature(PBRBluePrintMaterial.FEATURE_VERTEX_COLOR, this._irVertex.behaviors.useVertexColor);\r\n this.useFeature(PBRBluePrintMaterial.FEATURE_VERTEX_UV, this._irVertex.behaviors.useVertexUV);\r\n }\r\n get reflectionMode() {\r\n return this._reflectionMode;\r\n }\r\n set reflectionMode(val: PBRReflectionMode) {\r\n if (val !== this._reflectionMode) {\r\n this._reflectionMode = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get subsurfaceScattering() {\r\n return this.featureUsed<boolean>(PBRBluePrintMaterial.FEATURE_SUBSURFACE_SCATTERING);\r\n }\r\n set subsurfaceScattering(val: boolean) {\r\n this.useFeature(PBRBluePrintMaterial.FEATURE_SUBSURFACE_SCATTERING, !!val);\r\n }\r\n get subsurfaceColor(): Immutable<Vector3> {\r\n return this._subsurfaceColor;\r\n }\r\n set subsurfaceColor(val: Immutable<Vector3>) {\r\n if (!val.equalsTo(this._subsurfaceColor)) {\r\n this._subsurfaceColor.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n get subsurfaceScale() {\r\n return this._subsurfaceScale;\r\n }\r\n set subsurfaceScale(val: number) {\r\n if (val !== this._subsurfaceScale) {\r\n this._subsurfaceScale = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get subsurfacePower() {\r\n return this._subsurfacePower;\r\n }\r\n set subsurfacePower(val: number) {\r\n if (val !== this._subsurfacePower) {\r\n this._subsurfacePower = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get subsurfaceIntensity() {\r\n return this._subsurfaceIntensity;\r\n }\r\n set subsurfaceIntensity(val: number) {\r\n if (val !== this._subsurfaceIntensity) {\r\n this._subsurfaceIntensity = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get anisotropy() {\r\n return this._anisotropy;\r\n }\r\n set anisotropy(val: number) {\r\n const clamped = Math.max(-0.95, Math.min(0.95, val));\r\n if (clamped !== this._anisotropy) {\r\n this._anisotropy = clamped;\r\n this.uniformChanged();\r\n }\r\n }\r\n get anisotropyDirection() {\r\n return this._anisotropyDirection;\r\n }\r\n set anisotropyDirection(val: number) {\r\n if (val !== this._anisotropyDirection) {\r\n this._anisotropyDirection = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get anisotropyDirectionScaleBias(): Immutable<Vector2> {\r\n return this._anisotropyDirectionScaleBias;\r\n }\r\n set anisotropyDirectionScaleBias(val: Immutable<Vector2>) {\r\n if (!val.equalsTo(this._anisotropyDirectionScaleBias)) {\r\n this._anisotropyDirectionScaleBias.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * Gets the fragment blueprint IR.\r\n */\r\n get fragmentIR() {\r\n return this._irFrag;\r\n }\r\n set fragmentIR(ir: MaterialBlueprintIR) {\r\n if (ir && ir !== this._irFrag) {\r\n this._irFrag = ir;\r\n this.clearCache();\r\n this.optionChanged(true);\r\n }\r\n }\r\n /**\r\n * Gets the vertex blueprint IR.\r\n */\r\n get vertexIR() {\r\n return this._irVertex;\r\n }\r\n set vertexIR(ir: MaterialBlueprintIR) {\r\n if (ir && ir !== this._irVertex) {\r\n this._irVertex = ir;\r\n this.useFeature(PBRBluePrintMaterial.FEATURE_VERTEX_COLOR, this._irVertex.behaviors.useVertexColor);\r\n this.useFeature(PBRBluePrintMaterial.FEATURE_VERTEX_UV, this._irVertex.behaviors.useVertexUV);\r\n this.clearCache();\r\n this.optionChanged(true);\r\n }\r\n }\r\n /**\r\n * Gets the list of uniform value descriptors used by the blueprints.\r\n */\r\n get uniformValues() {\r\n return this._uniformValues;\r\n }\r\n set uniformValues(val: BluePrintUniformValue[]) {\r\n this._uniformValues = (val ?? []).map((v) => ({ ...v }));\r\n this.uniformChanged();\r\n }\r\n /**\r\n * Gets the list of texture uniform descriptors used by the blueprints.\r\n */\r\n get uniformTextures() {\r\n return this._uniformTextures;\r\n }\r\n set uniformTextures(val: BluePrintUniformTexture[]) {\r\n if (val !== this._uniformTextures) {\r\n const newUniforms = val.map((v) => ({\r\n finalTexture: new DRef(v.finalTexture!.get()),\r\n finalSampler: v.finalSampler,\r\n name: v.name,\r\n params: v.params?.clone() ?? Vector4.zero(),\r\n texture: v.texture,\r\n type: v.type,\r\n sRGB: v.sRGB,\r\n wrapS: v.wrapS,\r\n wrapT: v.wrapT,\r\n inFragmentShader: v.inFragmentShader,\r\n inVertexShader: v.inVertexShader,\r\n minFilter: v.minFilter,\r\n magFilter: v.magFilter,\r\n mipFilter: v.mipFilter\r\n }));\r\n for (const u of this._uniformTextures) {\r\n u.finalTexture!.dispose();\r\n }\r\n this._uniformTextures = newUniforms;\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * Creates a deep copy of this material.\r\n *\r\n * @remarks\r\n * The clone shares the same vertex/fragment IR references and copies\r\n * the current blueprint uniform descriptors, then calls `copyFrom`\r\n * to copy base-class and mixin state.\r\n *\r\n * @returns A new {@link PBRBluePrintMaterial} instance.\r\n */\r\n clone() {\r\n const other = new PBRBluePrintMaterial(\r\n this._irFrag,\r\n this._irVertex,\r\n this._uniformValues,\r\n this._uniformTextures\r\n );\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.reflectionMode = other.reflectionMode;\r\n this.subsurfaceScattering = other.subsurfaceScattering;\r\n this.subsurfaceColor = other.subsurfaceColor;\r\n this.subsurfaceScale = other.subsurfaceScale;\r\n this.subsurfacePower = other.subsurfacePower;\r\n this.subsurfaceIntensity = other.subsurfaceIntensity;\r\n this.anisotropy = other.anisotropy;\r\n this.anisotropyDirection = other.anisotropyDirection;\r\n this.anisotropyDirectionScaleBias = other.anisotropyDirectionScaleBias;\r\n }\r\n /**\r\n * Builds the vertex shader for this PBR blueprint material.\r\n *\r\n * @param scope - The current vertex shader function scope.\r\n */\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n scope.$inputs.zVertexPos = pb.vec3().attrib('position');\r\n scope.$inputs.zVertexNormal = pb.vec3().attrib('normal');\r\n scope.$inputs.zVertexTangent = pb.vec4().attrib('tangent');\r\n if (this.featureUsed(PBRBluePrintMaterial.FEATURE_VERTEX_COLOR)) {\r\n scope.$inputs.zVertexColor = pb.vec4().attrib('diffuse');\r\n }\r\n if (this.featureUsed(PBRBluePrintMaterial.FEATURE_VERTEX_UV)) {\r\n scope.$inputs.zVertexUV = pb.vec2().attrib('texCoord0');\r\n }\r\n\r\n for (const u of [...this._uniformValues, ...this._uniformTextures]) {\r\n if (u.inVertexShader) {\r\n // @ts-ignore\r\n pb.getGlobalScope()[u.name] = pb[u.type]().uniform(2);\r\n }\r\n }\r\n const outputs = this._irVertex.create(pb)!;\r\n scope.$l.oPos = this.getOutput(outputs, 'Position') ?? ShaderHelper.resolveVertexPosition(scope);\r\n const worldMatrix = ShaderHelper.getWorldMatrix(scope);\r\n scope.$outputs.worldPos = pb.mul(worldMatrix, pb.vec4(scope.oPos, 1)).xyz;\r\n scope.$l.csPos = pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1));\r\n ShaderHelper.setClipSpacePosition(scope, scope.csPos);\r\n scope.$outputs.zVertexColor =\r\n this.getOutput(outputs, 'Color') ??\r\n (this.featureUsed(PBRBluePrintMaterial.FEATURE_VERTEX_COLOR) ? scope.$inputs.zVertexColor : pb.vec4(1));\r\n scope.$outputs.zVertexUV =\r\n this.getOutput(outputs, 'UV') ??\r\n (this.featureUsed(PBRBluePrintMaterial.FEATURE_VERTEX_UV) ? scope.$inputs.zVertexUV : pb.vec2(0));\r\n scope.$l.oNorm = this.getOutput(outputs, 'Normal') ?? ShaderHelper.resolveVertexNormal(scope);\r\n scope.$outputs.zVertexNormal = pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oNorm, 0)).xyz;\r\n scope.$l.oTangent = this.getOutput(outputs, 'Tangent') ?? ShaderHelper.resolveVertexTangent(scope);\r\n scope.$outputs.zVertexTangent = pb.mul(\r\n ShaderHelper.getNormalMatrix(scope),\r\n pb.vec4(scope.oTangent.xyz, 0)\r\n ).xyz;\r\n scope.$outputs.zVertexBinormal = pb.mul(\r\n pb.cross(scope.$outputs.zVertexNormal, scope.$outputs.zVertexTangent),\r\n scope.oTangent.w\r\n );\r\n }\r\n /**\r\n * Builds the fragment shader for this PBR blueprint material.\r\n *\r\n * @param scope - The current fragment shader function scope.\r\n */\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n if (\r\n this.subsurfaceScattering &&\r\n this.needFragmentColor() &&\r\n this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT\r\n ) {\r\n scope.zSubsurfaceColor = pb.vec3().uniform(2);\r\n scope.zSubsurfaceScale = pb.float().uniform(2);\r\n scope.zSubsurfacePower = pb.float().uniform(2);\r\n scope.zSubsurfaceIntensity = pb.float().uniform(2);\r\n }\r\n if (this.needFragmentColor()) {\r\n scope.zAnisotropy = pb.float().uniform(2);\r\n scope.zAnisotropyDirection = pb.float().uniform(2);\r\n scope.zAnisotropyDirectionScaleBias = pb.vec2().uniform(2);\r\n for (const u of [...this._uniformValues, ...this._uniformTextures]) {\r\n if (u.inFragmentShader) {\r\n // @ts-ignore\r\n pb.getGlobalScope()[u.name] = pb[u.type]().uniform(2);\r\n }\r\n }\r\n scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);\r\n scope.$l.commonData = this.getCommonDatasStruct(scope)();\r\n this.getCommonData(\r\n scope,\r\n scope.commonData,\r\n scope.viewVec,\r\n scope.$inputs.worldPos,\r\n scope.$inputs.zVertexNormal,\r\n scope.$inputs.zVertexTangent,\r\n scope.$inputs.zVertexBinormal,\r\n scope.$inputs.zVertexColor,\r\n scope.$inputs.zVertexUV,\r\n this._irFrag\r\n );\r\n if (this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n if (this.drawContext.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS) {\r\n scope.$l.outRoughness = pb.vec4();\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.viewVec,\r\n scope.commonData,\r\n scope.outRoughness\r\n );\r\n if (this.subsurfaceScattering) {\r\n scope.litColor = this.applySubsurfaceScattering(\r\n scope,\r\n scope.litColor,\r\n scope.commonData.albedo.rgb,\r\n scope.commonData.normal,\r\n scope.viewVec\r\n );\r\n }\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.litColor,\r\n scope.outRoughness,\r\n pb.vec4(pb.add(pb.mul(scope.commonData.normal, 0.5), pb.vec3(0.5)), 1)\r\n );\r\n } else {\r\n scope.$l.litColor = this.PBRLight(scope, scope.$inputs.worldPos, scope.viewVec, scope.commonData);\r\n if (this.subsurfaceScattering) {\r\n scope.litColor = this.applySubsurfaceScattering(\r\n scope,\r\n scope.litColor,\r\n scope.commonData.albedo.rgb,\r\n scope.commonData.normal,\r\n scope.viewVec\r\n );\r\n }\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.litColor);\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.commonData.albedo);\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n /**\r\n * Applies runtime uniform values and textures to the given bind group.\r\n *\r\n * @remarks\r\n * - Calls the base implementation first to bind standard mesh/PBR uniforms.\r\n * - If fragment color is needed for the current context, all blueprint\r\n * scalar/vector uniform values and textures are then bound by name.\r\n *\r\n * @param bindGroup - The bind group to which material resources are bound.\r\n * @param ctx - The current draw context.\r\n * @param pass - Index of the active render pass.\r\n */\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (this.needFragmentColor(ctx)) {\r\n bindGroup.setValue('zReflectionMode', PBR_REFLECTION_MODE[this._reflectionMode]);\r\n bindGroup.setValue('zAnisotropy', this._anisotropy);\r\n bindGroup.setValue('zAnisotropyDirection', this._anisotropyDirection);\r\n bindGroup.setValue('zAnisotropyDirectionScaleBias', this._anisotropyDirectionScaleBias);\r\n for (const u of this._uniformValues) {\r\n bindGroup.setValue(u.name, u.finalValue!);\r\n }\r\n for (const u of this._uniformTextures) {\r\n bindGroup.setTexture(u.name, u.finalTexture!.get()!, u.finalSampler);\r\n }\r\n if (this.subsurfaceScattering && ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n bindGroup.setValue('zSubsurfaceColor', this._subsurfaceColor);\r\n bindGroup.setValue('zSubsurfaceScale', this._subsurfaceScale);\r\n bindGroup.setValue('zSubsurfacePower', this._subsurfacePower);\r\n bindGroup.setValue('zSubsurfaceIntensity', this._subsurfaceIntensity);\r\n }\r\n }\r\n }\r\n /**\r\n * Creates a unique hash string used for program caching.\r\n *\r\n * @remarks\r\n * The hash includes:\r\n * - The base material hash (`super._createHash()`).\r\n * - The fragment IR hash.\r\n * - The vertex IR hash.\r\n *\r\n * Different blueprint graphs will therefore produce different programs.\r\n *\r\n * @returns A hash string that uniquely identifies this material configuration.\r\n */\r\n protected _createHash() {\r\n return `${super._createHash()}:${this._irFrag.hash}:${this._irVertex.hash}`;\r\n }\r\n /**\r\n * Creates the GPU program for this blueprint PBR material.\r\n *\r\n * @remarks\r\n * This calls the base implementation and returns its result.\r\n * Commented-out `console.log` lines are provided for debugging the\r\n * generated vertex and fragment shader sources.\r\n *\r\n * @param ctx - The current draw context.\r\n * @param pass - Index of the active render pass.\r\n * @returns The created GPU program.\r\n */\r\n protected createProgram(ctx: DrawContext, pass: number) {\r\n const program = super.createProgram(ctx, pass);\r\n //console.log(program.getShaderSource('vertex'));\r\n //console.log(program.getShaderSource('fragment'));\r\n return program;\r\n }\r\n /**\r\n * Disposes resources associated with this material.\r\n *\r\n * @remarks\r\n * - Calls the base `onDispose` to clean up inherited resources.\r\n * - Disposes all `finalTexture` references from the blueprint\r\n * texture uniform descriptors.\r\n *\r\n * This method is intended to be called by the engine's resource\r\n * management system rather than directly by user code.\r\n */\r\n protected onDispose() {\r\n super.onDispose();\r\n for (const u of this._uniformTextures) {\r\n u.finalTexture!.dispose();\r\n }\r\n }\r\n /**\r\n * Retrieves a named output expression from a blueprint output list.\r\n *\r\n * @param outputs - The list of outputs generated by a blueprint graph.\r\n * @param name - The desired output name (e.g. `\"Position\"`, `\"Color\"`, `\"UV\"`).\r\n * @returns The expression associated with the given name, or `undefined` if not found.\r\n */\r\n private getOutput(\r\n outputs: {\r\n name: string;\r\n exp: number | boolean | PBShaderExp;\r\n }[],\r\n name: string\r\n ) {\r\n return outputs.find((output) => output.name === name)?.exp;\r\n }\r\n private applySubsurfaceScattering(\r\n scope: PBInsideFunctionScope,\r\n litColor: PBShaderExp,\r\n albedoRGB: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n scope.$l.NoV = pb.clamp(pb.dot(normal, viewVec), 0, 1);\r\n scope.$l.wrapNdotV = pb.clamp(\r\n pb.div(pb.add(pb.sub(1, scope.NoV), scope.zSubsurfaceScale), pb.add(1, scope.zSubsurfaceScale)),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssFactor = pb.mul(pb.pow(scope.wrapNdotV, scope.zSubsurfacePower), scope.zSubsurfaceIntensity);\r\n return pb.vec4(\r\n pb.add(litColor.rgb, pb.mul(albedoRGB, scope.zSubsurfaceColor, scope.sssFactor)),\r\n litColor.a\r\n );\r\n }\r\n}\r\n"],"names":["PBR_REFLECTION_MODE","none","ggx","anisotropic","glint","PBRBluePrintMaterial","applyMaterialMixins","MeshMaterial","mixinPBRBluePrint","FEATURE_VERTEX_COLOR","defineFeature","FEATURE_VERTEX_UV","FEATURE_SUBSURFACE_SCATTERING","irFrag","irVertex","uniformValues","uniformTextures","_irFrag","MaterialBlueprintIR","nodeMap","PBRBlockNode","roots","order","graph","incoming","outgoing","nodes","id","title","locked","node","ClassName","Object","links","_irVertex","VertexBlockNode","_uniformValues","_uniformTextures","_reflectionMode","_subsurfaceColor","Vector3","_subsurfaceScale","_subsurfacePower","_subsurfaceIntensity","_anisotropy","_anisotropyDirection","_anisotropyDirectionScaleBias","Vector2","useFeature","behaviors","useVertexColor","useVertexUV","reflectionMode","val","uniformChanged","subsurfaceScattering","featureUsed","subsurfaceColor","equalsTo","set","subsurfaceScale","subsurfacePower","subsurfaceIntensity","anisotropy","clamped","Math","max","min","anisotropyDirection","anisotropyDirectionScaleBias","fragmentIR","ir","clearCache","optionChanged","vertexIR","map","v","newUniforms","finalTexture","DRef","get","finalSampler","name","params","clone","Vector4","zero","texture","type","sRGB","wrapS","wrapT","inFragmentShader","inVertexShader","minFilter","magFilter","mipFilter","u","dispose","other","copyFrom","vertexShader","scope","pb","$builder","$inputs","zVertexPos","vec3","attrib","zVertexNormal","zVertexTangent","vec4","zVertexColor","zVertexUV","vec2","getGlobalScope","uniform","outputs","create","$l","oPos","getOutput","ShaderHelper","resolveVertexPosition","worldMatrix","getWorldMatrix","$outputs","worldPos","mul","xyz","csPos","getViewProjectionMatrix","setClipSpacePosition","oNorm","resolveVertexNormal","getNormalMatrix","oTangent","resolveVertexTangent","zVertexBinormal","cross","w","fragmentShader","needFragmentColor","drawContext","renderPass","RENDER_PASS_TYPE_LIGHT","zSubsurfaceColor","zSubsurfaceScale","float","zSubsurfacePower","zSubsurfaceIntensity","zAnisotropy","zAnisotropyDirection","zAnisotropyDirectionScaleBias","viewVec","calculateViewVector","commonData","getCommonDatasStruct","getCommonData","materialFlags","MaterialVaryingFlags","SSR_STORE_ROUGHNESS","outRoughness","litColor","PBRLight","applySubsurfaceScattering","albedo","rgb","normal","outputFragmentColor","add","applyUniformValues","bindGroup","ctx","pass","setValue","finalValue","setTexture","_createHash","hash","createProgram","program","onDispose","find","output","exp","albedoRGB","NoV","clamp","dot","wrapNdotV","div","sub","sssFactor","pow","a"],"mappings":"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"}
1
+ {"version":3,"file":"pbrblueprint.js","sources":["../../src/material/pbrblueprint.ts"],"sourcesContent":["import { MeshMaterial, applyMaterialMixins } from './meshmaterial';\nimport type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\nimport { ShaderHelper } from './shader/helper';\nimport { MaterialVaryingFlags, RENDER_PASS_TYPE_LIGHT } from '../values';\nimport { DRef, Vector2, Vector3, Vector4, type Clonable, type Immutable } from '@zephyr3d/base';\nimport { mixinPBRBluePrint } from './mixins/lightmodel/pbrblueprintmixin';\nimport type { BluePrintUniformTexture, BluePrintUniformValue } from '../utility/blueprint/material/ir';\nimport { MaterialBlueprintIR } from '../utility/blueprint/material/ir';\nimport type { DrawContext } from '../render/drawable';\nimport { PBRBlockNode, VertexBlockNode } from '../utility/blueprint/material/pbr';\nimport type { PBRReflectionMode } from './mixins/lightmodel/pbrmetallicroughness';\n\nconst PBR_REFLECTION_MODE: Record<PBRReflectionMode, number> = {\n none: 0,\n ggx: 1,\n anisotropic: 2,\n glint: 3\n};\n\n/**\n * Physically-based rendering material driven by blueprint graphs.\n *\n * @remarks\n * This material extends {@link MeshMaterial} with PBR behavior via\n * {@link mixinPBRBluePrint}, and uses {@link MaterialBlueprintIR}\n * graphs for both vertex and fragment stages.\n *\n * - The **vertex blueprint IR** (`vertexIR`) controls vertex\n * transformations and per-vertex data.\n * - The **fragment blueprint IR** (`fragmentIR`) produces inputs\n * for the PBR shading model (albedo, roughness, metalness, etc.).\n *\n * Uniform values and textures for the blueprints are provided via\n * {@link PBRBluePrintMaterial.uniformValues} and\n * {@link PBRBluePrintMaterial.uniformTextures}.\n *\n * @public\n */\nexport class PBRBluePrintMaterial\n extends applyMaterialMixins(MeshMaterial, mixinPBRBluePrint)\n implements Clonable<PBRBluePrintMaterial>\n{\n /** @internal */\n private static readonly FEATURE_VERTEX_COLOR = this.defineFeature();\n /** @internal */\n private static readonly FEATURE_VERTEX_UV = this.defineFeature();\n /** @internal */\n private static readonly FEATURE_SUBSURFACE_SCATTERING = this.defineFeature();\n /** @internal */\n private _irFrag: MaterialBlueprintIR;\n /** @internal */\n private _irVertex: MaterialBlueprintIR;\n /** @internal */\n private _uniformValues: BluePrintUniformValue[];\n /** @internal */\n private _uniformTextures: BluePrintUniformTexture[];\n /** @internal */\n private _reflectionMode: PBRReflectionMode;\n /** @internal */\n private readonly _subsurfaceColor: Vector3;\n /** @internal */\n private _subsurfaceScale: number;\n /** @internal */\n private _subsurfacePower: number;\n /** @internal */\n private _subsurfaceIntensity: number;\n /** @internal */\n private _anisotropy: number;\n /** @internal */\n private _anisotropyDirection: number;\n /** @internal */\n private readonly _anisotropyDirectionScaleBias: Vector2;\n /**\n * Creates a new {@link PBRBluePrintMaterial} instance.\n *\n * @param irFrag - Optional fragment blueprint IR. If omitted, a default\n * IR containing a single {@link PBRBlockNode} is created.\n * @param irVertex - Optional vertex blueprint IR. If omitted, a default\n * IR containing a single {@link VertexBlockNode} is created.\n * @param uniformValues - Optional initial list of uniform value descriptors.\n * @param uniformTextures - Optional initial list of texture uniform descriptors.\n */\n constructor(\n irFrag?: MaterialBlueprintIR,\n irVertex?: MaterialBlueprintIR,\n uniformValues?: BluePrintUniformValue[],\n uniformTextures?: BluePrintUniformTexture[]\n ) {\n super();\n this._irFrag =\n irFrag ??\n new MaterialBlueprintIR(\n {\n nodeMap: { '1': new PBRBlockNode() },\n roots: [1],\n order: [1],\n graph: { incoming: {}, outgoing: {} }\n },\n '',\n {\n nodes: [{ id: 1, title: '', locked: true, node: { ClassName: 'PBRBlockNode', Object: '' } }],\n links: []\n }\n );\n this._irVertex =\n irVertex ??\n new MaterialBlueprintIR(\n {\n nodeMap: { '1': new VertexBlockNode() },\n roots: [1],\n order: [1],\n graph: { incoming: {}, outgoing: {} }\n },\n '',\n {\n nodes: [{ id: 1, title: '', locked: true, node: { ClassName: 'VertexBlockNode', Object: '' } }],\n links: []\n }\n );\n this._uniformValues = uniformValues ?? [];\n this._uniformTextures = uniformTextures ?? [];\n this._reflectionMode = 'ggx';\n this._subsurfaceColor = new Vector3(1, 0.3, 0.2);\n this._subsurfaceScale = 0.5;\n this._subsurfacePower = 1.5;\n this._subsurfaceIntensity = 0.5;\n this._anisotropy = 0.75;\n this._anisotropyDirection = 0;\n this._anisotropyDirectionScaleBias = new Vector2(1, 0);\n this.useFeature(PBRBluePrintMaterial.FEATURE_SUBSURFACE_SCATTERING, false);\n this.useFeature(PBRBluePrintMaterial.FEATURE_VERTEX_COLOR, this._irVertex.behaviors.useVertexColor);\n this.useFeature(PBRBluePrintMaterial.FEATURE_VERTEX_UV, this._irVertex.behaviors.useVertexUV);\n }\n get reflectionMode() {\n return this._reflectionMode;\n }\n set reflectionMode(val: PBRReflectionMode) {\n if (val !== this._reflectionMode) {\n this._reflectionMode = val;\n this.uniformChanged();\n }\n }\n get subsurfaceScattering() {\n return this.featureUsed<boolean>(PBRBluePrintMaterial.FEATURE_SUBSURFACE_SCATTERING);\n }\n set subsurfaceScattering(val: boolean) {\n this.useFeature(PBRBluePrintMaterial.FEATURE_SUBSURFACE_SCATTERING, !!val);\n }\n get subsurfaceColor(): Immutable<Vector3> {\n return this._subsurfaceColor;\n }\n set subsurfaceColor(val: Immutable<Vector3>) {\n if (!val.equalsTo(this._subsurfaceColor)) {\n this._subsurfaceColor.set(val);\n this.uniformChanged();\n }\n }\n get subsurfaceScale() {\n return this._subsurfaceScale;\n }\n set subsurfaceScale(val: number) {\n if (val !== this._subsurfaceScale) {\n this._subsurfaceScale = val;\n this.uniformChanged();\n }\n }\n get subsurfacePower() {\n return this._subsurfacePower;\n }\n set subsurfacePower(val: number) {\n if (val !== this._subsurfacePower) {\n this._subsurfacePower = val;\n this.uniformChanged();\n }\n }\n get subsurfaceIntensity() {\n return this._subsurfaceIntensity;\n }\n set subsurfaceIntensity(val: number) {\n if (val !== this._subsurfaceIntensity) {\n this._subsurfaceIntensity = val;\n this.uniformChanged();\n }\n }\n get anisotropy() {\n return this._anisotropy;\n }\n set anisotropy(val: number) {\n const clamped = Math.max(-0.95, Math.min(0.95, val));\n if (clamped !== this._anisotropy) {\n this._anisotropy = clamped;\n this.uniformChanged();\n }\n }\n get anisotropyDirection() {\n return this._anisotropyDirection;\n }\n set anisotropyDirection(val: number) {\n if (val !== this._anisotropyDirection) {\n this._anisotropyDirection = val;\n this.uniformChanged();\n }\n }\n get anisotropyDirectionScaleBias(): Immutable<Vector2> {\n return this._anisotropyDirectionScaleBias;\n }\n set anisotropyDirectionScaleBias(val: Immutable<Vector2>) {\n if (!val.equalsTo(this._anisotropyDirectionScaleBias)) {\n this._anisotropyDirectionScaleBias.set(val);\n this.uniformChanged();\n }\n }\n /**\n * Gets the fragment blueprint IR.\n */\n get fragmentIR() {\n return this._irFrag;\n }\n set fragmentIR(ir: MaterialBlueprintIR) {\n if (ir && ir !== this._irFrag) {\n this._irFrag = ir;\n this.clearCache();\n this.optionChanged(true);\n }\n }\n /**\n * Gets the vertex blueprint IR.\n */\n get vertexIR() {\n return this._irVertex;\n }\n set vertexIR(ir: MaterialBlueprintIR) {\n if (ir && ir !== this._irVertex) {\n this._irVertex = ir;\n this.useFeature(PBRBluePrintMaterial.FEATURE_VERTEX_COLOR, this._irVertex.behaviors.useVertexColor);\n this.useFeature(PBRBluePrintMaterial.FEATURE_VERTEX_UV, this._irVertex.behaviors.useVertexUV);\n this.clearCache();\n this.optionChanged(true);\n }\n }\n /**\n * Gets the list of uniform value descriptors used by the blueprints.\n */\n get uniformValues() {\n return this._uniformValues;\n }\n set uniformValues(val: BluePrintUniformValue[]) {\n this._uniformValues = (val ?? []).map((v) => ({ ...v }));\n this.uniformChanged();\n }\n /**\n * Gets the list of texture uniform descriptors used by the blueprints.\n */\n get uniformTextures() {\n return this._uniformTextures;\n }\n set uniformTextures(val: BluePrintUniformTexture[]) {\n if (val !== this._uniformTextures) {\n const newUniforms = val.map((v) => ({\n finalTexture: new DRef(v.finalTexture!.get()),\n finalSampler: v.finalSampler,\n name: v.name,\n params: v.params?.clone() ?? Vector4.zero(),\n texture: v.texture,\n type: v.type,\n sRGB: v.sRGB,\n wrapS: v.wrapS,\n wrapT: v.wrapT,\n inFragmentShader: v.inFragmentShader,\n inVertexShader: v.inVertexShader,\n minFilter: v.minFilter,\n magFilter: v.magFilter,\n mipFilter: v.mipFilter\n }));\n for (const u of this._uniformTextures) {\n u.finalTexture!.dispose();\n }\n this._uniformTextures = newUniforms;\n this.uniformChanged();\n }\n }\n /**\n * Creates a deep copy of this material.\n *\n * @remarks\n * The clone shares the same vertex/fragment IR references and copies\n * the current blueprint uniform descriptors, then calls `copyFrom`\n * to copy base-class and mixin state.\n *\n * @returns A new {@link PBRBluePrintMaterial} instance.\n */\n clone() {\n const other = new PBRBluePrintMaterial(\n this._irFrag,\n this._irVertex,\n this._uniformValues,\n this._uniformTextures\n );\n other.copyFrom(this);\n return other;\n }\n copyFrom(other: this) {\n super.copyFrom(other);\n this.reflectionMode = other.reflectionMode;\n this.subsurfaceScattering = other.subsurfaceScattering;\n this.subsurfaceColor = other.subsurfaceColor;\n this.subsurfaceScale = other.subsurfaceScale;\n this.subsurfacePower = other.subsurfacePower;\n this.subsurfaceIntensity = other.subsurfaceIntensity;\n this.anisotropy = other.anisotropy;\n this.anisotropyDirection = other.anisotropyDirection;\n this.anisotropyDirectionScaleBias = other.anisotropyDirectionScaleBias;\n }\n /**\n * Builds the vertex shader for this PBR blueprint material.\n *\n * @param scope - The current vertex shader function scope.\n */\n vertexShader(scope: PBFunctionScope) {\n super.vertexShader(scope);\n const pb = scope.$builder;\n scope.$inputs.zVertexPos = pb.vec3().attrib('position');\n scope.$inputs.zVertexNormal = pb.vec3().attrib('normal');\n scope.$inputs.zVertexTangent = pb.vec4().attrib('tangent');\n if (this.featureUsed(PBRBluePrintMaterial.FEATURE_VERTEX_COLOR)) {\n scope.$inputs.zVertexColor = pb.vec4().attrib('diffuse');\n }\n if (this.featureUsed(PBRBluePrintMaterial.FEATURE_VERTEX_UV)) {\n scope.$inputs.zVertexUV = pb.vec2().attrib('texCoord0');\n }\n\n for (const u of [...this._uniformValues, ...this._uniformTextures]) {\n if (u.inVertexShader) {\n // @ts-ignore\n pb.getGlobalScope()[u.name] = pb[u.type]().uniform(2);\n }\n }\n const outputs = this._irVertex.create(pb)!;\n scope.$l.oPos = this.getOutput(outputs, 'Position') ?? ShaderHelper.resolveVertexPosition(scope);\n const worldMatrix = ShaderHelper.getWorldMatrix(scope);\n scope.$outputs.worldPos = pb.mul(worldMatrix, pb.vec4(scope.oPos, 1)).xyz;\n scope.$l.csPos = pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1));\n ShaderHelper.setClipSpacePosition(scope, scope.csPos);\n scope.$outputs.zVertexColor =\n this.getOutput(outputs, 'Color') ??\n (this.featureUsed(PBRBluePrintMaterial.FEATURE_VERTEX_COLOR) ? scope.$inputs.zVertexColor : pb.vec4(1));\n scope.$outputs.zVertexUV =\n this.getOutput(outputs, 'UV') ??\n (this.featureUsed(PBRBluePrintMaterial.FEATURE_VERTEX_UV) ? scope.$inputs.zVertexUV : pb.vec2(0));\n scope.$l.oNorm = this.getOutput(outputs, 'Normal') ?? ShaderHelper.resolveVertexNormal(scope);\n scope.$outputs.zVertexNormal = pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oNorm, 0)).xyz;\n scope.$l.oTangent = this.getOutput(outputs, 'Tangent') ?? ShaderHelper.resolveVertexTangent(scope);\n scope.$outputs.zVertexTangent = pb.mul(\n ShaderHelper.getNormalMatrix(scope),\n pb.vec4(scope.oTangent.xyz, 0)\n ).xyz;\n scope.$outputs.zVertexBinormal = pb.mul(\n pb.cross(scope.$outputs.zVertexNormal, scope.$outputs.zVertexTangent),\n scope.oTangent.w\n );\n for (const outputName of ['Output1', 'Output2', 'Output3', 'Output4']) {\n const output = this.getOutput(outputs, outputName);\n if (output) {\n scope.$outputs[outputName] = output;\n }\n }\n }\n /**\n * Builds the fragment shader for this PBR blueprint material.\n *\n * @param scope - The current fragment shader function scope.\n */\n fragmentShader(scope: PBFunctionScope) {\n super.fragmentShader(scope);\n const pb = scope.$builder;\n if (\n this.subsurfaceScattering &&\n this.needFragmentColor() &&\n this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT\n ) {\n scope.zSubsurfaceColor = pb.vec3().uniform(2);\n scope.zSubsurfaceScale = pb.float().uniform(2);\n scope.zSubsurfacePower = pb.float().uniform(2);\n scope.zSubsurfaceIntensity = pb.float().uniform(2);\n }\n if (this.needFragmentColor()) {\n scope.zAnisotropy = pb.float().uniform(2);\n scope.zAnisotropyDirection = pb.float().uniform(2);\n scope.zAnisotropyDirectionScaleBias = pb.vec2().uniform(2);\n for (const u of [...this._uniformValues, ...this._uniformTextures]) {\n if (u.inFragmentShader) {\n // @ts-ignore\n pb.getGlobalScope()[u.name] = pb[u.type]().uniform(2);\n }\n }\n scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);\n scope.$l.commonData = this.getCommonDatasStruct(scope)();\n this.getCommonData(\n scope,\n scope.commonData,\n scope.viewVec,\n scope.$inputs.worldPos,\n scope.$inputs.zVertexNormal,\n scope.$inputs.zVertexTangent,\n scope.$inputs.zVertexBinormal,\n scope.$inputs.zVertexColor,\n scope.$inputs.zVertexUV,\n this._irFrag\n );\n if (this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\n if (this.drawContext.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS) {\n scope.$l.outRoughness = pb.vec4();\n scope.$l.litColor = this.PBRLight(\n scope,\n scope.$inputs.worldPos,\n scope.viewVec,\n scope.commonData,\n scope.outRoughness\n );\n if (this.subsurfaceScattering) {\n scope.litColor = this.applySubsurfaceScattering(\n scope,\n scope.litColor,\n scope.commonData.albedo.rgb,\n scope.commonData.normal,\n scope.viewVec\n );\n }\n this.outputFragmentColor(\n scope,\n scope.$inputs.worldPos,\n scope.litColor,\n scope.outRoughness,\n pb.vec4(pb.add(pb.mul(scope.commonData.normal, 0.5), pb.vec3(0.5)), 1)\n );\n } else {\n scope.$l.litColor = this.PBRLight(scope, scope.$inputs.worldPos, scope.viewVec, scope.commonData);\n if (this.subsurfaceScattering) {\n scope.litColor = this.applySubsurfaceScattering(\n scope,\n scope.litColor,\n scope.commonData.albedo.rgb,\n scope.commonData.normal,\n scope.viewVec\n );\n }\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.litColor);\n }\n } else {\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.commonData.albedo);\n }\n } else {\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\n }\n }\n /**\n * Applies runtime uniform values and textures to the given bind group.\n *\n * @remarks\n * - Calls the base implementation first to bind standard mesh/PBR uniforms.\n * - If fragment color is needed for the current context, all blueprint\n * scalar/vector uniform values and textures are then bound by name.\n *\n * @param bindGroup - The bind group to which material resources are bound.\n * @param ctx - The current draw context.\n * @param pass - Index of the active render pass.\n */\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\n super.applyUniformValues(bindGroup, ctx, pass);\n if (this.needFragmentColor(ctx)) {\n bindGroup.setValue('zReflectionMode', PBR_REFLECTION_MODE[this._reflectionMode]);\n bindGroup.setValue('zAnisotropy', this._anisotropy);\n bindGroup.setValue('zAnisotropyDirection', this._anisotropyDirection);\n bindGroup.setValue('zAnisotropyDirectionScaleBias', this._anisotropyDirectionScaleBias);\n if (this.subsurfaceScattering && ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\n bindGroup.setValue('zSubsurfaceColor', this._subsurfaceColor);\n bindGroup.setValue('zSubsurfaceScale', this._subsurfaceScale);\n bindGroup.setValue('zSubsurfacePower', this._subsurfacePower);\n bindGroup.setValue('zSubsurfaceIntensity', this._subsurfaceIntensity);\n }\n }\n for (const u of this._uniformValues) {\n if (u.inVertexShader || this.needFragmentColor(ctx)) {\n bindGroup.setValue(u.name, u.finalValue!);\n }\n }\n for (const u of this._uniformTextures) {\n if (u.inVertexShader || this.needFragmentColor(ctx)) {\n bindGroup.setTexture(u.name, u.finalTexture!.get()!, u.finalSampler);\n }\n }\n }\n /**\n * Creates a unique hash string used for program caching.\n *\n * @remarks\n * The hash includes:\n * - The base material hash (`super._createHash()`).\n * - The fragment IR hash.\n * - The vertex IR hash.\n *\n * Different blueprint graphs will therefore produce different programs.\n *\n * @returns A hash string that uniquely identifies this material configuration.\n */\n protected _createHash() {\n return `${super._createHash()}:${this._irFrag.hash}:${this._irVertex.hash}`;\n }\n /**\n * Creates the GPU program for this blueprint PBR material.\n *\n * @remarks\n * This calls the base implementation and returns its result.\n * Commented-out `console.log` lines are provided for debugging the\n * generated vertex and fragment shader sources.\n *\n * @param ctx - The current draw context.\n * @param pass - Index of the active render pass.\n * @returns The created GPU program.\n */\n protected createProgram(ctx: DrawContext, pass: number) {\n const program = super.createProgram(ctx, pass);\n //console.log(program.getShaderSource('vertex'));\n //console.log(program.getShaderSource('fragment'));\n return program;\n }\n /**\n * Disposes resources associated with this material.\n *\n * @remarks\n * - Calls the base `onDispose` to clean up inherited resources.\n * - Disposes all `finalTexture` references from the blueprint\n * texture uniform descriptors.\n *\n * This method is intended to be called by the engine's resource\n * management system rather than directly by user code.\n */\n protected onDispose() {\n super.onDispose();\n for (const u of this._uniformTextures) {\n u.finalTexture!.dispose();\n }\n }\n /**\n * Retrieves a named output expression from a blueprint output list.\n *\n * @param outputs - The list of outputs generated by a blueprint graph.\n * @param name - The desired output name (e.g. `\"Position\"`, `\"Color\"`, `\"UV\"`).\n * @returns The expression associated with the given name, or `undefined` if not found.\n */\n private getOutput(\n outputs: {\n name: string;\n exp: number | boolean | PBShaderExp;\n }[],\n name: string\n ) {\n return outputs.find((output) => output.name === name)?.exp;\n }\n private applySubsurfaceScattering(\n scope: PBInsideFunctionScope,\n litColor: PBShaderExp,\n albedoRGB: PBShaderExp,\n normal: PBShaderExp,\n viewVec: PBShaderExp\n ) {\n const pb = scope.$builder;\n scope.$l.NoV = pb.clamp(pb.dot(normal, viewVec), 0, 1);\n scope.$l.wrapNdotV = pb.clamp(\n pb.div(pb.add(pb.sub(1, scope.NoV), scope.zSubsurfaceScale), pb.add(1, scope.zSubsurfaceScale)),\n 0,\n 1\n );\n scope.$l.sssFactor = pb.mul(pb.pow(scope.wrapNdotV, scope.zSubsurfacePower), scope.zSubsurfaceIntensity);\n return pb.vec4(\n pb.add(litColor.rgb, pb.mul(albedoRGB, scope.zSubsurfaceColor, scope.sssFactor)),\n litColor.a\n );\n }\n}\n"],"names":["PBR_REFLECTION_MODE","none","ggx","anisotropic","glint","PBRBluePrintMaterial","applyMaterialMixins","MeshMaterial","mixinPBRBluePrint","FEATURE_VERTEX_COLOR","defineFeature","FEATURE_VERTEX_UV","FEATURE_SUBSURFACE_SCATTERING","irFrag","irVertex","uniformValues","uniformTextures","_irFrag","MaterialBlueprintIR","nodeMap","PBRBlockNode","roots","order","graph","incoming","outgoing","nodes","id","title","locked","node","ClassName","Object","links","_irVertex","VertexBlockNode","_uniformValues","_uniformTextures","_reflectionMode","_subsurfaceColor","Vector3","_subsurfaceScale","_subsurfacePower","_subsurfaceIntensity","_anisotropy","_anisotropyDirection","_anisotropyDirectionScaleBias","Vector2","useFeature","behaviors","useVertexColor","useVertexUV","reflectionMode","val","uniformChanged","subsurfaceScattering","featureUsed","subsurfaceColor","equalsTo","set","subsurfaceScale","subsurfacePower","subsurfaceIntensity","anisotropy","clamped","Math","max","min","anisotropyDirection","anisotropyDirectionScaleBias","fragmentIR","ir","clearCache","optionChanged","vertexIR","map","v","newUniforms","finalTexture","DRef","get","finalSampler","name","params","clone","Vector4","zero","texture","type","sRGB","wrapS","wrapT","inFragmentShader","inVertexShader","minFilter","magFilter","mipFilter","u","dispose","other","copyFrom","vertexShader","scope","pb","$builder","$inputs","zVertexPos","vec3","attrib","zVertexNormal","zVertexTangent","vec4","zVertexColor","zVertexUV","vec2","getGlobalScope","uniform","outputs","create","$l","oPos","getOutput","ShaderHelper","resolveVertexPosition","worldMatrix","getWorldMatrix","$outputs","worldPos","mul","xyz","csPos","getViewProjectionMatrix","setClipSpacePosition","oNorm","resolveVertexNormal","getNormalMatrix","oTangent","resolveVertexTangent","zVertexBinormal","cross","w","outputName","output","fragmentShader","needFragmentColor","drawContext","renderPass","RENDER_PASS_TYPE_LIGHT","zSubsurfaceColor","zSubsurfaceScale","float","zSubsurfacePower","zSubsurfaceIntensity","zAnisotropy","zAnisotropyDirection","zAnisotropyDirectionScaleBias","viewVec","calculateViewVector","commonData","getCommonDatasStruct","getCommonData","materialFlags","MaterialVaryingFlags","SSR_STORE_ROUGHNESS","outRoughness","litColor","PBRLight","applySubsurfaceScattering","albedo","rgb","normal","outputFragmentColor","add","applyUniformValues","bindGroup","ctx","pass","setValue","finalValue","setTexture","_createHash","hash","createProgram","program","onDispose","find","exp","albedoRGB","NoV","clamp","dot","wrapNdotV","div","sub","sssFactor","pow","a"],"mappings":";;;;;;;;AAYA,MAAMA,mBAAyD,GAAA;IAC7DC,IAAM,EAAA,CAAA;IACNC,GAAK,EAAA,CAAA;IACLC,WAAa,EAAA,CAAA;IACbC,KAAO,EAAA;AACT,CAAA;AAEA;;;;;;;;;;;;;;;;;;AAkBC,IACM,MAAMC,oBACHC,SAAAA,mBAAAA,CAAoBC,YAAcC,EAAAA,iBAAAA,CAAAA,CAAAA;AAG1C,qBACA,OAAwBC,oBAAAA,GAAuB,IAAI,CAACC,aAAa,EAAG;AACpE,qBACA,OAAwBC,iBAAAA,GAAoB,IAAI,CAACD,aAAa,EAAG;AACjE,qBACA,OAAwBE,6BAAAA,GAAgC,IAAI,CAACF,aAAa,EAAG;qBAE7E,OAAqC;qBAErC,SAAuC;qBAEvC,cAAgD;qBAEhD,gBAAoD;qBAEpD,eAA2C;qBAE3C,gBAA2C;qBAE3C,gBAAiC;qBAEjC,gBAAiC;qBAEjC,oBAAqC;qBAErC,WAA4B;qBAE5B,oBAAqC;qBAErC,6BAAwD;AACxD;;;;;;;;;MAUA,WAAA,CACEG,MAA4B,EAC5BC,QAA8B,EAC9BC,aAAuC,EACvCC,eAA2C,CAC3C;QACA,KAAK,EAAA;AACL,QAAA,IAAI,CAACC,OAAO,GACVJ,MAAAA,IACA,IAAIK,mBACF,CAAA;YACEC,OAAS,EAAA;AAAE,gBAAA,GAAA,EAAK,IAAIC,YAAAA;AAAe,aAAA;YACnCC,KAAO,EAAA;AAAC,gBAAA;AAAE,aAAA;YACVC,KAAO,EAAA;AAAC,gBAAA;AAAE,aAAA;YACVC,KAAO,EAAA;AAAEC,gBAAAA,QAAAA,EAAU,EAAC;AAAGC,gBAAAA,QAAAA,EAAU;AAAG;AACtC,SAAA,EACA,EACA,EAAA;YACEC,KAAO,EAAA;AAAC,gBAAA;oBAAEC,EAAI,EAAA,CAAA;oBAAGC,KAAO,EAAA,EAAA;oBAAIC,MAAQ,EAAA,IAAA;oBAAMC,IAAM,EAAA;wBAAEC,SAAW,EAAA,cAAA;wBAAgBC,MAAQ,EAAA;AAAG;AAAE;AAAE,aAAA;AAC5FC,YAAAA,KAAAA,EAAO;AACT,SAAA,CAAA;AAEJ,QAAA,IAAI,CAACC,SAAS,GACZpB,QAAAA,IACA,IAAII,mBACF,CAAA;YACEC,OAAS,EAAA;AAAE,gBAAA,GAAA,EAAK,IAAIgB,eAAAA;AAAkB,aAAA;YACtCd,KAAO,EAAA;AAAC,gBAAA;AAAE,aAAA;YACVC,KAAO,EAAA;AAAC,gBAAA;AAAE,aAAA;YACVC,KAAO,EAAA;AAAEC,gBAAAA,QAAAA,EAAU,EAAC;AAAGC,gBAAAA,QAAAA,EAAU;AAAG;AACtC,SAAA,EACA,EACA,EAAA;YACEC,KAAO,EAAA;AAAC,gBAAA;oBAAEC,EAAI,EAAA,CAAA;oBAAGC,KAAO,EAAA,EAAA;oBAAIC,MAAQ,EAAA,IAAA;oBAAMC,IAAM,EAAA;wBAAEC,SAAW,EAAA,iBAAA;wBAAmBC,MAAQ,EAAA;AAAG;AAAE;AAAE,aAAA;AAC/FC,YAAAA,KAAAA,EAAO;AACT,SAAA,CAAA;AAEJ,QAAA,IAAI,CAACG,cAAc,GAAGrB,aAAAA,IAAiB,EAAE;AACzC,QAAA,IAAI,CAACsB,gBAAgB,GAAGrB,eAAAA,IAAmB,EAAE;QAC7C,IAAI,CAACsB,eAAe,GAAG,KAAA;AACvB,QAAA,IAAI,CAACC,gBAAgB,GAAG,IAAIC,OAAAA,CAAQ,GAAG,GAAK,EAAA,GAAA,CAAA;QAC5C,IAAI,CAACC,gBAAgB,GAAG,GAAA;QACxB,IAAI,CAACC,gBAAgB,GAAG,GAAA;QACxB,IAAI,CAACC,oBAAoB,GAAG,GAAA;QAC5B,IAAI,CAACC,WAAW,GAAG,IAAA;QACnB,IAAI,CAACC,oBAAoB,GAAG,CAAA;AAC5B,QAAA,IAAI,CAACC,6BAA6B,GAAG,IAAIC,QAAQ,CAAG,EAAA,CAAA,CAAA;AACpD,QAAA,IAAI,CAACC,UAAU,CAAC3C,oBAAAA,CAAqBO,6BAA6B,EAAE,KAAA,CAAA;AACpE,QAAA,IAAI,CAACoC,UAAU,CAAC3C,oBAAAA,CAAqBI,oBAAoB,EAAE,IAAI,CAACyB,SAAS,CAACe,SAAS,CAACC,cAAc,CAAA;AAClG,QAAA,IAAI,CAACF,UAAU,CAAC3C,oBAAAA,CAAqBM,iBAAiB,EAAE,IAAI,CAACuB,SAAS,CAACe,SAAS,CAACE,WAAW,CAAA;AAC9F;AACA,IAAA,IAAIC,cAAiB,GAAA;QACnB,OAAO,IAAI,CAACd,eAAe;AAC7B;IACA,IAAIc,cAAAA,CAAeC,GAAsB,EAAE;AACzC,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAACf,eAAe,EAAE;YAChC,IAAI,CAACA,eAAe,GAAGe,GAAAA;AACvB,YAAA,IAAI,CAACC,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAIC,oBAAuB,GAAA;AACzB,QAAA,OAAO,IAAI,CAACC,WAAW,CAAUnD,qBAAqBO,6BAA6B,CAAA;AACrF;IACA,IAAI2C,oBAAAA,CAAqBF,GAAY,EAAE;AACrC,QAAA,IAAI,CAACL,UAAU,CAAC3C,qBAAqBO,6BAA6B,EAAE,CAAC,CAACyC,GAAAA,CAAAA;AACxE;AACA,IAAA,IAAII,eAAsC,GAAA;QACxC,OAAO,IAAI,CAAClB,gBAAgB;AAC9B;IACA,IAAIkB,eAAAA,CAAgBJ,GAAuB,EAAE;AAC3C,QAAA,IAAI,CAACA,GAAIK,CAAAA,QAAQ,CAAC,IAAI,CAACnB,gBAAgB,CAAG,EAAA;AACxC,YAAA,IAAI,CAACA,gBAAgB,CAACoB,GAAG,CAACN,GAAAA,CAAAA;AAC1B,YAAA,IAAI,CAACC,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAIM,eAAkB,GAAA;QACpB,OAAO,IAAI,CAACnB,gBAAgB;AAC9B;IACA,IAAImB,eAAAA,CAAgBP,GAAW,EAAE;AAC/B,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAACZ,gBAAgB,EAAE;YACjC,IAAI,CAACA,gBAAgB,GAAGY,GAAAA;AACxB,YAAA,IAAI,CAACC,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAIO,eAAkB,GAAA;QACpB,OAAO,IAAI,CAACnB,gBAAgB;AAC9B;IACA,IAAImB,eAAAA,CAAgBR,GAAW,EAAE;AAC/B,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAACX,gBAAgB,EAAE;YACjC,IAAI,CAACA,gBAAgB,GAAGW,GAAAA;AACxB,YAAA,IAAI,CAACC,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAIQ,mBAAsB,GAAA;QACxB,OAAO,IAAI,CAACnB,oBAAoB;AAClC;IACA,IAAImB,mBAAAA,CAAoBT,GAAW,EAAE;AACnC,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAACV,oBAAoB,EAAE;YACrC,IAAI,CAACA,oBAAoB,GAAGU,GAAAA;AAC5B,YAAA,IAAI,CAACC,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAIS,UAAa,GAAA;QACf,OAAO,IAAI,CAACnB,WAAW;AACzB;IACA,IAAImB,UAAAA,CAAWV,GAAW,EAAE;QAC1B,MAAMW,OAAAA,GAAUC,KAAKC,GAAG,CAAC,KAAOD,EAAAA,IAAAA,CAAKE,GAAG,CAAC,IAAMd,EAAAA,GAAAA,CAAAA,CAAAA;AAC/C,QAAA,IAAIW,OAAY,KAAA,IAAI,CAACpB,WAAW,EAAE;YAChC,IAAI,CAACA,WAAW,GAAGoB,OAAAA;AACnB,YAAA,IAAI,CAACV,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAIc,mBAAsB,GAAA;QACxB,OAAO,IAAI,CAACvB,oBAAoB;AAClC;IACA,IAAIuB,mBAAAA,CAAoBf,GAAW,EAAE;AACnC,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAACR,oBAAoB,EAAE;YACrC,IAAI,CAACA,oBAAoB,GAAGQ,GAAAA;AAC5B,YAAA,IAAI,CAACC,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAIe,4BAAmD,GAAA;QACrD,OAAO,IAAI,CAACvB,6BAA6B;AAC3C;IACA,IAAIuB,4BAAAA,CAA6BhB,GAAuB,EAAE;AACxD,QAAA,IAAI,CAACA,GAAIK,CAAAA,QAAQ,CAAC,IAAI,CAACZ,6BAA6B,CAAG,EAAA;AACrD,YAAA,IAAI,CAACA,6BAA6B,CAACa,GAAG,CAACN,GAAAA,CAAAA;AACvC,YAAA,IAAI,CAACC,cAAc,EAAA;AACrB;AACF;AACA;;AAEC,MACD,IAAIgB,UAAa,GAAA;QACf,OAAO,IAAI,CAACrD,OAAO;AACrB;IACA,IAAIqD,UAAAA,CAAWC,EAAuB,EAAE;AACtC,QAAA,IAAIA,EAAMA,IAAAA,EAAAA,KAAO,IAAI,CAACtD,OAAO,EAAE;YAC7B,IAAI,CAACA,OAAO,GAAGsD,EAAAA;AACf,YAAA,IAAI,CAACC,UAAU,EAAA;YACf,IAAI,CAACC,aAAa,CAAC,IAAA,CAAA;AACrB;AACF;AACA;;AAEC,MACD,IAAIC,QAAW,GAAA;QACb,OAAO,IAAI,CAACxC,SAAS;AACvB;IACA,IAAIwC,QAAAA,CAASH,EAAuB,EAAE;AACpC,QAAA,IAAIA,EAAMA,IAAAA,EAAAA,KAAO,IAAI,CAACrC,SAAS,EAAE;YAC/B,IAAI,CAACA,SAAS,GAAGqC,EAAAA;AACjB,YAAA,IAAI,CAACvB,UAAU,CAAC3C,oBAAAA,CAAqBI,oBAAoB,EAAE,IAAI,CAACyB,SAAS,CAACe,SAAS,CAACC,cAAc,CAAA;AAClG,YAAA,IAAI,CAACF,UAAU,CAAC3C,oBAAAA,CAAqBM,iBAAiB,EAAE,IAAI,CAACuB,SAAS,CAACe,SAAS,CAACE,WAAW,CAAA;AAC5F,YAAA,IAAI,CAACqB,UAAU,EAAA;YACf,IAAI,CAACC,aAAa,CAAC,IAAA,CAAA;AACrB;AACF;AACA;;AAEC,MACD,IAAI1D,aAAgB,GAAA;QAClB,OAAO,IAAI,CAACqB,cAAc;AAC5B;IACA,IAAIrB,aAAAA,CAAcsC,GAA4B,EAAE;AAC9C,QAAA,IAAI,CAACjB,cAAc,GAAIiB,CAAAA,GAAAA,IAAO,EAAC,EAAGsB,GAAG,CAAC,CAACC,KAAO;AAAE,gBAAA,GAAGA;aAAE,CAAA,CAAA;AACrD,QAAA,IAAI,CAACtB,cAAc,EAAA;AACrB;AACA;;AAEC,MACD,IAAItC,eAAkB,GAAA;QACpB,OAAO,IAAI,CAACqB,gBAAgB;AAC9B;IACA,IAAIrB,eAAAA,CAAgBqC,GAA8B,EAAE;AAClD,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAAChB,gBAAgB,EAAE;AACjC,YAAA,MAAMwC,cAAcxB,GAAIsB,CAAAA,GAAG,CAAC,CAACC,KAAO;AAClCE,oBAAAA,YAAAA,EAAc,IAAIC,IAAAA,CAAKH,CAAEE,CAAAA,YAAY,CAAEE,GAAG,EAAA,CAAA;AAC1CC,oBAAAA,YAAAA,EAAcL,EAAEK,YAAY;AAC5BC,oBAAAA,IAAAA,EAAMN,EAAEM,IAAI;AACZC,oBAAAA,MAAAA,EAAQP,CAAEO,CAAAA,MAAM,EAAEC,KAAAA,EAAAA,IAAWC,QAAQC,IAAI,EAAA;AACzCC,oBAAAA,OAAAA,EAASX,EAAEW,OAAO;AAClBC,oBAAAA,IAAAA,EAAMZ,EAAEY,IAAI;AACZC,oBAAAA,IAAAA,EAAMb,EAAEa,IAAI;AACZC,oBAAAA,KAAAA,EAAOd,EAAEc,KAAK;AACdC,oBAAAA,KAAAA,EAAOf,EAAEe,KAAK;AACdC,oBAAAA,gBAAAA,EAAkBhB,EAAEgB,gBAAgB;AACpCC,oBAAAA,cAAAA,EAAgBjB,EAAEiB,cAAc;AAChCC,oBAAAA,SAAAA,EAAWlB,EAAEkB,SAAS;AACtBC,oBAAAA,SAAAA,EAAWnB,EAAEmB,SAAS;AACtBC,oBAAAA,SAAAA,EAAWpB,EAAEoB;iBACf,CAAA,CAAA;AACA,YAAA,KAAK,MAAMC,CAAAA,IAAK,IAAI,CAAC5D,gBAAgB,CAAE;gBACrC4D,CAAEnB,CAAAA,YAAY,CAAEoB,OAAO,EAAA;AACzB;YACA,IAAI,CAAC7D,gBAAgB,GAAGwC,WAAAA;AACxB,YAAA,IAAI,CAACvB,cAAc,EAAA;AACrB;AACF;AACA;;;;;;;;;AASC,MACD8B,KAAQ,GAAA;AACN,QAAA,MAAMe,QAAQ,IAAI9F,oBAAAA,CAChB,IAAI,CAACY,OAAO,EACZ,IAAI,CAACiB,SAAS,EACd,IAAI,CAACE,cAAc,EACnB,IAAI,CAACC,gBAAgB,CAAA;QAEvB8D,KAAMC,CAAAA,QAAQ,CAAC,IAAI,CAAA;QACnB,OAAOD,KAAAA;AACT;AACAC,IAAAA,QAAAA,CAASD,KAAW,EAAE;AACpB,QAAA,KAAK,CAACC,QAASD,CAAAA,KAAAA,CAAAA;AACf,QAAA,IAAI,CAAC/C,cAAc,GAAG+C,KAAAA,CAAM/C,cAAc;AAC1C,QAAA,IAAI,CAACG,oBAAoB,GAAG4C,KAAAA,CAAM5C,oBAAoB;AACtD,QAAA,IAAI,CAACE,eAAe,GAAG0C,KAAAA,CAAM1C,eAAe;AAC5C,QAAA,IAAI,CAACG,eAAe,GAAGuC,KAAAA,CAAMvC,eAAe;AAC5C,QAAA,IAAI,CAACC,eAAe,GAAGsC,KAAAA,CAAMtC,eAAe;AAC5C,QAAA,IAAI,CAACC,mBAAmB,GAAGqC,KAAAA,CAAMrC,mBAAmB;AACpD,QAAA,IAAI,CAACC,UAAU,GAAGoC,KAAAA,CAAMpC,UAAU;AAClC,QAAA,IAAI,CAACK,mBAAmB,GAAG+B,KAAAA,CAAM/B,mBAAmB;AACpD,QAAA,IAAI,CAACC,4BAA4B,GAAG8B,KAAAA,CAAM9B,4BAA4B;AACxE;AACA;;;;MAKAgC,YAAAA,CAAaC,KAAsB,EAAE;AACnC,QAAA,KAAK,CAACD,YAAaC,CAAAA,KAAAA,CAAAA;QACnB,MAAMC,EAAAA,GAAKD,MAAME,QAAQ;QACzBF,KAAMG,CAAAA,OAAO,CAACC,UAAU,GAAGH,GAAGI,IAAI,EAAA,CAAGC,MAAM,CAAC,UAAA,CAAA;QAC5CN,KAAMG,CAAAA,OAAO,CAACI,aAAa,GAAGN,GAAGI,IAAI,EAAA,CAAGC,MAAM,CAAC,QAAA,CAAA;QAC/CN,KAAMG,CAAAA,OAAO,CAACK,cAAc,GAAGP,GAAGQ,IAAI,EAAA,CAAGH,MAAM,CAAC,SAAA,CAAA;AAChD,QAAA,IAAI,IAAI,CAACpD,WAAW,CAACnD,oBAAAA,CAAqBI,oBAAoB,CAAG,EAAA;YAC/D6F,KAAMG,CAAAA,OAAO,CAACO,YAAY,GAAGT,GAAGQ,IAAI,EAAA,CAAGH,MAAM,CAAC,SAAA,CAAA;AAChD;AACA,QAAA,IAAI,IAAI,CAACpD,WAAW,CAACnD,oBAAAA,CAAqBM,iBAAiB,CAAG,EAAA;YAC5D2F,KAAMG,CAAAA,OAAO,CAACQ,SAAS,GAAGV,GAAGW,IAAI,EAAA,CAAGN,MAAM,CAAC,WAAA,CAAA;AAC7C;AAEA,QAAA,KAAK,MAAMX,CAAK,IAAA;AAAI,YAAA,GAAA,IAAI,CAAC7D,cAAc;AAAK,YAAA,GAAA,IAAI,CAACC;SAAiB,CAAE;YAClE,IAAI4D,CAAAA,CAAEJ,cAAc,EAAE;;AAEpBU,gBAAAA,EAAAA,CAAGY,cAAc,EAAE,CAAClB,CAAAA,CAAEf,IAAI,CAAC,GAAGqB,EAAE,CAACN,CAAET,CAAAA,IAAI,CAAC,EAAA,CAAG4B,OAAO,CAAC,CAAA,CAAA;AACrD;AACF;AACA,QAAA,MAAMC,UAAU,IAAI,CAACnF,SAAS,CAACoF,MAAM,CAACf,EAAAA,CAAAA;AACtCD,QAAAA,KAAAA,CAAMiB,EAAE,CAACC,IAAI,GAAG,IAAI,CAACC,SAAS,CAACJ,OAAS,EAAA,UAAA,CAAA,IAAeK,YAAaC,CAAAA,qBAAqB,CAACrB,KAAAA,CAAAA;QAC1F,MAAMsB,WAAAA,GAAcF,YAAaG,CAAAA,cAAc,CAACvB,KAAAA,CAAAA;AAChDA,QAAAA,KAAAA,CAAMwB,QAAQ,CAACC,QAAQ,GAAGxB,GAAGyB,GAAG,CAACJ,WAAarB,EAAAA,EAAAA,CAAGQ,IAAI,CAACT,KAAAA,CAAMkB,IAAI,EAAE,IAAIS,GAAG;AACzE3B,QAAAA,KAAAA,CAAMiB,EAAE,CAACW,KAAK,GAAG3B,EAAGyB,CAAAA,GAAG,CAACN,YAAaS,CAAAA,uBAAuB,CAAC7B,KAAAA,CAAAA,EAAQC,GAAGQ,IAAI,CAACT,MAAMwB,QAAQ,CAACC,QAAQ,EAAE,CAAA,CAAA,CAAA;AACtGL,QAAAA,YAAAA,CAAaU,oBAAoB,CAAC9B,KAAOA,EAAAA,KAAAA,CAAM4B,KAAK,CAAA;QACpD5B,KAAMwB,CAAAA,QAAQ,CAACd,YAAY,GACzB,IAAI,CAACS,SAAS,CAACJ,OAAAA,EAAS,OACvB,CAAA,KAAA,IAAI,CAAC7D,WAAW,CAACnD,oBAAAA,CAAqBI,oBAAoB,CAAA,GAAI6F,KAAMG,CAAAA,OAAO,CAACO,YAAY,GAAGT,EAAAA,CAAGQ,IAAI,CAAC,CAAC,CAAA,CAAA;QACvGT,KAAMwB,CAAAA,QAAQ,CAACb,SAAS,GACtB,IAAI,CAACQ,SAAS,CAACJ,OAAAA,EAAS,IACvB,CAAA,KAAA,IAAI,CAAC7D,WAAW,CAACnD,oBAAAA,CAAqBM,iBAAiB,CAAA,GAAI2F,KAAMG,CAAAA,OAAO,CAACQ,SAAS,GAAGV,EAAAA,CAAGW,IAAI,CAAC,CAAC,CAAA,CAAA;AACjGZ,QAAAA,KAAAA,CAAMiB,EAAE,CAACc,KAAK,GAAG,IAAI,CAACZ,SAAS,CAACJ,OAAS,EAAA,QAAA,CAAA,IAAaK,YAAaY,CAAAA,mBAAmB,CAAChC,KAAAA,CAAAA;AACvFA,QAAAA,KAAAA,CAAMwB,QAAQ,CAACjB,aAAa,GAAGN,EAAGyB,CAAAA,GAAG,CAACN,YAAaa,CAAAA,eAAe,CAACjC,KAAAA,CAAAA,EAAQC,GAAGQ,IAAI,CAACT,MAAM+B,KAAK,EAAE,IAAIJ,GAAG;AACvG3B,QAAAA,KAAAA,CAAMiB,EAAE,CAACiB,QAAQ,GAAG,IAAI,CAACf,SAAS,CAACJ,OAAS,EAAA,SAAA,CAAA,IAAcK,YAAae,CAAAA,oBAAoB,CAACnC,KAAAA,CAAAA;QAC5FA,KAAMwB,CAAAA,QAAQ,CAAChB,cAAc,GAAGP,GAAGyB,GAAG,CACpCN,aAAaa,eAAe,CAACjC,QAC7BC,EAAGQ,CAAAA,IAAI,CAACT,KAAMkC,CAAAA,QAAQ,CAACP,GAAG,EAAE,IAC5BA,GAAG;QACL3B,KAAMwB,CAAAA,QAAQ,CAACY,eAAe,GAAGnC,GAAGyB,GAAG,CACrCzB,EAAGoC,CAAAA,KAAK,CAACrC,KAAAA,CAAMwB,QAAQ,CAACjB,aAAa,EAAEP,KAAAA,CAAMwB,QAAQ,CAAChB,cAAc,CACpER,EAAAA,KAAAA,CAAMkC,QAAQ,CAACI,CAAC,CAAA;AAElB,QAAA,KAAK,MAAMC,UAAc,IAAA;AAAC,YAAA,SAAA;AAAW,YAAA,SAAA;AAAW,YAAA,SAAA;AAAW,YAAA;SAAU,CAAE;AACrE,YAAA,MAAMC,MAAS,GAAA,IAAI,CAACrB,SAAS,CAACJ,OAASwB,EAAAA,UAAAA,CAAAA;AACvC,YAAA,IAAIC,MAAQ,EAAA;gBACVxC,KAAMwB,CAAAA,QAAQ,CAACe,UAAAA,CAAW,GAAGC,MAAAA;AAC/B;AACF;AACF;AACA;;;;MAKAC,cAAAA,CAAezC,KAAsB,EAAE;AACrC,QAAA,KAAK,CAACyC,cAAezC,CAAAA,KAAAA,CAAAA;QACrB,MAAMC,EAAAA,GAAKD,MAAME,QAAQ;AACzB,QAAA,IACE,IAAI,CAACjD,oBAAoB,IACzB,IAAI,CAACyF,iBAAiB,EAAA,IACtB,IAAI,CAACC,WAAW,CAACC,UAAU,CAAE1D,IAAI,KAAK2D,sBACtC,EAAA;AACA7C,YAAAA,KAAAA,CAAM8C,gBAAgB,GAAG7C,EAAAA,CAAGI,IAAI,EAAA,CAAGS,OAAO,CAAC,CAAA,CAAA;AAC3Cd,YAAAA,KAAAA,CAAM+C,gBAAgB,GAAG9C,EAAAA,CAAG+C,KAAK,EAAA,CAAGlC,OAAO,CAAC,CAAA,CAAA;AAC5Cd,YAAAA,KAAAA,CAAMiD,gBAAgB,GAAGhD,EAAAA,CAAG+C,KAAK,EAAA,CAAGlC,OAAO,CAAC,CAAA,CAAA;AAC5Cd,YAAAA,KAAAA,CAAMkD,oBAAoB,GAAGjD,EAAAA,CAAG+C,KAAK,EAAA,CAAGlC,OAAO,CAAC,CAAA,CAAA;AAClD;QACA,IAAI,IAAI,CAAC4B,iBAAiB,EAAI,EAAA;AAC5B1C,YAAAA,KAAAA,CAAMmD,WAAW,GAAGlD,EAAAA,CAAG+C,KAAK,EAAA,CAAGlC,OAAO,CAAC,CAAA,CAAA;AACvCd,YAAAA,KAAAA,CAAMoD,oBAAoB,GAAGnD,EAAAA,CAAG+C,KAAK,EAAA,CAAGlC,OAAO,CAAC,CAAA,CAAA;AAChDd,YAAAA,KAAAA,CAAMqD,6BAA6B,GAAGpD,EAAAA,CAAGW,IAAI,EAAA,CAAGE,OAAO,CAAC,CAAA,CAAA;AACxD,YAAA,KAAK,MAAMnB,CAAK,IAAA;AAAI,gBAAA,GAAA,IAAI,CAAC7D,cAAc;AAAK,gBAAA,GAAA,IAAI,CAACC;aAAiB,CAAE;gBAClE,IAAI4D,CAAAA,CAAEL,gBAAgB,EAAE;;AAEtBW,oBAAAA,EAAAA,CAAGY,cAAc,EAAE,CAAClB,CAAAA,CAAEf,IAAI,CAAC,GAAGqB,EAAE,CAACN,CAAET,CAAAA,IAAI,CAAC,EAAA,CAAG4B,OAAO,CAAC,CAAA,CAAA;AACrD;AACF;AACAd,YAAAA,KAAAA,CAAMiB,EAAE,CAACqC,OAAO,GAAG,IAAI,CAACC,mBAAmB,CAACvD,KAAOA,EAAAA,KAAAA,CAAMG,OAAO,CAACsB,QAAQ,CAAA;AACzEzB,YAAAA,KAAAA,CAAMiB,EAAE,CAACuC,UAAU,GAAG,IAAI,CAACC,oBAAoB,CAACzD,KAAAA,CAAAA,EAAAA;AAChD,YAAA,IAAI,CAAC0D,aAAa,CAChB1D,OACAA,KAAMwD,CAAAA,UAAU,EAChBxD,KAAMsD,CAAAA,OAAO,EACbtD,KAAMG,CAAAA,OAAO,CAACsB,QAAQ,EACtBzB,MAAMG,OAAO,CAACI,aAAa,EAC3BP,KAAAA,CAAMG,OAAO,CAACK,cAAc,EAC5BR,KAAAA,CAAMG,OAAO,CAACiC,eAAe,EAC7BpC,KAAMG,CAAAA,OAAO,CAACO,YAAY,EAC1BV,MAAMG,OAAO,CAACQ,SAAS,EACvB,IAAI,CAAChG,OAAO,CAAA;YAEd,IAAI,IAAI,CAACgI,WAAW,CAACC,UAAU,CAAE1D,IAAI,KAAK2D,sBAAwB,EAAA;gBAChE,IAAI,IAAI,CAACF,WAAW,CAACgB,aAAa,GAAGC,oBAAAA,CAAqBC,mBAAmB,EAAE;AAC7E7D,oBAAAA,KAAAA,CAAMiB,EAAE,CAAC6C,YAAY,GAAG7D,GAAGQ,IAAI,EAAA;oBAC/BT,KAAMiB,CAAAA,EAAE,CAAC8C,QAAQ,GAAG,IAAI,CAACC,QAAQ,CAC/BhE,KACAA,EAAAA,KAAAA,CAAMG,OAAO,CAACsB,QAAQ,EACtBzB,KAAMsD,CAAAA,OAAO,EACbtD,KAAMwD,CAAAA,UAAU,EAChBxD,KAAAA,CAAM8D,YAAY,CAAA;oBAEpB,IAAI,IAAI,CAAC7G,oBAAoB,EAAE;wBAC7B+C,KAAM+D,CAAAA,QAAQ,GAAG,IAAI,CAACE,yBAAyB,CAC7CjE,KAAAA,EACAA,KAAM+D,CAAAA,QAAQ,EACd/D,KAAAA,CAAMwD,UAAU,CAACU,MAAM,CAACC,GAAG,EAC3BnE,KAAAA,CAAMwD,UAAU,CAACY,MAAM,EACvBpE,KAAAA,CAAMsD,OAAO,CAAA;AAEjB;AACA,oBAAA,IAAI,CAACe,mBAAmB,CACtBrE,KAAAA,EACAA,MAAMG,OAAO,CAACsB,QAAQ,EACtBzB,KAAM+D,CAAAA,QAAQ,EACd/D,KAAAA,CAAM8D,YAAY,EAClB7D,EAAAA,CAAGQ,IAAI,CAACR,EAAGqE,CAAAA,GAAG,CAACrE,EAAAA,CAAGyB,GAAG,CAAC1B,KAAAA,CAAMwD,UAAU,CAACY,MAAM,EAAE,GAAA,CAAA,EAAMnE,EAAGI,CAAAA,IAAI,CAAC,GAAO,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA;iBAEjE,MAAA;AACLL,oBAAAA,KAAAA,CAAMiB,EAAE,CAAC8C,QAAQ,GAAG,IAAI,CAACC,QAAQ,CAAChE,KAAAA,EAAOA,KAAMG,CAAAA,OAAO,CAACsB,QAAQ,EAAEzB,MAAMsD,OAAO,EAAEtD,MAAMwD,UAAU,CAAA;oBAChG,IAAI,IAAI,CAACvG,oBAAoB,EAAE;wBAC7B+C,KAAM+D,CAAAA,QAAQ,GAAG,IAAI,CAACE,yBAAyB,CAC7CjE,KAAAA,EACAA,KAAM+D,CAAAA,QAAQ,EACd/D,KAAAA,CAAMwD,UAAU,CAACU,MAAM,CAACC,GAAG,EAC3BnE,KAAAA,CAAMwD,UAAU,CAACY,MAAM,EACvBpE,KAAAA,CAAMsD,OAAO,CAAA;AAEjB;oBACA,IAAI,CAACe,mBAAmB,CAACrE,KAAOA,EAAAA,KAAAA,CAAMG,OAAO,CAACsB,QAAQ,EAAEzB,KAAAA,CAAM+D,QAAQ,CAAA;AACxE;aACK,MAAA;AACL,gBAAA,IAAI,CAACM,mBAAmB,CAACrE,KAAAA,EAAOA,KAAMG,CAAAA,OAAO,CAACsB,QAAQ,EAAEzB,KAAAA,CAAMwD,UAAU,CAACU,MAAM,CAAA;AACjF;SACK,MAAA;YACL,IAAI,CAACG,mBAAmB,CAACrE,KAAAA,EAAOA,MAAMG,OAAO,CAACsB,QAAQ,EAAE,IAAA,CAAA;AAC1D;AACF;AACA;;;;;;;;;;;AAWC,MACD8C,mBAAmBC,SAAoB,EAAEC,GAAgB,EAAEC,IAAY,EAAE;QACvE,KAAK,CAACH,kBAAmBC,CAAAA,SAAAA,EAAWC,GAAKC,EAAAA,IAAAA,CAAAA;AACzC,QAAA,IAAI,IAAI,CAAChC,iBAAiB,CAAC+B,GAAM,CAAA,EAAA;YAC/BD,SAAUG,CAAAA,QAAQ,CAAC,iBAAmBjL,EAAAA,mBAAmB,CAAC,IAAI,CAACsC,eAAe,CAAC,CAAA;AAC/EwI,YAAAA,SAAAA,CAAUG,QAAQ,CAAC,aAAe,EAAA,IAAI,CAACrI,WAAW,CAAA;AAClDkI,YAAAA,SAAAA,CAAUG,QAAQ,CAAC,sBAAwB,EAAA,IAAI,CAACpI,oBAAoB,CAAA;AACpEiI,YAAAA,SAAAA,CAAUG,QAAQ,CAAC,+BAAiC,EAAA,IAAI,CAACnI,6BAA6B,CAAA;YACtF,IAAI,IAAI,CAACS,oBAAoB,IAAIwH,IAAI7B,UAAU,CAAE1D,IAAI,KAAK2D,sBAAwB,EAAA;AAChF2B,gBAAAA,SAAAA,CAAUG,QAAQ,CAAC,kBAAoB,EAAA,IAAI,CAAC1I,gBAAgB,CAAA;AAC5DuI,gBAAAA,SAAAA,CAAUG,QAAQ,CAAC,kBAAoB,EAAA,IAAI,CAACxI,gBAAgB,CAAA;AAC5DqI,gBAAAA,SAAAA,CAAUG,QAAQ,CAAC,kBAAoB,EAAA,IAAI,CAACvI,gBAAgB,CAAA;AAC5DoI,gBAAAA,SAAAA,CAAUG,QAAQ,CAAC,sBAAwB,EAAA,IAAI,CAACtI,oBAAoB,CAAA;AACtE;AACF;AACA,QAAA,KAAK,MAAMsD,CAAAA,IAAK,IAAI,CAAC7D,cAAc,CAAE;AACnC,YAAA,IAAI6D,EAAEJ,cAAc,IAAI,IAAI,CAACmD,iBAAiB,CAAC+B,GAAM,CAAA,EAAA;AACnDD,gBAAAA,SAAAA,CAAUG,QAAQ,CAAChF,CAAAA,CAAEf,IAAI,EAAEe,EAAEiF,UAAU,CAAA;AACzC;AACF;AACA,QAAA,KAAK,MAAMjF,CAAAA,IAAK,IAAI,CAAC5D,gBAAgB,CAAE;AACrC,YAAA,IAAI4D,EAAEJ,cAAc,IAAI,IAAI,CAACmD,iBAAiB,CAAC+B,GAAM,CAAA,EAAA;gBACnDD,SAAUK,CAAAA,UAAU,CAAClF,CAAAA,CAAEf,IAAI,EAAEe,CAAEnB,CAAAA,YAAY,CAAEE,GAAG,EAAKiB,EAAAA,CAAAA,CAAEhB,YAAY,CAAA;AACrE;AACF;AACF;AACA;;;;;;;;;;;;AAYC,MACD,WAAwB,GAAA;AACtB,QAAA,OAAO,GAAG,KAAK,CAACmG,cAAc,CAAC,EAAE,IAAI,CAACnK,OAAO,CAACoK,IAAI,CAAC,CAAC,EAAE,IAAI,CAACnJ,SAAS,CAACmJ,IAAI,CAAE,CAAA;AAC7E;AACA;;;;;;;;;;;AAWC,MACD,aAAUC,CAAcP,GAAgB,EAAEC,IAAY,EAAE;AACtD,QAAA,MAAMO,OAAU,GAAA,KAAK,CAACD,aAAAA,CAAcP,GAAKC,EAAAA,IAAAA,CAAAA;;;QAGzC,OAAOO,OAAAA;AACT;AACA;;;;;;;;;;AAUC,MACD,SAAsB,GAAA;AACpB,QAAA,KAAK,CAACC,SAAAA,EAAAA;AACN,QAAA,KAAK,MAAMvF,CAAAA,IAAK,IAAI,CAAC5D,gBAAgB,CAAE;YACrC4D,CAAEnB,CAAAA,YAAY,CAAEoB,OAAO,EAAA;AACzB;AACF;AACA;;;;;;AAMC,MACD,SAAQuB,CACNJ,OAGG,EACHnC,IAAY,EACZ;QACA,OAAOmC,OAAAA,CAAQoE,IAAI,CAAC,CAAC3C,SAAWA,MAAO5D,CAAAA,IAAI,KAAKA,IAAOwG,CAAAA,EAAAA,GAAAA;AACzD;IACQnB,yBACNjE,CAAAA,KAA4B,EAC5B+D,QAAqB,EACrBsB,SAAsB,EACtBjB,MAAmB,EACnBd,OAAoB,EACpB;QACA,MAAMrD,EAAAA,GAAKD,MAAME,QAAQ;AACzBF,QAAAA,KAAAA,CAAMiB,EAAE,CAACqE,GAAG,GAAGrF,EAAGsF,CAAAA,KAAK,CAACtF,EAAAA,CAAGuF,GAAG,CAACpB,MAAQd,EAAAA,OAAAA,CAAAA,EAAU,CAAG,EAAA,CAAA,CAAA;AACpDtD,QAAAA,KAAAA,CAAMiB,EAAE,CAACwE,SAAS,GAAGxF,EAAGsF,CAAAA,KAAK,CAC3BtF,EAAAA,CAAGyF,GAAG,CAACzF,EAAGqE,CAAAA,GAAG,CAACrE,EAAG0F,CAAAA,GAAG,CAAC,CAAA,EAAG3F,KAAMsF,CAAAA,GAAG,CAAGtF,EAAAA,KAAAA,CAAM+C,gBAAgB,CAAA,EAAG9C,EAAGqE,CAAAA,GAAG,CAAC,CAAA,EAAGtE,KAAM+C,CAAAA,gBAAgB,IAC7F,CACA,EAAA,CAAA,CAAA;AAEF/C,QAAAA,KAAAA,CAAMiB,EAAE,CAAC2E,SAAS,GAAG3F,EAAAA,CAAGyB,GAAG,CAACzB,EAAAA,CAAG4F,GAAG,CAAC7F,MAAMyF,SAAS,EAAEzF,MAAMiD,gBAAgB,CAAA,EAAGjD,MAAMkD,oBAAoB,CAAA;QACvG,OAAOjD,EAAAA,CAAGQ,IAAI,CACZR,EAAAA,CAAGqE,GAAG,CAACP,QAAAA,CAASI,GAAG,EAAElE,EAAAA,CAAGyB,GAAG,CAAC2D,SAAAA,EAAWrF,MAAM8C,gBAAgB,EAAE9C,MAAM4F,SAAS,CAAA,CAAA,EAC9E7B,SAAS+B,CAAC,CAAA;AAEd;AACF;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { Vector3, Vector4, Vector2 } from '@zephyr3d/base';
2
- import { RENDER_PASS_TYPE_DEPTH, RENDER_PASS_TYPE_SHADOWMAP, RENDER_PASS_TYPE_OBJECT_COLOR, RENDER_PASS_TYPE_LIGHT, MaterialVaryingFlags, MAX_CLUSTERED_LIGHTS, MORPH_WEIGHTS_VECTOR_COUNT, MORPH_TARGET_POSITION, MORPH_TARGET_NORMAL, MORPH_TARGET_TANGENT, MORPH_ATTRIBUTE_VECTOR_COUNT } from '../../values.js';
2
+ import { RENDER_PASS_TYPE_DEPTH, RENDER_PASS_TYPE_SHADOWMAP, RENDER_PASS_TYPE_OBJECT_COLOR, RENDER_PASS_TYPE_LIGHT, MaterialVaryingFlags, MORPH_WEIGHTS_VECTOR_COUNT, MORPH_TARGET_POSITION, MORPH_TARGET_NORMAL, MORPH_TARGET_TANGENT, MORPH_ATTRIBUTE_VECTOR_COUNT } from '../../values.js';
3
3
  import { ProgramBuilder } from '@zephyr3d/device';
4
4
  import { decodeNormalizedFloatFromRGBA, linearToGamma } from '../../shaders/misc.js';
5
5
  import { fetchSampler } from '../../utility/misc.js';
@@ -218,7 +218,7 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
218
218
  scope.camera = cameraStruct().uniform(0);
219
219
  scope.light = lightStruct().uniform(0);
220
220
  if (useClusteredLighting) {
221
- scope[UNIFORM_NAME_LIGHT_BUFFER] = pb.vec4[(MAX_CLUSTERED_LIGHTS + 1) * 4]().uniformBuffer(0);
221
+ scope[UNIFORM_NAME_LIGHT_BUFFER] = pb.vec4[(this.getMaxClusteredLightCount() + 1) * 4]().uniformBuffer(0);
222
222
  scope[UNIFORM_NAME_LIGHT_INDEX_TEXTURE] = (pb.getDevice().type === 'webgl' ? pb.tex2D() : pb.utex2D()).uniform(0);
223
223
  }
224
224
  scope[UNIFORM_NAME_BAKED_SKY_MAP] = pb.texCube().uniform(0);
@@ -1103,7 +1103,7 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
1103
1103
  ], function() {
1104
1104
  this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), that.getRenderSize(this));
1105
1105
  this.$l.fogging = calculateFog(this, this.fog.withAerialPerspective, this.fog.fogType, this.fog.atmosphereParams, this.fog.heightFogParams, this.uv, false, that.getCameraPosition(this).xyz, this.worldPos, this.fog.additive, this[UNIFORM_NAME_AERIALPERSPECTIVE_LUT], this[UNIFORM_NAME_SKYDISTANTLIGHT_LUT]);
1106
- this.color = pb.vec4(pb.add(pb.mul(this.color.rgb, this.fogging.a), this.fogging.rgb), this.color.a);
1106
+ this.color = pb.vec4(pb.add(pb.mul(this.color.rgb, this.fogging.a), pb.mul(this.fogging.rgb, this.color.a)), this.color.a);
1107
1107
  //this.color = pb.vec4(pb.vec3(pb.mix(this.u0, this.u1, this.factor)), this.color.a);
1108
1108
  });
1109
1109
  scope[funcName](worldPos, color);
@@ -1208,6 +1208,9 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
1208
1208
  });
1209
1209
  return pb.getGlobalScope()[funcName](outputColor);
1210
1210
  }
1211
+ static getMaxClusteredLightCount() {
1212
+ return getDevice().type === 'webgl' ? 127 : 255;
1213
+ }
1211
1214
  }
1212
1215
 
1213
1216
  export { ShaderHelper };