@zephyr3d/scene 0.9.26 → 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 +146 -30
- 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 +300 -56
- 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 +177 -3
- 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 +178 -200
- 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 +30475 -19865
- package/dist/index.js +67 -12
- 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/hairstrand.js +235 -235
- package/dist/material/hairstrand.js.map +1 -1
- package/dist/material/lambert.js +4 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +362 -300
- 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 +223 -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 +733 -190
- 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 +2009 -201
- 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 +668 -63
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/posteffect.js +12 -1
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/postsss.js +572 -0
- package/dist/posteffect/postsss.js.map +1 -0
- package/dist/posteffect/sao.js +48 -50
- 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 +34 -15
- 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 +40 -39
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +328 -62
- 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 +26 -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 +53 -53
- 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 +8 -13
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +268 -136
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +113 -28
- 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/hzb.js +80 -22
- package/dist/render/hzb.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 +23 -9
- 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/oit.js +11 -11
- package/dist/render/oit.js.map +1 -1
- 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 +198 -11
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +14 -7
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/blackboard.js +15 -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 +585 -59
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
- package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +8 -1
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- 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 +524 -0
- package/dist/render/underwater.js.map +1 -0
- 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 +1195 -0
- package/dist/render/water_caustics.js.map +1 -0
- 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 +36 -36
- 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 +997 -96
- 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/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 +40 -87
- package/dist/shaders/water.js.map +1 -1
- package/dist/shaders/water_medium.js +42 -0
- package/dist/shaders/water_medium.js.map +1 -0
- 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 +87 -49
- 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 +36 -6
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +77 -7
- 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 +140 -279
- 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 +2473 -114
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/shprojector.js +97 -109
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collision.js","sources":["../../../src/animation/joint_dynamics/collision.ts"],"sourcesContent":["// Collision routines ported from SPCRJointDynamicsJob.cs.\r\n\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport type { ColliderR, ColliderRW, PointR } from './types';\r\nimport { EPSILON, ColliderForce } from './types';\r\n\r\n/** @public */\r\nexport interface CollisionResult {\r\n hit: boolean;\r\n point: Vector3;\r\n}\r\n\r\n/** @public */\r\nexport interface LineCollisionResult {\r\n hit: boolean;\r\n pointOnLine: Vector3;\r\n pointOnCollider: Vector3;\r\n radius: number;\r\n}\r\n\r\n/** @public */\r\nexport interface SurfaceCheckResult {\r\n hit: boolean;\r\n intersectionPoint: Vector3;\r\n pushOut: Vector3;\r\n pointOnCollider: Vector3;\r\n radius: number;\r\n}\r\n\r\n/** @public */\r\nexport interface NearestPointsResult {\r\n tP: number;\r\n tQ: number;\r\n pointOnP: Vector3;\r\n pointOnQ: Vector3;\r\n sqrDistance: number;\r\n}\r\n\r\nconst _pushoutSphereDirection = new Vector3();\r\nconst _pushoutSphereScaled = new Vector3();\r\nconst _pushoutCapsuleVecN = new Vector3();\r\nconst _pushoutCapsuleTargetVec = new Vector3();\r\nconst _pushoutCapsuleTail = new Vector3();\r\nconst _pushoutCapsulePosOnVec = new Vector3();\r\nconst _pushoutCapsulePushVec = new Vector3();\r\nconst _pushoutCapsuleScaled = new Vector3();\r\nconst _pushInSphereDirection = new Vector3();\r\nconst _pushInSphereDirectionN = new Vector3();\r\nconst _pushInSphereScaled = new Vector3();\r\nconst _pushInCapsuleVecN = new Vector3();\r\nconst _pushInCapsuleTargetVec = new Vector3();\r\nconst _pushInCapsuleTail = new Vector3();\r\nconst _pushInCapsulePosOnVec = new Vector3();\r\nconst _pushInCapsulePullVec = new Vector3();\r\nconst _pushInCapsulePullVecN = new Vector3();\r\nconst _pushInCapsuleScaled = new Vector3();\r\nconst _collisionSphereDir = new Vector3();\r\nconst _collisionSphereDirN = new Vector3();\r\nconst _collisionSphereToCenter = new Vector3();\r\nconst _collisionSphereScaled = new Vector3();\r\nconst _collisionSphereDiff = new Vector3();\r\nconst _collisionCapsuleTail = new Vector3();\r\nconst _collisionCapsulePointDir = new Vector3();\r\nconst _collisionCapsulePtOnCol = new Vector3();\r\nconst _collisionCapsulePtOnLine = new Vector3();\r\nconst _collisionCapsuleDiff = new Vector3();\r\nconst _collisionCapsuleTempLineResult: LineCollisionResult = {\r\n hit: false,\r\n pointOnLine: new Vector3(),\r\n pointOnCollider: new Vector3(),\r\n radius: 0\r\n};\r\nconst _nearestCross0 = new Vector3();\r\nconst _nearestCross1 = new Vector3();\r\nconst _nearestN1 = new Vector3();\r\nconst _nearestN2 = new Vector3();\r\nconst _nearestPosDiff = new Vector3();\r\nconst _nearestPointOnP = new Vector3();\r\nconst _nearestPointOnQ = new Vector3();\r\nconst _nearestPointDiff = new Vector3();\r\nconst _nearestResult: NearestPointsResult = {\r\n tP: 0,\r\n tQ: 0,\r\n pointOnP: new Vector3(),\r\n pointOnQ: new Vector3(),\r\n sqrDistance: 0\r\n};\r\nconst _surfaceNoHit: SurfaceCheckResult = {\r\n hit: false,\r\n intersectionPoint: new Vector3(),\r\n pushOut: new Vector3(),\r\n pointOnCollider: new Vector3(),\r\n radius: 0\r\n};\r\nconst _surfaceTriCenter = new Vector3();\r\nconst _surfaceEdgeAB = new Vector3();\r\nconst _surfaceEdgeAC = new Vector3();\r\nconst _surfacePlaneNormal = new Vector3();\r\nconst _surfacePlaneNormalNeg = new Vector3();\r\nconst _surfaceColliderDir = new Vector3();\r\nconst _surfaceRayDir = new Vector3();\r\nconst _surfaceRayDirN = new Vector3();\r\nconst _surfaceTail = new Vector3();\r\nconst _surfaceIntersection = new Vector3();\r\nconst _surfacePushOut = new Vector3();\r\nconst _surfaceToCol = new Vector3();\r\nconst _surfaceEndVec = new Vector3();\r\nconst _surfaceColDirVec = new Vector3();\r\nconst _surfaceIntersecToEnd = new Vector3();\r\nconst _surfaceColToEnd = new Vector3();\r\nconst _surfaceColToIntersect = new Vector3();\r\nconst _surfaceEVec = new Vector3();\r\nconst _surfacePoc2 = new Vector3();\r\nconst _triangleAp = new Vector3();\r\nconst _triangleBp = new Vector3();\r\nconst _triangleCp = new Vector3();\r\nconst _triangleU = new Vector3();\r\nconst _triangleV = new Vector3();\r\nconst _triangleW = new Vector3();\r\n\r\nfunction writeCollisionResult(\r\n out: CollisionResult | undefined,\r\n hit: boolean,\r\n point: Vector3,\r\n copyPoint: boolean\r\n) {\r\n if (!out) {\r\n return { hit, point: copyPoint ? point.clone() : point };\r\n }\r\n if (!out.point) {\r\n out.point = new Vector3();\r\n }\r\n out.hit = hit;\r\n out.point.set(point);\r\n return out;\r\n}\r\n\r\nfunction writeLineCollisionResult(\r\n out: LineCollisionResult | undefined,\r\n hit: boolean,\r\n pointOnLine: Vector3,\r\n pointOnCollider: Vector3,\r\n radius: number,\r\n copyVectors: boolean\r\n) {\r\n if (!out) {\r\n return {\r\n hit,\r\n pointOnLine: copyVectors ? pointOnLine.clone() : pointOnLine,\r\n pointOnCollider: copyVectors ? pointOnCollider.clone() : pointOnCollider,\r\n radius\r\n };\r\n }\r\n if (!out.pointOnLine) {\r\n out.pointOnLine = new Vector3();\r\n }\r\n if (!out.pointOnCollider) {\r\n out.pointOnCollider = new Vector3();\r\n }\r\n out.hit = hit;\r\n out.pointOnLine.set(pointOnLine);\r\n out.pointOnCollider.set(pointOnCollider);\r\n out.radius = radius;\r\n return out;\r\n}\r\n\r\nfunction writeSurfaceCheckResult(\r\n out: SurfaceCheckResult | undefined,\r\n hit: boolean,\r\n intersectionPoint: Vector3,\r\n pushOut: Vector3,\r\n pointOnCollider: Vector3,\r\n radius: number,\r\n copyVectors: boolean\r\n) {\r\n if (!out) {\r\n return {\r\n hit,\r\n intersectionPoint: copyVectors ? intersectionPoint.clone() : intersectionPoint,\r\n pushOut: copyVectors ? pushOut.clone() : pushOut,\r\n pointOnCollider: copyVectors ? pointOnCollider.clone() : pointOnCollider,\r\n radius\r\n };\r\n }\r\n if (!out.intersectionPoint) {\r\n out.intersectionPoint = new Vector3();\r\n }\r\n if (!out.pushOut) {\r\n out.pushOut = new Vector3();\r\n }\r\n if (!out.pointOnCollider) {\r\n out.pointOnCollider = new Vector3();\r\n }\r\n out.hit = hit;\r\n out.intersectionPoint.set(intersectionPoint);\r\n out.pushOut.set(pushOut);\r\n out.pointOnCollider.set(pointOnCollider);\r\n out.radius = radius;\r\n return out;\r\n}\r\n\r\nfunction writeNearestPointsResult(\r\n out: NearestPointsResult | undefined,\r\n tP: number,\r\n tQ: number,\r\n pointOnP: Vector3,\r\n pointOnQ: Vector3,\r\n sqrDistance: number,\r\n copyVectors: boolean\r\n) {\r\n if (!out) {\r\n return {\r\n tP,\r\n tQ,\r\n pointOnP: copyVectors ? pointOnP.clone() : pointOnP,\r\n pointOnQ: copyVectors ? pointOnQ.clone() : pointOnQ,\r\n sqrDistance\r\n };\r\n }\r\n out.tP = tP;\r\n out.tQ = tQ;\r\n out.pointOnP.set(pointOnP);\r\n out.pointOnQ.set(pointOnQ);\r\n out.sqrDistance = sqrDistance;\r\n return out;\r\n}\r\n\r\n/**\r\n * Pushes a point out of a sphere collider.\r\n *\r\n * @public\r\n */\r\nexport function pushoutFromSphere(\r\n center: Vector3,\r\n radius: number,\r\n pointRadius: number,\r\n point: Vector3,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n const direction = Vector3.sub(point, center, _pushoutSphereDirection);\r\n const sqrLen = direction.magnitudeSq;\r\n if (sqrLen > EPSILON) {\r\n const dist = Math.sqrt(sqrLen);\r\n const targetDist = radius + pointRadius;\r\n if (dist < targetDist) {\r\n const scaled = Vector3.scale(direction, targetDist / dist, _pushoutSphereScaled);\r\n Vector3.add(center, scaled, scaled);\r\n return writeCollisionResult(out, true, scaled, !out);\r\n }\r\n }\r\n return writeCollisionResult(out, false, point, !out);\r\n}\r\n\r\n/**\r\n * Pushes a point out of a collider.\r\n *\r\n * @public\r\n */\r\nexport function pushoutFromCollider(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point: Vector3,\r\n ptR: PointR,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n if (colR.height <= EPSILON) {\r\n return pushoutFromSphere(colRW.positionCurrent, colRW.radius, ptR.pointRadius, point, out);\r\n }\r\n return pushoutFromCapsule(colR, colRW, point, ptR, out);\r\n}\r\n\r\n/**\r\n * Pushes a point out of a capsule collider.\r\n *\r\n * @public\r\n */\r\nexport function pushoutFromCapsule(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point: Vector3,\r\n ptR: PointR,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n const capsuleVec = colRW.directionCurrent;\r\n const capsuleHeight = colRW.height > EPSILON ? colRW.height : capsuleVec.magnitude;\r\n const capsuleVecN = Vector3.normalize(capsuleVec, _pushoutCapsuleVecN);\r\n const capsulePos = colRW.positionCurrent;\r\n const targetVec = Vector3.sub(point, capsulePos, _pushoutCapsuleTargetVec);\r\n const distOnVec = Vector3.dot(capsuleVecN, targetVec);\r\n\r\n if (distOnVec <= EPSILON) {\r\n return pushoutFromSphere(capsulePos, colRW.radius, ptR.pointRadius, point, out);\r\n }\r\n if (distOnVec >= capsuleHeight) {\r\n const tail = Vector3.add(capsulePos, capsuleVec, _pushoutCapsuleTail);\r\n return pushoutFromSphere(tail, colRW.radius * colR.radiusTailScale, ptR.pointRadius, point, out);\r\n }\r\n\r\n const posOnVec = Vector3.scale(capsuleVecN, distOnVec, _pushoutCapsulePosOnVec);\r\n Vector3.add(capsulePos, posOnVec, posOnVec);\r\n const pushVec = Vector3.sub(point, posOnVec, _pushoutCapsulePushVec);\r\n const sqrPushDist = pushVec.magnitudeSq;\r\n if (sqrPushDist > EPSILON) {\r\n const pushDist = Math.sqrt(sqrPushDist);\r\n const r = colRW.radius * lerp(1.0, colR.radiusTailScale, distOnVec / capsuleHeight);\r\n const targetDist = r + ptR.pointRadius;\r\n if (pushDist < targetDist) {\r\n const scaled = Vector3.scale(pushVec, targetDist / pushDist, _pushoutCapsuleScaled);\r\n Vector3.add(posOnVec, scaled, scaled);\r\n return writeCollisionResult(out, true, scaled, !out);\r\n }\r\n }\r\n return writeCollisionResult(out, false, point, !out);\r\n}\r\n\r\n/**\r\n * Pulls a point inside a sphere collider.\r\n *\r\n * @public\r\n */\r\nexport function pushInFromSphere(\r\n center: Vector3,\r\n radius: number,\r\n point: Vector3,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n const direction = Vector3.sub(center, point, _pushInSphereDirection);\r\n const sqrLen = direction.magnitudeSq;\r\n if (sqrLen > EPSILON && sqrLen > radius * radius) {\r\n const dirLen = Math.sqrt(sqrLen);\r\n const directionN = Vector3.normalize(direction, _pushInSphereDirectionN);\r\n const scaled = Vector3.scale(directionN, dirLen - radius, _pushInSphereScaled);\r\n Vector3.add(point, scaled, scaled);\r\n return writeCollisionResult(out, true, scaled, !out);\r\n }\r\n return writeCollisionResult(out, false, point, !out);\r\n}\r\n\r\n/**\r\n * Pulls a point inside a collider.\r\n *\r\n * @public\r\n */\r\nexport function pushInFromCollider(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point: Vector3,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n if (colR.height <= EPSILON) {\r\n return pushInFromSphere(colRW.positionCurrent, colRW.radius, point, out);\r\n }\r\n return pushInFromCapsule(colR, colRW, point, out);\r\n}\r\n\r\n/**\r\n * Pulls a point inside a capsule collider.\r\n *\r\n * @public\r\n */\r\nexport function pushInFromCapsule(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point: Vector3,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n const capsuleVec = colRW.directionCurrent;\r\n const capsuleHeight = colRW.height > EPSILON ? colRW.height : capsuleVec.magnitude;\r\n const capsuleVecN = Vector3.normalize(capsuleVec, _pushInCapsuleVecN);\r\n const capsulePos = colRW.positionCurrent;\r\n const targetVec = Vector3.sub(point, capsulePos, _pushInCapsuleTargetVec);\r\n const distOnVec = Vector3.dot(capsuleVecN, targetVec);\r\n\r\n if (distOnVec <= EPSILON) {\r\n return pushInFromSphere(capsulePos, colRW.radius, point, out);\r\n }\r\n if (distOnVec >= capsuleHeight) {\r\n const tail = Vector3.add(capsulePos, capsuleVec, _pushInCapsuleTail);\r\n return pushInFromSphere(tail, colRW.radius * colR.radiusTailScale, point, out);\r\n }\r\n\r\n const posOnVec = Vector3.scale(capsuleVecN, distOnVec, _pushInCapsulePosOnVec);\r\n Vector3.add(capsulePos, posOnVec, posOnVec);\r\n const pullVec = Vector3.sub(posOnVec, point, _pushInCapsulePullVec);\r\n const sqrPullDist = pullVec.magnitudeSq;\r\n if (sqrPullDist > EPSILON) {\r\n const r = colRW.radius * lerp(1.0, colR.radiusTailScale, distOnVec / capsuleHeight);\r\n if (sqrPullDist > r * r) {\r\n const pullDist = Math.sqrt(sqrPullDist);\r\n const pullVecN = Vector3.normalize(pullVec, _pushInCapsulePullVecN);\r\n const scaled = Vector3.scale(pullVecN, pullDist - r, _pushInCapsuleScaled);\r\n Vector3.add(point, scaled, scaled);\r\n return writeCollisionResult(out, true, scaled, !out);\r\n }\r\n }\r\n return writeCollisionResult(out, false, point, !out);\r\n}\r\n\r\n/**\r\n * Performs sphere collision detection.\r\n *\r\n * @public\r\n */\r\nexport function collisionDetectionSphere(\r\n center: Vector3,\r\n radius: number,\r\n point1: Vector3,\r\n point2: Vector3,\r\n out?: LineCollisionResult\r\n): LineCollisionResult {\r\n const dir = Vector3.sub(point2, point1, _collisionSphereDir);\r\n const dirLen = dir.magnitude;\r\n if (dirLen < EPSILON) {\r\n return writeLineCollisionResult(out, false, point1, center, radius, !out);\r\n }\r\n const dirN = Vector3.scale(dir, 1 / dirLen, _collisionSphereDirN);\r\n const toCenter = Vector3.sub(center, point1, _collisionSphereToCenter);\r\n const dot = Vector3.dot(dirN, toCenter);\r\n const clamped = Math.max(0, Math.min(dot, dirLen));\r\n const ptOnLine = Vector3.scale(dirN, clamped, _collisionSphereScaled);\r\n Vector3.add(point1, ptOnLine, ptOnLine);\r\n const diff = Vector3.sub(center, ptOnLine, _collisionSphereDiff);\r\n const hit = diff.magnitudeSq <= radius * radius;\r\n return writeLineCollisionResult(out, hit, ptOnLine, center, radius, !out);\r\n}\r\n\r\n/**\r\n * Performs capsule collision detection.\r\n *\r\n * @public\r\n */\r\nexport function collisionDetectionCapsule(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point1: Vector3,\r\n point2: Vector3,\r\n out?: LineCollisionResult\r\n): LineCollisionResult {\r\n const capsuleDir = colRW.directionCurrent;\r\n const capsulePos = colRW.positionCurrent;\r\n\r\n let res = collisionDetectionSphere(capsulePos, colRW.radius, point1, point2, out);\r\n if (res.hit) {\r\n return res;\r\n }\r\n\r\n const tail = Vector3.add(capsulePos, capsuleDir, _collisionCapsuleTail);\r\n res = collisionDetectionSphere(\r\n tail,\r\n colRW.radius * colR.radiusTailScale,\r\n point1,\r\n point2,\r\n _collisionCapsuleTempLineResult\r\n );\r\n if (res.hit) {\r\n return writeLineCollisionResult(out, true, res.pointOnLine, res.pointOnCollider, res.radius, !out);\r\n }\r\n\r\n const pointDir = Vector3.sub(point2, point1, _collisionCapsulePointDir);\r\n const nearest = computeNearestPoints(capsulePos, capsuleDir, point1, pointDir, _nearestResult);\r\n const t1 = Math.max(0, Math.min(1, nearest.tP));\r\n const r = colRW.radius * lerp(1.0, colR.radiusTailScale, t1);\r\n\r\n if (nearest.sqrDistance > r * r) {\r\n return writeLineCollisionResult(out, false, point1, capsulePos, r, !out);\r\n }\r\n\r\n const t2 = Math.max(0, Math.min(1, nearest.tQ));\r\n const ptOnCol = Vector3.scale(capsuleDir, t1, _collisionCapsulePtOnCol);\r\n Vector3.add(capsulePos, ptOnCol, ptOnCol);\r\n const ptOnLine = Vector3.scale(pointDir, t2, _collisionCapsulePtOnLine);\r\n Vector3.add(point1, ptOnLine, ptOnLine);\r\n const diff = Vector3.sub(ptOnCol, ptOnLine, _collisionCapsuleDiff);\r\n const hit = diff.magnitudeSq <= r * r;\r\n return writeLineCollisionResult(out, hit, ptOnLine, ptOnCol, r, !out);\r\n}\r\n\r\n/**\r\n * Performs collision detection against the specified collider.\r\n *\r\n * @public\r\n */\r\nexport function collisionDetection(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point1: Vector3,\r\n point2: Vector3,\r\n out?: LineCollisionResult\r\n): LineCollisionResult {\r\n if (colR.height <= EPSILON) {\r\n return collisionDetectionSphere(colRW.positionCurrent, colRW.radius, point1, point2, out);\r\n }\r\n return collisionDetectionCapsule(colR, colRW, point1, point2, out);\r\n}\r\n\r\n/**\r\n * Performs inward collision detection.\r\n *\r\n * @public\r\n */\r\nexport function pushInCollisionDetection(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point1: Vector3,\r\n point2: Vector3,\r\n out?: LineCollisionResult\r\n): LineCollisionResult {\r\n if (colR.height <= EPSILON) {\r\n return collisionDetectionSphere(colRW.positionCurrent, colRW.radius, point1, point2, out);\r\n }\r\n const res = collisionDetectionCapsule(colR, colRW, point1, point2, out);\r\n res.hit = false;\r\n return res;\r\n}\r\n\r\n/**\r\n * Computes the nearest points between two segments.\r\n *\r\n * @public\r\n */\r\nexport function computeNearestPoints(\r\n posP: Vector3,\r\n dirP: Vector3,\r\n posQ: Vector3,\r\n dirQ: Vector3,\r\n out?: NearestPointsResult\r\n): {\r\n tP: number;\r\n tQ: number;\r\n pointOnP: Vector3;\r\n pointOnQ: Vector3;\r\n sqrDistance: number;\r\n} {\r\n const cross0 = Vector3.cross(dirQ, dirP, _nearestCross0);\r\n const n1 = Vector3.cross(dirP, cross0, _nearestN1);\r\n const cross1 = Vector3.cross(dirP, dirQ, _nearestCross1);\r\n const n2 = Vector3.cross(dirQ, cross1, _nearestN2);\r\n const dP_n2 = Vector3.dot(dirP, n2);\r\n const dQ_n1 = Vector3.dot(dirQ, n1);\r\n const posDiff = Vector3.sub(posQ, posP, _nearestPosDiff);\r\n const tP = dP_n2 !== 0 ? Vector3.dot(posDiff, n2) / dP_n2 : 0;\r\n const tQ = dQ_n1 !== 0 ? Vector3.dot(Vector3.scale(posDiff, -1, posDiff), n1) / dQ_n1 : 0;\r\n const pointOnP = Vector3.scale(dirP, tP, _nearestPointOnP);\r\n Vector3.add(posP, pointOnP, pointOnP);\r\n const pointOnQ = Vector3.scale(dirQ, tQ, _nearestPointOnQ);\r\n Vector3.add(posQ, pointOnQ, pointOnQ);\r\n const diff = Vector3.sub(pointOnQ, pointOnP, _nearestPointDiff);\r\n return writeNearestPointsResult(out, tP, tQ, pointOnP, pointOnQ, diff.magnitudeSq, !out);\r\n}\r\n\r\n/**\r\n * Checks triangle-surface collision against a collider.\r\n *\r\n * @public\r\n */\r\nexport function checkSurfaceCollision(\r\n ptA: Vector3,\r\n ptB: Vector3,\r\n ptC: Vector3,\r\n colliderPos: Vector3,\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n out?: SurfaceCheckResult\r\n): SurfaceCheckResult {\r\n _surfaceNoHit.hit = false;\r\n _surfaceNoHit.intersectionPoint.setXYZ(0, 0, 0);\r\n _surfaceNoHit.pushOut.setXYZ(0, 0, 0);\r\n _surfaceNoHit.pointOnCollider.set(colliderPos);\r\n _surfaceNoHit.radius = colRW.radius;\r\n\r\n let pointOnCollider = colliderPos;\r\n let radius = colRW.radius;\r\n const isCapsule = colR.height > EPSILON;\r\n\r\n const triCenter = centerOfTriangle(ptA, ptB, ptC, _surfaceTriCenter);\r\n const edgeAB = Vector3.sub(ptB, ptA, _surfaceEdgeAB);\r\n const edgeAC = Vector3.sub(ptC, ptA, _surfaceEdgeAC);\r\n const planeNormal = Vector3.cross(edgeAB, edgeAC, _surfacePlaneNormal);\r\n Vector3.normalize(planeNormal, planeNormal);\r\n Vector3.scale(planeNormal, -1, planeNormal);\r\n const planeNormalNeg = Vector3.scale(planeNormal, -1, _surfacePlaneNormalNeg);\r\n const planeDist = -Vector3.dot(planeNormalNeg, ptA);\r\n const colliderDir = Vector3.sub(colliderPos, triCenter, _surfaceColliderDir);\r\n Vector3.normalize(colliderDir, colliderDir);\r\n const dot = Vector3.dot(colliderDir, planeNormal);\r\n\r\n if (isCapsule) {\r\n const side = Vector3.dot(colRW.directionCurrent, planeNormal) * dot;\r\n const rayDir = Vector3.scale(planeNormal, dot * -1, _surfaceRayDir);\r\n const tempPOC = pointOnCollider;\r\n\r\n if (side < 0) {\r\n radius = colRW.radius * colR.radiusTailScale;\r\n pointOnCollider = Vector3.add(colliderPos, colRW.directionCurrent, _surfaceTail);\r\n }\r\n\r\n const rayDirN = Vector3.normalize(rayDir, _surfaceRayDirN);\r\n const enter = raycast(planeNormalNeg, planeDist, pointOnCollider, rayDirN);\r\n if (enter !== null) {\r\n const ip = Vector3.scale(rayDirN, enter, _surfaceIntersection);\r\n Vector3.add(pointOnCollider, ip, ip);\r\n if (triangleContainsPoint(ptA, ptB, ptC, ip)) {\r\n const pushOut = Vector3.sub(ip, pointOnCollider, _surfacePushOut);\r\n const toCol = Vector3.sub(pointOnCollider, ip, _surfaceToCol);\r\n if (toCol.magnitudeSq <= radius * radius) {\r\n return writeSurfaceCheckResult(out, true, ip, pushOut, pointOnCollider, radius, !out);\r\n }\r\n }\r\n } else if (colR.forceType !== ColliderForce.Off) {\r\n pointOnCollider = tempPOC;\r\n let endVec = Vector3.add(colliderPos, colRW.directionCurrent, _surfaceEndVec);\r\n _surfaceColDirVec.set(colRW.directionCurrent);\r\n let colDirVec = _surfaceColDirVec;\r\n if (colR.forceType === ColliderForce.Pull) {\r\n const tmp = pointOnCollider;\r\n pointOnCollider = endVec;\r\n endVec = tmp;\r\n colDirVec = Vector3.scale(colDirVec, -1, colDirVec);\r\n }\r\n const enter2 = raycast(planeNormalNeg, planeDist, pointOnCollider, colDirVec);\r\n if (enter2 !== null) {\r\n const ip = Vector3.scale(colDirVec, enter2, _surfaceIntersection);\r\n Vector3.add(pointOnCollider, ip, ip);\r\n if (triangleContainsPoint(ptA, ptB, ptC, ip)) {\r\n const intersecToEnd = Vector3.sub(endVec, ip, _surfaceIntersecToEnd);\r\n const colToEnd = Vector3.sub(endVec, pointOnCollider, _surfaceColToEnd);\r\n const colToIntersect = Vector3.sub(ip, pointOnCollider, _surfaceColToIntersect);\r\n const pDot = Vector3.dot(intersecToEnd, colToIntersect);\r\n const lDot = Vector3.dot(colToEnd, colToEnd);\r\n if (!(pDot >= 0 && pDot <= lDot)) {\r\n return writeSurfaceCheckResult(\r\n out,\r\n _surfaceNoHit.hit,\r\n _surfaceNoHit.intersectionPoint,\r\n _surfaceNoHit.pushOut,\r\n _surfaceNoHit.pointOnCollider,\r\n _surfaceNoHit.radius,\r\n !out\r\n );\r\n }\r\n const dotVal = Vector3.dot(colToEnd, colToIntersect);\r\n const s2eMag = Vector3.dot(colToEnd, colToEnd);\r\n const colToEndN = Vector3.normalize(colToEnd, colToEnd);\r\n const eVec = Vector3.scale(colToEndN, -radius, _surfaceEVec);\r\n Vector3.add(pointOnCollider, eVec, eVec);\r\n const pushOut = Vector3.sub(ip, eVec, _surfacePushOut);\r\n const poc2 = Vector3.scale(colToEnd, dotVal / s2eMag, _surfacePoc2);\r\n Vector3.add(pointOnCollider, poc2, poc2);\r\n const toCol = Vector3.sub(poc2, ip, _surfaceToCol);\r\n if (toCol.magnitudeSq <= radius * radius) {\r\n return writeSurfaceCheckResult(out, true, ip, pushOut, poc2, radius, !out);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n const rayDir = Vector3.scale(planeNormal, dot * -1, _surfaceRayDir);\r\n const rayDirN = Vector3.normalize(rayDir, _surfaceRayDirN);\r\n const enter = raycast(planeNormalNeg, planeDist, pointOnCollider, rayDirN);\r\n if (enter !== null) {\r\n const ip = Vector3.scale(rayDirN, enter, _surfaceIntersection);\r\n Vector3.add(pointOnCollider, ip, ip);\r\n if (triangleContainsPoint(ptA, ptB, ptC, ip)) {\r\n const pushOut = Vector3.sub(ip, pointOnCollider, _surfacePushOut);\r\n const toCol = Vector3.sub(pointOnCollider, ip, _surfaceToCol);\r\n if (toCol.magnitudeSq <= radius * radius) {\r\n return writeSurfaceCheckResult(out, true, ip, pushOut, pointOnCollider, radius, !out);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return writeSurfaceCheckResult(\r\n out,\r\n _surfaceNoHit.hit,\r\n _surfaceNoHit.intersectionPoint,\r\n _surfaceNoHit.pushOut,\r\n _surfaceNoHit.pointOnCollider,\r\n _surfaceNoHit.radius,\r\n !out\r\n );\r\n}\r\n\r\nfunction raycast(normal: Vector3, planeDist: number, origin: Vector3, direction: Vector3): number | null {\r\n const vdot = Vector3.dot(direction, normal);\r\n const ndot = -Vector3.dot(origin, normal) - planeDist;\r\n if (Math.abs(vdot) <= EPSILON) {\r\n return null;\r\n }\r\n const enter = ndot / vdot;\r\n return enter > 0 ? enter : null;\r\n}\r\n\r\nfunction centerOfTriangle(a: Vector3, b: Vector3, c: Vector3, result?: Vector3): Vector3 {\r\n result = result || new Vector3();\r\n return result.setXYZ((a.x + b.x + c.x) / 3, (a.y + b.y + c.y) / 3, (a.z + b.z + c.z) / 3);\r\n}\r\n\r\nfunction triangleContainsPoint(a: Vector3, b: Vector3, c: Vector3, p: Vector3): boolean {\r\n const ap = Vector3.sub(a, p, _triangleAp);\r\n const bp = Vector3.sub(b, p, _triangleBp);\r\n const cp = Vector3.sub(c, p, _triangleCp);\r\n const u = Vector3.cross(ap, bp, _triangleU);\r\n const vv = Vector3.cross(bp, cp, _triangleV);\r\n const w = Vector3.cross(cp, ap, _triangleW);\r\n if (Vector3.dot(u, vv) < 0) {\r\n return false;\r\n }\r\n if (Vector3.dot(vv, w) < 0) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nfunction lerp(a: number, b: number, t: number): number {\r\n return a + (b - a) * t;\r\n}\r\n"],"names":["_pushoutSphereDirection","Vector3","_pushoutSphereScaled","_pushoutCapsuleVecN","_pushoutCapsuleTargetVec","_pushoutCapsuleTail","_pushoutCapsulePosOnVec","_pushoutCapsulePushVec","_pushoutCapsuleScaled","_pushInSphereDirection","_pushInSphereDirectionN","_pushInSphereScaled","_pushInCapsuleVecN","_pushInCapsuleTargetVec","_pushInCapsuleTail","_pushInCapsulePosOnVec","_pushInCapsulePullVec","_pushInCapsulePullVecN","_pushInCapsuleScaled","_collisionSphereDir","_collisionSphereDirN","_collisionSphereToCenter","_collisionSphereScaled","_collisionSphereDiff","_collisionCapsuleTail","_collisionCapsulePointDir","_collisionCapsulePtOnCol","_collisionCapsulePtOnLine","_collisionCapsuleDiff","_collisionCapsuleTempLineResult","hit","pointOnLine","pointOnCollider","radius","_nearestCross0","_nearestCross1","_nearestN1","_nearestN2","_nearestPosDiff","_nearestPointOnP","_nearestPointOnQ","_nearestPointDiff","_nearestResult","tP","tQ","pointOnP","pointOnQ","sqrDistance","_surfaceNoHit","intersectionPoint","pushOut","_surfaceTriCenter","_surfaceEdgeAB","_surfaceEdgeAC","_surfacePlaneNormal","_surfacePlaneNormalNeg","_surfaceColliderDir","_surfaceRayDir","_surfaceRayDirN","_surfaceTail","_surfaceIntersection","_surfacePushOut","_surfaceToCol","_surfaceEndVec","_surfaceColDirVec","_surfaceIntersecToEnd","_surfaceColToEnd","_surfaceColToIntersect","_surfaceEVec","_surfacePoc2","_triangleAp","_triangleBp","_triangleCp","_triangleU","_triangleV","_triangleW","writeCollisionResult","out","point","copyPoint","clone","set","writeLineCollisionResult","copyVectors","writeSurfaceCheckResult","writeNearestPointsResult","pushoutFromSphere","center","pointRadius","direction","sub","sqrLen","magnitudeSq","EPSILON","dist","Math","sqrt","targetDist","scaled","scale","add","pushoutFromCollider","colR","colRW","ptR","height","positionCurrent","pushoutFromCapsule","capsuleVec","directionCurrent","capsuleHeight","magnitude","capsuleVecN","normalize","capsulePos","targetVec","distOnVec","dot","tail","radiusTailScale","posOnVec","pushVec","sqrPushDist","pushDist","r","lerp","pushInFromSphere","dirLen","directionN","pushInFromCollider","pushInFromCapsule","pullVec","sqrPullDist","pullDist","pullVecN","collisionDetectionSphere","point1","point2","dir","dirN","toCenter","clamped","max","min","ptOnLine","diff","collisionDetectionCapsule","capsuleDir","res","pointDir","nearest","computeNearestPoints","t1","t2","ptOnCol","collisionDetection","pushInCollisionDetection","posP","dirP","posQ","dirQ","cross0","cross","n1","cross1","n2","dP_n2","dQ_n1","posDiff","checkSurfaceCollision","ptA","ptB","ptC","colliderPos","setXYZ","isCapsule","triCenter","centerOfTriangle","edgeAB","edgeAC","planeNormal","planeNormalNeg","planeDist","colliderDir","side","rayDir","tempPOC","rayDirN","enter","raycast","ip","triangleContainsPoint","toCol","forceType","ColliderForce","Off","endVec","colDirVec","Pull","tmp","enter2","intersecToEnd","colToEnd","colToIntersect","pDot","lDot","dotVal","s2eMag","colToEndN","eVec","poc2","normal","origin","vdot","ndot","abs","a","b","c","result","x","y","z","p","ap","bp","cp","u","vv","w","t"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"collision.js","sources":["../../../src/animation/joint_dynamics/collision.ts"],"sourcesContent":["// Collision routines ported from SPCRJointDynamicsJob.cs.\r\n\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport type { ColliderR, ColliderRW, PointR } from './types';\r\nimport { EPSILON, ColliderForce } from './types';\r\n\r\n/** @public */\r\nexport interface CollisionResult {\r\n hit: boolean;\r\n point: Vector3;\r\n}\r\n\r\n/** @public */\r\nexport interface LineCollisionResult {\r\n hit: boolean;\r\n pointOnLine: Vector3;\r\n pointOnCollider: Vector3;\r\n radius: number;\r\n}\r\n\r\n/** @public */\r\nexport interface SurfaceCheckResult {\r\n hit: boolean;\r\n intersectionPoint: Vector3;\r\n pushOut: Vector3;\r\n pointOnCollider: Vector3;\r\n radius: number;\r\n}\r\n\r\n/** @public */\r\nexport interface NearestPointsResult {\r\n tP: number;\r\n tQ: number;\r\n pointOnP: Vector3;\r\n pointOnQ: Vector3;\r\n sqrDistance: number;\r\n}\r\n\r\nconst _pushoutSphereDirection = new Vector3();\r\nconst _pushoutSphereScaled = new Vector3();\r\nconst _pushoutCapsuleVecN = new Vector3();\r\nconst _pushoutCapsuleTargetVec = new Vector3();\r\nconst _pushoutCapsuleTail = new Vector3();\r\nconst _pushoutCapsulePosOnVec = new Vector3();\r\nconst _pushoutCapsulePushVec = new Vector3();\r\nconst _pushoutCapsuleScaled = new Vector3();\r\nconst _pushInSphereDirection = new Vector3();\r\nconst _pushInSphereDirectionN = new Vector3();\r\nconst _pushInSphereScaled = new Vector3();\r\nconst _pushInCapsuleVecN = new Vector3();\r\nconst _pushInCapsuleTargetVec = new Vector3();\r\nconst _pushInCapsuleTail = new Vector3();\r\nconst _pushInCapsulePosOnVec = new Vector3();\r\nconst _pushInCapsulePullVec = new Vector3();\r\nconst _pushInCapsulePullVecN = new Vector3();\r\nconst _pushInCapsuleScaled = new Vector3();\r\nconst _collisionSphereDir = new Vector3();\r\nconst _collisionSphereDirN = new Vector3();\r\nconst _collisionSphereToCenter = new Vector3();\r\nconst _collisionSphereScaled = new Vector3();\r\nconst _collisionSphereDiff = new Vector3();\r\nconst _collisionCapsuleTail = new Vector3();\r\nconst _collisionCapsulePointDir = new Vector3();\r\nconst _collisionCapsulePtOnCol = new Vector3();\r\nconst _collisionCapsulePtOnLine = new Vector3();\r\nconst _collisionCapsuleDiff = new Vector3();\r\nconst _collisionCapsuleTempLineResult: LineCollisionResult = {\r\n hit: false,\r\n pointOnLine: new Vector3(),\r\n pointOnCollider: new Vector3(),\r\n radius: 0\r\n};\r\nconst _nearestCross0 = new Vector3();\r\nconst _nearestCross1 = new Vector3();\r\nconst _nearestN1 = new Vector3();\r\nconst _nearestN2 = new Vector3();\r\nconst _nearestPosDiff = new Vector3();\r\nconst _nearestPointOnP = new Vector3();\r\nconst _nearestPointOnQ = new Vector3();\r\nconst _nearestPointDiff = new Vector3();\r\nconst _nearestResult: NearestPointsResult = {\r\n tP: 0,\r\n tQ: 0,\r\n pointOnP: new Vector3(),\r\n pointOnQ: new Vector3(),\r\n sqrDistance: 0\r\n};\r\nconst _surfaceNoHit: SurfaceCheckResult = {\r\n hit: false,\r\n intersectionPoint: new Vector3(),\r\n pushOut: new Vector3(),\r\n pointOnCollider: new Vector3(),\r\n radius: 0\r\n};\r\nconst _surfaceTriCenter = new Vector3();\r\nconst _surfaceEdgeAB = new Vector3();\r\nconst _surfaceEdgeAC = new Vector3();\r\nconst _surfacePlaneNormal = new Vector3();\r\nconst _surfacePlaneNormalNeg = new Vector3();\r\nconst _surfaceColliderDir = new Vector3();\r\nconst _surfaceRayDir = new Vector3();\r\nconst _surfaceRayDirN = new Vector3();\r\nconst _surfaceTail = new Vector3();\r\nconst _surfaceIntersection = new Vector3();\r\nconst _surfacePushOut = new Vector3();\r\nconst _surfaceToCol = new Vector3();\r\nconst _surfaceEndVec = new Vector3();\r\nconst _surfaceColDirVec = new Vector3();\r\nconst _surfaceIntersecToEnd = new Vector3();\r\nconst _surfaceColToEnd = new Vector3();\r\nconst _surfaceColToIntersect = new Vector3();\r\nconst _surfaceEVec = new Vector3();\r\nconst _surfacePoc2 = new Vector3();\r\nconst _triangleAp = new Vector3();\r\nconst _triangleBp = new Vector3();\r\nconst _triangleCp = new Vector3();\r\nconst _triangleU = new Vector3();\r\nconst _triangleV = new Vector3();\r\nconst _triangleW = new Vector3();\r\n\r\nfunction writeCollisionResult(\r\n out: CollisionResult | undefined,\r\n hit: boolean,\r\n point: Vector3,\r\n copyPoint: boolean\r\n) {\r\n if (!out) {\r\n return { hit, point: copyPoint ? point.clone() : point };\r\n }\r\n if (!out.point) {\r\n out.point = new Vector3();\r\n }\r\n out.hit = hit;\r\n out.point.set(point);\r\n return out;\r\n}\r\n\r\nfunction writeLineCollisionResult(\r\n out: LineCollisionResult | undefined,\r\n hit: boolean,\r\n pointOnLine: Vector3,\r\n pointOnCollider: Vector3,\r\n radius: number,\r\n copyVectors: boolean\r\n) {\r\n if (!out) {\r\n return {\r\n hit,\r\n pointOnLine: copyVectors ? pointOnLine.clone() : pointOnLine,\r\n pointOnCollider: copyVectors ? pointOnCollider.clone() : pointOnCollider,\r\n radius\r\n };\r\n }\r\n if (!out.pointOnLine) {\r\n out.pointOnLine = new Vector3();\r\n }\r\n if (!out.pointOnCollider) {\r\n out.pointOnCollider = new Vector3();\r\n }\r\n out.hit = hit;\r\n out.pointOnLine.set(pointOnLine);\r\n out.pointOnCollider.set(pointOnCollider);\r\n out.radius = radius;\r\n return out;\r\n}\r\n\r\nfunction writeSurfaceCheckResult(\r\n out: SurfaceCheckResult | undefined,\r\n hit: boolean,\r\n intersectionPoint: Vector3,\r\n pushOut: Vector3,\r\n pointOnCollider: Vector3,\r\n radius: number,\r\n copyVectors: boolean\r\n) {\r\n if (!out) {\r\n return {\r\n hit,\r\n intersectionPoint: copyVectors ? intersectionPoint.clone() : intersectionPoint,\r\n pushOut: copyVectors ? pushOut.clone() : pushOut,\r\n pointOnCollider: copyVectors ? pointOnCollider.clone() : pointOnCollider,\r\n radius\r\n };\r\n }\r\n if (!out.intersectionPoint) {\r\n out.intersectionPoint = new Vector3();\r\n }\r\n if (!out.pushOut) {\r\n out.pushOut = new Vector3();\r\n }\r\n if (!out.pointOnCollider) {\r\n out.pointOnCollider = new Vector3();\r\n }\r\n out.hit = hit;\r\n out.intersectionPoint.set(intersectionPoint);\r\n out.pushOut.set(pushOut);\r\n out.pointOnCollider.set(pointOnCollider);\r\n out.radius = radius;\r\n return out;\r\n}\r\n\r\nfunction writeNearestPointsResult(\r\n out: NearestPointsResult | undefined,\r\n tP: number,\r\n tQ: number,\r\n pointOnP: Vector3,\r\n pointOnQ: Vector3,\r\n sqrDistance: number,\r\n copyVectors: boolean\r\n) {\r\n if (!out) {\r\n return {\r\n tP,\r\n tQ,\r\n pointOnP: copyVectors ? pointOnP.clone() : pointOnP,\r\n pointOnQ: copyVectors ? pointOnQ.clone() : pointOnQ,\r\n sqrDistance\r\n };\r\n }\r\n out.tP = tP;\r\n out.tQ = tQ;\r\n out.pointOnP.set(pointOnP);\r\n out.pointOnQ.set(pointOnQ);\r\n out.sqrDistance = sqrDistance;\r\n return out;\r\n}\r\n\r\n/**\r\n * Pushes a point out of a sphere collider.\r\n *\r\n * @public\r\n */\r\nexport function pushoutFromSphere(\r\n center: Vector3,\r\n radius: number,\r\n pointRadius: number,\r\n point: Vector3,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n const direction = Vector3.sub(point, center, _pushoutSphereDirection);\r\n const sqrLen = direction.magnitudeSq;\r\n if (sqrLen > EPSILON) {\r\n const dist = Math.sqrt(sqrLen);\r\n const targetDist = radius + pointRadius;\r\n if (dist < targetDist) {\r\n const scaled = Vector3.scale(direction, targetDist / dist, _pushoutSphereScaled);\r\n Vector3.add(center, scaled, scaled);\r\n return writeCollisionResult(out, true, scaled, !out);\r\n }\r\n }\r\n return writeCollisionResult(out, false, point, !out);\r\n}\r\n\r\n/**\r\n * Pushes a point out of a collider.\r\n *\r\n * @public\r\n */\r\nexport function pushoutFromCollider(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point: Vector3,\r\n ptR: PointR,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n if (colR.boxHalfExtents) {\r\n return pushoutFromBox(colRW, colR.boxHalfExtents, ptR.pointRadius, point, out);\r\n }\r\n if (colR.height <= EPSILON) {\r\n return pushoutFromSphere(colRW.positionCurrent, colRW.radius, ptR.pointRadius, point, out);\r\n }\r\n return pushoutFromCapsule(colR, colRW, point, ptR, out);\r\n}\r\n\r\n/** Pushes a point out of an oriented box collider. */\r\nexport function pushoutFromBox(\r\n colRW: ColliderRW,\r\n halfExtents: Vector3,\r\n pointRadius: number,\r\n point: Vector3,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n const delta = Vector3.sub(point, colRW.positionCurrent, _pushoutSphereDirection);\r\n const local = new Vector3(\r\n Vector3.dot(delta, colRW.boxAxes[0]),\r\n Vector3.dot(delta, colRW.boxAxes[1]),\r\n Vector3.dot(delta, colRW.boxAxes[2])\r\n );\r\n const target = new Vector3(\r\n halfExtents.x + pointRadius,\r\n halfExtents.y + pointRadius,\r\n halfExtents.z + pointRadius\r\n );\r\n const penetration = new Vector3(\r\n target.x - Math.abs(local.x),\r\n target.y - Math.abs(local.y),\r\n target.z - Math.abs(local.z)\r\n );\r\n if (penetration.x < 0 || penetration.y < 0 || penetration.z < 0) {\r\n return writeCollisionResult(out, false, point, !out);\r\n }\r\n let axis = 0;\r\n let minPenetration = penetration.x;\r\n if (penetration.y < minPenetration) {\r\n axis = 1;\r\n minPenetration = penetration.y;\r\n }\r\n if (penetration.z < minPenetration) {\r\n axis = 2;\r\n minPenetration = penetration.z;\r\n }\r\n const value = axis === 0 ? local.x : axis === 1 ? local.y : local.z;\r\n const sign = value < 0 ? -1 : 1;\r\n const result = point.clone();\r\n const correction = Vector3.scale(colRW.boxAxes[axis], minPenetration * sign, new Vector3());\r\n Vector3.add(result, correction, result);\r\n return writeCollisionResult(out, true, result, !out);\r\n}\r\n\r\n/**\r\n * Pushes a point out of a capsule collider.\r\n *\r\n * @public\r\n */\r\nexport function pushoutFromCapsule(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point: Vector3,\r\n ptR: PointR,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n const capsuleVec = colRW.directionCurrent;\r\n const capsuleHeight = colRW.height > EPSILON ? colRW.height : capsuleVec.magnitude;\r\n const capsuleVecN = Vector3.normalize(capsuleVec, _pushoutCapsuleVecN);\r\n const capsulePos = colRW.positionCurrent;\r\n const targetVec = Vector3.sub(point, capsulePos, _pushoutCapsuleTargetVec);\r\n const distOnVec = Vector3.dot(capsuleVecN, targetVec);\r\n\r\n if (distOnVec <= EPSILON) {\r\n return pushoutFromSphere(capsulePos, colRW.radius, ptR.pointRadius, point, out);\r\n }\r\n if (distOnVec >= capsuleHeight) {\r\n const tail = Vector3.add(capsulePos, capsuleVec, _pushoutCapsuleTail);\r\n return pushoutFromSphere(tail, colRW.radius * colR.radiusTailScale, ptR.pointRadius, point, out);\r\n }\r\n\r\n const posOnVec = Vector3.scale(capsuleVecN, distOnVec, _pushoutCapsulePosOnVec);\r\n Vector3.add(capsulePos, posOnVec, posOnVec);\r\n const pushVec = Vector3.sub(point, posOnVec, _pushoutCapsulePushVec);\r\n const sqrPushDist = pushVec.magnitudeSq;\r\n if (sqrPushDist > EPSILON) {\r\n const pushDist = Math.sqrt(sqrPushDist);\r\n const r = colRW.radius * lerp(1.0, colR.radiusTailScale, distOnVec / capsuleHeight);\r\n const targetDist = r + ptR.pointRadius;\r\n if (pushDist < targetDist) {\r\n const scaled = Vector3.scale(pushVec, targetDist / pushDist, _pushoutCapsuleScaled);\r\n Vector3.add(posOnVec, scaled, scaled);\r\n return writeCollisionResult(out, true, scaled, !out);\r\n }\r\n }\r\n return writeCollisionResult(out, false, point, !out);\r\n}\r\n\r\n/**\r\n * Pulls a point inside a sphere collider.\r\n *\r\n * @public\r\n */\r\nexport function pushInFromSphere(\r\n center: Vector3,\r\n radius: number,\r\n point: Vector3,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n const direction = Vector3.sub(center, point, _pushInSphereDirection);\r\n const sqrLen = direction.magnitudeSq;\r\n if (sqrLen > EPSILON && sqrLen > radius * radius) {\r\n const dirLen = Math.sqrt(sqrLen);\r\n const directionN = Vector3.normalize(direction, _pushInSphereDirectionN);\r\n const scaled = Vector3.scale(directionN, dirLen - radius, _pushInSphereScaled);\r\n Vector3.add(point, scaled, scaled);\r\n return writeCollisionResult(out, true, scaled, !out);\r\n }\r\n return writeCollisionResult(out, false, point, !out);\r\n}\r\n\r\n/**\r\n * Pulls a point inside a collider.\r\n *\r\n * @public\r\n */\r\nexport function pushInFromCollider(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point: Vector3,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n if (colR.boxHalfExtents) {\r\n return pushInFromBox(colRW, colR.boxHalfExtents, point, out);\r\n }\r\n if (colR.height <= EPSILON) {\r\n return pushInFromSphere(colRW.positionCurrent, colRW.radius, point, out);\r\n }\r\n return pushInFromCapsule(colR, colRW, point, out);\r\n}\r\n\r\n/** Pulls a point back inside an oriented box collider. */\r\nexport function pushInFromBox(\r\n colRW: ColliderRW,\r\n halfExtents: Vector3,\r\n point: Vector3,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n const delta = Vector3.sub(point, colRW.positionCurrent, _pushInSphereDirection);\r\n const local = new Vector3(\r\n Vector3.dot(delta, colRW.boxAxes[0]),\r\n Vector3.dot(delta, colRW.boxAxes[1]),\r\n Vector3.dot(delta, colRW.boxAxes[2])\r\n );\r\n const excess = new Vector3(\r\n Math.abs(local.x) - halfExtents.x,\r\n Math.abs(local.y) - halfExtents.y,\r\n Math.abs(local.z) - halfExtents.z\r\n );\r\n if (excess.x <= 0 && excess.y <= 0 && excess.z <= 0) {\r\n return writeCollisionResult(out, false, point, !out);\r\n }\r\n let axis = 0;\r\n let correctionDistance = excess.x;\r\n if (excess.y > correctionDistance) {\r\n axis = 1;\r\n correctionDistance = excess.y;\r\n }\r\n if (excess.z > correctionDistance) {\r\n axis = 2;\r\n correctionDistance = excess.z;\r\n }\r\n const value = axis === 0 ? local.x : axis === 1 ? local.y : local.z;\r\n const sign = value < 0 ? -1 : 1;\r\n const correction = Vector3.scale(colRW.boxAxes[axis], -correctionDistance * sign, new Vector3());\r\n const result = Vector3.add(point, correction, new Vector3());\r\n return writeCollisionResult(out, true, result, !out);\r\n}\r\n\r\n/**\r\n * Pulls a point inside a capsule collider.\r\n *\r\n * @public\r\n */\r\nexport function pushInFromCapsule(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point: Vector3,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n const capsuleVec = colRW.directionCurrent;\r\n const capsuleHeight = colRW.height > EPSILON ? colRW.height : capsuleVec.magnitude;\r\n const capsuleVecN = Vector3.normalize(capsuleVec, _pushInCapsuleVecN);\r\n const capsulePos = colRW.positionCurrent;\r\n const targetVec = Vector3.sub(point, capsulePos, _pushInCapsuleTargetVec);\r\n const distOnVec = Vector3.dot(capsuleVecN, targetVec);\r\n\r\n if (distOnVec <= EPSILON) {\r\n return pushInFromSphere(capsulePos, colRW.radius, point, out);\r\n }\r\n if (distOnVec >= capsuleHeight) {\r\n const tail = Vector3.add(capsulePos, capsuleVec, _pushInCapsuleTail);\r\n return pushInFromSphere(tail, colRW.radius * colR.radiusTailScale, point, out);\r\n }\r\n\r\n const posOnVec = Vector3.scale(capsuleVecN, distOnVec, _pushInCapsulePosOnVec);\r\n Vector3.add(capsulePos, posOnVec, posOnVec);\r\n const pullVec = Vector3.sub(posOnVec, point, _pushInCapsulePullVec);\r\n const sqrPullDist = pullVec.magnitudeSq;\r\n if (sqrPullDist > EPSILON) {\r\n const r = colRW.radius * lerp(1.0, colR.radiusTailScale, distOnVec / capsuleHeight);\r\n if (sqrPullDist > r * r) {\r\n const pullDist = Math.sqrt(sqrPullDist);\r\n const pullVecN = Vector3.normalize(pullVec, _pushInCapsulePullVecN);\r\n const scaled = Vector3.scale(pullVecN, pullDist - r, _pushInCapsuleScaled);\r\n Vector3.add(point, scaled, scaled);\r\n return writeCollisionResult(out, true, scaled, !out);\r\n }\r\n }\r\n return writeCollisionResult(out, false, point, !out);\r\n}\r\n\r\n/**\r\n * Performs sphere collision detection.\r\n *\r\n * @public\r\n */\r\nexport function collisionDetectionSphere(\r\n center: Vector3,\r\n radius: number,\r\n point1: Vector3,\r\n point2: Vector3,\r\n out?: LineCollisionResult\r\n): LineCollisionResult {\r\n const dir = Vector3.sub(point2, point1, _collisionSphereDir);\r\n const dirLen = dir.magnitude;\r\n if (dirLen < EPSILON) {\r\n return writeLineCollisionResult(out, false, point1, center, radius, !out);\r\n }\r\n const dirN = Vector3.scale(dir, 1 / dirLen, _collisionSphereDirN);\r\n const toCenter = Vector3.sub(center, point1, _collisionSphereToCenter);\r\n const dot = Vector3.dot(dirN, toCenter);\r\n const clamped = Math.max(0, Math.min(dot, dirLen));\r\n const ptOnLine = Vector3.scale(dirN, clamped, _collisionSphereScaled);\r\n Vector3.add(point1, ptOnLine, ptOnLine);\r\n const diff = Vector3.sub(center, ptOnLine, _collisionSphereDiff);\r\n const hit = diff.magnitudeSq <= radius * radius;\r\n return writeLineCollisionResult(out, hit, ptOnLine, center, radius, !out);\r\n}\r\n\r\n/**\r\n * Performs capsule collision detection.\r\n *\r\n * @public\r\n */\r\nexport function collisionDetectionCapsule(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point1: Vector3,\r\n point2: Vector3,\r\n out?: LineCollisionResult\r\n): LineCollisionResult {\r\n const capsuleDir = colRW.directionCurrent;\r\n const capsulePos = colRW.positionCurrent;\r\n\r\n let res = collisionDetectionSphere(capsulePos, colRW.radius, point1, point2, out);\r\n if (res.hit) {\r\n return res;\r\n }\r\n\r\n const tail = Vector3.add(capsulePos, capsuleDir, _collisionCapsuleTail);\r\n res = collisionDetectionSphere(\r\n tail,\r\n colRW.radius * colR.radiusTailScale,\r\n point1,\r\n point2,\r\n _collisionCapsuleTempLineResult\r\n );\r\n if (res.hit) {\r\n return writeLineCollisionResult(out, true, res.pointOnLine, res.pointOnCollider, res.radius, !out);\r\n }\r\n\r\n const pointDir = Vector3.sub(point2, point1, _collisionCapsulePointDir);\r\n const nearest = computeNearestPoints(capsulePos, capsuleDir, point1, pointDir, _nearestResult);\r\n const t1 = Math.max(0, Math.min(1, nearest.tP));\r\n const r = colRW.radius * lerp(1.0, colR.radiusTailScale, t1);\r\n\r\n if (nearest.sqrDistance > r * r) {\r\n return writeLineCollisionResult(out, false, point1, capsulePos, r, !out);\r\n }\r\n\r\n const t2 = Math.max(0, Math.min(1, nearest.tQ));\r\n const ptOnCol = Vector3.scale(capsuleDir, t1, _collisionCapsulePtOnCol);\r\n Vector3.add(capsulePos, ptOnCol, ptOnCol);\r\n const ptOnLine = Vector3.scale(pointDir, t2, _collisionCapsulePtOnLine);\r\n Vector3.add(point1, ptOnLine, ptOnLine);\r\n const diff = Vector3.sub(ptOnCol, ptOnLine, _collisionCapsuleDiff);\r\n const hit = diff.magnitudeSq <= r * r;\r\n return writeLineCollisionResult(out, hit, ptOnLine, ptOnCol, r, !out);\r\n}\r\n\r\n/**\r\n * Performs collision detection against the specified collider.\r\n *\r\n * @public\r\n */\r\nexport function collisionDetection(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point1: Vector3,\r\n point2: Vector3,\r\n out?: LineCollisionResult\r\n): LineCollisionResult {\r\n if (colR.boxHalfExtents) {\r\n return collisionDetectionBox(colRW, colR.boxHalfExtents, point1, point2, out);\r\n }\r\n if (colR.height <= EPSILON) {\r\n return collisionDetectionSphere(colRW.positionCurrent, colRW.radius, point1, point2, out);\r\n }\r\n return collisionDetectionCapsule(colR, colRW, point1, point2, out);\r\n}\r\n\r\nfunction collisionDetectionBox(\r\n colRW: ColliderRW,\r\n halfExtents: Vector3,\r\n point1: Vector3,\r\n point2: Vector3,\r\n out?: LineCollisionResult\r\n): LineCollisionResult {\r\n const p1 = Vector3.sub(point1, colRW.positionCurrent, new Vector3());\r\n const p2 = Vector3.sub(point2, colRW.positionCurrent, new Vector3());\r\n const a = new Vector3(\r\n Vector3.dot(p1, colRW.boxAxes[0]),\r\n Vector3.dot(p1, colRW.boxAxes[1]),\r\n Vector3.dot(p1, colRW.boxAxes[2])\r\n );\r\n const b = new Vector3(\r\n Vector3.dot(p2, colRW.boxAxes[0]),\r\n Vector3.dot(p2, colRW.boxAxes[1]),\r\n Vector3.dot(p2, colRW.boxAxes[2])\r\n );\r\n const d = Vector3.sub(b, a, new Vector3());\r\n let enter = 0;\r\n let exit = 1;\r\n const mins = [-halfExtents.x, -halfExtents.y, -halfExtents.z];\r\n const maxs = [halfExtents.x, halfExtents.y, halfExtents.z];\r\n const av = [a.x, a.y, a.z];\r\n const dv = [d.x, d.y, d.z];\r\n for (let axis = 0; axis < 3; axis++) {\r\n if (Math.abs(dv[axis]) <= EPSILON) {\r\n if (av[axis] < mins[axis] || av[axis] > maxs[axis]) {\r\n return writeLineCollisionResult(out, false, point1, colRW.positionCurrent, 0, !out);\r\n }\r\n continue;\r\n }\r\n const inv = 1 / dv[axis];\r\n let t0 = (mins[axis] - av[axis]) * inv;\r\n let t1 = (maxs[axis] - av[axis]) * inv;\r\n if (t0 > t1) {\r\n [t0, t1] = [t1, t0];\r\n }\r\n enter = Math.max(enter, t0);\r\n exit = Math.min(exit, t1);\r\n if (enter > exit) {\r\n return writeLineCollisionResult(out, false, point1, colRW.positionCurrent, 0, !out);\r\n }\r\n }\r\n const t = Math.max(0, Math.min(1, enter));\r\n const hitPoint = Vector3.add(\r\n point1,\r\n Vector3.scale(Vector3.sub(point2, point1, new Vector3()), t, new Vector3()),\r\n new Vector3()\r\n );\r\n return writeLineCollisionResult(out, true, hitPoint, hitPoint, 0, !out);\r\n}\r\n\r\n/**\r\n * Performs inward collision detection.\r\n *\r\n * @public\r\n */\r\nexport function pushInCollisionDetection(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point1: Vector3,\r\n point2: Vector3,\r\n out?: LineCollisionResult\r\n): LineCollisionResult {\r\n if (colR.height <= EPSILON) {\r\n return collisionDetectionSphere(colRW.positionCurrent, colRW.radius, point1, point2, out);\r\n }\r\n const res = collisionDetectionCapsule(colR, colRW, point1, point2, out);\r\n res.hit = false;\r\n return res;\r\n}\r\n\r\n/**\r\n * Computes the nearest points between two segments.\r\n *\r\n * @public\r\n */\r\nexport function computeNearestPoints(\r\n posP: Vector3,\r\n dirP: Vector3,\r\n posQ: Vector3,\r\n dirQ: Vector3,\r\n out?: NearestPointsResult\r\n): {\r\n tP: number;\r\n tQ: number;\r\n pointOnP: Vector3;\r\n pointOnQ: Vector3;\r\n sqrDistance: number;\r\n} {\r\n const cross0 = Vector3.cross(dirQ, dirP, _nearestCross0);\r\n const n1 = Vector3.cross(dirP, cross0, _nearestN1);\r\n const cross1 = Vector3.cross(dirP, dirQ, _nearestCross1);\r\n const n2 = Vector3.cross(dirQ, cross1, _nearestN2);\r\n const dP_n2 = Vector3.dot(dirP, n2);\r\n const dQ_n1 = Vector3.dot(dirQ, n1);\r\n const posDiff = Vector3.sub(posQ, posP, _nearestPosDiff);\r\n const tP = dP_n2 !== 0 ? Vector3.dot(posDiff, n2) / dP_n2 : 0;\r\n const tQ = dQ_n1 !== 0 ? Vector3.dot(Vector3.scale(posDiff, -1, posDiff), n1) / dQ_n1 : 0;\r\n const pointOnP = Vector3.scale(dirP, tP, _nearestPointOnP);\r\n Vector3.add(posP, pointOnP, pointOnP);\r\n const pointOnQ = Vector3.scale(dirQ, tQ, _nearestPointOnQ);\r\n Vector3.add(posQ, pointOnQ, pointOnQ);\r\n const diff = Vector3.sub(pointOnQ, pointOnP, _nearestPointDiff);\r\n return writeNearestPointsResult(out, tP, tQ, pointOnP, pointOnQ, diff.magnitudeSq, !out);\r\n}\r\n\r\n/**\r\n * Checks triangle-surface collision against a collider.\r\n *\r\n * @public\r\n */\r\nexport function checkSurfaceCollision(\r\n ptA: Vector3,\r\n ptB: Vector3,\r\n ptC: Vector3,\r\n colliderPos: Vector3,\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n out?: SurfaceCheckResult\r\n): SurfaceCheckResult {\r\n _surfaceNoHit.hit = false;\r\n _surfaceNoHit.intersectionPoint.setXYZ(0, 0, 0);\r\n _surfaceNoHit.pushOut.setXYZ(0, 0, 0);\r\n _surfaceNoHit.pointOnCollider.set(colliderPos);\r\n _surfaceNoHit.radius = colRW.radius;\r\n\r\n let pointOnCollider = colliderPos;\r\n let radius = colRW.radius;\r\n const isCapsule = colR.height > EPSILON;\r\n\r\n const triCenter = centerOfTriangle(ptA, ptB, ptC, _surfaceTriCenter);\r\n const edgeAB = Vector3.sub(ptB, ptA, _surfaceEdgeAB);\r\n const edgeAC = Vector3.sub(ptC, ptA, _surfaceEdgeAC);\r\n const planeNormal = Vector3.cross(edgeAB, edgeAC, _surfacePlaneNormal);\r\n Vector3.normalize(planeNormal, planeNormal);\r\n Vector3.scale(planeNormal, -1, planeNormal);\r\n const planeNormalNeg = Vector3.scale(planeNormal, -1, _surfacePlaneNormalNeg);\r\n const planeDist = -Vector3.dot(planeNormalNeg, ptA);\r\n const colliderDir = Vector3.sub(colliderPos, triCenter, _surfaceColliderDir);\r\n Vector3.normalize(colliderDir, colliderDir);\r\n const dot = Vector3.dot(colliderDir, planeNormal);\r\n\r\n if (isCapsule) {\r\n const side = Vector3.dot(colRW.directionCurrent, planeNormal) * dot;\r\n const rayDir = Vector3.scale(planeNormal, dot * -1, _surfaceRayDir);\r\n const tempPOC = pointOnCollider;\r\n\r\n if (side < 0) {\r\n radius = colRW.radius * colR.radiusTailScale;\r\n pointOnCollider = Vector3.add(colliderPos, colRW.directionCurrent, _surfaceTail);\r\n }\r\n\r\n const rayDirN = Vector3.normalize(rayDir, _surfaceRayDirN);\r\n const enter = raycast(planeNormalNeg, planeDist, pointOnCollider, rayDirN);\r\n if (enter !== null) {\r\n const ip = Vector3.scale(rayDirN, enter, _surfaceIntersection);\r\n Vector3.add(pointOnCollider, ip, ip);\r\n if (triangleContainsPoint(ptA, ptB, ptC, ip)) {\r\n const pushOut = Vector3.sub(ip, pointOnCollider, _surfacePushOut);\r\n const toCol = Vector3.sub(pointOnCollider, ip, _surfaceToCol);\r\n if (toCol.magnitudeSq <= radius * radius) {\r\n return writeSurfaceCheckResult(out, true, ip, pushOut, pointOnCollider, radius, !out);\r\n }\r\n }\r\n } else if (colR.forceType !== ColliderForce.Off) {\r\n pointOnCollider = tempPOC;\r\n let endVec = Vector3.add(colliderPos, colRW.directionCurrent, _surfaceEndVec);\r\n _surfaceColDirVec.set(colRW.directionCurrent);\r\n let colDirVec = _surfaceColDirVec;\r\n if (colR.forceType === ColliderForce.Pull) {\r\n const tmp = pointOnCollider;\r\n pointOnCollider = endVec;\r\n endVec = tmp;\r\n colDirVec = Vector3.scale(colDirVec, -1, colDirVec);\r\n }\r\n const enter2 = raycast(planeNormalNeg, planeDist, pointOnCollider, colDirVec);\r\n if (enter2 !== null) {\r\n const ip = Vector3.scale(colDirVec, enter2, _surfaceIntersection);\r\n Vector3.add(pointOnCollider, ip, ip);\r\n if (triangleContainsPoint(ptA, ptB, ptC, ip)) {\r\n const intersecToEnd = Vector3.sub(endVec, ip, _surfaceIntersecToEnd);\r\n const colToEnd = Vector3.sub(endVec, pointOnCollider, _surfaceColToEnd);\r\n const colToIntersect = Vector3.sub(ip, pointOnCollider, _surfaceColToIntersect);\r\n const pDot = Vector3.dot(intersecToEnd, colToIntersect);\r\n const lDot = Vector3.dot(colToEnd, colToEnd);\r\n if (!(pDot >= 0 && pDot <= lDot)) {\r\n return writeSurfaceCheckResult(\r\n out,\r\n _surfaceNoHit.hit,\r\n _surfaceNoHit.intersectionPoint,\r\n _surfaceNoHit.pushOut,\r\n _surfaceNoHit.pointOnCollider,\r\n _surfaceNoHit.radius,\r\n !out\r\n );\r\n }\r\n const dotVal = Vector3.dot(colToEnd, colToIntersect);\r\n const s2eMag = Vector3.dot(colToEnd, colToEnd);\r\n const colToEndN = Vector3.normalize(colToEnd, colToEnd);\r\n const eVec = Vector3.scale(colToEndN, -radius, _surfaceEVec);\r\n Vector3.add(pointOnCollider, eVec, eVec);\r\n const pushOut = Vector3.sub(ip, eVec, _surfacePushOut);\r\n const poc2 = Vector3.scale(colToEnd, dotVal / s2eMag, _surfacePoc2);\r\n Vector3.add(pointOnCollider, poc2, poc2);\r\n const toCol = Vector3.sub(poc2, ip, _surfaceToCol);\r\n if (toCol.magnitudeSq <= radius * radius) {\r\n return writeSurfaceCheckResult(out, true, ip, pushOut, poc2, radius, !out);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n const rayDir = Vector3.scale(planeNormal, dot * -1, _surfaceRayDir);\r\n const rayDirN = Vector3.normalize(rayDir, _surfaceRayDirN);\r\n const enter = raycast(planeNormalNeg, planeDist, pointOnCollider, rayDirN);\r\n if (enter !== null) {\r\n const ip = Vector3.scale(rayDirN, enter, _surfaceIntersection);\r\n Vector3.add(pointOnCollider, ip, ip);\r\n if (triangleContainsPoint(ptA, ptB, ptC, ip)) {\r\n const pushOut = Vector3.sub(ip, pointOnCollider, _surfacePushOut);\r\n const toCol = Vector3.sub(pointOnCollider, ip, _surfaceToCol);\r\n if (toCol.magnitudeSq <= radius * radius) {\r\n return writeSurfaceCheckResult(out, true, ip, pushOut, pointOnCollider, radius, !out);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return writeSurfaceCheckResult(\r\n out,\r\n _surfaceNoHit.hit,\r\n _surfaceNoHit.intersectionPoint,\r\n _surfaceNoHit.pushOut,\r\n _surfaceNoHit.pointOnCollider,\r\n _surfaceNoHit.radius,\r\n !out\r\n );\r\n}\r\n\r\nfunction raycast(normal: Vector3, planeDist: number, origin: Vector3, direction: Vector3): number | null {\r\n const vdot = Vector3.dot(direction, normal);\r\n const ndot = -Vector3.dot(origin, normal) - planeDist;\r\n if (Math.abs(vdot) <= EPSILON) {\r\n return null;\r\n }\r\n const enter = ndot / vdot;\r\n return enter > 0 ? enter : null;\r\n}\r\n\r\nfunction centerOfTriangle(a: Vector3, b: Vector3, c: Vector3, result?: Vector3): Vector3 {\r\n result = result || new Vector3();\r\n return result.setXYZ((a.x + b.x + c.x) / 3, (a.y + b.y + c.y) / 3, (a.z + b.z + c.z) / 3);\r\n}\r\n\r\nfunction triangleContainsPoint(a: Vector3, b: Vector3, c: Vector3, p: Vector3): boolean {\r\n const ap = Vector3.sub(a, p, _triangleAp);\r\n const bp = Vector3.sub(b, p, _triangleBp);\r\n const cp = Vector3.sub(c, p, _triangleCp);\r\n const u = Vector3.cross(ap, bp, _triangleU);\r\n const vv = Vector3.cross(bp, cp, _triangleV);\r\n const w = Vector3.cross(cp, ap, _triangleW);\r\n if (Vector3.dot(u, vv) < 0) {\r\n return false;\r\n }\r\n if (Vector3.dot(vv, w) < 0) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nfunction lerp(a: number, b: number, t: number): number {\r\n return a + (b - a) * t;\r\n}\r\n"],"names":["_pushoutSphereDirection","Vector3","_pushoutSphereScaled","_pushoutCapsuleVecN","_pushoutCapsuleTargetVec","_pushoutCapsuleTail","_pushoutCapsulePosOnVec","_pushoutCapsulePushVec","_pushoutCapsuleScaled","_pushInSphereDirection","_pushInSphereDirectionN","_pushInSphereScaled","_pushInCapsuleVecN","_pushInCapsuleTargetVec","_pushInCapsuleTail","_pushInCapsulePosOnVec","_pushInCapsulePullVec","_pushInCapsulePullVecN","_pushInCapsuleScaled","_collisionSphereDir","_collisionSphereDirN","_collisionSphereToCenter","_collisionSphereScaled","_collisionSphereDiff","_collisionCapsuleTail","_collisionCapsulePointDir","_collisionCapsulePtOnCol","_collisionCapsulePtOnLine","_collisionCapsuleDiff","_collisionCapsuleTempLineResult","hit","pointOnLine","pointOnCollider","radius","_nearestCross0","_nearestCross1","_nearestN1","_nearestN2","_nearestPosDiff","_nearestPointOnP","_nearestPointOnQ","_nearestPointDiff","_nearestResult","tP","tQ","pointOnP","pointOnQ","sqrDistance","_surfaceNoHit","intersectionPoint","pushOut","_surfaceTriCenter","_surfaceEdgeAB","_surfaceEdgeAC","_surfacePlaneNormal","_surfacePlaneNormalNeg","_surfaceColliderDir","_surfaceRayDir","_surfaceRayDirN","_surfaceTail","_surfaceIntersection","_surfacePushOut","_surfaceToCol","_surfaceEndVec","_surfaceColDirVec","_surfaceIntersecToEnd","_surfaceColToEnd","_surfaceColToIntersect","_surfaceEVec","_surfacePoc2","_triangleAp","_triangleBp","_triangleCp","_triangleU","_triangleV","_triangleW","writeCollisionResult","out","point","copyPoint","clone","set","writeLineCollisionResult","copyVectors","writeSurfaceCheckResult","writeNearestPointsResult","pushoutFromSphere","center","pointRadius","direction","sub","sqrLen","magnitudeSq","EPSILON","dist","Math","sqrt","targetDist","scaled","scale","add","pushoutFromCollider","colR","colRW","ptR","boxHalfExtents","pushoutFromBox","height","positionCurrent","pushoutFromCapsule","halfExtents","delta","local","dot","boxAxes","target","x","y","z","penetration","abs","axis","minPenetration","value","sign","result","correction","capsuleVec","directionCurrent","capsuleHeight","magnitude","capsuleVecN","normalize","capsulePos","targetVec","distOnVec","tail","radiusTailScale","posOnVec","pushVec","sqrPushDist","pushDist","r","lerp","pushInFromSphere","dirLen","directionN","pushInFromCollider","pushInFromBox","pushInFromCapsule","excess","correctionDistance","pullVec","sqrPullDist","pullDist","pullVecN","collisionDetectionSphere","point1","point2","dir","dirN","toCenter","clamped","max","min","ptOnLine","diff","collisionDetectionCapsule","capsuleDir","res","pointDir","nearest","computeNearestPoints","t1","t2","ptOnCol","collisionDetection","collisionDetectionBox","p1","p2","a","b","d","enter","exit","mins","maxs","av","dv","inv","t0","t","hitPoint","pushInCollisionDetection","posP","dirP","posQ","dirQ","cross0","cross","n1","cross1","n2","dP_n2","dQ_n1","posDiff","checkSurfaceCollision","ptA","ptB","ptC","colliderPos","setXYZ","isCapsule","triCenter","centerOfTriangle","edgeAB","edgeAC","planeNormal","planeNormalNeg","planeDist","colliderDir","side","rayDir","tempPOC","rayDirN","raycast","ip","triangleContainsPoint","toCol","forceType","ColliderForce","Off","endVec","colDirVec","Pull","tmp","enter2","intersecToEnd","colToEnd","colToIntersect","pDot","lDot","dotVal","s2eMag","colToEndN","eVec","poc2","normal","origin","vdot","ndot","c","p","ap","bp","cp","u","vv","w"],"mappings":"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"}
|
|
@@ -1057,6 +1057,12 @@ import { Vector3, Quaternion, Matrix4x4, clamp01, InterpolatorScalar } from '@ze
|
|
|
1057
1057
|
worldScale: scale.clone(),
|
|
1058
1058
|
localBoundsMin: Vector3.zero(),
|
|
1059
1059
|
localBoundsMax: Vector3.zero(),
|
|
1060
|
+
boxAxes: [
|
|
1061
|
+
Vector3.axisPX(),
|
|
1062
|
+
Vector3.axisPY(),
|
|
1063
|
+
Vector3.axisPZ()
|
|
1064
|
+
],
|
|
1065
|
+
boxHalfExtents: Vector3.zero(),
|
|
1060
1066
|
radius: 0,
|
|
1061
1067
|
height: 0,
|
|
1062
1068
|
enabled: 1
|