@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
@@ -1 +1 @@
1
- {"version":3,"file":"terrain.js","sources":["../../../../src/utility/serialization/scene/terrain.ts"],"sourcesContent":["import { GraphNode, type SceneNode } from '../../../scene';\r\nimport { defineProps, type SerializableClass } from '../types';\r\nimport { ClipmapTerrain } from '../../../scene/terrain-cm/terrain-cm';\r\nimport type { TerrainDebugMode } from '../../../material';\r\nimport type { Texture2D } from '@zephyr3d/device';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport type { ResourceManager } from '../manager';\r\nimport { JSONArray } from '../json';\r\nimport { getDevice } from '../../../app/api';\r\n\r\n// 'GRAS' in little endian. The legacy per-instance format starts with the\r\n// layer count, so any realistic legacy file can not collide with this magic.\r\nconst GRASS_DATA_MAGIC = 0x53415247;\r\nconst GRASS_DATA_VERSION = 1;\r\n\r\nfunction getTerrainGrassContent(terrain: ClipmapTerrain): ArrayBuffer {\r\n const grassRenderer = terrain.grassRenderer;\r\n const numLayers = grassRenderer.numLayers;\r\n let dataSize = 3 * 4;\r\n for (let i = 0; i < numLayers; i++) {\r\n dataSize += 4 * 4 + grassRenderer.getLayer(i).densityMap.length;\r\n }\r\n const data = new DataView(new ArrayBuffer(dataSize));\r\n const view = new Uint8Array(data.buffer);\r\n let offset = 0;\r\n data.setUint32(offset, GRASS_DATA_MAGIC, true);\r\n offset += 4;\r\n data.setUint32(offset, GRASS_DATA_VERSION, true);\r\n offset += 4;\r\n data.setUint32(offset, numLayers, true);\r\n offset += 4;\r\n for (let i = 0; i < numLayers; i++) {\r\n const layer = grassRenderer.getLayer(i);\r\n data.setUint32(offset, layer.densityMapWidth, true);\r\n offset += 4;\r\n data.setUint32(offset, layer.densityMapHeight, true);\r\n offset += 4;\r\n data.setUint32(offset, layer.cellsPerTexel, true);\r\n offset += 4;\r\n data.setUint32(offset, layer.densityMap.length, true);\r\n offset += 4;\r\n view.set(layer.densityMap, offset);\r\n offset += layer.densityMap.length;\r\n }\r\n return data.buffer;\r\n}\r\n\r\n/**\r\n * Imports grass data saved by the legacy per-instance format by baking the\r\n * blade instances into the per-layer density maps. Blade positions will be\r\n * re-derived from the density, so they will not match the original ones\r\n * exactly, but the local density is preserved.\r\n */\r\nfunction importLegacyGrassInstances(terrain: ClipmapTerrain, dataView: DataView): boolean {\r\n const grassRenderer = terrain.grassRenderer;\r\n const numLayers = dataView.getUint32(0, true);\r\n if (numLayers !== grassRenderer.numLayers) {\r\n console.error('Number of grass layers mismatch');\r\n return false;\r\n }\r\n let offset = 4;\r\n for (let i = 0; i < numLayers; i++) {\r\n const dataSize = dataView.getUint32(offset, true);\r\n offset += 4;\r\n if (dataSize > 0) {\r\n const layer = grassRenderer.getLayer(i);\r\n const w = layer.densityMapWidth;\r\n const h = layer.densityMapHeight;\r\n const counts = new Uint32Array(w * h);\r\n // legacy instance layout: x, y, sin(angle), cos(angle) as floats\r\n const floats = new Float32Array(dataView.buffer, dataView.byteOffset + offset, dataSize >> 2);\r\n const numInstances = floats.length >> 2;\r\n for (let j = 0; j < numInstances; j++) {\r\n const x = Math.min(Math.max(Math.floor(floats[j * 4 + 0] * w), 0), w - 1);\r\n const z = Math.min(Math.max(Math.floor(floats[j * 4 + 1] * h), 0), h - 1);\r\n counts[z * w + x]++;\r\n }\r\n const density = layer.densityMap;\r\n const maxPerTexel = layer.cellsPerTexel * layer.cellsPerTexel;\r\n for (let t = 0; t < counts.length; t++) {\r\n if (counts[t] > 0) {\r\n density[t] = Math.min(255, Math.round((counts[t] / maxPerTexel) * 255));\r\n }\r\n }\r\n layer.updateDensityRegion(0, 0, w, h);\r\n offset += dataSize;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nasync function getTerrainHeightMapContent(terrain: ClipmapTerrain): Promise<ArrayBuffer> {\r\n const heightmap = terrain.heightMap!;\r\n const buffer = new ArrayBuffer(2 * 4 + heightmap.width * heightmap.height * 2);\r\n const head = new DataView(buffer);\r\n head.setUint32(0, heightmap.width, true);\r\n head.setUint32(4, heightmap.height, true);\r\n const data = new Uint16Array(buffer, 2 * 4);\r\n if (heightmap.format === 'r16f') {\r\n await heightmap.readPixels(0, 0, heightmap.width, heightmap.height, 0, 0, data);\r\n } else if (heightmap.format === 'rgba16f') {\r\n // WebGL1 uses rgba16f for height map, so we need to convert\r\n const tmpData = new Uint16Array(heightmap.width * heightmap.height * 4);\r\n await heightmap.readPixels(0, 0, heightmap.width, heightmap.height, 0, 0, tmpData);\r\n for (let i = 0; i < heightmap.width * heightmap.height; i++) {\r\n data[i] = tmpData[i * 4 + 0]; // Use the red channel as height\r\n }\r\n }\r\n return buffer;\r\n}\r\n\r\nasync function getTerrainSplatMapContent(terrain: ClipmapTerrain): Promise<ArrayBuffer> {\r\n const device = getDevice();\r\n const splatMap = terrain.splatMap!;\r\n const numLayers = (terrain.material!.numDetailMaps + 3) >> 2;\r\n const info = device.getDeviceCaps().textureCaps.getTextureFormatInfo(splatMap.format);\r\n const buffer = new ArrayBuffer(\r\n 3 * 4 + numLayers * splatMap.width * splatMap.height * info.blockWidth * info.blockHeight * info.size\r\n );\r\n const head = new DataView(buffer);\r\n head.setUint32(0, splatMap.width, true);\r\n head.setUint32(4, splatMap.height, true);\r\n head.setUint32(8, numLayers, true);\r\n for (let i = 0; i < numLayers; i++) {\r\n const layerData = new Uint8Array(\r\n buffer,\r\n 3 * 4 + i * splatMap.width * splatMap.height * info.blockWidth * info.blockHeight * info.size\r\n );\r\n await splatMap.readPixels(0, 0, splatMap.width, splatMap.height, 0, 0, layerData);\r\n }\r\n return buffer;\r\n}\r\n\r\n/** @internal */\r\nexport function getTerrainClass(manager: ResourceManager): SerializableClass {\r\n return {\r\n ctor: ClipmapTerrain,\r\n name: 'ClipmapTerrain',\r\n parent: GraphNode,\r\n createFunc(ctx: SceneNode, init: number) {\r\n const node = new ClipmapTerrain(ctx.scene!);\r\n node.numDetailMaps = init;\r\n node.parent = ctx;\r\n return { obj: node };\r\n },\r\n getInitParams(obj: ClipmapTerrain) {\r\n return obj.numDetailMaps;\r\n },\r\n getProps() {\r\n return defineProps([\r\n {\r\n name: 'Resolution',\r\n description: 'Terrain resolution',\r\n type: 'int2',\r\n default: [256, 256],\r\n options: { minValue: 1, maxValue: 4096 },\r\n get(this: ClipmapTerrain, value) {\r\n value.num[0] = this.sizeX;\r\n value.num[1] = this.sizeZ;\r\n },\r\n set(this: ClipmapTerrain, value) {\r\n this.setSize(value.num[0], value.num[1]);\r\n }\r\n },\r\n {\r\n name: 'CastShadow',\r\n description: 'If true, the terrain can cast shadows',\r\n type: 'bool',\r\n default: true,\r\n get(this: ClipmapTerrain, value) {\r\n value.bool[0] = this.castShadow;\r\n },\r\n set(this: ClipmapTerrain, value) {\r\n this.castShadow = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'Wireframe',\r\n description: 'If true, the terrain will be rendered as wireframe',\r\n type: 'bool',\r\n default: false,\r\n isPersistent() {\r\n return false;\r\n },\r\n get(this: ClipmapTerrain, value) {\r\n value.bool[0] = this.wireframe;\r\n },\r\n set(this: ClipmapTerrain, value) {\r\n this.wireframe = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'Debug',\r\n description: 'Debug visualization mode for the terrain material',\r\n type: 'string',\r\n options: {\r\n enum: {\r\n labels: ['None', 'UV', 'VertexNormal', 'DetailNormal', 'Tangent', 'Binormal', 'Albedo'],\r\n values: ['none', 'uv', 'vertex_normal', 'detail_normal', 'tangent', 'bitangent', 'albedo']\r\n }\r\n },\r\n default: 'none',\r\n isPersistent() {\r\n return false;\r\n },\r\n get(this: ClipmapTerrain, value) {\r\n value.str[0] = this.material!.debugMode;\r\n },\r\n set(this: ClipmapTerrain, value) {\r\n this.material!.debugMode = value.str[0] as TerrainDebugMode;\r\n }\r\n },\r\n {\r\n name: 'GrassMaps',\r\n description: 'Serialized grass texture layers and blade settings',\r\n type: 'object',\r\n default: null,\r\n options: { objectTypes: [JSONArray] },\r\n phase: 0,\r\n isNullable() {\r\n return true;\r\n },\r\n isHidden() {\r\n return false;\r\n },\r\n get(this: ClipmapTerrain, value) {\r\n const data: { texture: string; bladeWidth: number; bladeHeight: number }[] = [];\r\n const numLayers = this.grassRenderer.numLayers;\r\n for (let i = 0; i < numLayers; i++) {\r\n const grassTexture = this.grassRenderer.getGrassTexture(i);\r\n const assetId = grassTexture ? (manager.getAssetId(grassTexture) ?? '') : '';\r\n data.push({\r\n texture: assetId,\r\n bladeWidth: this.grassRenderer.getBladeWidth(i),\r\n bladeHeight: this.grassRenderer.getBladeHeight(i)\r\n });\r\n }\r\n value.object[0] = new JSONArray(null, data);\r\n },\r\n async set(this: ClipmapTerrain, value) {\r\n const json = value.object[0] as JSONArray;\r\n const data =\r\n (json?.data as {\r\n texture: string;\r\n bladeWidth: number;\r\n bladeHeight: number;\r\n }[]) ?? [];\r\n for (let i = 0; i < data.length; i++) {\r\n const info = data[i];\r\n const assetId = info.texture;\r\n let texture: Nullable<Texture2D> = null;\r\n if (assetId) {\r\n try {\r\n texture = await manager.fetchTexture<Texture2D>(assetId);\r\n } catch (err) {\r\n console.error(`Load asset failed: ${value.str[0]}: ${err}`);\r\n texture = null;\r\n }\r\n if (!texture?.isTexture2D()) {\r\n console.error('Invalid texture type');\r\n texture?.dispose();\r\n texture = null;\r\n }\r\n }\r\n this.grassRenderer.addLayer(info.bladeWidth ?? 1, info.bladeHeight ?? 1, texture!);\r\n }\r\n }\r\n },\r\n {\r\n name: 'DetailMaps',\r\n description: 'Serialized terrain detail texture layers',\r\n type: 'object',\r\n default: null,\r\n options: { objectTypes: [JSONArray] },\r\n isNullable() {\r\n return true;\r\n },\r\n isHidden() {\r\n return false;\r\n },\r\n get(this: ClipmapTerrain, value) {\r\n const data: { albedo: string; normal: string; roughness: number; uvscale: number }[] = [];\r\n const material = this.material!;\r\n for (let i = 0; i < material.numDetailMaps; i++) {\r\n data.push({\r\n albedo: manager.getAssetId(material.getDetailMap(i)) ?? '',\r\n normal: manager.getAssetId(material.getDetailNormalMap(i)) ?? '',\r\n roughness: material.getDetailMapRoughness(i),\r\n uvscale: material.getDetailMapUVScale(i)\r\n });\r\n }\r\n value.object[0] = new JSONArray(null, data);\r\n },\r\n async set(this: ClipmapTerrain, value) {\r\n const json = value.object[0] as JSONArray;\r\n if (!json) {\r\n this.material!.numDetailMaps = 0;\r\n return;\r\n }\r\n const data =\r\n (json.data as {\r\n albedo: string;\r\n normal: string;\r\n roughness: number;\r\n uvscale: number;\r\n }[]) ?? [];\r\n const material = this.material!;\r\n material.numDetailMaps = data.length;\r\n for (let i = 0; i < this.numDetailMaps; i++) {\r\n const info = data[i];\r\n if (!info?.albedo) {\r\n material.setDetailMap(i, null);\r\n } else {\r\n let tex: Nullable<Texture2D>;\r\n try {\r\n tex = await manager.fetchTexture<Texture2D>(info.albedo);\r\n } catch (err) {\r\n console.error(`Load asset failed: ${value.str[0]}: ${err}`);\r\n tex = null;\r\n }\r\n if (tex?.isTexture2D()) {\r\n material.setDetailMap(i, tex);\r\n } else {\r\n console.error('Invalid texture type');\r\n }\r\n }\r\n if (!info?.normal) {\r\n material.setDetailNormalMap(i, null);\r\n } else {\r\n let tex: Nullable<Texture2D>;\r\n try {\r\n tex = await manager.fetchTexture<Texture2D>(info.normal);\r\n } catch (err) {\r\n console.error(`Load asset failed: ${value.str[0]}: ${err}`);\r\n tex = null;\r\n }\r\n if (tex?.isTexture2D()) {\r\n material.setDetailMap(i, tex);\r\n } else {\r\n console.error('Invalid texture type');\r\n }\r\n }\r\n material.setDetailMapRoughness(i, info.roughness ?? 1);\r\n material.setDetailMapUVScale(i, info.uvscale ?? 100);\r\n }\r\n }\r\n },\r\n {\r\n name: 'SplatMap',\r\n description: 'Serialized splat-map texture data for terrain layers',\r\n type: 'embedded',\r\n default: null,\r\n isHidden() {\r\n return true;\r\n },\r\n get(this: ClipmapTerrain, value) {\r\n value.str[0] = this.splatMapAssetId;\r\n value.object[0] = getTerrainSplatMapContent(this);\r\n },\r\n async set(this: ClipmapTerrain, value) {\r\n if (value.str[0]) {\r\n const path = value.str[0];\r\n const data = (await manager.VFS.readFile(path, { encoding: 'binary' })) as ArrayBuffer;\r\n if (!data) {\r\n console.error('Load height map failed');\r\n return;\r\n }\r\n const dataView = new DataView(data);\r\n const width = dataView.getUint32(0, true);\r\n const height = dataView.getUint32(4, true);\r\n const numLayers = dataView.getUint32(8, true);\r\n const splatMap = this.splatMap!;\r\n if (splatMap.width !== width || splatMap.height !== height) {\r\n console.error('Invalid splatmap data');\r\n return;\r\n }\r\n for (let i = 0; i < numLayers; i++) {\r\n const content = new Uint8Array(data, 3 * 4 + i * width * height * 4, width * height * 4);\r\n splatMap.update(content, 0, 0, i, width, height, 1);\r\n }\r\n this.splatMapAssetId = value.str[0];\r\n }\r\n }\r\n },\r\n {\r\n name: 'Grass',\r\n description: 'Serialized grass instance data for the terrain',\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: ClipmapTerrain, value) {\r\n value.str[0] = this.grassAssetId;\r\n value.object[0] = getTerrainGrassContent(this);\r\n },\r\n async set(this: ClipmapTerrain, value) {\r\n if (value.str[0]) {\r\n const path = value.str[0];\r\n const data = (await manager.VFS.readFile(path, { encoding: 'binary' })) as ArrayBuffer;\r\n if (!data || data.byteLength < 4) {\r\n console.error('Load grass data failed');\r\n return;\r\n }\r\n const dataView = new DataView(data);\r\n if (dataView.getUint32(0, true) === GRASS_DATA_MAGIC) {\r\n // density map format, version at offset 4 is currently always 1\r\n const numLayers = dataView.getUint32(8, true);\r\n if (numLayers !== this.grassRenderer.numLayers) {\r\n console.error('Number of grass layers mismatch');\r\n return;\r\n }\r\n let offset = 12;\r\n for (let i = 0; i < numLayers; i++) {\r\n const width = dataView.getUint32(offset, true);\r\n const height = dataView.getUint32(offset + 4, true);\r\n const cellsPerTexel = dataView.getUint32(offset + 8, true);\r\n const byteLength = dataView.getUint32(offset + 12, true);\r\n offset += 16;\r\n const densityData = new Uint8Array(data, offset, byteLength).slice();\r\n offset += byteLength;\r\n this.grassRenderer.getLayer(i).setDensityData(width, height, cellsPerTexel, densityData);\r\n }\r\n } else if (!importLegacyGrassInstances(this, dataView)) {\r\n return;\r\n }\r\n this.grassAssetId = value.str[0];\r\n }\r\n }\r\n },\r\n {\r\n name: 'HeightMap',\r\n description: 'Serialized terrain height map data',\r\n type: 'embedded',\r\n default: null,\r\n isHidden() {\r\n return true;\r\n },\r\n get(this: ClipmapTerrain, value) {\r\n value.str[0] = this.heightMapAssetId;\r\n value.object[0] = getTerrainHeightMapContent(this);\r\n },\r\n async set(this: ClipmapTerrain, value) {\r\n if (value.str[0]) {\r\n const path = value.str[0];\r\n const data = (await manager.VFS.readFile(path, { encoding: 'binary' })) as ArrayBuffer;\r\n if (!data) {\r\n console.error('Load height map failed');\r\n return;\r\n }\r\n const dataView = new DataView(data);\r\n const width = dataView.getUint32(0, true);\r\n const height = dataView.getUint32(4, true);\r\n const heightMap = this.createHeightMapTexture(width, height)!;\r\n if (heightMap.format !== 'r16f') {\r\n if (heightMap.format === 'rgba16f') {\r\n // WebGL1 uses rgba16f for height map, so we need to convert\r\n const rgbaData = new Uint16Array(width * height * 4);\r\n const rData = new Uint16Array(data, 8);\r\n for (let i = 0; i < width * height; i++) {\r\n rgbaData[i * 4 + 0] = rData[i];\r\n }\r\n heightMap.update(rgbaData, 0, 0, width, height);\r\n } else {\r\n throw new Error(`Unsupported height map format: ${heightMap.format}`);\r\n }\r\n } else {\r\n heightMap.update(new Uint16Array(data, 8), 0, 0, width, height);\r\n }\r\n this.heightMap = heightMap;\r\n this.heightMapAssetId = value.str[0];\r\n this.updateBoundingBox();\r\n }\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n"],"names":["GRASS_DATA_MAGIC","GRASS_DATA_VERSION","getTerrainGrassContent","terrain","grassRenderer","numLayers","dataSize","i","getLayer","densityMap","length","data","DataView","ArrayBuffer","view","Uint8Array","buffer","offset","setUint32","layer","densityMapWidth","densityMapHeight","cellsPerTexel","set","importLegacyGrassInstances","dataView","getUint32","console","error","w","h","counts","Uint32Array","floats","Float32Array","byteOffset","numInstances","j","x","Math","min","max","floor","z","density","maxPerTexel","t","round","updateDensityRegion","getTerrainHeightMapContent","heightmap","heightMap","width","height","head","Uint16Array","format","readPixels","tmpData","getTerrainSplatMapContent","device","getDevice","splatMap","material","numDetailMaps","info","getDeviceCaps","textureCaps","getTextureFormatInfo","blockWidth","blockHeight","size","layerData","getTerrainClass","manager","ctor","ClipmapTerrain","name","parent","GraphNode","createFunc","ctx","init","node","scene","obj","getInitParams","getProps","defineProps","description","type","default","options","minValue","maxValue","get","value","num","sizeX","sizeZ","setSize","bool","castShadow","isPersistent","wireframe","enum","labels","values","str","debugMode","objectTypes","JSONArray","phase","isNullable","isHidden","grassTexture","getGrassTexture","assetId","getAssetId","push","texture","bladeWidth","getBladeWidth","bladeHeight","getBladeHeight","object","json","fetchTexture","err","isTexture2D","dispose","addLayer","albedo","getDetailMap","normal","getDetailNormalMap","roughness","getDetailMapRoughness","uvscale","getDetailMapUVScale","setDetailMap","tex","setDetailNormalMap","setDetailMapRoughness","setDetailMapUVScale","splatMapAssetId","path","VFS","readFile","encoding","content","update","grassAssetId","byteLength","densityData","slice","setDensityData","heightMapAssetId","createHeightMapTexture","rgbaData","rData","Error","updateBoundingBox"],"mappings":"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"}
1
+ {"version":3,"file":"terrain.js","sources":["../../../../src/utility/serialization/scene/terrain.ts"],"sourcesContent":["import { GraphNode, type SceneNode } from '../../../scene';\r\nimport { defineProps, type SerializableClass } from '../types';\r\nimport { ClipmapTerrain } from '../../../scene/terrain-cm/terrain-cm';\r\nimport { DEFAULT_BLADE_HEIGHT, DEFAULT_BLADE_WIDTH } from '../../../scene/terrain-cm/grass';\r\nimport type { TerrainDebugMode } from '../../../material';\r\nimport type { Texture2D } from '@zephyr3d/device';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport type { ResourceManager } from '../manager';\r\nimport { JSONArray } from '../json';\r\nimport { getDevice } from '../../../app/api';\r\n\r\n// 'GRAS' in little endian. The legacy per-instance format starts with the\r\n// layer count, so any realistic legacy file can not collide with this magic.\r\nconst GRASS_DATA_MAGIC = 0x53415247;\r\nconst GRASS_DATA_VERSION = 1;\r\n\r\n/** One entry of the GrassMaps property */\r\ntype GrassLayerData = {\r\n texture: string;\r\n bladeWidth: number;\r\n bladeHeight: number;\r\n drawDistance?: number;\r\n farDensity?: number;\r\n /** Absent in scenes saved before blade layers, which are all card layers */\r\n kind?: 'card' | 'blade';\r\n blade?: {\r\n heightRandomness?: number;\r\n widthRandomness?: number;\r\n tilt?: number;\r\n tiltRandomness?: number;\r\n bend?: number;\r\n bendRandomness?: number;\r\n taper?: number;\r\n tipDetail?: number;\r\n clumpSize?: number;\r\n clumpHeightVariation?: number;\r\n clumpPull?: number;\r\n clumpSameDirection?: number;\r\n clumpFaceAway?: number;\r\n clumpColorVariation?: number;\r\n rootOcclusion?: number;\r\n roundness?: number;\r\n viewThickening?: number;\r\n farNormalStart?: number;\r\n farNormalEnd?: number;\r\n farRoughness?: number;\r\n minScreenWidth?: number;\r\n windFacing?: number;\r\n windLean?: number;\r\n swayAmplitude?: number;\r\n swaySpeed?: number;\r\n lodDistance?: number;\r\n rootColor?: [number, number, number];\r\n tipColor?: [number, number, number];\r\n transmissionColor?: [number, number, number];\r\n };\r\n card?: {\r\n windLean?: number;\r\n swayAmplitude?: number;\r\n swaySpeed?: number;\r\n };\r\n};\r\n\r\nfunction getTerrainGrassContent(terrain: ClipmapTerrain): ArrayBuffer {\r\n const grassRenderer = terrain.grassRenderer;\r\n const numLayers = grassRenderer.numLayers;\r\n let dataSize = 3 * 4;\r\n for (let i = 0; i < numLayers; i++) {\r\n dataSize += 4 * 4 + grassRenderer.getLayer(i).densityMap.length;\r\n }\r\n const data = new DataView(new ArrayBuffer(dataSize));\r\n const view = new Uint8Array(data.buffer);\r\n let offset = 0;\r\n data.setUint32(offset, GRASS_DATA_MAGIC, true);\r\n offset += 4;\r\n data.setUint32(offset, GRASS_DATA_VERSION, true);\r\n offset += 4;\r\n data.setUint32(offset, numLayers, true);\r\n offset += 4;\r\n for (let i = 0; i < numLayers; i++) {\r\n const layer = grassRenderer.getLayer(i);\r\n data.setUint32(offset, layer.densityMapWidth, true);\r\n offset += 4;\r\n data.setUint32(offset, layer.densityMapHeight, true);\r\n offset += 4;\r\n data.setUint32(offset, layer.cellsPerTexel, true);\r\n offset += 4;\r\n data.setUint32(offset, layer.densityMap.length, true);\r\n offset += 4;\r\n view.set(layer.densityMap, offset);\r\n offset += layer.densityMap.length;\r\n }\r\n return data.buffer;\r\n}\r\n\r\n/**\r\n * Imports grass data saved by the legacy per-instance format by baking the\r\n * blade instances into the per-layer density maps. Blade positions will be\r\n * re-derived from the density, so they will not match the original ones\r\n * exactly, but the local density is preserved.\r\n */\r\nfunction importLegacyGrassInstances(terrain: ClipmapTerrain, dataView: DataView): boolean {\r\n const grassRenderer = terrain.grassRenderer;\r\n const numLayers = dataView.getUint32(0, true);\r\n if (numLayers !== grassRenderer.numLayers) {\r\n console.error('Number of grass layers mismatch');\r\n return false;\r\n }\r\n let offset = 4;\r\n for (let i = 0; i < numLayers; i++) {\r\n const dataSize = dataView.getUint32(offset, true);\r\n offset += 4;\r\n if (dataSize > 0) {\r\n const layer = grassRenderer.getLayer(i);\r\n const w = layer.densityMapWidth;\r\n const h = layer.densityMapHeight;\r\n const counts = new Uint32Array(w * h);\r\n // legacy instance layout: x, y, sin(angle), cos(angle) as floats\r\n const floats = new Float32Array(dataView.buffer, dataView.byteOffset + offset, dataSize >> 2);\r\n const numInstances = floats.length >> 2;\r\n for (let j = 0; j < numInstances; j++) {\r\n const x = Math.min(Math.max(Math.floor(floats[j * 4 + 0] * w), 0), w - 1);\r\n const z = Math.min(Math.max(Math.floor(floats[j * 4 + 1] * h), 0), h - 1);\r\n counts[z * w + x]++;\r\n }\r\n const density = layer.densityMap;\r\n const maxPerTexel = layer.cellsPerTexel * layer.cellsPerTexel;\r\n for (let t = 0; t < counts.length; t++) {\r\n if (counts[t] > 0) {\r\n density[t] = Math.min(255, Math.round((counts[t] / maxPerTexel) * 255));\r\n }\r\n }\r\n layer.updateDensityRegion(0, 0, w, h);\r\n offset += dataSize;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nasync function getTerrainHeightMapContent(terrain: ClipmapTerrain): Promise<ArrayBuffer> {\r\n const heightmap = terrain.heightMap!;\r\n const buffer = new ArrayBuffer(2 * 4 + heightmap.width * heightmap.height * 2);\r\n const head = new DataView(buffer);\r\n head.setUint32(0, heightmap.width, true);\r\n head.setUint32(4, heightmap.height, true);\r\n const data = new Uint16Array(buffer, 2 * 4);\r\n if (heightmap.format === 'r16f') {\r\n await heightmap.readPixels(0, 0, heightmap.width, heightmap.height, 0, 0, data);\r\n } else if (heightmap.format === 'rgba16f') {\r\n // An rgba16f height map keeps the height in the red channel\r\n const tmpData = new Uint16Array(heightmap.width * heightmap.height * 4);\r\n await heightmap.readPixels(0, 0, heightmap.width, heightmap.height, 0, 0, tmpData);\r\n for (let i = 0; i < heightmap.width * heightmap.height; i++) {\r\n data[i] = tmpData[i * 4 + 0]; // Use the red channel as height\r\n }\r\n }\r\n return buffer;\r\n}\r\n\r\nasync function getTerrainSplatMapContent(terrain: ClipmapTerrain): Promise<ArrayBuffer> {\r\n const device = getDevice();\r\n const splatMap = terrain.splatMap!;\r\n const numLayers = (terrain.material!.numDetailMaps + 3) >> 2;\r\n const info = device.getDeviceCaps().textureCaps.getTextureFormatInfo(splatMap.format);\r\n const buffer = new ArrayBuffer(\r\n 3 * 4 + numLayers * splatMap.width * splatMap.height * info.blockWidth * info.blockHeight * info.size\r\n );\r\n const head = new DataView(buffer);\r\n head.setUint32(0, splatMap.width, true);\r\n head.setUint32(4, splatMap.height, true);\r\n head.setUint32(8, numLayers, true);\r\n for (let i = 0; i < numLayers; i++) {\r\n const layerData = new Uint8Array(\r\n buffer,\r\n 3 * 4 + i * splatMap.width * splatMap.height * info.blockWidth * info.blockHeight * info.size\r\n );\r\n // Layer i holds the weights of detail layers 4i..4i+3\r\n await splatMap.readPixels(0, 0, splatMap.width, splatMap.height, i, 0, layerData);\r\n }\r\n return buffer;\r\n}\r\n\r\n/** @internal */\r\nexport function getTerrainClass(manager: ResourceManager): SerializableClass {\r\n return {\r\n ctor: ClipmapTerrain,\r\n name: 'ClipmapTerrain',\r\n parent: GraphNode,\r\n createFunc(ctx: SceneNode, init: number) {\r\n const node = new ClipmapTerrain(ctx.scene!);\r\n node.numDetailMaps = init;\r\n node.parent = ctx;\r\n return { obj: node };\r\n },\r\n getInitParams(obj: ClipmapTerrain) {\r\n return obj.numDetailMaps;\r\n },\r\n getProps() {\r\n return defineProps([\r\n {\r\n name: 'Resolution',\r\n description: 'Terrain resolution',\r\n type: 'int2',\r\n default: [256, 256],\r\n options: { minValue: 1, maxValue: 4096 },\r\n get(this: ClipmapTerrain, value) {\r\n value.num[0] = this.sizeX;\r\n value.num[1] = this.sizeZ;\r\n },\r\n set(this: ClipmapTerrain, value) {\r\n this.setSize(value.num[0], value.num[1]);\r\n }\r\n },\r\n {\r\n name: 'CastShadow',\r\n description: 'If true, the terrain can cast shadows',\r\n type: 'bool',\r\n default: true,\r\n get(this: ClipmapTerrain, value) {\r\n value.bool[0] = this.castShadow;\r\n },\r\n set(this: ClipmapTerrain, value) {\r\n this.castShadow = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'RuntimeVirtualTexture',\r\n description:\r\n 'Blends the detail layers once into a texture cache instead of every frame for every pixel. ' +\r\n 'Shading cost no longer grows with the number of layers; close up the ground can look a bit ' +\r\n 'softer while the finest detail streams in. WebGPU only',\r\n type: 'bool',\r\n default: false,\r\n get(this: ClipmapTerrain, value) {\r\n value.bool[0] = this.runtimeVirtualTexture;\r\n },\r\n set(this: ClipmapTerrain, value) {\r\n this.runtimeVirtualTexture = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'Wireframe',\r\n description: 'If true, the terrain will be rendered as wireframe',\r\n type: 'bool',\r\n default: false,\r\n isPersistent() {\r\n return false;\r\n },\r\n get(this: ClipmapTerrain, value) {\r\n value.bool[0] = this.wireframe;\r\n },\r\n set(this: ClipmapTerrain, value) {\r\n this.wireframe = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'Debug',\r\n description: 'Debug visualization mode for the terrain material',\r\n type: 'string',\r\n options: {\r\n enum: {\r\n labels: ['None', 'UV', 'VertexNormal', 'DetailNormal', 'Tangent', 'Binormal', 'Albedo'],\r\n values: ['none', 'uv', 'vertex_normal', 'detail_normal', 'tangent', 'bitangent', 'albedo']\r\n }\r\n },\r\n default: 'none',\r\n isPersistent() {\r\n return false;\r\n },\r\n get(this: ClipmapTerrain, value) {\r\n value.str[0] = this.material!.debugMode;\r\n },\r\n set(this: ClipmapTerrain, value) {\r\n this.material!.debugMode = value.str[0] as TerrainDebugMode;\r\n }\r\n },\r\n {\r\n name: 'GrassMaps',\r\n description: 'Serialized grass texture layers and blade settings',\r\n type: 'object',\r\n default: null,\r\n options: { objectTypes: [JSONArray] },\r\n phase: 0,\r\n isNullable() {\r\n return true;\r\n },\r\n isHidden() {\r\n return false;\r\n },\r\n get(this: ClipmapTerrain, value) {\r\n const data: GrassLayerData[] = [];\r\n const numLayers = this.grassRenderer.numLayers;\r\n for (let i = 0; i < numLayers; i++) {\r\n const grassTexture = this.grassRenderer.getGrassTexture(i);\r\n const assetId = grassTexture ? (manager.getAssetId(grassTexture) ?? '') : '';\r\n const layer = this.grassRenderer.getLayer(i);\r\n const info: GrassLayerData = {\r\n texture: assetId,\r\n bladeWidth: this.grassRenderer.getBladeWidth(i),\r\n bladeHeight: this.grassRenderer.getBladeHeight(i),\r\n drawDistance: this.grassRenderer.getDrawDistance(i),\r\n farDensity: this.grassRenderer.getFarDensity(i)\r\n };\r\n if (layer.kind === 'blade') {\r\n info.kind = 'blade';\r\n info.blade = {\r\n heightRandomness: layer.heightRandomness,\r\n widthRandomness: layer.widthRandomness,\r\n tilt: layer.tilt,\r\n tiltRandomness: layer.tiltRandomness,\r\n bend: layer.bend,\r\n bendRandomness: layer.bendRandomness,\r\n taper: layer.taper,\r\n tipDetail: layer.tipDetail,\r\n clumpSize: layer.clumpSize,\r\n clumpHeightVariation: layer.clumpHeightVariation,\r\n clumpPull: layer.clumpPull,\r\n clumpSameDirection: layer.clumpSameDirection,\r\n clumpFaceAway: layer.clumpFaceAway,\r\n clumpColorVariation: layer.clumpColorVariation,\r\n rootOcclusion: layer.rootOcclusion,\r\n roundness: layer.roundness,\r\n viewThickening: layer.viewThickening,\r\n farNormalStart: layer.farNormalStart,\r\n farNormalEnd: layer.farNormalEnd,\r\n farRoughness: layer.farRoughness,\r\n minScreenWidth: layer.minScreenWidth,\r\n windFacing: layer.windFacing,\r\n windLean: layer.windLean,\r\n swayAmplitude: layer.swayAmplitude,\r\n swaySpeed: layer.swaySpeed,\r\n lodDistance: layer.lodDistance,\r\n rootColor: [layer.rootColor.x, layer.rootColor.y, layer.rootColor.z],\r\n tipColor: [layer.tipColor.x, layer.tipColor.y, layer.tipColor.z],\r\n transmissionColor: [\r\n layer.transmissionColor.x,\r\n layer.transmissionColor.y,\r\n layer.transmissionColor.z\r\n ]\r\n };\r\n } else {\r\n info.card = {\r\n windLean: layer.windLean,\r\n swayAmplitude: layer.swayAmplitude,\r\n swaySpeed: layer.swaySpeed\r\n };\r\n }\r\n data.push(info);\r\n }\r\n value.object[0] = new JSONArray(null, data);\r\n },\r\n async set(this: ClipmapTerrain, value) {\r\n const json = value.object[0] as JSONArray;\r\n const data = (json?.data as GrassLayerData[]) ?? [];\r\n for (let i = 0; i < data.length; i++) {\r\n const info = data[i];\r\n const assetId = info.texture;\r\n let texture: Nullable<Texture2D> = null;\r\n if (assetId) {\r\n try {\r\n texture = await manager.fetchTexture<Texture2D>(assetId);\r\n } catch (err) {\r\n console.error(`Load asset failed: ${value.str[0]}: ${err}`);\r\n texture = null;\r\n }\r\n if (!texture?.isTexture2D()) {\r\n console.error('Invalid texture type');\r\n texture?.dispose();\r\n texture = null;\r\n }\r\n }\r\n const isBlade = info.kind === 'blade';\r\n const layer = this.grassRenderer.addLayer(\r\n info.bladeWidth ?? (isBlade ? DEFAULT_BLADE_WIDTH : 1),\r\n info.bladeHeight ?? (isBlade ? DEFAULT_BLADE_HEIGHT : 1),\r\n texture,\r\n isBlade ? 'blade' : 'card'\r\n );\r\n const blade = info.blade;\r\n const card = info.card;\r\n if (info.kind !== 'blade' && card) {\r\n const grassLayer = this.grassRenderer.getLayer(layer);\r\n grassLayer.windLean = card.windLean ?? grassLayer.windLean;\r\n grassLayer.swayAmplitude = card.swayAmplitude ?? grassLayer.swayAmplitude;\r\n grassLayer.swaySpeed = card.swaySpeed ?? grassLayer.swaySpeed;\r\n }\r\n if (info.kind === 'blade' && blade) {\r\n const grassLayer = this.grassRenderer.getLayer(layer);\r\n grassLayer.heightRandomness = blade.heightRandomness ?? grassLayer.heightRandomness;\r\n grassLayer.widthRandomness = blade.widthRandomness ?? grassLayer.widthRandomness;\r\n grassLayer.tilt = blade.tilt ?? grassLayer.tilt;\r\n grassLayer.tiltRandomness = blade.tiltRandomness ?? grassLayer.tiltRandomness;\r\n grassLayer.bend = blade.bend ?? grassLayer.bend;\r\n grassLayer.bendRandomness = blade.bendRandomness ?? grassLayer.bendRandomness;\r\n grassLayer.taper = blade.taper ?? grassLayer.taper;\r\n grassLayer.tipDetail = blade.tipDetail ?? grassLayer.tipDetail;\r\n grassLayer.clumpSize = blade.clumpSize ?? grassLayer.clumpSize;\r\n grassLayer.clumpHeightVariation =\r\n blade.clumpHeightVariation ?? grassLayer.clumpHeightVariation;\r\n grassLayer.clumpPull = blade.clumpPull ?? grassLayer.clumpPull;\r\n grassLayer.clumpSameDirection = blade.clumpSameDirection ?? grassLayer.clumpSameDirection;\r\n grassLayer.clumpFaceAway = blade.clumpFaceAway ?? grassLayer.clumpFaceAway;\r\n grassLayer.clumpColorVariation = blade.clumpColorVariation ?? grassLayer.clumpColorVariation;\r\n grassLayer.rootOcclusion = blade.rootOcclusion ?? grassLayer.rootOcclusion;\r\n grassLayer.roundness = blade.roundness ?? grassLayer.roundness;\r\n grassLayer.viewThickening = blade.viewThickening ?? grassLayer.viewThickening;\r\n grassLayer.farNormalStart = blade.farNormalStart ?? grassLayer.farNormalStart;\r\n grassLayer.farNormalEnd = blade.farNormalEnd ?? grassLayer.farNormalEnd;\r\n grassLayer.farRoughness = blade.farRoughness ?? grassLayer.farRoughness;\r\n grassLayer.minScreenWidth = blade.minScreenWidth ?? grassLayer.minScreenWidth;\r\n grassLayer.windFacing = blade.windFacing ?? grassLayer.windFacing;\r\n grassLayer.windLean = blade.windLean ?? grassLayer.windLean;\r\n grassLayer.swayAmplitude = blade.swayAmplitude ?? grassLayer.swayAmplitude;\r\n grassLayer.swaySpeed = blade.swaySpeed ?? grassLayer.swaySpeed;\r\n grassLayer.lodDistance = blade.lodDistance ?? grassLayer.lodDistance;\r\n if (blade.rootColor) {\r\n grassLayer.rootColor = new Vector4(\r\n blade.rootColor[0],\r\n blade.rootColor[1],\r\n blade.rootColor[2],\r\n 1\r\n );\r\n }\r\n if (blade.tipColor) {\r\n grassLayer.tipColor = new Vector4(\r\n blade.tipColor[0],\r\n blade.tipColor[1],\r\n blade.tipColor[2],\r\n 1\r\n );\r\n }\r\n if (blade.transmissionColor) {\r\n grassLayer.transmissionColor = new Vector4(\r\n blade.transmissionColor[0],\r\n blade.transmissionColor[1],\r\n blade.transmissionColor[2],\r\n 1\r\n );\r\n }\r\n }\r\n if (info.drawDistance !== undefined) {\r\n this.grassRenderer.setDrawDistance(layer, info.drawDistance);\r\n }\r\n if (info.farDensity !== undefined) {\r\n this.grassRenderer.setFarDensity(layer, info.farDensity);\r\n }\r\n }\r\n }\r\n },\r\n {\r\n name: 'DetailMaps',\r\n description: 'Serialized terrain detail texture layers',\r\n type: 'object',\r\n default: null,\r\n options: { objectTypes: [JSONArray] },\r\n isNullable() {\r\n return true;\r\n },\r\n isHidden() {\r\n return false;\r\n },\r\n get(this: ClipmapTerrain, value) {\r\n const data: {\r\n albedo: string;\r\n normal: string;\r\n roughness: number;\r\n uvscale: number;\r\n hexTiling: boolean;\r\n hexParams: [number, number, number];\r\n }[] = [];\r\n const material = this.material!;\r\n for (let i = 0; i < material.numDetailMaps; i++) {\r\n data.push({\r\n albedo: manager.getAssetId(material.getDetailMap(i)) ?? '',\r\n normal: manager.getAssetId(material.getDetailNormalMap(i)) ?? '',\r\n roughness: material.getDetailMapRoughness(i),\r\n uvscale: material.getDetailMapUVScale(i),\r\n hexTiling: material.getDetailMapHexTiling(i),\r\n hexParams: material.getDetailMapHexParams(i)\r\n });\r\n }\r\n value.object[0] = new JSONArray(null, data);\r\n },\r\n async set(this: ClipmapTerrain, value) {\r\n const json = value.object[0] as JSONArray;\r\n if (!json) {\r\n this.material!.numDetailMaps = 0;\r\n return;\r\n }\r\n const data =\r\n (json.data as {\r\n albedo: string;\r\n normal: string;\r\n roughness: number;\r\n uvscale: number;\r\n hexTiling?: boolean;\r\n hexParams?: [number, number, number];\r\n }[]) ?? [];\r\n const material = this.material!;\r\n material.numDetailMaps = data.length;\r\n for (let i = 0; i < this.numDetailMaps; i++) {\r\n const info = data[i];\r\n if (!info?.albedo) {\r\n material.setDetailMap(i, null);\r\n } else {\r\n let tex: Nullable<Texture2D>;\r\n try {\r\n tex = await manager.fetchTexture<Texture2D>(info.albedo);\r\n } catch (err) {\r\n console.error(`Load asset failed: ${info.albedo}: ${err}`);\r\n tex = null;\r\n }\r\n if (tex?.isTexture2D()) {\r\n material.setDetailMap(i, tex);\r\n } else {\r\n console.error('Invalid texture type');\r\n }\r\n }\r\n if (!info?.normal) {\r\n material.setDetailNormalMap(i, null);\r\n } else {\r\n let tex: Nullable<Texture2D>;\r\n try {\r\n // Normal maps hold vectors, not colors: loaded as sRGB, 0.5 would decode to 0.21\r\n // and tilt every normal (the editor picks them with linearColorSpace too)\r\n tex = await manager.fetchTexture<Texture2D>(info.normal, { linearColorSpace: true });\r\n } catch (err) {\r\n console.error(`Load asset failed: ${info.normal}: ${err}`);\r\n tex = null;\r\n }\r\n if (tex?.isTexture2D()) {\r\n material.setDetailNormalMap(i, tex);\r\n } else {\r\n console.error('Invalid texture type');\r\n }\r\n }\r\n material.setDetailMapRoughness(i, info.roughness ?? 1);\r\n material.setDetailMapUVScale(i, info.uvscale ?? 100);\r\n if (info.hexParams) {\r\n material.setDetailMapHexParams(i, info.hexParams[0], info.hexParams[1], info.hexParams[2]);\r\n }\r\n material.setDetailMapHexTiling(i, !!info.hexTiling);\r\n }\r\n }\r\n },\r\n {\r\n name: 'SplatMap',\r\n description: 'Serialized splat-map texture data for terrain layers',\r\n type: 'embedded',\r\n default: null,\r\n isHidden() {\r\n return true;\r\n },\r\n get(this: ClipmapTerrain, value) {\r\n value.str[0] = this.splatMapAssetId;\r\n value.object[0] = getTerrainSplatMapContent(this);\r\n },\r\n async set(this: ClipmapTerrain, value) {\r\n if (value.str[0]) {\r\n const path = value.str[0];\r\n const data = (await manager.VFS.readFile(path, { encoding: 'binary' })) as ArrayBuffer;\r\n if (!data) {\r\n console.error('Load height map failed');\r\n return;\r\n }\r\n const dataView = new DataView(data);\r\n const width = dataView.getUint32(0, true);\r\n const height = dataView.getUint32(4, true);\r\n const numLayers = dataView.getUint32(8, true);\r\n const splatMap = this.splatMap!;\r\n if (splatMap.width !== width || splatMap.height !== height) {\r\n console.error('Invalid splatmap data');\r\n return;\r\n }\r\n for (let i = 0; i < numLayers; i++) {\r\n const content = new Uint8Array(data, 3 * 4 + i * width * height * 4, width * height * 4);\r\n splatMap.update(content, 0, 0, i, width, height, 1);\r\n }\r\n this.invalidateRuntimeVirtualTexture();\r\n this.splatMapAssetId = value.str[0];\r\n }\r\n }\r\n },\r\n {\r\n name: 'Grass',\r\n description: 'Serialized grass instance data for the terrain',\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: ClipmapTerrain, value) {\r\n value.str[0] = this.grassAssetId;\r\n value.object[0] = getTerrainGrassContent(this);\r\n },\r\n async set(this: ClipmapTerrain, value) {\r\n if (value.str[0]) {\r\n const path = value.str[0];\r\n const data = (await manager.VFS.readFile(path, { encoding: 'binary' })) as ArrayBuffer;\r\n if (!data || data.byteLength < 4) {\r\n console.error('Load grass data failed');\r\n return;\r\n }\r\n const dataView = new DataView(data);\r\n if (dataView.getUint32(0, true) === GRASS_DATA_MAGIC) {\r\n // density map format, version at offset 4 is currently always 1\r\n const numLayers = dataView.getUint32(8, true);\r\n if (numLayers !== this.grassRenderer.numLayers) {\r\n console.error('Number of grass layers mismatch');\r\n return;\r\n }\r\n let offset = 12;\r\n for (let i = 0; i < numLayers; i++) {\r\n const width = dataView.getUint32(offset, true);\r\n const height = dataView.getUint32(offset + 4, true);\r\n const cellsPerTexel = dataView.getUint32(offset + 8, true);\r\n const byteLength = dataView.getUint32(offset + 12, true);\r\n offset += 16;\r\n const densityData = new Uint8Array(data, offset, byteLength).slice();\r\n offset += byteLength;\r\n this.grassRenderer.getLayer(i).setDensityData(width, height, cellsPerTexel, densityData);\r\n }\r\n } else if (!importLegacyGrassInstances(this, dataView)) {\r\n return;\r\n }\r\n this.grassAssetId = value.str[0];\r\n }\r\n }\r\n },\r\n {\r\n name: 'HeightMap',\r\n description: 'Serialized terrain height map data',\r\n type: 'embedded',\r\n default: null,\r\n isHidden() {\r\n return true;\r\n },\r\n get(this: ClipmapTerrain, value) {\r\n value.str[0] = this.heightMapAssetId;\r\n value.object[0] = getTerrainHeightMapContent(this);\r\n },\r\n async set(this: ClipmapTerrain, value) {\r\n if (value.str[0]) {\r\n const path = value.str[0];\r\n const data = (await manager.VFS.readFile(path, { encoding: 'binary' })) as ArrayBuffer;\r\n if (!data) {\r\n console.error('Load height map failed');\r\n return;\r\n }\r\n const dataView = new DataView(data);\r\n const width = dataView.getUint32(0, true);\r\n const height = dataView.getUint32(4, true);\r\n const heightMap = this.createHeightMapTexture(width, height)!;\r\n heightMap.update(new Uint16Array(data, 8), 0, 0, width, height);\r\n this.heightMap = heightMap;\r\n this.heightMapAssetId = value.str[0];\r\n const heights = new Uint16Array(data, 8, width * height);\r\n // Known right away from the loaded data, no GPU read back needed\r\n this.setHeightRangeFromHalfData(heights);\r\n // Kept for CPU-side users such as physics colliders.\r\n this.setHeightData(heights, width, height);\r\n }\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n"],"names":["GRASS_DATA_MAGIC","GRASS_DATA_VERSION","getTerrainGrassContent","terrain","grassRenderer","numLayers","dataSize","i","getLayer","densityMap","length","data","DataView","ArrayBuffer","view","Uint8Array","buffer","offset","setUint32","layer","densityMapWidth","densityMapHeight","cellsPerTexel","set","importLegacyGrassInstances","dataView","getUint32","console","error","w","h","counts","Uint32Array","floats","Float32Array","byteOffset","numInstances","j","x","Math","min","max","floor","z","density","maxPerTexel","t","round","updateDensityRegion","getTerrainHeightMapContent","heightmap","heightMap","width","height","head","Uint16Array","format","readPixels","tmpData","getTerrainSplatMapContent","device","getDevice","splatMap","material","numDetailMaps","info","getDeviceCaps","textureCaps","getTextureFormatInfo","blockWidth","blockHeight","size","layerData","getTerrainClass","manager","ctor","ClipmapTerrain","name","parent","GraphNode","createFunc","ctx","init","node","scene","obj","getInitParams","getProps","defineProps","description","type","default","options","minValue","maxValue","get","value","num","sizeX","sizeZ","setSize","bool","castShadow","runtimeVirtualTexture","isPersistent","wireframe","enum","labels","values","str","debugMode","objectTypes","JSONArray","phase","isNullable","isHidden","grassTexture","getGrassTexture","assetId","getAssetId","texture","bladeWidth","getBladeWidth","bladeHeight","getBladeHeight","drawDistance","getDrawDistance","farDensity","getFarDensity","kind","blade","heightRandomness","widthRandomness","tilt","tiltRandomness","bend","bendRandomness","taper","tipDetail","clumpSize","clumpHeightVariation","clumpPull","clumpSameDirection","clumpFaceAway","clumpColorVariation","rootOcclusion","roundness","viewThickening","farNormalStart","farNormalEnd","farRoughness","minScreenWidth","windFacing","windLean","swayAmplitude","swaySpeed","lodDistance","rootColor","y","tipColor","transmissionColor","card","push","object","json","fetchTexture","err","isTexture2D","dispose","isBlade","addLayer","DEFAULT_BLADE_WIDTH","DEFAULT_BLADE_HEIGHT","grassLayer","Vector4","undefined","setDrawDistance","setFarDensity","albedo","getDetailMap","normal","getDetailNormalMap","roughness","getDetailMapRoughness","uvscale","getDetailMapUVScale","hexTiling","getDetailMapHexTiling","hexParams","getDetailMapHexParams","setDetailMap","tex","setDetailNormalMap","linearColorSpace","setDetailMapRoughness","setDetailMapUVScale","setDetailMapHexParams","setDetailMapHexTiling","splatMapAssetId","path","VFS","readFile","encoding","content","update","invalidateRuntimeVirtualTexture","grassAssetId","byteLength","densityData","slice","setDensityData","heightMapAssetId","createHeightMapTexture","heights","setHeightRangeFromHalfData","setHeightData"],"mappings":"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"}
@@ -1,19 +1,20 @@
1
1
  import { getEngine } from '../../../app/api.js';
