@zephyr3d/scene 0.9.26 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (506) hide show
  1. package/README.md +60 -27
  2. package/dist/animation/animation_bank.js +634 -0
  3. package/dist/animation/animation_bank.js.map +1 -0
  4. package/dist/animation/animation_bank_gpu.js +256 -0
  5. package/dist/animation/animation_bank_gpu.js.map +1 -0
  6. package/dist/animation/animationset.js +146 -30
  7. package/dist/animation/animationset.js.map +1 -1
  8. package/dist/animation/cloth/gpu_cloth_component.js +406 -0
  9. package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
  10. package/dist/animation/cloth/gpu_cloth_system.js +332 -202
  11. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  12. package/dist/animation/gpu_animation_driver.js +289 -0
  13. package/dist/animation/gpu_animation_driver.js.map +1 -0
  14. package/dist/animation/joint_dynamics/collision.js +112 -1
  15. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  16. package/dist/animation/joint_dynamics/controller.js +6 -0
  17. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  18. package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
  19. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  20. package/dist/animation/joint_dynamics/solver.js +50 -12
  21. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  22. package/dist/animation/joint_dynamics/types.js.map +1 -1
  23. package/dist/animation/skeleton.js +300 -56
  24. package/dist/animation/skeleton.js.map +1 -1
  25. package/dist/animation/skin_palette_atlas.js +252 -0
  26. package/dist/animation/skin_palette_atlas.js.map +1 -0
  27. package/dist/animation/spring/multi_chain_spring_system.js +298 -38
  28. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  29. package/dist/animation/spring/spring_chain.js +2 -0
  30. package/dist/animation/spring/spring_chain.js.map +1 -1
  31. package/dist/animation/spring/spring_collider.js +159 -21
  32. package/dist/animation/spring/spring_collider.js.map +1 -1
  33. package/dist/animation/spring/spring_particle.js +1 -0
  34. package/dist/animation/spring/spring_particle.js.map +1 -1
  35. package/dist/animation/spring/spring_solver.js +173 -0
  36. package/dist/animation/spring/spring_solver.js.map +1 -0
  37. package/dist/animation/spring/spring_system.js +249 -24
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring_modifier.js +32 -1
  40. package/dist/animation/spring_modifier.js.map +1 -1
  41. package/dist/app/app.js +26 -0
  42. package/dist/app/app.js.map +1 -1
  43. package/dist/app/engine.js +86 -15
  44. package/dist/app/engine.js.map +1 -1
  45. package/dist/app/gamepad.js +191 -0
  46. package/dist/app/gamepad.js.map +1 -0
  47. package/dist/app/inputactions.js +271 -0
  48. package/dist/app/inputactions.js.map +1 -0
  49. package/dist/app/inputmgr.js +331 -22
  50. package/dist/app/inputmgr.js.map +1 -1
  51. package/dist/app/loading.js +138 -0
  52. package/dist/app/loading.js.map +1 -0
  53. package/dist/app/pipelinecache.js +209 -0
  54. package/dist/app/pipelinecache.js.map +1 -0
  55. package/dist/app/runtimescript.js +25 -0
  56. package/dist/app/runtimescript.js.map +1 -1
  57. package/dist/app/scriptingsystem.js +54 -0
  58. package/dist/app/scriptingsystem.js.map +1 -1
  59. package/dist/app/scriptregistry.js +7 -2
  60. package/dist/app/scriptregistry.js.map +1 -1
  61. package/dist/asset/asset_manifest.js +59 -0
  62. package/dist/asset/asset_manifest.js.map +1 -0
  63. package/dist/asset/asset_preload.js +258 -0
  64. package/dist/asset/asset_preload.js.map +1 -0
  65. package/dist/asset/assetmanager.js +117 -65
  66. package/dist/asset/assetmanager.js.map +1 -1
  67. package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
  68. package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  69. package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  70. package/dist/asset/loaders/ktx2/basis_location.js +17 -0
  71. package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
  72. package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
  73. package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
  74. package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
  75. package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
  76. package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
  77. package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
  78. package/dist/asset/mesh_lod_builder.js +104 -0
  79. package/dist/asset/mesh_lod_builder.js.map +1 -0
  80. package/dist/asset/mesh_settings.js +111 -0
  81. package/dist/asset/mesh_settings.js.map +1 -0
  82. package/dist/asset/meshopt_decoder.js +18 -0
  83. package/dist/asset/meshopt_decoder.js.map +1 -0
  84. package/dist/asset/meshopt_simplifier.js +26 -0
  85. package/dist/asset/meshopt_simplifier.js.map +1 -0
  86. package/dist/asset/model.js +177 -3
  87. package/dist/asset/model.js.map +1 -1
  88. package/dist/asset/texture_settings.js +231 -0
  89. package/dist/asset/texture_settings.js.map +1 -0
  90. package/dist/asset/zmsh_binary.js +131 -0
  91. package/dist/asset/zmsh_binary.js.map +1 -0
  92. package/dist/asset/zsdf_binary.js +111 -0
  93. package/dist/asset/zsdf_binary.js.map +1 -0
  94. package/dist/blitter/bilateralblur.js +1 -2
  95. package/dist/blitter/bilateralblur.js.map +1 -1
  96. package/dist/blitter/gaussianblur.js +1 -6
  97. package/dist/blitter/gaussianblur.js.map +1 -1
  98. package/dist/camera/base.js +31 -10
  99. package/dist/camera/base.js.map +1 -1
  100. package/dist/camera/camera.js +178 -200
  101. package/dist/camera/camera.js.map +1 -1
  102. package/dist/camera/follow.js +342 -0
  103. package/dist/camera/follow.js.map +1 -0
  104. package/dist/camera/fps.js +9 -7
  105. package/dist/camera/fps.js.map +1 -1
  106. package/dist/camera/orbit.js +46 -19
  107. package/dist/camera/orbit.js.map +1 -1
  108. package/dist/index.d.ts +30475 -19865
  109. package/dist/index.js +67 -12
  110. package/dist/index.js.map +1 -1
  111. package/dist/material/blinn.js +3 -0
  112. package/dist/material/blinn.js.map +1 -1
  113. package/dist/material/eye.js +1 -1
  114. package/dist/material/eye.js.map +1 -1
  115. package/dist/material/hair.js +2 -3
  116. package/dist/material/hair.js.map +1 -1
  117. package/dist/material/hairstrand.js +235 -235
  118. package/dist/material/hairstrand.js.map +1 -1
  119. package/dist/material/lambert.js +4 -1
  120. package/dist/material/lambert.js.map +1 -1
  121. package/dist/material/material.js +362 -300
  122. package/dist/material/material.js.map +1 -1
  123. package/dist/material/meshmaterial.js +118 -45
  124. package/dist/material/meshmaterial.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  126. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  128. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  130. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  132. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  133. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  134. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  135. package/dist/material/mixins/lit.js +223 -83
  136. package/dist/material/mixins/lit.js.map +1 -1
  137. package/dist/material/mixins/pbr/common.js +31 -206
  138. package/dist/material/mixins/pbr/common.js.map +1 -1
  139. package/dist/material/mtoon.js +1 -1
  140. package/dist/material/mtoon.js.map +1 -1
  141. package/dist/material/pbrmr.js +3 -0
  142. package/dist/material/pbrmr.js.map +1 -1
  143. package/dist/material/pbrsg.js +3 -0
  144. package/dist/material/pbrsg.js.map +1 -1
  145. package/dist/material/sdf_debug.js +78 -0
  146. package/dist/material/sdf_debug.js.map +1 -0
  147. package/dist/material/shader/helper.js +733 -190
  148. package/dist/material/shader/helper.js.map +1 -1
  149. package/dist/material/shader/terrain_blend.js +204 -43
  150. package/dist/material/shader/terrain_blend.js.map +1 -1
  151. package/dist/material/skin.js +331 -297
  152. package/dist/material/skin.js.map +1 -1
  153. package/dist/material/skinprofile.js +1058 -0
  154. package/dist/material/skinprofile.js.map +1 -0
  155. package/dist/material/sss.js +353 -0
  156. package/dist/material/sss.js.map +1 -0
  157. package/dist/material/sss_kernel.js +265 -0
  158. package/dist/material/sss_kernel.js.map +1 -0
  159. package/dist/material/sssprofile.js +879 -0
  160. package/dist/material/sssprofile.js.map +1 -0
  161. package/dist/material/subsurfaceprofile.js +4 -8
  162. package/dist/material/subsurfaceprofile.js.map +1 -1
  163. package/dist/material/terrain-cm.js +464 -188
  164. package/dist/material/terrain-cm.js.map +1 -1
  165. package/dist/material/unlit.js +3 -0
  166. package/dist/material/unlit.js.map +1 -1
  167. package/dist/material/water.js +2009 -201
  168. package/dist/material/water.js.map +1 -1
  169. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  172. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  173. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  174. package/dist/physics/character.js +226 -0
  175. package/dist/physics/character.js.map +1 -0
  176. package/dist/physics/collider.js +209 -0
  177. package/dist/physics/collider.js.map +1 -0
  178. package/dist/physics/events.js +79 -0
  179. package/dist/physics/events.js.map +1 -0
  180. package/dist/physics/joint.js +272 -0
  181. package/dist/physics/joint.js.map +1 -0
  182. package/dist/physics/node_physics.js +234 -0
  183. package/dist/physics/node_physics.js.map +1 -0
  184. package/dist/physics/part.js +91 -0
  185. package/dist/physics/part.js.map +1 -0
  186. package/dist/physics/rigid_body.js +379 -0
  187. package/dist/physics/rigid_body.js.map +1 -0
  188. package/dist/physics/vehicle.js +335 -0
  189. package/dist/physics/vehicle.js.map +1 -0
  190. package/dist/physics/world.js +25 -0
  191. package/dist/physics/world.js.map +1 -0
  192. package/dist/posteffect/bloom.js +49 -14
  193. package/dist/posteffect/bloom.js.map +1 -1
  194. package/dist/posteffect/motionblur.js +668 -63
  195. package/dist/posteffect/motionblur.js.map +1 -1
  196. package/dist/posteffect/posteffect.js +12 -1
  197. package/dist/posteffect/posteffect.js.map +1 -1
  198. package/dist/posteffect/postsss.js +572 -0
  199. package/dist/posteffect/postsss.js.map +1 -0
  200. package/dist/posteffect/sao.js +48 -50
  201. package/dist/posteffect/sao.js.map +1 -1
  202. package/dist/posteffect/skinsss.js +605 -355
  203. package/dist/posteffect/skinsss.js.map +1 -1
  204. package/dist/posteffect/ssgi.js +91 -162
  205. package/dist/posteffect/ssgi.js.map +1 -1
  206. package/dist/posteffect/ssr.js +3 -11
  207. package/dist/posteffect/ssr.js.map +1 -1
  208. package/dist/posteffect/sss.js +34 -15
  209. package/dist/posteffect/sss.js.map +1 -1
  210. package/dist/posteffect/taa.js +1 -0
  211. package/dist/posteffect/taa.js.map +1 -1
  212. package/dist/render/abuffer_oit.js +40 -39
  213. package/dist/render/abuffer_oit.js.map +1 -1
  214. package/dist/render/clipmap.js +328 -62
  215. package/dist/render/clipmap.js.map +1 -1
  216. package/dist/render/cluster_light.js +958 -224
  217. package/dist/render/cluster_light.js.map +1 -1
  218. package/dist/render/cull_visitor.js +26 -5
  219. package/dist/render/cull_visitor.js.map +1 -1
  220. package/dist/render/debug_views.js +37 -0
  221. package/dist/render/debug_views.js.map +1 -0
  222. package/dist/render/depthpass.js +5 -1
  223. package/dist/render/depthpass.js.map +1 -1
  224. package/dist/render/drawable_mixin.js +53 -6
  225. package/dist/render/drawable_mixin.js.map +1 -1
  226. package/dist/render/dualdepthpeeling_oit.js +53 -53
  227. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  228. package/dist/render/envlight.js +196 -113
  229. package/dist/render/envlight.js.map +1 -1
  230. package/dist/render/fbm_wavegenerator.js +8 -13
  231. package/dist/render/fbm_wavegenerator.js.map +1 -1
  232. package/dist/render/fft_wavegenerator.js +268 -136
  233. package/dist/render/fft_wavegenerator.js.map +1 -1
  234. package/dist/render/gerstner_wavegenerator.js +113 -28
  235. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  236. package/dist/render/gi/probe_volume.js +1334 -0
  237. package/dist/render/gi/probe_volume.js.map +1 -0
  238. package/dist/render/gi/scene_gi.js +282 -0
  239. package/dist/render/gi/scene_gi.js.map +1 -0
  240. package/dist/render/gi/voxel_atlas.js +198 -0
  241. package/dist/render/gi/voxel_atlas.js.map +1 -0
  242. package/dist/render/gi/voxel_lighting.js +652 -0
  243. package/dist/render/gi/voxel_lighting.js.map +1 -0
  244. package/dist/render/gi/voxel_scene.js +642 -0
  245. package/dist/render/gi/voxel_scene.js.map +1 -0
  246. package/dist/render/gi/voxelize_pass.js +223 -0
  247. package/dist/render/gi/voxelize_pass.js.map +1 -0
  248. package/dist/render/globalbindgroup_allocator.js +3 -2
  249. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  250. package/dist/render/gpu_picking.js +9 -36
  251. package/dist/render/gpu_picking.js.map +1 -1
  252. package/dist/render/hzb.js +80 -22
  253. package/dist/render/hzb.js.map +1 -1
  254. package/dist/render/instance_culling.js +499 -0
  255. package/dist/render/instance_culling.js.map +1 -0
  256. package/dist/render/lightpass.js +23 -9
  257. package/dist/render/lightpass.js.map +1 -1
  258. package/dist/render/lod.js +46 -0
  259. package/dist/render/lod.js.map +1 -0
  260. package/dist/render/oit.js +11 -11
  261. package/dist/render/oit.js.map +1 -1
  262. package/dist/render/primitive.js +301 -9
  263. package/dist/render/primitive.js.map +1 -1
  264. package/dist/render/primitive_readback.js +209 -0
  265. package/dist/render/primitive_readback.js.map +1 -0
  266. package/dist/render/render_queue.js +198 -11
  267. package/dist/render/render_queue.js.map +1 -1
  268. package/dist/render/renderer.js +14 -7
  269. package/dist/render/renderer.js.map +1 -1
  270. package/dist/render/rendergraph/blackboard.js +15 -1
  271. package/dist/render/rendergraph/blackboard.js.map +1 -1
  272. package/dist/render/rendergraph/executor.js +136 -0
  273. package/dist/render/rendergraph/executor.js.map +1 -1
  274. package/dist/render/rendergraph/forward_plus_builder.js +585 -59
  275. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  276. package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
  277. package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
  278. package/dist/render/rendergraph/history_resources.js +8 -1
  279. package/dist/render/rendergraph/history_resources.js.map +1 -1
  280. package/dist/render/rendergraph/scene_render_context.js +31 -2
  281. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  282. package/dist/render/rendergraph/types.js.map +1 -1
  283. package/dist/render/renderpass.js +28 -5
  284. package/dist/render/renderpass.js.map +1 -1
  285. package/dist/render/sdf/box_allocator.js +98 -0
  286. package/dist/render/sdf/box_allocator.js.map +1 -0
  287. package/dist/render/sdf/global_sdf.js +865 -0
  288. package/dist/render/sdf/global_sdf.js.map +1 -0
  289. package/dist/render/sdf/scene_sdf.js +562 -0
  290. package/dist/render/sdf/scene_sdf.js.map +1 -0
  291. package/dist/render/sdf/sdf_atlas.js +227 -0
  292. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  293. package/dist/render/sdf/sdf_programs.js +42 -0
  294. package/dist/render/sdf/sdf_programs.js.map +1 -0
  295. package/dist/render/sdf/sdf_view.js +199 -0
  296. package/dist/render/sdf/sdf_view.js.map +1 -0
  297. package/dist/render/sdf/waterline.js +610 -0
  298. package/dist/render/sdf/waterline.js.map +1 -0
  299. package/dist/render/shadow_mask_pass.js +142 -25
  300. package/dist/render/shadow_mask_pass.js.map +1 -1
  301. package/dist/render/shore_wave_generator.js +1193 -0
  302. package/dist/render/shore_wave_generator.js.map +1 -0
  303. package/dist/render/sky.js +516 -86
  304. package/dist/render/sky.js.map +1 -1
  305. package/dist/render/transmission_thickness_pass.js +477 -0
  306. package/dist/render/transmission_thickness_pass.js.map +1 -0
  307. package/dist/render/underwater.js +524 -0
  308. package/dist/render/underwater.js.map +1 -0
  309. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  310. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  311. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  312. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  313. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  314. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  315. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  316. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  317. package/dist/render/volumetric_cloud/resources.js +380 -0
  318. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  319. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  320. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  321. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  322. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  323. package/dist/render/water_caustics.js +1195 -0
  324. package/dist/render/water_caustics.js.map +1 -0
  325. package/dist/render/water_foam.js +627 -0
  326. package/dist/render/water_foam.js.map +1 -0
  327. package/dist/render/water_interaction.js +1795 -0
  328. package/dist/render/water_interaction.js.map +1 -0
  329. package/dist/render/weightedblended_oit.js +36 -36
  330. package/dist/render/weightedblended_oit.js.map +1 -1
  331. package/dist/scene/basesprite.js +9 -4
  332. package/dist/scene/basesprite.js.map +1 -1
  333. package/dist/scene/batchgroup.js +108 -12
  334. package/dist/scene/batchgroup.js.map +1 -1
  335. package/dist/scene/environment.js +28 -7
  336. package/dist/scene/environment.js.map +1 -1
  337. package/dist/scene/foliage.js +1020 -0
  338. package/dist/scene/foliage.js.map +1 -0
  339. package/dist/scene/foliage_buckets.js +147 -0
  340. package/dist/scene/foliage_buckets.js.map +1 -0
  341. package/dist/scene/foliage_mask.js +358 -0
  342. package/dist/scene/foliage_mask.js.map +1 -0
  343. package/dist/scene/hair.js +15 -4
  344. package/dist/scene/hair.js.map +1 -1
  345. package/dist/scene/light.js +179 -13
  346. package/dist/scene/light.js.map +1 -1
  347. package/dist/scene/mesh.js +327 -45
  348. package/dist/scene/mesh.js.map +1 -1
  349. package/dist/scene/meshdrawable.js +6 -0
  350. package/dist/scene/meshdrawable.js.map +1 -1
  351. package/dist/scene/msdftext.js +9 -3
  352. package/dist/scene/msdftext.js.map +1 -1
  353. package/dist/scene/msdftextsprite.js +9 -3
  354. package/dist/scene/msdftextsprite.js.map +1 -1
  355. package/dist/scene/particlesys.js +8 -2
  356. package/dist/scene/particlesys.js.map +1 -1
  357. package/dist/scene/physics_settings.js +157 -0
  358. package/dist/scene/physics_settings.js.map +1 -0
  359. package/dist/scene/scene.js +190 -44
  360. package/dist/scene/scene.js.map +1 -1
  361. package/dist/scene/scene_node.js +147 -6
  362. package/dist/scene/scene_node.js.map +1 -1
  363. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  364. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  365. package/dist/scene/terrain-cm/grass.js +881 -42
  366. package/dist/scene/terrain-cm/grass.js.map +1 -1
  367. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  368. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  369. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  370. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  371. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  372. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  373. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  374. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  375. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  376. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  377. package/dist/scene/update_queue.js +54 -0
  378. package/dist/scene/update_queue.js.map +1 -0
  379. package/dist/scene/water.js +997 -96
  380. package/dist/scene/water.js.map +1 -1
  381. package/dist/scene/water_surface_sampler.js +324 -0
  382. package/dist/scene/water_surface_sampler.js.map +1 -0
  383. package/dist/scene/wind.js +317 -0
  384. package/dist/scene/wind.js.map +1 -0
  385. package/dist/shaders/atmosphere.js +388 -166
  386. package/dist/shaders/atmosphere.js.map +1 -1
  387. package/dist/shaders/fog.js +100 -32
  388. package/dist/shaders/fog.js.map +1 -1
  389. package/dist/shaders/gi.js +365 -0
  390. package/dist/shaders/gi.js.map +1 -0
  391. package/dist/shaders/ltc_rect.js +202 -0
  392. package/dist/shaders/ltc_rect.js.map +1 -0
  393. package/dist/shaders/misc.js +1 -10
  394. package/dist/shaders/misc.js.map +1 -1
  395. package/dist/shaders/noise.js +5 -1
  396. package/dist/shaders/noise.js.map +1 -1
  397. package/dist/shaders/probes.js +309 -0
  398. package/dist/shaders/probes.js.map +1 -0
  399. package/dist/shaders/sdf.js +537 -0
  400. package/dist/shaders/sdf.js.map +1 -0
  401. package/dist/shaders/shadow.js +104 -70
  402. package/dist/shaders/shadow.js.map +1 -1
  403. package/dist/shaders/skin_brdf.js +243 -0
  404. package/dist/shaders/skin_brdf.js.map +1 -0
  405. package/dist/shaders/ssr.js +6 -159
  406. package/dist/shaders/ssr.js.map +1 -1
  407. package/dist/shaders/temporal.js +38 -27
  408. package/dist/shaders/temporal.js.map +1 -1
  409. package/dist/shaders/water.js +40 -87
  410. package/dist/shaders/water.js.map +1 -1
  411. package/dist/shaders/water_medium.js +42 -0
  412. package/dist/shaders/water_medium.js.map +1 -0
  413. package/dist/shadow/dom.js +110 -19
  414. package/dist/shadow/dom.js.map +1 -1
  415. package/dist/shadow/esm.js +3 -3
  416. package/dist/shadow/esm.js.map +1 -1
  417. package/dist/shadow/pcf_opt.js +15 -48
  418. package/dist/shadow/pcf_opt.js.map +1 -1
  419. package/dist/shadow/pcf_pd.js +15 -53
  420. package/dist/shadow/pcf_pd.js.map +1 -1
  421. package/dist/shadow/pcss.js +34 -9
  422. package/dist/shadow/pcss.js.map +1 -1
  423. package/dist/shadow/shadow_impl.js +3 -8
  424. package/dist/shadow/shadow_impl.js.map +1 -1
  425. package/dist/shadow/shadow_region.js +87 -49
  426. package/dist/shadow/shadow_region.js.map +1 -1
  427. package/dist/shadow/shadowmapper.js +93 -53
  428. package/dist/shadow/shadowmapper.js.map +1 -1
  429. package/dist/shadow/ssm.js +18 -72
  430. package/dist/shadow/ssm.js.map +1 -1
  431. package/dist/shadow/vsm.js +3 -3
  432. package/dist/shadow/vsm.js.map +1 -1
  433. package/dist/shapes/shape.js +44 -1
  434. package/dist/shapes/shape.js.map +1 -1
  435. package/dist/utility/buoyancy.js +287 -0
  436. package/dist/utility/buoyancy.js.map +1 -0
  437. package/dist/utility/physical.js +10 -1
  438. package/dist/utility/physical.js.map +1 -1
  439. package/dist/utility/pmrem.js +17 -43
  440. package/dist/utility/pmrem.js.map +1 -1
  441. package/dist/utility/sdf/bake.js +435 -0
  442. package/dist/utility/sdf/bake.js.map +1 -0
  443. package/dist/utility/sdf/bvh.js +576 -0
  444. package/dist/utility/sdf/bvh.js.map +1 -0
  445. package/dist/utility/serialization/manager.js +36 -6
  446. package/dist/utility/serialization/manager.js.map +1 -1
  447. package/dist/utility/serialization/scene/animation.js +77 -7
  448. package/dist/utility/serialization/scene/animation.js.map +1 -1
  449. package/dist/utility/serialization/scene/batch.js +11 -4
  450. package/dist/utility/serialization/scene/batch.js.map +1 -1
  451. package/dist/utility/serialization/scene/camera.js +140 -279
  452. package/dist/utility/serialization/scene/camera.js.map +1 -1
  453. package/dist/utility/serialization/scene/cloth.js +25 -0
  454. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  455. package/dist/utility/serialization/scene/common.js +14 -6
  456. package/dist/utility/serialization/scene/common.js.map +1 -1
  457. package/dist/utility/serialization/scene/foliage.js +821 -0
  458. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  459. package/dist/utility/serialization/scene/hair.js +11 -4
  460. package/dist/utility/serialization/scene/hair.js.map +1 -1
  461. package/dist/utility/serialization/scene/light.js +115 -7
  462. package/dist/utility/serialization/scene/light.js.map +1 -1
  463. package/dist/utility/serialization/scene/material.js +388 -220
  464. package/dist/utility/serialization/scene/material.js.map +1 -1
  465. package/dist/utility/serialization/scene/mesh.js +69 -4
  466. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  467. package/dist/utility/serialization/scene/node.js +140 -5
  468. package/dist/utility/serialization/scene/node.js.map +1 -1
  469. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  470. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  471. package/dist/utility/serialization/scene/particle.js +11 -4
  472. package/dist/utility/serialization/scene/particle.js.map +1 -1
  473. package/dist/utility/serialization/scene/physics.js +120 -0
  474. package/dist/utility/serialization/scene/physics.js.map +1 -0
  475. package/dist/utility/serialization/scene/primitive.js +124 -10
  476. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  477. package/dist/utility/serialization/scene/scene.js +1687 -51
  478. package/dist/utility/serialization/scene/scene.js.map +1 -1
  479. package/dist/utility/serialization/scene/sprite.js +11 -4
  480. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  481. package/dist/utility/serialization/scene/terrain.js +163 -33
  482. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  483. package/dist/utility/serialization/scene/text.js +11 -4
  484. package/dist/utility/serialization/scene/text.js.map +1 -1
  485. package/dist/utility/serialization/scene/water.js +2473 -114
  486. package/dist/utility/serialization/scene/water.js.map +1 -1
  487. package/dist/utility/serialization/types.js.map +1 -1
  488. package/dist/utility/shprojector.js +97 -109
  489. package/dist/utility/shprojector.js.map +1 -1
  490. package/dist/utility/textures/foam.js +170 -0
  491. package/dist/utility/textures/foam.js.map +1 -0
  492. package/dist/utility/textures/ggxlut.js +17 -43
  493. package/dist/utility/textures/ggxlut.js.map +1 -1
  494. package/dist/utility/textures/ltcdata.js +4 -4
  495. package/dist/utility/textures/ltcdata.js.map +1 -1
  496. package/dist/utility/textures/ltclut.js +16 -6
  497. package/dist/utility/textures/ltclut.js.map +1 -1
  498. package/dist/utility/unsupported.js +24 -0
  499. package/dist/utility/unsupported.js.map +1 -0
  500. package/dist/values.js +13 -1
  501. package/dist/values.js.map +1 -1
  502. package/package.json +25 -12
  503. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  504. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  505. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  506. package/src/asset/meshoptimizer/LICENSE +21 -0
