@zephyr3d/scene 0.9.1 → 0.9.3

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 (522) hide show
  1. package/dist/animation/animationset.js +2 -0
  2. package/dist/animation/animationset.js.map +1 -1
  3. package/dist/animation/cloth/gpu_cloth_system.js +9 -1
  4. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  5. package/dist/animation/fixed_geometry_cache_track.js +5 -1
  6. package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
  7. package/dist/animation/geometry_cache_utils.js +20 -4
  8. package/dist/animation/geometry_cache_utils.js.map +1 -1
  9. package/dist/animation/ik/ik_angle_constraint.js +2 -6
  10. package/dist/animation/ik/ik_angle_constraint.js.map +1 -1
  11. package/dist/animation/ik/ik_chain_builder.js +68 -0
  12. package/dist/animation/ik/ik_chain_builder.js.map +1 -0
  13. package/dist/animation/ik/ik_pole_constraint.js +2 -7
  14. package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
  15. package/dist/animation/ik/two_bone_ik_solver.js +2 -6
  16. package/dist/animation/ik/two_bone_ik_solver.js.map +1 -1
  17. package/dist/animation/joint_dynamics/collision.js +60 -12
  18. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  19. package/dist/animation/joint_dynamics/constraints.js +20 -4
  20. package/dist/animation/joint_dynamics/constraints.js.map +1 -1
  21. package/dist/animation/joint_dynamics/controller.js +94 -46
  22. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  23. package/dist/animation/joint_dynamics/math.js +16 -0
  24. package/dist/animation/joint_dynamics/math.js.map +1 -0
  25. package/dist/animation/joint_dynamics/solver.js +21 -11
  26. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  27. package/dist/animation/joint_dynamics/types.js +15 -3
  28. package/dist/animation/joint_dynamics/types.js.map +1 -1
  29. package/dist/animation/pca_geometry_cache_track.js +5 -1
  30. package/dist/animation/pca_geometry_cache_track.js.map +1 -1
  31. package/dist/animation/skeleton.js +2 -2
  32. package/dist/animation/skeleton.js.map +1 -1
  33. package/dist/animation/skeleton_modifier.js +2 -6
  34. package/dist/animation/skeleton_modifier.js.map +1 -1
  35. package/dist/animation/spring/spring_particle.js +4 -4
  36. package/dist/animation/spring/spring_particle.js.map +1 -1
  37. package/dist/animation/spring/spring_system.js +13 -40
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring2/constraints.js.map +1 -1
  40. package/dist/animation/spring2/controller.js +64 -64
  41. package/dist/animation/spring2/controller.js.map +1 -1
  42. package/dist/animation/spring2/math.js.map +1 -1
  43. package/dist/animation/spring2/spring_system.js +8 -8
  44. package/dist/animation/spring2/spring_system.js.map +1 -1
  45. package/dist/app/app.js.map +1 -1
  46. package/dist/app/engine.js +1 -1
  47. package/dist/app/engine.js.map +1 -1
  48. package/dist/app/screen.js +4 -4
  49. package/dist/app/screen.js.map +1 -1
  50. package/dist/app/scriptingsystem.js +24 -1
  51. package/dist/app/scriptingsystem.js.map +1 -1
  52. package/dist/app/scriptregistry.js +22 -1
  53. package/dist/app/scriptregistry.js.map +1 -1
  54. package/dist/asset/assetmanager.js +2 -2
  55. package/dist/asset/assetmanager.js.map +1 -1
  56. package/dist/asset/model.js +60 -60
  57. package/dist/asset/model.js.map +1 -1
  58. package/dist/camera/camera.js +1 -1
  59. package/dist/camera/camera.js.map +1 -1
  60. package/dist/camera/orbit.js.map +1 -1
  61. package/dist/index.d.ts +795 -266
  62. package/dist/index.js +3 -2
  63. package/dist/index.js.map +1 -1
  64. package/dist/material/material.js +3 -1
  65. package/dist/material/material.js.map +1 -1
  66. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  67. package/dist/material/shader/helper.js +281 -278
  68. package/dist/material/shader/helper.js.map +1 -1
  69. package/dist/material/sprite.js +6 -6
  70. package/dist/material/sprite.js.map +1 -1
  71. package/dist/material/terrain-cm.js +2 -2
  72. package/dist/material/terrain-cm.js.map +1 -1
  73. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  74. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  75. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  76. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  77. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  78. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  79. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  80. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  81. package/dist/posteffect/taa.js +31 -39
  82. package/dist/posteffect/taa.js.map +1 -1
  83. package/dist/render/cluster_light.js +3 -4
  84. package/dist/render/cluster_light.js.map +1 -1
  85. package/dist/render/drawable.js +5 -1
  86. package/dist/render/drawable.js.map +1 -1
  87. package/dist/render/rendergraph/device_pool_allocator.js +29 -3
  88. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  89. package/dist/render/rendergraph/executor.js +283 -33
  90. package/dist/render/rendergraph/executor.js.map +1 -1
  91. package/dist/render/rendergraph/forward_plus_builder.js +338 -108
  92. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  93. package/dist/render/rendergraph/history_resource_manager.js +195 -115
  94. package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
  95. package/dist/render/rendergraph/history_resources.js +10 -0
  96. package/dist/render/rendergraph/history_resources.js.map +1 -0
  97. package/dist/render/rendergraph/rendergraph.js +162 -35
  98. package/dist/render/rendergraph/rendergraph.js.map +1 -1
  99. package/dist/render/rendergraph/types.js +25 -5
  100. package/dist/render/rendergraph/types.js.map +1 -1
  101. package/dist/render/rendertarget.js +5 -1
  102. package/dist/render/rendertarget.js.map +1 -1
  103. package/dist/render/screenrendertarget.js +5 -1
  104. package/dist/render/screenrendertarget.js.map +1 -1
  105. package/dist/render/sky.js +4 -4
  106. package/dist/render/sky.js.map +1 -1
  107. package/dist/scene/basesprite.js +2 -2
  108. package/dist/scene/basesprite.js.map +1 -1
  109. package/dist/scene/graph_node.js +1 -1
  110. package/dist/scene/graph_node.js.map +1 -1
  111. package/dist/scene/mesh.js +81 -97
  112. package/dist/scene/mesh.js.map +1 -1
  113. package/dist/scene/particlesys.js +1 -1
  114. package/dist/scene/particlesys.js.map +1 -1
  115. package/dist/scene/scene_node.js +228 -228
  116. package/dist/scene/scene_node.js.map +1 -1
  117. package/dist/scene/script_attachment.js +15 -3
  118. package/dist/scene/script_attachment.js.map +1 -1
  119. package/dist/scene/terrain-cm/terrain-cm.js +3 -3
  120. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  121. package/dist/shadow/shadowmapper.js.map +1 -1
  122. package/dist/shapes/box.js +1 -1
  123. package/dist/shapes/box.js.map +1 -1
  124. package/dist/shapes/capsule.js +0 -3
  125. package/dist/shapes/capsule.js.map +1 -1
  126. package/dist/shapes/cylinder.js +0 -3
  127. package/dist/shapes/cylinder.js.map +1 -1
  128. package/dist/shapes/plane.js +0 -3
  129. package/dist/shapes/plane.js.map +1 -1
  130. package/dist/shapes/tetrahedron.js +3 -9
  131. package/dist/shapes/tetrahedron.js.map +1 -1
  132. package/dist/shapes/torus.js +94 -66
  133. package/dist/shapes/torus.js.map +1 -1
  134. package/dist/src/animation/animation.js +127 -0
  135. package/dist/src/animation/animation.js.map +1 -0
  136. package/dist/src/animation/animationset.js +255 -0
  137. package/dist/src/animation/animationset.js.map +1 -0
  138. package/dist/src/animation/animationtrack.js +34 -0
  139. package/dist/src/animation/animationtrack.js.map +1 -0
  140. package/dist/src/animation/eulerrotationtrack.js +52 -0
  141. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  142. package/dist/src/animation/morphtarget.js +93 -0
  143. package/dist/src/animation/morphtarget.js.map +1 -0
  144. package/dist/src/animation/morphtrack.js +70 -0
  145. package/dist/src/animation/morphtrack.js.map +1 -0
  146. package/dist/src/animation/proptrack.js +161 -0
  147. package/dist/src/animation/proptrack.js.map +1 -0
  148. package/dist/src/animation/rotationtrack.js +51 -0
  149. package/dist/src/animation/rotationtrack.js.map +1 -0
  150. package/dist/src/animation/scaletrack.js +50 -0
  151. package/dist/src/animation/scaletrack.js.map +1 -0
  152. package/dist/src/animation/skeleton.js +204 -0
  153. package/dist/src/animation/skeleton.js.map +1 -0
  154. package/dist/src/animation/translationtrack.js +50 -0
  155. package/dist/src/animation/translationtrack.js.map +1 -0
  156. package/dist/src/app/app.js +129 -0
  157. package/dist/src/app/app.js.map +1 -0
  158. package/dist/src/app/inputmgr.js +267 -0
  159. package/dist/src/app/inputmgr.js.map +1 -0
  160. package/dist/src/asset/assetmanager.js +404 -0
  161. package/dist/src/asset/assetmanager.js.map +1 -0
  162. package/dist/src/asset/builtin.js +337 -0
  163. package/dist/src/asset/builtin.js.map +1 -0
  164. package/dist/src/asset/loaders/dds/dds.js +470 -0
  165. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  166. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  167. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  168. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  169. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  170. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  171. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  172. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  173. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  174. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  175. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  176. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  177. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  178. package/dist/src/asset/loaders/loader.js +45 -0
  179. package/dist/src/asset/loaders/loader.js.map +1 -0
  180. package/dist/src/asset/model.js +414 -0
  181. package/dist/src/asset/model.js.map +1 -0
  182. package/dist/src/blitter/bilateralblur.js +221 -0
  183. package/dist/src/blitter/bilateralblur.js.map +1 -0
  184. package/dist/src/blitter/blitter.js +390 -0
  185. package/dist/src/blitter/blitter.js.map +1 -0
  186. package/dist/src/blitter/box.js +118 -0
  187. package/dist/src/blitter/box.js.map +1 -0
  188. package/dist/src/blitter/copy.js +22 -0
  189. package/dist/src/blitter/copy.js.map +1 -0
  190. package/dist/src/blitter/gaussianblur.js +228 -0
  191. package/dist/src/blitter/gaussianblur.js.map +1 -0
  192. package/dist/src/camera/base.js +92 -0
  193. package/dist/src/camera/base.js.map +1 -0
  194. package/dist/src/camera/camera.js +1005 -0
  195. package/dist/src/camera/camera.js.map +1 -0
  196. package/dist/src/camera/fps.js +238 -0
  197. package/dist/src/camera/fps.js.map +1 -0
  198. package/dist/src/camera/orbit.js +245 -0
  199. package/dist/src/camera/orbit.js.map +1 -0
  200. package/dist/src/camera/orthocamera.js +167 -0
  201. package/dist/src/camera/orthocamera.js.map +1 -0
  202. package/dist/src/camera/perspectivecamera.js +141 -0
  203. package/dist/src/camera/perspectivecamera.js.map +1 -0
  204. package/dist/src/index.js +120 -0
  205. package/dist/src/index.js.map +1 -0
  206. package/dist/src/material/blinn.js +81 -0
  207. package/dist/src/material/blinn.js.map +1 -0
  208. package/dist/src/material/grassmaterial.js +113 -0
  209. package/dist/src/material/grassmaterial.js.map +1 -0
  210. package/dist/src/material/lambert.js +92 -0
  211. package/dist/src/material/lambert.js.map +1 -0
  212. package/dist/src/material/material.js +301 -0
  213. package/dist/src/material/material.js.map +1 -0
  214. package/dist/src/material/meshmaterial.js +704 -0
  215. package/dist/src/material/meshmaterial.js.map +1 -0
  216. package/dist/src/material/mixins/albedocolor.js +76 -0
  217. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  218. package/dist/src/material/mixins/foliage.js +47 -0
  219. package/dist/src/material/mixins/foliage.js.map +1 -0
  220. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  221. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  222. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  223. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  224. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  225. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  226. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  227. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  228. package/dist/src/material/mixins/lit.js +476 -0
  229. package/dist/src/material/mixins/lit.js.map +1 -0
  230. package/dist/src/material/mixins/pbr/common.js +918 -0
  231. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  232. package/dist/src/material/mixins/texture.js +172 -0
  233. package/dist/src/material/mixins/texture.js.map +1 -0
  234. package/dist/src/material/mixins/vertexcolor.js +56 -0
  235. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  236. package/dist/src/material/particle.js +178 -0
  237. package/dist/src/material/particle.js.map +1 -0
  238. package/dist/src/material/pbrmr.js +97 -0
  239. package/dist/src/material/pbrmr.js.map +1 -0
  240. package/dist/src/material/pbrsg.js +97 -0
  241. package/dist/src/material/pbrsg.js.map +1 -0
  242. package/dist/src/material/shader/helper.js +1209 -0
  243. package/dist/src/material/shader/helper.js.map +1 -0
  244. package/dist/src/material/terrain-cm.js +606 -0
  245. package/dist/src/material/terrain-cm.js.map +1 -0
  246. package/dist/src/material/terrainmaterial.js +375 -0
  247. package/dist/src/material/terrainmaterial.js.map +1 -0
  248. package/dist/src/material/unlit.js +41 -0
  249. package/dist/src/material/unlit.js.map +1 -0
  250. package/dist/src/material/water.js +417 -0
  251. package/dist/src/material/water.js.map +1 -0
  252. package/dist/src/posteffect/bloom.js +361 -0
  253. package/dist/src/posteffect/bloom.js.map +1 -0
  254. package/dist/src/posteffect/compositor.js +226 -0
  255. package/dist/src/posteffect/compositor.js.map +1 -0
  256. package/dist/src/posteffect/fxaa.js +273 -0
  257. package/dist/src/posteffect/fxaa.js.map +1 -0
  258. package/dist/src/posteffect/grayscale.js +69 -0
  259. package/dist/src/posteffect/grayscale.js.map +1 -0
  260. package/dist/src/posteffect/motionblur.js +96 -0
  261. package/dist/src/posteffect/motionblur.js.map +1 -0
  262. package/dist/src/posteffect/posteffect.js +126 -0
  263. package/dist/src/posteffect/posteffect.js.map +1 -0
  264. package/dist/src/posteffect/sao.js +324 -0
  265. package/dist/src/posteffect/sao.js.map +1 -0
  266. package/dist/src/posteffect/ssr.js +489 -0
  267. package/dist/src/posteffect/ssr.js.map +1 -0
  268. package/dist/src/posteffect/taa.js +172 -0
  269. package/dist/src/posteffect/taa.js.map +1 -0
  270. package/dist/src/posteffect/tonemap.js +94 -0
  271. package/dist/src/posteffect/tonemap.js.map +1 -0
  272. package/dist/src/render/abuffer_oit.js +361 -0
  273. package/dist/src/render/abuffer_oit.js.map +1 -0
  274. package/dist/src/render/clipmap.js +851 -0
  275. package/dist/src/render/clipmap.js.map +1 -0
  276. package/dist/src/render/cluster_light.js +333 -0
  277. package/dist/src/render/cluster_light.js.map +1 -0
  278. package/dist/src/render/cull_visitor.js +187 -0
  279. package/dist/src/render/cull_visitor.js.map +1 -0
  280. package/dist/src/render/depthpass.js +68 -0
  281. package/dist/src/render/depthpass.js.map +1 -0
  282. package/dist/src/render/drawable_mixin.js +227 -0
  283. package/dist/src/render/drawable_mixin.js.map +1 -0
  284. package/dist/src/render/envlight.js +463 -0
  285. package/dist/src/render/envlight.js.map +1 -0
  286. package/dist/src/render/fbm_wavegenerator.js +251 -0
  287. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  288. package/dist/src/render/fft_wavegenerator.js +1006 -0
  289. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  290. package/dist/src/render/fullscreenquad.js +38 -0
  291. package/dist/src/render/fullscreenquad.js.map +1 -0
  292. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  293. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  294. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  295. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  296. package/dist/src/render/hzb.js +273 -0
  297. package/dist/src/render/hzb.js.map +1 -0
  298. package/dist/src/render/lightpass.js +172 -0
  299. package/dist/src/render/lightpass.js.map +1 -0
  300. package/dist/src/render/objectcolorpass.js +51 -0
  301. package/dist/src/render/objectcolorpass.js.map +1 -0
  302. package/dist/src/render/primitive.js +364 -0
  303. package/dist/src/render/primitive.js.map +1 -0
  304. package/dist/src/render/render_queue.js +467 -0
  305. package/dist/src/render/render_queue.js.map +1 -0
  306. package/dist/src/render/renderbundle_wrapper.js +152 -0
  307. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  308. package/dist/src/render/renderer.js +455 -0
  309. package/dist/src/render/renderer.js.map +1 -0
  310. package/dist/src/render/renderpass.js +200 -0
  311. package/dist/src/render/renderpass.js.map +1 -0
  312. package/dist/src/render/shadowmap_pass.js +56 -0
  313. package/dist/src/render/shadowmap_pass.js.map +1 -0
  314. package/dist/src/render/sky.js +1103 -0
  315. package/dist/src/render/sky.js.map +1 -0
  316. package/dist/src/render/weightedblended_oit.js +168 -0
  317. package/dist/src/render/weightedblended_oit.js.map +1 -0
  318. package/dist/src/scene/batchgroup.js +162 -0
  319. package/dist/src/scene/batchgroup.js.map +1 -0
  320. package/dist/src/scene/environment.js +209 -0
  321. package/dist/src/scene/environment.js.map +1 -0
  322. package/dist/src/scene/graph_node.js +72 -0
  323. package/dist/src/scene/graph_node.js.map +1 -0
  324. package/dist/src/scene/light.js +416 -0
  325. package/dist/src/scene/light.js.map +1 -0
  326. package/dist/src/scene/mesh.js +341 -0
  327. package/dist/src/scene/mesh.js.map +1 -0
  328. package/dist/src/scene/octree.js +649 -0
  329. package/dist/src/scene/octree.js.map +1 -0
  330. package/dist/src/scene/particlesys.js +738 -0
  331. package/dist/src/scene/particlesys.js.map +1 -0
  332. package/dist/src/scene/raycast_visitor.js +103 -0
  333. package/dist/src/scene/raycast_visitor.js.map +1 -0
  334. package/dist/src/scene/scene.js +284 -0
  335. package/dist/src/scene/scene.js.map +1 -0
  336. package/dist/src/scene/scene_node.js +732 -0
  337. package/dist/src/scene/scene_node.js.map +1 -0
  338. package/dist/src/scene/terrain/grass.js +278 -0
  339. package/dist/src/scene/terrain/grass.js.map +1 -0
  340. package/dist/src/scene/terrain/heightfield.js +475 -0
  341. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  342. package/dist/src/scene/terrain/patch.js +530 -0
  343. package/dist/src/scene/terrain/patch.js.map +1 -0
  344. package/dist/src/scene/terrain/quadtree.js +461 -0
  345. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  346. package/dist/src/scene/terrain/terrain.js +246 -0
  347. package/dist/src/scene/terrain/terrain.js.map +1 -0
  348. package/dist/src/scene/terrain-cm/grass.js +594 -0
  349. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  350. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  351. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  352. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  353. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  354. package/dist/src/scene/water.js +374 -0
  355. package/dist/src/scene/water.js.map +1 -0
  356. package/dist/src/shaders/atmosphere.js +957 -0
  357. package/dist/src/shaders/atmosphere.js.map +1 -0
  358. package/dist/src/shaders/fog.js +112 -0
  359. package/dist/src/shaders/fog.js.map +1 -0
  360. package/dist/src/shaders/misc.js +266 -0
  361. package/dist/src/shaders/misc.js.map +1 -0
  362. package/dist/src/shaders/noise.js +222 -0
  363. package/dist/src/shaders/noise.js.map +1 -0
  364. package/dist/src/shaders/pbr.js +51 -0
  365. package/dist/src/shaders/pbr.js.map +1 -0
  366. package/dist/src/shaders/shadow.js +636 -0
  367. package/dist/src/shaders/shadow.js.map +1 -0
  368. package/dist/src/shaders/ssr.js +490 -0
  369. package/dist/src/shaders/ssr.js.map +1 -0
  370. package/dist/src/shaders/temporal.js +215 -0
  371. package/dist/src/shaders/temporal.js.map +1 -0
  372. package/dist/src/shaders/water.js +756 -0
  373. package/dist/src/shaders/water.js.map +1 -0
  374. package/dist/src/shadow/esm.js +237 -0
  375. package/dist/src/shadow/esm.js.map +1 -0
  376. package/dist/src/shadow/pcf_opt.js +181 -0
  377. package/dist/src/shadow/pcf_opt.js.map +1 -0
  378. package/dist/src/shadow/pcf_pd.js +189 -0
  379. package/dist/src/shadow/pcf_pd.js.map +1 -0
  380. package/dist/src/shadow/shader.js +37 -0
  381. package/dist/src/shadow/shader.js.map +1 -0
  382. package/dist/src/shadow/shadow_impl.js +15 -0
  383. package/dist/src/shadow/shadow_impl.js.map +1 -0
  384. package/dist/src/shadow/shadowmapper.js +790 -0
  385. package/dist/src/shadow/shadowmapper.js.map +1 -0
  386. package/dist/src/shadow/ssm.js +159 -0
  387. package/dist/src/shadow/ssm.js.map +1 -0
  388. package/dist/src/shadow/vsm.js +297 -0
  389. package/dist/src/shadow/vsm.js.map +1 -0
  390. package/dist/src/shapes/box.js +386 -0
  391. package/dist/src/shapes/box.js.map +1 -0
  392. package/dist/src/shapes/cylinder.js +125 -0
  393. package/dist/src/shapes/cylinder.js.map +1 -0
  394. package/dist/src/shapes/plane.js +88 -0
  395. package/dist/src/shapes/plane.js.map +1 -0
  396. package/dist/src/shapes/shape.js +87 -0
  397. package/dist/src/shapes/shape.js.map +1 -0
  398. package/dist/src/shapes/sphere.js +114 -0
  399. package/dist/src/shapes/sphere.js.map +1 -0
  400. package/dist/src/shapes/tetrahedron.js +188 -0
  401. package/dist/src/shapes/tetrahedron.js.map +1 -0
  402. package/dist/src/shapes/torus.js +111 -0
  403. package/dist/src/shapes/torus.js.map +1 -0
  404. package/dist/src/utility/aabbtree.js +400 -0
  405. package/dist/src/utility/aabbtree.js.map +1 -0
  406. package/dist/src/utility/bounding_volume.js +29 -0
  407. package/dist/src/utility/bounding_volume.js.map +1 -0
  408. package/dist/src/utility/debug.js +28 -0
  409. package/dist/src/utility/debug.js.map +1 -0
  410. package/dist/src/utility/draco/decoder.js +116 -0
  411. package/dist/src/utility/draco/decoder.js.map +1 -0
  412. package/dist/src/utility/misc.js +105 -0
  413. package/dist/src/utility/misc.js.map +1 -0
  414. package/dist/src/utility/panorama.js +163 -0
  415. package/dist/src/utility/panorama.js.map +1 -0
  416. package/dist/src/utility/pmrem.js +354 -0
  417. package/dist/src/utility/pmrem.js.map +1 -0
  418. package/dist/src/utility/rendermipmap.js +115 -0
  419. package/dist/src/utility/rendermipmap.js.map +1 -0
  420. package/dist/src/utility/serialization/json.js +402 -0
  421. package/dist/src/utility/serialization/json.js.map +1 -0
  422. package/dist/src/utility/serialization/manager.js +623 -0
  423. package/dist/src/utility/serialization/manager.js.map +1 -0
  424. package/dist/src/utility/serialization/scene/animation.js +248 -0
  425. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  426. package/dist/src/utility/serialization/scene/batch.js +59 -0
  427. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  428. package/dist/src/utility/serialization/scene/camera.js +790 -0
  429. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  430. package/dist/src/utility/serialization/scene/common.js +222 -0
  431. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  432. package/dist/src/utility/serialization/scene/light.js +575 -0
  433. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  434. package/dist/src/utility/serialization/scene/material.js +1111 -0
  435. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  436. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  437. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  438. package/dist/src/utility/serialization/scene/misc.js +39 -0
  439. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  440. package/dist/src/utility/serialization/scene/node.js +451 -0
  441. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  442. package/dist/src/utility/serialization/scene/particle.js +425 -0
  443. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  444. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  445. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  446. package/dist/src/utility/serialization/scene/scene.js +704 -0
  447. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  448. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  449. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  450. package/dist/src/utility/serialization/scene/water.js +465 -0
  451. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  452. package/dist/src/utility/shprojector.js +297 -0
  453. package/dist/src/utility/shprojector.js.map +1 -0
  454. package/dist/src/utility/textures/ggxlut.js +213 -0
  455. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  456. package/dist/src/utility/textures/gradientnoise.js +62 -0
  457. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  458. package/dist/src/utility/textures/randomnoise.js +41 -0
  459. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  460. package/dist/src/values.js +162 -0
  461. package/dist/src/values.js.map +1 -0
  462. package/dist/utility/blueprint/material/common.js +7 -0
  463. package/dist/utility/blueprint/material/common.js.map +1 -0
  464. package/dist/utility/blueprint/material/inputs.js +3 -3
  465. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  466. package/dist/utility/blueprint/material/ir.js +4 -4
  467. package/dist/utility/blueprint/material/ir.js.map +1 -1
  468. package/dist/utility/serialization/blueprint/constants.js +255 -0
  469. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  470. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  471. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  472. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  473. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  474. package/dist/utility/serialization/manager.js +299 -268
  475. package/dist/utility/serialization/manager.js.map +1 -1
  476. package/dist/utility/serialization/scene/animation.js +45 -0
  477. package/dist/utility/serialization/scene/animation.js.map +1 -1
  478. package/dist/utility/serialization/scene/camera.js +53 -0
  479. package/dist/utility/serialization/scene/camera.js.map +1 -1
  480. package/dist/utility/serialization/scene/common.js +10 -0
  481. package/dist/utility/serialization/scene/common.js.map +1 -1
  482. package/dist/utility/serialization/scene/light.js +30 -0
  483. package/dist/utility/serialization/scene/light.js.map +1 -1
  484. package/dist/utility/serialization/scene/material.js +63 -0
  485. package/dist/utility/serialization/scene/material.js.map +1 -1
  486. package/dist/utility/serialization/scene/mesh.js +11 -0
  487. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  488. package/dist/utility/serialization/scene/misc.js +2 -0
  489. package/dist/utility/serialization/scene/misc.js.map +1 -1
  490. package/dist/utility/serialization/scene/node.js +19 -0
  491. package/dist/utility/serialization/scene/node.js.map +1 -1
  492. package/dist/utility/serialization/scene/particle.js +22 -0
  493. package/dist/utility/serialization/scene/particle.js.map +1 -1
  494. package/dist/utility/serialization/scene/primitive.js +33 -0
  495. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  496. package/dist/utility/serialization/scene/scene.js +39 -0
  497. package/dist/utility/serialization/scene/scene.js.map +1 -1
  498. package/dist/utility/serialization/scene/script.js +2 -0
  499. package/dist/utility/serialization/scene/script.js.map +1 -1
  500. package/dist/utility/serialization/scene/sprite.js +6 -0
  501. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  502. package/dist/utility/serialization/scene/terrain.js +9 -0
  503. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  504. package/dist/utility/serialization/scene/water.js +21 -0
  505. package/dist/utility/serialization/scene/water.js.map +1 -1
  506. package/dist/utility/serialization/types.js +5 -1
  507. package/dist/utility/serialization/types.js.map +1 -1
  508. package/dist/values.js +49 -53
  509. package/dist/values.js.map +1 -1
  510. package/package.json +2 -2
  511. package/dist/animation/joint_dynamics/vrm_spring_bone.js +0 -46
  512. package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +0 -1
  513. package/dist/animation/spring/spring_bone.js +0 -240
  514. package/dist/animation/spring/spring_bone.js.map +0 -1
  515. package/dist/animation/spring/spring_bone_collider.js +0 -198
  516. package/dist/animation/spring/spring_bone_collider.js.map +0 -1
  517. package/dist/animation/spring/spring_bone_constraint.js +0 -170
  518. package/dist/animation/spring/spring_bone_constraint.js.map +0 -1
  519. package/dist/animation/spring/spring_bone_system.js +0 -328
  520. package/dist/animation/spring/spring_bone_system.js.map +0 -1
  521. package/dist/render/sky_motion_vector.js +0 -85
  522. package/dist/render/sky_motion_vector.js.map +0 -1
