@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,189 @@
1
+ /*
2
+ * Tileable noise for the volumetric cloud volumes.
3
+ *
4
+ * Follows piyushslayer's "Tileable Perlin-Worley 3D" (https://www.shadertoy.com/view/3dVXDc),
5
+ * which builds the volumes of Schneider, "The Real-time Volumetric Cloudscapes of Horizon Zero
6
+ * Dawn" (SIGGRAPH 2015) after Hillaire's TileableVolumeNoise
7
+ * (https://github.com/sebh/TileableVolumeNoise): gradient noise by Inigo Quilez and Worley noise,
8
+ * both made periodic by wrapping the lattice cell modulo the frequency.
9
+ *
10
+ * Every function takes the frequency in lattice cells per period, so a coordinate in [0, 1)
11
+ * scaled by `freq` repeats exactly over the unit cube.
12
+ */ /**
13
+ * Lattice cell wrapped into [0, freq). Floored, unlike pb.mod, which is WGSL's truncated `%` on
14
+ * WebGPU: that maps the neighbour cell -1 to -1 instead of freq - 1 and breaks the tiling.
15
+ */ function wrapCell(scope, cell, freq) {
16
+ const pb = scope.$builder;
17
+ return pb.sub(cell, pb.mul(pb.vec3(freq), pb.floor(pb.div(cell, pb.vec3(freq)))));
18
+ }
19
+ /**
20
+ * Integer hash of a lattice cell to [-1, 1]^3 (Dave Hoskins' uint hash, as in 3dVXDc).
21
+ *
22
+ * `seed` shifts the cell by whole cells after the periodic wrap, so a seeded volume still tiles.
23
+ * @internal
24
+ */ function cloudHash33(scope, p, seed) {
25
+ const pb = scope.$builder;
26
+ const funcName = 'Z_cloudHash33';
27
+ pb.func(funcName, [
28
+ pb.vec3('p'),
29
+ pb.vec3('seed')
30
+ ], function() {
31
+ this.$l.UI3 = pb.uvec3(pb.uint(1597334673), pb.uint(3812015801), pb.uint(2798796415));
32
+ this.$l.q = pb.mul(pb.uvec3(pb.ivec3(pb.add(this.p, this.seed))), this.UI3);
33
+ this.$l.h = pb.compXor(pb.compXor(this.q.x, this.q.y), this.q.z);
34
+ this.q = pb.mul(this.UI3, this.h);
35
+ this.$return(pb.sub(pb.mul(pb.vec3(this.q), 2 / 0xffffffff), pb.vec3(1)));
36
+ });
37
+ return pb.getGlobalScope()[funcName](p, seed);
38
+ }
39
+ /**
40
+ * Periodic gradient noise (Inigo Quilez) with quintic interpolation, roughly in [-1, 1].
41
+ * @internal
42
+ */ function cloudGradientNoise(scope, x, freq, seed) {
43
+ const pb = scope.$builder;
44
+ const funcName = 'Z_cloudGradientNoise';
45
+ pb.func(funcName, [
46
+ pb.vec3('x'),
47
+ pb.float('freq'),
48
+ pb.vec3('seed')
49
+ ], function() {
50
+ this.$l.p = pb.floor(this.x);
51
+ this.$l.w = pb.fract(this.x);
52
+ // w^3 (w (6 w - 15) + 10)
53
+ this.$l.u = pb.mul(this.w, this.w, this.w, pb.add(pb.mul(this.w, pb.sub(pb.mul(this.w, 6), pb.vec3(15))), pb.vec3(10)));
54
+ const corner = (scope, o)=>cloudHash33(scope, wrapCell(scope, pb.add(scope.p, pb.vec3(o[0], o[1], o[2])), scope.freq), scope.seed);
55
+ this.$l.va = pb.dot(corner(this, [
56
+ 0,
57
+ 0,
58
+ 0
59
+ ]), this.w);
60
+ this.$l.vb = pb.dot(corner(this, [
61
+ 1,
62
+ 0,
63
+ 0
64
+ ]), pb.sub(this.w, pb.vec3(1, 0, 0)));
65
+ this.$l.vc = pb.dot(corner(this, [
66
+ 0,
67
+ 1,
68
+ 0
69
+ ]), pb.sub(this.w, pb.vec3(0, 1, 0)));
70
+ this.$l.vd = pb.dot(corner(this, [
71
+ 1,
72
+ 1,
73
+ 0
74
+ ]), pb.sub(this.w, pb.vec3(1, 1, 0)));
75
+ this.$l.ve = pb.dot(corner(this, [
76
+ 0,
77
+ 0,
78
+ 1
79
+ ]), pb.sub(this.w, pb.vec3(0, 0, 1)));
80
+ this.$l.vf = pb.dot(corner(this, [
81
+ 1,
82
+ 0,
83
+ 1
84
+ ]), pb.sub(this.w, pb.vec3(1, 0, 1)));
85
+ this.$l.vg = pb.dot(corner(this, [
86
+ 0,
87
+ 1,
88
+ 1
89
+ ]), pb.sub(this.w, pb.vec3(0, 1, 1)));
90
+ this.$l.vh = pb.dot(corner(this, [
91
+ 1,
92
+ 1,
93
+ 1
94
+ ]), pb.sub(this.w, pb.vec3(1, 1, 1)));
95
+ this.$return(pb.add(this.va, pb.mul(this.u.x, pb.sub(this.vb, this.va)), pb.mul(this.u.y, pb.sub(this.vc, this.va)), pb.mul(this.u.z, pb.sub(this.ve, this.va)), pb.mul(this.u.x, this.u.y, pb.sub(pb.add(this.va, this.vd), pb.add(this.vb, this.vc))), pb.mul(this.u.y, this.u.z, pb.sub(pb.add(this.va, this.vg), pb.add(this.vc, this.ve))), pb.mul(this.u.z, this.u.x, pb.sub(pb.add(this.va, this.vf), pb.add(this.vb, this.ve))), pb.mul(this.u.x, this.u.y, this.u.z, pb.sub(pb.add(this.vb, this.vc, this.ve, this.vh), pb.add(this.va, this.vd, this.vf, this.vg)))));
96
+ });
97
+ return pb.getGlobalScope()[funcName](x, freq, seed);
98
+ }
99
+ /**
100
+ * Periodic Worley noise: one minus the squared distance to the nearest feature point.
101
+ * @internal
102
+ */ function cloudWorleyNoise(scope, uv, freq, seed) {
103
+ const pb = scope.$builder;
104
+ const funcName = 'Z_cloudWorleyNoise';
105
+ pb.func(funcName, [
106
+ pb.vec3('uv'),
107
+ pb.float('freq'),
108
+ pb.vec3('seed')
109
+ ], function() {
110
+ this.$l.id = pb.floor(this.uv);
111
+ this.$l.p = pb.fract(this.uv);
112
+ this.$l.minDist = pb.float(10000);
113
+ this.$for(pb.int('x'), -1, 2, function() {
114
+ this.$for(pb.int('y'), -1, 2, function() {
115
+ this.$for(pb.int('z'), -1, 2, function() {
116
+ this.$l.offset = pb.vec3(pb.float(this.x), pb.float(this.y), pb.float(this.z));
117
+ this.$l.h = pb.add(pb.mul(cloudHash33(this, wrapCell(this, pb.add(this.id, this.offset), this.freq), this.seed), 0.5), pb.vec3(0.5), this.offset);
118
+ this.$l.d = pb.sub(this.p, this.h);
119
+ this.minDist = pb.min(this.minDist, pb.dot(this.d, this.d));
120
+ });
121
+ });
122
+ });
123
+ this.$return(pb.sub(1, this.minDist));
124
+ });
125
+ return pb.getGlobalScope()[funcName](uv, freq, seed);
126
+ }
127
+ /**
128
+ * Periodic gradient-noise fbm: `octaves` octaves, frequency doubling, gain 2^-0.85.
129
+ * @internal
130
+ */ function cloudPerlinFbm(scope, p, freq, octaves, seed) {
131
+ const pb = scope.$builder;
132
+ const funcName = `Z_cloudPerlinFbm${octaves}`;
133
+ pb.func(funcName, [
134
+ pb.vec3('p'),
135
+ pb.float('freq'),
136
+ pb.vec3('seed')
137
+ ], function() {
138
+ this.$l.f = this.freq;
139
+ this.$l.amp = pb.float(1);
140
+ this.$l.noise = pb.float(0);
141
+ this.$for(pb.int('i'), 0, octaves, function() {
142
+ this.noise = pb.add(this.noise, pb.mul(this.amp, cloudGradientNoise(this, pb.mul(this.p, this.f), this.f, this.seed)));
143
+ this.f = pb.mul(this.f, 2);
144
+ this.amp = pb.mul(this.amp, Math.pow(2, -0.85));
145
+ });
146
+ this.$return(this.noise);
147
+ });
148
+ return pb.getGlobalScope()[funcName](p, freq, seed);
149
+ }
150
+ /**
151
+ * Periodic Worley fbm: three octaves at freq, 2 freq and 4 freq weighted 0.625 / 0.25 / 0.125.
152
+ * @internal
153
+ */ function cloudWorleyFbm(scope, p, freq, seed) {
154
+ const pb = scope.$builder;
155
+ const funcName = 'Z_cloudWorleyFbm';
156
+ pb.func(funcName, [
157
+ pb.vec3('p'),
158
+ pb.float('freq'),
159
+ pb.vec3('seed')
160
+ ], function() {
161
+ this.$return(pb.add(pb.mul(cloudWorleyNoise(this, pb.mul(this.p, this.freq), this.freq, this.seed), 0.625), pb.mul(cloudWorleyNoise(this, pb.mul(this.p, this.freq, 2), pb.mul(this.freq, 2), this.seed), 0.25), pb.mul(cloudWorleyNoise(this, pb.mul(this.p, this.freq, 4), pb.mul(this.freq, 4), this.seed), 0.125)));
162
+ });
163
+ return pb.getGlobalScope()[funcName](p, freq, seed);
164
+ }
165
+ /**
166
+ * Perlin-Worley of Nubis (Schneider, "Nubis: Authoring Real-Time Volumetric Cloudscapes with the
167
+ * Decima Engine", SIGGRAPH 2017, slide 34): `remap(perlin, 1 - worley, 1, 0, 1)`, the web of the
168
+ * Worley noise subtracted from the low density regions of a billowy Perlin fbm, which puts round
169
+ * shapes there. `worley` is the Worley fbm at the same frequency.
170
+ * @internal
171
+ */ function cloudPerlinWorley(scope, p, freq, worley, seed, octaves = 7) {
172
+ const pb = scope.$builder;
173
+ const funcName = `Z_cloudPerlinWorley${octaves}`;
174
+ pb.func(funcName, [
175
+ pb.vec3('p'),
176
+ pb.float('freq'),
177
+ pb.float('worley'),
178
+ pb.vec3('seed')
179
+ ], function() {
180
+ this.$l.pfbm = pb.mix(1, cloudPerlinFbm(this, this.p, this.freq, octaves, this.seed), 0.5);
181
+ // Billowy: fold the fbm around its midpoint
182
+ this.pfbm = pb.abs(pb.sub(pb.mul(this.pfbm, 2), 1));
183
+ this.$return(pb.clamp(pb.div(pb.sub(this.pfbm, pb.sub(1, this.worley)), pb.max(this.worley, 1e-6)), 0, 1));
184
+ });
185
+ return pb.getGlobalScope()[funcName](p, freq, worley, seed);
186
+ }
187
+
188
+ export { cloudGradientNoise, cloudHash33, cloudPerlinFbm, cloudPerlinWorley, cloudWorleyFbm, cloudWorleyNoise };
189
+ //# sourceMappingURL=cloud_noise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud_noise.js","sources":["../../../src/render/volumetric_cloud/cloud_noise.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\n\r\n/*\r\n * Tileable noise for the volumetric cloud volumes.\r\n *\r\n * Follows piyushslayer's \"Tileable Perlin-Worley 3D\" (https://www.shadertoy.com/view/3dVXDc),\r\n * which builds the volumes of Schneider, \"The Real-time Volumetric Cloudscapes of Horizon Zero\r\n * Dawn\" (SIGGRAPH 2015) after Hillaire's TileableVolumeNoise\r\n * (https://github.com/sebh/TileableVolumeNoise): gradient noise by Inigo Quilez and Worley noise,\r\n * both made periodic by wrapping the lattice cell modulo the frequency.\r\n *\r\n * Every function takes the frequency in lattice cells per period, so a coordinate in [0, 1)\r\n * scaled by `freq` repeats exactly over the unit cube.\r\n */\r\n\r\n/**\r\n * Lattice cell wrapped into [0, freq). Floored, unlike pb.mod, which is WGSL's truncated `%` on\r\n * WebGPU: that maps the neighbour cell -1 to -1 instead of freq - 1 and breaks the tiling.\r\n */\r\nfunction wrapCell(scope: PBInsideFunctionScope, cell: PBShaderExp, freq: PBShaderExp) {\r\n const pb = scope.$builder;\r\n return pb.sub(cell, pb.mul(pb.vec3(freq), pb.floor(pb.div(cell, pb.vec3(freq)))));\r\n}\r\n\r\n/**\r\n * Integer hash of a lattice cell to [-1, 1]^3 (Dave Hoskins' uint hash, as in 3dVXDc).\r\n *\r\n * `seed` shifts the cell by whole cells after the periodic wrap, so a seeded volume still tiles.\r\n * @internal\r\n */\r\nexport function cloudHash33(scope: PBInsideFunctionScope, p: PBShaderExp, seed: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_cloudHash33';\r\n pb.func(funcName, [pb.vec3('p'), pb.vec3('seed')], function () {\r\n this.$l.UI3 = pb.uvec3(pb.uint(1597334673), pb.uint(3812015801), pb.uint(2798796415));\r\n this.$l.q = pb.mul(pb.uvec3(pb.ivec3(pb.add(this.p, this.seed))), this.UI3);\r\n this.$l.h = pb.compXor(pb.compXor(this.q.x, this.q.y), this.q.z);\r\n this.q = pb.mul(this.UI3, this.h);\r\n this.$return(pb.sub(pb.mul(pb.vec3(this.q), 2 / 0xffffffff), pb.vec3(1)));\r\n });\r\n return pb.getGlobalScope()[funcName](p, seed) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Periodic gradient noise (Inigo Quilez) with quintic interpolation, roughly in [-1, 1].\r\n * @internal\r\n */\r\nexport function cloudGradientNoise(\r\n scope: PBInsideFunctionScope,\r\n x: PBShaderExp,\r\n freq: PBShaderExp | number,\r\n seed: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_cloudGradientNoise';\r\n pb.func(funcName, [pb.vec3('x'), pb.float('freq'), pb.vec3('seed')], function () {\r\n this.$l.p = pb.floor(this.x);\r\n this.$l.w = pb.fract(this.x);\r\n // w^3 (w (6 w - 15) + 10)\r\n this.$l.u = pb.mul(\r\n this.w,\r\n this.w,\r\n this.w,\r\n pb.add(pb.mul(this.w, pb.sub(pb.mul(this.w, 6), pb.vec3(15))), pb.vec3(10))\r\n );\r\n const corner = (scope: PBInsideFunctionScope, o: number[]) =>\r\n cloudHash33(scope, wrapCell(scope, pb.add(scope.p, pb.vec3(o[0], o[1], o[2])), scope.freq), scope.seed);\r\n this.$l.va = pb.dot(corner(this, [0, 0, 0]), this.w);\r\n this.$l.vb = pb.dot(corner(this, [1, 0, 0]), pb.sub(this.w, pb.vec3(1, 0, 0)));\r\n this.$l.vc = pb.dot(corner(this, [0, 1, 0]), pb.sub(this.w, pb.vec3(0, 1, 0)));\r\n this.$l.vd = pb.dot(corner(this, [1, 1, 0]), pb.sub(this.w, pb.vec3(1, 1, 0)));\r\n this.$l.ve = pb.dot(corner(this, [0, 0, 1]), pb.sub(this.w, pb.vec3(0, 0, 1)));\r\n this.$l.vf = pb.dot(corner(this, [1, 0, 1]), pb.sub(this.w, pb.vec3(1, 0, 1)));\r\n this.$l.vg = pb.dot(corner(this, [0, 1, 1]), pb.sub(this.w, pb.vec3(0, 1, 1)));\r\n this.$l.vh = pb.dot(corner(this, [1, 1, 1]), pb.sub(this.w, pb.vec3(1, 1, 1)));\r\n this.$return(\r\n pb.add(\r\n this.va,\r\n pb.mul(this.u.x, pb.sub(this.vb, this.va)),\r\n pb.mul(this.u.y, pb.sub(this.vc, this.va)),\r\n pb.mul(this.u.z, pb.sub(this.ve, this.va)),\r\n pb.mul(this.u.x, this.u.y, pb.sub(pb.add(this.va, this.vd), pb.add(this.vb, this.vc))),\r\n pb.mul(this.u.y, this.u.z, pb.sub(pb.add(this.va, this.vg), pb.add(this.vc, this.ve))),\r\n pb.mul(this.u.z, this.u.x, pb.sub(pb.add(this.va, this.vf), pb.add(this.vb, this.ve))),\r\n pb.mul(\r\n this.u.x,\r\n this.u.y,\r\n this.u.z,\r\n pb.sub(pb.add(this.vb, this.vc, this.ve, this.vh), pb.add(this.va, this.vd, this.vf, this.vg))\r\n )\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](x, freq, seed) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Periodic Worley noise: one minus the squared distance to the nearest feature point.\r\n * @internal\r\n */\r\nexport function cloudWorleyNoise(\r\n scope: PBInsideFunctionScope,\r\n uv: PBShaderExp,\r\n freq: PBShaderExp | number,\r\n seed: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_cloudWorleyNoise';\r\n pb.func(funcName, [pb.vec3('uv'), pb.float('freq'), pb.vec3('seed')], function () {\r\n this.$l.id = pb.floor(this.uv);\r\n this.$l.p = pb.fract(this.uv);\r\n this.$l.minDist = pb.float(10000);\r\n this.$for(pb.int('x'), -1, 2, function () {\r\n this.$for(pb.int('y'), -1, 2, function () {\r\n this.$for(pb.int('z'), -1, 2, function () {\r\n this.$l.offset = pb.vec3(pb.float(this.x), pb.float(this.y), pb.float(this.z));\r\n this.$l.h = pb.add(\r\n pb.mul(\r\n cloudHash33(this, wrapCell(this, pb.add(this.id, this.offset), this.freq), this.seed),\r\n 0.5\r\n ),\r\n pb.vec3(0.5),\r\n this.offset\r\n );\r\n this.$l.d = pb.sub(this.p, this.h);\r\n this.minDist = pb.min(this.minDist, pb.dot(this.d, this.d));\r\n });\r\n });\r\n });\r\n this.$return(pb.sub(1, this.minDist));\r\n });\r\n return pb.getGlobalScope()[funcName](uv, freq, seed) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Periodic gradient-noise fbm: `octaves` octaves, frequency doubling, gain 2^-0.85.\r\n * @internal\r\n */\r\nexport function cloudPerlinFbm(\r\n scope: PBInsideFunctionScope,\r\n p: PBShaderExp,\r\n freq: PBShaderExp | number,\r\n octaves: number,\r\n seed: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = `Z_cloudPerlinFbm${octaves}`;\r\n pb.func(funcName, [pb.vec3('p'), pb.float('freq'), pb.vec3('seed')], function () {\r\n this.$l.f = this.freq;\r\n this.$l.amp = pb.float(1);\r\n this.$l.noise = pb.float(0);\r\n this.$for(pb.int('i'), 0, octaves, function () {\r\n this.noise = pb.add(\r\n this.noise,\r\n pb.mul(this.amp, cloudGradientNoise(this, pb.mul(this.p, this.f), this.f, this.seed))\r\n );\r\n this.f = pb.mul(this.f, 2);\r\n this.amp = pb.mul(this.amp, Math.pow(2, -0.85));\r\n });\r\n this.$return(this.noise);\r\n });\r\n return pb.getGlobalScope()[funcName](p, freq, seed) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Periodic Worley fbm: three octaves at freq, 2 freq and 4 freq weighted 0.625 / 0.25 / 0.125.\r\n * @internal\r\n */\r\nexport function cloudWorleyFbm(\r\n scope: PBInsideFunctionScope,\r\n p: PBShaderExp,\r\n freq: PBShaderExp | number,\r\n seed: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_cloudWorleyFbm';\r\n pb.func(funcName, [pb.vec3('p'), pb.float('freq'), pb.vec3('seed')], function () {\r\n this.$return(\r\n pb.add(\r\n pb.mul(cloudWorleyNoise(this, pb.mul(this.p, this.freq), this.freq, this.seed), 0.625),\r\n pb.mul(cloudWorleyNoise(this, pb.mul(this.p, this.freq, 2), pb.mul(this.freq, 2), this.seed), 0.25),\r\n pb.mul(cloudWorleyNoise(this, pb.mul(this.p, this.freq, 4), pb.mul(this.freq, 4), this.seed), 0.125)\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](p, freq, seed) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Perlin-Worley of Nubis (Schneider, \"Nubis: Authoring Real-Time Volumetric Cloudscapes with the\r\n * Decima Engine\", SIGGRAPH 2017, slide 34): `remap(perlin, 1 - worley, 1, 0, 1)`, the web of the\r\n * Worley noise subtracted from the low density regions of a billowy Perlin fbm, which puts round\r\n * shapes there. `worley` is the Worley fbm at the same frequency.\r\n * @internal\r\n */\r\nexport function cloudPerlinWorley(\r\n scope: PBInsideFunctionScope,\r\n p: PBShaderExp,\r\n freq: PBShaderExp | number,\r\n worley: PBShaderExp,\r\n seed: PBShaderExp,\r\n octaves = 7\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = `Z_cloudPerlinWorley${octaves}`;\r\n pb.func(funcName, [pb.vec3('p'), pb.float('freq'), pb.float('worley'), pb.vec3('seed')], function () {\r\n this.$l.pfbm = pb.mix(1, cloudPerlinFbm(this, this.p, this.freq, octaves, this.seed), 0.5);\r\n // Billowy: fold the fbm around its midpoint\r\n this.pfbm = pb.abs(pb.sub(pb.mul(this.pfbm, 2), 1));\r\n this.$return(\r\n pb.clamp(pb.div(pb.sub(this.pfbm, pb.sub(1, this.worley)), pb.max(this.worley, 1e-6)), 0, 1)\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](p, freq, worley, seed) as PBShaderExp;\r\n}\r\n"],"names":["wrapCell","scope","cell","freq","pb","$builder","sub","mul","vec3","floor","div","cloudHash33","p","seed","funcName","func","$l","UI3","uvec3","uint","q","ivec3","add","h","compXor","x","y","z","$return","getGlobalScope","cloudGradientNoise","float","w","fract","u","corner","o","va","dot","vb","vc","vd","ve","vf","vg","vh","cloudWorleyNoise","uv","id","minDist","$for","int","offset","d","min","cloudPerlinFbm","octaves","f","amp","noise","Math","pow","cloudWorleyFbm","cloudPerlinWorley","worley","pfbm","mix","abs","clamp","max"],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ import { Vector4 } from '@zephyr3d/base';
2
+ import { getDevice } from '../../app/api.js';
3
+ import { fetchSampler } from '../../utility/misc.js';
4
+ import { drawFullscreenQuad } from '../fullscreenquad.js';
5
+ import { getCloudParamsStruct, cloudSampleDensity } from './cloud_common.js';
6
+
7
+ let volumeProgram = null;
8
+ let mapProgram = null;
9
+ let volumeBindGroup = null;
10
+ let mapBindGroup = null;
11
+ const densityPrograms = new Map();
12
+ function createProgram(volume, densityView) {
13
+ const device = getDevice();
14
+ return device.buildRenderProgram({
15
+ label: volume ? 'CloudDebugVolume' : 'CloudDebugMap',
16
+ vertex (pb) {
17
+ this.flip = pb.int().uniform(0);
18
+ this.$inputs.pos = pb.vec2().attrib('position');
19
+ this.$outputs.uv = pb.vec2();
20
+ pb.main(function() {
21
+ this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);
22
+ this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));
23
+ this.$if(pb.notEqual(this.flip, 0), function() {
24
+ this.$builtins.position.y = pb.neg(this.$builtins.position.y);
25
+ });
26
+ });
27
+ },
28
+ fragment (pb) {
29
+ if (densityView) {
30
+ this.cloud = getCloudParamsStruct(pb)().uniform(0);
31
+ this.weatherMap = pb.tex2D().uniform(0);
32
+ this.baseNoise = pb.tex3D().uniform(0);
33
+ this.detailNoise = pb.tex3D().uniform(0);
34
+ } else {
35
+ this.tex = volume ? pb.tex3D().uniform(0) : pb.tex2D().uniform(0);
36
+ }
37
+ // (slice, channel, 0, 0)
38
+ this.params = pb.vec4().uniform(0);
39
+ this.$outputs.color = pb.vec4();
40
+ pb.main(function() {
41
+ if (densityView) {
42
+ const xy = densityView.endsWith('XY');
43
+ this.$l.uv = this.$inputs.uv;
44
+ this.$l.h = xy ? this.uv.y : this.params.x;
45
+ this.$l.xz = pb.div(xy ? pb.vec2(this.uv.x, this.params.x) : this.uv, this.cloud.scales.x);
46
+ this.$l.r = pb.mix(this.cloud.layer.x, this.cloud.layer.y, this.h);
47
+ // Planet-fixed XZ coordinates; the slice follows the spherical layer at each height.
48
+ this.$l.planet = pb.vec3(this.xz.x, pb.sqrt(pb.max(pb.sub(pb.mul(this.r, this.r), pb.dot(this.xz, this.xz)), 0)), this.xz.y);
49
+ this.$l.p = pb.mul(this.cloud.referential, pb.vec4(this.planet, 0)).xyz;
50
+ this.$l.medium = cloudSampleDensity(this, this.cloud, this.p, this.weatherMap, this.baseNoise, this.detailNoise, densityView.startsWith('profile') ? 'profile' : densityView.startsWith('base') ? 'base' : 'density');
51
+ this.$l.value = pb.clamp(pb.div(this.medium.x, pb.max(this.cloud.density.y, 1e-6)), 0, 1);
52
+ this.$outputs.color = pb.vec4(pb.vec3(this.value), 1);
53
+ return;
54
+ }
55
+ this.$l.value = volume ? pb.textureSampleLevel(this.tex, pb.vec3(this.$inputs.uv, this.params.x), 0) : pb.textureSampleLevel(this.tex, this.$inputs.uv, 0);
56
+ this.$l.channel = pb.int(this.params.y);
57
+ this.$l.rgb = this.value.rgb;
58
+ this.$if(pb.equal(this.channel, 1), function() {
59
+ this.rgb = pb.vec3(this.value.r);
60
+ }).$elseif(pb.equal(this.channel, 2), function() {
61
+ this.rgb = pb.vec3(this.value.g);
62
+ }).$elseif(pb.equal(this.channel, 3), function() {
63
+ this.rgb = pb.vec3(this.value.b);
64
+ }).$elseif(pb.equal(this.channel, 4), function() {
65
+ this.rgb = pb.vec3(this.value.a);
66
+ });
67
+ this.$outputs.color = pb.vec4(this.rgb, 1);
68
+ });
69
+ }
70
+ });
71
+ }
72
+ /**
73
+ * Covers the current render target with a cloud resource: a slice of a noise volume or the
74
+ * weather map. `channel` 0 shows RGB, 1-4 one channel as grey.
75
+ * @internal
76
+ */ function drawVolumetricCloudDebug(resources, view, slice, channel, densityParams) {
77
+ if (view.endsWith('XY') || view.endsWith('XZ')) {
78
+ if (!densityParams || !resources.weatherMap || !resources.baseNoise || !resources.detailNoise) {
79
+ return;
80
+ }
81
+ const device = getDevice();
82
+ let entry = densityPrograms.get(view);
83
+ if (!entry) {
84
+ const program = createProgram(false, view);
85
+ entry = {
86
+ program,
87
+ bindGroup: device.createBindGroup(program.bindGroupLayouts[0])
88
+ };
89
+ densityPrograms.set(view, entry);
90
+ }
91
+ const { program, bindGroup } = entry;
92
+ bindGroup.setValue('cloud', densityParams);
93
+ bindGroup.setValue('params', new Vector4(slice, 0, 0, 0));
94
+ bindGroup.setValue('flip', device.type === 'webgpu' && device.getFramebuffer() ? 1 : 0);
95
+ bindGroup.setTexture('weatherMap', resources.weatherMap, fetchSampler('repeat_linear'));
96
+ bindGroup.setTexture('baseNoise', resources.baseNoise);
97
+ bindGroup.setTexture('detailNoise', resources.detailNoise);
98
+ device.setProgram(program);
99
+ device.setBindGroup(0, bindGroup);
100
+ drawFullscreenQuad();
101
+ return;
102
+ }
103
+ const tex = view === 'baseNoise' ? resources.baseNoise : view === 'detailNoise' ? resources.detailNoise : view === 'weather' ? resources.weatherMap : null;
104
+ if (!tex) {
105
+ return;
106
+ }
107
+ const device = getDevice();
108
+ const volume = tex.isTexture3D();
109
+ let program;
110
+ let bindGroup;
111
+ if (volume) {
112
+ volumeProgram = volumeProgram ?? createProgram(true);
113
+ volumeBindGroup = volumeBindGroup ?? device.createBindGroup(volumeProgram.bindGroupLayouts[0]);
114
+ program = volumeProgram;
115
+ bindGroup = volumeBindGroup;
116
+ } else {
117
+ mapProgram = mapProgram ?? createProgram(false);
118
+ mapBindGroup = mapBindGroup ?? device.createBindGroup(mapProgram.bindGroupLayouts[0]);
119
+ program = mapProgram;
120
+ bindGroup = mapBindGroup;
121
+ }
122
+ bindGroup.setTexture('tex', tex, fetchSampler('repeat_linear_nomip'));
123
+ bindGroup.setValue('flip', device.type === 'webgpu' && device.getFramebuffer() ? 1 : 0);
124
+ bindGroup.setValue('params', new Vector4(slice, channel, 0, 0));
125
+ device.setProgram(program);
126
+ device.setBindGroup(0, bindGroup);
127
+ drawFullscreenQuad();
128
+ }
129
+
130
+ export { drawVolumetricCloudDebug };
131
+ //# sourceMappingURL=debug_view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug_view.js","sources":["../../../src/render/volumetric_cloud/debug_view.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\nimport type { Matrix4x4 } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport type { BindGroup, GPUProgram } from '@zephyr3d/device';\r\nimport { getDevice } from '../../app/api';\r\nimport { fetchSampler } from '../../utility/misc';\r\nimport { drawFullscreenQuad } from '../fullscreenquad';\r\nimport type { VolumetricCloudResources } from './resources';\r\nimport type { VolumetricCloudDebugView } from './volumetric_cloud';\r\nimport { cloudSampleDensity, getCloudParamsStruct } from './cloud_common';\r\n\r\nlet volumeProgram: Nullable<GPUProgram> = null;\r\nlet mapProgram: Nullable<GPUProgram> = null;\r\nlet volumeBindGroup: Nullable<BindGroup> = null;\r\nlet mapBindGroup: Nullable<BindGroup> = null;\r\nconst densityPrograms = new Map<string, { program: GPUProgram; bindGroup: BindGroup }>();\r\n\r\nfunction createProgram(volume: boolean, densityView?: string) {\r\n const device = getDevice();\r\n return device.buildRenderProgram({\r\n label: volume ? 'CloudDebugVolume' : 'CloudDebugMap',\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n if (densityView) {\r\n this.cloud = getCloudParamsStruct(pb)().uniform(0);\r\n this.weatherMap = pb.tex2D().uniform(0);\r\n this.baseNoise = pb.tex3D().uniform(0);\r\n this.detailNoise = pb.tex3D().uniform(0);\r\n } else {\r\n this.tex = volume ? pb.tex3D().uniform(0) : pb.tex2D().uniform(0);\r\n }\r\n // (slice, channel, 0, 0)\r\n this.params = pb.vec4().uniform(0);\r\n this.$outputs.color = pb.vec4();\r\n pb.main(function () {\r\n if (densityView) {\r\n const xy = densityView.endsWith('XY');\r\n this.$l.uv = this.$inputs.uv;\r\n this.$l.h = xy ? this.uv.y : this.params.x;\r\n this.$l.xz = pb.div(xy ? pb.vec2(this.uv.x, this.params.x) : this.uv, this.cloud.scales.x);\r\n this.$l.r = pb.mix(this.cloud.layer.x, this.cloud.layer.y, this.h);\r\n // Planet-fixed XZ coordinates; the slice follows the spherical layer at each height.\r\n this.$l.planet = pb.vec3(\r\n this.xz.x,\r\n pb.sqrt(pb.max(pb.sub(pb.mul(this.r, this.r), pb.dot(this.xz, this.xz)), 0)),\r\n this.xz.y\r\n );\r\n this.$l.p = pb.mul(this.cloud.referential, pb.vec4(this.planet, 0)).xyz;\r\n this.$l.medium = cloudSampleDensity(\r\n this,\r\n this.cloud,\r\n this.p,\r\n this.weatherMap,\r\n this.baseNoise,\r\n this.detailNoise,\r\n densityView.startsWith('profile')\r\n ? 'profile'\r\n : densityView.startsWith('base')\r\n ? 'base'\r\n : 'density'\r\n );\r\n this.$l.value = pb.clamp(pb.div(this.medium.x, pb.max(this.cloud.density.y, 1e-6)), 0, 1);\r\n this.$outputs.color = pb.vec4(pb.vec3(this.value), 1);\r\n return;\r\n }\r\n this.$l.value = volume\r\n ? pb.textureSampleLevel(this.tex, pb.vec3(this.$inputs.uv, this.params.x), 0)\r\n : pb.textureSampleLevel(this.tex, this.$inputs.uv, 0);\r\n this.$l.channel = pb.int(this.params.y);\r\n this.$l.rgb = this.value.rgb;\r\n this.$if(pb.equal(this.channel, 1), function () {\r\n this.rgb = pb.vec3(this.value.r);\r\n })\r\n .$elseif(pb.equal(this.channel, 2), function () {\r\n this.rgb = pb.vec3(this.value.g);\r\n })\r\n .$elseif(pb.equal(this.channel, 3), function () {\r\n this.rgb = pb.vec3(this.value.b);\r\n })\r\n .$elseif(pb.equal(this.channel, 4), function () {\r\n this.rgb = pb.vec3(this.value.a);\r\n });\r\n this.$outputs.color = pb.vec4(this.rgb, 1);\r\n });\r\n }\r\n })!;\r\n}\r\n\r\n/**\r\n * Covers the current render target with a cloud resource: a slice of a noise volume or the\r\n * weather map. `channel` 0 shows RGB, 1-4 one channel as grey.\r\n * @internal\r\n */\r\nexport function drawVolumetricCloudDebug(\r\n resources: VolumetricCloudResources,\r\n view: VolumetricCloudDebugView,\r\n slice: number,\r\n channel: number,\r\n densityParams?: Nullable<Record<string, Vector4 | Matrix4x4>>\r\n) {\r\n if (view.endsWith('XY') || view.endsWith('XZ')) {\r\n if (!densityParams || !resources.weatherMap || !resources.baseNoise || !resources.detailNoise) {\r\n return;\r\n }\r\n const device = getDevice();\r\n let entry = densityPrograms.get(view);\r\n if (!entry) {\r\n const program = createProgram(false, view);\r\n entry = { program, bindGroup: device.createBindGroup(program.bindGroupLayouts[0]) };\r\n densityPrograms.set(view, entry);\r\n }\r\n const { program, bindGroup } = entry;\r\n bindGroup.setValue('cloud', densityParams);\r\n bindGroup.setValue('params', new Vector4(slice, 0, 0, 0));\r\n bindGroup.setValue('flip', device.type === 'webgpu' && device.getFramebuffer() ? 1 : 0);\r\n bindGroup.setTexture('weatherMap', resources.weatherMap, fetchSampler('repeat_linear'));\r\n bindGroup.setTexture('baseNoise', resources.baseNoise);\r\n bindGroup.setTexture('detailNoise', resources.detailNoise);\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindGroup);\r\n drawFullscreenQuad();\r\n return;\r\n }\r\n const tex =\r\n view === 'baseNoise'\r\n ? resources.baseNoise\r\n : view === 'detailNoise'\r\n ? resources.detailNoise\r\n : view === 'weather'\r\n ? resources.weatherMap\r\n : null;\r\n if (!tex) {\r\n return;\r\n }\r\n const device = getDevice();\r\n const volume = tex.isTexture3D();\r\n let program: GPUProgram;\r\n let bindGroup: BindGroup;\r\n if (volume) {\r\n volumeProgram = volumeProgram ?? createProgram(true);\r\n volumeBindGroup = volumeBindGroup ?? device.createBindGroup(volumeProgram.bindGroupLayouts[0]);\r\n program = volumeProgram;\r\n bindGroup = volumeBindGroup;\r\n } else {\r\n mapProgram = mapProgram ?? createProgram(false);\r\n mapBindGroup = mapBindGroup ?? device.createBindGroup(mapProgram.bindGroupLayouts[0]);\r\n program = mapProgram;\r\n bindGroup = mapBindGroup;\r\n }\r\n bindGroup.setTexture('tex', tex, fetchSampler('repeat_linear_nomip'));\r\n bindGroup.setValue('flip', device.type === 'webgpu' && device.getFramebuffer() ? 1 : 0);\r\n bindGroup.setValue('params', new Vector4(slice, channel, 0, 0));\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindGroup);\r\n drawFullscreenQuad();\r\n}\r\n"],"names":["volumeProgram","mapProgram","volumeBindGroup","mapBindGroup","densityPrograms","Map","createProgram","volume","densityView","device","getDevice","buildRenderProgram","label","vertex","pb","flip","int","uniform","$inputs","pos","vec2","attrib","$outputs","uv","main","$builtins","position","vec4","add","mul","xy","$if","notEqual","y","neg","fragment","cloud","getCloudParamsStruct","weatherMap","tex2D","baseNoise","tex3D","detailNoise","tex","params","color","endsWith","$l","h","x","xz","div","scales","r","mix","layer","planet","vec3","sqrt","max","sub","dot","p","referential","xyz","medium","cloudSampleDensity","startsWith","value","clamp","density","textureSampleLevel","channel","rgb","equal","$elseif","g","b","a","drawVolumetricCloudDebug","resources","view","slice","densityParams","entry","get","program","bindGroup","createBindGroup","bindGroupLayouts","set","setValue","Vector4","type","getFramebuffer","setTexture","fetchSampler","setProgram","setBindGroup","drawFullscreenQuad","isTexture3D"],"mappings":"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"}