2
2
  import '../../../scene/scene.js';
3
3
  import { Vector3 } from '@zephyr3d/base';
4
- import '../../../values.js';
5
- import '../../../render/render_queue.js';
6
4
  import '../../../render/primitive.js';
7
5
  import '@zephyr3d/device';
6
+ import '../../../values.js';
7
+ import '../../../render/render_queue.js';
8
8
  import '../../../material/shader/helper.js';
9
9
  import '../../../material/lambert.js';
10
10
  import '../../../material/blinn.js';
11
11
  import '../../../material/unlit.js';
12
+ import '../../../material/meshmaterial.js';
12
13
  import '../../../material/particle.js';
13
14
  import '../../../material/subsurfaceprofile.js';
14
- import '../../../material/skin.js';
15
+ import '../../../material/sssprofile.js';
16
+ import '../../../material/sss.js';
15
17
  import '../../../material/eye.js';
16
- import '../../../material/meshmaterial.js';
17
18
  import '../../../material/hair.js';
18
19
  import '../../../material/hairstrand.js';
19
20
  import '../../../material/grassmaterial.js';
@@ -31,9 +32,14 @@ import '../../../render/lightpass.js';
31
32
  import '../../../render/sky.js';
32
33
  import '../../../render/clipmap.js';
33
34
  import '../../../render/envlight.js';
