@zephyr3d/scene 0.9.5 → 0.9.7
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/joint_dynamics/controller.js +92 -32
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/convex_collider.js +320 -0
- package/dist/animation/joint_dynamics/convex_collider.js.map +1 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +57 -19
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +71 -27
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics_modifier.js +21 -20
- package/dist/animation/joint_dynamics_modifier.js.map +1 -1
- package/dist/animation/skeleton.js +7 -10
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/app/engine.js +134 -140
- package/dist/app/engine.js.map +1 -1
- package/dist/app/scriptregistry.js +47 -16
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +3 -1
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/model.js +346 -7
- package/dist/asset/model.js.map +1 -1
- package/dist/avatar/wardrobe.js +20 -16
- package/dist/avatar/wardrobe.js.map +1 -1
- package/dist/camera/camera.js +416 -210
- package/dist/camera/camera.js.map +1 -1
- package/dist/index.d.ts +1350 -621
- package/dist/index.js +6 -11
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +1 -1
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/lambert.js +1 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +23 -1
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +178 -23
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/albedocolor.js +4 -4
- package/dist/material/mixins/albedocolor.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +2 -1
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +2 -1
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +63 -16
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +105 -32
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +16 -6
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +1 -1
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +276 -65
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mixins/texture.js +3 -3
- package/dist/material/mixins/texture.js.map +1 -1
- package/dist/material/mixins/vertexcolor.js +2 -2
- package/dist/material/mixins/vertexcolor.js.map +1 -1
- package/dist/material/msdf_text.js +3 -3
- package/dist/material/msdf_text.js.map +1 -1
- package/dist/material/mtoon.js +574 -0
- package/dist/material/mtoon.js.map +1 -0
- package/dist/material/pbrblueprint.js +499 -336
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/pbrmr.js +118 -100
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +1 -1
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/shader/helper.js +324 -294
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/subsurfaceprofile.js +812 -0
- package/dist/material/subsurfaceprofile.js.map +1 -0
- package/dist/material/unlit.js +1 -1
- package/dist/material/unlit.js.map +1 -1
- package/dist/posteffect/compositor.js +46 -11
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/ssr.js +422 -96
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +1053 -0
- package/dist/posteffect/sss.js.map +1 -0
- package/dist/posteffect/taa.js +61 -60
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/abuffer_oit.js +63 -12
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/cluster_light.js +6 -5
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/drawable.js +1 -5
- package/dist/render/drawable.js.map +1 -1
- package/dist/render/drawable_mixin.js +2 -1
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +2 -1
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +2 -1
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +2 -1
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/lightpass.js +110 -23
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/render_queue.js +51 -8
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +80 -66
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js +8 -0
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +481 -95
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/history_resource_manager.js +55 -0
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +3 -1
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/renderpass.js +10 -4
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/sky.js +31 -1
- package/dist/render/sky.js.map +1 -1
- package/dist/render/weightedblended_oit.js +23 -5
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +4 -2
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +3 -1
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +11 -1
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/light.js +21 -3
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +29 -14
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/meshdrawable.js +6 -0
- package/dist/scene/meshdrawable.js.map +1 -1
- package/dist/scene/msdftext.js +5 -2
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +5 -3
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +3 -1
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene.js +6 -5
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/terrain-cm/grass.js +4 -2
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grassmaterial.js +2 -1
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +4 -2
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/water.js +4 -2
- package/dist/scene/water.js.map +1 -1
- package/dist/shaders/shadow.js +26 -393
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shadow/esm.js +112 -12
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +2 -2
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +19 -10
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/shader.js +58 -7
- package/dist/shadow/shader.js.map +1 -1
- package/dist/shadow/shadow_impl.js +6 -0
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadow_region.js +229 -0
- package/dist/shadow/shadow_region.js.map +1 -0
- package/dist/shadow/shadowmapper.js +67 -59
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/vsm.js +45 -19
- package/dist/shadow/vsm.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/utility/blueprint/common/constants.js +8 -8
- package/dist/utility/blueprint/common/constants.js.map +1 -1
- package/dist/utility/blueprint/material/pbr.js +31 -4
- package/dist/utility/blueprint/material/pbr.js.map +1 -1
- package/dist/utility/blueprint/material/texture.js +1 -17
- package/dist/utility/blueprint/material/texture.js.map +1 -1
- package/dist/utility/serialization/manager.js +327 -359
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +5 -2
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +4 -1
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +249 -54
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +37 -1
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +42 -3
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +1112 -646
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +7 -4
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +31 -12
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +4 -1
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +3 -1
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +18 -0
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +6 -3
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +5 -2
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +3 -1
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +4 -1
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/textures/ltcdata.js +6 -0
- package/dist/utility/textures/ltcdata.js.map +1 -0
- package/dist/utility/textures/ltclut.js +61 -0
- package/dist/utility/textures/ltclut.js.map +1 -0
- package/dist/values.js +9 -1
- package/dist/values.js.map +1 -1
- package/package.json +3 -3
- 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 -1276
- 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
package/dist/avatar/wardrobe.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import { Disposable, DRef, guessMimeType, Matrix4x4 } from '@zephyr3d/base';
|
|
1
|
+
import { Disposable, DRef, guessMimeType, mimeTypeOf, Matrix4x4 } from '@zephyr3d/base';
|
|
2
2
|
import { getEngine } from '../app/api.js';
|
|
3
3
|
import { SharedModel } from '../asset/model.js';
|
|
4
|
+
import { SceneNode } from '../scene/scene_node.js';
|
|
4
5
|
import { SkinBinding, SkeletonRig } from '../animation/skeleton.js';
|
|
5
6
|
|
|
6
7
|
let outfitInstanceId = 0;
|
|
7
|
-
/**
|
|
8
|
-
* A concrete equipped outfit item.
|
|
9
|
-
*
|
|
10
|
-
* Disposing the instance unequips it from the owning wardrobe.
|
|
11
|
-
*
|
|
12
|
-
* @public
|
|
8
|
+
/**
|
|
9
|
+
* A concrete equipped outfit item.
|
|
10
|
+
*
|
|
11
|
+
* Disposing the instance unequips it from the owning wardrobe.
|
|
12
|
+
*
|
|
13
|
+
* @public
|
|
13
14
|
*/ class AvatarOutfitInstance extends Disposable {
|
|
14
15
|
id;
|
|
15
16
|
slot;
|
|
@@ -37,13 +38,13 @@ let outfitInstanceId = 0;
|
|
|
37
38
|
this.meshes.length = 0;
|
|
38
39
|
}
|
|
39
40
|
}
|
|
40
|
-
/**
|
|
41
|
-
* High level avatar outfit controller.
|
|
42
|
-
*
|
|
43
|
-
* The wardrobe keeps one avatar {@link SkeletonRig} as the animation source and
|
|
44
|
-
* binds equipped clothing meshes to that rig with new {@link SkinBinding}s.
|
|
45
|
-
*
|
|
46
|
-
* @public
|
|
41
|
+
/**
|
|
42
|
+
* High level avatar outfit controller.
|
|
43
|
+
*
|
|
44
|
+
* The wardrobe keeps one avatar {@link SkeletonRig} as the animation source and
|
|
45
|
+
* binds equipped clothing meshes to that rig with new {@link SkinBinding}s.
|
|
46
|
+
*
|
|
47
|
+
* @public
|
|
47
48
|
*/ class AvatarWardrobe extends Disposable {
|
|
48
49
|
_root;
|
|
49
50
|
_rig;
|
|
@@ -267,10 +268,13 @@ let outfitInstanceId = 0;
|
|
|
267
268
|
}
|
|
268
269
|
}
|
|
269
270
|
async resolveSource(source, options) {
|
|
271
|
+
if (source instanceof SceneNode) {
|
|
272
|
+
return source;
|
|
273
|
+
}
|
|
270
274
|
const resourceManager = getEngine().resourceManager;
|
|
271
275
|
if (typeof source === 'string') {
|
|
272
276
|
const scene = this._root.scene;
|
|
273
|
-
const root = guessMimeType(source) === '
|
|
277
|
+
const root = guessMimeType(source) === mimeTypeOf('.zprefab') ? await resourceManager.instantiatePrefab(scene.rootNode, source) : await resourceManager.fetchModel(source, scene, {
|
|
274
278
|
loadAnimations: false,
|
|
275
279
|
loadMeshes: true,
|
|
276
280
|
loadSkeletons: true,
|
|
@@ -289,7 +293,7 @@ let outfitInstanceId = 0;
|
|
|
289
293
|
const root = await source.createSceneNode(resourceManager, scene, false, true, true, false, false, resourceManager.VFS);
|
|
290
294
|
return root;
|
|
291
295
|
}
|
|
292
|
-
return
|
|
296
|
+
return null;
|
|
293
297
|
}
|
|
294
298
|
collectSkinnedMeshes(root) {
|
|
295
299
|
const bindings = root.animationSet.skeletons.map((ref)=>ref.get()).filter((item)=>!!item);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wardrobe.js","sources":["../../src/avatar/wardrobe.ts"],"sourcesContent":["import { DRef, Disposable, Matrix4x4, guessMimeType } from '@zephyr3d/base';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { getEngine } from '../app/api';\r\nimport type { ModelFetchOptions } from '../asset/assetmanager';\r\nimport { SharedModel } from '../asset/model';\r\nimport type { SceneNode, SceneNodeVisible } from '../scene/scene_node';\r\nimport type { Mesh } from '../scene/mesh';\r\nimport type { SkeletonBindPose } from '../animation/skeleton';\r\nimport { SkeletonRig, SkinBinding } from '../animation/skeleton';\r\n\r\n/** @public */\r\nexport type AvatarSlotId = string;\r\n\r\n/** @public */\r\nexport type AvatarBindMode = 'exact' | 'humanoid' | 'name' | 'custom';\r\n\r\n/** @public */\r\nexport type AvatarFitMode = 'reuseInverseBind' | 'preserveRestPose';\r\n\r\n/** @public */\r\nexport type AvatarOutfitSource = string | SceneNode | SharedModel;\r\n\r\n/** @public */\r\nexport type AvatarBodyRegionTarget = SceneNode | Mesh;\r\n\r\n/** @public */\r\nexport type AvatarBodyRegions = Record<string, AvatarBodyRegionTarget[]>;\r\n\r\n/** @public */\r\nexport type AvatarJointMap =\r\n | Record<string, string>\r\n | ((sourceJoint: SceneNode, targetRig: SkeletonRig, sourceRig: SkeletonRig) => Nullable<SceneNode>);\r\n\r\n/** @public */\r\nexport type AvatarSlotOptions = {\r\n id: AvatarSlotId;\r\n hideBodyRegions?: string[];\r\n exclusiveWith?: AvatarSlotId[];\r\n allowMultiple?: boolean;\r\n};\r\n\r\n/** @public */\r\nexport type AvatarWardrobeOptions = {\r\n root: SceneNode;\r\n rig?: SkeletonRig | string;\r\n slots?: AvatarSlotOptions[];\r\n bodyRegions?: AvatarBodyRegions;\r\n modelFetchOptions?: ModelFetchOptions;\r\n};\r\n\r\n/** @public */\r\nexport type AvatarEquipOptions = {\r\n slot?: AvatarSlotId;\r\n bindMode?: AvatarBindMode;\r\n fitMode?: AvatarFitMode;\r\n jointMap?: AvatarJointMap;\r\n hideBodyRegions?: string[];\r\n modelFetchOptions?: ModelFetchOptions;\r\n};\r\n\r\n/** @public */\r\nexport type AvatarOutfitValidation = {\r\n ok: boolean;\r\n meshes: number;\r\n skinBindings: number;\r\n mappedJoints: number;\r\n missingJoints: string[];\r\n errors: string[];\r\n warnings: string[];\r\n};\r\n\r\ntype MeshBindingUse = {\r\n binding: SkinBinding;\r\n meshes: Mesh[];\r\n};\r\n\r\nlet outfitInstanceId = 0;\r\n\r\n/**\r\n * A concrete equipped outfit item.\r\n *\r\n * Disposing the instance unequips it from the owning wardrobe.\r\n *\r\n * @public\r\n */\r\nexport class AvatarOutfitInstance extends Disposable {\r\n readonly id: string;\r\n readonly slot: AvatarSlotId;\r\n readonly root: DRef<SceneNode>;\r\n readonly meshes: DRef<Mesh>[];\r\n readonly skinBindings: SkinBinding[];\r\n readonly hiddenBodyRegions: string[];\r\n private _wardrobe: Nullable<AvatarWardrobe>;\r\n\r\n /** @internal */\r\n constructor(\r\n wardrobe: AvatarWardrobe,\r\n slot: AvatarSlotId,\r\n root: SceneNode,\r\n meshes: Mesh[],\r\n skinBindings: SkinBinding[],\r\n hiddenBodyRegions: string[]\r\n ) {\r\n super();\r\n this.id = `outfit-${++outfitInstanceId}`;\r\n this.slot = slot;\r\n this.root = new DRef(root);\r\n this.meshes = meshes.map((mesh) => new DRef(mesh));\r\n this.skinBindings = skinBindings;\r\n this.hiddenBodyRegions = hiddenBodyRegions;\r\n this._wardrobe = wardrobe;\r\n }\r\n\r\n protected onDispose() {\r\n this._wardrobe?._releaseInstance(this);\r\n this._wardrobe = null;\r\n for (const meshRef of this.meshes) {\r\n meshRef.dispose();\r\n }\r\n this.meshes.length = 0;\r\n }\r\n}\r\n\r\n/**\r\n * High level avatar outfit controller.\r\n *\r\n * The wardrobe keeps one avatar {@link SkeletonRig} as the animation source and\r\n * binds equipped clothing meshes to that rig with new {@link SkinBinding}s.\r\n *\r\n * @public\r\n */\r\nexport class AvatarWardrobe extends Disposable {\r\n private readonly _root: SceneNode;\r\n private readonly _rig: SkeletonRig;\r\n private readonly _slots: Map<AvatarSlotId, AvatarSlotOptions>;\r\n private readonly _bodyRegions: Map<string, SceneNode[]>;\r\n private readonly _equipped: Map<AvatarSlotId, AvatarOutfitInstance[]>;\r\n private readonly _hiddenBodyNodeCounts: Map<SceneNode, number>;\r\n private readonly _bodyNodeOriginalState: Map<SceneNode, SceneNodeVisible>;\r\n private readonly _modelFetchOptions: ModelFetchOptions;\r\n\r\n constructor(options: AvatarWardrobeOptions) {\r\n super();\r\n this._root = options.root;\r\n this._rig = this.resolveTargetRig(options.root, options.rig);\r\n this._slots = new Map();\r\n this._bodyRegions = new Map();\r\n this._equipped = new Map();\r\n this._hiddenBodyNodeCounts = new Map();\r\n this._bodyNodeOriginalState = new Map();\r\n this._modelFetchOptions = options.modelFetchOptions ?? {};\r\n for (const slot of options.slots ?? []) {\r\n this._slots.set(slot.id, { ...slot });\r\n }\r\n for (const [name, nodes] of Object.entries(options.bodyRegions ?? {})) {\r\n this._bodyRegions.set(name, this.uniqueNodes(nodes));\r\n }\r\n this.ensureRigRegistered();\r\n }\r\n\r\n static from(root: SceneNode, options?: Omit<AvatarWardrobeOptions, 'root'>): AvatarWardrobe {\r\n return new AvatarWardrobe({ root, ...(options ?? {}) });\r\n }\r\n\r\n get root(): SceneNode {\r\n return this._root;\r\n }\r\n\r\n get rig(): SkeletonRig {\r\n return this._rig;\r\n }\r\n\r\n getEquipped(slot?: AvatarSlotId): AvatarOutfitInstance[] {\r\n if (slot) {\r\n return [...(this._equipped.get(slot) ?? [])];\r\n }\r\n return [...this._equipped.values()].flatMap((items) => [...items]);\r\n }\r\n\r\n async equip(\r\n source: AvatarOutfitSource,\r\n options?: AvatarEquipOptions\r\n ): Promise<Nullable<AvatarOutfitInstance>> {\r\n const slot = options?.slot ?? 'default';\r\n this.enforceSlotRules(slot);\r\n const root = await this.resolveSource(source, options);\r\n if (!root) {\r\n console.error('AvatarWardrobe.equip(): failed to load outfit source');\r\n return null;\r\n }\r\n if (root === this._root) {\r\n console.error('AvatarWardrobe.equip(): outfit root cannot be the avatar root');\r\n return null;\r\n }\r\n if (root.scene !== this._root.scene) {\r\n console.error('AvatarWardrobe.equip(): outfit node must belong to the same scene as the avatar');\r\n return null;\r\n }\r\n\r\n const meshUses = this.collectSkinnedMeshes(root);\r\n if (meshUses.length === 0) {\r\n console.error('AvatarWardrobe.equip(): outfit does not contain skinned meshes');\r\n return null;\r\n }\r\n\r\n const newBindings: SkinBinding[] = [];\r\n const equippedMeshes: Mesh[] = [];\r\n const bindMode = options?.bindMode ?? this.chooseBindMode(meshUses[0].binding.rig);\r\n const fitMode = options?.fitMode ?? (bindMode === 'exact' ? 'reuseInverseBind' : 'preserveRestPose');\r\n for (const use of meshUses) {\r\n const targetJoints = use.binding.joints.map((joint) =>\r\n this.resolveTargetJoint(joint, use.binding.rig, bindMode, options?.jointMap)\r\n );\r\n const missing = use.binding.joints\r\n .filter((_, index) => !targetJoints[index])\r\n .map((joint) => joint.name);\r\n if (missing.length > 0) {\r\n console.error(`AvatarWardrobe.equip(): cannot map outfit joints: ${missing.join(', ')}`);\r\n return null;\r\n }\r\n const mappedJoints = targetJoints as SceneNode[];\r\n const inverseBindMatrices = this.createInverseBindMatrices(use.binding, mappedJoints, fitMode);\r\n const binding = new SkinBinding(this._rig, inverseBindMatrices, mappedJoints);\r\n this._root.animationSet.skeletons.push(new DRef(binding));\r\n newBindings.push(binding);\r\n for (const mesh of use.meshes) {\r\n mesh.skinBindingName = binding.persistentId;\r\n equippedMeshes.push(mesh);\r\n }\r\n }\r\n\r\n this.stripSourceSkinBindings(\r\n root,\r\n meshUses.map((use) => use.binding)\r\n );\r\n root.parent = this._root;\r\n\r\n const hiddenBodyRegions = this.getHiddenBodyRegions(slot, options);\r\n this.retainBodyRegions(hiddenBodyRegions);\r\n const instance = new AvatarOutfitInstance(\r\n this,\r\n slot,\r\n root,\r\n equippedMeshes,\r\n newBindings,\r\n hiddenBodyRegions\r\n );\r\n const items = this._equipped.get(slot) ?? [];\r\n items.push(instance);\r\n this._equipped.set(slot, items);\r\n return instance;\r\n }\r\n\r\n unequip(slotOrInstance: AvatarSlotId | AvatarOutfitInstance): void {\r\n if (typeof slotOrInstance === 'string') {\r\n for (const instance of this.getEquipped(slotOrInstance)) {\r\n instance.dispose();\r\n }\r\n } else {\r\n slotOrInstance.dispose();\r\n }\r\n }\r\n\r\n clear(): void {\r\n for (const instance of this.getEquipped()) {\r\n instance.dispose();\r\n }\r\n }\r\n\r\n validateOutfit(source: SceneNode, options?: AvatarEquipOptions): AvatarOutfitValidation {\r\n const errors: string[] = [];\r\n const warnings: string[] = [];\r\n const meshUses = this.collectSkinnedMeshes(source);\r\n const bindMode =\r\n options?.bindMode ?? (meshUses[0] ? this.chooseBindMode(meshUses[0].binding.rig) : 'name');\r\n let mappedJoints = 0;\r\n const missingJoints: string[] = [];\r\n if (meshUses.length === 0) {\r\n errors.push('No skinned meshes found');\r\n }\r\n for (const use of meshUses) {\r\n for (const joint of use.binding.joints) {\r\n if (this.resolveTargetJoint(joint, use.binding.rig, bindMode, options?.jointMap)) {\r\n mappedJoints++;\r\n } else {\r\n missingJoints.push(joint.name);\r\n }\r\n }\r\n }\r\n if (missingJoints.length > 0) {\r\n errors.push(`Missing mapped joints: ${missingJoints.join(', ')}`);\r\n }\r\n const unknownRegions = this.getHiddenBodyRegions(options?.slot ?? 'default', options).filter(\r\n (region) => !this._bodyRegions.has(region)\r\n );\r\n if (unknownRegions.length > 0) {\r\n warnings.push(`Unknown body regions: ${unknownRegions.join(', ')}`);\r\n }\r\n return {\r\n ok: errors.length === 0,\r\n meshes: meshUses.reduce((sum, use) => sum + use.meshes.length, 0),\r\n skinBindings: meshUses.length,\r\n mappedJoints,\r\n missingJoints,\r\n errors,\r\n warnings\r\n };\r\n }\r\n\r\n /** @internal */\r\n _releaseInstance(instance: AvatarOutfitInstance): void {\r\n const items = this._equipped.get(instance.slot);\r\n if (!items || !items.includes(instance)) {\r\n return;\r\n }\r\n const index = items.indexOf(instance);\r\n items.splice(index, 1);\r\n if (items.length === 0) {\r\n this._equipped.delete(instance.slot);\r\n }\r\n for (const meshRef of instance.meshes) {\r\n const mesh = meshRef.get()!;\r\n if (instance.skinBindings.some((binding) => binding.persistentId === mesh.skinBindingName)) {\r\n mesh.skinBindingName = '';\r\n }\r\n }\r\n for (const binding of instance.skinBindings) {\r\n this.removeSkinBinding(binding);\r\n }\r\n this.releaseBodyRegions(instance.hiddenBodyRegions);\r\n instance.root.get()?.remove();\r\n instance.root.dispose();\r\n }\r\n\r\n protected onDispose() {\r\n this.clear();\r\n }\r\n\r\n private resolveTargetRig(root: SceneNode, rig: SkeletonRig | string | undefined): SkeletonRig {\r\n if (rig instanceof SkeletonRig) {\r\n return rig;\r\n }\r\n if (typeof rig === 'string') {\r\n const found = root.findSkeletonRigById(rig);\r\n if (!found) {\r\n throw new Error(`AvatarWardrobe: rig '${rig}' was not found under avatar root`);\r\n }\r\n return found;\r\n }\r\n const animationSet = root.animationSet;\r\n const registeredRig = animationSet.rigs\r\n .map((ref) => ref.get())\r\n .find((item): item is SkeletonRig => !!item);\r\n if (registeredRig) {\r\n return registeredRig;\r\n }\r\n const bindingRig = animationSet.skeletons\r\n .map((ref) => ref.get()?.rig)\r\n .find((item): item is SkeletonRig => !!item);\r\n if (bindingRig) {\r\n return bindingRig;\r\n }\r\n throw new Error('AvatarWardrobe: avatar root does not have a skeleton rig');\r\n }\r\n\r\n private ensureRigRegistered(): void {\r\n if (!this._root.animationSet.rigs.some((ref) => ref.get() === this._rig)) {\r\n this._root.animationSet.rigs.push(new DRef(this._rig));\r\n }\r\n }\r\n\r\n private enforceSlotRules(slot: AvatarSlotId): void {\r\n const slotOptions = this._slots.get(slot);\r\n if (!slotOptions?.allowMultiple) {\r\n this.unequip(slot);\r\n }\r\n for (const other of slotOptions?.exclusiveWith ?? []) {\r\n this.unequip(other);\r\n }\r\n for (const [otherSlot, options] of this._slots) {\r\n if (otherSlot !== slot && options.exclusiveWith?.includes(slot)) {\r\n this.unequip(otherSlot);\r\n }\r\n }\r\n }\r\n\r\n private async resolveSource(\r\n source: AvatarOutfitSource,\r\n options?: AvatarEquipOptions\r\n ): Promise<Nullable<SceneNode>> {\r\n const resourceManager = getEngine().resourceManager;\r\n if (typeof source === 'string') {\r\n const scene = this._root.scene!;\r\n const root =\r\n guessMimeType(source) === 'application/vnd.zephyr3d.prefab+json'\r\n ? await resourceManager.instantiatePrefab(scene.rootNode, source)\r\n : await resourceManager.fetchModel(source, scene, {\r\n loadAnimations: false,\r\n loadMeshes: true,\r\n loadSkeletons: true,\r\n loadJointDynamics: false,\r\n ...this._modelFetchOptions,\r\n ...(options?.modelFetchOptions ?? {})\r\n });\r\n if (!root) {\r\n console.error(`AvatarWardrobe.equip(): failed to load outfit '${source}'`);\r\n return null;\r\n }\r\n return root;\r\n }\r\n if (source instanceof SharedModel) {\r\n const scene = this._root.scene!;\r\n const root = await source.createSceneNode(\r\n resourceManager,\r\n scene,\r\n false,\r\n true,\r\n true,\r\n false,\r\n false,\r\n resourceManager.VFS\r\n );\r\n return root;\r\n }\r\n return source;\r\n }\r\n\r\n private collectSkinnedMeshes(root: SceneNode): MeshBindingUse[] {\r\n const bindings = root.animationSet.skeletons\r\n .map((ref) => ref.get())\r\n .filter((item): item is SkinBinding => !!item);\r\n if (bindings.length === 0) {\r\n return [];\r\n }\r\n const meshUses = new Map<SkinBinding, Mesh[]>();\r\n root.iterate((node) => {\r\n if (!node.isMesh()) {\r\n return false;\r\n }\r\n const mesh = node as Mesh;\r\n const binding =\r\n bindings.find((item) => item.persistentId === mesh.skinBindingName) ??\r\n (bindings.length === 1 && mesh.skinBindingName ? bindings[0] : null);\r\n if (binding) {\r\n const meshes = meshUses.get(binding) ?? [];\r\n meshes.push(mesh);\r\n meshUses.set(binding, meshes);\r\n }\r\n return false;\r\n });\r\n return [...meshUses.entries()].map(([binding, meshes]) => ({ binding, meshes }));\r\n }\r\n\r\n private chooseBindMode(sourceRig: SkeletonRig): AvatarBindMode {\r\n return sourceRig.humanoidJointMapping && this._rig.humanoidJointMapping ? 'humanoid' : 'name';\r\n }\r\n\r\n private resolveTargetJoint(\r\n sourceJoint: SceneNode,\r\n sourceRig: SkeletonRig,\r\n bindMode: AvatarBindMode,\r\n jointMap?: AvatarJointMap\r\n ): Nullable<SceneNode> {\r\n if (bindMode === 'custom') {\r\n if (typeof jointMap === 'function') {\r\n const mapped = jointMap(sourceJoint, this._rig, sourceRig);\r\n return mapped && this._rig.joints.includes(mapped) ? mapped : null;\r\n }\r\n if (jointMap) {\r\n return this.findTargetJointByName(jointMap[sourceJoint.name]);\r\n }\r\n return null;\r\n }\r\n if (bindMode === 'humanoid') {\r\n const mapped = this.resolveHumanoidTargetJoint(sourceJoint, sourceRig);\r\n if (mapped) {\r\n return mapped;\r\n }\r\n }\r\n return this.findTargetJointByName(sourceJoint.name);\r\n }\r\n\r\n private resolveHumanoidTargetJoint(sourceJoint: SceneNode, sourceRig: SkeletonRig): Nullable<SceneNode> {\r\n const src = sourceRig.humanoidJointMapping;\r\n const dst = this._rig.humanoidJointMapping;\r\n if (!src || !dst) {\r\n return null;\r\n }\r\n return (\r\n this.findHumanoidMappedJoint(sourceJoint, src.body, dst.body) ??\r\n (src.leftHand && dst.leftHand\r\n ? this.findHumanoidMappedJoint(sourceJoint, src.leftHand, dst.leftHand)\r\n : null) ??\r\n (src.rightHand && dst.rightHand\r\n ? this.findHumanoidMappedJoint(sourceJoint, src.rightHand, dst.rightHand)\r\n : null)\r\n );\r\n }\r\n\r\n private findHumanoidMappedJoint<T extends string>(\r\n sourceJoint: SceneNode,\r\n sourceMap: Record<T, SceneNode>,\r\n targetMap: Record<T, SceneNode>\r\n ): Nullable<SceneNode> {\r\n for (const key of Object.keys(sourceMap) as T[]) {\r\n if (sourceMap[key] === sourceJoint) {\r\n const target = targetMap[key];\r\n return target && this._rig.joints.includes(target) ? target : null;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private findTargetJointByName(name: string | undefined): Nullable<SceneNode> {\r\n return name ? (this._rig.joints.find((joint) => joint.name === name) ?? null) : null;\r\n }\r\n\r\n private createInverseBindMatrices(\r\n sourceBinding: SkinBinding,\r\n targetJoints: SceneNode[],\r\n fitMode: AvatarFitMode\r\n ): Matrix4x4[] {\r\n if (fitMode === 'reuseInverseBind') {\r\n return sourceBinding.inverseBindMatrices.map((matrix) => new Matrix4x4(matrix));\r\n }\r\n const sourceBindWorld = this.computeBindWorldMatrices(sourceBinding.rig);\r\n const targetBindWorld = this.computeBindWorldMatrices(this._rig);\r\n return sourceBinding.inverseBindMatrices.map((sourceInverseBind, index) => {\r\n const sourceJointBind =\r\n sourceBindWorld.get(sourceBinding.joints[index]) ?? sourceBinding.joints[index].worldMatrix;\r\n const targetJointBind = targetBindWorld.get(targetJoints[index]) ?? targetJoints[index].worldMatrix;\r\n const sourceFinalBind = Matrix4x4.multiply(sourceJointBind, sourceInverseBind);\r\n return Matrix4x4.multiply(Matrix4x4.invertAffine(targetJointBind), sourceFinalBind);\r\n });\r\n }\r\n\r\n private computeBindWorldMatrices(rig: SkeletonRig): Map<SceneNode, Matrix4x4> {\r\n const cache = new Map<SceneNode, Matrix4x4>();\r\n const jointSet = new Set(rig.joints);\r\n const compute = (node: SceneNode): Matrix4x4 => {\r\n const cached = cache.get(node);\r\n if (cached) {\r\n return cached;\r\n }\r\n const bindPose = this.getRigNodeBindPose(rig, node);\r\n const local = Matrix4x4.compose(bindPose.scale, bindPose.rotation, bindPose.position);\r\n const parent = node.parent;\r\n const world =\r\n parent && (jointSet.has(parent) || parent === rig.rootJoint)\r\n ? Matrix4x4.multiply(compute(parent), local)\r\n : parent\r\n ? Matrix4x4.multiply(parent.worldMatrix, local)\r\n : local;\r\n cache.set(node, world);\r\n return world;\r\n };\r\n for (const joint of rig.joints) {\r\n compute(joint);\r\n }\r\n if (rig.rootJoint) {\r\n compute(rig.rootJoint);\r\n }\r\n return cache;\r\n }\r\n\r\n private getRigNodeBindPose(rig: SkeletonRig, node: SceneNode): SkeletonBindPose {\r\n return (\r\n rig.getBindPoseForJoint(node) ??\r\n (node === rig.rootJoint\r\n ? rig.rootBindPose\r\n : {\r\n position: node.position,\r\n rotation: node.rotation,\r\n scale: node.scale\r\n })\r\n );\r\n }\r\n\r\n private stripSourceSkinBindings(sourceRoot: SceneNode, sourceBindings: SkinBinding[]): void {\r\n const sourceBindingSet = new Set(sourceBindings);\r\n const sourceRigSet = new Set(sourceBindings.map((binding) => binding.rig));\r\n this.removeRefs(sourceRoot.animationSet.skeletons, (binding) => sourceBindingSet.has(binding));\r\n this.removeRefs(sourceRoot.animationSet.rigs, (rig) => rig !== this._rig && sourceRigSet.has(rig));\r\n }\r\n\r\n private removeSkinBinding(binding: SkinBinding): void {\r\n this.removeRefs(this._root.animationSet.skeletons, (item) => item === binding);\r\n }\r\n\r\n private removeRefs<T extends Disposable>(refs: DRef<T>[], predicate: (item: T) => boolean): void {\r\n for (let i = refs.length - 1; i >= 0; i--) {\r\n const item = refs[i].get();\r\n if (item && predicate(item)) {\r\n refs[i].dispose();\r\n refs.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n private getHiddenBodyRegions(slot: AvatarSlotId, options?: AvatarEquipOptions): string[] {\r\n return [\r\n ...new Set([...(this._slots.get(slot)?.hideBodyRegions ?? []), ...(options?.hideBodyRegions ?? [])])\r\n ];\r\n }\r\n\r\n private retainBodyRegions(regions: string[]): void {\r\n for (const node of this.collectBodyRegionNodes(regions)) {\r\n const count = this._hiddenBodyNodeCounts.get(node) ?? 0;\r\n if (count === 0) {\r\n this._bodyNodeOriginalState.set(node, node.showState);\r\n node.showState = 'hidden';\r\n }\r\n this._hiddenBodyNodeCounts.set(node, count + 1);\r\n }\r\n }\r\n\r\n private releaseBodyRegions(regions: string[]): void {\r\n for (const node of this.collectBodyRegionNodes(regions)) {\r\n const count = this._hiddenBodyNodeCounts.get(node) ?? 0;\r\n if (count <= 1) {\r\n this._hiddenBodyNodeCounts.delete(node);\r\n node.showState = this._bodyNodeOriginalState.get(node) ?? 'inherit';\r\n this._bodyNodeOriginalState.delete(node);\r\n } else {\r\n this._hiddenBodyNodeCounts.set(node, count - 1);\r\n }\r\n }\r\n }\r\n\r\n private collectBodyRegionNodes(regions: string[]): SceneNode[] {\r\n const nodes: SceneNode[] = [];\r\n const seen = new Set<SceneNode>();\r\n for (const region of regions) {\r\n for (const node of this._bodyRegions.get(region) ?? []) {\r\n if (!seen.has(node)) {\r\n seen.add(node);\r\n nodes.push(node);\r\n }\r\n }\r\n }\r\n return nodes;\r\n }\r\n\r\n private uniqueNodes(nodes: AvatarBodyRegionTarget[]): SceneNode[] {\r\n return [...new Set(nodes.filter((node): node is SceneNode => !!node))];\r\n }\r\n}\r\n"],"names":["outfitInstanceId","AvatarOutfitInstance","Disposable","id","slot","root","meshes","skinBindings","hiddenBodyRegions","_wardrobe","wardrobe","DRef","map","mesh","onDispose","_releaseInstance","meshRef","dispose","length","AvatarWardrobe","_root","_rig","_slots","_bodyRegions","_equipped","_hiddenBodyNodeCounts","_bodyNodeOriginalState","_modelFetchOptions","options","resolveTargetRig","rig","Map","modelFetchOptions","slots","set","name","nodes","Object","entries","bodyRegions","uniqueNodes","ensureRigRegistered","from","getEquipped","get","values","flatMap","items","equip","source","enforceSlotRules","resolveSource","console","error","scene","meshUses","collectSkinnedMeshes","newBindings","equippedMeshes","bindMode","chooseBindMode","binding","fitMode","use","targetJoints","joints","joint","resolveTargetJoint","jointMap","missing","filter","_","index","join","mappedJoints","inverseBindMatrices","createInverseBindMatrices","SkinBinding","animationSet","skeletons","push","skinBindingName","persistentId","stripSourceSkinBindings","parent","getHiddenBodyRegions","retainBodyRegions","instance","unequip","slotOrInstance","clear","validateOutfit","errors","warnings","missingJoints","unknownRegions","region","has","ok","reduce","sum","includes","indexOf","splice","delete","some","removeSkinBinding","releaseBodyRegions","remove","SkeletonRig","found","findSkeletonRigById","Error","registeredRig","rigs","ref","find","item","bindingRig","slotOptions","allowMultiple","other","exclusiveWith","otherSlot","resourceManager","getEngine","guessMimeType","instantiatePrefab","rootNode","fetchModel","loadAnimations","loadMeshes","loadSkeletons","loadJointDynamics","SharedModel","createSceneNode","VFS","bindings","iterate","node","isMesh","sourceRig","humanoidJointMapping","sourceJoint","mapped","findTargetJointByName","resolveHumanoidTargetJoint","src","dst","findHumanoidMappedJoint","body","leftHand","rightHand","sourceMap","targetMap","key","keys","target","sourceBinding","matrix","Matrix4x4","sourceBindWorld","computeBindWorldMatrices","targetBindWorld","sourceInverseBind","sourceJointBind","worldMatrix","targetJointBind","sourceFinalBind","multiply","invertAffine","cache","jointSet","Set","compute","cached","bindPose","getRigNodeBindPose","local","compose","scale","rotation","position","world","rootJoint","getBindPoseForJoint","rootBindPose","sourceRoot","sourceBindings","sourceBindingSet","sourceRigSet","removeRefs","refs","predicate","i","hideBodyRegions","regions","collectBodyRegionNodes","count","showState","seen","add"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wardrobe.js","sources":["../../src/avatar/wardrobe.ts"],"sourcesContent":["import { DRef, Disposable, Matrix4x4, guessMimeType, mimeTypeOf } from '@zephyr3d/base';\nimport type { Nullable } from '@zephyr3d/base';\nimport { getEngine } from '../app/api';\nimport type { ModelFetchOptions } from '../asset/assetmanager';\nimport { SharedModel } from '../asset/model';\nimport type { SceneNodeVisible } from '../scene/scene_node';\nimport { SceneNode } from '../scene/scene_node';\nimport type { Mesh } from '../scene/mesh';\nimport type { SkeletonBindPose } from '../animation/skeleton';\nimport { SkeletonRig, SkinBinding } from '../animation/skeleton';\n\n/** @public */\nexport type AvatarSlotId = string;\n\n/** @public */\nexport type AvatarBindMode = 'exact' | 'humanoid' | 'name' | 'custom';\n\n/** @public */\nexport type AvatarFitMode = 'reuseInverseBind' | 'preserveRestPose';\n\n/** @public */\nexport type AvatarOutfitSource = string | SceneNode | SharedModel;\n\n/** @public */\nexport type AvatarBodyRegionTarget = SceneNode | Mesh;\n\n/** @public */\nexport type AvatarBodyRegions = Record<string, AvatarBodyRegionTarget[]>;\n\n/** @public */\nexport type AvatarJointMap =\n | Record<string, string>\n | ((sourceJoint: SceneNode, targetRig: SkeletonRig, sourceRig: SkeletonRig) => Nullable<SceneNode>);\n\n/** @public */\nexport type AvatarSlotOptions = {\n id: AvatarSlotId;\n hideBodyRegions?: string[];\n exclusiveWith?: AvatarSlotId[];\n allowMultiple?: boolean;\n};\n\n/** @public */\nexport type AvatarWardrobeOptions = {\n root: SceneNode;\n rig?: SkeletonRig | string;\n slots?: AvatarSlotOptions[];\n bodyRegions?: AvatarBodyRegions;\n modelFetchOptions?: ModelFetchOptions;\n};\n\n/** @public */\nexport type AvatarEquipOptions = {\n slot?: AvatarSlotId;\n bindMode?: AvatarBindMode;\n fitMode?: AvatarFitMode;\n jointMap?: AvatarJointMap;\n hideBodyRegions?: string[];\n modelFetchOptions?: ModelFetchOptions;\n};\n\n/** @public */\nexport type AvatarOutfitValidation = {\n ok: boolean;\n meshes: number;\n skinBindings: number;\n mappedJoints: number;\n missingJoints: string[];\n errors: string[];\n warnings: string[];\n};\n\ntype MeshBindingUse = {\n binding: SkinBinding;\n meshes: Mesh[];\n};\n\nlet outfitInstanceId = 0;\n\n/**\n * A concrete equipped outfit item.\n *\n * Disposing the instance unequips it from the owning wardrobe.\n *\n * @public\n */\nexport class AvatarOutfitInstance extends Disposable {\n readonly id: string;\n readonly slot: AvatarSlotId;\n readonly root: DRef<SceneNode>;\n readonly meshes: DRef<Mesh>[];\n readonly skinBindings: SkinBinding[];\n readonly hiddenBodyRegions: string[];\n private _wardrobe: Nullable<AvatarWardrobe>;\n\n /** @internal */\n constructor(\n wardrobe: AvatarWardrobe,\n slot: AvatarSlotId,\n root: SceneNode,\n meshes: Mesh[],\n skinBindings: SkinBinding[],\n hiddenBodyRegions: string[]\n ) {\n super();\n this.id = `outfit-${++outfitInstanceId}`;\n this.slot = slot;\n this.root = new DRef(root);\n this.meshes = meshes.map((mesh) => new DRef(mesh));\n this.skinBindings = skinBindings;\n this.hiddenBodyRegions = hiddenBodyRegions;\n this._wardrobe = wardrobe;\n }\n\n protected onDispose() {\n this._wardrobe?._releaseInstance(this);\n this._wardrobe = null;\n for (const meshRef of this.meshes) {\n meshRef.dispose();\n }\n this.meshes.length = 0;\n }\n}\n\n/**\n * High level avatar outfit controller.\n *\n * The wardrobe keeps one avatar {@link SkeletonRig} as the animation source and\n * binds equipped clothing meshes to that rig with new {@link SkinBinding}s.\n *\n * @public\n */\nexport class AvatarWardrobe extends Disposable {\n private readonly _root: SceneNode;\n private readonly _rig: SkeletonRig;\n private readonly _slots: Map<AvatarSlotId, AvatarSlotOptions>;\n private readonly _bodyRegions: Map<string, SceneNode[]>;\n private readonly _equipped: Map<AvatarSlotId, AvatarOutfitInstance[]>;\n private readonly _hiddenBodyNodeCounts: Map<SceneNode, number>;\n private readonly _bodyNodeOriginalState: Map<SceneNode, SceneNodeVisible>;\n private readonly _modelFetchOptions: ModelFetchOptions;\n\n constructor(options: AvatarWardrobeOptions) {\n super();\n this._root = options.root;\n this._rig = this.resolveTargetRig(options.root, options.rig);\n this._slots = new Map();\n this._bodyRegions = new Map();\n this._equipped = new Map();\n this._hiddenBodyNodeCounts = new Map();\n this._bodyNodeOriginalState = new Map();\n this._modelFetchOptions = options.modelFetchOptions ?? {};\n for (const slot of options.slots ?? []) {\n this._slots.set(slot.id, { ...slot });\n }\n for (const [name, nodes] of Object.entries(options.bodyRegions ?? {})) {\n this._bodyRegions.set(name, this.uniqueNodes(nodes));\n }\n this.ensureRigRegistered();\n }\n\n static from(root: SceneNode, options?: Omit<AvatarWardrobeOptions, 'root'>): AvatarWardrobe {\n return new AvatarWardrobe({ root, ...(options ?? {}) });\n }\n\n get root(): SceneNode {\n return this._root;\n }\n\n get rig(): SkeletonRig {\n return this._rig;\n }\n\n getEquipped(slot?: AvatarSlotId): AvatarOutfitInstance[] {\n if (slot) {\n return [...(this._equipped.get(slot) ?? [])];\n }\n return [...this._equipped.values()].flatMap((items) => [...items]);\n }\n\n async equip(\n source: AvatarOutfitSource,\n options?: AvatarEquipOptions\n ): Promise<Nullable<AvatarOutfitInstance>> {\n const slot = options?.slot ?? 'default';\n this.enforceSlotRules(slot);\n const root = await this.resolveSource(source, options);\n if (!root) {\n console.error('AvatarWardrobe.equip(): failed to load outfit source');\n return null;\n }\n if (root === this._root) {\n console.error('AvatarWardrobe.equip(): outfit root cannot be the avatar root');\n return null;\n }\n if (root.scene !== this._root.scene) {\n console.error('AvatarWardrobe.equip(): outfit node must belong to the same scene as the avatar');\n return null;\n }\n\n const meshUses = this.collectSkinnedMeshes(root);\n if (meshUses.length === 0) {\n console.error('AvatarWardrobe.equip(): outfit does not contain skinned meshes');\n return null;\n }\n\n const newBindings: SkinBinding[] = [];\n const equippedMeshes: Mesh[] = [];\n const bindMode = options?.bindMode ?? this.chooseBindMode(meshUses[0].binding.rig);\n const fitMode = options?.fitMode ?? (bindMode === 'exact' ? 'reuseInverseBind' : 'preserveRestPose');\n for (const use of meshUses) {\n const targetJoints = use.binding.joints.map((joint) =>\n this.resolveTargetJoint(joint, use.binding.rig, bindMode, options?.jointMap)\n );\n const missing = use.binding.joints\n .filter((_, index) => !targetJoints[index])\n .map((joint) => joint.name);\n if (missing.length > 0) {\n console.error(`AvatarWardrobe.equip(): cannot map outfit joints: ${missing.join(', ')}`);\n return null;\n }\n const mappedJoints = targetJoints as SceneNode[];\n const inverseBindMatrices = this.createInverseBindMatrices(use.binding, mappedJoints, fitMode);\n const binding = new SkinBinding(this._rig, inverseBindMatrices, mappedJoints);\n this._root.animationSet.skeletons.push(new DRef(binding));\n newBindings.push(binding);\n for (const mesh of use.meshes) {\n mesh.skinBindingName = binding.persistentId;\n equippedMeshes.push(mesh);\n }\n }\n\n this.stripSourceSkinBindings(\n root,\n meshUses.map((use) => use.binding)\n );\n root.parent = this._root;\n\n const hiddenBodyRegions = this.getHiddenBodyRegions(slot, options);\n this.retainBodyRegions(hiddenBodyRegions);\n const instance = new AvatarOutfitInstance(\n this,\n slot,\n root,\n equippedMeshes,\n newBindings,\n hiddenBodyRegions\n );\n const items = this._equipped.get(slot) ?? [];\n items.push(instance);\n this._equipped.set(slot, items);\n return instance;\n }\n\n unequip(slotOrInstance: AvatarSlotId | AvatarOutfitInstance): void {\n if (typeof slotOrInstance === 'string') {\n for (const instance of this.getEquipped(slotOrInstance)) {\n instance.dispose();\n }\n } else {\n slotOrInstance.dispose();\n }\n }\n\n clear(): void {\n for (const instance of this.getEquipped()) {\n instance.dispose();\n }\n }\n\n validateOutfit(source: SceneNode, options?: AvatarEquipOptions): AvatarOutfitValidation {\n const errors: string[] = [];\n const warnings: string[] = [];\n const meshUses = this.collectSkinnedMeshes(source);\n const bindMode =\n options?.bindMode ?? (meshUses[0] ? this.chooseBindMode(meshUses[0].binding.rig) : 'name');\n let mappedJoints = 0;\n const missingJoints: string[] = [];\n if (meshUses.length === 0) {\n errors.push('No skinned meshes found');\n }\n for (const use of meshUses) {\n for (const joint of use.binding.joints) {\n if (this.resolveTargetJoint(joint, use.binding.rig, bindMode, options?.jointMap)) {\n mappedJoints++;\n } else {\n missingJoints.push(joint.name);\n }\n }\n }\n if (missingJoints.length > 0) {\n errors.push(`Missing mapped joints: ${missingJoints.join(', ')}`);\n }\n const unknownRegions = this.getHiddenBodyRegions(options?.slot ?? 'default', options).filter(\n (region) => !this._bodyRegions.has(region)\n );\n if (unknownRegions.length > 0) {\n warnings.push(`Unknown body regions: ${unknownRegions.join(', ')}`);\n }\n return {\n ok: errors.length === 0,\n meshes: meshUses.reduce((sum, use) => sum + use.meshes.length, 0),\n skinBindings: meshUses.length,\n mappedJoints,\n missingJoints,\n errors,\n warnings\n };\n }\n\n /** @internal */\n _releaseInstance(instance: AvatarOutfitInstance): void {\n const items = this._equipped.get(instance.slot);\n if (!items || !items.includes(instance)) {\n return;\n }\n const index = items.indexOf(instance);\n items.splice(index, 1);\n if (items.length === 0) {\n this._equipped.delete(instance.slot);\n }\n for (const meshRef of instance.meshes) {\n const mesh = meshRef.get()!;\n if (instance.skinBindings.some((binding) => binding.persistentId === mesh.skinBindingName)) {\n mesh.skinBindingName = '';\n }\n }\n for (const binding of instance.skinBindings) {\n this.removeSkinBinding(binding);\n }\n this.releaseBodyRegions(instance.hiddenBodyRegions);\n instance.root.get()?.remove();\n instance.root.dispose();\n }\n\n protected onDispose() {\n this.clear();\n }\n\n private resolveTargetRig(root: SceneNode, rig: SkeletonRig | string | undefined): SkeletonRig {\n if (rig instanceof SkeletonRig) {\n return rig;\n }\n if (typeof rig === 'string') {\n const found = root.findSkeletonRigById(rig);\n if (!found) {\n throw new Error(`AvatarWardrobe: rig '${rig}' was not found under avatar root`);\n }\n return found;\n }\n const animationSet = root.animationSet;\n const registeredRig = animationSet.rigs\n .map((ref) => ref.get())\n .find((item): item is SkeletonRig => !!item);\n if (registeredRig) {\n return registeredRig;\n }\n const bindingRig = animationSet.skeletons\n .map((ref) => ref.get()?.rig)\n .find((item): item is SkeletonRig => !!item);\n if (bindingRig) {\n return bindingRig;\n }\n throw new Error('AvatarWardrobe: avatar root does not have a skeleton rig');\n }\n\n private ensureRigRegistered(): void {\n if (!this._root.animationSet.rigs.some((ref) => ref.get() === this._rig)) {\n this._root.animationSet.rigs.push(new DRef(this._rig));\n }\n }\n\n private enforceSlotRules(slot: AvatarSlotId): void {\n const slotOptions = this._slots.get(slot);\n if (!slotOptions?.allowMultiple) {\n this.unequip(slot);\n }\n for (const other of slotOptions?.exclusiveWith ?? []) {\n this.unequip(other);\n }\n for (const [otherSlot, options] of this._slots) {\n if (otherSlot !== slot && options.exclusiveWith?.includes(slot)) {\n this.unequip(otherSlot);\n }\n }\n }\n\n private async resolveSource(\n source: AvatarOutfitSource,\n options?: AvatarEquipOptions\n ): Promise<Nullable<SceneNode>> {\n if (source instanceof SceneNode) {\n return source;\n }\n const resourceManager = getEngine().resourceManager;\n if (typeof source === 'string') {\n const scene = this._root.scene!;\n const root =\n guessMimeType(source) === mimeTypeOf('.zprefab')\n ? await resourceManager.instantiatePrefab(scene.rootNode, source)\n : await resourceManager.fetchModel(source, scene, {\n loadAnimations: false,\n loadMeshes: true,\n loadSkeletons: true,\n loadJointDynamics: false,\n ...this._modelFetchOptions,\n ...(options?.modelFetchOptions ?? {})\n });\n if (!root) {\n console.error(`AvatarWardrobe.equip(): failed to load outfit '${source}'`);\n return null;\n }\n return root;\n }\n if (source instanceof SharedModel) {\n const scene = this._root.scene!;\n const root = await source.createSceneNode(\n resourceManager,\n scene,\n false,\n true,\n true,\n false,\n false,\n resourceManager.VFS\n );\n return root;\n }\n return null;\n }\n\n private collectSkinnedMeshes(root: SceneNode): MeshBindingUse[] {\n const bindings = root.animationSet.skeletons\n .map((ref) => ref.get())\n .filter((item): item is SkinBinding => !!item);\n if (bindings.length === 0) {\n return [];\n }\n const meshUses = new Map<SkinBinding, Mesh[]>();\n root.iterate((node) => {\n if (!node.isMesh()) {\n return false;\n }\n const mesh = node as Mesh;\n const binding =\n bindings.find((item) => item.persistentId === mesh.skinBindingName) ??\n (bindings.length === 1 && mesh.skinBindingName ? bindings[0] : null);\n if (binding) {\n const meshes = meshUses.get(binding) ?? [];\n meshes.push(mesh);\n meshUses.set(binding, meshes);\n }\n return false;\n });\n return [...meshUses.entries()].map(([binding, meshes]) => ({ binding, meshes }));\n }\n\n private chooseBindMode(sourceRig: SkeletonRig): AvatarBindMode {\n return sourceRig.humanoidJointMapping && this._rig.humanoidJointMapping ? 'humanoid' : 'name';\n }\n\n private resolveTargetJoint(\n sourceJoint: SceneNode,\n sourceRig: SkeletonRig,\n bindMode: AvatarBindMode,\n jointMap?: AvatarJointMap\n ): Nullable<SceneNode> {\n if (bindMode === 'custom') {\n if (typeof jointMap === 'function') {\n const mapped = jointMap(sourceJoint, this._rig, sourceRig);\n return mapped && this._rig.joints.includes(mapped) ? mapped : null;\n }\n if (jointMap) {\n return this.findTargetJointByName(jointMap[sourceJoint.name]);\n }\n return null;\n }\n if (bindMode === 'humanoid') {\n const mapped = this.resolveHumanoidTargetJoint(sourceJoint, sourceRig);\n if (mapped) {\n return mapped;\n }\n }\n return this.findTargetJointByName(sourceJoint.name);\n }\n\n private resolveHumanoidTargetJoint(sourceJoint: SceneNode, sourceRig: SkeletonRig): Nullable<SceneNode> {\n const src = sourceRig.humanoidJointMapping;\n const dst = this._rig.humanoidJointMapping;\n if (!src || !dst) {\n return null;\n }\n return (\n this.findHumanoidMappedJoint(sourceJoint, src.body, dst.body) ??\n (src.leftHand && dst.leftHand\n ? this.findHumanoidMappedJoint(sourceJoint, src.leftHand, dst.leftHand)\n : null) ??\n (src.rightHand && dst.rightHand\n ? this.findHumanoidMappedJoint(sourceJoint, src.rightHand, dst.rightHand)\n : null)\n );\n }\n\n private findHumanoidMappedJoint<T extends string>(\n sourceJoint: SceneNode,\n sourceMap: Record<T, SceneNode>,\n targetMap: Record<T, SceneNode>\n ): Nullable<SceneNode> {\n for (const key of Object.keys(sourceMap) as T[]) {\n if (sourceMap[key] === sourceJoint) {\n const target = targetMap[key];\n return target && this._rig.joints.includes(target) ? target : null;\n }\n }\n return null;\n }\n\n private findTargetJointByName(name: string | undefined): Nullable<SceneNode> {\n return name ? (this._rig.joints.find((joint) => joint.name === name) ?? null) : null;\n }\n\n private createInverseBindMatrices(\n sourceBinding: SkinBinding,\n targetJoints: SceneNode[],\n fitMode: AvatarFitMode\n ): Matrix4x4[] {\n if (fitMode === 'reuseInverseBind') {\n return sourceBinding.inverseBindMatrices.map((matrix) => new Matrix4x4(matrix));\n }\n const sourceBindWorld = this.computeBindWorldMatrices(sourceBinding.rig);\n const targetBindWorld = this.computeBindWorldMatrices(this._rig);\n return sourceBinding.inverseBindMatrices.map((sourceInverseBind, index) => {\n const sourceJointBind =\n sourceBindWorld.get(sourceBinding.joints[index]) ?? sourceBinding.joints[index].worldMatrix;\n const targetJointBind = targetBindWorld.get(targetJoints[index]) ?? targetJoints[index].worldMatrix;\n const sourceFinalBind = Matrix4x4.multiply(sourceJointBind, sourceInverseBind);\n return Matrix4x4.multiply(Matrix4x4.invertAffine(targetJointBind), sourceFinalBind);\n });\n }\n\n private computeBindWorldMatrices(rig: SkeletonRig): Map<SceneNode, Matrix4x4> {\n const cache = new Map<SceneNode, Matrix4x4>();\n const jointSet = new Set(rig.joints);\n const compute = (node: SceneNode): Matrix4x4 => {\n const cached = cache.get(node);\n if (cached) {\n return cached;\n }\n const bindPose = this.getRigNodeBindPose(rig, node);\n const local = Matrix4x4.compose(bindPose.scale, bindPose.rotation, bindPose.position);\n const parent = node.parent;\n const world =\n parent && (jointSet.has(parent) || parent === rig.rootJoint)\n ? Matrix4x4.multiply(compute(parent), local)\n : parent\n ? Matrix4x4.multiply(parent.worldMatrix, local)\n : local;\n cache.set(node, world);\n return world;\n };\n for (const joint of rig.joints) {\n compute(joint);\n }\n if (rig.rootJoint) {\n compute(rig.rootJoint);\n }\n return cache;\n }\n\n private getRigNodeBindPose(rig: SkeletonRig, node: SceneNode): SkeletonBindPose {\n return (\n rig.getBindPoseForJoint(node) ??\n (node === rig.rootJoint\n ? rig.rootBindPose\n : {\n position: node.position,\n rotation: node.rotation,\n scale: node.scale\n })\n );\n }\n\n private stripSourceSkinBindings(sourceRoot: SceneNode, sourceBindings: SkinBinding[]): void {\n const sourceBindingSet = new Set(sourceBindings);\n const sourceRigSet = new Set(sourceBindings.map((binding) => binding.rig));\n this.removeRefs(sourceRoot.animationSet.skeletons, (binding) => sourceBindingSet.has(binding));\n this.removeRefs(sourceRoot.animationSet.rigs, (rig) => rig !== this._rig && sourceRigSet.has(rig));\n }\n\n private removeSkinBinding(binding: SkinBinding): void {\n this.removeRefs(this._root.animationSet.skeletons, (item) => item === binding);\n }\n\n private removeRefs<T extends Disposable>(refs: DRef<T>[], predicate: (item: T) => boolean): void {\n for (let i = refs.length - 1; i >= 0; i--) {\n const item = refs[i].get();\n if (item && predicate(item)) {\n refs[i].dispose();\n refs.splice(i, 1);\n }\n }\n }\n\n private getHiddenBodyRegions(slot: AvatarSlotId, options?: AvatarEquipOptions): string[] {\n return [\n ...new Set([...(this._slots.get(slot)?.hideBodyRegions ?? []), ...(options?.hideBodyRegions ?? [])])\n ];\n }\n\n private retainBodyRegions(regions: string[]): void {\n for (const node of this.collectBodyRegionNodes(regions)) {\n const count = this._hiddenBodyNodeCounts.get(node) ?? 0;\n if (count === 0) {\n this._bodyNodeOriginalState.set(node, node.showState);\n node.showState = 'hidden';\n }\n this._hiddenBodyNodeCounts.set(node, count + 1);\n }\n }\n\n private releaseBodyRegions(regions: string[]): void {\n for (const node of this.collectBodyRegionNodes(regions)) {\n const count = this._hiddenBodyNodeCounts.get(node) ?? 0;\n if (count <= 1) {\n this._hiddenBodyNodeCounts.delete(node);\n node.showState = this._bodyNodeOriginalState.get(node) ?? 'inherit';\n this._bodyNodeOriginalState.delete(node);\n } else {\n this._hiddenBodyNodeCounts.set(node, count - 1);\n }\n }\n }\n\n private collectBodyRegionNodes(regions: string[]): SceneNode[] {\n const nodes: SceneNode[] = [];\n const seen = new Set<SceneNode>();\n for (const region of regions) {\n for (const node of this._bodyRegions.get(region) ?? []) {\n if (!seen.has(node)) {\n seen.add(node);\n nodes.push(node);\n }\n }\n }\n return nodes;\n }\n\n private uniqueNodes(nodes: AvatarBodyRegionTarget[]): SceneNode[] {\n return [...new Set(nodes.filter((node): node is SceneNode => !!node))];\n }\n}\n"],"names":["outfitInstanceId","AvatarOutfitInstance","Disposable","id","slot","root","meshes","skinBindings","hiddenBodyRegions","_wardrobe","wardrobe","DRef","map","mesh","onDispose","_releaseInstance","meshRef","dispose","length","AvatarWardrobe","_root","_rig","_slots","_bodyRegions","_equipped","_hiddenBodyNodeCounts","_bodyNodeOriginalState","_modelFetchOptions","options","resolveTargetRig","rig","Map","modelFetchOptions","slots","set","name","nodes","Object","entries","bodyRegions","uniqueNodes","ensureRigRegistered","from","getEquipped","get","values","flatMap","items","equip","source","enforceSlotRules","resolveSource","console","error","scene","meshUses","collectSkinnedMeshes","newBindings","equippedMeshes","bindMode","chooseBindMode","binding","fitMode","use","targetJoints","joints","joint","resolveTargetJoint","jointMap","missing","filter","_","index","join","mappedJoints","inverseBindMatrices","createInverseBindMatrices","SkinBinding","animationSet","skeletons","push","skinBindingName","persistentId","stripSourceSkinBindings","parent","getHiddenBodyRegions","retainBodyRegions","instance","unequip","slotOrInstance","clear","validateOutfit","errors","warnings","missingJoints","unknownRegions","region","has","ok","reduce","sum","includes","indexOf","splice","delete","some","removeSkinBinding","releaseBodyRegions","remove","SkeletonRig","found","findSkeletonRigById","Error","registeredRig","rigs","ref","find","item","bindingRig","slotOptions","allowMultiple","other","exclusiveWith","otherSlot","SceneNode","resourceManager","getEngine","guessMimeType","mimeTypeOf","instantiatePrefab","rootNode","fetchModel","loadAnimations","loadMeshes","loadSkeletons","loadJointDynamics","SharedModel","createSceneNode","VFS","bindings","iterate","node","isMesh","sourceRig","humanoidJointMapping","sourceJoint","mapped","findTargetJointByName","resolveHumanoidTargetJoint","src","dst","findHumanoidMappedJoint","body","leftHand","rightHand","sourceMap","targetMap","key","keys","target","sourceBinding","matrix","Matrix4x4","sourceBindWorld","computeBindWorldMatrices","targetBindWorld","sourceInverseBind","sourceJointBind","worldMatrix","targetJointBind","sourceFinalBind","multiply","invertAffine","cache","jointSet","Set","compute","cached","bindPose","getRigNodeBindPose","local","compose","scale","rotation","position","world","rootJoint","getBindPoseForJoint","rootBindPose","sourceRoot","sourceBindings","sourceBindingSet","sourceRigSet","removeRefs","refs","predicate","i","hideBodyRegions","regions","collectBodyRegionNodes","count","showState","seen","add"],"mappings":"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"}
|