@zephyr3d/scene 0.9.27 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (502) hide show
  1. package/README.md +60 -27
  2. package/dist/animation/animation_bank.js +634 -0
  3. package/dist/animation/animation_bank.js.map +1 -0
  4. package/dist/animation/animation_bank_gpu.js +256 -0
  5. package/dist/animation/animation_bank_gpu.js.map +1 -0
  6. package/dist/animation/animationset.js +54 -0
  7. package/dist/animation/animationset.js.map +1 -1
  8. package/dist/animation/cloth/gpu_cloth_component.js +406 -0
  9. package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
  10. package/dist/animation/cloth/gpu_cloth_system.js +332 -202
  11. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  12. package/dist/animation/gpu_animation_driver.js +289 -0
  13. package/dist/animation/gpu_animation_driver.js.map +1 -0
  14. package/dist/animation/joint_dynamics/collision.js +112 -1
  15. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  16. package/dist/animation/joint_dynamics/controller.js +6 -0
  17. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  18. package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
  19. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  20. package/dist/animation/joint_dynamics/solver.js +50 -12
  21. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  22. package/dist/animation/joint_dynamics/types.js.map +1 -1
  23. package/dist/animation/skeleton.js +279 -55
  24. package/dist/animation/skeleton.js.map +1 -1
  25. package/dist/animation/skin_palette_atlas.js +252 -0
  26. package/dist/animation/skin_palette_atlas.js.map +1 -0
  27. package/dist/animation/spring/multi_chain_spring_system.js +298 -38
  28. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  29. package/dist/animation/spring/spring_chain.js +2 -0
  30. package/dist/animation/spring/spring_chain.js.map +1 -1
  31. package/dist/animation/spring/spring_collider.js +159 -21
  32. package/dist/animation/spring/spring_collider.js.map +1 -1
  33. package/dist/animation/spring/spring_particle.js +1 -0
  34. package/dist/animation/spring/spring_particle.js.map +1 -1
  35. package/dist/animation/spring/spring_solver.js +173 -0
  36. package/dist/animation/spring/spring_solver.js.map +1 -0
  37. package/dist/animation/spring/spring_system.js +249 -24
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring_modifier.js +32 -1
  40. package/dist/animation/spring_modifier.js.map +1 -1
  41. package/dist/app/app.js +26 -0
  42. package/dist/app/app.js.map +1 -1
  43. package/dist/app/engine.js +86 -15
  44. package/dist/app/engine.js.map +1 -1
  45. package/dist/app/gamepad.js +191 -0
  46. package/dist/app/gamepad.js.map +1 -0
  47. package/dist/app/inputactions.js +271 -0
  48. package/dist/app/inputactions.js.map +1 -0
  49. package/dist/app/inputmgr.js +331 -22
  50. package/dist/app/inputmgr.js.map +1 -1
  51. package/dist/app/loading.js +138 -0
  52. package/dist/app/loading.js.map +1 -0
  53. package/dist/app/pipelinecache.js +209 -0
  54. package/dist/app/pipelinecache.js.map +1 -0
  55. package/dist/app/runtimescript.js +25 -0
  56. package/dist/app/runtimescript.js.map +1 -1
  57. package/dist/app/scriptingsystem.js +54 -0
  58. package/dist/app/scriptingsystem.js.map +1 -1
  59. package/dist/app/scriptregistry.js +7 -2
  60. package/dist/app/scriptregistry.js.map +1 -1
  61. package/dist/asset/asset_manifest.js +59 -0
  62. package/dist/asset/asset_manifest.js.map +1 -0
  63. package/dist/asset/asset_preload.js +258 -0
  64. package/dist/asset/asset_preload.js.map +1 -0
  65. package/dist/asset/assetmanager.js +117 -65
  66. package/dist/asset/assetmanager.js.map +1 -1
  67. package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
  68. package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  69. package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  70. package/dist/asset/loaders/ktx2/basis_location.js +17 -0
  71. package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
  72. package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
  73. package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
  74. package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
  75. package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
  76. package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
  77. package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
  78. package/dist/asset/mesh_lod_builder.js +104 -0
  79. package/dist/asset/mesh_lod_builder.js.map +1 -0
  80. package/dist/asset/mesh_settings.js +111 -0
  81. package/dist/asset/mesh_settings.js.map +1 -0
  82. package/dist/asset/meshopt_decoder.js +18 -0
  83. package/dist/asset/meshopt_decoder.js.map +1 -0
  84. package/dist/asset/meshopt_simplifier.js +26 -0
  85. package/dist/asset/meshopt_simplifier.js.map +1 -0
  86. package/dist/asset/model.js +171 -1
  87. package/dist/asset/model.js.map +1 -1
  88. package/dist/asset/texture_settings.js +231 -0
  89. package/dist/asset/texture_settings.js.map +1 -0
  90. package/dist/asset/zmsh_binary.js +131 -0
  91. package/dist/asset/zmsh_binary.js.map +1 -0
  92. package/dist/asset/zsdf_binary.js +111 -0
  93. package/dist/asset/zsdf_binary.js.map +1 -0
  94. package/dist/blitter/bilateralblur.js +1 -2
  95. package/dist/blitter/bilateralblur.js.map +1 -1
  96. package/dist/blitter/gaussianblur.js +1 -6
  97. package/dist/blitter/gaussianblur.js.map +1 -1
  98. package/dist/camera/base.js +31 -10
  99. package/dist/camera/base.js.map +1 -1
  100. package/dist/camera/camera.js +104 -178
  101. package/dist/camera/camera.js.map +1 -1
  102. package/dist/camera/follow.js +342 -0
  103. package/dist/camera/follow.js.map +1 -0
  104. package/dist/camera/fps.js +9 -7
  105. package/dist/camera/fps.js.map +1 -1
  106. package/dist/camera/orbit.js +46 -19
  107. package/dist/camera/orbit.js.map +1 -1
  108. package/dist/index.d.ts +25436 -15990
  109. package/dist/index.js +65 -11
  110. package/dist/index.js.map +1 -1
  111. package/dist/material/blinn.js +3 -0
  112. package/dist/material/blinn.js.map +1 -1
  113. package/dist/material/eye.js +1 -1
  114. package/dist/material/eye.js.map +1 -1
  115. package/dist/material/hair.js +2 -3
  116. package/dist/material/hair.js.map +1 -1
  117. package/dist/material/lambert.js +4 -1
  118. package/dist/material/lambert.js.map +1 -1
  119. package/dist/material/material.js +66 -4
  120. package/dist/material/material.js.map +1 -1
  121. package/dist/material/meshmaterial.js +118 -45
  122. package/dist/material/meshmaterial.js.map +1 -1
  123. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  124. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  126. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  128. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  130. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  132. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  133. package/dist/material/mixins/lit.js +191 -83
  134. package/dist/material/mixins/lit.js.map +1 -1
  135. package/dist/material/mixins/pbr/common.js +31 -206
  136. package/dist/material/mixins/pbr/common.js.map +1 -1
  137. package/dist/material/mtoon.js +1 -1
  138. package/dist/material/mtoon.js.map +1 -1
  139. package/dist/material/pbrmr.js +3 -0
  140. package/dist/material/pbrmr.js.map +1 -1
  141. package/dist/material/pbrsg.js +3 -0
  142. package/dist/material/pbrsg.js.map +1 -1
  143. package/dist/material/sdf_debug.js +78 -0
  144. package/dist/material/sdf_debug.js.map +1 -0
  145. package/dist/material/shader/helper.js +333 -191
  146. package/dist/material/shader/helper.js.map +1 -1
  147. package/dist/material/shader/terrain_blend.js +204 -43
  148. package/dist/material/shader/terrain_blend.js.map +1 -1
  149. package/dist/material/skin.js +331 -297
  150. package/dist/material/skin.js.map +1 -1
  151. package/dist/material/skinprofile.js +1058 -0
  152. package/dist/material/skinprofile.js.map +1 -0
  153. package/dist/material/sss.js +353 -0
  154. package/dist/material/sss.js.map +1 -0
  155. package/dist/material/sss_kernel.js +265 -0
  156. package/dist/material/sss_kernel.js.map +1 -0
  157. package/dist/material/sssprofile.js +879 -0
  158. package/dist/material/sssprofile.js.map +1 -0
  159. package/dist/material/subsurfaceprofile.js +4 -8
  160. package/dist/material/subsurfaceprofile.js.map +1 -1
  161. package/dist/material/terrain-cm.js +464 -188
  162. package/dist/material/terrain-cm.js.map +1 -1
  163. package/dist/material/unlit.js +3 -0
  164. package/dist/material/unlit.js.map +1 -1
  165. package/dist/material/water.js +1261 -1438
  166. package/dist/material/water.js.map +1 -1
  167. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  168. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  169. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  172. package/dist/physics/character.js +226 -0
  173. package/dist/physics/character.js.map +1 -0
  174. package/dist/physics/collider.js +209 -0
  175. package/dist/physics/collider.js.map +1 -0
  176. package/dist/physics/events.js +79 -0
  177. package/dist/physics/events.js.map +1 -0
  178. package/dist/physics/joint.js +272 -0
  179. package/dist/physics/joint.js.map +1 -0
  180. package/dist/physics/node_physics.js +234 -0
  181. package/dist/physics/node_physics.js.map +1 -0
  182. package/dist/physics/part.js +91 -0
  183. package/dist/physics/part.js.map +1 -0
  184. package/dist/physics/rigid_body.js +379 -0
  185. package/dist/physics/rigid_body.js.map +1 -0
  186. package/dist/physics/vehicle.js +335 -0
  187. package/dist/physics/vehicle.js.map +1 -0
  188. package/dist/physics/world.js +25 -0
  189. package/dist/physics/world.js.map +1 -0
  190. package/dist/posteffect/bloom.js +49 -14
  191. package/dist/posteffect/bloom.js.map +1 -1
  192. package/dist/posteffect/motionblur.js +106 -106
  193. package/dist/posteffect/motionblur.js.map +1 -1
  194. package/dist/posteffect/postsss.js +572 -0
  195. package/dist/posteffect/postsss.js.map +1 -0
  196. package/dist/posteffect/sao.js +2 -6
  197. package/dist/posteffect/sao.js.map +1 -1
  198. package/dist/posteffect/skinsss.js +605 -355
  199. package/dist/posteffect/skinsss.js.map +1 -1
  200. package/dist/posteffect/ssgi.js +91 -162
  201. package/dist/posteffect/ssgi.js.map +1 -1
  202. package/dist/posteffect/ssr.js +3 -11
  203. package/dist/posteffect/ssr.js.map +1 -1
  204. package/dist/posteffect/sss.js +4 -13
  205. package/dist/posteffect/sss.js.map +1 -1
  206. package/dist/posteffect/taa.js +1 -0
  207. package/dist/posteffect/taa.js.map +1 -1
  208. package/dist/render/abuffer_oit.js +3 -2
  209. package/dist/render/abuffer_oit.js.map +1 -1
  210. package/dist/render/clipmap.js +179 -64
  211. package/dist/render/clipmap.js.map +1 -1
  212. package/dist/render/cluster_light.js +958 -224
  213. package/dist/render/cluster_light.js.map +1 -1
  214. package/dist/render/cull_visitor.js +25 -5
  215. package/dist/render/cull_visitor.js.map +1 -1
  216. package/dist/render/debug_views.js +37 -0
  217. package/dist/render/debug_views.js.map +1 -0
  218. package/dist/render/depthpass.js +5 -1
  219. package/dist/render/depthpass.js.map +1 -1
  220. package/dist/render/drawable_mixin.js +53 -6
  221. package/dist/render/drawable_mixin.js.map +1 -1
  222. package/dist/render/dualdepthpeeling_oit.js +5 -5
  223. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  224. package/dist/render/envlight.js +196 -113
  225. package/dist/render/envlight.js.map +1 -1
  226. package/dist/render/fbm_wavegenerator.js +5 -10
  227. package/dist/render/fbm_wavegenerator.js.map +1 -1
  228. package/dist/render/fft_wavegenerator.js +247 -157
  229. package/dist/render/fft_wavegenerator.js.map +1 -1
  230. package/dist/render/gerstner_wavegenerator.js +16 -38
  231. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  232. package/dist/render/gi/probe_volume.js +1334 -0
  233. package/dist/render/gi/probe_volume.js.map +1 -0
  234. package/dist/render/gi/scene_gi.js +282 -0
  235. package/dist/render/gi/scene_gi.js.map +1 -0
  236. package/dist/render/gi/voxel_atlas.js +198 -0
  237. package/dist/render/gi/voxel_atlas.js.map +1 -0
  238. package/dist/render/gi/voxel_lighting.js +652 -0
  239. package/dist/render/gi/voxel_lighting.js.map +1 -0
  240. package/dist/render/gi/voxel_scene.js +642 -0
  241. package/dist/render/gi/voxel_scene.js.map +1 -0
  242. package/dist/render/gi/voxelize_pass.js +223 -0
  243. package/dist/render/gi/voxelize_pass.js.map +1 -0
  244. package/dist/render/globalbindgroup_allocator.js +3 -2
  245. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  246. package/dist/render/gpu_picking.js +9 -36
  247. package/dist/render/gpu_picking.js.map +1 -1
  248. package/dist/render/instance_culling.js +499 -0
  249. package/dist/render/instance_culling.js.map +1 -0
  250. package/dist/render/lightpass.js +19 -8
  251. package/dist/render/lightpass.js.map +1 -1
  252. package/dist/render/lod.js +46 -0
  253. package/dist/render/lod.js.map +1 -0
  254. package/dist/render/primitive.js +301 -9
  255. package/dist/render/primitive.js.map +1 -1
  256. package/dist/render/primitive_readback.js +209 -0
  257. package/dist/render/primitive_readback.js.map +1 -0
  258. package/dist/render/render_queue.js +162 -11
  259. package/dist/render/render_queue.js.map +1 -1
  260. package/dist/render/renderer.js +10 -7
  261. package/dist/render/renderer.js.map +1 -1
  262. package/dist/render/rendergraph/blackboard.js +14 -1
  263. package/dist/render/rendergraph/blackboard.js.map +1 -1
  264. package/dist/render/rendergraph/executor.js +136 -0
  265. package/dist/render/rendergraph/executor.js.map +1 -1
  266. package/dist/render/rendergraph/forward_plus_builder.js +272 -55
  267. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  268. package/dist/render/rendergraph/frame_graph_context.js +41 -0
  269. package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
  270. package/dist/render/rendergraph/scene_render_context.js +31 -2
  271. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  272. package/dist/render/rendergraph/types.js.map +1 -1
  273. package/dist/render/renderpass.js +28 -5
  274. package/dist/render/renderpass.js.map +1 -1
  275. package/dist/render/sdf/box_allocator.js +98 -0
  276. package/dist/render/sdf/box_allocator.js.map +1 -0
  277. package/dist/render/sdf/global_sdf.js +865 -0
  278. package/dist/render/sdf/global_sdf.js.map +1 -0
  279. package/dist/render/sdf/scene_sdf.js +562 -0
  280. package/dist/render/sdf/scene_sdf.js.map +1 -0
  281. package/dist/render/sdf/sdf_atlas.js +227 -0
  282. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  283. package/dist/render/sdf/sdf_programs.js +42 -0
  284. package/dist/render/sdf/sdf_programs.js.map +1 -0
  285. package/dist/render/sdf/sdf_view.js +199 -0
  286. package/dist/render/sdf/sdf_view.js.map +1 -0
  287. package/dist/render/sdf/waterline.js +610 -0
  288. package/dist/render/sdf/waterline.js.map +1 -0
  289. package/dist/render/shadow_mask_pass.js +142 -25
  290. package/dist/render/shadow_mask_pass.js.map +1 -1
  291. package/dist/render/shore_wave_generator.js +1193 -0
  292. package/dist/render/shore_wave_generator.js.map +1 -0
  293. package/dist/render/sky.js +516 -86
  294. package/dist/render/sky.js.map +1 -1
  295. package/dist/render/transmission_thickness_pass.js +477 -0
  296. package/dist/render/transmission_thickness_pass.js.map +1 -0
  297. package/dist/render/underwater.js +58 -158
  298. package/dist/render/underwater.js.map +1 -1
  299. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  300. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  301. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  302. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  303. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  304. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  305. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  306. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  307. package/dist/render/volumetric_cloud/resources.js +380 -0
  308. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  309. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  310. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  311. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  312. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  313. package/dist/render/water_caustics.js +134 -319
  314. package/dist/render/water_caustics.js.map +1 -1
  315. package/dist/render/water_foam.js +627 -0
  316. package/dist/render/water_foam.js.map +1 -0
  317. package/dist/render/water_interaction.js +1795 -0
  318. package/dist/render/water_interaction.js.map +1 -0
  319. package/dist/render/weightedblended_oit.js +3 -3
  320. package/dist/render/weightedblended_oit.js.map +1 -1
  321. package/dist/scene/basesprite.js +9 -4
  322. package/dist/scene/basesprite.js.map +1 -1
  323. package/dist/scene/batchgroup.js +108 -12
  324. package/dist/scene/batchgroup.js.map +1 -1
  325. package/dist/scene/environment.js +28 -7
  326. package/dist/scene/environment.js.map +1 -1
  327. package/dist/scene/foliage.js +1020 -0
  328. package/dist/scene/foliage.js.map +1 -0
  329. package/dist/scene/foliage_buckets.js +147 -0
  330. package/dist/scene/foliage_buckets.js.map +1 -0
  331. package/dist/scene/foliage_mask.js +358 -0
  332. package/dist/scene/foliage_mask.js.map +1 -0
  333. package/dist/scene/hair.js +15 -4
  334. package/dist/scene/hair.js.map +1 -1
  335. package/dist/scene/light.js +179 -13
  336. package/dist/scene/light.js.map +1 -1
  337. package/dist/scene/mesh.js +327 -45
  338. package/dist/scene/mesh.js.map +1 -1
  339. package/dist/scene/meshdrawable.js +6 -0
  340. package/dist/scene/meshdrawable.js.map +1 -1
  341. package/dist/scene/msdftext.js +9 -3
  342. package/dist/scene/msdftext.js.map +1 -1
  343. package/dist/scene/msdftextsprite.js +9 -3
  344. package/dist/scene/msdftextsprite.js.map +1 -1
  345. package/dist/scene/particlesys.js +8 -2
  346. package/dist/scene/particlesys.js.map +1 -1
  347. package/dist/scene/physics_settings.js +157 -0
  348. package/dist/scene/physics_settings.js.map +1 -0
  349. package/dist/scene/scene.js +190 -44
  350. package/dist/scene/scene.js.map +1 -1
  351. package/dist/scene/scene_node.js +147 -6
  352. package/dist/scene/scene_node.js.map +1 -1
  353. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  354. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  355. package/dist/scene/terrain-cm/grass.js +881 -42
  356. package/dist/scene/terrain-cm/grass.js.map +1 -1
  357. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  358. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  359. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  360. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  361. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  362. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  363. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  364. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  365. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  366. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  367. package/dist/scene/update_queue.js +54 -0
  368. package/dist/scene/update_queue.js.map +1 -0
  369. package/dist/scene/water.js +633 -268
  370. package/dist/scene/water.js.map +1 -1
  371. package/dist/scene/water_surface_sampler.js +324 -0
  372. package/dist/scene/water_surface_sampler.js.map +1 -0
  373. package/dist/scene/wind.js +317 -0
  374. package/dist/scene/wind.js.map +1 -0
  375. package/dist/shaders/atmosphere.js +388 -166
  376. package/dist/shaders/atmosphere.js.map +1 -1
  377. package/dist/shaders/fog.js +100 -32
  378. package/dist/shaders/fog.js.map +1 -1
  379. package/dist/shaders/gi.js +365 -0
  380. package/dist/shaders/gi.js.map +1 -0
  381. package/dist/shaders/ltc_rect.js +202 -0
  382. package/dist/shaders/ltc_rect.js.map +1 -0
  383. package/dist/shaders/misc.js +1 -10
  384. package/dist/shaders/misc.js.map +1 -1
  385. package/dist/shaders/noise.js +5 -1
  386. package/dist/shaders/noise.js.map +1 -1
  387. package/dist/shaders/probes.js +309 -0
  388. package/dist/shaders/probes.js.map +1 -0
  389. package/dist/shaders/sdf.js +537 -0
  390. package/dist/shaders/sdf.js.map +1 -0
  391. package/dist/shaders/shadow.js +104 -70
  392. package/dist/shaders/shadow.js.map +1 -1
  393. package/dist/shaders/skin_brdf.js +243 -0
  394. package/dist/shaders/skin_brdf.js.map +1 -0
  395. package/dist/shaders/ssgi.js +63 -0
  396. package/dist/shaders/ssgi.js.map +1 -0
  397. package/dist/shaders/ssgi_reprojection.js +118 -0
  398. package/dist/shaders/ssgi_reprojection.js.map +1 -0
  399. package/dist/shaders/ssr.js +6 -159
  400. package/dist/shaders/ssr.js.map +1 -1
  401. package/dist/shaders/temporal.js +38 -27
  402. package/dist/shaders/temporal.js.map +1 -1
  403. package/dist/shaders/water.js +32 -82
  404. package/dist/shaders/water.js.map +1 -1
  405. package/dist/shaders/water_medium.js +7 -21
  406. package/dist/shaders/water_medium.js.map +1 -1
  407. package/dist/shadow/dom.js +110 -19
  408. package/dist/shadow/dom.js.map +1 -1
  409. package/dist/shadow/esm.js +3 -3
  410. package/dist/shadow/esm.js.map +1 -1
  411. package/dist/shadow/pcf_opt.js +15 -48
  412. package/dist/shadow/pcf_opt.js.map +1 -1
  413. package/dist/shadow/pcf_pd.js +15 -53
  414. package/dist/shadow/pcf_pd.js.map +1 -1
  415. package/dist/shadow/pcss.js +34 -9
  416. package/dist/shadow/pcss.js.map +1 -1
  417. package/dist/shadow/shadow_impl.js +3 -8
  418. package/dist/shadow/shadow_impl.js.map +1 -1
  419. package/dist/shadow/shadow_region.js +40 -2
  420. package/dist/shadow/shadow_region.js.map +1 -1
  421. package/dist/shadow/shadowmapper.js +93 -53
  422. package/dist/shadow/shadowmapper.js.map +1 -1
  423. package/dist/shadow/ssm.js +18 -72
  424. package/dist/shadow/ssm.js.map +1 -1
  425. package/dist/shadow/vsm.js +3 -3
  426. package/dist/shadow/vsm.js.map +1 -1
  427. package/dist/shapes/shape.js +44 -1
  428. package/dist/shapes/shape.js.map +1 -1
  429. package/dist/utility/buoyancy.js +287 -0
  430. package/dist/utility/buoyancy.js.map +1 -0
  431. package/dist/utility/physical.js +10 -1
  432. package/dist/utility/physical.js.map +1 -1
  433. package/dist/utility/pmrem.js +17 -43
  434. package/dist/utility/pmrem.js.map +1 -1
  435. package/dist/utility/sdf/bake.js +435 -0
  436. package/dist/utility/sdf/bake.js.map +1 -0
  437. package/dist/utility/sdf/bvh.js +576 -0
  438. package/dist/utility/sdf/bvh.js.map +1 -0
  439. package/dist/utility/serialization/manager.js +34 -6
  440. package/dist/utility/serialization/manager.js.map +1 -1
  441. package/dist/utility/serialization/scene/animation.js +46 -5
  442. package/dist/utility/serialization/scene/animation.js.map +1 -1
  443. package/dist/utility/serialization/scene/batch.js +11 -4
  444. package/dist/utility/serialization/scene/batch.js.map +1 -1
  445. package/dist/utility/serialization/scene/camera.js +87 -254
  446. package/dist/utility/serialization/scene/camera.js.map +1 -1
  447. package/dist/utility/serialization/scene/cloth.js +25 -0
  448. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  449. package/dist/utility/serialization/scene/common.js +14 -6
  450. package/dist/utility/serialization/scene/common.js.map +1 -1
  451. package/dist/utility/serialization/scene/foliage.js +821 -0
  452. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  453. package/dist/utility/serialization/scene/hair.js +11 -4
  454. package/dist/utility/serialization/scene/hair.js.map +1 -1
  455. package/dist/utility/serialization/scene/light.js +115 -7
  456. package/dist/utility/serialization/scene/light.js.map +1 -1
  457. package/dist/utility/serialization/scene/material.js +388 -220
  458. package/dist/utility/serialization/scene/material.js.map +1 -1
  459. package/dist/utility/serialization/scene/mesh.js +69 -4
  460. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  461. package/dist/utility/serialization/scene/node.js +140 -5
  462. package/dist/utility/serialization/scene/node.js.map +1 -1
  463. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  464. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  465. package/dist/utility/serialization/scene/particle.js +11 -4
  466. package/dist/utility/serialization/scene/particle.js.map +1 -1
  467. package/dist/utility/serialization/scene/physics.js +120 -0
  468. package/dist/utility/serialization/scene/physics.js.map +1 -0
  469. package/dist/utility/serialization/scene/primitive.js +124 -10
  470. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  471. package/dist/utility/serialization/scene/scene.js +1687 -51
  472. package/dist/utility/serialization/scene/scene.js.map +1 -1
  473. package/dist/utility/serialization/scene/sprite.js +11 -4
  474. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  475. package/dist/utility/serialization/scene/terrain.js +163 -33
  476. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  477. package/dist/utility/serialization/scene/text.js +11 -4
  478. package/dist/utility/serialization/scene/text.js.map +1 -1
  479. package/dist/utility/serialization/scene/water.js +1543 -264
  480. package/dist/utility/serialization/scene/water.js.map +1 -1
  481. package/dist/utility/serialization/types.js.map +1 -1
  482. package/dist/utility/shprojector.js +10 -22
  483. package/dist/utility/shprojector.js.map +1 -1
  484. package/dist/utility/textures/foam.js +170 -0
  485. package/dist/utility/textures/foam.js.map +1 -0
  486. package/dist/utility/textures/ggxlut.js +17 -43
  487. package/dist/utility/textures/ggxlut.js.map +1 -1
  488. package/dist/utility/textures/ltcdata.js +4 -4
  489. package/dist/utility/textures/ltcdata.js.map +1 -1
  490. package/dist/utility/textures/ltclut.js +16 -6
  491. package/dist/utility/textures/ltclut.js.map +1 -1
  492. package/dist/utility/unsupported.js +24 -0
  493. package/dist/utility/unsupported.js.map +1 -0
  494. package/dist/values.js +13 -1
  495. package/dist/values.js.map +1 -1
  496. package/package.json +25 -12
  497. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  498. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  499. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  500. package/src/asset/meshoptimizer/LICENSE +21 -0
  501. package/dist/animation/joint_dynamics/convex_collider.js +0 -320
  502. package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foliage.js","sources":["../../../../src/utility/serialization/scene/foliage.ts"],"sourcesContent":["import { mimeTypeOf } from '@zephyr3d/base';\r\nimport {\r\n FoliageLayer,\r\n FoliageSystem,\r\n FOLIAGE_INSTANCE_STRIDE,\r\n GraphNode,\r\n type FoliageCollision,\r\n type FoliageCollisionShape,\r\n type FoliageSurface,\r\n type SceneNode\r\n} from '../../../scene';\r\nimport { defineProps, type SerializableClass } from '../types';\r\nimport type { ResourceManager } from '../manager';\r\n\r\n// 'FOLI' in little endian\r\nconst FOLIAGE_DATA_MAGIC = 0x494c4f46;\r\nconst FOLIAGE_DATA_VERSION = 2;\r\n\r\n/**\r\n * Instances and density masks of every layer: a header of magic, version and layer count,\r\n * then per layer the generated instances, the manual instances (each a count and the floats)\r\n * and the density mask tiles.\r\n */\r\nfunction getFoliageContent(foliage: FoliageSystem): ArrayBuffer {\r\n const layers: { generated: Float32Array; manual: Float32Array; layer: FoliageLayer }[] = [];\r\n let size = 3 * 4;\r\n for (let i = 0; i < foliage.numLayers; i++) {\r\n const layer = foliage.getLayer(i)!;\r\n const entry = {\r\n layer,\r\n generated: layer.getInstances('generated'),\r\n manual: layer.getInstances('manual')\r\n };\r\n layers.push(entry);\r\n size += 8 + (entry.generated.length + entry.manual.length) * 4 + layer.mask.byteSize;\r\n }\r\n const buffer = new ArrayBuffer(size);\r\n const view = new DataView(buffer);\r\n view.setUint32(0, FOLIAGE_DATA_MAGIC, true);\r\n view.setUint32(4, FOLIAGE_DATA_VERSION, true);\r\n view.setUint32(8, layers.length, true);\r\n let offset = 12;\r\n for (const { layer, generated, manual } of layers) {\r\n for (const data of [generated, manual]) {\r\n view.setUint32(offset, data.length / FOLIAGE_INSTANCE_STRIDE, true);\r\n offset += 4;\r\n new Float32Array(buffer, offset, data.length).set(data);\r\n offset += data.length * 4;\r\n }\r\n offset = layer.mask.write(view, offset);\r\n }\r\n return buffer;\r\n}\r\n\r\n/** Reads what {@link getFoliageContent} wrote into the layers of a foliage system */\r\nfunction setFoliageContent(foliage: FoliageSystem, data: ArrayBuffer) {\r\n const view = new DataView(data);\r\n if (data.byteLength < 12 || view.getUint32(0, true) !== FOLIAGE_DATA_MAGIC) {\r\n console.error('Invalid foliage instance data');\r\n return;\r\n }\r\n if (view.getUint32(4, true) !== FOLIAGE_DATA_VERSION) {\r\n console.error(`Unsupported foliage instance data version ${view.getUint32(4, true)}`);\r\n return;\r\n }\r\n const numLayers = view.getUint32(8, true);\r\n if (numLayers !== foliage.numLayers) {\r\n console.error('Number of foliage layers mismatch');\r\n return;\r\n }\r\n let offset = 12;\r\n for (let i = 0; i < numLayers; i++) {\r\n for (const group of ['generated', 'manual'] as const) {\r\n const count = view.getUint32(offset, true);\r\n offset += 4;\r\n foliage.setInstances(i, new Float32Array(data, offset, count * FOLIAGE_INSTANCE_STRIDE), group);\r\n offset += count * FOLIAGE_INSTANCE_STRIDE * 4;\r\n }\r\n offset = foliage.getLayer(i)!.mask.read(view, offset);\r\n }\r\n}\r\n\r\n/** Changes one field of the collision of a layer; nothing when the layer has none */\r\nfunction updateCollision(layer: FoliageLayer, change: (c: FoliageCollision) => void) {\r\n const c = layer.collision;\r\n if (c) {\r\n change(c);\r\n layer.collision = c;\r\n }\r\n}\r\n\r\nconst hasCollision = (layer: FoliageLayer) => !!layer.collision;\r\nconst collisionShape = (layer: FoliageLayer) => layer.collision?.shape ?? null;\r\n/** Sizes and offset come from the asset's own colliders with shape asset */\r\nconst hasFittedShape = (layer: FoliageLayer) => hasCollision(layer) && collisionShape(layer) !== 'asset';\r\n\r\n/** @internal */\r\nexport function getFoliageLayerClass(): SerializableClass {\r\n return {\r\n ctor: FoliageLayer,\r\n name: 'FoliageLayer',\r\n getProps() {\r\n return defineProps([\r\n {\r\n name: 'Asset',\r\n description: 'Prefab or model scattered by this layer; every mesh in it is drawn at each instance',\r\n type: 'string',\r\n default: '',\r\n options: {\r\n mimeTypes: [\r\n mimeTypeOf('.zprefab'),\r\n mimeTypeOf('.glb'),\r\n mimeTypeOf('.gltf'),\r\n mimeTypeOf('.fbx'),\r\n mimeTypeOf('.obj')\r\n ]\r\n },\r\n get(this: FoliageLayer, value) {\r\n value.str[0] = this.asset;\r\n },\r\n set(this: FoliageLayer, value) {\r\n this.asset = value.str[0] ?? '';\r\n }\r\n },\r\n {\r\n name: 'GeneratedInstances',\r\n description: 'Copies grown where the layer is painted; paint, erase or regenerate to change them',\r\n type: 'int',\r\n readonly: true,\r\n isPersistent() {\r\n return false;\r\n },\r\n get(this: FoliageLayer, value) {\r\n value.num[0] = this.generatedCount;\r\n }\r\n },\r\n {\r\n name: 'PlacedInstances',\r\n description:\r\n 'Copies placed directly, e.g. by the scatter tool; painting leaves them alone, erasing removes them',\r\n type: 'int',\r\n readonly: true,\r\n isPersistent() {\r\n return false;\r\n },\r\n get(this: FoliageLayer, value) {\r\n value.num[0] = this.manualCount;\r\n }\r\n },\r\n {\r\n name: 'CastShadow',\r\n description: 'Whether the instances cast shadows; off saves time for small plants',\r\n type: 'bool',\r\n default: true,\r\n get(this: FoliageLayer, value) {\r\n value.bool[0] = this.castShadow;\r\n },\r\n set(this: FoliageLayer, value) {\r\n this.castShadow = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'CullDistance',\r\n description: 'Instances farther than this from the camera, in meters, disappear',\r\n type: 'float',\r\n default: 300,\r\n options: { minValue: 0, maxValue: 10000 },\r\n get(this: FoliageLayer, value) {\r\n value.num[0] = this.cullDistance;\r\n },\r\n set(this: FoliageLayer, value) {\r\n this.cullDistance = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'AlignToNormal',\r\n description:\r\n 'How much the instances tilt with the slope of the terrain: 0 stands upright, 1 leans with the ground. Painted copies on any surface always stand upright',\r\n type: 'float',\r\n default: 0,\r\n options: { minValue: 0, maxValue: 1 },\r\n isHidden(this: FoliageLayer) {\r\n // Only a terrain gives the slope when the instances are drawn; on any surface the\r\n // painted copies store their height alone. Placed copies still follow the terrain.\r\n return this.generation.surface === 'any' && this.manualCount === 0;\r\n },\r\n get(this: FoliageLayer, value) {\r\n value.num[0] = this.alignToNormal;\r\n },\r\n set(this: FoliageLayer, value) {\r\n this.alignToNormal = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Spacing',\r\n description:\r\n 'Distance between the spots painted copies can grow at, about the closest two get. Smaller grows a denser layer. Regenerate the layer to apply it to what is painted',\r\n type: 'float',\r\n default: 4,\r\n options: { group: 'Generation', minValue: 0.05, maxValue: 100 },\r\n get(this: FoliageLayer, value) {\r\n value.num[0] = this.generation.spacing;\r\n },\r\n set(this: FoliageLayer, value) {\r\n this.generation = { spacing: value.num[0] };\r\n }\r\n },\r\n {\r\n name: 'ScaleRange',\r\n description: 'Smallest and largest size of the painted copies, picked at random for each',\r\n type: 'vec2',\r\n default: [0.8, 1.2],\r\n options: { group: 'Generation', minValue: 0.01, maxValue: 100 },\r\n get(this: FoliageLayer, value) {\r\n const r = this.generation.scaleRange;\r\n value.num[0] = r[0];\r\n value.num[1] = r[1];\r\n },\r\n set(this: FoliageLayer, value) {\r\n this.generation = { scaleRange: [value.num[0], value.num[1]] };\r\n }\r\n },\r\n {\r\n name: 'SlopeRange',\r\n description: 'Painted copies only grow on ground this steep, in degrees: 0 is flat, 90 a wall',\r\n type: 'vec2',\r\n default: [0, 45],\r\n options: { group: 'Generation', minValue: 0, maxValue: 90 },\r\n get(this: FoliageLayer, value) {\r\n const r = this.generation.slopeRange;\r\n value.num[0] = r[0];\r\n value.num[1] = r[1];\r\n },\r\n set(this: FoliageLayer, value) {\r\n this.generation = { slopeRange: [value.num[0], value.num[1]] };\r\n }\r\n },\r\n {\r\n name: 'LimitHeight',\r\n description: 'Painted copies only grow between two world heights, e.g. above the water line',\r\n type: 'bool',\r\n default: false,\r\n options: { group: 'Generation' },\r\n get(this: FoliageLayer, value) {\r\n value.bool[0] = !!this.generation.heightRange;\r\n },\r\n set(this: FoliageLayer, value) {\r\n const g = this.generation;\r\n this.generation = { heightRange: value.bool[0] ? (g.heightRange ?? [0, 100]) : null };\r\n }\r\n },\r\n {\r\n name: 'HeightRange',\r\n description: 'Lowest and highest world height painted copies grow at',\r\n type: 'vec2',\r\n default: [0, 100],\r\n options: { group: 'Generation' },\r\n isHidden(this: FoliageLayer) {\r\n return !this.generation.heightRange;\r\n },\r\n get(this: FoliageLayer, value) {\r\n const r = this.generation.heightRange ?? [0, 100];\r\n value.num[0] = r[0];\r\n value.num[1] = r[1];\r\n },\r\n set(this: FoliageLayer, value) {\r\n if (this.generation.heightRange) {\r\n this.generation = { heightRange: [value.num[0], value.num[1]] };\r\n }\r\n }\r\n },\r\n {\r\n name: 'YOffset',\r\n description:\r\n 'Raises painted copies above the ground, or sinks them into it when negative, in meters',\r\n type: 'float',\r\n default: 0,\r\n options: { group: 'Generation', minValue: -100, maxValue: 100 },\r\n get(this: FoliageLayer, value) {\r\n value.num[0] = this.generation.yOffset;\r\n },\r\n set(this: FoliageLayer, value) {\r\n this.generation = { yOffset: value.num[0] };\r\n }\r\n },\r\n {\r\n name: 'RandomYaw',\r\n description:\r\n 'Turns each painted copy a random way about the vertical, so they do not all face alike',\r\n type: 'bool',\r\n default: true,\r\n options: { group: 'Generation' },\r\n get(this: FoliageLayer, value) {\r\n value.bool[0] = this.generation.randomYaw;\r\n },\r\n set(this: FoliageLayer, value) {\r\n this.generation = { randomYaw: value.bool[0] };\r\n }\r\n },\r\n {\r\n name: 'Seed',\r\n description: 'Picks another random arrangement of the painted copies; regenerate to see it',\r\n type: 'int',\r\n default: 0,\r\n options: { group: 'Generation' },\r\n get(this: FoliageLayer, value) {\r\n value.num[0] = this.generation.seed;\r\n },\r\n set(this: FoliageLayer, value) {\r\n this.generation = { seed: value.num[0] };\r\n }\r\n },\r\n {\r\n name: 'Surface',\r\n description:\r\n 'What painted copies stand on. Terrain follows the ground when it is reshaped; Any surface lands them on whatever has a collider below, rocks and buildings included, and keeps that height',\r\n type: 'string',\r\n default: 'terrain',\r\n options: {\r\n group: 'Generation',\r\n enum: { labels: ['Terrain', 'Any surface'], values: ['terrain', 'any'] }\r\n },\r\n get(this: FoliageLayer, value) {\r\n value.str[0] = this.generation.surface;\r\n },\r\n set(this: FoliageLayer, value) {\r\n this.generation = { surface: value.str[0] as FoliageSurface };\r\n }\r\n },\r\n {\r\n name: 'PlaceScript',\r\n description:\r\n 'Optional rule deciding where painted copies grow: function place(p, api, input) returning how likely a copy is at p, as for the scatter tool',\r\n type: 'string',\r\n default: '',\r\n options: { group: 'Generation', multiline: true },\r\n get(this: FoliageLayer, value) {\r\n value.str[0] = this.generation.placeScript;\r\n },\r\n set(this: FoliageLayer, value) {\r\n this.generation = { placeScript: value.str[0] ?? '' };\r\n }\r\n },\r\n {\r\n name: 'CollisionShape',\r\n description:\r\n 'Makes the instances obstacles in the physics simulation, such as tree trunks and big rocks. Asset uses the colliders set on the asset itself; None for bushes and stones vehicles drive over',\r\n type: 'string',\r\n default: 'none',\r\n options: {\r\n group: 'Collision',\r\n enum: {\r\n labels: ['None', 'Box', 'Sphere', 'Capsule', 'Cylinder', 'From asset'],\r\n values: ['none', 'box', 'sphere', 'capsule', 'cylinder', 'asset']\r\n }\r\n },\r\n get(this: FoliageLayer, value) {\r\n value.str[0] = this.collision?.shape ?? 'none';\r\n },\r\n set(this: FoliageLayer, value) {\r\n const shape = value.str[0];\r\n if (!shape || shape === 'none') {\r\n this.collision = null;\r\n } else {\r\n this.collision = { ...(this.collision ?? {}), shape: shape as FoliageCollisionShape };\r\n }\r\n }\r\n },\r\n {\r\n name: 'CollisionSize',\r\n description:\r\n \"Width, height and depth of the box, in the asset's units; 0 on an axis fits it to the asset there\",\r\n type: 'vec3',\r\n default: [0, 0, 0],\r\n options: { group: 'Collision', minValue: 0 },\r\n isHidden(this: FoliageLayer) {\r\n return collisionShape(this) !== 'box';\r\n },\r\n get(this: FoliageLayer, value) {\r\n const size = this.collision?.size;\r\n value.num[0] = size?.[0] ?? 0;\r\n value.num[1] = size?.[1] ?? 0;\r\n value.num[2] = size?.[2] ?? 0;\r\n },\r\n set(this: FoliageLayer, value) {\r\n updateCollision(this, (c) => {\r\n const size: [number, number, number] = [value.num[0], value.num[1], value.num[2]];\r\n c.size = size.every((v) => v > 0) ? size : undefined;\r\n });\r\n }\r\n },\r\n {\r\n name: 'CollisionRadius',\r\n description:\r\n \"Radius of the sphere, capsule or cylinder, in the asset's units; 0 fits it to the asset. For a tree, give the trunk radius\",\r\n type: 'float',\r\n default: 0,\r\n options: { group: 'Collision', minValue: 0 },\r\n isHidden(this: FoliageLayer) {\r\n const shape = collisionShape(this);\r\n return shape !== 'sphere' && shape !== 'capsule' && shape !== 'cylinder';\r\n },\r\n get(this: FoliageLayer, value) {\r\n value.num[0] = this.collision?.radius ?? 0;\r\n },\r\n set(this: FoliageLayer, value) {\r\n updateCollision(this, (c) => {\r\n c.radius = value.num[0] > 0 ? value.num[0] : undefined;\r\n });\r\n }\r\n },\r\n {\r\n name: 'CollisionHeight',\r\n description:\r\n \"Total height of the capsule or cylinder, in the asset's units; 0 makes it as tall as the asset\",\r\n type: 'float',\r\n default: 0,\r\n options: { group: 'Collision', minValue: 0 },\r\n isHidden(this: FoliageLayer) {\r\n const shape = collisionShape(this);\r\n return shape !== 'capsule' && shape !== 'cylinder';\r\n },\r\n get(this: FoliageLayer, value) {\r\n value.num[0] = this.collision?.height ?? 0;\r\n },\r\n set(this: FoliageLayer, value) {\r\n updateCollision(this, (c) => {\r\n c.height = value.num[0] > 0 ? value.num[0] : undefined;\r\n });\r\n }\r\n },\r\n {\r\n name: 'CollisionAutoOffset',\r\n description:\r\n 'Places the shape on the asset: a capsule or cylinder stands on its base, a box or sphere is centred on it',\r\n type: 'bool',\r\n default: true,\r\n options: { group: 'Collision' },\r\n isHidden(this: FoliageLayer) {\r\n return !hasFittedShape(this);\r\n },\r\n get(this: FoliageLayer, value) {\r\n value.bool[0] = !this.collision?.offset;\r\n },\r\n set(this: FoliageLayer, value) {\r\n updateCollision(this, (c) => {\r\n c.offset = value.bool[0] ? undefined : (c.offset ?? [0, 0, 0]);\r\n });\r\n }\r\n },\r\n {\r\n name: 'CollisionOffset',\r\n description: \"Centre of the shape, in the asset's units, measured from the asset's origin\",\r\n type: 'vec3',\r\n default: [0, 0, 0],\r\n options: { group: 'Collision' },\r\n isHidden(this: FoliageLayer) {\r\n return !hasFittedShape(this) || !this.collision?.offset;\r\n },\r\n get(this: FoliageLayer, value) {\r\n const offset = this.collision?.offset;\r\n value.num[0] = offset?.[0] ?? 0;\r\n value.num[1] = offset?.[1] ?? 0;\r\n value.num[2] = offset?.[2] ?? 0;\r\n },\r\n set(this: FoliageLayer, value) {\r\n updateCollision(this, (c) => {\r\n if (c.offset) {\r\n c.offset = [value.num[0], value.num[1], value.num[2]];\r\n }\r\n });\r\n }\r\n },\r\n {\r\n name: 'CollisionFriction',\r\n description: 'Grip against sliding along the instances: 0 is ice, around 1 is rubber',\r\n type: 'float',\r\n default: 0.5,\r\n options: { group: 'Collision', minValue: 0, maxValue: 2 },\r\n isHidden(this: FoliageLayer) {\r\n return !hasFittedShape(this);\r\n },\r\n get(this: FoliageLayer, value) {\r\n value.num[0] = this.collision?.friction ?? 0.5;\r\n },\r\n set(this: FoliageLayer, value) {\r\n updateCollision(this, (c) => {\r\n c.friction = value.num[0];\r\n });\r\n }\r\n },\r\n {\r\n name: 'CollisionRestitution',\r\n description: 'Bounciness of the instances: 0 stops things dead, 1 bounces them back fully',\r\n type: 'float',\r\n default: 0,\r\n options: { group: 'Collision', minValue: 0, maxValue: 1 },\r\n isHidden(this: FoliageLayer) {\r\n return !hasFittedShape(this);\r\n },\r\n get(this: FoliageLayer, value) {\r\n value.num[0] = this.collision?.restitution ?? 0;\r\n },\r\n set(this: FoliageLayer, value) {\r\n updateCollision(this, (c) => {\r\n c.restitution = value.num[0];\r\n });\r\n }\r\n },\r\n {\r\n name: 'CollisionLayer',\r\n description:\r\n 'Collision layer 0-15 of the instances; the world decides which layers pass through each other',\r\n type: 'int',\r\n default: 0,\r\n options: { group: 'Collision', minValue: 0, maxValue: 15 },\r\n isHidden(this: FoliageLayer) {\r\n return !hasFittedShape(this);\r\n },\r\n get(this: FoliageLayer, value) {\r\n value.num[0] = this.collision?.layer ?? 0;\r\n },\r\n set(this: FoliageLayer, value) {\r\n updateCollision(this, (c) => {\r\n c.layer = value.num[0];\r\n });\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function getFoliageSystemClass(manager: ResourceManager): SerializableClass {\r\n return {\r\n ctor: FoliageSystem,\r\n name: 'FoliageSystem',\r\n parent: GraphNode,\r\n createFunc(ctx: SceneNode) {\r\n const node = new FoliageSystem(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: 'ChunkSize',\r\n description:\r\n 'Edge length in meters of the square chunks the instances are drawn and culled in. Smaller chunks cull more tightly, larger ones draw in fewer batches.',\r\n type: 'float',\r\n default: 64,\r\n options: { minValue: 4, maxValue: 1024 },\r\n get(this: FoliageSystem, value) {\r\n value.num[0] = this.chunkSize;\r\n },\r\n set(this: FoliageSystem, value) {\r\n this.chunkSize = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'MaskCellSize',\r\n description:\r\n 'Size in meters of the squares the foliage brush paints in. Smaller follows the brush more closely, larger saves memory',\r\n type: 'float',\r\n default: 1,\r\n options: { minValue: 0.05, maxValue: 16 },\r\n get(this: FoliageSystem, value) {\r\n value.num[0] = this.maskCellSize;\r\n },\r\n set(this: FoliageSystem, value) {\r\n this.maskCellSize = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Layers',\r\n description: 'Kinds of objects scattered over the terrain, one asset and its settings per layer',\r\n type: 'object_array',\r\n default: [],\r\n options: {\r\n objectTypes: [FoliageLayer],\r\n elementLabel: 'Layer'\r\n },\r\n isNullable() {\r\n return false;\r\n },\r\n get(this: FoliageSystem, value) {\r\n value.object = [];\r\n for (let i = 0; i < this.numLayers; i++) {\r\n value.object.push(this.getLayer(i));\r\n }\r\n },\r\n set(this: FoliageSystem, value) {\r\n this.setLayers(\r\n ((value.object ?? []) as unknown[]).filter((l): l is FoliageLayer => l instanceof FoliageLayer)\r\n );\r\n },\r\n create() {\r\n return new FoliageLayer();\r\n },\r\n add(this: FoliageSystem, value, index) {\r\n const layer = value?.object?.[0];\r\n this.insertLayer(layer instanceof FoliageLayer ? layer : new FoliageLayer(), index);\r\n },\r\n delete(this: FoliageSystem, index) {\r\n this.removeLayer(index);\r\n }\r\n },\r\n {\r\n name: 'FoliageInstances',\r\n description: 'Serialized foliage instances',\r\n type: 'embedded',\r\n default: null,\r\n phase: 1,\r\n isHidden() {\r\n return true;\r\n },\r\n get(this: FoliageSystem, value) {\r\n value.str[0] = `assets/.embedded.dir/${this.persistentId}-foliage.bin`;\r\n value.object[0] = Promise.resolve(getFoliageContent(this));\r\n },\r\n async set(this: FoliageSystem, value) {\r\n if (!value.str[0]) {\r\n return;\r\n }\r\n const data = (await manager.VFS.readFile(value.str[0], { encoding: 'binary' }).catch(\r\n () => null\r\n )) as ArrayBuffer;\r\n if (!data) {\r\n console.error(`Load foliage instances failed: ${value.str[0]}`);\r\n return;\r\n }\r\n setFoliageContent(this, data);\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n"],"names":["FOLIAGE_DATA_MAGIC","FOLIAGE_DATA_VERSION","getFoliageContent","foliage","layers","size","i","numLayers","layer","getLayer","entry","generated","getInstances","manual","push","length","mask","byteSize","buffer","ArrayBuffer","view","DataView","setUint32","offset","data","FOLIAGE_INSTANCE_STRIDE","Float32Array","set","write","setFoliageContent","byteLength","getUint32","console","error","group","count","setInstances","read","updateCollision","change","c","collision","hasCollision","collisionShape","shape","hasFittedShape","getFoliageLayerClass","ctor","FoliageLayer","name","getProps","defineProps","description","type","default","options","mimeTypes","mimeTypeOf","get","value","str","asset","readonly","isPersistent","num","generatedCount","manualCount","bool","castShadow","minValue","maxValue","cullDistance","isHidden","generation","surface","alignToNormal","spacing","r","scaleRange","slopeRange","heightRange","g","yOffset","randomYaw","seed","enum","labels","values","multiline","placeScript","every","v","undefined","radius","height","friction","restitution","getFoliageSystemClass","manager","FoliageSystem","parent","GraphNode","createFunc","ctx","node","scene","obj","chunkSize","maskCellSize","objectTypes","elementLabel","isNullable","object","setLayers","filter","l","create","add","index","insertLayer","delete","removeLayer","phase","persistentId","Promise","resolve","VFS","readFile","encoding","catch"],"mappings":"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"}