@@ -11,9 +11,9 @@ import { Vector4 } from '@zephyr3d/base';
11
11
  * using UV information and an anchor point to control how the sprite
12
12
  * is positioned and textured.
13
13
  *
14
- * Derived classes can override {@link internalSetupUniforms},
15
- * {@link internalApplyUniforms} and
16
- * {@link calcFragmentColor} to provide custom
14
+ * Derived classes can override `internalSetupUniforms()`,
15
+ * `internalApplyUniforms()`, and
16
+ * `calcFragmentColor()` to provide custom
17
17
  * uniforms and shading logic (e.g. sampling a texture).
18
18
  *
19
19
  * @public
@@ -210,9 +210,9 @@ import { Vector4 } from '@zephyr3d/base';
210
210
  * @remarks
211
211
  * This method:
212
212
  * - Calls the base implementation.
213
- * - Invokes {@link SpriteMaterial.internalSetupUniforms} for
213
+ * - Invokes `internalSetupUniforms()` for
214
214
  * fragment-stage specific uniform declarations.
215
- * - Computes fragment color by calling {@link SpriteMaterial.calcFragmentColor}
215
+ * - Computes fragment color by calling `calcFragmentColor()`
216
216
  * if fragment color is needed.
217
217
  * - Outputs the final fragment color via {@link MeshMaterial.outputFragmentColor}.
218
218
  *
@@ -238,7 +238,7 @@ import { Vector4 } from '@zephyr3d/base';
238
238
  * for non-instanced rendering. For instanced rendering, these values
239
239
  * are expected to be provided as per-instance uniforms instead.
240
240
  *
241
- * It also calls {@link SpriteMaterial.internalApplyUniforms} to allow
241
+ * It also calls `internalApplyUniforms()` to allow
242
242
  * derived classes to bind additional resources (e.g. textures).
243
243
  *
244
244
  * @param bindGroup - The bind group to which uniforms and resources are bound.
