@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.
- package/dist/animation/animationmask.js +224 -0
- package/dist/animation/animationmask.js.map +1 -0
- package/dist/animation/animationset.js +268 -67
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/animationtrack.js.map +1 -1
- package/dist/animation/eulerrotationtrack.js +3 -0
- package/dist/animation/eulerrotationtrack.js.map +1 -1
- package/dist/animation/fixed_geometry_cache_track.js +7 -0
- package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
- package/dist/animation/ik_modifier.js.map +1 -1
- package/dist/animation/joint_dynamics/collision.js +6 -4
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +390 -43
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +62 -3
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +4 -3
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/joint_dynamics_modifier.js +2 -0
- package/dist/animation/joint_dynamics_modifier.js.map +1 -1
- package/dist/animation/morphtarget.js +3 -72
- package/dist/animation/morphtarget.js.map +1 -1
- package/dist/animation/morphtrack.js +3 -0
- package/dist/animation/morphtrack.js.map +1 -1
- package/dist/animation/pca_geometry_cache_track.js +3 -0
- package/dist/animation/pca_geometry_cache_track.js.map +1 -1
- package/dist/animation/proptrack.js +3 -0
- package/dist/animation/proptrack.js.map +1 -1
- package/dist/animation/rotationtrack.js +3 -0
- package/dist/animation/rotationtrack.js.map +1 -1
- package/dist/animation/scaletrack.js +3 -0
- package/dist/animation/scaletrack.js.map +1 -1
- package/dist/animation/skeleton.js +254 -79
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skeleton_modifier.js.map +1 -1
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/animation/translationtrack.js +3 -0
- package/dist/animation/translationtrack.js.map +1 -1
- package/dist/app/engine.js +171 -107
- package/dist/app/engine.js.map +1 -1
- package/dist/app/scriptregistry.js +251 -80
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +344 -365
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/loader.js +1 -6
- package/dist/asset/loaders/loader.js.map +1 -1
- package/dist/asset/loaders/zabc/zabc_loader.js.map +1 -1
- package/dist/asset/model.js +1000 -131
- package/dist/asset/model.js.map +1 -1
- package/dist/avatar/wardrobe.js +474 -0
- package/dist/avatar/wardrobe.js.map +1 -0
- package/dist/index.d.ts +1126 -199
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +6 -3
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +72 -15
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/msdf_text.js +3 -3
- package/dist/material/msdf_text.js.map +1 -1
- package/dist/material/msdf_text_sprite.js +4 -4
- package/dist/material/msdf_text_sprite.js.map +1 -1
- package/dist/material/pbrblueprint.js +102 -102
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/render/envlight.js +54 -1
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/sky.js +9 -0
- package/dist/render/sky.js.map +1 -1
- package/dist/scene/batchgroup.js +11 -13
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +15 -2
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/mesh.js +79 -16
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/scene.js +1 -0
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +203 -2
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/text/font/cff_font.js +890 -0
- package/dist/text/font/cff_font.js.map +1 -0
- package/dist/text/font/font_asset.js +17 -3
- package/dist/text/font/font_asset.js.map +1 -1
- package/dist/text/msdf/generator.js.map +1 -1
- package/dist/text/msdf/shape.js +4 -1
- package/dist/text/msdf/shape.js.map +1 -1
- package/dist/text/runtime/msdf_text_atlas_manager.js +4 -1
- package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -1
- package/dist/utility/blueprint/material/inputs.js +1157 -1154
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/bounding_volume.js.map +1 -1
- package/dist/utility/pmrem.js +34 -8
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/serialization/manager.js +22 -9
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +700 -7
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +64 -4
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +187 -8
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/textures/sheenlut.js +138 -0
- package/dist/utility/textures/sheenlut.js.map +1 -0
- package/package.json +2 -2
- package/dist/animation/ik/ik_chain_builder.js +0 -68
- package/dist/animation/ik/ik_chain_builder.js.map +0 -1
- package/dist/animation/ik/ik_pole_constraint.js +0 -123
- package/dist/animation/ik/ik_pole_constraint.js.map +0 -1
- package/dist/animation/ik/ik_track.js +0 -96
- package/dist/animation/ik/ik_track.js.map +0 -1
- package/dist/animation/ik_postprocessor.js +0 -71
- package/dist/animation/ik_postprocessor.js.map +0 -1
- package/dist/animation/joint_dynamics/math.js +0 -16
- package/dist/animation/joint_dynamics/math.js.map +0 -1
- package/dist/animation/manual_transform_processor.js +0 -156
- package/dist/animation/manual_transform_processor.js.map +0 -1
- package/dist/animation/skeleton_postprocessor.js +0 -50
- package/dist/animation/skeleton_postprocessor.js.map +0 -1
- package/dist/animation/spring2/collision.js +0 -469
- package/dist/animation/spring2/collision.js.map +0 -1
- package/dist/animation/spring2/constraints.js +0 -329
- package/dist/animation/spring2/constraints.js.map +0 -1
- package/dist/animation/spring2/controller.js +0 -434
- package/dist/animation/spring2/controller.js.map +0 -1
- package/dist/animation/spring2/math.js +0 -16
- package/dist/animation/spring2/math.js.map +0 -1
- package/dist/animation/spring2/solver.js +0 -624
- package/dist/animation/spring2/solver.js.map +0 -1
- package/dist/animation/spring2/spring_system.js +0 -118
- package/dist/animation/spring2/spring_system.js.map +0 -1
- package/dist/animation/spring2/types.js +0 -19
- package/dist/animation/spring2/types.js.map +0 -1
- package/dist/animation/spring_postprocessor.js +0 -54
- package/dist/animation/spring_postprocessor.js.map +0 -1
- package/dist/asset/loaders/gltf/gltf_loader.js +0 -1273
- package/dist/asset/loaders/gltf/gltf_loader.js.map +0 -1
- package/dist/asset/loaders/gltf/helpers.js +0 -331
- package/dist/asset/loaders/gltf/helpers.js.map +0 -1
- package/dist/material/sprite3d.js +0 -301
- package/dist/material/sprite3d.js.map +0 -1
- package/dist/material/sprite3d_std.js +0 -116
- package/dist/material/sprite3d_std.js.map +0 -1
- package/dist/material/sprite3dblueprint.js +0 -235
- package/dist/material/sprite3dblueprint.js.map +0 -1
- package/dist/material/sprite_sdf.js +0 -106
- package/dist/material/sprite_sdf.js.map +0 -1
- package/dist/material/terrainmaterial.js +0 -368
- package/dist/material/terrainmaterial.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +0 -38
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +0 -10
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +0 -127
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +0 -263
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +0 -1
- package/dist/render/deferredlightpass.js +0 -510
- package/dist/render/deferredlightpass.js.map +0 -1
- package/dist/render/deferredshadowlightpass.js +0 -428
- package/dist/render/deferredshadowlightpass.js.map +0 -1
- package/dist/render/gbufferpass.js +0 -50
- package/dist/render/gbufferpass.js.map +0 -1
- package/dist/scene/sdftextsprite.js +0 -322
- package/dist/scene/sdftextsprite.js.map +0 -1
- package/dist/scene/sprite3d.js +0 -18
- package/dist/scene/sprite3d.js.map +0 -1
- package/dist/scene/terrain/grass.js +0 -280
- package/dist/scene/terrain/grass.js.map +0 -1
- package/dist/scene/terrain/heightfield.js +0 -475
- package/dist/scene/terrain/heightfield.js.map +0 -1
- package/dist/scene/terrain/patch.js +0 -532
- package/dist/scene/terrain/patch.js.map +0 -1
- package/dist/scene/terrain/quadtree.js +0 -461
- package/dist/scene/terrain/quadtree.js.map +0 -1
- package/dist/scene/terrain/terrain.js +0 -231
- package/dist/scene/terrain/terrain.js.map +0 -1
- package/dist/src/animation/animation.js +0 -127
- package/dist/src/animation/animation.js.map +0 -1
- package/dist/src/animation/animationset.js +0 -255
- package/dist/src/animation/animationset.js.map +0 -1
- package/dist/src/animation/animationtrack.js +0 -34
- package/dist/src/animation/animationtrack.js.map +0 -1
- package/dist/src/animation/eulerrotationtrack.js +0 -52
- package/dist/src/animation/eulerrotationtrack.js.map +0 -1
- package/dist/src/animation/morphtarget.js +0 -93
- package/dist/src/animation/morphtarget.js.map +0 -1
- package/dist/src/animation/morphtrack.js +0 -70
- package/dist/src/animation/morphtrack.js.map +0 -1
- package/dist/src/animation/proptrack.js +0 -161
- package/dist/src/animation/proptrack.js.map +0 -1
- package/dist/src/animation/rotationtrack.js +0 -51
- package/dist/src/animation/rotationtrack.js.map +0 -1
- package/dist/src/animation/scaletrack.js +0 -50
- package/dist/src/animation/scaletrack.js.map +0 -1
- package/dist/src/animation/skeleton.js +0 -204
- package/dist/src/animation/skeleton.js.map +0 -1
- package/dist/src/animation/translationtrack.js +0 -50
- package/dist/src/animation/translationtrack.js.map +0 -1
- package/dist/src/app/app.js +0 -129
- package/dist/src/app/app.js.map +0 -1
- package/dist/src/app/inputmgr.js +0 -267
- package/dist/src/app/inputmgr.js.map +0 -1
- package/dist/src/asset/assetmanager.js +0 -404
- package/dist/src/asset/assetmanager.js.map +0 -1
- package/dist/src/asset/builtin.js +0 -337
- package/dist/src/asset/builtin.js.map +0 -1
- package/dist/src/asset/loaders/dds/dds.js +0 -470
- package/dist/src/asset/loaders/dds/dds.js.map +0 -1
- package/dist/src/asset/loaders/dds/dds_loader.js +0 -28
- package/dist/src/asset/loaders/dds/dds_loader.js.map +0 -1
- package/dist/src/asset/loaders/gltf/gltf_loader.js +0 -1265
- package/dist/src/asset/loaders/gltf/gltf_loader.js.map +0 -1
- package/dist/src/asset/loaders/gltf/helpers.js +0 -327
- package/dist/src/asset/loaders/gltf/helpers.js.map +0 -1
- package/dist/src/asset/loaders/hdr/hdr.js +0 -180
- package/dist/src/asset/loaders/hdr/hdr.js.map +0 -1
- package/dist/src/asset/loaders/image/tga_Loader.js +0 -116
- package/dist/src/asset/loaders/image/tga_Loader.js.map +0 -1
- package/dist/src/asset/loaders/image/webimage_loader.js +0 -63
- package/dist/src/asset/loaders/image/webimage_loader.js.map +0 -1
- package/dist/src/asset/loaders/loader.js +0 -45
- package/dist/src/asset/loaders/loader.js.map +0 -1
- package/dist/src/asset/model.js +0 -414
- package/dist/src/asset/model.js.map +0 -1
- package/dist/src/blitter/bilateralblur.js +0 -221
- package/dist/src/blitter/bilateralblur.js.map +0 -1
- package/dist/src/blitter/blitter.js +0 -390
- package/dist/src/blitter/blitter.js.map +0 -1
- package/dist/src/blitter/box.js +0 -118
- package/dist/src/blitter/box.js.map +0 -1
- package/dist/src/blitter/copy.js +0 -22
- package/dist/src/blitter/copy.js.map +0 -1
- package/dist/src/blitter/gaussianblur.js +0 -228
- package/dist/src/blitter/gaussianblur.js.map +0 -1
- package/dist/src/camera/base.js +0 -92
- package/dist/src/camera/base.js.map +0 -1
- package/dist/src/camera/camera.js +0 -1005
- package/dist/src/camera/camera.js.map +0 -1
- package/dist/src/camera/fps.js +0 -238
- package/dist/src/camera/fps.js.map +0 -1
- package/dist/src/camera/orbit.js +0 -245
- package/dist/src/camera/orbit.js.map +0 -1
- package/dist/src/camera/orthocamera.js +0 -167
- package/dist/src/camera/orthocamera.js.map +0 -1
- package/dist/src/camera/perspectivecamera.js +0 -141
- package/dist/src/camera/perspectivecamera.js.map +0 -1
- package/dist/src/index.js +0 -120
- package/dist/src/index.js.map +0 -1
- package/dist/src/material/blinn.js +0 -81
- package/dist/src/material/blinn.js.map +0 -1
- package/dist/src/material/grassmaterial.js +0 -113
- package/dist/src/material/grassmaterial.js.map +0 -1
- package/dist/src/material/lambert.js +0 -92
- package/dist/src/material/lambert.js.map +0 -1
- package/dist/src/material/material.js +0 -301
- package/dist/src/material/material.js.map +0 -1
- package/dist/src/material/meshmaterial.js +0 -704
- package/dist/src/material/meshmaterial.js.map +0 -1
- package/dist/src/material/mixins/albedocolor.js +0 -76
- package/dist/src/material/mixins/albedocolor.js.map +0 -1
- package/dist/src/material/mixins/foliage.js +0 -47
- package/dist/src/material/mixins/foliage.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/blinnphong.js +0 -112
- package/dist/src/material/mixins/lightmodel/blinnphong.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/lambert.js +0 -58
- package/dist/src/material/mixins/lightmodel/lambert.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +0 -178
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +0 -139
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +0 -1
- package/dist/src/material/mixins/lit.js +0 -476
- package/dist/src/material/mixins/lit.js.map +0 -1
- package/dist/src/material/mixins/pbr/common.js +0 -918
- package/dist/src/material/mixins/pbr/common.js.map +0 -1
- package/dist/src/material/mixins/texture.js +0 -172
- package/dist/src/material/mixins/texture.js.map +0 -1
- package/dist/src/material/mixins/vertexcolor.js +0 -56
- package/dist/src/material/mixins/vertexcolor.js.map +0 -1
- package/dist/src/material/particle.js +0 -178
- package/dist/src/material/particle.js.map +0 -1
- package/dist/src/material/pbrmr.js +0 -97
- package/dist/src/material/pbrmr.js.map +0 -1
- package/dist/src/material/pbrsg.js +0 -97
- package/dist/src/material/pbrsg.js.map +0 -1
- package/dist/src/material/shader/helper.js +0 -1209
- package/dist/src/material/shader/helper.js.map +0 -1
- package/dist/src/material/terrain-cm.js +0 -606
- package/dist/src/material/terrain-cm.js.map +0 -1
- package/dist/src/material/terrainmaterial.js +0 -375
- package/dist/src/material/terrainmaterial.js.map +0 -1
- package/dist/src/material/unlit.js +0 -41
- package/dist/src/material/unlit.js.map +0 -1
- package/dist/src/material/water.js +0 -417
- package/dist/src/material/water.js.map +0 -1
- package/dist/src/posteffect/bloom.js +0 -361
- package/dist/src/posteffect/bloom.js.map +0 -1
- package/dist/src/posteffect/compositor.js +0 -226
- package/dist/src/posteffect/compositor.js.map +0 -1
- package/dist/src/posteffect/fxaa.js +0 -273
- package/dist/src/posteffect/fxaa.js.map +0 -1
- package/dist/src/posteffect/grayscale.js +0 -69
- package/dist/src/posteffect/grayscale.js.map +0 -1
- package/dist/src/posteffect/motionblur.js +0 -96
- package/dist/src/posteffect/motionblur.js.map +0 -1
- package/dist/src/posteffect/posteffect.js +0 -126
- package/dist/src/posteffect/posteffect.js.map +0 -1
- package/dist/src/posteffect/sao.js +0 -324
- package/dist/src/posteffect/sao.js.map +0 -1
- package/dist/src/posteffect/ssr.js +0 -489
- package/dist/src/posteffect/ssr.js.map +0 -1
- package/dist/src/posteffect/taa.js +0 -172
- package/dist/src/posteffect/taa.js.map +0 -1
- package/dist/src/posteffect/tonemap.js +0 -94
- package/dist/src/posteffect/tonemap.js.map +0 -1
- package/dist/src/render/abuffer_oit.js +0 -361
- package/dist/src/render/abuffer_oit.js.map +0 -1
- package/dist/src/render/clipmap.js +0 -851
- package/dist/src/render/clipmap.js.map +0 -1
- package/dist/src/render/cluster_light.js +0 -333
- package/dist/src/render/cluster_light.js.map +0 -1
- package/dist/src/render/cull_visitor.js +0 -187
- package/dist/src/render/cull_visitor.js.map +0 -1
- package/dist/src/render/depthpass.js +0 -68
- package/dist/src/render/depthpass.js.map +0 -1
- package/dist/src/render/drawable_mixin.js +0 -227
- package/dist/src/render/drawable_mixin.js.map +0 -1
- package/dist/src/render/envlight.js +0 -463
- package/dist/src/render/envlight.js.map +0 -1
- package/dist/src/render/fbm_wavegenerator.js +0 -251
- package/dist/src/render/fbm_wavegenerator.js.map +0 -1
- package/dist/src/render/fft_wavegenerator.js +0 -1006
- package/dist/src/render/fft_wavegenerator.js.map +0 -1
- package/dist/src/render/fullscreenquad.js +0 -38
- package/dist/src/render/fullscreenquad.js.map +0 -1
- package/dist/src/render/gerstner_wavegenerator.js +0 -314
- package/dist/src/render/gerstner_wavegenerator.js.map +0 -1
- package/dist/src/render/globalbindgroup_allocator.js +0 -60
- package/dist/src/render/globalbindgroup_allocator.js.map +0 -1
- package/dist/src/render/hzb.js +0 -273
- package/dist/src/render/hzb.js.map +0 -1
- package/dist/src/render/lightpass.js +0 -172
- package/dist/src/render/lightpass.js.map +0 -1
- package/dist/src/render/objectcolorpass.js +0 -51
- package/dist/src/render/objectcolorpass.js.map +0 -1
- package/dist/src/render/primitive.js +0 -364
- package/dist/src/render/primitive.js.map +0 -1
- package/dist/src/render/render_queue.js +0 -467
- package/dist/src/render/render_queue.js.map +0 -1
- package/dist/src/render/renderbundle_wrapper.js +0 -152
- package/dist/src/render/renderbundle_wrapper.js.map +0 -1
- package/dist/src/render/renderer.js +0 -455
- package/dist/src/render/renderer.js.map +0 -1
- package/dist/src/render/renderpass.js +0 -200
- package/dist/src/render/renderpass.js.map +0 -1
- package/dist/src/render/shadowmap_pass.js +0 -56
- package/dist/src/render/shadowmap_pass.js.map +0 -1
- package/dist/src/render/sky.js +0 -1103
- package/dist/src/render/sky.js.map +0 -1
- package/dist/src/render/weightedblended_oit.js +0 -168
- package/dist/src/render/weightedblended_oit.js.map +0 -1
- package/dist/src/scene/batchgroup.js +0 -162
- package/dist/src/scene/batchgroup.js.map +0 -1
- package/dist/src/scene/environment.js +0 -209
- package/dist/src/scene/environment.js.map +0 -1
- package/dist/src/scene/graph_node.js +0 -72
- package/dist/src/scene/graph_node.js.map +0 -1
- package/dist/src/scene/light.js +0 -416
- package/dist/src/scene/light.js.map +0 -1
- package/dist/src/scene/mesh.js +0 -341
- package/dist/src/scene/mesh.js.map +0 -1
- package/dist/src/scene/octree.js +0 -649
- package/dist/src/scene/octree.js.map +0 -1
- package/dist/src/scene/particlesys.js +0 -738
- package/dist/src/scene/particlesys.js.map +0 -1
- package/dist/src/scene/raycast_visitor.js +0 -103
- package/dist/src/scene/raycast_visitor.js.map +0 -1
- package/dist/src/scene/scene.js +0 -284
- package/dist/src/scene/scene.js.map +0 -1
- package/dist/src/scene/scene_node.js +0 -732
- package/dist/src/scene/scene_node.js.map +0 -1
- package/dist/src/scene/terrain/grass.js +0 -278
- package/dist/src/scene/terrain/grass.js.map +0 -1
- package/dist/src/scene/terrain/heightfield.js +0 -475
- package/dist/src/scene/terrain/heightfield.js.map +0 -1
- package/dist/src/scene/terrain/patch.js +0 -530
- package/dist/src/scene/terrain/patch.js.map +0 -1
- package/dist/src/scene/terrain/quadtree.js +0 -461
- package/dist/src/scene/terrain/quadtree.js.map +0 -1
- package/dist/src/scene/terrain/terrain.js +0 -246
- package/dist/src/scene/terrain/terrain.js.map +0 -1
- package/dist/src/scene/terrain-cm/grass.js +0 -594
- package/dist/src/scene/terrain-cm/grass.js.map +0 -1
- package/dist/src/scene/terrain-cm/grassmaterial.js +0 -159
- package/dist/src/scene/terrain-cm/grassmaterial.js.map +0 -1
- package/dist/src/scene/terrain-cm/terrain-cm.js +0 -538
- package/dist/src/scene/terrain-cm/terrain-cm.js.map +0 -1
- package/dist/src/scene/water.js +0 -374
- package/dist/src/scene/water.js.map +0 -1
- package/dist/src/shaders/atmosphere.js +0 -957
- package/dist/src/shaders/atmosphere.js.map +0 -1
- package/dist/src/shaders/fog.js +0 -112
- package/dist/src/shaders/fog.js.map +0 -1
- package/dist/src/shaders/misc.js +0 -266
- package/dist/src/shaders/misc.js.map +0 -1
- package/dist/src/shaders/noise.js +0 -222
- package/dist/src/shaders/noise.js.map +0 -1
- package/dist/src/shaders/pbr.js +0 -51
- package/dist/src/shaders/pbr.js.map +0 -1
- package/dist/src/shaders/shadow.js +0 -636
- package/dist/src/shaders/shadow.js.map +0 -1
- package/dist/src/shaders/ssr.js +0 -490
- package/dist/src/shaders/ssr.js.map +0 -1
- package/dist/src/shaders/temporal.js +0 -215
- package/dist/src/shaders/temporal.js.map +0 -1
- package/dist/src/shaders/water.js +0 -756
- package/dist/src/shaders/water.js.map +0 -1
- package/dist/src/shadow/esm.js +0 -237
- package/dist/src/shadow/esm.js.map +0 -1
- package/dist/src/shadow/pcf_opt.js +0 -181
- package/dist/src/shadow/pcf_opt.js.map +0 -1
- package/dist/src/shadow/pcf_pd.js +0 -189
- package/dist/src/shadow/pcf_pd.js.map +0 -1
- package/dist/src/shadow/shader.js +0 -37
- package/dist/src/shadow/shader.js.map +0 -1
- package/dist/src/shadow/shadow_impl.js +0 -15
- package/dist/src/shadow/shadow_impl.js.map +0 -1
- package/dist/src/shadow/shadowmapper.js +0 -790
- package/dist/src/shadow/shadowmapper.js.map +0 -1
- package/dist/src/shadow/ssm.js +0 -159
- package/dist/src/shadow/ssm.js.map +0 -1
- package/dist/src/shadow/vsm.js +0 -297
- package/dist/src/shadow/vsm.js.map +0 -1
- package/dist/src/shapes/box.js +0 -386
- package/dist/src/shapes/box.js.map +0 -1
- package/dist/src/shapes/cylinder.js +0 -125
- package/dist/src/shapes/cylinder.js.map +0 -1
- package/dist/src/shapes/plane.js +0 -88
- package/dist/src/shapes/plane.js.map +0 -1
- package/dist/src/shapes/shape.js +0 -87
- package/dist/src/shapes/shape.js.map +0 -1
- package/dist/src/shapes/sphere.js +0 -114
- package/dist/src/shapes/sphere.js.map +0 -1
- package/dist/src/shapes/tetrahedron.js +0 -188
- package/dist/src/shapes/tetrahedron.js.map +0 -1
- package/dist/src/shapes/torus.js +0 -111
- package/dist/src/shapes/torus.js.map +0 -1
- package/dist/src/utility/aabbtree.js +0 -400
- package/dist/src/utility/aabbtree.js.map +0 -1
- package/dist/src/utility/bounding_volume.js +0 -29
- package/dist/src/utility/bounding_volume.js.map +0 -1
- package/dist/src/utility/debug.js +0 -28
- package/dist/src/utility/debug.js.map +0 -1
- package/dist/src/utility/draco/decoder.js +0 -116
- package/dist/src/utility/draco/decoder.js.map +0 -1
- package/dist/src/utility/misc.js +0 -105
- package/dist/src/utility/misc.js.map +0 -1
- package/dist/src/utility/panorama.js +0 -163
- package/dist/src/utility/panorama.js.map +0 -1
- package/dist/src/utility/pmrem.js +0 -354
- package/dist/src/utility/pmrem.js.map +0 -1
- package/dist/src/utility/rendermipmap.js +0 -115
- package/dist/src/utility/rendermipmap.js.map +0 -1
- package/dist/src/utility/serialization/json.js +0 -402
- package/dist/src/utility/serialization/json.js.map +0 -1
- package/dist/src/utility/serialization/manager.js +0 -623
- package/dist/src/utility/serialization/manager.js.map +0 -1
- package/dist/src/utility/serialization/scene/animation.js +0 -248
- package/dist/src/utility/serialization/scene/animation.js.map +0 -1
- package/dist/src/utility/serialization/scene/batch.js +0 -59
- package/dist/src/utility/serialization/scene/batch.js.map +0 -1
- package/dist/src/utility/serialization/scene/camera.js +0 -790
- package/dist/src/utility/serialization/scene/camera.js.map +0 -1
- package/dist/src/utility/serialization/scene/common.js +0 -222
- package/dist/src/utility/serialization/scene/common.js.map +0 -1
- package/dist/src/utility/serialization/scene/light.js +0 -575
- package/dist/src/utility/serialization/scene/light.js.map +0 -1
- package/dist/src/utility/serialization/scene/material.js +0 -1111
- package/dist/src/utility/serialization/scene/material.js.map +0 -1
- package/dist/src/utility/serialization/scene/mesh.js +0 -148
- package/dist/src/utility/serialization/scene/mesh.js.map +0 -1
- package/dist/src/utility/serialization/scene/misc.js +0 -39
- package/dist/src/utility/serialization/scene/misc.js.map +0 -1
- package/dist/src/utility/serialization/scene/node.js +0 -451
- package/dist/src/utility/serialization/scene/node.js.map +0 -1
- package/dist/src/utility/serialization/scene/particle.js +0 -425
- package/dist/src/utility/serialization/scene/particle.js.map +0 -1
- package/dist/src/utility/serialization/scene/primitive.js +0 -692
- package/dist/src/utility/serialization/scene/primitive.js.map +0 -1
- package/dist/src/utility/serialization/scene/scene.js +0 -704
- package/dist/src/utility/serialization/scene/scene.js.map +0 -1
- package/dist/src/utility/serialization/scene/terrain.js +0 -488
- package/dist/src/utility/serialization/scene/terrain.js.map +0 -1
- package/dist/src/utility/serialization/scene/water.js +0 -465
- package/dist/src/utility/serialization/scene/water.js.map +0 -1
- package/dist/src/utility/shprojector.js +0 -297
- package/dist/src/utility/shprojector.js.map +0 -1
- package/dist/src/utility/textures/ggxlut.js +0 -213
- package/dist/src/utility/textures/ggxlut.js.map +0 -1
- package/dist/src/utility/textures/gradientnoise.js +0 -62
- package/dist/src/utility/textures/gradientnoise.js.map +0 -1
- package/dist/src/utility/textures/randomnoise.js +0 -41
- package/dist/src/utility/textures/randomnoise.js.map +0 -1
- package/dist/src/values.js +0 -162
- package/dist/src/values.js.map +0 -1
- package/dist/utility/blueprint/material/common.js +0 -7
- package/dist/utility/blueprint/material/common.js.map +0 -1
- package/dist/utility/serialization/blueprint/constants.js +0 -255
- package/dist/utility/serialization/blueprint/constants.js.map +0 -1
- package/dist/utility/serialization/blueprint/material/constants.js +0 -203
- package/dist/utility/serialization/blueprint/material/constants.js.map +0 -1
- package/dist/utility/serialization/blueprint/material/texture.js +0 -165
- package/dist/utility/serialization/blueprint/material/texture.js.map +0 -1
- package/dist/utility/serialization/scene/cloth_script.js +0 -834
- package/dist/utility/serialization/scene/cloth_script.js.map +0 -1
- package/dist/utility/serialization/scene/spring_script.js +0 -596
- 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":";;;AAIA,MAAMA,YAAoC,IAAIC,GAAAA,EAAAA;AAC9C,MAAMC,YAAe,GAAA,GAAA;AACrB,MAAMC,MAAAA,GAASC,IAAKC,CAAAA,EAAE,GAAG,CAAA;AACzB,MAAMC,mBAAsB,GAAA,IAAA;AAErB,SAASC,YAAYC,IAAY,EAAA;IACtC,IAAIC,GAAAA,GAAMT,SAAUU,CAAAA,GAAG,CAACF,IAAAA,CAAAA;AACxB,IAAA,IAAI,CAACC,GAAK,EAAA;AACRA,QAAAA,GAAAA,GAAME,cAAeH,CAAAA,IAAAA,CAAAA;QACrBR,SAAUY,CAAAA,GAAG,CAACJ,IAAMC,EAAAA,GAAAA,CAAAA;AACtB;IACA,OAAOA,GAAAA;AACT;AAUA,SAASE,eAAeH,IAAY,EAAA;AAClC,IAAA,MAAMK,MAAMC,SAAYC,EAAAA,CAAAA,eAAe,CAAC,SAAA,EAAWP,MAAMA,IAAM,EAAA;QAAEQ,UAAY,EAAA;AAAM,KAAA,CAAA;AACnF,IAAA,MAAMC,KAAQ,GAAA,IAAIC,WAAYV,CAAAA,IAAAA,GAAOA,IAAO,GAAA,CAAA,CAAA;AAC5C,IAAA,MAAMW,MAAMC,UAAW,CAAA,CAAA,CAAA;AACvB,IAAA,IAAIC,CAAI,GAAA,CAAA;AACR,IAAA,IAAK,IAAIC,CAAId,GAAAA,IAAAA,GAAO,CAAGc,EAAAA,CAAAA,IAAK,GAAGA,CAAK,EAAA,CAAA;AAClC,QAAA,MAAMC,YAAYC,OAAQ,CAACF,CAAAA,CAAAA,GAAI,GAAE,IAAKd,IAAAA,CAAAA;AACtC,QAAA,MAAMiB,MAASrB,GAAAA,IAAAA,CAAKsB,GAAG,CAACH,YAAYA,SAAWjB,EAAAA,mBAAAA,CAAAA;AAC/C,QAAA,IAAK,IAAIqB,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAInB,MAAMmB,CAAK,EAAA,CAAA;AAC7B,YAAA,MAAMC,MAAMJ,OAAQ,CAACG,CAAAA,CAAAA,GAAI,GAAE,IAAKnB,IAAAA,CAAAA;YAChC,MAAMqB,CAAAA,GAAIC,qBAAqBF,GAAKH,EAAAA,MAAAA,CAAAA;YACpC,MAAMM,IAAAA,GAAOC,qBAAqBJ,GAAKL,EAAAA,SAAAA,CAAAA;YACvCN,KAAK,CAACI,CAAI,EAAA,CAAA,GAAGY,MAAOJ,CAAAA,CAAAA,CAAAA;YACpBZ,KAAK,CAACI,IAAI,GAAG,CAAA;YACbJ,KAAK,CAACI,CAAI,EAAA,CAAA,GAAGY,MAAOF,CAAAA,IAAAA,CAAAA;YACpBd,KAAK,CAACI,IAAI,GAAGF,GAAAA;AACf;AACF;AACAN,IAAAA,GAAAA,CAAIqB,MAAM,CAACjB,KAAO,EAAA,CAAA,EAAG,GAAGT,IAAMA,EAAAA,IAAAA,CAAAA;AAC9BK,IAAAA,GAAAA,CAAIsB,IAAI,GAAG,UAAA;IACX,OAAOtB,GAAAA;AACT;AAEA,SAASmB,oBAAAA,CAAqBJ,GAAW,EAAEL,SAAiB,EAAA;AAC1D,IAAA,IAAIa,GAAM,GAAA,CAAA;IACV,MAAMC,EAAAA,GAAKjC,KAAKkC,IAAI,CAAClC,KAAKsB,GAAG,CAAC,CAAG,EAAA,CAAA,GAAIE,GAAMA,GAAAA,GAAAA,CAAAA,CAAAA;AAC3C,IAAA,MAAMW,EAAKX,GAAAA,GAAAA;AACX,IAAA,IAAK,IAAIY,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAItC,cAAcsC,CAAK,EAAA,CAAA;QACrC,MAAMC,CAAAA,GAAIC,WAAWF,CAAGtC,EAAAA,YAAAA,CAAAA;AACxB,QAAA,MAAMyC,GAAMxC,GAAAA,MAAAA,GAASsC,CAAC,CAAC,CAAE,CAAA;AACzB,QAAA,MAAMG,QAAW,GAAA,CAAA,GAAIH,CAAC,CAAC,CAAE,CAAA;QACzB,MAAMI,QAAAA,GAAWzC,KAAKkC,IAAI,CAAClC,KAAKsB,GAAG,CAAC,CAAG,EAAA,CAAA,GAAIkB,QAAWA,GAAAA,QAAAA,CAAAA,CAAAA;AACtD,QAAA,MAAME,EAAKD,GAAAA,QAAAA,GAAWzC,IAAK2C,CAAAA,GAAG,CAACJ,GAAAA,CAAAA;AAC/B,QAAA,MAAMK,EAAKJ,GAAAA,QAAAA;AACX,QAAA,MAAMK,MAAM7C,IAAKsB,CAAAA,GAAG,CAACW,EAAKS,GAAAA,EAAAA,GAAKP,KAAKS,EAAI,EAAA,CAAA,CAAA;QACxC,MAAME,EAAAA,GAAK,CAAID,GAAAA,GAAAA,GAAMD,EAAKT,GAAAA,EAAAA;AAC1B,QAAA,MAAMY,GAAM/C,GAAAA,IAAAA,CAAKsB,GAAG,CAACwB,EAAI,EAAA,CAAA,CAAA;QACzB,IAAIC,GAAAA,GAAM,CAAKF,IAAAA,GAAAA,GAAM,CAAG,EAAA;AACtBb,YAAAA,GAAAA,IAAOgB,gBAAgBD,GAAKvB,EAAAA,GAAAA,EAAKL,aAAa8B,mBAAoBL,CAAAA,EAAAA,EAAIzB,aAAa4B,GAAMF,GAAAA,GAAAA;AAC3F;AACF;AACA,IAAA,OAAOb,GAAO,IAAA,CAAC,GAAIjC,SAAUD,YAAW,CAAA;AAC1C;AAEA,SAAS4B,oBAAAA,CAAqBF,GAAW,EAAEH,MAAc,EAAA;AACvD,IAAA,IAAIW,GAAM,GAAA,CAAA;IACV,MAAMC,EAAAA,GAAKjC,KAAKkC,IAAI,CAAClC,KAAKsB,GAAG,CAAC,CAAG,EAAA,CAAA,GAAIE,GAAMA,GAAAA,GAAAA,CAAAA,CAAAA;AAC3C,IAAA,MAAMW,EAAKX,GAAAA,GAAAA;AACX,IAAA,IAAK,IAAIY,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAItC,cAAcsC,CAAK,EAAA,CAAA;QACrC,MAAMC,CAAAA,GAAIC,WAAWF,CAAGtC,EAAAA,YAAAA,CAAAA;AACxB,QAAA,MAAMyC,GAAMxC,GAAAA,MAAAA,GAASsC,CAAC,CAAC,CAAE,CAAA;AACzB,QAAA,MAAMU,GAAM,GAAA,CAAA,GAAIV,CAAC,CAAC,CAAE,CAAA;QACpB,MAAMI,QAAAA,GAAWzC,KAAKkC,IAAI,CAAClC,KAAKsB,GAAG,CAAC,CAAG,EAAA,CAAA,GAAIyB,GAAMA,GAAAA,GAAAA,CAAAA,CAAAA;AACjD,QAAA,MAAMG,EAAKT,GAAAA,QAAAA,GAAWzC,IAAK2C,CAAAA,GAAG,CAACJ,GAAAA,CAAAA;AAC/B,QAAA,MAAMY,EAAKV,GAAAA,QAAAA,GAAWzC,IAAKoD,CAAAA,GAAG,CAACb,GAAAA,CAAAA;AAC/B,QAAA,MAAMO,EAAKC,GAAAA,GAAAA;AACX,QAAA,MAAML,KAAKQ,EAAKjB,GAAAA,EAAAA;AAChB,QAAA,MAAMoB,EAAKF,GAAAA,EAAAA;AACX,QAAA,MAAMP,KAAKE,EAAKX,GAAAA,EAAAA;AAChB,QAAA,MAAMmB,OAAU,GAAA,CAAA,GAAItD,IAAKsB,CAAAA,GAAG,CAACtB,IAAAA,CAAKkC,IAAI,CAACQ,EAAKA,GAAAA,EAAAA,GAAKW,EAAKA,GAAAA,EAAAA,GAAKT,KAAKA,EAAK,CAAA,EAAA,IAAA,CAAA;AACrE,QAAA,MAAMW,GAAMvD,GAAAA,IAAAA,CAAKsB,GAAG,CAACsB,KAAKU,OAAS,EAAA,CAAA,CAAA;AACnCtB,QAAAA,GAAAA,IAAOwB,0BAA0BD,GAAKlC,EAAAA,MAAAA,CAAAA,GAAUoC,qBAAsBV,CAAAA,GAAAA,EAAKvB,KAAKH,MAAU0B,CAAAA,GAAAA,GAAAA;AAC5F;AACA,IAAA,OAAO3B,OAAQY,CAAAA,GAAAA,IAAOjC,MAAAA,GAASD,YAAW,CAAA,CAAA;AAC5C;AAEA,SAASmD,mBAAAA,CAAoBM,GAAW,EAAEG,cAAsB,EAAA;AAC9D,IAAA,MAAMvC,SAAYnB,GAAAA,IAAAA,CAAKsB,GAAG,CAACoC,cAAgB,EAAA,IAAA,CAAA;IAC3C,OAAOF,yBAAAA,CAA0BD,KAAKpC,SAAYA,GAAAA,SAAAA,CAAAA;AACpD;AAEA,SAASqC,yBAAAA,CAA0BD,GAAW,EAAElC,MAAc,EAAA;IAC5DA,MAASrB,GAAAA,IAAAA,CAAKsB,GAAG,CAACD,MAAQ,EAAA,IAAA,CAAA;AAC1B,IAAA,MAAMsC,OAAO,CAAItC,GAAAA,MAAAA;AACjB,IAAA,MAAMuC,QAAQ5D,IAAKsB,CAAAA,GAAG,CAAC,CAAA,GAAIiC,MAAMA,GAAK,EAAA,CAAA,CAAA;IACtC,OAAS,CAAA,CAAA,GAAII,IAAG,IAAK3D,KAAK6D,GAAG,CAACD,KAAOD,EAAAA,IAAAA,GAAO,GAAQ5D,CAAAA,GAAAA,MAAAA;AACtD;AAEA,SAASiD,eAAgBD,CAAAA,GAAW,EAAEvB,GAAW,EAAEkC,cAAsB,EAAA;AACvE,IAAA,MAAMvC,SAAYnB,GAAAA,IAAAA,CAAKsB,GAAG,CAACoC,cAAgB,EAAA,IAAA,CAAA;IAC3C,OAAOD,qBAAAA,CAAsBV,GAAKvB,EAAAA,GAAAA,EAAKL,SAAYA,GAAAA,SAAAA,CAAAA;AACrD;AAEA,SAASsC,qBAAsBV,CAAAA,GAAW,EAAEvB,GAAW,EAAEH,MAAc,EAAA;IACrEA,MAASrB,GAAAA,IAAAA,CAAKsB,GAAG,CAACD,MAAQ,EAAA,IAAA,CAAA;AAC1B,IAAA,MAAMyC,KAAQ,GAAC,CAAA,CAAA,GAAIC,YAAYvC,GAAKH,EAAAA,MAAAA,CAAAA,GAAU0C,WAAYhB,CAAAA,GAAAA,EAAK1B,MAAM,CAAA,KAAM,CAAA,GAAIG,MAAMuB,GAAE,CAAA;AACvF,IAAA,OAAOe,KAAQ,GAAA,CAAA,GAAI1C,OAAQ,CAAA,CAAA,GAAI0C,KAAS,CAAA,GAAA,CAAA;AAC1C;AAEA,SAASC,WAAAA,CAAYvB,QAAgB,EAAEnB,MAAc,EAAA;IACnD,MAAM2C,CAAAA,GAAIhE,IAAKiE,CAAAA,GAAG,CAACzB,QAAAA,CAAAA;AACnB,IAAA,OAAOwB,IAAI,GACPhE,GAAAA,IAAAA,CAAKkE,GAAG,CAACC,yBAAyBH,CAAG3C,EAAAA,MAAAA,CAAAA,CAAAA,GACrCrB,IAAKkE,CAAAA,GAAG,CAAC,CAAIC,GAAAA,wBAAAA,CAAyB,KAAK9C,MAAU8C,CAAAA,GAAAA,wBAAAA,CAAyB,IAAIH,CAAG3C,EAAAA,MAAAA,CAAAA,CAAAA;AAC3F;AAEA,SAAS8C,wBAAAA,CAAyB5C,CAAS,EAAEF,MAAc,EAAA;IACzD,MAAM+C,eAAAA,GAAkB,CAAC,CAAA,GAAI/C,MAAK,KAAM,IAAIA,MAAK,CAAA;IACjD,MAAMgD,CAAAA,GAAIC,GAAI,CAAA,OAAA,EAAS,OAASF,EAAAA,eAAAA,CAAAA;IAChC,MAAMG,CAAAA,GAAID,GAAI,CAAA,OAAA,EAAS,OAASF,EAAAA,eAAAA,CAAAA;IAChC,MAAMJ,CAAAA,GAAIM,GAAI,CAAA,OAAA,EAAS,OAASF,EAAAA,eAAAA,CAAAA;AAChC,IAAA,MAAMI,CAAIF,GAAAA,GAAAA,CAAI,OAAC,EAAQ,QAAUF,EAAAA,eAAAA,CAAAA;AACjC,IAAA,MAAM3C,CAAI6C,GAAAA,GAAAA,CAAI,QAAC,EAAS,QAAUF,EAAAA,eAAAA,CAAAA;IAClC,OAAOC,CAAAA,IAAK,CAAA,GAAIE,CAAIvE,GAAAA,IAAAA,CAAK6D,GAAG,CAACtC,CAAGyC,EAAAA,CAAAA,CAAC,CAAKQ,GAAAA,CAAAA,GAAIjD,CAAIE,GAAAA,CAAAA;AAChD;AAEA,SAASa,UAAAA,CAAWF,CAAS,EAAEqC,WAAmB,EAAA;IAChD,OAAO;QAACrC,CAAIqC,GAAAA,WAAAA;QAAaC,iBAAkBtC,CAAAA,CAAAA;AAAG,KAAA;AAChD;AAEA,SAASsC,kBAAkBC,IAAY,EAAA;AACrCA,IAAAA,IAAAA,GAAO,CAAEA,QAAQ,EAAOA,GAAAA,IAAAA,KAAS,EAAE,MAAO,CAAA;AAC1CA,IAAAA,IAAAA,GAAO,CAAC,CAAEA,OAAO,UAAS,KAAM,CAAM,GAACA,CAAAA,IAAAA,GAAO,UAAS,MAAO,CAAC,MAAO,CAAA;AACtEA,IAAAA,IAAAA,GAAO,CAAC,CAAEA,OAAO,UAAS,KAAM,CAAM,GAACA,CAAAA,IAAAA,GAAO,UAAS,MAAO,CAAC,MAAO,CAAA;AACtEA,IAAAA,IAAAA,GAAO,CAAC,CAAEA,OAAO,UAAS,KAAM,CAAM,GAACA,CAAAA,IAAAA,GAAO,UAAS,MAAO,CAAC,MAAO,CAAA;AACtEA,IAAAA,IAAAA,GAAO,CAAC,CAAEA,OAAO,UAAS,KAAM,CAAM,GAACA,CAAAA,IAAAA,GAAO,UAAS,MAAO,CAAC,MAAO,CAAA;AACtE,IAAA,OAAOA,IAAO,GAAA,sBAAA;AAChB;AAEA,SAASL,GAAI/C,CAAAA,CAAS,EAAEL,CAAS,EAAEmD,CAAS,EAAA;AAC1C,IAAA,OAAO9C,CAAK,IAAA,CAAI8C,GAAAA,CAAAA,IAAKnD,CAAImD,GAAAA,CAAAA;AAC3B;AAEA,SAASjD,QAAQwD,CAAS,EAAA;AACxB,IAAA,OAAO5E,KAAK6E,GAAG,CAAC7E,KAAKsB,GAAG,CAACsD,GAAG,CAAI,CAAA,EAAA,CAAA,CAAA;AAClC;AAEA,SAAS/C,OAAO+C,CAAS,EAAA;AACvB,IAAA,OAAO5D,UAAWhB,CAAAA,IAAAA,CAAK6E,GAAG,CAAC7E,IAAKsB,CAAAA,GAAG,CAACwD,MAAAA,CAAOC,QAAQ,CAACH,CAAKA,CAAAA,GAAAA,CAAAA,GAAI,GAAG,CAAI,CAAA,EAAA,KAAA,CAAA,CAAA;AACtE;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zephyr3d/scene",
|
|
3
|
-
"version": "0.9.
|
|
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.
|
|
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;;;;"}
|