@@ -1,18 +1,19 @@
1
1
  import { mimeTypeOf, Vector4, Vector3 } from '@zephyr3d/base';
2
2
  import '../../../scene/scene.js';
3
- import '../../../values.js';
4
- import '../../../render/render_queue.js';
5
3
  import '../../../render/primitive.js';
6
4
  import '@zephyr3d/device';
5
+ import '../../../values.js';
6
+ import '../../../render/render_queue.js';
7
7
  import '../../../material/shader/helper.js';
8
8
  import '../../../material/lambert.js';
9
9
  import '../../../material/blinn.js';
10
10
  import '../../../material/unlit.js';
11
+ import '../../../material/meshmaterial.js';
11
12
  import '../../../material/particle.js';
12
13
  import '../../../material/subsurfaceprofile.js';
13
- import '../../../material/skin.js';
14
+ import '../../../material/sssprofile.js';
15
+ import '../../../material/sss.js';
14
16
  import '../../../material/eye.js';
15
- import '../../../material/meshmaterial.js';
16
17
  import '../../../material/hair.js';
17
18
  import '../../../material/hairstrand.js';
18
19
  import '../../../material/grassmaterial.js';
@@ -30,9 +31,14 @@ import '../../../render/lightpass.js';
30
31
  import '../../../render/sky.js';
