@needle-tools/engine 4.7.1 → 4.7.2-alpha
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/CHANGELOG.md +3782 -3782
- package/LICENSE.md +10 -10
- package/README.md +64 -64
- package/components.needle.json +1 -1
- package/dist/generateMeshBVH.worker-Cdfpaq5W.js +25 -0
- package/dist/gltf-progressive-YjtQYFa9.js +1052 -0
- package/dist/gltf-progressive-yOP1mp5W.min.js +8 -0
- package/dist/gltf-progressive-zdhlW609.umd.cjs +8 -0
- package/dist/{needle-engine.bundle-CN9UC6Ju.min.js → needle-engine.bundle-BhDF-YSv.min.js} +65 -65
- package/dist/{needle-engine.bundle-B7M9iBIa.umd.cjs → needle-engine.bundle-D2myV4E4.umd.cjs} +61 -61
- package/dist/{needle-engine.bundle-BpCihhaP.js → needle-engine.bundle-gp00DTS4.js} +641 -641
- package/dist/needle-engine.d.ts +129 -130
- package/dist/needle-engine.js +4 -4
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/dist/{postprocessing-CjW23fio.umd.cjs → postprocessing-8AQTeZsr.umd.cjs} +2 -2
- package/dist/{postprocessing-xYQWCHFu.min.js → postprocessing-BDScN9yu.min.js} +2 -2
- package/dist/{postprocessing-DYLNOL3W.js → postprocessing-BkxN_08g.js} +3 -3
- package/dist/{three-DuDKwKB8.min.js → three-Boa-jOq-.min.js} +33 -33
- package/dist/{three-DrqIzZTH.js → three-Bz6X1mrw.js} +4198 -4198
- package/dist/{three-B_hneGZr.umd.cjs → three-DMrv-4ar.umd.cjs} +4 -4
- package/dist/{three-examples-X3OadjXB.umd.cjs → three-examples-C7ryg8vN.umd.cjs} +3 -3
- package/dist/{three-examples-DaDLBuy6.min.js → three-examples-DuVhxqft.min.js} +14 -14
- package/dist/{three-examples-B50TT3Iu.js → three-examples-GggCDHv0.js} +5 -5
- package/dist/{three-mesh-ui-CxuWt7m-.js → three-mesh-ui-CLNOfsWn.js} +1 -1
- package/dist/{three-mesh-ui-B3p3gyUz.min.js → three-mesh-ui-CY6Izc7C.min.js} +1 -1
- package/dist/{three-mesh-ui-CQiIQIlA.umd.cjs → three-mesh-ui-CwlN0FUC.umd.cjs} +1 -1
- package/dist/{vendor-BmYIgaS1.js → vendor-BSD1RQIh.js} +3 -3
- package/dist/{vendor-Cavtu3CP.umd.cjs → vendor-DHr4aqIZ.umd.cjs} +3 -3
- package/dist/{vendor-BlSxe9JJ.min.js → vendor-zxXa3Dmr.min.js} +3 -3
- package/lib/asap/needle-asap.d.ts +1 -1
- package/lib/asap/needle-asap.js +95 -95
- package/lib/asap/sessiongranted.d.ts +3 -3
- package/lib/asap/sessiongranted.js +65 -65
- package/lib/asap/utils.d.ts +1 -1
- package/lib/asap/utils.js +3 -3
- package/lib/engine/analytics/index.d.ts +6 -6
- package/lib/engine/analytics/index.js +12 -12
- package/lib/engine/analytics/lcp.d.ts +3 -3
- package/lib/engine/analytics/lcp.js +34 -34
- package/lib/engine/api.d.ts +82 -82
- package/lib/engine/api.js +81 -81
- package/lib/engine/assets/index.d.ts +11 -11
- package/lib/engine/assets/index.js +47 -47
- package/lib/engine/assets/static.d.ts +1 -1
- package/lib/engine/assets/static.js +4 -4
- package/lib/engine/codegen/register_types.d.ts +1 -1
- package/lib/engine/codegen/register_types.js +300 -300
- package/lib/engine/debug/debug.d.ts +15 -15
- package/lib/engine/debug/debug.js +44 -44
- package/lib/engine/debug/debug_console.d.ts +2 -2
- package/lib/engine/debug/debug_console.js +307 -307
- package/lib/engine/debug/debug_overlay.d.ts +22 -22
- package/lib/engine/debug/debug_overlay.js +316 -316
- package/lib/engine/debug/debug_spatial_console.d.ts +2 -2
- package/lib/engine/debug/debug_spatial_console.js +390 -390
- package/lib/engine/debug/index.d.ts +2 -2
- package/lib/engine/debug/index.js +2 -2
- package/lib/engine/engine_addressables.d.ts +164 -164
- package/lib/engine/engine_addressables.js +601 -601
- package/lib/engine/engine_animation.d.ts +43 -43
- package/lib/engine/engine_animation.js +133 -133
- package/lib/engine/engine_application.d.ts +45 -45
- package/lib/engine/engine_application.js +104 -104
- package/lib/engine/engine_assetdatabase.d.ts +25 -25
- package/lib/engine/engine_assetdatabase.js +346 -346
- package/lib/engine/engine_audio.d.ts +4 -4
- package/lib/engine/engine_audio.js +23 -23
- package/lib/engine/engine_camera.d.ts +13 -13
- package/lib/engine/engine_camera.js +30 -30
- package/lib/engine/engine_components.d.ts +110 -110
- package/lib/engine/engine_components.js +374 -374
- package/lib/engine/engine_components_internal.d.ts +9 -9
- package/lib/engine/engine_components_internal.js +36 -36
- package/lib/engine/engine_constants.d.ts +10 -10
- package/lib/engine/engine_constants.js +41 -41
- package/lib/engine/engine_context.d.ts +475 -475
- package/lib/engine/engine_context.js +1673 -1673
- package/lib/engine/engine_context_registry.d.ts +71 -71
- package/lib/engine/engine_context_registry.js +117 -117
- package/lib/engine/engine_coroutine.d.ts +35 -35
- package/lib/engine/engine_coroutine.js +52 -52
- package/lib/engine/engine_create_objects.d.ts +119 -119
- package/lib/engine/engine_create_objects.js +320 -320
- package/lib/engine/engine_default_parameters.d.ts +2 -2
- package/lib/engine/engine_default_parameters.js +3 -3
- package/lib/engine/engine_editor-sync.d.ts +21 -21
- package/lib/engine/engine_editor-sync.js +4 -4
- package/lib/engine/engine_fileloader.d.ts +2 -2
- package/lib/engine/engine_fileloader.js +8 -8
- package/lib/engine/engine_gameobject.d.ts +68 -68
- package/lib/engine/engine_gameobject.js +619 -619
- package/lib/engine/engine_generic_utils.d.ts +1 -1
- package/lib/engine/engine_generic_utils.js +13 -13
- package/lib/engine/engine_gizmos.d.ts +149 -149
- package/lib/engine/engine_gizmos.js +530 -530
- package/lib/engine/engine_gltf.d.ts +12 -12
- package/lib/engine/engine_gltf.js +15 -15
- package/lib/engine/engine_gltf_builtin_components.d.ts +11 -11
- package/lib/engine/engine_gltf_builtin_components.js +341 -341
- package/lib/engine/engine_hot_reload.d.ts +8 -8
- package/lib/engine/engine_hot_reload.js +197 -197
- package/lib/engine/engine_input.d.ts +362 -362
- package/lib/engine/engine_input.js +1294 -1294
- package/lib/engine/engine_input_utils.d.ts +2 -2
- package/lib/engine/engine_input_utils.js +22 -22
- package/lib/engine/engine_instancing.d.ts +19 -19
- package/lib/engine/engine_instancing.js +39 -39
- package/lib/engine/engine_license.d.ts +11 -11
- package/lib/engine/engine_license.js +369 -369
- package/lib/engine/engine_lifecycle_api.d.ts +83 -83
- package/lib/engine/engine_lifecycle_api.js +106 -106
- package/lib/engine/engine_lifecycle_functions_internal.d.ts +32 -32
- package/lib/engine/engine_lifecycle_functions_internal.js +146 -146
- package/lib/engine/engine_lightdata.d.ts +23 -23
- package/lib/engine/engine_lightdata.js +101 -101
- package/lib/engine/engine_loaders.callbacks.d.ts +97 -97
- package/lib/engine/engine_loaders.callbacks.js +86 -86
- package/lib/engine/engine_loaders.d.ts +48 -48
- package/lib/engine/engine_loaders.gltf.d.ts +13 -13
- package/lib/engine/engine_loaders.gltf.js +62 -62
- package/lib/engine/engine_loaders.js +337 -337
- package/lib/engine/engine_lods.d.ts +35 -35
- package/lib/engine/engine_lods.js +160 -160
- package/lib/engine/engine_lods.js.map +1 -1
- package/lib/engine/engine_mainloop_utils.d.ts +32 -32
- package/lib/engine/engine_mainloop_utils.js +466 -466
- package/lib/engine/engine_math.d.ts +114 -114
- package/lib/engine/engine_math.js +247 -247
- package/lib/engine/engine_modules.d.ts +36 -36
- package/lib/engine/engine_modules.js +85 -85
- package/lib/engine/engine_networking.d.ts +260 -260
- package/lib/engine/engine_networking.js +764 -764
- package/lib/engine/engine_networking_auto.d.ts +24 -24
- package/lib/engine/engine_networking_auto.js +310 -310
- package/lib/engine/engine_networking_blob.d.ts +48 -48
- package/lib/engine/engine_networking_blob.js +228 -228
- package/lib/engine/engine_networking_files.d.ts +35 -35
- package/lib/engine/engine_networking_files.js +172 -172
- package/lib/engine/engine_networking_files_default_components.d.ts +6 -6
- package/lib/engine/engine_networking_files_default_components.js +42 -42
- package/lib/engine/engine_networking_instantiate.d.ts +100 -100
- package/lib/engine/engine_networking_instantiate.js +345 -345
- package/lib/engine/engine_networking_peer.d.ts +15 -15
- package/lib/engine/engine_networking_peer.js +132 -132
- package/lib/engine/engine_networking_streams.d.ts +123 -123
- package/lib/engine/engine_networking_streams.js +645 -645
- package/lib/engine/engine_networking_types.d.ts +22 -22
- package/lib/engine/engine_networking_types.js +7 -7
- package/lib/engine/engine_networking_utils.d.ts +2 -2
- package/lib/engine/engine_networking_utils.js +20 -20
- package/lib/engine/engine_networking_websocket.d.ts +1 -1
- package/lib/engine/engine_networking_websocket.js +2 -2
- package/lib/engine/engine_patcher.d.ts +10 -10
- package/lib/engine/engine_patcher.js +142 -142
- package/lib/engine/engine_physics.d.ts +152 -152
- package/lib/engine/engine_physics.js +645 -645
- package/lib/engine/engine_physics.types.d.ts +40 -40
- package/lib/engine/engine_physics.types.js +33 -33
- package/lib/engine/engine_physics_rapier.d.ts +147 -147
- package/lib/engine/engine_physics_rapier.js +1433 -1433
- package/lib/engine/engine_playerview.d.ts +26 -26
- package/lib/engine/engine_playerview.js +64 -64
- package/lib/engine/engine_scenelighting.d.ts +71 -71
- package/lib/engine/engine_scenelighting.js +226 -226
- package/lib/engine/engine_serialization.d.ts +3 -3
- package/lib/engine/engine_serialization.js +3 -3
- package/lib/engine/engine_serialization_builtin_serializer.d.ts +72 -72
- package/lib/engine/engine_serialization_builtin_serializer.js +403 -403
- package/lib/engine/engine_serialization_core.d.ts +94 -94
- package/lib/engine/engine_serialization_core.js +607 -607
- package/lib/engine/engine_serialization_decorator.d.ts +23 -23
- package/lib/engine/engine_serialization_decorator.js +66 -66
- package/lib/engine/engine_setup.d.ts +1 -1
- package/lib/engine/engine_setup.js +2 -2
- package/lib/engine/engine_shaders.d.ts +53 -53
- package/lib/engine/engine_shaders.js +252 -252
- package/lib/engine/engine_shims.d.ts +4 -4
- package/lib/engine/engine_shims.js +24 -24
- package/lib/engine/engine_test_utils.d.ts +39 -39
- package/lib/engine/engine_test_utils.js +83 -83
- package/lib/engine/engine_texture.d.ts +28 -28
- package/lib/engine/engine_texture.js +64 -64
- package/lib/engine/engine_three_utils.d.ts +204 -204
- package/lib/engine/engine_three_utils.js +788 -788
- package/lib/engine/engine_time.d.ts +51 -51
- package/lib/engine/engine_time.js +82 -82
- package/lib/engine/engine_time_utils.d.ts +88 -88
- package/lib/engine/engine_time_utils.js +215 -215
- package/lib/engine/engine_tonemapping.d.ts +6 -6
- package/lib/engine/engine_tonemapping.js +197 -197
- package/lib/engine/engine_types.d.ts +578 -578
- package/lib/engine/engine_types.js +95 -95
- package/lib/engine/engine_typestore.d.ts +28 -28
- package/lib/engine/engine_typestore.js +55 -55
- package/lib/engine/engine_util_decorator.d.ts +13 -13
- package/lib/engine/engine_util_decorator.js +116 -116
- package/lib/engine/engine_utils.d.ts +248 -248
- package/lib/engine/engine_utils.js +1012 -1012
- package/lib/engine/engine_utils_format.d.ts +24 -24
- package/lib/engine/engine_utils_format.js +239 -239
- package/lib/engine/engine_utils_screenshot.d.ts +159 -159
- package/lib/engine/engine_utils_screenshot.js +522 -522
- package/lib/engine/engine_utils_screenshot.xr.d.ts +5 -5
- package/lib/engine/engine_utils_screenshot.xr.js +90 -90
- package/lib/engine/engine_xr.d.ts +1 -1
- package/lib/engine/engine_xr.js +1 -1
- package/lib/engine/export/gltf/Writers.d.ts +19 -19
- package/lib/engine/export/gltf/Writers.js +24 -24
- package/lib/engine/export/gltf/index.d.ts +11 -11
- package/lib/engine/export/gltf/index.js +123 -123
- package/lib/engine/export/index.d.ts +2 -2
- package/lib/engine/export/index.js +2 -2
- package/lib/engine/export/state.d.ts +7 -7
- package/lib/engine/export/state.js +17 -17
- package/lib/engine/export/utils.d.ts +2 -2
- package/lib/engine/export/utils.js +7 -7
- package/lib/engine/extensions/EXT_texture_exr.d.ts +8 -8
- package/lib/engine/extensions/EXT_texture_exr.js +32 -32
- package/lib/engine/extensions/NEEDLE_animator_controller_model.d.ts +122 -122
- package/lib/engine/extensions/NEEDLE_animator_controller_model.js +95 -95
- package/lib/engine/extensions/NEEDLE_components.d.ts +35 -35
- package/lib/engine/extensions/NEEDLE_components.js +220 -220
- package/lib/engine/extensions/NEEDLE_gameobject_data.d.ts +10 -10
- package/lib/engine/extensions/NEEDLE_gameobject_data.js +57 -57
- package/lib/engine/extensions/NEEDLE_lighting_settings.d.ts +37 -37
- package/lib/engine/extensions/NEEDLE_lighting_settings.js +157 -157
- package/lib/engine/extensions/NEEDLE_lightmaps.d.ts +18 -18
- package/lib/engine/extensions/NEEDLE_lightmaps.js +99 -99
- package/lib/engine/extensions/NEEDLE_persistent_assets.d.ts +11 -11
- package/lib/engine/extensions/NEEDLE_persistent_assets.js +63 -63
- package/lib/engine/extensions/NEEDLE_progressive.d.ts +1 -1
- package/lib/engine/extensions/NEEDLE_progressive.js +1 -1
- package/lib/engine/extensions/NEEDLE_render_objects.d.ts +13 -13
- package/lib/engine/extensions/NEEDLE_render_objects.js +159 -159
- package/lib/engine/extensions/NEEDLE_techniques_webgl.d.ts +38 -38
- package/lib/engine/extensions/NEEDLE_techniques_webgl.js +564 -564
- package/lib/engine/extensions/extension_resolver.d.ts +4 -4
- package/lib/engine/extensions/extension_resolver.js +1 -1
- package/lib/engine/extensions/extension_utils.d.ts +12 -12
- package/lib/engine/extensions/extension_utils.js +152 -152
- package/lib/engine/extensions/extensions.d.ts +32 -32
- package/lib/engine/extensions/extensions.js +107 -107
- package/lib/engine/extensions/index.d.ts +6 -6
- package/lib/engine/extensions/index.js +6 -6
- package/lib/engine/extensions/usage_tracker.d.ts +13 -13
- package/lib/engine/extensions/usage_tracker.js +65 -65
- package/lib/engine/js-extensions/Camera.d.ts +1 -1
- package/lib/engine/js-extensions/Camera.js +39 -39
- package/lib/engine/js-extensions/ExtensionUtils.d.ts +9 -9
- package/lib/engine/js-extensions/ExtensionUtils.js +67 -67
- package/lib/engine/js-extensions/Layers.d.ts +6 -6
- package/lib/engine/js-extensions/Layers.js +22 -22
- package/lib/engine/js-extensions/Object3D.d.ts +120 -120
- package/lib/engine/js-extensions/Object3D.js +136 -136
- package/lib/engine/js-extensions/RGBAColor.d.ts +23 -23
- package/lib/engine/js-extensions/RGBAColor.js +111 -111
- package/lib/engine/js-extensions/Vector.d.ts +3 -3
- package/lib/engine/js-extensions/Vector.js +13 -13
- package/lib/engine/js-extensions/index.d.ts +5 -5
- package/lib/engine/js-extensions/index.js +5 -5
- package/lib/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.d.ts +4 -4
- package/lib/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js +79 -79
- package/lib/engine/shaders/shaderData.d.ts +55 -55
- package/lib/engine/shaders/shaderData.js +58 -58
- package/lib/engine/tests/test_utils.d.ts +2 -2
- package/lib/engine/tests/test_utils.js +53 -53
- package/lib/engine/webcomponents/WebXRButtons.d.ts +56 -56
- package/lib/engine/webcomponents/WebXRButtons.js +230 -230
- package/lib/engine/webcomponents/api.d.ts +5 -5
- package/lib/engine/webcomponents/api.js +4 -4
- package/lib/engine/webcomponents/buttons.d.ts +51 -51
- package/lib/engine/webcomponents/buttons.js +264 -264
- package/lib/engine/webcomponents/fonts.d.ts +9 -9
- package/lib/engine/webcomponents/fonts.js +32 -32
- package/lib/engine/webcomponents/icons.d.ts +9 -9
- package/lib/engine/webcomponents/icons.js +52 -52
- package/lib/engine/webcomponents/index.d.ts +1 -1
- package/lib/engine/webcomponents/index.js +1 -1
- package/lib/engine/webcomponents/logo-element.d.ts +10 -10
- package/lib/engine/webcomponents/logo-element.js +67 -67
- package/lib/engine/webcomponents/needle menu/needle-menu-spatial.d.ts +37 -37
- package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js +513 -513
- package/lib/engine/webcomponents/needle menu/needle-menu.d.ts +155 -155
- package/lib/engine/webcomponents/needle menu/needle-menu.js +1029 -1029
- package/lib/engine/webcomponents/needle-button.d.ts +34 -34
- package/lib/engine/webcomponents/needle-button.js +161 -161
- package/lib/engine/webcomponents/needle-engine.ar-overlay.d.ts +21 -21
- package/lib/engine/webcomponents/needle-engine.ar-overlay.js +166 -166
- package/lib/engine/webcomponents/needle-engine.attributes.d.ts +69 -69
- package/lib/engine/webcomponents/needle-engine.attributes.js +1 -1
- package/lib/engine/webcomponents/needle-engine.d.ts +116 -116
- package/lib/engine/webcomponents/needle-engine.extras.d.ts +6 -6
- package/lib/engine/webcomponents/needle-engine.extras.js +13 -13
- package/lib/engine/webcomponents/needle-engine.js +821 -821
- package/lib/engine/webcomponents/needle-engine.loading.d.ts +44 -44
- package/lib/engine/webcomponents/needle-engine.loading.js +341 -341
- package/lib/engine/xr/NeedleXRController.d.ts +313 -313
- package/lib/engine/xr/NeedleXRController.js +1007 -1007
- package/lib/engine/xr/NeedleXRSession.d.ts +340 -340
- package/lib/engine/xr/NeedleXRSession.js +1463 -1463
- package/lib/engine/xr/NeedleXRSync.d.ts +22 -22
- package/lib/engine/xr/NeedleXRSync.js +188 -188
- package/lib/engine/xr/SceneTransition.d.ts +18 -18
- package/lib/engine/xr/SceneTransition.js +69 -69
- package/lib/engine/xr/TempXRContext.d.ts +34 -34
- package/lib/engine/xr/TempXRContext.js +187 -187
- package/lib/engine/xr/XRRig.d.ts +7 -7
- package/lib/engine/xr/XRRig.js +1 -1
- package/lib/engine/xr/api.d.ts +6 -6
- package/lib/engine/xr/api.js +6 -6
- package/lib/engine/xr/events.d.ts +66 -66
- package/lib/engine/xr/events.js +93 -93
- package/lib/engine/xr/internal.d.ts +12 -12
- package/lib/engine/xr/internal.js +25 -25
- package/lib/engine/xr/usdz.d.ts +12 -12
- package/lib/engine/xr/usdz.js +29 -29
- package/lib/engine/xr/utils.d.ts +11 -11
- package/lib/engine/xr/utils.js +34 -34
- package/lib/engine-components/AlignmentConstraint.d.ts +10 -10
- package/lib/engine-components/AlignmentConstraint.js +39 -39
- package/lib/engine-components/Animation.d.ts +156 -156
- package/lib/engine-components/Animation.js +508 -508
- package/lib/engine-components/AnimationCurve.d.ts +40 -40
- package/lib/engine-components/AnimationCurve.js +159 -159
- package/lib/engine-components/AnimationUtils.d.ts +8 -8
- package/lib/engine-components/AnimationUtils.js +27 -27
- package/lib/engine-components/AnimationUtilsAutoplay.d.ts +1 -1
- package/lib/engine-components/AnimationUtilsAutoplay.js +39 -39
- package/lib/engine-components/Animator.d.ts +217 -217
- package/lib/engine-components/Animator.js +354 -354
- package/lib/engine-components/AnimatorController.d.ts +227 -227
- package/lib/engine-components/AnimatorController.js +1152 -1152
- package/lib/engine-components/AudioListener.d.ts +33 -33
- package/lib/engine-components/AudioListener.js +86 -86
- package/lib/engine-components/AudioSource.d.ts +217 -217
- package/lib/engine-components/AudioSource.js +635 -635
- package/lib/engine-components/AvatarLoader.d.ts +80 -80
- package/lib/engine-components/AvatarLoader.js +231 -231
- package/lib/engine-components/AxesHelper.d.ts +32 -32
- package/lib/engine-components/AxesHelper.js +67 -67
- package/lib/engine-components/BasicIKConstraint.d.ts +9 -9
- package/lib/engine-components/BasicIKConstraint.js +43 -43
- package/lib/engine-components/BoxCollider.d.ts +2 -2
- package/lib/engine-components/BoxCollider.js +2 -2
- package/lib/engine-components/BoxHelperComponent.d.ts +47 -47
- package/lib/engine-components/BoxHelperComponent.js +102 -102
- package/lib/engine-components/Camera.d.ts +231 -231
- package/lib/engine-components/Camera.js +700 -700
- package/lib/engine-components/CameraUtils.d.ts +1 -1
- package/lib/engine-components/CameraUtils.js +123 -123
- package/lib/engine-components/CharacterController.d.ts +55 -55
- package/lib/engine-components/CharacterController.js +236 -236
- package/lib/engine-components/Collider.d.ts +188 -188
- package/lib/engine-components/Collider.js +369 -369
- package/lib/engine-components/Component.d.ts +792 -792
- package/lib/engine-components/Component.js +920 -920
- package/lib/engine-components/ContactShadows.d.ts +94 -94
- package/lib/engine-components/ContactShadows.js +453 -453
- package/lib/engine-components/DeleteBox.d.ts +19 -19
- package/lib/engine-components/DeleteBox.js +58 -58
- package/lib/engine-components/DeviceFlag.d.ts +16 -16
- package/lib/engine-components/DeviceFlag.js +47 -47
- package/lib/engine-components/DragControls.d.ts +170 -170
- package/lib/engine-components/DragControls.js +1421 -1421
- package/lib/engine-components/DropListener.d.ts +215 -215
- package/lib/engine-components/DropListener.js +642 -642
- package/lib/engine-components/Duplicatable.d.ts +35 -35
- package/lib/engine-components/Duplicatable.js +202 -202
- package/lib/engine-components/EventList.d.ts +54 -54
- package/lib/engine-components/EventList.js +232 -232
- package/lib/engine-components/EventTrigger.d.ts +33 -33
- package/lib/engine-components/EventTrigger.js +75 -75
- package/lib/engine-components/EventType.d.ts +22 -22
- package/lib/engine-components/EventType.js +23 -23
- package/lib/engine-components/Fog.d.ts +22 -22
- package/lib/engine-components/Fog.js +61 -61
- package/lib/engine-components/Gizmos.d.ts +17 -17
- package/lib/engine-components/Gizmos.js +64 -64
- package/lib/engine-components/GridHelper.d.ts +20 -20
- package/lib/engine-components/GridHelper.js +54 -54
- package/lib/engine-components/GroundProjection.d.ts +67 -67
- package/lib/engine-components/GroundProjection.js +343 -343
- package/lib/engine-components/Interactable.d.ts +12 -12
- package/lib/engine-components/Interactable.js +12 -12
- package/lib/engine-components/Joints.d.ts +19 -19
- package/lib/engine-components/Joints.js +51 -51
- package/lib/engine-components/LODGroup.d.ts +35 -35
- package/lib/engine-components/LODGroup.js +152 -152
- package/lib/engine-components/Light.d.ts +180 -180
- package/lib/engine-components/Light.js +535 -535
- package/lib/engine-components/LookAtConstraint.d.ts +19 -19
- package/lib/engine-components/LookAtConstraint.js +35 -35
- package/lib/engine-components/NeedleMenu.d.ts +50 -50
- package/lib/engine-components/NeedleMenu.js +92 -92
- package/lib/engine-components/NestedGltf.d.ts +25 -25
- package/lib/engine-components/NestedGltf.js +88 -88
- package/lib/engine-components/Networking.d.ts +54 -54
- package/lib/engine-components/Networking.js +112 -112
- package/lib/engine-components/OffsetConstraint.d.ts +14 -14
- package/lib/engine-components/OffsetConstraint.js +65 -65
- package/lib/engine-components/OrbitControls.d.ts +268 -268
- package/lib/engine-components/OrbitControls.js +1015 -1015
- package/lib/engine-components/PlayerColor.d.ts +19 -19
- package/lib/engine-components/PlayerColor.js +94 -94
- package/lib/engine-components/ReflectionProbe.d.ts +28 -28
- package/lib/engine-components/ReflectionProbe.js +204 -204
- package/lib/engine-components/Renderer.d.ts +153 -153
- package/lib/engine-components/Renderer.js +834 -834
- package/lib/engine-components/RendererInstancing.d.ts +140 -140
- package/lib/engine-components/RendererInstancing.js +744 -744
- package/lib/engine-components/RendererInstancing.js.map +1 -1
- package/lib/engine-components/RendererLightmap.d.ts +24 -24
- package/lib/engine-components/RendererLightmap.js +182 -182
- package/lib/engine-components/RigidBody.d.ts +155 -155
- package/lib/engine-components/RigidBody.js +517 -517
- package/lib/engine-components/SceneSwitcher.d.ts +263 -263
- package/lib/engine-components/SceneSwitcher.js +971 -971
- package/lib/engine-components/ScreenCapture.d.ts +144 -144
- package/lib/engine-components/ScreenCapture.js +547 -547
- package/lib/engine-components/ShadowCatcher.d.ts +33 -33
- package/lib/engine-components/ShadowCatcher.js +166 -166
- package/lib/engine-components/Skybox.d.ts +88 -88
- package/lib/engine-components/Skybox.js +469 -469
- package/lib/engine-components/SmoothFollow.d.ts +34 -34
- package/lib/engine-components/SmoothFollow.js +82 -82
- package/lib/engine-components/SpatialTrigger.d.ts +102 -102
- package/lib/engine-components/SpatialTrigger.js +225 -225
- package/lib/engine-components/SpectatorCamera.d.ts +111 -111
- package/lib/engine-components/SpectatorCamera.js +715 -715
- package/lib/engine-components/SphereCollider.d.ts +2 -2
- package/lib/engine-components/SphereCollider.js +2 -2
- package/lib/engine-components/SpriteRenderer.d.ts +132 -132
- package/lib/engine-components/SpriteRenderer.js +472 -472
- package/lib/engine-components/SyncedCamera.d.ts +41 -41
- package/lib/engine-components/SyncedCamera.js +199 -199
- package/lib/engine-components/SyncedRoom.d.ts +106 -106
- package/lib/engine-components/SyncedRoom.js +371 -371
- package/lib/engine-components/SyncedTransform.d.ts +94 -94
- package/lib/engine-components/SyncedTransform.js +331 -331
- package/lib/engine-components/TestRunner.d.ts +16 -16
- package/lib/engine-components/TestRunner.js +102 -102
- package/lib/engine-components/TransformGizmo.d.ts +75 -75
- package/lib/engine-components/TransformGizmo.js +209 -209
- package/lib/engine-components/VideoPlayer.d.ts +184 -184
- package/lib/engine-components/VideoPlayer.js +978 -978
- package/lib/engine-components/Voip.d.ts +67 -67
- package/lib/engine-components/Voip.js +360 -360
- package/lib/engine-components/api.d.ts +51 -51
- package/lib/engine-components/api.js +50 -50
- package/lib/engine-components/avatar/AvatarBlink_Simple.d.ts +11 -11
- package/lib/engine-components/avatar/AvatarBlink_Simple.js +76 -76
- package/lib/engine-components/avatar/AvatarEyeLook_Rotation.d.ts +14 -14
- package/lib/engine-components/avatar/AvatarEyeLook_Rotation.js +68 -68
- package/lib/engine-components/avatar/Avatar_Brain_LookAt.d.ts +29 -29
- package/lib/engine-components/avatar/Avatar_Brain_LookAt.js +121 -121
- package/lib/engine-components/avatar/Avatar_MouthShapes.d.ts +15 -15
- package/lib/engine-components/avatar/Avatar_MouthShapes.js +79 -79
- package/lib/engine-components/avatar/Avatar_MustacheShake.d.ts +9 -9
- package/lib/engine-components/avatar/Avatar_MustacheShake.js +29 -29
- package/lib/engine-components/codegen/components.d.ts +216 -216
- package/lib/engine-components/codegen/components.js +218 -218
- package/lib/engine-components/debug/LogStats.d.ts +5 -5
- package/lib/engine-components/debug/LogStats.js +18 -18
- package/lib/engine-components/export/gltf/GltfExport.d.ts +30 -30
- package/lib/engine-components/export/gltf/GltfExport.js +246 -246
- package/lib/engine-components/export/gltf/index.d.ts +1 -1
- package/lib/engine-components/export/gltf/index.js +1 -1
- package/lib/engine-components/export/index.d.ts +1 -1
- package/lib/engine-components/export/index.js +1 -1
- package/lib/engine-components/export/usdz/Extension.d.ts +22 -22
- package/lib/engine-components/export/usdz/Extension.js +1 -1
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.d.ts +162 -162
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.js +1789 -1789
- package/lib/engine-components/export/usdz/USDZExporter.d.ts +130 -130
- package/lib/engine-components/export/usdz/USDZExporter.js +663 -663
- package/lib/engine-components/export/usdz/extensions/Animation.d.ts +106 -106
- package/lib/engine-components/export/usdz/extensions/Animation.js +1071 -1071
- package/lib/engine-components/export/usdz/extensions/DocumentExtension.d.ts +5 -5
- package/lib/engine-components/export/usdz/extensions/DocumentExtension.js +6 -6
- package/lib/engine-components/export/usdz/extensions/NodeMaterialConverter.d.ts +10 -10
- package/lib/engine-components/export/usdz/extensions/NodeMaterialConverter.js +451 -451
- package/lib/engine-components/export/usdz/extensions/USDZText.d.ts +54 -54
- package/lib/engine-components/export/usdz/extensions/USDZText.js +203 -203
- package/lib/engine-components/export/usdz/extensions/USDZUI.d.ts +8 -8
- package/lib/engine-components/export/usdz/extensions/USDZUI.js +158 -158
- package/lib/engine-components/export/usdz/extensions/behavior/Actions.d.ts +30 -30
- package/lib/engine-components/export/usdz/extensions/behavior/Actions.js +88 -88
- package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.d.ts +10 -10
- package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.js +86 -86
- package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.d.ts +28 -28
- package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.js +290 -290
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.d.ts +190 -190
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js +1060 -1060
- package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.d.ts +135 -135
- package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.js +548 -548
- package/lib/engine-components/export/usdz/extensions/behavior/PhysicsExtension.d.ts +7 -7
- package/lib/engine-components/export/usdz/extensions/behavior/PhysicsExtension.js +115 -115
- package/lib/engine-components/export/usdz/index.d.ts +3 -3
- package/lib/engine-components/export/usdz/index.js +2 -2
- package/lib/engine-components/export/usdz/utils/animationutils.d.ts +7 -7
- package/lib/engine-components/export/usdz/utils/animationutils.js +163 -163
- package/lib/engine-components/export/usdz/utils/quicklook.d.ts +2 -2
- package/lib/engine-components/export/usdz/utils/quicklook.js +43 -43
- package/lib/engine-components/particlesystem/ParticleSystem.d.ts +177 -177
- package/lib/engine-components/particlesystem/ParticleSystem.js +1176 -1176
- package/lib/engine-components/particlesystem/ParticleSystemModules.d.ts +526 -526
- package/lib/engine-components/particlesystem/ParticleSystemModules.js +1930 -1930
- package/lib/engine-components/particlesystem/ParticleSystemSubEmitter.d.ts +25 -25
- package/lib/engine-components/particlesystem/ParticleSystemSubEmitter.js +87 -87
- package/lib/engine-components/particlesystem/api.d.ts +2 -2
- package/lib/engine-components/particlesystem/api.js +2 -2
- package/lib/engine-components/postprocessing/Effects/Antialiasing.d.ts +17 -17
- package/lib/engine-components/postprocessing/Effects/Antialiasing.js +59 -59
- package/lib/engine-components/postprocessing/Effects/BloomEffect.d.ts +46 -46
- package/lib/engine-components/postprocessing/Effects/BloomEffect.js +113 -113
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.d.ts +11 -11
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js +39 -39
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.d.ts +23 -23
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js +111 -111
- package/lib/engine-components/postprocessing/Effects/DepthOfField.d.ts +25 -25
- package/lib/engine-components/postprocessing/Effects/DepthOfField.js +104 -104
- package/lib/engine-components/postprocessing/Effects/EffectWrapper.d.ts +12 -12
- package/lib/engine-components/postprocessing/Effects/EffectWrapper.js +18 -18
- package/lib/engine-components/postprocessing/Effects/Pixelation.d.ts +11 -11
- package/lib/engine-components/postprocessing/Effects/Pixelation.js +32 -32
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.d.ts +18 -18
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.js +91 -91
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.d.ts +70 -70
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.js +176 -176
- package/lib/engine-components/postprocessing/Effects/Sharpening.d.ts +18 -18
- package/lib/engine-components/postprocessing/Effects/Sharpening.js +127 -127
- package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.d.ts +17 -17
- package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.js +70 -70
- package/lib/engine-components/postprocessing/Effects/Tonemapping.d.ts +19 -19
- package/lib/engine-components/postprocessing/Effects/Tonemapping.js +94 -94
- package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.d.ts +13 -13
- package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.js +51 -51
- package/lib/engine-components/postprocessing/Effects/Vignette.d.ts +15 -15
- package/lib/engine-components/postprocessing/Effects/Vignette.js +60 -60
- package/lib/engine-components/postprocessing/PostProcessingEffect.d.ts +90 -90
- package/lib/engine-components/postprocessing/PostProcessingEffect.js +168 -168
- package/lib/engine-components/postprocessing/PostProcessingHandler.d.ts +42 -42
- package/lib/engine-components/postprocessing/PostProcessingHandler.js +494 -494
- package/lib/engine-components/postprocessing/Volume.d.ts +90 -90
- package/lib/engine-components/postprocessing/Volume.js +385 -385
- package/lib/engine-components/postprocessing/VolumeParameter.d.ts +26 -26
- package/lib/engine-components/postprocessing/VolumeParameter.js +136 -136
- package/lib/engine-components/postprocessing/VolumeProfile.d.ts +15 -15
- package/lib/engine-components/postprocessing/VolumeProfile.js +60 -60
- package/lib/engine-components/postprocessing/index.d.ts +6 -6
- package/lib/engine-components/postprocessing/index.js +6 -6
- package/lib/engine-components/postprocessing/utils.d.ts +55 -55
- package/lib/engine-components/postprocessing/utils.js +119 -119
- package/lib/engine-components/timeline/PlayableDirector.d.ts +163 -163
- package/lib/engine-components/timeline/PlayableDirector.js +686 -686
- package/lib/engine-components/timeline/SignalAsset.d.ts +24 -24
- package/lib/engine-components/timeline/SignalAsset.js +130 -130
- package/lib/engine-components/timeline/TimelineModels.d.ts +89 -89
- package/lib/engine-components/timeline/TimelineModels.js +22 -22
- package/lib/engine-components/timeline/TimelineTracks.d.ts +110 -110
- package/lib/engine-components/timeline/TimelineTracks.js +879 -879
- package/lib/engine-components/timeline/index.d.ts +4 -4
- package/lib/engine-components/timeline/index.js +3 -3
- package/lib/engine-components/ui/BaseUIComponent.d.ts +48 -48
- package/lib/engine-components/ui/BaseUIComponent.js +170 -170
- package/lib/engine-components/ui/Button.d.ts +64 -64
- package/lib/engine-components/ui/Button.js +315 -315
- package/lib/engine-components/ui/Canvas.d.ts +74 -74
- package/lib/engine-components/ui/Canvas.js +407 -407
- package/lib/engine-components/ui/CanvasGroup.d.ts +19 -19
- package/lib/engine-components/ui/CanvasGroup.js +58 -58
- package/lib/engine-components/ui/EventSystem.d.ts +125 -125
- package/lib/engine-components/ui/EventSystem.js +765 -765
- package/lib/engine-components/ui/Graphic.d.ts +55 -55
- package/lib/engine-components/ui/Graphic.js +255 -255
- package/lib/engine-components/ui/Image.d.ts +35 -35
- package/lib/engine-components/ui/Image.js +116 -116
- package/lib/engine-components/ui/InputField.d.ts +42 -42
- package/lib/engine-components/ui/InputField.js +268 -268
- package/lib/engine-components/ui/Interfaces.d.ts +38 -38
- package/lib/engine-components/ui/Interfaces.js +12 -12
- package/lib/engine-components/ui/Layout.d.ts +84 -84
- package/lib/engine-components/ui/Layout.js +330 -330
- package/lib/engine-components/ui/Outline.d.ts +7 -7
- package/lib/engine-components/ui/Outline.js +20 -20
- package/lib/engine-components/ui/PointerEvents.d.ts +115 -115
- package/lib/engine-components/ui/PointerEvents.js +145 -145
- package/lib/engine-components/ui/RaycastUtils.d.ts +11 -11
- package/lib/engine-components/ui/RaycastUtils.js +67 -67
- package/lib/engine-components/ui/Raycaster.d.ts +30 -30
- package/lib/engine-components/ui/Raycaster.js +95 -95
- package/lib/engine-components/ui/RectTransform.d.ts +61 -61
- package/lib/engine-components/ui/RectTransform.js +356 -356
- package/lib/engine-components/ui/SpatialHtml.d.ts +8 -8
- package/lib/engine-components/ui/SpatialHtml.js +79 -79
- package/lib/engine-components/ui/Symbols.d.ts +1 -1
- package/lib/engine-components/ui/Symbols.js +1 -1
- package/lib/engine-components/ui/Text.d.ts +78 -78
- package/lib/engine-components/ui/Text.js +539 -539
- package/lib/engine-components/ui/Utils.d.ts +24 -24
- package/lib/engine-components/ui/Utils.js +90 -90
- package/lib/engine-components/ui/index.d.ts +1 -1
- package/lib/engine-components/ui/index.js +1 -1
- package/lib/engine-components/utils/EnvironmentScene.d.ts +5 -5
- package/lib/engine-components/utils/EnvironmentScene.js +205 -205
- package/lib/engine-components/utils/LookAt.d.ts +31 -31
- package/lib/engine-components/utils/LookAt.js +82 -82
- package/lib/engine-components/utils/OpenURL.d.ts +42 -42
- package/lib/engine-components/utils/OpenURL.js +119 -119
- package/lib/engine-components/webxr/Avatar.d.ts +25 -25
- package/lib/engine-components/webxr/Avatar.js +255 -255
- package/lib/engine-components/webxr/TeleportTarget.d.ts +7 -7
- package/lib/engine-components/webxr/TeleportTarget.js +7 -7
- package/lib/engine-components/webxr/WebARCameraBackground.d.ts +30 -30
- package/lib/engine-components/webxr/WebARCameraBackground.js +155 -155
- package/lib/engine-components/webxr/WebARSessionRoot.d.ts +98 -98
- package/lib/engine-components/webxr/WebARSessionRoot.js +770 -770
- package/lib/engine-components/webxr/WebXR.d.ts +232 -232
- package/lib/engine-components/webxr/WebXR.js +561 -561
- package/lib/engine-components/webxr/WebXRAvatar.d.ts +27 -27
- package/lib/engine-components/webxr/WebXRAvatar.js +44 -44
- package/lib/engine-components/webxr/WebXRImageTracking.d.ts +86 -86
- package/lib/engine-components/webxr/WebXRImageTracking.js +471 -471
- package/lib/engine-components/webxr/WebXRPlaneTracking.d.ts +92 -92
- package/lib/engine-components/webxr/WebXRPlaneTracking.js +500 -500
- package/lib/engine-components/webxr/WebXRRig.d.ts +32 -32
- package/lib/engine-components/webxr/WebXRRig.js +72 -72
- package/lib/engine-components/webxr/XRFlag.d.ts +38 -38
- package/lib/engine-components/webxr/XRFlag.js +139 -139
- package/lib/engine-components/webxr/controllers/XRControllerFollow.d.ts +47 -47
- package/lib/engine-components/webxr/controllers/XRControllerFollow.js +120 -120
- package/lib/engine-components/webxr/controllers/XRControllerModel.d.ts +43 -43
- package/lib/engine-components/webxr/controllers/XRControllerModel.js +352 -352
- package/lib/engine-components/webxr/controllers/XRControllerMovement.d.ts +78 -78
- package/lib/engine-components/webxr/controllers/XRControllerMovement.js +506 -506
- package/lib/engine-components/webxr/index.d.ts +3 -3
- package/lib/engine-components/webxr/index.js +3 -3
- package/lib/engine-components/webxr/types.d.ts +3 -3
- package/lib/engine-components/webxr/types.js +1 -1
- package/lib/engine-components-experimental/Presentation.d.ts +6 -6
- package/lib/engine-components-experimental/Presentation.js +9 -9
- package/lib/engine-components-experimental/api.d.ts +4 -4
- package/lib/engine-components-experimental/api.js +4 -4
- package/lib/engine-components-experimental/networking/PlayerSync.d.ts +156 -156
- package/lib/engine-components-experimental/networking/PlayerSync.js +377 -377
- package/lib/engine-schemes/api.d.ts +12 -12
- package/lib/engine-schemes/api.js +12 -12
- package/lib/engine-schemes/schemes.d.ts +7 -7
- package/lib/engine-schemes/schemes.js +19 -19
- package/lib/engine-schemes/synced-camera-model.d.ts +25 -25
- package/lib/engine-schemes/synced-camera-model.js +67 -67
- package/lib/engine-schemes/synced-transform-model.d.ts +31 -31
- package/lib/engine-schemes/synced-transform-model.js +66 -66
- package/lib/engine-schemes/transform.d.ts +12 -12
- package/lib/engine-schemes/transform.js +39 -39
- package/lib/engine-schemes/vec2.d.ts +10 -10
- package/lib/engine-schemes/vec2.js +25 -25
- package/lib/engine-schemes/vec3.d.ts +11 -11
- package/lib/engine-schemes/vec3.js +29 -29
- package/lib/engine-schemes/vec4.d.ts +12 -12
- package/lib/engine-schemes/vec4.js +33 -33
- package/lib/engine-schemes/vr-user-state-buffer.d.ts +37 -37
- package/lib/engine-schemes/vr-user-state-buffer.js +110 -110
- package/lib/include/three/EXT_mesh_gpu_instancing_exporter.d.ts +6 -6
- package/lib/include/three/EXT_mesh_gpu_instancing_exporter.js +45 -45
- package/lib/needle-engine.d.ts +7 -7
- package/lib/needle-engine.js +64 -64
- package/package.json +2 -2
- package/plugins/common/buildinfo.js +64 -64
- package/plugins/common/cloud.js +1 -1
- package/plugins/common/config.cjs +31 -31
- package/plugins/common/config.js +35 -35
- package/plugins/common/files.js +31 -31
- package/plugins/common/generator.js +10 -10
- package/plugins/common/license.js +452 -452
- package/plugins/common/logger.js +327 -327
- package/plugins/common/npm.js +15 -15
- package/plugins/common/timers.js +7 -7
- package/plugins/common/version.js +37 -37
- package/plugins/gltf-packer.mjs +1 -1
- package/plugins/next/alias.cjs +39 -39
- package/plugins/next/license.cjs +24 -24
- package/plugins/next/meshbvhworker.cjs +18 -18
- package/plugins/next/next.js +141 -141
- package/plugins/types/index.d.ts +2 -2
- package/plugins/types/license.d.ts +24 -24
- package/plugins/types/needleConfig.d.ts +27 -27
- package/plugins/types/next.d.ts +2 -2
- package/plugins/types/userconfig.d.ts +124 -124
- package/plugins/types/vite.d.ts +13 -13
- package/plugins/types/webmanifest.d.ts +32 -32
- package/plugins/vite/alias.js +189 -189
- package/plugins/vite/asap.js +251 -251
- package/plugins/vite/build-pipeline.js +371 -371
- package/plugins/vite/build.js +19 -19
- package/plugins/vite/buildinfo.js +41 -41
- package/plugins/vite/config.js +106 -106
- package/plugins/vite/copyfiles.js +138 -138
- package/plugins/vite/defines.js +70 -70
- package/plugins/vite/dependencies.js +232 -232
- package/plugins/vite/dependency-watcher.js +237 -237
- package/plugins/vite/drop-client.js +76 -76
- package/plugins/vite/drop.js +87 -87
- package/plugins/vite/editor-connection.js +124 -124
- package/plugins/vite/facebook-instant-games.js +102 -102
- package/plugins/vite/gzip.js +5 -5
- package/plugins/vite/imports-logger.js +143 -143
- package/plugins/vite/index.js +147 -147
- package/plugins/vite/license.js +56 -56
- package/plugins/vite/local-files.js +440 -440
- package/plugins/vite/logger.client.js +272 -272
- package/plugins/vite/logger.js +100 -100
- package/plugins/vite/materialx.js +31 -31
- package/plugins/vite/meta.js +163 -163
- package/plugins/vite/npm.js +7 -7
- package/plugins/vite/peer.js +29 -29
- package/plugins/vite/poster-client.js +73 -73
- package/plugins/vite/poster.js +79 -79
- package/plugins/vite/pwa.js +604 -604
- package/plugins/vite/reload-client.js +15 -15
- package/plugins/vite/reload.js +351 -351
- package/plugins/vite/server.js +66 -66
- package/plugins/vite/transform-codegen.js +55 -55
- package/plugins/vite/transform.js +32 -32
- package/plugins/vite/vite-4.4-hack.js +31 -31
- package/src/asap/needle-asap.ts +111 -111
- package/src/asap/sessiongranted.ts +75 -75
- package/src/asap/utils.ts +4 -4
- package/src/engine/analytics/index.ts +10 -10
- package/src/engine/analytics/lcp.ts +35 -35
- package/src/engine/api.ts +82 -82
- package/src/engine/assets/index.ts +59 -59
- package/src/engine/assets/static.js +5 -5
- package/src/engine/codegen/register_types.ts +300 -300
- package/src/engine/debug/debug.ts +51 -51
- package/src/engine/debug/debug_console.ts +333 -333
- package/src/engine/debug/debug_overlay.ts +332 -332
- package/src/engine/debug/debug_spatial_console.ts +429 -429
- package/src/engine/debug/index.ts +1 -1
- package/src/engine/engine_addressables.ts +671 -671
- package/src/engine/engine_animation.ts +145 -145
- package/src/engine/engine_application.ts +113 -113
- package/src/engine/engine_assetdatabase.ts +389 -389
- package/src/engine/engine_audio.ts +24 -24
- package/src/engine/engine_camera.ts +39 -39
- package/src/engine/engine_components.ts +366 -366
- package/src/engine/engine_components_internal.ts +40 -40
- package/src/engine/engine_constants.ts +52 -52
- package/src/engine/engine_context.ts +1824 -1824
- package/src/engine/engine_context_registry.ts +129 -129
- package/src/engine/engine_coroutine.ts +54 -54
- package/src/engine/engine_create_objects.ts +411 -411
- package/src/engine/engine_default_parameters.ts +3 -3
- package/src/engine/engine_editor-sync.ts +28 -28
- package/src/engine/engine_fileloader.js +9 -9
- package/src/engine/engine_gameobject.ts +712 -712
- package/src/engine/engine_generic_utils.js +13 -13
- package/src/engine/engine_gizmos.ts +577 -577
- package/src/engine/engine_gltf.ts +29 -29
- package/src/engine/engine_gltf_builtin_components.ts +403 -403
- package/src/engine/engine_hot_reload.ts +210 -210
- package/src/engine/engine_input.ts +1500 -1500
- package/src/engine/engine_input_utils.ts +23 -23
- package/src/engine/engine_instancing.ts +45 -45
- package/src/engine/engine_license.ts +386 -386
- package/src/engine/engine_lifecycle_api.ts +113 -113
- package/src/engine/engine_lifecycle_functions_internal.ts +193 -193
- package/src/engine/engine_lightdata.ts +125 -125
- package/src/engine/engine_loaders.callbacks.ts +136 -136
- package/src/engine/engine_loaders.gltf.ts +82 -82
- package/src/engine/engine_loaders.ts +378 -378
- package/src/engine/engine_lods.ts +186 -186
- package/src/engine/engine_mainloop_utils.ts +472 -472
- package/src/engine/engine_math.ts +282 -282
- package/src/engine/engine_modules.ts +83 -83
- package/src/engine/engine_networking.ts +862 -862
- package/src/engine/engine_networking_auto.ts +352 -352
- package/src/engine/engine_networking_blob.ts +275 -275
- package/src/engine/engine_networking_files.ts +217 -217
- package/src/engine/engine_networking_files_default_components.ts +58 -58
- package/src/engine/engine_networking_instantiate.ts +419 -419
- package/src/engine/engine_networking_peer.ts +159 -159
- package/src/engine/engine_networking_streams.ts +713 -713
- package/src/engine/engine_networking_types.ts +24 -24
- package/src/engine/engine_networking_utils.ts +23 -23
- package/src/engine/engine_networking_websocket.ts +2 -2
- package/src/engine/engine_patcher.ts +199 -199
- package/src/engine/engine_physics.ts +783 -783
- package/src/engine/engine_physics.types.ts +46 -46
- package/src/engine/engine_physics_rapier.ts +1577 -1577
- package/src/engine/engine_playerview.ts +80 -80
- package/src/engine/engine_scenelighting.ts +294 -294
- package/src/engine/engine_serialization.ts +2 -2
- package/src/engine/engine_serialization_builtin_serializer.ts +473 -473
- package/src/engine/engine_serialization_core.ts +720 -720
- package/src/engine/engine_serialization_decorator.ts +80 -80
- package/src/engine/engine_setup.ts +1 -1
- package/src/engine/engine_shaders.ts +267 -267
- package/src/engine/engine_shims.ts +32 -32
- package/src/engine/engine_test_utils.ts +109 -109
- package/src/engine/engine_texture.ts +82 -82
- package/src/engine/engine_three_utils.ts +928 -928
- package/src/engine/engine_time.ts +94 -94
- package/src/engine/engine_time_utils.ts +237 -237
- package/src/engine/engine_tonemapping.ts +208 -208
- package/src/engine/engine_types.ts +730 -730
- package/src/engine/engine_typestore.ts +63 -63
- package/src/engine/engine_util_decorator.ts +136 -136
- package/src/engine/engine_utils.ts +1115 -1115
- package/src/engine/engine_utils_format.ts +273 -273
- package/src/engine/engine_utils_screenshot.ts +708 -708
- package/src/engine/engine_utils_screenshot.xr.ts +103 -103
- package/src/engine/export/gltf/Writers.ts +34 -34
- package/src/engine/export/gltf/index.ts +158 -158
- package/src/engine/export/index.ts +2 -2
- package/src/engine/export/state.ts +19 -19
- package/src/engine/export/utils.ts +9 -9
- package/src/engine/extensions/EXT_texture_exr.ts +50 -50
- package/src/engine/extensions/NEEDLE_animator_controller_model.ts +195 -195
- package/src/engine/extensions/NEEDLE_components.ts +268 -268
- package/src/engine/extensions/NEEDLE_gameobject_data.ts +81 -81
- package/src/engine/extensions/NEEDLE_lighting_settings.ts +185 -185
- package/src/engine/extensions/NEEDLE_lightmaps.ts +119 -119
- package/src/engine/extensions/NEEDLE_persistent_assets.ts +76 -76
- package/src/engine/extensions/NEEDLE_render_objects.ts +209 -209
- package/src/engine/extensions/NEEDLE_techniques_webgl.ts +640 -640
- package/src/engine/extensions/extension_resolver.ts +4 -4
- package/src/engine/extensions/extension_utils.ts +166 -166
- package/src/engine/extensions/extensions.ts +140 -140
- package/src/engine/extensions/index.ts +5 -5
- package/src/engine/extensions/usage_tracker.ts +100 -100
- package/src/engine/js-extensions/Camera.ts +37 -37
- package/src/engine/js-extensions/ExtensionUtils.ts +85 -85
- package/src/engine/js-extensions/Layers.ts +23 -23
- package/src/engine/js-extensions/Object3D.ts +296 -296
- package/src/engine/js-extensions/RGBAColor.ts +126 -126
- package/src/engine/js-extensions/Vector.ts +18 -18
- package/src/engine/js-extensions/index.ts +4 -4
- package/src/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js +125 -125
- package/src/engine/shaders/shaderData.ts +67 -67
- package/src/engine/tests/test_utils.ts +63 -63
- package/src/engine/webcomponents/WebXRButtons.ts +260 -260
- package/src/engine/webcomponents/api.ts +6 -6
- package/src/engine/webcomponents/buttons.ts +292 -292
- package/src/engine/webcomponents/fonts.ts +41 -41
- package/src/engine/webcomponents/icons.ts +57 -57
- package/src/engine/webcomponents/index.ts +1 -1
- package/src/engine/webcomponents/logo-element.ts +78 -78
- package/src/engine/webcomponents/needle menu/needle-menu-spatial.ts +573 -573
- package/src/engine/webcomponents/needle menu/needle-menu.ts +1118 -1118
- package/src/engine/webcomponents/needle-button.ts +181 -181
- package/src/engine/webcomponents/needle-engine.ar-overlay.ts +186 -186
- package/src/engine/webcomponents/needle-engine.attributes.ts +82 -82
- package/src/engine/webcomponents/needle-engine.extras.ts +16 -16
- package/src/engine/webcomponents/needle-engine.loading.ts +373 -373
- package/src/engine/webcomponents/needle-engine.ts +860 -860
- package/src/engine/xr/NeedleXRController.ts +1125 -1125
- package/src/engine/xr/NeedleXRSession.ts +1624 -1624
- package/src/engine/xr/NeedleXRSync.ts +220 -220
- package/src/engine/xr/SceneTransition.ts +78 -78
- package/src/engine/xr/TempXRContext.ts +216 -216
- package/src/engine/xr/XRRig.ts +9 -9
- package/src/engine/xr/api.ts +5 -5
- package/src/engine/xr/events.ts +102 -102
- package/src/engine/xr/internal.ts +34 -34
- package/src/engine/xr/usdz.ts +30 -30
- package/src/engine/xr/utils.ts +39 -39
- package/src/engine-components/AlignmentConstraint.ts +36 -36
- package/src/engine-components/Animation.ts +557 -557
- package/src/engine-components/AnimationCurve.ts +150 -150
- package/src/engine-components/AnimationUtils.ts +28 -28
- package/src/engine-components/AnimationUtilsAutoplay.ts +43 -43
- package/src/engine-components/Animator.ts +397 -397
- package/src/engine-components/AnimatorController.ts +1293 -1293
- package/src/engine-components/AudioListener.ts +92 -92
- package/src/engine-components/AudioSource.ts +644 -644
- package/src/engine-components/AvatarLoader.ts +263 -263
- package/src/engine-components/AxesHelper.ts +59 -59
- package/src/engine-components/BasicIKConstraint.ts +54 -54
- package/src/engine-components/BoxCollider.ts +1 -1
- package/src/engine-components/BoxHelperComponent.ts +114 -114
- package/src/engine-components/Camera.ts +719 -719
- package/src/engine-components/CameraUtils.ts +138 -138
- package/src/engine-components/CharacterController.ts +253 -253
- package/src/engine-components/Collider.ts +374 -374
- package/src/engine-components/Component.ts +1297 -1297
- package/src/engine-components/ContactShadows.ts +506 -506
- package/src/engine-components/DeleteBox.ts +62 -62
- package/src/engine-components/DeviceFlag.ts +46 -46
- package/src/engine-components/DragControls.ts +1623 -1623
- package/src/engine-components/DropListener.ts +713 -713
- package/src/engine-components/Duplicatable.ts +198 -198
- package/src/engine-components/EventList.ts +266 -266
- package/src/engine-components/EventTrigger.ts +74 -74
- package/src/engine-components/EventType.ts +22 -22
- package/src/engine-components/Fog.ts +60 -60
- package/src/engine-components/Gizmos.ts +56 -56
- package/src/engine-components/GridHelper.ts +48 -48
- package/src/engine-components/GroundProjection.ts +356 -356
- package/src/engine-components/Interactable.ts +14 -14
- package/src/engine-components/Joints.ts +52 -52
- package/src/engine-components/LODGroup.ts +153 -153
- package/src/engine-components/Light.ts +558 -558
- package/src/engine-components/LookAtConstraint.ts +25 -25
- package/src/engine-components/NeedleMenu.ts +84 -84
- package/src/engine-components/NestedGltf.ts +86 -86
- package/src/engine-components/Networking.ts +114 -114
- package/src/engine-components/OffsetConstraint.ts +60 -60
- package/src/engine-components/OrbitControls.ts +1074 -1074
- package/src/engine-components/PlayerColor.ts +103 -103
- package/src/engine-components/ReflectionProbe.ts +220 -220
- package/src/engine-components/Renderer.ts +903 -903
- package/src/engine-components/RendererInstancing.ts +855 -855
- package/src/engine-components/RendererLightmap.ts +198 -198
- package/src/engine-components/RigidBody.ts +526 -526
- package/src/engine-components/SceneSwitcher.ts +1030 -1030
- package/src/engine-components/ScreenCapture.ts +592 -592
- package/src/engine-components/ShadowCatcher.ts +172 -172
- package/src/engine-components/Skybox.ts +475 -475
- package/src/engine-components/SmoothFollow.ts +76 -76
- package/src/engine-components/SpatialTrigger.ts +229 -229
- package/src/engine-components/SpectatorCamera.ts +787 -787
- package/src/engine-components/SphereCollider.ts +1 -1
- package/src/engine-components/SpriteRenderer.ts +468 -468
- package/src/engine-components/SyncedCamera.ts +220 -220
- package/src/engine-components/SyncedRoom.ts +380 -380
- package/src/engine-components/SyncedTransform.ts +383 -383
- package/src/engine-components/TestRunner.ts +118 -118
- package/src/engine-components/TransformGizmo.ts +219 -219
- package/src/engine-components/VideoPlayer.ts +1025 -1025
- package/src/engine-components/Voip.ts +363 -363
- package/src/engine-components/api.ts +60 -60
- package/src/engine-components/avatar/AvatarBlink_Simple.ts +69 -69
- package/src/engine-components/avatar/AvatarEyeLook_Rotation.ts +63 -63
- package/src/engine-components/avatar/Avatar_Brain_LookAt.ts +139 -139
- package/src/engine-components/avatar/Avatar_MouthShapes.ts +83 -83
- package/src/engine-components/avatar/Avatar_MustacheShake.ts +31 -31
- package/src/engine-components/codegen/components.ts +217 -217
- package/src/engine-components/debug/LogStats.ts +21 -21
- package/src/engine-components/export/gltf/GltfExport.ts +265 -265
- package/src/engine-components/export/usdz/Extension.ts +24 -24
- package/src/engine-components/export/usdz/ThreeUSDZExporter.ts +2426 -2426
- package/src/engine-components/export/usdz/USDZExporter.ts +705 -705
- package/src/engine-components/export/usdz/extensions/Animation.ts +1204 -1204
- package/src/engine-components/export/usdz/extensions/DocumentExtension.ts +9 -9
- package/src/engine-components/export/usdz/extensions/NodeMaterialConverter.ts +532 -532
- package/src/engine-components/export/usdz/extensions/USDZText.ts +240 -240
- package/src/engine-components/export/usdz/extensions/USDZUI.ts +189 -189
- package/src/engine-components/export/usdz/extensions/behavior/Actions.ts +99 -99
- package/src/engine-components/export/usdz/extensions/behavior/AudioExtension.ts +102 -102
- package/src/engine-components/export/usdz/extensions/behavior/Behaviour.ts +320 -320
- package/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts +1225 -1225
- package/src/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.ts +646 -646
- package/src/engine-components/export/usdz/extensions/behavior/PhysicsExtension.ts +132 -132
- package/src/engine-components/export/usdz/index.ts +2 -2
- package/src/engine-components/export/usdz/utils/animationutils.ts +191 -191
- package/src/engine-components/export/usdz/utils/quicklook.ts +50 -50
- package/src/engine-components/particlesystem/ParticleSystem.ts +1287 -1287
- package/src/engine-components/particlesystem/ParticleSystemModules.ts +1765 -1765
- package/src/engine-components/particlesystem/ParticleSystemSubEmitter.ts +111 -111
- package/src/engine-components/particlesystem/api.ts +1 -1
- package/src/engine-components/postprocessing/Effects/Antialiasing.ts +64 -64
- package/src/engine-components/postprocessing/Effects/BloomEffect.ts +116 -116
- package/src/engine-components/postprocessing/Effects/ChromaticAberration.ts +37 -37
- package/src/engine-components/postprocessing/Effects/ColorAdjustments.ts +106 -106
- package/src/engine-components/postprocessing/Effects/DepthOfField.ts +103 -103
- package/src/engine-components/postprocessing/Effects/EffectWrapper.ts +25 -25
- package/src/engine-components/postprocessing/Effects/Pixelation.ts +32 -32
- package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.ts +90 -90
- package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.ts +192 -192
- package/src/engine-components/postprocessing/Effects/Sharpening.ts +143 -143
- package/src/engine-components/postprocessing/Effects/TiltShiftEffect.ts +61 -61
- package/src/engine-components/postprocessing/Effects/Tonemapping.ts +103 -103
- package/src/engine-components/postprocessing/Effects/Tonemapping.utils.ts +60 -60
- package/src/engine-components/postprocessing/Effects/Vignette.ts +59 -59
- package/src/engine-components/postprocessing/PostProcessingEffect.ts +192 -192
- package/src/engine-components/postprocessing/PostProcessingHandler.ts +572 -572
- package/src/engine-components/postprocessing/Volume.ts +426 -426
- package/src/engine-components/postprocessing/VolumeParameter.ts +158 -158
- package/src/engine-components/postprocessing/VolumeProfile.ts +61 -61
- package/src/engine-components/postprocessing/index.ts +5 -5
- package/src/engine-components/postprocessing/utils.ts +154 -154
- package/src/engine-components/timeline/PlayableDirector.ts +722 -722
- package/src/engine-components/timeline/SignalAsset.ts +144 -144
- package/src/engine-components/timeline/TimelineModels.ts +92 -92
- package/src/engine-components/timeline/TimelineTracks.ts +967 -967
- package/src/engine-components/timeline/index.ts +3 -3
- package/src/engine-components/ui/BaseUIComponent.ts +203 -203
- package/src/engine-components/ui/Button.ts +307 -307
- package/src/engine-components/ui/Canvas.ts +419 -419
- package/src/engine-components/ui/CanvasGroup.ts +54 -54
- package/src/engine-components/ui/EventSystem.ts +854 -854
- package/src/engine-components/ui/Graphic.ts +275 -275
- package/src/engine-components/ui/Image.ts +112 -112
- package/src/engine-components/ui/InputField.ts +321 -321
- package/src/engine-components/ui/Interfaces.ts +57 -57
- package/src/engine-components/ui/Layout.ts +334 -334
- package/src/engine-components/ui/Outline.ts +13 -13
- package/src/engine-components/ui/PointerEvents.ts +206 -206
- package/src/engine-components/ui/RaycastUtils.ts +69 -69
- package/src/engine-components/ui/Raycaster.ts +102 -102
- package/src/engine-components/ui/RectTransform.ts +375 -375
- package/src/engine-components/ui/SpatialHtml.ts +79 -79
- package/src/engine-components/ui/Symbols.ts +1 -1
- package/src/engine-components/ui/Text.ts +578 -578
- package/src/engine-components/ui/Utils.ts +113 -113
- package/src/engine-components/utils/EnvironmentScene.ts +245 -245
- package/src/engine-components/utils/LookAt.ts +88 -88
- package/src/engine-components/utils/OpenURL.ts +114 -114
- package/src/engine-components/webxr/Avatar.ts +265 -265
- package/src/engine-components/webxr/TeleportTarget.ts +9 -9
- package/src/engine-components/webxr/WebARCameraBackground.ts +175 -175
- package/src/engine-components/webxr/WebARSessionRoot.ts +880 -880
- package/src/engine-components/webxr/WebXR.ts +585 -585
- package/src/engine-components/webxr/WebXRAvatar.ts +66 -66
- package/src/engine-components/webxr/WebXRImageTracking.ts +519 -519
- package/src/engine-components/webxr/WebXRPlaneTracking.ts +570 -570
- package/src/engine-components/webxr/WebXRRig.ts +77 -77
- package/src/engine-components/webxr/XRFlag.ts +147 -147
- package/src/engine-components/webxr/controllers/XRControllerFollow.ts +118 -118
- package/src/engine-components/webxr/controllers/XRControllerModel.ts +373 -373
- package/src/engine-components/webxr/controllers/XRControllerMovement.ts +550 -550
- package/src/engine-components/webxr/index.ts +2 -2
- package/src/engine-components/webxr/types.ts +3 -3
- package/src/engine-components-experimental/Presentation.ts +12 -12
- package/src/engine-components-experimental/api.ts +4 -4
- package/src/engine-components-experimental/networking/PlayerSync.ts +401 -401
- package/src/engine-schemes/COMPILE_SCHEMES.bat +3 -3
- package/src/engine-schemes/COMPILE_TS.bat +11 -11
- package/src/engine-schemes/README.md +1 -1
- package/src/engine-schemes/api.ts +12 -12
- package/src/engine-schemes/dist/api.js +17 -0
- package/src/engine-schemes/dist/api.js.meta +7 -0
- package/src/engine-schemes/dist/schemes.js +25 -0
- package/src/engine-schemes/dist/schemes.js.meta +7 -0
- package/src/engine-schemes/dist/synced-camera-model.js +74 -0
- package/src/engine-schemes/dist/synced-camera-model.js.meta +7 -0
- package/src/engine-schemes/dist/synced-transform-model.js +73 -0
- package/src/engine-schemes/dist/synced-transform-model.js.meta +7 -0
- package/src/engine-schemes/dist/transform.js +46 -0
- package/src/engine-schemes/dist/transform.js.meta +7 -0
- package/src/engine-schemes/dist/vec2.js +32 -0
- package/src/engine-schemes/dist/vec2.js.meta +7 -0
- package/src/engine-schemes/dist/vec3.js +36 -0
- package/src/engine-schemes/dist/vec3.js.meta +7 -0
- package/src/engine-schemes/dist/vec4.js +40 -0
- package/src/engine-schemes/dist/vec4.js.meta +7 -0
- package/src/engine-schemes/dist/vr-user-state-buffer.js +110 -0
- package/src/engine-schemes/dist/vr-user-state-buffer.js.meta +7 -0
- package/src/engine-schemes/schemes.ts +28 -28
- package/src/engine-schemes/synced-camera-model.ts +92 -92
- package/src/engine-schemes/synced-transform-model.ts +90 -90
- package/src/engine-schemes/syncedCamera.fbs +10 -10
- package/src/engine-schemes/transform.ts +50 -50
- package/src/engine-schemes/transforms.fbs +25 -25
- package/src/engine-schemes/vec.fbs +19 -19
- package/src/engine-schemes/vec2.ts +33 -33
- package/src/engine-schemes/vec3.ts +38 -38
- package/src/engine-schemes/vec4.ts +43 -43
- package/src/engine-schemes/vr-user-state-buffer.ts +145 -145
- package/src/engine-schemes/vrUserStateBuffer.fbs +17 -17
- package/src/include/draco/draco_decoder.js +34 -34
- package/src/include/ktx2/basis_transcoder.js +21 -21
- package/src/include/needle/arial-msdf.json +1471 -1471
- package/src/include/three/DragControls.js +231 -231
- package/src/include/three/EXT_mesh_gpu_instancing_exporter.js +66 -66
- package/src/needle-engine.ts +70 -70
- package/dist/generateMeshBVH.worker-BaNp_Xtp.js +0 -25
- package/dist/gltf-progressive-60Qk5ebF.min.js +0 -8
- package/dist/gltf-progressive-DM5ZiecW.js +0 -1060
- package/dist/gltf-progressive-wxtaVmio.umd.cjs +0 -8
|
@@ -1,506 +1,506 @@
|
|
|
1
|
-
import { BackSide, CustomBlending, DoubleSide, FrontSide, Group, Material, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshStandardMaterial, MinEquation, Object3D, OrthographicCamera, PlaneGeometry, RenderItem, ShaderMaterial, Vector3, WebGLRenderTarget } from "three";
|
|
2
|
-
import { HorizontalBlurShader } from 'three/examples/jsm/shaders/HorizontalBlurShader.js';
|
|
3
|
-
import { VerticalBlurShader } from 'three/examples/jsm/shaders/VerticalBlurShader.js';
|
|
4
|
-
|
|
5
|
-
import { setAutoFitEnabled } from "../engine/engine_camera.js";
|
|
6
|
-
import { addComponent } from "../engine/engine_components.js";
|
|
7
|
-
import { Context } from "../engine/engine_context.js";
|
|
8
|
-
import { Gizmos } from "../engine/engine_gizmos.js";
|
|
9
|
-
import { onStart } from "../engine/engine_lifecycle_api.js";
|
|
10
|
-
import { serializable } from "../engine/engine_serialization_decorator.js";
|
|
11
|
-
import { getBoundingBox, getVisibleInCustomShadowRendering } from "../engine/engine_three_utils.js";
|
|
12
|
-
import { HideFlags, IGameObject, Vec3 } from "../engine/engine_types.js";
|
|
13
|
-
import { getParam } from "../engine/engine_utils.js"
|
|
14
|
-
import { setCustomVisibility } from "../engine/js-extensions/Layers.js";
|
|
15
|
-
import { Behaviour, GameObject } from "./Component.js";
|
|
16
|
-
|
|
17
|
-
const debug = getParam("debugcontactshadows");
|
|
18
|
-
|
|
19
|
-
onStart(ctx => {
|
|
20
|
-
const val = ctx.domElement.getAttribute("contactshadows") || ctx.domElement.getAttribute("contact-shadows");
|
|
21
|
-
if (val != undefined && val != "0" && val != "false") {
|
|
22
|
-
console.debug("Auto-creating ContactShadows because of `contactshadows` attribute");
|
|
23
|
-
const shadows = ContactShadows.auto(ctx);
|
|
24
|
-
const intensity = parseFloat(val);
|
|
25
|
-
if (!isNaN(intensity)) {
|
|
26
|
-
shadows.opacity = intensity;
|
|
27
|
-
shadows.darkness = intensity;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
// Adapted from https://github.com/mrdoob/three.js/blob/master/examples/webgl_shadow_contact.html.
|
|
33
|
-
|
|
34
|
-
// Improved with
|
|
35
|
-
// - ground occluder
|
|
36
|
-
// - backface shadowing (slightly less than front faces)
|
|
37
|
-
// - node can simply be scaled in Y to adjust max. ground height
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* ContactShadows is a component that allows to display contact shadows in the scene.
|
|
41
|
-
* @category Rendering
|
|
42
|
-
* @group Components
|
|
43
|
-
*/
|
|
44
|
-
export class ContactShadows extends Behaviour {
|
|
45
|
-
|
|
46
|
-
private static readonly _instances: Map<Context, ContactShadows> = new Map();
|
|
47
|
-
/**
|
|
48
|
-
* Create contact shadows for the scene. Automatically fits the shadows to the scene.
|
|
49
|
-
* The instance of contact shadows will be created only once.
|
|
50
|
-
* @param context The context to create the contact shadows in.
|
|
51
|
-
* @returns The instance of the contact shadows.
|
|
52
|
-
*/
|
|
53
|
-
static auto(context?: Context): ContactShadows {
|
|
54
|
-
if (!context) context = Context.Current;
|
|
55
|
-
if (!context) {
|
|
56
|
-
throw new Error("No context provided and no current context set.");
|
|
57
|
-
}
|
|
58
|
-
let instance = this._instances.get(context);
|
|
59
|
-
if (!instance || instance.destroyed) {
|
|
60
|
-
const obj = new Object3D();
|
|
61
|
-
instance = addComponent(obj, ContactShadows, {
|
|
62
|
-
autoFit: false,
|
|
63
|
-
occludeBelowGround: false
|
|
64
|
-
});
|
|
65
|
-
this._instances.set(context, instance);
|
|
66
|
-
}
|
|
67
|
-
context.scene.add(instance.gameObject);
|
|
68
|
-
instance.fitShadows();
|
|
69
|
-
return instance;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* When enabled the contact shadows component will be created to fit the whole scene.
|
|
74
|
-
*/
|
|
75
|
-
@serializable()
|
|
76
|
-
autoFit: boolean = false;
|
|
77
|
-
/**
|
|
78
|
-
* Darkness of the shadows.
|
|
79
|
-
* @default 0.5
|
|
80
|
-
*/
|
|
81
|
-
@serializable()
|
|
82
|
-
darkness: number = 0.5;
|
|
83
|
-
/**
|
|
84
|
-
* Opacity of the shadows.
|
|
85
|
-
* @default 0.5
|
|
86
|
-
*/
|
|
87
|
-
@serializable()
|
|
88
|
-
opacity: number = 0.5;
|
|
89
|
-
/**
|
|
90
|
-
* Blur of the shadows.
|
|
91
|
-
* @default 4.0
|
|
92
|
-
*/
|
|
93
|
-
@serializable()
|
|
94
|
-
blur: number = 4.0;
|
|
95
|
-
/**
|
|
96
|
-
* When enabled objects will not be visible below the shadow plane
|
|
97
|
-
* @default false
|
|
98
|
-
*/
|
|
99
|
-
@serializable()
|
|
100
|
-
occludeBelowGround: boolean = false;
|
|
101
|
-
/**
|
|
102
|
-
* When enabled the backfaces of objects will cast shadows as well.
|
|
103
|
-
* @default true
|
|
104
|
-
*/
|
|
105
|
-
@serializable()
|
|
106
|
-
backfaceShadows: boolean = true;
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* The minimum size of the shadows box
|
|
110
|
-
*/
|
|
111
|
-
minSize?: Partial<Vec3>;
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* When enabled the shadows will not be updated automatically. Use `needsUpdate()` to update the shadows manually.
|
|
115
|
-
* This is useful when you want to update the shadows only when the scene changes.
|
|
116
|
-
*/
|
|
117
|
-
manualUpdate: boolean = false;
|
|
118
|
-
/**
|
|
119
|
-
* Call this method to update the shadows manually. The update will be done in the next frame.
|
|
120
|
-
*/
|
|
121
|
-
set needsUpdate(val: boolean) {
|
|
122
|
-
this._needsUpdate = val;
|
|
123
|
-
}
|
|
124
|
-
get needsUpdate(): boolean {
|
|
125
|
-
return this._needsUpdate;
|
|
126
|
-
}
|
|
127
|
-
private _needsUpdate: boolean = false;
|
|
128
|
-
|
|
129
|
-
/** All shadow objects are parented to this object.
|
|
130
|
-
* The gameObject itself should not be transformed because we want the ContactShadows object e.g. also have a GroundProjectedEnv component
|
|
131
|
-
* in which case ContactShadows scale would affect the projection
|
|
132
|
-
**/
|
|
133
|
-
private readonly shadowsRoot: IGameObject = new Object3D() as IGameObject;
|
|
134
|
-
private shadowCamera?: OrthographicCamera;
|
|
135
|
-
private readonly shadowGroup: Group = new Group();
|
|
136
|
-
|
|
137
|
-
private renderTarget?: WebGLRenderTarget;
|
|
138
|
-
private renderTargetBlur?: WebGLRenderTarget;
|
|
139
|
-
|
|
140
|
-
private plane?: Mesh;
|
|
141
|
-
private occluderMesh?: Mesh;
|
|
142
|
-
private blurPlane?: Mesh;
|
|
143
|
-
|
|
144
|
-
private depthMaterial?: MeshDepthMaterial;
|
|
145
|
-
private horizontalBlurMaterial?: ShaderMaterial;
|
|
146
|
-
private verticalBlurMaterial?: ShaderMaterial;
|
|
147
|
-
|
|
148
|
-
private textureSize = 512;
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Call to fit the shadows to the scene.
|
|
152
|
-
*/
|
|
153
|
-
fitShadows() {
|
|
154
|
-
if (debug) console.warn("Fitting shadows to scene");
|
|
155
|
-
setAutoFitEnabled(this.shadowsRoot, false);
|
|
156
|
-
const box = getBoundingBox(this.context.scene.children, [this.shadowsRoot]);
|
|
157
|
-
// expand box in all directions (except below ground)
|
|
158
|
-
// 0.75 expands by 75% in each direction
|
|
159
|
-
// The "32" is pretty much heuristically determined – adjusting the value until we don't get a visible border anymore.
|
|
160
|
-
const expandFactor = Math.max(1, this.blur / 32);
|
|
161
|
-
const sizeX = box.max.x - box.min.x;
|
|
162
|
-
const sizeZ = box.max.z - box.min.z;
|
|
163
|
-
box.expandByVector(new Vector3(expandFactor * sizeX, 0, expandFactor * sizeZ));
|
|
164
|
-
if (debug) Gizmos.DrawWireBox3(box, 0xffff00, 60);
|
|
165
|
-
if (this.gameObject.parent) {
|
|
166
|
-
// transform box from world space into parent space
|
|
167
|
-
box.applyMatrix4((this.gameObject.parent as GameObject).matrixWorld.clone().invert());
|
|
168
|
-
}
|
|
169
|
-
const min = box.min;
|
|
170
|
-
const offset = Math.max(0.00001, (box.max.y - min.y) * .002);
|
|
171
|
-
box.max.y += offset;
|
|
172
|
-
// This is for cases where GroundProjection with autoFit is used
|
|
173
|
-
// Since contact shadows can currently not ignore certain objects from rendering
|
|
174
|
-
// we need to make sure the GroundProjection is not exactly on the same level as ContactShadows
|
|
175
|
-
// We can't move GroundProjection down because of immersive-ar mesh/plane tracking where occlusion would otherwise hide GroundProjection
|
|
176
|
-
this.shadowsRoot.position.set((min.x + box.max.x) / 2, min.y - offset, (min.z + box.max.z) / 2);
|
|
177
|
-
this.shadowsRoot.scale.set(box.max.x - min.x, box.max.y - min.y, box.max.z - min.z);
|
|
178
|
-
this.applyMinSize();
|
|
179
|
-
this.shadowsRoot.matrixWorldNeedsUpdate = true;
|
|
180
|
-
if (debug) console.log("Fitted shadows to scene", this.shadowsRoot.scale.clone());
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
/** @internal */
|
|
185
|
-
awake() {
|
|
186
|
-
ContactShadows._instances.set(this.context, this);
|
|
187
|
-
this.shadowsRoot.hideFlags = HideFlags.DontExport;
|
|
188
|
-
|
|
189
|
-
// ignore self for autofitting
|
|
190
|
-
setAutoFitEnabled(this.shadowsRoot, false);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
/** @internal */
|
|
195
|
-
start(): void {
|
|
196
|
-
if (debug) console.log("Create ContactShadows on " + this.gameObject.name, this)
|
|
197
|
-
|
|
198
|
-
this.gameObject.add(this.shadowsRoot);
|
|
199
|
-
this.shadowsRoot.add(this.shadowGroup);
|
|
200
|
-
|
|
201
|
-
// the render target that will show the shadows in the plane texture
|
|
202
|
-
this.renderTarget = new WebGLRenderTarget(this.textureSize, this.textureSize);
|
|
203
|
-
this.renderTarget.texture.generateMipmaps = false;
|
|
204
|
-
|
|
205
|
-
// the render target that we will use to blur the first render target
|
|
206
|
-
this.renderTargetBlur = new WebGLRenderTarget(this.textureSize, this.textureSize);
|
|
207
|
-
this.renderTargetBlur.texture.generateMipmaps = false;
|
|
208
|
-
|
|
209
|
-
// make a plane and make it face up
|
|
210
|
-
const planeGeometry = new PlaneGeometry(1, 1).rotateX(Math.PI / 2);
|
|
211
|
-
|
|
212
|
-
if (this.gameObject instanceof Mesh) {
|
|
213
|
-
console.warn("ContactShadows can not be added to a Mesh. Please add it to a Group or an empty Object");
|
|
214
|
-
// this.enabled = false;
|
|
215
|
-
setCustomVisibility(this.gameObject, false);
|
|
216
|
-
// this.plane = this.gameObject as any as Mesh;
|
|
217
|
-
// // Make sure we clone the material once because it might be used on another object as well
|
|
218
|
-
// const mat = this.plane.material = (this.plane.material as MeshBasicMaterial).clone();
|
|
219
|
-
// mat.map = this.renderTarget.texture;
|
|
220
|
-
// mat.opacity = this.opacity;
|
|
221
|
-
// mat.transparent = true;
|
|
222
|
-
// mat.depthWrite = false;
|
|
223
|
-
// mat.needsUpdate = true;
|
|
224
|
-
// When someone makes a custom mesh, they can set these values right on the material.
|
|
225
|
-
// mat.opacity = this.state.plane.opacity;
|
|
226
|
-
// mat.transparent = true;
|
|
227
|
-
// mat.depthWrite = false;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
const planeMaterial = new MeshBasicMaterial({
|
|
231
|
-
map: this.renderTarget.texture,
|
|
232
|
-
opacity: this.opacity,
|
|
233
|
-
color: 0x000000,
|
|
234
|
-
transparent: true,
|
|
235
|
-
depthWrite: false,
|
|
236
|
-
side: FrontSide,
|
|
237
|
-
});
|
|
238
|
-
this.plane = new Mesh(planeGeometry, planeMaterial);
|
|
239
|
-
this.plane.scale.y = - 1;
|
|
240
|
-
this.plane.layers.set(2);
|
|
241
|
-
this.shadowsRoot.add(this.plane);
|
|
242
|
-
|
|
243
|
-
if (this.plane) this.plane.renderOrder = 1;
|
|
244
|
-
|
|
245
|
-
this.occluderMesh = new Mesh(this.plane.geometry, new MeshBasicMaterial({
|
|
246
|
-
depthWrite: true,
|
|
247
|
-
stencilWrite: true,
|
|
248
|
-
colorWrite: false,
|
|
249
|
-
side: BackSide,
|
|
250
|
-
}))
|
|
251
|
-
// .rotateX(Math.PI)
|
|
252
|
-
.translateY(-0.0001);
|
|
253
|
-
this.occluderMesh.renderOrder = -100;
|
|
254
|
-
this.occluderMesh.layers.set(2);
|
|
255
|
-
this.shadowsRoot.add(this.occluderMesh);
|
|
256
|
-
|
|
257
|
-
// the plane onto which to blur the texture
|
|
258
|
-
this.blurPlane = new Mesh(planeGeometry);
|
|
259
|
-
this.blurPlane.visible = false;
|
|
260
|
-
this.shadowGroup.add(this.blurPlane);
|
|
261
|
-
|
|
262
|
-
// max. ground distance is controlled via object scale
|
|
263
|
-
const near = 0;
|
|
264
|
-
const far = 1.0;
|
|
265
|
-
this.shadowCamera = new OrthographicCamera(-1 / 2, 1 / 2, 1 / 2, -1 / 2, near, far);
|
|
266
|
-
this.shadowCamera.layers.enableAll();
|
|
267
|
-
this.shadowCamera.rotation.x = Math.PI / 2; // get the camera to look up
|
|
268
|
-
this.shadowGroup.add(this.shadowCamera);
|
|
269
|
-
|
|
270
|
-
// like MeshDepthMaterial, but goes from black to transparent
|
|
271
|
-
this.depthMaterial = new MeshDepthMaterial();
|
|
272
|
-
this.depthMaterial.userData.darkness = { value: this.darkness };
|
|
273
|
-
// this will properly overlap calculated shadows
|
|
274
|
-
this.depthMaterial.blending = CustomBlending;
|
|
275
|
-
this.depthMaterial.blendEquation = MaxEquation;
|
|
276
|
-
|
|
277
|
-
// this.depthMaterial.blendEquation = MinEquation;
|
|
278
|
-
this.depthMaterial.onBeforeCompile = shader => {
|
|
279
|
-
if (!this.depthMaterial) return;
|
|
280
|
-
shader.uniforms.darkness = this.depthMaterial.userData.darkness;
|
|
281
|
-
shader.fragmentShader = /* glsl */`
|
|
282
|
-
uniform float darkness;
|
|
283
|
-
${shader.fragmentShader.replace(
|
|
284
|
-
'gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );',
|
|
285
|
-
// we're scaling the shadow value down a bit when it's a backface (looks better)
|
|
286
|
-
'gl_FragColor = vec4( vec3( 1.0 ), ( 1.0 - fragCoordZ ) * darkness * opacity * (gl_FrontFacing ? 1.0 : 0.66) );'
|
|
287
|
-
)}
|
|
288
|
-
`;
|
|
289
|
-
};
|
|
290
|
-
|
|
291
|
-
this.depthMaterial.depthTest = false;
|
|
292
|
-
this.depthMaterial.depthWrite = false;
|
|
293
|
-
|
|
294
|
-
this.horizontalBlurMaterial = new ShaderMaterial(HorizontalBlurShader);
|
|
295
|
-
this.horizontalBlurMaterial.depthTest = false;
|
|
296
|
-
|
|
297
|
-
this.verticalBlurMaterial = new ShaderMaterial(VerticalBlurShader);
|
|
298
|
-
this.verticalBlurMaterial.depthTest = false;
|
|
299
|
-
|
|
300
|
-
this.shadowGroup.visible = false;
|
|
301
|
-
|
|
302
|
-
if (this.autoFit) this.fitShadows();
|
|
303
|
-
else this.applyMinSize();
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
onEnable(): void {
|
|
307
|
-
this._needsUpdate = true;
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
/** @internal */
|
|
311
|
-
onDestroy(): void {
|
|
312
|
-
const instance = ContactShadows._instances.get(this.context);
|
|
313
|
-
if (instance === this) {
|
|
314
|
-
ContactShadows._instances.delete(this.context);
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
// dispose the render targets
|
|
318
|
-
this.renderTarget?.dispose();
|
|
319
|
-
this.renderTargetBlur?.dispose();
|
|
320
|
-
|
|
321
|
-
// dispose the materials
|
|
322
|
-
this.depthMaterial?.dispose();
|
|
323
|
-
this.horizontalBlurMaterial?.dispose();
|
|
324
|
-
this.verticalBlurMaterial?.dispose();
|
|
325
|
-
|
|
326
|
-
// dispose the geometries
|
|
327
|
-
this.blurPlane?.geometry.dispose();
|
|
328
|
-
this.plane?.geometry.dispose();
|
|
329
|
-
this.occluderMesh?.geometry.dispose();
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
/** @internal */
|
|
333
|
-
onBeforeRender(_frame: XRFrame | null): void {
|
|
334
|
-
|
|
335
|
-
if (this.manualUpdate) {
|
|
336
|
-
if (!this._needsUpdate) return;
|
|
337
|
-
}
|
|
338
|
-
this._needsUpdate = false;
|
|
339
|
-
|
|
340
|
-
if (!this.renderTarget || !this.renderTargetBlur ||
|
|
341
|
-
!this.depthMaterial || !this.shadowCamera ||
|
|
342
|
-
!this.blurPlane || !this.shadowGroup || !this.plane ||
|
|
343
|
-
!this.horizontalBlurMaterial || !this.verticalBlurMaterial) {
|
|
344
|
-
if (debug)
|
|
345
|
-
console.error("ContactShadows: not initialized yet");
|
|
346
|
-
return;
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
const scene = this.context.scene;
|
|
350
|
-
const renderer = this.context.renderer;
|
|
351
|
-
const initialRenderTarget = renderer.getRenderTarget();
|
|
352
|
-
|
|
353
|
-
// Idea: shear the shadowCamera matrix to add some light direction to the ground shadows
|
|
354
|
-
/*
|
|
355
|
-
const mat = this.shadowCamera.projectionMatrix.clone();
|
|
356
|
-
this.shadowCamera.projectionMatrix.multiply(new Matrix4().makeShear(0, 0, 0, 0, 0, 0));
|
|
357
|
-
*/
|
|
358
|
-
|
|
359
|
-
this.shadowGroup.visible = true;
|
|
360
|
-
if (this.occluderMesh) this.occluderMesh.visible = false;
|
|
361
|
-
const planeWasVisible = this.plane.visible;
|
|
362
|
-
this.plane.visible = false;
|
|
363
|
-
|
|
364
|
-
if (this.gameObject instanceof Mesh) {
|
|
365
|
-
// this.gameObject.visible = false;
|
|
366
|
-
setCustomVisibility(this.gameObject, false);
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
// remove the background
|
|
370
|
-
const initialBackground = scene.background;
|
|
371
|
-
scene.background = null;
|
|
372
|
-
|
|
373
|
-
// force the depthMaterial to everything
|
|
374
|
-
scene.overrideMaterial = this.depthMaterial;
|
|
375
|
-
if (this.backfaceShadows)
|
|
376
|
-
this.depthMaterial.side = DoubleSide;
|
|
377
|
-
else {
|
|
378
|
-
this.depthMaterial.side = FrontSide;
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
// set renderer clear alpha
|
|
382
|
-
const initialClearAlpha = renderer.getClearAlpha();
|
|
383
|
-
renderer.setClearAlpha(0);
|
|
384
|
-
|
|
385
|
-
const prevXRState = renderer.xr.enabled;
|
|
386
|
-
renderer.xr.enabled = false;
|
|
387
|
-
|
|
388
|
-
const prevSceneMatrixAutoUpdate = this.context.scene.matrixWorldAutoUpdate;
|
|
389
|
-
this.context.scene.matrixWorldAutoUpdate = false;
|
|
390
|
-
|
|
391
|
-
const list = renderer.renderLists.get(scene, 0);
|
|
392
|
-
const prevTransparent = list.transparent;
|
|
393
|
-
empty_buffer.length = 0;
|
|
394
|
-
list.transparent = empty_buffer;
|
|
395
|
-
|
|
396
|
-
// we need to hide objects that don't render color or that are wireframes
|
|
397
|
-
objects_hidden.length = 0;
|
|
398
|
-
for (const entry of list.opaque) {
|
|
399
|
-
if (!entry.object.visible) continue;
|
|
400
|
-
const mat = entry.material as MeshStandardMaterial;
|
|
401
|
-
// Ignore objects that don't render color
|
|
402
|
-
let hide = entry.material.colorWrite == false || mat.wireframe === true || getVisibleInCustomShadowRendering(entry.object) === false;
|
|
403
|
-
// Ignore line materials (e.g. GridHelper)
|
|
404
|
-
if (!hide && (entry.material["isLineMaterial"]))
|
|
405
|
-
hide = true;
|
|
406
|
-
// Ignore point materials
|
|
407
|
-
if (!hide && (entry.material["isPointsMaterial"]))
|
|
408
|
-
hide = true;
|
|
409
|
-
if (hide) {
|
|
410
|
-
objects_hidden.push(entry.object);
|
|
411
|
-
entry.object["needle:visible"] = entry.object.visible;
|
|
412
|
-
entry.object.visible = false;
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
// render to the render target to get the depths
|
|
417
|
-
renderer.setRenderTarget(this.renderTarget);
|
|
418
|
-
renderer.clear();
|
|
419
|
-
renderer.render(scene, this.shadowCamera);
|
|
420
|
-
list.transparent = prevTransparent;
|
|
421
|
-
|
|
422
|
-
// reset previously hidden objects
|
|
423
|
-
for (const object of objects_hidden) {
|
|
424
|
-
if (object["needle:visible"] != undefined) {
|
|
425
|
-
object.visible = object["needle:visible"];
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
// for the shearing idea
|
|
430
|
-
// this.shadowCamera.projectionMatrix.copy(mat);
|
|
431
|
-
|
|
432
|
-
// and reset the override material
|
|
433
|
-
scene.overrideMaterial = null;
|
|
434
|
-
|
|
435
|
-
const blurAmount = Math.max(this.blur, 0.05);
|
|
436
|
-
|
|
437
|
-
// two-pass blur to reduce the artifacts
|
|
438
|
-
this.blurShadow(blurAmount * 2);
|
|
439
|
-
this.blurShadow(blurAmount * 0.5);
|
|
440
|
-
|
|
441
|
-
this.shadowGroup.visible = false;
|
|
442
|
-
if (this.occluderMesh) this.occluderMesh.visible = this.occludeBelowGround;
|
|
443
|
-
this.plane.visible = planeWasVisible;
|
|
444
|
-
|
|
445
|
-
// reset and render the normal scene
|
|
446
|
-
renderer.setRenderTarget(initialRenderTarget);
|
|
447
|
-
renderer.setClearAlpha(initialClearAlpha);
|
|
448
|
-
scene.background = initialBackground;
|
|
449
|
-
renderer.xr.enabled = prevXRState;
|
|
450
|
-
this.context.scene.matrixWorldAutoUpdate = prevSceneMatrixAutoUpdate;
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
// renderTarget --> blurPlane (horizontalBlur) --> renderTargetBlur --> blurPlane (verticalBlur) --> renderTarget
|
|
454
|
-
private blurShadow(amount: number) {
|
|
455
|
-
if (!this.blurPlane || !this.shadowCamera ||
|
|
456
|
-
!this.renderTarget || !this.renderTargetBlur ||
|
|
457
|
-
!this.horizontalBlurMaterial || !this.verticalBlurMaterial)
|
|
458
|
-
return;
|
|
459
|
-
|
|
460
|
-
this.blurPlane.visible = true;
|
|
461
|
-
|
|
462
|
-
// Correct for contact shadow plane aspect ratio.
|
|
463
|
-
// since we have a separable blur, we can just adjust the blur amount for X and Z individually
|
|
464
|
-
const ws = this.shadowsRoot.worldScale;
|
|
465
|
-
const avg = (ws.x + ws.z) / 2;
|
|
466
|
-
const aspectX = ws.z / avg;
|
|
467
|
-
const aspectZ = ws.x / avg;
|
|
468
|
-
|
|
469
|
-
// blur horizontally and draw in the renderTargetBlur
|
|
470
|
-
this.blurPlane.material = this.horizontalBlurMaterial;
|
|
471
|
-
(this.blurPlane.material as ShaderMaterial).uniforms.tDiffuse.value = this.renderTarget.texture;
|
|
472
|
-
this.horizontalBlurMaterial.uniforms.h.value = amount * 1 / this.textureSize * aspectX;
|
|
473
|
-
|
|
474
|
-
const renderer = this.context.renderer;
|
|
475
|
-
|
|
476
|
-
const currentRt = renderer.getRenderTarget();
|
|
477
|
-
renderer.setRenderTarget(this.renderTargetBlur);
|
|
478
|
-
renderer.render(this.blurPlane, this.shadowCamera);
|
|
479
|
-
|
|
480
|
-
// blur vertically and draw in the main renderTarget
|
|
481
|
-
this.blurPlane.material = this.verticalBlurMaterial;
|
|
482
|
-
(this.blurPlane.material as ShaderMaterial).uniforms.tDiffuse.value = this.renderTargetBlur.texture;
|
|
483
|
-
this.verticalBlurMaterial.uniforms.v.value = amount * 1 / this.textureSize * aspectZ;
|
|
484
|
-
|
|
485
|
-
renderer.setRenderTarget(this.renderTarget);
|
|
486
|
-
renderer.render(this.blurPlane, this.shadowCamera);
|
|
487
|
-
|
|
488
|
-
this.blurPlane.visible = false;
|
|
489
|
-
|
|
490
|
-
renderer.setRenderTarget(currentRt);
|
|
491
|
-
}
|
|
492
|
-
|
|
493
|
-
private applyMinSize() {
|
|
494
|
-
if (this.minSize) {
|
|
495
|
-
this.shadowsRoot.scale.set(
|
|
496
|
-
Math.max(this.minSize.x || 0, this.shadowsRoot.scale.x),
|
|
497
|
-
Math.max(this.minSize.y || 0, this.shadowsRoot.scale.y),
|
|
498
|
-
Math.max(this.minSize.z || 0, this.shadowsRoot.scale.z)
|
|
499
|
-
);
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
const empty_buffer = [];
|
|
505
|
-
const objects_hidden = new Array<Object3D>();
|
|
506
|
-
|
|
1
|
+
import { BackSide, CustomBlending, DoubleSide, FrontSide, Group, Material, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshStandardMaterial, MinEquation, Object3D, OrthographicCamera, PlaneGeometry, RenderItem, ShaderMaterial, Vector3, WebGLRenderTarget } from "three";
|
|
2
|
+
import { HorizontalBlurShader } from 'three/examples/jsm/shaders/HorizontalBlurShader.js';
|
|
3
|
+
import { VerticalBlurShader } from 'three/examples/jsm/shaders/VerticalBlurShader.js';
|
|
4
|
+
|
|
5
|
+
import { setAutoFitEnabled } from "../engine/engine_camera.js";
|
|
6
|
+
import { addComponent } from "../engine/engine_components.js";
|
|
7
|
+
import { Context } from "../engine/engine_context.js";
|
|
8
|
+
import { Gizmos } from "../engine/engine_gizmos.js";
|
|
9
|
+
import { onStart } from "../engine/engine_lifecycle_api.js";
|
|
10
|
+
import { serializable } from "../engine/engine_serialization_decorator.js";
|
|
11
|
+
import { getBoundingBox, getVisibleInCustomShadowRendering } from "../engine/engine_three_utils.js";
|
|
12
|
+
import { HideFlags, IGameObject, Vec3 } from "../engine/engine_types.js";
|
|
13
|
+
import { getParam } from "../engine/engine_utils.js"
|
|
14
|
+
import { setCustomVisibility } from "../engine/js-extensions/Layers.js";
|
|
15
|
+
import { Behaviour, GameObject } from "./Component.js";
|
|
16
|
+
|
|
17
|
+
const debug = getParam("debugcontactshadows");
|
|
18
|
+
|
|
19
|
+
onStart(ctx => {
|
|
20
|
+
const val = ctx.domElement.getAttribute("contactshadows") || ctx.domElement.getAttribute("contact-shadows");
|
|
21
|
+
if (val != undefined && val != "0" && val != "false") {
|
|
22
|
+
console.debug("Auto-creating ContactShadows because of `contactshadows` attribute");
|
|
23
|
+
const shadows = ContactShadows.auto(ctx);
|
|
24
|
+
const intensity = parseFloat(val);
|
|
25
|
+
if (!isNaN(intensity)) {
|
|
26
|
+
shadows.opacity = intensity;
|
|
27
|
+
shadows.darkness = intensity;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
// Adapted from https://github.com/mrdoob/three.js/blob/master/examples/webgl_shadow_contact.html.
|
|
33
|
+
|
|
34
|
+
// Improved with
|
|
35
|
+
// - ground occluder
|
|
36
|
+
// - backface shadowing (slightly less than front faces)
|
|
37
|
+
// - node can simply be scaled in Y to adjust max. ground height
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* ContactShadows is a component that allows to display contact shadows in the scene.
|
|
41
|
+
* @category Rendering
|
|
42
|
+
* @group Components
|
|
43
|
+
*/
|
|
44
|
+
export class ContactShadows extends Behaviour {
|
|
45
|
+
|
|
46
|
+
private static readonly _instances: Map<Context, ContactShadows> = new Map();
|
|
47
|
+
/**
|
|
48
|
+
* Create contact shadows for the scene. Automatically fits the shadows to the scene.
|
|
49
|
+
* The instance of contact shadows will be created only once.
|
|
50
|
+
* @param context The context to create the contact shadows in.
|
|
51
|
+
* @returns The instance of the contact shadows.
|
|
52
|
+
*/
|
|
53
|
+
static auto(context?: Context): ContactShadows {
|
|
54
|
+
if (!context) context = Context.Current;
|
|
55
|
+
if (!context) {
|
|
56
|
+
throw new Error("No context provided and no current context set.");
|
|
57
|
+
}
|
|
58
|
+
let instance = this._instances.get(context);
|
|
59
|
+
if (!instance || instance.destroyed) {
|
|
60
|
+
const obj = new Object3D();
|
|
61
|
+
instance = addComponent(obj, ContactShadows, {
|
|
62
|
+
autoFit: false,
|
|
63
|
+
occludeBelowGround: false
|
|
64
|
+
});
|
|
65
|
+
this._instances.set(context, instance);
|
|
66
|
+
}
|
|
67
|
+
context.scene.add(instance.gameObject);
|
|
68
|
+
instance.fitShadows();
|
|
69
|
+
return instance;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* When enabled the contact shadows component will be created to fit the whole scene.
|
|
74
|
+
*/
|
|
75
|
+
@serializable()
|
|
76
|
+
autoFit: boolean = false;
|
|
77
|
+
/**
|
|
78
|
+
* Darkness of the shadows.
|
|
79
|
+
* @default 0.5
|
|
80
|
+
*/
|
|
81
|
+
@serializable()
|
|
82
|
+
darkness: number = 0.5;
|
|
83
|
+
/**
|
|
84
|
+
* Opacity of the shadows.
|
|
85
|
+
* @default 0.5
|
|
86
|
+
*/
|
|
87
|
+
@serializable()
|
|
88
|
+
opacity: number = 0.5;
|
|
89
|
+
/**
|
|
90
|
+
* Blur of the shadows.
|
|
91
|
+
* @default 4.0
|
|
92
|
+
*/
|
|
93
|
+
@serializable()
|
|
94
|
+
blur: number = 4.0;
|
|
95
|
+
/**
|
|
96
|
+
* When enabled objects will not be visible below the shadow plane
|
|
97
|
+
* @default false
|
|
98
|
+
*/
|
|
99
|
+
@serializable()
|
|
100
|
+
occludeBelowGround: boolean = false;
|
|
101
|
+
/**
|
|
102
|
+
* When enabled the backfaces of objects will cast shadows as well.
|
|
103
|
+
* @default true
|
|
104
|
+
*/
|
|
105
|
+
@serializable()
|
|
106
|
+
backfaceShadows: boolean = true;
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* The minimum size of the shadows box
|
|
110
|
+
*/
|
|
111
|
+
minSize?: Partial<Vec3>;
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* When enabled the shadows will not be updated automatically. Use `needsUpdate()` to update the shadows manually.
|
|
115
|
+
* This is useful when you want to update the shadows only when the scene changes.
|
|
116
|
+
*/
|
|
117
|
+
manualUpdate: boolean = false;
|
|
118
|
+
/**
|
|
119
|
+
* Call this method to update the shadows manually. The update will be done in the next frame.
|
|
120
|
+
*/
|
|
121
|
+
set needsUpdate(val: boolean) {
|
|
122
|
+
this._needsUpdate = val;
|
|
123
|
+
}
|
|
124
|
+
get needsUpdate(): boolean {
|
|
125
|
+
return this._needsUpdate;
|
|
126
|
+
}
|
|
127
|
+
private _needsUpdate: boolean = false;
|
|
128
|
+
|
|
129
|
+
/** All shadow objects are parented to this object.
|
|
130
|
+
* The gameObject itself should not be transformed because we want the ContactShadows object e.g. also have a GroundProjectedEnv component
|
|
131
|
+
* in which case ContactShadows scale would affect the projection
|
|
132
|
+
**/
|
|
133
|
+
private readonly shadowsRoot: IGameObject = new Object3D() as IGameObject;
|
|
134
|
+
private shadowCamera?: OrthographicCamera;
|
|
135
|
+
private readonly shadowGroup: Group = new Group();
|
|
136
|
+
|
|
137
|
+
private renderTarget?: WebGLRenderTarget;
|
|
138
|
+
private renderTargetBlur?: WebGLRenderTarget;
|
|
139
|
+
|
|
140
|
+
private plane?: Mesh;
|
|
141
|
+
private occluderMesh?: Mesh;
|
|
142
|
+
private blurPlane?: Mesh;
|
|
143
|
+
|
|
144
|
+
private depthMaterial?: MeshDepthMaterial;
|
|
145
|
+
private horizontalBlurMaterial?: ShaderMaterial;
|
|
146
|
+
private verticalBlurMaterial?: ShaderMaterial;
|
|
147
|
+
|
|
148
|
+
private textureSize = 512;
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Call to fit the shadows to the scene.
|
|
152
|
+
*/
|
|
153
|
+
fitShadows() {
|
|
154
|
+
if (debug) console.warn("Fitting shadows to scene");
|
|
155
|
+
setAutoFitEnabled(this.shadowsRoot, false);
|
|
156
|
+
const box = getBoundingBox(this.context.scene.children, [this.shadowsRoot]);
|
|
157
|
+
// expand box in all directions (except below ground)
|
|
158
|
+
// 0.75 expands by 75% in each direction
|
|
159
|
+
// The "32" is pretty much heuristically determined – adjusting the value until we don't get a visible border anymore.
|
|
160
|
+
const expandFactor = Math.max(1, this.blur / 32);
|
|
161
|
+
const sizeX = box.max.x - box.min.x;
|
|
162
|
+
const sizeZ = box.max.z - box.min.z;
|
|
163
|
+
box.expandByVector(new Vector3(expandFactor * sizeX, 0, expandFactor * sizeZ));
|
|
164
|
+
if (debug) Gizmos.DrawWireBox3(box, 0xffff00, 60);
|
|
165
|
+
if (this.gameObject.parent) {
|
|
166
|
+
// transform box from world space into parent space
|
|
167
|
+
box.applyMatrix4((this.gameObject.parent as GameObject).matrixWorld.clone().invert());
|
|
168
|
+
}
|
|
169
|
+
const min = box.min;
|
|
170
|
+
const offset = Math.max(0.00001, (box.max.y - min.y) * .002);
|
|
171
|
+
box.max.y += offset;
|
|
172
|
+
// This is for cases where GroundProjection with autoFit is used
|
|
173
|
+
// Since contact shadows can currently not ignore certain objects from rendering
|
|
174
|
+
// we need to make sure the GroundProjection is not exactly on the same level as ContactShadows
|
|
175
|
+
// We can't move GroundProjection down because of immersive-ar mesh/plane tracking where occlusion would otherwise hide GroundProjection
|
|
176
|
+
this.shadowsRoot.position.set((min.x + box.max.x) / 2, min.y - offset, (min.z + box.max.z) / 2);
|
|
177
|
+
this.shadowsRoot.scale.set(box.max.x - min.x, box.max.y - min.y, box.max.z - min.z);
|
|
178
|
+
this.applyMinSize();
|
|
179
|
+
this.shadowsRoot.matrixWorldNeedsUpdate = true;
|
|
180
|
+
if (debug) console.log("Fitted shadows to scene", this.shadowsRoot.scale.clone());
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
/** @internal */
|
|
185
|
+
awake() {
|
|
186
|
+
ContactShadows._instances.set(this.context, this);
|
|
187
|
+
this.shadowsRoot.hideFlags = HideFlags.DontExport;
|
|
188
|
+
|
|
189
|
+
// ignore self for autofitting
|
|
190
|
+
setAutoFitEnabled(this.shadowsRoot, false);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
/** @internal */
|
|
195
|
+
start(): void {
|
|
196
|
+
if (debug) console.log("Create ContactShadows on " + this.gameObject.name, this)
|
|
197
|
+
|
|
198
|
+
this.gameObject.add(this.shadowsRoot);
|
|
199
|
+
this.shadowsRoot.add(this.shadowGroup);
|
|
200
|
+
|
|
201
|
+
// the render target that will show the shadows in the plane texture
|
|
202
|
+
this.renderTarget = new WebGLRenderTarget(this.textureSize, this.textureSize);
|
|
203
|
+
this.renderTarget.texture.generateMipmaps = false;
|
|
204
|
+
|
|
205
|
+
// the render target that we will use to blur the first render target
|
|
206
|
+
this.renderTargetBlur = new WebGLRenderTarget(this.textureSize, this.textureSize);
|
|
207
|
+
this.renderTargetBlur.texture.generateMipmaps = false;
|
|
208
|
+
|
|
209
|
+
// make a plane and make it face up
|
|
210
|
+
const planeGeometry = new PlaneGeometry(1, 1).rotateX(Math.PI / 2);
|
|
211
|
+
|
|
212
|
+
if (this.gameObject instanceof Mesh) {
|
|
213
|
+
console.warn("ContactShadows can not be added to a Mesh. Please add it to a Group or an empty Object");
|
|
214
|
+
// this.enabled = false;
|
|
215
|
+
setCustomVisibility(this.gameObject, false);
|
|
216
|
+
// this.plane = this.gameObject as any as Mesh;
|
|
217
|
+
// // Make sure we clone the material once because it might be used on another object as well
|
|
218
|
+
// const mat = this.plane.material = (this.plane.material as MeshBasicMaterial).clone();
|
|
219
|
+
// mat.map = this.renderTarget.texture;
|
|
220
|
+
// mat.opacity = this.opacity;
|
|
221
|
+
// mat.transparent = true;
|
|
222
|
+
// mat.depthWrite = false;
|
|
223
|
+
// mat.needsUpdate = true;
|
|
224
|
+
// When someone makes a custom mesh, they can set these values right on the material.
|
|
225
|
+
// mat.opacity = this.state.plane.opacity;
|
|
226
|
+
// mat.transparent = true;
|
|
227
|
+
// mat.depthWrite = false;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
const planeMaterial = new MeshBasicMaterial({
|
|
231
|
+
map: this.renderTarget.texture,
|
|
232
|
+
opacity: this.opacity,
|
|
233
|
+
color: 0x000000,
|
|
234
|
+
transparent: true,
|
|
235
|
+
depthWrite: false,
|
|
236
|
+
side: FrontSide,
|
|
237
|
+
});
|
|
238
|
+
this.plane = new Mesh(planeGeometry, planeMaterial);
|
|
239
|
+
this.plane.scale.y = - 1;
|
|
240
|
+
this.plane.layers.set(2);
|
|
241
|
+
this.shadowsRoot.add(this.plane);
|
|
242
|
+
|
|
243
|
+
if (this.plane) this.plane.renderOrder = 1;
|
|
244
|
+
|
|
245
|
+
this.occluderMesh = new Mesh(this.plane.geometry, new MeshBasicMaterial({
|
|
246
|
+
depthWrite: true,
|
|
247
|
+
stencilWrite: true,
|
|
248
|
+
colorWrite: false,
|
|
249
|
+
side: BackSide,
|
|
250
|
+
}))
|
|
251
|
+
// .rotateX(Math.PI)
|
|
252
|
+
.translateY(-0.0001);
|
|
253
|
+
this.occluderMesh.renderOrder = -100;
|
|
254
|
+
this.occluderMesh.layers.set(2);
|
|
255
|
+
this.shadowsRoot.add(this.occluderMesh);
|
|
256
|
+
|
|
257
|
+
// the plane onto which to blur the texture
|
|
258
|
+
this.blurPlane = new Mesh(planeGeometry);
|
|
259
|
+
this.blurPlane.visible = false;
|
|
260
|
+
this.shadowGroup.add(this.blurPlane);
|
|
261
|
+
|
|
262
|
+
// max. ground distance is controlled via object scale
|
|
263
|
+
const near = 0;
|
|
264
|
+
const far = 1.0;
|
|
265
|
+
this.shadowCamera = new OrthographicCamera(-1 / 2, 1 / 2, 1 / 2, -1 / 2, near, far);
|
|
266
|
+
this.shadowCamera.layers.enableAll();
|
|
267
|
+
this.shadowCamera.rotation.x = Math.PI / 2; // get the camera to look up
|
|
268
|
+
this.shadowGroup.add(this.shadowCamera);
|
|
269
|
+
|
|
270
|
+
// like MeshDepthMaterial, but goes from black to transparent
|
|
271
|
+
this.depthMaterial = new MeshDepthMaterial();
|
|
272
|
+
this.depthMaterial.userData.darkness = { value: this.darkness };
|
|
273
|
+
// this will properly overlap calculated shadows
|
|
274
|
+
this.depthMaterial.blending = CustomBlending;
|
|
275
|
+
this.depthMaterial.blendEquation = MaxEquation;
|
|
276
|
+
|
|
277
|
+
// this.depthMaterial.blendEquation = MinEquation;
|
|
278
|
+
this.depthMaterial.onBeforeCompile = shader => {
|
|
279
|
+
if (!this.depthMaterial) return;
|
|
280
|
+
shader.uniforms.darkness = this.depthMaterial.userData.darkness;
|
|
281
|
+
shader.fragmentShader = /* glsl */`
|
|
282
|
+
uniform float darkness;
|
|
283
|
+
${shader.fragmentShader.replace(
|
|
284
|
+
'gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );',
|
|
285
|
+
// we're scaling the shadow value down a bit when it's a backface (looks better)
|
|
286
|
+
'gl_FragColor = vec4( vec3( 1.0 ), ( 1.0 - fragCoordZ ) * darkness * opacity * (gl_FrontFacing ? 1.0 : 0.66) );'
|
|
287
|
+
)}
|
|
288
|
+
`;
|
|
289
|
+
};
|
|
290
|
+
|
|
291
|
+
this.depthMaterial.depthTest = false;
|
|
292
|
+
this.depthMaterial.depthWrite = false;
|
|
293
|
+
|
|
294
|
+
this.horizontalBlurMaterial = new ShaderMaterial(HorizontalBlurShader);
|
|
295
|
+
this.horizontalBlurMaterial.depthTest = false;
|
|
296
|
+
|
|
297
|
+
this.verticalBlurMaterial = new ShaderMaterial(VerticalBlurShader);
|
|
298
|
+
this.verticalBlurMaterial.depthTest = false;
|
|
299
|
+
|
|
300
|
+
this.shadowGroup.visible = false;
|
|
301
|
+
|
|
302
|
+
if (this.autoFit) this.fitShadows();
|
|
303
|
+
else this.applyMinSize();
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
onEnable(): void {
|
|
307
|
+
this._needsUpdate = true;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/** @internal */
|
|
311
|
+
onDestroy(): void {
|
|
312
|
+
const instance = ContactShadows._instances.get(this.context);
|
|
313
|
+
if (instance === this) {
|
|
314
|
+
ContactShadows._instances.delete(this.context);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// dispose the render targets
|
|
318
|
+
this.renderTarget?.dispose();
|
|
319
|
+
this.renderTargetBlur?.dispose();
|
|
320
|
+
|
|
321
|
+
// dispose the materials
|
|
322
|
+
this.depthMaterial?.dispose();
|
|
323
|
+
this.horizontalBlurMaterial?.dispose();
|
|
324
|
+
this.verticalBlurMaterial?.dispose();
|
|
325
|
+
|
|
326
|
+
// dispose the geometries
|
|
327
|
+
this.blurPlane?.geometry.dispose();
|
|
328
|
+
this.plane?.geometry.dispose();
|
|
329
|
+
this.occluderMesh?.geometry.dispose();
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/** @internal */
|
|
333
|
+
onBeforeRender(_frame: XRFrame | null): void {
|
|
334
|
+
|
|
335
|
+
if (this.manualUpdate) {
|
|
336
|
+
if (!this._needsUpdate) return;
|
|
337
|
+
}
|
|
338
|
+
this._needsUpdate = false;
|
|
339
|
+
|
|
340
|
+
if (!this.renderTarget || !this.renderTargetBlur ||
|
|
341
|
+
!this.depthMaterial || !this.shadowCamera ||
|
|
342
|
+
!this.blurPlane || !this.shadowGroup || !this.plane ||
|
|
343
|
+
!this.horizontalBlurMaterial || !this.verticalBlurMaterial) {
|
|
344
|
+
if (debug)
|
|
345
|
+
console.error("ContactShadows: not initialized yet");
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
const scene = this.context.scene;
|
|
350
|
+
const renderer = this.context.renderer;
|
|
351
|
+
const initialRenderTarget = renderer.getRenderTarget();
|
|
352
|
+
|
|
353
|
+
// Idea: shear the shadowCamera matrix to add some light direction to the ground shadows
|
|
354
|
+
/*
|
|
355
|
+
const mat = this.shadowCamera.projectionMatrix.clone();
|
|
356
|
+
this.shadowCamera.projectionMatrix.multiply(new Matrix4().makeShear(0, 0, 0, 0, 0, 0));
|
|
357
|
+
*/
|
|
358
|
+
|
|
359
|
+
this.shadowGroup.visible = true;
|
|
360
|
+
if (this.occluderMesh) this.occluderMesh.visible = false;
|
|
361
|
+
const planeWasVisible = this.plane.visible;
|
|
362
|
+
this.plane.visible = false;
|
|
363
|
+
|
|
364
|
+
if (this.gameObject instanceof Mesh) {
|
|
365
|
+
// this.gameObject.visible = false;
|
|
366
|
+
setCustomVisibility(this.gameObject, false);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
// remove the background
|
|
370
|
+
const initialBackground = scene.background;
|
|
371
|
+
scene.background = null;
|
|
372
|
+
|
|
373
|
+
// force the depthMaterial to everything
|
|
374
|
+
scene.overrideMaterial = this.depthMaterial;
|
|
375
|
+
if (this.backfaceShadows)
|
|
376
|
+
this.depthMaterial.side = DoubleSide;
|
|
377
|
+
else {
|
|
378
|
+
this.depthMaterial.side = FrontSide;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
// set renderer clear alpha
|
|
382
|
+
const initialClearAlpha = renderer.getClearAlpha();
|
|
383
|
+
renderer.setClearAlpha(0);
|
|
384
|
+
|
|
385
|
+
const prevXRState = renderer.xr.enabled;
|
|
386
|
+
renderer.xr.enabled = false;
|
|
387
|
+
|
|
388
|
+
const prevSceneMatrixAutoUpdate = this.context.scene.matrixWorldAutoUpdate;
|
|
389
|
+
this.context.scene.matrixWorldAutoUpdate = false;
|
|
390
|
+
|
|
391
|
+
const list = renderer.renderLists.get(scene, 0);
|
|
392
|
+
const prevTransparent = list.transparent;
|
|
393
|
+
empty_buffer.length = 0;
|
|
394
|
+
list.transparent = empty_buffer;
|
|
395
|
+
|
|
396
|
+
// we need to hide objects that don't render color or that are wireframes
|
|
397
|
+
objects_hidden.length = 0;
|
|
398
|
+
for (const entry of list.opaque) {
|
|
399
|
+
if (!entry.object.visible) continue;
|
|
400
|
+
const mat = entry.material as MeshStandardMaterial;
|
|
401
|
+
// Ignore objects that don't render color
|
|
402
|
+
let hide = entry.material.colorWrite == false || mat.wireframe === true || getVisibleInCustomShadowRendering(entry.object) === false;
|
|
403
|
+
// Ignore line materials (e.g. GridHelper)
|
|
404
|
+
if (!hide && (entry.material["isLineMaterial"]))
|
|
405
|
+
hide = true;
|
|
406
|
+
// Ignore point materials
|
|
407
|
+
if (!hide && (entry.material["isPointsMaterial"]))
|
|
408
|
+
hide = true;
|
|
409
|
+
if (hide) {
|
|
410
|
+
objects_hidden.push(entry.object);
|
|
411
|
+
entry.object["needle:visible"] = entry.object.visible;
|
|
412
|
+
entry.object.visible = false;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
// render to the render target to get the depths
|
|
417
|
+
renderer.setRenderTarget(this.renderTarget);
|
|
418
|
+
renderer.clear();
|
|
419
|
+
renderer.render(scene, this.shadowCamera);
|
|
420
|
+
list.transparent = prevTransparent;
|
|
421
|
+
|
|
422
|
+
// reset previously hidden objects
|
|
423
|
+
for (const object of objects_hidden) {
|
|
424
|
+
if (object["needle:visible"] != undefined) {
|
|
425
|
+
object.visible = object["needle:visible"];
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
// for the shearing idea
|
|
430
|
+
// this.shadowCamera.projectionMatrix.copy(mat);
|
|
431
|
+
|
|
432
|
+
// and reset the override material
|
|
433
|
+
scene.overrideMaterial = null;
|
|
434
|
+
|
|
435
|
+
const blurAmount = Math.max(this.blur, 0.05);
|
|
436
|
+
|
|
437
|
+
// two-pass blur to reduce the artifacts
|
|
438
|
+
this.blurShadow(blurAmount * 2);
|
|
439
|
+
this.blurShadow(blurAmount * 0.5);
|
|
440
|
+
|
|
441
|
+
this.shadowGroup.visible = false;
|
|
442
|
+
if (this.occluderMesh) this.occluderMesh.visible = this.occludeBelowGround;
|
|
443
|
+
this.plane.visible = planeWasVisible;
|
|
444
|
+
|
|
445
|
+
// reset and render the normal scene
|
|
446
|
+
renderer.setRenderTarget(initialRenderTarget);
|
|
447
|
+
renderer.setClearAlpha(initialClearAlpha);
|
|
448
|
+
scene.background = initialBackground;
|
|
449
|
+
renderer.xr.enabled = prevXRState;
|
|
450
|
+
this.context.scene.matrixWorldAutoUpdate = prevSceneMatrixAutoUpdate;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
// renderTarget --> blurPlane (horizontalBlur) --> renderTargetBlur --> blurPlane (verticalBlur) --> renderTarget
|
|
454
|
+
private blurShadow(amount: number) {
|
|
455
|
+
if (!this.blurPlane || !this.shadowCamera ||
|
|
456
|
+
!this.renderTarget || !this.renderTargetBlur ||
|
|
457
|
+
!this.horizontalBlurMaterial || !this.verticalBlurMaterial)
|
|
458
|
+
return;
|
|
459
|
+
|
|
460
|
+
this.blurPlane.visible = true;
|
|
461
|
+
|
|
462
|
+
// Correct for contact shadow plane aspect ratio.
|
|
463
|
+
// since we have a separable blur, we can just adjust the blur amount for X and Z individually
|
|
464
|
+
const ws = this.shadowsRoot.worldScale;
|
|
465
|
+
const avg = (ws.x + ws.z) / 2;
|
|
466
|
+
const aspectX = ws.z / avg;
|
|
467
|
+
const aspectZ = ws.x / avg;
|
|
468
|
+
|
|
469
|
+
// blur horizontally and draw in the renderTargetBlur
|
|
470
|
+
this.blurPlane.material = this.horizontalBlurMaterial;
|
|
471
|
+
(this.blurPlane.material as ShaderMaterial).uniforms.tDiffuse.value = this.renderTarget.texture;
|
|
472
|
+
this.horizontalBlurMaterial.uniforms.h.value = amount * 1 / this.textureSize * aspectX;
|
|
473
|
+
|
|
474
|
+
const renderer = this.context.renderer;
|
|
475
|
+
|
|
476
|
+
const currentRt = renderer.getRenderTarget();
|
|
477
|
+
renderer.setRenderTarget(this.renderTargetBlur);
|
|
478
|
+
renderer.render(this.blurPlane, this.shadowCamera);
|
|
479
|
+
|
|
480
|
+
// blur vertically and draw in the main renderTarget
|
|
481
|
+
this.blurPlane.material = this.verticalBlurMaterial;
|
|
482
|
+
(this.blurPlane.material as ShaderMaterial).uniforms.tDiffuse.value = this.renderTargetBlur.texture;
|
|
483
|
+
this.verticalBlurMaterial.uniforms.v.value = amount * 1 / this.textureSize * aspectZ;
|
|
484
|
+
|
|
485
|
+
renderer.setRenderTarget(this.renderTarget);
|
|
486
|
+
renderer.render(this.blurPlane, this.shadowCamera);
|
|
487
|
+
|
|
488
|
+
this.blurPlane.visible = false;
|
|
489
|
+
|
|
490
|
+
renderer.setRenderTarget(currentRt);
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
private applyMinSize() {
|
|
494
|
+
if (this.minSize) {
|
|
495
|
+
this.shadowsRoot.scale.set(
|
|
496
|
+
Math.max(this.minSize.x || 0, this.shadowsRoot.scale.x),
|
|
497
|
+
Math.max(this.minSize.y || 0, this.shadowsRoot.scale.y),
|
|
498
|
+
Math.max(this.minSize.z || 0, this.shadowsRoot.scale.z)
|
|
499
|
+
);
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
const empty_buffer = [];
|
|
505
|
+
const objects_hidden = new Array<Object3D>();
|
|
506
|
+
|