@@ -1 +1 @@
1
- {"version":3,"file":"sprite.js","sources":["../../src/material/sprite.ts"],"sourcesContent":["import { MeshMaterial } from './meshmaterial';\r\nimport type { BindGroup, PBFunctionScope, PBInsideFunctionScope } from '@zephyr3d/device';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport { MaterialVaryingFlags } from '../values';\r\nimport type { Clonable, Immutable, Vector2 } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport type { DrawContext } from '../render';\r\n\r\n/**\r\n * Sprite material base class.\r\n *\r\n * @remarks\r\n * This material renders a camera-facing quad (billboard) in 3D space,\r\n * using UV information and an anchor point to control how the sprite\r\n * is positioned and textured.\r\n *\r\n * Derived classes can override {@link internalSetupUniforms},\r\n * {@link internalApplyUniforms} and\r\n * {@link calcFragmentColor} to provide custom\r\n * uniforms and shading logic (e.g. sampling a texture).\r\n *\r\n * @public\r\n */\r\nexport class SpriteMaterial extends MeshMaterial implements Clonable<SpriteMaterial> {\r\n static UVINFO = this.defineInstanceUniform('uvinfo', 'vec4');\r\n static ANCHOR_ROTATION = this.defineInstanceUniform('anchorRotation', 'vec4');\r\n private _uvinfo: Vector4;\r\n private _anchorRotation: Vector4;\r\n /**\r\n * Creates a new {@link SpriteMaterial} instance.\r\n *\r\n * @remarks\r\n * - Default UV rectangle is the full texture [0, 0, 1, 1].\r\n * - Default anchor is the center [0.5, 0.5].\r\n * - Face culling is disabled (`cullMode = 'none'`) so the sprite\r\n * is visible from both sides.\r\n */\r\n constructor() {\r\n super();\r\n this._uvinfo = new Vector4(0, 0, 1, 1);\r\n this._anchorRotation = new Vector4(0.5, 0.5, 0, 0);\r\n this.cullMode = 'none';\r\n }\r\n /**\r\n * Gets the UV rectangle of the sprite in the texture.\r\n *\r\n * @returns A Vector4 storing \\([u0, v0, u1, v1]\\).\r\n */\r\n get uvinfo(): Immutable<Vector4> {\r\n return this._uvinfo;\r\n }\r\n set uvinfo(value: Immutable<Vector4>) {\r\n if (!value.equalsTo(this.uvinfo)) {\r\n this._uvinfo.set(value);\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * Convenience method to set the UV rectangle via individual components.\r\n *\r\n * @param uvx0 - Left (U) coordinate.\r\n * @param uvy0 - Bottom (V) coordinate.\r\n * @param uvx1 - Right (U) coordinate.\r\n * @param uvy1 - Top (V) coordinate.\r\n */\r\n setUVInfo(uvx0: number, uvy0: number, uvx1: number, uvy1: number) {\r\n this.uvinfo = new Vector4(uvx0, uvy0, uvx1, uvy1);\r\n }\r\n /**\r\n * Gets the sprite anchor-rotation.\r\n *\r\n * @returns The current anchor-rotation.\r\n */\r\n get anchorRotation(): Immutable<Vector4> {\r\n return this._anchorRotation;\r\n }\r\n set anchorRotation(value: Immutable<Vector4>) {\r\n if (!value.equalsTo(this._anchorRotation)) {\r\n this._anchorRotation.set(value);\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * Gets the sprite anchor point in normalized quad space.\r\n *\r\n * @returns The current anchor as a Vector2.\r\n */\r\n get anchor(): Immutable<Vector2> {\r\n return this._anchorRotation.xy();\r\n }\r\n set anchor(value: Immutable<Vector2>) {\r\n if (value.x !== this._anchorRotation.x || value.y !== this._anchorRotation.y) {\r\n this.anchorRotation = new Vector4(value.x, value.y, this._anchorRotation.z, this._anchorRotation.w);\r\n }\r\n }\r\n /**\r\n * Gets the sprite rotation around the Z axis.\r\n *\r\n * @returns The sprite rotation.\r\n */\r\n get rotation() {\r\n return this._anchorRotation.z;\r\n }\r\n set rotation(value) {\r\n if (value !== this._anchorRotation.z) {\r\n this.anchorRotation = new Vector4(\r\n this._anchorRotation.x,\r\n this._anchorRotation.y,\r\n value,\r\n this._anchorRotation.w\r\n );\r\n }\r\n }\r\n /**\r\n * Gets the X component of the sprite anchor.\r\n */\r\n get anchorX() {\r\n return this._anchorRotation.x;\r\n }\r\n set anchorX(value) {\r\n if (this._anchorRotation.x !== value) {\r\n this.anchorRotation = new Vector4(\r\n value,\r\n this._anchorRotation.y,\r\n this._anchorRotation.z,\r\n this._anchorRotation.w\r\n );\r\n }\r\n }\r\n /**\r\n * Gets the Y component of the sprite anchor.\r\n */\r\n get anchorY() {\r\n return this._anchorRotation.y;\r\n }\r\n set anchorY(value) {\r\n if (this._anchorRotation.y !== value) {\r\n this.anchorRotation = new Vector4(\r\n this._anchorRotation.x,\r\n value,\r\n this._anchorRotation.z,\r\n this._anchorRotation.w\r\n );\r\n }\r\n }\r\n /**\r\n * Convenience method to set both anchor components at once.\r\n *\r\n * @param anchorX - X coordinate of the anchor.\r\n * @param anchorY - Y coordinate of the anchor.\r\n */\r\n setAnchor(anchorX: number, anchorY: number) {\r\n if (this._anchorRotation.x !== anchorX || this._anchorRotation.y !== anchorY) {\r\n this.anchorRotation = new Vector4(anchorX, anchorY, this._anchorRotation.z, this._anchorRotation.w);\r\n }\r\n }\r\n /**\r\n * Creates a deep copy of this material.\r\n *\r\n * @returns A new {@link SpriteMaterial} instance with the same properties.\r\n */\r\n clone() {\r\n const other = new SpriteMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n /**\r\n * Copies all relevant state from another {@link SpriteMaterial}.\r\n *\r\n * @param other - The source material to copy from.\r\n */\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.uvinfo = other.uvinfo;\r\n this.anchorRotation = other.anchorRotation;\r\n }\r\n /**\r\n * Builds the vertex shader for this material.\r\n *\r\n * @remarks\r\n * This method:\r\n * - Calls the base implementation.\r\n * - Computes per-vertex positions for a camera-facing quad (billboard)\r\n * based on the sprite's world transform, size, and anchor.\r\n * - Selects the correct UV coordinates for each quad corner using\r\n * the `vertexId` attribute.\r\n * - Outputs world-space position (`zWorldPos`) and UVs (`zVertexUV`)\r\n * for use in the fragment shader.\r\n *\r\n * @param scope - The current programmable builder function scope.\r\n */\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n scope.$inputs.vertexId = pb.float().attrib('position');\r\n if (this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING) {\r\n scope.$l.uvinfo = this.getInstancedUniform(scope, SpriteMaterial.UVINFO);\r\n scope.$l.anchorRotation = this.getInstancedUniform(scope, SpriteMaterial.ANCHOR_ROTATION);\r\n } else {\r\n scope.uvinfo = pb.vec4().uniform(2);\r\n scope.anchorRotation = pb.vec4().uniform(2);\r\n }\r\n this.internalSetupUniforms(scope);\r\n scope.$l.worldPos = ShaderHelper.getWorldMatrix(scope)[3].xyz;\r\n scope.$l.width = pb.sqrt(\r\n pb.dot(ShaderHelper.getWorldMatrix(scope)[0].xyz, ShaderHelper.getWorldMatrix(scope)[0].xyz)\r\n );\r\n scope.$l.height = pb.sqrt(\r\n pb.dot(ShaderHelper.getWorldMatrix(scope)[1].xyz, ShaderHelper.getWorldMatrix(scope)[1].xyz)\r\n );\r\n const viewMatrix = ShaderHelper.getViewMatrix(scope);\r\n scope.$l.forward = pb.vec3(viewMatrix[0].z, viewMatrix[1].z, viewMatrix[2].z);\r\n scope.$l.axis = scope.$choice(\r\n pb.lessThan(pb.abs(scope.forward.y), 0.999),\r\n pb.vec3(0, 1, 0),\r\n pb.vec3(1, 0, 0)\r\n );\r\n scope.$l.right = pb.normalize(pb.cross(scope.axis, scope.forward));\r\n scope.$l.up = pb.normalize(pb.cross(scope.forward, scope.right));\r\n scope.$l.rotateAngle = scope.anchorRotation.z;\r\n scope.$l.c = pb.cos(scope.rotateAngle);\r\n scope.$l.s = pb.sin(scope.rotateAngle);\r\n scope.$l.rightRot = pb.add(pb.mul(scope.up, scope.s), pb.mul(scope.right, scope.c));\r\n scope.$l.upRot = pb.sub(pb.mul(scope.up, scope.c), pb.mul(scope.right, scope.s));\r\n scope.$l.v = pb.vec2();\r\n scope.$l.uv = pb.vec2();\r\n scope.$l.anchor = scope.anchorRotation.xy;\r\n scope\r\n .$if(pb.equal(scope.$inputs.vertexId, 0), function () {\r\n scope.v = pb.neg(scope.anchor);\r\n scope.uv = pb.vec2(scope.uvinfo.x, pb.sub(1, scope.uvinfo.y));\r\n })\r\n .$elseif(pb.equal(scope.$inputs.vertexId, 1), function () {\r\n scope.v = pb.sub(pb.vec2(1, 0), scope.anchor);\r\n scope.uv = pb.vec2(scope.uvinfo.z, pb.sub(1, scope.uvinfo.y));\r\n })\r\n .$elseif(pb.equal(scope.$inputs.vertexId, 2), function () {\r\n scope.v = pb.sub(pb.vec2(0, 1), scope.anchor);\r\n scope.uv = pb.vec2(scope.uvinfo.x, pb.sub(1, scope.uvinfo.w));\r\n })\r\n .$else(function () {\r\n scope.v = pb.sub(pb.vec2(1), scope.anchor);\r\n scope.uv = pb.vec2(scope.uvinfo.z, pb.sub(1, scope.uvinfo.w));\r\n });\r\n scope.v = pb.mul(scope.v, pb.vec2(scope.width, scope.height));\r\n scope.$outputs.zWorldPos = pb.add(\r\n scope.worldPos,\r\n pb.mul(scope.rightRot, scope.v.x),\r\n pb.mul(scope.upRot, scope.v.y)\r\n );\r\n scope.$outputs.zVertexUV = scope.uv;\r\n ShaderHelper.setClipSpacePosition(\r\n scope,\r\n pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.zWorldPos, 1))\r\n );\r\n }\r\n /**\r\n * Builds the fragment shader for this material.\r\n *\r\n * @remarks\r\n * This method:\r\n * - Calls the base implementation.\r\n * - Invokes {@link SpriteMaterial.internalSetupUniforms} for\r\n * fragment-stage specific uniform declarations.\r\n * - Computes fragment color by calling {@link SpriteMaterial.calcFragmentColor}\r\n * if fragment color is needed.\r\n * - Outputs the final fragment color via {@link MeshMaterial.outputFragmentColor}.\r\n *\r\n * @param scope - The current programmable builder function scope.\r\n */\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n this.internalSetupUniforms(scope);\r\n if (this.needFragmentColor()) {\r\n scope.$l.color = this.calcFragmentColor(scope);\r\n this.outputFragmentColor(scope, scope.$inputs.zWorldPos, scope.color);\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.zWorldPos, null);\r\n }\r\n }\r\n /**\r\n * Applies runtime uniform values to the given bind group before drawing.\r\n *\r\n * @remarks\r\n * This binds:\r\n * - UV information (`uvinfo`)\r\n * - Anchor (`anchor`)\r\n *\r\n * for non-instanced rendering. For instanced rendering, these values\r\n * are expected to be provided as per-instance uniforms instead.\r\n *\r\n * It also calls {@link SpriteMaterial.internalApplyUniforms} to allow\r\n * derived classes to bind additional resources (e.g. textures).\r\n *\r\n * @param bindGroup - The bind group to which uniforms and resources are bound.\r\n * @param ctx - The current draw context providing rendering state.\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 (!(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n bindGroup.setValue('uvinfo', this._uvinfo);\r\n bindGroup.setValue('anchorRotation', this._anchorRotation);\r\n }\r\n this.internalApplyUniforms(bindGroup, ctx, pass);\r\n }\r\n /**\r\n * Hook for derived classes to declare additional uniforms.\r\n *\r\n * @remarks\r\n * This is invoked in both the vertex and fragment shader construction\r\n * phases, allowing subclasses to register extra uniforms or resources\r\n * needed by their custom shading logic.\r\n *\r\n * The base implementation does nothing.\r\n *\r\n * @param _scope - The current shader function scope.\r\n */\r\n protected internalSetupUniforms(_scope: PBInsideFunctionScope) {}\r\n /**\r\n * Hook for derived classes to bind additional uniform values or resources.\r\n *\r\n * @remarks\r\n * This is called from {@link SpriteMaterial.applyUniformValues} and is\r\n * intended for subclasses to bind their own textures, samplers, or\r\n * other GPU resources.\r\n *\r\n * The base implementation does nothing.\r\n *\r\n * @param _bindGroup - The bind group used for binding uniforms and resources.\r\n * @param _ctx - The current draw context.\r\n * @param _pass - Index of the active render pass.\r\n */\r\n protected internalApplyUniforms(_bindGroup: BindGroup, _ctx: DrawContext, _pass: number) {}\r\n /**\r\n * Computes the fragment color expression for this material.\r\n *\r\n * @remarks\r\n * The default implementation simply outputs the interpolated UV\r\n * coordinates as color \\([u, v, 0, 1]\\), which is mainly useful\r\n * for debugging.\r\n *\r\n * Derived classes are expected to override this method to implement\r\n * actual shading, such as sampling a texture.\r\n *\r\n * @param scope - The current shader function scope.\r\n * @returns A shader expression representing the fragment color.\r\n\r\n */\r\n protected calcFragmentColor(scope: PBInsideFunctionScope) {\r\n return scope.$builder.vec4(scope.$inputs.zVertexUV, 0, 1);\r\n }\r\n}\r\n"],"names":["SpriteMaterial","MeshMaterial","UVINFO","defineInstanceUniform","ANCHOR_ROTATION","_uvinfo","_anchorRotation","Vector4","cullMode","uvinfo","value","equalsTo","set","uniformChanged","setUVInfo","uvx0","uvy0","uvx1","uvy1","anchorRotation","anchor","xy","x","y","z","w","rotation","anchorX","anchorY","setAnchor","clone","other","copyFrom","vertexShader","scope","pb","$builder","$inputs","vertexId","float","attrib","drawContext","materialFlags","MaterialVaryingFlags","INSTANCING","$l","getInstancedUniform","vec4","uniform","internalSetupUniforms","worldPos","ShaderHelper","getWorldMatrix","xyz","width","sqrt","dot","height","viewMatrix","getViewMatrix","forward","vec3","axis","$choice","lessThan","abs","right","normalize","cross","up","rotateAngle","c","cos","s","sin","rightRot","add","mul","upRot","sub","v","vec2","uv","$if","equal","neg","$elseif","$else","$outputs","zWorldPos","zVertexUV","setClipSpacePosition","getViewProjectionMatrix","fragmentShader","needFragmentColor","color","calcFragmentColor","outputFragmentColor","applyUniformValues","bindGroup","ctx","pass","setValue","internalApplyUniforms","_scope","_bindGroup","_ctx","_pass"],"mappings":"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"}
1
+ {"version":3,"file":"sprite.js","sources":["../../src/material/sprite.ts"],"sourcesContent":["import { MeshMaterial } from './meshmaterial';\r\nimport type { BindGroup, PBFunctionScope, PBInsideFunctionScope } from '@zephyr3d/device';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport { MaterialVaryingFlags } from '../values';\r\nimport type { Clonable, Immutable, Vector2 } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport type { DrawContext } from '../render';\r\n\r\n/**\r\n * Sprite material base class.\r\n *\r\n * @remarks\r\n * This material renders a camera-facing quad (billboard) in 3D space,\r\n * using UV information and an anchor point to control how the sprite\r\n * is positioned and textured.\r\n *\r\n * Derived classes can override `internalSetupUniforms()`,\r\n * `internalApplyUniforms()`, and\r\n * `calcFragmentColor()` to provide custom\r\n * uniforms and shading logic (e.g. sampling a texture).\r\n *\r\n * @public\r\n */\r\nexport class SpriteMaterial extends MeshMaterial implements Clonable<SpriteMaterial> {\r\n static UVINFO = this.defineInstanceUniform('uvinfo', 'vec4');\r\n static ANCHOR_ROTATION = this.defineInstanceUniform('anchorRotation', 'vec4');\r\n private _uvinfo: Vector4;\r\n private _anchorRotation: Vector4;\r\n /**\r\n * Creates a new {@link SpriteMaterial} instance.\r\n *\r\n * @remarks\r\n * - Default UV rectangle is the full texture [0, 0, 1, 1].\r\n * - Default anchor is the center [0.5, 0.5].\r\n * - Face culling is disabled (`cullMode = 'none'`) so the sprite\r\n * is visible from both sides.\r\n */\r\n constructor() {\r\n super();\r\n this._uvinfo = new Vector4(0, 0, 1, 1);\r\n this._anchorRotation = new Vector4(0.5, 0.5, 0, 0);\r\n this.cullMode = 'none';\r\n }\r\n /**\r\n * Gets the UV rectangle of the sprite in the texture.\r\n *\r\n * @returns A Vector4 storing \\([u0, v0, u1, v1]\\).\r\n */\r\n get uvinfo(): Immutable<Vector4> {\r\n return this._uvinfo;\r\n }\r\n set uvinfo(value: Immutable<Vector4>) {\r\n if (!value.equalsTo(this.uvinfo)) {\r\n this._uvinfo.set(value);\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * Convenience method to set the UV rectangle via individual components.\r\n *\r\n * @param uvx0 - Left (U) coordinate.\r\n * @param uvy0 - Bottom (V) coordinate.\r\n * @param uvx1 - Right (U) coordinate.\r\n * @param uvy1 - Top (V) coordinate.\r\n */\r\n setUVInfo(uvx0: number, uvy0: number, uvx1: number, uvy1: number) {\r\n this.uvinfo = new Vector4(uvx0, uvy0, uvx1, uvy1);\r\n }\r\n /**\r\n * Gets the sprite anchor-rotation.\r\n *\r\n * @returns The current anchor-rotation.\r\n */\r\n get anchorRotation(): Immutable<Vector4> {\r\n return this._anchorRotation;\r\n }\r\n set anchorRotation(value: Immutable<Vector4>) {\r\n if (!value.equalsTo(this._anchorRotation)) {\r\n this._anchorRotation.set(value);\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * Gets the sprite anchor point in normalized quad space.\r\n *\r\n * @returns The current anchor as a Vector2.\r\n */\r\n get anchor(): Immutable<Vector2> {\r\n return this._anchorRotation.xy();\r\n }\r\n set anchor(value: Immutable<Vector2>) {\r\n if (value.x !== this._anchorRotation.x || value.y !== this._anchorRotation.y) {\r\n this.anchorRotation = new Vector4(value.x, value.y, this._anchorRotation.z, this._anchorRotation.w);\r\n }\r\n }\r\n /**\r\n * Gets the sprite rotation around the Z axis.\r\n *\r\n * @returns The sprite rotation.\r\n */\r\n get rotation() {\r\n return this._anchorRotation.z;\r\n }\r\n set rotation(value) {\r\n if (value !== this._anchorRotation.z) {\r\n this.anchorRotation = new Vector4(\r\n this._anchorRotation.x,\r\n this._anchorRotation.y,\r\n value,\r\n this._anchorRotation.w\r\n );\r\n }\r\n }\r\n /**\r\n * Gets the X component of the sprite anchor.\r\n */\r\n get anchorX() {\r\n return this._anchorRotation.x;\r\n }\r\n set anchorX(value) {\r\n if (this._anchorRotation.x !== value) {\r\n this.anchorRotation = new Vector4(\r\n value,\r\n this._anchorRotation.y,\r\n this._anchorRotation.z,\r\n this._anchorRotation.w\r\n );\r\n }\r\n }\r\n /**\r\n * Gets the Y component of the sprite anchor.\r\n */\r\n get anchorY() {\r\n return this._anchorRotation.y;\r\n }\r\n set anchorY(value) {\r\n if (this._anchorRotation.y !== value) {\r\n this.anchorRotation = new Vector4(\r\n this._anchorRotation.x,\r\n value,\r\n this._anchorRotation.z,\r\n this._anchorRotation.w\r\n );\r\n }\r\n }\r\n /**\r\n * Convenience method to set both anchor components at once.\r\n *\r\n * @param anchorX - X coordinate of the anchor.\r\n * @param anchorY - Y coordinate of the anchor.\r\n */\r\n setAnchor(anchorX: number, anchorY: number) {\r\n if (this._anchorRotation.x !== anchorX || this._anchorRotation.y !== anchorY) {\r\n this.anchorRotation = new Vector4(anchorX, anchorY, this._anchorRotation.z, this._anchorRotation.w);\r\n }\r\n }\r\n /**\r\n * Creates a deep copy of this material.\r\n *\r\n * @returns A new {@link SpriteMaterial} instance with the same properties.\r\n */\r\n clone() {\r\n const other = new SpriteMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n /**\r\n * Copies all relevant state from another {@link SpriteMaterial}.\r\n *\r\n * @param other - The source material to copy from.\r\n */\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.uvinfo = other.uvinfo;\r\n this.anchorRotation = other.anchorRotation;\r\n }\r\n /**\r\n * Builds the vertex shader for this material.\r\n *\r\n * @remarks\r\n * This method:\r\n * - Calls the base implementation.\r\n * - Computes per-vertex positions for a camera-facing quad (billboard)\r\n * based on the sprite's world transform, size, and anchor.\r\n * - Selects the correct UV coordinates for each quad corner using\r\n * the `vertexId` attribute.\r\n * - Outputs world-space position (`zWorldPos`) and UVs (`zVertexUV`)\r\n * for use in the fragment shader.\r\n *\r\n * @param scope - The current programmable builder function scope.\r\n */\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n scope.$inputs.vertexId = pb.float().attrib('position');\r\n if (this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING) {\r\n scope.$l.uvinfo = this.getInstancedUniform(scope, SpriteMaterial.UVINFO);\r\n scope.$l.anchorRotation = this.getInstancedUniform(scope, SpriteMaterial.ANCHOR_ROTATION);\r\n } else {\r\n scope.uvinfo = pb.vec4().uniform(2);\r\n scope.anchorRotation = pb.vec4().uniform(2);\r\n }\r\n this.internalSetupUniforms(scope);\r\n scope.$l.worldPos = ShaderHelper.getWorldMatrix(scope)[3].xyz;\r\n scope.$l.width = pb.sqrt(\r\n pb.dot(ShaderHelper.getWorldMatrix(scope)[0].xyz, ShaderHelper.getWorldMatrix(scope)[0].xyz)\r\n );\r\n scope.$l.height = pb.sqrt(\r\n pb.dot(ShaderHelper.getWorldMatrix(scope)[1].xyz, ShaderHelper.getWorldMatrix(scope)[1].xyz)\r\n );\r\n const viewMatrix = ShaderHelper.getViewMatrix(scope);\r\n scope.$l.forward = pb.vec3(viewMatrix[0].z, viewMatrix[1].z, viewMatrix[2].z);\r\n scope.$l.axis = scope.$choice(\r\n pb.lessThan(pb.abs(scope.forward.y), 0.999),\r\n pb.vec3(0, 1, 0),\r\n pb.vec3(1, 0, 0)\r\n );\r\n scope.$l.right = pb.normalize(pb.cross(scope.axis, scope.forward));\r\n scope.$l.up = pb.normalize(pb.cross(scope.forward, scope.right));\r\n scope.$l.rotateAngle = scope.anchorRotation.z;\r\n scope.$l.c = pb.cos(scope.rotateAngle);\r\n scope.$l.s = pb.sin(scope.rotateAngle);\r\n scope.$l.rightRot = pb.add(pb.mul(scope.up, scope.s), pb.mul(scope.right, scope.c));\r\n scope.$l.upRot = pb.sub(pb.mul(scope.up, scope.c), pb.mul(scope.right, scope.s));\r\n scope.$l.v = pb.vec2();\r\n scope.$l.uv = pb.vec2();\r\n scope.$l.anchor = scope.anchorRotation.xy;\r\n scope\r\n .$if(pb.equal(scope.$inputs.vertexId, 0), function () {\r\n scope.v = pb.neg(scope.anchor);\r\n scope.uv = pb.vec2(scope.uvinfo.x, pb.sub(1, scope.uvinfo.y));\r\n })\r\n .$elseif(pb.equal(scope.$inputs.vertexId, 1), function () {\r\n scope.v = pb.sub(pb.vec2(1, 0), scope.anchor);\r\n scope.uv = pb.vec2(scope.uvinfo.z, pb.sub(1, scope.uvinfo.y));\r\n })\r\n .$elseif(pb.equal(scope.$inputs.vertexId, 2), function () {\r\n scope.v = pb.sub(pb.vec2(0, 1), scope.anchor);\r\n scope.uv = pb.vec2(scope.uvinfo.x, pb.sub(1, scope.uvinfo.w));\r\n })\r\n .$else(function () {\r\n scope.v = pb.sub(pb.vec2(1), scope.anchor);\r\n scope.uv = pb.vec2(scope.uvinfo.z, pb.sub(1, scope.uvinfo.w));\r\n });\r\n scope.v = pb.mul(scope.v, pb.vec2(scope.width, scope.height));\r\n scope.$outputs.zWorldPos = pb.add(\r\n scope.worldPos,\r\n pb.mul(scope.rightRot, scope.v.x),\r\n pb.mul(scope.upRot, scope.v.y)\r\n );\r\n scope.$outputs.zVertexUV = scope.uv;\r\n ShaderHelper.setClipSpacePosition(\r\n scope,\r\n pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.zWorldPos, 1))\r\n );\r\n }\r\n /**\r\n * Builds the fragment shader for this material.\r\n *\r\n * @remarks\r\n * This method:\r\n * - Calls the base implementation.\r\n * - Invokes `internalSetupUniforms()` for\r\n * fragment-stage specific uniform declarations.\r\n * - Computes fragment color by calling `calcFragmentColor()`\r\n * if fragment color is needed.\r\n * - Outputs the final fragment color via {@link MeshMaterial.outputFragmentColor}.\r\n *\r\n * @param scope - The current programmable builder function scope.\r\n */\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n this.internalSetupUniforms(scope);\r\n if (this.needFragmentColor()) {\r\n scope.$l.color = this.calcFragmentColor(scope);\r\n this.outputFragmentColor(scope, scope.$inputs.zWorldPos, scope.color);\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.zWorldPos, null);\r\n }\r\n }\r\n /**\r\n * Applies runtime uniform values to the given bind group before drawing.\r\n *\r\n * @remarks\r\n * This binds:\r\n * - UV information (`uvinfo`)\r\n * - Anchor (`anchor`)\r\n *\r\n * for non-instanced rendering. For instanced rendering, these values\r\n * are expected to be provided as per-instance uniforms instead.\r\n *\r\n * It also calls `internalApplyUniforms()` to allow\r\n * derived classes to bind additional resources (e.g. textures).\r\n *\r\n * @param bindGroup - The bind group to which uniforms and resources are bound.\r\n * @param ctx - The current draw context providing rendering state.\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 (!(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n bindGroup.setValue('uvinfo', this._uvinfo);\r\n bindGroup.setValue('anchorRotation', this._anchorRotation);\r\n }\r\n this.internalApplyUniforms(bindGroup, ctx, pass);\r\n }\r\n /**\r\n * Hook for derived classes to declare additional uniforms.\r\n *\r\n * @remarks\r\n * This is invoked in both the vertex and fragment shader construction\r\n * phases, allowing subclasses to register extra uniforms or resources\r\n * needed by their custom shading logic.\r\n *\r\n * The base implementation does nothing.\r\n *\r\n * @param _scope - The current shader function scope.\r\n */\r\n protected internalSetupUniforms(_scope: PBInsideFunctionScope) {}\r\n /**\r\n * Hook for derived classes to bind additional uniform values or resources.\r\n *\r\n * @remarks\r\n * This is called from {@link SpriteMaterial.applyUniformValues} and is\r\n * intended for subclasses to bind their own textures, samplers, or\r\n * other GPU resources.\r\n *\r\n * The base implementation does nothing.\r\n *\r\n * @param _bindGroup - The bind group used for binding uniforms and resources.\r\n * @param _ctx - The current draw context.\r\n * @param _pass - Index of the active render pass.\r\n */\r\n protected internalApplyUniforms(_bindGroup: BindGroup, _ctx: DrawContext, _pass: number) {}\r\n /**\r\n * Computes the fragment color expression for this material.\r\n *\r\n * @remarks\r\n * The default implementation simply outputs the interpolated UV\r\n * coordinates as color \\([u, v, 0, 1]\\), which is mainly useful\r\n * for debugging.\r\n *\r\n * Derived classes are expected to override this method to implement\r\n * actual shading, such as sampling a texture.\r\n *\r\n * @param scope - The current shader function scope.\r\n * @returns A shader expression representing the fragment color.\r\n\r\n */\r\n protected calcFragmentColor(scope: PBInsideFunctionScope) {\r\n return scope.$builder.vec4(scope.$inputs.zVertexUV, 0, 1);\r\n }\r\n}\r\n"],"names":["SpriteMaterial","MeshMaterial","UVINFO","defineInstanceUniform","ANCHOR_ROTATION","_uvinfo","_anchorRotation","Vector4","cullMode","uvinfo","value","equalsTo","set","uniformChanged","setUVInfo","uvx0","uvy0","uvx1","uvy1","anchorRotation","anchor","xy","x","y","z","w","rotation","anchorX","anchorY","setAnchor","clone","other","copyFrom","vertexShader","scope","pb","$builder","$inputs","vertexId","float","attrib","drawContext","materialFlags","MaterialVaryingFlags","INSTANCING","$l","getInstancedUniform","vec4","uniform","internalSetupUniforms","worldPos","ShaderHelper","getWorldMatrix","xyz","width","sqrt","dot","height","viewMatrix","getViewMatrix","forward","vec3","axis","$choice","lessThan","abs","right","normalize","cross","up","rotateAngle","c","cos","s","sin","rightRot","add","mul","upRot","sub","v","vec2","uv","$if","equal","neg","$elseif","$else","$outputs","zWorldPos","zVertexUV","setClipSpacePosition","getViewProjectionMatrix","fragmentShader","needFragmentColor","color","calcFragmentColor","outputFragmentColor","applyUniformValues","bindGroup","ctx","pass","setValue","internalApplyUniforms","_scope","_bindGroup","_ctx","_pass"],"mappings":"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"}
@@ -63,7 +63,7 @@ const MAX_DETAIL_MAPS = 8;
63
63
  /** @internal */ get region() {
64
64
  return this._region;
65
65
  }
