@zephyr3d/scene 0.9.26 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (506) hide show
  1. package/README.md +60 -27
  2. package/dist/animation/animation_bank.js +634 -0
  3. package/dist/animation/animation_bank.js.map +1 -0
  4. package/dist/animation/animation_bank_gpu.js +256 -0
  5. package/dist/animation/animation_bank_gpu.js.map +1 -0
  6. package/dist/animation/animationset.js +146 -30
  7. package/dist/animation/animationset.js.map +1 -1
  8. package/dist/animation/cloth/gpu_cloth_component.js +406 -0
  9. package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
  10. package/dist/animation/cloth/gpu_cloth_system.js +332 -202
  11. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  12. package/dist/animation/gpu_animation_driver.js +289 -0
  13. package/dist/animation/gpu_animation_driver.js.map +1 -0
  14. package/dist/animation/joint_dynamics/collision.js +112 -1
  15. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  16. package/dist/animation/joint_dynamics/controller.js +6 -0
  17. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  18. package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
  19. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  20. package/dist/animation/joint_dynamics/solver.js +50 -12
  21. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  22. package/dist/animation/joint_dynamics/types.js.map +1 -1
  23. package/dist/animation/skeleton.js +300 -56
  24. package/dist/animation/skeleton.js.map +1 -1
  25. package/dist/animation/skin_palette_atlas.js +252 -0
  26. package/dist/animation/skin_palette_atlas.js.map +1 -0
  27. package/dist/animation/spring/multi_chain_spring_system.js +298 -38
  28. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  29. package/dist/animation/spring/spring_chain.js +2 -0
  30. package/dist/animation/spring/spring_chain.js.map +1 -1
  31. package/dist/animation/spring/spring_collider.js +159 -21
  32. package/dist/animation/spring/spring_collider.js.map +1 -1
  33. package/dist/animation/spring/spring_particle.js +1 -0
  34. package/dist/animation/spring/spring_particle.js.map +1 -1
  35. package/dist/animation/spring/spring_solver.js +173 -0
  36. package/dist/animation/spring/spring_solver.js.map +1 -0
  37. package/dist/animation/spring/spring_system.js +249 -24
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring_modifier.js +32 -1
  40. package/dist/animation/spring_modifier.js.map +1 -1
  41. package/dist/app/app.js +26 -0
  42. package/dist/app/app.js.map +1 -1
  43. package/dist/app/engine.js +86 -15
  44. package/dist/app/engine.js.map +1 -1
  45. package/dist/app/gamepad.js +191 -0
  46. package/dist/app/gamepad.js.map +1 -0
  47. package/dist/app/inputactions.js +271 -0
  48. package/dist/app/inputactions.js.map +1 -0
  49. package/dist/app/inputmgr.js +331 -22
  50. package/dist/app/inputmgr.js.map +1 -1
  51. package/dist/app/loading.js +138 -0
  52. package/dist/app/loading.js.map +1 -0
  53. package/dist/app/pipelinecache.js +209 -0
  54. package/dist/app/pipelinecache.js.map +1 -0
  55. package/dist/app/runtimescript.js +25 -0
  56. package/dist/app/runtimescript.js.map +1 -1
  57. package/dist/app/scriptingsystem.js +54 -0
  58. package/dist/app/scriptingsystem.js.map +1 -1
  59. package/dist/app/scriptregistry.js +7 -2
  60. package/dist/app/scriptregistry.js.map +1 -1
  61. package/dist/asset/asset_manifest.js +59 -0
  62. package/dist/asset/asset_manifest.js.map +1 -0
  63. package/dist/asset/asset_preload.js +258 -0
  64. package/dist/asset/asset_preload.js.map +1 -0
  65. package/dist/asset/assetmanager.js +117 -65
  66. package/dist/asset/assetmanager.js.map +1 -1
  67. package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
  68. package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  69. package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  70. package/dist/asset/loaders/ktx2/basis_location.js +17 -0
  71. package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
  72. package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
  73. package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
  74. package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
  75. package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
  76. package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
  77. package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
  78. package/dist/asset/mesh_lod_builder.js +104 -0
  79. package/dist/asset/mesh_lod_builder.js.map +1 -0
  80. package/dist/asset/mesh_settings.js +111 -0
  81. package/dist/asset/mesh_settings.js.map +1 -0
  82. package/dist/asset/meshopt_decoder.js +18 -0
  83. package/dist/asset/meshopt_decoder.js.map +1 -0
  84. package/dist/asset/meshopt_simplifier.js +26 -0
  85. package/dist/asset/meshopt_simplifier.js.map +1 -0
  86. package/dist/asset/model.js +177 -3
  87. package/dist/asset/model.js.map +1 -1
  88. package/dist/asset/texture_settings.js +231 -0
  89. package/dist/asset/texture_settings.js.map +1 -0
  90. package/dist/asset/zmsh_binary.js +131 -0
  91. package/dist/asset/zmsh_binary.js.map +1 -0
  92. package/dist/asset/zsdf_binary.js +111 -0
  93. package/dist/asset/zsdf_binary.js.map +1 -0
  94. package/dist/blitter/bilateralblur.js +1 -2
  95. package/dist/blitter/bilateralblur.js.map +1 -1
  96. package/dist/blitter/gaussianblur.js +1 -6
  97. package/dist/blitter/gaussianblur.js.map +1 -1
  98. package/dist/camera/base.js +31 -10
  99. package/dist/camera/base.js.map +1 -1
  100. package/dist/camera/camera.js +178 -200
  101. package/dist/camera/camera.js.map +1 -1
  102. package/dist/camera/follow.js +342 -0
  103. package/dist/camera/follow.js.map +1 -0
  104. package/dist/camera/fps.js +9 -7
  105. package/dist/camera/fps.js.map +1 -1
  106. package/dist/camera/orbit.js +46 -19
  107. package/dist/camera/orbit.js.map +1 -1
  108. package/dist/index.d.ts +30475 -19865
  109. package/dist/index.js +67 -12
  110. package/dist/index.js.map +1 -1
  111. package/dist/material/blinn.js +3 -0
  112. package/dist/material/blinn.js.map +1 -1
  113. package/dist/material/eye.js +1 -1
  114. package/dist/material/eye.js.map +1 -1
  115. package/dist/material/hair.js +2 -3
  116. package/dist/material/hair.js.map +1 -1
  117. package/dist/material/hairstrand.js +235 -235
  118. package/dist/material/hairstrand.js.map +1 -1
  119. package/dist/material/lambert.js +4 -1
  120. package/dist/material/lambert.js.map +1 -1
  121. package/dist/material/material.js +362 -300
  122. package/dist/material/material.js.map +1 -1
  123. package/dist/material/meshmaterial.js +118 -45
  124. package/dist/material/meshmaterial.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  126. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  128. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  130. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  132. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  133. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  134. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  135. package/dist/material/mixins/lit.js +223 -83
  136. package/dist/material/mixins/lit.js.map +1 -1
  137. package/dist/material/mixins/pbr/common.js +31 -206
  138. package/dist/material/mixins/pbr/common.js.map +1 -1
  139. package/dist/material/mtoon.js +1 -1
  140. package/dist/material/mtoon.js.map +1 -1
  141. package/dist/material/pbrmr.js +3 -0
  142. package/dist/material/pbrmr.js.map +1 -1
  143. package/dist/material/pbrsg.js +3 -0
  144. package/dist/material/pbrsg.js.map +1 -1
  145. package/dist/material/sdf_debug.js +78 -0
  146. package/dist/material/sdf_debug.js.map +1 -0
  147. package/dist/material/shader/helper.js +733 -190
  148. package/dist/material/shader/helper.js.map +1 -1
  149. package/dist/material/shader/terrain_blend.js +204 -43
  150. package/dist/material/shader/terrain_blend.js.map +1 -1
  151. package/dist/material/skin.js +331 -297
  152. package/dist/material/skin.js.map +1 -1
  153. package/dist/material/skinprofile.js +1058 -0
  154. package/dist/material/skinprofile.js.map +1 -0
  155. package/dist/material/sss.js +353 -0
  156. package/dist/material/sss.js.map +1 -0
  157. package/dist/material/sss_kernel.js +265 -0
  158. package/dist/material/sss_kernel.js.map +1 -0
  159. package/dist/material/sssprofile.js +879 -0
  160. package/dist/material/sssprofile.js.map +1 -0
  161. package/dist/material/subsurfaceprofile.js +4 -8
  162. package/dist/material/subsurfaceprofile.js.map +1 -1
  163. package/dist/material/terrain-cm.js +464 -188
  164. package/dist/material/terrain-cm.js.map +1 -1
  165. package/dist/material/unlit.js +3 -0
  166. package/dist/material/unlit.js.map +1 -1
  167. package/dist/material/water.js +2009 -201
  168. package/dist/material/water.js.map +1 -1
  169. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  172. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  173. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  174. package/dist/physics/character.js +226 -0
  175. package/dist/physics/character.js.map +1 -0
  176. package/dist/physics/collider.js +209 -0
  177. package/dist/physics/collider.js.map +1 -0
  178. package/dist/physics/events.js +79 -0
  179. package/dist/physics/events.js.map +1 -0
  180. package/dist/physics/joint.js +272 -0
  181. package/dist/physics/joint.js.map +1 -0
  182. package/dist/physics/node_physics.js +234 -0
  183. package/dist/physics/node_physics.js.map +1 -0
  184. package/dist/physics/part.js +91 -0
  185. package/dist/physics/part.js.map +1 -0
  186. package/dist/physics/rigid_body.js +379 -0
  187. package/dist/physics/rigid_body.js.map +1 -0
  188. package/dist/physics/vehicle.js +335 -0
  189. package/dist/physics/vehicle.js.map +1 -0
  190. package/dist/physics/world.js +25 -0
  191. package/dist/physics/world.js.map +1 -0
  192. package/dist/posteffect/bloom.js +49 -14
  193. package/dist/posteffect/bloom.js.map +1 -1
  194. package/dist/posteffect/motionblur.js +668 -63
  195. package/dist/posteffect/motionblur.js.map +1 -1
  196. package/dist/posteffect/posteffect.js +12 -1
  197. package/dist/posteffect/posteffect.js.map +1 -1
  198. package/dist/posteffect/postsss.js +572 -0
  199. package/dist/posteffect/postsss.js.map +1 -0
  200. package/dist/posteffect/sao.js +48 -50
  201. package/dist/posteffect/sao.js.map +1 -1
  202. package/dist/posteffect/skinsss.js +605 -355
  203. package/dist/posteffect/skinsss.js.map +1 -1
  204. package/dist/posteffect/ssgi.js +91 -162
  205. package/dist/posteffect/ssgi.js.map +1 -1
  206. package/dist/posteffect/ssr.js +3 -11
  207. package/dist/posteffect/ssr.js.map +1 -1
  208. package/dist/posteffect/sss.js +34 -15
  209. package/dist/posteffect/sss.js.map +1 -1
  210. package/dist/posteffect/taa.js +1 -0
  211. package/dist/posteffect/taa.js.map +1 -1
  212. package/dist/render/abuffer_oit.js +40 -39
  213. package/dist/render/abuffer_oit.js.map +1 -1
  214. package/dist/render/clipmap.js +328 -62
  215. package/dist/render/clipmap.js.map +1 -1
  216. package/dist/render/cluster_light.js +958 -224
  217. package/dist/render/cluster_light.js.map +1 -1
  218. package/dist/render/cull_visitor.js +26 -5
  219. package/dist/render/cull_visitor.js.map +1 -1
  220. package/dist/render/debug_views.js +37 -0
  221. package/dist/render/debug_views.js.map +1 -0
  222. package/dist/render/depthpass.js +5 -1
  223. package/dist/render/depthpass.js.map +1 -1
  224. package/dist/render/drawable_mixin.js +53 -6
  225. package/dist/render/drawable_mixin.js.map +1 -1
  226. package/dist/render/dualdepthpeeling_oit.js +53 -53
  227. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  228. package/dist/render/envlight.js +196 -113
  229. package/dist/render/envlight.js.map +1 -1
  230. package/dist/render/fbm_wavegenerator.js +8 -13
  231. package/dist/render/fbm_wavegenerator.js.map +1 -1
  232. package/dist/render/fft_wavegenerator.js +268 -136
  233. package/dist/render/fft_wavegenerator.js.map +1 -1
  234. package/dist/render/gerstner_wavegenerator.js +113 -28
  235. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  236. package/dist/render/gi/probe_volume.js +1334 -0
  237. package/dist/render/gi/probe_volume.js.map +1 -0
  238. package/dist/render/gi/scene_gi.js +282 -0
  239. package/dist/render/gi/scene_gi.js.map +1 -0
  240. package/dist/render/gi/voxel_atlas.js +198 -0
  241. package/dist/render/gi/voxel_atlas.js.map +1 -0
  242. package/dist/render/gi/voxel_lighting.js +652 -0
  243. package/dist/render/gi/voxel_lighting.js.map +1 -0
  244. package/dist/render/gi/voxel_scene.js +642 -0
  245. package/dist/render/gi/voxel_scene.js.map +1 -0
  246. package/dist/render/gi/voxelize_pass.js +223 -0
  247. package/dist/render/gi/voxelize_pass.js.map +1 -0
  248. package/dist/render/globalbindgroup_allocator.js +3 -2
  249. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  250. package/dist/render/gpu_picking.js +9 -36
  251. package/dist/render/gpu_picking.js.map +1 -1
  252. package/dist/render/hzb.js +80 -22
  253. package/dist/render/hzb.js.map +1 -1
  254. package/dist/render/instance_culling.js +499 -0
  255. package/dist/render/instance_culling.js.map +1 -0
  256. package/dist/render/lightpass.js +23 -9
  257. package/dist/render/lightpass.js.map +1 -1
  258. package/dist/render/lod.js +46 -0
  259. package/dist/render/lod.js.map +1 -0
  260. package/dist/render/oit.js +11 -11
  261. package/dist/render/oit.js.map +1 -1
  262. package/dist/render/primitive.js +301 -9
  263. package/dist/render/primitive.js.map +1 -1
  264. package/dist/render/primitive_readback.js +209 -0
  265. package/dist/render/primitive_readback.js.map +1 -0
  266. package/dist/render/render_queue.js +198 -11
  267. package/dist/render/render_queue.js.map +1 -1
  268. package/dist/render/renderer.js +14 -7
  269. package/dist/render/renderer.js.map +1 -1
  270. package/dist/render/rendergraph/blackboard.js +15 -1
  271. package/dist/render/rendergraph/blackboard.js.map +1 -1
  272. package/dist/render/rendergraph/executor.js +136 -0
  273. package/dist/render/rendergraph/executor.js.map +1 -1
  274. package/dist/render/rendergraph/forward_plus_builder.js +585 -59
  275. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  276. package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
  277. package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
  278. package/dist/render/rendergraph/history_resources.js +8 -1
  279. package/dist/render/rendergraph/history_resources.js.map +1 -1
  280. package/dist/render/rendergraph/scene_render_context.js +31 -2
  281. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  282. package/dist/render/rendergraph/types.js.map +1 -1
  283. package/dist/render/renderpass.js +28 -5
  284. package/dist/render/renderpass.js.map +1 -1
  285. package/dist/render/sdf/box_allocator.js +98 -0
  286. package/dist/render/sdf/box_allocator.js.map +1 -0
  287. package/dist/render/sdf/global_sdf.js +865 -0
  288. package/dist/render/sdf/global_sdf.js.map +1 -0
  289. package/dist/render/sdf/scene_sdf.js +562 -0
  290. package/dist/render/sdf/scene_sdf.js.map +1 -0
  291. package/dist/render/sdf/sdf_atlas.js +227 -0
  292. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  293. package/dist/render/sdf/sdf_programs.js +42 -0
  294. package/dist/render/sdf/sdf_programs.js.map +1 -0
  295. package/dist/render/sdf/sdf_view.js +199 -0
  296. package/dist/render/sdf/sdf_view.js.map +1 -0
  297. package/dist/render/sdf/waterline.js +610 -0
  298. package/dist/render/sdf/waterline.js.map +1 -0
  299. package/dist/render/shadow_mask_pass.js +142 -25
  300. package/dist/render/shadow_mask_pass.js.map +1 -1
  301. package/dist/render/shore_wave_generator.js +1193 -0
  302. package/dist/render/shore_wave_generator.js.map +1 -0
  303. package/dist/render/sky.js +516 -86
  304. package/dist/render/sky.js.map +1 -1
  305. package/dist/render/transmission_thickness_pass.js +477 -0
  306. package/dist/render/transmission_thickness_pass.js.map +1 -0
  307. package/dist/render/underwater.js +524 -0
  308. package/dist/render/underwater.js.map +1 -0
  309. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  310. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  311. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  312. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  313. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  314. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  315. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  316. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  317. package/dist/render/volumetric_cloud/resources.js +380 -0
  318. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  319. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  320. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  321. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  322. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  323. package/dist/render/water_caustics.js +1195 -0
  324. package/dist/render/water_caustics.js.map +1 -0
  325. package/dist/render/water_foam.js +627 -0
  326. package/dist/render/water_foam.js.map +1 -0
  327. package/dist/render/water_interaction.js +1795 -0
  328. package/dist/render/water_interaction.js.map +1 -0
  329. package/dist/render/weightedblended_oit.js +36 -36
  330. package/dist/render/weightedblended_oit.js.map +1 -1
  331. package/dist/scene/basesprite.js +9 -4
  332. package/dist/scene/basesprite.js.map +1 -1
  333. package/dist/scene/batchgroup.js +108 -12
  334. package/dist/scene/batchgroup.js.map +1 -1
  335. package/dist/scene/environment.js +28 -7
  336. package/dist/scene/environment.js.map +1 -1
  337. package/dist/scene/foliage.js +1020 -0
  338. package/dist/scene/foliage.js.map +1 -0
  339. package/dist/scene/foliage_buckets.js +147 -0
  340. package/dist/scene/foliage_buckets.js.map +1 -0
  341. package/dist/scene/foliage_mask.js +358 -0
  342. package/dist/scene/foliage_mask.js.map +1 -0
  343. package/dist/scene/hair.js +15 -4
  344. package/dist/scene/hair.js.map +1 -1
  345. package/dist/scene/light.js +179 -13
  346. package/dist/scene/light.js.map +1 -1
  347. package/dist/scene/mesh.js +327 -45
  348. package/dist/scene/mesh.js.map +1 -1
  349. package/dist/scene/meshdrawable.js +6 -0
  350. package/dist/scene/meshdrawable.js.map +1 -1
  351. package/dist/scene/msdftext.js +9 -3
  352. package/dist/scene/msdftext.js.map +1 -1
  353. package/dist/scene/msdftextsprite.js +9 -3
  354. package/dist/scene/msdftextsprite.js.map +1 -1
  355. package/dist/scene/particlesys.js +8 -2
  356. package/dist/scene/particlesys.js.map +1 -1
  357. package/dist/scene/physics_settings.js +157 -0
  358. package/dist/scene/physics_settings.js.map +1 -0
  359. package/dist/scene/scene.js +190 -44
  360. package/dist/scene/scene.js.map +1 -1
  361. package/dist/scene/scene_node.js +147 -6
  362. package/dist/scene/scene_node.js.map +1 -1
  363. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  364. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  365. package/dist/scene/terrain-cm/grass.js +881 -42
  366. package/dist/scene/terrain-cm/grass.js.map +1 -1
  367. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  368. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  369. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  370. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  371. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  372. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  373. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  374. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  375. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  376. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  377. package/dist/scene/update_queue.js +54 -0
  378. package/dist/scene/update_queue.js.map +1 -0
  379. package/dist/scene/water.js +997 -96
  380. package/dist/scene/water.js.map +1 -1
  381. package/dist/scene/water_surface_sampler.js +324 -0
  382. package/dist/scene/water_surface_sampler.js.map +1 -0
  383. package/dist/scene/wind.js +317 -0
  384. package/dist/scene/wind.js.map +1 -0
  385. package/dist/shaders/atmosphere.js +388 -166
  386. package/dist/shaders/atmosphere.js.map +1 -1
  387. package/dist/shaders/fog.js +100 -32
  388. package/dist/shaders/fog.js.map +1 -1
  389. package/dist/shaders/gi.js +365 -0
  390. package/dist/shaders/gi.js.map +1 -0
  391. package/dist/shaders/ltc_rect.js +202 -0
  392. package/dist/shaders/ltc_rect.js.map +1 -0
  393. package/dist/shaders/misc.js +1 -10
  394. package/dist/shaders/misc.js.map +1 -1
  395. package/dist/shaders/noise.js +5 -1
  396. package/dist/shaders/noise.js.map +1 -1
  397. package/dist/shaders/probes.js +309 -0
  398. package/dist/shaders/probes.js.map +1 -0
  399. package/dist/shaders/sdf.js +537 -0
  400. package/dist/shaders/sdf.js.map +1 -0
  401. package/dist/shaders/shadow.js +104 -70
  402. package/dist/shaders/shadow.js.map +1 -1
  403. package/dist/shaders/skin_brdf.js +243 -0
  404. package/dist/shaders/skin_brdf.js.map +1 -0
  405. package/dist/shaders/ssr.js +6 -159
  406. package/dist/shaders/ssr.js.map +1 -1
  407. package/dist/shaders/temporal.js +38 -27
  408. package/dist/shaders/temporal.js.map +1 -1
  409. package/dist/shaders/water.js +40 -87
  410. package/dist/shaders/water.js.map +1 -1
  411. package/dist/shaders/water_medium.js +42 -0
  412. package/dist/shaders/water_medium.js.map +1 -0
  413. package/dist/shadow/dom.js +110 -19
  414. package/dist/shadow/dom.js.map +1 -1
  415. package/dist/shadow/esm.js +3 -3
  416. package/dist/shadow/esm.js.map +1 -1
  417. package/dist/shadow/pcf_opt.js +15 -48
  418. package/dist/shadow/pcf_opt.js.map +1 -1
  419. package/dist/shadow/pcf_pd.js +15 -53
  420. package/dist/shadow/pcf_pd.js.map +1 -1
  421. package/dist/shadow/pcss.js +34 -9
  422. package/dist/shadow/pcss.js.map +1 -1
  423. package/dist/shadow/shadow_impl.js +3 -8
  424. package/dist/shadow/shadow_impl.js.map +1 -1
  425. package/dist/shadow/shadow_region.js +87 -49
  426. package/dist/shadow/shadow_region.js.map +1 -1
  427. package/dist/shadow/shadowmapper.js +93 -53
  428. package/dist/shadow/shadowmapper.js.map +1 -1
  429. package/dist/shadow/ssm.js +18 -72
  430. package/dist/shadow/ssm.js.map +1 -1
  431. package/dist/shadow/vsm.js +3 -3
  432. package/dist/shadow/vsm.js.map +1 -1
  433. package/dist/shapes/shape.js +44 -1
  434. package/dist/shapes/shape.js.map +1 -1
  435. package/dist/utility/buoyancy.js +287 -0
  436. package/dist/utility/buoyancy.js.map +1 -0
  437. package/dist/utility/physical.js +10 -1
  438. package/dist/utility/physical.js.map +1 -1
  439. package/dist/utility/pmrem.js +17 -43
  440. package/dist/utility/pmrem.js.map +1 -1
  441. package/dist/utility/sdf/bake.js +435 -0
  442. package/dist/utility/sdf/bake.js.map +1 -0
  443. package/dist/utility/sdf/bvh.js +576 -0
  444. package/dist/utility/sdf/bvh.js.map +1 -0
  445. package/dist/utility/serialization/manager.js +36 -6
  446. package/dist/utility/serialization/manager.js.map +1 -1
  447. package/dist/utility/serialization/scene/animation.js +77 -7
  448. package/dist/utility/serialization/scene/animation.js.map +1 -1
  449. package/dist/utility/serialization/scene/batch.js +11 -4
  450. package/dist/utility/serialization/scene/batch.js.map +1 -1
  451. package/dist/utility/serialization/scene/camera.js +140 -279
  452. package/dist/utility/serialization/scene/camera.js.map +1 -1
  453. package/dist/utility/serialization/scene/cloth.js +25 -0
  454. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  455. package/dist/utility/serialization/scene/common.js +14 -6
  456. package/dist/utility/serialization/scene/common.js.map +1 -1
  457. package/dist/utility/serialization/scene/foliage.js +821 -0
  458. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  459. package/dist/utility/serialization/scene/hair.js +11 -4
  460. package/dist/utility/serialization/scene/hair.js.map +1 -1
  461. package/dist/utility/serialization/scene/light.js +115 -7
  462. package/dist/utility/serialization/scene/light.js.map +1 -1
  463. package/dist/utility/serialization/scene/material.js +388 -220
  464. package/dist/utility/serialization/scene/material.js.map +1 -1
  465. package/dist/utility/serialization/scene/mesh.js +69 -4
  466. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  467. package/dist/utility/serialization/scene/node.js +140 -5
  468. package/dist/utility/serialization/scene/node.js.map +1 -1
  469. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  470. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  471. package/dist/utility/serialization/scene/particle.js +11 -4
  472. package/dist/utility/serialization/scene/particle.js.map +1 -1
  473. package/dist/utility/serialization/scene/physics.js +120 -0
  474. package/dist/utility/serialization/scene/physics.js.map +1 -0
  475. package/dist/utility/serialization/scene/primitive.js +124 -10
  476. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  477. package/dist/utility/serialization/scene/scene.js +1687 -51
  478. package/dist/utility/serialization/scene/scene.js.map +1 -1
  479. package/dist/utility/serialization/scene/sprite.js +11 -4
  480. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  481. package/dist/utility/serialization/scene/terrain.js +163 -33
  482. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  483. package/dist/utility/serialization/scene/text.js +11 -4
  484. package/dist/utility/serialization/scene/text.js.map +1 -1
  485. package/dist/utility/serialization/scene/water.js +2473 -114
  486. package/dist/utility/serialization/scene/water.js.map +1 -1
  487. package/dist/utility/serialization/types.js.map +1 -1
  488. package/dist/utility/shprojector.js +97 -109
  489. package/dist/utility/shprojector.js.map +1 -1
  490. package/dist/utility/textures/foam.js +170 -0
  491. package/dist/utility/textures/foam.js.map +1 -0
  492. package/dist/utility/textures/ggxlut.js +17 -43
  493. package/dist/utility/textures/ggxlut.js.map +1 -1
  494. package/dist/utility/textures/ltcdata.js +4 -4
  495. package/dist/utility/textures/ltcdata.js.map +1 -1
  496. package/dist/utility/textures/ltclut.js +16 -6
  497. package/dist/utility/textures/ltclut.js.map +1 -1
  498. package/dist/utility/unsupported.js +24 -0
  499. package/dist/utility/unsupported.js.map +1 -0
  500. package/dist/values.js +13 -1
  501. package/dist/values.js.map +1 -1
  502. package/package.json +25 -12
  503. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  504. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  505. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  506. package/src/asset/meshoptimizer/LICENSE +21 -0
