@zephyr3d/scene 0.9.25 → 0.9.27

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 (299) hide show
  1. package/dist/animation/animationset.js +92 -30
  2. package/dist/animation/animationset.js.map +1 -1
  3. package/dist/animation/hair/gpu_hair_simulation.js +1090 -0
  4. package/dist/animation/hair/gpu_hair_simulation.js.map +1 -0
  5. package/dist/animation/joint_dynamics/controller.js +7 -5
  6. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  7. package/dist/animation/joint_dynamics/convex_collider.js +320 -0
  8. package/dist/animation/joint_dynamics/convex_collider.js.map +1 -0
  9. package/dist/animation/joint_dynamics/joint_dynamics_system.js +81 -5
  10. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  11. package/dist/animation/morphtrack.js +3 -4
  12. package/dist/animation/morphtrack.js.map +1 -1
  13. package/dist/animation/skeleton.js +79 -25
  14. package/dist/animation/skeleton.js.map +1 -1
  15. package/dist/animation/spring/multi_chain_spring_system.js +577 -179
  16. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  17. package/dist/animation/spring/spring_collider.js +4 -3
  18. package/dist/animation/spring/spring_collider.js.map +1 -1
  19. package/dist/animation/spring/spring_node_pose_tracker.js +40 -0
  20. package/dist/animation/spring/spring_node_pose_tracker.js.map +1 -0
  21. package/dist/animation/spring/spring_particle.js +2 -0
  22. package/dist/animation/spring/spring_particle.js.map +1 -1
  23. package/dist/animation/spring/spring_system.js +11 -3
  24. package/dist/animation/spring/spring_system.js.map +1 -1
  25. package/dist/animation/spring_modifier.js +10 -0
  26. package/dist/animation/spring_modifier.js.map +1 -1
  27. package/dist/app/engine.js +53 -43
  28. package/dist/app/engine.js.map +1 -1
  29. package/dist/app/scriptingsystem.js +119 -6
  30. package/dist/app/scriptingsystem.js.map +1 -1
  31. package/dist/app/scriptregistry.js +3 -2
  32. package/dist/app/scriptregistry.js.map +1 -1
  33. package/dist/asset/assetmanager.js +284 -67
  34. package/dist/asset/assetmanager.js.map +1 -1
  35. package/dist/asset/loaders/zhair/zhair_format.js +288 -0
  36. package/dist/asset/loaders/zhair/zhair_format.js.map +1 -0
  37. package/dist/asset/loaders/zhair/zhair_loader.js +221 -0
  38. package/dist/asset/loaders/zhair/zhair_loader.js.map +1 -0
  39. package/dist/asset/model.js +184 -69
  40. package/dist/asset/model.js.map +1 -1
  41. package/dist/camera/camera.js +268 -44
  42. package/dist/camera/camera.js.map +1 -1
  43. package/dist/camera/perspectivecamera.js +3 -1
  44. package/dist/camera/perspectivecamera.js.map +1 -1
  45. package/dist/index.d.ts +9044 -5139
  46. package/dist/index.js +17 -6
  47. package/dist/index.js.map +1 -1
  48. package/dist/material/eye.js +932 -0
  49. package/dist/material/eye.js.map +1 -0
  50. package/dist/material/hair.js +917 -0
  51. package/dist/material/hair.js.map +1 -0
  52. package/dist/material/hairstrand.js +842 -0
  53. package/dist/material/hairstrand.js.map +1 -0
  54. package/dist/material/hairstrand_data.js +162 -0
  55. package/dist/material/hairstrand_data.js.map +1 -0
  56. package/dist/material/lambert.js +5 -2
  57. package/dist/material/lambert.js.map +1 -1
  58. package/dist/material/material.js +48 -10
  59. package/dist/material/material.js.map +1 -1
  60. package/dist/material/meshmaterial.js +120 -19
  61. package/dist/material/meshmaterial.js.map +1 -1
  62. package/dist/material/mixins/albedocolor.js +1 -1
  63. package/dist/material/mixins/albedocolor.js.map +1 -1
  64. package/dist/material/mixins/lightmodel/blinnphong.js +5 -3
  65. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  66. package/dist/material/mixins/lightmodel/lambert.js +5 -4
  67. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  68. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +3 -3
  69. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  70. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +5 -5
  71. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  72. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +3 -3
  73. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  74. package/dist/material/mixins/lit.js +106 -19
  75. package/dist/material/mixins/lit.js.map +1 -1
  76. package/dist/material/mixins/pbr/common.js +4 -4
  77. package/dist/material/mixins/pbr/common.js.map +1 -1
  78. package/dist/material/mixins/texture.js +48 -11
  79. package/dist/material/mixins/texture.js.map +1 -1
  80. package/dist/material/mtoon.js +6 -5
  81. package/dist/material/mtoon.js.map +1 -1
  82. package/dist/material/pbrblueprint.js +146 -28
  83. package/dist/material/pbrblueprint.js.map +1 -1
  84. package/dist/material/pbrblueprint_instance.js +501 -0
  85. package/dist/material/pbrblueprint_instance.js.map +1 -0
  86. package/dist/material/pbrmr.js +15 -16
  87. package/dist/material/pbrmr.js.map +1 -1
  88. package/dist/material/shader/helper.js +734 -23
  89. package/dist/material/shader/helper.js.map +1 -1
  90. package/dist/material/shader/terrain_blend.js +55 -0
  91. package/dist/material/shader/terrain_blend.js.map +1 -0
  92. package/dist/material/skin.js +192 -32
  93. package/dist/material/skin.js.map +1 -1
  94. package/dist/material/spriteblueprint.js +16 -1
  95. package/dist/material/spriteblueprint.js.map +1 -1
  96. package/dist/material/subsurfaceprofile.js +86 -23
  97. package/dist/material/subsurfaceprofile.js.map +1 -1
  98. package/dist/material/water.js +2059 -72
  99. package/dist/material/water.js.map +1 -1
  100. package/dist/posteffect/bloom.js +167 -7
  101. package/dist/posteffect/bloom.js.map +1 -1
  102. package/dist/posteffect/coloradjust.js +2 -1
  103. package/dist/posteffect/coloradjust.js.map +1 -1
  104. package/dist/posteffect/compositor.js.map +1 -1
  105. package/dist/posteffect/fxaa.js +2 -1
  106. package/dist/posteffect/fxaa.js.map +1 -1
  107. package/dist/posteffect/grayscale.js +3 -1
  108. package/dist/posteffect/grayscale.js.map +1 -1
  109. package/dist/posteffect/motionblur.js +664 -56
  110. package/dist/posteffect/motionblur.js.map +1 -1
  111. package/dist/posteffect/posteffect.js +12 -1
  112. package/dist/posteffect/posteffect.js.map +1 -1
  113. package/dist/posteffect/sao.js +46 -44
  114. package/dist/posteffect/sao.js.map +1 -1
  115. package/dist/posteffect/skinsss.js +368 -69
  116. package/dist/posteffect/skinsss.js.map +1 -1
  117. package/dist/posteffect/ssgi.js +16 -9
  118. package/dist/posteffect/ssgi.js.map +1 -1
  119. package/dist/posteffect/ssr.js +3 -0
  120. package/dist/posteffect/ssr.js.map +1 -1
  121. package/dist/posteffect/sss.js +121 -36
  122. package/dist/posteffect/sss.js.map +1 -1
  123. package/dist/posteffect/taa.js.map +1 -1
  124. package/dist/posteffect/tonemap.js +44 -1
  125. package/dist/posteffect/tonemap.js.map +1 -1
  126. package/dist/render/abuffer_oit.js +8 -2
  127. package/dist/render/abuffer_oit.js.map +1 -1
  128. package/dist/render/clipmap.js +156 -5
  129. package/dist/render/clipmap.js.map +1 -1
  130. package/dist/render/cull_visitor.js +20 -0
  131. package/dist/render/cull_visitor.js.map +1 -1
  132. package/dist/render/depthpass.js +36 -2
  133. package/dist/render/depthpass.js.map +1 -1
  134. package/dist/render/drawable_mixin.js +26 -1
  135. package/dist/render/drawable_mixin.js.map +1 -1
  136. package/dist/render/dualdepthpeeling_oit.js +3 -2
  137. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  138. package/dist/render/envlight.js +1 -1
  139. package/dist/render/envlight.js.map +1 -1
  140. package/dist/render/fbm_wavegenerator.js +6 -3
  141. package/dist/render/fbm_wavegenerator.js.map +1 -1
  142. package/dist/render/fft_wavegenerator.js +57 -15
  143. package/dist/render/fft_wavegenerator.js.map +1 -1
  144. package/dist/render/gerstner_wavegenerator.js +130 -20
  145. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  146. package/dist/render/globalbindgroup_allocator.js +3 -0
  147. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  148. package/dist/render/hzb.js +80 -22
  149. package/dist/render/hzb.js.map +1 -1
  150. package/dist/render/lightpass.js +6 -3
  151. package/dist/render/lightpass.js.map +1 -1
  152. package/dist/render/oit.js +29 -0
  153. package/dist/render/oit.js.map +1 -0
  154. package/dist/render/render_queue.js +39 -0
  155. package/dist/render/render_queue.js.map +1 -1
  156. package/dist/render/renderer.js +4 -0
  157. package/dist/render/renderer.js.map +1 -1
  158. package/dist/render/rendergraph/blackboard.js +1 -0
  159. package/dist/render/rendergraph/blackboard.js.map +1 -1
  160. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  161. package/dist/render/rendergraph/executor.js +2 -0
  162. package/dist/render/rendergraph/executor.js.map +1 -1
  163. package/dist/render/rendergraph/forward_plus_builder.js +379 -10
  164. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  165. package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
  166. package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
  167. package/dist/render/rendergraph/history_resources.js +8 -1
  168. package/dist/render/rendergraph/history_resources.js.map +1 -1
  169. package/dist/render/rendergraph/rendergraph.js.map +1 -1
  170. package/dist/render/rendergraph/texture_affinity_cache.js +1 -1
  171. package/dist/render/rendergraph/texture_affinity_cache.js.map +1 -1
  172. package/dist/render/rendergraph/types.js.map +1 -1
  173. package/dist/render/shadow_mask_pass.js +73 -8
  174. package/dist/render/shadow_mask_pass.js.map +1 -1
  175. package/dist/render/sky.js +166 -126
  176. package/dist/render/sky.js.map +1 -1
  177. package/dist/render/underwater.js +624 -0
  178. package/dist/render/underwater.js.map +1 -0
  179. package/dist/render/water_caustics.js +1380 -0
  180. package/dist/render/water_caustics.js.map +1 -0
  181. package/dist/render/weightedblended_oit.js +3 -2
  182. package/dist/render/weightedblended_oit.js.map +1 -1
  183. package/dist/scene/basesprite.js +8 -0
  184. package/dist/scene/basesprite.js.map +1 -1
  185. package/dist/scene/batchgroup.js +3 -0
  186. package/dist/scene/batchgroup.js.map +1 -1
  187. package/dist/scene/environment.js +4 -1
  188. package/dist/scene/environment.js.map +1 -1
  189. package/dist/scene/hair.js +963 -0
  190. package/dist/scene/hair.js.map +1 -0
  191. package/dist/scene/light.js +5 -1
  192. package/dist/scene/light.js.map +1 -1
  193. package/dist/scene/mesh.js +481 -47
  194. package/dist/scene/mesh.js.map +1 -1
  195. package/dist/scene/meshdrawable.js +6 -0
  196. package/dist/scene/meshdrawable.js.map +1 -1
  197. package/dist/scene/msdftext.js +3 -0
  198. package/dist/scene/msdftext.js.map +1 -1
  199. package/dist/scene/msdftextsprite.js +3 -0
  200. package/dist/scene/msdftextsprite.js.map +1 -1
  201. package/dist/scene/particlesys.js +6 -0
  202. package/dist/scene/particlesys.js.map +1 -1
  203. package/dist/scene/scene.js +3 -0
  204. package/dist/scene/scene.js.map +1 -1
  205. package/dist/scene/scene_node.js +6 -1
  206. package/dist/scene/scene_node.js.map +1 -1
  207. package/dist/scene/terrain-cm/grass.js +3 -0
  208. package/dist/scene/terrain-cm/grass.js.map +1 -1
  209. package/dist/scene/terrain-cm/grassmaterial.js +3 -0
  210. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  211. package/dist/scene/terrain-cm/terrain-cm.js +6 -0
  212. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  213. package/dist/scene/terrain-cm/texture_cache.js +309 -0
  214. package/dist/scene/terrain-cm/texture_cache.js.map +1 -0
  215. package/dist/scene/water.js +546 -4
  216. package/dist/scene/water.js.map +1 -1
  217. package/dist/shaders/atmosphere.js.map +1 -1
  218. package/dist/shaders/diffusion.js +54 -0
  219. package/dist/shaders/diffusion.js.map +1 -0
  220. package/dist/shaders/shadow.js +33 -21
  221. package/dist/shaders/shadow.js.map +1 -1
  222. package/dist/shaders/temporal.js +71 -33
  223. package/dist/shaders/temporal.js.map +1 -1
  224. package/dist/shaders/water.js +22 -19
  225. package/dist/shaders/water.js.map +1 -1
  226. package/dist/shaders/water_medium.js +56 -0
  227. package/dist/shaders/water_medium.js.map +1 -0
  228. package/dist/shadow/dom.js +546 -0
  229. package/dist/shadow/dom.js.map +1 -0
  230. package/dist/shadow/pcf_opt.js +3 -5
  231. package/dist/shadow/pcf_opt.js.map +1 -1
  232. package/dist/shadow/pcf_pd.js +1 -1
  233. package/dist/shadow/pcf_pd.js.map +1 -1
  234. package/dist/shadow/receiver_bias.js +41 -0
  235. package/dist/shadow/receiver_bias.js.map +1 -0
  236. package/dist/shadow/shader.js +20 -60
  237. package/dist/shadow/shader.js.map +1 -1
  238. package/dist/shadow/shadow_impl.js +89 -0
  239. package/dist/shadow/shadow_impl.js.map +1 -1
  240. package/dist/shadow/shadow_region.js +1 -1
  241. package/dist/shadow/shadow_region.js.map +1 -1
  242. package/dist/shadow/shadowmapper.js +150 -37
  243. package/dist/shadow/shadowmapper.js.map +1 -1
  244. package/dist/shapes/shape.js +11 -2
  245. package/dist/shapes/shape.js.map +1 -1
  246. package/dist/shapes/sphere.js +50 -9
  247. package/dist/shapes/sphere.js.map +1 -1
  248. package/dist/utility/blueprint/common/constants.js +112 -2
  249. package/dist/utility/blueprint/common/constants.js.map +1 -1
  250. package/dist/utility/blueprint/material/func.js +142 -49
  251. package/dist/utility/blueprint/material/func.js.map +1 -1
  252. package/dist/utility/blueprint/material/ir.js +490 -25
  253. package/dist/utility/blueprint/material/ir.js.map +1 -1
  254. package/dist/utility/blueprint/material/texture.js +898 -4
  255. package/dist/utility/blueprint/material/texture.js.map +1 -1
  256. package/dist/utility/serialization/manager.js +434 -101
  257. package/dist/utility/serialization/manager.js.map +1 -1
  258. package/dist/utility/serialization/scene/animation.js +401 -5
  259. package/dist/utility/serialization/scene/animation.js.map +1 -1
  260. package/dist/utility/serialization/scene/batch.js +4 -0
  261. package/dist/utility/serialization/scene/batch.js.map +1 -1
  262. package/dist/utility/serialization/scene/camera.js +186 -26
  263. package/dist/utility/serialization/scene/camera.js.map +1 -1
  264. package/dist/utility/serialization/scene/common.js +26 -5
  265. package/dist/utility/serialization/scene/common.js.map +1 -1
  266. package/dist/utility/serialization/scene/hair.js +1141 -0
  267. package/dist/utility/serialization/scene/hair.js.map +1 -0
  268. package/dist/utility/serialization/scene/light.js +84 -4
  269. package/dist/utility/serialization/scene/light.js.map +1 -1
  270. package/dist/utility/serialization/scene/material.js +1867 -166
  271. package/dist/utility/serialization/scene/material.js.map +1 -1
  272. package/dist/utility/serialization/scene/mesh.js +231 -14
  273. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  274. package/dist/utility/serialization/scene/node.js +141 -7
  275. package/dist/utility/serialization/scene/node.js.map +1 -1
  276. package/dist/utility/serialization/scene/particle.js +4 -0
  277. package/dist/utility/serialization/scene/particle.js.map +1 -1
  278. package/dist/utility/serialization/scene/primitive.js +18 -0
  279. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  280. package/dist/utility/serialization/scene/sprite.js +4 -0
  281. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  282. package/dist/utility/serialization/scene/terrain.js +4 -0
  283. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  284. package/dist/utility/serialization/scene/text.js +4 -0
  285. package/dist/utility/serialization/scene/text.js.map +1 -1
  286. package/dist/utility/serialization/scene/water.js +1105 -21
  287. package/dist/utility/serialization/scene/water.js.map +1 -1
  288. package/dist/utility/serialization/types.js.map +1 -1
  289. package/dist/utility/shprojector.js +9 -8
  290. package/dist/utility/shprojector.js.map +1 -1
  291. package/dist/values.js +49 -2
  292. package/dist/values.js.map +1 -1
  293. package/package.json +3 -3
  294. package/dist/render/rendergraph/frame_graph_context.js +0 -41
  295. package/dist/render/rendergraph/frame_graph_context.js.map +0 -1
  296. package/dist/shaders/ssgi.js +0 -63
  297. package/dist/shaders/ssgi.js.map +0 -1
  298. package/dist/shaders/ssgi_reprojection.js +0 -118
  299. package/dist/shaders/ssgi_reprojection.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 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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"}
@@ -12,7 +12,10 @@ import '../../../material/unlit.js';
12
12
  import '../../../material/particle.js';
13
13
  import '../../../material/subsurfaceprofile.js';
14
14
  import '../../../material/skin.js';
15
+ import '../../../material/eye.js';
15
16
  import '../../../material/meshmaterial.js';
17
+ import '../../../material/hair.js';
18
+ import '../../../material/hairstrand.js';
16
19
  import '../../../material/grassmaterial.js';
17
20
  import '../../../material/terrain-cm.js';
18
21
  import '../../../material/pbrmr.js';
@@ -40,6 +43,7 @@ import { TextSprite } from '../../../scene/textsprite.js';
40
43
  import { MSDFText } from '../../../scene/msdftext.js';
41
44
  import { MSDFTextSprite } from '../../../scene/msdftextsprite.js';
42
45
  import '../../../scene/water.js';
46
+ import '../../../scene/hair.js';
43
47
  import '../../../scene/scene_node.js';
44
48
  import '../../../scene/particlesys.js';
45
49
  import '../../../scene/batchgroup.js';
@@ -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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"}