31
32
  import '../../../render/clipmap.js';
32
33
  import '../../../render/envlight.js';
34
+ import '../../../render/lod.js';
33
35
  import '../../../render/dualdepthpeeling_oit.js';
34
36
  import '../../../shaders/atmosphere.js';
37
+ import '../../../render/water_interaction.js';
35
38
  import '../../../render/rendergraph/scene_render_context.js';
39
+ import '../../../render/sdf/scene_sdf.js';
40
+ import '../../../render/sdf/global_sdf.js';
41
+ import '../../../render/gi/voxelize_pass.js';
36
42
  import { GraphNode } from '../../../scene/graph_node.js';
37
43
  import '../../../shadow/shadowmapper.js';
38
44
  import '../../../scene/mesh.js';
@@ -47,6 +53,7 @@ import '../../../scene/batchgroup.js';
47
53
  import '../../../scene/terrain-cm/terrain-cm.js';
48
54
  import '../../../scene/terrain-cm/grass.js';
49
55
  import '../../../scene/raycast_visitor.js';
56
+ import '../../../scene/foliage.js';
50
57
 
51
58
  /**
52
59
  * Serialization for {@link HairNode}.
@@ -1 +1 @@
1
- {"version":3,"file":"hair.js","sources":["../../../../src/utility/serialization/scene/hair.ts"],"sourcesContent":["import { mimeTypeOf, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport type { SceneNode } from '../../../scene';\r\nimport { GraphNode } from '../../../scene';\r\nimport { HairNode } from '../../../scene/hair';\r\nimport type { HairShadingModel } from '../../../material/hair';\r\nimport type { BlendMode } from '../../../material/meshmaterial';\r\nimport { defineProps, type SerializableClass } from '../types';\r\n\r\n/**\r\n * Serialization for {@link HairNode}.\r\n *\r\n * @remarks\r\n * Ordinary in every respect: the node holds all of its own state, so these are\r\n * plain accessors onto it and the node saves and loads like any other.\r\n *\r\n * Two things are deliberately absent. The strand geometry is not here - it lives\r\n * in the `.zhair` asset the node references by path, and that file holds nothing\r\n * but strands, so the same groom can be shared by characters that style it\r\n * differently. Nor is the material: it is an implementation detail of the node\r\n * (see the {@link HairNode} class remarks), and its controls appear below as\r\n * properties of the node itself.\r\n * @internal\r\n */\r\nexport function getHairNodeClass(): SerializableClass {\r\n return {\r\n ctor: HairNode,\r\n name: 'HairNode',\r\n parent: GraphNode,\r\n createFunc(ctx: SceneNode) {\r\n const node = new HairNode(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: 'HairAsset',\r\n description: 'Strand geometry asset drawn by this node',\r\n type: 'string',\r\n default: '',\r\n options: {\r\n group: 'Geometry',\r\n label: 'Hair Asset',\r\n mimeTypes: [mimeTypeOf('.zhair')]\r\n },\r\n get(this: HairNode, value) {\r\n value.str[0] = this.hairAsset;\r\n },\r\n async set(this: HairNode, value) {\r\n await this.setHairAsset(value?.str?.[0] ?? '');\r\n }\r\n },\r\n {\r\n name: 'StrandStride',\r\n description:\r\n 'Draw one strand in every N. Thins the groom evenly across the scalp rather than cropping it',\r\n type: 'int',\r\n default: 1,\r\n options: { group: 'Geometry', minValue: 1, maxValue: 64 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.strandStride;\r\n },\r\n set(this: HairNode, value) {\r\n this.strandStride = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'MaxStrands',\r\n description: 'Upper bound on drawn strands, widening the stride further when needed. 0 disables',\r\n type: 'int',\r\n default: 0,\r\n options: { group: 'Geometry', minValue: 0, maxValue: 1000000 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.maxStrands;\r\n },\r\n set(this: HairNode, value) {\r\n this.maxStrands = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'SegmentsPerStrand',\r\n description:\r\n 'Ribbon segments generated per strand. Independent of the control point count, so the same strands can be drawn coarser at a distance',\r\n type: 'int',\r\n default: 8,\r\n options: { group: 'Geometry', minValue: 1, maxValue: 64 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.segmentsPerStrand;\r\n },\r\n set(this: HairNode, value) {\r\n this.segmentsPerStrand = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'StrandWidthScale',\r\n description: 'Multiplier on the width stored in the strand data',\r\n type: 'float',\r\n default: 1,\r\n options: { group: 'Geometry', animatable: true, minValue: 0, maxValue: 100 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.strandWidthScale;\r\n },\r\n set(this: HairNode, value) {\r\n this.strandWidthScale = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'MinStrandWidth',\r\n description: 'Lower bound on ribbon width, in world units',\r\n type: 'float',\r\n default: 0,\r\n options: { group: 'Geometry', minValue: 0, maxValue: 1 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.minStrandWidth;\r\n },\r\n set(this: HairNode, value) {\r\n this.minStrandWidth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'MinPixelWidth',\r\n description:\r\n 'Lower bound on ribbon width in pixels. Real hair is thinner than a pixel; widening it and paying the coverage back in alpha keeps distant hair from breaking into a flickering dotted line',\r\n type: 'float',\r\n default: 1.4,\r\n options: { group: 'Geometry', minValue: 0, maxValue: 8 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.minPixelWidth;\r\n },\r\n set(this: HairNode, value) {\r\n this.minPixelWidth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'RootOcclusion',\r\n description:\r\n 'Darkens ambient light on strands near the root, standing in for the occlusion of being buried in the groom. Environment light is not shadowed, so without this a dense hairstyle is as bright inside as out. Direct light is left to the shadow map',\r\n type: 'float',\r\n default: 0.5,\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.rootOcclusion;\r\n },\r\n set(this: HairNode, value) {\r\n this.rootOcclusion = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'RootOcclusionRange',\r\n description: 'Fraction of a strand length over which the root occlusion fades out',\r\n type: 'float',\r\n default: 0.6,\r\n options: { group: 'Shading', minValue: 0.001, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return this.rootOcclusion <= 0;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.rootOcclusionRange;\r\n },\r\n set(this: HairNode, value) {\r\n this.rootOcclusionRange = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'StrandLOD',\r\n description: 'Drop strands with distance, redistributing their coverage to the survivors',\r\n type: 'bool',\r\n default: false,\r\n options: { group: 'Geometry' },\r\n get(this: HairNode, value) {\r\n value.bool[0] = this.strandLOD;\r\n },\r\n set(this: HairNode, value) {\r\n this.strandLOD = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'MinStrandLODRatio',\r\n description: 'Floor on the fraction of strands distance decimation keeps',\r\n type: 'float',\r\n default: 0.05,\r\n options: { group: 'Geometry', minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return !this.strandLOD;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.minStrandLODRatio;\r\n },\r\n set(this: HairNode, value) {\r\n this.minStrandLODRatio = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'AlbedoColor',\r\n description: 'Base color of the strands',\r\n type: 'rgba',\r\n default: [1, 1, 1, 1],\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.albedoColor.x;\r\n value.num[1] = this.albedoColor.y;\r\n value.num[2] = this.albedoColor.z;\r\n value.num[3] = this.albedoColor.w;\r\n },\r\n set(this: HairNode, value) {\r\n this.albedoColor = new Vector4(value.num[0], value.num[1], value.num[2], value.num[3]);\r\n }\r\n },\r\n {\r\n name: 'ShadingModel',\r\n description:\r\n 'Which scattering model shades the hair. Marschner derives the lobes from the fibre; Kajiya-Kay is the art-directed double lobe',\r\n type: 'string',\r\n default: 'kajiya-kay',\r\n options: {\r\n group: 'Shading',\r\n enum: {\r\n labels: ['Kajiya-Kay (double lobe)', 'Marschner (fibre)'],\r\n values: ['kajiya-kay', 'marschner']\r\n }\r\n },\r\n get(this: HairNode, value) {\r\n value.str[0] = this.shadingModel;\r\n },\r\n set(this: HairNode, value) {\r\n this.shadingModel = value.str[0] as HairShadingModel;\r\n }\r\n },\r\n {\r\n name: 'Specular1Color',\r\n description: 'Color of the primary (sharp, near-white) specular lobe',\r\n type: 'rgb',\r\n default: [0.35, 0.35, 0.35],\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return this.shadingModel !== 'kajiya-kay';\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.specular1Color.x;\r\n value.num[1] = this.specular1Color.y;\r\n value.num[2] = this.specular1Color.z;\r\n },\r\n set(this: HairNode, value) {\r\n this.specular1Color = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'Specular1Power',\r\n description: 'Exponent of the primary specular lobe',\r\n type: 'float',\r\n default: 160,\r\n options: { group: 'Shading', animatable: true, minValue: 1, maxValue: 1024 },\r\n isHidden(this: HairNode) {\r\n return this.shadingModel !== 'kajiya-kay';\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.specular1Power;\r\n },\r\n set(this: HairNode, value) {\r\n this.specular1Power = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Specular1Shift',\r\n description: 'Shift of the primary specular lobe along the strand',\r\n type: 'float',\r\n default: 0.05,\r\n options: { group: 'Shading', animatable: true, minValue: -1, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return this.shadingModel !== 'kajiya-kay';\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.specular1Shift;\r\n },\r\n set(this: HairNode, value) {\r\n this.specular1Shift = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Specular2Color',\r\n description: 'Color of the secondary (broad, tinted) specular lobe',\r\n type: 'rgb',\r\n default: [0.5, 0.35, 0.25],\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return this.shadingModel !== 'kajiya-kay';\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.specular2Color.x;\r\n value.num[1] = this.specular2Color.y;\r\n value.num[2] = this.specular2Color.z;\r\n },\r\n set(this: HairNode, value) {\r\n this.specular2Color = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'Specular2Power',\r\n description: 'Exponent of the secondary specular lobe',\r\n type: 'float',\r\n default: 20,\r\n options: { group: 'Shading', animatable: true, minValue: 1, maxValue: 1024 },\r\n isHidden(this: HairNode) {\r\n return this.shadingModel !== 'kajiya-kay';\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.specular2Power;\r\n },\r\n set(this: HairNode, value) {\r\n this.specular2Power = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Specular2Shift',\r\n description: 'Shift of the secondary specular lobe along the strand',\r\n type: 'float',\r\n default: -0.08,\r\n options: { group: 'Shading', animatable: true, minValue: -1, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return this.shadingModel !== 'kajiya-kay';\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.specular2Shift;\r\n },\r\n set(this: HairNode, value) {\r\n this.specular2Shift = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'MarschnerShift',\r\n description: 'Longitudinal shift of the Marschner lobes',\r\n type: 'float',\r\n default: 0.035,\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 0.5 },\r\n isHidden(this: HairNode) {\r\n return this.shadingModel !== 'marschner';\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.marschnerShift;\r\n },\r\n set(this: HairNode, value) {\r\n this.marschnerShift = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'MarschnerRoughness',\r\n description: 'Longitudinal roughness of the Marschner lobes',\r\n type: 'float',\r\n default: 0.25,\r\n options: { group: 'Shading', animatable: true, minValue: 0.01, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return this.shadingModel !== 'marschner';\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.marschnerRoughness;\r\n },\r\n set(this: HairNode, value) {\r\n this.marschnerRoughness = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'MarschnerIOR',\r\n description: 'Index of refraction of the fibre',\r\n type: 'float',\r\n default: 1.55,\r\n options: { group: 'Shading', animatable: true, minValue: 1, maxValue: 3 },\r\n isHidden(this: HairNode) {\r\n return this.shadingModel !== 'marschner';\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.marschnerIOR;\r\n },\r\n set(this: HairNode, value) {\r\n this.marschnerIOR = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'MarschnerAbsorption',\r\n description:\r\n 'How strongly pigmented the fibre is. Deepens the transmitted paths without touching the white surface reflection',\r\n type: 'float',\r\n default: 1,\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 8 },\r\n isHidden(this: HairNode) {\r\n return this.shadingModel !== 'marschner';\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.marschnerAbsorption;\r\n },\r\n set(this: HairNode, value) {\r\n this.marschnerAbsorption = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'MarschnerLobes',\r\n description: 'Relative weight of the R, TT and TRT lobes',\r\n type: 'vec3',\r\n default: [1, 1, 1],\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 4 },\r\n isHidden(this: HairNode) {\r\n return this.shadingModel !== 'marschner';\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.marschnerLobes.x;\r\n value.num[1] = this.marschnerLobes.y;\r\n value.num[2] = this.marschnerLobes.z;\r\n },\r\n set(this: HairNode, value) {\r\n this.marschnerLobes = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'StrandRoundness',\r\n description:\r\n 'How far the shading normal bends across the ribbon. At 0 a strand shades as a flat tape, at 1 as a cylinder',\r\n type: 'float',\r\n default: 1,\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.strandRoundness;\r\n },\r\n set(this: HairNode, value) {\r\n this.strandRoundness = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'DiffuseWrap',\r\n description: 'How far diffuse lighting wraps around the fibre',\r\n type: 'float',\r\n default: 0.5,\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.diffuseWrap;\r\n },\r\n set(this: HairNode, value) {\r\n this.diffuseWrap = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'TransmissionColor',\r\n description: 'Color of light transmitted through the fibre',\r\n type: 'rgb',\r\n default: [0.6, 0.35, 0.2],\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.transmissionColor.x;\r\n value.num[1] = this.transmissionColor.y;\r\n value.num[2] = this.transmissionColor.z;\r\n },\r\n set(this: HairNode, value) {\r\n this.transmissionColor = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'TransmissionIntensity',\r\n description: 'Strength of back-lit transmission',\r\n type: 'float',\r\n default: 0.35,\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 4 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.transmissionIntensity;\r\n },\r\n set(this: HairNode, value) {\r\n this.transmissionIntensity = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'TransmissionPower',\r\n description: 'Falloff exponent of back-lit transmission',\r\n type: 'float',\r\n default: 4,\r\n options: { group: 'Shading', animatable: true, minValue: 1, maxValue: 64 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.transmissionPower;\r\n },\r\n set(this: HairNode, value) {\r\n this.transmissionPower = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ScatterColor',\r\n description: 'Color of multiple scattering within the groom',\r\n type: 'rgb',\r\n default: [0.55, 0.32, 0.18],\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.scatterColor.x;\r\n value.num[1] = this.scatterColor.y;\r\n value.num[2] = this.scatterColor.z;\r\n },\r\n set(this: HairNode, value) {\r\n this.scatterColor = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'ScatterIntensity',\r\n description: 'Strength of multiple scattering',\r\n type: 'float',\r\n default: 0,\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 4 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.scatterIntensity;\r\n },\r\n set(this: HairNode, value) {\r\n this.scatterIntensity = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ScatterLocal',\r\n description: 'Share of scattering taken as local rather than global',\r\n type: 'float',\r\n default: 0.5,\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return this.scatterIntensity <= 0;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.scatterLocal;\r\n },\r\n set(this: HairNode, value) {\r\n this.scatterLocal = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ScatterWrap',\r\n description: 'How far scattered light wraps around the fibre',\r\n type: 'float',\r\n default: 0.8,\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return this.scatterIntensity <= 0;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.scatterWrap;\r\n },\r\n set(this: HairNode, value) {\r\n this.scatterWrap = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'BlendMode',\r\n description:\r\n 'How the strands blend with what is behind them. The pixel-width floor pays its widening back in alpha, which only means anything once blending is on',\r\n type: 'string',\r\n default: 'none',\r\n options: {\r\n group: 'Transparency',\r\n enum: {\r\n labels: ['None', 'Blend', 'Additive', 'Max', 'Min'],\r\n values: ['none', 'blend', 'additive', 'max', 'min']\r\n }\r\n },\r\n get(this: HairNode, value) {\r\n value.str[0] = this.blendMode;\r\n },\r\n set(this: HairNode, value) {\r\n this.blendMode = value.str[0] as BlendMode;\r\n }\r\n },\r\n {\r\n name: 'AlphaCutoff',\r\n description: 'Alpha below which a fragment is discarded',\r\n type: 'float',\r\n default: 0,\r\n options: { group: 'Transparency', animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.alphaCutoff;\r\n },\r\n set(this: HairNode, value) {\r\n this.alphaCutoff = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'AlphaDither',\r\n description: 'Dither the alpha test, so a temporal filter resolves the soft edge',\r\n type: 'bool',\r\n default: false,\r\n options: { group: 'Transparency' },\r\n get(this: HairNode, value) {\r\n value.bool[0] = this.alphaDither;\r\n },\r\n set(this: HairNode, value) {\r\n this.alphaDither = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'CastShadow',\r\n description: 'If true, the groom is drawn into shadow maps',\r\n type: 'bool',\r\n default: true,\r\n options: { group: 'Shadow' },\r\n get(this: HairNode, value) {\r\n value.bool[0] = this.castShadow;\r\n },\r\n set(this: HairNode, value) {\r\n this.castShadow = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'TransparentShadowCaster',\r\n description: 'Let the shadow caster pass respect strand alpha, for softer self-shadowing',\r\n type: 'bool',\r\n default: false,\r\n options: { group: 'Shadow' },\r\n isHidden(this: HairNode) {\r\n return !this.castShadow;\r\n },\r\n get(this: HairNode, value) {\r\n value.bool[0] = this.transparentShadowCaster;\r\n },\r\n set(this: HairNode, value) {\r\n this.transparentShadowCaster = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'ShadowAlphaCutoff',\r\n description: 'Alpha below which a fragment casts no shadow',\r\n type: 'float',\r\n default: 0,\r\n options: { group: 'Shadow', minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return !this.castShadow || !this.transparentShadowCaster;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.shadowAlphaCutoff;\r\n },\r\n set(this: HairNode, value) {\r\n this.shadowAlphaCutoff = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Simulation',\r\n description:\r\n 'Run strand dynamics on this groom. WebGPU only; the strands stay in their authored pose elsewhere',\r\n type: 'bool',\r\n default: false,\r\n options: { group: 'Simulation' },\r\n get(this: HairNode, value) {\r\n value.bool[0] = this.simulationEnabled;\r\n },\r\n set(this: HairNode, value) {\r\n this.simulationEnabled = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'Gravity',\r\n description: 'World-space gravity acting on the strands',\r\n type: 'vec3',\r\n default: [0, -9.8, 0],\r\n options: { group: 'Simulation', animatable: true },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.gravity.x;\r\n value.num[1] = this.gravity.y;\r\n value.num[2] = this.gravity.z;\r\n },\r\n set(this: HairNode, value) {\r\n this.gravity = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'Local Stiffness',\r\n description: 'How strongly a strand keeps its authored shape. Holds the curl, and damps the groom',\r\n type: 'float',\r\n default: 0.9,\r\n options: { group: 'Simulation', animatable: true, minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.localStiffness;\r\n },\r\n set(this: HairNode, value) {\r\n this.localStiffness = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Local Iterations',\r\n description: 'Local shape constraint passes per substep. More converges closer',\r\n type: 'int',\r\n default: 2,\r\n options: { group: 'Simulation', minValue: 1, maxValue: 8 },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.localIterations;\r\n },\r\n set(this: HairNode, value) {\r\n this.localIterations = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Global Stiffness',\r\n description:\r\n 'Pull back to the authored pose. Off by default: it anchors points in place, which reads as a spring',\r\n type: 'float',\r\n default: 0,\r\n options: { group: 'Simulation', animatable: true, minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.globalStiffness;\r\n },\r\n set(this: HairNode, value) {\r\n this.globalStiffness = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Global Range',\r\n description: 'Fraction of a strand, from the root, the pose pull acts on',\r\n type: 'float',\r\n default: 0,\r\n options: { group: 'Simulation', minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.globalRange;\r\n },\r\n set(this: HairNode, value) {\r\n this.globalRange = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FTL Damping',\r\n description:\r\n 'Length correction handed back to the parent point as reverse momentum. Lower whips more',\r\n type: 'float',\r\n default: 0.7,\r\n options: { group: 'Simulation', minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.ftlDamping;\r\n },\r\n set(this: HairNode, value) {\r\n this.ftlDamping = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Shock Propagation',\r\n description:\r\n 'How much of the node motion strands are carried along by. 0 lags fully, 1 follows rigidly',\r\n type: 'float',\r\n default: 0.8,\r\n options: { group: 'Simulation', animatable: true, minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.vspCoeff;\r\n },\r\n set(this: HairNode, value) {\r\n this.vspCoeff = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Shock Threshold',\r\n description: 'Node acceleration above which strands stop lagging, in units per second squared',\r\n type: 'float',\r\n default: 50,\r\n options: { group: 'Simulation', minValue: 0, maxValue: 500 },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.vspAccelThreshold;\r\n },\r\n set(this: HairNode, value) {\r\n this.vspAccelThreshold = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Damping',\r\n description: 'Velocity lost each step. 0 keeps full inertia',\r\n type: 'float',\r\n default: 0.08,\r\n options: { group: 'Simulation', animatable: true, minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.damping;\r\n },\r\n set(this: HairNode, value) {\r\n this.damping = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Friction',\r\n description: 'Tangential motion removed at a contact',\r\n type: 'float',\r\n default: 0.2,\r\n options: { group: 'Simulation', minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.friction;\r\n },\r\n set(this: HairNode, value) {\r\n this.friction = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Substeps',\r\n description: 'Integration substeps per fixed step. More is stabler and slower',\r\n type: 'int',\r\n default: 1,\r\n options: { group: 'Simulation', minValue: 1, maxValue: 8 },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.substeps;\r\n },\r\n set(this: HairNode, value) {\r\n this.substeps = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Max Speed Factor',\r\n description: 'Per-substep ceiling on point travel, in segment lengths',\r\n type: 'float',\r\n default: 4,\r\n options: { group: 'Simulation', minValue: 0, maxValue: 32 },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.maxSpeedFactor;\r\n },\r\n set(this: HairNode, value) {\r\n this.maxSpeedFactor = value.num[0];\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n"],"names":["getHairNodeClass","ctor","HairNode","name","parent","GraphNode","createFunc","ctx","node","scene","obj","getProps","defineProps","description","type","default","options","group","label","mimeTypes","mimeTypeOf","get","value","str","hairAsset","set","setHairAsset","minValue","maxValue","num","strandStride","maxStrands","segmentsPerStrand","animatable","strandWidthScale","minStrandWidth","minPixelWidth","rootOcclusion","isHidden","rootOcclusionRange","bool","strandLOD","minStrandLODRatio","albedoColor","x","y","z","w","Vector4","enum","labels","values","shadingModel","specular1Color","Vector3","specular1Power","specular1Shift","specular2Color","specular2Power","specular2Shift","marschnerShift","marschnerRoughness","marschnerIOR","marschnerAbsorption","marschnerLobes","strandRoundness","diffuseWrap","transmissionColor","transmissionIntensity","transmissionPower","scatterColor","scatterIntensity","scatterLocal","scatterWrap","blendMode","alphaCutoff","alphaDither","castShadow","transparentShadowCaster","shadowAlphaCutoff","simulationEnabled","gravity","localStiffness","localIterations","globalStiffness","globalRange","ftlDamping","vspCoeff","vspAccelThreshold","damping","friction","substeps","maxSpeedFactor"],"mappings":"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"}
1
+ {"version":3,"file":"hair.js","sources":["../../../../src/utility/serialization/scene/hair.ts"],"sourcesContent":["import { mimeTypeOf, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport type { SceneNode } from '../../../scene';\r\nimport { GraphNode } from '../../../scene';\r\nimport { HairNode } from '../../../scene/hair';\r\nimport type { HairShadingModel } from '../../../material/hair';\r\nimport type { BlendMode } from '../../../material/meshmaterial';\r\nimport { defineProps, type SerializableClass } from '../types';\r\n\r\n/**\r\n * Serialization for {@link HairNode}.\r\n *\r\n * @remarks\r\n * Ordinary in every respect: the node holds all of its own state, so these are\r\n * plain accessors onto it and the node saves and loads like any other.\r\n *\r\n * Two things are deliberately absent. The strand geometry is not here - it lives\r\n * in the `.zhair` asset the node references by path, and that file holds nothing\r\n * but strands, so the same groom can be shared by characters that style it\r\n * differently. Nor is the material: it is an implementation detail of the node\r\n * (see the {@link HairNode} class remarks), and its controls appear below as\r\n * properties of the node itself.\r\n * @internal\r\n */\r\nexport function getHairNodeClass(): SerializableClass {\r\n return {\r\n ctor: HairNode,\r\n name: 'HairNode',\r\n parent: GraphNode,\r\n createFunc(ctx: SceneNode) {\r\n const node = new HairNode(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: 'HairAsset',\r\n description: 'Strand geometry asset drawn by this node',\r\n type: 'string',\r\n default: '',\r\n options: {\r\n group: 'Geometry',\r\n label: 'Hair Asset',\r\n mimeTypes: [mimeTypeOf('.zhair')]\r\n },\r\n get(this: HairNode, value) {\r\n value.str[0] = this.hairAsset;\r\n },\r\n async set(this: HairNode, value) {\r\n await this.setHairAsset(value?.str?.[0] ?? '');\r\n }\r\n },\r\n {\r\n name: 'StrandStride',\r\n description:\r\n 'Draw one strand in every N. Thins the groom evenly across the scalp rather than cropping it',\r\n type: 'int',\r\n default: 1,\r\n options: { group: 'Geometry', minValue: 1, maxValue: 64 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.strandStride;\r\n },\r\n set(this: HairNode, value) {\r\n this.strandStride = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'MaxStrands',\r\n description: 'Upper bound on drawn strands, widening the stride further when needed. 0 disables',\r\n type: 'int',\r\n default: 0,\r\n options: { group: 'Geometry', minValue: 0, maxValue: 1000000 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.maxStrands;\r\n },\r\n set(this: HairNode, value) {\r\n this.maxStrands = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'SegmentsPerStrand',\r\n description:\r\n 'Ribbon segments generated per strand. Independent of the control point count, so the same strands can be drawn coarser at a distance',\r\n type: 'int',\r\n default: 8,\r\n options: { group: 'Geometry', minValue: 1, maxValue: 64 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.segmentsPerStrand;\r\n },\r\n set(this: HairNode, value) {\r\n this.segmentsPerStrand = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'StrandWidthScale',\r\n description: 'Multiplier on the width stored in the strand data',\r\n type: 'float',\r\n default: 1,\r\n options: { group: 'Geometry', animatable: true, minValue: 0, maxValue: 100 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.strandWidthScale;\r\n },\r\n set(this: HairNode, value) {\r\n this.strandWidthScale = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'MinStrandWidth',\r\n description: 'Lower bound on ribbon width, in world units',\r\n type: 'float',\r\n default: 0,\r\n options: { group: 'Geometry', minValue: 0, maxValue: 1 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.minStrandWidth;\r\n },\r\n set(this: HairNode, value) {\r\n this.minStrandWidth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'MinPixelWidth',\r\n description:\r\n 'Lower bound on ribbon width in pixels. Real hair is thinner than a pixel; widening it and paying the coverage back in alpha keeps distant hair from breaking into a flickering dotted line',\r\n type: 'float',\r\n default: 1.4,\r\n options: { group: 'Geometry', minValue: 0, maxValue: 8 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.minPixelWidth;\r\n },\r\n set(this: HairNode, value) {\r\n this.minPixelWidth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'RootOcclusion',\r\n description:\r\n 'Darkens ambient light on strands near the root, standing in for the occlusion of being buried in the groom. Environment light is not shadowed, so without this a dense hairstyle is as bright inside as out. Direct light is left to the shadow map',\r\n type: 'float',\r\n default: 0.5,\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.rootOcclusion;\r\n },\r\n set(this: HairNode, value) {\r\n this.rootOcclusion = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'RootOcclusionRange',\r\n description: 'Fraction of a strand length over which the root occlusion fades out',\r\n type: 'float',\r\n default: 0.6,\r\n options: { group: 'Shading', minValue: 0.001, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return this.rootOcclusion <= 0;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.rootOcclusionRange;\r\n },\r\n set(this: HairNode, value) {\r\n this.rootOcclusionRange = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'StrandLOD',\r\n description: 'Drop strands with distance, redistributing their coverage to the survivors',\r\n type: 'bool',\r\n default: false,\r\n options: { group: 'Geometry' },\r\n get(this: HairNode, value) {\r\n value.bool[0] = this.strandLOD;\r\n },\r\n set(this: HairNode, value) {\r\n this.strandLOD = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'MinStrandLODRatio',\r\n description: 'Floor on the fraction of strands distance decimation keeps',\r\n type: 'float',\r\n default: 0.05,\r\n options: { group: 'Geometry', minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return !this.strandLOD;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.minStrandLODRatio;\r\n },\r\n set(this: HairNode, value) {\r\n this.minStrandLODRatio = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'AlbedoColor',\r\n description: 'Base color of the strands',\r\n type: 'rgba',\r\n default: [1, 1, 1, 1],\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.albedoColor.x;\r\n value.num[1] = this.albedoColor.y;\r\n value.num[2] = this.albedoColor.z;\r\n value.num[3] = this.albedoColor.w;\r\n },\r\n set(this: HairNode, value) {\r\n this.albedoColor = new Vector4(value.num[0], value.num[1], value.num[2], value.num[3]);\r\n }\r\n },\r\n {\r\n name: 'ShadingModel',\r\n description:\r\n 'Which scattering model shades the hair. Marschner derives the lobes from the fibre; Kajiya-Kay is the art-directed double lobe',\r\n type: 'string',\r\n default: 'kajiya-kay',\r\n options: {\r\n group: 'Shading',\r\n enum: {\r\n labels: ['Kajiya-Kay (double lobe)', 'Marschner (fibre)'],\r\n values: ['kajiya-kay', 'marschner']\r\n }\r\n },\r\n get(this: HairNode, value) {\r\n value.str[0] = this.shadingModel;\r\n },\r\n set(this: HairNode, value) {\r\n this.shadingModel = value.str[0] as HairShadingModel;\r\n }\r\n },\r\n {\r\n name: 'Specular1Color',\r\n description: 'Color of the primary (sharp, near-white) specular lobe',\r\n type: 'rgb',\r\n default: [0.35, 0.35, 0.35],\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return this.shadingModel !== 'kajiya-kay';\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.specular1Color.x;\r\n value.num[1] = this.specular1Color.y;\r\n value.num[2] = this.specular1Color.z;\r\n },\r\n set(this: HairNode, value) {\r\n this.specular1Color = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'Specular1Power',\r\n description: 'Exponent of the primary specular lobe',\r\n type: 'float',\r\n default: 160,\r\n options: { group: 'Shading', animatable: true, minValue: 1, maxValue: 1024 },\r\n isHidden(this: HairNode) {\r\n return this.shadingModel !== 'kajiya-kay';\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.specular1Power;\r\n },\r\n set(this: HairNode, value) {\r\n this.specular1Power = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Specular1Shift',\r\n description: 'Shift of the primary specular lobe along the strand',\r\n type: 'float',\r\n default: 0.05,\r\n options: { group: 'Shading', animatable: true, minValue: -1, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return this.shadingModel !== 'kajiya-kay';\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.specular1Shift;\r\n },\r\n set(this: HairNode, value) {\r\n this.specular1Shift = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Specular2Color',\r\n description: 'Color of the secondary (broad, tinted) specular lobe',\r\n type: 'rgb',\r\n default: [0.5, 0.35, 0.25],\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return this.shadingModel !== 'kajiya-kay';\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.specular2Color.x;\r\n value.num[1] = this.specular2Color.y;\r\n value.num[2] = this.specular2Color.z;\r\n },\r\n set(this: HairNode, value) {\r\n this.specular2Color = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'Specular2Power',\r\n description: 'Exponent of the secondary specular lobe',\r\n type: 'float',\r\n default: 20,\r\n options: { group: 'Shading', animatable: true, minValue: 1, maxValue: 1024 },\r\n isHidden(this: HairNode) {\r\n return this.shadingModel !== 'kajiya-kay';\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.specular2Power;\r\n },\r\n set(this: HairNode, value) {\r\n this.specular2Power = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Specular2Shift',\r\n description: 'Shift of the secondary specular lobe along the strand',\r\n type: 'float',\r\n default: -0.08,\r\n options: { group: 'Shading', animatable: true, minValue: -1, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return this.shadingModel !== 'kajiya-kay';\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.specular2Shift;\r\n },\r\n set(this: HairNode, value) {\r\n this.specular2Shift = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'MarschnerShift',\r\n description: 'Longitudinal shift of the Marschner lobes',\r\n type: 'float',\r\n default: 0.035,\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 0.5 },\r\n isHidden(this: HairNode) {\r\n return this.shadingModel !== 'marschner';\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.marschnerShift;\r\n },\r\n set(this: HairNode, value) {\r\n this.marschnerShift = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'MarschnerRoughness',\r\n description: 'Longitudinal roughness of the Marschner lobes',\r\n type: 'float',\r\n default: 0.25,\r\n options: { group: 'Shading', animatable: true, minValue: 0.01, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return this.shadingModel !== 'marschner';\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.marschnerRoughness;\r\n },\r\n set(this: HairNode, value) {\r\n this.marschnerRoughness = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'MarschnerIOR',\r\n description: 'Index of refraction of the fibre',\r\n type: 'float',\r\n default: 1.55,\r\n options: { group: 'Shading', animatable: true, minValue: 1, maxValue: 3 },\r\n isHidden(this: HairNode) {\r\n return this.shadingModel !== 'marschner';\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.marschnerIOR;\r\n },\r\n set(this: HairNode, value) {\r\n this.marschnerIOR = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'MarschnerAbsorption',\r\n description:\r\n 'How strongly pigmented the fibre is. Deepens the transmitted paths without touching the white surface reflection',\r\n type: 'float',\r\n default: 1,\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 8 },\r\n isHidden(this: HairNode) {\r\n return this.shadingModel !== 'marschner';\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.marschnerAbsorption;\r\n },\r\n set(this: HairNode, value) {\r\n this.marschnerAbsorption = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'MarschnerLobes',\r\n description: 'Relative weight of the R, TT and TRT lobes',\r\n type: 'vec3',\r\n default: [1, 1, 1],\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 4 },\r\n isHidden(this: HairNode) {\r\n return this.shadingModel !== 'marschner';\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.marschnerLobes.x;\r\n value.num[1] = this.marschnerLobes.y;\r\n value.num[2] = this.marschnerLobes.z;\r\n },\r\n set(this: HairNode, value) {\r\n this.marschnerLobes = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'StrandRoundness',\r\n description:\r\n 'How far the shading normal bends across the ribbon. At 0 a strand shades as a flat tape, at 1 as a cylinder',\r\n type: 'float',\r\n default: 1,\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.strandRoundness;\r\n },\r\n set(this: HairNode, value) {\r\n this.strandRoundness = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'DiffuseWrap',\r\n description: 'How far diffuse lighting wraps around the fibre',\r\n type: 'float',\r\n default: 0.5,\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.diffuseWrap;\r\n },\r\n set(this: HairNode, value) {\r\n this.diffuseWrap = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'TransmissionColor',\r\n description: 'Color of light transmitted through the fibre',\r\n type: 'rgb',\r\n default: [0.6, 0.35, 0.2],\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.transmissionColor.x;\r\n value.num[1] = this.transmissionColor.y;\r\n value.num[2] = this.transmissionColor.z;\r\n },\r\n set(this: HairNode, value) {\r\n this.transmissionColor = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'TransmissionIntensity',\r\n description: 'Strength of back-lit transmission',\r\n type: 'float',\r\n default: 0.35,\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 4 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.transmissionIntensity;\r\n },\r\n set(this: HairNode, value) {\r\n this.transmissionIntensity = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'TransmissionPower',\r\n description: 'Falloff exponent of back-lit transmission',\r\n type: 'float',\r\n default: 4,\r\n options: { group: 'Shading', animatable: true, minValue: 1, maxValue: 64 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.transmissionPower;\r\n },\r\n set(this: HairNode, value) {\r\n this.transmissionPower = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ScatterColor',\r\n description: 'Color of multiple scattering within the groom',\r\n type: 'rgb',\r\n default: [0.55, 0.32, 0.18],\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.scatterColor.x;\r\n value.num[1] = this.scatterColor.y;\r\n value.num[2] = this.scatterColor.z;\r\n },\r\n set(this: HairNode, value) {\r\n this.scatterColor = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'ScatterIntensity',\r\n description: 'Strength of multiple scattering',\r\n type: 'float',\r\n default: 0,\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 4 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.scatterIntensity;\r\n },\r\n set(this: HairNode, value) {\r\n this.scatterIntensity = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ScatterLocal',\r\n description: 'Share of scattering taken as local rather than global',\r\n type: 'float',\r\n default: 0.5,\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return this.scatterIntensity <= 0;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.scatterLocal;\r\n },\r\n set(this: HairNode, value) {\r\n this.scatterLocal = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ScatterWrap',\r\n description: 'How far scattered light wraps around the fibre',\r\n type: 'float',\r\n default: 0.8,\r\n options: { group: 'Shading', animatable: true, minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return this.scatterIntensity <= 0;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.scatterWrap;\r\n },\r\n set(this: HairNode, value) {\r\n this.scatterWrap = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'BlendMode',\r\n description:\r\n 'How the strands blend with what is behind them. The pixel-width floor pays its widening back in alpha, which only means anything once blending is on',\r\n type: 'string',\r\n default: 'none',\r\n options: {\r\n group: 'Transparency',\r\n enum: {\r\n labels: ['None', 'Blend', 'Additive', 'Max', 'Min'],\r\n values: ['none', 'blend', 'additive', 'max', 'min']\r\n }\r\n },\r\n get(this: HairNode, value) {\r\n value.str[0] = this.blendMode;\r\n },\r\n set(this: HairNode, value) {\r\n this.blendMode = value.str[0] as BlendMode;\r\n }\r\n },\r\n {\r\n name: 'AlphaCutoff',\r\n description: 'Alpha below which a fragment is discarded',\r\n type: 'float',\r\n default: 0,\r\n options: { group: 'Transparency', animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.alphaCutoff;\r\n },\r\n set(this: HairNode, value) {\r\n this.alphaCutoff = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'AlphaDither',\r\n description: 'Dither the alpha test, so a temporal filter resolves the soft edge',\r\n type: 'bool',\r\n default: false,\r\n options: { group: 'Transparency' },\r\n get(this: HairNode, value) {\r\n value.bool[0] = this.alphaDither;\r\n },\r\n set(this: HairNode, value) {\r\n this.alphaDither = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'CastShadow',\r\n description: 'If true, the groom is drawn into shadow maps',\r\n type: 'bool',\r\n default: true,\r\n options: { group: 'Shadow' },\r\n get(this: HairNode, value) {\r\n value.bool[0] = this.castShadow;\r\n },\r\n set(this: HairNode, value) {\r\n this.castShadow = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'TransparentShadowCaster',\r\n description: 'Let the shadow caster pass respect strand alpha, for softer self-shadowing',\r\n type: 'bool',\r\n default: false,\r\n options: { group: 'Shadow' },\r\n isHidden(this: HairNode) {\r\n return !this.castShadow;\r\n },\r\n get(this: HairNode, value) {\r\n value.bool[0] = this.transparentShadowCaster;\r\n },\r\n set(this: HairNode, value) {\r\n this.transparentShadowCaster = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'ShadowAlphaCutoff',\r\n description: 'Alpha below which a fragment casts no shadow',\r\n type: 'float',\r\n default: 0,\r\n options: { group: 'Shadow', minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return !this.castShadow || !this.transparentShadowCaster;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.shadowAlphaCutoff;\r\n },\r\n set(this: HairNode, value) {\r\n this.shadowAlphaCutoff = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Simulation',\r\n description:\r\n 'Run strand dynamics on this groom. WebGPU only; the strands stay in their authored pose elsewhere',\r\n type: 'bool',\r\n default: false,\r\n options: { group: 'Simulation' },\r\n get(this: HairNode, value) {\r\n value.bool[0] = this.simulationEnabled;\r\n },\r\n set(this: HairNode, value) {\r\n this.simulationEnabled = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'Gravity',\r\n description: 'World-space gravity acting on the strands',\r\n type: 'vec3',\r\n default: [0, -9.8, 0],\r\n options: { group: 'Simulation', animatable: true },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.gravity.x;\r\n value.num[1] = this.gravity.y;\r\n value.num[2] = this.gravity.z;\r\n },\r\n set(this: HairNode, value) {\r\n this.gravity = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'Local Stiffness',\r\n description: 'How strongly a strand keeps its authored shape. Holds the curl, and damps the groom',\r\n type: 'float',\r\n default: 0.9,\r\n options: { group: 'Simulation', animatable: true, minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.localStiffness;\r\n },\r\n set(this: HairNode, value) {\r\n this.localStiffness = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Local Iterations',\r\n description: 'Local shape constraint passes per substep. More converges closer',\r\n type: 'int',\r\n default: 2,\r\n options: { group: 'Simulation', minValue: 1, maxValue: 8 },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.localIterations;\r\n },\r\n set(this: HairNode, value) {\r\n this.localIterations = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Global Stiffness',\r\n description:\r\n 'Pull back to the authored pose. Off by default: it anchors points in place, which reads as a spring',\r\n type: 'float',\r\n default: 0,\r\n options: { group: 'Simulation', animatable: true, minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.globalStiffness;\r\n },\r\n set(this: HairNode, value) {\r\n this.globalStiffness = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Global Range',\r\n description: 'Fraction of a strand, from the root, the pose pull acts on',\r\n type: 'float',\r\n default: 0,\r\n options: { group: 'Simulation', minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.globalRange;\r\n },\r\n set(this: HairNode, value) {\r\n this.globalRange = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FTL Damping',\r\n description:\r\n 'Length correction handed back to the parent point as reverse momentum. Lower whips more',\r\n type: 'float',\r\n default: 0.7,\r\n options: { group: 'Simulation', minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.ftlDamping;\r\n },\r\n set(this: HairNode, value) {\r\n this.ftlDamping = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Shock Propagation',\r\n description:\r\n 'How much of the node motion strands are carried along by. 0 lags fully, 1 follows rigidly',\r\n type: 'float',\r\n default: 0.8,\r\n options: { group: 'Simulation', animatable: true, minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.vspCoeff;\r\n },\r\n set(this: HairNode, value) {\r\n this.vspCoeff = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Shock Threshold',\r\n description: 'Node acceleration above which strands stop lagging, in units per second squared',\r\n type: 'float',\r\n default: 50,\r\n options: { group: 'Simulation', minValue: 0, maxValue: 500 },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.vspAccelThreshold;\r\n },\r\n set(this: HairNode, value) {\r\n this.vspAccelThreshold = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Damping',\r\n description: 'Velocity lost each step. 0 keeps full inertia',\r\n type: 'float',\r\n default: 0.08,\r\n options: { group: 'Simulation', animatable: true, minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.damping;\r\n },\r\n set(this: HairNode, value) {\r\n this.damping = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Friction',\r\n description: 'Tangential motion removed at a contact',\r\n type: 'float',\r\n default: 0.2,\r\n options: { group: 'Simulation', minValue: 0, maxValue: 1 },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.friction;\r\n },\r\n set(this: HairNode, value) {\r\n this.friction = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Substeps',\r\n description: 'Integration substeps per fixed step. More is stabler and slower',\r\n type: 'int',\r\n default: 1,\r\n options: { group: 'Simulation', minValue: 1, maxValue: 8 },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.substeps;\r\n },\r\n set(this: HairNode, value) {\r\n this.substeps = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Max Speed Factor',\r\n description: 'Per-substep ceiling on point travel, in segment lengths',\r\n type: 'float',\r\n default: 4,\r\n options: { group: 'Simulation', minValue: 0, maxValue: 32 },\r\n isHidden(this: HairNode) {\r\n return !this.simulationEnabled;\r\n },\r\n get(this: HairNode, value) {\r\n value.num[0] = this.maxSpeedFactor;\r\n },\r\n set(this: HairNode, value) {\r\n this.maxSpeedFactor = value.num[0];\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n"],"names":["getHairNodeClass","ctor","HairNode","name","parent","GraphNode","createFunc","ctx","node","scene","obj","getProps","defineProps","description","type","default","options","group","label","mimeTypes","mimeTypeOf","get","value","str","hairAsset","set","setHairAsset","minValue","maxValue","num","strandStride","maxStrands","segmentsPerStrand","animatable","strandWidthScale","minStrandWidth","minPixelWidth","rootOcclusion","isHidden","rootOcclusionRange","bool","strandLOD","minStrandLODRatio","albedoColor","x","y","z","w","Vector4","enum","labels","values","shadingModel","specular1Color","Vector3","specular1Power","specular1Shift","specular2Color","specular2Power","specular2Shift","marschnerShift","marschnerRoughness","marschnerIOR","marschnerAbsorption","marschnerLobes","strandRoundness","diffuseWrap","transmissionColor","transmissionIntensity","transmissionPower","scatterColor","scatterIntensity","scatterLocal","scatterWrap","blendMode","alphaCutoff","alphaDither","castShadow","transparentShadowCaster","shadowAlphaCutoff","simulationEnabled","gravity","localStiffness","localIterations","globalStiffness","globalRange","ftlDamping","vspCoeff","vspAccelThreshold","damping","friction","substeps","maxSpeedFactor"],"mappings":"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"}