@zephyr3d/scene 0.9.27 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -27
- package/dist/animation/animation_bank.js +634 -0
- package/dist/animation/animation_bank.js.map +1 -0
- package/dist/animation/animation_bank_gpu.js +256 -0
- package/dist/animation/animation_bank_gpu.js.map +1 -0
- package/dist/animation/animationset.js +54 -0
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_component.js +406 -0
- package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
- package/dist/animation/cloth/gpu_cloth_system.js +332 -202
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
- package/dist/animation/gpu_animation_driver.js +289 -0
- package/dist/animation/gpu_animation_driver.js.map +1 -0
- package/dist/animation/joint_dynamics/collision.js +112 -1
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +6 -0
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +50 -12
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/skeleton.js +279 -55
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skin_palette_atlas.js +252 -0
- package/dist/animation/skin_palette_atlas.js.map +1 -0
- package/dist/animation/spring/multi_chain_spring_system.js +298 -38
- package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
- package/dist/animation/spring/spring_chain.js +2 -0
- package/dist/animation/spring/spring_chain.js.map +1 -1
- package/dist/animation/spring/spring_collider.js +159 -21
- package/dist/animation/spring/spring_collider.js.map +1 -1
- package/dist/animation/spring/spring_particle.js +1 -0
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_solver.js +173 -0
- package/dist/animation/spring/spring_solver.js.map +1 -0
- package/dist/animation/spring/spring_system.js +249 -24
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring_modifier.js +32 -1
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/app/app.js +26 -0
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +86 -15
- package/dist/app/engine.js.map +1 -1
- package/dist/app/gamepad.js +191 -0
- package/dist/app/gamepad.js.map +1 -0
- package/dist/app/inputactions.js +271 -0
- package/dist/app/inputactions.js.map +1 -0
- package/dist/app/inputmgr.js +331 -22
- package/dist/app/inputmgr.js.map +1 -1
- package/dist/app/loading.js +138 -0
- package/dist/app/loading.js.map +1 -0
- package/dist/app/pipelinecache.js +209 -0
- package/dist/app/pipelinecache.js.map +1 -0
- package/dist/app/runtimescript.js +25 -0
- package/dist/app/runtimescript.js.map +1 -1
- package/dist/app/scriptingsystem.js +54 -0
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +7 -2
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/asset_manifest.js +59 -0
- package/dist/asset/asset_manifest.js.map +1 -0
- package/dist/asset/asset_preload.js +258 -0
- package/dist/asset/asset_preload.js.map +1 -0
- package/dist/asset/assetmanager.js +117 -65
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
- package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
- package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
- package/dist/asset/loaders/ktx2/basis_location.js +17 -0
- package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
- package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
- package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
- package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
- package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
- package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
- package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
- package/dist/asset/mesh_lod_builder.js +104 -0
- package/dist/asset/mesh_lod_builder.js.map +1 -0
- package/dist/asset/mesh_settings.js +111 -0
- package/dist/asset/mesh_settings.js.map +1 -0
- package/dist/asset/meshopt_decoder.js +18 -0
- package/dist/asset/meshopt_decoder.js.map +1 -0
- package/dist/asset/meshopt_simplifier.js +26 -0
- package/dist/asset/meshopt_simplifier.js.map +1 -0
- package/dist/asset/model.js +171 -1
- package/dist/asset/model.js.map +1 -1
- package/dist/asset/texture_settings.js +231 -0
- package/dist/asset/texture_settings.js.map +1 -0
- package/dist/asset/zmsh_binary.js +131 -0
- package/dist/asset/zmsh_binary.js.map +1 -0
- package/dist/asset/zsdf_binary.js +111 -0
- package/dist/asset/zsdf_binary.js.map +1 -0
- package/dist/blitter/bilateralblur.js +1 -2
- package/dist/blitter/bilateralblur.js.map +1 -1
- package/dist/blitter/gaussianblur.js +1 -6
- package/dist/blitter/gaussianblur.js.map +1 -1
- package/dist/camera/base.js +31 -10
- package/dist/camera/base.js.map +1 -1
- package/dist/camera/camera.js +104 -178
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/follow.js +342 -0
- package/dist/camera/follow.js.map +1 -0
- package/dist/camera/fps.js +9 -7
- package/dist/camera/fps.js.map +1 -1
- package/dist/camera/orbit.js +46 -19
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +25436 -15990
- package/dist/index.js +65 -11
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +3 -0
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/eye.js +1 -1
- package/dist/material/eye.js.map +1 -1
- package/dist/material/hair.js +2 -3
- package/dist/material/hair.js.map +1 -1
- package/dist/material/lambert.js +4 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +66 -4
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +118 -45
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +1 -1
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +191 -83
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +31 -206
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mtoon.js +1 -1
- package/dist/material/mtoon.js.map +1 -1
- package/dist/material/pbrmr.js +3 -0
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +3 -0
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/sdf_debug.js +78 -0
- package/dist/material/sdf_debug.js.map +1 -0
- package/dist/material/shader/helper.js +333 -191
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/shader/terrain_blend.js +204 -43
- package/dist/material/shader/terrain_blend.js.map +1 -1
- package/dist/material/skin.js +331 -297
- package/dist/material/skin.js.map +1 -1
- package/dist/material/skinprofile.js +1058 -0
- package/dist/material/skinprofile.js.map +1 -0
- package/dist/material/sss.js +353 -0
- package/dist/material/sss.js.map +1 -0
- package/dist/material/sss_kernel.js +265 -0
- package/dist/material/sss_kernel.js.map +1 -0
- package/dist/material/sssprofile.js +879 -0
- package/dist/material/sssprofile.js.map +1 -0
- package/dist/material/subsurfaceprofile.js +4 -8
- package/dist/material/subsurfaceprofile.js.map +1 -1
- package/dist/material/terrain-cm.js +464 -188
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/material/unlit.js +3 -0
- package/dist/material/unlit.js.map +1 -1
- package/dist/material/water.js +1261 -1438
- package/dist/material/water.js.map +1 -1
- package/dist/node_modules/meshoptimizer/LICENSE +21 -0
- package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
- package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
- package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
- package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
- package/dist/physics/character.js +226 -0
- package/dist/physics/character.js.map +1 -0
- package/dist/physics/collider.js +209 -0
- package/dist/physics/collider.js.map +1 -0
- package/dist/physics/events.js +79 -0
- package/dist/physics/events.js.map +1 -0
- package/dist/physics/joint.js +272 -0
- package/dist/physics/joint.js.map +1 -0
- package/dist/physics/node_physics.js +234 -0
- package/dist/physics/node_physics.js.map +1 -0
- package/dist/physics/part.js +91 -0
- package/dist/physics/part.js.map +1 -0
- package/dist/physics/rigid_body.js +379 -0
- package/dist/physics/rigid_body.js.map +1 -0
- package/dist/physics/vehicle.js +335 -0
- package/dist/physics/vehicle.js.map +1 -0
- package/dist/physics/world.js +25 -0
- package/dist/physics/world.js.map +1 -0
- package/dist/posteffect/bloom.js +49 -14
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/motionblur.js +106 -106
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/postsss.js +572 -0
- package/dist/posteffect/postsss.js.map +1 -0
- package/dist/posteffect/sao.js +2 -6
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/skinsss.js +605 -355
- package/dist/posteffect/skinsss.js.map +1 -1
- package/dist/posteffect/ssgi.js +91 -162
- package/dist/posteffect/ssgi.js.map +1 -1
- package/dist/posteffect/ssr.js +3 -11
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +4 -13
- package/dist/posteffect/sss.js.map +1 -1
- package/dist/posteffect/taa.js +1 -0
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/abuffer_oit.js +3 -2
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +179 -64
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cluster_light.js +958 -224
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +25 -5
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/debug_views.js +37 -0
- package/dist/render/debug_views.js.map +1 -0
- package/dist/render/depthpass.js +5 -1
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable_mixin.js +53 -6
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/dualdepthpeeling_oit.js +5 -5
- package/dist/render/dualdepthpeeling_oit.js.map +1 -1
- package/dist/render/envlight.js +196 -113
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +5 -10
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +247 -157
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +16 -38
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/gi/probe_volume.js +1334 -0
- package/dist/render/gi/probe_volume.js.map +1 -0
- package/dist/render/gi/scene_gi.js +282 -0
- package/dist/render/gi/scene_gi.js.map +1 -0
- package/dist/render/gi/voxel_atlas.js +198 -0
- package/dist/render/gi/voxel_atlas.js.map +1 -0
- package/dist/render/gi/voxel_lighting.js +652 -0
- package/dist/render/gi/voxel_lighting.js.map +1 -0
- package/dist/render/gi/voxel_scene.js +642 -0
- package/dist/render/gi/voxel_scene.js.map +1 -0
- package/dist/render/gi/voxelize_pass.js +223 -0
- package/dist/render/gi/voxelize_pass.js.map +1 -0
- package/dist/render/globalbindgroup_allocator.js +3 -2
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/gpu_picking.js +9 -36
- package/dist/render/gpu_picking.js.map +1 -1
- package/dist/render/instance_culling.js +499 -0
- package/dist/render/instance_culling.js.map +1 -0
- package/dist/render/lightpass.js +19 -8
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/lod.js +46 -0
- package/dist/render/lod.js.map +1 -0
- package/dist/render/primitive.js +301 -9
- package/dist/render/primitive.js.map +1 -1
- package/dist/render/primitive_readback.js +209 -0
- package/dist/render/primitive_readback.js.map +1 -0
- package/dist/render/render_queue.js +162 -11
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +10 -7
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/blackboard.js +14 -1
- package/dist/render/rendergraph/blackboard.js.map +1 -1
- package/dist/render/rendergraph/executor.js +136 -0
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +272 -55
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/frame_graph_context.js +41 -0
- package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
- package/dist/render/rendergraph/scene_render_context.js +31 -2
- package/dist/render/rendergraph/scene_render_context.js.map +1 -1
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/renderpass.js +28 -5
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/sdf/box_allocator.js +98 -0
- package/dist/render/sdf/box_allocator.js.map +1 -0
- package/dist/render/sdf/global_sdf.js +865 -0
- package/dist/render/sdf/global_sdf.js.map +1 -0
- package/dist/render/sdf/scene_sdf.js +562 -0
- package/dist/render/sdf/scene_sdf.js.map +1 -0
- package/dist/render/sdf/sdf_atlas.js +227 -0
- package/dist/render/sdf/sdf_atlas.js.map +1 -0
- package/dist/render/sdf/sdf_programs.js +42 -0
- package/dist/render/sdf/sdf_programs.js.map +1 -0
- package/dist/render/sdf/sdf_view.js +199 -0
- package/dist/render/sdf/sdf_view.js.map +1 -0
- package/dist/render/sdf/waterline.js +610 -0
- package/dist/render/sdf/waterline.js.map +1 -0
- package/dist/render/shadow_mask_pass.js +142 -25
- package/dist/render/shadow_mask_pass.js.map +1 -1
- package/dist/render/shore_wave_generator.js +1193 -0
- package/dist/render/shore_wave_generator.js.map +1 -0
- package/dist/render/sky.js +516 -86
- package/dist/render/sky.js.map +1 -1
- package/dist/render/transmission_thickness_pass.js +477 -0
- package/dist/render/transmission_thickness_pass.js.map +1 -0
- package/dist/render/underwater.js +58 -158
- package/dist/render/underwater.js.map +1 -1
- package/dist/render/virtualtexture/virtual_texture.js +1214 -0
- package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
- package/dist/render/volumetric_cloud/cloud_common.js +472 -0
- package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
- package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
- package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
- package/dist/render/volumetric_cloud/debug_view.js +131 -0
- package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
- package/dist/render/volumetric_cloud/resources.js +380 -0
- package/dist/render/volumetric_cloud/resources.js.map +1 -0
- package/dist/render/volumetric_cloud/sky_cache.js +380 -0
- package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
- package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
- package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
- package/dist/render/water_caustics.js +134 -319
- package/dist/render/water_caustics.js.map +1 -1
- package/dist/render/water_foam.js +627 -0
- package/dist/render/water_foam.js.map +1 -0
- package/dist/render/water_interaction.js +1795 -0
- package/dist/render/water_interaction.js.map +1 -0
- package/dist/render/weightedblended_oit.js +3 -3
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +9 -4
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +108 -12
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +28 -7
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/foliage.js +1020 -0
- package/dist/scene/foliage.js.map +1 -0
- package/dist/scene/foliage_buckets.js +147 -0
- package/dist/scene/foliage_buckets.js.map +1 -0
- package/dist/scene/foliage_mask.js +358 -0
- package/dist/scene/foliage_mask.js.map +1 -0
- package/dist/scene/hair.js +15 -4
- package/dist/scene/hair.js.map +1 -1
- package/dist/scene/light.js +179 -13
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +327 -45
- 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 +9 -3
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +9 -3
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +8 -2
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/physics_settings.js +157 -0
- package/dist/scene/physics_settings.js.map +1 -0
- package/dist/scene/scene.js +190 -44
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +147 -6
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
- package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
- package/dist/scene/terrain-cm/grass.js +881 -42
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grass_gpu.js +929 -0
- package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
- package/dist/scene/terrain-cm/grassmaterial.js +180 -9
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +465 -36
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
- package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
- package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
- package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
- package/dist/scene/update_queue.js +54 -0
- package/dist/scene/update_queue.js.map +1 -0
- package/dist/scene/water.js +633 -268
- package/dist/scene/water.js.map +1 -1
- package/dist/scene/water_surface_sampler.js +324 -0
- package/dist/scene/water_surface_sampler.js.map +1 -0
- package/dist/scene/wind.js +317 -0
- package/dist/scene/wind.js.map +1 -0
- package/dist/shaders/atmosphere.js +388 -166
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/fog.js +100 -32
- package/dist/shaders/fog.js.map +1 -1
- package/dist/shaders/gi.js +365 -0
- package/dist/shaders/gi.js.map +1 -0
- package/dist/shaders/ltc_rect.js +202 -0
- package/dist/shaders/ltc_rect.js.map +1 -0
- package/dist/shaders/misc.js +1 -10
- package/dist/shaders/misc.js.map +1 -1
- package/dist/shaders/noise.js +5 -1
- package/dist/shaders/noise.js.map +1 -1
- package/dist/shaders/probes.js +309 -0
- package/dist/shaders/probes.js.map +1 -0
- package/dist/shaders/sdf.js +537 -0
- package/dist/shaders/sdf.js.map +1 -0
- package/dist/shaders/shadow.js +104 -70
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/skin_brdf.js +243 -0
- package/dist/shaders/skin_brdf.js.map +1 -0
- package/dist/shaders/ssgi.js +63 -0
- package/dist/shaders/ssgi.js.map +1 -0
- package/dist/shaders/ssgi_reprojection.js +118 -0
- package/dist/shaders/ssgi_reprojection.js.map +1 -0
- package/dist/shaders/ssr.js +6 -159
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/shaders/temporal.js +38 -27
- package/dist/shaders/temporal.js.map +1 -1
- package/dist/shaders/water.js +32 -82
- package/dist/shaders/water.js.map +1 -1
- package/dist/shaders/water_medium.js +7 -21
- package/dist/shaders/water_medium.js.map +1 -1
- package/dist/shadow/dom.js +110 -19
- package/dist/shadow/dom.js.map +1 -1
- package/dist/shadow/esm.js +3 -3
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +15 -48
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +15 -53
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/pcss.js +34 -9
- package/dist/shadow/pcss.js.map +1 -1
- package/dist/shadow/shadow_impl.js +3 -8
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadow_region.js +40 -2
- package/dist/shadow/shadow_region.js.map +1 -1
- package/dist/shadow/shadowmapper.js +93 -53
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js +18 -72
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js +3 -3
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/shapes/shape.js +44 -1
- package/dist/shapes/shape.js.map +1 -1
- package/dist/utility/buoyancy.js +287 -0
- package/dist/utility/buoyancy.js.map +1 -0
- package/dist/utility/physical.js +10 -1
- package/dist/utility/physical.js.map +1 -1
- package/dist/utility/pmrem.js +17 -43
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/sdf/bake.js +435 -0
- package/dist/utility/sdf/bake.js.map +1 -0
- package/dist/utility/sdf/bvh.js +576 -0
- package/dist/utility/sdf/bvh.js.map +1 -0
- package/dist/utility/serialization/manager.js +34 -6
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +46 -5
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +11 -4
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +87 -254
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/cloth.js +25 -0
- package/dist/utility/serialization/scene/cloth.js.map +1 -0
- package/dist/utility/serialization/scene/common.js +14 -6
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/foliage.js +821 -0
- package/dist/utility/serialization/scene/foliage.js.map +1 -0
- package/dist/utility/serialization/scene/hair.js +11 -4
- package/dist/utility/serialization/scene/hair.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +115 -7
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +388 -220
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +69 -4
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +140 -5
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/node_physics.js +1318 -0
- package/dist/utility/serialization/scene/node_physics.js.map +1 -0
- package/dist/utility/serialization/scene/particle.js +11 -4
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/physics.js +120 -0
- package/dist/utility/serialization/scene/physics.js.map +1 -0
- package/dist/utility/serialization/scene/primitive.js +124 -10
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +1687 -51
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +11 -4
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +163 -33
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +11 -4
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +1543 -264
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/shprojector.js +10 -22
- package/dist/utility/shprojector.js.map +1 -1
- package/dist/utility/textures/foam.js +170 -0
- package/dist/utility/textures/foam.js.map +1 -0
- package/dist/utility/textures/ggxlut.js +17 -43
- package/dist/utility/textures/ggxlut.js.map +1 -1
- package/dist/utility/textures/ltcdata.js +4 -4
- package/dist/utility/textures/ltcdata.js.map +1 -1
- package/dist/utility/textures/ltclut.js +16 -6
- package/dist/utility/textures/ltclut.js.map +1 -1
- package/dist/utility/unsupported.js +24 -0
- package/dist/utility/unsupported.js.map +1 -0
- package/dist/values.js +13 -1
- package/dist/values.js.map +1 -1
- package/package.json +25 -12
- package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
- package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
- package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
- package/src/asset/meshoptimizer/LICENSE +21 -0
- package/dist/animation/joint_dynamics/convex_collider.js +0 -320
- package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
package/dist/scene/mesh.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesh.js","sources":["../../src/scene/mesh.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\nimport { applyMixins, castObservable, DRef } from '@zephyr3d/base';\r\nimport { GraphNode } from './graph_node';\r\nimport type { MeshMaterial } from '../material';\r\nimport { LambertMaterial, ShaderHelper } from '../material';\r\nimport type {\r\n RenderPass,\r\n Primitive,\r\n BatchDrawable,\r\n DrawContext,\r\n PickTarget,\r\n MorphData,\r\n MorphInfo,\r\n SkinInfluenceData,\r\n RenderQueue\r\n} from '../render';\r\nimport {\r\n PBArrayTypeInfo,\r\n PBPrimitiveType,\r\n PBPrimitiveTypeInfo,\r\n PBStructTypeInfo,\r\n type RenderBundle,\r\n type Texture2D\r\n} from '@zephyr3d/device';\r\nimport type { Scene } from './scene';\r\nimport { BoundingBox, type BoundingVolume } from '../utility/bounding_volume';\r\nimport {\r\n getActiveMorphTargetLimit,\r\n getMorphTargetLimit,\r\n MORPH_ATTRIBUTE_VECTOR_COUNT,\r\n MORPH_WEIGHTS_VECTOR_COUNT,\r\n QUEUE_OPAQUE\r\n} from '../values';\r\nimport { mixinDrawable } from '../render/drawable_mixin';\r\nimport { RenderBundleWrapper } from '../render/renderbundle_wrapper';\r\nimport type { SceneNode } from './scene_node';\r\nimport { getDevice } from '../app/api';\r\nimport type { SkinnedBoundingBox } from '../animation';\r\nimport { calculateMorphBoundingBox } from '../animation/morphtarget';\r\n\r\n/**\r\n * Callback invoked after a mesh finishes its per-frame update.\r\n *\r\n * @public\r\n */\r\nexport type MeshUpdateCallback = (frameId: number, elapsedInSeconds: number, deltaInSeconds: number) => void;\r\n\r\n/**\r\n * Bounding data used to update a mesh's local bounding box after morph target weights change.\r\n *\r\n * @public\r\n */\r\nexport interface MorphBoundingInfo {\r\n targetBoxes: BoundingBox[];\r\n originBox: BoundingBox;\r\n}\r\n\r\n/**\r\n * External source descriptor used to rebuild morph target data on demand.\r\n *\r\n * @public\r\n */\r\nexport interface MorphSourceDescriptor {\r\n sourcePath: string;\r\n nodePath: string;\r\n subMeshName: string;\r\n}\r\n\r\n/**\r\n * CPU-side morph target source data used to rebuild GPU morph textures on demand.\r\n *\r\n * @public\r\n */\r\nexport interface MorphTargetSourceData {\r\n numTargets: number;\r\n numVertices: number;\r\n targets: Partial<Record<number, { numComponents: number; data: Float32Array[]; indices?: Uint32Array[] }>>;\r\n}\r\n\r\nconst MORPH_WEIGHT_CAPACITY = MORPH_WEIGHTS_VECTOR_COUNT * 4;\r\nconst MORPH_ATTRIBUTE_CAPACITY = MORPH_ATTRIBUTE_VECTOR_COUNT * 4;\r\nconst MORPH_INFO_DATA_LENGTH = 4 + MORPH_WEIGHT_CAPACITY + MORPH_ATTRIBUTE_CAPACITY;\r\nconst MORPH_RENDER_INDEX_OFFSET = 4 + MORPH_WEIGHT_CAPACITY;\r\nconst MORPH_RENDER_ATTRIBUTE_OFFSET = MORPH_RENDER_INDEX_OFFSET + MORPH_WEIGHT_CAPACITY;\r\nconst MORPH_RENDER_INFO_DATA_LENGTH = MORPH_RENDER_ATTRIBUTE_OFFSET + MORPH_ATTRIBUTE_CAPACITY;\r\nconst ACTIVE_MORPH_WEIGHT_EPSILON = 1e-5;\r\n\r\nfunction normalizeMorphInfoData(data: MorphInfo['data']) {\r\n const normalized = new Float32Array(MORPH_INFO_DATA_LENGTH);\r\n for (let i = 0; i < MORPH_ATTRIBUTE_CAPACITY; i++) {\r\n normalized[4 + MORPH_WEIGHT_CAPACITY + i] = -1;\r\n }\r\n normalized.set(data.subarray(0, Math.min(data.length, normalized.length)));\r\n const declaredCount = Math.max(0, Math.floor(Number(normalized[3]) || 0));\r\n const supportedCount = Math.min(\r\n declaredCount,\r\n getMorphTargetLimit(),\r\n MORPH_WEIGHT_CAPACITY,\r\n Math.max(0, data.length - 4)\r\n );\r\n normalized[3] = supportedCount;\r\n return {\r\n data: normalized,\r\n declaredCount,\r\n supportedCount\r\n };\r\n}\r\n\r\nfunction createMorphInfoBuffer(data: Float32Array) {\r\n const bufferData = new Float32Array(data);\r\n const bufferType = new PBStructTypeInfo('dummy', 'std140', [\r\n {\r\n name: ShaderHelper.getMorphInfoUniformName(),\r\n type: new PBArrayTypeInfo(\r\n new PBPrimitiveTypeInfo(PBPrimitiveType.F32VEC4),\r\n 1 + MORPH_WEIGHTS_VECTOR_COUNT * 2 + MORPH_ATTRIBUTE_VECTOR_COUNT\r\n )\r\n }\r\n ]);\r\n return getDevice().createStructuredBuffer(\r\n bufferType,\r\n {\r\n usage: 'uniform'\r\n },\r\n bufferData\r\n );\r\n}\r\n\r\nconst MeshBase = castObservable(applyMixins(GraphNode, mixinDrawable))<{\r\n primitive_changed: [primitive: Nullable<Primitive>];\r\n material_changed: [material: Nullable<MeshMaterial>];\r\n}>();\r\n\r\n/**\r\n * Mesh node\r\n * @public\r\n */\r\nexport class Mesh extends MeshBase implements BatchDrawable {\r\n /** @internal */\r\n private readonly _primitive: DRef<Primitive>;\r\n /** @internal */\r\n private readonly _material: DRef<MeshMaterial>;\r\n /** @internal */\r\n protected _castShadow: boolean;\r\n /** @internal */\r\n protected _skinnedBoundingInfo: Nullable<SkinnedBoundingBox>;\r\n /** @internal */\r\n protected _animatedBoundingBox: Nullable<BoundingBox>;\r\n /** @internal */\r\n protected _skinBindingName: string;\r\n /** @internal */\r\n protected _boneMatrices: DRef<Texture2D>;\r\n /** @internal */\r\n protected _skinInfluenceData: Nullable<SkinInfluenceData>;\r\n /** @internal */\r\n protected _morphData: Nullable<MorphData>;\r\n /** @internal */\r\n protected _morphInfo: Nullable<MorphInfo>;\r\n /** @internal */\r\n protected _renderMorphInfo: Nullable<MorphInfo>;\r\n /** @internal */\r\n protected _morphBoundingInfo: Nullable<MorphBoundingInfo>;\r\n /** @internal */\r\n protected _morphSource: Nullable<MorphSourceDescriptor>;\r\n /** @internal */\r\n protected _morphSourceData: Nullable<MorphTargetSourceData>;\r\n /** @internal */\r\n protected _activeMorphTargetIndices: Uint32Array<ArrayBuffer>;\r\n /** @internal */\r\n protected _compactMorphData: boolean;\r\n /** @internal */\r\n protected _activeMorphCandidates: { index: number; weight: number }[];\r\n /** @internal */\r\n protected _morphDirty: boolean;\r\n /** @internal */\r\n protected _instanceHash: Nullable<string>;\r\n /** @internal */\r\n protected _batchable: boolean;\r\n /** @internal */\r\n protected _pickTarget: PickTarget;\r\n /** @internal */\r\n protected _suspendSkinning: boolean;\r\n /** @internal */\r\n protected _renderBundle: Nullable<Record<string, RenderBundle>>;\r\n /** @internal */\r\n protected _useRenderBundle: boolean;\r\n /** @internal */\r\n protected _materialChangeTag: Nullable<number>;\r\n /** @internal */\r\n protected _primitiveChangeTag: Nullable<number>;\r\n /** @internal */\r\n protected _postUpdateCallbacks: Set<MeshUpdateCallback>;\r\n /**\r\n * Creates an instance of mesh node\r\n * @param scene - The scene to which the mesh node belongs\r\n */\r\n constructor(scene: Scene, primitive?: Primitive, material?: MeshMaterial) {\r\n super(scene);\r\n this._primitive = new DRef();\r\n this._material = new DRef();\r\n this._castShadow = true;\r\n this._skinnedBoundingInfo = null;\r\n this._animatedBoundingBox = null;\r\n this._boneMatrices = new DRef();\r\n this._skinInfluenceData = null;\r\n this._morphData = null;\r\n this._morphInfo = null;\r\n this._renderMorphInfo = null;\r\n this._morphBoundingInfo = null;\r\n this._morphSource = null;\r\n this._morphSourceData = null;\r\n this._activeMorphTargetIndices = new Uint32Array(0);\r\n this._compactMorphData = false;\r\n this._activeMorphCandidates = [];\r\n this._morphDirty = false;\r\n this._instanceHash = null;\r\n this._pickTarget = { node: this };\r\n this._batchable = getDevice().type !== 'webgl';\r\n this.primitive = primitive ?? null;\r\n this.material = material ?? Mesh._getDefaultMaterial();\r\n this._suspendSkinning = false;\r\n this._skinBindingName = '';\r\n this._renderBundle = {};\r\n this._useRenderBundle = true;\r\n this._materialChangeTag = null;\r\n this._primitiveChangeTag = null;\r\n this._postUpdateCallbacks = new Set();\r\n }\r\n /**\r\n * Returns the batch instance ID for the current render pass.\r\n */\r\n getInstanceId(_renderPass: RenderPass) {\r\n return `${this._instanceHash}:${this.worldMatrixDet >= 0}`;\r\n }\r\n /**\r\n * Returns the packed instance-uniform buffer used for batching.\r\n */\r\n getInstanceUniforms() {\r\n return this._material.get()!.$instanceUniforms;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getPickTarget }\r\n */\r\n getPickTarget() {\r\n return this._pickTarget;\r\n }\r\n setPickTarget(node: SceneNode, label?: string) {\r\n this._pickTarget = { node, label };\r\n }\r\n get useRenderBundle() {\r\n return this._useRenderBundle;\r\n }\r\n set useRenderBundle(val) {\r\n this._useRenderBundle = val;\r\n }\r\n get skeletonName() {\r\n return this._skinBindingName;\r\n }\r\n set skeletonName(name) {\r\n this.skinBindingName = name;\r\n }\r\n get skinBindingName() {\r\n return this._skinBindingName;\r\n }\r\n set skinBindingName(name) {\r\n if (name !== this._skinBindingName) {\r\n this._skinBindingName = name;\r\n this.updateSkeletonState();\r\n }\r\n }\r\n /** @internal */\r\n get skinnedBoundingInfo() {\r\n return this._skinnedBoundingInfo;\r\n }\r\n /** @internal */\r\n get suspendSkinning() {\r\n return this._suspendSkinning;\r\n }\r\n /** @internal */\r\n set suspendSkinning(val) {\r\n this._suspendSkinning = !!val;\r\n }\r\n /** Wether the mesh node casts shadows */\r\n get castShadow() {\r\n return this._castShadow;\r\n }\r\n set castShadow(b) {\r\n this._castShadow = b;\r\n }\r\n /** Primitive of the mesh */\r\n get primitive() {\r\n return this._primitive?.get() ?? null;\r\n }\r\n set primitive(prim) {\r\n const currentPrimitive = this._primitive.get();\r\n if (prim !== currentPrimitive) {\r\n if (currentPrimitive) {\r\n currentPrimitive.off('bv_changed', this._onBoundingboxChange, this);\r\n }\r\n this._primitive.set(prim);\r\n if (prim) {\r\n prim.on('bv_changed', this._onBoundingboxChange, this);\r\n }\r\n this._instanceHash =\r\n prim && this._material.get()\r\n ? `${this.constructor.name}:${this._scene!.id}:${prim.id}:${this._material.get()!.instanceId}`\r\n : null;\r\n this.invalidateBoundingVolume();\r\n RenderBundleWrapper.drawableChanged(this);\r\n this._primitiveChangeTag = null;\r\n if (this._morphData) {\r\n this._ensureWebGLVertexIndexAttribute('morphing');\r\n }\r\n if (this._skinInfluenceData && this._skinInfluenceData.influenceCount > 4) {\r\n this._ensureWebGLVertexIndexAttribute('skinning');\r\n }\r\n this.dispatchEvent('primitive_changed', prim);\r\n }\r\n }\r\n /** Material of the mesh */\r\n get material() {\r\n return this._material?.get() ?? null;\r\n }\r\n set material(m) {\r\n if (this._material.get() !== m) {\r\n this._material.set(m);\r\n if (m) {\r\n RenderBundleWrapper.materialAttached(m.coreMaterial, this);\r\n }\r\n this._instanceHash =\r\n this._primitive.get() && m\r\n ? `${this.constructor.name}:${this._scene?.id ?? 0}:${this._primitive.get()!.id}:${m.instanceId}`\r\n : null;\r\n RenderBundleWrapper.drawableChanged(this);\r\n this._materialChangeTag = null;\r\n this.dispatchEvent('material_changed', m);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc SceneNode.isMesh}\r\n */\r\n isMesh(): this is Mesh {\r\n return true;\r\n }\r\n /**\r\n * Sets the bounding box for animation\r\n * @param bbox - The bounding box for animation\r\n */\r\n setAnimatedBoundingBox(bbox: Nullable<BoundingBox>) {\r\n this._animatedBoundingBox = bbox;\r\n this.invalidateBoundingVolume();\r\n }\r\n /**\r\n * Gets the bounding box for animation\r\n */\r\n getAnimatedBoundingBox() {\r\n return this._animatedBoundingBox ?? null;\r\n }\r\n /**\r\n * Sets morph target bounding data used to update the animated bounding box when weights change.\r\n * @param info - Morph target bounding data\r\n */\r\n setMorphBoundingInfo(info: Nullable<MorphBoundingInfo>) {\r\n this._morphBoundingInfo = info\r\n ? {\r\n targetBoxes: info.targetBoxes.map((box) => box.clone()),\r\n originBox: info.originBox.clone()\r\n }\r\n : null;\r\n this.refreshAnimatedBoundingBox();\r\n }\r\n /**\r\n * Gets morph target bounding data.\r\n */\r\n getMorphBoundingInfo() {\r\n return this._morphBoundingInfo;\r\n }\r\n /**\r\n * Sets the texture that contains the bone matrices for skeletal animation\r\n * @param matrices - The texture that contains the bone matrices\r\n */\r\n setBoneMatrices(matrices: Nullable<Texture2D>) {\r\n if (this._boneMatrices.get() !== matrices) {\r\n this._boneMatrices.set(matrices);\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n }\r\n /**\r\n * Sets additional per-vertex skinning influences packed in a texture.\r\n * The first 4 influences remain in the vertex attributes; this payload stores the remainder.\r\n * @param data - Extra influence texture payload, or null to clear it\r\n */\r\n setSkinInfluenceData(data: Nullable<SkinInfluenceData>) {\r\n if (!data) {\r\n if (this._skinInfluenceData) {\r\n this._skinInfluenceData.texture?.get()?.dispose();\r\n this._skinInfluenceData = null;\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n return;\r\n }\r\n if (!this._skinInfluenceData) {\r\n this._skinInfluenceData = {\r\n texture: new DRef(),\r\n width: 0,\r\n height: 0,\r\n influenceCount: 4,\r\n data: new Float32Array(0)\r\n };\r\n }\r\n this._skinInfluenceData.width = data.width;\r\n this._skinInfluenceData.height = data.height;\r\n this._skinInfluenceData.influenceCount = data.influenceCount;\r\n this._skinInfluenceData.data = data.data.slice();\r\n if (data.texture?.get()) {\r\n this._skinInfluenceData.texture!.set(data.texture.get());\r\n } else {\r\n let tex = this._skinInfluenceData.texture?.get() ?? null;\r\n if (!tex || tex.width !== data.width || tex.height !== data.height) {\r\n tex?.dispose();\r\n tex = getDevice().createTexture2D('rgba32f', data.width, data.height, {\r\n mipmapping: false,\r\n samplerOptions: {\r\n minFilter: 'nearest',\r\n magFilter: 'nearest',\r\n mipFilter: 'none'\r\n }\r\n })!;\r\n this._skinInfluenceData.texture!.set(tex);\r\n }\r\n tex.update(data.data, 0, 0, data.width, data.height);\r\n }\r\n this._ensureWebGLVertexIndexAttribute('skinning');\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n /**\r\n * Sets the texture that contains the morph target data\r\n * @param data - The texture that contains the morph target data\r\n */\r\n setMorphData(data: Nullable<MorphData>) {\r\n if (!data) {\r\n if (this._morphData) {\r\n this._morphData.texture?.get()?.dispose();\r\n this._morphData = null;\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n } else {\r\n if (!this._morphData) {\r\n this._morphData = {\r\n texture: new DRef()\r\n } as MorphData;\r\n }\r\n this._morphData.width = data.width;\r\n this._morphData.height = data.height;\r\n this._morphData.data = data.data.slice();\r\n if (data.texture?.get()) {\r\n this._morphData.texture!.set(data.texture.get());\r\n } else {\r\n let tex = this._morphData.texture?.get() ?? null;\r\n if (!tex || tex.width !== data.width || tex.height !== data.height) {\r\n tex?.dispose();\r\n tex = getDevice().createTexture2D('rgba32f', data.width, data.height, {\r\n mipmapping: false,\r\n samplerOptions: {\r\n minFilter: 'nearest',\r\n magFilter: 'nearest',\r\n mipFilter: 'none'\r\n }\r\n })!;\r\n this._morphData.texture!.set(tex);\r\n }\r\n tex.update(data.data, 0, 0, data.width, data.height);\r\n }\r\n this._ensureWebGLVertexIndexAttribute('morphing');\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n if (this._morphInfo && !this._morphSourceData) {\r\n this.updateRenderMorphInfo(this.collectActiveMorphTargetIndices(), false);\r\n }\r\n }\r\n }\r\n /**\r\n * Sets the skinned bounding info\r\n * @param info - The skinned bounding info\r\n */\r\n setSkinnedBoundingInfo(info: Nullable<SkinnedBoundingBox>) {\r\n this._skinnedBoundingInfo = info;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMorphData}\r\n */\r\n getMorphData() {\r\n return this._morphData;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getSkinInfluenceData}\r\n */\r\n getSkinInfluenceData() {\r\n return this._skinInfluenceData;\r\n }\r\n /**\r\n * Gets the external morph source descriptor.\r\n */\r\n getMorphSource() {\r\n return this._morphSource;\r\n }\r\n /**\r\n * Sets the external morph source descriptor.\r\n * @param source - The morph source descriptor\r\n */\r\n setMorphSource(source: Nullable<MorphSourceDescriptor>) {\r\n this._morphSource = source ? { ...source } : null;\r\n }\r\n /**\r\n * Gets the CPU-side morph source data.\r\n */\r\n getMorphSourceData() {\r\n return this._morphSourceData;\r\n }\r\n /**\r\n * Sets the CPU-side morph source data used to rebuild GPU morph textures on demand.\r\n */\r\n setMorphSourceData(data: Nullable<MorphTargetSourceData>) {\r\n this._morphSourceData = data ?? null;\r\n this._activeMorphTargetIndices = new Uint32Array(0);\r\n this._compactMorphData = false;\r\n this._morphDirty = true;\r\n if (!data) {\r\n this.setMorphData(null);\r\n this.setRenderMorphInfo(null);\r\n } else if (this._morphInfo) {\r\n this.setMorphData(null);\r\n this.setRenderMorphInfo(null);\r\n this.rebuildActiveMorphData();\r\n this._morphDirty = false;\r\n }\r\n }\r\n /**\r\n * Sets the buffer that contains the morph target information\r\n * @param info - The buffer that contains the morph target information\r\n */\r\n setMorphInfo(info: Nullable<MorphInfo>) {\r\n if (!info) {\r\n if (this._morphInfo) {\r\n this._morphInfo = null;\r\n }\r\n this.setMorphData(null);\r\n this.setRenderMorphInfo(null);\r\n this._activeMorphTargetIndices = new Uint32Array(0);\r\n this._compactMorphData = false;\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n } else {\r\n if (!this._morphInfo) {\r\n this._morphInfo = {} as MorphInfo;\r\n }\r\n const { data, declaredCount, supportedCount } = normalizeMorphInfoData(info.data);\r\n if (declaredCount !== supportedCount) {\r\n console.warn(\r\n `Morph target count truncated from ${declaredCount} to ${supportedCount} to fit the runtime buffer layout`\r\n );\r\n }\r\n const names: Record<string, number> = {};\r\n for (const [name, index] of Object.entries(info.names ?? {})) {\r\n if (Number.isInteger(index) && index >= 0 && index < supportedCount) {\r\n names[name] = index;\r\n }\r\n }\r\n this._morphInfo.data = data;\r\n this._morphInfo.names = names;\r\n this._morphDirty = true;\r\n if (this._morphSourceData) {\r\n this.setMorphData(null);\r\n this.setRenderMorphInfo(null);\r\n this.rebuildActiveMorphData();\r\n this._morphDirty = false;\r\n } else if (this._morphData) {\r\n this.setRenderMorphInfo(null);\r\n this.updateRenderMorphInfo(this.collectActiveMorphTargetIndices(), false);\r\n this._morphDirty = false;\r\n }\r\n this.refreshAnimatedBoundingBox();\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMorphInfo}\r\n */\r\n getMorphInfo() {\r\n return this._morphInfo;\r\n }\r\n /** @internal */\r\n getRenderMorphInfo() {\r\n return this._renderMorphInfo;\r\n }\r\n /** @internal */\r\n private setRenderMorphInfo(info: Nullable<MorphInfo>) {\r\n if (!info) {\r\n if (this._renderMorphInfo) {\r\n this._renderMorphInfo.buffer?.dispose();\r\n this._renderMorphInfo = null;\r\n }\r\n return;\r\n }\r\n if (!this._renderMorphInfo) {\r\n this._renderMorphInfo = {\r\n buffer: new DRef()\r\n } as MorphInfo;\r\n }\r\n this._renderMorphInfo.data = info.data;\r\n this._renderMorphInfo.names = info.names;\r\n if (!this._renderMorphInfo.buffer?.get()) {\r\n this._renderMorphInfo.buffer!.set(createMorphInfoBuffer(info.data as Float32Array));\r\n } else {\r\n this._renderMorphInfo.buffer!.get()!.bufferSubData(0, info.data);\r\n }\r\n }\r\n /** @internal */\r\n private collectActiveMorphTargetIndices(): Uint32Array<ArrayBuffer> {\r\n if (!this._morphInfo) {\r\n return new Uint32Array(0);\r\n }\r\n const count = this.getNumMorphTargets();\r\n const activeLimit = Math.min(getActiveMorphTargetLimit(), count);\r\n if (activeLimit <= 0) {\r\n return new Uint32Array(0);\r\n }\r\n const weighted = this._activeMorphCandidates;\r\n let weightedCount = 0;\r\n for (let i = 0; i < count; i++) {\r\n const weight = this._morphInfo.data[4 + i];\r\n if (Math.abs(weight) > ACTIVE_MORPH_WEIGHT_EPSILON) {\r\n const candidate = weighted[weightedCount] ?? { index: i, weight: 0 };\r\n candidate.index = i;\r\n candidate.weight = Math.abs(weight);\r\n weighted[weightedCount] = candidate;\r\n weightedCount++;\r\n }\r\n }\r\n weighted.length = weightedCount;\r\n let selectedCount = weightedCount;\r\n if (weightedCount > activeLimit) {\r\n weighted.sort((a, b) => b.weight - a.weight);\r\n selectedCount = activeLimit;\r\n }\r\n for (let i = 1; i < selectedCount; i++) {\r\n const candidate = weighted[i];\r\n let targetIndex = i;\r\n while (targetIndex > 0 && weighted[targetIndex - 1].index > candidate.index) {\r\n weighted[targetIndex] = weighted[targetIndex - 1];\r\n targetIndex--;\r\n }\r\n weighted[targetIndex] = candidate;\r\n }\r\n const activeIndices = new Uint32Array(selectedCount);\r\n for (let i = 0; i < selectedCount; i++) {\r\n activeIndices[i] = weighted[i].index;\r\n }\r\n return activeIndices;\r\n }\r\n /** @internal */\r\n private rebuildActiveMorphData() {\r\n if (!this._morphInfo || !this._morphSourceData) {\r\n this.setMorphData(null);\r\n this.setRenderMorphInfo(null);\r\n this._activeMorphTargetIndices = new Uint32Array(0);\r\n this._compactMorphData = false;\r\n return;\r\n }\r\n const activeIndices = this.collectActiveMorphTargetIndices();\r\n const sameActiveSet =\r\n this._activeMorphTargetIndices.length === activeIndices.length &&\r\n this._activeMorphTargetIndices.every((value, index) => value === activeIndices[index]);\r\n if (this._morphData && (!this._compactMorphData || sameActiveSet)) {\r\n this.updateRenderMorphInfo(activeIndices, this._compactMorphData);\r\n this._activeMorphTargetIndices = activeIndices;\r\n return;\r\n }\r\n const attributes = Object.keys(this._morphSourceData.targets)\r\n .map((key) => Number(key))\r\n .filter((value) => Number.isInteger(value) && value >= 0 && value < MORPH_ATTRIBUTE_CAPACITY)\r\n .sort((a, b) => a - b);\r\n const numVertices = this._morphSourceData.numVertices;\r\n const textureTargetCount = Math.min(this.getNumMorphTargets(), this._morphSourceData.numTargets);\r\n if (numVertices <= 0 || attributes.length === 0 || textureTargetCount <= 0) {\r\n this.setMorphData(null);\r\n this.setRenderMorphInfo(null);\r\n this._activeMorphTargetIndices = new Uint32Array(0);\r\n this._compactMorphData = false;\r\n return;\r\n }\r\n const maxTextureSize = getDevice().getDeviceCaps().textureCaps.maxTextureSize;\r\n const fullTextureSize = Math.ceil(Math.sqrt(numVertices * attributes.length * textureTargetCount));\r\n let textureTargetIndices: Uint32Array<ArrayBuffer>;\r\n if (fullTextureSize <= maxTextureSize) {\r\n textureTargetIndices = new Uint32Array(textureTargetCount);\r\n for (let i = 0; i < textureTargetCount; i++) {\r\n textureTargetIndices[i] = i;\r\n }\r\n this._compactMorphData = false;\r\n } else if (activeIndices.length > 0) {\r\n textureTargetIndices = activeIndices;\r\n this._compactMorphData = true;\r\n } else {\r\n this.setMorphData(null);\r\n this.setRenderMorphInfo(null);\r\n this._activeMorphTargetIndices = activeIndices;\r\n this._compactMorphData = true;\r\n return;\r\n }\r\n const textureSize = Math.ceil(Math.sqrt(numVertices * attributes.length * textureTargetIndices.length));\r\n if (textureSize > maxTextureSize) {\r\n console.warn(\r\n `Active morph target texture too large for mesh \"${this.name ?? ''}\": ${textureSize} exceeds device limit`\r\n );\r\n this.setMorphData(null);\r\n this.setRenderMorphInfo(null);\r\n this._activeMorphTargetIndices = new Uint32Array(0);\r\n return;\r\n }\r\n const textureData = new Float32Array(textureSize * textureSize * 4);\r\n const attributeOffsets = new Float32Array(MORPH_ATTRIBUTE_CAPACITY);\r\n for (let i = 0; i < MORPH_ATTRIBUTE_CAPACITY; i++) {\r\n attributeOffsets[i] = -1;\r\n }\r\n let offset = 0;\r\n for (const attrib of attributes) {\r\n const source = this._morphSourceData.targets[attrib];\r\n if (!source) {\r\n continue;\r\n }\r\n attributeOffsets[attrib] = offset >> 2;\r\n for (let slot = 0; slot < textureTargetIndices.length; slot++) {\r\n const targetIndex = textureTargetIndices[slot];\r\n const targetData = source.data[targetIndex];\r\n const sparseIndices = source.indices?.[targetIndex];\r\n const baseOffset = offset + slot * numVertices * 4;\r\n if (sparseIndices && targetData) {\r\n for (let i = 0; i < sparseIndices.length; i++) {\r\n const vertexOffset = baseOffset + sparseIndices[i] * 4;\r\n for (let j = 0; j < source.numComponents; j++) {\r\n textureData[vertexOffset + j] = targetData[i * source.numComponents + j];\r\n }\r\n }\r\n } else if (targetData) {\r\n for (let vertex = 0; vertex < numVertices; vertex++) {\r\n const vertexOffset = baseOffset + vertex * 4;\r\n for (let j = 0; j < source.numComponents; j++) {\r\n textureData[vertexOffset + j] = targetData[vertex * source.numComponents + j];\r\n }\r\n }\r\n }\r\n }\r\n offset += numVertices * 4 * textureTargetIndices.length;\r\n }\r\n this.setMorphData({ width: textureSize, height: textureSize, data: textureData });\r\n this.updateRenderMorphInfo(activeIndices, this._compactMorphData, attributeOffsets);\r\n this._activeMorphTargetIndices = activeIndices;\r\n }\r\n /** @internal */\r\n private updateRenderMorphInfo(\r\n activeIndices: Uint32Array<ArrayBuffer>,\r\n useCompactSlots: boolean,\r\n attributeOffsets?: Float32Array<ArrayBuffer>\r\n ) {\r\n if (!this._morphInfo || !this._morphData) {\r\n this.setRenderMorphInfo(null);\r\n return;\r\n }\r\n const infoData =\r\n this._renderMorphInfo?.data instanceof Float32Array &&\r\n this._renderMorphInfo.data.length === MORPH_RENDER_INFO_DATA_LENGTH\r\n ? this._renderMorphInfo.data\r\n : new Float32Array(MORPH_RENDER_INFO_DATA_LENGTH);\r\n infoData[0] = this._morphData.width;\r\n infoData[1] = this._morphData.height;\r\n infoData[2] = this._morphSourceData?.numVertices ?? (Number(this._morphInfo.data[2]) || 0);\r\n infoData[3] = activeIndices.length;\r\n infoData.fill(0, 4, MORPH_RENDER_ATTRIBUTE_OFFSET);\r\n for (let slot = 0; slot < activeIndices.length; slot++) {\r\n const targetIndex = activeIndices[slot];\r\n infoData[4 + slot] = this._morphInfo.data[4 + targetIndex];\r\n infoData[MORPH_RENDER_INDEX_OFFSET + slot] = useCompactSlots ? slot : targetIndex;\r\n }\r\n if (attributeOffsets) {\r\n infoData.fill(-1, MORPH_RENDER_ATTRIBUTE_OFFSET);\r\n infoData.set(attributeOffsets, MORPH_RENDER_ATTRIBUTE_OFFSET);\r\n } else if (!this._renderMorphInfo) {\r\n infoData.fill(-1, MORPH_RENDER_ATTRIBUTE_OFFSET);\r\n for (let attrib = 0; attrib < MORPH_ATTRIBUTE_CAPACITY; attrib++) {\r\n infoData[MORPH_RENDER_ATTRIBUTE_OFFSET + attrib] =\r\n this._morphInfo.data[4 + MORPH_WEIGHT_CAPACITY + attrib] ?? -1;\r\n }\r\n }\r\n this.setRenderMorphInfo({ data: infoData, names: this._renderMorphInfo?.names ?? {} });\r\n }\r\n /** @internal */\r\n resolveAnimatedBoundingBox(morphBoundingBox?: Nullable<BoundingBox>) {\r\n const skinnedBoundingBox =\r\n this._boneMatrices.get() && this._skinnedBoundingInfo?.boundingBox?.isValid()\r\n ? this._skinnedBoundingInfo.boundingBox\r\n : null;\r\n if (skinnedBoundingBox && morphBoundingBox) {\r\n // Skinning and morphing both active. The two boxes live in different\r\n // frames: the skinned box already reflects where the geometry actually\r\n // ended up, while the morph box is still expressed around the rest pose.\r\n // Unioning them therefore spans the gap between rest and posed positions\r\n // and produces a wildly oversized box - which is why that union was\r\n // removed. But dropping the morph side entirely loses the displacement,\r\n // since the skinned box is built from rest-pose representative vertices\r\n // (SkinBinding.computeBoundingBox) and never sees morph offsets - so a\r\n // large facial expression could reach outside its own bounds and be\r\n // culled.\r\n //\r\n // Transfer only what is frame-independent: the displacement. Clamped so\r\n // it can only grow the box, because a morph that pushes geometry one way\r\n // must not be allowed to shrink the opposite side.\r\n const box = skinnedBoundingBox.clone();\r\n const displacement = this.calculateMorphDisplacement();\r\n if (displacement) {\r\n const min = box.minPoint;\r\n const max = box.maxPoint;\r\n const dmin = displacement.minPoint;\r\n const dmax = displacement.maxPoint;\r\n min.setXYZ(min.x + Math.min(0, dmin.x), min.y + Math.min(0, dmin.y), min.z + Math.min(0, dmin.z));\r\n max.setXYZ(max.x + Math.max(0, dmax.x), max.y + Math.max(0, dmax.y), max.z + Math.max(0, dmax.z));\r\n }\r\n return box;\r\n }\r\n return skinnedBoundingBox?.clone() ?? morphBoundingBox ?? null;\r\n }\r\n /**\r\n * Get the number of morph targets\r\n *\r\n * @returns The number of morph targets\r\n */\r\n getNumMorphTargets(): number {\r\n return this._morphInfo ? Math.min(this._morphInfo.data[3], MORPH_WEIGHT_CAPACITY) : 0;\r\n }\r\n /**\r\n * Get the name of the morph target by index\r\n *\r\n * @param index - The index of the morph target\r\n * @returns The name of the morph target, or null if not found\r\n */\r\n getMorphTargetName(index: number): Nullable<string> {\r\n if (this._morphInfo && index >= 0 && index < this.getNumMorphTargets()) {\r\n const name = Object.keys(this._morphInfo.names).find((key) => this._morphInfo!.names![key] === index);\r\n return name ?? null;\r\n }\r\n return null;\r\n }\r\n /**\r\n * Get the index of the morph target by name\r\n * @param name - The name of the morph target\r\n * @returns The index of the morph target, or -1 if not found\r\n */\r\n getMorphTargetIndexByName(name: string): number {\r\n return this._morphInfo?.names?.[name] ?? -1;\r\n }\r\n /**\r\n * Update morph target weight\r\n *\r\n * @param name - The name of the morph target\r\n * @param weight - The weight of the morph target\r\n */\r\n setMorphWeight(name: string, weight: number) {\r\n const index = this.getMorphTargetIndexByName(name);\r\n if (index >= 0) {\r\n this.setMorphWeightByIndex(index, weight);\r\n }\r\n }\r\n /**\r\n * Update morph target weight by index\r\n *\r\n * @param index - The index of the morph target\r\n * @param weight - The weight of the morph target\r\n */\r\n setMorphWeightByIndex(index: number, weight: number) {\r\n if (index >= 0 && index < this.getNumMorphTargets()) {\r\n const normalizedWeight = Math.fround(weight);\r\n if (this._morphInfo!.data[4 + index] !== normalizedWeight) {\r\n this._morphInfo!.data[4 + index] = normalizedWeight;\r\n this._morphDirty = true;\r\n this.refreshAnimatedBoundingBox();\r\n this.scene!.queueUpdateNode(this);\r\n }\r\n } else {\r\n console.warn(`Morph target index out of range: ${index}`);\r\n }\r\n }\r\n /**\r\n * Get morph target weight\r\n *\r\n * @param name - The name of the morph target\r\n * @returns The weight of the morph target, or 0 if not found\r\n */\r\n getMorphWeight(name: string): number {\r\n const index = this._morphInfo?.names?.[name];\r\n if (index !== undefined && index >= 0 && index < this.getNumMorphTargets()) {\r\n return this._morphInfo!.data[4 + index];\r\n }\r\n return 0;\r\n }\r\n /**\r\n * Update morph target weights\r\n *\r\n * @param weight - The morph target weights. The length must not exceed the mesh's morph target count.\r\n */\r\n updateMorphWeights(weight: ArrayLike<number>) {\r\n if (this._morphInfo && weight && weight.length <= this.getNumMorphTargets()) {\r\n let changed = false;\r\n for (let i = 0; i < weight.length; i++) {\r\n const normalizedWeight = Math.fround(weight[i] ?? 0);\r\n if (this._morphInfo.data[4 + i] !== normalizedWeight) {\r\n this._morphInfo.data[4 + i] = normalizedWeight;\r\n changed = true;\r\n }\r\n }\r\n if (!changed) {\r\n return;\r\n }\r\n this._morphDirty = true;\r\n this.refreshAnimatedBoundingBox();\r\n this.scene!.queueUpdateNode(this);\r\n }\r\n }\r\n /** {@inheritDoc SceneNode.update} */\r\n update(frameId: number, elapsedInSeconds: number, deltaInSeconds: number) {\r\n super.update(frameId, elapsedInSeconds, deltaInSeconds);\r\n this.updateSkeletonState();\r\n this.updateMorphState();\r\n if (this._postUpdateCallbacks.size > 0) {\r\n for (const callback of this._postUpdateCallbacks) {\r\n callback(frameId, elapsedInSeconds, deltaInSeconds);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n addPostUpdateCallback(callback: MeshUpdateCallback) {\r\n if (callback) {\r\n this._postUpdateCallbacks.add(callback);\r\n }\r\n }\r\n /** @internal */\r\n removePostUpdateCallback(callback: MeshUpdateCallback) {\r\n if (callback) {\r\n this._postUpdateCallbacks.delete(callback);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Drawable.isBatchable}\r\n */\r\n isBatchable(): this is BatchDrawable {\r\n return (\r\n this._batchable &&\r\n !this._boneMatrices.get() &&\r\n !this._morphData &&\r\n (this._material.get()?.isBatchable() ?? false)\r\n );\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getQueueType}\r\n */\r\n getQueueType() {\r\n return this.material?.getQueueType() ?? QUEUE_OPAQUE;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.isUnlit}\r\n */\r\n isUnlit() {\r\n return !this.material?.supportLighting();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.needSceneColor}\r\n */\r\n needSceneColor() {\r\n return this.material?.needSceneColor() ?? false;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.needSceneDepth}\r\n */\r\n needSceneDepth() {\r\n return this.material?.needSceneDepth() ?? false;\r\n }\r\n /** @internal */\r\n /**\r\n * Weighted morph displacement, relative to the rest pose - i.e. how far the\r\n * active morph targets push geometry beyond `originBox`, not where that\r\n * geometry ends up.\r\n *\r\n * Kept separate from {@link calculateMorphBoundingBox} because the two are\r\n * useful in different frames of reference: the absolute box is meaningful for\r\n * an unskinned mesh, while for a skinned one only the displacement transfers -\r\n * the rest-space position is superseded by the skinning result.\r\n *\r\n * @internal\r\n */\r\n private calculateMorphDisplacement(): Nullable<BoundingBox> {\r\n if (!this._morphInfo || !this._morphBoundingInfo) {\r\n return null;\r\n }\r\n const numTargets = Math.min(this.getNumMorphTargets(), this._morphBoundingInfo.targetBoxes.length);\r\n if (numTargets <= 0) {\r\n return null;\r\n }\r\n const weights =\r\n this._morphInfo.data instanceof Float32Array\r\n ? this._morphInfo.data.subarray(4, 4 + numTargets)\r\n : new Float32Array(Array.from(this._morphInfo.data.subarray(4, 4 + numTargets)));\r\n const bbox = new BoundingBox();\r\n calculateMorphBoundingBox(bbox, this._morphBoundingInfo.targetBoxes, weights, numTargets);\r\n return bbox;\r\n }\r\n /** @internal */\r\n private calculateMorphBoundingBox(): Nullable<BoundingBox> {\r\n const bbox = this.calculateMorphDisplacement();\r\n if (!bbox) {\r\n return null;\r\n }\r\n bbox.minPoint.addBy(this._morphBoundingInfo!.originBox.minPoint);\r\n bbox.maxPoint.addBy(this._morphBoundingInfo!.originBox.maxPoint);\r\n return bbox;\r\n }\r\n /** @internal */\r\n private refreshAnimatedBoundingBox() {\r\n this.setAnimatedBoundingBox(this.resolveAnimatedBoundingBox(this.calculateMorphBoundingBox()));\r\n }\r\n /** @internal */\r\n private updateMorphState() {\r\n if (this._morphInfo && this._morphDirty) {\r\n if (this._morphSourceData) {\r\n this.rebuildActiveMorphData();\r\n } else if (this._morphData) {\r\n const activeIndices = this.collectActiveMorphTargetIndices();\r\n this.updateRenderMorphInfo(activeIndices, false);\r\n this._activeMorphTargetIndices = activeIndices;\r\n }\r\n this.refreshAnimatedBoundingBox();\r\n this._morphDirty = false;\r\n }\r\n }\r\n /** @internal */\r\n private updateSkeletonState() {\r\n if (this._suspendSkinning) {\r\n this.setBoneMatrices(null);\r\n this.setAnimatedBoundingBox(null);\r\n return;\r\n }\r\n const binding = this._skinBindingName && this.findSkinBindingById(this._skinBindingName);\r\n if (binding) {\r\n this.setBoneMatrices(binding.jointTexture);\r\n binding.computeBoundingBox(this._skinnedBoundingInfo!, this.invWorldMatrix);\r\n this.refreshAnimatedBoundingBox();\r\n } else {\r\n this.setBoneMatrices(null);\r\n this.refreshAnimatedBoundingBox();\r\n }\r\n if (this._skinBindingName) {\r\n this.scene!.queueUpdateNode(this);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Drawable.draw}\r\n */\r\n draw(ctx: DrawContext, renderQueue: Nullable<RenderQueue>, hash?: string) {\r\n const material = this.material;\r\n const primitive = this.primitive;\r\n if (material && primitive) {\r\n if (this._useRenderBundle && !ctx.instanceData && hash) {\r\n if (\r\n this._primitiveChangeTag !== primitive.changeTag ||\r\n this._materialChangeTag !== material.changeTag\r\n ) {\r\n this._renderBundle = {};\r\n this._primitiveChangeTag = primitive.changeTag;\r\n this._materialChangeTag = material.changeTag;\r\n }\r\n const renderBundle = this._renderBundle![hash];\r\n if (!renderBundle) {\r\n ctx.device.beginCapture();\r\n this.bind(ctx, renderQueue);\r\n material.draw(primitive, ctx);\r\n this._renderBundle![hash] = ctx.device.endCapture();\r\n } else {\r\n ctx.device.executeRenderBundle(renderBundle);\r\n }\r\n } else {\r\n this.bind(ctx, renderQueue);\r\n material.draw(primitive, ctx);\r\n }\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMaterial}\r\n */\r\n getMaterial() {\r\n return this.material;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getPrimitive}\r\n */\r\n getPrimitive() {\r\n return this.primitive;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getBoneMatrices}\r\n */\r\n getBoneMatrices() {\r\n return this._boneMatrices.get();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getNode}\r\n */\r\n getNode() {\r\n // mesh transform should be ignored when skinned\r\n return this;\r\n }\r\n /** @internal */\r\n computeBoundingVolume() {\r\n let bbox: Nullable<BoundingVolume>;\r\n if (this._animatedBoundingBox) {\r\n bbox = this._animatedBoundingBox;\r\n } else {\r\n bbox = this._primitive.get()?.getBoundingVolume() ?? null;\r\n }\r\n return bbox;\r\n }\r\n /** Disposes the mesh node */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._primitive.get()?.off('bv_changed', this._onBoundingboxChange, this);\r\n this._primitive.dispose();\r\n this._material.dispose();\r\n this._boneMatrices.dispose();\r\n this.setSkinInfluenceData(null);\r\n this.setMorphData(null);\r\n this.setRenderMorphInfo(null);\r\n this.setMorphInfo(null);\r\n this.setMorphSourceData(null);\r\n this.setMorphBoundingInfo(null);\r\n this._renderBundle = null;\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n /** @internal */\r\n private _onBoundingboxChange() {\r\n this.invalidateBoundingVolume();\r\n }\r\n /** @internal */\r\n private _ensureWebGLVertexIndexAttribute(feature: 'morphing' | 'skinning') {\r\n const primitive = this._primitive.get();\r\n if (!primitive || getDevice().type !== 'webgl') {\r\n return;\r\n }\r\n if (primitive.getVertexBuffer('texCoord7')) {\r\n return;\r\n }\r\n const numVertices = primitive.getNumVertices();\r\n if (numVertices <= 0) {\r\n return;\r\n }\r\n const vertexIndices = new Float32Array(numVertices);\r\n for (let i = 0; i < numVertices; i++) {\r\n vertexIndices[i] = i;\r\n }\r\n primitive.createAndSetVertexBuffer('tex7_f32', vertexIndices);\r\n console.info(`Injected texCoord7 vertex indices for WebGL ${feature} on mesh \"${this.name ?? ''}\"`);\r\n }\r\n /** @internal */\r\n private static _defaultMaterial: Nullable<MeshMaterial> = null;\r\n /** @internal */\r\n private static _getDefaultMaterial() {\r\n if (!this._defaultMaterial) {\r\n this._defaultMaterial = new LambertMaterial();\r\n }\r\n return this._defaultMaterial;\r\n }\r\n}\r\n"],"names":["MORPH_WEIGHT_CAPACITY","MORPH_WEIGHTS_VECTOR_COUNT","MORPH_ATTRIBUTE_CAPACITY","MORPH_ATTRIBUTE_VECTOR_COUNT","MORPH_INFO_DATA_LENGTH","MORPH_RENDER_INDEX_OFFSET","MORPH_RENDER_ATTRIBUTE_OFFSET","MORPH_RENDER_INFO_DATA_LENGTH","ACTIVE_MORPH_WEIGHT_EPSILON","normalizeMorphInfoData","data","normalized","Float32Array","i","set","subarray","Math","min","length","declaredCount","max","floor","Number","supportedCount","getMorphTargetLimit","createMorphInfoBuffer","bufferData","bufferType","PBStructTypeInfo","name","ShaderHelper","getMorphInfoUniformName","type","PBArrayTypeInfo","PBPrimitiveTypeInfo","PBPrimitiveType","F32VEC4","getDevice","createStructuredBuffer","usage","MeshBase","castObservable","applyMixins","GraphNode","mixinDrawable","Mesh","scene","primitive","material","_primitive","DRef","_material","_castShadow","_skinnedBoundingInfo","_animatedBoundingBox","_boneMatrices","_skinInfluenceData","_morphData","_morphInfo","_renderMorphInfo","_morphBoundingInfo","_morphSource","_morphSourceData","_activeMorphTargetIndices","Uint32Array","_compactMorphData","_activeMorphCandidates","_morphDirty","_instanceHash","_pickTarget","node","_batchable","_getDefaultMaterial","_suspendSkinning","_skinBindingName","_renderBundle","_useRenderBundle","_materialChangeTag","_primitiveChangeTag","_postUpdateCallbacks","Set","getInstanceId","_renderPass","worldMatrixDet","getInstanceUniforms","get","$instanceUniforms","getPickTarget","setPickTarget","label","useRenderBundle","val","skeletonName","skinBindingName","updateSkeletonState","skinnedBoundingInfo","suspendSkinning","castShadow","b","prim","currentPrimitive","off","_onBoundingboxChange","on","_scene","id","instanceId","invalidateBoundingVolume","RenderBundleWrapper","drawableChanged","_ensureWebGLVertexIndexAttribute","influenceCount","dispatchEvent","m","materialAttached","coreMaterial","isMesh","setAnimatedBoundingBox","bbox","getAnimatedBoundingBox","setMorphBoundingInfo","info","targetBoxes","map","box","clone","originBox","refreshAnimatedBoundingBox","getMorphBoundingInfo","setBoneMatrices","matrices","setSkinInfluenceData","texture","dispose","width","height","slice","tex","createTexture2D","mipmapping","samplerOptions","minFilter","magFilter","mipFilter","update","setMorphData","updateRenderMorphInfo","collectActiveMorphTargetIndices","setSkinnedBoundingInfo","getMorphData","getSkinInfluenceData","getMorphSource","setMorphSource","source","getMorphSourceData","setMorphSourceData","setRenderMorphInfo","rebuildActiveMorphData","setMorphInfo","console","warn","names","index","Object","entries","isInteger","getMorphInfo","getRenderMorphInfo","buffer","bufferSubData","count","getNumMorphTargets","activeLimit","getActiveMorphTargetLimit","weighted","weightedCount","weight","abs","candidate","selectedCount","sort","a","targetIndex","activeIndices","sameActiveSet","every","value","attributes","keys","targets","key","filter","numVertices","textureTargetCount","numTargets","maxTextureSize","getDeviceCaps","textureCaps","fullTextureSize","ceil","sqrt","textureTargetIndices","textureSize","textureData","attributeOffsets","offset","attrib","slot","targetData","sparseIndices","indices","baseOffset","vertexOffset","j","numComponents","vertex","useCompactSlots","infoData","fill","resolveAnimatedBoundingBox","morphBoundingBox","skinnedBoundingBox","boundingBox","isValid","displacement","calculateMorphDisplacement","minPoint","maxPoint","dmin","dmax","setXYZ","x","y","z","getMorphTargetName","find","getMorphTargetIndexByName","setMorphWeight","setMorphWeightByIndex","normalizedWeight","fround","queueUpdateNode","getMorphWeight","undefined","updateMorphWeights","changed","frameId","elapsedInSeconds","deltaInSeconds","updateMorphState","size","callback","addPostUpdateCallback","add","removePostUpdateCallback","delete","isBatchable","getQueueType","QUEUE_OPAQUE","isUnlit","supportLighting","needSceneColor","needSceneDepth","weights","Array","from","BoundingBox","calculateMorphBoundingBox","addBy","binding","findSkinBindingById","jointTexture","computeBoundingBox","invWorldMatrix","draw","ctx","renderQueue","hash","instanceData","changeTag","renderBundle","device","beginCapture","bind","endCapture","executeRenderBundle","getMaterial","getPrimitive","getBoneMatrices","getNode","computeBoundingVolume","getBoundingVolume","onDispose","feature","getVertexBuffer","getNumVertices","vertexIndices","createAndSetVertexBuffer","_defaultMaterial","LambertMaterial"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mesh.js","sources":["../../src/scene/mesh.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\nimport { applyMixins, castObservable, DRef, DWeakRef, Matrix4x4, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport { isWireframeActive } from '../render/debug_views';\r\nimport { GraphNode } from './graph_node';\r\nimport type { MeshMaterial } from '../material';\r\nimport { LambertMaterial, ShaderHelper } from '../material';\r\nimport type {\r\n RenderPass,\r\n Primitive,\r\n BatchDrawable,\r\n DrawContext,\r\n PickTarget,\r\n MorphData,\r\n MorphInfo,\r\n SkinInfluenceData,\r\n RenderQueue\r\n} from '../render';\r\nimport {\r\n PBArrayTypeInfo,\r\n PBPrimitiveType,\r\n PBPrimitiveTypeInfo,\r\n PBStructTypeInfo,\r\n type RenderBundle,\r\n type Texture2D\r\n} from '@zephyr3d/device';\r\nimport type { Scene } from './scene';\r\nimport { BoundingBox, type BoundingVolume } from '../utility/bounding_volume';\r\nimport {\r\n getActiveMorphTargetLimit,\r\n getMorphTargetLimit,\r\n MORPH_ATTRIBUTE_VECTOR_COUNT,\r\n MORPH_WEIGHTS_VECTOR_COUNT,\r\n QUEUE_OPAQUE,\r\n RENDER_PASS_TYPE_LIGHT\r\n} from '../values';\r\nimport { mixinDrawable } from '../render/drawable_mixin';\r\nimport { RenderBundleWrapper } from '../render/renderbundle_wrapper';\r\nimport type { SceneNode } from './scene_node';\r\nimport { getDevice } from '../app/api';\r\nimport type { SkinBinding, SkinnedBoundingBox } from '../animation';\r\nimport { calculateMorphBoundingBox } from '../animation/morphtarget';\r\nimport { SkinPaletteAtlas } from '../animation/skin_palette_atlas';\r\nimport type { Camera } from '../camera/camera';\r\nimport { computeAABBScreenRadiusSquared, selectLod } from '../render/lod';\r\n\r\nconst tmpLodCenter = new Vector3();\r\n\r\nconst LOD_COLORATION_COLORS: [number, number, number][] = [\r\n [1, 1, 1],\r\n [1, 0, 0],\r\n [0, 1, 0],\r\n [0, 0, 1],\r\n [1, 1, 0],\r\n [1, 0, 1],\r\n [0, 1, 1],\r\n [0.5, 0, 0.5]\r\n];\r\n\r\n/**\r\n * Callback invoked after a mesh finishes its per-frame update.\r\n *\r\n * @public\r\n */\r\n/**\r\n * How a mesh takes part in the scene's signed distance field.\r\n *\r\n * - `auto`: `dynamic` when the mesh or a node above it has a non-static rigid\r\n * body or a character controller, or the mesh is skinned or morphed;\r\n * `static` otherwise.\r\n * - `none`: left out.\r\n * - `static`: baked into the cached global field; moving it rebuilds the region.\r\n * - `dynamic`: queried at its current transform every frame.\r\n *\r\n * @public\r\n */\r\nexport type MeshSDFMode = 'auto' | 'none' | 'static' | 'dynamic';\r\n\r\nexport type MeshUpdateCallback = (frameId: number, elapsedInSeconds: number, deltaInSeconds: number) => void;\r\n\r\n/**\r\n * A skinning palette that skins a mesh in place of its skin binding's.\r\n *\r\n * @internal\r\n */\r\nexport interface SkinPaletteOverride {\r\n /** Slot index of the palette header in the skin palette atlas */\r\n readonly paletteBase: number;\r\n /** Bounds of the skinned mesh in its local space, or null to use the primitive's */\r\n readonly boundingBox: Nullable<BoundingBox>;\r\n /** Writer of the palette, told when another palette replaces it on the mesh */\r\n readonly owner?: { detachMesh(mesh: Mesh): void };\r\n}\r\n\r\n/**\r\n * Bounding data used to update a mesh's local bounding box after morph target weights change.\r\n *\r\n * @public\r\n */\r\nexport interface MorphBoundingInfo {\r\n targetBoxes: BoundingBox[];\r\n originBox: BoundingBox;\r\n}\r\n\r\n/**\r\n * External source descriptor used to rebuild morph target data on demand.\r\n *\r\n * @public\r\n */\r\nexport interface MorphSourceDescriptor {\r\n sourcePath: string;\r\n nodePath: string;\r\n subMeshName: string;\r\n}\r\n\r\n/**\r\n * CPU-side morph target source data used to rebuild GPU morph textures on demand.\r\n *\r\n * @public\r\n */\r\nexport interface MorphTargetSourceData {\r\n numTargets: number;\r\n numVertices: number;\r\n targets: Partial<Record<number, { numComponents: number; data: Float32Array[]; indices?: Uint32Array[] }>>;\r\n}\r\n\r\nconst MORPH_WEIGHT_CAPACITY = MORPH_WEIGHTS_VECTOR_COUNT * 4;\r\nconst MORPH_ATTRIBUTE_CAPACITY = MORPH_ATTRIBUTE_VECTOR_COUNT * 4;\r\nconst MORPH_INFO_DATA_LENGTH = 4 + MORPH_WEIGHT_CAPACITY + MORPH_ATTRIBUTE_CAPACITY;\r\nconst MORPH_RENDER_INDEX_OFFSET = 4 + MORPH_WEIGHT_CAPACITY;\r\nconst MORPH_RENDER_ATTRIBUTE_OFFSET = MORPH_RENDER_INDEX_OFFSET + MORPH_WEIGHT_CAPACITY;\r\nconst MORPH_RENDER_INFO_DATA_LENGTH = MORPH_RENDER_ATTRIBUTE_OFFSET + MORPH_ATTRIBUTE_CAPACITY;\r\nconst ACTIVE_MORPH_WEIGHT_EPSILON = 1e-5;\r\n\r\nfunction normalizeMorphInfoData(data: MorphInfo['data']) {\r\n const normalized = new Float32Array(MORPH_INFO_DATA_LENGTH);\r\n for (let i = 0; i < MORPH_ATTRIBUTE_CAPACITY; i++) {\r\n normalized[4 + MORPH_WEIGHT_CAPACITY + i] = -1;\r\n }\r\n normalized.set(data.subarray(0, Math.min(data.length, normalized.length)));\r\n const declaredCount = Math.max(0, Math.floor(Number(normalized[3]) || 0));\r\n const supportedCount = Math.min(\r\n declaredCount,\r\n getMorphTargetLimit(),\r\n MORPH_WEIGHT_CAPACITY,\r\n Math.max(0, data.length - 4)\r\n );\r\n normalized[3] = supportedCount;\r\n return {\r\n data: normalized,\r\n declaredCount,\r\n supportedCount\r\n };\r\n}\r\n\r\nfunction createMorphInfoBuffer(data: Float32Array) {\r\n const bufferData = new Float32Array(data);\r\n const bufferType = new PBStructTypeInfo('dummy', 'std140', [\r\n {\r\n name: ShaderHelper.getMorphInfoUniformName(),\r\n type: new PBArrayTypeInfo(\r\n new PBPrimitiveTypeInfo(PBPrimitiveType.F32VEC4),\r\n 1 + MORPH_WEIGHTS_VECTOR_COUNT * 2 + MORPH_ATTRIBUTE_VECTOR_COUNT\r\n )\r\n }\r\n ]);\r\n return getDevice().createStructuredBuffer(\r\n bufferType,\r\n {\r\n usage: 'uniform'\r\n },\r\n bufferData\r\n );\r\n}\r\n\r\nconst MeshBase = castObservable(applyMixins(GraphNode, mixinDrawable))<{\r\n primitive_changed: [primitive: Nullable<Primitive>];\r\n material_changed: [material: Nullable<MeshMaterial>];\r\n /** forcedLod or minLod changed */\r\n lod_changed: [mesh: Mesh];\r\n sdfmode_changed: [mesh: Mesh];\r\n}>();\r\n\r\n/**\r\n * Mesh node\r\n * @public\r\n */\r\nexport class Mesh extends MeshBase implements BatchDrawable {\r\n /** @internal */\r\n private readonly _primitive: DRef<Primitive>;\r\n /** @internal */\r\n private readonly _material: DRef<MeshMaterial>;\r\n /** @internal */\r\n protected _castShadow: boolean;\r\n /** @internal */\r\n protected _sdfMode: MeshSDFMode;\r\n /** @internal */\r\n protected _skinnedBoundingInfo: Nullable<SkinnedBoundingBox>;\r\n /** @internal */\r\n protected _animatedBoundingBox: Nullable<BoundingBox>;\r\n /** @internal */\r\n protected _skinBindingName: string;\r\n /** @internal */\r\n protected _boneMatrices: DRef<Texture2D>;\r\n /** @internal Skin binding resolved from _skinBindingName at the last skeleton state update */\r\n protected _skinBinding: DWeakRef<SkinBinding>;\r\n /** @internal */\r\n protected readonly _skinSpaceMatrix: Matrix4x4;\r\n /** @internal Skin binding and palette version the skinned bounds were last computed for */\r\n protected _skinnedBoundsVersion: { binding: Nullable<SkinBinding>; version: number };\r\n /** @internal Palette written by an animation bank track in place of the skin binding's */\r\n protected _skinPaletteOverride: Nullable<SkinPaletteOverride>;\r\n /** Palette base last written to instance data and drawable uniforms */\r\n private _appliedSkinPaletteBase: number;\r\n /** @internal */\r\n protected _skinInfluenceData: Nullable<SkinInfluenceData>;\r\n /** @internal */\r\n protected _morphData: Nullable<MorphData>;\r\n /** @internal */\r\n protected _morphInfo: Nullable<MorphInfo>;\r\n /** @internal */\r\n protected _renderMorphInfo: Nullable<MorphInfo>;\r\n /** @internal */\r\n protected _morphBoundingInfo: Nullable<MorphBoundingInfo>;\r\n /** @internal */\r\n protected _morphSource: Nullable<MorphSourceDescriptor>;\r\n /** @internal */\r\n protected _morphSourceData: Nullable<MorphTargetSourceData>;\r\n /** @internal */\r\n protected _activeMorphTargetIndices: Uint32Array<ArrayBuffer>;\r\n /** @internal */\r\n protected _compactMorphData: boolean;\r\n /** @internal */\r\n protected _activeMorphCandidates: { index: number; weight: number }[];\r\n /** @internal */\r\n protected _morphDirty: boolean;\r\n /** @internal */\r\n protected _instanceHash: Nullable<string>;\r\n /** @internal */\r\n protected _batchable: boolean;\r\n /** @internal */\r\n protected _pickTarget: PickTarget;\r\n /** @internal */\r\n protected _suspendSkinning: boolean;\r\n /** @internal */\r\n protected _renderBundle: Nullable<Record<string, RenderBundle>>;\r\n /** @internal */\r\n protected _useRenderBundle: boolean;\r\n /** @internal */\r\n protected _materialChangeTag: Nullable<number>;\r\n /** @internal */\r\n protected _primitiveChangeTag: Nullable<number>;\r\n /** @internal */\r\n protected _postUpdateCallbacks: Set<MeshUpdateCallback>;\r\n /** @internal */\r\n protected _forcedLod: number;\r\n /** @internal */\r\n protected _minLod: number;\r\n /** @internal Level of detail last selected for each camera, for the hysteresis */\r\n protected _lodByCamera: Nullable<WeakMap<Camera, number>>;\r\n /**\r\n * Creates an instance of mesh node\r\n * @param scene - The scene to which the mesh node belongs\r\n */\r\n constructor(scene: Scene, primitive?: Primitive, material?: MeshMaterial) {\r\n super(scene);\r\n this._primitive = new DRef();\r\n this._material = new DRef();\r\n this._castShadow = true;\r\n this._sdfMode = 'auto';\r\n this._skinnedBoundingInfo = null;\r\n this._animatedBoundingBox = null;\r\n this._boneMatrices = new DRef();\r\n this._skinBinding = new DWeakRef();\r\n this._skinSpaceMatrix = new Matrix4x4();\r\n this._skinPaletteOverride = null;\r\n this._appliedSkinPaletteBase = 0;\r\n this._skinnedBoundsVersion = { binding: null, version: -1 };\r\n this._skinInfluenceData = null;\r\n this._morphData = null;\r\n this._morphInfo = null;\r\n this._renderMorphInfo = null;\r\n this._morphBoundingInfo = null;\r\n this._morphSource = null;\r\n this._morphSourceData = null;\r\n this._activeMorphTargetIndices = new Uint32Array(0);\r\n this._compactMorphData = false;\r\n this._activeMorphCandidates = [];\r\n this._morphDirty = false;\r\n this._instanceHash = null;\r\n this._pickTarget = { node: this };\r\n this._batchable = true;\r\n this.primitive = primitive ?? null;\r\n this.material = material ?? Mesh._getDefaultMaterial();\r\n this._suspendSkinning = false;\r\n this._skinBindingName = '';\r\n this._renderBundle = {};\r\n this._useRenderBundle = true;\r\n this._materialChangeTag = null;\r\n this._primitiveChangeTag = null;\r\n this._postUpdateCallbacks = new Set();\r\n this._forcedLod = -1;\r\n this._minLod = 0;\r\n this._lodByCamera = null;\r\n }\r\n /**\r\n * Returns the batch instance ID for the current render pass.\r\n */\r\n getInstanceId(_renderPass: RenderPass) {\r\n const id = `${this._instanceHash}:${this.worldMatrixDet >= 0}`;\r\n return this._boneMatrices.get() ? `${id}:skin:${this.getSkinSpaceKey()}` : id;\r\n }\r\n /**\r\n * Key of the skin space matrix, equal for meshes that may share one in a batch.\r\n *\r\n * @remarks\r\n * A batch transforms the palettes of all its instances by the skin space matrix of its first\r\n * mesh. Instances of one model share it up to rounding, so the key is quantized.\r\n */\r\n private getSkinSpaceKey() {\r\n const m = this.getSkinSpaceMatrix();\r\n let key = '';\r\n for (let i = 0; i < 16; i++) {\r\n key += `${Math.round(m[i] * 1e4)},`;\r\n }\r\n return key;\r\n }\r\n /**\r\n * Returns the packed instance-uniform buffer used for batching.\r\n */\r\n getInstanceUniforms() {\r\n return this._material.get()!.$instanceUniforms;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getPickTarget }\r\n */\r\n getPickTarget() {\r\n return this._pickTarget;\r\n }\r\n setPickTarget(node: SceneNode, label?: string) {\r\n this._pickTarget = { node, label };\r\n }\r\n get useRenderBundle() {\r\n return this._useRenderBundle;\r\n }\r\n set useRenderBundle(val) {\r\n this._useRenderBundle = val;\r\n }\r\n get skeletonName() {\r\n return this._skinBindingName;\r\n }\r\n set skeletonName(name) {\r\n this.skinBindingName = name;\r\n }\r\n get skinBindingName() {\r\n return this._skinBindingName;\r\n }\r\n set skinBindingName(name) {\r\n if (name !== this._skinBindingName) {\r\n this._skinBindingName = name;\r\n this.updateSkeletonState();\r\n }\r\n }\r\n /** @internal */\r\n get skinnedBoundingInfo() {\r\n return this._skinnedBoundingInfo;\r\n }\r\n /** @internal */\r\n get suspendSkinning() {\r\n return this._suspendSkinning;\r\n }\r\n /** @internal */\r\n set suspendSkinning(val) {\r\n if (val && !this._suspendSkinning) {\r\n this.setAnimatedBoundingBox(null);\r\n } else if (!val && this._suspendSkinning) {\r\n // Skinned meshes sleep until their pose changes, so wake this one to pick skinning up again\r\n this.scene?.queueUpdateNode(this);\r\n }\r\n this._suspendSkinning = !!val;\r\n }\r\n /** Wether the mesh node casts shadows */\r\n get castShadow() {\r\n return this._castShadow;\r\n }\r\n set castShadow(b) {\r\n this._castShadow = b;\r\n }\r\n /** How the mesh takes part in the scene's signed distance field. */\r\n get sdfMode() {\r\n return this._sdfMode;\r\n }\r\n set sdfMode(val: MeshSDFMode) {\r\n if (val !== this._sdfMode) {\r\n this._sdfMode = val;\r\n this.dispatchEvent('sdfmode_changed', this);\r\n }\r\n }\r\n /** {@link Mesh.sdfMode} with `auto` resolved. */\r\n get effectiveSDFMode(): Exclude<MeshSDFMode, 'auto'> {\r\n if (this._sdfMode !== 'auto') {\r\n return this._sdfMode;\r\n }\r\n if (this._skinBindingName || this._morphData) {\r\n return 'dynamic';\r\n }\r\n for (let node: Nullable<SceneNode> = this; node; node = node.parent) {\r\n const physics = node.physics;\r\n const body = physics?.body;\r\n if ((body && body.motionType !== 'static') || physics?.character) {\r\n return 'dynamic';\r\n }\r\n }\r\n return 'static';\r\n }\r\n /**\r\n * Level of detail to always draw, or -1 to select it by the projected size.\r\n * Clamped to the levels of the primitive.\r\n */\r\n get forcedLod() {\r\n return this._forcedLod;\r\n }\r\n set forcedLod(val: number) {\r\n val = Math.max(-1, Math.floor(val));\r\n if (val !== this._forcedLod) {\r\n this._forcedLod = val;\r\n this.dispatchEvent('lod_changed', this);\r\n }\r\n }\r\n /**\r\n * Finest level of detail drawn when selecting by the projected size.\r\n * Clamped to the levels of the primitive.\r\n */\r\n get minLod() {\r\n return this._minLod;\r\n }\r\n set minLod(val: number) {\r\n val = Math.max(0, Math.floor(val));\r\n if (val !== this._minLod) {\r\n this._minLod = val;\r\n this.dispatchEvent('lod_changed', this);\r\n }\r\n }\r\n /**\r\n * Selects the level of detail of the primitive for a view: forced, or picked from the projected\r\n * size of the world bounds. Always 0 for a primitive without levels.\r\n *\r\n * @param camera - The view's camera\r\n * @returns The level of detail, 0 being the finest\r\n */\r\n selectLod(camera: Camera) {\r\n const lods = this._primitive.get()?.lods;\r\n if (!lods || lods.length === 0) {\r\n return 0;\r\n }\r\n if (this._forcedLod >= 0) {\r\n return Math.min(this._forcedLod, lods.length);\r\n }\r\n const bv = this.getWorldBoundingVolume();\r\n if (!bv) {\r\n return Math.min(this._minLod, lods.length);\r\n }\r\n const screenRadiusSquared = computeAABBScreenRadiusSquared(bv.toAABB(), camera, tmpLodCenter);\r\n if (!this._lodByCamera) {\r\n this._lodByCamera = new WeakMap();\r\n }\r\n const lod = selectLod(\r\n lods,\r\n screenRadiusSquared,\r\n camera.lodDistanceScale,\r\n this._lodByCamera.get(camera) ?? 0,\r\n this._minLod\r\n );\r\n this._lodByCamera.set(camera, lod);\r\n return lod;\r\n }\r\n /** Primitive of the mesh */\r\n get primitive() {\r\n return this._primitive?.get() ?? null;\r\n }\r\n set primitive(prim) {\r\n const currentPrimitive = this._primitive.get();\r\n if (prim !== currentPrimitive) {\r\n if (currentPrimitive) {\r\n currentPrimitive.off('bv_changed', this._onBoundingboxChange, this);\r\n }\r\n this._primitive.set(prim);\r\n if (prim) {\r\n prim.on('bv_changed', this._onBoundingboxChange, this);\r\n }\r\n this._instanceHash =\r\n prim && this._material.get()\r\n ? `${this.constructor.name}:${this._scene!.id}:${prim.id}:${this._material.get()!.instanceId}`\r\n : null;\r\n this.invalidateBoundingVolume();\r\n RenderBundleWrapper.drawableChanged(this);\r\n this._primitiveChangeTag = null;\r\n this.dispatchEvent('primitive_changed', prim);\r\n }\r\n }\r\n /** Material of the mesh */\r\n get material() {\r\n return this._material?.get() ?? null;\r\n }\r\n set material(m) {\r\n if (this._material.get() !== m) {\r\n this._material.set(m);\r\n if (m) {\r\n RenderBundleWrapper.materialAttached(m.coreMaterial, this);\r\n }\r\n this._instanceHash =\r\n this._primitive.get() && m\r\n ? `${this.constructor.name}:${this._scene?.id ?? 0}:${this._primitive.get()!.id}:${m.instanceId}`\r\n : null;\r\n RenderBundleWrapper.drawableChanged(this);\r\n this._materialChangeTag = null;\r\n this.dispatchEvent('material_changed', m);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc SceneNode.isMesh}\r\n */\r\n isMesh(): this is Mesh {\r\n return true;\r\n }\r\n /**\r\n * Sets the bounding box for animation\r\n * @param bbox - The bounding box for animation\r\n */\r\n setAnimatedBoundingBox(bbox: Nullable<BoundingBox>) {\r\n this._animatedBoundingBox = bbox;\r\n this.invalidateBoundingVolume();\r\n }\r\n /**\r\n * Gets the bounding box for animation\r\n */\r\n getAnimatedBoundingBox() {\r\n return this._animatedBoundingBox ?? null;\r\n }\r\n /**\r\n * Sets morph target bounding data used to update the animated bounding box when weights change.\r\n * @param info - Morph target bounding data\r\n */\r\n setMorphBoundingInfo(info: Nullable<MorphBoundingInfo>) {\r\n this._morphBoundingInfo = info\r\n ? {\r\n targetBoxes: info.targetBoxes.map((box) => box.clone()),\r\n originBox: info.originBox.clone()\r\n }\r\n : null;\r\n this.refreshAnimatedBoundingBox();\r\n }\r\n /**\r\n * Gets morph target bounding data.\r\n */\r\n getMorphBoundingInfo() {\r\n return this._morphBoundingInfo;\r\n }\r\n /**\r\n * Sets the texture that contains the bone matrices for skeletal animation\r\n * @param matrices - The texture that contains the bone matrices\r\n */\r\n setBoneMatrices(matrices: Nullable<Texture2D>) {\r\n if (this._boneMatrices.get() !== matrices) {\r\n this._boneMatrices.set(matrices);\r\n Mesh._trackBoneMatrices(this, !!matrices);\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n }\r\n /**\r\n * Sets additional per-vertex skinning influences packed in a texture.\r\n * The first 4 influences remain in the vertex attributes; this payload stores the remainder.\r\n * @param data - Extra influence texture payload, or null to clear it\r\n */\r\n setSkinInfluenceData(data: Nullable<SkinInfluenceData>) {\r\n if (!data) {\r\n if (this._skinInfluenceData) {\r\n this._skinInfluenceData.texture?.get()?.dispose();\r\n this._skinInfluenceData = null;\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n return;\r\n }\r\n if (!this._skinInfluenceData) {\r\n this._skinInfluenceData = {\r\n texture: new DRef(),\r\n width: 0,\r\n height: 0,\r\n influenceCount: 4,\r\n data: new Float32Array(0)\r\n };\r\n }\r\n this._skinInfluenceData.width = data.width;\r\n this._skinInfluenceData.height = data.height;\r\n this._skinInfluenceData.influenceCount = data.influenceCount;\r\n this._skinInfluenceData.data = data.data.slice();\r\n if (data.texture?.get()) {\r\n this._skinInfluenceData.texture!.set(data.texture.get());\r\n } else {\r\n let tex = this._skinInfluenceData.texture?.get() ?? null;\r\n if (!tex || tex.width !== data.width || tex.height !== data.height) {\r\n tex?.dispose();\r\n tex = getDevice().createTexture2D('rgba32f', data.width, data.height, {\r\n mipmapping: false,\r\n samplerOptions: {\r\n minFilter: 'nearest',\r\n magFilter: 'nearest',\r\n mipFilter: 'none'\r\n }\r\n })!;\r\n this._skinInfluenceData.texture!.set(tex);\r\n }\r\n tex.update(data.data, 0, 0, data.width, data.height);\r\n }\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n /**\r\n * Sets the texture that contains the morph target data\r\n * @param data - The texture that contains the morph target data\r\n */\r\n setMorphData(data: Nullable<MorphData>) {\r\n if (!data) {\r\n if (this._morphData) {\r\n this._morphData.texture?.get()?.dispose();\r\n this._morphData = null;\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n } else {\r\n if (!this._morphData) {\r\n this._morphData = {\r\n texture: new DRef()\r\n } as MorphData;\r\n }\r\n this._morphData.width = data.width;\r\n this._morphData.height = data.height;\r\n this._morphData.data = data.data.slice();\r\n if (data.texture?.get()) {\r\n this._morphData.texture!.set(data.texture.get());\r\n } else {\r\n let tex = this._morphData.texture?.get() ?? null;\r\n if (!tex || tex.width !== data.width || tex.height !== data.height) {\r\n tex?.dispose();\r\n tex = getDevice().createTexture2D('rgba32f', data.width, data.height, {\r\n mipmapping: false,\r\n samplerOptions: {\r\n minFilter: 'nearest',\r\n magFilter: 'nearest',\r\n mipFilter: 'none'\r\n }\r\n })!;\r\n this._morphData.texture!.set(tex);\r\n }\r\n tex.update(data.data, 0, 0, data.width, data.height);\r\n }\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n if (this._morphInfo && !this._morphSourceData) {\r\n this.updateRenderMorphInfo(this.collectActiveMorphTargetIndices(), false);\r\n }\r\n }\r\n }\r\n /**\r\n * Sets the skinned bounding info\r\n * @param info - The skinned bounding info\r\n */\r\n setSkinnedBoundingInfo(info: Nullable<SkinnedBoundingBox>) {\r\n this._skinnedBoundingInfo = info;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMorphData}\r\n */\r\n getMorphData() {\r\n return this._morphData;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getSkinInfluenceData}\r\n */\r\n getSkinInfluenceData() {\r\n return this._skinInfluenceData;\r\n }\r\n /**\r\n * Gets the slot index of the skinning palette header in the bone matrix texture.\r\n *\r\n * @internal\r\n */\r\n getSkinPaletteBase() {\r\n return this._skinPaletteOverride?.paletteBase ?? this._skinBinding.get()?.paletteBase ?? 0;\r\n }\r\n /**\r\n * Gets the palette that skins this mesh in place of its skin binding's, if any.\r\n *\r\n * @internal\r\n */\r\n getSkinPaletteOverride() {\r\n return this._skinPaletteOverride;\r\n }\r\n /**\r\n * Skins this mesh by a palette written elsewhere instead of by its skin binding.\r\n *\r\n * @remarks\r\n * The palette must be laid out like the binding's: same joints, relative to the same\r\n * reference node. The mesh then neither reads the binding's palette nor computes its bounds\r\n * from the binding's joints each frame; the override supplies its animated bounds.\r\n *\r\n * @param override - The palette and bounds, or null to skin by the binding again\r\n * @internal\r\n */\r\n setSkinPaletteOverride(override: Nullable<SkinPaletteOverride>) {\r\n this._skinPaletteOverride = override;\r\n this.updateSkeletonState();\r\n }\r\n /**\r\n * Gets the matrix transforming skinning palette output to the local space of this mesh.\r\n *\r\n * @remarks\r\n * Palette matrices are relative to the reference node of the skin binding, so this is\r\n * `inverse(worldMatrix) * referenceNode.worldMatrix`.\r\n *\r\n * @param binding - Skin binding the palette belongs to. Defaults to the binding last resolved\r\n * for this mesh, which is not resolved yet before the first update after deserialization,\r\n * since the children of a node are deserialized before its skin bindings\r\n * @internal\r\n */\r\n getSkinSpaceMatrix(binding?: Nullable<SkinBinding>): Matrix4x4 {\r\n const reference = (binding ?? this._skinBinding.get())?.referenceNode;\r\n if (reference) {\r\n Matrix4x4.multiplyAffine(this.invWorldMatrix, reference.worldMatrix, this._skinSpaceMatrix);\r\n } else {\r\n this._skinSpaceMatrix.set(this.invWorldMatrix);\r\n }\r\n return this._skinSpaceMatrix;\r\n }\r\n /**\r\n * Gets the external morph source descriptor.\r\n */\r\n getMorphSource() {\r\n return this._morphSource;\r\n }\r\n /**\r\n * Sets the external morph source descriptor.\r\n * @param source - The morph source descriptor\r\n */\r\n setMorphSource(source: Nullable<MorphSourceDescriptor>) {\r\n this._morphSource = source ? { ...source } : null;\r\n }\r\n /**\r\n * Gets the CPU-side morph source data.\r\n */\r\n getMorphSourceData() {\r\n return this._morphSourceData;\r\n }\r\n /**\r\n * Sets the CPU-side morph source data used to rebuild GPU morph textures on demand.\r\n */\r\n setMorphSourceData(data: Nullable<MorphTargetSourceData>) {\r\n this._morphSourceData = data ?? null;\r\n this._activeMorphTargetIndices = new Uint32Array(0);\r\n this._compactMorphData = false;\r\n this._morphDirty = true;\r\n if (!data) {\r\n this.setMorphData(null);\r\n this.setRenderMorphInfo(null);\r\n } else if (this._morphInfo) {\r\n this.setMorphData(null);\r\n this.setRenderMorphInfo(null);\r\n this.rebuildActiveMorphData();\r\n this._morphDirty = false;\r\n }\r\n }\r\n /**\r\n * Sets the buffer that contains the morph target information\r\n * @param info - The buffer that contains the morph target information\r\n */\r\n setMorphInfo(info: Nullable<MorphInfo>) {\r\n if (!info) {\r\n if (this._morphInfo) {\r\n this._morphInfo = null;\r\n }\r\n this.setMorphData(null);\r\n this.setRenderMorphInfo(null);\r\n this._activeMorphTargetIndices = new Uint32Array(0);\r\n this._compactMorphData = false;\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n } else {\r\n if (!this._morphInfo) {\r\n this._morphInfo = {} as MorphInfo;\r\n }\r\n const { data, declaredCount, supportedCount } = normalizeMorphInfoData(info.data);\r\n if (declaredCount !== supportedCount) {\r\n console.warn(\r\n `Morph target count truncated from ${declaredCount} to ${supportedCount} to fit the runtime buffer layout`\r\n );\r\n }\r\n const names: Record<string, number> = {};\r\n for (const [name, index] of Object.entries(info.names ?? {})) {\r\n if (Number.isInteger(index) && index >= 0 && index < supportedCount) {\r\n names[name] = index;\r\n }\r\n }\r\n this._morphInfo.data = data;\r\n this._morphInfo.names = names;\r\n this._morphDirty = true;\r\n if (this._morphSourceData) {\r\n this.setMorphData(null);\r\n this.setRenderMorphInfo(null);\r\n this.rebuildActiveMorphData();\r\n this._morphDirty = false;\r\n } else if (this._morphData) {\r\n this.setRenderMorphInfo(null);\r\n this.updateRenderMorphInfo(this.collectActiveMorphTargetIndices(), false);\r\n this._morphDirty = false;\r\n }\r\n this.refreshAnimatedBoundingBox();\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMorphInfo}\r\n */\r\n getMorphInfo() {\r\n return this._morphInfo;\r\n }\r\n /** @internal */\r\n getRenderMorphInfo() {\r\n return this._renderMorphInfo;\r\n }\r\n /** @internal */\r\n private setRenderMorphInfo(info: Nullable<MorphInfo>) {\r\n if (!info) {\r\n if (this._renderMorphInfo) {\r\n this._renderMorphInfo.buffer?.dispose();\r\n this._renderMorphInfo = null;\r\n }\r\n return;\r\n }\r\n if (!this._renderMorphInfo) {\r\n this._renderMorphInfo = {\r\n buffer: new DRef()\r\n } as MorphInfo;\r\n }\r\n this._renderMorphInfo.data = info.data;\r\n this._renderMorphInfo.names = info.names;\r\n if (!this._renderMorphInfo.buffer?.get()) {\r\n this._renderMorphInfo.buffer!.set(createMorphInfoBuffer(info.data as Float32Array));\r\n } else {\r\n this._renderMorphInfo.buffer!.get()!.bufferSubData(0, info.data);\r\n }\r\n }\r\n /** @internal */\r\n private collectActiveMorphTargetIndices(): Uint32Array<ArrayBuffer> {\r\n if (!this._morphInfo) {\r\n return new Uint32Array(0);\r\n }\r\n const count = this.getNumMorphTargets();\r\n const activeLimit = Math.min(getActiveMorphTargetLimit(), count);\r\n if (activeLimit <= 0) {\r\n return new Uint32Array(0);\r\n }\r\n const weighted = this._activeMorphCandidates;\r\n let weightedCount = 0;\r\n for (let i = 0; i < count; i++) {\r\n const weight = this._morphInfo.data[4 + i];\r\n if (Math.abs(weight) > ACTIVE_MORPH_WEIGHT_EPSILON) {\r\n const candidate = weighted[weightedCount] ?? { index: i, weight: 0 };\r\n candidate.index = i;\r\n candidate.weight = Math.abs(weight);\r\n weighted[weightedCount] = candidate;\r\n weightedCount++;\r\n }\r\n }\r\n weighted.length = weightedCount;\r\n let selectedCount = weightedCount;\r\n if (weightedCount > activeLimit) {\r\n weighted.sort((a, b) => b.weight - a.weight);\r\n selectedCount = activeLimit;\r\n }\r\n for (let i = 1; i < selectedCount; i++) {\r\n const candidate = weighted[i];\r\n let targetIndex = i;\r\n while (targetIndex > 0 && weighted[targetIndex - 1].index > candidate.index) {\r\n weighted[targetIndex] = weighted[targetIndex - 1];\r\n targetIndex--;\r\n }\r\n weighted[targetIndex] = candidate;\r\n }\r\n const activeIndices = new Uint32Array(selectedCount);\r\n for (let i = 0; i < selectedCount; i++) {\r\n activeIndices[i] = weighted[i].index;\r\n }\r\n return activeIndices;\r\n }\r\n /** @internal */\r\n private rebuildActiveMorphData() {\r\n if (!this._morphInfo || !this._morphSourceData) {\r\n this.setMorphData(null);\r\n this.setRenderMorphInfo(null);\r\n this._activeMorphTargetIndices = new Uint32Array(0);\r\n this._compactMorphData = false;\r\n return;\r\n }\r\n const activeIndices = this.collectActiveMorphTargetIndices();\r\n const sameActiveSet =\r\n this._activeMorphTargetIndices.length === activeIndices.length &&\r\n this._activeMorphTargetIndices.every((value, index) => value === activeIndices[index]);\r\n if (this._morphData && (!this._compactMorphData || sameActiveSet)) {\r\n this.updateRenderMorphInfo(activeIndices, this._compactMorphData);\r\n this._activeMorphTargetIndices = activeIndices;\r\n return;\r\n }\r\n const attributes = Object.keys(this._morphSourceData.targets)\r\n .map((key) => Number(key))\r\n .filter((value) => Number.isInteger(value) && value >= 0 && value < MORPH_ATTRIBUTE_CAPACITY)\r\n .sort((a, b) => a - b);\r\n const numVertices = this._morphSourceData.numVertices;\r\n const textureTargetCount = Math.min(this.getNumMorphTargets(), this._morphSourceData.numTargets);\r\n if (numVertices <= 0 || attributes.length === 0 || textureTargetCount <= 0) {\r\n this.setMorphData(null);\r\n this.setRenderMorphInfo(null);\r\n this._activeMorphTargetIndices = new Uint32Array(0);\r\n this._compactMorphData = false;\r\n return;\r\n }\r\n const maxTextureSize = getDevice().getDeviceCaps().textureCaps.maxTextureSize;\r\n const fullTextureSize = Math.ceil(Math.sqrt(numVertices * attributes.length * textureTargetCount));\r\n let textureTargetIndices: Uint32Array<ArrayBuffer>;\r\n if (fullTextureSize <= maxTextureSize) {\r\n textureTargetIndices = new Uint32Array(textureTargetCount);\r\n for (let i = 0; i < textureTargetCount; i++) {\r\n textureTargetIndices[i] = i;\r\n }\r\n this._compactMorphData = false;\r\n } else if (activeIndices.length > 0) {\r\n textureTargetIndices = activeIndices;\r\n this._compactMorphData = true;\r\n } else {\r\n this.setMorphData(null);\r\n this.setRenderMorphInfo(null);\r\n this._activeMorphTargetIndices = activeIndices;\r\n this._compactMorphData = true;\r\n return;\r\n }\r\n const textureSize = Math.ceil(Math.sqrt(numVertices * attributes.length * textureTargetIndices.length));\r\n if (textureSize > maxTextureSize) {\r\n console.warn(\r\n `Active morph target texture too large for mesh \"${this.name ?? ''}\": ${textureSize} exceeds device limit`\r\n );\r\n this.setMorphData(null);\r\n this.setRenderMorphInfo(null);\r\n this._activeMorphTargetIndices = new Uint32Array(0);\r\n return;\r\n }\r\n const textureData = new Float32Array(textureSize * textureSize * 4);\r\n const attributeOffsets = new Float32Array(MORPH_ATTRIBUTE_CAPACITY);\r\n for (let i = 0; i < MORPH_ATTRIBUTE_CAPACITY; i++) {\r\n attributeOffsets[i] = -1;\r\n }\r\n let offset = 0;\r\n for (const attrib of attributes) {\r\n const source = this._morphSourceData.targets[attrib];\r\n if (!source) {\r\n continue;\r\n }\r\n attributeOffsets[attrib] = offset >> 2;\r\n for (let slot = 0; slot < textureTargetIndices.length; slot++) {\r\n const targetIndex = textureTargetIndices[slot];\r\n const targetData = source.data[targetIndex];\r\n const sparseIndices = source.indices?.[targetIndex];\r\n const baseOffset = offset + slot * numVertices * 4;\r\n if (sparseIndices && targetData) {\r\n for (let i = 0; i < sparseIndices.length; i++) {\r\n const vertexOffset = baseOffset + sparseIndices[i] * 4;\r\n for (let j = 0; j < source.numComponents; j++) {\r\n textureData[vertexOffset + j] = targetData[i * source.numComponents + j];\r\n }\r\n }\r\n } else if (targetData) {\r\n for (let vertex = 0; vertex < numVertices; vertex++) {\r\n const vertexOffset = baseOffset + vertex * 4;\r\n for (let j = 0; j < source.numComponents; j++) {\r\n textureData[vertexOffset + j] = targetData[vertex * source.numComponents + j];\r\n }\r\n }\r\n }\r\n }\r\n offset += numVertices * 4 * textureTargetIndices.length;\r\n }\r\n this.setMorphData({ width: textureSize, height: textureSize, data: textureData });\r\n this.updateRenderMorphInfo(activeIndices, this._compactMorphData, attributeOffsets);\r\n this._activeMorphTargetIndices = activeIndices;\r\n }\r\n /** @internal */\r\n private updateRenderMorphInfo(\r\n activeIndices: Uint32Array<ArrayBuffer>,\r\n useCompactSlots: boolean,\r\n attributeOffsets?: Float32Array<ArrayBuffer>\r\n ) {\r\n if (!this._morphInfo || !this._morphData) {\r\n this.setRenderMorphInfo(null);\r\n return;\r\n }\r\n const infoData =\r\n this._renderMorphInfo?.data instanceof Float32Array &&\r\n this._renderMorphInfo.data.length === MORPH_RENDER_INFO_DATA_LENGTH\r\n ? this._renderMorphInfo.data\r\n : new Float32Array(MORPH_RENDER_INFO_DATA_LENGTH);\r\n infoData[0] = this._morphData.width;\r\n infoData[1] = this._morphData.height;\r\n infoData[2] = this._morphSourceData?.numVertices ?? (Number(this._morphInfo.data[2]) || 0);\r\n infoData[3] = activeIndices.length;\r\n infoData.fill(0, 4, MORPH_RENDER_ATTRIBUTE_OFFSET);\r\n for (let slot = 0; slot < activeIndices.length; slot++) {\r\n const targetIndex = activeIndices[slot];\r\n infoData[4 + slot] = this._morphInfo.data[4 + targetIndex];\r\n infoData[MORPH_RENDER_INDEX_OFFSET + slot] = useCompactSlots ? slot : targetIndex;\r\n }\r\n if (attributeOffsets) {\r\n infoData.fill(-1, MORPH_RENDER_ATTRIBUTE_OFFSET);\r\n infoData.set(attributeOffsets, MORPH_RENDER_ATTRIBUTE_OFFSET);\r\n } else if (!this._renderMorphInfo) {\r\n infoData.fill(-1, MORPH_RENDER_ATTRIBUTE_OFFSET);\r\n for (let attrib = 0; attrib < MORPH_ATTRIBUTE_CAPACITY; attrib++) {\r\n infoData[MORPH_RENDER_ATTRIBUTE_OFFSET + attrib] =\r\n this._morphInfo.data[4 + MORPH_WEIGHT_CAPACITY + attrib] ?? -1;\r\n }\r\n }\r\n this.setRenderMorphInfo({ data: infoData, names: this._renderMorphInfo?.names ?? {} });\r\n }\r\n /** @internal */\r\n resolveAnimatedBoundingBox(morphBoundingBox?: Nullable<BoundingBox>) {\r\n const skinnedBoundingBox = !this._boneMatrices.get()\r\n ? null\r\n : this._skinPaletteOverride\r\n ? this._skinPaletteOverride.boundingBox\r\n : this._skinnedBoundingInfo?.boundingBox?.isValid()\r\n ? this._skinnedBoundingInfo.boundingBox\r\n : null;\r\n if (skinnedBoundingBox && morphBoundingBox) {\r\n // Skinning and morphing both active. The two boxes live in different\r\n // frames: the skinned box already reflects where the geometry actually\r\n // ended up, while the morph box is still expressed around the rest pose.\r\n // Unioning them therefore spans the gap between rest and posed positions\r\n // and produces a wildly oversized box - which is why that union was\r\n // removed. But dropping the morph side entirely loses the displacement,\r\n // since the skinned box is built from rest-pose representative vertices\r\n // (SkinBinding.computeBoundingBox) and never sees morph offsets - so a\r\n // large facial expression could reach outside its own bounds and be\r\n // culled.\r\n //\r\n // Transfer only what is frame-independent: the displacement. Clamped so\r\n // it can only grow the box, because a morph that pushes geometry one way\r\n // must not be allowed to shrink the opposite side.\r\n const box = skinnedBoundingBox.clone();\r\n const displacement = this.calculateMorphDisplacement();\r\n if (displacement) {\r\n const min = box.minPoint;\r\n const max = box.maxPoint;\r\n const dmin = displacement.minPoint;\r\n const dmax = displacement.maxPoint;\r\n min.setXYZ(min.x + Math.min(0, dmin.x), min.y + Math.min(0, dmin.y), min.z + Math.min(0, dmin.z));\r\n max.setXYZ(max.x + Math.max(0, dmax.x), max.y + Math.max(0, dmax.y), max.z + Math.max(0, dmax.z));\r\n }\r\n return box;\r\n }\r\n return skinnedBoundingBox?.clone() ?? morphBoundingBox ?? null;\r\n }\r\n /**\r\n * Get the number of morph targets\r\n *\r\n * @returns The number of morph targets\r\n */\r\n getNumMorphTargets(): number {\r\n return this._morphInfo ? Math.min(this._morphInfo.data[3], MORPH_WEIGHT_CAPACITY) : 0;\r\n }\r\n /**\r\n * Get the name of the morph target by index\r\n *\r\n * @param index - The index of the morph target\r\n * @returns The name of the morph target, or null if not found\r\n */\r\n getMorphTargetName(index: number): Nullable<string> {\r\n if (this._morphInfo && index >= 0 && index < this.getNumMorphTargets()) {\r\n const name = Object.keys(this._morphInfo.names).find((key) => this._morphInfo!.names![key] === index);\r\n return name ?? null;\r\n }\r\n return null;\r\n }\r\n /**\r\n * Get the index of the morph target by name\r\n * @param name - The name of the morph target\r\n * @returns The index of the morph target, or -1 if not found\r\n */\r\n getMorphTargetIndexByName(name: string): number {\r\n return this._morphInfo?.names?.[name] ?? -1;\r\n }\r\n /**\r\n * Update morph target weight\r\n *\r\n * @param name - The name of the morph target\r\n * @param weight - The weight of the morph target\r\n */\r\n setMorphWeight(name: string, weight: number) {\r\n const index = this.getMorphTargetIndexByName(name);\r\n if (index >= 0) {\r\n this.setMorphWeightByIndex(index, weight);\r\n }\r\n }\r\n /**\r\n * Update morph target weight by index\r\n *\r\n * @param index - The index of the morph target\r\n * @param weight - The weight of the morph target\r\n */\r\n setMorphWeightByIndex(index: number, weight: number) {\r\n if (index >= 0 && index < this.getNumMorphTargets()) {\r\n const normalizedWeight = Math.fround(weight);\r\n if (this._morphInfo!.data[4 + index] !== normalizedWeight) {\r\n this._morphInfo!.data[4 + index] = normalizedWeight;\r\n this._morphDirty = true;\r\n this.refreshAnimatedBoundingBox();\r\n this.scene!.queueUpdateNode(this);\r\n }\r\n } else {\r\n console.warn(`Morph target index out of range: ${index}`);\r\n }\r\n }\r\n /**\r\n * Get morph target weight\r\n *\r\n * @param name - The name of the morph target\r\n * @returns The weight of the morph target, or 0 if not found\r\n */\r\n getMorphWeight(name: string): number {\r\n const index = this._morphInfo?.names?.[name];\r\n if (index !== undefined && index >= 0 && index < this.getNumMorphTargets()) {\r\n return this._morphInfo!.data[4 + index];\r\n }\r\n return 0;\r\n }\r\n /**\r\n * Update morph target weights\r\n *\r\n * @param weight - The morph target weights. The length must not exceed the mesh's morph target count.\r\n */\r\n updateMorphWeights(weight: ArrayLike<number>) {\r\n if (this._morphInfo && weight && weight.length <= this.getNumMorphTargets()) {\r\n let changed = false;\r\n for (let i = 0; i < weight.length; i++) {\r\n const normalizedWeight = Math.fround(weight[i] ?? 0);\r\n if (this._morphInfo.data[4 + i] !== normalizedWeight) {\r\n this._morphInfo.data[4 + i] = normalizedWeight;\r\n changed = true;\r\n }\r\n }\r\n if (!changed) {\r\n return;\r\n }\r\n this._morphDirty = true;\r\n this.refreshAnimatedBoundingBox();\r\n this.scene!.queueUpdateNode(this);\r\n }\r\n }\r\n /** {@inheritDoc SceneNode.update} */\r\n update(frameId: number, elapsedInSeconds: number, deltaInSeconds: number) {\r\n super.update(frameId, elapsedInSeconds, deltaInSeconds);\r\n this.updateSkeletonState();\r\n this.updateMorphState();\r\n if (this._postUpdateCallbacks.size > 0) {\r\n for (const callback of this._postUpdateCallbacks) {\r\n callback(frameId, elapsedInSeconds, deltaInSeconds);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n addPostUpdateCallback(callback: MeshUpdateCallback) {\r\n if (callback) {\r\n this._postUpdateCallbacks.add(callback);\r\n this.scene?.queueUpdateNode(this);\r\n }\r\n }\r\n /** @internal */\r\n removePostUpdateCallback(callback: MeshUpdateCallback) {\r\n if (callback) {\r\n this._postUpdateCallbacks.delete(callback);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Drawable.isBatchable}\r\n */\r\n isBatchable(): this is BatchDrawable {\r\n return (\r\n this._batchable &&\r\n !this._morphData &&\r\n // Extra skin influences are read from a texture of each mesh, which a batch cannot vary\r\n !(this._boneMatrices.get() && (this._skinInfluenceData?.influenceCount ?? 4) > 4) &&\r\n (this._material.get()?.isBatchable() ?? false)\r\n );\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getQueueType}\r\n */\r\n getQueueType() {\r\n return this.material?.getQueueType() ?? QUEUE_OPAQUE;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.isUnlit}\r\n */\r\n isUnlit() {\r\n return !this.material?.supportLighting();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.needSceneColor}\r\n */\r\n needSceneColor() {\r\n return this.material?.needSceneColor() ?? false;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.needSceneDepth}\r\n */\r\n needSceneDepth() {\r\n return this.material?.needSceneDepth() ?? false;\r\n }\r\n /** @internal */\r\n /**\r\n * Weighted morph displacement, relative to the rest pose - i.e. how far the\r\n * active morph targets push geometry beyond `originBox`, not where that\r\n * geometry ends up.\r\n *\r\n * Kept separate from {@link calculateMorphBoundingBox} because the two are\r\n * useful in different frames of reference: the absolute box is meaningful for\r\n * an unskinned mesh, while for a skinned one only the displacement transfers -\r\n * the rest-space position is superseded by the skinning result.\r\n *\r\n * @internal\r\n */\r\n private calculateMorphDisplacement(): Nullable<BoundingBox> {\r\n if (!this._morphInfo || !this._morphBoundingInfo) {\r\n return null;\r\n }\r\n const numTargets = Math.min(this.getNumMorphTargets(), this._morphBoundingInfo.targetBoxes.length);\r\n if (numTargets <= 0) {\r\n return null;\r\n }\r\n const weights =\r\n this._morphInfo.data instanceof Float32Array\r\n ? this._morphInfo.data.subarray(4, 4 + numTargets)\r\n : new Float32Array(Array.from(this._morphInfo.data.subarray(4, 4 + numTargets)));\r\n const bbox = new BoundingBox();\r\n calculateMorphBoundingBox(bbox, this._morphBoundingInfo.targetBoxes, weights, numTargets);\r\n return bbox;\r\n }\r\n /** @internal */\r\n private calculateMorphBoundingBox(): Nullable<BoundingBox> {\r\n const bbox = this.calculateMorphDisplacement();\r\n if (!bbox) {\r\n return null;\r\n }\r\n bbox.minPoint.addBy(this._morphBoundingInfo!.originBox.minPoint);\r\n bbox.maxPoint.addBy(this._morphBoundingInfo!.originBox.maxPoint);\r\n return bbox;\r\n }\r\n /** @internal */\r\n private refreshAnimatedBoundingBox() {\r\n this.setAnimatedBoundingBox(this.resolveAnimatedBoundingBox(this.calculateMorphBoundingBox()));\r\n }\r\n /** @internal */\r\n private updateMorphState() {\r\n if (this._morphInfo && this._morphDirty) {\r\n if (this._morphSourceData) {\r\n this.rebuildActiveMorphData();\r\n } else if (this._morphData) {\r\n const activeIndices = this.collectActiveMorphTargetIndices();\r\n this.updateRenderMorphInfo(activeIndices, false);\r\n this._activeMorphTargetIndices = activeIndices;\r\n }\r\n this.refreshAnimatedBoundingBox();\r\n this._morphDirty = false;\r\n }\r\n }\r\n /** @internal */\r\n private updateSkeletonState() {\r\n if (this._suspendSkinning) {\r\n if (this._skinnedBoundsVersion) {\r\n this._skinnedBoundsVersion.binding = null;\r\n }\r\n this.setBoneMatrices(null);\r\n return;\r\n }\r\n // Looking a binding up walks the model, so the one found last time is kept while it matches\r\n const cached = this._skinBinding.get();\r\n const binding =\r\n this._skinBindingName &&\r\n (cached && !cached.disposed && cached.persistentId === this._skinBindingName\r\n ? cached\r\n : this.findSkinBindingById(this._skinBindingName));\r\n this._skinBinding.set(binding || null);\r\n const paletteBase = this.getSkinPaletteBase();\r\n if (paletteBase !== this._appliedSkinPaletteBase) {\r\n // Instance data and drawable uniforms hold the palette base and are not rewritten every\r\n // frame; it changes with the binding, with palette overrides, and with a binding's palette\r\n // being allocated again after a suspension\r\n this._appliedSkinPaletteBase = paletteBase;\r\n this.applyTransformUniformsAll();\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n if (binding) {\r\n this.setBoneMatrices(binding.jointTexture);\r\n const bounds = this._skinnedBoundsVersion;\r\n if (this._skinPaletteOverride) {\r\n bounds.binding = null;\r\n this.refreshAnimatedBoundingBox();\r\n } else if (bounds.binding !== binding || bounds.version !== binding.paletteVersion) {\r\n // Bounds follow the pose, which only changes with the joint matrices\r\n bounds.binding = binding;\r\n bounds.version = binding.paletteVersion;\r\n binding.computeBoundingBox(this._skinnedBoundingInfo!, this.getSkinSpaceMatrix(binding));\r\n this.refreshAnimatedBoundingBox();\r\n }\r\n } else {\r\n this._skinnedBoundsVersion.binding = null;\r\n this.setBoneMatrices(null);\r\n this.refreshAnimatedBoundingBox();\r\n }\r\n // Bounds of an overriding palette only change when the override is set again, and bounds\r\n // of the binding's palette when its pose does, which wakes the mesh up\r\n if (this._postUpdateCallbacks.size > 0 || (this._skinBindingName && !binding)) {\r\n // Post update callbacks (GPU cloth) run every frame, and the binding may not be loaded yet\r\n this.scene?.queueUpdateNode(this);\r\n } else if (binding && !this._skinPaletteOverride) {\r\n binding.sleepUntilPoseChanges(this);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Drawable.draw}\r\n */\r\n draw(ctx: DrawContext, renderQueue: Nullable<RenderQueue>, hash?: string) {\r\n const ownMaterial = this.material;\r\n const solid = this.primitive;\r\n if (ownMaterial && solid) {\r\n const coloration = this.getLodColorationMaterial(ctx);\r\n // Render passes apply the materials of their item lists before drawing, which the\r\n // coloration material is not part of\r\n if (coloration && !coloration.apply(ctx)) {\r\n return;\r\n }\r\n const material = coloration ?? ownMaterial;\r\n const primitive = solid;\r\n // Edges of a wireframe view are built asynchronously, a bundle recorded before would keep\r\n // drawing the triangles\r\n if (this._useRenderBundle && !ctx.instanceData && hash && !isWireframeActive()) {\r\n // Each level of detail records its own draw range\r\n const lod = ctx.primitiveLod ?? 0;\r\n if (lod > 0) {\r\n hash = `${hash}:lod${lod}`;\r\n }\r\n if (coloration) {\r\n hash = `${hash}:lodcolor`;\r\n }\r\n if (\r\n this._primitiveChangeTag !== solid.changeTag ||\r\n this._materialChangeTag !== ownMaterial.changeTag\r\n ) {\r\n this._renderBundle = {};\r\n this._primitiveChangeTag = solid.changeTag;\r\n this._materialChangeTag = ownMaterial.changeTag;\r\n }\r\n const renderBundle = this._renderBundle![hash];\r\n if (!renderBundle) {\r\n ctx.device.beginCapture();\r\n this.bind(ctx, renderQueue);\r\n material.draw(primitive, ctx);\r\n this._renderBundle![hash] = ctx.device.endCapture();\r\n } else {\r\n ctx.device.executeRenderBundle(renderBundle);\r\n }\r\n } else {\r\n this.bind(ctx, renderQueue);\r\n material.draw(primitive, ctx);\r\n }\r\n }\r\n }\r\n /**\r\n * The material shading the level of detail in its color in the light pass\r\n * of a camera showing it, null otherwise. Depth, shadow and picking passes keep the\r\n * mesh's own material.\r\n * @internal\r\n */\r\n private getLodColorationMaterial(ctx: DrawContext) {\r\n if (!ctx.camera?.lodColoration || ctx.renderPass?.type !== RENDER_PASS_TYPE_LIGHT) {\r\n return null;\r\n }\r\n const lod = Math.min(ctx.primitiveLod ?? 0, LOD_COLORATION_COLORS.length - 1);\r\n let material = Mesh._lodColorationMaterials[lod];\r\n if (!material) {\r\n material = new LambertMaterial();\r\n const [r, g, b] = LOD_COLORATION_COLORS[lod];\r\n material.albedoColor = new Vector4(r, g, b, 1);\r\n Mesh._lodColorationMaterials[lod] = material;\r\n }\r\n return material;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMaterial}\r\n */\r\n getMaterial() {\r\n return this.material;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getPrimitive}\r\n */\r\n getPrimitive() {\r\n return this.primitive;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getBoneMatrices}\r\n */\r\n getBoneMatrices() {\r\n return this._boneMatrices.get();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getNode}\r\n */\r\n getNode() {\r\n // mesh transform should be ignored when skinned\r\n return this;\r\n }\r\n /** @internal */\r\n computeBoundingVolume() {\r\n let bbox: Nullable<BoundingVolume>;\r\n if (this._animatedBoundingBox) {\r\n bbox = this._animatedBoundingBox;\r\n } else {\r\n bbox = this._primitive.get()?.getBoundingVolume() ?? null;\r\n }\r\n return bbox;\r\n }\r\n /** Disposes the mesh node */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._primitive.get()?.off('bv_changed', this._onBoundingboxChange, this);\r\n this._primitive.dispose();\r\n this._material.dispose();\r\n this._boneMatrices.dispose();\r\n Mesh._trackBoneMatrices(this, false);\r\n this._skinBinding.dispose();\r\n this.setSkinInfluenceData(null);\r\n this.setMorphData(null);\r\n this.setRenderMorphInfo(null);\r\n this.setMorphInfo(null);\r\n this.setMorphSourceData(null);\r\n this.setMorphBoundingInfo(null);\r\n this._renderBundle = null;\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n /** @internal */\r\n private _onBoundingboxChange() {\r\n this.invalidateBoundingVolume();\r\n }\r\n /** @internal */\r\n private static _defaultMaterial: Nullable<MeshMaterial> = null;\r\n /** Meshes holding a joint texture, rebound when the skin palette atlas replaces it */\r\n private static readonly _skinnedMeshes: Set<Mesh> = new Set();\r\n private static _listeningAtlas = false;\r\n /**\r\n * Keep the joint textures of skinned meshes current when the atlas grows: a mesh only picks the\r\n * texture up in update(), which a mesh posed by an animation bank track no longer runs\r\n */\r\n private static _trackBoneMatrices(mesh: Mesh, skinned: boolean) {\r\n if (!skinned) {\r\n this._skinnedMeshes.delete(mesh);\r\n return;\r\n }\r\n this._skinnedMeshes.add(mesh);\r\n if (!this._listeningAtlas) {\r\n this._listeningAtlas = true;\r\n SkinPaletteAtlas.addTextureReplacedListener(() => {\r\n for (const m of this._skinnedMeshes) {\r\n const binding = m._skinBinding.get();\r\n if (binding && !binding.disposed) {\r\n m.setBoneMatrices(binding.jointTexture);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n /** @internal Materials of the LOD coloration view, by level */\r\n private static readonly _lodColorationMaterials: LambertMaterial[] = [];\r\n /** @internal */\r\n private static _getDefaultMaterial() {\r\n if (!this._defaultMaterial) {\r\n this._defaultMaterial = new LambertMaterial();\r\n }\r\n return this._defaultMaterial;\r\n }\r\n}\r\n"],"names":["tmpLodCenter","Vector3","LOD_COLORATION_COLORS","MORPH_WEIGHT_CAPACITY","MORPH_WEIGHTS_VECTOR_COUNT","MORPH_ATTRIBUTE_CAPACITY","MORPH_ATTRIBUTE_VECTOR_COUNT","MORPH_INFO_DATA_LENGTH","MORPH_RENDER_INDEX_OFFSET","MORPH_RENDER_ATTRIBUTE_OFFSET","MORPH_RENDER_INFO_DATA_LENGTH","ACTIVE_MORPH_WEIGHT_EPSILON","normalizeMorphInfoData","data","normalized","Float32Array","i","set","subarray","Math","min","length","declaredCount","max","floor","Number","supportedCount","getMorphTargetLimit","createMorphInfoBuffer","bufferData","bufferType","PBStructTypeInfo","name","ShaderHelper","getMorphInfoUniformName","type","PBArrayTypeInfo","PBPrimitiveTypeInfo","PBPrimitiveType","F32VEC4","getDevice","createStructuredBuffer","usage","MeshBase","castObservable","applyMixins","GraphNode","mixinDrawable","Mesh","scene","primitive","material","_primitive","DRef","_material","_castShadow","_sdfMode","_skinnedBoundingInfo","_animatedBoundingBox","_boneMatrices","_skinBinding","DWeakRef","_skinSpaceMatrix","Matrix4x4","_skinPaletteOverride","_appliedSkinPaletteBase","_skinnedBoundsVersion","binding","version","_skinInfluenceData","_morphData","_morphInfo","_renderMorphInfo","_morphBoundingInfo","_morphSource","_morphSourceData","_activeMorphTargetIndices","Uint32Array","_compactMorphData","_activeMorphCandidates","_morphDirty","_instanceHash","_pickTarget","node","_batchable","_getDefaultMaterial","_suspendSkinning","_skinBindingName","_renderBundle","_useRenderBundle","_materialChangeTag","_primitiveChangeTag","_postUpdateCallbacks","Set","_forcedLod","_minLod","_lodByCamera","getInstanceId","_renderPass","id","worldMatrixDet","get","getSkinSpaceKey","m","getSkinSpaceMatrix","key","round","getInstanceUniforms","$instanceUniforms","getPickTarget","setPickTarget","label","useRenderBundle","val","skeletonName","skinBindingName","updateSkeletonState","skinnedBoundingInfo","suspendSkinning","setAnimatedBoundingBox","queueUpdateNode","castShadow","b","sdfMode","dispatchEvent","effectiveSDFMode","parent","physics","body","motionType","character","forcedLod","minLod","selectLod","camera","lods","bv","getWorldBoundingVolume","screenRadiusSquared","computeAABBScreenRadiusSquared","toAABB","WeakMap","lod","lodDistanceScale","prim","currentPrimitive","off","_onBoundingboxChange","on","_scene","instanceId","invalidateBoundingVolume","RenderBundleWrapper","drawableChanged","materialAttached","coreMaterial","isMesh","bbox","getAnimatedBoundingBox","setMorphBoundingInfo","info","targetBoxes","map","box","clone","originBox","refreshAnimatedBoundingBox","getMorphBoundingInfo","setBoneMatrices","matrices","_trackBoneMatrices","setSkinInfluenceData","texture","dispose","width","height","influenceCount","slice","tex","createTexture2D","mipmapping","samplerOptions","minFilter","magFilter","mipFilter","update","setMorphData","updateRenderMorphInfo","collectActiveMorphTargetIndices","setSkinnedBoundingInfo","getMorphData","getSkinInfluenceData","getSkinPaletteBase","paletteBase","getSkinPaletteOverride","setSkinPaletteOverride","override","reference","referenceNode","multiplyAffine","invWorldMatrix","worldMatrix","getMorphSource","setMorphSource","source","getMorphSourceData","setMorphSourceData","setRenderMorphInfo","rebuildActiveMorphData","setMorphInfo","console","warn","names","index","Object","entries","isInteger","getMorphInfo","getRenderMorphInfo","buffer","bufferSubData","count","getNumMorphTargets","activeLimit","getActiveMorphTargetLimit","weighted","weightedCount","weight","abs","candidate","selectedCount","sort","a","targetIndex","activeIndices","sameActiveSet","every","value","attributes","keys","targets","filter","numVertices","textureTargetCount","numTargets","maxTextureSize","getDeviceCaps","textureCaps","fullTextureSize","ceil","sqrt","textureTargetIndices","textureSize","textureData","attributeOffsets","offset","attrib","slot","targetData","sparseIndices","indices","baseOffset","vertexOffset","j","numComponents","vertex","useCompactSlots","infoData","fill","resolveAnimatedBoundingBox","morphBoundingBox","skinnedBoundingBox","boundingBox","isValid","displacement","calculateMorphDisplacement","minPoint","maxPoint","dmin","dmax","setXYZ","x","y","z","getMorphTargetName","find","getMorphTargetIndexByName","setMorphWeight","setMorphWeightByIndex","normalizedWeight","fround","getMorphWeight","undefined","updateMorphWeights","changed","frameId","elapsedInSeconds","deltaInSeconds","updateMorphState","size","callback","addPostUpdateCallback","add","removePostUpdateCallback","delete","isBatchable","getQueueType","QUEUE_OPAQUE","isUnlit","supportLighting","needSceneColor","needSceneDepth","weights","Array","from","BoundingBox","calculateMorphBoundingBox","addBy","cached","disposed","persistentId","findSkinBindingById","applyTransformUniformsAll","jointTexture","bounds","paletteVersion","computeBoundingBox","sleepUntilPoseChanges","draw","ctx","renderQueue","hash","ownMaterial","solid","coloration","getLodColorationMaterial","apply","instanceData","isWireframeActive","primitiveLod","changeTag","renderBundle","device","beginCapture","bind","endCapture","executeRenderBundle","lodColoration","renderPass","RENDER_PASS_TYPE_LIGHT","_lodColorationMaterials","LambertMaterial","r","g","albedoColor","Vector4","getMaterial","getPrimitive","getBoneMatrices","getNode","computeBoundingVolume","getBoundingVolume","onDispose","_defaultMaterial","_skinnedMeshes","_listeningAtlas","mesh","skinned","SkinPaletteAtlas","addTextureReplacedListener"],"mappings":"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"}
|
|
@@ -38,6 +38,12 @@ class ProxyDrawableBase extends Disposable {
|
|
|
38
38
|
getSkinInfluenceData() {
|
|
39
39
|
return this._host.get()?.getSkinInfluenceData() ?? null;
|
|
40
40
|
}
|
|
41
|
+
/** @internal */ getSkinPaletteBase() {
|
|
42
|
+
return this._host.get()?.getSkinPaletteBase?.() ?? 0;
|
|
43
|
+
}
|
|
44
|
+
/** @internal */ getSkinSpaceMatrix() {
|
|
45
|
+
return this._host.get()?.getSkinSpaceMatrix?.() ?? null;
|
|
46
|
+
}
|
|
41
47
|
getSortDistance(camera) {
|
|
42
48
|
return this._host.get()?.getSortDistance(camera) ?? 0;
|
|
43
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meshdrawable.js","sources":["../../src/scene/meshdrawable.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\nimport { DWeakRef } from '@zephyr3d/base';\r\nimport { applyMixins, Disposable, DRef } from '@zephyr3d/base';\r\nimport type { MeshMaterial } from '../material';\r\nimport type {\r\n BatchDrawable,\r\n Drawable,\r\n DrawContext,\r\n MorphData,\r\n MorphInfo,\r\n PickTarget,\r\n Primitive,\r\n RenderQueue\r\n} from '../render';\r\nimport type { SceneNode } from './scene_node';\r\nimport type { Mesh } from './mesh';\r\nimport type { SkinInfluenceData } from '../render';\r\nimport { mixinDrawable } from '../render/drawable_mixin';\r\nimport type { Texture2D } from '@zephyr3d/device';\r\nimport type { Camera } from '../camera';\r\nimport { QUEUE_OPAQUE } from '../values';\r\n\r\nexport class ProxyDrawableBase<T extends Disposable & Drawable = Mesh> extends Disposable {\r\n protected _host: DWeakRef<T>;\r\n protected _node: DWeakRef<SceneNode>;\r\n protected _material: DRef<MeshMaterial>;\r\n /**\r\n * Creates a proxy for a host drawable.\r\n *\r\n * @param host - Drawable that supplies the shared geometry, animation, and transform state.\r\n * @param overrideMaterial - Optional material used instead of the host drawable's material.\r\n */\r\n constructor(host: T, node?: SceneNode, overrideMaterial?: MeshMaterial) {\r\n super();\r\n this._host = new DWeakRef(host);\r\n this._node = new DWeakRef(node);\r\n this._material = new DRef(overrideMaterial);\r\n }\r\n getName(): string {\r\n return this._host.get()?.getName() ?? '';\r\n }\r\n getNode(): SceneNode {\r\n return this._node.get()!;\r\n }\r\n getPickTarget(): PickTarget {\r\n return this._host.get()!.getPickTarget();\r\n }\r\n getBoneMatrices(): Nullable<Texture2D> {\r\n return this._host.get()?.getBoneMatrices() ?? null;\r\n }\r\n getMorphData(): Nullable<MorphData> {\r\n return this._host.get()?.getMorphData() ?? null;\r\n }\r\n getMorphInfo(): Nullable<MorphInfo> {\r\n return this._host.get()?.getMorphInfo() ?? null;\r\n }\r\n getSkinInfluenceData(): Nullable<SkinInfluenceData> {\r\n return this._host.get()?.getSkinInfluenceData() ?? null;\r\n }\r\n getSortDistance(camera: Camera): number {\r\n return this._host.get()?.getSortDistance(camera) ?? 0;\r\n }\r\n getQueueType(): number {\r\n return this.getMaterial()?.getQueueType() ?? QUEUE_OPAQUE;\r\n }\r\n needSceneColor(): boolean {\r\n return this.getMaterial()?.needSceneColor() ?? false;\r\n }\r\n needSceneDepth(): boolean {\r\n return this.getMaterial()?.needSceneDepth() ?? false;\r\n }\r\n isUnlit(): boolean {\r\n return !this.getMaterial()?.supportLighting();\r\n }\r\n getMaterial(): Nullable<MeshMaterial> {\r\n return this._material.get() ?? this._host.get()?.getMaterial() ?? null;\r\n }\r\n getPrimitive(): Nullable<Primitive> {\r\n return this._host.get()?.getPrimitive() ?? null;\r\n }\r\n isBatchable(): this is BatchDrawable {\r\n if (!this._host.get()?.isBatchable()) {\r\n return false;\r\n }\r\n if (this._material.get() && !this._material.get()!.isBatchable()) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Drawable proxy that renders an existing drawable with an optional material override.\r\n *\r\n * The proxy delegates geometry, picking, sorting, skinning, morph targets, and transform-related\r\n * state to the host drawable, so it can be submitted as a separate drawable while sharing the\r\n * host's animated and spatial state.\r\n *\r\n * If no override material is provided, the proxy uses the host drawable's material.\r\n *\r\n * @public\r\n */\r\nexport class ProxyDrawable extends applyMixins(ProxyDrawableBase<Disposable & Drawable>, mixinDrawable) {\r\n constructor(host: Disposable & Drawable, node?: SceneNode, overrideMaterial?: MeshMaterial) {\r\n super(host, node, overrideMaterial);\r\n }\r\n draw(ctx: DrawContext, renderQueue: Nullable<RenderQueue>): void {\r\n const material = this.getMaterial();\r\n const primitive = this.getPrimitive();\r\n if (material && primitive) {\r\n this.bind(ctx, renderQueue);\r\n material.draw(primitive, ctx);\r\n }\r\n }\r\n}\r\n\r\nexport class MeshDrawableBase extends Disposable {\r\n private _node: SceneNode;\r\n constructor(node: SceneNode) {\r\n super();\r\n this._node = node;\r\n }\r\n getName() {\r\n return this._node.name;\r\n }\r\n getNode() {\r\n return this._node;\r\n }\r\n}\r\n\r\nexport class MeshDrawable<M extends MeshMaterial>\r\n extends applyMixins(MeshDrawableBase, mixinDrawable)\r\n implements Drawable\r\n{\r\n private _material: DRef<M>;\r\n private _primitive: DRef<Primitive>;\r\n constructor(node: SceneNode, material: M, primitive: Primitive) {\r\n super(node);\r\n this._material = new DRef(material);\r\n this._primitive = new DRef(primitive);\r\n }\r\n get material() {\r\n return this._material.get();\r\n }\r\n set material(mat) {\r\n this._material.set(mat);\r\n }\r\n getMaterial(): Nullable<MeshMaterial> {\r\n return this.material;\r\n }\r\n get primitive() {\r\n return this._primitive.get();\r\n }\r\n set primitive(prim) {\r\n this._primitive.set(prim);\r\n }\r\n getPrimitive(): Nullable<Primitive> {\r\n return this.primitive;\r\n }\r\n getPickTarget(): PickTarget {\r\n return { node: this.getNode() };\r\n }\r\n getBoneMatrices(): Nullable<Texture2D> {\r\n return null;\r\n }\r\n getSkinInfluenceData(): Nullable<SkinInfluenceData> {\r\n return null;\r\n }\r\n getMorphData(): Nullable<MorphData> {\r\n return null;\r\n }\r\n getMorphInfo(): Nullable<MorphInfo> {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getSortDistance}\r\n */\r\n getSortDistance(camera: Camera) {\r\n const cameraWorldMatrix = camera.worldMatrix;\r\n const objectWorldMatrix = this.getNode().worldMatrix;\r\n const dx = cameraWorldMatrix.m03 - objectWorldMatrix.m03;\r\n const dy = cameraWorldMatrix.m13 - objectWorldMatrix.m13;\r\n const dz = cameraWorldMatrix.m23 - objectWorldMatrix.m23;\r\n return dx * dx + dy * dy * dz * dz;\r\n }\r\n getQueueType(): number {\r\n return this._material.get()?.getQueueType() ?? QUEUE_OPAQUE;\r\n }\r\n needSceneColor(): boolean {\r\n return this._material.get()?.needSceneColor() ?? false;\r\n }\r\n needSceneDepth(): boolean {\r\n return this._material.get()?.needSceneDepth() ?? false;\r\n }\r\n isUnlit(): boolean {\r\n return !this._material.get()?.supportLighting();\r\n }\r\n isBatchable(): this is BatchDrawable {\r\n return !!this._material.get() && this._material.get()!.isBatchable();\r\n }\r\n draw(ctx: DrawContext, renderQueue: Nullable<RenderQueue>): void {\r\n const material = this.material;\r\n const primitive = this.primitive;\r\n if (material && primitive) {\r\n this.bind(ctx, renderQueue);\r\n material.draw(primitive, ctx);\r\n }\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this._material.dispose();\r\n this._primitive.dispose();\r\n }\r\n\r\n getName() {\r\n return this.getNode().name;\r\n }\r\n}\r\n"],"names":["ProxyDrawableBase","Disposable","_host","_node","_material","host","node","overrideMaterial","DWeakRef","DRef","getName","get","getNode","getPickTarget","getBoneMatrices","getMorphData","getMorphInfo","getSkinInfluenceData","getSortDistance","camera","getQueueType","getMaterial","QUEUE_OPAQUE","needSceneColor","needSceneDepth","isUnlit","supportLighting","getPrimitive","isBatchable","ProxyDrawable","applyMixins","mixinDrawable","draw","ctx","renderQueue","material","primitive","bind","MeshDrawableBase","name","MeshDrawable","_primitive","mat","set","prim","cameraWorldMatrix","worldMatrix","objectWorldMatrix","dx","m03","dy","m13","dz","m23","onDispose","dispose"],"mappings":";;;;AAsBO,MAAMA,iBAAkEC,SAAAA,UAAAA,CAAAA;IACnEC,KAAmB;IACnBC,KAA2B;IAC3BC,SAA8B;AACxC;;;;;AAKC,MACD,YAAYC,IAAO,EAAEC,IAAgB,EAAEC,gBAA+B,CAAE;QACtE,KAAK,EAAA;AACL,QAAA,IAAI,CAACL,KAAK,GAAG,IAAIM,QAASH,CAAAA,IAAAA,CAAAA;AAC1B,QAAA,IAAI,CAACF,KAAK,GAAG,IAAIK,QAASF,CAAAA,IAAAA,CAAAA;AAC1B,QAAA,IAAI,CAACF,SAAS,GAAG,IAAIK,IAAKF,CAAAA,gBAAAA,CAAAA;AAC5B;IACAG,OAAkB,GAAA;AAChB,QAAA,OAAO,IAAI,CAACR,KAAK,CAACS,GAAG,IAAID,OAAa,EAAA,IAAA,EAAA;AACxC;IACAE,OAAqB,GAAA;AACnB,QAAA,OAAO,IAAI,CAACT,KAAK,CAACQ,GAAG,EAAA;AACvB;IACAE,aAA4B,GAAA;AAC1B,QAAA,OAAO,IAAI,CAACX,KAAK,CAACS,GAAG,GAAIE,aAAa,EAAA;AACxC;IACAC,eAAuC,GAAA;AACrC,QAAA,OAAO,IAAI,CAACZ,KAAK,CAACS,GAAG,IAAIG,eAAqB,EAAA,IAAA,IAAA;AAChD;IACAC,YAAoC,GAAA;AAClC,QAAA,OAAO,IAAI,CAACb,KAAK,CAACS,GAAG,IAAII,YAAkB,EAAA,IAAA,IAAA;AAC7C;IACAC,YAAoC,GAAA;AAClC,QAAA,OAAO,IAAI,CAACd,KAAK,CAACS,GAAG,IAAIK,YAAkB,EAAA,IAAA,IAAA;AAC7C;IACAC,oBAAoD,GAAA;AAClD,QAAA,OAAO,IAAI,CAACf,KAAK,CAACS,GAAG,IAAIM,oBAA0B,EAAA,IAAA,IAAA;AACrD;AACAC,IAAAA,eAAAA,CAAgBC,MAAc,EAAU;AACtC,QAAA,OAAO,IAAI,CAACjB,KAAK,CAACS,GAAG,EAAA,EAAIO,gBAAgBC,MAAW,CAAA,IAAA,CAAA;AACtD;IACAC,YAAuB,GAAA;AACrB,QAAA,OAAO,IAAI,CAACC,WAAW,EAAA,EAAID,YAAkBE,EAAAA,IAAAA,YAAAA;AAC/C;IACAC,cAA0B,GAAA;AACxB,QAAA,OAAO,IAAI,CAACF,WAAW,EAAA,EAAIE,cAAoB,EAAA,IAAA,KAAA;AACjD;IACAC,cAA0B,GAAA;AACxB,QAAA,OAAO,IAAI,CAACH,WAAW,EAAA,EAAIG,cAAoB,EAAA,IAAA,KAAA;AACjD;IACAC,OAAmB,GAAA;AACjB,QAAA,OAAO,CAAC,IAAI,CAACJ,WAAW,EAAIK,EAAAA,eAAAA,EAAAA;AAC9B;IACAL,WAAsC,GAAA;AACpC,QAAA,OAAO,IAAI,CAACjB,SAAS,CAACO,GAAG,EAAA,IAAM,IAAI,CAACT,KAAK,CAACS,GAAG,EAAA,EAAIU,WAAiB,EAAA,IAAA,IAAA;AACpE;IACAM,YAAoC,GAAA;AAClC,QAAA,OAAO,IAAI,CAACzB,KAAK,CAACS,GAAG,IAAIgB,YAAkB,EAAA,IAAA,IAAA;AAC7C;IACAC,WAAqC,GAAA;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC1B,KAAK,CAACS,GAAG,IAAIiB,WAAe,EAAA,EAAA;YACpC,OAAO,KAAA;AACT;AACA,QAAA,IAAI,IAAI,CAACxB,SAAS,CAACO,GAAG,EAAM,IAAA,CAAC,IAAI,CAACP,SAAS,CAACO,GAAG,EAAA,CAAIiB,WAAW,EAAI,EAAA;YAChE,OAAO,KAAA;AACT;QACA,OAAO,IAAA;AACT;AACF;AAEA;;;;;;;;;;AAUC,IACM,MAAMC,aAAsBC,SAAAA,WAAAA,CAAY9B,iBAA0C+B,EAAAA,aAAAA,CAAAA,CAAAA;AACvF,IAAA,WAAA,CAAY1B,IAA2B,EAAEC,IAAgB,EAAEC,gBAA+B,CAAE;QAC1F,KAAK,CAACF,MAAMC,IAAMC,EAAAA,gBAAAA,CAAAA;AACpB;IACAyB,IAAKC,CAAAA,GAAgB,EAAEC,WAAkC,EAAQ;QAC/D,MAAMC,QAAAA,GAAW,IAAI,CAACd,WAAW,EAAA;QACjC,MAAMe,SAAAA,GAAY,IAAI,CAACT,YAAY,EAAA;AACnC,QAAA,IAAIQ,YAAYC,SAAW,EAAA;YACzB,IAAI,CAACC,IAAI,CAACJ,GAAKC,EAAAA,WAAAA,CAAAA;YACfC,QAASH,CAAAA,IAAI,CAACI,SAAWH,EAAAA,GAAAA,CAAAA;AAC3B;AACF;AACF;AAEO,MAAMK,gBAAyBrC,SAAAA,UAAAA,CAAAA;IAC5BE,KAAiB;AACzB,IAAA,WAAA,CAAYG,IAAe,CAAE;QAC3B,KAAK,EAAA;QACL,IAAI,CAACH,KAAK,GAAGG,IAAAA;AACf;IACAI,OAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAACP,KAAK,CAACoC,IAAI;AACxB;IACA3B,OAAU,GAAA;QACR,OAAO,IAAI,CAACT,KAAK;AACnB;AACF;AAEO,MAAMqC,YACHV,SAAAA,WAAAA,CAAYQ,gBAAkBP,EAAAA,aAAAA,CAAAA,CAAAA;IAG9B3B,SAAmB;IACnBqC,UAA4B;AACpC,IAAA,WAAA,CAAYnC,IAAe,EAAE6B,QAAW,EAAEC,SAAoB,CAAE;AAC9D,QAAA,KAAK,CAAC9B,IAAAA,CAAAA;AACN,QAAA,IAAI,CAACF,SAAS,GAAG,IAAIK,IAAK0B,CAAAA,QAAAA,CAAAA;AAC1B,QAAA,IAAI,CAACM,UAAU,GAAG,IAAIhC,IAAK2B,CAAAA,SAAAA,CAAAA;AAC7B;AACA,IAAA,IAAID,QAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC/B,SAAS,CAACO,GAAG,EAAA;AAC3B;IACA,IAAIwB,QAAAA,CAASO,GAAG,EAAE;AAChB,QAAA,IAAI,CAACtC,SAAS,CAACuC,GAAG,CAACD,GAAAA,CAAAA;AACrB;IACArB,WAAsC,GAAA;QACpC,OAAO,IAAI,CAACc,QAAQ;AACtB;AACA,IAAA,IAAIC,SAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAACK,UAAU,CAAC9B,GAAG,EAAA;AAC5B;IACA,IAAIyB,SAAAA,CAAUQ,IAAI,EAAE;AAClB,QAAA,IAAI,CAACH,UAAU,CAACE,GAAG,CAACC,IAAAA,CAAAA;AACtB;IACAjB,YAAoC,GAAA;QAClC,OAAO,IAAI,CAACS,SAAS;AACvB;IACAvB,aAA4B,GAAA;QAC1B,OAAO;YAAEP,IAAM,EAAA,IAAI,CAACM,OAAO;AAAG,SAAA;AAChC;IACAE,eAAuC,GAAA;QACrC,OAAO,IAAA;AACT;IACAG,oBAAoD,GAAA;QAClD,OAAO,IAAA;AACT;IACAF,YAAoC,GAAA;QAClC,OAAO,IAAA;AACT;IACAC,YAAoC,GAAA;QAClC,OAAO,IAAA;AACT;AACA;;MAGAE,eAAAA,CAAgBC,MAAc,EAAE;QAC9B,MAAM0B,iBAAAA,GAAoB1B,OAAO2B,WAAW;AAC5C,QAAA,MAAMC,iBAAoB,GAAA,IAAI,CAACnC,OAAO,GAAGkC,WAAW;AACpD,QAAA,MAAME,EAAKH,GAAAA,iBAAAA,CAAkBI,GAAG,GAAGF,kBAAkBE,GAAG;AACxD,QAAA,MAAMC,EAAKL,GAAAA,iBAAAA,CAAkBM,GAAG,GAAGJ,kBAAkBI,GAAG;AACxD,QAAA,MAAMC,EAAKP,GAAAA,iBAAAA,CAAkBQ,GAAG,GAAGN,kBAAkBM,GAAG;AACxD,QAAA,OAAOL,EAAKA,GAAAA,EAAAA,GAAKE,EAAKA,GAAAA,EAAAA,GAAKE,EAAKA,GAAAA,EAAAA;AAClC;IACAhC,YAAuB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAChB,SAAS,CAACO,GAAG,IAAIS,YAAkBE,EAAAA,IAAAA,YAAAA;AACjD;IACAC,cAA0B,GAAA;AACxB,QAAA,OAAO,IAAI,CAACnB,SAAS,CAACO,GAAG,IAAIY,cAAoB,EAAA,IAAA,KAAA;AACnD;IACAC,cAA0B,GAAA;AACxB,QAAA,OAAO,IAAI,CAACpB,SAAS,CAACO,GAAG,IAAIa,cAAoB,EAAA,IAAA,KAAA;AACnD;IACAC,OAAmB,GAAA;AACjB,QAAA,OAAO,CAAC,IAAI,CAACrB,SAAS,CAACO,GAAG,EAAIe,EAAAA,eAAAA,EAAAA;AAChC;IACAE,WAAqC,GAAA;AACnC,QAAA,OAAO,CAAC,CAAC,IAAI,CAACxB,SAAS,CAACO,GAAG,EAAM,IAAA,IAAI,CAACP,SAAS,CAACO,GAAG,GAAIiB,WAAW,EAAA;AACpE;IACAI,IAAKC,CAAAA,GAAgB,EAAEC,WAAkC,EAAQ;QAC/D,MAAMC,QAAAA,GAAW,IAAI,CAACA,QAAQ;QAC9B,MAAMC,SAAAA,GAAY,IAAI,CAACA,SAAS;AAChC,QAAA,IAAID,YAAYC,SAAW,EAAA;YACzB,IAAI,CAACC,IAAI,CAACJ,GAAKC,EAAAA,WAAAA,CAAAA;YACfC,QAASH,CAAAA,IAAI,CAACI,SAAWH,EAAAA,GAAAA,CAAAA;AAC3B;AACF;IACUqB,SAAY,GAAA;AACpB,QAAA,KAAK,CAACA,SAAAA,EAAAA;QACN,IAAI,CAAClD,SAAS,CAACmD,OAAO,EAAA;QACtB,IAAI,CAACd,UAAU,CAACc,OAAO,EAAA;AACzB;IAEA7C,OAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAACE,OAAO,EAAA,CAAG2B,IAAI;AAC5B;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"meshdrawable.js","sources":["../../src/scene/meshdrawable.ts"],"sourcesContent":["import type { Matrix4x4, Nullable } from '@zephyr3d/base';\r\nimport { DWeakRef } from '@zephyr3d/base';\r\nimport { applyMixins, Disposable, DRef } from '@zephyr3d/base';\r\nimport type { MeshMaterial } from '../material';\r\nimport type {\r\n BatchDrawable,\r\n Drawable,\r\n DrawContext,\r\n MorphData,\r\n MorphInfo,\r\n PickTarget,\r\n Primitive,\r\n RenderQueue\r\n} from '../render';\r\nimport type { SceneNode } from './scene_node';\r\nimport type { Mesh } from './mesh';\r\nimport type { SkinInfluenceData } from '../render';\r\nimport { mixinDrawable } from '../render/drawable_mixin';\r\nimport type { Texture2D } from '@zephyr3d/device';\r\nimport type { Camera } from '../camera';\r\nimport { QUEUE_OPAQUE } from '../values';\r\n\r\nexport class ProxyDrawableBase<T extends Disposable & Drawable = Mesh> extends Disposable {\r\n protected _host: DWeakRef<T>;\r\n protected _node: DWeakRef<SceneNode>;\r\n protected _material: DRef<MeshMaterial>;\r\n /**\r\n * Creates a proxy for a host drawable.\r\n *\r\n * @param host - Drawable that supplies the shared geometry, animation, and transform state.\r\n * @param overrideMaterial - Optional material used instead of the host drawable's material.\r\n */\r\n constructor(host: T, node?: SceneNode, overrideMaterial?: MeshMaterial) {\r\n super();\r\n this._host = new DWeakRef(host);\r\n this._node = new DWeakRef(node);\r\n this._material = new DRef(overrideMaterial);\r\n }\r\n getName(): string {\r\n return this._host.get()?.getName() ?? '';\r\n }\r\n getNode(): SceneNode {\r\n return this._node.get()!;\r\n }\r\n getPickTarget(): PickTarget {\r\n return this._host.get()!.getPickTarget();\r\n }\r\n getBoneMatrices(): Nullable<Texture2D> {\r\n return this._host.get()?.getBoneMatrices() ?? null;\r\n }\r\n getMorphData(): Nullable<MorphData> {\r\n return this._host.get()?.getMorphData() ?? null;\r\n }\r\n getMorphInfo(): Nullable<MorphInfo> {\r\n return this._host.get()?.getMorphInfo() ?? null;\r\n }\r\n getSkinInfluenceData(): Nullable<SkinInfluenceData> {\r\n return this._host.get()?.getSkinInfluenceData() ?? null;\r\n }\r\n /** @internal */\r\n getSkinPaletteBase(): number {\r\n return (this._host.get() as unknown as Nullable<Partial<Mesh>>)?.getSkinPaletteBase?.() ?? 0;\r\n }\r\n /** @internal */\r\n getSkinSpaceMatrix(): Nullable<Matrix4x4> {\r\n return (this._host.get() as unknown as Nullable<Partial<Mesh>>)?.getSkinSpaceMatrix?.() ?? null;\r\n }\r\n getSortDistance(camera: Camera): number {\r\n return this._host.get()?.getSortDistance(camera) ?? 0;\r\n }\r\n getQueueType(): number {\r\n return this.getMaterial()?.getQueueType() ?? QUEUE_OPAQUE;\r\n }\r\n needSceneColor(): boolean {\r\n return this.getMaterial()?.needSceneColor() ?? false;\r\n }\r\n needSceneDepth(): boolean {\r\n return this.getMaterial()?.needSceneDepth() ?? false;\r\n }\r\n isUnlit(): boolean {\r\n return !this.getMaterial()?.supportLighting();\r\n }\r\n getMaterial(): Nullable<MeshMaterial> {\r\n return this._material.get() ?? this._host.get()?.getMaterial() ?? null;\r\n }\r\n getPrimitive(): Nullable<Primitive> {\r\n return this._host.get()?.getPrimitive() ?? null;\r\n }\r\n isBatchable(): this is BatchDrawable {\r\n if (!this._host.get()?.isBatchable()) {\r\n return false;\r\n }\r\n if (this._material.get() && !this._material.get()!.isBatchable()) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Drawable proxy that renders an existing drawable with an optional material override.\r\n *\r\n * The proxy delegates geometry, picking, sorting, skinning, morph targets, and transform-related\r\n * state to the host drawable, so it can be submitted as a separate drawable while sharing the\r\n * host's animated and spatial state.\r\n *\r\n * If no override material is provided, the proxy uses the host drawable's material.\r\n *\r\n * @public\r\n */\r\nexport class ProxyDrawable extends applyMixins(ProxyDrawableBase<Disposable & Drawable>, mixinDrawable) {\r\n constructor(host: Disposable & Drawable, node?: SceneNode, overrideMaterial?: MeshMaterial) {\r\n super(host, node, overrideMaterial);\r\n }\r\n draw(ctx: DrawContext, renderQueue: Nullable<RenderQueue>): void {\r\n const material = this.getMaterial();\r\n const primitive = this.getPrimitive();\r\n if (material && primitive) {\r\n this.bind(ctx, renderQueue);\r\n material.draw(primitive, ctx);\r\n }\r\n }\r\n}\r\n\r\nexport class MeshDrawableBase extends Disposable {\r\n private _node: SceneNode;\r\n constructor(node: SceneNode) {\r\n super();\r\n this._node = node;\r\n }\r\n getName() {\r\n return this._node.name;\r\n }\r\n getNode() {\r\n return this._node;\r\n }\r\n}\r\n\r\nexport class MeshDrawable<M extends MeshMaterial>\r\n extends applyMixins(MeshDrawableBase, mixinDrawable)\r\n implements Drawable\r\n{\r\n private _material: DRef<M>;\r\n private _primitive: DRef<Primitive>;\r\n constructor(node: SceneNode, material: M, primitive: Primitive) {\r\n super(node);\r\n this._material = new DRef(material);\r\n this._primitive = new DRef(primitive);\r\n }\r\n get material() {\r\n return this._material.get();\r\n }\r\n set material(mat) {\r\n this._material.set(mat);\r\n }\r\n getMaterial(): Nullable<MeshMaterial> {\r\n return this.material;\r\n }\r\n get primitive() {\r\n return this._primitive.get();\r\n }\r\n set primitive(prim) {\r\n this._primitive.set(prim);\r\n }\r\n getPrimitive(): Nullable<Primitive> {\r\n return this.primitive;\r\n }\r\n getPickTarget(): PickTarget {\r\n return { node: this.getNode() };\r\n }\r\n getBoneMatrices(): Nullable<Texture2D> {\r\n return null;\r\n }\r\n getSkinInfluenceData(): Nullable<SkinInfluenceData> {\r\n return null;\r\n }\r\n getMorphData(): Nullable<MorphData> {\r\n return null;\r\n }\r\n getMorphInfo(): Nullable<MorphInfo> {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getSortDistance}\r\n */\r\n getSortDistance(camera: Camera) {\r\n const cameraWorldMatrix = camera.worldMatrix;\r\n const objectWorldMatrix = this.getNode().worldMatrix;\r\n const dx = cameraWorldMatrix.m03 - objectWorldMatrix.m03;\r\n const dy = cameraWorldMatrix.m13 - objectWorldMatrix.m13;\r\n const dz = cameraWorldMatrix.m23 - objectWorldMatrix.m23;\r\n return dx * dx + dy * dy * dz * dz;\r\n }\r\n getQueueType(): number {\r\n return this._material.get()?.getQueueType() ?? QUEUE_OPAQUE;\r\n }\r\n needSceneColor(): boolean {\r\n return this._material.get()?.needSceneColor() ?? false;\r\n }\r\n needSceneDepth(): boolean {\r\n return this._material.get()?.needSceneDepth() ?? false;\r\n }\r\n isUnlit(): boolean {\r\n return !this._material.get()?.supportLighting();\r\n }\r\n isBatchable(): this is BatchDrawable {\r\n return !!this._material.get() && this._material.get()!.isBatchable();\r\n }\r\n draw(ctx: DrawContext, renderQueue: Nullable<RenderQueue>): void {\r\n const material = this.material;\r\n const primitive = this.primitive;\r\n if (material && primitive) {\r\n this.bind(ctx, renderQueue);\r\n material.draw(primitive, ctx);\r\n }\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this._material.dispose();\r\n this._primitive.dispose();\r\n }\r\n\r\n getName() {\r\n return this.getNode().name;\r\n }\r\n}\r\n"],"names":["ProxyDrawableBase","Disposable","_host","_node","_material","host","node","overrideMaterial","DWeakRef","DRef","getName","get","getNode","getPickTarget","getBoneMatrices","getMorphData","getMorphInfo","getSkinInfluenceData","getSkinPaletteBase","getSkinSpaceMatrix","getSortDistance","camera","getQueueType","getMaterial","QUEUE_OPAQUE","needSceneColor","needSceneDepth","isUnlit","supportLighting","getPrimitive","isBatchable","ProxyDrawable","applyMixins","mixinDrawable","draw","ctx","renderQueue","material","primitive","bind","MeshDrawableBase","name","MeshDrawable","_primitive","mat","set","prim","cameraWorldMatrix","worldMatrix","objectWorldMatrix","dx","m03","dy","m13","dz","m23","onDispose","dispose"],"mappings":"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"}
|
package/dist/scene/msdftext.js
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import { Vector2, Vector3 } from '@zephyr3d/base';
|
|
2
2
|
import { BoundingBox } from '../utility/bounding_volume.js';
|
|
3
3
|
import '../values.js';
|
|
4
|
-
import '../render/render_queue.js';
|
|
5
4
|
import { getEngine } from '../app/api.js';
|
|
5
|
+
import '../render/render_queue.js';
|
|
6
6
|
import { Primitive } from '../render/primitive.js';
|
|
7
7
|
import '@zephyr3d/device';
|
|
8
8
|
import '../material/shader/helper.js';
|
|
9
9
|
import '../material/lambert.js';
|
|
10
10
|
import '../material/blinn.js';
|
|
11
11
|
import '../material/unlit.js';
|
|
12
|
+
import '../material/meshmaterial.js';
|
|
12
13
|
import '../material/particle.js';
|
|
13
14
|
import '../material/subsurfaceprofile.js';
|
|
14
|
-
import '../material/
|
|
15
|
+
import '../material/sssprofile.js';
|
|
16
|
+
import '../material/sss.js';
|
|
15
17
|
import '../material/eye.js';
|
|
16
|
-
import '../material/meshmaterial.js';
|
|
17
18
|
import '../material/hair.js';
|
|
18
19
|
import '../material/hairstrand.js';
|
|
19
20
|
import '../material/grassmaterial.js';
|
|
@@ -30,9 +31,14 @@ import '../render/lightpass.js';
|
|
|
30
31
|
import '../render/sky.js';
|
|
31
32
|
import '../render/clipmap.js';
|
|
32
33
|
import '../render/envlight.js';
|
|
34
|
+
import '../render/lod.js';
|
|
33
35
|
import '../render/dualdepthpeeling_oit.js';
|
|
34
36
|
import '../shaders/atmosphere.js';
|
|
37
|
+
import '../render/water_interaction.js';
|
|
35
38
|
import '../render/rendergraph/scene_render_context.js';
|
|
39
|
+
import '../render/sdf/scene_sdf.js';
|
|
40
|
+
import '../render/sdf/global_sdf.js';
|
|
41
|
+
import '../render/gi/voxelize_pass.js';
|
|
36
42
|
import { layoutText } from '../text/runtime/text_layout.js';
|
|
37
43
|
import { MeshDrawable } from './meshdrawable.js';
|
|
38
44
|
import { GraphNode } from './graph_node.js';
|