@zephyr3d/scene 0.9.27 → 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 (502) 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 +54 -0
  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 +279 -55
  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 +171 -1
  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 +104 -178
  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 +25436 -15990
  109. package/dist/index.js +65 -11
  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/lambert.js +4 -1
  118. package/dist/material/lambert.js.map +1 -1
  119. package/dist/material/material.js +66 -4
  120. package/dist/material/material.js.map +1 -1
  121. package/dist/material/meshmaterial.js +118 -45
  122. package/dist/material/meshmaterial.js.map +1 -1
  123. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  124. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  126. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  128. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  130. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  132. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  133. package/dist/material/mixins/lit.js +191 -83
  134. package/dist/material/mixins/lit.js.map +1 -1
  135. package/dist/material/mixins/pbr/common.js +31 -206
  136. package/dist/material/mixins/pbr/common.js.map +1 -1
  137. package/dist/material/mtoon.js +1 -1
  138. package/dist/material/mtoon.js.map +1 -1
  139. package/dist/material/pbrmr.js +3 -0
  140. package/dist/material/pbrmr.js.map +1 -1
  141. package/dist/material/pbrsg.js +3 -0
  142. package/dist/material/pbrsg.js.map +1 -1
  143. package/dist/material/sdf_debug.js +78 -0
  144. package/dist/material/sdf_debug.js.map +1 -0
  145. package/dist/material/shader/helper.js +333 -191
  146. package/dist/material/shader/helper.js.map +1 -1
  147. package/dist/material/shader/terrain_blend.js +204 -43
  148. package/dist/material/shader/terrain_blend.js.map +1 -1
  149. package/dist/material/skin.js +331 -297
  150. package/dist/material/skin.js.map +1 -1
  151. package/dist/material/skinprofile.js +1058 -0
  152. package/dist/material/skinprofile.js.map +1 -0
  153. package/dist/material/sss.js +353 -0
  154. package/dist/material/sss.js.map +1 -0
  155. package/dist/material/sss_kernel.js +265 -0
  156. package/dist/material/sss_kernel.js.map +1 -0
  157. package/dist/material/sssprofile.js +879 -0
  158. package/dist/material/sssprofile.js.map +1 -0
  159. package/dist/material/subsurfaceprofile.js +4 -8
  160. package/dist/material/subsurfaceprofile.js.map +1 -1
  161. package/dist/material/terrain-cm.js +464 -188
  162. package/dist/material/terrain-cm.js.map +1 -1
  163. package/dist/material/unlit.js +3 -0
  164. package/dist/material/unlit.js.map +1 -1
  165. package/dist/material/water.js +1261 -1438
  166. package/dist/material/water.js.map +1 -1
  167. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  168. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  169. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  172. package/dist/physics/character.js +226 -0
  173. package/dist/physics/character.js.map +1 -0
  174. package/dist/physics/collider.js +209 -0
  175. package/dist/physics/collider.js.map +1 -0
  176. package/dist/physics/events.js +79 -0
  177. package/dist/physics/events.js.map +1 -0
  178. package/dist/physics/joint.js +272 -0
  179. package/dist/physics/joint.js.map +1 -0
  180. package/dist/physics/node_physics.js +234 -0
  181. package/dist/physics/node_physics.js.map +1 -0
  182. package/dist/physics/part.js +91 -0
  183. package/dist/physics/part.js.map +1 -0
  184. package/dist/physics/rigid_body.js +379 -0
  185. package/dist/physics/rigid_body.js.map +1 -0
  186. package/dist/physics/vehicle.js +335 -0
  187. package/dist/physics/vehicle.js.map +1 -0
  188. package/dist/physics/world.js +25 -0
  189. package/dist/physics/world.js.map +1 -0
  190. package/dist/posteffect/bloom.js +49 -14
  191. package/dist/posteffect/bloom.js.map +1 -1
  192. package/dist/posteffect/motionblur.js +106 -106
  193. package/dist/posteffect/motionblur.js.map +1 -1
  194. package/dist/posteffect/postsss.js +572 -0
  195. package/dist/posteffect/postsss.js.map +1 -0
  196. package/dist/posteffect/sao.js +2 -6
  197. package/dist/posteffect/sao.js.map +1 -1
  198. package/dist/posteffect/skinsss.js +605 -355
  199. package/dist/posteffect/skinsss.js.map +1 -1
  200. package/dist/posteffect/ssgi.js +91 -162
  201. package/dist/posteffect/ssgi.js.map +1 -1
  202. package/dist/posteffect/ssr.js +3 -11
  203. package/dist/posteffect/ssr.js.map +1 -1
  204. package/dist/posteffect/sss.js +4 -13
  205. package/dist/posteffect/sss.js.map +1 -1
  206. package/dist/posteffect/taa.js +1 -0
  207. package/dist/posteffect/taa.js.map +1 -1
  208. package/dist/render/abuffer_oit.js +3 -2
  209. package/dist/render/abuffer_oit.js.map +1 -1
  210. package/dist/render/clipmap.js +179 -64
  211. package/dist/render/clipmap.js.map +1 -1
  212. package/dist/render/cluster_light.js +958 -224
  213. package/dist/render/cluster_light.js.map +1 -1
  214. package/dist/render/cull_visitor.js +25 -5
  215. package/dist/render/cull_visitor.js.map +1 -1
  216. package/dist/render/debug_views.js +37 -0
  217. package/dist/render/debug_views.js.map +1 -0
  218. package/dist/render/depthpass.js +5 -1
  219. package/dist/render/depthpass.js.map +1 -1
  220. package/dist/render/drawable_mixin.js +53 -6
  221. package/dist/render/drawable_mixin.js.map +1 -1
  222. package/dist/render/dualdepthpeeling_oit.js +5 -5
  223. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  224. package/dist/render/envlight.js +196 -113
  225. package/dist/render/envlight.js.map +1 -1
  226. package/dist/render/fbm_wavegenerator.js +5 -10
  227. package/dist/render/fbm_wavegenerator.js.map +1 -1
  228. package/dist/render/fft_wavegenerator.js +247 -157
  229. package/dist/render/fft_wavegenerator.js.map +1 -1
  230. package/dist/render/gerstner_wavegenerator.js +16 -38
  231. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  232. package/dist/render/gi/probe_volume.js +1334 -0
  233. package/dist/render/gi/probe_volume.js.map +1 -0
  234. package/dist/render/gi/scene_gi.js +282 -0
  235. package/dist/render/gi/scene_gi.js.map +1 -0
  236. package/dist/render/gi/voxel_atlas.js +198 -0
  237. package/dist/render/gi/voxel_atlas.js.map +1 -0
  238. package/dist/render/gi/voxel_lighting.js +652 -0
  239. package/dist/render/gi/voxel_lighting.js.map +1 -0
  240. package/dist/render/gi/voxel_scene.js +642 -0
  241. package/dist/render/gi/voxel_scene.js.map +1 -0
  242. package/dist/render/gi/voxelize_pass.js +223 -0
  243. package/dist/render/gi/voxelize_pass.js.map +1 -0
  244. package/dist/render/globalbindgroup_allocator.js +3 -2
  245. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  246. package/dist/render/gpu_picking.js +9 -36
  247. package/dist/render/gpu_picking.js.map +1 -1
  248. package/dist/render/instance_culling.js +499 -0
  249. package/dist/render/instance_culling.js.map +1 -0
  250. package/dist/render/lightpass.js +19 -8
  251. package/dist/render/lightpass.js.map +1 -1
  252. package/dist/render/lod.js +46 -0
  253. package/dist/render/lod.js.map +1 -0
  254. package/dist/render/primitive.js +301 -9
  255. package/dist/render/primitive.js.map +1 -1
  256. package/dist/render/primitive_readback.js +209 -0
  257. package/dist/render/primitive_readback.js.map +1 -0
  258. package/dist/render/render_queue.js +162 -11
  259. package/dist/render/render_queue.js.map +1 -1
  260. package/dist/render/renderer.js +10 -7
  261. package/dist/render/renderer.js.map +1 -1
  262. package/dist/render/rendergraph/blackboard.js +14 -1
  263. package/dist/render/rendergraph/blackboard.js.map +1 -1
  264. package/dist/render/rendergraph/executor.js +136 -0
  265. package/dist/render/rendergraph/executor.js.map +1 -1
  266. package/dist/render/rendergraph/forward_plus_builder.js +272 -55
  267. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  268. package/dist/render/rendergraph/frame_graph_context.js +41 -0
  269. package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
  270. package/dist/render/rendergraph/scene_render_context.js +31 -2
  271. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  272. package/dist/render/rendergraph/types.js.map +1 -1
  273. package/dist/render/renderpass.js +28 -5
  274. package/dist/render/renderpass.js.map +1 -1
  275. package/dist/render/sdf/box_allocator.js +98 -0
  276. package/dist/render/sdf/box_allocator.js.map +1 -0
  277. package/dist/render/sdf/global_sdf.js +865 -0
  278. package/dist/render/sdf/global_sdf.js.map +1 -0
  279. package/dist/render/sdf/scene_sdf.js +562 -0
  280. package/dist/render/sdf/scene_sdf.js.map +1 -0
  281. package/dist/render/sdf/sdf_atlas.js +227 -0
  282. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  283. package/dist/render/sdf/sdf_programs.js +42 -0
  284. package/dist/render/sdf/sdf_programs.js.map +1 -0
  285. package/dist/render/sdf/sdf_view.js +199 -0
  286. package/dist/render/sdf/sdf_view.js.map +1 -0
  287. package/dist/render/sdf/waterline.js +610 -0
  288. package/dist/render/sdf/waterline.js.map +1 -0
  289. package/dist/render/shadow_mask_pass.js +142 -25
  290. package/dist/render/shadow_mask_pass.js.map +1 -1
  291. package/dist/render/shore_wave_generator.js +1193 -0
  292. package/dist/render/shore_wave_generator.js.map +1 -0
  293. package/dist/render/sky.js +516 -86
  294. package/dist/render/sky.js.map +1 -1
  295. package/dist/render/transmission_thickness_pass.js +477 -0
  296. package/dist/render/transmission_thickness_pass.js.map +1 -0
  297. package/dist/render/underwater.js +58 -158
  298. package/dist/render/underwater.js.map +1 -1
  299. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  300. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  301. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  302. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  303. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  304. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  305. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  306. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  307. package/dist/render/volumetric_cloud/resources.js +380 -0
  308. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  309. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  310. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  311. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  312. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  313. package/dist/render/water_caustics.js +134 -319
  314. package/dist/render/water_caustics.js.map +1 -1
  315. package/dist/render/water_foam.js +627 -0
  316. package/dist/render/water_foam.js.map +1 -0
  317. package/dist/render/water_interaction.js +1795 -0
  318. package/dist/render/water_interaction.js.map +1 -0
  319. package/dist/render/weightedblended_oit.js +3 -3
  320. package/dist/render/weightedblended_oit.js.map +1 -1
  321. package/dist/scene/basesprite.js +9 -4
  322. package/dist/scene/basesprite.js.map +1 -1
  323. package/dist/scene/batchgroup.js +108 -12
  324. package/dist/scene/batchgroup.js.map +1 -1
  325. package/dist/scene/environment.js +28 -7
  326. package/dist/scene/environment.js.map +1 -1
  327. package/dist/scene/foliage.js +1020 -0
  328. package/dist/scene/foliage.js.map +1 -0
  329. package/dist/scene/foliage_buckets.js +147 -0
  330. package/dist/scene/foliage_buckets.js.map +1 -0
  331. package/dist/scene/foliage_mask.js +358 -0
  332. package/dist/scene/foliage_mask.js.map +1 -0
  333. package/dist/scene/hair.js +15 -4
  334. package/dist/scene/hair.js.map +1 -1
  335. package/dist/scene/light.js +179 -13
  336. package/dist/scene/light.js.map +1 -1
  337. package/dist/scene/mesh.js +327 -45
  338. package/dist/scene/mesh.js.map +1 -1
  339. package/dist/scene/meshdrawable.js +6 -0
  340. package/dist/scene/meshdrawable.js.map +1 -1
  341. package/dist/scene/msdftext.js +9 -3
  342. package/dist/scene/msdftext.js.map +1 -1
  343. package/dist/scene/msdftextsprite.js +9 -3
  344. package/dist/scene/msdftextsprite.js.map +1 -1
  345. package/dist/scene/particlesys.js +8 -2
  346. package/dist/scene/particlesys.js.map +1 -1
  347. package/dist/scene/physics_settings.js +157 -0
  348. package/dist/scene/physics_settings.js.map +1 -0
  349. package/dist/scene/scene.js +190 -44
  350. package/dist/scene/scene.js.map +1 -1
  351. package/dist/scene/scene_node.js +147 -6
  352. package/dist/scene/scene_node.js.map +1 -1
  353. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  354. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  355. package/dist/scene/terrain-cm/grass.js +881 -42
  356. package/dist/scene/terrain-cm/grass.js.map +1 -1
  357. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  358. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  359. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  360. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  361. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  362. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  363. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  364. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  365. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  366. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  367. package/dist/scene/update_queue.js +54 -0
  368. package/dist/scene/update_queue.js.map +1 -0
  369. package/dist/scene/water.js +633 -268
  370. package/dist/scene/water.js.map +1 -1
  371. package/dist/scene/water_surface_sampler.js +324 -0
  372. package/dist/scene/water_surface_sampler.js.map +1 -0
  373. package/dist/scene/wind.js +317 -0
  374. package/dist/scene/wind.js.map +1 -0
  375. package/dist/shaders/atmosphere.js +388 -166
  376. package/dist/shaders/atmosphere.js.map +1 -1
  377. package/dist/shaders/fog.js +100 -32
  378. package/dist/shaders/fog.js.map +1 -1
  379. package/dist/shaders/gi.js +365 -0
  380. package/dist/shaders/gi.js.map +1 -0
  381. package/dist/shaders/ltc_rect.js +202 -0
  382. package/dist/shaders/ltc_rect.js.map +1 -0
  383. package/dist/shaders/misc.js +1 -10
  384. package/dist/shaders/misc.js.map +1 -1
  385. package/dist/shaders/noise.js +5 -1
  386. package/dist/shaders/noise.js.map +1 -1
  387. package/dist/shaders/probes.js +309 -0
  388. package/dist/shaders/probes.js.map +1 -0
  389. package/dist/shaders/sdf.js +537 -0
  390. package/dist/shaders/sdf.js.map +1 -0
  391. package/dist/shaders/shadow.js +104 -70
  392. package/dist/shaders/shadow.js.map +1 -1
  393. package/dist/shaders/skin_brdf.js +243 -0
  394. package/dist/shaders/skin_brdf.js.map +1 -0
  395. package/dist/shaders/ssgi.js +63 -0
  396. package/dist/shaders/ssgi.js.map +1 -0
  397. package/dist/shaders/ssgi_reprojection.js +118 -0
  398. package/dist/shaders/ssgi_reprojection.js.map +1 -0
  399. package/dist/shaders/ssr.js +6 -159
  400. package/dist/shaders/ssr.js.map +1 -1
  401. package/dist/shaders/temporal.js +38 -27
  402. package/dist/shaders/temporal.js.map +1 -1
  403. package/dist/shaders/water.js +32 -82
  404. package/dist/shaders/water.js.map +1 -1
  405. package/dist/shaders/water_medium.js +7 -21
  406. package/dist/shaders/water_medium.js.map +1 -1
  407. package/dist/shadow/dom.js +110 -19
  408. package/dist/shadow/dom.js.map +1 -1
  409. package/dist/shadow/esm.js +3 -3
  410. package/dist/shadow/esm.js.map +1 -1
  411. package/dist/shadow/pcf_opt.js +15 -48
  412. package/dist/shadow/pcf_opt.js.map +1 -1
  413. package/dist/shadow/pcf_pd.js +15 -53
  414. package/dist/shadow/pcf_pd.js.map +1 -1
  415. package/dist/shadow/pcss.js +34 -9
  416. package/dist/shadow/pcss.js.map +1 -1
  417. package/dist/shadow/shadow_impl.js +3 -8
  418. package/dist/shadow/shadow_impl.js.map +1 -1
  419. package/dist/shadow/shadow_region.js +40 -2
  420. package/dist/shadow/shadow_region.js.map +1 -1
  421. package/dist/shadow/shadowmapper.js +93 -53
  422. package/dist/shadow/shadowmapper.js.map +1 -1
  423. package/dist/shadow/ssm.js +18 -72
  424. package/dist/shadow/ssm.js.map +1 -1
  425. package/dist/shadow/vsm.js +3 -3
  426. package/dist/shadow/vsm.js.map +1 -1
  427. package/dist/shapes/shape.js +44 -1
  428. package/dist/shapes/shape.js.map +1 -1
  429. package/dist/utility/buoyancy.js +287 -0
  430. package/dist/utility/buoyancy.js.map +1 -0
  431. package/dist/utility/physical.js +10 -1
  432. package/dist/utility/physical.js.map +1 -1
  433. package/dist/utility/pmrem.js +17 -43
  434. package/dist/utility/pmrem.js.map +1 -1
  435. package/dist/utility/sdf/bake.js +435 -0
  436. package/dist/utility/sdf/bake.js.map +1 -0
  437. package/dist/utility/sdf/bvh.js +576 -0
  438. package/dist/utility/sdf/bvh.js.map +1 -0
  439. package/dist/utility/serialization/manager.js +34 -6
  440. package/dist/utility/serialization/manager.js.map +1 -1
  441. package/dist/utility/serialization/scene/animation.js +46 -5
  442. package/dist/utility/serialization/scene/animation.js.map +1 -1
  443. package/dist/utility/serialization/scene/batch.js +11 -4
  444. package/dist/utility/serialization/scene/batch.js.map +1 -1
  445. package/dist/utility/serialization/scene/camera.js +87 -254
  446. package/dist/utility/serialization/scene/camera.js.map +1 -1
  447. package/dist/utility/serialization/scene/cloth.js +25 -0
  448. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  449. package/dist/utility/serialization/scene/common.js +14 -6
  450. package/dist/utility/serialization/scene/common.js.map +1 -1
  451. package/dist/utility/serialization/scene/foliage.js +821 -0
  452. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  453. package/dist/utility/serialization/scene/hair.js +11 -4
  454. package/dist/utility/serialization/scene/hair.js.map +1 -1
  455. package/dist/utility/serialization/scene/light.js +115 -7
  456. package/dist/utility/serialization/scene/light.js.map +1 -1
  457. package/dist/utility/serialization/scene/material.js +388 -220
  458. package/dist/utility/serialization/scene/material.js.map +1 -1
  459. package/dist/utility/serialization/scene/mesh.js +69 -4
  460. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  461. package/dist/utility/serialization/scene/node.js +140 -5
  462. package/dist/utility/serialization/scene/node.js.map +1 -1
  463. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  464. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  465. package/dist/utility/serialization/scene/particle.js +11 -4
  466. package/dist/utility/serialization/scene/particle.js.map +1 -1
  467. package/dist/utility/serialization/scene/physics.js +120 -0
  468. package/dist/utility/serialization/scene/physics.js.map +1 -0
  469. package/dist/utility/serialization/scene/primitive.js +124 -10
  470. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  471. package/dist/utility/serialization/scene/scene.js +1687 -51
  472. package/dist/utility/serialization/scene/scene.js.map +1 -1
  473. package/dist/utility/serialization/scene/sprite.js +11 -4
  474. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  475. package/dist/utility/serialization/scene/terrain.js +163 -33
  476. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  477. package/dist/utility/serialization/scene/text.js +11 -4
  478. package/dist/utility/serialization/scene/text.js.map +1 -1
  479. package/dist/utility/serialization/scene/water.js +1543 -264
  480. package/dist/utility/serialization/scene/water.js.map +1 -1
  481. package/dist/utility/serialization/types.js.map +1 -1
  482. package/dist/utility/shprojector.js +10 -22
  483. package/dist/utility/shprojector.js.map +1 -1
  484. package/dist/utility/textures/foam.js +170 -0
  485. package/dist/utility/textures/foam.js.map +1 -0
  486. package/dist/utility/textures/ggxlut.js +17 -43
  487. package/dist/utility/textures/ggxlut.js.map +1 -1
  488. package/dist/utility/textures/ltcdata.js +4 -4
  489. package/dist/utility/textures/ltcdata.js.map +1 -1
  490. package/dist/utility/textures/ltclut.js +16 -6
  491. package/dist/utility/textures/ltclut.js.map +1 -1
  492. package/dist/utility/unsupported.js +24 -0
  493. package/dist/utility/unsupported.js.map +1 -0
  494. package/dist/values.js +13 -1
  495. package/dist/values.js.map +1 -1
  496. package/package.json +25 -12
  497. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  498. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  499. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  500. package/src/asset/meshoptimizer/LICENSE +21 -0
  501. package/dist/animation/joint_dynamics/convex_collider.js +0 -320
  502. package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bladegrassmaterial.js","sources":["../../../src/scene/terrain-cm/bladegrassmaterial.ts"],"sourcesContent":["import type { Clonable, Nullable } from '@zephyr3d/base';\r\nimport { Vector2, Vector3, Vector4, DWeakRef, DRef } from '@zephyr3d/base';\r\nimport type {\r\n BindGroup,\r\n GPUDataBuffer,\r\n Texture2D,\r\n PBFunctionScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n RenderStateSet\r\n} from '@zephyr3d/device';\r\nimport { applyMaterialMixins, MeshMaterial, mixinPBRMetallicRoughness, ShaderHelper } from '../../material';\r\nimport type { DrawContext } from '../../render';\r\nimport type { Camera } from '../../camera';\r\nimport type { WindField } from '../wind';\r\nimport { RENDER_PASS_TYPE_LIGHT, RENDER_PASS_TYPE_SHADOWMAP } from '../../values';\r\nimport type { ClipmapTerrain } from './terrain-cm';\r\nimport { GRASS_BLADE_LOD_BAND, grassBladeLodDistance } from './grass_gpu';\r\nimport { fetchSampler } from '../../utility/misc';\r\n\r\n/**\r\n * Vertex pairs across a blade at the high and the low detail level, each closed by one tip\r\n * vertex: 15 and 7 vertices, as in \"Procedural Grass in Ghost of Tsushima\" (Wohllaib, GDC 2021)\r\n */\r\nconst BLADE_HIGH_PAIRS = 7;\r\nconst BLADE_LOW_PAIRS = 3;\r\n/**\r\n * First vertex index of the low detail level. The vertex index tells the vertex shader which\r\n * level it draws, so both draws share one program and one set of uniforms.\r\n */\r\nconst BLADE_LOW_VERTEX_BASE = 16;\r\n/** Number of vec4 per blade instance, see GrassGpuPlacement */\r\nexport const BLADE_INSTANCE_VEC4 = 4;\r\n/**\r\n * Index counts of the high and the low detail level, which follow each other in the index buffer\r\n * @internal\r\n */\r\nexport const BLADE_LOD_INDEX_COUNTS = [BLADE_HIGH_PAIRS, BLADE_LOW_PAIRS].map((pairs) => (pairs - 1) * 6 + 3);\r\n\r\n/**\r\n * Triangle lists of a blade at the high then the low detail level: quads between consecutive\r\n * vertex pairs, closed by the tip. Vertex base + 2k is the left side of pair k, base + 2k + 1 the\r\n * right side, base + 2 * pairs the tip.\r\n * @internal\r\n */\r\nexport function createBladeIndices(): Uint16Array<ArrayBuffer> {\r\n const indices: number[] = [];\r\n const level = (base: number, pairs: number) => {\r\n for (let k = 0; k < pairs - 1; k++) {\r\n const a = base + 2 * k;\r\n indices.push(a, a + 1, a + 3, a, a + 3, a + 2);\r\n }\r\n const last = base + 2 * (pairs - 1);\r\n indices.push(last, last + 1, base + 2 * pairs);\r\n };\r\n level(0, BLADE_HIGH_PAIRS);\r\n level(BLADE_LOW_VERTEX_BASE, BLADE_LOW_PAIRS);\r\n return new Uint16Array(indices);\r\n}\r\n\r\n/**\r\n * Terrain grass material for procedural blades.\r\n *\r\n * Each blade is a cubic Bezier curve built in the vertex shader from the vertex index and the\r\n * blade's instance data, following \"Procedural Grass in Ghost of Tsushima\" (Wohllaib, GDC 2021):\r\n * the tip is placed from the tilt and the facing, the middle control points are pushed away from\r\n * the base-tip line by the bend, and the vertex steps sideways by the tapered width. The normal is\r\n * the cross product of the curve derivative and the width direction.\r\n *\r\n * Three tricks from the talk make the blades read better:\r\n * - rounded normals: the normal tilts outward across the blade's width, so a flat blade shades as\r\n * if it were curved;\r\n * - view-space thickening: a blade seen edge-on spreads its vertices sideways to the view, so it\r\n * does not thin out to nothing;\r\n * - distant normals: farther away the normal blends toward a normal shared by the whole clump and\r\n * the surface gets rougher, which keeps distant fields from glittering. The talk does not say\r\n * what that normal is; here it is the terrain normal (as in the cainrademan/Unity-Grass\r\n * reimplementation) leaned toward the clump's facing by its tilt, so a distant field shades\r\n * like a canopy lit from above instead of like blades turned away from a low sun.\r\n *\r\n * Color follows the talk too: a gradient along the blade whose column is picked by the blade's\r\n * clump (a color texture, or root and tip colors with a per-clump brightness), and an ambient\r\n * occlusion that darkens toward the root, where the other blades hide the sky.\r\n *\r\n * Two detail levels (see GrassGpuPlacement): near the switch distance, the three blades in four\r\n * that give way shrink away while the fourth widens to four times its width - Outerra's\r\n * procedural grass (outerra.blogspot.com, 2012) doubles the width for each halving of the blades\r\n * to keep the ground as covered, and a quarter of the blades is two halvings - and morphs toward\r\n * its low detail shape - the\r\n * talk blends the high detail vertices toward the low detail shape; each vertex here moves onto\r\n * the low detail outline the way CDLOD (Strugar, 2009) morphs terrain vertices onto the coarser\r\n * grid - so the switch does not pop.\r\n *\r\n * Instance data is written by the GPU placement pass (GrassGpuPlacement), four vec4 per blade:\r\n * - (base position xyz, 1 for a blade that gives way to the low detail level; +2 when flagged as\r\n * occluded)\r\n * - (facing angle, previous facing angle, wind push, previous wind push); the placement pass\r\n * samples the scene wind for this frame and the last one and turns the facing downwind\r\n * - (clump facing angle, clump color, packed terrain normal, per-blade hash)\r\n * - (height, width, tilt, bend)\r\n *\r\n * @internal\r\n */\r\nexport class ClipmapBladeGrassMaterial\r\n extends applyMaterialMixins(MeshMaterial, mixinPBRMetallicRoughness)\r\n implements Clonable<ClipmapBladeGrassMaterial>\r\n{\r\n /** @internal */\r\n private readonly _terrain: DWeakRef<ClipmapTerrain>;\r\n /** @internal */\r\n private readonly _instances: DRef<GPUDataBuffer>;\r\n /** @internal */\r\n private readonly _colorMap: DRef<Texture2D>;\r\n /** (taper, tip detail, clump color variation, root occlusion) @internal */\r\n private readonly _shape: Vector4;\r\n /** (roundness, view thickening, far normal start, far normal end) @internal */\r\n private readonly _look: Vector4;\r\n /** (far roughness, unused...) @internal */\r\n private readonly _look2: Vector4;\r\n /** (wind lean, sway amplitude, sway speed, unused) @internal */\r\n private readonly _wind: Vector4;\r\n /** (wind clock, previous wind clock) @internal */\r\n private readonly _windTime: Vector2;\r\n /** @internal */\r\n private readonly _rootColor: Vector4;\r\n /** @internal */\r\n private readonly _tipColor: Vector4;\r\n /** Light let through from behind at the tip, see transmissionColor @internal */\r\n private readonly _transmissionColor: Vector4;\r\n /** @internal */\r\n private readonly _distanceFade: Vector2;\r\n /** (low detail distance, first instance of the low detail list, unused, unused) @internal */\r\n private readonly _lod: Vector4;\r\n /** @internal */\r\n private _lodDistance: number;\r\n /** @internal */\r\n private readonly _prevCameraPos: Vector4;\r\n /**\r\n * Position of the camera the blades were placed for. A shadow map pass renders from the\r\n * light, but the blades must take the shape they have in that camera's view to cast the\r\n * shadows of the blades seen. @internal\r\n */\r\n private readonly _viewCameraPos: Vector4;\r\n /** @internal */\r\n private _drawDistance: number;\r\n /** @internal */\r\n private _farDensity: number;\r\n /**\r\n * (world size of a pixel at distance 1, 1 for a perspective camera, minimum screen width in\r\n * pixels, unused), see minScreenWidth @internal\r\n */\r\n private readonly _pixelSize: Vector4;\r\n /** @internal */\r\n private static readonly _tmpPos = new Vector3();\r\n /** @internal */\r\n private static readonly FEATURE_OCCLUSION_DEBUG = this.defineFeature();\r\n /** @internal */\r\n private static readonly FEATURE_COLOR_MAP = this.defineFeature();\r\n constructor(terrain: ClipmapTerrain) {\r\n super();\r\n this.metallic = 0;\r\n this.roughness = 0.6;\r\n // Both sides are lit: the fragment shader turns the normal toward the viewer itself, since the\r\n // generic flip would also turn the rounded normals inward on the back face\r\n this.doubleSidedLighting = false;\r\n this.specularFactor = new Vector4(1, 1, 1, 0.3);\r\n this._terrain = new DWeakRef(terrain);\r\n this._instances = new DRef();\r\n this._colorMap = new DRef();\r\n this._shape = new Vector4(0.7, 1.5, 0.6, 0.5);\r\n this._look = new Vector4(0.5, 0.5, 15, 60);\r\n this._look2 = new Vector4(0.9, 0, 0, 0);\r\n this._wind = new Vector4(0.5, 0.15, 2.5, 0);\r\n this._windTime = new Vector2(0, 0);\r\n this._rootColor = new Vector4(0.06, 0.12, 0.02, 1);\r\n this._tipColor = new Vector4(0.35, 0.45, 0.12, 1);\r\n this._transmissionColor = new Vector4(0.45, 0.55, 0.12, 1);\r\n this._distanceFade = new Vector2(0, 0);\r\n this._lod = new Vector4(0, 0, 0, 0);\r\n this._lodDistance = 0;\r\n this._prevCameraPos = new Vector4();\r\n this._viewCameraPos = new Vector4();\r\n this._drawDistance = 0;\r\n this._farDensity = 1;\r\n this._pixelSize = new Vector4(0, 1, 1, 0);\r\n this.useFeature(ClipmapBladeGrassMaterial.FEATURE_OCCLUSION_DEBUG, false);\r\n this.useFeature(ClipmapBladeGrassMaterial.FEATURE_COLOR_MAP, false);\r\n }\r\n clone() {\r\n const other = new ClipmapBladeGrassMaterial(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._shape.set(other._shape);\r\n this._look.set(other._look);\r\n this._look2.set(other._look2);\r\n this._wind.set(other._wind);\r\n this.colorMap = other.colorMap;\r\n this._rootColor.set(other._rootColor);\r\n this._tipColor.set(other._tipColor);\r\n this._transmissionColor.set(other._transmissionColor);\r\n this._distanceFade.set(other._distanceFade);\r\n this._drawDistance = other._drawDistance;\r\n this._farDensity = other._farDensity;\r\n this._pixelSize.set(other._pixelSize);\r\n this._lodDistance = other._lodDistance;\r\n this.updateDistanceParams();\r\n }\r\n /**\r\n * Sets the instance buffer written by the GPU placement pass\r\n * @internal\r\n */\r\n setInstanceBuffer(buffer: Nullable<GPUDataBuffer>, lowListBase: number) {\r\n // Bound uniforms are only re-applied after uniformChanged(), and the placement pass\r\n // reallocates the buffer whenever its placement window grows\r\n if (buffer !== this._instances.get() || lowListBase !== this._lod.y) {\r\n this._instances.set(buffer);\r\n this._lod.y = lowListBase;\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * Distance at which the blades switch to the low detail level; 0 keeps them all at high detail\r\n * @internal\r\n */\r\n get lodDistance() {\r\n return this._lodDistance;\r\n }\r\n set lodDistance(val: number) {\r\n val = Math.max(0, val);\r\n if (val !== this._lodDistance) {\r\n this._lodDistance = val;\r\n this.updateDistanceParams();\r\n }\r\n }\r\n /**\r\n * Updates the per-frame values before drawing for a camera: the camera position the blades are\r\n * shaped for, and the previous one the motion vectors are computed against\r\n * @internal\r\n */\r\n prepareDraw(camera: Camera, wind: Nullable<WindField>, renderHeight = 0) {\r\n // The pixel size is that of the camera's own view: shadow map passes pass 0 and keep it, so the\r\n // blades cast the shadows of the blades seen, like the camera position below\r\n if (renderHeight > 0) {\r\n const projection = camera.getProjectionMatrix();\r\n // Row 1, column 1 is 1 / tan(fovY / 2) for a perspective projection and 2 / height for an\r\n // orthographic one, so either way the world size of a pixel is 2 / (m11 * renderHeight), at\r\n // distance 1 for a perspective camera\r\n const size = 2 / (projection.m11 * renderHeight);\r\n const perspective = projection.isPerspective() ? 1 : 0;\r\n const ps = this._pixelSize;\r\n if (ps.x !== size || ps.y !== perspective) {\r\n ps.x = size;\r\n ps.y = perspective;\r\n this.uniformChanged();\r\n }\r\n }\r\n const pos = camera.getWorldPosition(ClipmapBladeGrassMaterial._tmpPos);\r\n const c = this._viewCameraPos;\r\n if (c.x !== pos.x || c.y !== pos.y || c.z !== pos.z) {\r\n c.setXYZW(pos.x, pos.y, pos.z, 0);\r\n this.uniformChanged();\r\n }\r\n const windParams = wind?.shaderParams;\r\n const windTime = windParams ? windParams[13] : 0;\r\n const prevWindTime = windParams ? windParams[16 + 13] : 0;\r\n if (this._windTime.x !== windTime || this._windTime.y !== prevWindTime) {\r\n this._windTime.setXY(windTime, prevWindTime);\r\n this.uniformChanged();\r\n }\r\n const prev = camera.prevPosition ?? camera.getWorldPosition(ClipmapBladeGrassMaterial._tmpPos);\r\n const p = this._prevCameraPos;\r\n if (p.x !== prev.x || p.y !== prev.y || p.z !== prev.z) {\r\n p.setXYZW(prev.x, prev.y, prev.z, 0);\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * Minimum width of a blade on screen, in pixels: farther blades are widened to it so they stay\r\n * at least this wide instead of thinning below a pixel and flickering.\r\n */\r\n get minScreenWidth() {\r\n return this._pixelSize.z;\r\n }\r\n set minScreenWidth(val: number) {\r\n val = Math.min(4, Math.max(0, val));\r\n if (val !== this._pixelSize.z) {\r\n this._pixelSize.z = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /** How much the blade narrows toward the tip, 0 keeps it the same width up to the tip vertex */\r\n get taper() {\r\n return this._shape.x;\r\n }\r\n set taper(val: number) {\r\n val = Math.min(1, Math.max(0, val));\r\n if (val !== this._shape.x) {\r\n this._shape.x = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /** Moves the vertices toward the tip, where the blade curves most. 1 spaces them evenly. */\r\n get tipDetail() {\r\n return this._shape.y;\r\n }\r\n set tipDetail(val: number) {\r\n val = Math.min(4, Math.max(1, val));\r\n if (val !== this._shape.y) {\r\n this._shape.y = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /** How much the brightness changes from clump to clump, 0 for none */\r\n get clumpColorVariation() {\r\n return this._shape.z;\r\n }\r\n set clumpColorVariation(val: number) {\r\n val = Math.min(1, Math.max(0, val));\r\n if (val !== this._shape.z) {\r\n this._shape.z = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /** How much the ambient light darkens toward the root, 0 for none, 1 for black at the root */\r\n get rootOcclusion() {\r\n return this._shape.w;\r\n }\r\n set rootOcclusion(val: number) {\r\n val = Math.min(1, Math.max(0, val));\r\n if (val !== this._shape.w) {\r\n this._shape.w = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * Optional color texture: V from the root (0) to the tip (1), U picked per clump. Replaces the\r\n * root and tip colors.\r\n */\r\n get colorMap(): Nullable<Texture2D> {\r\n return this._colorMap.get();\r\n }\r\n set colorMap(val: Nullable<Texture2D>) {\r\n if (val !== this._colorMap.get()) {\r\n this._colorMap.set(val);\r\n this.useFeature(ClipmapBladeGrassMaterial.FEATURE_COLOR_MAP, !!val);\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * How much the normals tilt outward across the blade, making flat blades shade as if curved.\r\n * 0 shades them flat.\r\n */\r\n get roundness() {\r\n return this._look.x;\r\n }\r\n set roundness(val: number) {\r\n val = Math.min(2, Math.max(0, val));\r\n if (val !== this._look.x) {\r\n this._look.x = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * How much a blade seen edge-on is widened toward the viewer, as a fraction of its width.\r\n * Keeps fields looking full from low angles. 0 disables it.\r\n */\r\n get viewThickening() {\r\n return this._look.y;\r\n }\r\n set viewThickening(val: number) {\r\n val = Math.min(2, Math.max(0, val));\r\n if (val !== this._look.y) {\r\n this._look.y = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /** Distance at which the blade normals start blending toward their clump's shared normal */\r\n get farNormalStart() {\r\n return this._look.z;\r\n }\r\n set farNormalStart(val: number) {\r\n val = Math.max(0, val);\r\n if (val !== this._look.z) {\r\n this._look.z = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /** Distance at which the blade normals are fully their clump's shared normal */\r\n get farNormalEnd() {\r\n return this._look.w;\r\n }\r\n set farNormalEnd(val: number) {\r\n val = Math.max(0, val);\r\n if (val !== this._look.w) {\r\n this._look.w = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /** Roughness the blades reach at the far normal end distance, dulling distant highlights */\r\n get farRoughness() {\r\n return this._look2.x;\r\n }\r\n set farRoughness(val: number) {\r\n val = Math.min(1, Math.max(0, val));\r\n if (val !== this._look2.x) {\r\n this._look2.x = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * How far the wind lays the blades over toward lying flat, per unit of wind push. 0 leaves\r\n * their lean alone.\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 blade tips bob in the wind, as a fraction of the blade 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 blades 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 /** Color at the root of the blades */\r\n get rootColor(): Vector4 {\r\n return this._rootColor;\r\n }\r\n set rootColor(val: Vector4) {\r\n this._rootColor.set(val);\r\n this.uniformChanged();\r\n }\r\n /** Color at the tip of the blades */\r\n get tipColor(): Vector4 {\r\n return this._tipColor;\r\n }\r\n set tipColor(val: Vector4) {\r\n this._tipColor.set(val);\r\n this.uniformChanged();\r\n }\r\n /** Color of the light the blades let through from behind. */\r\n get transmissionColor(): Vector4 {\r\n return this._transmissionColor;\r\n }\r\n set transmissionColor(val: Vector4) {\r\n this._transmissionColor.set(val);\r\n this.uniformChanged();\r\n }\r\n /** @internal */\r\n setDrawDistance(distance: number) {\r\n this._drawDistance = distance;\r\n this.updateDistanceParams();\r\n }\r\n /**\r\n * Kept for the interface shared with the card material: blades thin out by their detail levels\r\n * instead\r\n * @internal\r\n */\r\n setFarDensity(farDensity: number) {\r\n this._farDensity = farDensity;\r\n }\r\n /** @internal */\r\n private updateDistanceParams() {\r\n const distance = this._drawDistance;\r\n this._distanceFade.setXY(distance > 0 ? distance * 0.75 : 0, distance > 0 ? distance : 0);\r\n // The same switch distance as the placement pass\r\n this._lod.x = grassBladeLodDistance(this._lodDistance, distance);\r\n this.uniformChanged();\r\n }\r\n /** @internal */\r\n get occlusionDebug() {\r\n return !!this.featureUsed<boolean>(ClipmapBladeGrassMaterial.FEATURE_OCCLUSION_DEBUG);\r\n }\r\n set occlusionDebug(val: boolean) {\r\n this.useFeature(ClipmapBladeGrassMaterial.FEATURE_OCCLUSION_DEBUG, !!val);\r\n }\r\n isTransparentPass(_pass: number) {\r\n return false;\r\n }\r\n supportLighting() {\r\n return true;\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 bindGroup.setBuffer('zBladeInstances', this._instances.get()!);\r\n bindGroup.setValue('zBladeShape', this._shape);\r\n bindGroup.setValue('zBladeLook', this._look);\r\n bindGroup.setValue('zBladeLook2', this._look2);\r\n bindGroup.setValue('zBladeWind', this._wind);\r\n bindGroup.setValue('zWindTime', this._windTime);\r\n bindGroup.setValue('zDistanceFade', this._distanceFade);\r\n bindGroup.setValue('zBladeLod', this._lod);\r\n bindGroup.setValue('zPrevCameraPos', this._prevCameraPos);\r\n bindGroup.setValue('zBladePixel', this._pixelSize);\r\n if (ctx.renderPass!.type === RENDER_PASS_TYPE_SHADOWMAP) {\r\n bindGroup.setValue('zViewCameraPos', this._viewCameraPos);\r\n }\r\n if (this.needFragmentColor(ctx)) {\r\n bindGroup.setValue('zRootColor', this._rootColor);\r\n bindGroup.setValue('zTipColor', this._tipColor);\r\n bindGroup.setValue('zBladeTransmission', this._transmissionColor);\r\n bindGroup.setValue('zBladeRoundness', this._look.x);\r\n if (this._colorMap.get()) {\r\n bindGroup.setTexture('zColorMap', this._colorMap.get()!, fetchSampler('clamp_linear'));\r\n }\r\n }\r\n }\r\n /**\r\n * Emits the world position and flat normal of the current vertex of a blade as seen from a\r\n * camera position, into `worldPos` and `flatNormal` suffixed by `suffix`. The camera position\r\n * drives the detail level transition, the draw distance fade and the view-space thickening.\r\n */\r\n private emitBladeVertex(\r\n scope: PBInsideFunctionScope,\r\n cameraPos: PBShaderExp,\r\n facingAngle: PBShaderExp,\r\n windPush: PBShaderExp,\r\n windTime: PBShaderExp,\r\n suffix: string\r\n ) {\r\n const pb = scope.$builder;\r\n const v = (name: string) => `${name}${suffix}`;\r\n // Blade frame: facing on the ground plane (already turned downwind by the placement pass),\r\n // width across it, tip leaning by the tilt, which the wind raises toward lying flat: the\r\n // \"general bias away from the wind\" of the Ghost of Tsushima talks\r\n scope.$l[v('facing')] = pb.vec3(pb.cos(facingAngle), 0, pb.sin(facingAngle));\r\n scope.$l[v('widthDir')] = pb.vec3(pb.neg(scope[v('facing')].z), 0, scope[v('facing')].x);\r\n scope.$l[v('tilt')] = pb.add(\r\n scope.inst3.z,\r\n pb.mul(pb.sub(1, scope.inst3.z), pb.clamp(pb.mul(windPush, scope.zBladeWind.x), 0, 0.95))\r\n );\r\n scope.$l[v('tiltAngle')] = pb.mul(scope[v('tilt')], Math.PI * 0.5);\r\n scope.$l[v('tipDir')] = pb.add(\r\n pb.mul(scope[v('facing')], pb.sin(scope[v('tiltAngle')])),\r\n pb.vec3(0, pb.cos(scope[v('tiltAngle')]), 0)\r\n );\r\n scope.$l[v('bendDir')] = pb.add(\r\n pb.mul(scope[v('facing')], pb.neg(pb.cos(scope[v('tiltAngle')]))),\r\n pb.vec3(0, pb.sin(scope[v('tiltAngle')]), 0)\r\n );\r\n // Detail level transition over the last band before the switch distance: 0 before it, 1 at and\r\n // past it, which is where every blade of the low detail list is\r\n scope.$l[v('bladeDist')] = pb.distance(cameraPos, scope.base);\r\n scope.$l[v('lodFade')] = pb.smoothStep(\r\n pb.mul(scope.zBladeLod.x, 1 - GRASS_BLADE_LOD_BAND),\r\n scope.zBladeLod.x,\r\n scope[v('bladeDist')]\r\n );\r\n // (width scale, overall scale): the blades that stay widen to four times their width, the others\r\n // shrink away; everything shrinks into the ground over the last quarter of the draw distance\r\n scope.$l[v('bladeScale')] = pb.vec2(\r\n pb.add(1, pb.mul(scope[v('lodFade')], 3)),\r\n pb.sub(1, pb.mul(scope.extra, scope[v('lodFade')]))\r\n );\r\n scope.$if(pb.greaterThan(scope.zDistanceFade.y, 0), function () {\r\n this[v('bladeScale')] = pb.vec2(\r\n this[v('bladeScale')].x,\r\n pb.mul(\r\n this[v('bladeScale')].y,\r\n pb.sub(1, pb.smoothStep(this.zDistanceFade.x, this.zDistanceFade.y, this[v('bladeDist')]))\r\n )\r\n );\r\n });\r\n const s = scope[v('bladeScale')] as PBShaderExp;\r\n scope.$l[v('h')] = pb.mul(scope.inst3.x, s.y);\r\n scope.$l[v('widthScale')] = pb.mul(scope.inst3.y, s.x, s.y, 0.5);\r\n // Cubic Bezier from the base: tip from tilt and facing, middle points pushed away from the\r\n // base-tip line by the bend (up and back when the blade leans forward)\r\n scope.$l[v('p3')] = pb.mul(scope[v('tipDir')], scope[v('h')]);\r\n scope.$l[v('bendOffset')] = pb.mul(scope[v('bendDir')], pb.mul(scope.inst3.w, scope[v('h')]));\r\n scope.$l[v('p1')] = pb.add(pb.mul(scope[v('p3')], 1 / 3), scope[v('bendOffset')]);\r\n scope.$l[v('p2')] = pb.add(pb.mul(scope[v('p3')], 2 / 3), scope[v('bendOffset')]);\r\n // Sway: a sine bob of the upper control points, whose phase comes from the blade's hash and\r\n // the position along the blade (Ghost of Tsushima), scaled by the wind push. Applying it to\r\n // the last two control points with weights 2/3 and 1 follows cainrademan/Unity-Grass.\r\n scope.$l[v('swayPhase')] = pb.add(\r\n pb.mul(windTime, scope.zBladeWind.z),\r\n pb.mul(scope.inst2.w, Math.PI * 2)\r\n );\r\n scope.$l[v('swayAmount')] = pb.mul(scope.zBladeWind.y, scope[v('h')], windPush);\r\n scope[v('p2')] = pb.add(\r\n scope[v('p2')],\r\n pb.mul(\r\n scope[v('bendDir')],\r\n pb.mul(scope[v('swayAmount')], 2 / 3, pb.sin(pb.add(scope[v('swayPhase')], (Math.PI * 4) / 3)))\r\n )\r\n );\r\n scope[v('p3')] = pb.add(\r\n scope[v('p3')],\r\n pb.mul(scope[v('bendDir')], pb.mul(scope[v('swayAmount')], pb.sin(scope[v('swayPhase')])))\r\n );\r\n // Point of the blade at curve parameter t on side `side` (-1, 1, 0 on the center line), into\r\n // `${tag}Pos` and `${tag}Normal`\r\n const point = (sc: PBInsideFunctionScope, t: PBShaderExp, side: PBShaderExp, tag: string) => {\r\n sc.$l[`${tag}T`] = t;\r\n sc.$l[`${tag}Omt`] = pb.sub(1, sc[`${tag}T`]);\r\n const tt = sc[`${tag}T`] as PBShaderExp;\r\n const omt = sc[`${tag}Omt`] as PBShaderExp;\r\n sc.$l[`${tag}Curve`] = pb.add(\r\n pb.mul(sc[v('p1')], pb.mul(3, omt, omt, tt)),\r\n pb.mul(sc[v('p2')], pb.mul(3, omt, tt, tt)),\r\n pb.mul(sc[v('p3')], pb.mul(tt, tt, tt))\r\n );\r\n sc.$l[`${tag}Tangent`] = pb.add(\r\n pb.mul(sc[v('p1')], pb.mul(3, omt, pb.sub(omt, pb.mul(tt, 2)))),\r\n pb.mul(sc[v('p2')], pb.mul(3, tt, pb.sub(pb.mul(omt, 2), tt))),\r\n pb.mul(sc[v('p3')], pb.mul(3, tt, tt))\r\n );\r\n sc.$l[`${tag}HalfWidth`] = pb.mul(sc[v('widthScale')], pb.mix(1, omt, sc.zBladeShape.x));\r\n // View-space thickening: when the blade's normal is nearly orthogonal to the view vector the\r\n // blade is seen edge-on, so its sides also step apart across the view. The response curve\r\n // is the one of the cainrademan/Unity-Grass reimplementation.\r\n sc.$l[`${tag}Centre`] = pb.add(sc.base, sc[`${tag}Curve`]);\r\n sc.$l[`${tag}ToCamera`] = pb.normalize(pb.sub(cameraPos, sc[`${tag}Centre`]));\r\n sc.$l[`${tag}Normal`] = pb.normalize(pb.cross(sc[v('widthDir')], sc[`${tag}Tangent`]));\r\n sc.$l[`${tag}EdgeOn`] = pb.sub(\r\n 1,\r\n pb.smoothStep(0, 0.3, pb.abs(pb.dot(sc[`${tag}Normal`], sc[`${tag}ToCamera`])))\r\n );\r\n sc.$l[`${tag}Across`] = pb.cross(sc[`${tag}ToCamera`], pb.normalize(sc[`${tag}Tangent`]));\r\n // Keep the sides on the same side as the blade's own width, so the blade never folds over\r\n sc[`${tag}Across`] = pb.mul(\r\n sc[`${tag}Across`],\r\n pb.sub(pb.mul(pb.step(0, pb.dot(sc[`${tag}Across`], sc[v('widthDir')])), 2), 1)\r\n );\r\n sc.$l[`${tag}Pos`] = pb.add(\r\n sc[`${tag}Centre`],\r\n pb.mul(sc[v('widthDir')], pb.mul(side, sc[`${tag}HalfWidth`])),\r\n pb.mul(sc[`${tag}Across`], pb.mul(side, sc[`${tag}HalfWidth`], sc.zBladeLook.y, sc[`${tag}EdgeOn`]))\r\n );\r\n sc.$l[`${tag}AcrossLen`] = pb.length(sc[`${tag}Across`]);\r\n sc.$l[`${tag}AcrossDir`] = pb.div(sc[`${tag}Across`], pb.max(sc[`${tag}AcrossLen`], 1e-4));\r\n sc.$l[`${tag}SeenHalfWidth`] = pb.mul(\r\n sc[`${tag}HalfWidth`],\r\n pb.add(\r\n pb.abs(pb.dot(sc[v('widthDir')], sc[`${tag}AcrossDir`])),\r\n pb.mul(sc.zBladeLook.y, sc[`${tag}EdgeOn`], sc[`${tag}AcrossLen`])\r\n )\r\n );\r\n sc.$l[`${tag}MinHalfWidth`] = pb.mul(\r\n 0.5,\r\n sc.zBladePixel.z,\r\n sc.zBladePixel.x,\r\n pb.mix(1, pb.distance(cameraPos, sc[`${tag}Centre`]), sc.zBladePixel.y),\r\n sc[v('bladeScale')].y\r\n );\r\n sc[`${tag}Pos`] = pb.add(\r\n sc[`${tag}Pos`],\r\n pb.mul(\r\n sc[`${tag}AcrossDir`],\r\n pb.mul(side, pb.max(pb.sub(sc[`${tag}MinHalfWidth`], sc[`${tag}SeenHalfWidth`]), 0))\r\n )\r\n );\r\n };\r\n point(scope, scope.t, scope.side, v('zv'));\r\n scope.$l[v('worldPos')] = scope[`${v('zv')}Pos`];\r\n scope.$l[v('flatNormal')] = scope[`${v('zv')}Normal`];\r\n // Through the transition band the high detail vertices move onto the low detail outline: a\r\n // vertex at `along` lands between the two low detail vertices around it, in proportion, as\r\n // CDLOD (Strugar, 2009) morphs terrain vertices onto the coarser grid. The tip vertex is on\r\n // both outlines already.\r\n //\r\n // Only this frame's vertex is morphed; last frame's takes the same morph offset. Morphing it\r\n // again from last frame's inputs left the motion vectors NaN across the band with TAA on (the\r\n // same code runs clean for this frame, the cause was not pinned down), and the offset changes\r\n // little in a frame: the morph spans the last quarter of the switch distance.\r\n if (suffix) {\r\n scope[v('worldPos')] = pb.add(scope[v('worldPos')], scope.zMorphOffset);\r\n return;\r\n }\r\n scope.$l.zMorphOffset = pb.vec3(0);\r\n scope.$if(pb.and(pb.not(scope.isLow), pb.greaterThan(scope[v('lodFade')], 0)), function () {\r\n this.$l[v('ma')] = pb.mul(this.along, BLADE_LOW_PAIRS);\r\n this.$l[v('mj')] = pb.min(pb.floor(this[v('ma')]), BLADE_LOW_PAIRS - 1);\r\n this.$l[v('mf')] = pb.sub(this[v('ma')], this[v('mj')]);\r\n // Past the last low detail pair comes the tip, on the center line\r\n this.$l[v('mSide')] = pb.mul(this.side, pb.step(this[v('mj')], BLADE_LOW_PAIRS - 2));\r\n point(this, this.zAlongToT(pb.div(this[v('mj')], BLADE_LOW_PAIRS)), this.side, v('zm0'));\r\n point(\r\n this,\r\n this.zAlongToT(pb.div(pb.add(this[v('mj')], 1), BLADE_LOW_PAIRS)),\r\n this[v('mSide')],\r\n v('zm1')\r\n );\r\n this.zMorphOffset = pb.mul(\r\n pb.sub(pb.mix(this[`${v('zm0')}Pos`], this[`${v('zm1')}Pos`], this[v('mf')]), this[v('worldPos')]),\r\n this[v('lodFade')]\r\n );\r\n this[v('worldPos')] = pb.add(this[v('worldPos')], this.zMorphOffset);\r\n });\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n scope.zBladeInstances = pb.vec4[0]().storageBufferReadonly(2);\r\n scope.zBladeShape = pb.vec4().uniform(2);\r\n scope.zBladeLook = pb.vec4().uniform(2);\r\n scope.zBladeLook2 = pb.vec4().uniform(2);\r\n scope.zDistanceFade = pb.vec2().uniform(2);\r\n // (low detail distance, first instance of the low detail list, unused, unused)\r\n scope.zBladeLod = pb.vec4().uniform(2);\r\n scope.zPrevCameraPos = pb.vec4().uniform(2);\r\n // (pixel size at distance 1, perspective flag, minimum screen width in pixels, unused)\r\n scope.zBladePixel = pb.vec4().uniform(2);\r\n // (wind lean, sway amplitude, sway speed, unused)\r\n scope.zBladeWind = pb.vec4().uniform(2);\r\n // (wind clock, previous wind clock)\r\n scope.zWindTime = pb.vec2().uniform(2);\r\n // Shadow map passes render from the light: the blades are shaped for the camera they were\r\n // placed for instead, see _viewCameraPos\r\n const shadowPass = this.drawContext.renderPass!.type === RENDER_PASS_TYPE_SHADOWMAP;\r\n if (shadowPass) {\r\n scope.zViewCameraPos = pb.vec4().uniform(2);\r\n }\r\n scope.$l.zBladeViewPos = shadowPass ? scope.zViewCameraPos.xyz : ShaderHelper.getCameraPosition(scope);\r\n // Position along the blade (0 at the root, 1 at the tip) to curve parameter: the vertices are\r\n // spread toward the tip by the tip detail exponent\r\n pb.func('zAlongToT', [pb.float('a')], function () {\r\n this.$return(pb.sub(1, pb.pow(pb.sub(1, this.a), this.zBladeShape.y)));\r\n });\r\n // The vertex index tells the detail level: the low detail draw's indices start at\r\n // BLADE_LOW_VERTEX_BASE, and its instances at the low detail list\r\n scope.$l.isLow = pb.greaterThanEqual(\r\n pb.uint(scope.$builtins.vertexIndex),\r\n pb.uint(BLADE_LOW_VERTEX_BASE)\r\n );\r\n scope.$l.vid = pb.sub(\r\n pb.uint(scope.$builtins.vertexIndex),\r\n scope.$choice(scope.isLow, pb.uint(BLADE_LOW_VERTEX_BASE), pb.uint(0))\r\n );\r\n scope.$l.pairs = scope.$choice(scope.isLow, pb.float(BLADE_LOW_PAIRS), pb.float(BLADE_HIGH_PAIRS));\r\n scope.$l.first = pb.mul(\r\n pb.add(\r\n pb.uint(scope.$builtins.instanceIndex),\r\n scope.$choice(scope.isLow, pb.uint(scope.zBladeLod.y), pb.uint(0))\r\n ),\r\n BLADE_INSTANCE_VEC4\r\n );\r\n scope.$l.inst0 = scope.zBladeInstances.at(scope.first);\r\n scope.$l.inst1 = scope.zBladeInstances.at(pb.add(scope.first, 1));\r\n scope.$l.inst2 = scope.zBladeInstances.at(pb.add(scope.first, 2));\r\n scope.$l.inst3 = scope.zBladeInstances.at(pb.add(scope.first, 3));\r\n scope.$l.base = scope.inst0.xyz;\r\n // The placement pass adds 2 to the hash of blades it flags as occluded\r\n scope.$l.occluded = pb.step(1.5, scope.inst0.w);\r\n if (this.occlusionDebug) {\r\n scope.$outputs.zOccludedFlag = scope.occluded;\r\n }\r\n // 1 for a blade that gives way to the low detail level\r\n scope.$l.extra = pb.sub(scope.inst0.w, pb.mul(scope.occluded, 2));\r\n // Where the vertex lies along the blade and on which side; the tip vertex sits on the center\r\n // line\r\n scope.$l.isTip = pb.greaterThanEqual(scope.vid, pb.uint(pb.mul(scope.pairs, 2)));\r\n scope.$l.along = pb.div(pb.float(pb.sar(scope.vid, 1)), scope.pairs);\r\n scope.along = pb.mix(scope.along, 1, pb.float(scope.isTip));\r\n scope.$l.t = scope.zAlongToT(scope.along);\r\n scope.$l.side = pb.mul(\r\n pb.sub(pb.mul(pb.float(pb.compAnd(scope.vid, pb.uint(1))), 2), 1),\r\n pb.sub(1, pb.float(scope.isTip))\r\n );\r\n // Instance: (facing, previous facing, wind push, previous wind push)\r\n this.emitBladeVertex(scope, scope.zBladeViewPos, scope.inst1.x, scope.inst1.z, scope.zWindTime.x, '');\r\n scope.$outputs.worldPos = scope.worldPos;\r\n scope.$outputs.worldNorm = scope.flatNormal;\r\n // For the rounded normals: which way is across the blade, and how far across this vertex is\r\n scope.$outputs.zBladeWidthDir = scope.widthDir;\r\n scope.$outputs.zBladeSide = scope.side;\r\n // Normal shared by the clump: the terrain normal leaned toward the clump's facing by the tilt\r\n scope.$l.clumpFacing = pb.vec3(pb.cos(scope.inst2.x), 0, pb.sin(scope.inst2.x));\r\n scope.$l.packedX = pb.floor(pb.div(scope.inst2.z, 4096));\r\n scope.$l.terrainXZ = pb.sub(\r\n pb.mul(pb.div(pb.vec2(scope.packedX, pb.sub(scope.inst2.z, pb.mul(scope.packedX, 4096))), 4095), 2),\r\n pb.vec2(1)\r\n );\r\n scope.$l.terrainNormal = pb.vec3(\r\n scope.terrainXZ.x,\r\n pb.sqrt(pb.max(0, pb.sub(1, pb.dot(scope.terrainXZ, scope.terrainXZ)))),\r\n scope.terrainXZ.y\r\n );\r\n scope.$outputs.zBladeClumpNormal = pb.normalize(\r\n pb.add(scope.terrainNormal, pb.mul(scope.clumpFacing, pb.mul(pb.sin(scope.tiltAngle), 0.5)))\r\n );\r\n // (blend toward the clump normal and the far roughness, far roughness)\r\n scope.$outputs.zBladeFar = pb.vec2(\r\n pb.smoothStep(\r\n scope.zBladeLook.z,\r\n pb.max(scope.zBladeLook.w, pb.add(scope.zBladeLook.z, 1e-3)),\r\n pb.distance(scope.zBladeViewPos, scope.worldPos)\r\n ),\r\n scope.zBladeLook2.x\r\n );\r\n scope.$outputs.zBladeT = scope.t;\r\n scope.$outputs.zBladeClumpColor = scope.inst2.y;\r\n // Per-clump brightness, and ambient occlusion darkening toward the root\r\n scope.$outputs.zBladeBrightness = pb.max(\r\n 0,\r\n pb.add(1, pb.mul(scope.zBladeShape.z, pb.sub(pb.mul(scope.inst2.y, 2), 1)))\r\n );\r\n scope.$outputs.zBladeAO = pb.sub(1, pb.mul(scope.zBladeShape.w, pb.sub(1, scope.t)));\r\n ShaderHelper.setClipSpacePosition(\r\n scope,\r\n pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.worldPos, 1))\r\n );\r\n if (ShaderHelper.getPrevUnjitteredViewProjectionMatrix(scope)) {\r\n // Where this vertex was last frame, for the motion vectors: the blade is rebuilt from last\r\n // frame's wind, wind clock and camera (for the density LOD fade and the thickening)\r\n this.emitBladeVertex(\r\n scope,\r\n scope.zPrevCameraPos.xyz,\r\n scope.inst1.y,\r\n scope.inst1.w,\r\n scope.zWindTime.y,\r\n 'Prev'\r\n );\r\n ShaderHelper.resolveMotionVector(scope, scope.worldPos, scope.worldPosPrev);\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n if (this.needFragmentColor()) {\r\n scope.zRootColor = pb.vec4().uniform(2);\r\n scope.zTipColor = pb.vec4().uniform(2);\r\n scope.zBladeTransmission = pb.vec4().uniform(2);\r\n scope.zBladeRoundness = pb.float().uniform(2);\r\n if (this.featureUsed<boolean>(ClipmapBladeGrassMaterial.FEATURE_COLOR_MAP)) {\r\n scope.zColorMap = pb.tex2D().uniform(2);\r\n scope.$l.albedo = pb.textureSampleLevel(\r\n scope.zColorMap,\r\n pb.vec2(scope.$inputs.zBladeClumpColor, scope.$inputs.zBladeT),\r\n 0\r\n );\r\n } else {\r\n scope.$l.albedo = pb.mix(scope.zRootColor, scope.zTipColor, scope.$inputs.zBladeT);\r\n }\r\n // Per-clump brightness: splashes of variation across the field\r\n scope.albedo = pb.vec4(pb.mul(scope.albedo.rgb, scope.$inputs.zBladeBrightness), 1);\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.zOccludedFlag),\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.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);\r\n // Both faces are lit from the side facing the viewer, then the normal tilts outward across\r\n // the blade (rounded normals) and, far away, blends toward the clump's shared normal\r\n scope.$l.towardViewer = pb.sub(\r\n pb.mul(pb.step(0, pb.dot(scope.$inputs.worldNorm, scope.viewVec)), 2),\r\n 1\r\n );\r\n scope.$l.bladeNormal = pb.normalize(\r\n pb.add(\r\n pb.mul(pb.normalize(scope.$inputs.worldNorm), scope.towardViewer),\r\n pb.mul(scope.$inputs.zBladeWidthDir, pb.mul(scope.$inputs.zBladeSide, scope.zBladeRoundness))\r\n )\r\n );\r\n scope.bladeNormal = pb.normalize(\r\n pb.mix(scope.bladeNormal, pb.normalize(scope.$inputs.zBladeClumpNormal), scope.$inputs.zBladeFar.x)\r\n );\r\n scope.$l.normalInfo = this.calculateNormalAndTBN(scope, scope.$inputs.worldPos, scope.bladeNormal);\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, 1));\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n /** Distant blades get rougher, see farRoughness */\r\n calculateRoughness(scope: PBInsideFunctionScope, albedo: PBShaderExp, normal: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n const roughness = super.calculateRoughness(scope, albedo, normal);\r\n return pb.mix(roughness, pb.max(roughness, scope.$inputs.zBladeFar.y), scope.$inputs.zBladeFar.x);\r\n }\r\n /**\r\n * Light through the blade from behind, see MeshMaterial.getSubsurfaceColor. Ghost of Tsushima's\r\n * blades are thick and let little light through at the root and more toward the tip; here it\r\n * grows linearly along the blade up to the transmission color.\r\n */\r\n getSubsurfaceColor(scope: PBInsideFunctionScope): Nullable<PBShaderExp> {\r\n const pb = scope.$builder;\r\n return pb.mul(scope.zBladeTransmission.rgb, scope.$inputs.zBladeT);\r\n }\r\n /** Ambient occlusion darkening toward the root, see MeshMaterial.getAmbientOcclusionFactor */\r\n getAmbientOcclusionFactor(scope: PBInsideFunctionScope): Nullable<PBShaderExp> {\r\n return scope.$inputs.zBladeAO;\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 protected onDispose() {\r\n super.onDispose();\r\n this._instances.dispose();\r\n this._colorMap.dispose();\r\n this._terrain.dispose();\r\n }\r\n}\r\n"],"names":["BLADE_HIGH_PAIRS","BLADE_LOW_PAIRS","BLADE_LOW_VERTEX_BASE","BLADE_INSTANCE_VEC4","BLADE_LOD_INDEX_COUNTS","map","pairs","createBladeIndices","indices","level","base","k","a","push","last","Uint16Array","ClipmapBladeGrassMaterial","applyMaterialMixins","MeshMaterial","mixinPBRMetallicRoughness","_tmpPos","Vector3","FEATURE_OCCLUSION_DEBUG","defineFeature","FEATURE_COLOR_MAP","terrain","metallic","roughness","doubleSidedLighting","specularFactor","Vector4","_terrain","DWeakRef","_instances","DRef","_colorMap","_shape","_look","_look2","_wind","_windTime","Vector2","_rootColor","_tipColor","_transmissionColor","_distanceFade","_lod","_lodDistance","_prevCameraPos","_viewCameraPos","_drawDistance","_farDensity","_pixelSize","useFeature","clone","other","get","copyFrom","set","colorMap","updateDistanceParams","setInstanceBuffer","buffer","lowListBase","y","uniformChanged","lodDistance","val","Math","max","prepareDraw","camera","wind","renderHeight","projection","getProjectionMatrix","size","m11","perspective","isPerspective","ps","x","pos","getWorldPosition","c","z","setXYZW","windParams","shaderParams","windTime","prevWindTime","setXY","prev","prevPosition","p","minScreenWidth","min","taper","tipDetail","clumpColorVariation","rootOcclusion","w","roundness","viewThickening","farNormalStart","farNormalEnd","farRoughness","windLean","swayAmplitude","swaySpeed","rootColor","tipColor","transmissionColor","setDrawDistance","distance","setFarDensity","farDensity","grassBladeLodDistance","occlusionDebug","featureUsed","isTransparentPass","_pass","supportLighting","supportInstancing","applyUniformValues","bindGroup","ctx","pass","setBuffer","setValue","renderPass","type","RENDER_PASS_TYPE_SHADOWMAP","needFragmentColor","setTexture","fetchSampler","emitBladeVertex","scope","cameraPos","facingAngle","windPush","suffix","pb","$builder","v","name","$l","vec3","cos","sin","neg","add","inst3","mul","sub","clamp","zBladeWind","PI","smoothStep","zBladeLod","GRASS_BLADE_LOD_BAND","vec2","extra","$if","greaterThan","zDistanceFade","s","inst2","point","sc","t","side","tag","tt","omt","mix","zBladeShape","normalize","cross","abs","dot","step","zBladeLook","length","div","zBladePixel","zMorphOffset","and","not","isLow","along","floor","zAlongToT","vertexShader","zBladeInstances","vec4","storageBufferReadonly","uniform","zBladeLook2","zPrevCameraPos","zWindTime","shadowPass","drawContext","zViewCameraPos","zBladeViewPos","xyz","ShaderHelper","getCameraPosition","func","float","$return","pow","greaterThanEqual","uint","$builtins","vertexIndex","vid","$choice","first","instanceIndex","inst0","at","inst1","occluded","$outputs","zOccludedFlag","isTip","sar","compAnd","worldPos","worldNorm","flatNormal","zBladeWidthDir","widthDir","zBladeSide","clumpFacing","packedX","terrainXZ","terrainNormal","sqrt","zBladeClumpNormal","tiltAngle","zBladeFar","zBladeT","zBladeClumpColor","zBladeBrightness","zBladeAO","setClipSpacePosition","getViewProjectionMatrix","getPrevUnjitteredViewProjectionMatrix","resolveMotionVector","worldPosPrev","fragmentShader","zRootColor","zTipColor","zBladeTransmission","zBladeRoundness","zColorMap","tex2D","albedo","textureSampleLevel","$inputs","rgb","litColor","RENDER_PASS_TYPE_LIGHT","viewVec","calculateViewVector","towardViewer","bladeNormal","normalInfo","calculateNormalAndTBN","PBRLight","normal","TBN","outputFragmentColor","calculateRoughness","getSubsurfaceColor","getAmbientOcclusionFactor","updateRenderStates","stateSet","useRasterizerState","setCullMode","onDispose","dispose"],"mappings":"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"}