@@ -1 +1 @@
1
- {"version":3,"file":"water.js","sources":["../../../../src/utility/serialization/scene/water.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\nimport { Vector2 } from '@zephyr3d/base';\r\nimport type { SceneNode } from '../../../scene';\r\nimport { GraphNode } from '../../../scene';\r\nimport { Water } from '../../../scene/water';\r\nimport { defineProps, type SerializableClass } from '../types';\r\nimport type { WaveGenerator } from '../../../render';\r\nimport { FBMWaveGenerator, FFTWaveGenerator } from '../../../render';\r\nimport type { Texture2D } from '@zephyr3d/device';\r\nimport type { ResourceManager } from '../manager';\r\n\r\n/** @internal */\r\nexport function getFBMWaveGeneratorClass(): SerializableClass {\r\n return {\r\n ctor: FBMWaveGenerator,\r\n name: 'FBMWaveGenerator',\r\n getProps() {\r\n return defineProps([\r\n {\r\n name: 'NumOctaves',\r\n description: 'Number of FBM noise octaves used to build the wave pattern',\r\n type: 'int',\r\n options: { minValue: 1, maxValue: 8 },\r\n default: 4,\r\n get(this: FBMWaveGenerator, value) {\r\n value.num[0] = this.numOctaves;\r\n },\r\n set(this: FBMWaveGenerator, value) {\r\n this.numOctaves = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Wind',\r\n description: 'Wind direction and speed that drive the FBM waves',\r\n type: 'vec2',\r\n default: [0.1, 0],\r\n options: {\r\n animatable: true\r\n },\r\n get(this: FBMWaveGenerator, value) {\r\n value.num[0] = this.wind.x;\r\n value.num[1] = this.wind.y;\r\n },\r\n set(this: FBMWaveGenerator, value) {\r\n this.wind = new Vector2(value.num[0], value.num[1]);\r\n }\r\n },\r\n {\r\n name: 'Amplitude',\r\n description: 'Wave height amplitude for the FBM wave generator',\r\n type: 'float',\r\n options: { animatable: true, minValue: 0, maxValue: 5 },\r\n default: 0.3,\r\n get(this: FBMWaveGenerator, value) {\r\n value.num[0] = this.amplitude;\r\n },\r\n set(this: FBMWaveGenerator, value) {\r\n this.amplitude = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Frequency',\r\n description: 'Wave frequency for the FBM wave generator',\r\n type: 'float',\r\n options: { animatable: true, minValue: 0, maxValue: 16 },\r\n default: 3,\r\n get(this: FBMWaveGenerator, value) {\r\n value.num[0] = this.frequency;\r\n },\r\n set(this: FBMWaveGenerator, value) {\r\n this.frequency = value.num[0];\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function getFFTWaveGeneratorClass(): SerializableClass {\r\n return {\r\n ctor: FFTWaveGenerator,\r\n name: 'FFTWaveGenerator',\r\n getProps() {\r\n return defineProps([\r\n {\r\n name: 'Alignment',\r\n description: 'How strongly FFT waves align with the wind direction',\r\n type: 'float',\r\n options: { animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.alignment;\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.alignment = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Wind',\r\n description: 'Wind direction and speed that drive the FFT waves',\r\n type: 'vec2',\r\n options: {\r\n animatable: true\r\n },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.wind.x;\r\n value.num[1] = this.wind.y;\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.wind = new Vector2(value.num[0], value.num[1]);\r\n }\r\n },\r\n {\r\n name: 'FoamWidth',\r\n description: 'Width of foam bands generated on the wave crests',\r\n type: 'float',\r\n default: 1.2,\r\n options: { animatable: true, minValue: 0, maxValue: 10 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.foamWidth;\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.foamWidth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FoamContrast',\r\n description: 'Contrast of the foam pattern on FFT waves',\r\n type: 'float',\r\n default: 7.2,\r\n options: { animatable: true, minValue: 0, maxValue: 10 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.foamContrast;\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.foamContrast = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'WaveLengthCascades',\r\n description: 'Wavelength values for the three FFT wave cascades',\r\n type: 'vec3',\r\n default: [400, 100, 15],\r\n options: { animatable: true, minValue: 0, maxValue: 1000 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.getWaveLength(0);\r\n value.num[1] = this.getWaveLength(1);\r\n value.num[2] = this.getWaveLength(2);\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.setWaveLength(0, value.num[0]);\r\n this.setWaveLength(1, value.num[1]);\r\n this.setWaveLength(2, value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'WaveStrengthCascades',\r\n description: 'Strength values for the three FFT wave cascades',\r\n type: 'vec3',\r\n default: [0.4, 0.4, 0.2],\r\n options: { animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.getWaveStrength(0);\r\n value.num[1] = this.getWaveStrength(1);\r\n value.num[2] = this.getWaveStrength(2);\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.setWaveStrength(0, value.num[0]);\r\n this.setWaveStrength(1, value.num[1]);\r\n this.setWaveStrength(2, value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'WaveCroppinessCascades',\r\n description: 'Croppiness values for the three FFT wave cascades',\r\n type: 'vec3',\r\n default: [-1.5, -1.2, -0.5],\r\n options: { animatable: true, minValue: -4, maxValue: 0 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.getWaveCroppiness(0);\r\n value.num[1] = this.getWaveCroppiness(1);\r\n value.num[2] = this.getWaveCroppiness(2);\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.setWaveCroppiness(0, value.num[0]);\r\n this.setWaveCroppiness(1, value.num[1]);\r\n this.setWaveCroppiness(2, value.num[2]);\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function getWaterClass(manager: ResourceManager): SerializableClass {\r\n return {\r\n ctor: Water,\r\n name: 'Water',\r\n parent: GraphNode,\r\n createFunc(ctx: SceneNode) {\r\n const node = new Water(ctx.scene!);\r\n node.parent = ctx;\r\n return { obj: node };\r\n },\r\n getProps() {\r\n return defineProps([\r\n {\r\n name: 'WaveGenerator',\r\n description: 'Wave generator used to drive the water surface',\r\n type: 'object',\r\n default: null,\r\n options: {\r\n objectTypes: [FFTWaveGenerator, FBMWaveGenerator]\r\n },\r\n isNullable() {\r\n return true;\r\n },\r\n get(this: Water, value) {\r\n value.object[0] = this.waveGenerator ?? null;\r\n },\r\n set(this: Water, value) {\r\n if (!value.object[0]) {\r\n this.waveGenerator = null;\r\n } else {\r\n this.waveGenerator = value.object[0] as WaveGenerator;\r\n }\r\n }\r\n },\r\n {\r\n name: 'GridScale',\r\n description: 'Scale of the water simulation grid',\r\n type: 'float',\r\n default: 1,\r\n options: { minValue: 0, maxValue: 1 },\r\n get(this: Water, value) {\r\n value.num[0] = this.gridScale;\r\n },\r\n set(this: Water, value) {\r\n this.gridScale = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Wireframe',\r\n description: 'If true, renders the water surface as wireframe',\r\n type: 'bool',\r\n default: false,\r\n get(this: Water, value) {\r\n value.bool[0] = this.wireframe;\r\n },\r\n set(this: Water, value) {\r\n this.wireframe = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'AnimationSpeed',\r\n description: 'Playback speed of wave animation',\r\n type: 'float',\r\n default: 1,\r\n options: { animatable: true, minValue: 0, maxValue: 100 },\r\n get(this: Water, value) {\r\n value.num[0] = this.animationSpeed;\r\n },\r\n set(this: Water, value) {\r\n this.animationSpeed = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'DepthScale',\r\n description: 'Depth attenuation scale for the water material',\r\n type: 'float',\r\n default: 10,\r\n options: { animatable: true, minValue: 0, maxValue: 100 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.depthMulti;\r\n },\r\n set(this: Water, value) {\r\n this.material.depthMulti = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'RefractionStrength',\r\n description: 'Strength of underwater refraction',\r\n type: 'float',\r\n default: 0,\r\n options: { animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.refractionStrength;\r\n },\r\n set(this: Water, value) {\r\n this.material.refractionStrength = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Displace',\r\n description: 'Vertex displacement scale for water waves',\r\n type: 'float',\r\n default: 16,\r\n options: { minValue: 1, maxValue: 256 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.displace;\r\n },\r\n set(this: Water, value) {\r\n this.material.displace = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'TAAStrength',\r\n description: 'Temporal anti-aliasing strength for the water surface',\r\n type: 'float',\r\n default: 0.4,\r\n options: { minValue: 0, maxValue: 1 },\r\n get(this: Water, value) {\r\n value.num[0] = this.TAAStrength;\r\n },\r\n set(this: Water, value) {\r\n this.TAAStrength = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ScatterRampTexture',\r\n description: 'Ramp texture used for water scatter lighting',\r\n type: 'object',\r\n default: null,\r\n isNullable() {\r\n return true;\r\n },\r\n get(this: Water, value) {\r\n value.str[0] = manager.getAssetId(this.material.scatterRampTexture) ?? '';\r\n },\r\n async set(value) {\r\n if (!value) {\r\n this.material.scatterRampTexture = null;\r\n } else {\r\n if (value.str[0]) {\r\n const assetId = value.str[0];\r\n let tex: Nullable<Texture2D>;\r\n try {\r\n tex = await manager.fetchTexture<Texture2D>(assetId);\r\n } catch (err) {\r\n console.error(`Load asset failed: ${value.str[0]}: ${err}`);\r\n tex = null;\r\n }\r\n if (tex?.isTexture2D()) {\r\n this.material.scatterRampTexture = tex;\r\n } else {\r\n console.error('Invalid texture type');\r\n }\r\n }\r\n }\r\n }\r\n },\r\n {\r\n name: 'AbsorptionRampTexture',\r\n description: 'Ramp texture used for water absorption',\r\n type: 'object',\r\n default: null,\r\n isNullable() {\r\n return true;\r\n },\r\n get(this: Water, value) {\r\n value.str[0] = manager.getAssetId(this.material.absorptionRampTexture) ?? '';\r\n },\r\n async set(this: Water, value) {\r\n if (!value) {\r\n this.material.absorptionRampTexture = null;\r\n } else {\r\n if (value.str[0]) {\r\n const assetId = value.str[0];\r\n let tex: Nullable<Texture2D>;\r\n try {\r\n tex = await manager.fetchTexture<Texture2D>(assetId);\r\n } catch (err) {\r\n console.error(`Load asset failed: ${value.str[0]}: ${err}`);\r\n tex = null;\r\n }\r\n if (tex?.isTexture2D()) {\r\n this.material.absorptionRampTexture = tex;\r\n } else {\r\n console.error('Invalid texture type');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n"],"names":["getFBMWaveGeneratorClass","ctor","FBMWaveGenerator","name","getProps","defineProps","description","type","options","minValue","maxValue","default","get","value","num","numOctaves","set","animatable","wind","x","y","Vector2","amplitude","frequency","getFFTWaveGeneratorClass","FFTWaveGenerator","alignment","foamWidth","foamContrast","getWaveLength","setWaveLength","getWaveStrength","setWaveStrength","getWaveCroppiness","setWaveCroppiness","getWaterClass","manager","Water","parent","GraphNode","createFunc","ctx","node","scene","obj","objectTypes","isNullable","object","waveGenerator","gridScale","bool","wireframe","animationSpeed","material","depthMulti","refractionStrength","displace","TAAStrength","str","getAssetId","scatterRampTexture","assetId","tex","fetchTexture","err","console","error","isTexture2D","absorptionRampTexture"],"mappings":"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"}
1
+ {"version":3,"file":"water.js","sources":["../../../../src/utility/serialization/scene/water.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\nimport { Vector2, Vector3 } from '@zephyr3d/base';\r\nimport type { SceneNode } from '../../../scene';\r\nimport { GraphNode } from '../../../scene';\r\nimport { Water } from '../../../scene/water';\r\nimport { defineProps, type SerializableClass } from '../types';\r\nimport type { WaveGenerator } from '../../../render';\r\nimport { FBMWaveGenerator, FFTWaveGenerator, GerstnerWaveGenerator } from '../../../render';\r\nimport type { WaterDisturberShape, WaterInteractionFollowMode } from '../../../render/water_interaction';\r\nimport { WaterDisturber, WaterInteraction } from '../../../render/water_interaction';\r\nimport { MAX_GERSTNER_WAVE_COUNT } from '../../../values';\r\nimport type { WaterDebugOutput, WaterRefractionMode } from '../../../material/water';\r\nimport { DEFAULT_SCATTER_ANISOTROPY, WATER_DEBUG_OUTPUTS } from '../../../material/water';\r\nimport type { Texture2D } from '@zephyr3d/device';\r\nimport type { ResourceManager } from '../manager';\r\n\r\n/** @internal */\r\nexport function getFBMWaveGeneratorClass(): SerializableClass {\r\n return {\r\n ctor: FBMWaveGenerator,\r\n name: 'FBMWaveGenerator',\r\n getProps() {\r\n return defineProps([\r\n {\r\n name: 'NumOctaves',\r\n description: 'Number of FBM noise octaves used to build the wave pattern',\r\n type: 'int',\r\n options: { minValue: 1, maxValue: 8 },\r\n default: 4,\r\n get(this: FBMWaveGenerator, value) {\r\n value.num[0] = this.numOctaves;\r\n },\r\n set(this: FBMWaveGenerator, value) {\r\n this.numOctaves = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Wind',\r\n description: 'Wind direction and speed that drive the FBM waves',\r\n type: 'vec2',\r\n default: [0.1, 0],\r\n options: {\r\n animatable: true\r\n },\r\n get(this: FBMWaveGenerator, value) {\r\n value.num[0] = this.wind.x;\r\n value.num[1] = this.wind.y;\r\n },\r\n set(this: FBMWaveGenerator, value) {\r\n this.wind = new Vector2(value.num[0], value.num[1]);\r\n }\r\n },\r\n {\r\n name: 'Amplitude',\r\n description: 'Wave height amplitude for the FBM wave generator',\r\n type: 'float',\r\n options: { animatable: true, minValue: 0, maxValue: 5 },\r\n default: 0.3,\r\n get(this: FBMWaveGenerator, value) {\r\n value.num[0] = this.amplitude;\r\n },\r\n set(this: FBMWaveGenerator, value) {\r\n this.amplitude = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Frequency',\r\n description: 'Wave frequency for the FBM wave generator',\r\n type: 'float',\r\n options: { animatable: true, minValue: 0, maxValue: 16 },\r\n default: 3,\r\n get(this: FBMWaveGenerator, value) {\r\n value.num[0] = this.frequency;\r\n },\r\n set(this: FBMWaveGenerator, value) {\r\n this.frequency = value.num[0];\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function getFFTWaveGeneratorClass(): SerializableClass {\r\n return {\r\n ctor: FFTWaveGenerator,\r\n name: 'FFTWaveGenerator',\r\n getProps() {\r\n return defineProps([\r\n {\r\n name: 'Alignment',\r\n description: 'How strongly FFT waves align with the wind direction',\r\n type: 'float',\r\n options: { animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.alignment;\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.alignment = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Wind',\r\n description: 'Wind direction and speed that drive the FFT waves',\r\n type: 'vec2',\r\n options: {\r\n animatable: true\r\n },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.wind.x;\r\n value.num[1] = this.wind.y;\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.wind = new Vector2(value.num[0], value.num[1]);\r\n }\r\n },\r\n {\r\n name: 'FoamWidth',\r\n description: 'Width of foam bands generated on the wave crests',\r\n type: 'float',\r\n default: 1.2,\r\n options: { animatable: true, minValue: 0, maxValue: 10 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.foamWidth;\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.foamWidth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FoamContrast',\r\n description: 'Contrast of the foam pattern on FFT waves',\r\n type: 'float',\r\n default: 7.2,\r\n options: { animatable: true, minValue: 0, maxValue: 10 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.foamContrast;\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.foamContrast = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'WaveStrengthCascades',\r\n description: 'Strength values for the three FFT wave cascades',\r\n type: 'vec3',\r\n default: [0.4, 0.4, 0.4],\r\n options: { animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.getWaveStrength(0);\r\n value.num[1] = this.getWaveStrength(1);\r\n value.num[2] = this.getWaveStrength(2);\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.setWaveStrength(0, value.num[0]);\r\n this.setWaveStrength(1, value.num[1]);\r\n this.setWaveStrength(2, value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'WaveCroppinessCascades',\r\n description: 'Croppiness values for the three FFT wave cascades',\r\n type: 'vec3',\r\n default: [-1.5, -1.2, -0.5],\r\n options: { animatable: true, minValue: -4, maxValue: 0 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.getWaveCroppiness(0);\r\n value.num[1] = this.getWaveCroppiness(1);\r\n value.num[2] = this.getWaveCroppiness(2);\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.setWaveCroppiness(0, value.num[0]);\r\n this.setWaveCroppiness(1, value.num[1]);\r\n this.setWaveCroppiness(2, value.num[2]);\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function getGerstnerWaveGeneratorClass(): SerializableClass {\r\n return {\r\n ctor: GerstnerWaveGenerator,\r\n name: 'GerstnerWaveGenerator',\r\n getProps() {\r\n return defineProps([\r\n {\r\n name: 'NumWaves',\r\n description: 'Number of independent Gerstner waves summed to form the surface',\r\n type: 'int',\r\n options: { minValue: 1, maxValue: MAX_GERSTNER_WAVE_COUNT },\r\n get(this: GerstnerWaveGenerator, value) {\r\n value.num[0] = this.numWaves;\r\n },\r\n set(this: GerstnerWaveGenerator, value) {\r\n this.numWaves = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Waves',\r\n description: 'Per-wave parameters, one entry per wave in NumWaves order',\r\n type: 'object_array',\r\n options: {\r\n objectTypes: [GerstnerWave]\r\n },\r\n get(this: GerstnerWaveGenerator, value) {\r\n value.object = [];\r\n for (let i = 0; i < this.numWaves; i++) {\r\n const wave = new GerstnerWave();\r\n wave.bind(this, i);\r\n value.object.push(wave);\r\n }\r\n },\r\n set(this: GerstnerWaveGenerator, value) {\r\n const waves = value.object as GerstnerWave[];\r\n // The wave count is ground truth for how many slots the shader\r\n // reads. NumWaves and Waves are applied concurrently during\r\n // deserialization, so this setter must leave the generator in the\r\n // state this array implies regardless of which one runs first.\r\n this.numWaves = waves.length;\r\n for (let i = 0; i < waves.length; i++) {\r\n waves[i].applyTo(this, i);\r\n }\r\n },\r\n add(this: GerstnerWaveGenerator, value, index) {\r\n const wave = value?.object?.[0] as Nullable<GerstnerWave>;\r\n const insertAt = index ?? this.numWaves;\r\n this.insertWave(insertAt);\r\n wave?.applyTo(this, insertAt);\r\n },\r\n delete(this: GerstnerWaveGenerator, index) {\r\n this.deleteWave(index);\r\n }\r\n },\r\n {\r\n name: 'FoamWidth',\r\n description: 'Width of foam bands generated on the wave crests',\r\n type: 'float',\r\n default: 1.2,\r\n options: { animatable: true, minValue: 0, maxValue: 10 },\r\n get(this: GerstnerWaveGenerator, value) {\r\n value.num[0] = this.foamWidth;\r\n },\r\n set(this: GerstnerWaveGenerator, value) {\r\n this.foamWidth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FoamContrast',\r\n description: 'Contrast of the foam pattern on Gerstner waves',\r\n type: 'float',\r\n default: 7.2,\r\n options: { animatable: true, minValue: 0, maxValue: 10 },\r\n get(this: GerstnerWaveGenerator, value) {\r\n value.num[0] = this.foamContrast;\r\n },\r\n set(this: GerstnerWaveGenerator, value) {\r\n this.foamContrast = value.num[0];\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * A single Gerstner wave, as the editor sees one entry of the\r\n * `Waves` object array on a {@link GerstnerWaveGenerator}.\r\n *\r\n * While bound it is a live view: the field setters write straight through to\r\n * the generator's wave buffer, so a property panel edit takes effect at once.\r\n *\r\n * The binding is transient: `_owner` and `_index` are set when the `Waves`\r\n * getter builds the entry, and the editor rebuilds the array from that getter\r\n * after every add/delete, so the cached index never drifts onto another wave.\r\n */\r\nclass GerstnerWave {\r\n private _owner: Nullable<GerstnerWaveGenerator>;\r\n private _index: number;\r\n _direction: number;\r\n _steepness: number;\r\n _amplitude: number;\r\n _length: number;\r\n _omni: boolean;\r\n _originX: number;\r\n _originZ: number;\r\n constructor() {\r\n this._owner = null;\r\n this._index = -1;\r\n this._direction = 0;\r\n this._steepness = 0;\r\n this._amplitude = 0;\r\n this._length = 1;\r\n this._omni = false;\r\n this._originX = 0;\r\n this._originZ = 0;\r\n }\r\n /**\r\n * Binds this entry to a slot of `owner`, so the field setters write through\r\n * to the generator. Called by the `Waves` getter and by `add`; the index is\r\n * the slot the entry currently represents.\r\n * @internal\r\n */\r\n bind(owner: GerstnerWaveGenerator, index: number) {\r\n this._owner = owner;\r\n this._index = index;\r\n this.loadFromOwner(owner, index);\r\n }\r\n /**\r\n * Copies the values in slot `index` of `owner` into this object, refreshing\r\n * the cached fields without writing back.\r\n * @internal\r\n */\r\n loadFromOwner(owner: GerstnerWaveGenerator, index: number) {\r\n this._direction = owner.getWaveDirection(index);\r\n this._steepness = owner.getWaveSteepness(index);\r\n this._amplitude = owner.getWaveAmplitude(index);\r\n this._length = owner.getWaveLength(index);\r\n this._omni = owner.isOmniWave(index);\r\n this._originX = owner.getOriginX(index);\r\n this._originZ = owner.getOriginZ(index);\r\n }\r\n /**\r\n * Writes this object's values into slot `index` of `owner`, unconditionally.\r\n *\r\n * Used by the `Waves` setter for a deserialized array, whose entries have no\r\n * owner, and by `add` for a freshly created one.\r\n * @internal\r\n */\r\n applyTo(owner: GerstnerWaveGenerator, index: number) {\r\n owner.setWaveDirection(index, this._direction);\r\n owner.setWaveSteepness(index, this._steepness);\r\n owner.setWaveAmplitude(index, this._amplitude);\r\n owner.setWaveLength(index, this._length);\r\n owner.setOmniWave(index, this._omni);\r\n owner.setOrigin(index, this._originX, this._originZ);\r\n this._owner = owner;\r\n this._index = index;\r\n }\r\n /** @internal */\r\n private writethrough(\r\n setter: (owner: GerstnerWaveGenerator, index: number, val: number) => void,\r\n val: number\r\n ) {\r\n const owner = this._owner;\r\n if (owner) {\r\n setter(owner, this._index, val);\r\n }\r\n }\r\n /** Gets the wave direction angle in radians. */\r\n get direction() {\r\n return this._direction;\r\n }\r\n set direction(val) {\r\n this._direction = val;\r\n this.writethrough((o, i, v) => o.setWaveDirection(i, v), val);\r\n }\r\n /** Gets the wave steepness. */\r\n get steepness() {\r\n return this._steepness;\r\n }\r\n set steepness(val) {\r\n this._steepness = val;\r\n this.writethrough((o, i, v) => o.setWaveSteepness(i, v), val);\r\n }\r\n /** Gets the wave amplitude. */\r\n get amplitude() {\r\n return this._amplitude;\r\n }\r\n set amplitude(val) {\r\n this._amplitude = val;\r\n this.writethrough((o, i, v) => o.setWaveAmplitude(i, v), val);\r\n }\r\n /** Gets the wave length in meters. */\r\n get length() {\r\n return this._length;\r\n }\r\n set length(val) {\r\n this._length = val;\r\n this.writethrough((o, i, v) => o.setWaveLength(i, v), val);\r\n }\r\n /** Gets whether the wave is omni-directional. */\r\n get omni() {\r\n return this._omni;\r\n }\r\n set omni(val) {\r\n this._omni = val;\r\n if (this._owner) {\r\n this._owner.setOmniWave(this._index, val);\r\n }\r\n }\r\n /** Gets the origin X of an omni-directional wave. */\r\n get originX() {\r\n return this._originX;\r\n }\r\n set originX(val) {\r\n this._originX = val;\r\n if (this._owner) {\r\n this._owner.setOrigin(this._index, val, this._originZ);\r\n }\r\n }\r\n /** Gets the origin Z of an omni-directional wave. */\r\n get originZ() {\r\n return this._originZ;\r\n }\r\n set originZ(val) {\r\n this._originZ = val;\r\n if (this._owner) {\r\n this._owner.setOrigin(this._index, this._originX, val);\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function getGerstnerWaveClass(): SerializableClass {\r\n return {\r\n ctor: GerstnerWave,\r\n name: 'GerstnerWave',\r\n getProps() {\r\n return defineProps([\r\n {\r\n name: 'Direction',\r\n description: 'Wave direction angle in radians',\r\n type: 'float',\r\n options: { animatable: true, minValue: -3.14, maxValue: 3.14 },\r\n get(this: GerstnerWave, value) {\r\n value.num[0] = this.direction;\r\n },\r\n set(this: GerstnerWave, value) {\r\n this.direction = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Steepness',\r\n description: 'Wave steepness. The sum of steepness across waves sets how sharply crests fold',\r\n type: 'float',\r\n options: { animatable: true, minValue: 0, maxValue: 2 },\r\n get(this: GerstnerWave, value) {\r\n value.num[0] = this.steepness;\r\n },\r\n set(this: GerstnerWave, value) {\r\n this.steepness = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Amplitude',\r\n description: 'Wave height amplitude',\r\n type: 'float',\r\n options: { animatable: true, minValue: 0, maxValue: 5 },\r\n get(this: GerstnerWave, value) {\r\n value.num[0] = this.amplitude;\r\n },\r\n set(this: GerstnerWave, value) {\r\n this.amplitude = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Length',\r\n description: 'Wave length in meters',\r\n type: 'float',\r\n options: { animatable: true, minValue: 0, maxValue: 100 },\r\n get(this: GerstnerWave, value) {\r\n value.num[0] = this.length;\r\n },\r\n set(this: GerstnerWave, value) {\r\n this.length = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Omni',\r\n description: 'If true, radiates outward from an origin rather than travelling in one direction',\r\n type: 'bool',\r\n get(this: GerstnerWave, value) {\r\n value.bool[0] = this.omni;\r\n },\r\n set(this: GerstnerWave, value) {\r\n this.omni = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'Origin',\r\n description: 'Origin of an omni-directional wave, ignored by directional waves',\r\n type: 'vec2',\r\n options: { animatable: true, minValue: -1000, maxValue: 1000 },\r\n get(this: GerstnerWave, value) {\r\n value.num[0] = this.originX;\r\n value.num[1] = this.originZ;\r\n },\r\n set(this: GerstnerWave, value) {\r\n this.originX = value.num[0];\r\n this.originZ = value.num[1];\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Inspector layout of the water's properties: group (sub-groups after a\r\n * slash) and label of each, in the order the groups are shown; the inspector\r\n * opens the groups marked open. Presentation only; serialized names are unaffected.\r\n */\r\nconst WATER_PROPERTY_LAYOUT: { group: string; open?: boolean; props: [string, string][] }[] = [\r\n {\r\n group: 'Surface',\r\n open: true,\r\n props: [\r\n ['WaveGenerator', 'Wave Generator'],\r\n ['Interaction', 'Interaction'],\r\n ['AnimationSpeed', 'Animation Speed'],\r\n ['Infinite', 'Infinite']\r\n ]\r\n },\r\n {\r\n group: 'Water Color',\r\n open: true,\r\n props: [\r\n ['Absorption', 'Absorption'],\r\n ['AbsorptionScale', 'Absorption Scale'],\r\n ['Scattering', 'Scattering'],\r\n ['ScatteringScale', 'Scattering Scale']\r\n ]\r\n },\r\n {\r\n group: 'Lighting',\r\n props: [\r\n ['ReflectionStrength', 'Reflection'],\r\n ['SunScatteringIntensity', 'Sun Scattering'],\r\n ['ScatterAnisotropy', 'Sun Scattering Anisotropy'],\r\n ['SubsurfaceIntensity', 'Crest Glow'],\r\n ['SubsurfaceCrestHeight', 'Crest Glow Height'],\r\n ['SubsurfaceTint', 'Crest Glow Tint']\r\n ]\r\n },\r\n {\r\n group: 'Refraction',\r\n props: [\r\n ['RefractionMode', 'Mode'],\r\n ['RefractionScale', 'Strength'],\r\n ['RefractionBlur', 'Blur'],\r\n ['CheapRefractionDepth', 'Offset Depth']\r\n ]\r\n },\r\n {\r\n group: 'Foam',\r\n props: [\r\n ['FoamAmount', 'Wave Foam'],\r\n ['FoamColor', 'Color'],\r\n ['FoamTexture', 'Texture'],\r\n ['FoamTextureSize', 'Texture Size'],\r\n ['FoamFeather', 'Edge Softness']\r\n ]\r\n },\r\n {\r\n group: 'Foam/Look',\r\n props: [\r\n ['FoamFalloff', 'Wave Foam Falloff'],\r\n ['FoamNormalStrength', 'Relief'],\r\n ['FoamBubbleColor', 'Bubble Color'],\r\n ['FoamBubbleCoverage', 'Bubbles'],\r\n ['FoamBubbleDepth', 'Bubble Depth']\r\n ]\r\n },\r\n {\r\n group: 'Foam/Trails',\r\n props: [\r\n ['FoamTrailStrength', 'Strength'],\r\n ['FoamFadeRate', 'Fade Rate'],\r\n ['FoamDrift', 'Wind Drift'],\r\n ['FoamFieldSize', 'Range']\r\n ]\r\n },\r\n {\r\n group: 'Shore',\r\n props: [['EdgeFadeWidth', 'Edge Fade']]\r\n },\r\n {\r\n group: 'Shore/Waves',\r\n props: [\r\n ['ShoreWaveHeight', 'Height'],\r\n ['ShoreWaveLength', 'Wavelength'],\r\n ['ShoreWavePeriod', 'Period'],\r\n ['ShoreWaveZone', 'Zone'],\r\n ['ShoreWaveSharpness', 'Sharpness'],\r\n ['ShoreWaveLean', 'Lean'],\r\n ['ShoreWaveIrregularity', 'Irregularity']\r\n ]\r\n },\r\n {\r\n group: 'Shore/Waves/Foam',\r\n props: [\r\n ['ShoreWaveFoamStrength', 'Breaking Foam'],\r\n ['ShoreWaveFoamCoverage', 'Breaking Coverage'],\r\n ['ShoreWaveShallowFoamStrength', 'Shallow Foam'],\r\n ['ShoreWaveShallowFoamDepth', 'Shallow Depth'],\r\n ['WallFoamStrength', 'Wall Foam'],\r\n ['WallFoamMinSpeed', 'Wall Min Speed'],\r\n ['WallFoamMaxSpeed', 'Wall Max Speed'],\r\n ['WallFoamDrift', 'Wall Foam Spread']\r\n ]\r\n },\r\n\r\n {\r\n group: 'Caustics',\r\n props: [\r\n ['CausticsEnabled', 'Enabled'],\r\n ['CausticsIntensity', 'Intensity'],\r\n ['CausticsDepth', 'Depth'],\r\n ['CausticsRange', 'Range'],\r\n ['CausticsFadeDistance', 'Fade Distance'],\r\n ['CausticsSceneDepth', 'Scene Depth'],\r\n ['CausticsWarp', 'Warp'],\r\n ['CausticsMinDepth', 'Min Depth']\r\n ]\r\n },\r\n {\r\n group: 'Underwater',\r\n props: [\r\n ['UnderwaterEnabled', 'Enabled'],\r\n ['UnderwaterAmbientIntensity', 'Ambient'],\r\n ['UnderwaterGodRays', 'God Rays'],\r\n ['UnderwaterGodRayIntensity', 'God Ray Intensity'],\r\n ['UnderwaterGodRaySteps', 'God Ray Steps'],\r\n ['UnderwaterGodRayShadow', 'God Ray Shadow'],\r\n ['UnderwaterHysteresis', 'Surface Hysteresis']\r\n ]\r\n },\r\n {\r\n group: 'Advanced',\r\n props: [\r\n ['ViewDistance', 'View Distance'],\r\n ['GridScale', 'Grid Scale'],\r\n ['TAAStrength', 'TAA Strength'],\r\n ['Wireframe', 'Wireframe'],\r\n ['DebugOutput', 'Debug Output']\r\n ]\r\n }\r\n];\r\n\r\n/** Gives the water's properties their group and label, ordered as {@link WATER_PROPERTY_LAYOUT}. */\r\nfunction layoutWaterProps<\r\n T extends { name: string; options?: { group?: string; label?: string; defaultOpen?: boolean } }\r\n>(props: T[]): T[] {\r\n const placement = new Map<string, { order: number; group: string; label: string; open: boolean }>();\r\n let order = 0;\r\n for (const entry of WATER_PROPERTY_LAYOUT) {\r\n for (const [name, label] of entry.props) {\r\n placement.set(name, { order: order++, group: entry.group, label, open: !!entry.open });\r\n }\r\n }\r\n for (const prop of props) {\r\n const place = placement.get(prop.name);\r\n if (place) {\r\n prop.options = {\r\n ...prop.options,\r\n group: place.group,\r\n label: prop.options?.label ?? place.label,\r\n ...(place.open ? { defaultOpen: true } : {})\r\n };\r\n }\r\n }\r\n // Stable: anything left out of the layout keeps its place after the rest\r\n return props\r\n .map((prop, index) => ({ prop, index, order: placement.get(prop.name)?.order ?? order + index }))\r\n .sort((a, b) => a.order - b.order)\r\n .map((e) => e.prop);\r\n}\r\n\r\n/** @internal */\r\nexport function getWaterClass(manager: ResourceManager): SerializableClass {\r\n return {\r\n ctor: Water,\r\n name: 'Water',\r\n parent: GraphNode,\r\n createFunc(ctx: SceneNode) {\r\n const node = new Water(ctx.scene!);\r\n node.parent = ctx;\r\n return { obj: node };\r\n },\r\n getProps() {\r\n return layoutWaterProps(\r\n defineProps([\r\n {\r\n name: 'WaveGenerator',\r\n description: 'Wave generator used to drive the water surface',\r\n type: 'object',\r\n default: null,\r\n options: {\r\n objectTypes: [FFTWaveGenerator, FBMWaveGenerator, GerstnerWaveGenerator]\r\n },\r\n isNullable() {\r\n return true;\r\n },\r\n get(this: Water, value) {\r\n value.object[0] = this.waveGenerator ?? null;\r\n },\r\n set(this: Water, value) {\r\n if (!value.object[0]) {\r\n this.waveGenerator = null;\r\n } else {\r\n this.waveGenerator = value.object[0] as WaveGenerator;\r\n }\r\n }\r\n },\r\n {\r\n name: 'Interaction',\r\n description:\r\n 'Dynamic height field layered over the surface, driven by things moving through the water: ripples, wakes and a foam trail. Null for none.',\r\n type: 'object',\r\n default: null,\r\n options: {\r\n objectTypes: [WaterInteraction]\r\n },\r\n isNullable() {\r\n return true;\r\n },\r\n get(this: Water, value) {\r\n value.object[0] = this.interaction ?? null;\r\n },\r\n set(this: Water, value) {\r\n this.interaction = (value.object[0] as Nullable<WaterInteraction>) ?? null;\r\n }\r\n },\r\n {\r\n name: 'GridScale',\r\n description: 'Scale of the water simulation grid',\r\n type: 'float',\r\n default: 1,\r\n options: { minValue: 0, maxValue: 1 },\r\n get(this: Water, value) {\r\n value.num[0] = this.gridScale;\r\n },\r\n set(this: Water, value) {\r\n this.gridScale = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Wireframe',\r\n description: 'If true, renders the water surface as wireframe',\r\n type: 'bool',\r\n default: false,\r\n get(this: Water, value) {\r\n value.bool[0] = this.wireframe;\r\n },\r\n set(this: Water, value) {\r\n this.wireframe = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'AnimationSpeed',\r\n description: 'Playback speed of wave animation',\r\n type: 'float',\r\n default: 1,\r\n options: { animatable: true, minValue: 0, maxValue: 100 },\r\n get(this: Water, value) {\r\n value.num[0] = this.animationSpeed;\r\n },\r\n set(this: Water, value) {\r\n this.animationSpeed = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Infinite',\r\n description:\r\n 'Draw the surface as an unbounded ocean reaching the horizon instead of a body of water ending at the node extent. Reaches the horizon without enlarging the camera far plane, so near-scene depth precision is unaffected. Leave off for ponds, lakes and pools, which have an edge.',\r\n type: 'bool',\r\n default: false,\r\n get(this: Water, value) {\r\n value.bool[0] = this.infinite;\r\n },\r\n set(this: Water, value) {\r\n this.infinite = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'ViewDistance',\r\n description:\r\n 'How far the surface is built out from the camera, in meters, or 0 to derive it from the true horizon distance for the camera height. Keep the sky AerialPerspectiveDistance at least this large, or the far water stops converging towards the sky colour and the hard band comes back.',\r\n type: 'float',\r\n default: 0,\r\n options: { minValue: 0, maxValue: 100000 },\r\n isHidden(this: Water) {\r\n return !this.infinite;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.viewDistance;\r\n },\r\n set(this: Water, value) {\r\n this.viewDistance = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'CausticsEnabled',\r\n description: 'Whether the water projects caustics onto the geometry below it',\r\n type: 'bool',\r\n default: true,\r\n get(this: Water, value) {\r\n value.bool[0] = this.causticsEnabled;\r\n },\r\n set(this: Water, value) {\r\n this.causticsEnabled = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'CausticsIntensity',\r\n description: 'Strength of the caustic contrast',\r\n type: 'float',\r\n default: 1,\r\n options: { animatable: true, minValue: 0, maxValue: 5 },\r\n isHidden(this: Water) {\r\n return !this.causticsEnabled;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.causticsIntensity;\r\n },\r\n set(this: Water, value) {\r\n this.causticsIntensity = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'CausticsDepth',\r\n description: 'Depth in meters below the surface where the caustics are in focus',\r\n type: 'float',\r\n default: 4,\r\n options: { animatable: true, minValue: 0.01, maxValue: 100 },\r\n isHidden(this: Water) {\r\n return !this.causticsEnabled;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.causticsDepth;\r\n },\r\n set(this: Water, value) {\r\n this.causticsDepth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'CausticsRange',\r\n description: 'Furthest distance in meters from the camera the caustic map reaches',\r\n type: 'float',\r\n default: 4,\r\n options: { minValue: 1, maxValue: 1000 },\r\n isHidden(this: Water) {\r\n return !this.causticsEnabled;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.causticsRange;\r\n },\r\n set(this: Water, value) {\r\n this.causticsRange = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'CausticsFadeDistance',\r\n description:\r\n 'Width in meters the caustics fade out over at the edge of the map, or 0 to derive it from the range',\r\n type: 'float',\r\n default: 0,\r\n options: { minValue: 0, maxValue: 100 },\r\n isHidden(this: Water) {\r\n return !this.causticsEnabled;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.causticsFadeDistance;\r\n },\r\n set(this: Water, value) {\r\n this.causticsFadeDistance = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'CausticsSceneDepth',\r\n description:\r\n 'Land caustics on the scene instead of on a plane at CausticsDepth. Reuses the sun shadow cascade, so it costs no extra geometry pass; WebGL2 keeps the plane, which its shadow map format cannot avoid.',\r\n type: 'bool',\r\n default: true,\r\n get(this: Water, value) {\r\n value.bool[0] = this.causticsSceneDepth;\r\n },\r\n set(this: Water, value) {\r\n this.causticsSceneDepth = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'CausticsWarp',\r\n description:\r\n 'How strongly caustic map texels are concentrated near the camera; ignored while the map already fits the water within range',\r\n type: 'float',\r\n default: 1.5,\r\n options: { minValue: 0, maxValue: 8 },\r\n isHidden(this: Water) {\r\n return !this.causticsEnabled;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.causticsWarp;\r\n },\r\n set(this: Water, value) {\r\n this.causticsWarp = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'CausticsMinDepth',\r\n description:\r\n \"Water shallower than this, in metres, shows no caustics, fading in around it: raise it if dark or jagged caustic patches appear where the water thins out on a beach, lower it to bring the light patterns closer to the water's edge.\",\r\n type: 'float',\r\n default: 0.15,\r\n options: { animatable: true, minValue: 0, maxValue: 2 },\r\n isHidden(this: Water) {\r\n return !this.causticsEnabled;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.causticsMinDepth;\r\n },\r\n set(this: Water, value) {\r\n this.causticsMinDepth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'UnderwaterEnabled',\r\n description:\r\n 'Whether a camera inside this water sees it from the inside: the medium over the whole scene, the sky replaced by water, and the surface read from below with its Snell window. Atmospheric fog is suppressed while submerged.',\r\n type: 'bool',\r\n default: true,\r\n get(this: Water, value) {\r\n value.bool[0] = this.underwaterEnabled;\r\n },\r\n set(this: Water, value) {\r\n this.underwaterEnabled = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'UnderwaterAmbientIntensity',\r\n description:\r\n 'Scale on the downwelling sky light filling the water column. This is what the water fades to in the distance, so it sets how bright the underwater haze reads.',\r\n type: 'float',\r\n default: 1,\r\n options: { animatable: true, minValue: 0, maxValue: 5 },\r\n isHidden(this: Water) {\r\n return !this.underwaterEnabled;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.underwaterAmbientIntensity;\r\n },\r\n set(this: Water, value) {\r\n this.underwaterAmbientIntensity = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'UnderwaterGodRays',\r\n description:\r\n 'Whether shafts of sunlight are marched through the water column. Reads the caustic map as the surface transmittance, so the shafts carry the pattern that lands on the sea bed; needs CausticsEnabled.',\r\n type: 'bool',\r\n default: true,\r\n isHidden(this: Water) {\r\n return !this.underwaterEnabled;\r\n },\r\n get(this: Water, value) {\r\n value.bool[0] = this.underwaterGodRays;\r\n },\r\n set(this: Water, value) {\r\n this.underwaterGodRays = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'UnderwaterGodRayIntensity',\r\n description: 'Strength of the light shafts, 1 for the value the medium implies',\r\n type: 'float',\r\n default: 1,\r\n options: { animatable: true, minValue: 0, maxValue: 5 },\r\n isHidden(this: Water) {\r\n return !this.underwaterEnabled || !this.underwaterGodRays;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.underwaterGodRayIntensity;\r\n },\r\n set(this: Water, value) {\r\n this.underwaterGodRayIntensity = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'UnderwaterGodRaySteps',\r\n description:\r\n 'Samples taken along each view ray for the light shafts. Raise it when the shafts read as grain rather than as beams.',\r\n type: 'int',\r\n default: 24,\r\n options: { minValue: 4, maxValue: 96 },\r\n isHidden(this: Water) {\r\n return !this.underwaterEnabled || !this.underwaterGodRays;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.underwaterGodRaySteps;\r\n },\r\n set(this: Water, value) {\r\n this.underwaterGodRaySteps = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'UnderwaterGodRayShadow',\r\n description:\r\n 'Whether geometry standing in the water breaks the light shafts. The shafts come from the caustic map, which knows only what the surface did to the sunlight, so without this a shaft runs straight through a piling. Costs a shadow map lookup per march step.',\r\n type: 'bool',\r\n default: false,\r\n isHidden(this: Water) {\r\n return !this.underwaterEnabled || !this.underwaterGodRays;\r\n },\r\n get(this: Water, value) {\r\n value.bool[0] = this.underwaterGodRayShadow;\r\n },\r\n set(this: Water, value) {\r\n this.underwaterGodRayShadow = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'UnderwaterHysteresis',\r\n description:\r\n 'Half-width in meters of the dead band around the surface the submerged test uses, so a camera at water level does not flip state every frame',\r\n type: 'float',\r\n default: 0.05,\r\n options: { minValue: 0, maxValue: 2 },\r\n isHidden(this: Water) {\r\n return !this.underwaterEnabled;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.underwaterHysteresis;\r\n },\r\n set(this: Water, value) {\r\n this.underwaterHysteresis = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'RefractionMode',\r\n description:\r\n 'How the refracted view sample is located. March walks the refracted ray against the scene depth and samples where it lands, which keeps the sample on the object behind the water; Offset skips the search and displaces the screen UV by the wave normal, which costs no depth fetches but samples the wrong point. Use Offset on hardware that cannot afford the search.',\r\n type: 'string',\r\n default: 'march',\r\n options: {\r\n enum: {\r\n labels: ['March (accurate)', 'Offset (cheap)'],\r\n values: ['march', 'offset']\r\n }\r\n },\r\n get(this: Water, value) {\r\n value.str[0] = this.material.refractionMode;\r\n },\r\n set(this: Water, value) {\r\n this.material.refractionMode = value.str[0] as WaterRefractionMode;\r\n }\r\n },\r\n {\r\n name: 'DebugOutput',\r\n description:\r\n 'Debugging aid: replaces the water colour with one of the shading terms it is built from, so a broken term can be identified by eye',\r\n type: 'string',\r\n default: 'none',\r\n options: {\r\n enum: {\r\n labels: WATER_DEBUG_OUTPUTS.map((e) => e.label),\r\n values: WATER_DEBUG_OUTPUTS.map((e) => e.value)\r\n }\r\n },\r\n get(this: Water, value) {\r\n value.str[0] = this.debugOutput;\r\n },\r\n set(this: Water, value) {\r\n this.debugOutput = value.str[0] as WaterDebugOutput;\r\n }\r\n },\r\n {\r\n name: 'Absorption',\r\n description: 'Absorption coefficient sigma_a of the water medium, per meter, per channel',\r\n type: 'rgb',\r\n default: [1.0, 0.25, 0.15],\r\n options: { animatable: true, minValue: 0, maxValue: 10 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.absorption.x;\r\n value.num[1] = this.material.absorption.y;\r\n value.num[2] = this.material.absorption.z;\r\n },\r\n set(this: Water, value) {\r\n this.material.absorption = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'AbsorptionScale',\r\n description: 'Scale for the absorption coefficient',\r\n type: 'float',\r\n default: 1,\r\n options: { animatable: true, minValue: 0, maxValue: 10 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.absorptionScale;\r\n },\r\n set(this: Water, value) {\r\n this.material.absorptionScale = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Scattering',\r\n description: 'Scattering coefficient sigma_s of the water medium, per meter, per channel',\r\n type: 'rgb',\r\n default: [0.05, 0.12, 0.18],\r\n options: { animatable: true, minValue: 0, maxValue: 10 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.scattering.x;\r\n value.num[1] = this.material.scattering.y;\r\n value.num[2] = this.material.scattering.z;\r\n },\r\n set(this: Water, value) {\r\n this.material.scattering = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'ScatteringScale',\r\n description: 'Scale for the scattering coefficient',\r\n type: 'float',\r\n default: 1,\r\n options: { animatable: true, minValue: 0, maxValue: 10 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.scatteringScale;\r\n },\r\n set(this: Water, value) {\r\n this.material.scatteringScale = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ReflectionStrength',\r\n description:\r\n 'Scale on the Fresnel reflectance, 1 for the physical value. Lower it to trade the reflection away and show more of what is beneath the surface.',\r\n type: 'float',\r\n default: 1,\r\n options: { animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.reflectionStrength;\r\n },\r\n set(this: Water, value) {\r\n this.material.reflectionStrength = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'SubsurfaceIntensity',\r\n description:\r\n 'Strength of the sunlight scattered forward through a wave crest, which is what makes a backlit crest glow. Grazing views of a low sun show it; looking down at the water does not.',\r\n type: 'float',\r\n default: 0.5,\r\n options: { animatable: true, minValue: 0, maxValue: 10 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.subsurfaceIntensity;\r\n },\r\n set(this: Water, value) {\r\n this.material.subsurfaceIntensity = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'SubsurfaceCrestHeight',\r\n description:\r\n 'Height above the still-water level, in meters, over which the lit wall of a crest thins by a factor of e. Crests are thin and glow; troughs see the full path through the medium and are absorbed, so they keep only a tinted trace. Lower it for a calm sea whose crests barely rise, raise it so only the tallest waves light up.',\r\n type: 'float',\r\n default: 1.5,\r\n options: { animatable: true, minValue: 0.05, maxValue: 10 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.subsurfaceCrestHeight;\r\n },\r\n set(this: Water, value) {\r\n this.material.subsurfaceCrestHeight = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'SubsurfaceTint',\r\n description:\r\n 'Colour of the crest glow, before the crest gate tints it with the medium extinction. A warm yellow-green keeps some red on the crests where the troughs have lost it.',\r\n type: 'rgb',\r\n default: [0.86, 0.98, 0.71],\r\n options: { animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.subsurfaceTint.x;\r\n value.num[1] = this.material.subsurfaceTint.y;\r\n value.num[2] = this.material.subsurfaceTint.z;\r\n },\r\n set(this: Water, value) {\r\n this.material.subsurfaceTint = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'SunScatteringIntensity',\r\n description:\r\n 'Strength of the sunlight scattered out of the water column towards the eye, 1 for the value the medium coefficients imply. This is what makes a shadow on the water darken the water itself and a low sun tint it; 0 leaves the body lit by the environment alone.',\r\n type: 'float',\r\n default: 1,\r\n options: { animatable: true, minValue: 0, maxValue: 4 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.sunScatteringIntensity;\r\n },\r\n set(this: Water, value) {\r\n this.material.sunScatteringIntensity = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FoamAmount',\r\n description:\r\n 'Coverage of the foam on breaking wave crests, mapped from the folding the wave generator reports. 0 disables crest foam.',\r\n type: 'float',\r\n default: 1,\r\n options: { animatable: true, minValue: 0, maxValue: 4 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.foamAmount;\r\n },\r\n set(this: Water, value) {\r\n this.material.foamAmount = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FoamFalloff',\r\n description:\r\n 'Falloff applied to crest foam coverage. Above 1 pushes light folding towards no foam at all, so only a genuinely broken crest shows - which is what keeps a windy sea from turning uniformly white.',\r\n type: 'float',\r\n default: 1.5,\r\n options: { animatable: true, minValue: 0.01, maxValue: 8 },\r\n isHidden(this: Water) {\r\n return this.material.foamAmount <= 0;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.foamFalloff;\r\n },\r\n set(this: Water, value) {\r\n this.material.foamFalloff = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FoamColor',\r\n description:\r\n 'Diffuse albedo of the foam, shared by the crest foam and the shoreline foam. Slightly off-white and slightly blue - sea foam is water and air, and a pure white one reads as snow.',\r\n type: 'rgb',\r\n default: [0.92, 0.95, 0.97],\r\n options: { animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.foamColor.x;\r\n value.num[1] = this.material.foamColor.y;\r\n value.num[2] = this.material.foamColor.z;\r\n },\r\n set(this: Water, value) {\r\n this.material.foamColor = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'FoamFeather',\r\n description:\r\n 'How the white foam ends at its edges: low values cut crisp, separate clumps with hard outlines; high values let the foam thin out gradually into the bubbles beneath. Shared by all foam.',\r\n type: 'float',\r\n default: 0.4,\r\n options: { animatable: true, minValue: 0.001, maxValue: 1 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.foamFeather;\r\n },\r\n set(this: Water, value) {\r\n this.material.foamFeather = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FoamNormalStrength',\r\n description:\r\n 'How lumpy the white foam looks: higher values light it as a heaped-up relief with bright rims towards the sun and shaded hollows; 0 lights it as a flat sheet.',\r\n type: 'float',\r\n default: 3.5,\r\n options: { animatable: true, minValue: 0, maxValue: 30 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.foamNormalStrength;\r\n },\r\n set(this: Water, value) {\r\n this.material.foamNormalStrength = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FoamBubbleColor',\r\n description:\r\n 'Tint of the cloud of bubbles under and around the white foam, which gives it a soft, milky halo in the water instead of a cut-out edge.',\r\n type: 'rgb',\r\n default: [0.64, 0.83, 0.82],\r\n options: { animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.foamBubbleColor.x;\r\n value.num[1] = this.material.foamBubbleColor.y;\r\n value.num[2] = this.material.foamBubbleColor.z;\r\n },\r\n set(this: Water, value) {\r\n this.material.foamBubbleColor = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'FoamBubbleCoverage',\r\n description:\r\n 'How strongly the bubble cloud shows and how far it reaches past the white foam, lightening the water around it. 0 removes it, leaving only the white foam.',\r\n type: 'float',\r\n default: 1.68,\r\n options: { animatable: true, minValue: 0, maxValue: 5 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.foamBubbleCoverage;\r\n },\r\n set(this: Water, value) {\r\n this.material.foamBubbleCoverage = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FoamBubbleDepth',\r\n description:\r\n 'How deep under the surface the bubble cloud seems to float, in metres: it slides against the white foam as the view moves, giving the foam depth. 0 keeps it on the surface.',\r\n type: 'float',\r\n default: 0.14,\r\n options: { animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.foamBubbleDepth;\r\n },\r\n set(this: Water, value) {\r\n this.material.foamBubbleDepth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FoamTexture',\r\n description:\r\n 'Pattern the foam is cut from (red channel): as the foam thickens it shows the bright parts of the texture first and fills the dark ones last, so bright clumps appear before dark holes close. Empty for the built-in bubble pattern, which thickens as any foam texture does, so the same settings look alike with or without one. Shared by all foam.',\r\n type: 'object',\r\n default: '',\r\n options: {\r\n mimeTypes: [\r\n 'image/jpeg',\r\n 'image/png',\r\n 'image/tga',\r\n 'image/vnd.radiance',\r\n 'image/x-dds',\r\n 'image/webp'\r\n ]\r\n },\r\n isNullable() {\r\n return true;\r\n },\r\n get(this: Water, value) {\r\n value.str[0] = manager.getAssetId(this.material.foamTexture) ?? '';\r\n },\r\n async set(this: Water, value) {\r\n if (!value) {\r\n this.material.foamTexture = null;\r\n } else if (value.str[0]) {\r\n const assetId = value.str[0];\r\n let tex: Nullable<Texture2D>;\r\n try {\r\n tex = await manager.fetchTexture<Texture2D>(assetId);\r\n } catch (err) {\r\n console.error(`Load asset failed: ${value.str[0]}: ${err}`);\r\n tex = null;\r\n }\r\n if (tex?.isTexture2D()) {\r\n this.material.foamTexture = tex;\r\n } else {\r\n console.error('Invalid texture type');\r\n }\r\n }\r\n }\r\n },\r\n {\r\n name: 'FoamTextureSize',\r\n description:\r\n 'How large the foam pattern is on the water, in metres per repeat of the foam texture: larger values give bigger clumps and holes.',\r\n type: 'float',\r\n default: 4,\r\n options: { animatable: true, minValue: 0.01, maxValue: 50 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.foamTextureSize;\r\n },\r\n set(this: Water, value) {\r\n this.material.foamTextureSize = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FoamTrailStrength',\r\n description:\r\n 'How much foam the breaking crests of the open water leave behind: the foam lingers after the crest has passed, drifts on the wind and fades into streaks and patches. 0 keeps foam only while a crest breaks.',\r\n type: 'float',\r\n default: 1,\r\n options: { animatable: true, minValue: 0, maxValue: 5 },\r\n get(this: Water, value) {\r\n value.num[0] = this.foamTrailStrength;\r\n },\r\n set(this: Water, value) {\r\n this.foamTrailStrength = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FoamFadeRate',\r\n description:\r\n 'How quickly lingering foam dies away, behind breaking crests and shore waves alike: low values leave long-lasting trails and sheets of foam, high values keep only fresh foam at the breaking crests.',\r\n type: 'float',\r\n default: 0.8,\r\n options: { animatable: true, minValue: 0.01, maxValue: 20 },\r\n get(this: Water, value) {\r\n value.num[0] = this.foamFadeRate;\r\n },\r\n set(this: Water, value) {\r\n this.foamFadeRate = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FoamDrift',\r\n description:\r\n 'How fast lingering foam drifts downwind, as a share of the wind speed: about 0.03 in nature. 0 leaves it where the crest broke.',\r\n type: 'float',\r\n default: 0.03,\r\n options: { animatable: true, minValue: 0, maxValue: 0.2 },\r\n get(this: Water, value) {\r\n value.num[0] = this.foamDrift;\r\n },\r\n set(this: Water, value) {\r\n this.foamDrift = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FoamFieldSize',\r\n description:\r\n 'Size in metres of the square of water around where the camera looks in which lingering foam keeps its finest detail. Coarser rings reach eight times as far before foam shows only on the breaking crests; larger values reach further at coarser detail throughout.',\r\n type: 'float',\r\n default: 128,\r\n options: { animatable: false, minValue: 16, maxValue: 1024 },\r\n get(this: Water, value) {\r\n value.num[0] = this.foamFieldSize;\r\n },\r\n set(this: Water, value) {\r\n this.foamFieldSize = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'EdgeFadeWidth',\r\n description:\r\n 'Thickness in metres over which a thin sheet of water fades in from the ground under it, so swash running up the sand shows the sand through it. 0 disables it.',\r\n type: 'float',\r\n default: 0.05,\r\n options: { animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: Water, value) {\r\n value.num[0] = this.edgeFadeWidth;\r\n },\r\n set(this: Water, value) {\r\n this.edgeFadeWidth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ShoreWaveHeight',\r\n description:\r\n 'Crest to trough height in metres of the waves rolling in to the shore and washing up the beach, 0 for none. They come square on to the coast whatever its shape, bunch up as the water shallows, sharpen and lean as they near the shore, and each crest lifts the water up the sand and lets it drain back; boats ride them. Needs the scene signed distance field: WebGPU with the scene SDFEnabled on.',\r\n type: 'float',\r\n default: 0,\r\n options: { animatable: true, minValue: 0, maxValue: 3 },\r\n isHidden(this: Water) {\r\n return false;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.shoreWaveHeight;\r\n },\r\n set(this: Water, value) {\r\n this.shoreWaveHeight = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ShoreWaveLength',\r\n description:\r\n 'Distance in metres between crests at the outer edge of the zone. They bunch up towards the shore as real waves do in shallowing water.',\r\n type: 'float',\r\n default: 8,\r\n options: { animatable: true, minValue: 0.5, maxValue: 100 },\r\n isHidden(this: Water) {\r\n return this.shoreWaveHeight <= 0;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.shoreWaveLength;\r\n },\r\n set(this: Water, value) {\r\n this.shoreWaveLength = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ShoreWavePeriod',\r\n description: 'Seconds between successive shore waves.',\r\n type: 'float',\r\n default: 6,\r\n options: { animatable: true, minValue: 0.5, maxValue: 30 },\r\n isHidden(this: Water) {\r\n return this.shoreWaveHeight <= 0;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.shoreWavePeriod;\r\n },\r\n set(this: Water, value) {\r\n this.shoreWavePeriod = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ShoreWaveZone',\r\n description:\r\n 'How far out from the waterline the shore waves rise, in metres. They grow over the zone and break near its inner end.',\r\n type: 'float',\r\n default: 20,\r\n options: { animatable: true, minValue: 1, maxValue: 200 },\r\n isHidden(this: Water) {\r\n return this.shoreWaveHeight <= 0;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.shoreWaveZone;\r\n },\r\n set(this: Water, value) {\r\n this.shoreWaveZone = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ShoreWaveSharpness',\r\n description:\r\n 'How sharp the crests become at the shore: 0 keeps a rounded sine, towards 1 a pointed crest between long flat troughs.',\r\n type: 'float',\r\n default: 0.7,\r\n options: { animatable: true, minValue: 0, maxValue: 0.95 },\r\n isHidden(this: Water) {\r\n return this.shoreWaveHeight <= 0;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.shoreWaveSharpness;\r\n },\r\n set(this: Water, value) {\r\n this.shoreWaveSharpness = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ShoreWaveLean',\r\n description:\r\n 'How far the crests lean towards the shore there: 0 keeps them upright, 1 gives a steep front face and a long gentle back.',\r\n type: 'float',\r\n default: 0.5,\r\n options: { animatable: true, minValue: 0, maxValue: 1 },\r\n isHidden(this: Water) {\r\n return this.shoreWaveHeight <= 0;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.shoreWaveLean;\r\n },\r\n set(this: Water, value) {\r\n this.shoreWaveLean = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ShoreWaveIrregularity',\r\n description:\r\n 'How irregular the shore waves are: at 0 the crests roll in as parallel lines evenly spaced; higher, each wave comes with a spacing and a bend of its own, so crests close up and spread apart, curve differently along the shore and keep those shapes as they come in.',\r\n type: 'float',\r\n default: 0.6,\r\n options: { animatable: true, minValue: 0, maxValue: 1 },\r\n isHidden(this: Water) {\r\n return this.shoreWaveHeight <= 0;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.shoreWaveIrregularity;\r\n },\r\n set(this: Water, value) {\r\n this.shoreWaveIrregularity = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ShoreWaveFoamStrength',\r\n description:\r\n 'How much foam the breaking shore waves throw up: higher values give thicker, whiter foam on and behind the crests. Balance it against the fade rate.',\r\n type: 'float',\r\n default: 1,\r\n options: { animatable: true, minValue: 0, maxValue: 5 },\r\n isHidden(this: Water) {\r\n return this.shoreWaveHeight <= 0;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.shoreWaveFoamStrength;\r\n },\r\n set(this: Water, value) {\r\n this.shoreWaveFoamStrength = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ShoreWaveFoamCoverage',\r\n description:\r\n 'How much of each shore wave foams: low values foam only at the steepest breaking fronts, high values spread foam over more of the wave.',\r\n type: 'float',\r\n default: 0.55,\r\n options: { animatable: true, minValue: 0, maxValue: 1 },\r\n isHidden(this: Water) {\r\n return this.shoreWaveHeight <= 0;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.shoreWaveFoamCoverage;\r\n },\r\n set(this: Water, value) {\r\n this.shoreWaveFoamCoverage = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ShoreWaveShallowFoamDepth',\r\n description:\r\n 'How deep the water can be and still churn up foam as the waves run in, in metres: larger values widen the band of foam along the beach.',\r\n type: 'float',\r\n default: 0.65,\r\n options: { animatable: true, minValue: 0.01, maxValue: 3 },\r\n isHidden(this: Water) {\r\n return this.shoreWaveHeight <= 0;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.shoreWaveShallowFoamDepth;\r\n },\r\n set(this: Water, value) {\r\n this.shoreWaveShallowFoamDepth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ShoreWaveShallowFoamStrength',\r\n description:\r\n \"How much foam the shallow water at the beach makes as the waves wash over it: higher values give a denser white wash, 0 leaves only the breaking crests' foam.\",\r\n type: 'float',\r\n default: 2,\r\n options: { animatable: true, minValue: 0, maxValue: 5 },\r\n isHidden(this: Water) {\r\n return this.shoreWaveHeight <= 0;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.shoreWaveShallowFoamStrength;\r\n },\r\n set(this: Water, value) {\r\n this.shoreWaveShallowFoamStrength = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'WallFoamStrength',\r\n description:\r\n 'How solid the ring of foam is where the water dashes against rocks, walls and piers standing in it: 1 for a thick white fringe, lower for a thinner, more see-through one, 0 for none. The ring always goes all the way round; how far it spreads is Wall Foam Spread. Needs the shore waves on.',\r\n type: 'float',\r\n default: 1,\r\n options: { animatable: true, minValue: 0, maxValue: 1 },\r\n isHidden(this: Water) {\r\n return this.shoreWaveHeight <= 0;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.wallFoamStrength;\r\n },\r\n set(this: Water, value) {\r\n this.wallFoamStrength = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'WallFoamMinSpeed',\r\n description:\r\n 'How hard the water has to hit a wall before it foams there, in metres per second: raise it to keep calm water clean against rocks, lower it to fringe them with foam in a gentle swell.',\r\n type: 'float',\r\n default: 0.2,\r\n options: { animatable: true, minValue: 0, maxValue: 5 },\r\n isHidden(this: Water) {\r\n return this.shoreWaveHeight <= 0;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.wallFoamMinSpeed;\r\n },\r\n set(this: Water, value) {\r\n this.wallFoamMinSpeed = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'WallFoamMaxSpeed',\r\n description:\r\n 'How hard the water has to hit a wall for the thickest foam, in metres per second: lower it for full white water against rocks in a moderate sea, raise it to keep that for a heavy one.',\r\n type: 'float',\r\n default: 1.5,\r\n options: { animatable: true, minValue: 0.01, maxValue: 10 },\r\n isHidden(this: Water) {\r\n return this.shoreWaveHeight <= 0;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.wallFoamMaxSpeed;\r\n },\r\n set(this: Water, value) {\r\n this.wallFoamMaxSpeed = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'WallFoamDrift',\r\n description:\r\n 'How fast the foam spreads out from rocks, walls and piers, in metres per second: higher for a wider ring of foam around them, lower to keep it close in. It spreads evenly on every side whichever way the wind blows.',\r\n type: 'float',\r\n default: 0.3,\r\n options: { animatable: true, minValue: 0, maxValue: 3 },\r\n isHidden(this: Water) {\r\n return this.shoreWaveHeight <= 0;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.wallFoamDrift;\r\n },\r\n set(this: Water, value) {\r\n this.wallFoamDrift = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'SurfFoamDuration',\r\n description:\r\n 'How long, in seconds, the foam of each breaking wave lasts as the wave comes in and washes up the beach: higher for long white trails behind the crests and foam carried all the way up the sand, lower for brief flashes of white that clear before the wave has run up.',\r\n type: 'float',\r\n default: 1.5,\r\n options: { animatable: true, minValue: 0.05, maxValue: 6 },\r\n isHidden(this: Water) {\r\n return this.shoreWaveHeight <= 0;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.surfFoamDuration;\r\n },\r\n set(this: Water, value) {\r\n this.surfFoamDuration = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FoamSettleDepth',\r\n description:\r\n 'Water depth in metres at and below which foam stops drifting and stays where it is, on the thin wash and the wet sand alike, until it fades: higher to leave foam lying over a wider band of the shallows and the beach, lower to let it drift until the water is almost gone.',\r\n type: 'float',\r\n default: 0.02,\r\n options: { animatable: true, minValue: 0, maxValue: 1 },\r\n isHidden(this: Water) {\r\n return this.shoreWaveHeight <= 0;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.foamSettleDepth;\r\n },\r\n set(this: Water, value) {\r\n this.foamSettleDepth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FoamDriftDepth',\r\n description:\r\n 'Water depth in metres at and beyond which foam drifts freely with the water; between this and FoamSettleDepth it slows down the shallower the water gets. Higher to calm the foam over a wider band of shallow water, lower to keep it moving until close in.',\r\n type: 'float',\r\n default: 0.3,\r\n options: { animatable: true, minValue: 0, maxValue: 3 },\r\n isHidden(this: Water) {\r\n return this.shoreWaveHeight <= 0;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.foamDriftDepth;\r\n },\r\n set(this: Water, value) {\r\n this.foamDriftDepth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'SettledFoamFade',\r\n description:\r\n 'How fast foam that has come to rest in shallow water and on the sand fades, compared with foam on open water: lower to leave the foam lying on the beach longer after each wave drains, 1 to let it vanish as quickly as foam out at sea.',\r\n type: 'float',\r\n default: 0.25,\r\n options: { animatable: true, minValue: 0.01, maxValue: 1 },\r\n isHidden(this: Water) {\r\n return this.shoreWaveHeight <= 0;\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.settledFoamFade;\r\n },\r\n set(this: Water, value) {\r\n this.settledFoamFade = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'CheapRefractionDepth',\r\n description:\r\n 'Depth in meters the cheap refraction mode assumes the water is. Sets how strong the distortion looks when RefractionMode is Offset; ignored by March. A constant rather than the measured distance to the bottom, because an offset scaled by that distance paints a second copy of any object breaking the surface.',\r\n type: 'float',\r\n default: 1,\r\n options: { animatable: true, minValue: 0, maxValue: 20 },\r\n isHidden(this: Water) {\r\n return this.material.refractionMode !== 'offset';\r\n },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.cheapRefractionDepth;\r\n },\r\n set(this: Water, value) {\r\n this.material.cheapRefractionDepth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'RefractionBlur',\r\n description:\r\n 'Scale on how much the medium blurs what is seen through it, 1 for the width the scattering coefficient and the path length imply. Turbid or deep water smudges the bottom; 0 keeps it sharp at any depth.',\r\n type: 'float',\r\n default: 1,\r\n options: { animatable: true, minValue: 0, maxValue: 4 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.refractionBlur;\r\n },\r\n set(this: Water, value) {\r\n this.material.refractionBlur = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ScatterAnisotropy',\r\n description:\r\n 'Mean cosine of a single scattering event. 0 scatters equally in all directions; higher brightens the water when looking towards the sun through it. Sea water measures near 0.9, but a turbid column blends towards isotropic on its own.',\r\n type: 'float',\r\n default: DEFAULT_SCATTER_ANISOTROPY,\r\n options: { animatable: true, minValue: 0, maxValue: 0.95 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.scatterAnisotropy;\r\n },\r\n set(this: Water, value) {\r\n this.material.scatterAnisotropy = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'RefractionScale',\r\n description:\r\n 'Artistic scale on the refracted view offset. 1 is physical: the view ray is bent by Snell’s law and followed to whatever is behind the water, so the incidence angle, the depth and the perspective are already accounted for. 0 disables refraction.',\r\n type: 'float',\r\n default: 1,\r\n options: { animatable: true, minValue: 0, maxValue: 4 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.refractionScale;\r\n },\r\n set(this: Water, value) {\r\n this.material.refractionScale = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'TAAStrength',\r\n description:\r\n 'Share of the temporal anti-aliasing history kept on the water surface. Lower trades smoothing for less smearing of fast waves; much lower lets the sub-pixel camera jitter through, and the waterline visibly shakes. 0 keeps no history at all.',\r\n type: 'float',\r\n default: 0.9,\r\n options: { minValue: 0, maxValue: 1 },\r\n get(this: Water, value) {\r\n value.num[0] = this.TAAStrength;\r\n },\r\n set(this: Water, value) {\r\n this.TAAStrength = value.num[0];\r\n }\r\n }\r\n ])\r\n );\r\n }\r\n };\r\n}\r\n\r\nconst WATER_INTERACTION_FOLLOW_MODES: { label: string; value: WaterInteractionFollowMode }[] = [\r\n { label: 'Camera', value: 'camera' },\r\n { label: 'Node', value: 'node' },\r\n { label: 'Fixed', value: 'fixed' }\r\n];\r\n\r\nconst WATER_DISTURBER_SHAPES: { label: string; value: WaterDisturberShape }[] = [\r\n { label: 'Sphere', value: 'sphere' },\r\n { label: 'Capsule', value: 'capsule' },\r\n { label: 'Box', value: 'box' }\r\n];\r\n\r\n/** @internal */\r\nexport function getWaterInteractionClass(): SerializableClass {\r\n return {\r\n ctor: WaterInteraction,\r\n name: 'WaterInteraction',\r\n getProps() {\r\n return defineProps([\r\n {\r\n name: 'Resolution',\r\n description: 'Texels along each side of the simulation window. Changing it discards the field.',\r\n type: 'int',\r\n default: 512,\r\n options: { minValue: 64, maxValue: 2048 },\r\n get(this: WaterInteraction, value) {\r\n value.num[0] = this.resolution;\r\n },\r\n set(this: WaterInteraction, value) {\r\n this.resolution = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'WindowSize',\r\n description: 'Side of the simulation window in metres. Changing it discards the field.',\r\n type: 'float',\r\n default: 64,\r\n options: { minValue: 4, maxValue: 512 },\r\n get(this: WaterInteraction, value) {\r\n value.num[0] = this.windowSize;\r\n },\r\n set(this: WaterInteraction, value) {\r\n this.windowSize = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'WaveSpeed',\r\n description:\r\n 'Speed disturbances spread at, in metres per second. Clamped to what the window can integrate stably.',\r\n type: 'float',\r\n default: 1.5,\r\n options: { animatable: true, minValue: 0, maxValue: 10 },\r\n get(this: WaterInteraction, value) {\r\n value.num[0] = this.waveSpeed;\r\n },\r\n set(this: WaterInteraction, value) {\r\n this.waveSpeed = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ShallowDepth',\r\n description:\r\n 'Depth in metres below which waves slow down as shallow water waves do: WaveSpeed in deeper water, falling with the square root of the depth below this. A wave running onto a beach then slows, shortens, grows and turns to meet the shore. 0 ignores the depth. The depth comes from the scene signed distance field where SDFEnabled is on, else from the terrain.',\r\n type: 'float',\r\n default: 2,\r\n options: { animatable: true, minValue: 0, maxValue: 50 },\r\n get(this: WaterInteraction, value) {\r\n value.num[0] = this.shallowDepth;\r\n },\r\n set(this: WaterInteraction, value) {\r\n this.shallowDepth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ShoreAbsorbDepth',\r\n description:\r\n 'Depth in metres over which the beach absorbs the waves reaching it, instead of reflecting them back out to sea.',\r\n type: 'float',\r\n default: 0.2,\r\n options: { animatable: true, minValue: 0, maxValue: 5 },\r\n isHidden(this: WaterInteraction) {\r\n return this.shallowDepth <= 0;\r\n },\r\n get(this: WaterInteraction, value) {\r\n value.num[0] = this.shoreAbsorbDepth;\r\n },\r\n set(this: WaterInteraction, value) {\r\n this.shoreAbsorbDepth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Damping',\r\n description: 'Rate the field loses energy at, in 1/s',\r\n type: 'float',\r\n default: 1,\r\n options: { animatable: true, minValue: 0, maxValue: 10 },\r\n get(this: WaterInteraction, value) {\r\n value.num[0] = this.damping;\r\n },\r\n set(this: WaterInteraction, value) {\r\n this.damping = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'MaxAmplitude',\r\n description: 'Height in metres the field is clamped to either side of the rest level',\r\n type: 'float',\r\n default: 0.5,\r\n options: { minValue: 0.01, maxValue: 5 },\r\n get(this: WaterInteraction, value) {\r\n value.num[0] = this.maxAmplitude;\r\n },\r\n set(this: WaterInteraction, value) {\r\n this.maxAmplitude = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'SpongeWidth',\r\n description: 'Width of the absorbing band inside the window edge, as a fraction of the window',\r\n type: 'float',\r\n default: 0.1,\r\n options: { minValue: 0.01, maxValue: 0.45 },\r\n get(this: WaterInteraction, value) {\r\n value.num[0] = this.spongeWidth;\r\n },\r\n set(this: WaterInteraction, value) {\r\n this.spongeWidth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FollowMode',\r\n description: 'How the window is positioned: on the water the camera looks at, on a node, or fixed',\r\n type: 'string',\r\n default: 'camera',\r\n options: {\r\n enum: {\r\n labels: WATER_INTERACTION_FOLLOW_MODES.map((e) => e.label),\r\n values: WATER_INTERACTION_FOLLOW_MODES.map((e) => e.value)\r\n }\r\n },\r\n get(this: WaterInteraction, value) {\r\n value.str[0] = this.followMode;\r\n },\r\n set(this: WaterInteraction, value) {\r\n this.followMode = value.str[0] as WaterInteractionFollowMode;\r\n }\r\n },\r\n {\r\n name: 'FollowNode',\r\n description: 'Node the window follows while FollowMode is Node',\r\n type: 'string',\r\n default: '',\r\n options: { sceneNode: { kind: 'node' } },\r\n get(this: WaterInteraction, value) {\r\n value.str[0] = this.followNode?.persistentId ?? this.followNodeId;\r\n },\r\n set(this: WaterInteraction, value) {\r\n this.followNodeId = value.str[0] ?? '';\r\n this.followNode = null;\r\n }\r\n },\r\n {\r\n name: 'Center',\r\n description: 'World XZ the window is centred on while FollowMode is Fixed',\r\n type: 'vec2',\r\n default: [0, 0],\r\n get(this: WaterInteraction, value) {\r\n value.num[0] = this.center.x;\r\n value.num[1] = this.center.y;\r\n },\r\n set(this: WaterInteraction, value) {\r\n this.center = new Vector2(value.num[0], value.num[1]);\r\n }\r\n },\r\n {\r\n name: 'FoamAmount',\r\n description:\r\n 'Rate foam is made at where the water is churned to the full, in coverage per second; 0 disables the foam',\r\n type: 'float',\r\n default: 3,\r\n options: { animatable: true, minValue: 0, maxValue: 30 },\r\n get(this: WaterInteraction, value) {\r\n value.num[0] = this.foamAmount;\r\n },\r\n set(this: WaterInteraction, value) {\r\n this.foamAmount = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FoamDecay',\r\n description: 'Rate the foam trail fades at, in 1/s',\r\n type: 'float',\r\n default: 0.6,\r\n options: { animatable: true, minValue: 0, maxValue: 5 },\r\n get(this: WaterInteraction, value) {\r\n value.num[0] = this.foamDecay;\r\n },\r\n set(this: WaterInteraction, value) {\r\n this.foamDecay = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FoamMinSpeed',\r\n description: 'Speed of the water in m/s below which it traps no air and makes no foam',\r\n type: 'float',\r\n default: 0.5,\r\n options: { minValue: 0, maxValue: 10 },\r\n get(this: WaterInteraction, value) {\r\n value.num[0] = this.foamMinSpeed;\r\n },\r\n set(this: WaterInteraction, value) {\r\n this.foamMinSpeed = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FoamMaxSpeed',\r\n description: 'Speed of the water in m/s from which it foams to the full',\r\n type: 'float',\r\n default: 2,\r\n options: { minValue: 0, maxValue: 20 },\r\n get(this: WaterInteraction, value) {\r\n value.num[0] = this.foamMaxSpeed;\r\n },\r\n set(this: WaterInteraction, value) {\r\n this.foamMaxSpeed = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'BreakingAcceleration',\r\n description:\r\n \"Downward acceleration of a crest, as a share of gravity, at which it breaks and foams; Longuet-Higgins' limit is 0.5\",\r\n type: 'float',\r\n default: 0.5,\r\n options: { minValue: 0.01, maxValue: 4 },\r\n get(this: WaterInteraction, value) {\r\n value.num[0] = this.breakingAcceleration;\r\n },\r\n set(this: WaterInteraction, value) {\r\n this.breakingAcceleration = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FoamDiffusion',\r\n description: 'Turbulent diffusivity the foam spreads by, in square metres per second',\r\n type: 'float',\r\n default: 0.1,\r\n options: { minValue: 0, maxValue: 2 },\r\n get(this: WaterInteraction, value) {\r\n value.num[0] = this.foamDiffusion;\r\n },\r\n set(this: WaterInteraction, value) {\r\n this.foamDiffusion = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Disturbers',\r\n description: 'Things that disturb the water by moving through it, each following a scene node',\r\n type: 'object_array',\r\n options: {\r\n objectTypes: [WaterDisturber]\r\n },\r\n get(this: WaterInteraction, value) {\r\n value.object = [...this.disturbers];\r\n },\r\n set(this: WaterInteraction, value) {\r\n const next = (value.object as WaterDisturber[]).filter((d) => d instanceof WaterDisturber);\r\n for (const d of [...this.disturbers]) {\r\n if (!next.includes(d)) {\r\n this.removeDisturber(d);\r\n }\r\n }\r\n for (const d of next) {\r\n this.addDisturber(d);\r\n }\r\n },\r\n add(this: WaterInteraction, value) {\r\n const d = value?.object?.[0];\r\n this.addDisturber(d instanceof WaterDisturber ? d : new WaterDisturber());\r\n },\r\n delete(this: WaterInteraction, index) {\r\n const d = this.disturbers[index];\r\n if (d) {\r\n this.removeDisturber(d);\r\n }\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function getWaterDisturberClass(): SerializableClass {\r\n return {\r\n ctor: WaterDisturber,\r\n name: 'WaterDisturber',\r\n getProps() {\r\n return defineProps([\r\n {\r\n name: 'Node',\r\n description: 'Scene node the shape follows',\r\n type: 'string',\r\n default: '',\r\n options: { sceneNode: { kind: 'node' } },\r\n get(this: WaterDisturber, value) {\r\n value.str[0] = this.node?.persistentId ?? this.nodeId;\r\n },\r\n set(this: WaterDisturber, value) {\r\n this.nodeId = value.str[0] ?? '';\r\n this.node = null;\r\n }\r\n },\r\n {\r\n name: 'Shape',\r\n description: 'Footprint shape: a sphere or a capsule of Radius, or a box of Size',\r\n type: 'string',\r\n default: 'sphere',\r\n options: {\r\n enum: {\r\n labels: WATER_DISTURBER_SHAPES.map((e) => e.label),\r\n values: WATER_DISTURBER_SHAPES.map((e) => e.value)\r\n }\r\n },\r\n get(this: WaterDisturber, value) {\r\n value.str[0] = this.shape;\r\n },\r\n set(this: WaterDisturber, value) {\r\n this.shape = value.str[0] as WaterDisturberShape;\r\n }\r\n },\r\n {\r\n name: 'Radius',\r\n description: 'Radius in metres, for a sphere or a capsule',\r\n type: 'float',\r\n default: 0.5,\r\n options: { minValue: 0.01, maxValue: 50 },\r\n get(this: WaterDisturber, value) {\r\n value.num[0] = this.radius;\r\n },\r\n set(this: WaterDisturber, value) {\r\n this.radius = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'HalfLength',\r\n description: 'Half the segment length in metres, for a capsule, along the local Y axis',\r\n type: 'float',\r\n default: 0.5,\r\n options: { minValue: 0, maxValue: 50 },\r\n get(this: WaterDisturber, value) {\r\n value.num[0] = this.halfLength;\r\n },\r\n set(this: WaterDisturber, value) {\r\n this.halfLength = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Size',\r\n description: 'Extents in metres along the local axes, for a box',\r\n type: 'vec3',\r\n default: [1, 1, 1],\r\n get(this: WaterDisturber, value) {\r\n value.num[0] = this.size.x;\r\n value.num[1] = this.size.y;\r\n value.num[2] = this.size.z;\r\n },\r\n set(this: WaterDisturber, value) {\r\n this.size = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'Strength',\r\n description: 'Water column the fully submerged shape displaces, in metres of surface height',\r\n type: 'float',\r\n default: 0.15,\r\n options: { animatable: true, minValue: 0, maxValue: 2 },\r\n get(this: WaterDisturber, value) {\r\n value.num[0] = this.strength;\r\n },\r\n set(this: WaterDisturber, value) {\r\n this.strength = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Blocking',\r\n description: 'Whether waves stop at and reflect off the footprint',\r\n type: 'bool',\r\n default: false,\r\n get(this: WaterDisturber, value) {\r\n value.bool[0] = this.blocking;\r\n },\r\n set(this: WaterDisturber, value) {\r\n this.blocking = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'Floating',\r\n description:\r\n 'Whether the shape floats, as a boat hull does: it displaces its full strength however it bobs and leaves a wake only by moving',\r\n type: 'bool',\r\n default: false,\r\n get(this: WaterDisturber, value) {\r\n value.bool[0] = this.floating;\r\n },\r\n set(this: WaterDisturber, value) {\r\n this.floating = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'Enabled',\r\n description: 'Whether the disturber is taken into account',\r\n type: 'bool',\r\n default: true,\r\n get(this: WaterDisturber, value) {\r\n value.bool[0] = this.enabled;\r\n },\r\n set(this: WaterDisturber, value) {\r\n this.enabled = value.bool[0];\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n"],"names":["getFBMWaveGeneratorClass","ctor","FBMWaveGenerator","name","getProps","defineProps","description","type","options","minValue","maxValue","default","get","value","num","numOctaves","set","animatable","wind","x","y","Vector2","amplitude","frequency","getFFTWaveGeneratorClass","FFTWaveGenerator","alignment","foamWidth","foamContrast","getWaveStrength","setWaveStrength","getWaveCroppiness","setWaveCroppiness","getGerstnerWaveGeneratorClass","GerstnerWaveGenerator","MAX_GERSTNER_WAVE_COUNT","numWaves","objectTypes","GerstnerWave","object","i","wave","bind","push","waves","length","applyTo","add","index","insertAt","insertWave","delete","deleteWave","_owner","_index","_direction","_steepness","_amplitude","_length","_omni","_originX","_originZ","owner","loadFromOwner","getWaveDirection","getWaveSteepness","getWaveAmplitude","getWaveLength","isOmniWave","getOriginX","getOriginZ","setWaveDirection","setWaveSteepness","setWaveAmplitude","setWaveLength","setOmniWave","setOrigin","writethrough","setter","val","direction","o","v","steepness","omni","originX","originZ","getGerstnerWaveClass","bool","WATER_PROPERTY_LAYOUT","group","open","props","layoutWaterProps","placement","Map","order","entry","label","prop","place","defaultOpen","map","sort","a","b","e","getWaterClass","manager","Water","parent","GraphNode","createFunc","ctx","node","scene","obj","isNullable","waveGenerator","WaterInteraction","interaction","gridScale","wireframe","animationSpeed","infinite","isHidden","viewDistance","causticsEnabled","causticsIntensity","causticsDepth","causticsRange","causticsFadeDistance","causticsSceneDepth","causticsWarp","causticsMinDepth","underwaterEnabled","underwaterAmbientIntensity","underwaterGodRays","underwaterGodRayIntensity","underwaterGodRaySteps","underwaterGodRayShadow","underwaterHysteresis","enum","labels","values","str","material","refractionMode","WATER_DEBUG_OUTPUTS","debugOutput","absorption","z","Vector3","absorptionScale","scattering","scatteringScale","reflectionStrength","subsurfaceIntensity","subsurfaceCrestHeight","subsurfaceTint","sunScatteringIntensity","foamAmount","foamFalloff","foamColor","foamFeather","foamNormalStrength","foamBubbleColor","foamBubbleCoverage","foamBubbleDepth","mimeTypes","getAssetId","foamTexture","assetId","tex","fetchTexture","err","console","error","isTexture2D","foamTextureSize","foamTrailStrength","foamFadeRate","foamDrift","foamFieldSize","edgeFadeWidth","shoreWaveHeight","shoreWaveLength","shoreWavePeriod","shoreWaveZone","shoreWaveSharpness","shoreWaveLean","shoreWaveIrregularity","shoreWaveFoamStrength","shoreWaveFoamCoverage","shoreWaveShallowFoamDepth","shoreWaveShallowFoamStrength","wallFoamStrength","wallFoamMinSpeed","wallFoamMaxSpeed","wallFoamDrift","surfFoamDuration","foamSettleDepth","foamDriftDepth","settledFoamFade","cheapRefractionDepth","refractionBlur","DEFAULT_SCATTER_ANISOTROPY","scatterAnisotropy","refractionScale","TAAStrength","WATER_INTERACTION_FOLLOW_MODES","WATER_DISTURBER_SHAPES","getWaterInteractionClass","resolution","windowSize","waveSpeed","shallowDepth","shoreAbsorbDepth","damping","maxAmplitude","spongeWidth","followMode","sceneNode","kind","followNode","persistentId","followNodeId","center","foamDecay","foamMinSpeed","foamMaxSpeed","breakingAcceleration","foamDiffusion","WaterDisturber","disturbers","next","filter","d","includes","removeDisturber","addDisturber","getWaterDisturberClass","nodeId","shape","radius","halfLength","size","strength","blocking","floating","enabled"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../src/utility/serialization/types.ts"],"sourcesContent":["import type { GenericConstructor, Nullable, RequireOptionals } from '@zephyr3d/base';\r\n\r\n/**\r\n * Enumerates supported data types for serializable properties.\r\n *\r\n * This type informs serializers/editors how to interpret and encode values.\r\n * 'bool'|'int'|'float'|'vec2'|'vec3'|'vec4'|'int2'|'int3'|'int4'|'string'|'rgb'|'rgba'|'object'|'object_array'|'embedded'|'command';\r\n *\r\n * @public\r\n */\r\nexport type PropertyType = string;\r\n\r\n/**\r\n * Maps a property type discriminator to the corresponding value lane key.\r\n *\r\n * @public\r\n */\r\nexport type PropertyToType<T extends string> = T extends\r\n | 'float'\r\n | 'vec2'\r\n | 'vec3'\r\n | 'vec4'\r\n | 'int'\r\n | 'int2'\r\n | 'int3'\r\n | 'int4'\r\n | 'rgb'\r\n | 'rgba'\r\n ? 'num'\r\n : T extends 'bool'\r\n ? 'bool'\r\n : T extends 'string'\r\n ? 'str'\r\n : T extends 'object' | 'object_array'\r\n ? 'object'\r\n : 'num' | 'bool' | 'str' | 'object';\r\n/**\r\n * Container for a serializable property's value.\r\n *\r\n * Values are carried in typed arrays (even for single values) to support\r\n * both scalar and array-like properties in a unified shape.\r\n *\r\n * Conventions:\r\n * - `num` carries numeric data for types like `int`, `float`, `vec*`, `int*`, `rgb`, `rgba`\r\n * - `str` carries string data for `string`\r\n * - `bool` carries boolean data for `bool`\r\n * - `object` carries references/instances for `object`, `object_array`, `embedded`\r\n *\r\n * Only the relevant field(s) for the property's {@link PropertyType} will be populated.\r\n *\r\n * @public\r\n */\r\nexport type PropertyValue = {\r\n /** Numeric lane(s) for numeric, vector, or color types. */\r\n num?: number[];\r\n /** String lane(s) for text properties. */\r\n str?: string[];\r\n /** Boolean lane(s) for boolean properties. */\r\n bool?: boolean[];\r\n /** Object lane(s) for object references or embedded objects. */\r\n object?: Nullable<object>[];\r\n};\r\n\r\n/**\r\n * Editor-oriented edit types that augment how a property is presented/edited.\r\n *\r\n * This is orthogonal to {@link PropertyType} and is purely an editor hint.\r\n *\r\n * @public\r\n */\r\nexport type PropEdit = 'aabb' | 'quaternion' | 'proptrack' | 'curve1f';\r\n\r\n/**\r\n * Extra scene-node picker hints for a property.\r\n *\r\n * @public\r\n */\r\nexport type PropertySceneNodeOptions = {\r\n kind?: 'node' | 'mesh';\r\n};\r\n\r\n/**\r\n * Additional options controlling how a property is displayed, constrained, and edited.\r\n *\r\n * These options are consumed primarily by an editor/inspector UI, but may\r\n * also influence validation and tooling behavior.\r\n *\r\n * @public\r\n */\r\nexport type PropertyAccessorOptions = {\r\n /** Human-friendly label for UI. Defaults to `name` if omitted. */\r\n label?: string;\r\n /** Logical grouping/category in UI. */\r\n group?: string;\r\n /** Whether the inspector group should be expanded by default. */\r\n defaultOpen?: boolean;\r\n /** Editor presentation hint (e.g., quaternion gizmo, animation track). */\r\n edit?: PropEdit;\r\n /** Minimum numeric value (for sliders/spinners). */\r\n minValue?: number;\r\n /** Maximum numeric value (for sliders/spinners). */\r\n maxValue?: number;\r\n /** Whether string property is multiline. */\r\n multiline?: boolean;\r\n /** Step/speed for numeric editing UI. */\r\n speed?: number;\r\n /** Whether the property can be animated/keyframed. */\r\n animatable?: boolean;\r\n /** Allowed MIME types for file-picker-like editors. */\r\n mimeTypes?: string[];\r\n /** Accept scene hierarchy node drag-drop in the inspector. */\r\n sceneNode?: PropertySceneNodeOptions;\r\n /** Render object-array entries inline instead of expandable nested groups. */\r\n inlineObjectArray?: boolean;\r\n /** Allowed constructor types when choosing/creating object references. */\r\n objectTypes?: GenericConstructor[];\r\n /**\r\n * Optional enumeration metadata.\r\n * `labels[i]` corresponds to `values[i]`.\r\n */\r\n enum?: { labels: string[]; values: unknown[] };\r\n};\r\n\r\n/**\r\n * Returns the property accessor list unchanged while preserving typing.\r\n *\r\n * @public\r\n */\r\nexport function defineProps(accessors: PropertyAccessor<any, 'DUMMY'>[]): PropertyAccessor[] {\r\n return accessors;\r\n}\r\n\r\n/**\r\n * Descriptor for a serializable property of a class/type.\r\n *\r\n * This binds together:\r\n * - Metadata: `type`, `name`, `default`, `readonly`, `persistent`, `options`\r\n * - Accessors: `get`, `set`, `add`, `delete`, `create` for manipulating the underlying object state\r\n * - Predicates: `isValid`, `isNullable`, `isHidden` to control UI and validation\r\n * - Commands: `command` for action-style properties (`type: 'command'`)\r\n * - Utilities: `getDefaultValue` to compute defaults dynamically\r\n *\r\n * The accessors are invoked with `this` bound to the owning object instance.\r\n *\r\n * @typeParam T - The instance type that owns the property.\r\n * @public\r\n */\r\nexport type PropertyAccessor<T = object, U extends string = ''> = {\r\n /** The storage/serialization data type. */\r\n type: PropertyType;\r\n /** Unique property name (stable identifier for tooling/serialization). */\r\n name: string;\r\n /** Description of this property */\r\n description?: string;\r\n /**\r\n * Optional evaluation phase/order hint (lower runs earlier).\r\n * Useful for staged initialization or batched updates in editors.\r\n */\r\n phase?: number;\r\n /** If true, the property is read-only in UI and programmatic setters may be disallowed. */\r\n readonly?: boolean;\r\n /** Default value used if none is provided. Can be a primitive, array, or object. */\r\n default?: any;\r\n /**\r\n * If true, the property is persisted during save/serialize.\r\n * Non-persistent properties may be computed or session-only.\r\n */\r\n //persistent?: boolean;\r\n /** Editor and validation options for this property. */\r\n options?: PropertyAccessorOptions;\r\n /**\r\n * Reads the current value from `this` into the provided `value` container.\r\n *\r\n * Implementations should fully populate the appropriate lane(s) (e.g., `num`, `str`, etc.)\r\n * according to the property's {@link PropertyType}.\r\n *\r\n * @param value - Output container to be filled by the getter.\r\n */\r\n get: <K extends string>(\r\n this: T,\r\n value: U extends '' ? Required<Pick<PropertyValue, PropertyToType<K>>> : RequireOptionals<PropertyValue>\r\n ) => void;\r\n /**\r\n * Writes an incoming value to `this`.\r\n *\r\n * For array-like properties, `index` can target a specific element.\r\n * Implementations should read from the appropriate lane(s) of `value` according to {@link PropertyType}.\r\n *\r\n * @param value - Input container carrying the new value.\r\n * @param index - Optional element index for array-like properties.\r\n * @returns Optionally `Promise<void>` if asynchronous work is required.\r\n */\r\n set?: <K extends string>(\r\n this: T,\r\n value: U extends '' ? Required<Pick<PropertyValue, PropertyToType<K>>> : RequireOptionals<PropertyValue>,\r\n index?: number\r\n ) => void | Promise<void>;\r\n /**\r\n * Creates a new embedded/contained object for object-like properties.\r\n *\r\n * Typically used for `embedded` or `object_array` to instantiate an element.\r\n *\r\n * @param ctor - Constructor to instantiate.\r\n * @param index - Target index where the new object will be inserted.\r\n * @returns The newly created object instance.\r\n */\r\n create?: (this: T, ctor: GenericConstructor, index: number) => Nullable<object>;\r\n /**\r\n * Deletes an element from an array-like property or clears a value.\r\n *\r\n * @param index - Target element index.\r\n * @returns Optionally `Promise<void>` if asynchronous work is required.\r\n */\r\n delete?: (this: T, index: number) => void | Promise<void>;\r\n /**\r\n * Adds a new element/value to an array-like property.\r\n *\r\n * If `index` is omitted, implementations may append to the end.\r\n *\r\n * @param value - The value to add (read appropriate lane(s) per {@link PropertyType}).\r\n * @param index - Optional insertion index.\r\n * @returns Optionally `Promise<void>` if asynchronous work is required.\r\n */\r\n add?: <K extends string>(\r\n this: T,\r\n value: U extends '' ? Required<Pick<PropertyValue, PropertyToType<K>>> : RequireOptionals<PropertyValue>,\r\n index?: number\r\n ) => void | Promise<void>;\r\n /**\r\n * Validates the current state of `this` with respect to this property.\r\n *\r\n * Returning `false` may block serialization or UI confirmation.\r\n *\r\n * @returns `true` if valid, otherwise `false`.\r\n */\r\n isValid?: (this: T) => boolean;\r\n /**\r\n * Indicates whether this property is serializable. Default is serializable if not present.\r\n *\r\n * @returns `true` if persistent, otherwise `false`.\r\n */\r\n isPersistent?: (this: T) => boolean;\r\n /**\r\n * Indicates whether a specific element or slot may be `null` or `undefined`.\r\n *\r\n * Applies to array-like or optional properties.\r\n *\r\n * @param index - Target element index.\r\n * @returns `true` if nullable, otherwise `false`.\r\n */\r\n isNullable?: (this: T, index: number) => boolean;\r\n /**\r\n * Controls visibility of a specific element or the property in UI.\r\n *\r\n * @param index - Target element index.\r\n * @param obj - Value at index\r\n * @returns `true` if hidden, otherwise `false`.\r\n */\r\n isHidden?: (this: T, index: number, obj?: unknown) => boolean;\r\n /**\r\n * Executes a command-style property.\r\n *\r\n * Only meaningful for `type: 'command'`. Return value may indicate success or toggle state.\r\n *\r\n * @param index - Optional command index for multi-command groups.\r\n * @returns Command result, commonly a boolean for toggle-like actions.\r\n */\r\n command?: (this: T, index: number) => boolean;\r\n /**\r\n * Supplies a default value dynamically at runtime.\r\n *\r\n * If provided, this takes precedence over the static `default` field.\r\n */\r\n getDefaultValue?: (this: T) => any;\r\n};\r\n\r\n/**\r\n * Descriptor for a serializable class/type.\r\n *\r\n * This defines how a class is identified, constructed, and inspected for properties.\r\n * Editors and serializers can use this metadata to instantiate objects, load initial\r\n * parameters, and enumerate property accessors.\r\n *\r\n * @public\r\n */\r\nexport type SerializableClass = {\r\n /** Concrete constructor for the serializable class. */\r\n ctor: GenericConstructor;\r\n /** Optional parent/superclass constructor to represent inheritance in tooling. */\r\n parent?: GenericConstructor;\r\n /** If true, suppresses title rendering in UI for compact displays. */\r\n noTitle?: boolean;\r\n /** Display name used by tooling and editors. */\r\n name: string;\r\n /**\r\n * Custom factory to create an instance and optionally control property loading.\r\n *\r\n * If `loadProps` is `false`, the caller may skip default property loading\r\n * (useful for lazy or staged initialization).\r\n *\r\n * @param ctx - Optional construction context (editor/runtime-specific).\r\n * @param init - Optional initialization payload.\r\n * @returns The created object and a `loadProps` hint.\r\n */\r\n createFunc?: (\r\n ctx?: any,\r\n init?: any\r\n ) => { obj: any; loadProps?: boolean } | Promise<{ obj: any; loadProps?: boolean }>;\r\n /**\r\n * Extracts initialization parameters from an instance suitable for re-creation.\r\n *\r\n * This is the inverse of `createFunc`'s `init` argument, enabling round-trip\r\n * serialization of constructor/initializer data.\r\n *\r\n * @param obj - The instance to introspect.\r\n * @returns An initialization payload (serializable).\r\n */\r\n getInitParams?: (obj: any, flags: { saveProps: boolean }) => any;\r\n /**\r\n * Enumerates property accessors for this class.\r\n *\r\n * The returned list defines the full set of serializable/editor-visible properties.\r\n *\r\n * @returns Array of property accessors.\r\n */\r\n getProps: () => PropertyAccessor<any>[];\r\n};\r\n"],"names":["defineProps","accessors"],"mappings":"AA2HA;;;;IAKO,SAASA,WAAAA,CAAYC,SAA2C,EAAA;IACrE,OAAOA,SAAAA;AACT;;;;"}
1
+ {"version":3,"file":"types.js","sources":["../../../src/utility/serialization/types.ts"],"sourcesContent":["import type { GenericConstructor, Nullable, RequireOptionals } from '@zephyr3d/base';\r\n\r\n/**\r\n * Enumerates supported data types for serializable properties.\r\n *\r\n * This type informs serializers/editors how to interpret and encode values.\r\n * 'bool'|'int'|'float'|'vec2'|'vec3'|'vec4'|'int2'|'int3'|'int4'|'string'|'rgb'|'rgba'|'object'|'object_array'|'embedded'|'command';\r\n *\r\n * @public\r\n */\r\nexport type PropertyType = string;\r\n\r\n/**\r\n * Maps a property type discriminator to the corresponding value lane key.\r\n *\r\n * @public\r\n */\r\nexport type PropertyToType<T extends string> = T extends\r\n | 'float'\r\n | 'vec2'\r\n | 'vec3'\r\n | 'vec4'\r\n | 'int'\r\n | 'int2'\r\n | 'int3'\r\n | 'int4'\r\n | 'rgb'\r\n | 'rgba'\r\n ? 'num'\r\n : T extends 'bool'\r\n ? 'bool'\r\n : T extends 'string'\r\n ? 'str'\r\n : T extends 'object' | 'object_array'\r\n ? 'object'\r\n : 'num' | 'bool' | 'str' | 'object';\r\n/**\r\n * Container for a serializable property's value.\r\n *\r\n * Values are carried in typed arrays (even for single values) to support\r\n * both scalar and array-like properties in a unified shape.\r\n *\r\n * Conventions:\r\n * - `num` carries numeric data for types like `int`, `float`, `vec*`, `int*`, `rgb`, `rgba`\r\n * - `str` carries string data for `string`\r\n * - `bool` carries boolean data for `bool`\r\n * - `object` carries references/instances for `object`, `object_array`, `embedded`\r\n *\r\n * Only the relevant field(s) for the property's {@link PropertyType} will be populated.\r\n *\r\n * @public\r\n */\r\nexport type PropertyValue = {\r\n /** Numeric lane(s) for numeric, vector, or color types. */\r\n num?: number[];\r\n /** String lane(s) for text properties. */\r\n str?: string[];\r\n /** Boolean lane(s) for boolean properties. */\r\n bool?: boolean[];\r\n /** Object lane(s) for object references or embedded objects. */\r\n object?: Nullable<object>[];\r\n};\r\n\r\n/**\r\n * Editor-oriented edit types that augment how a property is presented/edited.\r\n *\r\n * This is orthogonal to {@link PropertyType} and is purely an editor hint.\r\n *\r\n * @public\r\n */\r\nexport type PropEdit = 'aabb' | 'quaternion' | 'proptrack' | 'curve1f';\r\n\r\n/**\r\n * Extra scene-node picker hints for a property.\r\n *\r\n * @public\r\n */\r\nexport type PropertySceneNodeOptions = {\r\n kind?: 'node' | 'mesh';\r\n};\r\n\r\n/**\r\n * Additional options controlling how a property is displayed, constrained, and edited.\r\n *\r\n * These options are consumed primarily by an editor/inspector UI, but may\r\n * also influence validation and tooling behavior.\r\n *\r\n * @public\r\n */\r\nexport type PropertyAccessorOptions = {\r\n /** Human-friendly label for UI. Defaults to `name` if omitted. */\r\n label?: string;\r\n /** Element label for object_array type */\r\n elementLabel?: string;\r\n /** Logical grouping/category in UI. */\r\n group?: string;\r\n /** Whether the inspector group should be expanded by default. */\r\n defaultOpen?: boolean;\r\n /** Editor presentation hint (e.g., quaternion gizmo, animation track). */\r\n edit?: PropEdit;\r\n /** Minimum numeric value (for sliders/spinners). */\r\n minValue?: number;\r\n /** Maximum numeric value (for sliders/spinners). */\r\n maxValue?: number;\r\n /** Whether string property is multiline. */\r\n multiline?: boolean;\r\n /** Step/speed for numeric editing UI. */\r\n speed?: number;\r\n /** Whether the property can be animated/keyframed. */\r\n animatable?: boolean;\r\n /** Allowed MIME types for file-picker-like editors. */\r\n mimeTypes?: string[];\r\n /** Accept scene hierarchy node drag-drop in the inspector. */\r\n sceneNode?: PropertySceneNodeOptions;\r\n /** Render object-array entries inline instead of expandable nested groups. */\r\n inlineObjectArray?: boolean;\r\n /** Allowed constructor types when choosing/creating object references. */\r\n objectTypes?: GenericConstructor[];\r\n /**\r\n * Optional enumeration metadata.\r\n * `labels[i]` corresponds to `values[i]`.\r\n */\r\n enum?: { labels: string[]; values: unknown[] };\r\n};\r\n\r\n/**\r\n * Returns the property accessor list unchanged while preserving typing.\r\n *\r\n * @public\r\n */\r\nexport function defineProps(accessors: PropertyAccessor<any, 'DUMMY'>[]): PropertyAccessor[] {\r\n return accessors;\r\n}\r\n\r\n/**\r\n * Descriptor for a serializable property of a class/type.\r\n *\r\n * This binds together:\r\n * - Metadata: `type`, `name`, `default`, `readonly`, `persistent`, `options`\r\n * - Accessors: `get`, `set`, `add`, `delete`, `create` for manipulating the underlying object state\r\n * - Predicates: `isValid`, `isNullable`, `isHidden` to control UI and validation\r\n * - Commands: `command` for action-style properties (`type: 'command'`)\r\n * - Utilities: `getDefaultValue` to compute defaults dynamically\r\n *\r\n * The accessors are invoked with `this` bound to the owning object instance.\r\n *\r\n * @typeParam T - The instance type that owns the property.\r\n * @public\r\n */\r\nexport type PropertyAccessor<T = object, U extends string = ''> = {\r\n /** The storage/serialization data type. */\r\n type: PropertyType;\r\n /** Unique property name (stable identifier for tooling/serialization). */\r\n name: string;\r\n /** Description of this property */\r\n description?: string;\r\n /**\r\n * Optional evaluation phase/order hint (lower runs earlier).\r\n * Useful for staged initialization or batched updates in editors.\r\n */\r\n phase?: number;\r\n /** If true, the property is read-only in UI and programmatic setters may be disallowed. */\r\n readonly?: boolean;\r\n /** Default value used if none is provided. Can be a primitive, array, or object. */\r\n default?: any;\r\n /**\r\n * If true, the property is persisted during save/serialize.\r\n * Non-persistent properties may be computed or session-only.\r\n */\r\n //persistent?: boolean;\r\n /** Editor and validation options for this property. */\r\n options?: PropertyAccessorOptions;\r\n /**\r\n * Reads the current value from `this` into the provided `value` container.\r\n *\r\n * Implementations should fully populate the appropriate lane(s) (e.g., `num`, `str`, etc.)\r\n * according to the property's {@link PropertyType}.\r\n *\r\n * @param value - Output container to be filled by the getter.\r\n */\r\n get: <K extends string>(\r\n this: T,\r\n value: U extends '' ? Required<Pick<PropertyValue, PropertyToType<K>>> : RequireOptionals<PropertyValue>\r\n ) => void;\r\n /**\r\n * Writes an incoming value to `this`.\r\n *\r\n * For array-like properties, `index` can target a specific element.\r\n * Implementations should read from the appropriate lane(s) of `value` according to {@link PropertyType}.\r\n *\r\n * @param value - Input container carrying the new value.\r\n * @param index - Optional element index for array-like properties.\r\n * @returns Optionally `Promise<void>` if asynchronous work is required.\r\n */\r\n set?: <K extends string>(\r\n this: T,\r\n value: U extends '' ? Required<Pick<PropertyValue, PropertyToType<K>>> : RequireOptionals<PropertyValue>,\r\n index?: number\r\n ) => void | Promise<void>;\r\n /**\r\n * Creates a new embedded/contained object for object-like properties.\r\n *\r\n * Typically used for `embedded` or `object_array` to instantiate an element.\r\n *\r\n * @param ctor - Constructor to instantiate.\r\n * @param index - Target index where the new object will be inserted.\r\n * @returns The newly created object instance.\r\n */\r\n create?: (this: T, ctor: GenericConstructor, index: number) => Nullable<object>;\r\n /**\r\n * Deletes an element from an array-like property or clears a value.\r\n *\r\n * @param index - Target element index.\r\n * @returns Optionally `Promise<void>` if asynchronous work is required.\r\n */\r\n delete?: (this: T, index: number) => void | Promise<void>;\r\n /**\r\n * Adds a new element/value to an array-like property.\r\n *\r\n * If `index` is omitted, implementations may append to the end.\r\n *\r\n * @param value - The value to add (read appropriate lane(s) per {@link PropertyType}).\r\n * @param index - Optional insertion index.\r\n * @returns Optionally `Promise<void>` if asynchronous work is required.\r\n */\r\n add?: <K extends string>(\r\n this: T,\r\n value: U extends '' ? Required<Pick<PropertyValue, PropertyToType<K>>> : RequireOptionals<PropertyValue>,\r\n index?: number\r\n ) => void | Promise<void>;\r\n /**\r\n * Validates the current state of `this` with respect to this property.\r\n *\r\n * Returning `false` may block serialization or UI confirmation.\r\n *\r\n * @returns `true` if valid, otherwise `false`.\r\n */\r\n isValid?: (this: T) => boolean;\r\n /**\r\n * Indicates whether this property is serializable. Default is serializable if not present.\r\n *\r\n * @returns `true` if persistent, otherwise `false`.\r\n */\r\n isPersistent?: (this: T) => boolean;\r\n /**\r\n * Indicates whether a specific element or slot may be `null` or `undefined`.\r\n *\r\n * Applies to array-like or optional properties.\r\n *\r\n * @param index - Target element index.\r\n * @returns `true` if nullable, otherwise `false`.\r\n */\r\n isNullable?: (this: T, index: number) => boolean;\r\n /**\r\n * Controls visibility of a specific element or the property in UI.\r\n *\r\n * @param index - Target element index.\r\n * @param obj - Value at index\r\n * @returns `true` if hidden, otherwise `false`.\r\n */\r\n isHidden?: (this: T, index: number, obj?: unknown) => boolean;\r\n /**\r\n * Executes a command-style property.\r\n *\r\n * Only meaningful for `type: 'command'`. Return value may indicate success or toggle state.\r\n *\r\n * @param index - Optional command index for multi-command groups.\r\n * @returns Command result, commonly a boolean for toggle-like actions.\r\n */\r\n command?: (this: T, index: number) => boolean;\r\n /**\r\n * Supplies a default value dynamically at runtime.\r\n *\r\n * If provided, this takes precedence over the static `default` field.\r\n */\r\n getDefaultValue?: (this: T) => any;\r\n};\r\n\r\n/**\r\n * Descriptor for a serializable class/type.\r\n *\r\n * This defines how a class is identified, constructed, and inspected for properties.\r\n * Editors and serializers can use this metadata to instantiate objects, load initial\r\n * parameters, and enumerate property accessors.\r\n *\r\n * @public\r\n */\r\nexport type SerializableClass = {\r\n /** Concrete constructor for the serializable class. */\r\n ctor: GenericConstructor;\r\n /** Optional parent/superclass constructor to represent inheritance in tooling. */\r\n parent?: GenericConstructor;\r\n /** If true, suppresses title rendering in UI for compact displays. */\r\n noTitle?: boolean;\r\n /** Display name used by tooling and editors. */\r\n name: string;\r\n /**\r\n * Custom factory to create an instance and optionally control property loading.\r\n *\r\n * If `loadProps` is `false`, the caller may skip default property loading\r\n * (useful for lazy or staged initialization).\r\n *\r\n * @param ctx - Optional construction context (editor/runtime-specific).\r\n * @param init - Optional initialization payload.\r\n * @returns The created object and a `loadProps` hint.\r\n */\r\n createFunc?: (\r\n ctx?: any,\r\n init?: any\r\n ) => { obj: any; loadProps?: boolean } | Promise<{ obj: any; loadProps?: boolean }>;\r\n /**\r\n * Extracts initialization parameters from an instance suitable for re-creation.\r\n *\r\n * This is the inverse of `createFunc`'s `init` argument, enabling round-trip\r\n * serialization of constructor/initializer data.\r\n *\r\n * @param obj - The instance to introspect.\r\n * @returns An initialization payload (serializable).\r\n */\r\n getInitParams?: (obj: any, flags: { saveProps: boolean }) => any;\r\n /**\r\n * Enumerates property accessors for this class.\r\n *\r\n * The returned list defines the full set of serializable/editor-visible properties.\r\n *\r\n * @returns Array of property accessors.\r\n */\r\n getProps: () => PropertyAccessor<any>[];\r\n};\r\n"],"names":["defineProps","accessors"],"mappings":"AA6HA;;;;IAKO,SAASA,WAAAA,CAAYC,SAA2C,EAAA;IACrE,OAAOA,SAAAA;AACT;;;;"}