66
- set region(val) {
66
+ /** @internal */ set region(val) {
67
67
  if (!val.equalsTo(this._region)) {
68
68
  this._region.set(val);
69
69
  this.uniformChanged();
@@ -78,7 +78,7 @@ const MAX_DETAIL_MAPS = 8;
78
78
  /** @internal */ get terrainScale() {
79
79
  return this._terrainScale;
80
80
  }
81
- set terrainScale(val) {
81
+ /** @internal */ set terrainScale(val) {
82
82
  if (!this._terrainScale.equalsTo(val)) {
83
83
  this._terrainScale.set(val);
84
84
  this.uniformChanged();
@@ -1 +1 @@
1
- {"version":3,"file":"terrain-cm.js","sources":["../../src/material/terrain-cm.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n GPUDataBuffer,\r\n PBFunctionScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n Texture2D,\r\n Texture2DArray\r\n} from '@zephyr3d/device';\r\nimport { applyMaterialMixins, MeshMaterial } from './meshmaterial';\r\nimport type { DrawContext } from '../render';\r\nimport { MaterialVaryingFlags, MAX_TERRAIN_MIPMAP_LEVELS } from '../values';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { DRef, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport { mixinLight } from './mixins/lit';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { mixinPBRMetallicRoughness } from './mixins/lightmodel/pbrmetallicroughness';\r\nimport { CopyBlitter } from '../blitter';\r\nimport { getDevice } from '../app/api';\r\n\r\ntype ClipmapTerrainDetailMapInfo = {\r\n detailMap: DRef<Texture2DArray>;\r\n detailNormalMap?: DRef<Texture2DArray>;\r\n detailMapList: DRef<Texture2D>[];\r\n detailNormalMapList: DRef<Texture2D>[];\r\n splatMap: DRef<Texture2DArray | Texture2D>;\r\n detailMapParams: Float32Array<ArrayBuffer>;\r\n numDetailMaps: number;\r\n};\r\n\r\nconst MAX_DETAIL_MAPS = 8;\r\n\r\n/**\r\n * Terrain debug rendering mode\r\n * @public\r\n */\r\nexport type TerrainDebugMode =\r\n | 'none'\r\n | 'vertex_normal'\r\n | 'detail_normal'\r\n | 'tangent'\r\n | 'uv'\r\n | 'bitangent'\r\n | 'albedo';\r\n\r\n/**\r\n * Default material type of clipmap terrain\r\n * @public\r\n */\r\nexport class ClipmapTerrainMaterial extends applyMaterialMixins(\r\n MeshMaterial,\r\n mixinLight,\r\n mixinPBRMetallicRoughness\r\n) {\r\n private static readonly FEATURE_DETAIL_MAP = this.defineFeature();\r\n private static readonly FEATURE_DEBUG_MODE = this.defineFeature();\r\n private static readonly _defaultDetailMap: DRef<Texture2D> = new DRef();\r\n private static readonly _defaultNormalMap: DRef<Texture2D> = new DRef();\r\n private readonly _region: Vector4;\r\n private readonly _clipmapGridInfo: Vector4;\r\n private readonly _heightMap: DRef<Texture2D>;\r\n private readonly _terrainScale: Vector3;\r\n private _detailMapInfo: ClipmapTerrainDetailMapInfo;\r\n private readonly _detailMapSize: number;\r\n private readonly _splatMapSize: number;\r\n private readonly _heightMapSize: Vector4;\r\n private readonly _levelDataBuffer: DRef<GPUDataBuffer>;\r\n constructor(heightMap: Texture2D) {\r\n super();\r\n this.metallic = 0;\r\n this.roughness = 1;\r\n this.albedoTexCoordIndex = -1;\r\n this.normalTexCoordIndex = -1;\r\n this._region = new Vector4(-99999, -99999, 99999, 99999);\r\n this._clipmapGridInfo = new Vector4();\r\n this._heightMap = new DRef(heightMap);\r\n this._detailMapSize = 256;\r\n this._splatMapSize = 512;\r\n this._levelDataBuffer = new DRef(\r\n getDevice().createBuffer(MAX_TERRAIN_MIPMAP_LEVELS * 4 * 2 * 4, { usage: 'uniform' })\r\n );\r\n this._detailMapInfo = this.createDetailMapInfo();\r\n this._terrainScale = Vector3.one();\r\n this._heightMapSize = new Vector4(\r\n this.heightMap.width,\r\n this.heightMap.height,\r\n 1 / this.heightMap.width,\r\n 1 / this.heightMap.height\r\n );\r\n this.useFeature(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP, 0);\r\n this.useFeature(ClipmapTerrainMaterial.FEATURE_DEBUG_MODE, 'none');\r\n }\r\n static get MAX_DETAIL_MAP_COUNT() {\r\n return MAX_DETAIL_MAPS;\r\n }\r\n get debugMode() {\r\n return this.featureUsed<TerrainDebugMode>(ClipmapTerrainMaterial.FEATURE_DEBUG_MODE);\r\n }\r\n set debugMode(mode) {\r\n this.useFeature(ClipmapTerrainMaterial.FEATURE_DEBUG_MODE, mode);\r\n }\r\n /** @internal */\r\n setLevelData(data: Float32Array<ArrayBuffer>, length: number) {\r\n this._levelDataBuffer.get()!.bufferSubData(0, data, 0, length);\r\n }\r\n /** @internal */\r\n get region() {\r\n return this._region;\r\n }\r\n set region(val: Vector4) {\r\n if (!val.equalsTo(this._region)) {\r\n this._region.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n setClipmapGridInfo(gridScale: number, gridOffsetX: number, gridOffsetY: number) {\r\n if (\r\n this._clipmapGridInfo.x !== gridScale ||\r\n this._clipmapGridInfo.y !== gridOffsetX ||\r\n this._clipmapGridInfo.z !== gridOffsetY\r\n ) {\r\n this._clipmapGridInfo.setXYZW(gridScale, gridOffsetX, gridOffsetY, 0);\r\n this.uniformChanged();\r\n }\r\n }\r\n /** @internal */\r\n get terrainScale() {\r\n return this._terrainScale;\r\n }\r\n set terrainScale(val: Vector3) {\r\n if (!this._terrainScale.equalsTo(val)) {\r\n this._terrainScale.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n get numDetailMaps() {\r\n return this._detailMapInfo.numDetailMaps;\r\n }\r\n set numDetailMaps(val: number) {\r\n if (val > MAX_DETAIL_MAPS || val < 0 || !Number.isInteger(val)) {\r\n console.error('Invalid number of detail maps');\r\n return;\r\n }\r\n if (getDevice().type === 'webgl' && val > 4) {\r\n console.error('Only 4 detail map layers is supported for WebGL1');\r\n return;\r\n }\r\n const n = this._detailMapInfo.numDetailMaps;\r\n const defaultDetailMap = ClipmapTerrainMaterial.getDefaultDetailMap();\r\n const defaultNormalMap = ClipmapTerrainMaterial.getDefaultNormalMap();\r\n if (val > n) {\r\n this._detailMapInfo.numDetailMaps = val;\r\n for (let i = n; i < val; i++) {\r\n this.setDetailMap(i, defaultDetailMap);\r\n this.setDetailNormalMap(i, defaultNormalMap);\r\n this.setDetailMapUVScale(i, 80);\r\n this.setDetailMapRoughness(i, 1);\r\n this._detailMapInfo.detailMapList[i].dispose();\r\n this._detailMapInfo.detailNormalMapList[i].dispose();\r\n }\r\n } else if (val < n) {\r\n for (let i = val; i < n; i++) {\r\n this.setDetailMap(i, defaultDetailMap);\r\n this.setDetailNormalMap(i, defaultNormalMap);\r\n this.setDetailMapUVScale(i, 80);\r\n this.setDetailMapRoughness(i, 1);\r\n this._detailMapInfo.detailMapList[i].dispose();\r\n this._detailMapInfo.detailNormalMapList[i].dispose();\r\n }\r\n this._detailMapInfo.numDetailMaps = val;\r\n }\r\n this.useFeature(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP, this._detailMapInfo.numDetailMaps);\r\n }\r\n getSplatMap() {\r\n return this._detailMapInfo.splatMap?.get() ?? null;\r\n }\r\n setSplatMap(tex: Texture2DArray) {\r\n if (tex !== this._detailMapInfo.splatMap.get()) {\r\n if (!tex || tex.depth !== MAX_DETAIL_MAPS >> 2) {\r\n console.error('Invalid splat map');\r\n return;\r\n }\r\n this._detailMapInfo.splatMap.set(tex);\r\n this.uniformChanged();\r\n }\r\n }\r\n getDetailMapUVScale(index: number) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return 0;\r\n }\r\n return this._detailMapInfo.detailMapParams[index * 4];\r\n }\r\n setDetailMapUVScale(index: number, scale: number) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return;\r\n }\r\n if (this._detailMapInfo.detailMapParams[index * 4] !== scale) {\r\n this._detailMapInfo.detailMapParams[index * 4] = scale;\r\n this.uniformChanged();\r\n }\r\n }\r\n getDetailMapRoughness(index: number) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return 0;\r\n }\r\n return this._detailMapInfo.detailMapParams[index * 4 + 1];\r\n }\r\n setDetailMapRoughness(index: number, val: number) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return;\r\n }\r\n if (this._detailMapInfo.detailMapParams[index * 4 + 1] !== val) {\r\n this._detailMapInfo.detailMapParams[index * 4 + 1] = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n getDetailMap(index: number) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return null;\r\n }\r\n return this._detailMapInfo.detailMapList[index].get();\r\n }\r\n setDetailMap(index: number, albedoMap: Nullable<Texture2D>) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return;\r\n }\r\n albedoMap = albedoMap ?? ClipmapTerrainMaterial.getDefaultDetailMap();\r\n if (!this._detailMapInfo.detailMapList[index]) {\r\n this._detailMapInfo.detailMapList[index] = new DRef();\r\n }\r\n this._detailMapInfo.detailMapList[index].set(\r\n albedoMap === ClipmapTerrainMaterial.getDefaultDetailMap() ? null : albedoMap\r\n );\r\n if (getDevice().type !== 'webgl') {\r\n const blitter = new CopyBlitter();\r\n const fb = getDevice().createFrameBuffer([this._detailMapInfo.detailMap!.get()!], null);\r\n blitter.blit(\r\n albedoMap!,\r\n fb,\r\n index,\r\n albedoMap!.width === this._detailMapSize && albedoMap!.height === this._detailMapSize\r\n ? fetchSampler('clamp_nearest_nomip')\r\n : fetchSampler('clamp_linear_nomip')\r\n );\r\n fb.dispose();\r\n }\r\n }\r\n getDetailNormalMap(index: number) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return null;\r\n }\r\n return this._detailMapInfo.detailNormalMapList[index].get();\r\n }\r\n setDetailNormalMap(index: number, normalMap: Nullable<Texture2D>) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return;\r\n }\r\n normalMap = normalMap ?? ClipmapTerrainMaterial.getDefaultNormalMap();\r\n if (!this._detailMapInfo.detailNormalMapList[index]) {\r\n this._detailMapInfo.detailNormalMapList[index] = new DRef();\r\n }\r\n this._detailMapInfo.detailNormalMapList[index].set(\r\n normalMap === ClipmapTerrainMaterial.getDefaultNormalMap() ? null : normalMap\r\n );\r\n if (getDevice().type !== 'webgl') {\r\n const blitter = new CopyBlitter();\r\n const fb = getDevice().createFrameBuffer([this._detailMapInfo.detailNormalMap!.get()!], null);\r\n blitter.blit(\r\n normalMap!,\r\n fb,\r\n index,\r\n normalMap!.width === this._detailMapSize && normalMap!.height === this._detailMapSize\r\n ? fetchSampler('clamp_nearest_nomip')\r\n : fetchSampler('clamp_linear_nomip')\r\n );\r\n fb.dispose();\r\n }\r\n }\r\n /** @internal */\r\n update(region: Vector4, terrainScale: Vector3) {\r\n if (!region.equalsTo(this._region) || !terrainScale.equalsTo(this._terrainScale)) {\r\n this._region.set(region);\r\n this._terrainScale.set(terrainScale);\r\n this.uniformChanged();\r\n }\r\n }\r\n get heightMap() {\r\n return this._heightMap.get()!;\r\n }\r\n set heightMap(val: Texture2D) {\r\n if (val !== this._heightMap.get()) {\r\n this._heightMap.set(val);\r\n this._heightMapSize.setXYZW(\r\n this.heightMap.width,\r\n this.heightMap.height,\r\n 1 / this.heightMap.width,\r\n 1 / this.heightMap.height\r\n );\r\n this.uniformChanged();\r\n }\r\n }\r\n needSceneColor() {\r\n return false;\r\n }\r\n needSceneDepth() {\r\n return false;\r\n }\r\n supportInstancing() {\r\n return false;\r\n }\r\n supportLighting() {\r\n return true;\r\n }\r\n getMetallicRoughnessTexCoord: (scope: PBInsideFunctionScope) => PBShaderExp = function (scope) {\r\n return scope.$inputs.uv;\r\n };\r\n sampleDetailNormalMap(scope: PBInsideFunctionScope, index: number, texCoord: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const sample =\r\n this.drawContext.device.type === 'webgl'\r\n ? pb.textureSample(scope[`detailNormalMap${index}`], texCoord).rgb\r\n : pb.textureArraySample(scope.detailNormalMap, texCoord, index).rgb;\r\n const normal = pb.sub(pb.mul(sample, 2), pb.vec3(1));\r\n return pb.normalize(normal);\r\n }\r\n calculateDetailNormal(scope: PBInsideFunctionScope, TBN: PBShaderExp) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n const funcName = 'getTerrainNormal';\r\n pb.func(funcName, [pb.mat3('TBN')], function () {\r\n const numDetailMaps = that.featureUsed<number>(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP);\r\n this.$l.detailNormal = pb.vec3(0);\r\n for (let i = 0; i < (numDetailMaps + 3) >> 2; i++) {\r\n this.$l[`mask${i}`] =\r\n that.drawContext.device.type === 'webgl'\r\n ? pb.textureSample(this.splatMap, this.$inputs.uv)\r\n : pb.textureArraySample(this.splatMap, this.$inputs.uv, i);\r\n }\r\n for (let i = 0; i < numDetailMaps; i++) {\r\n const uv = pb.mul(this.$inputs.uv, this.detailParams[i].x);\r\n this.detailNormal = pb.add(\r\n this.detailNormal,\r\n pb.mul(that.sampleDetailNormalMap(this, i, uv), this[`mask${i >> 2}`][i & 3])\r\n );\r\n }\r\n this.$return(pb.normalize(pb.mul(this.TBN, this.detailNormal)));\r\n });\r\n return pb.getGlobalScope()[funcName](TBN);\r\n }\r\n getNormalTexCoord: (scope: PBInsideFunctionScope) => PBShaderExp = function (scope) {\r\n return scope.$inputs.uv;\r\n };\r\n calculateAlbedoColor(scope: PBInsideFunctionScope) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n const funcName = 'getTerrainAlbedo';\r\n pb.func(funcName, [], function () {\r\n const numDetailMaps = that.featureUsed<number>(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP);\r\n if (numDetailMaps === 0) {\r\n this.$l.checkerPos = pb.mul(this.$inputs.uv, pb.sub(this.region.zw, this.region.xy));\r\n this.$l.ddx = pb.dpdx(this.checkerPos);\r\n this.$l.ddy = pb.dpdy(this.checkerPos);\r\n this.$l.w = pb.add(pb.max(pb.abs(this.ddx), pb.abs(this.ddy)), 0.01);\r\n this.$l.i = pb.div(\r\n pb.mul(\r\n 2,\r\n pb.sub(\r\n pb.abs(pb.sub(pb.fract(pb.mul(pb.sub(this.checkerPos, pb.mul(this.w, 0.5)), 0.5)), 0.5)),\r\n pb.abs(pb.sub(pb.fract(pb.mul(pb.add(this.checkerPos, pb.mul(this.w, 0.5)), 0.5)), 0.5))\r\n )\r\n ),\r\n this.w\r\n );\r\n this.$l.changeRate = pb.add(pb.length(this.ddx), pb.length(this.ddy));\r\n this.$l.fadeStart = pb.float(0);\r\n this.$l.fadeEnd = pb.float(10);\r\n this.$l.fadeFactor = pb.sub(1, pb.smoothStep(this.fadeStart, this.fadeEnd, this.changeRate));\r\n this.$l.checker = pb.mix(0.5, pb.sub(0.5, pb.mul(0.5, this.i.x, this.i.y)), this.fadeFactor);\r\n this.$l.checkerColor = pb.mix(pb.vec3(0.4), pb.vec3(1), pb.vec3(this.checker));\r\n this.$return(pb.vec4(this.checkerColor, 1));\r\n } else {\r\n this.$l.color = pb.vec3(0);\r\n for (let i = 0; i < (numDetailMaps + 3) >> 2; i++) {\r\n this.$l[`mask${i}`] =\r\n that.drawContext.device.type === 'webgl'\r\n ? pb.textureSample(this.splatMap, this.$inputs.uv)\r\n : pb.textureArraySample(this.splatMap, this.$inputs.uv, i);\r\n }\r\n for (let i = 0; i < numDetailMaps; i++) {\r\n const uv = pb.mul(this.$inputs.uv, this.detailParams[i].x);\r\n const sample =\r\n that.drawContext.device.type === 'webgl'\r\n ? pb.textureSample(this[`detailAlbedoMap${i}`], uv).rgb\r\n : pb.textureArraySample(this.detailAlbedoMap, uv, i).rgb;\r\n this.color = pb.add(this.color, pb.mul(sample, this[`mask${i >> 2}`][i & 3]));\r\n }\r\n this.$return(pb.vec4(this.color, 1));\r\n }\r\n });\r\n return pb.getGlobalScope()[funcName]() as PBShaderExp;\r\n }\r\n sampleHeightMap(\r\n scope: PBInsideFunctionScope,\r\n uv: PBShaderExp,\r\n pos: PBShaderExp,\r\n levelStart: PBShaderExp,\r\n levelDiff: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const morphRange = 0.5;\r\n pb.func(\r\n 'sampleHeightMap',\r\n [pb.vec2('uv'), pb.vec2('pos'), pb.vec4('levelStart'), pb.vec4('levelDiff')],\r\n function () {\r\n this.$l.h1 = pb.textureSampleLevel(this.heightMap, this.uv, this.$inputs.miplevel).r;\r\n this.$l.ratio = pb.mul(pb.sub(this.pos.xyxy, this.levelStart), this.levelDiff);\r\n this.$l.maxVal = pb.clamp(\r\n pb.max(pb.max(this.ratio.x, this.ratio.y), pb.max(this.ratio.z, this.ratio.w)),\r\n 0,\r\n 1\r\n );\r\n this.$l.morphFactor = pb.float(0);\r\n this.$if(pb.greaterThan(this.maxVal, 1 - morphRange), function () {\r\n this.$l.h2 = pb.textureSampleLevel(this.heightMap, this.uv, pb.add(this.$inputs.miplevel, 1)).r;\r\n this.morphFactor = pb.div(pb.sub(this.maxVal, 1 - morphRange), morphRange * 2);\r\n this.h1 = pb.mix(this.h1, this.h2, this.morphFactor);\r\n });\r\n this.$if(pb.lessThan(this.maxVal, morphRange), function () {\r\n this.$l.h2 = pb.textureSampleLevel(\r\n this.heightMap,\r\n this.uv,\r\n pb.max(pb.sub(this.$inputs.miplevel, 1), 0)\r\n ).r;\r\n this.morphFactor = pb.mul(pb.add(pb.div(this.maxVal, morphRange), 1), 0.5);\r\n this.h1 = pb.mix(this.h1, this.h2, this.morphFactor);\r\n });\r\n this.$return(this.h1);\r\n }\r\n );\r\n return scope.sampleHeightMap(uv, pos, levelStart, levelDiff);\r\n }\r\n calculateTerrainTBN(\r\n scope: PBInsideFunctionScope,\r\n clipmapPos: PBShaderExp,\r\n uv: PBShaderExp,\r\n texSize: PBShaderExp,\r\n scale: PBShaderExp,\r\n levelStart: PBShaderExp,\r\n levelDiff: PBShaderExp,\r\n tangent: PBShaderExp,\r\n bitangent: PBShaderExp,\r\n normal: PBShaderExp\r\n ) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n pb.func(\r\n 'calcTerrainTBN',\r\n [\r\n pb.vec2('clipmapPos'),\r\n pb.vec2('uv'),\r\n pb.vec4('texSize'),\r\n pb.vec3('scale'),\r\n pb.vec4('levelStart'),\r\n pb.vec4('levelDiff'),\r\n pb.vec3('t').out(),\r\n pb.vec3('b').out(),\r\n pb.vec3('n').out()\r\n ],\r\n function () {\r\n this.$l.texelSize = pb.mul(this.texSize.zw, pb.exp2(this.$inputs.miplevel));\r\n this.$l.delta = pb.exp2(pb.add(this.$inputs.miplevel, 1));\r\n this.$l.hL = that.sampleHeightMap(\r\n this,\r\n pb.sub(this.uv, pb.vec2(this.texelSize.x, 0)),\r\n this.clipmapPos,\r\n this.levelStart,\r\n this.levelDiff\r\n );\r\n this.$l.hR = that.sampleHeightMap(\r\n this,\r\n pb.add(this.uv, pb.vec2(this.texelSize.x, 0)),\r\n this.clipmapPos,\r\n this.levelStart,\r\n this.levelDiff\r\n );\r\n this.$l.hD = that.sampleHeightMap(\r\n this,\r\n pb.add(this.uv, pb.vec2(0, this.texelSize.y)),\r\n this.clipmapPos,\r\n this.levelStart,\r\n this.levelDiff\r\n );\r\n this.$l.hU = that.sampleHeightMap(\r\n this,\r\n pb.sub(this.uv, pb.vec2(0, this.texelSize.y)),\r\n this.clipmapPos,\r\n this.levelStart,\r\n this.levelDiff\r\n );\r\n this.$l.dHdU = pb.div(\r\n pb.mul(pb.sub(this.hR, this.hL), this.scale.y),\r\n pb.mul(this.scale.x, this.delta)\r\n );\r\n this.$l.dHdV = pb.div(\r\n pb.mul(pb.sub(this.hD, this.hU), this.scale.y),\r\n pb.mul(this.scale.z, this.delta)\r\n );\r\n this.t = pb.normalize(pb.vec3(1, this.dHdU, 0));\r\n this.b = pb.normalize(pb.vec3(0, this.dHdV, 1));\r\n this.n = pb.normalize(pb.cross(this.b, this.t));\r\n }\r\n );\r\n return scope.calcTerrainTBN(\r\n clipmapPos,\r\n uv,\r\n texSize,\r\n scale,\r\n levelStart,\r\n levelDiff,\r\n tangent,\r\n bitangent,\r\n normal\r\n ) as PBShaderExp;\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n scope.$inputs.position = pb.vec3().attrib('position');\r\n scope.$inputs.clipmapInfo = pb.vec4().attrib('texCoord0');\r\n scope.$inputs.miplevel = pb.float().attrib('texCoord1');\r\n scope.clipmapGridInfo = pb.vec4().uniform(2);\r\n scope.levelData = pb.vec4[MAX_TERRAIN_MIPMAP_LEVELS * 2]().uniformBuffer(2);\r\n scope.heightMap = pb.tex2D().uniform(2);\r\n scope.heightMapSize = pb.vec4().uniform(2);\r\n scope.region = pb.vec4().uniform(2);\r\n scope.terrainScale = pb.vec3().uniform(2);\r\n\r\n scope.$l.s = pb.sin(scope.$inputs.clipmapInfo.x);\r\n scope.$l.c = pb.cos(scope.$inputs.clipmapInfo.x);\r\n scope.$l.scale2 = pb.mul(scope.$inputs.clipmapInfo.y, scope.clipmapGridInfo.x);\r\n scope.$l.clipmapMatrix = pb.mat4(\r\n pb.mul(scope.c, scope.scale2),\r\n pb.mul(scope.s, scope.scale2),\r\n 0,\r\n 0,\r\n pb.neg(pb.mul(scope.s, scope.scale2)),\r\n pb.mul(scope.c, scope.scale2),\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n 0,\r\n pb.sub(pb.mul(scope.$inputs.clipmapInfo.z, scope.clipmapGridInfo.x), scope.clipmapGridInfo.y),\r\n pb.sub(pb.mul(scope.$inputs.clipmapInfo.w, scope.clipmapGridInfo.x), scope.clipmapGridInfo.z),\r\n 0,\r\n 1\r\n );\r\n\r\n scope.$l.clipmapPos = pb.mul(scope.clipmapMatrix, pb.vec4(scope.$inputs.position, 1)).xy;\r\n\r\n scope.$l.clipmapWorldPos = pb.mul(\r\n ShaderHelper.getWorldMatrix(scope),\r\n pb.vec4(scope.clipmapPos.x, 0, scope.clipmapPos.y, 1)\r\n ).xyz;\r\n scope.$outputs.uv = pb.div(\r\n pb.sub(scope.clipmapWorldPos.xz, scope.region.xy),\r\n pb.sub(scope.region.zw, scope.region.xy)\r\n );\r\n\r\n if (this.drawContext.device.type === 'webgl') {\r\n scope.$l.levelStart = pb.vec4();\r\n scope.$l.levelDiff = pb.vec4();\r\n scope.$l.index = pb.mul(pb.int(scope.$inputs.miplevel), 2);\r\n scope.$for(pb.int('i'), 0, 32, function () {\r\n this.$if(pb.equal(this.i, this.index), function () {\r\n this.levelStart = this.levelData.at(this.i);\r\n this.levelDiff = this.levelData.at(pb.add(this.i, 1));\r\n this.$break();\r\n });\r\n });\r\n } else {\r\n scope.$l.levelStart = scope.levelData.at(pb.mul(pb.int(scope.$inputs.miplevel), 2));\r\n scope.$l.levelDiff = scope.levelData.at(pb.add(pb.mul(pb.int(scope.$inputs.miplevel), 2), 1));\r\n }\r\n\r\n scope.$l.height = this.sampleHeightMap(\r\n scope,\r\n scope.$outputs.uv,\r\n scope.clipmapWorldPos.xz,\r\n scope.levelStart,\r\n scope.levelDiff\r\n );\r\n scope.$outputs.worldPos = pb.add(\r\n scope.clipmapWorldPos,\r\n pb.vec3(0, pb.mul(scope.height, scope.terrainScale.y), 0)\r\n );\r\n scope.$l.t = pb.vec3();\r\n scope.$l.b = pb.vec3();\r\n scope.$l.n = pb.vec3();\r\n this.calculateTerrainTBN(\r\n scope,\r\n scope.clipmapWorldPos.xz,\r\n scope.$outputs.uv,\r\n scope.heightMapSize,\r\n scope.terrainScale,\r\n scope.levelStart,\r\n scope.levelDiff,\r\n scope.t,\r\n scope.b,\r\n scope.n\r\n );\r\n scope.$outputs.clipmapPos = scope.clipmapWorldPos;\r\n scope.$outputs.worldTangent = scope.t;\r\n scope.$outputs.worldBinormal = scope.b;\r\n scope.$outputs.worldNormal = scope.n;\r\n ShaderHelper.setClipSpacePosition(\r\n scope,\r\n pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1))\r\n );\r\n ShaderHelper.resolveMotionVector(scope, scope.$outputs.worldPos, scope.$outputs.worldPos);\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n scope.region = pb.vec4().uniform(2);\r\n scope.$l.discardable = pb.or(\r\n pb.any(pb.lessThan(scope.$inputs.uv, pb.vec2(0))),\r\n pb.any(pb.greaterThan(scope.$inputs.uv, pb.vec2(1)))\r\n );\r\n scope.$if(scope.discardable, function () {\r\n pb.discard();\r\n });\r\n if (this.needFragmentColor()) {\r\n scope.heightMap = pb.tex2D().uniform(2);\r\n const numDetailMaps = this.featureUsed<number>(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP);\r\n if (numDetailMaps > 0) {\r\n scope.detailParams = pb.vec4[numDetailMaps]().uniform(2);\r\n if (this.drawContext.device.type === 'webgl') {\r\n scope.splatMap = pb.tex2D().uniform(2);\r\n for (let i = 0; i < numDetailMaps; i++) {\r\n scope[`detailAlbedoMap${i}`] = pb.tex2D().uniform(2);\r\n scope[`detailNormalMap${i}`] = pb.tex2D().uniform(2);\r\n }\r\n } else {\r\n scope.splatMap = pb.tex2DArray().uniform(2);\r\n scope.detailAlbedoMap = pb.tex2DArray().uniform(2);\r\n scope.detailNormalMap = pb.tex2DArray().uniform(2);\r\n }\r\n }\r\n scope.$l.albedo = this.calculateAlbedoColor(scope);\r\n scope.$l.worldNormal = pb.normalize(scope.$inputs.worldNormal);\r\n scope.$l.normalInfo = this.calculateNormalAndTBN(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.$inputs.worldNormal,\r\n scope.$inputs.worldTangent,\r\n scope.$inputs.worldBinormal\r\n );\r\n if (this.featureUsed<number>(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP) > 0) {\r\n scope.normalInfo.normal = this.calculateDetailNormal(scope, scope.normalInfo.TBN);\r\n }\r\n scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN\r\n );\r\n switch (this.featureUsed<TerrainDebugMode>(ClipmapTerrainMaterial.FEATURE_DEBUG_MODE)) {\r\n case 'albedo':\r\n scope.$l.outColor = scope.albedo;\r\n break;\r\n case 'vertex_normal':\r\n scope.$l.outColor = pb.vec4(pb.add(pb.mul(scope.normalInfo.TBN[2], 0.5), pb.vec3(0.5)), 1);\r\n break;\r\n case 'detail_normal':\r\n scope.$l.outColor = pb.vec4(pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)), 1);\r\n break;\r\n case 'tangent':\r\n scope.$l.outColor = pb.vec4(pb.add(pb.mul(scope.normalInfo.TBN[0], 0.5), pb.vec3(0.5)), 1);\r\n break;\r\n case 'bitangent':\r\n scope.$l.outColor = pb.vec4(pb.add(pb.mul(scope.normalInfo.TBN[1], 0.5), pb.vec3(0.5)), 1);\r\n break;\r\n case 'uv':\r\n scope.$l.outColor = pb.vec4(scope.$inputs.uv, 0, 1);\r\n break;\r\n default:\r\n scope.$l.outColor = pb.vec4(scope.litColor, 1);\r\n break;\r\n }\r\n //scope.$l.outColor = pb.vec4(scope.litColor, 1);\r\n if (this.drawContext.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS) {\r\n scope.$l.outRoughness = pb.vec4(0, 0, 0, 0);\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.outColor,\r\n scope.outRoughness,\r\n scope.outColor\r\n );\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.outColor);\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n bindGroup.setValue('clipmapGridInfo', this._clipmapGridInfo);\r\n bindGroup.setValue('region', this._region);\r\n bindGroup.setValue('terrainScale', this._terrainScale);\r\n bindGroup.setTexture('heightMap', this._heightMap.get()!, fetchSampler('clamp_linear_nomip'));\r\n bindGroup.setValue('heightMapSize', this._heightMapSize);\r\n bindGroup.setBuffer('levelData', this._levelDataBuffer.get()!);\r\n if (this.needFragmentColor(ctx)) {\r\n if (this._detailMapInfo.numDetailMaps > 0) {\r\n bindGroup.setTexture('splatMap', this._detailMapInfo.splatMap.get()!);\r\n if (ctx.device.type === 'webgl') {\r\n for (let i = 0; i < this._detailMapInfo.numDetailMaps; i++) {\r\n bindGroup.setTexture(\r\n `detailAlbedoMap${i}`,\r\n this._detailMapInfo.detailMapList[i]?.get() ?? ClipmapTerrainMaterial.getDefaultDetailMap()!,\r\n fetchSampler('repeat_linear')\r\n );\r\n bindGroup.setTexture(\r\n `detailNormalMap${i}`,\r\n this._detailMapInfo.detailNormalMapList[i]?.get() ??\r\n ClipmapTerrainMaterial.getDefaultNormalMap()!,\r\n fetchSampler('repeat_linear')\r\n );\r\n }\r\n } else {\r\n bindGroup.setTexture(\r\n 'detailAlbedoMap',\r\n this._detailMapInfo.detailMap.get()!,\r\n fetchSampler('repeat_linear')\r\n );\r\n bindGroup.setTexture(\r\n 'detailNormalMap',\r\n this._detailMapInfo.detailNormalMap!.get()!,\r\n fetchSampler('repeat_linear')\r\n );\r\n }\r\n bindGroup.setValue('detailParams', this._detailMapInfo.detailMapParams);\r\n }\r\n }\r\n }\r\n private createDetailMapInfo() {\r\n const device = getDevice();\r\n const isWebGL1 = device.type === 'webgl';\r\n const detailMap = isWebGL1\r\n ? null\r\n : device.createTexture2DArray('rgba8unorm', this._detailMapSize, this._detailMapSize, MAX_DETAIL_MAPS);\r\n const detailNormalMap = isWebGL1\r\n ? null\r\n : device.createTexture2DArray('rgba8unorm', this._detailMapSize, this._detailMapSize, MAX_DETAIL_MAPS);\r\n const splatMap = isWebGL1\r\n ? device.createTexture2D('rgba8unorm', this._splatMapSize, this._splatMapSize)\r\n : device.createTexture2DArray(\r\n 'rgba8unorm',\r\n this._splatMapSize,\r\n this._splatMapSize,\r\n MAX_DETAIL_MAPS >> 2\r\n );\r\n device.pushDeviceStates();\r\n if (!isWebGL1) {\r\n const fbDetail = device.createFrameBuffer([detailMap!], null);\r\n device.setFramebuffer(fbDetail);\r\n for (let i = 0; i < detailMap!.depth; i++) {\r\n fbDetail.setColorAttachmentLayer(0, i);\r\n device.clearFrameBuffer(Vector4.zero(), 1, 0);\r\n }\r\n fbDetail.dispose();\r\n const fbNormal = device.createFrameBuffer([detailNormalMap!], null);\r\n device.setFramebuffer(fbNormal);\r\n for (let i = 0; i < detailNormalMap!.depth; i++) {\r\n fbNormal.setColorAttachmentLayer(0, i);\r\n device.clearFrameBuffer(new Vector4(0.5, 0.5, 1, 1), 1, 0);\r\n }\r\n fbNormal.dispose();\r\n }\r\n const fbSplat = device.createFrameBuffer([splatMap!], null);\r\n device.setFramebuffer(fbSplat);\r\n for (let i = 0; i < splatMap!.depth; i++) {\r\n fbSplat.setColorAttachmentLayer(0, i);\r\n device.clearFrameBuffer(i === 0 ? new Vector4(1, 0, 0, 0) : Vector4.zero(), 1, 0);\r\n }\r\n device.popDeviceStates();\r\n fbSplat.dispose();\r\n return {\r\n detailMap: new DRef(detailMap),\r\n detailNormalMap: new DRef(detailNormalMap),\r\n detailMapList: [],\r\n detailNormalMapList: [],\r\n splatMap: new DRef(splatMap),\r\n detailMapParams: new Float32Array(MAX_DETAIL_MAPS * 4),\r\n numDetailMaps: 0\r\n };\r\n }\r\n\r\n protected onDispose() {\r\n super.onDispose();\r\n this._heightMap.dispose();\r\n this._levelDataBuffer.dispose();\r\n if (this._detailMapInfo) {\r\n this._detailMapInfo.detailMap?.dispose();\r\n this._detailMapInfo.detailNormalMap?.dispose();\r\n this._detailMapInfo.splatMap?.dispose();\r\n for (const tex of this._detailMapInfo.detailMapList) {\r\n tex.dispose();\r\n }\r\n for (const tex of this._detailMapInfo.detailNormalMapList) {\r\n tex.dispose();\r\n }\r\n }\r\n }\r\n static getDefaultDetailMap() {\r\n if (!ClipmapTerrainMaterial._defaultDetailMap.get()) {\r\n const device = getDevice();\r\n const tex = device.createTexture2D('rgba8unorm', 1, 1)!;\r\n tex.update(new Uint8Array([0, 0, 0, 255]), 0, 0, 1, 1);\r\n ClipmapTerrainMaterial._defaultDetailMap.set(tex);\r\n }\r\n return ClipmapTerrainMaterial._defaultDetailMap.get();\r\n }\r\n static getDefaultNormalMap() {\r\n if (!ClipmapTerrainMaterial._defaultNormalMap.get()) {\r\n const device = getDevice();\r\n const tex = device.createTexture2D('rgba8unorm', 1, 1)!;\r\n tex.update(new Uint8Array([128, 128, 255, 255]), 0, 0, 1, 1);\r\n ClipmapTerrainMaterial._defaultNormalMap.set(tex);\r\n }\r\n return ClipmapTerrainMaterial._defaultNormalMap.get();\r\n }\r\n}\r\n"],"names":["MAX_DETAIL_MAPS","ClipmapTerrainMaterial","applyMaterialMixins","MeshMaterial","mixinLight","mixinPBRMetallicRoughness","FEATURE_DETAIL_MAP","defineFeature","FEATURE_DEBUG_MODE","_defaultDetailMap","DRef","_defaultNormalMap","_region","_clipmapGridInfo","_heightMap","_terrainScale","_detailMapInfo","_detailMapSize","_splatMapSize","_heightMapSize","_levelDataBuffer","heightMap","metallic","roughness","albedoTexCoordIndex","normalTexCoordIndex","Vector4","getDevice","createBuffer","MAX_TERRAIN_MIPMAP_LEVELS","usage","createDetailMapInfo","Vector3","one","width","height","useFeature","MAX_DETAIL_MAP_COUNT","debugMode","featureUsed","mode","setLevelData","data","length","get","bufferSubData","region","val","equalsTo","set","uniformChanged","setClipmapGridInfo","gridScale","gridOffsetX","gridOffsetY","x","y","z","setXYZW","terrainScale","numDetailMaps","Number","isInteger","console","error","type","n","defaultDetailMap","getDefaultDetailMap","defaultNormalMap","getDefaultNormalMap","i","setDetailMap","setDetailNormalMap","setDetailMapUVScale","setDetailMapRoughness","detailMapList","dispose","detailNormalMapList","getSplatMap","splatMap","setSplatMap","tex","depth","getDetailMapUVScale","index","detailMapParams","scale","getDetailMapRoughness","getDetailMap","albedoMap","blitter","CopyBlitter","fb","createFrameBuffer","detailMap","blit","fetchSampler","getDetailNormalMap","normalMap","detailNormalMap","update","needSceneColor","needSceneDepth","supportInstancing","supportLighting","getMetallicRoughnessTexCoord","scope","$inputs","uv","sampleDetailNormalMap","texCoord","pb","$builder","sample","drawContext","device","textureSample","rgb","textureArraySample","normal","sub","mul","vec3","normalize","calculateDetailNormal","TBN","that","funcName","func","mat3","$l","detailNormal","detailParams","add","$return","getGlobalScope","getNormalTexCoord","calculateAlbedoColor","checkerPos","zw","xy","ddx","dpdx","ddy","dpdy","w","max","abs","div","fract","changeRate","fadeStart","float","fadeEnd","fadeFactor","smoothStep","checker","mix","checkerColor","vec4","color","detailAlbedoMap","sampleHeightMap","pos","levelStart","levelDiff","morphRange","vec2","h1","textureSampleLevel","miplevel","r","ratio","xyxy","maxVal","clamp","morphFactor","$if","greaterThan","h2","lessThan","calculateTerrainTBN","clipmapPos","texSize","tangent","bitangent","out","texelSize","exp2","delta","hL","hR","hD","hU","dHdU","dHdV","t","b","cross","calcTerrainTBN","vertexShader","position","attrib","clipmapInfo","clipmapGridInfo","uniform","levelData","uniformBuffer","tex2D","heightMapSize","s","sin","c","cos","scale2","clipmapMatrix","mat4","neg","clipmapWorldPos","ShaderHelper","getWorldMatrix","xyz","$outputs","xz","int","$for","equal","at","$break","worldPos","worldTangent","worldBinormal","worldNormal","setClipSpacePosition","getViewProjectionMatrix","resolveMotionVector","fragmentShader","discardable","or","any","discard","needFragmentColor","tex2DArray","albedo","normalInfo","calculateNormalAndTBN","viewVec","calculateViewVector","litColor","PBRLight","outColor","materialFlags","MaterialVaryingFlags","SSR_STORE_ROUGHNESS","outRoughness","outputFragmentColor","applyUniformValues","bindGroup","ctx","pass","setValue","setTexture","setBuffer","isWebGL1","createTexture2DArray","createTexture2D","pushDeviceStates","fbDetail","setFramebuffer","setColorAttachmentLayer","clearFrameBuffer","zero","fbNormal","fbSplat","popDeviceStates","Float32Array","onDispose","Uint8Array"],"mappings":"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"}
1
+ {"version":3,"file":"terrain-cm.js","sources":["../../src/material/terrain-cm.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n GPUDataBuffer,\r\n PBFunctionScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n Texture2D,\r\n Texture2DArray\r\n} from '@zephyr3d/device';\r\nimport { applyMaterialMixins, MeshMaterial } from './meshmaterial';\r\nimport type { DrawContext } from '../render';\r\nimport { MaterialVaryingFlags, MAX_TERRAIN_MIPMAP_LEVELS } from '../values';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { DRef, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport { mixinLight } from './mixins/lit';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { mixinPBRMetallicRoughness } from './mixins/lightmodel/pbrmetallicroughness';\r\nimport { CopyBlitter } from '../blitter';\r\nimport { getDevice } from '../app/api';\r\n\r\ntype ClipmapTerrainDetailMapInfo = {\r\n detailMap: DRef<Texture2DArray>;\r\n detailNormalMap?: DRef<Texture2DArray>;\r\n detailMapList: DRef<Texture2D>[];\r\n detailNormalMapList: DRef<Texture2D>[];\r\n splatMap: DRef<Texture2DArray | Texture2D>;\r\n detailMapParams: Float32Array<ArrayBuffer>;\r\n numDetailMaps: number;\r\n};\r\n\r\nconst MAX_DETAIL_MAPS = 8;\r\n\r\n/**\r\n * Terrain debug rendering mode\r\n * @public\r\n */\r\nexport type TerrainDebugMode =\r\n | 'none'\r\n | 'vertex_normal'\r\n | 'detail_normal'\r\n | 'tangent'\r\n | 'uv'\r\n | 'bitangent'\r\n | 'albedo';\r\n\r\n/**\r\n * Default material type of clipmap terrain\r\n * @public\r\n */\r\nexport class ClipmapTerrainMaterial extends applyMaterialMixins(\r\n MeshMaterial,\r\n mixinLight,\r\n mixinPBRMetallicRoughness\r\n) {\r\n private static readonly FEATURE_DETAIL_MAP = this.defineFeature();\r\n private static readonly FEATURE_DEBUG_MODE = this.defineFeature();\r\n private static readonly _defaultDetailMap: DRef<Texture2D> = new DRef();\r\n private static readonly _defaultNormalMap: DRef<Texture2D> = new DRef();\r\n private readonly _region: Vector4;\r\n private readonly _clipmapGridInfo: Vector4;\r\n private readonly _heightMap: DRef<Texture2D>;\r\n private readonly _terrainScale: Vector3;\r\n private _detailMapInfo: ClipmapTerrainDetailMapInfo;\r\n private readonly _detailMapSize: number;\r\n private readonly _splatMapSize: number;\r\n private readonly _heightMapSize: Vector4;\r\n private readonly _levelDataBuffer: DRef<GPUDataBuffer>;\r\n constructor(heightMap: Texture2D) {\r\n super();\r\n this.metallic = 0;\r\n this.roughness = 1;\r\n this.albedoTexCoordIndex = -1;\r\n this.normalTexCoordIndex = -1;\r\n this._region = new Vector4(-99999, -99999, 99999, 99999);\r\n this._clipmapGridInfo = new Vector4();\r\n this._heightMap = new DRef(heightMap);\r\n this._detailMapSize = 256;\r\n this._splatMapSize = 512;\r\n this._levelDataBuffer = new DRef(\r\n getDevice().createBuffer(MAX_TERRAIN_MIPMAP_LEVELS * 4 * 2 * 4, { usage: 'uniform' })\r\n );\r\n this._detailMapInfo = this.createDetailMapInfo();\r\n this._terrainScale = Vector3.one();\r\n this._heightMapSize = new Vector4(\r\n this.heightMap.width,\r\n this.heightMap.height,\r\n 1 / this.heightMap.width,\r\n 1 / this.heightMap.height\r\n );\r\n this.useFeature(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP, 0);\r\n this.useFeature(ClipmapTerrainMaterial.FEATURE_DEBUG_MODE, 'none');\r\n }\r\n static get MAX_DETAIL_MAP_COUNT() {\r\n return MAX_DETAIL_MAPS;\r\n }\r\n get debugMode() {\r\n return this.featureUsed<TerrainDebugMode>(ClipmapTerrainMaterial.FEATURE_DEBUG_MODE);\r\n }\r\n set debugMode(mode) {\r\n this.useFeature(ClipmapTerrainMaterial.FEATURE_DEBUG_MODE, mode);\r\n }\r\n /** @internal */\r\n setLevelData(data: Float32Array<ArrayBuffer>, length: number) {\r\n this._levelDataBuffer.get()!.bufferSubData(0, data, 0, length);\r\n }\r\n /** @internal */\r\n get region() {\r\n return this._region;\r\n }\r\n /** @internal */\r\n set region(val: Vector4) {\r\n if (!val.equalsTo(this._region)) {\r\n this._region.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n setClipmapGridInfo(gridScale: number, gridOffsetX: number, gridOffsetY: number) {\r\n if (\r\n this._clipmapGridInfo.x !== gridScale ||\r\n this._clipmapGridInfo.y !== gridOffsetX ||\r\n this._clipmapGridInfo.z !== gridOffsetY\r\n ) {\r\n this._clipmapGridInfo.setXYZW(gridScale, gridOffsetX, gridOffsetY, 0);\r\n this.uniformChanged();\r\n }\r\n }\r\n /** @internal */\r\n get terrainScale() {\r\n return this._terrainScale;\r\n }\r\n /** @internal */\r\n set terrainScale(val: Vector3) {\r\n if (!this._terrainScale.equalsTo(val)) {\r\n this._terrainScale.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n get numDetailMaps() {\r\n return this._detailMapInfo.numDetailMaps;\r\n }\r\n set numDetailMaps(val: number) {\r\n if (val > MAX_DETAIL_MAPS || val < 0 || !Number.isInteger(val)) {\r\n console.error('Invalid number of detail maps');\r\n return;\r\n }\r\n if (getDevice().type === 'webgl' && val > 4) {\r\n console.error('Only 4 detail map layers is supported for WebGL1');\r\n return;\r\n }\r\n const n = this._detailMapInfo.numDetailMaps;\r\n const defaultDetailMap = ClipmapTerrainMaterial.getDefaultDetailMap();\r\n const defaultNormalMap = ClipmapTerrainMaterial.getDefaultNormalMap();\r\n if (val > n) {\r\n this._detailMapInfo.numDetailMaps = val;\r\n for (let i = n; i < val; i++) {\r\n this.setDetailMap(i, defaultDetailMap);\r\n this.setDetailNormalMap(i, defaultNormalMap);\r\n this.setDetailMapUVScale(i, 80);\r\n this.setDetailMapRoughness(i, 1);\r\n this._detailMapInfo.detailMapList[i].dispose();\r\n this._detailMapInfo.detailNormalMapList[i].dispose();\r\n }\r\n } else if (val < n) {\r\n for (let i = val; i < n; i++) {\r\n this.setDetailMap(i, defaultDetailMap);\r\n this.setDetailNormalMap(i, defaultNormalMap);\r\n this.setDetailMapUVScale(i, 80);\r\n this.setDetailMapRoughness(i, 1);\r\n this._detailMapInfo.detailMapList[i].dispose();\r\n this._detailMapInfo.detailNormalMapList[i].dispose();\r\n }\r\n this._detailMapInfo.numDetailMaps = val;\r\n }\r\n this.useFeature(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP, this._detailMapInfo.numDetailMaps);\r\n }\r\n getSplatMap() {\r\n return this._detailMapInfo.splatMap?.get() ?? null;\r\n }\r\n setSplatMap(tex: Texture2DArray) {\r\n if (tex !== this._detailMapInfo.splatMap.get()) {\r\n if (!tex || tex.depth !== MAX_DETAIL_MAPS >> 2) {\r\n console.error('Invalid splat map');\r\n return;\r\n }\r\n this._detailMapInfo.splatMap.set(tex);\r\n this.uniformChanged();\r\n }\r\n }\r\n getDetailMapUVScale(index: number) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return 0;\r\n }\r\n return this._detailMapInfo.detailMapParams[index * 4];\r\n }\r\n setDetailMapUVScale(index: number, scale: number) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return;\r\n }\r\n if (this._detailMapInfo.detailMapParams[index * 4] !== scale) {\r\n this._detailMapInfo.detailMapParams[index * 4] = scale;\r\n this.uniformChanged();\r\n }\r\n }\r\n getDetailMapRoughness(index: number) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return 0;\r\n }\r\n return this._detailMapInfo.detailMapParams[index * 4 + 1];\r\n }\r\n setDetailMapRoughness(index: number, val: number) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return;\r\n }\r\n if (this._detailMapInfo.detailMapParams[index * 4 + 1] !== val) {\r\n this._detailMapInfo.detailMapParams[index * 4 + 1] = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n getDetailMap(index: number) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return null;\r\n }\r\n return this._detailMapInfo.detailMapList[index].get();\r\n }\r\n setDetailMap(index: number, albedoMap: Nullable<Texture2D>) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return;\r\n }\r\n albedoMap = albedoMap ?? ClipmapTerrainMaterial.getDefaultDetailMap();\r\n if (!this._detailMapInfo.detailMapList[index]) {\r\n this._detailMapInfo.detailMapList[index] = new DRef();\r\n }\r\n this._detailMapInfo.detailMapList[index].set(\r\n albedoMap === ClipmapTerrainMaterial.getDefaultDetailMap() ? null : albedoMap\r\n );\r\n if (getDevice().type !== 'webgl') {\r\n const blitter = new CopyBlitter();\r\n const fb = getDevice().createFrameBuffer([this._detailMapInfo.detailMap!.get()!], null);\r\n blitter.blit(\r\n albedoMap!,\r\n fb,\r\n index,\r\n albedoMap!.width === this._detailMapSize && albedoMap!.height === this._detailMapSize\r\n ? fetchSampler('clamp_nearest_nomip')\r\n : fetchSampler('clamp_linear_nomip')\r\n );\r\n fb.dispose();\r\n }\r\n }\r\n getDetailNormalMap(index: number) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return null;\r\n }\r\n return this._detailMapInfo.detailNormalMapList[index].get();\r\n }\r\n setDetailNormalMap(index: number, normalMap: Nullable<Texture2D>) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return;\r\n }\r\n normalMap = normalMap ?? ClipmapTerrainMaterial.getDefaultNormalMap();\r\n if (!this._detailMapInfo.detailNormalMapList[index]) {\r\n this._detailMapInfo.detailNormalMapList[index] = new DRef();\r\n }\r\n this._detailMapInfo.detailNormalMapList[index].set(\r\n normalMap === ClipmapTerrainMaterial.getDefaultNormalMap() ? null : normalMap\r\n );\r\n if (getDevice().type !== 'webgl') {\r\n const blitter = new CopyBlitter();\r\n const fb = getDevice().createFrameBuffer([this._detailMapInfo.detailNormalMap!.get()!], null);\r\n blitter.blit(\r\n normalMap!,\r\n fb,\r\n index,\r\n normalMap!.width === this._detailMapSize && normalMap!.height === this._detailMapSize\r\n ? fetchSampler('clamp_nearest_nomip')\r\n : fetchSampler('clamp_linear_nomip')\r\n );\r\n fb.dispose();\r\n }\r\n }\r\n /** @internal */\r\n update(region: Vector4, terrainScale: Vector3) {\r\n if (!region.equalsTo(this._region) || !terrainScale.equalsTo(this._terrainScale)) {\r\n this._region.set(region);\r\n this._terrainScale.set(terrainScale);\r\n this.uniformChanged();\r\n }\r\n }\r\n get heightMap() {\r\n return this._heightMap.get()!;\r\n }\r\n set heightMap(val: Texture2D) {\r\n if (val !== this._heightMap.get()) {\r\n this._heightMap.set(val);\r\n this._heightMapSize.setXYZW(\r\n this.heightMap.width,\r\n this.heightMap.height,\r\n 1 / this.heightMap.width,\r\n 1 / this.heightMap.height\r\n );\r\n this.uniformChanged();\r\n }\r\n }\r\n needSceneColor() {\r\n return false;\r\n }\r\n needSceneDepth() {\r\n return false;\r\n }\r\n supportInstancing() {\r\n return false;\r\n }\r\n supportLighting() {\r\n return true;\r\n }\r\n getMetallicRoughnessTexCoord: (scope: PBInsideFunctionScope) => PBShaderExp = function (scope) {\r\n return scope.$inputs.uv;\r\n };\r\n sampleDetailNormalMap(scope: PBInsideFunctionScope, index: number, texCoord: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const sample =\r\n this.drawContext.device.type === 'webgl'\r\n ? pb.textureSample(scope[`detailNormalMap${index}`], texCoord).rgb\r\n : pb.textureArraySample(scope.detailNormalMap, texCoord, index).rgb;\r\n const normal = pb.sub(pb.mul(sample, 2), pb.vec3(1));\r\n return pb.normalize(normal);\r\n }\r\n calculateDetailNormal(scope: PBInsideFunctionScope, TBN: PBShaderExp) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n const funcName = 'getTerrainNormal';\r\n pb.func(funcName, [pb.mat3('TBN')], function () {\r\n const numDetailMaps = that.featureUsed<number>(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP);\r\n this.$l.detailNormal = pb.vec3(0);\r\n for (let i = 0; i < (numDetailMaps + 3) >> 2; i++) {\r\n this.$l[`mask${i}`] =\r\n that.drawContext.device.type === 'webgl'\r\n ? pb.textureSample(this.splatMap, this.$inputs.uv)\r\n : pb.textureArraySample(this.splatMap, this.$inputs.uv, i);\r\n }\r\n for (let i = 0; i < numDetailMaps; i++) {\r\n const uv = pb.mul(this.$inputs.uv, this.detailParams[i].x);\r\n this.detailNormal = pb.add(\r\n this.detailNormal,\r\n pb.mul(that.sampleDetailNormalMap(this, i, uv), this[`mask${i >> 2}`][i & 3])\r\n );\r\n }\r\n this.$return(pb.normalize(pb.mul(this.TBN, this.detailNormal)));\r\n });\r\n return pb.getGlobalScope()[funcName](TBN);\r\n }\r\n getNormalTexCoord: (scope: PBInsideFunctionScope) => PBShaderExp = function (scope) {\r\n return scope.$inputs.uv;\r\n };\r\n calculateAlbedoColor(scope: PBInsideFunctionScope) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n const funcName = 'getTerrainAlbedo';\r\n pb.func(funcName, [], function () {\r\n const numDetailMaps = that.featureUsed<number>(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP);\r\n if (numDetailMaps === 0) {\r\n this.$l.checkerPos = pb.mul(this.$inputs.uv, pb.sub(this.region.zw, this.region.xy));\r\n this.$l.ddx = pb.dpdx(this.checkerPos);\r\n this.$l.ddy = pb.dpdy(this.checkerPos);\r\n this.$l.w = pb.add(pb.max(pb.abs(this.ddx), pb.abs(this.ddy)), 0.01);\r\n this.$l.i = pb.div(\r\n pb.mul(\r\n 2,\r\n pb.sub(\r\n pb.abs(pb.sub(pb.fract(pb.mul(pb.sub(this.checkerPos, pb.mul(this.w, 0.5)), 0.5)), 0.5)),\r\n pb.abs(pb.sub(pb.fract(pb.mul(pb.add(this.checkerPos, pb.mul(this.w, 0.5)), 0.5)), 0.5))\r\n )\r\n ),\r\n this.w\r\n );\r\n this.$l.changeRate = pb.add(pb.length(this.ddx), pb.length(this.ddy));\r\n this.$l.fadeStart = pb.float(0);\r\n this.$l.fadeEnd = pb.float(10);\r\n this.$l.fadeFactor = pb.sub(1, pb.smoothStep(this.fadeStart, this.fadeEnd, this.changeRate));\r\n this.$l.checker = pb.mix(0.5, pb.sub(0.5, pb.mul(0.5, this.i.x, this.i.y)), this.fadeFactor);\r\n this.$l.checkerColor = pb.mix(pb.vec3(0.4), pb.vec3(1), pb.vec3(this.checker));\r\n this.$return(pb.vec4(this.checkerColor, 1));\r\n } else {\r\n this.$l.color = pb.vec3(0);\r\n for (let i = 0; i < (numDetailMaps + 3) >> 2; i++) {\r\n this.$l[`mask${i}`] =\r\n that.drawContext.device.type === 'webgl'\r\n ? pb.textureSample(this.splatMap, this.$inputs.uv)\r\n : pb.textureArraySample(this.splatMap, this.$inputs.uv, i);\r\n }\r\n for (let i = 0; i < numDetailMaps; i++) {\r\n const uv = pb.mul(this.$inputs.uv, this.detailParams[i].x);\r\n const sample =\r\n that.drawContext.device.type === 'webgl'\r\n ? pb.textureSample(this[`detailAlbedoMap${i}`], uv).rgb\r\n : pb.textureArraySample(this.detailAlbedoMap, uv, i).rgb;\r\n this.color = pb.add(this.color, pb.mul(sample, this[`mask${i >> 2}`][i & 3]));\r\n }\r\n this.$return(pb.vec4(this.color, 1));\r\n }\r\n });\r\n return pb.getGlobalScope()[funcName]() as PBShaderExp;\r\n }\r\n sampleHeightMap(\r\n scope: PBInsideFunctionScope,\r\n uv: PBShaderExp,\r\n pos: PBShaderExp,\r\n levelStart: PBShaderExp,\r\n levelDiff: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const morphRange = 0.5;\r\n pb.func(\r\n 'sampleHeightMap',\r\n [pb.vec2('uv'), pb.vec2('pos'), pb.vec4('levelStart'), pb.vec4('levelDiff')],\r\n function () {\r\n this.$l.h1 = pb.textureSampleLevel(this.heightMap, this.uv, this.$inputs.miplevel).r;\r\n this.$l.ratio = pb.mul(pb.sub(this.pos.xyxy, this.levelStart), this.levelDiff);\r\n this.$l.maxVal = pb.clamp(\r\n pb.max(pb.max(this.ratio.x, this.ratio.y), pb.max(this.ratio.z, this.ratio.w)),\r\n 0,\r\n 1\r\n );\r\n this.$l.morphFactor = pb.float(0);\r\n this.$if(pb.greaterThan(this.maxVal, 1 - morphRange), function () {\r\n this.$l.h2 = pb.textureSampleLevel(this.heightMap, this.uv, pb.add(this.$inputs.miplevel, 1)).r;\r\n this.morphFactor = pb.div(pb.sub(this.maxVal, 1 - morphRange), morphRange * 2);\r\n this.h1 = pb.mix(this.h1, this.h2, this.morphFactor);\r\n });\r\n this.$if(pb.lessThan(this.maxVal, morphRange), function () {\r\n this.$l.h2 = pb.textureSampleLevel(\r\n this.heightMap,\r\n this.uv,\r\n pb.max(pb.sub(this.$inputs.miplevel, 1), 0)\r\n ).r;\r\n this.morphFactor = pb.mul(pb.add(pb.div(this.maxVal, morphRange), 1), 0.5);\r\n this.h1 = pb.mix(this.h1, this.h2, this.morphFactor);\r\n });\r\n this.$return(this.h1);\r\n }\r\n );\r\n return scope.sampleHeightMap(uv, pos, levelStart, levelDiff);\r\n }\r\n calculateTerrainTBN(\r\n scope: PBInsideFunctionScope,\r\n clipmapPos: PBShaderExp,\r\n uv: PBShaderExp,\r\n texSize: PBShaderExp,\r\n scale: PBShaderExp,\r\n levelStart: PBShaderExp,\r\n levelDiff: PBShaderExp,\r\n tangent: PBShaderExp,\r\n bitangent: PBShaderExp,\r\n normal: PBShaderExp\r\n ) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n pb.func(\r\n 'calcTerrainTBN',\r\n [\r\n pb.vec2('clipmapPos'),\r\n pb.vec2('uv'),\r\n pb.vec4('texSize'),\r\n pb.vec3('scale'),\r\n pb.vec4('levelStart'),\r\n pb.vec4('levelDiff'),\r\n pb.vec3('t').out(),\r\n pb.vec3('b').out(),\r\n pb.vec3('n').out()\r\n ],\r\n function () {\r\n this.$l.texelSize = pb.mul(this.texSize.zw, pb.exp2(this.$inputs.miplevel));\r\n this.$l.delta = pb.exp2(pb.add(this.$inputs.miplevel, 1));\r\n this.$l.hL = that.sampleHeightMap(\r\n this,\r\n pb.sub(this.uv, pb.vec2(this.texelSize.x, 0)),\r\n this.clipmapPos,\r\n this.levelStart,\r\n this.levelDiff\r\n );\r\n this.$l.hR = that.sampleHeightMap(\r\n this,\r\n pb.add(this.uv, pb.vec2(this.texelSize.x, 0)),\r\n this.clipmapPos,\r\n this.levelStart,\r\n this.levelDiff\r\n );\r\n this.$l.hD = that.sampleHeightMap(\r\n this,\r\n pb.add(this.uv, pb.vec2(0, this.texelSize.y)),\r\n this.clipmapPos,\r\n this.levelStart,\r\n this.levelDiff\r\n );\r\n this.$l.hU = that.sampleHeightMap(\r\n this,\r\n pb.sub(this.uv, pb.vec2(0, this.texelSize.y)),\r\n this.clipmapPos,\r\n this.levelStart,\r\n this.levelDiff\r\n );\r\n this.$l.dHdU = pb.div(\r\n pb.mul(pb.sub(this.hR, this.hL), this.scale.y),\r\n pb.mul(this.scale.x, this.delta)\r\n );\r\n this.$l.dHdV = pb.div(\r\n pb.mul(pb.sub(this.hD, this.hU), this.scale.y),\r\n pb.mul(this.scale.z, this.delta)\r\n );\r\n this.t = pb.normalize(pb.vec3(1, this.dHdU, 0));\r\n this.b = pb.normalize(pb.vec3(0, this.dHdV, 1));\r\n this.n = pb.normalize(pb.cross(this.b, this.t));\r\n }\r\n );\r\n return scope.calcTerrainTBN(\r\n clipmapPos,\r\n uv,\r\n texSize,\r\n scale,\r\n levelStart,\r\n levelDiff,\r\n tangent,\r\n bitangent,\r\n normal\r\n ) as PBShaderExp;\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n scope.$inputs.position = pb.vec3().attrib('position');\r\n scope.$inputs.clipmapInfo = pb.vec4().attrib('texCoord0');\r\n scope.$inputs.miplevel = pb.float().attrib('texCoord1');\r\n scope.clipmapGridInfo = pb.vec4().uniform(2);\r\n scope.levelData = pb.vec4[MAX_TERRAIN_MIPMAP_LEVELS * 2]().uniformBuffer(2);\r\n scope.heightMap = pb.tex2D().uniform(2);\r\n scope.heightMapSize = pb.vec4().uniform(2);\r\n scope.region = pb.vec4().uniform(2);\r\n scope.terrainScale = pb.vec3().uniform(2);\r\n\r\n scope.$l.s = pb.sin(scope.$inputs.clipmapInfo.x);\r\n scope.$l.c = pb.cos(scope.$inputs.clipmapInfo.x);\r\n scope.$l.scale2 = pb.mul(scope.$inputs.clipmapInfo.y, scope.clipmapGridInfo.x);\r\n scope.$l.clipmapMatrix = pb.mat4(\r\n pb.mul(scope.c, scope.scale2),\r\n pb.mul(scope.s, scope.scale2),\r\n 0,\r\n 0,\r\n pb.neg(pb.mul(scope.s, scope.scale2)),\r\n pb.mul(scope.c, scope.scale2),\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n 0,\r\n pb.sub(pb.mul(scope.$inputs.clipmapInfo.z, scope.clipmapGridInfo.x), scope.clipmapGridInfo.y),\r\n pb.sub(pb.mul(scope.$inputs.clipmapInfo.w, scope.clipmapGridInfo.x), scope.clipmapGridInfo.z),\r\n 0,\r\n 1\r\n );\r\n\r\n scope.$l.clipmapPos = pb.mul(scope.clipmapMatrix, pb.vec4(scope.$inputs.position, 1)).xy;\r\n\r\n scope.$l.clipmapWorldPos = pb.mul(\r\n ShaderHelper.getWorldMatrix(scope),\r\n pb.vec4(scope.clipmapPos.x, 0, scope.clipmapPos.y, 1)\r\n ).xyz;\r\n scope.$outputs.uv = pb.div(\r\n pb.sub(scope.clipmapWorldPos.xz, scope.region.xy),\r\n pb.sub(scope.region.zw, scope.region.xy)\r\n );\r\n\r\n if (this.drawContext.device.type === 'webgl') {\r\n scope.$l.levelStart = pb.vec4();\r\n scope.$l.levelDiff = pb.vec4();\r\n scope.$l.index = pb.mul(pb.int(scope.$inputs.miplevel), 2);\r\n scope.$for(pb.int('i'), 0, 32, function () {\r\n this.$if(pb.equal(this.i, this.index), function () {\r\n this.levelStart = this.levelData.at(this.i);\r\n this.levelDiff = this.levelData.at(pb.add(this.i, 1));\r\n this.$break();\r\n });\r\n });\r\n } else {\r\n scope.$l.levelStart = scope.levelData.at(pb.mul(pb.int(scope.$inputs.miplevel), 2));\r\n scope.$l.levelDiff = scope.levelData.at(pb.add(pb.mul(pb.int(scope.$inputs.miplevel), 2), 1));\r\n }\r\n\r\n scope.$l.height = this.sampleHeightMap(\r\n scope,\r\n scope.$outputs.uv,\r\n scope.clipmapWorldPos.xz,\r\n scope.levelStart,\r\n scope.levelDiff\r\n );\r\n scope.$outputs.worldPos = pb.add(\r\n scope.clipmapWorldPos,\r\n pb.vec3(0, pb.mul(scope.height, scope.terrainScale.y), 0)\r\n );\r\n scope.$l.t = pb.vec3();\r\n scope.$l.b = pb.vec3();\r\n scope.$l.n = pb.vec3();\r\n this.calculateTerrainTBN(\r\n scope,\r\n scope.clipmapWorldPos.xz,\r\n scope.$outputs.uv,\r\n scope.heightMapSize,\r\n scope.terrainScale,\r\n scope.levelStart,\r\n scope.levelDiff,\r\n scope.t,\r\n scope.b,\r\n scope.n\r\n );\r\n scope.$outputs.clipmapPos = scope.clipmapWorldPos;\r\n scope.$outputs.worldTangent = scope.t;\r\n scope.$outputs.worldBinormal = scope.b;\r\n scope.$outputs.worldNormal = scope.n;\r\n ShaderHelper.setClipSpacePosition(\r\n scope,\r\n pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1))\r\n );\r\n ShaderHelper.resolveMotionVector(scope, scope.$outputs.worldPos, scope.$outputs.worldPos);\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n scope.region = pb.vec4().uniform(2);\r\n scope.$l.discardable = pb.or(\r\n pb.any(pb.lessThan(scope.$inputs.uv, pb.vec2(0))),\r\n pb.any(pb.greaterThan(scope.$inputs.uv, pb.vec2(1)))\r\n );\r\n scope.$if(scope.discardable, function () {\r\n pb.discard();\r\n });\r\n if (this.needFragmentColor()) {\r\n scope.heightMap = pb.tex2D().uniform(2);\r\n const numDetailMaps = this.featureUsed<number>(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP);\r\n if (numDetailMaps > 0) {\r\n scope.detailParams = pb.vec4[numDetailMaps]().uniform(2);\r\n if (this.drawContext.device.type === 'webgl') {\r\n scope.splatMap = pb.tex2D().uniform(2);\r\n for (let i = 0; i < numDetailMaps; i++) {\r\n scope[`detailAlbedoMap${i}`] = pb.tex2D().uniform(2);\r\n scope[`detailNormalMap${i}`] = pb.tex2D().uniform(2);\r\n }\r\n } else {\r\n scope.splatMap = pb.tex2DArray().uniform(2);\r\n scope.detailAlbedoMap = pb.tex2DArray().uniform(2);\r\n scope.detailNormalMap = pb.tex2DArray().uniform(2);\r\n }\r\n }\r\n scope.$l.albedo = this.calculateAlbedoColor(scope);\r\n scope.$l.worldNormal = pb.normalize(scope.$inputs.worldNormal);\r\n scope.$l.normalInfo = this.calculateNormalAndTBN(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.$inputs.worldNormal,\r\n scope.$inputs.worldTangent,\r\n scope.$inputs.worldBinormal\r\n );\r\n if (this.featureUsed<number>(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP) > 0) {\r\n scope.normalInfo.normal = this.calculateDetailNormal(scope, scope.normalInfo.TBN);\r\n }\r\n scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN\r\n );\r\n switch (this.featureUsed<TerrainDebugMode>(ClipmapTerrainMaterial.FEATURE_DEBUG_MODE)) {\r\n case 'albedo':\r\n scope.$l.outColor = scope.albedo;\r\n break;\r\n case 'vertex_normal':\r\n scope.$l.outColor = pb.vec4(pb.add(pb.mul(scope.normalInfo.TBN[2], 0.5), pb.vec3(0.5)), 1);\r\n break;\r\n case 'detail_normal':\r\n scope.$l.outColor = pb.vec4(pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)), 1);\r\n break;\r\n case 'tangent':\r\n scope.$l.outColor = pb.vec4(pb.add(pb.mul(scope.normalInfo.TBN[0], 0.5), pb.vec3(0.5)), 1);\r\n break;\r\n case 'bitangent':\r\n scope.$l.outColor = pb.vec4(pb.add(pb.mul(scope.normalInfo.TBN[1], 0.5), pb.vec3(0.5)), 1);\r\n break;\r\n case 'uv':\r\n scope.$l.outColor = pb.vec4(scope.$inputs.uv, 0, 1);\r\n break;\r\n default:\r\n scope.$l.outColor = pb.vec4(scope.litColor, 1);\r\n break;\r\n }\r\n //scope.$l.outColor = pb.vec4(scope.litColor, 1);\r\n if (this.drawContext.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS) {\r\n scope.$l.outRoughness = pb.vec4(0, 0, 0, 0);\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.outColor,\r\n scope.outRoughness,\r\n scope.outColor\r\n );\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.outColor);\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n bindGroup.setValue('clipmapGridInfo', this._clipmapGridInfo);\r\n bindGroup.setValue('region', this._region);\r\n bindGroup.setValue('terrainScale', this._terrainScale);\r\n bindGroup.setTexture('heightMap', this._heightMap.get()!, fetchSampler('clamp_linear_nomip'));\r\n bindGroup.setValue('heightMapSize', this._heightMapSize);\r\n bindGroup.setBuffer('levelData', this._levelDataBuffer.get()!);\r\n if (this.needFragmentColor(ctx)) {\r\n if (this._detailMapInfo.numDetailMaps > 0) {\r\n bindGroup.setTexture('splatMap', this._detailMapInfo.splatMap.get()!);\r\n if (ctx.device.type === 'webgl') {\r\n for (let i = 0; i < this._detailMapInfo.numDetailMaps; i++) {\r\n bindGroup.setTexture(\r\n `detailAlbedoMap${i}`,\r\n this._detailMapInfo.detailMapList[i]?.get() ?? ClipmapTerrainMaterial.getDefaultDetailMap()!,\r\n fetchSampler('repeat_linear')\r\n );\r\n bindGroup.setTexture(\r\n `detailNormalMap${i}`,\r\n this._detailMapInfo.detailNormalMapList[i]?.get() ??\r\n ClipmapTerrainMaterial.getDefaultNormalMap()!,\r\n fetchSampler('repeat_linear')\r\n );\r\n }\r\n } else {\r\n bindGroup.setTexture(\r\n 'detailAlbedoMap',\r\n this._detailMapInfo.detailMap.get()!,\r\n fetchSampler('repeat_linear')\r\n );\r\n bindGroup.setTexture(\r\n 'detailNormalMap',\r\n this._detailMapInfo.detailNormalMap!.get()!,\r\n fetchSampler('repeat_linear')\r\n );\r\n }\r\n bindGroup.setValue('detailParams', this._detailMapInfo.detailMapParams);\r\n }\r\n }\r\n }\r\n private createDetailMapInfo() {\r\n const device = getDevice();\r\n const isWebGL1 = device.type === 'webgl';\r\n const detailMap = isWebGL1\r\n ? null\r\n : device.createTexture2DArray('rgba8unorm', this._detailMapSize, this._detailMapSize, MAX_DETAIL_MAPS);\r\n const detailNormalMap = isWebGL1\r\n ? null\r\n : device.createTexture2DArray('rgba8unorm', this._detailMapSize, this._detailMapSize, MAX_DETAIL_MAPS);\r\n const splatMap = isWebGL1\r\n ? device.createTexture2D('rgba8unorm', this._splatMapSize, this._splatMapSize)\r\n : device.createTexture2DArray(\r\n 'rgba8unorm',\r\n this._splatMapSize,\r\n this._splatMapSize,\r\n MAX_DETAIL_MAPS >> 2\r\n );\r\n device.pushDeviceStates();\r\n if (!isWebGL1) {\r\n const fbDetail = device.createFrameBuffer([detailMap!], null);\r\n device.setFramebuffer(fbDetail);\r\n for (let i = 0; i < detailMap!.depth; i++) {\r\n fbDetail.setColorAttachmentLayer(0, i);\r\n device.clearFrameBuffer(Vector4.zero(), 1, 0);\r\n }\r\n fbDetail.dispose();\r\n const fbNormal = device.createFrameBuffer([detailNormalMap!], null);\r\n device.setFramebuffer(fbNormal);\r\n for (let i = 0; i < detailNormalMap!.depth; i++) {\r\n fbNormal.setColorAttachmentLayer(0, i);\r\n device.clearFrameBuffer(new Vector4(0.5, 0.5, 1, 1), 1, 0);\r\n }\r\n fbNormal.dispose();\r\n }\r\n const fbSplat = device.createFrameBuffer([splatMap!], null);\r\n device.setFramebuffer(fbSplat);\r\n for (let i = 0; i < splatMap!.depth; i++) {\r\n fbSplat.setColorAttachmentLayer(0, i);\r\n device.clearFrameBuffer(i === 0 ? new Vector4(1, 0, 0, 0) : Vector4.zero(), 1, 0);\r\n }\r\n device.popDeviceStates();\r\n fbSplat.dispose();\r\n return {\r\n detailMap: new DRef(detailMap),\r\n detailNormalMap: new DRef(detailNormalMap),\r\n detailMapList: [],\r\n detailNormalMapList: [],\r\n splatMap: new DRef(splatMap),\r\n detailMapParams: new Float32Array(MAX_DETAIL_MAPS * 4),\r\n numDetailMaps: 0\r\n };\r\n }\r\n\r\n protected onDispose() {\r\n super.onDispose();\r\n this._heightMap.dispose();\r\n this._levelDataBuffer.dispose();\r\n if (this._detailMapInfo) {\r\n this._detailMapInfo.detailMap?.dispose();\r\n this._detailMapInfo.detailNormalMap?.dispose();\r\n this._detailMapInfo.splatMap?.dispose();\r\n for (const tex of this._detailMapInfo.detailMapList) {\r\n tex.dispose();\r\n }\r\n for (const tex of this._detailMapInfo.detailNormalMapList) {\r\n tex.dispose();\r\n }\r\n }\r\n }\r\n static getDefaultDetailMap() {\r\n if (!ClipmapTerrainMaterial._defaultDetailMap.get()) {\r\n const device = getDevice();\r\n const tex = device.createTexture2D('rgba8unorm', 1, 1)!;\r\n tex.update(new Uint8Array([0, 0, 0, 255]), 0, 0, 1, 1);\r\n ClipmapTerrainMaterial._defaultDetailMap.set(tex);\r\n }\r\n return ClipmapTerrainMaterial._defaultDetailMap.get();\r\n }\r\n static getDefaultNormalMap() {\r\n if (!ClipmapTerrainMaterial._defaultNormalMap.get()) {\r\n const device = getDevice();\r\n const tex = device.createTexture2D('rgba8unorm', 1, 1)!;\r\n tex.update(new Uint8Array([128, 128, 255, 255]), 0, 0, 1, 1);\r\n ClipmapTerrainMaterial._defaultNormalMap.set(tex);\r\n }\r\n return ClipmapTerrainMaterial._defaultNormalMap.get();\r\n }\r\n}\r\n"],"names":["MAX_DETAIL_MAPS","ClipmapTerrainMaterial","applyMaterialMixins","MeshMaterial","mixinLight","mixinPBRMetallicRoughness","FEATURE_DETAIL_MAP","defineFeature","FEATURE_DEBUG_MODE","_defaultDetailMap","DRef","_defaultNormalMap","_region","_clipmapGridInfo","_heightMap","_terrainScale","_detailMapInfo","_detailMapSize","_splatMapSize","_heightMapSize","_levelDataBuffer","heightMap","metallic","roughness","albedoTexCoordIndex","normalTexCoordIndex","Vector4","getDevice","createBuffer","MAX_TERRAIN_MIPMAP_LEVELS","usage","createDetailMapInfo","Vector3","one","width","height","useFeature","MAX_DETAIL_MAP_COUNT","debugMode","featureUsed","mode","setLevelData","data","length","get","bufferSubData","region","val","equalsTo","set","uniformChanged","setClipmapGridInfo","gridScale","gridOffsetX","gridOffsetY","x","y","z","setXYZW","terrainScale","numDetailMaps","Number","isInteger","console","error","type","n","defaultDetailMap","getDefaultDetailMap","defaultNormalMap","getDefaultNormalMap","i","setDetailMap","setDetailNormalMap","setDetailMapUVScale","setDetailMapRoughness","detailMapList","dispose","detailNormalMapList","getSplatMap","splatMap","setSplatMap","tex","depth","getDetailMapUVScale","index","detailMapParams","scale","getDetailMapRoughness","getDetailMap","albedoMap","blitter","CopyBlitter","fb","createFrameBuffer","detailMap","blit","fetchSampler","getDetailNormalMap","normalMap","detailNormalMap","update","needSceneColor","needSceneDepth","supportInstancing","supportLighting","getMetallicRoughnessTexCoord","scope","$inputs","uv","sampleDetailNormalMap","texCoord","pb","$builder","sample","drawContext","device","textureSample","rgb","textureArraySample","normal","sub","mul","vec3","normalize","calculateDetailNormal","TBN","that","funcName","func","mat3","$l","detailNormal","detailParams","add","$return","getGlobalScope","getNormalTexCoord","calculateAlbedoColor","checkerPos","zw","xy","ddx","dpdx","ddy","dpdy","w","max","abs","div","fract","changeRate","fadeStart","float","fadeEnd","fadeFactor","smoothStep","checker","mix","checkerColor","vec4","color","detailAlbedoMap","sampleHeightMap","pos","levelStart","levelDiff","morphRange","vec2","h1","textureSampleLevel","miplevel","r","ratio","xyxy","maxVal","clamp","morphFactor","$if","greaterThan","h2","lessThan","calculateTerrainTBN","clipmapPos","texSize","tangent","bitangent","out","texelSize","exp2","delta","hL","hR","hD","hU","dHdU","dHdV","t","b","cross","calcTerrainTBN","vertexShader","position","attrib","clipmapInfo","clipmapGridInfo","uniform","levelData","uniformBuffer","tex2D","heightMapSize","s","sin","c","cos","scale2","clipmapMatrix","mat4","neg","clipmapWorldPos","ShaderHelper","getWorldMatrix","xyz","$outputs","xz","int","$for","equal","at","$break","worldPos","worldTangent","worldBinormal","worldNormal","setClipSpacePosition","getViewProjectionMatrix","resolveMotionVector","fragmentShader","discardable","or","any","discard","needFragmentColor","tex2DArray","albedo","normalInfo","calculateNormalAndTBN","viewVec","calculateViewVector","litColor","PBRLight","outColor","materialFlags","MaterialVaryingFlags","SSR_STORE_ROUGHNESS","outRoughness","outputFragmentColor","applyUniformValues","bindGroup","ctx","pass","setValue","setTexture","setBuffer","isWebGL1","createTexture2DArray","createTexture2D","pushDeviceStates","fbDetail","setFramebuffer","setColorAttachmentLayer","clearFrameBuffer","zero","fbNormal","fbSplat","popDeviceStates","Float32Array","onDispose","Uint8Array"],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { ScriptingSystem } from './scriptingsystem.js';
2
+
3
+ class RuntimeManager {
4
+ scriptingSystem;
5
+ enabled;
6
+ constructor(VFS, scriptsRoot, editorMode, enabled){
7
+ this.scriptingSystem = new ScriptingSystem({
8
+ VFS,
9
+ scriptsRoot,
10
+ editorMode
11
+ });
12
+ this.enabled = enabled ?? true;
13
+ }
14
+ get VFS() {
15
+ return this.scriptingSystem.registry.VFS;
16
+ }
17
+ detachAllScripts() {
18
+ if (this.enabled) {
19
+ this.scriptingSystem.detachAllScripts();
20
+ }
21
+ }
22
+ async attachScript(host, module) {
23
+ return this.enabled ? await this.scriptingSystem.attachScript(host, module) : null;
24
+ }
25
+ detachScript(host, idOrInstance) {
26
+ if (this.enabled) {
27
+ this.scriptingSystem.detachScript(host, idOrInstance);
28
+ }
29
+ }
30
+ update(deltaTime, elapsedTime) {
31
+ if (this.enabled) {
32
+ this.scriptingSystem.update(deltaTime, elapsedTime);
33
+ }
34
+ }
35
+ }
36
+
37
+ export { RuntimeManager };
38
+ //# sourceMappingURL=runtimemgr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtimemgr.js","sources":["../../../../../../node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js"],"sourcesContent":["import { ScriptingSystem } from './scriptingsystem.js';\n\nclass RuntimeManager {\n scriptingSystem;\n enabled;\n constructor(VFS, scriptsRoot, editorMode, enabled){\n this.scriptingSystem = new ScriptingSystem({\n VFS,\n scriptsRoot,\n editorMode\n });\n this.enabled = enabled ?? true;\n }\n get VFS() {\n return this.scriptingSystem.registry.VFS;\n }\n detachAllScripts() {\n if (this.enabled) {\n this.scriptingSystem.detachAllScripts();\n }\n }\n async attachScript(host, module) {\n return this.enabled ? await this.scriptingSystem.attachScript(host, module) : null;\n }\n detachScript(host, idOrInstance) {\n if (this.enabled) {\n this.scriptingSystem.detachScript(host, idOrInstance);\n }\n }\n update(deltaTime, elapsedTime) {\n if (this.enabled) {\n this.scriptingSystem.update(deltaTime, elapsedTime);\n }\n }\n}\n\nexport { RuntimeManager };\n//# sourceMappingURL=runtimemgr.js.map\n"],"names":[],"mappings":";;AAEA,MAAM,cAAc,CAAC;AACrB,IAAI,eAAe;AACnB,IAAI,OAAO;AACX,IAAI,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC;AACtD,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC;AACnD,YAAY,GAAG;AACf,YAAY,WAAW;AACvB,YAAY;AACZ,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI;AACtC;AACA,IAAI,IAAI,GAAG,GAAG;AACd,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG;AAChD;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;AAC1B,YAAY,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE;AACnD;AACA;AACA,IAAI,MAAM,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE;AACrC,QAAQ,OAAO,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI;AAC1F;AACA,IAAI,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE;AACrC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;AAC1B,YAAY,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC;AACjE;AACA;AACA,IAAI,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE;AACnC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;AAC1B,YAAY,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC;AAC/D;AACA;AACA;;;;","x_google_ignoreList":[0]}
@@ -0,0 +1,10 @@
1
+ class RuntimeScript {
2
+ onCreated() {}
3
+ onAttached(_host) {}
4
+ onUpdate(_deltaTime, _elapsedTime) {}
5
+ onDetached() {}
6
+ onDestroy() {}
7
+ }
8
+
9
+ export { RuntimeScript };
10
+ //# sourceMappingURL=runtimescript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtimescript.js","sources":["../../../../../../node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js"],"sourcesContent":["class RuntimeScript {\n onCreated() {}\n onAttached(_host) {}\n onUpdate(_deltaTime, _elapsedTime) {}\n onDetached() {}\n onDestroy() {}\n}\n\nexport { RuntimeScript };\n//# sourceMappingURL=runtimescript.js.map\n"],"names":[],"mappings":"AAAA,MAAM,aAAa,CAAC;AACpB,IAAI,SAAS,GAAG;AAChB,IAAI,UAAU,CAAC,KAAK,EAAE;AACtB,IAAI,QAAQ,CAAC,UAAU,EAAE,YAAY,EAAE;AACvC,IAAI,UAAU,GAAG;AACjB,IAAI,SAAS,GAAG;AAChB;;;;","x_google_ignoreList":[0]}