@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
@@ -0,0 +1,318 @@
1
+ import { Vector3, Vector2 } from '@zephyr3d/base';
2
+
3
+ /**
4
+ * Parameters of the volumetric cloud layer.
5
+ * @public
6
+ */ class VolumetricCloud {
7
+ _version;
8
+ // Layer
9
+ _layerBottomAltitude;
10
+ _layerHeight;
11
+ // Tracing
12
+ _tracingMaxDistance;
13
+ _viewSampleCountScale;
14
+ _shadowSampleCountScale;
15
+ _shadowTracingDistance;
16
+ _stopTracingTransmittanceThreshold;
17
+ // Lighting
18
+ _groundAlbedo;
19
+ _skyLightCloudBottomOcclusion;
20
+ _perSampleAtmosphericLightTransmittance;
21
+ _phaseG;
22
+ _phaseG2;
23
+ _phaseBlend;
24
+ _msOctaves;
25
+ _msContribution;
26
+ _msOcclusion;
27
+ _msEccentricity;
28
+ // Density
29
+ _coverage;
30
+ _density;
31
+ _albedo;
32
+ _weatherMapScale;
33
+ _baseNoiseScale;
34
+ _shapeStrength;
35
+ _detailNoiseScale;
36
+ _detailErosion;
37
+ _detailBottomErosion;
38
+ _baseHeightVariation;
39
+ _wind;
40
+ _noiseSeed;
41
+ _formation;
42
+ _anvilBias;
43
+ // Sky cache
44
+ _framesPerUpdate;
45
+ _cacheResolution;
46
+ constructor(){
47
+ this._version = 0;
48
+ this._layerBottomAltitude = 1500;
49
+ this._layerHeight = 4000;
50
+ this._tracingMaxDistance = 50000;
51
+ this._viewSampleCountScale = 2;
52
+ this._shadowSampleCountScale = 1;
53
+ this._shadowTracingDistance = 8000;
54
+ this._stopTracingTransmittanceThreshold = 0.005;
55
+ this._groundAlbedo = 0.4;
56
+ this._skyLightCloudBottomOcclusion = 0.5;
57
+ this._perSampleAtmosphericLightTransmittance = false;
58
+ this._phaseG = 0.8;
59
+ this._phaseG2 = -0.3;
60
+ this._phaseBlend = 0.5;
61
+ this._msOctaves = 2;
62
+ this._msContribution = 0.5;
63
+ this._msOcclusion = 0.5;
64
+ this._msEccentricity = 0.5;
65
+ this._coverage = 0.55;
66
+ this._density = 0.03;
67
+ this._albedo = new Vector3(1, 1, 1);
68
+ // Isolated cells of 4 km
69
+ this._weatherMapScale = 64000;
70
+ // Billows of 2 km down to 250 m
71
+ this._baseNoiseScale = 8000;
72
+ this._shapeStrength = 1;
73
+ // Edge cells of 300, 150 and 75 m
74
+ this._detailNoiseScale = 600;
75
+ this._detailErosion = 0.35;
76
+ this._detailBottomErosion = 0.1;
77
+ this._baseHeightVariation = 700;
78
+ this._wind = new Vector2(10, 0);
79
+ this._noiseSeed = 0;
80
+ this._formation = 'isolated';
81
+ this._anvilBias = 0;
82
+ this._framesPerUpdate = 64;
83
+ this._cacheResolution = 768;
84
+ }
85
+ /** Incremented whenever a parameter changes. */ get version() {
86
+ return this._version;
87
+ }
88
+ /** Raises the altitude of the cloud base above the ground. */ get layerBottomAltitude() {
89
+ return this._layerBottomAltitude;
90
+ }
91
+ set layerBottomAltitude(val) {
92
+ this._set('_layerBottomAltitude', Math.max(0, val));
93
+ }
94
+ /** Makes the cloud layer thicker, so clouds can tower higher above their base. */ get layerHeight() {
95
+ return this._layerHeight;
96
+ }
97
+ set layerHeight(val) {
98
+ this._set('_layerHeight', Math.max(1, val));
99
+ }
100
+ /** Distance past the entry into the layer beyond which clouds are no longer drawn. */ get tracingMaxDistance() {
101
+ return this._tracingMaxDistance;
102
+ }
103
+ set tracingMaxDistance(val) {
104
+ this._set('_tracingMaxDistance', Math.max(1, val));
105
+ }
106
+ /** Raises the number of steps along each view ray: finer cloud detail, higher cost. */ get viewSampleCountScale() {
107
+ return this._viewSampleCountScale;
108
+ }
109
+ set viewSampleCountScale(val) {
110
+ this._set('_viewSampleCountScale', Math.max(0.05, val));
111
+ }
112
+ /** Raises the number of steps towards the sun: smoother self-shadowing inside the clouds, higher cost. */ get shadowSampleCountScale() {
113
+ return this._shadowSampleCountScale;
114
+ }
115
+ set shadowSampleCountScale(val) {
116
+ this._set('_shadowSampleCountScale', Math.max(0.05, val));
117
+ }
118
+ /** How far towards the sun the clouds look for cloud that shades them. */ get shadowTracingDistance() {
119
+ return this._shadowTracingDistance;
120
+ }
121
+ set shadowTracingDistance(val) {
122
+ this._set('_shadowTracingDistance', Math.max(1, val));
123
+ }
124
+ /** Stops a view ray once the clouds in front have become this opaque; lower is more exact but slower. */ get stopTracingTransmittanceThreshold() {
125
+ return this._stopTracingTransmittanceThreshold;
126
+ }
127
+ set stopTracingTransmittanceThreshold(val) {
128
+ this._set('_stopTracingTransmittanceThreshold', Math.min(1, Math.max(0, val)));
129
+ }
130
+ /** Brightens the underside of the clouds with light bounced off the ground. */ get groundAlbedo() {
131
+ return this._groundAlbedo;
132
+ }
133
+ set groundAlbedo(val) {
134
+ this._set('_groundAlbedo', Math.min(1, Math.max(0, val)));
135
+ }
136
+ /** Darkens the sky light reaching the bottom of the clouds. */ get skyLightCloudBottomOcclusion() {
137
+ return this._skyLightCloudBottomOcclusion;
138
+ }
139
+ set skyLightCloudBottomOcclusion(val) {
140
+ this._set('_skyLightCloudBottomOcclusion', Math.min(1, Math.max(0, val)));
141
+ }
142
+ /**
143
+ * Reddens the sunlight inside the clouds by the atmosphere between each point and the sun,
144
+ * instead of using the sunlight at the ground. Matters most at sunrise and sunset.
145
+ */ get perSampleAtmosphericLightTransmittance() {
146
+ return this._perSampleAtmosphericLightTransmittance;
147
+ }
148
+ set perSampleAtmosphericLightTransmittance(val) {
149
+ this._set('_perSampleAtmosphericLightTransmittance', !!val);
150
+ }
151
+ /** Concentrates the bright silver lining around the sun; higher makes it tighter and brighter. */ get phaseG() {
152
+ return this._phaseG;
153
+ }
154
+ set phaseG(val) {
155
+ this._set('_phaseG', Math.min(0.999, Math.max(-0.999, val)));
156
+ }
157
+ /** Second lobe: negative values brighten the clouds when looking away from the sun. */ get phaseG2() {
158
+ return this._phaseG2;
159
+ }
160
+ set phaseG2(val) {
161
+ this._set('_phaseG2', Math.min(0.999, Math.max(-0.999, val)));
162
+ }
163
+ /** Moves the look between the first lobe (0) and the second lobe (1). */ get phaseBlend() {
164
+ return this._phaseBlend;
165
+ }
166
+ set phaseBlend(val) {
167
+ this._set('_phaseBlend', Math.min(1, Math.max(0, val)));
168
+ }
169
+ /** Number of extra light bounces approximated inside the clouds (0-2): more makes thick clouds glow brighter and softer. */ get msOctaves() {
170
+ return this._msOctaves;
171
+ }
172
+ set msOctaves(val) {
173
+ this._set('_msOctaves', Math.min(2, Math.max(0, Math.round(val))));
174
+ }
175
+ /** Brightness of each bounced-light octave. */ get msContribution() {
176
+ return this._msContribution;
177
+ }
178
+ set msContribution(val) {
179
+ this._set('_msContribution', Math.min(1, Math.max(0, val)));
180
+ }
181
+ /** Lower values let bounced light reach deeper into thick clouds. */ get msOcclusion() {
182
+ return this._msOcclusion;
183
+ }
184
+ set msOcclusion(val) {
185
+ this._set('_msOcclusion', Math.min(1, Math.max(0, val)));
186
+ }
187
+ /** Lower values spread bounced light more evenly in all directions instead of around the sun. */ get msEccentricity() {
188
+ return this._msEccentricity;
189
+ }
190
+ set msEccentricity(val) {
191
+ this._set('_msEccentricity', Math.min(1, Math.max(0, val)));
192
+ }
193
+ /** Weather coverage: higher grows cloud fields; zero removes all clouds. */ get coverage() {
194
+ return this._coverage;
195
+ }
196
+ set coverage(val) {
197
+ this._set('_coverage', Math.min(1, Math.max(0, val)));
198
+ }
199
+ /** Makes clouds more opaque and their shadowed sides darker (extinction per meter). */ get density() {
200
+ return this._density;
201
+ }
202
+ set density(val) {
203
+ this._set('_density', Math.max(0, val));
204
+ }
205
+ /** Tint of the light the clouds scatter; lower values make clouds greyer. */ get albedo() {
206
+ return this._albedo;
207
+ }
208
+ set albedo(val) {
209
+ if (!val.equalsTo(this._albedo)) {
210
+ this._albedo.set(val);
211
+ this._version++;
212
+ }
213
+ }
214
+ /** Size of the area one repetition of the weather map covers; larger spreads cloud fields wider apart. */ get weatherMapScale() {
215
+ return this._weatherMapScale;
216
+ }
217
+ set weatherMapScale(val) {
218
+ this._set('_weatherMapScale', Math.max(1, val));
219
+ }
220
+ /** Repetition period of the base noise; the generated volume's first octave has four cells per period. */ get baseNoiseScale() {
221
+ return this._baseNoiseScale;
222
+ }
223
+ set baseNoiseScale(val) {
224
+ this._set('_baseNoiseScale', Math.max(1, val));
225
+ }
226
+ /** Strength of the large noise billows: lower values keep cloud bodies fuller and more connected. */ get shapeStrength() {
227
+ return this._shapeStrength;
228
+ }
229
+ set shapeStrength(val) {
230
+ this._set('_shapeStrength', Math.min(1, Math.max(0, val)));
231
+ }
232
+ /** Size of the small wisps that erode cloud edges. */ get detailNoiseScale() {
233
+ return this._detailNoiseScale;
234
+ }
235
+ set detailNoiseScale(val) {
236
+ this._set('_detailNoiseScale', Math.max(1, val));
237
+ }
238
+ /** How much the small wisps eat into cloud edges: higher gives raggeder, wispier edges. */ get detailErosion() {
239
+ return this._detailErosion;
240
+ }
241
+ set detailErosion(val) {
242
+ this._set('_detailErosion', Math.min(1, Math.max(0, val)));
243
+ }
244
+ /** Detail erosion at the cloud base relative to the full amount: lower values keep the base flatter. */ get detailBottomErosion() {
245
+ return this._detailBottomErosion;
246
+ }
247
+ set detailBottomErosion(val) {
248
+ this._set('_detailBottomErosion', Math.min(1, Math.max(0, val)));
249
+ }
250
+ /** Maximum local rise of the cloud underside above the layer base, in meters. */ get baseHeightVariation() {
251
+ return this._baseHeightVariation;
252
+ }
253
+ set baseHeightVariation(val) {
254
+ this._set('_baseHeightVariation', Math.max(0, val));
255
+ }
256
+ /** Direction and speed the clouds drift with, in meters per second. */ get wind() {
257
+ return this._wind;
258
+ }
259
+ set wind(val) {
260
+ if (!val.equalsTo(this._wind)) {
261
+ this._wind.set(val);
262
+ this._version++;
263
+ }
264
+ }
265
+ /** Isolated island-like clouds, or clouds joined into formations. */ get formation() {
266
+ return this._formation;
267
+ }
268
+ set formation(val) {
269
+ if (val !== this._formation) {
270
+ this._formation = val;
271
+ this._version++;
272
+ }
273
+ }
274
+ /** Spreads the tops of tall clouds out into anvils. */ get anvilBias() {
275
+ return this._anvilBias;
276
+ }
277
+ set anvilBias(val) {
278
+ this._set('_anvilBias', Math.min(1, Math.max(0, val)));
279
+ }
280
+ /** Picks a different pattern for the generated noise and weather map. */ get noiseSeed() {
281
+ return this._noiseSeed;
282
+ }
283
+ set noiseSeed(val) {
284
+ this._set('_noiseSeed', Math.max(0, Math.floor(val)));
285
+ }
286
+ /**
287
+ * Frames over which the cached cloud sky is rebuilt once (4, 16, 64 or 256): fewer frames let
288
+ * clouds and lighting change faster but cost more per frame.
289
+ */ get framesPerUpdate() {
290
+ return this._framesPerUpdate;
291
+ }
292
+ set framesPerUpdate(val) {
293
+ const n = [
294
+ 4,
295
+ 16,
296
+ 64,
297
+ 256
298
+ ].reduce((a, b)=>Math.abs(b - val) < Math.abs(a - val) ? b : a);
299
+ this._set('_framesPerUpdate', n);
300
+ }
301
+ /** Resolution of the cached cloud sky: higher keeps clouds sharp at narrow fields of view. */ get cacheResolution() {
302
+ return this._cacheResolution;
303
+ }
304
+ set cacheResolution(val) {
305
+ // Divisible by the 16 blocks per side of the 256-frame schedule and by the 8x8 workgroup
306
+ this._set('_cacheResolution', Math.max(128, Math.round(val / 128) * 128));
307
+ }
308
+ _set(key, val) {
309
+ const fields = this;
310
+ if (fields[key] !== val) {
311
+ fields[key] = val;
312
+ this._version++;
313
+ }
314
+ }
315
+ }
316
+
317
+ export { VolumetricCloud };
318
+ //# sourceMappingURL=volumetric_cloud.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"volumetric_cloud.js","sources":["../../../src/render/volumetric_cloud/volumetric_cloud.ts"],"sourcesContent":["import { Vector2, Vector3 } from '@zephyr3d/base';\r\n\r\n/**\r\n * How the clouds of a scatter sky are drawn.\r\n *\r\n * - `procedural`: the infinitely thin 2D cloud layer evaluated in the sky shader.\r\n * - `volumetric`: ray-marched volumetric clouds lit by the atmosphere (WebGPU only; other\r\n * devices fall back to `procedural`).\r\n *\r\n * @public\r\n */\r\nexport type CloudMode = 'procedural' | 'volumetric';\r\n\r\n/**\r\n * Which coverage of the cloud map shapes the clouds (Nubis 2017, slides 57-58).\r\n *\r\n * - `connected`: Perlin footprints, clouds join into formations.\r\n * - `isolated`: Worley footprints about as wide as a cloud is tall, separate clouds with clear gaps.\r\n *\r\n * @public\r\n */\r\nexport type CloudFormation = 'connected' | 'isolated';\r\n\r\n/**\r\n * Debug output of the volumetric cloud resources, drawn over the sky.\r\n * @public\r\n */\r\nexport type VolumetricCloudDebugView =\r\n | 'none'\r\n | 'weather'\r\n | 'baseNoise'\r\n | 'detailNoise'\r\n | 'profileXY'\r\n | 'profileXZ'\r\n | 'baseDensityXY'\r\n | 'baseDensityXZ'\r\n | 'densityXY'\r\n | 'densityXZ';\r\n\r\n/**\r\n * Parameters of the volumetric cloud layer.\r\n * @public\r\n */\r\nexport class VolumetricCloud {\r\n private _version: number;\r\n // Layer\r\n private _layerBottomAltitude: number;\r\n private _layerHeight: number;\r\n // Tracing\r\n private _tracingMaxDistance: number;\r\n private _viewSampleCountScale: number;\r\n private _shadowSampleCountScale: number;\r\n private _shadowTracingDistance: number;\r\n private _stopTracingTransmittanceThreshold: number;\r\n // Lighting\r\n private _groundAlbedo: number;\r\n private _skyLightCloudBottomOcclusion: number;\r\n private _perSampleAtmosphericLightTransmittance: boolean;\r\n private _phaseG: number;\r\n private _phaseG2: number;\r\n private _phaseBlend: number;\r\n private _msOctaves: number;\r\n private _msContribution: number;\r\n private _msOcclusion: number;\r\n private _msEccentricity: number;\r\n // Density\r\n private _coverage: number;\r\n private _density: number;\r\n private readonly _albedo: Vector3;\r\n private _weatherMapScale: number;\r\n private _baseNoiseScale: number;\r\n private _shapeStrength: number;\r\n private _detailNoiseScale: number;\r\n private _detailErosion: number;\r\n private _detailBottomErosion: number;\r\n private _baseHeightVariation: number;\r\n private readonly _wind: Vector2;\r\n private _noiseSeed: number;\r\n private _formation: CloudFormation;\r\n private _anvilBias: number;\r\n // Sky cache\r\n private _framesPerUpdate: number;\r\n private _cacheResolution: number;\r\n constructor() {\r\n this._version = 0;\r\n this._layerBottomAltitude = 1500;\r\n this._layerHeight = 4000;\r\n this._tracingMaxDistance = 50000;\r\n this._viewSampleCountScale = 2;\r\n this._shadowSampleCountScale = 1;\r\n this._shadowTracingDistance = 8000;\r\n this._stopTracingTransmittanceThreshold = 0.005;\r\n this._groundAlbedo = 0.4;\r\n this._skyLightCloudBottomOcclusion = 0.5;\r\n this._perSampleAtmosphericLightTransmittance = false;\r\n this._phaseG = 0.8;\r\n this._phaseG2 = -0.3;\r\n this._phaseBlend = 0.5;\r\n this._msOctaves = 2;\r\n this._msContribution = 0.5;\r\n this._msOcclusion = 0.5;\r\n this._msEccentricity = 0.5;\r\n this._coverage = 0.55;\r\n this._density = 0.03;\r\n this._albedo = new Vector3(1, 1, 1);\r\n // Isolated cells of 4 km\r\n this._weatherMapScale = 64000;\r\n // Billows of 2 km down to 250 m\r\n this._baseNoiseScale = 8000;\r\n this._shapeStrength = 1;\r\n // Edge cells of 300, 150 and 75 m\r\n this._detailNoiseScale = 600;\r\n this._detailErosion = 0.35;\r\n this._detailBottomErosion = 0.1;\r\n this._baseHeightVariation = 700;\r\n this._wind = new Vector2(10, 0);\r\n this._noiseSeed = 0;\r\n this._formation = 'isolated';\r\n this._anvilBias = 0;\r\n this._framesPerUpdate = 64;\r\n this._cacheResolution = 768;\r\n }\r\n /** Incremented whenever a parameter changes. */\r\n get version() {\r\n return this._version;\r\n }\r\n /** Raises the altitude of the cloud base above the ground. */\r\n get layerBottomAltitude() {\r\n return this._layerBottomAltitude;\r\n }\r\n set layerBottomAltitude(val: number) {\r\n this._set('_layerBottomAltitude', Math.max(0, val));\r\n }\r\n /** Makes the cloud layer thicker, so clouds can tower higher above their base. */\r\n get layerHeight() {\r\n return this._layerHeight;\r\n }\r\n set layerHeight(val: number) {\r\n this._set('_layerHeight', Math.max(1, val));\r\n }\r\n /** Distance past the entry into the layer beyond which clouds are no longer drawn. */\r\n get tracingMaxDistance() {\r\n return this._tracingMaxDistance;\r\n }\r\n set tracingMaxDistance(val: number) {\r\n this._set('_tracingMaxDistance', Math.max(1, val));\r\n }\r\n /** Raises the number of steps along each view ray: finer cloud detail, higher cost. */\r\n get viewSampleCountScale() {\r\n return this._viewSampleCountScale;\r\n }\r\n set viewSampleCountScale(val: number) {\r\n this._set('_viewSampleCountScale', Math.max(0.05, val));\r\n }\r\n /** Raises the number of steps towards the sun: smoother self-shadowing inside the clouds, higher cost. */\r\n get shadowSampleCountScale() {\r\n return this._shadowSampleCountScale;\r\n }\r\n set shadowSampleCountScale(val: number) {\r\n this._set('_shadowSampleCountScale', Math.max(0.05, val));\r\n }\r\n /** How far towards the sun the clouds look for cloud that shades them. */\r\n get shadowTracingDistance() {\r\n return this._shadowTracingDistance;\r\n }\r\n set shadowTracingDistance(val: number) {\r\n this._set('_shadowTracingDistance', Math.max(1, val));\r\n }\r\n /** Stops a view ray once the clouds in front have become this opaque; lower is more exact but slower. */\r\n get stopTracingTransmittanceThreshold() {\r\n return this._stopTracingTransmittanceThreshold;\r\n }\r\n set stopTracingTransmittanceThreshold(val: number) {\r\n this._set('_stopTracingTransmittanceThreshold', Math.min(1, Math.max(0, val)));\r\n }\r\n /** Brightens the underside of the clouds with light bounced off the ground. */\r\n get groundAlbedo() {\r\n return this._groundAlbedo;\r\n }\r\n set groundAlbedo(val: number) {\r\n this._set('_groundAlbedo', Math.min(1, Math.max(0, val)));\r\n }\r\n /** Darkens the sky light reaching the bottom of the clouds. */\r\n get skyLightCloudBottomOcclusion() {\r\n return this._skyLightCloudBottomOcclusion;\r\n }\r\n set skyLightCloudBottomOcclusion(val: number) {\r\n this._set('_skyLightCloudBottomOcclusion', Math.min(1, Math.max(0, val)));\r\n }\r\n /**\r\n * Reddens the sunlight inside the clouds by the atmosphere between each point and the sun,\r\n * instead of using the sunlight at the ground. Matters most at sunrise and sunset.\r\n */\r\n get perSampleAtmosphericLightTransmittance() {\r\n return this._perSampleAtmosphericLightTransmittance;\r\n }\r\n set perSampleAtmosphericLightTransmittance(val: boolean) {\r\n this._set('_perSampleAtmosphericLightTransmittance', !!val);\r\n }\r\n /** Concentrates the bright silver lining around the sun; higher makes it tighter and brighter. */\r\n get phaseG() {\r\n return this._phaseG;\r\n }\r\n set phaseG(val: number) {\r\n this._set('_phaseG', Math.min(0.999, Math.max(-0.999, val)));\r\n }\r\n /** Second lobe: negative values brighten the clouds when looking away from the sun. */\r\n get phaseG2() {\r\n return this._phaseG2;\r\n }\r\n set phaseG2(val: number) {\r\n this._set('_phaseG2', Math.min(0.999, Math.max(-0.999, val)));\r\n }\r\n /** Moves the look between the first lobe (0) and the second lobe (1). */\r\n get phaseBlend() {\r\n return this._phaseBlend;\r\n }\r\n set phaseBlend(val: number) {\r\n this._set('_phaseBlend', Math.min(1, Math.max(0, val)));\r\n }\r\n /** Number of extra light bounces approximated inside the clouds (0-2): more makes thick clouds glow brighter and softer. */\r\n get msOctaves() {\r\n return this._msOctaves;\r\n }\r\n set msOctaves(val: number) {\r\n this._set('_msOctaves', Math.min(2, Math.max(0, Math.round(val))));\r\n }\r\n /** Brightness of each bounced-light octave. */\r\n get msContribution() {\r\n return this._msContribution;\r\n }\r\n set msContribution(val: number) {\r\n this._set('_msContribution', Math.min(1, Math.max(0, val)));\r\n }\r\n /** Lower values let bounced light reach deeper into thick clouds. */\r\n get msOcclusion() {\r\n return this._msOcclusion;\r\n }\r\n set msOcclusion(val: number) {\r\n this._set('_msOcclusion', Math.min(1, Math.max(0, val)));\r\n }\r\n /** Lower values spread bounced light more evenly in all directions instead of around the sun. */\r\n get msEccentricity() {\r\n return this._msEccentricity;\r\n }\r\n set msEccentricity(val: number) {\r\n this._set('_msEccentricity', Math.min(1, Math.max(0, val)));\r\n }\r\n /** Weather coverage: higher grows cloud fields; zero removes all clouds. */\r\n get coverage() {\r\n return this._coverage;\r\n }\r\n set coverage(val: number) {\r\n this._set('_coverage', Math.min(1, Math.max(0, val)));\r\n }\r\n /** Makes clouds more opaque and their shadowed sides darker (extinction per meter). */\r\n get density() {\r\n return this._density;\r\n }\r\n set density(val: number) {\r\n this._set('_density', Math.max(0, val));\r\n }\r\n /** Tint of the light the clouds scatter; lower values make clouds greyer. */\r\n get albedo(): Vector3 {\r\n return this._albedo;\r\n }\r\n set albedo(val: Vector3) {\r\n if (!val.equalsTo(this._albedo)) {\r\n this._albedo.set(val);\r\n this._version++;\r\n }\r\n }\r\n /** Size of the area one repetition of the weather map covers; larger spreads cloud fields wider apart. */\r\n get weatherMapScale() {\r\n return this._weatherMapScale;\r\n }\r\n set weatherMapScale(val: number) {\r\n this._set('_weatherMapScale', Math.max(1, val));\r\n }\r\n /** Repetition period of the base noise; the generated volume's first octave has four cells per period. */\r\n get baseNoiseScale() {\r\n return this._baseNoiseScale;\r\n }\r\n set baseNoiseScale(val: number) {\r\n this._set('_baseNoiseScale', Math.max(1, val));\r\n }\r\n /** Strength of the large noise billows: lower values keep cloud bodies fuller and more connected. */\r\n get shapeStrength() {\r\n return this._shapeStrength;\r\n }\r\n set shapeStrength(val: number) {\r\n this._set('_shapeStrength', Math.min(1, Math.max(0, val)));\r\n }\r\n /** Size of the small wisps that erode cloud edges. */\r\n get detailNoiseScale() {\r\n return this._detailNoiseScale;\r\n }\r\n set detailNoiseScale(val: number) {\r\n this._set('_detailNoiseScale', Math.max(1, val));\r\n }\r\n /** How much the small wisps eat into cloud edges: higher gives raggeder, wispier edges. */\r\n get detailErosion() {\r\n return this._detailErosion;\r\n }\r\n set detailErosion(val: number) {\r\n this._set('_detailErosion', Math.min(1, Math.max(0, val)));\r\n }\r\n /** Detail erosion at the cloud base relative to the full amount: lower values keep the base flatter. */\r\n get detailBottomErosion() {\r\n return this._detailBottomErosion;\r\n }\r\n set detailBottomErosion(val: number) {\r\n this._set('_detailBottomErosion', Math.min(1, Math.max(0, val)));\r\n }\r\n /** Maximum local rise of the cloud underside above the layer base, in meters. */\r\n get baseHeightVariation() {\r\n return this._baseHeightVariation;\r\n }\r\n set baseHeightVariation(val: number) {\r\n this._set('_baseHeightVariation', Math.max(0, val));\r\n }\r\n /** Direction and speed the clouds drift with, in meters per second. */\r\n get wind(): Vector2 {\r\n return this._wind;\r\n }\r\n set wind(val: Vector2) {\r\n if (!val.equalsTo(this._wind)) {\r\n this._wind.set(val);\r\n this._version++;\r\n }\r\n }\r\n /** Isolated island-like clouds, or clouds joined into formations. */\r\n get formation(): CloudFormation {\r\n return this._formation;\r\n }\r\n set formation(val: CloudFormation) {\r\n if (val !== this._formation) {\r\n this._formation = val;\r\n this._version++;\r\n }\r\n }\r\n /** Spreads the tops of tall clouds out into anvils. */\r\n get anvilBias() {\r\n return this._anvilBias;\r\n }\r\n set anvilBias(val: number) {\r\n this._set('_anvilBias', Math.min(1, Math.max(0, val)));\r\n }\r\n /** Picks a different pattern for the generated noise and weather map. */\r\n get noiseSeed() {\r\n return this._noiseSeed;\r\n }\r\n set noiseSeed(val: number) {\r\n this._set('_noiseSeed', Math.max(0, Math.floor(val)));\r\n }\r\n /**\r\n * Frames over which the cached cloud sky is rebuilt once (4, 16, 64 or 256): fewer frames let\r\n * clouds and lighting change faster but cost more per frame.\r\n */\r\n get framesPerUpdate() {\r\n return this._framesPerUpdate;\r\n }\r\n set framesPerUpdate(val: number) {\r\n const n = [4, 16, 64, 256].reduce((a, b) => (Math.abs(b - val) < Math.abs(a - val) ? b : a));\r\n this._set('_framesPerUpdate', n);\r\n }\r\n /** Resolution of the cached cloud sky: higher keeps clouds sharp at narrow fields of view. */\r\n get cacheResolution() {\r\n return this._cacheResolution;\r\n }\r\n set cacheResolution(val: number) {\r\n // Divisible by the 16 blocks per side of the 256-frame schedule and by the 8x8 workgroup\r\n this._set('_cacheResolution', Math.max(128, Math.round(val / 128) * 128));\r\n }\r\n private _set(key: string, val: number | boolean) {\r\n const fields = this as unknown as Record<string, number | boolean>;\r\n if (fields[key] !== val) {\r\n fields[key] = val;\r\n this._version++;\r\n }\r\n }\r\n}\r\n"],"names":["VolumetricCloud","_version","_layerBottomAltitude","_layerHeight","_tracingMaxDistance","_viewSampleCountScale","_shadowSampleCountScale","_shadowTracingDistance","_stopTracingTransmittanceThreshold","_groundAlbedo","_skyLightCloudBottomOcclusion","_perSampleAtmosphericLightTransmittance","_phaseG","_phaseG2","_phaseBlend","_msOctaves","_msContribution","_msOcclusion","_msEccentricity","_coverage","_density","_albedo","_weatherMapScale","_baseNoiseScale","_shapeStrength","_detailNoiseScale","_detailErosion","_detailBottomErosion","_baseHeightVariation","_wind","_noiseSeed","_formation","_anvilBias","_framesPerUpdate","_cacheResolution","Vector3","Vector2","version","layerBottomAltitude","val","_set","Math","max","layerHeight","tracingMaxDistance","viewSampleCountScale","shadowSampleCountScale","shadowTracingDistance","stopTracingTransmittanceThreshold","min","groundAlbedo","skyLightCloudBottomOcclusion","perSampleAtmosphericLightTransmittance","phaseG","phaseG2","phaseBlend","msOctaves","round","msContribution","msOcclusion","msEccentricity","coverage","density","albedo","equalsTo","set","weatherMapScale","baseNoiseScale","shapeStrength","detailNoiseScale","detailErosion","detailBottomErosion","baseHeightVariation","wind","formation","anvilBias","noiseSeed","floor","framesPerUpdate","n","reduce","a","b","abs","cacheResolution","key","fields"],"mappings":"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"}