@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":"grassmaterial.js","sources":["../../../src/scene/terrain-cm/grassmaterial.ts"],"sourcesContent":["import type { Clonable } from '@zephyr3d/base';\r\nimport { Vector2, Vector4, DWeakRef } from '@zephyr3d/base';\r\nimport type { BindGroup, PBFunctionScope, RenderStateSet } from '@zephyr3d/device';\r\nimport {\r\n applyMaterialMixins,\r\n MeshMaterial,\r\n mixinFoliage,\r\n mixinPBRMetallicRoughness,\r\n ShaderHelper\r\n} from '../../material';\r\nimport type { DrawContext } from '../../render';\r\nimport { RENDER_PASS_TYPE_LIGHT } from '../../values';\r\nimport type { ClipmapTerrain } from './terrain-cm';\r\nimport { fetchSampler } from '../../utility/misc';\r\n\r\n/**\r\n * Terrain grass material\r\n * @public\r\n */\r\nexport class ClipmapGrassMaterial\r\n extends applyMaterialMixins(MeshMaterial, mixinPBRMetallicRoughness, mixinFoliage)\r\n implements Clonable<ClipmapGrassMaterial>\r\n{\r\n /** @internal */\r\n private readonly _terrain: DWeakRef<ClipmapTerrain>;\r\n /** @internal */\r\n private readonly _terrainPosScale: Vector4;\r\n /** @internal */\r\n private readonly _heightMapSize: Vector2;\r\n /** @internal */\r\n private readonly _textureSize: Vector2;\r\n /**\r\n * Creates an instance of GrassMaterial class\r\n * @param terrain - Clipmap terrain object\r\n * @param heightMap - height map\r\n * @param grassTexture - grass texture\r\n */\r\n constructor(terrain: ClipmapTerrain) {\r\n super();\r\n this.metallic = 0;\r\n this.roughness = 1;\r\n this.doubleSidedLighting = false;\r\n this.specularFactor = new Vector4(1, 1, 1, 0.2);\r\n this._terrain = new DWeakRef(terrain);\r\n this._terrainPosScale = new Vector4();\r\n this._heightMapSize = new Vector2(1 / terrain.heightMap!.width, 1 / terrain.heightMap!.height);\r\n this._textureSize = Vector2.one();\r\n }\r\n clone() {\r\n const other = new ClipmapGrassMaterial(this._terrain.get()!);\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this._terrainPosScale.set(other._terrainPosScale);\r\n this._heightMapSize.set(other._heightMapSize);\r\n this._textureSize.set(other._textureSize);\r\n }\r\n setTextureSize(w: number, h: number) {\r\n this._textureSize.setXY(w, h);\r\n this.uniformChanged();\r\n }\r\n /**\r\n * {@inheritDoc MeshMaterial.isTransparentPass}\r\n * @override\r\n */\r\n isTransparentPass(_pass: number) {\r\n return false;\r\n }\r\n /**\r\n * {@inheritDoc Material.supportLighting}\r\n * @override\r\n */\r\n supportLighting() {\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc Material.supportInstancing}\r\n * @override\r\n */\r\n supportInstancing() {\r\n return false;\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n const terrain = this._terrain.get()!;\r\n this._terrainPosScale.setXYZW(terrain.scale.x, terrain.scale.y, terrain.scale.z, terrain.worldMatrix.m13);\r\n bindGroup.setTexture('terrainHeightMap', terrain.heightMap!, fetchSampler('clamp_linear_nomip'));\r\n bindGroup.setValue('heightMapSize', this._heightMapSize);\r\n bindGroup.setValue('terrainRegion', terrain.worldRegion);\r\n bindGroup.setValue('terrainPosScale', this._terrainPosScale);\r\n if (this.needFragmentColor(ctx)) {\r\n bindGroup.setValue('albedoTextureSize', this._textureSize);\r\n }\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n scope.$inputs.pos = pb.vec3().attrib('position');\r\n scope.$inputs.albedoUV = pb.vec2().attrib('texCoord0');\r\n scope.$inputs.placement = pb.vec4().attrib('texCoord1');\r\n scope.terrainHeightMap = pb.tex2D().uniform(2);\r\n scope.heightMapSize = pb.vec2().uniform(2);\r\n scope.terrainRegion = pb.vec4().uniform(2);\r\n scope.terrainPosScale = pb.vec4().uniform(2);\r\n\r\n pb.func('calcHeightMapNormal', [pb.vec2('uv'), pb.vec2('texelSize'), pb.vec3('scale')], function () {\r\n this.$l.hL = pb.textureSampleLevel(\r\n this.terrainHeightMap,\r\n pb.sub(this.uv, pb.vec2(this.texelSize.x, 0)),\r\n 0\r\n ).r;\r\n this.$l.hR = pb.textureSampleLevel(\r\n this.terrainHeightMap,\r\n pb.add(this.uv, pb.vec2(this.texelSize.x, 0)),\r\n 0\r\n ).r;\r\n this.$l.hD = pb.textureSampleLevel(\r\n this.terrainHeightMap,\r\n pb.add(this.uv, pb.vec2(0, this.texelSize.y)),\r\n 0\r\n ).r;\r\n this.$l.hU = pb.textureSampleLevel(\r\n this.terrainHeightMap,\r\n pb.sub(this.uv, pb.vec2(0, this.texelSize.y)),\r\n 0\r\n ).r;\r\n this.$l.dHdU = pb.div(pb.mul(pb.sub(this.hR, this.hL), this.scale.y), pb.mul(this.scale.x, 2));\r\n this.$l.dHdV = pb.div(pb.mul(pb.sub(this.hD, this.hU), this.scale.y), pb.mul(this.scale.z, 2));\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.$return(pb.normalize(pb.cross(this.b, this.t)));\r\n });\r\n\r\n scope.$l.uv = scope.$inputs.placement.xy;\r\n scope.$l.heightSample = pb.textureSampleLevel(scope.terrainHeightMap, scope.uv, 0);\r\n scope.$l.height = pb.add(pb.mul(scope.heightSample.r, scope.terrainPosScale.y), scope.terrainPosScale.w);\r\n scope.$l.normal = scope.calcHeightMapNormal(scope.uv, scope.heightMapSize, scope.terrainPosScale.xyz);\r\n scope.$l.axisX = pb.vec3(scope.$inputs.placement.z, 0, scope.$inputs.placement.w);\r\n scope.$l.axisZ = pb.cross(scope.axisX, scope.normal);\r\n scope.$l.axisX = pb.cross(scope.normal, scope.axisZ);\r\n scope.$l.rotPos = pb.mul(pb.mat3(scope.axisX, scope.normal, scope.axisZ), scope.$inputs.pos);\r\n scope.$l.posXZ = pb.add(\r\n pb.mul(scope.$inputs.placement.xy, pb.sub(scope.terrainRegion.zw, scope.terrainRegion.xy)),\r\n scope.terrainRegion.xy\r\n );\r\n scope.$outputs.zAlbedoTexCoord = scope.$inputs.albedoUV;\r\n scope.$outputs.worldPos = pb.add(scope.rotPos, pb.vec3(scope.posXZ.x, scope.height, scope.posXZ.y));\r\n ShaderHelper.setClipSpacePosition(\r\n scope,\r\n pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1))\r\n );\r\n scope.$outputs.worldNorm = scope.normal;\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 const that = this;\r\n if (this.needFragmentColor()) {\r\n scope.albedoTextureSize = pb.vec2().uniform(2);\r\n scope.$l.albedo = this.calculateAlbedoColor(scope);\r\n scope.albedo = that.calculateFoliageAlbedo(\r\n scope,\r\n scope.albedo,\r\n pb.mul(that.getAlbedoTexCoord(scope), scope.albedoTextureSize)\r\n );\r\n scope.$l.litColor = pb.vec3(0);\r\n if (this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n scope.$l.normalInfo = this.calculateNormalAndTBN(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.$inputs.worldNorm\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 }\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, pb.vec4(scope.litColor, scope.albedo.a));\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n apply(ctx: DrawContext) {\r\n this.alphaToCoverage = ctx.device.getFrameBufferSampleCount() > 1;\r\n this.alphaCutoff = this.alphaToCoverage ? 1 : 0.8;\r\n return super.apply(ctx);\r\n }\r\n protected updateRenderStates(pass: number, stateSet: RenderStateSet, ctx: DrawContext) {\r\n super.updateRenderStates(pass, stateSet, ctx);\r\n stateSet.useRasterizerState().setCullMode('none');\r\n }\r\n}\r\n"],"names":["ClipmapGrassMaterial","applyMaterialMixins","MeshMaterial","mixinPBRMetallicRoughness","mixinFoliage","terrain","metallic","roughness","doubleSidedLighting","specularFactor","Vector4","_terrain","DWeakRef","_terrainPosScale","_heightMapSize","Vector2","heightMap","width","height","_textureSize","one","clone","other","get","copyFrom","set","setTextureSize","w","h","setXY","uniformChanged","isTransparentPass","_pass","supportLighting","supportInstancing","applyUniformValues","bindGroup","ctx","pass","setXYZW","scale","x","y","z","worldMatrix","m13","setTexture","fetchSampler","setValue","worldRegion","needFragmentColor","vertexShader","scope","pb","$builder","$inputs","pos","vec3","attrib","albedoUV","vec2","placement","vec4","terrainHeightMap","tex2D","uniform","heightMapSize","terrainRegion","terrainPosScale","func","$l","hL","textureSampleLevel","sub","uv","texelSize","r","hR","add","hD","hU","dHdU","div","mul","dHdV","t","normalize","b","$return","cross","xy","heightSample","normal","calcHeightMapNormal","xyz","axisX","axisZ","rotPos","mat3","posXZ","zw","$outputs","zAlbedoTexCoord","worldPos","ShaderHelper","setClipSpacePosition","getViewProjectionMatrix","worldNorm","resolveMotionVector","fragmentShader","that","albedoTextureSize","albedo","calculateAlbedoColor","calculateFoliageAlbedo","getAlbedoTexCoord","litColor","drawContext","renderPass","type","RENDER_PASS_TYPE_LIGHT","normalInfo","calculateNormalAndTBN","viewVec","calculateViewVector","PBRLight","TBN","outputFragmentColor","a","apply","alphaToCoverage","device","getFrameBufferSampleCount","alphaCutoff","updateRenderStates","stateSet","useRasterizerState","setCullMode"],"mappings":"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"}
1
+ {"version":3,"file":"grassmaterial.js","sources":["../../../src/scene/terrain-cm/grassmaterial.ts"],"sourcesContent":["import type { Clonable, Nullable } from '@zephyr3d/base';\r\nimport { Vector2, Vector4, DWeakRef } from '@zephyr3d/base';\r\nimport type { BindGroup, PBFunctionScope, PBInsideFunctionScope, RenderStateSet } from '@zephyr3d/device';\r\nimport {\r\n applyMaterialMixins,\r\n MeshMaterial,\r\n mixinFoliage,\r\n mixinPBRMetallicRoughness,\r\n ShaderHelper\r\n} from '../../material';\r\nimport type { DrawContext } from '../../render';\r\nimport { WindField } from '../wind';\r\nimport { RENDER_PASS_TYPE_LIGHT } from '../../values';\r\nimport type { ClipmapTerrain } from './terrain-cm';\r\nimport { fetchSampler } from '../../utility/misc';\r\nimport { GRASS_LOD_FADE_BAND, grassDensityLod } from './grass_gpu';\r\n\r\n/**\r\n * Terrain grass material\r\n * @public\r\n */\r\nexport class ClipmapGrassMaterial\r\n extends applyMaterialMixins(MeshMaterial, mixinPBRMetallicRoughness, mixinFoliage)\r\n implements Clonable<ClipmapGrassMaterial>\r\n{\r\n /** @internal */\r\n private readonly _terrain: DWeakRef<ClipmapTerrain>;\r\n /** @internal */\r\n private readonly _terrainPosScale: Vector4;\r\n /** @internal */\r\n private readonly _heightMapSize: Vector2;\r\n /** @internal */\r\n private readonly _textureSize: Vector2;\r\n /** @internal */\r\n private readonly _distanceFade: Vector2;\r\n /** (density falloff start distance, density at the draw distance) @internal */\r\n private readonly _densityLod: Vector2;\r\n /** (wind lean, sway amplitude, sway speed, unused) @internal */\r\n private readonly _wind: Vector4;\r\n /** Scene wind of the current and the previous frame, see WindField.shaderParams @internal */\r\n private readonly _windParams: Float32Array<ArrayBuffer>;\r\n /** @internal */\r\n private _drawDistance: number;\r\n /** @internal */\r\n private _farDensity: number;\r\n /** @internal */\r\n private static readonly FEATURE_OCCLUSION_DEBUG = this.defineFeature();\r\n /**\r\n * Creates an instance of GrassMaterial class\r\n * @param terrain - Clipmap terrain object\r\n * @param heightMap - height map\r\n * @param grassTexture - grass texture\r\n */\r\n constructor(terrain: ClipmapTerrain) {\r\n super();\r\n this.metallic = 0;\r\n this.roughness = 1;\r\n this.doubleSidedLighting = false;\r\n this.specularFactor = new Vector4(1, 1, 1, 0.2);\r\n this._terrain = new DWeakRef(terrain);\r\n this._terrainPosScale = new Vector4();\r\n this._heightMapSize = new Vector2(1 / terrain.heightMap!.width, 1 / terrain.heightMap!.height);\r\n this._textureSize = Vector2.one();\r\n this._distanceFade = new Vector2(0, 0);\r\n this._densityLod = new Vector2(0, 1);\r\n this._wind = new Vector4(0.5, 0.15, 2.5, 0);\r\n this._windParams = new Float32Array(32);\r\n this._drawDistance = 0;\r\n this._farDensity = 1;\r\n this.useFeature(ClipmapGrassMaterial.FEATURE_OCCLUSION_DEBUG, false);\r\n }\r\n clone() {\r\n const other = new ClipmapGrassMaterial(this._terrain.get()!);\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this._terrainPosScale.set(other._terrainPosScale);\r\n this._heightMapSize.set(other._heightMapSize);\r\n this._textureSize.set(other._textureSize);\r\n this._distanceFade.set(other._distanceFade);\r\n this._densityLod.set(other._densityLod);\r\n this._wind.set(other._wind);\r\n this._drawDistance = other._drawDistance;\r\n this._farDensity = other._farDensity;\r\n }\r\n /**\r\n * Sets the distance beyond which blades are not drawn. Blades shrink into the ground over\r\n * the last quarter of it so that they do not pop out. Zero or less disables the fade.\r\n * @internal\r\n */\r\n setDrawDistance(distance: number) {\r\n this._drawDistance = distance;\r\n this.updateDistanceParams();\r\n }\r\n /**\r\n * Sets the fraction of blades kept at the draw distance, see GrassLayer.farDensity\r\n * @internal\r\n */\r\n setFarDensity(farDensity: number) {\r\n this._farDensity = farDensity;\r\n this.updateDistanceParams();\r\n }\r\n /**\r\n * Updates the scene wind before drawing. Taken from the scene rather than the draw context:\r\n * the depth prepass and the light pass must bend the cards by the same wind or the light pass's\r\n * equal depth test rejects them.\r\n * @internal\r\n */\r\n prepareDraw(wind: Nullable<WindField>) {\r\n const params = wind?.shaderParams;\r\n const p = this._windParams;\r\n let changed = false;\r\n for (let i = 0; i < p.length; i++) {\r\n const val = params ? params[i] : 0;\r\n if (p[i] !== val) {\r\n p[i] = val;\r\n changed = true;\r\n }\r\n }\r\n if (changed) {\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * How far the wind lays the cards over toward lying flat, per unit of wind push. 0 leaves them\r\n * standing.\r\n */\r\n get windLean() {\r\n return this._wind.x;\r\n }\r\n set windLean(val: number) {\r\n val = Math.min(4, Math.max(0, val));\r\n if (val !== this._wind.x) {\r\n this._wind.x = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /** How far the card tops bob in the wind, as a fraction of the card height per unit of push */\r\n get swayAmplitude() {\r\n return this._wind.y;\r\n }\r\n set swayAmplitude(val: number) {\r\n val = Math.min(1, Math.max(0, val));\r\n if (val !== this._wind.y) {\r\n this._wind.y = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /** How fast the cards bob in the wind, in radians per second */\r\n get swaySpeed() {\r\n return this._wind.z;\r\n }\r\n set swaySpeed(val: number) {\r\n val = Math.min(50, Math.max(0, val));\r\n if (val !== this._wind.z) {\r\n this._wind.z = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /** @internal */\r\n private updateDistanceParams() {\r\n const distance = this._drawDistance;\r\n const start = distance > 0 ? distance * 0.75 : 0;\r\n const end = distance > 0 ? distance : 0;\r\n const lod = grassDensityLod(distance, this._farDensity);\r\n if (\r\n this._distanceFade.x !== start ||\r\n this._distanceFade.y !== end ||\r\n this._densityLod.x !== lod[0] ||\r\n this._densityLod.y !== lod[1]\r\n ) {\r\n this._distanceFade.setXY(start, end);\r\n this._densityLod.setXY(lod[0], lod[1]);\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * Tints the blades the GPU placement pass flagged as hidden behind terrain red, instead of\r\n * leaving them out. Debugging aid for the terrain occlusion culling.\r\n * @internal\r\n */\r\n get occlusionDebug() {\r\n return !!this.featureUsed<boolean>(ClipmapGrassMaterial.FEATURE_OCCLUSION_DEBUG);\r\n }\r\n set occlusionDebug(val: boolean) {\r\n this.useFeature(ClipmapGrassMaterial.FEATURE_OCCLUSION_DEBUG, !!val);\r\n }\r\n setTextureSize(w: number, h: number) {\r\n this._textureSize.setXY(w, h);\r\n this.uniformChanged();\r\n }\r\n /**\r\n * {@inheritDoc MeshMaterial.isTransparentPass}\r\n * @override\r\n */\r\n isTransparentPass(_pass: number) {\r\n return false;\r\n }\r\n /**\r\n * {@inheritDoc Material.supportLighting}\r\n * @override\r\n */\r\n supportLighting() {\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc Material.supportInstancing}\r\n * @override\r\n */\r\n supportInstancing() {\r\n return false;\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n const terrain = this._terrain.get()!;\r\n this._terrainPosScale.setXYZW(terrain.scale.x, terrain.scale.y, terrain.scale.z, terrain.worldMatrix.m13);\r\n const heightMap = terrain.heightMap!;\r\n // The height map can be resized or replaced after construction\r\n this._heightMapSize.setXY(1 / heightMap.width, 1 / heightMap.height);\r\n bindGroup.setTexture('terrainHeightMap', heightMap, fetchSampler('clamp_linear_nomip'));\r\n bindGroup.setValue('heightMapSize', this._heightMapSize);\r\n bindGroup.setValue('terrainRegion', terrain.worldRegion);\r\n bindGroup.setValue('terrainPosScale', this._terrainPosScale);\r\n bindGroup.setValue('distanceFade', this._distanceFade);\r\n bindGroup.setValue('densityLod', this._densityLod);\r\n bindGroup.setValue('zCardWind', this._wind);\r\n bindGroup.setValue('zWind', this._windParams);\r\n if (this.needFragmentColor(ctx)) {\r\n bindGroup.setValue('albedoTextureSize', this._textureSize);\r\n }\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n scope.$inputs.pos = pb.vec3().attrib('position');\r\n scope.$inputs.albedoUV = pb.vec2().attrib('texCoord0');\r\n scope.$inputs.placement = pb.vec4().attrib('texCoord1');\r\n scope.terrainHeightMap = pb.tex2D().uniform(2);\r\n scope.heightMapSize = pb.vec2().uniform(2);\r\n scope.terrainRegion = pb.vec4().uniform(2);\r\n scope.terrainPosScale = pb.vec4().uniform(2);\r\n scope.distanceFade = pb.vec2().uniform(2);\r\n scope.densityLod = pb.vec2().uniform(2);\r\n // (wind lean, sway amplitude, sway speed, unused)\r\n scope.zCardWind = pb.vec4().uniform(2);\r\n // Scene wind, current frame then previous frame, see WindField.shaderParams\r\n scope.zWind = pb.vec4[8]().uniform(2);\r\n\r\n pb.func('calcHeightMapNormal', [pb.vec2('uv'), pb.vec2('texelSize'), pb.vec3('scale')], function () {\r\n // World-space distance between the two samples of each central difference\r\n this.$l.sampleDist = pb.mul(\r\n pb.sub(this.terrainRegion.zw, this.terrainRegion.xy),\r\n pb.mul(this.texelSize, 2)\r\n );\r\n this.$l.hL = pb.textureSampleLevel(\r\n this.terrainHeightMap,\r\n pb.sub(this.uv, pb.vec2(this.texelSize.x, 0)),\r\n 0\r\n ).r;\r\n this.$l.hR = pb.textureSampleLevel(\r\n this.terrainHeightMap,\r\n pb.add(this.uv, pb.vec2(this.texelSize.x, 0)),\r\n 0\r\n ).r;\r\n this.$l.hD = pb.textureSampleLevel(\r\n this.terrainHeightMap,\r\n pb.add(this.uv, pb.vec2(0, this.texelSize.y)),\r\n 0\r\n ).r;\r\n this.$l.hU = pb.textureSampleLevel(\r\n this.terrainHeightMap,\r\n pb.sub(this.uv, pb.vec2(0, this.texelSize.y)),\r\n 0\r\n ).r;\r\n this.$l.dHdU = pb.div(pb.mul(pb.sub(this.hR, this.hL), this.scale.y), this.sampleDist.x);\r\n this.$l.dHdV = pb.div(pb.mul(pb.sub(this.hD, this.hU), this.scale.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.$return(pb.normalize(pb.cross(this.b, this.t)));\r\n });\r\n\r\n scope.$l.uv = scope.$inputs.placement.xy;\r\n scope.$l.heightSample = pb.textureSampleLevel(scope.terrainHeightMap, scope.uv, 0);\r\n scope.$l.height = pb.add(pb.mul(scope.heightSample.r, scope.terrainPosScale.y), scope.terrainPosScale.w);\r\n scope.$l.normal = scope.calcHeightMapNormal(scope.uv, scope.heightMapSize, scope.terrainPosScale.xyz);\r\n // placement: (u, v, facing angle, density LOD hash); the GPU placement pass adds 2 to the\r\n // hash of blades it flags as occluded\r\n scope.$l.occluded = pb.step(1.5, scope.$inputs.placement.w);\r\n if (this.occlusionDebug) {\r\n scope.$outputs.occludedFlag = scope.occluded;\r\n }\r\n scope.$l.lodHash = pb.mul(\r\n pb.sub(scope.$inputs.placement.w, pb.mul(scope.occluded, 2)),\r\n 1 - GRASS_LOD_FADE_BAND\r\n );\r\n scope.$l.axisX = pb.vec3(pb.sin(scope.$inputs.placement.z), 0, pb.cos(scope.$inputs.placement.z));\r\n scope.$l.axisZ = pb.cross(scope.axisX, scope.normal);\r\n scope.$l.axisX = pb.cross(scope.normal, scope.axisZ);\r\n scope.$l.posXZ = pb.add(\r\n pb.mul(scope.$inputs.placement.xy, pb.sub(scope.terrainRegion.zw, scope.terrainRegion.xy)),\r\n scope.terrainRegion.xy\r\n );\r\n // (width scale, overall scale)\r\n scope.$l.bladeScale = pb.vec2(1);\r\n scope.$if(pb.greaterThan(scope.distanceFade.y, 0), function () {\r\n this.$l.bladeDist = pb.distance(\r\n ShaderHelper.getCameraPosition(this),\r\n pb.vec3(this.posXZ.x, this.height, this.posXZ.y)\r\n );\r\n // Density LOD: the fraction of blades kept falls with distance and each blade leaves as\r\n // it drops below its own hash, shrinking over a narrow band on the way. The survivors\r\n // widen by the inverse of the fraction to keep the coverage. Mirrors the GPU placement\r\n // pass, which skips the blades whose scale reaches zero here.\r\n this.$l.keep = pb.mix(\r\n 1,\r\n this.densityLod.y,\r\n pb.smoothStep(this.densityLod.x, this.distanceFade.y, this.bladeDist)\r\n );\r\n this.bladeScale = pb.vec2(\r\n pb.div(1, this.keep),\r\n pb.mul(\r\n pb.sub(1, pb.smoothStep(this.distanceFade.x, this.distanceFade.y, this.bladeDist)),\r\n pb.clamp(pb.div(pb.sub(this.keep, this.lodHash), GRASS_LOD_FADE_BAND), 0, 1)\r\n )\r\n );\r\n });\r\n scope.$l.localPos = pb.mul(\r\n pb.vec3(\r\n pb.mul(scope.$inputs.pos.x, scope.bladeScale.x),\r\n scope.$inputs.pos.y,\r\n pb.mul(scope.$inputs.pos.z, scope.bladeScale.x)\r\n ),\r\n scope.bladeScale.y\r\n );\r\n scope.$l.rotPos = pb.mul(pb.mat3(scope.axisX, scope.normal, scope.axisZ), scope.localPos);\r\n scope.$l.basePos = pb.vec3(scope.posXZ.x, scope.height, scope.posXZ.y);\r\n scope.$outputs.zAlbedoTexCoord = scope.$inputs.albedoUV;\r\n scope.$outputs.worldPos = pb.add(scope.basePos, scope.rotPos, this.emitCardWind(scope, 0));\r\n ShaderHelper.setClipSpacePosition(\r\n scope,\r\n pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1))\r\n );\r\n scope.$outputs.worldNorm = scope.normal;\r\n if (ShaderHelper.getPrevUnjitteredViewProjectionMatrix(scope)) {\r\n // Where this vertex was last frame, for the motion vectors: bent by last frame's wind\r\n scope.$l.prevWorldPos = pb.add(scope.basePos, scope.rotPos, this.emitCardWind(scope, 4));\r\n ShaderHelper.resolveMotionVector(scope, scope.$outputs.worldPos, scope.prevWorldPos);\r\n }\r\n }\r\n /**\r\n * Returns the world offset the wind moves the current vertex of a card by, for the wind of the\r\n * frame whose parameters start at `frame` in zWind.\r\n *\r\n * The card turns about its base toward the wind: by a lean that grows with the wind push, plus\r\n * a sine sway whose phase comes from the card's facing hash, both scaled by the push as for the\r\n * procedural blades (ClipmapBladeGrassMaterial). Turning keeps the card's length, so its top\r\n * drops as it leans.\r\n */\r\n private emitCardWind(scope: PBInsideFunctionScope, frame: number) {\r\n const pb = scope.$builder;\r\n const v = (name: string) => `${name}${frame}`;\r\n scope.$l[v('windPush')] = WindField.shaderPush(\r\n scope,\r\n scope.posXZ,\r\n scope.zWind.at(frame),\r\n scope.zWind.at(frame + 1),\r\n scope.zWind.at(frame + 2),\r\n scope.zWind.at(frame + 3)\r\n );\r\n scope.$l[v('windAngle')] = pb.add(\r\n pb.mul(pb.clamp(pb.mul(scope[v('windPush')], scope.zCardWind.x), 0, 0.95), Math.PI * 0.5),\r\n pb.mul(\r\n scope.zCardWind.y,\r\n scope[v('windPush')],\r\n // Wind clock in the fourth vec4 of the frame\r\n pb.sin(pb.add(pb.mul(scope.zWind.at(frame + 3).y, scope.zCardWind.z), scope.$inputs.placement.z))\r\n )\r\n );\r\n // Height of the vertex above the card's base\r\n const y = scope.localPos.y;\r\n return pb.add(\r\n pb.mul(\r\n pb.vec3(scope.zWind.at(frame).x, 0, scope.zWind.at(frame).y),\r\n pb.mul(y, pb.sin(scope[v('windAngle')]))\r\n ),\r\n pb.vec3(0, pb.mul(y, pb.sub(pb.cos(scope[v('windAngle')]), 1)), 0)\r\n );\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n const that = this;\r\n if (this.needFragmentColor()) {\r\n scope.albedoTextureSize = pb.vec2().uniform(2);\r\n scope.$l.albedo = this.calculateAlbedoColor(scope);\r\n scope.albedo = that.calculateFoliageAlbedo(\r\n scope,\r\n scope.albedo,\r\n pb.mul(that.getAlbedoTexCoord(scope), scope.albedoTextureSize)\r\n );\r\n if (this.occlusionDebug) {\r\n scope.albedo = pb.vec4(\r\n pb.mix(scope.albedo.rgb, pb.vec3(1, 0, 0), scope.$inputs.occludedFlag),\r\n scope.albedo.a\r\n );\r\n }\r\n scope.$l.litColor = pb.vec3(0);\r\n if (this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n scope.$l.normalInfo = this.calculateNormalAndTBN(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.$inputs.worldNorm\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 }\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, pb.vec4(scope.litColor, scope.albedo.a));\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n apply(ctx: DrawContext) {\r\n this.alphaToCoverage = ctx.device.getFrameBufferSampleCount() > 1;\r\n this.alphaCutoff = this.alphaToCoverage ? 1 : 0.8;\r\n return super.apply(ctx);\r\n }\r\n protected updateRenderStates(pass: number, stateSet: RenderStateSet, ctx: DrawContext) {\r\n super.updateRenderStates(pass, stateSet, ctx);\r\n stateSet.useRasterizerState().setCullMode('none');\r\n }\r\n}\r\n"],"names":["ClipmapGrassMaterial","applyMaterialMixins","MeshMaterial","mixinPBRMetallicRoughness","mixinFoliage","FEATURE_OCCLUSION_DEBUG","defineFeature","terrain","metallic","roughness","doubleSidedLighting","specularFactor","Vector4","_terrain","DWeakRef","_terrainPosScale","_heightMapSize","Vector2","heightMap","width","height","_textureSize","one","_distanceFade","_densityLod","_wind","_windParams","Float32Array","_drawDistance","_farDensity","useFeature","clone","other","get","copyFrom","set","setDrawDistance","distance","updateDistanceParams","setFarDensity","farDensity","prepareDraw","wind","params","shaderParams","p","changed","i","length","val","uniformChanged","windLean","x","Math","min","max","swayAmplitude","y","swaySpeed","z","start","end","lod","grassDensityLod","setXY","occlusionDebug","featureUsed","setTextureSize","w","h","isTransparentPass","_pass","supportLighting","supportInstancing","applyUniformValues","bindGroup","ctx","pass","setXYZW","scale","worldMatrix","m13","setTexture","fetchSampler","setValue","worldRegion","needFragmentColor","vertexShader","scope","pb","$builder","$inputs","pos","vec3","attrib","albedoUV","vec2","placement","vec4","terrainHeightMap","tex2D","uniform","heightMapSize","terrainRegion","terrainPosScale","distanceFade","densityLod","zCardWind","zWind","func","$l","sampleDist","mul","sub","zw","xy","texelSize","hL","textureSampleLevel","uv","r","hR","add","hD","hU","dHdU","div","dHdV","t","normalize","b","$return","cross","heightSample","normal","calcHeightMapNormal","xyz","occluded","step","$outputs","occludedFlag","lodHash","GRASS_LOD_FADE_BAND","axisX","sin","cos","axisZ","posXZ","bladeScale","$if","greaterThan","bladeDist","ShaderHelper","getCameraPosition","keep","mix","smoothStep","clamp","localPos","rotPos","mat3","basePos","zAlbedoTexCoord","worldPos","emitCardWind","setClipSpacePosition","getViewProjectionMatrix","worldNorm","getPrevUnjitteredViewProjectionMatrix","prevWorldPos","resolveMotionVector","frame","v","name","WindField","shaderPush","at","PI","fragmentShader","that","albedoTextureSize","albedo","calculateAlbedoColor","calculateFoliageAlbedo","getAlbedoTexCoord","rgb","a","litColor","drawContext","renderPass","type","RENDER_PASS_TYPE_LIGHT","normalInfo","calculateNormalAndTBN","viewVec","calculateViewVector","PBRLight","TBN","outputFragmentColor","apply","alphaToCoverage","device","getFrameBufferSampleCount","alphaCutoff","updateRenderStates","stateSet","useRasterizerState","setCullMode"],"mappings":"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"}