@zephyr3d/scene 0.9.4 → 0.9.6

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 (517) hide show
  1. package/dist/animation/animationmask.js +224 -0
  2. package/dist/animation/animationmask.js.map +1 -0
  3. package/dist/animation/animationset.js +268 -67
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/animationtrack.js.map +1 -1
  6. package/dist/animation/eulerrotationtrack.js +3 -0
  7. package/dist/animation/eulerrotationtrack.js.map +1 -1
  8. package/dist/animation/fixed_geometry_cache_track.js +7 -0
  9. package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
  10. package/dist/animation/ik_modifier.js.map +1 -1
  11. package/dist/animation/joint_dynamics/collision.js +6 -4
  12. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  13. package/dist/animation/joint_dynamics/controller.js +390 -43
  14. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  15. package/dist/animation/joint_dynamics/joint_dynamics_system.js +62 -3
  16. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  17. package/dist/animation/joint_dynamics/solver.js +4 -3
  18. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  19. package/dist/animation/joint_dynamics/types.js.map +1 -1
  20. package/dist/animation/joint_dynamics_modifier.js +2 -0
  21. package/dist/animation/joint_dynamics_modifier.js.map +1 -1
  22. package/dist/animation/morphtarget.js +3 -72
  23. package/dist/animation/morphtarget.js.map +1 -1
  24. package/dist/animation/morphtrack.js +3 -0
  25. package/dist/animation/morphtrack.js.map +1 -1
  26. package/dist/animation/pca_geometry_cache_track.js +3 -0
  27. package/dist/animation/pca_geometry_cache_track.js.map +1 -1
  28. package/dist/animation/proptrack.js +3 -0
  29. package/dist/animation/proptrack.js.map +1 -1
  30. package/dist/animation/rotationtrack.js +3 -0
  31. package/dist/animation/rotationtrack.js.map +1 -1
  32. package/dist/animation/scaletrack.js +3 -0
  33. package/dist/animation/scaletrack.js.map +1 -1
  34. package/dist/animation/skeleton.js +254 -79
  35. package/dist/animation/skeleton.js.map +1 -1
  36. package/dist/animation/skeleton_modifier.js.map +1 -1
  37. package/dist/animation/spring_modifier.js.map +1 -1
  38. package/dist/animation/translationtrack.js +3 -0
  39. package/dist/animation/translationtrack.js.map +1 -1
  40. package/dist/app/engine.js +171 -107
  41. package/dist/app/engine.js.map +1 -1
  42. package/dist/app/scriptregistry.js +251 -80
  43. package/dist/app/scriptregistry.js.map +1 -1
  44. package/dist/asset/assetmanager.js +344 -365
  45. package/dist/asset/assetmanager.js.map +1 -1
  46. package/dist/asset/loaders/loader.js +1 -6
  47. package/dist/asset/loaders/loader.js.map +1 -1
  48. package/dist/asset/loaders/zabc/zabc_loader.js.map +1 -1
  49. package/dist/asset/model.js +1000 -131
  50. package/dist/asset/model.js.map +1 -1
  51. package/dist/avatar/wardrobe.js +474 -0
  52. package/dist/avatar/wardrobe.js.map +1 -0
  53. package/dist/index.d.ts +1126 -199
  54. package/dist/index.js +3 -2
  55. package/dist/index.js.map +1 -1
  56. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +6 -3
  57. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  58. package/dist/material/mixins/pbr/common.js +72 -15
  59. package/dist/material/mixins/pbr/common.js.map +1 -1
  60. package/dist/material/msdf_text.js +3 -3
  61. package/dist/material/msdf_text.js.map +1 -1
  62. package/dist/material/msdf_text_sprite.js +4 -4
  63. package/dist/material/msdf_text_sprite.js.map +1 -1
  64. package/dist/material/pbrblueprint.js +102 -102
  65. package/dist/material/pbrblueprint.js.map +1 -1
  66. package/dist/render/envlight.js +54 -1
  67. package/dist/render/envlight.js.map +1 -1
  68. package/dist/render/sky.js +9 -0
  69. package/dist/render/sky.js.map +1 -1
  70. package/dist/scene/batchgroup.js +11 -13
  71. package/dist/scene/batchgroup.js.map +1 -1
  72. package/dist/scene/environment.js +15 -2
  73. package/dist/scene/environment.js.map +1 -1
  74. package/dist/scene/mesh.js +79 -16
  75. package/dist/scene/mesh.js.map +1 -1
  76. package/dist/scene/scene.js +1 -0
  77. package/dist/scene/scene.js.map +1 -1
  78. package/dist/scene/scene_node.js +203 -2
  79. package/dist/scene/scene_node.js.map +1 -1
  80. package/dist/text/font/cff_font.js +890 -0
  81. package/dist/text/font/cff_font.js.map +1 -0
  82. package/dist/text/font/font_asset.js +17 -3
  83. package/dist/text/font/font_asset.js.map +1 -1
  84. package/dist/text/msdf/generator.js.map +1 -1
  85. package/dist/text/msdf/shape.js +4 -1
  86. package/dist/text/msdf/shape.js.map +1 -1
  87. package/dist/text/runtime/msdf_text_atlas_manager.js +4 -1
  88. package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -1
  89. package/dist/utility/blueprint/material/inputs.js +1157 -1154
  90. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  91. package/dist/utility/bounding_volume.js.map +1 -1
  92. package/dist/utility/pmrem.js +34 -8
  93. package/dist/utility/pmrem.js.map +1 -1
  94. package/dist/utility/serialization/manager.js +22 -9
  95. package/dist/utility/serialization/manager.js.map +1 -1
  96. package/dist/utility/serialization/scene/animation.js +700 -7
  97. package/dist/utility/serialization/scene/animation.js.map +1 -1
  98. package/dist/utility/serialization/scene/mesh.js +64 -4
  99. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  100. package/dist/utility/serialization/scene/node.js +187 -8
  101. package/dist/utility/serialization/scene/node.js.map +1 -1
  102. package/dist/utility/serialization/types.js.map +1 -1
  103. package/dist/utility/textures/sheenlut.js +138 -0
  104. package/dist/utility/textures/sheenlut.js.map +1 -0
  105. package/package.json +2 -2
  106. package/dist/animation/ik/ik_chain_builder.js +0 -68
  107. package/dist/animation/ik/ik_chain_builder.js.map +0 -1
  108. package/dist/animation/ik/ik_pole_constraint.js +0 -123
  109. package/dist/animation/ik/ik_pole_constraint.js.map +0 -1
  110. package/dist/animation/ik/ik_track.js +0 -96
  111. package/dist/animation/ik/ik_track.js.map +0 -1
  112. package/dist/animation/ik_postprocessor.js +0 -71
  113. package/dist/animation/ik_postprocessor.js.map +0 -1
  114. package/dist/animation/joint_dynamics/math.js +0 -16
  115. package/dist/animation/joint_dynamics/math.js.map +0 -1
  116. package/dist/animation/manual_transform_processor.js +0 -156
  117. package/dist/animation/manual_transform_processor.js.map +0 -1
  118. package/dist/animation/skeleton_postprocessor.js +0 -50
  119. package/dist/animation/skeleton_postprocessor.js.map +0 -1
  120. package/dist/animation/spring2/collision.js +0 -469
  121. package/dist/animation/spring2/collision.js.map +0 -1
  122. package/dist/animation/spring2/constraints.js +0 -329
  123. package/dist/animation/spring2/constraints.js.map +0 -1
  124. package/dist/animation/spring2/controller.js +0 -434
  125. package/dist/animation/spring2/controller.js.map +0 -1
  126. package/dist/animation/spring2/math.js +0 -16
  127. package/dist/animation/spring2/math.js.map +0 -1
  128. package/dist/animation/spring2/solver.js +0 -624
  129. package/dist/animation/spring2/solver.js.map +0 -1
  130. package/dist/animation/spring2/spring_system.js +0 -118
  131. package/dist/animation/spring2/spring_system.js.map +0 -1
  132. package/dist/animation/spring2/types.js +0 -19
  133. package/dist/animation/spring2/types.js.map +0 -1
  134. package/dist/animation/spring_postprocessor.js +0 -54
  135. package/dist/animation/spring_postprocessor.js.map +0 -1
  136. package/dist/asset/loaders/gltf/gltf_loader.js +0 -1273
  137. package/dist/asset/loaders/gltf/gltf_loader.js.map +0 -1
  138. package/dist/asset/loaders/gltf/helpers.js +0 -331
  139. package/dist/asset/loaders/gltf/helpers.js.map +0 -1
  140. package/dist/material/sprite3d.js +0 -301
  141. package/dist/material/sprite3d.js.map +0 -1
  142. package/dist/material/sprite3d_std.js +0 -116
  143. package/dist/material/sprite3d_std.js.map +0 -1
  144. package/dist/material/sprite3dblueprint.js +0 -235
  145. package/dist/material/sprite3dblueprint.js.map +0 -1
  146. package/dist/material/sprite_sdf.js +0 -106
  147. package/dist/material/sprite_sdf.js.map +0 -1
  148. package/dist/material/terrainmaterial.js +0 -368
  149. package/dist/material/terrainmaterial.js.map +0 -1
  150. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +0 -38
  151. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +0 -1
  152. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +0 -10
  153. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +0 -1
  154. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +0 -127
  155. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +0 -1
  156. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +0 -263
  157. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +0 -1
  158. package/dist/render/deferredlightpass.js +0 -510
  159. package/dist/render/deferredlightpass.js.map +0 -1
  160. package/dist/render/deferredshadowlightpass.js +0 -428
  161. package/dist/render/deferredshadowlightpass.js.map +0 -1
  162. package/dist/render/gbufferpass.js +0 -50
  163. package/dist/render/gbufferpass.js.map +0 -1
  164. package/dist/scene/sdftextsprite.js +0 -322
  165. package/dist/scene/sdftextsprite.js.map +0 -1
  166. package/dist/scene/sprite3d.js +0 -18
  167. package/dist/scene/sprite3d.js.map +0 -1
  168. package/dist/scene/terrain/grass.js +0 -280
  169. package/dist/scene/terrain/grass.js.map +0 -1
  170. package/dist/scene/terrain/heightfield.js +0 -475
  171. package/dist/scene/terrain/heightfield.js.map +0 -1
  172. package/dist/scene/terrain/patch.js +0 -532
  173. package/dist/scene/terrain/patch.js.map +0 -1
  174. package/dist/scene/terrain/quadtree.js +0 -461
  175. package/dist/scene/terrain/quadtree.js.map +0 -1
  176. package/dist/scene/terrain/terrain.js +0 -231
  177. package/dist/scene/terrain/terrain.js.map +0 -1
  178. package/dist/src/animation/animation.js +0 -127
  179. package/dist/src/animation/animation.js.map +0 -1
  180. package/dist/src/animation/animationset.js +0 -255
  181. package/dist/src/animation/animationset.js.map +0 -1
  182. package/dist/src/animation/animationtrack.js +0 -34
  183. package/dist/src/animation/animationtrack.js.map +0 -1
  184. package/dist/src/animation/eulerrotationtrack.js +0 -52
  185. package/dist/src/animation/eulerrotationtrack.js.map +0 -1
  186. package/dist/src/animation/morphtarget.js +0 -93
  187. package/dist/src/animation/morphtarget.js.map +0 -1
  188. package/dist/src/animation/morphtrack.js +0 -70
  189. package/dist/src/animation/morphtrack.js.map +0 -1
  190. package/dist/src/animation/proptrack.js +0 -161
  191. package/dist/src/animation/proptrack.js.map +0 -1
  192. package/dist/src/animation/rotationtrack.js +0 -51
  193. package/dist/src/animation/rotationtrack.js.map +0 -1
  194. package/dist/src/animation/scaletrack.js +0 -50
  195. package/dist/src/animation/scaletrack.js.map +0 -1
  196. package/dist/src/animation/skeleton.js +0 -204
  197. package/dist/src/animation/skeleton.js.map +0 -1
  198. package/dist/src/animation/translationtrack.js +0 -50
  199. package/dist/src/animation/translationtrack.js.map +0 -1
  200. package/dist/src/app/app.js +0 -129
  201. package/dist/src/app/app.js.map +0 -1
  202. package/dist/src/app/inputmgr.js +0 -267
  203. package/dist/src/app/inputmgr.js.map +0 -1
  204. package/dist/src/asset/assetmanager.js +0 -404
  205. package/dist/src/asset/assetmanager.js.map +0 -1
  206. package/dist/src/asset/builtin.js +0 -337
  207. package/dist/src/asset/builtin.js.map +0 -1
  208. package/dist/src/asset/loaders/dds/dds.js +0 -470
  209. package/dist/src/asset/loaders/dds/dds.js.map +0 -1
  210. package/dist/src/asset/loaders/dds/dds_loader.js +0 -28
  211. package/dist/src/asset/loaders/dds/dds_loader.js.map +0 -1
  212. package/dist/src/asset/loaders/gltf/gltf_loader.js +0 -1265
  213. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +0 -1
  214. package/dist/src/asset/loaders/gltf/helpers.js +0 -327
  215. package/dist/src/asset/loaders/gltf/helpers.js.map +0 -1
  216. package/dist/src/asset/loaders/hdr/hdr.js +0 -180
  217. package/dist/src/asset/loaders/hdr/hdr.js.map +0 -1
  218. package/dist/src/asset/loaders/image/tga_Loader.js +0 -116
  219. package/dist/src/asset/loaders/image/tga_Loader.js.map +0 -1
  220. package/dist/src/asset/loaders/image/webimage_loader.js +0 -63
  221. package/dist/src/asset/loaders/image/webimage_loader.js.map +0 -1
  222. package/dist/src/asset/loaders/loader.js +0 -45
  223. package/dist/src/asset/loaders/loader.js.map +0 -1
  224. package/dist/src/asset/model.js +0 -414
  225. package/dist/src/asset/model.js.map +0 -1
  226. package/dist/src/blitter/bilateralblur.js +0 -221
  227. package/dist/src/blitter/bilateralblur.js.map +0 -1
  228. package/dist/src/blitter/blitter.js +0 -390
  229. package/dist/src/blitter/blitter.js.map +0 -1
  230. package/dist/src/blitter/box.js +0 -118
  231. package/dist/src/blitter/box.js.map +0 -1
  232. package/dist/src/blitter/copy.js +0 -22
  233. package/dist/src/blitter/copy.js.map +0 -1
  234. package/dist/src/blitter/gaussianblur.js +0 -228
  235. package/dist/src/blitter/gaussianblur.js.map +0 -1
  236. package/dist/src/camera/base.js +0 -92
  237. package/dist/src/camera/base.js.map +0 -1
  238. package/dist/src/camera/camera.js +0 -1005
  239. package/dist/src/camera/camera.js.map +0 -1
  240. package/dist/src/camera/fps.js +0 -238
  241. package/dist/src/camera/fps.js.map +0 -1
  242. package/dist/src/camera/orbit.js +0 -245
  243. package/dist/src/camera/orbit.js.map +0 -1
  244. package/dist/src/camera/orthocamera.js +0 -167
  245. package/dist/src/camera/orthocamera.js.map +0 -1
  246. package/dist/src/camera/perspectivecamera.js +0 -141
  247. package/dist/src/camera/perspectivecamera.js.map +0 -1
  248. package/dist/src/index.js +0 -120
  249. package/dist/src/index.js.map +0 -1
  250. package/dist/src/material/blinn.js +0 -81
  251. package/dist/src/material/blinn.js.map +0 -1
  252. package/dist/src/material/grassmaterial.js +0 -113
  253. package/dist/src/material/grassmaterial.js.map +0 -1
  254. package/dist/src/material/lambert.js +0 -92
  255. package/dist/src/material/lambert.js.map +0 -1
  256. package/dist/src/material/material.js +0 -301
  257. package/dist/src/material/material.js.map +0 -1
  258. package/dist/src/material/meshmaterial.js +0 -704
  259. package/dist/src/material/meshmaterial.js.map +0 -1
  260. package/dist/src/material/mixins/albedocolor.js +0 -76
  261. package/dist/src/material/mixins/albedocolor.js.map +0 -1
  262. package/dist/src/material/mixins/foliage.js +0 -47
  263. package/dist/src/material/mixins/foliage.js.map +0 -1
  264. package/dist/src/material/mixins/lightmodel/blinnphong.js +0 -112
  265. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +0 -1
  266. package/dist/src/material/mixins/lightmodel/lambert.js +0 -58
  267. package/dist/src/material/mixins/lightmodel/lambert.js.map +0 -1
  268. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +0 -178
  269. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +0 -1
  270. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +0 -139
  271. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +0 -1
  272. package/dist/src/material/mixins/lit.js +0 -476
  273. package/dist/src/material/mixins/lit.js.map +0 -1
  274. package/dist/src/material/mixins/pbr/common.js +0 -918
  275. package/dist/src/material/mixins/pbr/common.js.map +0 -1
  276. package/dist/src/material/mixins/texture.js +0 -172
  277. package/dist/src/material/mixins/texture.js.map +0 -1
  278. package/dist/src/material/mixins/vertexcolor.js +0 -56
  279. package/dist/src/material/mixins/vertexcolor.js.map +0 -1
  280. package/dist/src/material/particle.js +0 -178
  281. package/dist/src/material/particle.js.map +0 -1
  282. package/dist/src/material/pbrmr.js +0 -97
  283. package/dist/src/material/pbrmr.js.map +0 -1
  284. package/dist/src/material/pbrsg.js +0 -97
  285. package/dist/src/material/pbrsg.js.map +0 -1
  286. package/dist/src/material/shader/helper.js +0 -1209
  287. package/dist/src/material/shader/helper.js.map +0 -1
  288. package/dist/src/material/terrain-cm.js +0 -606
  289. package/dist/src/material/terrain-cm.js.map +0 -1
  290. package/dist/src/material/terrainmaterial.js +0 -375
  291. package/dist/src/material/terrainmaterial.js.map +0 -1
  292. package/dist/src/material/unlit.js +0 -41
  293. package/dist/src/material/unlit.js.map +0 -1
  294. package/dist/src/material/water.js +0 -417
  295. package/dist/src/material/water.js.map +0 -1
  296. package/dist/src/posteffect/bloom.js +0 -361
  297. package/dist/src/posteffect/bloom.js.map +0 -1
  298. package/dist/src/posteffect/compositor.js +0 -226
  299. package/dist/src/posteffect/compositor.js.map +0 -1
  300. package/dist/src/posteffect/fxaa.js +0 -273
  301. package/dist/src/posteffect/fxaa.js.map +0 -1
  302. package/dist/src/posteffect/grayscale.js +0 -69
  303. package/dist/src/posteffect/grayscale.js.map +0 -1
  304. package/dist/src/posteffect/motionblur.js +0 -96
  305. package/dist/src/posteffect/motionblur.js.map +0 -1
  306. package/dist/src/posteffect/posteffect.js +0 -126
  307. package/dist/src/posteffect/posteffect.js.map +0 -1
  308. package/dist/src/posteffect/sao.js +0 -324
  309. package/dist/src/posteffect/sao.js.map +0 -1
  310. package/dist/src/posteffect/ssr.js +0 -489
  311. package/dist/src/posteffect/ssr.js.map +0 -1
  312. package/dist/src/posteffect/taa.js +0 -172
  313. package/dist/src/posteffect/taa.js.map +0 -1
  314. package/dist/src/posteffect/tonemap.js +0 -94
  315. package/dist/src/posteffect/tonemap.js.map +0 -1
  316. package/dist/src/render/abuffer_oit.js +0 -361
  317. package/dist/src/render/abuffer_oit.js.map +0 -1
  318. package/dist/src/render/clipmap.js +0 -851
  319. package/dist/src/render/clipmap.js.map +0 -1
  320. package/dist/src/render/cluster_light.js +0 -333
  321. package/dist/src/render/cluster_light.js.map +0 -1
  322. package/dist/src/render/cull_visitor.js +0 -187
  323. package/dist/src/render/cull_visitor.js.map +0 -1
  324. package/dist/src/render/depthpass.js +0 -68
  325. package/dist/src/render/depthpass.js.map +0 -1
  326. package/dist/src/render/drawable_mixin.js +0 -227
  327. package/dist/src/render/drawable_mixin.js.map +0 -1
  328. package/dist/src/render/envlight.js +0 -463
  329. package/dist/src/render/envlight.js.map +0 -1
  330. package/dist/src/render/fbm_wavegenerator.js +0 -251
  331. package/dist/src/render/fbm_wavegenerator.js.map +0 -1
  332. package/dist/src/render/fft_wavegenerator.js +0 -1006
  333. package/dist/src/render/fft_wavegenerator.js.map +0 -1
  334. package/dist/src/render/fullscreenquad.js +0 -38
  335. package/dist/src/render/fullscreenquad.js.map +0 -1
  336. package/dist/src/render/gerstner_wavegenerator.js +0 -314
  337. package/dist/src/render/gerstner_wavegenerator.js.map +0 -1
  338. package/dist/src/render/globalbindgroup_allocator.js +0 -60
  339. package/dist/src/render/globalbindgroup_allocator.js.map +0 -1
  340. package/dist/src/render/hzb.js +0 -273
  341. package/dist/src/render/hzb.js.map +0 -1
  342. package/dist/src/render/lightpass.js +0 -172
  343. package/dist/src/render/lightpass.js.map +0 -1
  344. package/dist/src/render/objectcolorpass.js +0 -51
  345. package/dist/src/render/objectcolorpass.js.map +0 -1
  346. package/dist/src/render/primitive.js +0 -364
  347. package/dist/src/render/primitive.js.map +0 -1
  348. package/dist/src/render/render_queue.js +0 -467
  349. package/dist/src/render/render_queue.js.map +0 -1
  350. package/dist/src/render/renderbundle_wrapper.js +0 -152
  351. package/dist/src/render/renderbundle_wrapper.js.map +0 -1
  352. package/dist/src/render/renderer.js +0 -455
  353. package/dist/src/render/renderer.js.map +0 -1
  354. package/dist/src/render/renderpass.js +0 -200
  355. package/dist/src/render/renderpass.js.map +0 -1
  356. package/dist/src/render/shadowmap_pass.js +0 -56
  357. package/dist/src/render/shadowmap_pass.js.map +0 -1
  358. package/dist/src/render/sky.js +0 -1103
  359. package/dist/src/render/sky.js.map +0 -1
  360. package/dist/src/render/weightedblended_oit.js +0 -168
  361. package/dist/src/render/weightedblended_oit.js.map +0 -1
  362. package/dist/src/scene/batchgroup.js +0 -162
  363. package/dist/src/scene/batchgroup.js.map +0 -1
  364. package/dist/src/scene/environment.js +0 -209
  365. package/dist/src/scene/environment.js.map +0 -1
  366. package/dist/src/scene/graph_node.js +0 -72
  367. package/dist/src/scene/graph_node.js.map +0 -1
  368. package/dist/src/scene/light.js +0 -416
  369. package/dist/src/scene/light.js.map +0 -1
  370. package/dist/src/scene/mesh.js +0 -341
  371. package/dist/src/scene/mesh.js.map +0 -1
  372. package/dist/src/scene/octree.js +0 -649
  373. package/dist/src/scene/octree.js.map +0 -1
  374. package/dist/src/scene/particlesys.js +0 -738
  375. package/dist/src/scene/particlesys.js.map +0 -1
  376. package/dist/src/scene/raycast_visitor.js +0 -103
  377. package/dist/src/scene/raycast_visitor.js.map +0 -1
  378. package/dist/src/scene/scene.js +0 -284
  379. package/dist/src/scene/scene.js.map +0 -1
  380. package/dist/src/scene/scene_node.js +0 -732
  381. package/dist/src/scene/scene_node.js.map +0 -1
  382. package/dist/src/scene/terrain/grass.js +0 -278
  383. package/dist/src/scene/terrain/grass.js.map +0 -1
  384. package/dist/src/scene/terrain/heightfield.js +0 -475
  385. package/dist/src/scene/terrain/heightfield.js.map +0 -1
  386. package/dist/src/scene/terrain/patch.js +0 -530
  387. package/dist/src/scene/terrain/patch.js.map +0 -1
  388. package/dist/src/scene/terrain/quadtree.js +0 -461
  389. package/dist/src/scene/terrain/quadtree.js.map +0 -1
  390. package/dist/src/scene/terrain/terrain.js +0 -246
  391. package/dist/src/scene/terrain/terrain.js.map +0 -1
  392. package/dist/src/scene/terrain-cm/grass.js +0 -594
  393. package/dist/src/scene/terrain-cm/grass.js.map +0 -1
  394. package/dist/src/scene/terrain-cm/grassmaterial.js +0 -159
  395. package/dist/src/scene/terrain-cm/grassmaterial.js.map +0 -1
  396. package/dist/src/scene/terrain-cm/terrain-cm.js +0 -538
  397. package/dist/src/scene/terrain-cm/terrain-cm.js.map +0 -1
  398. package/dist/src/scene/water.js +0 -374
  399. package/dist/src/scene/water.js.map +0 -1
  400. package/dist/src/shaders/atmosphere.js +0 -957
  401. package/dist/src/shaders/atmosphere.js.map +0 -1
  402. package/dist/src/shaders/fog.js +0 -112
  403. package/dist/src/shaders/fog.js.map +0 -1
  404. package/dist/src/shaders/misc.js +0 -266
  405. package/dist/src/shaders/misc.js.map +0 -1
  406. package/dist/src/shaders/noise.js +0 -222
  407. package/dist/src/shaders/noise.js.map +0 -1
  408. package/dist/src/shaders/pbr.js +0 -51
  409. package/dist/src/shaders/pbr.js.map +0 -1
  410. package/dist/src/shaders/shadow.js +0 -636
  411. package/dist/src/shaders/shadow.js.map +0 -1
  412. package/dist/src/shaders/ssr.js +0 -490
  413. package/dist/src/shaders/ssr.js.map +0 -1
  414. package/dist/src/shaders/temporal.js +0 -215
  415. package/dist/src/shaders/temporal.js.map +0 -1
  416. package/dist/src/shaders/water.js +0 -756
  417. package/dist/src/shaders/water.js.map +0 -1
  418. package/dist/src/shadow/esm.js +0 -237
  419. package/dist/src/shadow/esm.js.map +0 -1
  420. package/dist/src/shadow/pcf_opt.js +0 -181
  421. package/dist/src/shadow/pcf_opt.js.map +0 -1
  422. package/dist/src/shadow/pcf_pd.js +0 -189
  423. package/dist/src/shadow/pcf_pd.js.map +0 -1
  424. package/dist/src/shadow/shader.js +0 -37
  425. package/dist/src/shadow/shader.js.map +0 -1
  426. package/dist/src/shadow/shadow_impl.js +0 -15
  427. package/dist/src/shadow/shadow_impl.js.map +0 -1
  428. package/dist/src/shadow/shadowmapper.js +0 -790
  429. package/dist/src/shadow/shadowmapper.js.map +0 -1
  430. package/dist/src/shadow/ssm.js +0 -159
  431. package/dist/src/shadow/ssm.js.map +0 -1
  432. package/dist/src/shadow/vsm.js +0 -297
  433. package/dist/src/shadow/vsm.js.map +0 -1
  434. package/dist/src/shapes/box.js +0 -386
  435. package/dist/src/shapes/box.js.map +0 -1
  436. package/dist/src/shapes/cylinder.js +0 -125
  437. package/dist/src/shapes/cylinder.js.map +0 -1
  438. package/dist/src/shapes/plane.js +0 -88
  439. package/dist/src/shapes/plane.js.map +0 -1
  440. package/dist/src/shapes/shape.js +0 -87
  441. package/dist/src/shapes/shape.js.map +0 -1
  442. package/dist/src/shapes/sphere.js +0 -114
  443. package/dist/src/shapes/sphere.js.map +0 -1
  444. package/dist/src/shapes/tetrahedron.js +0 -188
  445. package/dist/src/shapes/tetrahedron.js.map +0 -1
  446. package/dist/src/shapes/torus.js +0 -111
  447. package/dist/src/shapes/torus.js.map +0 -1
  448. package/dist/src/utility/aabbtree.js +0 -400
  449. package/dist/src/utility/aabbtree.js.map +0 -1
  450. package/dist/src/utility/bounding_volume.js +0 -29
  451. package/dist/src/utility/bounding_volume.js.map +0 -1
  452. package/dist/src/utility/debug.js +0 -28
  453. package/dist/src/utility/debug.js.map +0 -1
  454. package/dist/src/utility/draco/decoder.js +0 -116
  455. package/dist/src/utility/draco/decoder.js.map +0 -1
  456. package/dist/src/utility/misc.js +0 -105
  457. package/dist/src/utility/misc.js.map +0 -1
  458. package/dist/src/utility/panorama.js +0 -163
  459. package/dist/src/utility/panorama.js.map +0 -1
  460. package/dist/src/utility/pmrem.js +0 -354
  461. package/dist/src/utility/pmrem.js.map +0 -1
  462. package/dist/src/utility/rendermipmap.js +0 -115
  463. package/dist/src/utility/rendermipmap.js.map +0 -1
  464. package/dist/src/utility/serialization/json.js +0 -402
  465. package/dist/src/utility/serialization/json.js.map +0 -1
  466. package/dist/src/utility/serialization/manager.js +0 -623
  467. package/dist/src/utility/serialization/manager.js.map +0 -1
  468. package/dist/src/utility/serialization/scene/animation.js +0 -248
  469. package/dist/src/utility/serialization/scene/animation.js.map +0 -1
  470. package/dist/src/utility/serialization/scene/batch.js +0 -59
  471. package/dist/src/utility/serialization/scene/batch.js.map +0 -1
  472. package/dist/src/utility/serialization/scene/camera.js +0 -790
  473. package/dist/src/utility/serialization/scene/camera.js.map +0 -1
  474. package/dist/src/utility/serialization/scene/common.js +0 -222
  475. package/dist/src/utility/serialization/scene/common.js.map +0 -1
  476. package/dist/src/utility/serialization/scene/light.js +0 -575
  477. package/dist/src/utility/serialization/scene/light.js.map +0 -1
  478. package/dist/src/utility/serialization/scene/material.js +0 -1111
  479. package/dist/src/utility/serialization/scene/material.js.map +0 -1
  480. package/dist/src/utility/serialization/scene/mesh.js +0 -148
  481. package/dist/src/utility/serialization/scene/mesh.js.map +0 -1
  482. package/dist/src/utility/serialization/scene/misc.js +0 -39
  483. package/dist/src/utility/serialization/scene/misc.js.map +0 -1
  484. package/dist/src/utility/serialization/scene/node.js +0 -451
  485. package/dist/src/utility/serialization/scene/node.js.map +0 -1
  486. package/dist/src/utility/serialization/scene/particle.js +0 -425
  487. package/dist/src/utility/serialization/scene/particle.js.map +0 -1
  488. package/dist/src/utility/serialization/scene/primitive.js +0 -692
  489. package/dist/src/utility/serialization/scene/primitive.js.map +0 -1
  490. package/dist/src/utility/serialization/scene/scene.js +0 -704
  491. package/dist/src/utility/serialization/scene/scene.js.map +0 -1
  492. package/dist/src/utility/serialization/scene/terrain.js +0 -488
  493. package/dist/src/utility/serialization/scene/terrain.js.map +0 -1
  494. package/dist/src/utility/serialization/scene/water.js +0 -465
  495. package/dist/src/utility/serialization/scene/water.js.map +0 -1
  496. package/dist/src/utility/shprojector.js +0 -297
  497. package/dist/src/utility/shprojector.js.map +0 -1
  498. package/dist/src/utility/textures/ggxlut.js +0 -213
  499. package/dist/src/utility/textures/ggxlut.js.map +0 -1
  500. package/dist/src/utility/textures/gradientnoise.js +0 -62
  501. package/dist/src/utility/textures/gradientnoise.js.map +0 -1
  502. package/dist/src/utility/textures/randomnoise.js +0 -41
  503. package/dist/src/utility/textures/randomnoise.js.map +0 -1
  504. package/dist/src/values.js +0 -162
  505. package/dist/src/values.js.map +0 -1
  506. package/dist/utility/blueprint/material/common.js +0 -7
  507. package/dist/utility/blueprint/material/common.js.map +0 -1
  508. package/dist/utility/serialization/blueprint/constants.js +0 -255
  509. package/dist/utility/serialization/blueprint/constants.js.map +0 -1
  510. package/dist/utility/serialization/blueprint/material/constants.js +0 -203
  511. package/dist/utility/serialization/blueprint/material/constants.js.map +0 -1
  512. package/dist/utility/serialization/blueprint/material/texture.js +0 -165
  513. package/dist/utility/serialization/blueprint/material/texture.js.map +0 -1
  514. package/dist/utility/serialization/scene/cloth_script.js +0 -834
  515. package/dist/utility/serialization/scene/cloth_script.js.map +0 -1
  516. package/dist/utility/serialization/scene/spring_script.js +0 -596
  517. package/dist/utility/serialization/scene/spring_script.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sources":["../../../../src/utility/serialization/scene/node.ts"],"sourcesContent":["import { SceneNode } from '../../../scene/scene_node';\r\nimport type { SceneNodeVisible } from '../../../scene/scene_node';\r\nimport { Scene } from '../../../scene/scene';\r\nimport { defineProps, type SerializableClass } from '../types';\r\nimport type { DiffPatch, DiffValue } from '@zephyr3d/base';\r\nimport { applyPatch, ASSERT, degree2radian, diff, DRef, radian2degree } from '@zephyr3d/base';\r\nimport { GraphNode } from '../../../scene';\r\nimport type { ResourceManager } from '../manager';\r\nimport { AnimationClip, NodeRotationTrack, NodeScaleTrack, NodeTranslationTrack } from '../../../animation';\r\nimport { JSONArray, JSONData } from '../json';\r\nimport { ScriptAttachment, normalizeScriptAttachmentConfig } from '../../../scene/script_attachment';\r\nimport { parseZABCBlob, attachZABCAnimationsToSceneNode } from '../../../asset/loaders/zabc/zabc_loader';\r\nimport { restoreGeometryCacheMeshBinding } from '../../../animation/geometry_cache_utils';\r\nconst geometryCacheBindings = new WeakMap<\r\n SceneNode,\r\n {\r\n assetId: string;\r\n autoPlay: boolean;\r\n animationNames: string[];\r\n }\r\n>();\r\n\r\nfunction normalizeSerializedSceneNodeData(data: DiffValue): Record<string, unknown> {\r\n if (!data || typeof data !== 'object' || Array.isArray(data)) {\r\n return {\r\n ClassName: 'SceneNode',\r\n Object: {}\r\n };\r\n }\r\n const serialized = data as Record<string, unknown>;\r\n if (typeof serialized.ClassName === 'string') {\r\n return serialized;\r\n }\r\n const objectData =\r\n serialized.Object && typeof serialized.Object === 'object' && !Array.isArray(serialized.Object)\r\n ? (serialized.Object as Record<string, unknown>)\r\n : serialized;\r\n return {\r\n ClassName: 'SceneNode',\r\n Object: objectData\r\n };\r\n}\r\n\r\nfunction hasMeshDescendants(node: SceneNode) {\r\n let hasMesh = false;\r\n node.iterate((child) => {\r\n if (child.isMesh()) {\r\n hasMesh = true;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return hasMesh;\r\n}\r\n\r\nasync function restoreGeometryCacheMeshes(node: SceneNode) {\r\n const tasks: Promise<boolean>[] = [];\r\n node.iterate((child) => {\r\n if (child.isMesh()) {\r\n tasks.push(restoreGeometryCacheMeshBinding(child));\r\n }\r\n return false;\r\n });\r\n if (tasks.length > 0) {\r\n await Promise.all(tasks);\r\n }\r\n}\r\n\r\nasync function clearGeometryCacheBinding(node: SceneNode) {\r\n const previous = geometryCacheBindings.get(node);\r\n if (!previous) {\r\n return null;\r\n }\r\n for (const name of previous.animationNames) {\r\n if (node.animationSet.isPlayingAnimation(name)) {\r\n node.animationSet.stopAnimation(name);\r\n }\r\n node.animationSet.deleteAnimation(name);\r\n }\r\n await restoreGeometryCacheMeshes(node);\r\n geometryCacheBindings.delete(node);\r\n return previous;\r\n}\r\n\r\n/** @internal */\r\nexport function getSceneNodeClass(manager: ResourceManager): SerializableClass {\r\n return {\r\n ctor: SceneNode,\r\n name: 'SceneNode',\r\n async createFunc(\r\n ctx: Scene | SceneNode,\r\n init?: { prefabId?: string; assetId?: string; patch?: DiffPatch }\r\n ) {\r\n const scene = ctx instanceof Scene ? ctx : ctx.scene;\r\n if (init?.prefabId) {\r\n const prefabData = (await manager.loadPrefabContent(init.prefabId))!.data as DiffValue;\r\n const nodeData = normalizeSerializedSceneNodeData(\r\n applyPatch(prefabData, init.patch ?? []) as DiffValue\r\n );\r\n const tmpNode = new DRef(new SceneNode(scene));\r\n tmpNode.get()!.remove();\r\n tmpNode.get()!.prefabId = init.prefabId;\r\n const sceneNode = await manager.deserializeObject<SceneNode>(tmpNode.get(), nodeData);\r\n if (sceneNode) {\r\n sceneNode.prefabId = init.prefabId;\r\n sceneNode.parent = ctx instanceof SceneNode ? ctx : ctx.rootNode;\r\n }\r\n tmpNode.dispose();\r\n return { obj: sceneNode, loadProps: false };\r\n }\r\n if (init?.assetId) {\r\n const fetchedModel = await manager.fetchModel(init.assetId, scene!);\r\n const sceneNode = fetchedModel?.group ?? null;\r\n if (sceneNode) {\r\n const originalAssetId = manager.getAssetId(sceneNode);\r\n try {\r\n manager.setAssetId(sceneNode, null);\r\n const baseNodeData = await manager.serializeObject(sceneNode);\r\n const nodeData = normalizeSerializedSceneNodeData(\r\n applyPatch(baseNodeData as DiffValue, init.patch ?? []) as DiffValue\r\n );\r\n await manager.deserializeObjectProps(sceneNode, nodeData.Object as Record<string, unknown>);\r\n } finally {\r\n manager.setAssetId(sceneNode, originalAssetId ?? init.assetId);\r\n }\r\n sceneNode.parent = ctx instanceof SceneNode ? ctx : ctx.rootNode;\r\n }\r\n return { obj: sceneNode, loadProps: false };\r\n }\r\n const node = new SceneNode(scene);\r\n if (ctx instanceof SceneNode) {\r\n node.parent = ctx;\r\n }\r\n return { obj: node };\r\n },\r\n async getInitParams(obj: SceneNode, flags) {\r\n const prefabId = obj.prefabId;\r\n const assetId = manager.getAssetId(obj);\r\n let patch: DiffPatch | undefined = undefined;\r\n if (prefabId) {\r\n try {\r\n obj.prefabId = '';\r\n const prefabData = (await manager.loadPrefabContent(prefabId))!.data as DiffValue;\r\n const nodeData = await manager.serializeObject(obj);\r\n patch = diff(prefabData, nodeData);\r\n ASSERT(diff(applyPatch(prefabData, patch), nodeData).length === 0, 'Patch test failed');\r\n } finally {\r\n obj.prefabId = prefabId;\r\n }\r\n flags.saveProps = false;\r\n }\r\n if (!prefabId && assetId) {\r\n const baseNode = (await manager.fetchModel(assetId, obj.scene!))?.group ?? null;\r\n if (baseNode) {\r\n const originalObjectAssetId = manager.getAssetId(obj);\r\n const originalBaseAssetId = manager.getAssetId(baseNode);\r\n try {\r\n manager.setAssetId(obj, null);\r\n manager.setAssetId(baseNode, null);\r\n const baseNodeData = await manager.serializeObject(baseNode);\r\n const nodeData = await manager.serializeObject(obj);\r\n patch = diff(baseNodeData, nodeData);\r\n ASSERT(diff(applyPatch(baseNodeData, patch), nodeData).length === 0, 'Patch test failed');\r\n } finally {\r\n manager.setAssetId(obj, originalObjectAssetId);\r\n manager.setAssetId(baseNode, originalBaseAssetId);\r\n baseNode.remove();\r\n }\r\n flags.saveProps = false;\r\n }\r\n }\r\n return prefabId\r\n ? {\r\n prefabId,\r\n patch\r\n }\r\n : assetId\r\n ? {\r\n assetId,\r\n patch\r\n }\r\n : null;\r\n },\r\n getProps() {\r\n return defineProps([\r\n {\r\n name: 'Id',\r\n description: 'Unique persistent id for the node',\r\n type: 'string',\r\n get(this: SceneNode, value) {\r\n value.str[0] = this.persistentId;\r\n },\r\n set(this: SceneNode, value) {\r\n this.persistentId = value.str[0];\r\n }\r\n },\r\n {\r\n name: 'PrefabId',\r\n description: 'Persistent ID of the prefab source for this node',\r\n type: 'string',\r\n isHidden() {\r\n return true;\r\n },\r\n get(this: SceneNode, value) {\r\n value.str[0] = this.prefabId;\r\n }\r\n },\r\n {\r\n name: 'Name',\r\n description: 'Display name of the node',\r\n type: 'string',\r\n getDefaultValue() {\r\n return '';\r\n },\r\n get(this: SceneNode, value) {\r\n value.str[0] = this.name;\r\n },\r\n set(this: SceneNode, value) {\r\n this.name = value.str[0];\r\n }\r\n },\r\n {\r\n name: 'Position',\r\n description: 'Local position of the node',\r\n type: 'vec3',\r\n default: [0, 0, 0],\r\n options: {\r\n animatable: true\r\n },\r\n isPersistent(this: SceneNode) {\r\n return this.jointTypeT !== 'animated';\r\n },\r\n get(this: SceneNode, value) {\r\n value.num[0] = this.position.x;\r\n value.num[1] = this.position.y;\r\n value.num[2] = this.position.z;\r\n },\r\n set(this: SceneNode, value) {\r\n this.position.setXYZ(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'Scale',\r\n description: 'Local scale of the node',\r\n type: 'vec3',\r\n default: [1, 1, 1],\r\n options: {\r\n animatable: true\r\n },\r\n isPersistent(this: SceneNode) {\r\n return this.jointTypeS !== 'animated';\r\n },\r\n isHidden(this: SceneNode) {\r\n return this.isCamera();\r\n },\r\n get(this: SceneNode, value) {\r\n value.num[0] = this.scale.x;\r\n value.num[1] = this.scale.y;\r\n value.num[2] = this.scale.z;\r\n },\r\n set(this: SceneNode, value) {\r\n this.scale.setXYZ(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'Rotation',\r\n description: 'Euler rotation of this node in ZYX order',\r\n type: 'vec3',\r\n default: [0, 0, 0],\r\n options: {\r\n animatable: true,\r\n edit: 'quaternion'\r\n },\r\n isPersistent() {\r\n return false;\r\n },\r\n isHidden(this: SceneNode) {\r\n return this.isCamera() && this.isOrtho();\r\n },\r\n get(this: SceneNode, value) {\r\n const zyx = this.rotation.toEulerAngles();\r\n value.num[0] = Math.round(radian2degree(zyx.x));\r\n value.num[1] = Math.round(radian2degree(zyx.y));\r\n value.num[2] = Math.round(radian2degree(zyx.z));\r\n },\r\n set(this: SceneNode, value) {\r\n this.rotation.fromEulerAngle(\r\n degree2radian(value.num[0]),\r\n degree2radian(value.num[1]),\r\n degree2radian(value.num[2])\r\n );\r\n }\r\n },\r\n {\r\n name: 'QuatRotation',\r\n description: 'Node rotation quaternion',\r\n type: 'vec4',\r\n default: [0, 0, 0, 1],\r\n isHidden() {\r\n return true;\r\n },\r\n isPersistent(this: SceneNode) {\r\n return this.jointTypeR !== 'animated';\r\n },\r\n get(this: SceneNode, value) {\r\n value.num[0] = this.rotation.x;\r\n value.num[1] = this.rotation.y;\r\n value.num[2] = this.rotation.z;\r\n value.num[3] = this.rotation.w;\r\n },\r\n set(this: SceneNode, value) {\r\n this.rotation.setXYZW(value.num[0], value.num[1], value.num[2], value.num[3]);\r\n }\r\n },\r\n {\r\n name: 'Pickable',\r\n description: 'If true, enable ray-cast for this object',\r\n type: 'bool',\r\n default: false,\r\n get(this: SceneNode, value) {\r\n value.bool[0] = this.pickable;\r\n },\r\n set(this: SceneNode, value) {\r\n this.pickable = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'Visible',\r\n description: 'Node visible state',\r\n type: 'string',\r\n default: 'inherit',\r\n options: {\r\n enum: {\r\n labels: ['Visible', 'Hidden', 'Inherit'],\r\n values: ['visible', 'hidden', 'inherit']\r\n }\r\n },\r\n get(this: SceneNode, value) {\r\n value.str[0] = this.showState;\r\n },\r\n set(this: SceneNode, value) {\r\n this.showState = value.str[0] as SceneNodeVisible;\r\n }\r\n },\r\n {\r\n name: 'Children',\r\n description: 'Children nodes of this node',\r\n type: 'object_array',\r\n phase: 0,\r\n isHidden() {\r\n return true;\r\n },\r\n get(this: SceneNode, value) {\r\n value.object = [];\r\n for (const child of this.children) {\r\n if (!child.sealed) {\r\n value.object.push(child);\r\n }\r\n }\r\n },\r\n set(this: SceneNode, value) {\r\n const children = this.children;\r\n for (let i = children.length - 1; i >= 0; i--) {\r\n const child = children[i];\r\n if (!value.object.includes(child) && !child.sealed) {\r\n child.remove();\r\n }\r\n }\r\n for (const child of value.object) {\r\n if (child instanceof SceneNode) {\r\n child.parent = this;\r\n } else {\r\n console.error(`Invalid scene node: ${child}`);\r\n }\r\n }\r\n }\r\n },\r\n {\r\n name: 'GeometryCache',\r\n description: 'Alembic geometry cache asset used by this node',\r\n type: 'string',\r\n options: {\r\n group: 'Animation',\r\n label: 'Geometry Cache',\r\n mimeTypes: ['application/vnd.zephyr3d.alembic-cache+json']\r\n },\r\n isValid(this: SceneNode) {\r\n return this !== this.scene?.rootNode && hasMeshDescendants(this);\r\n },\r\n get(this: SceneNode, value) {\r\n value.str[0] = geometryCacheBindings.get(this)?.assetId ?? '';\r\n },\r\n async set(this: SceneNode, value) {\r\n const previous = await clearGeometryCacheBinding(this);\r\n const assetId = value?.str?.[0]?.trim() ?? '';\r\n if (!assetId) {\r\n return;\r\n }\r\n const binary = (await manager.assetManager.fetchBinaryData(assetId)) as ArrayBuffer;\r\n const parsed = await parseZABCBlob(\r\n new Blob([binary], { type: manager.VFS.guessMIMEType(assetId) || 'application/octet-stream' })\r\n );\r\n const autoPlay = previous?.autoPlay ?? false;\r\n const result = await attachZABCAnimationsToSceneNode(this, parsed, {\r\n sourcePath: assetId,\r\n autoPlay,\r\n replaceAnimationNames: []\r\n });\r\n geometryCacheBindings.set(this, {\r\n assetId,\r\n autoPlay,\r\n animationNames: result.animationNames\r\n });\r\n }\r\n },\r\n {\r\n name: 'GeometryCacheAutoPlay',\r\n description: 'If true, plays the geometry cache automatically when loaded',\r\n type: 'bool',\r\n default: false,\r\n options: {\r\n group: 'Animation',\r\n label: 'Cache AutoPlay'\r\n },\r\n isValid(this: SceneNode) {\r\n return this !== this.scene?.rootNode && hasMeshDescendants(this);\r\n },\r\n get(this: SceneNode, value) {\r\n value.bool[0] = geometryCacheBindings.get(this)?.autoPlay ?? false;\r\n },\r\n async set(this: SceneNode, value) {\r\n const current = geometryCacheBindings.get(this);\r\n if (!current) {\r\n return;\r\n }\r\n const autoPlay = !!value.bool[0];\r\n geometryCacheBindings.set(this, {\r\n assetId: current.assetId,\r\n autoPlay,\r\n animationNames: current.animationNames\r\n });\r\n for (const name of current.animationNames) {\r\n const animation = this.animationSet.getAnimationClip(name);\r\n if (animation) {\r\n animation.autoPlay = autoPlay;\r\n if (autoPlay) {\r\n this.animationSet.playAnimation(name, { repeat: 0 });\r\n } else if (this.animationSet.isPlayingAnimation(name)) {\r\n this.animationSet.stopAnimation(name);\r\n }\r\n }\r\n }\r\n }\r\n },\r\n {\r\n name: 'Animations',\r\n description: 'Animation clips which affect this object or children',\r\n type: 'object_array',\r\n phase: 2,\r\n readonly: true,\r\n options: {\r\n objectTypes: [AnimationClip]\r\n },\r\n get(this: SceneNode, value) {\r\n const animationSet = this.animationSet;\r\n value.object = animationSet\r\n .getAnimationNames()\r\n .map((name) => animationSet.getAnimationClip(name));\r\n },\r\n set(this: SceneNode, value) {\r\n for (const ani of value.object) {\r\n const animation = ani as AnimationClip;\r\n for (const tracks of animation.tracks) {\r\n for (const track of tracks[1]) {\r\n if (!track.embedded) {\r\n animation.addTrack(tracks[0], track);\r\n if (tracks[0] instanceof SceneNode) {\r\n if (track instanceof NodeTranslationTrack) {\r\n tracks[0].jointTypeT = 'animated';\r\n } else if (track instanceof NodeScaleTrack) {\r\n tracks[0].jointTypeS = 'animated';\r\n } else if (track instanceof NodeRotationTrack) {\r\n tracks[0].jointTypeR = 'animated';\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (!manager.editorMode && animation.autoPlay) {\r\n this.animationSet.playAnimation(animation.name, { repeat: 0 });\r\n }\r\n }\r\n },\r\n delete(this: SceneNode, index) {\r\n const animationSet = this.animationSet;\r\n const name = animationSet.getAnimationNames()[index];\r\n const animation = animationSet.getAnimationClip(name);\r\n if (animation) {\r\n animationSet.deleteAnimation(name);\r\n }\r\n }\r\n },\r\n {\r\n name: 'Skeletons',\r\n description: 'Skeleton references used by the node animations',\r\n type: 'object_array',\r\n phase: 1,\r\n isHidden() {\r\n return true;\r\n },\r\n get(this: SceneNode, value) {\r\n const animationSet = this.animationSet;\r\n value.object = animationSet.skeletons.map((v) => v.get());\r\n },\r\n set(this: SceneNode, value) {\r\n const animationSet = this.animationSet;\r\n animationSet.skeletons.forEach((v) => v.dispose());\r\n animationSet.skeletons.splice(0, animationSet.skeletons.length);\r\n animationSet.skeletons.push(...(value.object as any[]).map((v) => new DRef(v)));\r\n }\r\n },\r\n {\r\n name: 'Script',\r\n description: 'First script file path which is attached to this node',\r\n type: 'object',\r\n options: {\r\n mimeTypes: ['text/x-typescript']\r\n },\r\n isHidden() {\r\n return true;\r\n },\r\n isNullable() {\r\n return true;\r\n },\r\n get(this: SceneNode, value) {\r\n value.str[0] = this.script;\r\n },\r\n set(this: SceneNode, value) {\r\n this.script = value?.str?.[0] ?? '';\r\n }\r\n },\r\n {\r\n name: 'Scripts',\r\n description: 'All script file paths which are attached to this node',\r\n type: 'object_array',\r\n options: {\r\n objectTypes: [ScriptAttachment]\r\n },\r\n isHidden() {\r\n return true;\r\n },\r\n getDefaultValue(this: SceneNode) {\r\n return this.scripts;\r\n },\r\n isNullable() {\r\n return false;\r\n },\r\n get(this: SceneNode, value) {\r\n value.object = this.scripts;\r\n },\r\n set(this: SceneNode, value) {\r\n this.scripts = (value.object as ScriptAttachment[]) ?? [];\r\n },\r\n create() {\r\n return new ScriptAttachment();\r\n },\r\n add(this: SceneNode, value, index) {\r\n const attachments = this.scripts;\r\n attachments.splice(\r\n index ?? attachments.length,\r\n 0,\r\n (value.object?.[0] as ScriptAttachment) ?? new ScriptAttachment()\r\n );\r\n this.scripts = attachments;\r\n },\r\n delete(this: SceneNode, index) {\r\n const attachments = this.scripts;\r\n if (index >= 0 && index < attachments.length) {\r\n attachments.splice(index, 1);\r\n this.scripts = attachments;\r\n }\r\n }\r\n },\r\n {\r\n name: 'ScriptConfig',\r\n description: 'Configuration object passed to the attached script',\r\n type: 'object',\r\n options: { objectTypes: [JSONData, JSONArray] },\r\n isHidden() {\r\n return true;\r\n },\r\n isNullable() {\r\n return true;\r\n },\r\n isPersistent(this: SceneNode) {\r\n return !!this.script;\r\n },\r\n get(this: SceneNode, value) {\r\n const config = normalizeScriptAttachmentConfig(this.scriptConfig);\r\n value.object[0] =\r\n config == null\r\n ? null\r\n : Array.isArray(config)\r\n ? new JSONArray(null, config)\r\n : new JSONData(null, config);\r\n },\r\n set(this: SceneNode, value) {\r\n const data = value?.object[0] as\r\n | JSONData\r\n | JSONArray\r\n | Record<string, unknown>\r\n | unknown[]\r\n | null\r\n | undefined;\r\n this.scriptConfig =\r\n data instanceof JSONData || data instanceof JSONArray\r\n ? normalizeScriptAttachmentConfig(data.data)\r\n : normalizeScriptAttachmentConfig(data);\r\n }\r\n },\r\n {\r\n name: 'ScriptConfigs',\r\n description: 'Per-script configuration array for all attached scripts',\r\n type: 'object',\r\n options: { objectTypes: [JSONArray] },\r\n getDefaultValue(this: SceneNode) {\r\n return this.scriptConfigs;\r\n },\r\n isHidden() {\r\n return true;\r\n },\r\n isNullable() {\r\n return true;\r\n },\r\n isPersistent(this: SceneNode) {\r\n return this.scripts.length > 0;\r\n },\r\n get(this: SceneNode, value) {\r\n value.object[0] = this.scriptConfigs.length > 0 ? new JSONArray(null, this.scriptConfigs) : null;\r\n },\r\n set(this: SceneNode, value) {\r\n const data = value?.object[0] as JSONArray | unknown[] | null | undefined;\r\n this.scriptConfigs = data instanceof JSONArray ? data.data : Array.isArray(data) ? data : [];\r\n }\r\n },\r\n {\r\n name: 'Metadata',\r\n description: 'Meta data for this node',\r\n type: 'object',\r\n options: { objectTypes: [JSONData] },\r\n isNullable() {\r\n return true;\r\n },\r\n get(this: SceneNode, value) {\r\n value.object[0] = this.metaData ? new JSONData(null, this.metaData) : null;\r\n },\r\n set(this: SceneNode, value) {\r\n const data = value?.object[0] as JSONData | Record<string, unknown> | null | undefined;\r\n this.metaData = data instanceof JSONData ? data.data : (data ?? null);\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function getGraphNodeClass(): SerializableClass {\r\n return {\r\n ctor: GraphNode,\r\n parent: SceneNode,\r\n name: 'GraphNode',\r\n createFunc(ctx: SceneNode) {\r\n const node = new GraphNode(ctx.scene!);\r\n node.parent = ctx;\r\n return { obj: node };\r\n },\r\n getProps() {\r\n return [];\r\n }\r\n };\r\n}\r\n"],"names":["geometryCacheBindings","WeakMap","normalizeSerializedSceneNodeData","data","Array","isArray","ClassName","Object","serialized","objectData","hasMeshDescendants","node","hasMesh","iterate","child","isMesh","restoreGeometryCacheMeshes","tasks","push","restoreGeometryCacheMeshBinding","length","Promise","all","clearGeometryCacheBinding","previous","get","name","animationNames","animationSet","isPlayingAnimation","stopAnimation","deleteAnimation","delete","getSceneNodeClass","manager","ctor","SceneNode","createFunc","ctx","init","scene","Scene","prefabId","prefabData","loadPrefabContent","nodeData","applyPatch","patch","tmpNode","DRef","remove","sceneNode","deserializeObject","parent","rootNode","dispose","obj","loadProps","assetId","fetchedModel","fetchModel","group","originalAssetId","getAssetId","setAssetId","baseNodeData","serializeObject","deserializeObjectProps","getInitParams","flags","undefined","diff","ASSERT","saveProps","baseNode","originalObjectAssetId","originalBaseAssetId","getProps","defineProps","description","type","value","str","persistentId","set","isHidden","getDefaultValue","default","options","animatable","isPersistent","jointTypeT","num","position","x","y","z","setXYZ","jointTypeS","isCamera","scale","edit","isOrtho","zyx","rotation","toEulerAngles","Math","round","radian2degree","fromEulerAngle","degree2radian","jointTypeR","w","setXYZW","bool","pickable","enum","labels","values","showState","phase","object","children","sealed","i","includes","console","error","label","mimeTypes","isValid","trim","binary","assetManager","fetchBinaryData","parsed","parseZABCBlob","Blob","VFS","guessMIMEType","autoPlay","result","attachZABCAnimationsToSceneNode","sourcePath","replaceAnimationNames","current","animation","getAnimationClip","playAnimation","repeat","readonly","objectTypes","AnimationClip","getAnimationNames","map","ani","tracks","track","embedded","addTrack","NodeTranslationTrack","NodeScaleTrack","NodeRotationTrack","editorMode","index","skeletons","v","forEach","splice","isNullable","script","ScriptAttachment","scripts","create","add","attachments","JSONData","JSONArray","config","normalizeScriptAttachmentConfig","scriptConfig","scriptConfigs","metaData","getGraphNodeClass","GraphNode"],"mappings":"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"}
1
+ {"version":3,"file":"node.js","sources":["../../../../src/utility/serialization/scene/node.ts"],"sourcesContent":["import { SceneNode } from '../../../scene/scene_node';\r\nimport type { SceneNodeVisible, SerializedMorphTargetGroup } from '../../../scene/scene_node';\r\nimport { Scene } from '../../../scene/scene';\r\nimport { defineProps, type SerializableClass } from '../types';\r\nimport type { DiffPatch, DiffValue } from '@zephyr3d/base';\r\nimport { applyPatch, ASSERT, degree2radian, diff, DRef, guessMimeType, radian2degree } from '@zephyr3d/base';\r\nimport { GraphNode } from '../../../scene';\r\nimport type { ResourceManager } from '../manager';\r\nimport {\r\n AnimationClip,\r\n JointDynamicsModifier,\r\n NodeRotationTrack,\r\n NodeScaleTrack,\r\n NodeTranslationTrack\r\n} from '../../../animation';\r\nimport { JSONArray, JSONData } from '../json';\r\nimport { ScriptAttachment, normalizeScriptAttachmentConfig } from '../../../scene/script_attachment';\r\nimport { parseZABCBlob, attachZABCAnimationsToSceneNode } from '../../../asset/loaders/zabc/zabc_loader';\r\nimport { restoreGeometryCacheMeshBinding } from '../../../animation/geometry_cache_utils';\r\nimport { getJointDynamicsModifierSkeleton, setJointDynamicsModifierSkeleton } from './animation';\r\nconst geometryCacheBindings = new WeakMap<\r\n SceneNode,\r\n {\r\n assetId: string;\r\n autoPlay: boolean;\r\n animationNames: string[];\r\n }\r\n>();\r\n\r\nfunction normalizeSerializedSceneNodeData(data: DiffValue): Record<string, unknown> {\r\n if (!data || typeof data !== 'object' || Array.isArray(data)) {\r\n return {\r\n ClassName: 'SceneNode',\r\n Object: {}\r\n };\r\n }\r\n const serialized = data as Record<string, unknown>;\r\n if (typeof serialized.ClassName === 'string') {\r\n return serialized;\r\n }\r\n const objectData =\r\n serialized.Object && typeof serialized.Object === 'object' && !Array.isArray(serialized.Object)\r\n ? (serialized.Object as Record<string, unknown>)\r\n : serialized;\r\n return {\r\n ClassName: 'SceneNode',\r\n Object: objectData\r\n };\r\n}\r\n\r\nfunction hasMeshDescendants(node: SceneNode) {\r\n let hasMesh = false;\r\n node.iterate((child) => {\r\n if (child.isMesh()) {\r\n hasMesh = true;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return hasMesh;\r\n}\r\n\r\nasync function restoreGeometryCacheMeshes(node: SceneNode) {\r\n const tasks: Promise<boolean>[] = [];\r\n node.iterate((child) => {\r\n if (child.isMesh()) {\r\n tasks.push(restoreGeometryCacheMeshBinding(child));\r\n }\r\n return false;\r\n });\r\n if (tasks.length > 0) {\r\n await Promise.all(tasks);\r\n }\r\n}\r\n\r\nasync function clearGeometryCacheBinding(node: SceneNode) {\r\n const previous = geometryCacheBindings.get(node);\r\n if (!previous) {\r\n return null;\r\n }\r\n for (const name of previous.animationNames) {\r\n if (node.animationSet.isPlayingAnimation(name)) {\r\n node.animationSet.stopAnimation(name);\r\n }\r\n node.animationSet.deleteAnimation(name);\r\n }\r\n await restoreGeometryCacheMeshes(node);\r\n geometryCacheBindings.delete(node);\r\n return previous;\r\n}\r\n\r\n/** @internal */\r\nexport function getSceneNodeClass(manager: ResourceManager): SerializableClass {\r\n return {\r\n ctor: SceneNode,\r\n name: 'SceneNode',\r\n async createFunc(\r\n ctx: Scene | SceneNode,\r\n init?: { prefabId?: string; assetId?: string; patch?: DiffPatch }\r\n ) {\r\n const scene = ctx instanceof Scene ? ctx : ctx.scene;\r\n if (init?.prefabId) {\r\n const prefabData = (await manager.loadPrefabContent(init.prefabId))!.data as DiffValue;\r\n const nodeData = normalizeSerializedSceneNodeData(\r\n applyPatch(prefabData, init.patch ?? []) as DiffValue\r\n );\r\n const tmpNode = new DRef(new SceneNode(scene));\r\n tmpNode.get()!.remove();\r\n tmpNode.get()!.prefabId = init.prefabId;\r\n const sceneNode = await manager.deserializeObject<SceneNode>(tmpNode.get(), nodeData);\r\n if (sceneNode) {\r\n sceneNode.prefabId = init.prefabId;\r\n sceneNode.parent = ctx instanceof SceneNode ? ctx : ctx.rootNode;\r\n }\r\n tmpNode.dispose();\r\n return { obj: sceneNode, loadProps: false };\r\n }\r\n if (init?.assetId) {\r\n const fetchedModel = await manager.fetchModel(init.assetId, scene!);\r\n const sceneNode = fetchedModel ?? null;\r\n if (sceneNode) {\r\n const originalAssetId = manager.getAssetId(sceneNode);\r\n try {\r\n manager.setAssetId(sceneNode, null);\r\n const baseNodeData = await manager.serializeObject(sceneNode);\r\n const nodeData = normalizeSerializedSceneNodeData(\r\n applyPatch(baseNodeData as DiffValue, init.patch ?? []) as DiffValue\r\n );\r\n await manager.deserializeObjectProps(sceneNode, nodeData.Object as Record<string, unknown>);\r\n } finally {\r\n manager.setAssetId(sceneNode, originalAssetId ?? init.assetId);\r\n }\r\n sceneNode.parent = ctx instanceof SceneNode ? ctx : ctx.rootNode;\r\n }\r\n return { obj: sceneNode, loadProps: false };\r\n }\r\n const node = new SceneNode(scene);\r\n if (ctx instanceof SceneNode) {\r\n node.parent = ctx;\r\n }\r\n return { obj: node };\r\n },\r\n async getInitParams(obj: SceneNode, flags) {\r\n let prefabId = obj.prefabId;\r\n const assetId = manager.getAssetId(obj);\r\n let patch: DiffPatch | undefined = undefined;\r\n if (prefabId && guessMimeType(prefabId) === 'application/vnd.zephyr3d.prefab+json') {\r\n try {\r\n obj.prefabId = '';\r\n const prefabData = (await manager.loadPrefabContent(prefabId))!.data as DiffValue;\r\n const nodeData = await manager.serializeObject(obj);\r\n patch = diff(prefabData, nodeData);\r\n ASSERT(diff(applyPatch(prefabData, patch), nodeData).length === 0, 'Patch test failed');\r\n } finally {\r\n obj.prefabId = prefabId;\r\n }\r\n flags.saveProps = false;\r\n } else {\r\n prefabId = '';\r\n }\r\n if (!prefabId && assetId) {\r\n const baseNode = (await manager.fetchModel(assetId, obj.scene!)) ?? null;\r\n if (baseNode) {\r\n const originalObjectAssetId = manager.getAssetId(obj);\r\n const originalBaseAssetId = manager.getAssetId(baseNode);\r\n try {\r\n manager.setAssetId(obj, null);\r\n manager.setAssetId(baseNode, null);\r\n const baseNodeData = await manager.serializeObject(baseNode);\r\n const nodeData = await manager.serializeObject(obj);\r\n patch = diff(baseNodeData, nodeData);\r\n ASSERT(diff(applyPatch(baseNodeData, patch), nodeData).length === 0, 'Patch test failed');\r\n } finally {\r\n manager.setAssetId(obj, originalObjectAssetId);\r\n manager.setAssetId(baseNode, originalBaseAssetId);\r\n baseNode.remove();\r\n }\r\n flags.saveProps = false;\r\n }\r\n }\r\n return prefabId\r\n ? {\r\n prefabId,\r\n patch\r\n }\r\n : assetId\r\n ? {\r\n assetId,\r\n patch\r\n }\r\n : null;\r\n },\r\n getProps() {\r\n return defineProps([\r\n {\r\n name: 'Id',\r\n description: 'Unique persistent id for the node',\r\n type: 'string',\r\n readonly: true,\r\n get(this: SceneNode, value) {\r\n value.str[0] = this.persistentId;\r\n },\r\n set(this: SceneNode, value) {\r\n this.persistentId = value.str[0];\r\n }\r\n },\r\n {\r\n name: 'PrefabId',\r\n description: 'Persistent ID of the prefab source for this node',\r\n type: 'string',\r\n readonly: true,\r\n isHidden() {\r\n return true;\r\n },\r\n get(this: SceneNode, value) {\r\n value.str[0] = this.prefabId;\r\n }\r\n },\r\n {\r\n name: 'Name',\r\n description: 'Display name of the node',\r\n type: 'string',\r\n getDefaultValue() {\r\n return '';\r\n },\r\n get(this: SceneNode, value) {\r\n value.str[0] = this.name;\r\n },\r\n set(this: SceneNode, value) {\r\n this.name = value.str[0];\r\n }\r\n },\r\n {\r\n name: 'Position',\r\n description: 'Local position of the node',\r\n type: 'vec3',\r\n default: [0, 0, 0],\r\n options: {\r\n animatable: true\r\n },\r\n isPersistent(this: SceneNode) {\r\n return this.jointTypeT !== 'animated';\r\n },\r\n get(this: SceneNode, value) {\r\n value.num[0] = this.position.x;\r\n value.num[1] = this.position.y;\r\n value.num[2] = this.position.z;\r\n },\r\n set(this: SceneNode, value) {\r\n this.position.setXYZ(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'Scale',\r\n description: 'Local scale of the node',\r\n type: 'vec3',\r\n default: [1, 1, 1],\r\n options: {\r\n animatable: true\r\n },\r\n isPersistent(this: SceneNode) {\r\n return this.jointTypeS !== 'animated';\r\n },\r\n isHidden(this: SceneNode) {\r\n return this.isCamera();\r\n },\r\n get(this: SceneNode, value) {\r\n value.num[0] = this.scale.x;\r\n value.num[1] = this.scale.y;\r\n value.num[2] = this.scale.z;\r\n },\r\n set(this: SceneNode, value) {\r\n this.scale.setXYZ(value.num[0], value.num[1], value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'Rotation',\r\n description: 'Euler rotation of this node in ZYX order',\r\n type: 'vec3',\r\n default: [0, 0, 0],\r\n options: {\r\n animatable: true,\r\n edit: 'quaternion'\r\n },\r\n isPersistent() {\r\n return false;\r\n },\r\n isHidden(this: SceneNode) {\r\n return this.isCamera() && this.isOrtho();\r\n },\r\n get(this: SceneNode, value) {\r\n const zyx = this.rotation.toEulerAngles();\r\n value.num[0] = Math.round(radian2degree(zyx.x));\r\n value.num[1] = Math.round(radian2degree(zyx.y));\r\n value.num[2] = Math.round(radian2degree(zyx.z));\r\n },\r\n set(this: SceneNode, value) {\r\n this.rotation.fromEulerAngle(\r\n degree2radian(value.num[0]),\r\n degree2radian(value.num[1]),\r\n degree2radian(value.num[2])\r\n );\r\n }\r\n },\r\n {\r\n name: 'QuatRotation',\r\n description: 'Node rotation quaternion',\r\n type: 'vec4',\r\n default: [0, 0, 0, 1],\r\n isHidden() {\r\n return true;\r\n },\r\n isPersistent(this: SceneNode) {\r\n return this.jointTypeR !== 'animated';\r\n },\r\n get(this: SceneNode, value) {\r\n value.num[0] = this.rotation.x;\r\n value.num[1] = this.rotation.y;\r\n value.num[2] = this.rotation.z;\r\n value.num[3] = this.rotation.w;\r\n },\r\n set(this: SceneNode, value) {\r\n this.rotation.setXYZW(value.num[0], value.num[1], value.num[2], value.num[3]);\r\n }\r\n },\r\n {\r\n name: 'Pickable',\r\n description: 'If true, enable ray-cast for this object',\r\n type: 'bool',\r\n default: false,\r\n get(this: SceneNode, value) {\r\n value.bool[0] = this.pickable;\r\n },\r\n set(this: SceneNode, value) {\r\n this.pickable = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'Visible',\r\n description: 'Node visible state',\r\n type: 'string',\r\n default: 'inherit',\r\n options: {\r\n enum: {\r\n labels: ['Visible', 'Hidden', 'Inherit'],\r\n values: ['visible', 'hidden', 'inherit']\r\n }\r\n },\r\n get(this: SceneNode, value) {\r\n value.str[0] = this.showState;\r\n },\r\n set(this: SceneNode, value) {\r\n this.showState = value.str[0] as SceneNodeVisible;\r\n }\r\n },\r\n {\r\n name: 'Children',\r\n description: 'Children nodes of this node',\r\n type: 'object_array',\r\n phase: 0,\r\n isHidden() {\r\n return true;\r\n },\r\n isPersistent(this: SceneNode) {\r\n return (\r\n !this._prefabId || guessMimeType(this._prefabId) === 'application/vnd.zephyr3d.prefab+json'\r\n );\r\n },\r\n get(this: SceneNode, value) {\r\n value.object = [];\r\n for (const child of this.children) {\r\n if (!child.sealed) {\r\n value.object.push(child);\r\n }\r\n }\r\n },\r\n set(this: SceneNode, value) {\r\n const children = this.children;\r\n for (let i = children.length - 1; i >= 0; i--) {\r\n const child = children[i];\r\n if (!value.object.includes(child) && !child.sealed) {\r\n child.remove();\r\n }\r\n }\r\n for (const child of value.object) {\r\n if (child instanceof SceneNode) {\r\n child.parent = this;\r\n } else {\r\n console.error(`Invalid scene node: ${child}`);\r\n }\r\n }\r\n }\r\n },\r\n {\r\n name: 'MorphTargetGroups',\r\n description: 'Serialized model-level morph target groups for this node',\r\n type: 'object',\r\n phase: 10,\r\n options: { objectTypes: [JSONArray] },\r\n isHidden() {\r\n return true;\r\n },\r\n isPersistent(this: SceneNode) {\r\n return (\r\n !this._prefabId || guessMimeType(this._prefabId) === 'application/vnd.zephyr3d.prefab+json'\r\n );\r\n },\r\n get(this: SceneNode, value) {\r\n const groups = this.getSerializedMorphTargetGroups();\r\n value.object[0] = groups.length > 0 ? new JSONArray(null, groups) : null;\r\n },\r\n set(this: SceneNode, value) {\r\n const data = value?.object[0] as JSONArray | SerializedMorphTargetGroup[] | null | undefined;\r\n if (data) {\r\n this.setSerializedMorphTargetGroups(data instanceof JSONArray ? data.data : data);\r\n }\r\n }\r\n },\r\n {\r\n name: 'GeometryCache',\r\n description: 'Alembic geometry cache asset used by this node',\r\n type: 'string',\r\n options: {\r\n group: 'Animation',\r\n label: 'Geometry Cache',\r\n mimeTypes: ['application/vnd.zephyr3d.alembic-cache+json']\r\n },\r\n isValid(this: SceneNode) {\r\n return this !== this.scene?.rootNode && hasMeshDescendants(this);\r\n },\r\n get(this: SceneNode, value) {\r\n value.str[0] = geometryCacheBindings.get(this)?.assetId ?? '';\r\n },\r\n async set(this: SceneNode, value) {\r\n const previous = await clearGeometryCacheBinding(this);\r\n const assetId = value?.str?.[0]?.trim() ?? '';\r\n if (!assetId) {\r\n return;\r\n }\r\n const binary = (await manager.assetManager.fetchBinaryData(assetId)) as ArrayBuffer;\r\n const parsed = await parseZABCBlob(\r\n new Blob([binary], { type: manager.VFS.guessMIMEType(assetId) || 'application/octet-stream' })\r\n );\r\n const autoPlay = previous?.autoPlay ?? false;\r\n const result = await attachZABCAnimationsToSceneNode(this, parsed, {\r\n sourcePath: assetId,\r\n autoPlay,\r\n replaceAnimationNames: []\r\n });\r\n geometryCacheBindings.set(this, {\r\n assetId,\r\n autoPlay,\r\n animationNames: result.animationNames\r\n });\r\n }\r\n },\r\n {\r\n name: 'GeometryCacheAutoPlay',\r\n description: 'If true, plays the geometry cache automatically when loaded',\r\n type: 'bool',\r\n default: false,\r\n options: {\r\n group: 'Animation',\r\n label: 'Cache AutoPlay'\r\n },\r\n isValid(this: SceneNode) {\r\n return this !== this.scene?.rootNode && hasMeshDescendants(this);\r\n },\r\n get(this: SceneNode, value) {\r\n value.bool[0] = geometryCacheBindings.get(this)?.autoPlay ?? false;\r\n },\r\n async set(this: SceneNode, value) {\r\n const current = geometryCacheBindings.get(this);\r\n if (!current) {\r\n return;\r\n }\r\n const autoPlay = !!value.bool[0];\r\n geometryCacheBindings.set(this, {\r\n assetId: current.assetId,\r\n autoPlay,\r\n animationNames: current.animationNames\r\n });\r\n for (const name of current.animationNames) {\r\n const animation = this.animationSet.getAnimationClip(name);\r\n if (animation) {\r\n animation.autoPlay = autoPlay;\r\n if (autoPlay) {\r\n this.animationSet.playAnimation(name, { repeat: 0 });\r\n } else if (this.animationSet.isPlayingAnimation(name)) {\r\n this.animationSet.stopAnimation(name);\r\n }\r\n }\r\n }\r\n }\r\n },\r\n {\r\n name: 'Animations',\r\n description: 'Animation clips which affect this object or children',\r\n type: 'object_array',\r\n phase: 2,\r\n readonly: true,\r\n options: {\r\n objectTypes: [AnimationClip]\r\n },\r\n isPersistent(this: SceneNode) {\r\n return (\r\n !this._prefabId || guessMimeType(this._prefabId) === 'application/vnd.zephyr3d.prefab+json'\r\n );\r\n },\r\n get(this: SceneNode, value) {\r\n const animationSet = this.animationSet;\r\n value.object = animationSet\r\n .getAnimationNames()\r\n .map((name) => animationSet.getAnimationClip(name));\r\n },\r\n set(this: SceneNode, value) {\r\n for (const ani of value.object) {\r\n const animation = ani as AnimationClip;\r\n for (const tracks of animation.tracks) {\r\n for (const track of tracks[1]) {\r\n if (!track.embedded) {\r\n animation.addTrack(tracks[0], track);\r\n if (tracks[0] instanceof SceneNode) {\r\n if (track instanceof NodeTranslationTrack) {\r\n tracks[0].jointTypeT = 'animated';\r\n } else if (track instanceof NodeScaleTrack) {\r\n tracks[0].jointTypeS = 'animated';\r\n } else if (track instanceof NodeRotationTrack) {\r\n tracks[0].jointTypeR = 'animated';\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (!manager.editorMode && animation.autoPlay) {\r\n this.animationSet.playAnimation(animation.name, { repeat: 0 });\r\n }\r\n }\r\n },\r\n delete(this: SceneNode, index) {\r\n const animationSet = this.animationSet;\r\n const name = animationSet.getAnimationNames()[index];\r\n const animation = animationSet.getAnimationClip(name);\r\n if (animation) {\r\n animationSet.deleteAnimation(name);\r\n }\r\n }\r\n },\r\n {\r\n name: 'Rigs',\r\n description: 'Shared skeleton rigs used by the node animations',\r\n type: 'object_array',\r\n phase: 1,\r\n isHidden() {\r\n return true;\r\n },\r\n isPersistent(this: SceneNode) {\r\n return (\r\n !this._prefabId || guessMimeType(this._prefabId) === 'application/vnd.zephyr3d.prefab+json'\r\n );\r\n },\r\n get(this: SceneNode, value) {\r\n const animationSet = this.animationSet;\r\n const rigs = new Set(animationSet.rigs.map((v) => v.get()));\r\n for (const binding of animationSet.skeletons) {\r\n const rig = binding.get()?.rig;\r\n if (rig) {\r\n rigs.add(rig);\r\n }\r\n }\r\n value.object = [...rigs];\r\n },\r\n set(this: SceneNode, value) {\r\n const animationSet = this.animationSet;\r\n animationSet.rigs.forEach((v) => v.dispose());\r\n animationSet.rigs.splice(0, animationSet.rigs.length);\r\n animationSet.rigs.push(...(value.object as any[]).map((v) => new DRef(v)));\r\n }\r\n },\r\n {\r\n name: 'Skeletons',\r\n description: 'Skin bindings used by the node animations',\r\n type: 'object_array',\r\n phase: 2,\r\n isHidden() {\r\n return true;\r\n },\r\n isPersistent(this: SceneNode) {\r\n return (\r\n !this._prefabId || guessMimeType(this._prefabId) === 'application/vnd.zephyr3d.prefab+json'\r\n );\r\n },\r\n get(this: SceneNode, value) {\r\n const animationSet = this.animationSet;\r\n value.object = animationSet.skeletons.map((v) => v.get());\r\n },\r\n set(this: SceneNode, value) {\r\n const animationSet = this.animationSet;\r\n animationSet.skeletons.forEach((v) => v.dispose());\r\n animationSet.skeletons.splice(0, animationSet.skeletons.length);\r\n animationSet.skeletons.push(...(value.object as any[]).map((v) => new DRef(v)));\r\n for (const binding of animationSet.skeletons) {\r\n const rig = binding.get()?.rig;\r\n if (rig && !animationSet.rigs.some((ref) => ref.get() === rig)) {\r\n animationSet.rigs.push(new DRef(rig));\r\n }\r\n }\r\n }\r\n },\r\n {\r\n name: 'JointDynamics',\r\n description: 'Joint dynamics systems which affect this object or children',\r\n type: 'object_array',\r\n phase: 3,\r\n readonly: true,\r\n options: {\r\n objectTypes: [JointDynamicsModifier]\r\n },\r\n isPersistent(this: SceneNode) {\r\n return (\r\n !this._prefabId || guessMimeType(this._prefabId) === 'application/vnd.zephyr3d.prefab+json'\r\n );\r\n },\r\n getDefaultValue(this: SceneNode) {\r\n const animationSet = this.animationSet;\r\n const jdm: JointDynamicsModifier[] = [];\r\n const rigs = new Set(animationSet.rigs.map((v) => v.get()));\r\n for (const binding of animationSet.skeletons) {\r\n const rig = binding.get()?.rig;\r\n if (rig) {\r\n rigs.add(rig);\r\n }\r\n }\r\n for (const sk of rigs) {\r\n for (const mod of sk!.modifiers) {\r\n if (mod instanceof JointDynamicsModifier) {\r\n setJointDynamicsModifierSkeleton(mod, sk!);\r\n jdm.push(mod);\r\n }\r\n }\r\n }\r\n return jdm;\r\n },\r\n get(this: SceneNode, value) {\r\n const animationSet = this.animationSet;\r\n const jdm: JointDynamicsModifier[] = [];\r\n const rigs = new Set(animationSet.rigs.map((v) => v.get()));\r\n for (const binding of animationSet.skeletons) {\r\n const rig = binding.get()?.rig;\r\n if (rig) {\r\n rigs.add(rig);\r\n }\r\n }\r\n for (const sk of rigs) {\r\n for (const mod of sk!.modifiers) {\r\n if (mod instanceof JointDynamicsModifier) {\r\n setJointDynamicsModifierSkeleton(mod, sk!);\r\n jdm.push(mod);\r\n }\r\n }\r\n }\r\n value.object = jdm;\r\n },\r\n set(this: SceneNode, value) {\r\n const animationSet = this.animationSet;\r\n for (const sk of animationSet.rigs) {\r\n const modifiers = sk.get()!.modifiers;\r\n for (let i = modifiers.length - 1; i >= 0; i--) {\r\n if (modifiers[i] instanceof JointDynamicsModifier) {\r\n modifiers.splice(i, 1);\r\n }\r\n }\r\n }\r\n for (const mod of value.object) {\r\n if (!(mod instanceof JointDynamicsModifier)) {\r\n continue;\r\n }\r\n const skeleton = getJointDynamicsModifierSkeleton(mod);\r\n if (skeleton && animationSet.rigs.some((sk) => sk.get() === skeleton)) {\r\n skeleton.modifiers.push(mod);\r\n setJointDynamicsModifierSkeleton(mod, skeleton);\r\n continue;\r\n }\r\n for (const sk of animationSet.rigs) {\r\n if (\r\n mod.jointDynamicsSystem.chainConfig.chains.every((chain) =>\r\n sk.get()!.joints.includes(chain.start)\r\n )\r\n ) {\r\n sk.get()!.modifiers.push(mod);\r\n setJointDynamicsModifierSkeleton(mod, sk.get()!);\r\n break;\r\n }\r\n }\r\n }\r\n },\r\n delete(this: SceneNode, index) {\r\n const animationSet = this.animationSet;\r\n let n = 0;\r\n for (const sk of animationSet.rigs) {\r\n for (const mod of sk.get()!.modifiers) {\r\n if (mod instanceof JointDynamicsModifier) {\r\n if (n === index) {\r\n const index = sk.get()!.modifiers.indexOf(mod);\r\n sk.get()!.modifiers.splice(index, 1);\r\n return;\r\n }\r\n n++;\r\n }\r\n }\r\n }\r\n }\r\n },\r\n {\r\n name: 'Script',\r\n description: 'First script file path which is attached to this node',\r\n type: 'object',\r\n options: {\r\n mimeTypes: ['text/x-typescript']\r\n },\r\n isHidden() {\r\n return true;\r\n },\r\n isNullable() {\r\n return true;\r\n },\r\n get(this: SceneNode, value) {\r\n value.str[0] = this.script;\r\n },\r\n set(this: SceneNode, value) {\r\n this.script = value?.str?.[0] ?? '';\r\n }\r\n },\r\n {\r\n name: 'Scripts',\r\n description: 'All script file paths which are attached to this node',\r\n type: 'object_array',\r\n options: {\r\n objectTypes: [ScriptAttachment]\r\n },\r\n isHidden() {\r\n return true;\r\n },\r\n getDefaultValue(this: SceneNode) {\r\n return this.scripts;\r\n },\r\n isNullable() {\r\n return false;\r\n },\r\n get(this: SceneNode, value) {\r\n value.object = this.scripts;\r\n },\r\n set(this: SceneNode, value) {\r\n this.scripts = (value.object as ScriptAttachment[]) ?? [];\r\n },\r\n create() {\r\n return new ScriptAttachment();\r\n },\r\n add(this: SceneNode, value, index) {\r\n const attachments = this.scripts;\r\n attachments.splice(\r\n index ?? attachments.length,\r\n 0,\r\n (value.object?.[0] as ScriptAttachment) ?? new ScriptAttachment()\r\n );\r\n this.scripts = attachments;\r\n },\r\n delete(this: SceneNode, index) {\r\n const attachments = this.scripts;\r\n if (index >= 0 && index < attachments.length) {\r\n attachments.splice(index, 1);\r\n this.scripts = attachments;\r\n }\r\n }\r\n },\r\n {\r\n name: 'ScriptConfig',\r\n description: 'Configuration object passed to the attached script',\r\n type: 'object',\r\n options: { objectTypes: [JSONData, JSONArray] },\r\n isHidden() {\r\n return true;\r\n },\r\n isNullable() {\r\n return true;\r\n },\r\n isPersistent(this: SceneNode) {\r\n return !!this.script;\r\n },\r\n get(this: SceneNode, value) {\r\n const config = normalizeScriptAttachmentConfig(this.scriptConfig);\r\n value.object[0] =\r\n config == null\r\n ? null\r\n : Array.isArray(config)\r\n ? new JSONArray(null, config)\r\n : new JSONData(null, config);\r\n },\r\n set(this: SceneNode, value) {\r\n const data = value?.object[0] as\r\n | JSONData\r\n | JSONArray\r\n | Record<string, unknown>\r\n | unknown[]\r\n | null\r\n | undefined;\r\n this.scriptConfig =\r\n data instanceof JSONData || data instanceof JSONArray\r\n ? normalizeScriptAttachmentConfig(data.data)\r\n : normalizeScriptAttachmentConfig(data);\r\n }\r\n },\r\n {\r\n name: 'ScriptConfigs',\r\n description: 'Per-script configuration array for all attached scripts',\r\n type: 'object',\r\n options: { objectTypes: [JSONArray] },\r\n getDefaultValue(this: SceneNode) {\r\n return this.scriptConfigs;\r\n },\r\n isHidden() {\r\n return true;\r\n },\r\n isNullable() {\r\n return true;\r\n },\r\n isPersistent(this: SceneNode) {\r\n return this.scripts.length > 0;\r\n },\r\n get(this: SceneNode, value) {\r\n value.object[0] = this.scriptConfigs.length > 0 ? new JSONArray(null, this.scriptConfigs) : null;\r\n },\r\n set(this: SceneNode, value) {\r\n const data = value?.object[0] as JSONArray | unknown[] | null | undefined;\r\n this.scriptConfigs = data instanceof JSONArray ? data.data : Array.isArray(data) ? data : [];\r\n }\r\n },\r\n {\r\n name: 'Metadata',\r\n description: 'Meta data for this node',\r\n type: 'object',\r\n options: { objectTypes: [JSONData] },\r\n isNullable() {\r\n return true;\r\n },\r\n get(this: SceneNode, value) {\r\n value.object[0] = this.metaData ? new JSONData(null, this.metaData) : null;\r\n },\r\n set(this: SceneNode, value) {\r\n const data = value?.object[0] as JSONData | Record<string, unknown> | null | undefined;\r\n this.metaData = data instanceof JSONData ? data.data : (data ?? null);\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function getGraphNodeClass(): SerializableClass {\r\n return {\r\n ctor: GraphNode,\r\n parent: SceneNode,\r\n name: 'GraphNode',\r\n createFunc(ctx: SceneNode) {\r\n const node = new GraphNode(ctx.scene!);\r\n node.parent = ctx;\r\n return { obj: node };\r\n },\r\n getProps() {\r\n return [];\r\n }\r\n };\r\n}\r\n"],"names":["geometryCacheBindings","WeakMap","normalizeSerializedSceneNodeData","data","Array","isArray","ClassName","Object","serialized","objectData","hasMeshDescendants","node","hasMesh","iterate","child","isMesh","restoreGeometryCacheMeshes","tasks","push","restoreGeometryCacheMeshBinding","length","Promise","all","clearGeometryCacheBinding","previous","get","name","animationNames","animationSet","isPlayingAnimation","stopAnimation","deleteAnimation","delete","getSceneNodeClass","manager","ctor","SceneNode","createFunc","ctx","init","scene","Scene","prefabId","prefabData","loadPrefabContent","nodeData","applyPatch","patch","tmpNode","DRef","remove","sceneNode","deserializeObject","parent","rootNode","dispose","obj","loadProps","assetId","fetchedModel","fetchModel","originalAssetId","getAssetId","setAssetId","baseNodeData","serializeObject","deserializeObjectProps","getInitParams","flags","undefined","guessMimeType","diff","ASSERT","saveProps","baseNode","originalObjectAssetId","originalBaseAssetId","getProps","defineProps","description","type","readonly","value","str","persistentId","set","isHidden","getDefaultValue","default","options","animatable","isPersistent","jointTypeT","num","position","x","y","z","setXYZ","jointTypeS","isCamera","scale","edit","isOrtho","zyx","rotation","toEulerAngles","Math","round","radian2degree","fromEulerAngle","degree2radian","jointTypeR","w","setXYZW","bool","pickable","enum","labels","values","showState","phase","_prefabId","object","children","sealed","i","includes","console","error","objectTypes","JSONArray","groups","getSerializedMorphTargetGroups","setSerializedMorphTargetGroups","group","label","mimeTypes","isValid","trim","binary","assetManager","fetchBinaryData","parsed","parseZABCBlob","Blob","VFS","guessMIMEType","autoPlay","result","attachZABCAnimationsToSceneNode","sourcePath","replaceAnimationNames","current","animation","getAnimationClip","playAnimation","repeat","AnimationClip","getAnimationNames","map","ani","tracks","track","embedded","addTrack","NodeTranslationTrack","NodeScaleTrack","NodeRotationTrack","editorMode","index","rigs","Set","v","binding","skeletons","rig","add","forEach","splice","some","ref","JointDynamicsModifier","jdm","sk","mod","modifiers","setJointDynamicsModifierSkeleton","skeleton","getJointDynamicsModifierSkeleton","jointDynamicsSystem","chainConfig","chains","every","chain","joints","start","n","indexOf","isNullable","script","ScriptAttachment","scripts","create","attachments","JSONData","config","normalizeScriptAttachmentConfig","scriptConfig","scriptConfigs","metaData","getGraphNodeClass","GraphNode"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../src/utility/serialization/types.ts"],"sourcesContent":["import type { GenericConstructor, Nullable, RequireOptionals } from '@zephyr3d/base';\r\n\r\n/**\r\n * Enumerates supported data types for serializable properties.\r\n *\r\n * This type informs serializers/editors how to interpret and encode values.\r\n * 'bool'|'int'|'float'|'vec2'|'vec3'|'vec4'|'int2'|'int3'|'int4'|'string'|'rgb'|'rgba'|'object'|'object_array'|'embedded'|'command';\r\n *\r\n * @public\r\n */\r\nexport type PropertyType = string;\r\n\r\n/**\r\n * Maps a property type discriminator to the corresponding value lane key.\r\n *\r\n * @public\r\n */\r\nexport type PropertyToType<T extends string> = T extends\r\n | 'float'\r\n | 'vec2'\r\n | 'vec3'\r\n | 'vec4'\r\n | 'int'\r\n | 'int2'\r\n | 'int3'\r\n | 'int4'\r\n | 'rgb'\r\n | 'rgba'\r\n ? 'num'\r\n : T extends 'bool'\r\n ? 'bool'\r\n : T extends 'string'\r\n ? 'str'\r\n : T extends 'object' | 'object_array'\r\n ? 'object'\r\n : 'num' | 'bool' | 'str' | 'object';\r\n/**\r\n * Container for a serializable property's value.\r\n *\r\n * Values are carried in typed arrays (even for single values) to support\r\n * both scalar and array-like properties in a unified shape.\r\n *\r\n * Conventions:\r\n * - `num` carries numeric data for types like `int`, `float`, `vec*`, `int*`, `rgb`, `rgba`\r\n * - `str` carries string data for `string`\r\n * - `bool` carries boolean data for `bool`\r\n * - `object` carries references/instances for `object`, `object_array`, `embedded`\r\n *\r\n * Only the relevant field(s) for the property's {@link PropertyType} will be populated.\r\n *\r\n * @public\r\n */\r\nexport type PropertyValue = {\r\n /** Numeric lane(s) for numeric, vector, or color types. */\r\n num?: number[];\r\n /** String lane(s) for text properties. */\r\n str?: string[];\r\n /** Boolean lane(s) for boolean properties. */\r\n bool?: boolean[];\r\n /** Object lane(s) for object references or embedded objects. */\r\n object?: Nullable<object>[];\r\n};\r\n\r\n/**\r\n * Editor-oriented edit types that augment how a property is presented/edited.\r\n *\r\n * This is orthogonal to {@link PropertyType} and is purely an editor hint.\r\n *\r\n * @public\r\n */\r\nexport type PropEdit = 'aabb' | 'quaternion' | 'proptrack';\r\n\r\n/**\r\n * Extra scene-node picker hints for a property.\r\n *\r\n * @public\r\n */\r\nexport type PropertySceneNodeOptions = {\r\n kind?: 'node' | 'mesh';\r\n};\r\n\r\n/**\r\n * Additional options controlling how a property is displayed, constrained, and edited.\r\n *\r\n * These options are consumed primarily by an editor/inspector UI, but may\r\n * also influence validation and tooling behavior.\r\n *\r\n * @public\r\n */\r\nexport type PropertyAccessorOptions = {\r\n /** Human-friendly label for UI. Defaults to `name` if omitted. */\r\n label?: string;\r\n /** Logical grouping/category in UI. */\r\n group?: string;\r\n /** Editor presentation hint (e.g., quaternion gizmo, animation track). */\r\n edit?: PropEdit;\r\n /** Minimum numeric value (for sliders/spinners). */\r\n minValue?: number;\r\n /** Maximum numeric value (for sliders/spinners). */\r\n maxValue?: number;\r\n /** Whether string property is multiline. */\r\n multiline?: boolean;\r\n /** Step/speed for numeric editing UI. */\r\n speed?: number;\r\n /** Whether the property can be animated/keyframed. */\r\n animatable?: boolean;\r\n /** Allowed MIME types for file-picker-like editors. */\r\n mimeTypes?: string[];\r\n /** Accept scene hierarchy node drag-drop in the inspector. */\r\n sceneNode?: PropertySceneNodeOptions;\r\n /** Render object-array entries inline instead of expandable nested groups. */\r\n inlineObjectArray?: boolean;\r\n /** Allowed constructor types when choosing/creating object references. */\r\n objectTypes?: GenericConstructor[];\r\n /**\r\n * Optional enumeration metadata.\r\n * `labels[i]` corresponds to `values[i]`.\r\n */\r\n enum?: { labels: string[]; values: unknown[] };\r\n};\r\n\r\n/**\r\n * Returns the property accessor list unchanged while preserving typing.\r\n *\r\n * @public\r\n */\r\nexport function defineProps(accessors: PropertyAccessor<any, 'DUMMY'>[]): PropertyAccessor[] {\r\n return accessors;\r\n}\r\n\r\n/**\r\n * Descriptor for a serializable property of a class/type.\r\n *\r\n * This binds together:\r\n * - Metadata: `type`, `name`, `default`, `readonly`, `persistent`, `options`\r\n * - Accessors: `get`, `set`, `add`, `delete`, `create` for manipulating the underlying object state\r\n * - Predicates: `isValid`, `isNullable`, `isHidden` to control UI and validation\r\n * - Commands: `command` for action-style properties (`type: 'command'`)\r\n * - Utilities: `getDefaultValue` to compute defaults dynamically\r\n *\r\n * The accessors are invoked with `this` bound to the owning object instance.\r\n *\r\n * @typeParam T - The instance type that owns the property.\r\n * @public\r\n */\r\nexport type PropertyAccessor<T = object, U extends string = ''> = {\r\n /** The storage/serialization data type. */\r\n type: PropertyType;\r\n /** Unique property name (stable identifier for tooling/serialization). */\r\n name: string;\r\n /** Description of this property */\r\n description?: string;\r\n /**\r\n * Optional evaluation phase/order hint (lower runs earlier).\r\n * Useful for staged initialization or batched updates in editors.\r\n */\r\n phase?: number;\r\n /** If true, the property is read-only in UI and programmatic setters may be disallowed. */\r\n readonly?: boolean;\r\n /** Default value used if none is provided. Can be a primitive, array, or object. */\r\n default?: any;\r\n /**\r\n * If true, the property is persisted during save/serialize.\r\n * Non-persistent properties may be computed or session-only.\r\n */\r\n //persistent?: boolean;\r\n /** Editor and validation options for this property. */\r\n options?: PropertyAccessorOptions;\r\n /**\r\n * Reads the current value from `this` into the provided `value` container.\r\n *\r\n * Implementations should fully populate the appropriate lane(s) (e.g., `num`, `str`, etc.)\r\n * according to the property's {@link PropertyType}.\r\n *\r\n * @param value - Output container to be filled by the getter.\r\n */\r\n get: <K extends string>(\r\n this: T,\r\n value: U extends '' ? Required<Pick<PropertyValue, PropertyToType<K>>> : RequireOptionals<PropertyValue>\r\n ) => void;\r\n /**\r\n * Writes an incoming value to `this`.\r\n *\r\n * For array-like properties, `index` can target a specific element.\r\n * Implementations should read from the appropriate lane(s) of `value` according to {@link PropertyType}.\r\n *\r\n * @param value - Input container carrying the new value.\r\n * @param index - Optional element index for array-like properties.\r\n * @returns Optionally `Promise<void>` if asynchronous work is required.\r\n */\r\n set?: <K extends string>(\r\n this: T,\r\n value: U extends '' ? Required<Pick<PropertyValue, PropertyToType<K>>> : RequireOptionals<PropertyValue>,\r\n index?: number\r\n ) => void | Promise<void>;\r\n /**\r\n * Creates a new embedded/contained object for object-like properties.\r\n *\r\n * Typically used for `embedded` or `object_array` to instantiate an element.\r\n *\r\n * @param ctor - Constructor to instantiate.\r\n * @param index - Target index where the new object will be inserted.\r\n * @returns The newly created object instance.\r\n */\r\n create?: (this: T, ctor: GenericConstructor, index: number) => Nullable<object>;\r\n /**\r\n * Deletes an element from an array-like property or clears a value.\r\n *\r\n * @param index - Target element index.\r\n * @returns Optionally `Promise<void>` if asynchronous work is required.\r\n */\r\n delete?: (this: T, index: number) => void | Promise<void>;\r\n /**\r\n * Adds a new element/value to an array-like property.\r\n *\r\n * If `index` is omitted, implementations may append to the end.\r\n *\r\n * @param value - The value to add (read appropriate lane(s) per {@link PropertyType}).\r\n * @param index - Optional insertion index.\r\n * @returns Optionally `Promise<void>` if asynchronous work is required.\r\n */\r\n add?: <K extends string>(\r\n this: T,\r\n value: U extends '' ? Required<Pick<PropertyValue, PropertyToType<K>>> : RequireOptionals<PropertyValue>,\r\n index?: number\r\n ) => void | Promise<void>;\r\n /**\r\n * Validates the current state of `this` with respect to this property.\r\n *\r\n * Returning `false` may block serialization or UI confirmation.\r\n *\r\n * @returns `true` if valid, otherwise `false`.\r\n */\r\n isValid?: (this: T) => boolean;\r\n /**\r\n * Indicates whether this property is serializable. Default is serializable if not present.\r\n *\r\n * @returns `true` if persistent, otherwise `false`.\r\n */\r\n isPersistent?: (this: T) => boolean;\r\n /**\r\n * Indicates whether a specific element or slot may be `null` or `undefined`.\r\n *\r\n * Applies to array-like or optional properties.\r\n *\r\n * @param index - Target element index.\r\n * @returns `true` if nullable, otherwise `false`.\r\n */\r\n isNullable?: (this: T, index: number) => boolean;\r\n /**\r\n * Controls visibility of a specific element or the property in UI.\r\n *\r\n * @param index - Target element index.\r\n * @param obj - Value at index\r\n * @returns `true` if hidden, otherwise `false`.\r\n */\r\n isHidden?: (this: T, index: number, obj?: unknown) => boolean;\r\n /**\r\n * Executes a command-style property.\r\n *\r\n * Only meaningful for `type: 'command'`. Return value may indicate success or toggle state.\r\n *\r\n * @param index - Optional command index for multi-command groups.\r\n * @returns Command result, commonly a boolean for toggle-like actions.\r\n */\r\n command?: (this: T, index: number) => boolean;\r\n /**\r\n * Supplies a default value dynamically at runtime.\r\n *\r\n * If provided, this takes precedence over the static `default` field.\r\n */\r\n getDefaultValue?: (this: T) => any;\r\n};\r\n\r\n/**\r\n * Descriptor for a serializable class/type.\r\n *\r\n * This defines how a class is identified, constructed, and inspected for properties.\r\n * Editors and serializers can use this metadata to instantiate objects, load initial\r\n * parameters, and enumerate property accessors.\r\n *\r\n * @public\r\n */\r\nexport type SerializableClass = {\r\n /** Concrete constructor for the serializable class. */\r\n ctor: GenericConstructor;\r\n /** Optional parent/superclass constructor to represent inheritance in tooling. */\r\n parent?: GenericConstructor;\r\n /** If true, suppresses title rendering in UI for compact displays. */\r\n noTitle?: boolean;\r\n /** Display name used by tooling and editors. */\r\n name: string;\r\n /**\r\n * Custom factory to create an instance and optionally control property loading.\r\n *\r\n * If `loadProps` is `false`, the caller may skip default property loading\r\n * (useful for lazy or staged initialization).\r\n *\r\n * @param ctx - Optional construction context (editor/runtime-specific).\r\n * @param init - Optional initialization payload.\r\n * @returns The created object and a `loadProps` hint.\r\n */\r\n createFunc?: (\r\n ctx?: any,\r\n init?: any\r\n ) => { obj: any; loadProps?: boolean } | Promise<{ obj: any; loadProps?: boolean }>;\r\n /**\r\n * Extracts initialization parameters from an instance suitable for re-creation.\r\n *\r\n * This is the inverse of `createFunc`'s `init` argument, enabling round-trip\r\n * serialization of constructor/initializer data.\r\n *\r\n * @param obj - The instance to introspect.\r\n * @returns An initialization payload (serializable).\r\n */\r\n getInitParams?: (obj: any, flags: { saveProps: boolean }) => any;\r\n /**\r\n * Enumerates property accessors for this class.\r\n *\r\n * The returned list defines the full set of serializable/editor-visible properties.\r\n *\r\n * @returns Array of property accessors.\r\n */\r\n getProps: () => PropertyAccessor<any>[];\r\n};\r\n"],"names":["defineProps","accessors"],"mappings":"AAyHA;;;;IAKO,SAASA,WAAAA,CAAYC,SAA2C,EAAA;IACrE,OAAOA,SAAAA;AACT;;;;"}
1
+ {"version":3,"file":"types.js","sources":["../../../src/utility/serialization/types.ts"],"sourcesContent":["import type { GenericConstructor, Nullable, RequireOptionals } from '@zephyr3d/base';\r\n\r\n/**\r\n * Enumerates supported data types for serializable properties.\r\n *\r\n * This type informs serializers/editors how to interpret and encode values.\r\n * 'bool'|'int'|'float'|'vec2'|'vec3'|'vec4'|'int2'|'int3'|'int4'|'string'|'rgb'|'rgba'|'object'|'object_array'|'embedded'|'command';\r\n *\r\n * @public\r\n */\r\nexport type PropertyType = string;\r\n\r\n/**\r\n * Maps a property type discriminator to the corresponding value lane key.\r\n *\r\n * @public\r\n */\r\nexport type PropertyToType<T extends string> = T extends\r\n | 'float'\r\n | 'vec2'\r\n | 'vec3'\r\n | 'vec4'\r\n | 'int'\r\n | 'int2'\r\n | 'int3'\r\n | 'int4'\r\n | 'rgb'\r\n | 'rgba'\r\n ? 'num'\r\n : T extends 'bool'\r\n ? 'bool'\r\n : T extends 'string'\r\n ? 'str'\r\n : T extends 'object' | 'object_array'\r\n ? 'object'\r\n : 'num' | 'bool' | 'str' | 'object';\r\n/**\r\n * Container for a serializable property's value.\r\n *\r\n * Values are carried in typed arrays (even for single values) to support\r\n * both scalar and array-like properties in a unified shape.\r\n *\r\n * Conventions:\r\n * - `num` carries numeric data for types like `int`, `float`, `vec*`, `int*`, `rgb`, `rgba`\r\n * - `str` carries string data for `string`\r\n * - `bool` carries boolean data for `bool`\r\n * - `object` carries references/instances for `object`, `object_array`, `embedded`\r\n *\r\n * Only the relevant field(s) for the property's {@link PropertyType} will be populated.\r\n *\r\n * @public\r\n */\r\nexport type PropertyValue = {\r\n /** Numeric lane(s) for numeric, vector, or color types. */\r\n num?: number[];\r\n /** String lane(s) for text properties. */\r\n str?: string[];\r\n /** Boolean lane(s) for boolean properties. */\r\n bool?: boolean[];\r\n /** Object lane(s) for object references or embedded objects. */\r\n object?: Nullable<object>[];\r\n};\r\n\r\n/**\r\n * Editor-oriented edit types that augment how a property is presented/edited.\r\n *\r\n * This is orthogonal to {@link PropertyType} and is purely an editor hint.\r\n *\r\n * @public\r\n */\r\nexport type PropEdit = 'aabb' | 'quaternion' | 'proptrack' | 'curve1f';\r\n\r\n/**\r\n * Extra scene-node picker hints for a property.\r\n *\r\n * @public\r\n */\r\nexport type PropertySceneNodeOptions = {\r\n kind?: 'node' | 'mesh';\r\n};\r\n\r\n/**\r\n * Additional options controlling how a property is displayed, constrained, and edited.\r\n *\r\n * These options are consumed primarily by an editor/inspector UI, but may\r\n * also influence validation and tooling behavior.\r\n *\r\n * @public\r\n */\r\nexport type PropertyAccessorOptions = {\r\n /** Human-friendly label for UI. Defaults to `name` if omitted. */\r\n label?: string;\r\n /** Logical grouping/category in UI. */\r\n group?: string;\r\n /** Editor presentation hint (e.g., quaternion gizmo, animation track). */\r\n edit?: PropEdit;\r\n /** Minimum numeric value (for sliders/spinners). */\r\n minValue?: number;\r\n /** Maximum numeric value (for sliders/spinners). */\r\n maxValue?: number;\r\n /** Whether string property is multiline. */\r\n multiline?: boolean;\r\n /** Step/speed for numeric editing UI. */\r\n speed?: number;\r\n /** Whether the property can be animated/keyframed. */\r\n animatable?: boolean;\r\n /** Allowed MIME types for file-picker-like editors. */\r\n mimeTypes?: string[];\r\n /** Accept scene hierarchy node drag-drop in the inspector. */\r\n sceneNode?: PropertySceneNodeOptions;\r\n /** Render object-array entries inline instead of expandable nested groups. */\r\n inlineObjectArray?: boolean;\r\n /** Allowed constructor types when choosing/creating object references. */\r\n objectTypes?: GenericConstructor[];\r\n /**\r\n * Optional enumeration metadata.\r\n * `labels[i]` corresponds to `values[i]`.\r\n */\r\n enum?: { labels: string[]; values: unknown[] };\r\n};\r\n\r\n/**\r\n * Returns the property accessor list unchanged while preserving typing.\r\n *\r\n * @public\r\n */\r\nexport function defineProps(accessors: PropertyAccessor<any, 'DUMMY'>[]): PropertyAccessor[] {\r\n return accessors;\r\n}\r\n\r\n/**\r\n * Descriptor for a serializable property of a class/type.\r\n *\r\n * This binds together:\r\n * - Metadata: `type`, `name`, `default`, `readonly`, `persistent`, `options`\r\n * - Accessors: `get`, `set`, `add`, `delete`, `create` for manipulating the underlying object state\r\n * - Predicates: `isValid`, `isNullable`, `isHidden` to control UI and validation\r\n * - Commands: `command` for action-style properties (`type: 'command'`)\r\n * - Utilities: `getDefaultValue` to compute defaults dynamically\r\n *\r\n * The accessors are invoked with `this` bound to the owning object instance.\r\n *\r\n * @typeParam T - The instance type that owns the property.\r\n * @public\r\n */\r\nexport type PropertyAccessor<T = object, U extends string = ''> = {\r\n /** The storage/serialization data type. */\r\n type: PropertyType;\r\n /** Unique property name (stable identifier for tooling/serialization). */\r\n name: string;\r\n /** Description of this property */\r\n description?: string;\r\n /**\r\n * Optional evaluation phase/order hint (lower runs earlier).\r\n * Useful for staged initialization or batched updates in editors.\r\n */\r\n phase?: number;\r\n /** If true, the property is read-only in UI and programmatic setters may be disallowed. */\r\n readonly?: boolean;\r\n /** Default value used if none is provided. Can be a primitive, array, or object. */\r\n default?: any;\r\n /**\r\n * If true, the property is persisted during save/serialize.\r\n * Non-persistent properties may be computed or session-only.\r\n */\r\n //persistent?: boolean;\r\n /** Editor and validation options for this property. */\r\n options?: PropertyAccessorOptions;\r\n /**\r\n * Reads the current value from `this` into the provided `value` container.\r\n *\r\n * Implementations should fully populate the appropriate lane(s) (e.g., `num`, `str`, etc.)\r\n * according to the property's {@link PropertyType}.\r\n *\r\n * @param value - Output container to be filled by the getter.\r\n */\r\n get: <K extends string>(\r\n this: T,\r\n value: U extends '' ? Required<Pick<PropertyValue, PropertyToType<K>>> : RequireOptionals<PropertyValue>\r\n ) => void;\r\n /**\r\n * Writes an incoming value to `this`.\r\n *\r\n * For array-like properties, `index` can target a specific element.\r\n * Implementations should read from the appropriate lane(s) of `value` according to {@link PropertyType}.\r\n *\r\n * @param value - Input container carrying the new value.\r\n * @param index - Optional element index for array-like properties.\r\n * @returns Optionally `Promise<void>` if asynchronous work is required.\r\n */\r\n set?: <K extends string>(\r\n this: T,\r\n value: U extends '' ? Required<Pick<PropertyValue, PropertyToType<K>>> : RequireOptionals<PropertyValue>,\r\n index?: number\r\n ) => void | Promise<void>;\r\n /**\r\n * Creates a new embedded/contained object for object-like properties.\r\n *\r\n * Typically used for `embedded` or `object_array` to instantiate an element.\r\n *\r\n * @param ctor - Constructor to instantiate.\r\n * @param index - Target index where the new object will be inserted.\r\n * @returns The newly created object instance.\r\n */\r\n create?: (this: T, ctor: GenericConstructor, index: number) => Nullable<object>;\r\n /**\r\n * Deletes an element from an array-like property or clears a value.\r\n *\r\n * @param index - Target element index.\r\n * @returns Optionally `Promise<void>` if asynchronous work is required.\r\n */\r\n delete?: (this: T, index: number) => void | Promise<void>;\r\n /**\r\n * Adds a new element/value to an array-like property.\r\n *\r\n * If `index` is omitted, implementations may append to the end.\r\n *\r\n * @param value - The value to add (read appropriate lane(s) per {@link PropertyType}).\r\n * @param index - Optional insertion index.\r\n * @returns Optionally `Promise<void>` if asynchronous work is required.\r\n */\r\n add?: <K extends string>(\r\n this: T,\r\n value: U extends '' ? Required<Pick<PropertyValue, PropertyToType<K>>> : RequireOptionals<PropertyValue>,\r\n index?: number\r\n ) => void | Promise<void>;\r\n /**\r\n * Validates the current state of `this` with respect to this property.\r\n *\r\n * Returning `false` may block serialization or UI confirmation.\r\n *\r\n * @returns `true` if valid, otherwise `false`.\r\n */\r\n isValid?: (this: T) => boolean;\r\n /**\r\n * Indicates whether this property is serializable. Default is serializable if not present.\r\n *\r\n * @returns `true` if persistent, otherwise `false`.\r\n */\r\n isPersistent?: (this: T) => boolean;\r\n /**\r\n * Indicates whether a specific element or slot may be `null` or `undefined`.\r\n *\r\n * Applies to array-like or optional properties.\r\n *\r\n * @param index - Target element index.\r\n * @returns `true` if nullable, otherwise `false`.\r\n */\r\n isNullable?: (this: T, index: number) => boolean;\r\n /**\r\n * Controls visibility of a specific element or the property in UI.\r\n *\r\n * @param index - Target element index.\r\n * @param obj - Value at index\r\n * @returns `true` if hidden, otherwise `false`.\r\n */\r\n isHidden?: (this: T, index: number, obj?: unknown) => boolean;\r\n /**\r\n * Executes a command-style property.\r\n *\r\n * Only meaningful for `type: 'command'`. Return value may indicate success or toggle state.\r\n *\r\n * @param index - Optional command index for multi-command groups.\r\n * @returns Command result, commonly a boolean for toggle-like actions.\r\n */\r\n command?: (this: T, index: number) => boolean;\r\n /**\r\n * Supplies a default value dynamically at runtime.\r\n *\r\n * If provided, this takes precedence over the static `default` field.\r\n */\r\n getDefaultValue?: (this: T) => any;\r\n};\r\n\r\n/**\r\n * Descriptor for a serializable class/type.\r\n *\r\n * This defines how a class is identified, constructed, and inspected for properties.\r\n * Editors and serializers can use this metadata to instantiate objects, load initial\r\n * parameters, and enumerate property accessors.\r\n *\r\n * @public\r\n */\r\nexport type SerializableClass = {\r\n /** Concrete constructor for the serializable class. */\r\n ctor: GenericConstructor;\r\n /** Optional parent/superclass constructor to represent inheritance in tooling. */\r\n parent?: GenericConstructor;\r\n /** If true, suppresses title rendering in UI for compact displays. */\r\n noTitle?: boolean;\r\n /** Display name used by tooling and editors. */\r\n name: string;\r\n /**\r\n * Custom factory to create an instance and optionally control property loading.\r\n *\r\n * If `loadProps` is `false`, the caller may skip default property loading\r\n * (useful for lazy or staged initialization).\r\n *\r\n * @param ctx - Optional construction context (editor/runtime-specific).\r\n * @param init - Optional initialization payload.\r\n * @returns The created object and a `loadProps` hint.\r\n */\r\n createFunc?: (\r\n ctx?: any,\r\n init?: any\r\n ) => { obj: any; loadProps?: boolean } | Promise<{ obj: any; loadProps?: boolean }>;\r\n /**\r\n * Extracts initialization parameters from an instance suitable for re-creation.\r\n *\r\n * This is the inverse of `createFunc`'s `init` argument, enabling round-trip\r\n * serialization of constructor/initializer data.\r\n *\r\n * @param obj - The instance to introspect.\r\n * @returns An initialization payload (serializable).\r\n */\r\n getInitParams?: (obj: any, flags: { saveProps: boolean }) => any;\r\n /**\r\n * Enumerates property accessors for this class.\r\n *\r\n * The returned list defines the full set of serializable/editor-visible properties.\r\n *\r\n * @returns Array of property accessors.\r\n */\r\n getProps: () => PropertyAccessor<any>[];\r\n};\r\n"],"names":["defineProps","accessors"],"mappings":"AAyHA;;;;IAKO,SAASA,WAAAA,CAAYC,SAA2C,EAAA;IACrE,OAAOA,SAAAA;AACT;;;;"}
@@ -0,0 +1,138 @@
1
+ import { float2half } from '@zephyr3d/base';
2
+ import { getDevice } from '../../app/api.js';
3
+
4
+ const sheenLuts = new Map();
5
+ const SAMPLE_COUNT = 512;
6
+ const TWO_PI = Math.PI * 2;
7
+ const SHEEN_E_MIN_ALPHA_G = 0.07;
8
+ function getSheenLUT(size) {
9
+ let lut = sheenLuts.get(size);
10
+ if (!lut) {
11
+ lut = createSheenLUT(size);
12
+ sheenLuts.set(size, lut);
13
+ }
14
+ return lut;
15
+ }
16
+ function createSheenLUT(size) {
17
+ const tex = getDevice().createTexture2D('rgba16f', size, size, {
18
+ mipmapping: false
19
+ });
20
+ const image = new Uint16Array(size * size * 4);
21
+ const one = float2half(1);
22
+ let p = 0;
23
+ for(let y = size - 1; y >= 0; y--){
24
+ const roughness = clamp01((y + 0.5) / size);
25
+ const alphaG = Math.max(roughness * roughness, SHEEN_E_MIN_ALPHA_G);
26
+ for(let x = 0; x < size; x++){
27
+ const NoV = clamp01((x + 0.5) / size);
28
+ const e = integrateSheenAlbedo(NoV, alphaG);
29
+ const brdf = integrateCharlieBRDF(NoV, roughness);
30
+ image[p++] = toHalf(e);
31
+ image[p++] = 0;
32
+ image[p++] = toHalf(brdf);
33
+ image[p++] = one;
34
+ }
35
+ }
36
+ tex.update(image, 0, 0, size, size);
37
+ tex.name = 'SheenLUT';
38
+ return tex;
39
+ }
40
+ function integrateCharlieBRDF(NoV, roughness) {
41
+ let sum = 0;
42
+ const Vx = Math.sqrt(Math.max(0, 1 - NoV * NoV));
43
+ const Vz = NoV;
44
+ for(let i = 0; i < SAMPLE_COUNT; i++){
45
+ const u = hammersley(i, SAMPLE_COUNT);
46
+ const phi = TWO_PI * u[0];
47
+ const cosTheta = 1 - u[1];
48
+ const sinTheta = Math.sqrt(Math.max(0, 1 - cosTheta * cosTheta));
49
+ const Hx = sinTheta * Math.cos(phi);
50
+ const Hz = cosTheta;
51
+ const VoH = Math.max(Vx * Hx + Vz * Hz, 0);
52
+ const Lz = 2 * VoH * Hz - Vz;
53
+ const NoL = Math.max(Lz, 0);
54
+ if (NoL > 0 && VoH > 0) {
55
+ sum += visibilitySheen(NoL, NoV, roughness) * distributionCharlie(Hz, roughness) * NoL * VoH;
56
+ }
57
+ }
58
+ return sum * (4 * TWO_PI / SAMPLE_COUNT);
59
+ }
60
+ function integrateSheenAlbedo(NoV, alphaG) {
61
+ let sum = 0;
62
+ const Vx = Math.sqrt(Math.max(0, 1 - NoV * NoV));
63
+ const Vz = NoV;
64
+ for(let i = 0; i < SAMPLE_COUNT; i++){
65
+ const u = hammersley(i, SAMPLE_COUNT);
66
+ const phi = TWO_PI * u[0];
67
+ const NoL = 1 - u[1];
68
+ const sinTheta = Math.sqrt(Math.max(0, 1 - NoL * NoL));
69
+ const Lx = sinTheta * Math.cos(phi);
70
+ const Ly = sinTheta * Math.sin(phi);
71
+ const Lz = NoL;
72
+ const Hx = Lx + Vx;
73
+ const Hy = Ly;
74
+ const Hz = Lz + Vz;
75
+ const invLenH = 1 / Math.max(Math.sqrt(Hx * Hx + Hy * Hy + Hz * Hz), 1e-6);
76
+ const NoH = Math.max(Hz * invLenH, 0);
77
+ sum += distributionCharlieAlphaG(NoH, alphaG) * visibilitySheenAlphaG(NoL, NoV, alphaG) * NoL;
78
+ }
79
+ return clamp01(sum * (TWO_PI / SAMPLE_COUNT));
80
+ }
81
+ function distributionCharlie(NoH, sheenRoughness) {
82
+ const roughness = Math.max(sheenRoughness, 1e-6);
83
+ return distributionCharlieAlphaG(NoH, roughness * roughness);
84
+ }
85
+ function distributionCharlieAlphaG(NoH, alphaG) {
86
+ alphaG = Math.max(alphaG, 1e-6);
87
+ const invR = 1 / alphaG;
88
+ const sin2h = Math.max(1 - NoH * NoH, 0);
89
+ return (2 + invR) * Math.pow(sin2h, invR * 0.5) / TWO_PI;
90
+ }
91
+ function visibilitySheen(NoL, NoV, sheenRoughness) {
92
+ const roughness = Math.max(sheenRoughness, 1e-6);
93
+ return visibilitySheenAlphaG(NoL, NoV, roughness * roughness);
94
+ }
95
+ function visibilitySheenAlphaG(NoL, NoV, alphaG) {
96
+ alphaG = Math.max(alphaG, 1e-6);
97
+ const denom = (1 + lambdaSheen(NoV, alphaG) + lambdaSheen(NoL, alphaG)) * (4 * NoV * NoL);
98
+ return denom > 0 ? clamp01(1 / denom) : 0;
99
+ }
100
+ function lambdaSheen(cosTheta, alphaG) {
101
+ const c = Math.abs(cosTheta);
102
+ return c < 0.5 ? Math.exp(lambdaSheenNumericHelper(c, alphaG)) : Math.exp(2 * lambdaSheenNumericHelper(0.5, alphaG) - lambdaSheenNumericHelper(1 - c, alphaG));
103
+ }
104
+ function lambdaSheenNumericHelper(x, alphaG) {
105
+ const oneMinusAlphaSq = (1 - alphaG) * (1 - alphaG);
106
+ const a = mix(21.5473, 25.3245, oneMinusAlphaSq);
107
+ const b = mix(3.82987, 3.32435, oneMinusAlphaSq);
108
+ const c = mix(0.19823, 0.16801, oneMinusAlphaSq);
109
+ const d = mix(-1.9776, -1.27393, oneMinusAlphaSq);
110
+ const e = mix(-4.32054, -4.85967, oneMinusAlphaSq);
111
+ return a / (1 + b * Math.pow(x, c)) + d * x + e;
112
+ }
113
+ function hammersley(i, sampleCount) {
114
+ return [
115
+ i / sampleCount,
116
+ radicalInverseVdC(i)
117
+ ];
118
+ }
119
+ function radicalInverseVdC(bits) {
120
+ bits = (bits << 16 | bits >>> 16) >>> 0;
121
+ bits = ((bits & 0x55555555) << 1 | (bits & 0xaaaaaaaa) >>> 1) >>> 0;
122
+ bits = ((bits & 0x33333333) << 2 | (bits & 0xcccccccc) >>> 2) >>> 0;
123
+ bits = ((bits & 0x0f0f0f0f) << 4 | (bits & 0xf0f0f0f0) >>> 4) >>> 0;
124
+ bits = ((bits & 0x00ff00ff) << 8 | (bits & 0xff00ff00) >>> 8) >>> 0;
125
+ return bits * 2.3283064365386963e-10;
126
+ }
127
+ function mix(x, y, a) {
128
+ return x * (1 - a) + y * a;
129
+ }
130
+ function clamp01(v) {
131
+ return Math.min(Math.max(v, 0), 1);
132
+ }
133
+ function toHalf(v) {
134
+ return float2half(Math.min(Math.max(Number.isFinite(v) ? v : 0, 0), 65504));
135
+ }
136
+
137
+ export { getSheenLUT };
138
+ //# sourceMappingURL=sheenlut.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sheenlut.js","sources":["../../../src/utility/textures/sheenlut.ts"],"sourcesContent":["import type { Texture2D } from '@zephyr3d/device';\r\nimport { float2half } from '@zephyr3d/base';\r\nimport { getDevice } from '../../app/api';\r\n\r\nconst sheenLuts: Map<number, Texture2D> = new Map();\r\nconst SAMPLE_COUNT = 512;\r\nconst TWO_PI = Math.PI * 2;\r\nconst SHEEN_E_MIN_ALPHA_G = 0.07;\r\n\r\nexport function getSheenLUT(size: number): Texture2D {\r\n let lut = sheenLuts.get(size);\r\n if (!lut) {\r\n lut = createSheenLUT(size);\r\n sheenLuts.set(size, lut);\r\n }\r\n return lut;\r\n}\r\n\r\nexport function getCharlieLUT(size: number): Texture2D {\r\n return getSheenLUT(size);\r\n}\r\n\r\nexport function getSheenELUT(size: number): Texture2D {\r\n return getSheenLUT(size);\r\n}\r\n\r\nfunction createSheenLUT(size: number) {\r\n const tex = getDevice().createTexture2D('rgba16f', size, size, { mipmapping: false })!;\r\n const image = new Uint16Array(size * size * 4);\r\n const one = float2half(1);\r\n let p = 0;\r\n for (let y = size - 1; y >= 0; y--) {\r\n const roughness = clamp01((y + 0.5) / size);\r\n const alphaG = Math.max(roughness * roughness, SHEEN_E_MIN_ALPHA_G);\r\n for (let x = 0; x < size; x++) {\r\n const NoV = clamp01((x + 0.5) / size);\r\n const e = integrateSheenAlbedo(NoV, alphaG);\r\n const brdf = integrateCharlieBRDF(NoV, roughness);\r\n image[p++] = toHalf(e);\r\n image[p++] = 0;\r\n image[p++] = toHalf(brdf);\r\n image[p++] = one;\r\n }\r\n }\r\n tex.update(image, 0, 0, size, size);\r\n tex.name = 'SheenLUT';\r\n return tex;\r\n}\r\n\r\nfunction integrateCharlieBRDF(NoV: number, roughness: number) {\r\n let sum = 0;\r\n const Vx = Math.sqrt(Math.max(0, 1 - NoV * NoV));\r\n const Vz = NoV;\r\n for (let i = 0; i < SAMPLE_COUNT; i++) {\r\n const u = hammersley(i, SAMPLE_COUNT);\r\n const phi = TWO_PI * u[0];\r\n const cosTheta = 1 - u[1];\r\n const sinTheta = Math.sqrt(Math.max(0, 1 - cosTheta * cosTheta));\r\n const Hx = sinTheta * Math.cos(phi);\r\n const Hz = cosTheta;\r\n const VoH = Math.max(Vx * Hx + Vz * Hz, 0);\r\n const Lz = 2 * VoH * Hz - Vz;\r\n const NoL = Math.max(Lz, 0);\r\n if (NoL > 0 && VoH > 0) {\r\n sum += visibilitySheen(NoL, NoV, roughness) * distributionCharlie(Hz, roughness) * NoL * VoH;\r\n }\r\n }\r\n return sum * ((4 * TWO_PI) / SAMPLE_COUNT);\r\n}\r\n\r\nfunction integrateSheenAlbedo(NoV: number, alphaG: number) {\r\n let sum = 0;\r\n const Vx = Math.sqrt(Math.max(0, 1 - NoV * NoV));\r\n const Vz = NoV;\r\n for (let i = 0; i < SAMPLE_COUNT; i++) {\r\n const u = hammersley(i, SAMPLE_COUNT);\r\n const phi = TWO_PI * u[0];\r\n const NoL = 1 - u[1];\r\n const sinTheta = Math.sqrt(Math.max(0, 1 - NoL * NoL));\r\n const Lx = sinTheta * Math.cos(phi);\r\n const Ly = sinTheta * Math.sin(phi);\r\n const Lz = NoL;\r\n const Hx = Lx + Vx;\r\n const Hy = Ly;\r\n const Hz = Lz + Vz;\r\n const invLenH = 1 / Math.max(Math.sqrt(Hx * Hx + Hy * Hy + Hz * Hz), 1e-6);\r\n const NoH = Math.max(Hz * invLenH, 0);\r\n sum += distributionCharlieAlphaG(NoH, alphaG) * visibilitySheenAlphaG(NoL, NoV, alphaG) * NoL;\r\n }\r\n return clamp01(sum * (TWO_PI / SAMPLE_COUNT));\r\n}\r\n\r\nfunction distributionCharlie(NoH: number, sheenRoughness: number) {\r\n const roughness = Math.max(sheenRoughness, 1e-6);\r\n return distributionCharlieAlphaG(NoH, roughness * roughness);\r\n}\r\n\r\nfunction distributionCharlieAlphaG(NoH: number, alphaG: number) {\r\n alphaG = Math.max(alphaG, 1e-6);\r\n const invR = 1 / alphaG;\r\n const sin2h = Math.max(1 - NoH * NoH, 0);\r\n return ((2 + invR) * Math.pow(sin2h, invR * 0.5)) / TWO_PI;\r\n}\r\n\r\nfunction visibilitySheen(NoL: number, NoV: number, sheenRoughness: number) {\r\n const roughness = Math.max(sheenRoughness, 1e-6);\r\n return visibilitySheenAlphaG(NoL, NoV, roughness * roughness);\r\n}\r\n\r\nfunction visibilitySheenAlphaG(NoL: number, NoV: number, alphaG: number) {\r\n alphaG = Math.max(alphaG, 1e-6);\r\n const denom = (1 + lambdaSheen(NoV, alphaG) + lambdaSheen(NoL, alphaG)) * (4 * NoV * NoL);\r\n return denom > 0 ? clamp01(1 / denom) : 0;\r\n}\r\n\r\nfunction lambdaSheen(cosTheta: number, alphaG: number) {\r\n const c = Math.abs(cosTheta);\r\n return c < 0.5\r\n ? Math.exp(lambdaSheenNumericHelper(c, alphaG))\r\n : Math.exp(2 * lambdaSheenNumericHelper(0.5, alphaG) - lambdaSheenNumericHelper(1 - c, alphaG));\r\n}\r\n\r\nfunction lambdaSheenNumericHelper(x: number, alphaG: number) {\r\n const oneMinusAlphaSq = (1 - alphaG) * (1 - alphaG);\r\n const a = mix(21.5473, 25.3245, oneMinusAlphaSq);\r\n const b = mix(3.82987, 3.32435, oneMinusAlphaSq);\r\n const c = mix(0.19823, 0.16801, oneMinusAlphaSq);\r\n const d = mix(-1.9776, -1.27393, oneMinusAlphaSq);\r\n const e = mix(-4.32054, -4.85967, oneMinusAlphaSq);\r\n return a / (1 + b * Math.pow(x, c)) + d * x + e;\r\n}\r\n\r\nfunction hammersley(i: number, sampleCount: number) {\r\n return [i / sampleCount, radicalInverseVdC(i)] as const;\r\n}\r\n\r\nfunction radicalInverseVdC(bits: number) {\r\n bits = ((bits << 16) | (bits >>> 16)) >>> 0;\r\n bits = (((bits & 0x55555555) << 1) | ((bits & 0xaaaaaaaa) >>> 1)) >>> 0;\r\n bits = (((bits & 0x33333333) << 2) | ((bits & 0xcccccccc) >>> 2)) >>> 0;\r\n bits = (((bits & 0x0f0f0f0f) << 4) | ((bits & 0xf0f0f0f0) >>> 4)) >>> 0;\r\n bits = (((bits & 0x00ff00ff) << 8) | ((bits & 0xff00ff00) >>> 8)) >>> 0;\r\n return bits * 2.3283064365386963e-10;\r\n}\r\n\r\nfunction mix(x: number, y: number, a: number) {\r\n return x * (1 - a) + y * a;\r\n}\r\n\r\nfunction clamp01(v: number) {\r\n return Math.min(Math.max(v, 0), 1);\r\n}\r\n\r\nfunction toHalf(v: number) {\r\n return float2half(Math.min(Math.max(Number.isFinite(v) ? v : 0, 0), 65504));\r\n}\r\n"],"names":["sheenLuts","Map","SAMPLE_COUNT","TWO_PI","Math","PI","SHEEN_E_MIN_ALPHA_G","getSheenLUT","size","lut","get","createSheenLUT","set","tex","getDevice","createTexture2D","mipmapping","image","Uint16Array","one","float2half","p","y","roughness","clamp01","alphaG","max","x","NoV","e","integrateSheenAlbedo","brdf","integrateCharlieBRDF","toHalf","update","name","sum","Vx","sqrt","Vz","i","u","hammersley","phi","cosTheta","sinTheta","Hx","cos","Hz","VoH","Lz","NoL","visibilitySheen","distributionCharlie","Lx","Ly","sin","Hy","invLenH","NoH","distributionCharlieAlphaG","visibilitySheenAlphaG","sheenRoughness","invR","sin2h","pow","denom","lambdaSheen","c","abs","exp","lambdaSheenNumericHelper","oneMinusAlphaSq","a","mix","b","d","sampleCount","radicalInverseVdC","bits","v","min","Number","isFinite"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zephyr3d/scene",
3
- "version": "0.9.4",
3
+ "version": "0.9.6",
4
4
  "description": "Scene API for zephyr3d",
5
5
  "homepage": "https://github.com/gavinyork/zephyr3d#readme",
6
6
  "type": "module",
@@ -67,7 +67,7 @@
67
67
  "dependencies": {
68
68
  "@types/draco3d": "^1.4.9",
69
69
  "@webgpu/types": "^0.1.65",
70
- "@zephyr3d/base": "^0.2.5",
70
+ "@zephyr3d/base": "^0.2.6",
71
71
  "@zephyr3d/device": "^0.2.9",
72
72
  "es-module-lexer": "^1.7.0"
73
73
  },
@@ -1,68 +0,0 @@
1
- import { IKChain } from './ik_chain.js';
2
-
3
- /**
4
- * Helper class for building IK chains from various sources.
5
- *
6
- * @public
7
- */ class IKChainBuilder {
8
- /**
9
- * Create an IK chain from an array of scene nodes.
10
- *
11
- * @param nodes - Array of scene nodes from root to end effector
12
- * @returns The created IK chain
13
- */ static fromNodes(nodes) {
14
- return new IKChain(nodes);
15
- }
16
- /**
17
- * Create an IK chain from a skeleton using joint indices.
18
- *
19
- * @param skeleton - The skeleton containing the joints
20
- * @param jointIndices - Array of joint indices from root to end effector
21
- * @returns The created IK chain
22
- */ static fromSkeleton(skeleton, jointIndices) {
23
- if (jointIndices.length < 2) {
24
- throw new Error('IK chain must have at least 2 joints');
25
- }
26
- const joints = skeleton.joints;
27
- const nodes = [];
28
- for (const index of jointIndices){
29
- if (index < 0 || index >= joints.length) {
30
- throw new Error(`Invalid joint index: ${index}`);
31
- }
32
- nodes.push(joints[index]);
33
- }
34
- return new IKChain(nodes);
35
- }
36
- /**
37
- * Create an IK chain by traversing from a start node to an end node.
38
- *
39
- * @remarks
40
- * This method walks up the parent chain from the end node until it
41
- * reaches the start node, building the joint chain in the process.
42
- *
43
- * @param startNode - The root joint of the chain
44
- * @param endNode - The end effector joint
45
- * @returns The created IK chain
46
- */ static fromNodeHierarchy(startNode, endNode) {
47
- const nodes = [];
48
- let current = endNode;
49
- // Walk up the hierarchy from end to start
50
- while(current){
51
- nodes.unshift(current); // Add to front
52
- if (current === startNode) {
53
- break;
54
- }
55
- current = current.parent;
56
- }
57
- if (nodes[0] !== startNode) {
58
- throw new Error('End node is not a descendant of start node');
59
- }
60
- if (nodes.length < 2) {
61
- throw new Error('IK chain must have at least 2 joints');
62
- }
63
- return new IKChain(nodes);
64
- }
65
- }
66
-
67
- export { IKChainBuilder };
68
- //# sourceMappingURL=ik_chain_builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ik_chain_builder.js","sources":["../../../src/animation/ik/ik_chain_builder.ts"],"sourcesContent":["import { IKChain } from './ik_chain';\r\nimport type { SceneNode } from '../../scene/scene_node';\r\nimport type { Skeleton } from '../skeleton';\r\n\r\n/**\r\n * Helper class for building IK chains from various sources.\r\n *\r\n * @public\r\n */\r\nexport class IKChainBuilder {\r\n /**\r\n * Create an IK chain from an array of scene nodes.\r\n *\r\n * @param nodes - Array of scene nodes from root to end effector\r\n * @returns The created IK chain\r\n */\r\n static fromNodes(nodes: SceneNode[]): IKChain {\r\n return new IKChain(nodes);\r\n }\r\n\r\n /**\r\n * Create an IK chain from a skeleton using joint indices.\r\n *\r\n * @param skeleton - The skeleton containing the joints\r\n * @param jointIndices - Array of joint indices from root to end effector\r\n * @returns The created IK chain\r\n */\r\n static fromSkeleton(skeleton: Skeleton, jointIndices: number[]): IKChain {\r\n if (jointIndices.length < 2) {\r\n throw new Error('IK chain must have at least 2 joints');\r\n }\r\n\r\n const joints = skeleton.joints;\r\n const nodes: SceneNode[] = [];\r\n\r\n for (const index of jointIndices) {\r\n if (index < 0 || index >= joints.length) {\r\n throw new Error(`Invalid joint index: ${index}`);\r\n }\r\n nodes.push(joints[index]);\r\n }\r\n\r\n return new IKChain(nodes);\r\n }\r\n\r\n /**\r\n * Create an IK chain by traversing from a start node to an end node.\r\n *\r\n * @remarks\r\n * This method walks up the parent chain from the end node until it\r\n * reaches the start node, building the joint chain in the process.\r\n *\r\n * @param startNode - The root joint of the chain\r\n * @param endNode - The end effector joint\r\n * @returns The created IK chain\r\n */\r\n static fromNodeHierarchy(startNode: SceneNode, endNode: SceneNode): IKChain {\r\n const nodes: SceneNode[] = [];\r\n let current: SceneNode | null = endNode;\r\n\r\n // Walk up the hierarchy from end to start\r\n while (current) {\r\n nodes.unshift(current); // Add to front\r\n\r\n if (current === startNode) {\r\n break;\r\n }\r\n\r\n current = current.parent as SceneNode | null;\r\n }\r\n\r\n if (nodes[0] !== startNode) {\r\n throw new Error('End node is not a descendant of start node');\r\n }\r\n\r\n if (nodes.length < 2) {\r\n throw new Error('IK chain must have at least 2 joints');\r\n }\r\n\r\n return new IKChain(nodes);\r\n }\r\n}\r\n"],"names":["IKChainBuilder","fromNodes","nodes","IKChain","fromSkeleton","skeleton","jointIndices","length","Error","joints","index","push","fromNodeHierarchy","startNode","endNode","current","unshift","parent"],"mappings":";;AAIA;;;;AAIC,IACM,MAAMA,cAAAA,CAAAA;AACX;;;;;MAMA,OAAOC,SAAUC,CAAAA,KAAkB,EAAW;AAC5C,QAAA,OAAO,IAAIC,OAAQD,CAAAA,KAAAA,CAAAA;AACrB;AAEA;;;;;;AAMC,MACD,OAAOE,YAAAA,CAAaC,QAAkB,EAAEC,YAAsB,EAAW;QACvE,IAAIA,YAAAA,CAAaC,MAAM,GAAG,CAAG,EAAA;AAC3B,YAAA,MAAM,IAAIC,KAAM,CAAA,sCAAA,CAAA;AAClB;QAEA,MAAMC,MAAAA,GAASJ,SAASI,MAAM;AAC9B,QAAA,MAAMP,QAAqB,EAAE;QAE7B,KAAK,MAAMQ,SAASJ,YAAc,CAAA;AAChC,YAAA,IAAII,KAAQ,GAAA,CAAA,IAAKA,KAASD,IAAAA,MAAAA,CAAOF,MAAM,EAAE;AACvC,gBAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,qBAAqB,EAAEE,KAAO,CAAA,CAAA,CAAA;AACjD;AACAR,YAAAA,KAAAA,CAAMS,IAAI,CAACF,MAAM,CAACC,KAAM,CAAA,CAAA;AAC1B;AAEA,QAAA,OAAO,IAAIP,OAAQD,CAAAA,KAAAA,CAAAA;AACrB;AAEA;;;;;;;;;;AAUC,MACD,OAAOU,iBAAAA,CAAkBC,SAAoB,EAAEC,OAAkB,EAAW;AAC1E,QAAA,MAAMZ,QAAqB,EAAE;AAC7B,QAAA,IAAIa,OAA4BD,GAAAA,OAAAA;;AAGhC,QAAA,MAAOC,OAAS,CAAA;YACdb,KAAMc,CAAAA,OAAO,CAACD,OAAAA,CAAAA,CAAAA;AAEd,YAAA,IAAIA,YAAYF,SAAW,EAAA;AACzB,gBAAA;AACF;AAEAE,YAAAA,OAAAA,GAAUA,QAAQE,MAAM;AAC1B;AAEA,QAAA,IAAIf,KAAK,CAAC,CAAE,CAAA,KAAKW,SAAW,EAAA;AAC1B,YAAA,MAAM,IAAIL,KAAM,CAAA,4CAAA,CAAA;AAClB;QAEA,IAAIN,KAAAA,CAAMK,MAAM,GAAG,CAAG,EAAA;AACpB,YAAA,MAAM,IAAIC,KAAM,CAAA,sCAAA,CAAA;AAClB;AAEA,QAAA,OAAO,IAAIL,OAAQD,CAAAA,KAAAA,CAAAA;AACrB;AACF;;;;"}