35
+ import '../../../render/lod.js';
34
36
  import '../../../render/dualdepthpeeling_oit.js';
35
37
  import '../../../shaders/atmosphere.js';
38
+ import '../../../render/water_interaction.js';
36
39
  import '../../../render/rendergraph/scene_render_context.js';
40
+ import '../../../render/sdf/scene_sdf.js';
41
+ import '../../../render/sdf/global_sdf.js';
42
+ import '../../../render/gi/voxelize_pass.js';
37
43
  import { GraphNode } from '../../../scene/graph_node.js';
38
44
  import '../../../shadow/shadowmapper.js';
39
45
  import '../../../scene/mesh.js';
@@ -50,6 +56,7 @@ import '../../../scene/batchgroup.js';
50
56
  import '../../../scene/terrain-cm/terrain-cm.js';
51
57
  import '../../../scene/terrain-cm/grass.js';
52
58
  import '../../../scene/raycast_visitor.js';
59
+ import '../../../scene/foliage.js';
53
60
 
54
61
  /** @internal */ function getTextSpriteClass() {
55
62
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"text.js","sources":["../../../../src/utility/serialization/scene/text.ts"],"sourcesContent":["import { getEngine } from '../../../app/api';\r\nimport { GraphNode, MSDFText, type SceneNode } from '../../../scene';\r\nimport { defineProps, type SerializableClass } from '../types';\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport { TextSprite } from '../../../scene/textsprite';\r\nimport { MSDFTextSprite } from '../../../scene/msdftextsprite';\r\n\r\n/** @internal */\r\nexport function getTextSpriteClass(): SerializableClass {\r\n return {\r\n ctor: TextSprite,\r\n name: 'TextSprite',\r\n parent: GraphNode,\r\n noTitle: true,\r\n createFunc(ctx: SceneNode) {\r\n const node = new TextSprite(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: 'Anchor',\r\n description: 'Sprite pivot in normalized UV space',\r\n type: 'vec2',\r\n default: [0.5, 0.5],\r\n get(this: TextSprite, value) {\r\n value.num[0] = this.anchorX;\r\n value.num[1] = this.anchorY;\r\n },\r\n set(this: TextSprite, value) {\r\n this.anchorX = value.num[0];\r\n this.anchorY = value.num[1];\r\n }\r\n },\r\n {\r\n name: 'Resolution',\r\n description: 'Text render target resolution',\r\n type: 'int2',\r\n options: {\r\n minValue: 1,\r\n maxValue: 4096\r\n },\r\n default: [128, 128],\r\n get(this: TextSprite, value) {\r\n value.num[0] = this.resolutionX;\r\n value.num[1] = this.resolutionY;\r\n },\r\n set(this: TextSprite, value) {\r\n this.resolutionX = value.num[0];\r\n this.resolutionY = value.num[1];\r\n }\r\n },\r\n {\r\n name: 'Font',\r\n description: 'Canvas font string (e.g. \"12px arial\")',\r\n type: 'string',\r\n default: '12px arial',\r\n get(this: TextSprite, value) {\r\n value.str[0] = this.font;\r\n },\r\n set(this: TextSprite, value) {\r\n this.font = value.str[0];\r\n }\r\n },\r\n {\r\n name: 'Text',\r\n description: 'Displayed text content',\r\n type: 'string',\r\n default: '',\r\n options: {\r\n multiline: true\r\n },\r\n get(this: TextSprite, value) {\r\n value.str[0] = this.text;\r\n },\r\n set(this: TextSprite, value) {\r\n this.text = value.str[0];\r\n }\r\n },\r\n {\r\n name: 'TextColor',\r\n description: 'Color of the rendered text',\r\n type: 'rgb',\r\n default: [1, 1, 1],\r\n get(this: TextSprite, value) {\r\n const c = this.textColor;\r\n value.num[0] = c.x;\r\n value.num[1] = c.y;\r\n value.num[2] = c.z;\r\n },\r\n set(this: TextSprite, value) {\r\n this.textColor = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function getMSDFTextSpriteClass(): SerializableClass {\r\n return {\r\n ctor: MSDFTextSprite,\r\n name: 'MSDFTextSprite',\r\n parent: GraphNode,\r\n noTitle: true,\r\n createFunc(ctx: SceneNode) {\r\n const node = new MSDFTextSprite(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: 'Anchor',\r\n description: 'Sprite pivot in normalized layout-box space',\r\n type: 'vec2',\r\n default: [0.5, 0.5],\r\n get(this: MSDFTextSprite, value) {\r\n value.num[0] = this.anchorX;\r\n value.num[1] = this.anchorY;\r\n },\r\n set(this: MSDFTextSprite, value) {\r\n this.anchorX = value.num[0];\r\n this.anchorY = value.num[1];\r\n }\r\n },\r\n {\r\n name: 'FontAsset',\r\n description: 'Font asset path used to build the runtime MSDF glyph atlas',\r\n type: 'object',\r\n default: '',\r\n options: {\r\n mimeTypes: ['font/ttf', 'font/otf']\r\n },\r\n isNullable() {\r\n return true;\r\n },\r\n get(this: MSDFTextSprite, value) {\r\n value.str[0] = this.fontAsset\r\n ? (getEngine().resourceManager.getAssetId(this.fontAsset) ?? '')\r\n : '';\r\n },\r\n async set(this: MSDFTextSprite, value) {\r\n this.fontAsset = value.str[0]\r\n ? await getEngine().resourceManager.fetchFontAsset(value.str[0])\r\n : null;\r\n }\r\n },\r\n {\r\n name: 'FontSize',\r\n description: 'Font size in local-space units before node scaling',\r\n type: 'float',\r\n default: 32,\r\n options: {\r\n minValue: 1,\r\n maxValue: 4096\r\n },\r\n get(this: MSDFTextSprite, value) {\r\n value.num[0] = this.fontSize;\r\n },\r\n set(this: MSDFTextSprite, value) {\r\n this.fontSize = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'MaxWidth',\r\n description: 'Maximum layout width in local-space units, 0 disables wrapping',\r\n type: 'float',\r\n default: 0,\r\n options: {\r\n minValue: 0,\r\n maxValue: 4096\r\n },\r\n get(this: MSDFTextSprite, value) {\r\n value.num[0] = this.maxWidth;\r\n },\r\n set(this: MSDFTextSprite, value) {\r\n this.maxWidth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'TextAlign',\r\n description: 'Horizontal alignment within the layout width',\r\n type: 'string',\r\n default: 'left',\r\n options: {\r\n enum: {\r\n labels: ['Left', 'Center', 'Right'],\r\n values: ['left', 'center', 'right']\r\n }\r\n },\r\n get(this: MSDFTextSprite, value) {\r\n value.str[0] = this.textAlign;\r\n },\r\n set(this: MSDFTextSprite, value) {\r\n this.textAlign = value.str[0] as 'left' | 'center' | 'right';\r\n }\r\n },\r\n {\r\n name: 'Text',\r\n description: 'Displayed text content',\r\n type: 'string',\r\n default: '',\r\n options: {\r\n multiline: true\r\n },\r\n get(this: MSDFTextSprite, value) {\r\n value.str[0] = this.text;\r\n },\r\n set(this: MSDFTextSprite, value) {\r\n this.text = value.str[0];\r\n }\r\n },\r\n {\r\n name: 'TextColor',\r\n description: 'Color of the rendered text',\r\n type: 'rgb',\r\n default: [1, 1, 1],\r\n get(this: MSDFTextSprite, value) {\r\n const c = this.textColor;\r\n value.num[0] = c.x;\r\n value.num[1] = c.y;\r\n value.num[2] = c.z;\r\n },\r\n set(this: MSDFTextSprite, value) {\r\n this.textColor = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'OutlineColor',\r\n description: 'Color of the SDF outline rendered around the text',\r\n type: 'rgb',\r\n default: [0, 0, 0],\r\n get(this: MSDFTextSprite, value) {\r\n const c = this.outlineColor;\r\n value.num[0] = c.x;\r\n value.num[1] = c.y;\r\n value.num[2] = c.z;\r\n },\r\n set(this: MSDFTextSprite, value) {\r\n this.outlineColor = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'OutlineWidth',\r\n description:\r\n 'Outline thickness in text local-space units; it scales with the text when moving closer or farther',\r\n type: 'float',\r\n default: 0,\r\n options: {\r\n minValue: 0,\r\n maxValue: 4096\r\n },\r\n get(this: MSDFTextSprite, value) {\r\n value.num[0] = this.outlineWidth;\r\n },\r\n set(this: MSDFTextSprite, value) {\r\n this.outlineWidth = value.num[0];\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function getMSDFTextClass(): SerializableClass {\r\n return {\r\n ctor: MSDFText,\r\n name: 'MSDFText',\r\n parent: GraphNode,\r\n noTitle: true,\r\n createFunc(ctx: SceneNode) {\r\n const node = new MSDFText(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: 'Anchor',\r\n description: 'Sprite pivot in normalized layout-box space',\r\n type: 'vec2',\r\n default: [0.5, 0.5],\r\n get(this: MSDFText, value) {\r\n value.num[0] = this.anchorX;\r\n value.num[1] = this.anchorY;\r\n },\r\n set(this: MSDFText, value) {\r\n this.anchorX = value.num[0];\r\n this.anchorY = value.num[1];\r\n }\r\n },\r\n {\r\n name: 'FontAsset',\r\n description: 'Font asset path used to build the runtime MSDF glyph atlas',\r\n type: 'object',\r\n default: '',\r\n options: {\r\n mimeTypes: ['font/ttf', 'font/otf']\r\n },\r\n isNullable() {\r\n return true;\r\n },\r\n get(this: MSDFText, value) {\r\n value.str[0] = this.fontAsset\r\n ? (getEngine().resourceManager.getAssetId(this.fontAsset) ?? '')\r\n : '';\r\n },\r\n async set(this: MSDFText, value) {\r\n this.fontAsset = value.str[0]\r\n ? await getEngine().resourceManager.fetchFontAsset(value.str[0])\r\n : null;\r\n }\r\n },\r\n {\r\n name: 'FontSize',\r\n description: 'Font size in local-space units before node scaling',\r\n type: 'float',\r\n default: 32,\r\n options: {\r\n minValue: 1,\r\n maxValue: 4096\r\n },\r\n get(this: MSDFText, value) {\r\n value.num[0] = this.fontSize;\r\n },\r\n set(this: MSDFText, value) {\r\n this.fontSize = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'MaxWidth',\r\n description: 'Maximum layout width in local-space units, 0 disables wrapping',\r\n type: 'float',\r\n default: 0,\r\n options: {\r\n minValue: 0,\r\n maxValue: 4096\r\n },\r\n get(this: MSDFText, value) {\r\n value.num[0] = this.maxWidth;\r\n },\r\n set(this: MSDFText, value) {\r\n this.maxWidth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'TextAlign',\r\n description: 'Horizontal alignment within the layout width',\r\n type: 'string',\r\n default: 'left',\r\n options: {\r\n enum: {\r\n labels: ['Left', 'Center', 'Right'],\r\n values: ['left', 'center', 'right']\r\n }\r\n },\r\n get(this: MSDFText, value) {\r\n value.str[0] = this.textAlign;\r\n },\r\n set(this: MSDFText, value) {\r\n this.textAlign = value.str[0] as 'left' | 'center' | 'right';\r\n }\r\n },\r\n {\r\n name: 'Text',\r\n description: 'Displayed text content',\r\n type: 'string',\r\n default: '',\r\n options: {\r\n multiline: true\r\n },\r\n get(this: MSDFText, value) {\r\n value.str[0] = this.text;\r\n },\r\n set(this: MSDFText, value) {\r\n this.text = value.str[0];\r\n }\r\n },\r\n {\r\n name: 'TextColor',\r\n description: 'Color of the rendered text',\r\n type: 'rgb',\r\n default: [1, 1, 1],\r\n get(this: MSDFText, value) {\r\n const c = this.textColor;\r\n value.num[0] = c.x;\r\n value.num[1] = c.y;\r\n value.num[2] = c.z;\r\n },\r\n set(this: MSDFText, value) {\r\n this.textColor = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'OutlineColor',\r\n description: 'Color of the SDF outline rendered around the text',\r\n type: 'rgb',\r\n default: [0, 0, 0],\r\n get(this: MSDFText, value) {\r\n const c = this.outlineColor;\r\n value.num[0] = c.x;\r\n value.num[1] = c.y;\r\n value.num[2] = c.z;\r\n },\r\n set(this: MSDFText, value) {\r\n this.outlineColor = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'OutlineWidth',\r\n description:\r\n 'Outline thickness in text local-space units; it scales with the text when moving closer or farther',\r\n type: 'float',\r\n default: 0,\r\n options: {\r\n minValue: 0,\r\n maxValue: 4096\r\n },\r\n get(this: MSDFText, value) {\r\n value.num[0] = this.outlineWidth;\r\n },\r\n set(this: MSDFText, value) {\r\n this.outlineWidth = value.num[0];\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n"],"names":["getTextSpriteClass","ctor","TextSprite","name","parent","GraphNode","noTitle","createFunc","ctx","node","scene","obj","getProps","defineProps","description","type","default","get","value","num","anchorX","anchorY","set","options","minValue","maxValue","resolutionX","resolutionY","str","font","multiline","text","c","textColor","x","y","z","Vector3","getMSDFTextSpriteClass","MSDFTextSprite","mimeTypes","isNullable","fontAsset","getEngine","resourceManager","getAssetId","fetchFontAsset","fontSize","maxWidth","enum","labels","values","textAlign","outlineColor","outlineWidth","getMSDFTextClass","MSDFText"],"mappings":"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"}
1
+ {"version":3,"file":"text.js","sources":["../../../../src/utility/serialization/scene/text.ts"],"sourcesContent":["import { getEngine } from '../../../app/api';\r\nimport { GraphNode, MSDFText, type SceneNode } from '../../../scene';\r\nimport { defineProps, type SerializableClass } from '../types';\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport { TextSprite } from '../../../scene/textsprite';\r\nimport { MSDFTextSprite } from '../../../scene/msdftextsprite';\r\n\r\n/** @internal */\r\nexport function getTextSpriteClass(): SerializableClass {\r\n return {\r\n ctor: TextSprite,\r\n name: 'TextSprite',\r\n parent: GraphNode,\r\n noTitle: true,\r\n createFunc(ctx: SceneNode) {\r\n const node = new TextSprite(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: 'Anchor',\r\n description: 'Sprite pivot in normalized UV space',\r\n type: 'vec2',\r\n default: [0.5, 0.5],\r\n get(this: TextSprite, value) {\r\n value.num[0] = this.anchorX;\r\n value.num[1] = this.anchorY;\r\n },\r\n set(this: TextSprite, value) {\r\n this.anchorX = value.num[0];\r\n this.anchorY = value.num[1];\r\n }\r\n },\r\n {\r\n name: 'Resolution',\r\n description: 'Text render target resolution',\r\n type: 'int2',\r\n options: {\r\n minValue: 1,\r\n maxValue: 4096\r\n },\r\n default: [128, 128],\r\n get(this: TextSprite, value) {\r\n value.num[0] = this.resolutionX;\r\n value.num[1] = this.resolutionY;\r\n },\r\n set(this: TextSprite, value) {\r\n this.resolutionX = value.num[0];\r\n this.resolutionY = value.num[1];\r\n }\r\n },\r\n {\r\n name: 'Font',\r\n description: 'Canvas font string (e.g. \"12px arial\")',\r\n type: 'string',\r\n default: '12px arial',\r\n get(this: TextSprite, value) {\r\n value.str[0] = this.font;\r\n },\r\n set(this: TextSprite, value) {\r\n this.font = value.str[0];\r\n }\r\n },\r\n {\r\n name: 'Text',\r\n description: 'Displayed text content',\r\n type: 'string',\r\n default: '',\r\n options: {\r\n multiline: true\r\n },\r\n get(this: TextSprite, value) {\r\n value.str[0] = this.text;\r\n },\r\n set(this: TextSprite, value) {\r\n this.text = value.str[0];\r\n }\r\n },\r\n {\r\n name: 'TextColor',\r\n description: 'Color of the rendered text',\r\n type: 'rgb',\r\n default: [1, 1, 1],\r\n get(this: TextSprite, value) {\r\n const c = this.textColor;\r\n value.num[0] = c.x;\r\n value.num[1] = c.y;\r\n value.num[2] = c.z;\r\n },\r\n set(this: TextSprite, value) {\r\n this.textColor = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function getMSDFTextSpriteClass(): SerializableClass {\r\n return {\r\n ctor: MSDFTextSprite,\r\n name: 'MSDFTextSprite',\r\n parent: GraphNode,\r\n noTitle: true,\r\n createFunc(ctx: SceneNode) {\r\n const node = new MSDFTextSprite(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: 'Anchor',\r\n description: 'Sprite pivot in normalized layout-box space',\r\n type: 'vec2',\r\n default: [0.5, 0.5],\r\n get(this: MSDFTextSprite, value) {\r\n value.num[0] = this.anchorX;\r\n value.num[1] = this.anchorY;\r\n },\r\n set(this: MSDFTextSprite, value) {\r\n this.anchorX = value.num[0];\r\n this.anchorY = value.num[1];\r\n }\r\n },\r\n {\r\n name: 'FontAsset',\r\n description: 'Font asset path used to build the runtime MSDF glyph atlas',\r\n type: 'object',\r\n default: '',\r\n options: {\r\n mimeTypes: ['font/ttf', 'font/otf']\r\n },\r\n isNullable() {\r\n return true;\r\n },\r\n get(this: MSDFTextSprite, value) {\r\n value.str[0] = this.fontAsset\r\n ? (getEngine().resourceManager.getAssetId(this.fontAsset) ?? '')\r\n : '';\r\n },\r\n async set(this: MSDFTextSprite, value) {\r\n this.fontAsset = value.str[0]\r\n ? await getEngine().resourceManager.fetchFontAsset(value.str[0])\r\n : null;\r\n }\r\n },\r\n {\r\n name: 'FontSize',\r\n description: 'Font size in local-space units before node scaling',\r\n type: 'float',\r\n default: 32,\r\n options: {\r\n minValue: 1,\r\n maxValue: 4096\r\n },\r\n get(this: MSDFTextSprite, value) {\r\n value.num[0] = this.fontSize;\r\n },\r\n set(this: MSDFTextSprite, value) {\r\n this.fontSize = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'MaxWidth',\r\n description: 'Maximum layout width in local-space units, 0 disables wrapping',\r\n type: 'float',\r\n default: 0,\r\n options: {\r\n minValue: 0,\r\n maxValue: 4096\r\n },\r\n get(this: MSDFTextSprite, value) {\r\n value.num[0] = this.maxWidth;\r\n },\r\n set(this: MSDFTextSprite, value) {\r\n this.maxWidth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'TextAlign',\r\n description: 'Horizontal alignment within the layout width',\r\n type: 'string',\r\n default: 'left',\r\n options: {\r\n enum: {\r\n labels: ['Left', 'Center', 'Right'],\r\n values: ['left', 'center', 'right']\r\n }\r\n },\r\n get(this: MSDFTextSprite, value) {\r\n value.str[0] = this.textAlign;\r\n },\r\n set(this: MSDFTextSprite, value) {\r\n this.textAlign = value.str[0] as 'left' | 'center' | 'right';\r\n }\r\n },\r\n {\r\n name: 'Text',\r\n description: 'Displayed text content',\r\n type: 'string',\r\n default: '',\r\n options: {\r\n multiline: true\r\n },\r\n get(this: MSDFTextSprite, value) {\r\n value.str[0] = this.text;\r\n },\r\n set(this: MSDFTextSprite, value) {\r\n this.text = value.str[0];\r\n }\r\n },\r\n {\r\n name: 'TextColor',\r\n description: 'Color of the rendered text',\r\n type: 'rgb',\r\n default: [1, 1, 1],\r\n get(this: MSDFTextSprite, value) {\r\n const c = this.textColor;\r\n value.num[0] = c.x;\r\n value.num[1] = c.y;\r\n value.num[2] = c.z;\r\n },\r\n set(this: MSDFTextSprite, value) {\r\n this.textColor = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'OutlineColor',\r\n description: 'Color of the SDF outline rendered around the text',\r\n type: 'rgb',\r\n default: [0, 0, 0],\r\n get(this: MSDFTextSprite, value) {\r\n const c = this.outlineColor;\r\n value.num[0] = c.x;\r\n value.num[1] = c.y;\r\n value.num[2] = c.z;\r\n },\r\n set(this: MSDFTextSprite, value) {\r\n this.outlineColor = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'OutlineWidth',\r\n description:\r\n 'Outline thickness in text local-space units; it scales with the text when moving closer or farther',\r\n type: 'float',\r\n default: 0,\r\n options: {\r\n minValue: 0,\r\n maxValue: 4096\r\n },\r\n get(this: MSDFTextSprite, value) {\r\n value.num[0] = this.outlineWidth;\r\n },\r\n set(this: MSDFTextSprite, value) {\r\n this.outlineWidth = value.num[0];\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function getMSDFTextClass(): SerializableClass {\r\n return {\r\n ctor: MSDFText,\r\n name: 'MSDFText',\r\n parent: GraphNode,\r\n noTitle: true,\r\n createFunc(ctx: SceneNode) {\r\n const node = new MSDFText(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: 'Anchor',\r\n description: 'Sprite pivot in normalized layout-box space',\r\n type: 'vec2',\r\n default: [0.5, 0.5],\r\n get(this: MSDFText, value) {\r\n value.num[0] = this.anchorX;\r\n value.num[1] = this.anchorY;\r\n },\r\n set(this: MSDFText, value) {\r\n this.anchorX = value.num[0];\r\n this.anchorY = value.num[1];\r\n }\r\n },\r\n {\r\n name: 'FontAsset',\r\n description: 'Font asset path used to build the runtime MSDF glyph atlas',\r\n type: 'object',\r\n default: '',\r\n options: {\r\n mimeTypes: ['font/ttf', 'font/otf']\r\n },\r\n isNullable() {\r\n return true;\r\n },\r\n get(this: MSDFText, value) {\r\n value.str[0] = this.fontAsset\r\n ? (getEngine().resourceManager.getAssetId(this.fontAsset) ?? '')\r\n : '';\r\n },\r\n async set(this: MSDFText, value) {\r\n this.fontAsset = value.str[0]\r\n ? await getEngine().resourceManager.fetchFontAsset(value.str[0])\r\n : null;\r\n }\r\n },\r\n {\r\n name: 'FontSize',\r\n description: 'Font size in local-space units before node scaling',\r\n type: 'float',\r\n default: 32,\r\n options: {\r\n minValue: 1,\r\n maxValue: 4096\r\n },\r\n get(this: MSDFText, value) {\r\n value.num[0] = this.fontSize;\r\n },\r\n set(this: MSDFText, value) {\r\n this.fontSize = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'MaxWidth',\r\n description: 'Maximum layout width in local-space units, 0 disables wrapping',\r\n type: 'float',\r\n default: 0,\r\n options: {\r\n minValue: 0,\r\n maxValue: 4096\r\n },\r\n get(this: MSDFText, value) {\r\n value.num[0] = this.maxWidth;\r\n },\r\n set(this: MSDFText, value) {\r\n this.maxWidth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'TextAlign',\r\n description: 'Horizontal alignment within the layout width',\r\n type: 'string',\r\n default: 'left',\r\n options: {\r\n enum: {\r\n labels: ['Left', 'Center', 'Right'],\r\n values: ['left', 'center', 'right']\r\n }\r\n },\r\n get(this: MSDFText, value) {\r\n value.str[0] = this.textAlign;\r\n },\r\n set(this: MSDFText, value) {\r\n this.textAlign = value.str[0] as 'left' | 'center' | 'right';\r\n }\r\n },\r\n {\r\n name: 'Text',\r\n description: 'Displayed text content',\r\n type: 'string',\r\n default: '',\r\n options: {\r\n multiline: true\r\n },\r\n get(this: MSDFText, value) {\r\n value.str[0] = this.text;\r\n },\r\n set(this: MSDFText, value) {\r\n this.text = value.str[0];\r\n }\r\n },\r\n {\r\n name: 'TextColor',\r\n description: 'Color of the rendered text',\r\n type: 'rgb',\r\n default: [1, 1, 1],\r\n get(this: MSDFText, value) {\r\n const c = this.textColor;\r\n value.num[0] = c.x;\r\n value.num[1] = c.y;\r\n value.num[2] = c.z;\r\n },\r\n set(this: MSDFText, value) {\r\n this.textColor = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'OutlineColor',\r\n description: 'Color of the SDF outline rendered around the text',\r\n type: 'rgb',\r\n default: [0, 0, 0],\r\n get(this: MSDFText, value) {\r\n const c = this.outlineColor;\r\n value.num[0] = c.x;\r\n value.num[1] = c.y;\r\n value.num[2] = c.z;\r\n },\r\n set(this: MSDFText, value) {\r\n this.outlineColor = new Vector3(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'OutlineWidth',\r\n description:\r\n 'Outline thickness in text local-space units; it scales with the text when moving closer or farther',\r\n type: 'float',\r\n default: 0,\r\n options: {\r\n minValue: 0,\r\n maxValue: 4096\r\n },\r\n get(this: MSDFText, value) {\r\n value.num[0] = this.outlineWidth;\r\n },\r\n set(this: MSDFText, value) {\r\n this.outlineWidth = value.num[0];\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n"],"names":["getTextSpriteClass","ctor","TextSprite","name","parent","GraphNode","noTitle","createFunc","ctx","node","scene","obj","getProps","defineProps","description","type","default","get","value","num","anchorX","anchorY","set","options","minValue","maxValue","resolutionX","resolutionY","str","font","multiline","text","c","textColor","x","y","z","Vector3","getMSDFTextSpriteClass","MSDFTextSprite","mimeTypes","isNullable","fontAsset","getEngine","resourceManager","getAssetId","fetchFontAsset","fontSize","maxWidth","enum","labels","values","textAlign","outlineColor","outlineWidth","getMSDFTextClass","MSDFText"],"mappings":"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"}