@@ -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 { DEPTH_CLEAR_VALUE, 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 (\r\n this.drawContext.materialFlags &\r\n (MaterialVaryingFlags.SCENE_STORE_ROUGHNESS | MaterialVaryingFlags.SCENE_STORE_NORMAL)\r\n ) {\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(), DEPTH_CLEAR_VALUE, 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), DEPTH_CLEAR_VALUE, 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(), DEPTH_CLEAR_VALUE, 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","SCENE_STORE_ROUGHNESS","SCENE_STORE_NORMAL","outRoughness","outputFragmentColor","applyUniformValues","bindGroup","ctx","pass","setValue","setTexture","setBuffer","isWebGL1","createTexture2DArray","createTexture2D","pushDeviceStates","fbDetail","setFramebuffer","setColorAttachmentLayer","clearFrameBuffer","zero","DEPTH_CLEAR_VALUE","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 { DEPTH_CLEAR_VALUE, 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\nimport type { VirtualTexture } from '../render/virtualtexture/virtual_texture';\r\nimport {\r\n blendTerrainAlbedo,\r\n blendTerrainDetailNormal,\r\n blendTerrainRoughness,\r\n terrainSplatMaskCount\r\n} from './shader/terrain_blend';\r\nimport type { TerrainHexTiling, TerrainUVGrad } from './shader/terrain_blend';\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 /** Per layer hex tiling (rotation amount, scale amount, contrast, enabled) */\r\n detailHexParams: 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 FEATURE_VIRTUAL_TEXTURE = this.defineFeature();\r\n /** Bit i: detail layer i uses hex tiling */\r\n private static readonly FEATURE_HEX_TILING = 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 private _virtualTexture: Nullable<VirtualTexture>;\r\n private _contentVersion: number;\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 this.useFeature(ClipmapTerrainMaterial.FEATURE_VIRTUAL_TEXTURE, '');\r\n this.useFeature(ClipmapTerrainMaterial.FEATURE_HEX_TILING, 0);\r\n this._virtualTexture = null;\r\n this._contentVersion = 0;\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 /**\r\n * Bumped whenever a splat or detail texture is replaced. The detail parameters, the layer\r\n * count and the roughness are uniforms, compared directly by the virtual texture owner.\r\n * @internal\r\n */\r\n get contentVersion() {\r\n return this._contentVersion;\r\n }\r\n /**\r\n * The runtime virtual texture holding the blended layers, null to blend them per pixel.\r\n * Only used on WebGPU with at least one detail layer.\r\n * @internal\r\n */\r\n get virtualTexture() {\r\n return this._virtualTexture;\r\n }\r\n set virtualTexture(vt: Nullable<VirtualTexture>) {\r\n this._virtualTexture = vt;\r\n this.updateVirtualTextureFeature();\r\n }\r\n /** Whether shading reads the runtime virtual texture instead of blending the layers @internal */\r\n get virtualTextureUsed() {\r\n return !!this.featureUsed<string>(ClipmapTerrainMaterial.FEATURE_VIRTUAL_TEXTURE);\r\n }\r\n /**\r\n * The feature value is the layout of the virtual texture, which the shader bakes in (level\r\n * count and sizes, page and atlas geometry), so a rebuilt texture gets its own program.\r\n */\r\n private updateVirtualTextureFeature() {\r\n const vt = this._virtualTexture;\r\n const used = !!vt && getDevice().type === 'webgpu' && this._detailMapInfo.numDetailMaps > 0;\r\n this.useFeature(\r\n ClipmapTerrainMaterial.FEATURE_VIRTUAL_TEXTURE,\r\n used ? `${vt.levels[0].pagesX}x${vt.levels[0].pagesY}:${vt.pageSize}:${vt.border}:${vt.atlasSize}` : ''\r\n );\r\n }\r\n /** @internal */\r\n get detailMapParams() {\r\n return this._detailMapInfo.detailMapParams;\r\n }\r\n /** @internal */\r\n get detailHexParams() {\r\n return this._detailMapInfo.detailHexParams;\r\n }\r\n /** Bit i set: detail layer i is hex tiled. @internal */\r\n get hexTilingMask() {\r\n return this.featureUsed<number>(ClipmapTerrainMaterial.FEATURE_HEX_TILING);\r\n }\r\n private updateHexTilingFeature() {\r\n let mask = 0;\r\n for (let i = 0; i < this._detailMapInfo.numDetailMaps; i++) {\r\n if (this._detailMapInfo.detailHexParams[i * 4 + 3] !== 0) {\r\n mask |= 1 << i;\r\n }\r\n }\r\n this.useFeature(ClipmapTerrainMaterial.FEATURE_HEX_TILING, mask);\r\n }\r\n /**\r\n * Whether a detail layer is hex tiled to break up its repetition (Mikkelsen, Practical\r\n * Real-Time Hex-Tiling, 2022). Costs three texture samples per layer instead of one, only\r\n * when the layers are blended: once per page with the runtime virtual texture.\r\n */\r\n getDetailMapHexTiling(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 false;\r\n }\r\n return this._detailMapInfo.detailHexParams[index * 4 + 3] !== 0;\r\n }\r\n setDetailMapHexTiling(index: number, enabled: boolean) {\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 this._detailMapInfo.detailHexParams[index * 4 + 3] = enabled ? 1 : 0;\r\n this.updateHexTilingFeature();\r\n }\r\n /**\r\n * Hex tiling parameters of a detail layer as [rotation, scale, contrast], MaterialX\r\n * hextiledimage inputs:\r\n * - rotation: 0 to 1, how much each tile is turned at random, 1 for any angle\r\n * - scale: 0 to 1, how much each tile is resized at random, 1 for 0.5 to 2 times\r\n * - contrast: 0 to 1, how much brighter tiles win at the seams between tiles\r\n */\r\n getDetailMapHexParams(index: number): [number, number, number] {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return [1, 1, 0.5];\r\n }\r\n const p = this._detailMapInfo.detailHexParams;\r\n return [p[index * 4], p[index * 4 + 1], p[index * 4 + 2]];\r\n }\r\n setDetailMapHexParams(index: number, rotation: number, scale: number, contrast: 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 const p = this._detailMapInfo.detailHexParams;\r\n p[index * 4] = rotation;\r\n p[index * 4 + 1] = scale;\r\n p[index * 4 + 2] = contrast;\r\n this.uniformChanged();\r\n }\r\n /** @internal */\r\n get detailMapArray() {\r\n return this._detailMapInfo.detailMap.get();\r\n }\r\n /** @internal */\r\n get detailNormalMapArray() {\r\n return this._detailMapInfo.detailNormalMap?.get() ?? null;\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 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.detailHexParams.set([1, 1, 0.5, 0], i * 4);\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.detailHexParams.set([1, 1, 0.5, 0], i * 4);\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 this.updateVirtualTextureFeature();\r\n this.updateHexTilingFeature();\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._contentVersion++;\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 this._contentVersion++;\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 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 this._contentVersion++;\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 /** @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._contentVersion++;\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 /** Raw rgb of a detail normal map, see blendTerrainDetailNormal */\r\n sampleDetailNormalMap(\r\n scope: PBInsideFunctionScope,\r\n index: number,\r\n texCoord: PBShaderExp,\r\n ddx: PBShaderExp | null = null,\r\n ddy: PBShaderExp | null = null\r\n ) {\r\n const pb = scope.$builder;\r\n return ddx && ddy\r\n ? pb.textureArraySampleGrad(scope.detailNormalMap, texCoord, index, ddx, ddy).rgb\r\n : pb.textureArraySample(scope.detailNormalMap, texCoord, index).rgb;\r\n }\r\n /**\r\n * Gradients of the terrain uv and the hex tiled layers, for the blend functions; null when no\r\n * layer is hex tiled, so the others keep sampling with implicit derivatives.\r\n */\r\n private hexTilingInputs(scope: PBInsideFunctionScope): [TerrainUVGrad | null, TerrainHexTiling | null] {\r\n const mask = this.hexTilingMask;\r\n if (!mask) {\r\n return [null, null];\r\n }\r\n const pb = scope.$builder;\r\n return [\r\n { ddx: pb.dpdx(scope.$inputs.uv), ddy: pb.dpdy(scope.$inputs.uv) },\r\n { mask, params: scope.detailHexParams }\r\n ];\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 const numDetailMaps = that.featureUsed<number>(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP);\r\n pb.func(funcName, [pb.mat3('TBN'), ...this.splatMaskParams(scope, numDetailMaps)], function () {\r\n this.$l.detailNormal = blendTerrainDetailNormal(\r\n this,\r\n numDetailMaps,\r\n that.splatMaskLocals(this, numDetailMaps),\r\n this.$inputs.uv,\r\n this.detailParams,\r\n (scope, i, uv, ddx, ddy) => that.sampleDetailNormalMap(scope, i, uv, ddx, ddy),\r\n ...that.hexTilingInputs(this)\r\n );\r\n this.$return(pb.normalize(pb.mul(this.TBN, this.detailNormal)));\r\n });\r\n return pb.getGlobalScope()[funcName](TBN, ...this.splatMaskArgs(scope, numDetailMaps));\r\n }\r\n /** Parameter declarations for passing the splat masks sampled in the main scope */\r\n private splatMaskParams(scope: PBInsideFunctionScope, numDetailMaps: number) {\r\n const pb = scope.$builder;\r\n return Array.from({ length: terrainSplatMaskCount(numDetailMaps) }, (_, i) => pb.vec4(`mask${i}`));\r\n }\r\n /** The splat mask parameters inside a function declared with splatMaskParams() */\r\n private splatMaskLocals(scope: PBInsideFunctionScope, numDetailMaps: number) {\r\n return Array.from(\r\n { length: terrainSplatMaskCount(numDetailMaps) },\r\n (_, i) => scope[`mask${i}`] as PBShaderExp\r\n );\r\n }\r\n /** The splat masks sampled once in the main scope, see fragmentShader() */\r\n private splatMaskArgs(scope: PBInsideFunctionScope, numDetailMaps: number) {\r\n return Array.from(\r\n { length: terrainSplatMaskCount(numDetailMaps) },\r\n (_, i) => scope[`terrainSplatMask${i}`] as PBShaderExp\r\n );\r\n }\r\n getNormalTexCoord: (scope: PBInsideFunctionScope) => PBShaderExp = function (scope) {\r\n return scope.$inputs.uv;\r\n };\r\n /** Samples the splat weights of detail layers [4 * index, 4 * index + 3] */\r\n sampleSplatMask(scope: PBInsideFunctionScope, index: number) {\r\n const pb = scope.$builder;\r\n return pb.textureArraySample(scope.splatMap, scope.$inputs.uv, index);\r\n }\r\n calculateRoughness(scope: PBInsideFunctionScope, albedo: PBShaderExp, normal: PBShaderExp) {\r\n const base = super.calculateRoughness(scope, albedo, normal);\r\n const numDetailMaps = this.featureUsed<number>(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP);\r\n if (numDetailMaps === 0) {\r\n return base;\r\n }\r\n if (this.virtualTextureUsed) {\r\n // This runs inside PBRLight's own function, so the roughness read from the virtual texture\r\n // comes in through albedo.a (see sampleVirtualTexture); nothing reads the terrain albedo\r\n // alpha otherwise (opaque, no subsurface outputs). The page fill already blended in the\r\n // material roughness.\r\n return albedo.a;\r\n }\r\n const that = this;\r\n const pb = scope.$builder;\r\n const funcName = 'getTerrainRoughness';\r\n pb.func(funcName, [pb.float('base')], function () {\r\n const masks: PBShaderExp[] = [];\r\n for (let i = 0; i < terrainSplatMaskCount(numDetailMaps); i++) {\r\n this.$l[`mask${i}`] = that.sampleSplatMask(this, i);\r\n masks.push(this[`mask${i}`]);\r\n }\r\n this.$return(blendTerrainRoughness(this, numDetailMaps, masks, this.detailParams, this.base));\r\n });\r\n return pb.getGlobalScope()[funcName](base) as PBShaderExp;\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 const numDetailMaps = that.featureUsed<number>(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP);\r\n pb.func(funcName, this.splatMaskParams(scope, numDetailMaps), function () {\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 = blendTerrainAlbedo(\r\n this,\r\n numDetailMaps,\r\n that.splatMaskLocals(this, numDetailMaps),\r\n this.$inputs.uv,\r\n this.detailParams,\r\n (scope, i, uv, ddx, ddy) =>\r\n ddx && ddy\r\n ? pb.textureArraySampleGrad(scope.detailAlbedoMap, uv, i, ddx, ddy)\r\n : pb.textureArraySample(scope.detailAlbedoMap, uv, i),\r\n ...that.hexTilingInputs(this)\r\n );\r\n this.$return(pb.vec4(this.color, 1));\r\n }\r\n });\r\n return pb.getGlobalScope()[funcName](...this.splatMaskArgs(scope, numDetailMaps)) as PBShaderExp;\r\n }\r\n /**\r\n * Reads the blended layers from the runtime virtual texture: (linear albedo, roughness) is\r\n * returned, the world space normal written to `normal`.\r\n */\r\n sampleVirtualTexture(scope: PBInsideFunctionScope, normal: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const vt = this._virtualTexture!;\r\n const maxLevel = vt.levels.length - 1;\r\n pb.func('zTerrainSampleRVT', [pb.vec3('normal').out()], function () {\r\n this.$l.uv = this.$inputs.uv;\r\n this.$l.level = vt.computeLevel(this, this.uv);\r\n this.$l.level0 = pb.floor(this.level);\r\n this.$l.level1 = pb.min(pb.add(this.level0, 1), maxLevel);\r\n this.$l.loc0 = vt.resolve(this, pb.uint(this.level0), this.uv);\r\n this.$l.loc1 = vt.resolve(this, pb.uint(this.level1), this.uv);\r\n this.$l.t = pb.select(pb.float(0), pb.sub(this.level, this.level0), pb.equal(this.loc1.z, this.level1));\r\n this.$l.baseColor = pb.mix(\r\n pb.textureSampleLevel(this.zTerrainRVT0, this.loc0.xy, 0),\r\n pb.textureSampleLevel(this.zTerrainRVT0, this.loc1.xy, 0),\r\n this.t\r\n );\r\n this.$l.normalRoughness = pb.mix(\r\n pb.textureSampleLevel(this.zTerrainRVT1, this.loc0.xy, 0),\r\n pb.textureSampleLevel(this.zTerrainRVT1, this.loc1.xy, 0),\r\n this.t\r\n );\r\n // VirtualTextureUnpackNormal\r\n this.$l.nxz = pb.sub(pb.mul(this.normalRoughness.xz, 255 / 127), pb.vec2(1));\r\n this.normal = pb.normalize(\r\n pb.vec3(this.nxz.x, pb.sqrt(pb.clamp(pb.sub(1, pb.dot(this.nxz, this.nxz)), 0, 1)), this.nxz.y)\r\n );\r\n // sRGB decode\r\n this.$l.c = this.baseColor.rgb;\r\n this.$l.linear = pb.mix(\r\n pb.pow(pb.div(pb.add(this.c, pb.vec3(0.055)), 1.055), pb.vec3(2.4)),\r\n pb.div(this.c, 12.92),\r\n pb.vec3(pb.lessThanEqual(this.c, pb.vec3(0.04045)))\r\n );\r\n this.$return(pb.vec4(this.linear, this.normalRoughness.y));\r\n });\r\n return scope.zTerrainSampleRVT(normal) as PBShaderExp;\r\n }\r\n /**\r\n * Height of a clipmap vertex, blended towards the next coarser level across the outer part of\r\n * its ring (the transition regions of Hoppe's GPU geometry clipmaps).\r\n *\r\n * The outer boundary of level L lies on grid lines of level L + 1, so its vertices already sit\r\n * where the coarser ring's do; only their heights have to agree. hC is the height the coarser\r\n * mesh has at the vertex: its own height where a coarse vertex coincides, the mean of the two\r\n * coarse vertices around the edge midpoints, the mean of the four corners at cell centres\r\n * (never on a boundary, only has to be continuous). With alpha reaching 1 before the boundary,\r\n * boundary vertices lie exactly on the coarse edges and the rings meet without T-junction\r\n * cracks. The inner boundary needs no blend: it is the finer level's outer one.\r\n *\r\n * @param uv - Height map coordinate of the vertex\r\n * @param gridCoord - Global grid coordinate of the vertex, in grid cells\r\n * @param pos - World XZ of the vertex\r\n */\r\n sampleHeightMap(\r\n scope: PBInsideFunctionScope,\r\n uv: PBShaderExp,\r\n gridCoord: PBShaderExp,\r\n pos: PBShaderExp,\r\n levelStart: PBShaderExp,\r\n levelDiff: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n // Blend over the outer 40% of the ring, fully coarse over its last 5% so boundary vertices\r\n // are unaffected by rounding in the ring ratio.\r\n const transitionStart = 0.6;\r\n const transitionEnd = 0.95;\r\n pb.func(\r\n 'sampleHeightMap',\r\n [pb.vec2('uv'), pb.vec2('gridCoord'), pb.vec2('pos'), pb.vec4('levelStart'), pb.vec4('levelDiff')],\r\n function () {\r\n this.$l.h = 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.max(pb.max(this.ratio.x, this.ratio.y), pb.max(this.ratio.z, this.ratio.w));\r\n this.$l.alpha = pb.clamp(\r\n pb.div(pb.sub(this.maxVal, transitionStart), transitionEnd - transitionStart),\r\n 0,\r\n 1\r\n );\r\n this.$if(pb.greaterThan(this.alpha, 0), function () {\r\n this.$l.levelScale = pb.exp2(this.$inputs.miplevel);\r\n // Vertex index in this level; the coarser level's vertices are its even ones\r\n this.$l.index = pb.div(this.gridCoord, this.levelScale);\r\n this.$l.odd = pb.sub(this.index, pb.mul(pb.floor(pb.mul(this.index, 0.5)), 2));\r\n // Height map distance to the neighbouring coarse vertices along the odd axes\r\n this.$l.d = pb.div(\r\n pb.mul(this.odd, pb.mul(this.levelScale, this.clipmapGridInfo.x)),\r\n pb.sub(this.region.zw, this.region.xy)\r\n );\r\n this.$l.coarseLevel = pb.add(this.$inputs.miplevel, 1);\r\n this.$l.hc = pb.mul(\r\n pb.add(\r\n pb.add(\r\n pb.textureSampleLevel(this.heightMap, pb.sub(this.uv, this.d), this.coarseLevel).r,\r\n pb.textureSampleLevel(this.heightMap, pb.add(this.uv, this.d), this.coarseLevel).r\r\n ),\r\n pb.add(\r\n pb.textureSampleLevel(\r\n this.heightMap,\r\n pb.add(this.uv, pb.vec2(this.d.x, pb.neg(this.d.y))),\r\n this.coarseLevel\r\n ).r,\r\n pb.textureSampleLevel(\r\n this.heightMap,\r\n pb.add(this.uv, pb.vec2(pb.neg(this.d.x), this.d.y)),\r\n this.coarseLevel\r\n ).r\r\n )\r\n ),\r\n 0.25\r\n );\r\n this.h = pb.mix(this.h, this.hc, this.alpha);\r\n });\r\n this.$return(this.h);\r\n }\r\n );\r\n return scope.sampleHeightMap(uv, gridCoord, pos, levelStart, levelDiff);\r\n }\r\n /**\r\n * Terrain tangent frame at the fragment, differentiated from the height map itself.\r\n *\r\n * Per-vertex normals only see the mesh resolution and blur slopes: a one-texel peak gets an\r\n * upward normal at its tip and half the real slope around it. Differentiating the bilinear\r\n * height field per pixel gives the slopes the geometry actually has, and keeps height map\r\n * detail on the coarse outer rings.\r\n */\r\n calculateTerrainTBN(\r\n scope: PBInsideFunctionScope,\r\n tangent: PBShaderExp,\r\n bitangent: PBShaderExp,\r\n normal: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const textureLod = this.drawContext.device.getDeviceCaps().shaderCaps.supportShaderTextureLod;\r\n pb.func('calcTerrainTBN', [pb.vec3('t').out(), pb.vec3('b').out(), pb.vec3('n').out()], function () {\r\n if (textureLod) {\r\n // Differentiate on the mip whose texels match the pixel footprint, so distant terrain\r\n // does not alias.\r\n this.$l.texCoord = pb.mul(this.$inputs.uv, this.heightMapSize.xy);\r\n this.$l.footprint = pb.max(pb.length(pb.dpdx(this.texCoord)), pb.length(pb.dpdy(this.texCoord)));\r\n this.$l.lod = pb.max(pb.log2(pb.max(this.footprint, 0.0001)), 0);\r\n } else {\r\n this.$l.lod = pb.float(0);\r\n }\r\n // Half a texel either way: on a bilinear field that yields the full slope of each cell\r\n // everywhere but within half a texel of a crest or foot.\r\n this.$l.offset = pb.mul(this.heightMapSize.zw, pb.mul(pb.exp2(this.lod), 0.5));\r\n const sample = (scope: PBInsideFunctionScope, uv: PBShaderExp) =>\r\n textureLod\r\n ? pb.textureSampleLevel(scope.heightMap, uv, scope.lod).r\r\n : pb.textureSample(scope.heightMap, uv).r;\r\n this.$l.hL = sample(this, pb.sub(this.$inputs.uv, pb.vec2(this.offset.x, 0)));\r\n this.$l.hR = sample(this, pb.add(this.$inputs.uv, pb.vec2(this.offset.x, 0)));\r\n this.$l.hU = sample(this, pb.sub(this.$inputs.uv, pb.vec2(0, this.offset.y)));\r\n this.$l.hD = sample(this, pb.add(this.$inputs.uv, pb.vec2(0, this.offset.y)));\r\n // World-space distance between the two samples of each difference\r\n this.$l.sampleDist = pb.mul(pb.sub(this.region.zw, this.region.xy), pb.mul(this.offset, 2));\r\n this.$l.dHdU = pb.div(pb.mul(pb.sub(this.hR, this.hL), this.terrainScale.y), this.sampleDist.x);\r\n this.$l.dHdV = pb.div(pb.mul(pb.sub(this.hD, this.hU), this.terrainScale.y), this.sampleDist.y);\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 return scope.calcTerrainTBN(tangent, bitangent, normal) 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.localPos = scope.$inputs.position.xy;\r\n // position.z = -side flags a seam midpoint (see Clipmap.generateSeamMesh). When the seam edge\r\n // lies outside the region, clamping would line its flaps up along the border as vertical\r\n // curtains, so the midpoint takes its neighbour's local position instead: both then run the\r\n // exact same math below, land on the same point, and the flap degenerates.\r\n scope.$l.seamSide = pb.neg(scope.$inputs.position.z);\r\n scope.$if(pb.greaterThan(scope.seamSide, 0.5), function () {\r\n this.$l.probeLocal = pb.mul(this.clipmapMatrix, pb.vec4(this.localPos, 0, 1)).xy;\r\n this.$l.probe = pb.mul(\r\n ShaderHelper.getWorldMatrix(this),\r\n pb.vec4(this.probeLocal.x, 0, this.probeLocal.y, 1)\r\n ).xz;\r\n // Sides 1 and 3 run along local x (world x, seams are never rotated), so the border they\r\n // can lie beyond is a z one; sides 2 and 4 run along z.\r\n this.$l.alongX = pb.greaterThan(pb.mod(this.seamSide, 2), 0.5);\r\n this.$l.outside = pb.or(\r\n pb.and(\r\n this.alongX,\r\n pb.or(pb.lessThan(this.probe.y, this.region.y), pb.greaterThan(this.probe.y, this.region.w))\r\n ),\r\n pb.and(\r\n pb.not(this.alongX),\r\n pb.or(pb.lessThan(this.probe.x, this.region.x), pb.greaterThan(this.probe.x, this.region.z))\r\n )\r\n );\r\n this.$if(this.outside, function () {\r\n // The previous seam vertex sits one unit back along the side: -x, -y, +x, +y for sides 1..4\r\n this.$l.dir = pb.sub(pb.mul(pb.float(pb.greaterThan(this.seamSide, 2.5)), 2), 1);\r\n this.localPos = pb.add(\r\n this.localPos,\r\n pb.mul(pb.vec2(pb.float(this.alongX), pb.float(pb.not(this.alongX))), this.dir)\r\n );\r\n });\r\n });\r\n scope.$l.clipmapPos = pb.mul(scope.clipmapMatrix, pb.vec4(scope.localPos, 0, 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 // Heights are evaluated at the unclamped grid point: every level computes the same function\r\n // of its own grid, which keeps the rings matching. Beyond the region the sampler clamps to\r\n // the edge texels, the same heights the clamped position would get.\r\n scope.$l.gridPos = scope.clipmapWorldPos.xz;\r\n scope.$l.gridUV = pb.div(\r\n pb.sub(scope.gridPos, scope.region.xy),\r\n pb.sub(scope.region.zw, scope.region.xy)\r\n );\r\n // Global grid coordinate in cells, see ClipmapGatherContext.gridOriginX\r\n scope.$l.gridCoord = pb.floor(\r\n pb.add(pb.div(pb.add(scope.clipmapPos, scope.clipmapGridInfo.yz), scope.clipmapGridInfo.x), 0.5)\r\n );\r\n // Keep the grid inside the terrain region instead of discarding fragments outside of it,\r\n // which would cost early-Z on the largest occluder in the scene. The clipmap grid is\r\n // axis-aligned, so clamping collapses triangles lying outside into zero-area ones and snaps\r\n // the ones crossing the border exactly onto it.\r\n scope.clipmapWorldPos = pb.vec3(\r\n pb.clamp(scope.clipmapWorldPos.x, scope.region.x, scope.region.z),\r\n scope.clipmapWorldPos.y,\r\n pb.clamp(scope.clipmapWorldPos.z, scope.region.y, scope.region.w)\r\n );\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 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 scope.$l.height = this.sampleHeightMap(\r\n scope,\r\n scope.gridUV,\r\n scope.gridCoord,\r\n scope.gridPos,\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.$outputs.clipmapPos = scope.clipmapWorldPos;\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 if (this.needFragmentColor() && this.virtualTextureUsed) {\r\n const globals = pb.getGlobalScope();\r\n this._virtualTexture!.declareBindings(globals, 2, false);\r\n globals.zTerrainRVT0 = pb.tex2D().uniform(2);\r\n globals.zTerrainRVT1 = pb.tex2D().uniform(2);\r\n scope.$l.terrainN = pb.vec3();\r\n scope.$l.albedo = this.sampleVirtualTexture(scope, scope.terrainN);\r\n // The normal read back already carries the height map slopes and the detail layers; the\r\n // frame around it only orients anisotropic and clear coat terms\r\n scope.$l.terrainT = pb.normalize(pb.sub(pb.vec3(1, 0, 0), pb.mul(scope.terrainN, scope.terrainN.x)));\r\n scope.$l.terrainB = pb.cross(scope.terrainT, scope.terrainN);\r\n scope.$l.normalInfo = this.calculateNormalAndTBN(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.terrainN,\r\n scope.terrainT,\r\n scope.terrainB\r\n );\r\n this.shadeTerrain(scope);\r\n } else if (this.needFragmentColor()) {\r\n scope.heightMap = pb.tex2D().uniform(2);\r\n scope.heightMapSize = pb.vec4().uniform(2);\r\n scope.terrainScale = pb.vec3().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.hexTilingMask) {\r\n scope.detailHexParams = pb.vec4[numDetailMaps]().uniform(2);\r\n }\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 // Sampled once here and shared by the albedo and detail normal blends\r\n for (let i = 0; i < (numDetailMaps + 3) >> 2; i++) {\r\n scope.$l[`terrainSplatMask${i}`] = this.sampleSplatMask(scope, i);\r\n }\r\n scope.$l.albedo = this.calculateAlbedoColor(scope);\r\n scope.$l.terrainT = pb.vec3();\r\n scope.$l.terrainB = pb.vec3();\r\n scope.$l.terrainN = pb.vec3();\r\n this.calculateTerrainTBN(scope, scope.terrainT, scope.terrainB, scope.terrainN);\r\n scope.$l.normalInfo = this.calculateNormalAndTBN(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.terrainN,\r\n scope.terrainT,\r\n scope.terrainB\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 this.shadeTerrain(scope);\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n /** Lights the terrain from the albedo and normalInfo locals of the fragment shader */\r\n private shadeTerrain(scope: PBFunctionScope) {\r\n const pb = scope.$builder;\r\n scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);\r\n const storeSceneData = !!(\r\n this.drawContext.materialFlags &\r\n (MaterialVaryingFlags.SCENE_STORE_ROUGHNESS | MaterialVaryingFlags.SCENE_STORE_NORMAL)\r\n );\r\n if (storeSceneData) {\r\n // Filled by PBRLight with (specular color, roughness) for SSR/SSGI\r\n scope.$l.outRoughness = pb.vec4();\r\n }\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 storeSceneData ? scope.outRoughness : undefined\r\n );\r\n switch (this.featureUsed<TerrainDebugMode>(ClipmapTerrainMaterial.FEATURE_DEBUG_MODE)) {\r\n case 'albedo':\r\n scope.$l.outColor = pb.vec4(scope.albedo.rgb, 1);\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 if (storeSceneData) {\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.outColor,\r\n scope.outRoughness,\r\n pb.vec4(pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)), 1)\r\n );\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.outColor);\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 const heightMap = this._heightMap.get()!;\r\n // The vertex shader samples explicit mip levels per clipmap ring. WebGL ignores the LOD of\r\n // textureLod() under a non-mipmapped min filter, so the sampler has to be mipmapped whenever\r\n // the texture has a mip chain.\r\n bindGroup.setTexture(\r\n 'heightMap',\r\n heightMap,\r\n fetchSampler(heightMap.mipLevelCount > 1 ? 'clamp_linear' : 'clamp_linear_nomip')\r\n );\r\n bindGroup.setValue('heightMapSize', this._heightMapSize);\r\n bindGroup.setBuffer('levelData', this._levelDataBuffer.get()!);\r\n if (this.needFragmentColor(ctx) && this.virtualTextureUsed) {\r\n const vt = this._virtualTexture!;\r\n vt.applyBindings(bindGroup, false);\r\n bindGroup.setTexture(\r\n 'zTerrainRVT0',\r\n vt.getPlaneTexture('baseColor')!,\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n bindGroup.setTexture(\r\n 'zTerrainRVT1',\r\n vt.getPlaneTexture('normalRoughness')!,\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n } else if (this.needFragmentColor(ctx)) {\r\n if (this._detailMapInfo.numDetailMaps > 0) {\r\n bindGroup.setTexture('splatMap', this._detailMapInfo.splatMap.get()!);\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 bindGroup.setValue('detailParams', this._detailMapInfo.detailMapParams);\r\n if (this.hexTilingMask) {\r\n bindGroup.setValue('detailHexParams', this._detailMapInfo.detailHexParams);\r\n }\r\n }\r\n }\r\n }\r\n private createDetailMapInfo() {\r\n const device = getDevice();\r\n const detailMap = device.createTexture2DArray(\r\n 'rgba8unorm',\r\n this._detailMapSize,\r\n this._detailMapSize,\r\n MAX_DETAIL_MAPS\r\n )!;\r\n const detailNormalMap = device.createTexture2DArray(\r\n 'rgba8unorm',\r\n this._detailMapSize,\r\n this._detailMapSize,\r\n MAX_DETAIL_MAPS\r\n )!;\r\n const splatMap = 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 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(), DEPTH_CLEAR_VALUE, 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), DEPTH_CLEAR_VALUE, 0);\r\n }\r\n fbNormal.dispose();\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(), DEPTH_CLEAR_VALUE, 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 detailHexParams: 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","FEATURE_VIRTUAL_TEXTURE","FEATURE_HEX_TILING","_defaultDetailMap","DRef","_defaultNormalMap","_region","_clipmapGridInfo","_heightMap","_terrainScale","_detailMapInfo","_detailMapSize","_splatMapSize","_heightMapSize","_levelDataBuffer","_virtualTexture","_contentVersion","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","contentVersion","virtualTexture","vt","updateVirtualTextureFeature","virtualTextureUsed","used","type","numDetailMaps","levels","pagesX","pagesY","pageSize","border","atlasSize","detailMapParams","detailHexParams","hexTilingMask","updateHexTilingFeature","mask","i","getDetailMapHexTiling","index","Number","isInteger","console","error","setDetailMapHexTiling","enabled","getDetailMapHexParams","p","setDetailMapHexParams","rotation","scale","contrast","uniformChanged","detailMapArray","detailMap","get","detailNormalMapArray","detailNormalMap","setLevelData","data","length","bufferSubData","region","val","equalsTo","set","setClipmapGridInfo","gridScale","gridOffsetX","gridOffsetY","x","y","z","setXYZW","terrainScale","n","defaultDetailMap","getDefaultDetailMap","defaultNormalMap","getDefaultNormalMap","setDetailMap","setDetailNormalMap","setDetailMapUVScale","setDetailMapRoughness","detailMapList","dispose","detailNormalMapList","getSplatMap","splatMap","setSplatMap","tex","depth","getDetailMapUVScale","getDetailMapRoughness","getDetailMap","albedoMap","blitter","CopyBlitter","fb","createFrameBuffer","blit","fetchSampler","getDetailNormalMap","normalMap","update","needSceneColor","needSceneDepth","supportInstancing","supportLighting","getMetallicRoughnessTexCoord","scope","$inputs","uv","sampleDetailNormalMap","texCoord","ddx","ddy","pb","$builder","textureArraySampleGrad","rgb","textureArraySample","hexTilingInputs","dpdx","dpdy","params","calculateDetailNormal","TBN","that","funcName","func","mat3","splatMaskParams","$l","detailNormal","blendTerrainDetailNormal","splatMaskLocals","detailParams","$return","normalize","mul","getGlobalScope","splatMaskArgs","Array","from","terrainSplatMaskCount","_","vec4","getNormalTexCoord","sampleSplatMask","calculateRoughness","albedo","normal","base","a","float","masks","push","blendTerrainRoughness","calculateAlbedoColor","checkerPos","sub","zw","xy","w","add","max","abs","div","fract","changeRate","fadeStart","fadeEnd","fadeFactor","smoothStep","checker","mix","checkerColor","vec3","color","blendTerrainAlbedo","detailAlbedoMap","sampleVirtualTexture","maxLevel","out","level","computeLevel","level0","floor","level1","min","loc0","resolve","uint","loc1","t","select","equal","baseColor","textureSampleLevel","zTerrainRVT0","normalRoughness","zTerrainRVT1","nxz","xz","vec2","sqrt","clamp","dot","c","linear","pow","lessThanEqual","zTerrainSampleRVT","sampleHeightMap","gridCoord","pos","levelStart","levelDiff","transitionStart","transitionEnd","h","miplevel","r","ratio","xyxy","maxVal","alpha","$if","greaterThan","levelScale","exp2","odd","d","clipmapGridInfo","coarseLevel","hc","neg","calculateTerrainTBN","tangent","bitangent","textureLod","drawContext","device","getDeviceCaps","shaderCaps","supportShaderTextureLod","heightMapSize","footprint","lod","log2","offset","sample","textureSample","hL","hR","hU","hD","sampleDist","dHdU","dHdV","b","cross","calcTerrainTBN","vertexShader","position","attrib","clipmapInfo","uniform","levelData","uniformBuffer","tex2D","s","sin","cos","scale2","clipmapMatrix","mat4","localPos","seamSide","probeLocal","probe","ShaderHelper","getWorldMatrix","alongX","mod","outside","or","and","lessThan","not","dir","clipmapPos","clipmapWorldPos","xyz","gridPos","gridUV","yz","$outputs","at","int","worldPos","setClipSpacePosition","getViewProjectionMatrix","resolveMotionVector","fragmentShader","needFragmentColor","globals","declareBindings","terrainN","terrainT","terrainB","normalInfo","calculateNormalAndTBN","shadeTerrain","tex2DArray","outputFragmentColor","viewVec","calculateViewVector","storeSceneData","materialFlags","MaterialVaryingFlags","SCENE_STORE_ROUGHNESS","SCENE_STORE_NORMAL","outRoughness","litColor","PBRLight","undefined","outColor","applyUniformValues","bindGroup","ctx","pass","setValue","setTexture","mipLevelCount","setBuffer","applyBindings","getPlaneTexture","createTexture2DArray","pushDeviceStates","fbDetail","setFramebuffer","setColorAttachmentLayer","clearFrameBuffer","zero","DEPTH_CLEAR_VALUE","fbNormal","fbSplat","popDeviceStates","Float32Array","onDispose","createTexture2D","Uint8Array"],"mappings":"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"}
@@ -16,6 +16,9 @@ import { ShaderHelper } from './shader/helper.js';
16
16
  other.copyFrom(this);
17
17
  return other;
18
18
  }
19
+ supportsVoxelization() {
20
+ return true;
21
+ }
19
22
  vertexShader(scope) {
20
23
  super.vertexShader(scope);
21
24
  const pb = scope.$builder;
@@ -1 +1 @@
1
- {"version":3,"file":"unlit.js","sources":["../../src/material/unlit.ts"],"sourcesContent":["import { MeshMaterial, applyMaterialMixins } from './meshmaterial';\r\nimport { mixinAlbedoColor } from './mixins/albedocolor';\r\nimport { mixinVertexColor } from './mixins/vertexcolor';\r\nimport type { PBFunctionScope } from '@zephyr3d/device';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport type { Clonable } from '@zephyr3d/base';\r\n\r\n/**\r\n * Unlit material\r\n * @public\r\n */\r\nexport class UnlitMaterial\r\n extends applyMaterialMixins(MeshMaterial, mixinVertexColor, mixinAlbedoColor)\r\n implements Clonable<UnlitMaterial>\r\n{\r\n static readonly FEATURE_VERTEX_COLOR = 'um_vertexcolor';\r\n constructor() {\r\n super();\r\n }\r\n clone() {\r\n const other = new UnlitMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n scope.$l.oPos = ShaderHelper.resolveVertexPosition(scope);\r\n scope.$outputs.worldPos = pb.mul(ShaderHelper.getWorldMatrix(scope), pb.vec4(scope.oPos, 1)).xyz;\r\n ShaderHelper.setClipSpacePosition(\r\n scope,\r\n pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1))\r\n );\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n if (this.needFragmentColorInput()) {\r\n let color = this.calculateAlbedoColor(scope);\r\n if (this.vertexColor) {\r\n color = scope.$builder.mul(color, this.getVertexColor(scope));\r\n }\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, color);\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n}\r\n"],"names":["UnlitMaterial","applyMaterialMixins","MeshMaterial","mixinVertexColor","mixinAlbedoColor","FEATURE_VERTEX_COLOR","clone","other","copyFrom","vertexShader","scope","pb","$builder","$l","oPos","ShaderHelper","resolveVertexPosition","$outputs","worldPos","mul","getWorldMatrix","vec4","xyz","setClipSpacePosition","getViewProjectionMatrix","fragmentShader","needFragmentColorInput","color","calculateAlbedoColor","vertexColor","getVertexColor","outputFragmentColor","$inputs"],"mappings":";;;;;AAOA;;;AAGC,IACM,MAAMA,aACHC,SAAAA,mBAAAA,CAAoBC,cAAcC,gBAAkBC,EAAAA,gBAAAA,CAAAA,CAAAA;AAG5D,IAAA,OAAgBC,uBAAuB,gBAAiB;IACxD,WAAc,EAAA;QACZ,KAAK,EAAA;AACP;IACAC,KAAQ,GAAA;AACN,QAAA,MAAMC,QAAQ,IAAIP,aAAAA,EAAAA;QAClBO,KAAMC,CAAAA,QAAQ,CAAC,IAAI,CAAA;QACnB,OAAOD,KAAAA;AACT;AACAE,IAAAA,YAAAA,CAAaC,KAAsB,EAAE;AACnC,QAAA,KAAK,CAACD,YAAaC,CAAAA,KAAAA,CAAAA;QACnB,MAAMC,EAAAA,GAAKD,MAAME,QAAQ;AACzBF,QAAAA,KAAAA,CAAMG,EAAE,CAACC,IAAI,GAAGC,YAAAA,CAAaC,qBAAqB,CAACN,KAAAA,CAAAA;AACnDA,QAAAA,KAAAA,CAAMO,QAAQ,CAACC,QAAQ,GAAGP,EAAGQ,CAAAA,GAAG,CAACJ,YAAaK,CAAAA,cAAc,CAACV,KAAAA,CAAAA,EAAQC,GAAGU,IAAI,CAACX,MAAMI,IAAI,EAAE,IAAIQ,GAAG;AAChGP,QAAAA,YAAAA,CAAaQ,oBAAoB,CAC/Bb,KAAAA,EACAC,EAAGQ,CAAAA,GAAG,CAACJ,YAAaS,CAAAA,uBAAuB,CAACd,KAAAA,CAAAA,EAAQC,GAAGU,IAAI,CAACX,MAAMO,QAAQ,CAACC,QAAQ,EAAE,CAAA,CAAA,CAAA,CAAA;AAEzF;AACAO,IAAAA,cAAAA,CAAef,KAAsB,EAAE;AACrC,QAAA,KAAK,CAACe,cAAef,CAAAA,KAAAA,CAAAA;QACrB,IAAI,IAAI,CAACgB,sBAAsB,EAAI,EAAA;AACjC,YAAA,IAAIC,KAAQ,GAAA,IAAI,CAACC,oBAAoB,CAAClB,KAAAA,CAAAA;YACtC,IAAI,IAAI,CAACmB,WAAW,EAAE;gBACpBF,KAAQjB,GAAAA,KAAAA,CAAME,QAAQ,CAACO,GAAG,CAACQ,KAAO,EAAA,IAAI,CAACG,cAAc,CAACpB,KAAAA,CAAAA,CAAAA;AACxD;YACA,IAAI,CAACqB,mBAAmB,CAACrB,KAAAA,EAAOA,MAAMsB,OAAO,CAACd,QAAQ,EAAES,KAAAA,CAAAA;SACnD,MAAA;YACL,IAAI,CAACI,mBAAmB,CAACrB,KAAAA,EAAOA,MAAMsB,OAAO,CAACd,QAAQ,EAAE,IAAA,CAAA;AAC1D;AACF;AACF;;;;"}
1
+ {"version":3,"file":"unlit.js","sources":["../../src/material/unlit.ts"],"sourcesContent":["import { MeshMaterial, applyMaterialMixins } from './meshmaterial';\r\nimport { mixinAlbedoColor } from './mixins/albedocolor';\r\nimport { mixinVertexColor } from './mixins/vertexcolor';\r\nimport type { PBFunctionScope } from '@zephyr3d/device';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport type { Clonable } from '@zephyr3d/base';\r\n\r\n/**\r\n * Unlit material\r\n * @public\r\n */\r\nexport class UnlitMaterial\r\n extends applyMaterialMixins(MeshMaterial, mixinVertexColor, mixinAlbedoColor)\r\n implements Clonable<UnlitMaterial>\r\n{\r\n static readonly FEATURE_VERTEX_COLOR = 'um_vertexcolor';\r\n constructor() {\r\n super();\r\n }\r\n clone() {\r\n const other = new UnlitMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n supportsVoxelization() {\r\n return true;\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n scope.$l.oPos = ShaderHelper.resolveVertexPosition(scope);\r\n scope.$outputs.worldPos = pb.mul(ShaderHelper.getWorldMatrix(scope), pb.vec4(scope.oPos, 1)).xyz;\r\n ShaderHelper.setClipSpacePosition(\r\n scope,\r\n pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1))\r\n );\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n if (this.needFragmentColorInput()) {\r\n let color = this.calculateAlbedoColor(scope);\r\n if (this.vertexColor) {\r\n color = scope.$builder.mul(color, this.getVertexColor(scope));\r\n }\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, color);\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n}\r\n"],"names":["UnlitMaterial","applyMaterialMixins","MeshMaterial","mixinVertexColor","mixinAlbedoColor","FEATURE_VERTEX_COLOR","clone","other","copyFrom","supportsVoxelization","vertexShader","scope","pb","$builder","$l","oPos","ShaderHelper","resolveVertexPosition","$outputs","worldPos","mul","getWorldMatrix","vec4","xyz","setClipSpacePosition","getViewProjectionMatrix","fragmentShader","needFragmentColorInput","color","calculateAlbedoColor","vertexColor","getVertexColor","outputFragmentColor","$inputs"],"mappings":";;;;;AAOA;;;AAGC,IACM,MAAMA,aACHC,SAAAA,mBAAAA,CAAoBC,cAAcC,gBAAkBC,EAAAA,gBAAAA,CAAAA,CAAAA;AAG5D,IAAA,OAAgBC,uBAAuB,gBAAiB;IACxD,WAAc,EAAA;QACZ,KAAK,EAAA;AACP;IACAC,KAAQ,GAAA;AACN,QAAA,MAAMC,QAAQ,IAAIP,aAAAA,EAAAA;QAClBO,KAAMC,CAAAA,QAAQ,CAAC,IAAI,CAAA;QACnB,OAAOD,KAAAA;AACT;IACAE,oBAAuB,GAAA;QACrB,OAAO,IAAA;AACT;AACAC,IAAAA,YAAAA,CAAaC,KAAsB,EAAE;AACnC,QAAA,KAAK,CAACD,YAAaC,CAAAA,KAAAA,CAAAA;QACnB,MAAMC,EAAAA,GAAKD,MAAME,QAAQ;AACzBF,QAAAA,KAAAA,CAAMG,EAAE,CAACC,IAAI,GAAGC,YAAAA,CAAaC,qBAAqB,CAACN,KAAAA,CAAAA;AACnDA,QAAAA,KAAAA,CAAMO,QAAQ,CAACC,QAAQ,GAAGP,EAAGQ,CAAAA,GAAG,CAACJ,YAAaK,CAAAA,cAAc,CAACV,KAAAA,CAAAA,EAAQC,GAAGU,IAAI,CAACX,MAAMI,IAAI,EAAE,IAAIQ,GAAG;AAChGP,QAAAA,YAAAA,CAAaQ,oBAAoB,CAC/Bb,KAAAA,EACAC,EAAGQ,CAAAA,GAAG,CAACJ,YAAaS,CAAAA,uBAAuB,CAACd,KAAAA,CAAAA,EAAQC,GAAGU,IAAI,CAACX,MAAMO,QAAQ,CAACC,QAAQ,EAAE,CAAA,CAAA,CAAA,CAAA;AAEzF;AACAO,IAAAA,cAAAA,CAAef,KAAsB,EAAE;AACrC,QAAA,KAAK,CAACe,cAAef,CAAAA,KAAAA,CAAAA;QACrB,IAAI,IAAI,CAACgB,sBAAsB,EAAI,EAAA;AACjC,YAAA,IAAIC,KAAQ,GAAA,IAAI,CAACC,oBAAoB,CAAClB,KAAAA,CAAAA;YACtC,IAAI,IAAI,CAACmB,WAAW,EAAE;gBACpBF,KAAQjB,GAAAA,KAAAA,CAAME,QAAQ,CAACO,GAAG,CAACQ,KAAO,EAAA,IAAI,CAACG,cAAc,CAACpB,KAAAA,CAAAA,CAAAA;AACxD;YACA,IAAI,CAACqB,mBAAmB,CAACrB,KAAAA,EAAOA,MAAMsB,OAAO,CAACd,QAAQ,EAAES,KAAAA,CAAAA;SACnD,MAAA;YACL,IAAI,CAACI,mBAAmB,CAACrB,KAAAA,EAAOA,MAAMsB,OAAO,CAACd,QAAQ,EAAE,IAAA,CAAA;AAC1D;AACF;AACF;;;;"}