@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,572 +1,572 @@
|
|
|
1
|
-
import type { Effect, EffectComposer, Pass, ToneMappingEffect as _TonemappingEffect } from "postprocessing";
|
|
2
|
-
import { Camera as Camera3, DepthTexture, HalfFloatType, LinearFilter, NoToneMapping, Scene, Texture, ToneMapping, WebGLRenderTarget } from "three";
|
|
3
|
-
|
|
4
|
-
import { showBalloonWarning } from "../../engine/debug/index.js";
|
|
5
|
-
// import { internal_SetSharpeningEffectModule } from "./Effects/Sharpening.js";
|
|
6
|
-
import { MODULES } from "../../engine/engine_modules.js";
|
|
7
|
-
import { Context } from "../../engine/engine_setup.js";
|
|
8
|
-
import { Graphics } from "../../engine/engine_three_utils.js";
|
|
9
|
-
import { Constructor } from "../../engine/engine_types.js";
|
|
10
|
-
import { getParam } from "../../engine/engine_utils.js";
|
|
11
|
-
import { Camera } from "../Camera.js";
|
|
12
|
-
import { threeToneMappingToEffectMode } from "./Effects/Tonemapping.utils.js";
|
|
13
|
-
import { PostProcessingEffect, PostProcessingEffectContext } from "./PostProcessingEffect.js";
|
|
14
|
-
import { orderEffects, PostprocessingEffectData, PostProcessingEffectOrder } from "./utils.js";
|
|
15
|
-
|
|
16
|
-
declare const NEEDLE_USE_POSTPROCESSING: boolean;
|
|
17
|
-
globalThis["NEEDLE_USE_POSTPROCESSING"] = globalThis["NEEDLE_USE_POSTPROCESSING"] !== undefined ? globalThis["NEEDLE_USE_POSTPROCESSING"] : true;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const debug = getParam("debugpost");
|
|
21
|
-
|
|
22
|
-
const activeKey = Symbol("needle:postprocessing-handler");
|
|
23
|
-
const autoclearSetting = Symbol("needle:previous-autoclear-state");
|
|
24
|
-
const previousToneMapping = Symbol("needle:previous-tone-mapping");
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* PostProcessingHandler is responsible for applying post processing effects to the scene. It is internally used by the {@link Volume} component
|
|
28
|
-
*/
|
|
29
|
-
export class PostProcessingHandler {
|
|
30
|
-
|
|
31
|
-
private _composer: EffectComposer | null = null;
|
|
32
|
-
private _lastVolumeComponents?: PostProcessingEffect[];
|
|
33
|
-
private readonly _effects: Array<PostprocessingEffectData> = [];
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Returns true if a specific effect is currently active in the post processing stack.
|
|
37
|
-
*/
|
|
38
|
-
getEffectIsActive(effect: Effect): boolean {
|
|
39
|
-
if (!effect) return false;
|
|
40
|
-
return this._isActive && this._effects.some(e => e.effect === effect);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
get isActive() {
|
|
44
|
-
return this._isActive;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
get composer() {
|
|
48
|
-
return this._composer;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
private _isActive: boolean = false;
|
|
52
|
-
private readonly context: Context;
|
|
53
|
-
|
|
54
|
-
constructor(context: Context) {
|
|
55
|
-
this.context = context;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
apply(components: PostProcessingEffect[]): Promise<void> {
|
|
59
|
-
if ("env" in import.meta && import.meta.env.VITE_NEEDLE_USE_POSTPROCESSING === "false") {
|
|
60
|
-
if (debug) console.warn("Postprocessing is disabled via vite env setting");
|
|
61
|
-
else console.debug("Postprocessing is disabled via vite env setting");
|
|
62
|
-
return Promise.resolve();
|
|
63
|
-
}
|
|
64
|
-
if (!NEEDLE_USE_POSTPROCESSING) {
|
|
65
|
-
if (debug) console.warn("Postprocessing is disabled via global vite define setting");
|
|
66
|
-
else console.debug("Postprocessing is disabled via vite define");
|
|
67
|
-
return Promise.resolve();
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
this._isActive = true;
|
|
71
|
-
return this.onApply(this.context, components);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
unapply(dispose: boolean = true) {
|
|
75
|
-
if (debug) console.log("Unapplying postprocessing effects");
|
|
76
|
-
this._isActive = false;
|
|
77
|
-
if (this._lastVolumeComponents) {
|
|
78
|
-
for (const component of this._lastVolumeComponents) {
|
|
79
|
-
component.unapply();
|
|
80
|
-
}
|
|
81
|
-
this._lastVolumeComponents.length = 0;
|
|
82
|
-
}
|
|
83
|
-
const context = this.context;
|
|
84
|
-
const active = context[activeKey] as PostProcessingHandler | null;
|
|
85
|
-
if (active === this) {
|
|
86
|
-
delete context[activeKey];
|
|
87
|
-
|
|
88
|
-
// Restore the auto clear setting
|
|
89
|
-
if (typeof context.renderer[autoclearSetting] === "boolean") {
|
|
90
|
-
context.renderer.autoClear = context.renderer[autoclearSetting];
|
|
91
|
-
}
|
|
92
|
-
if (typeof context.renderer[previousToneMapping] === "number") {
|
|
93
|
-
context.renderer.toneMapping = context.renderer[previousToneMapping] as ToneMapping;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
this._composer?.removeAllPasses();
|
|
98
|
-
if (dispose) this._composer?.dispose();
|
|
99
|
-
|
|
100
|
-
if (context.composer === this._composer) {
|
|
101
|
-
context.composer = null;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
dispose() {
|
|
106
|
-
this.unapply(true);
|
|
107
|
-
|
|
108
|
-
for (const effect of this._effects) {
|
|
109
|
-
effect.effect.dispose();
|
|
110
|
-
}
|
|
111
|
-
this._effects.length = 0;
|
|
112
|
-
this._composer = null;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
private async onApply(context: Context, components: PostProcessingEffect[]) {
|
|
116
|
-
|
|
117
|
-
if (!components) return;
|
|
118
|
-
|
|
119
|
-
// IMPORTANT
|
|
120
|
-
// Load postprocessing modules ONLY here to get lazy loading of the postprocessing package
|
|
121
|
-
await Promise.all([
|
|
122
|
-
MODULES.POSTPROCESSING.load(),
|
|
123
|
-
MODULES.POSTPROCESSING_AO.load(),
|
|
124
|
-
// import("./Effects/Sharpening.effect")
|
|
125
|
-
]);
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
// try {
|
|
129
|
-
// internal_SetSharpeningEffectModule(modules[2]);
|
|
130
|
-
// }
|
|
131
|
-
// catch (err) {
|
|
132
|
-
// console.error(err);
|
|
133
|
-
// }
|
|
134
|
-
|
|
135
|
-
context[activeKey] = this;
|
|
136
|
-
|
|
137
|
-
if (debug) console.log("Apply Postprocessing Effects", components);
|
|
138
|
-
|
|
139
|
-
this._lastVolumeComponents = [...components];
|
|
140
|
-
|
|
141
|
-
// store all effects in an array to apply them all in one pass
|
|
142
|
-
// const effects: Array<Effect | Pass> = [];
|
|
143
|
-
this._effects.length = 0;
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
// TODO: if an effect is added or removed during the loop this might not be correct anymore
|
|
147
|
-
const ctx: PostProcessingEffectContext = {
|
|
148
|
-
handler: this,
|
|
149
|
-
components: this._lastVolumeComponents,
|
|
150
|
-
}
|
|
151
|
-
for (let i = 0; i < this._lastVolumeComponents.length; i++) {
|
|
152
|
-
const component = this._lastVolumeComponents[i];
|
|
153
|
-
//@ts-ignore
|
|
154
|
-
component.context = context;
|
|
155
|
-
if (component.apply) {
|
|
156
|
-
if (component.active) {
|
|
157
|
-
if (!context.mainCameraComponent) {
|
|
158
|
-
console.error("No camera in scene found or available yet - can not create postprocessing effects");
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
// apply or collect effects
|
|
162
|
-
const res = component.apply(ctx);
|
|
163
|
-
if (!res) continue;
|
|
164
|
-
|
|
165
|
-
const name = component.typeName || component.constructor.name;
|
|
166
|
-
|
|
167
|
-
if (Array.isArray(res)) {
|
|
168
|
-
for (const effect of res) {
|
|
169
|
-
if (!validateEffect(name, effect)) continue;
|
|
170
|
-
this._effects.push({
|
|
171
|
-
effect,
|
|
172
|
-
typeName: component.typeName,
|
|
173
|
-
priority: component.order
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
else {
|
|
178
|
-
if (!validateEffect(name, res)) continue;
|
|
179
|
-
this._effects.push({
|
|
180
|
-
effect: res,
|
|
181
|
-
typeName: component.typeName,
|
|
182
|
-
priority: component.order
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
function validateEffect(source: string, effect: Effect | Pass): boolean {
|
|
187
|
-
if (!effect) {
|
|
188
|
-
return false;
|
|
189
|
-
}
|
|
190
|
-
if (!(effect instanceof MODULES.POSTPROCESSING.MODULE.Effect || effect instanceof MODULES.POSTPROCESSING.MODULE.Pass)) {
|
|
191
|
-
console.warn(`PostprocessingEffect ${source} created neither Effect nor Pass - this might be caused by a bundler error or false import. Below you find some possible solutions:\n- If you create custom effect try creating it like this: 'new NEEDLE_ENGINE_MODULES.POSTPROCESSING.MODULE.Effect(...)' instead of 'new Effect(...)'`);
|
|
192
|
-
}
|
|
193
|
-
return true;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
else {
|
|
198
|
-
if (component.active)
|
|
199
|
-
showBalloonWarning("Volume component is not a VolumeComponent: " + component["__type"]);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
this.applyEffects(context);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
private _anyPassHasDepth = false;
|
|
207
|
-
private _anyPassHasNormal = false;
|
|
208
|
-
private _hasSmaaEffect = false;
|
|
209
|
-
|
|
210
|
-
get anyPassHasDepth() { return this._anyPassHasDepth; }
|
|
211
|
-
get anyPassHasNormal() { return this._anyPassHasNormal; }
|
|
212
|
-
get hasSmaaEffect() { return this._hasSmaaEffect; }
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
private _customInputBuffer: WebGLRenderTarget<Texture> | null = null;
|
|
217
|
-
private _customInputBufferId = 0;
|
|
218
|
-
private _multisampling: number = 0;
|
|
219
|
-
set multisampling(value: number) {
|
|
220
|
-
this._multisampling = value;
|
|
221
|
-
}
|
|
222
|
-
get multisampling() {
|
|
223
|
-
return this._multisampling;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
/** Build composer passes */
|
|
228
|
-
private applyEffects(context: Context) {
|
|
229
|
-
// Reset state
|
|
230
|
-
this._anyPassHasDepth = false;
|
|
231
|
-
this._anyPassHasNormal = false;
|
|
232
|
-
this._hasSmaaEffect = false;
|
|
233
|
-
|
|
234
|
-
if (this._effects.length <= 0) {
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
const camera = context.mainCameraComponent as Camera;
|
|
239
|
-
const renderer = context.renderer;
|
|
240
|
-
const scene = context.scene;
|
|
241
|
-
const cam = camera.threeCamera;
|
|
242
|
-
|
|
243
|
-
// Store the auto clear setting because the postprocessing composer just disables it
|
|
244
|
-
// and when we disable postprocessing we want to restore the original setting
|
|
245
|
-
// https://github.com/pmndrs/postprocessing/blob/271944b74b543a5b743a62803a167b60cc6bb4ee/src/core/EffectComposer.js#L230C12-L230C12
|
|
246
|
-
// First we need to get the previously set autoClear setting, if it exists
|
|
247
|
-
if (typeof renderer[autoclearSetting] === "boolean") {
|
|
248
|
-
renderer.autoClear = renderer[autoclearSetting];
|
|
249
|
-
}
|
|
250
|
-
renderer[autoclearSetting] = renderer.autoClear;
|
|
251
|
-
|
|
252
|
-
if (typeof renderer[previousToneMapping] === "number") {
|
|
253
|
-
renderer.toneMapping = renderer[previousToneMapping] as ToneMapping;
|
|
254
|
-
}
|
|
255
|
-
renderer[previousToneMapping] = renderer.toneMapping;
|
|
256
|
-
|
|
257
|
-
// Ensure that we have a tonemapping effect if the renderer is set to use a tone mapping
|
|
258
|
-
if (renderer.toneMapping != NoToneMapping) {
|
|
259
|
-
if (!this._effects.find(e => e instanceof MODULES.POSTPROCESSING.MODULE.ToneMappingEffect)) {
|
|
260
|
-
const tonemapping = new MODULES.POSTPROCESSING.MODULE.ToneMappingEffect();
|
|
261
|
-
tonemapping.name = `ToneMapping (${renderer.toneMapping})`;
|
|
262
|
-
tonemapping.mode = threeToneMappingToEffectMode(renderer.toneMapping);
|
|
263
|
-
this._effects.push({
|
|
264
|
-
typeName: "ToneMapping",
|
|
265
|
-
effect: tonemapping,
|
|
266
|
-
priority: PostProcessingEffectOrder.ToneMapping
|
|
267
|
-
});
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
// create composer and set active on context
|
|
272
|
-
if (!this._composer) {
|
|
273
|
-
// const hdrRenderTarget = new WebGLRenderTarget(window.innerWidth, window.innerHeight, { type: HalfFloatType });
|
|
274
|
-
this._composer = new MODULES.POSTPROCESSING.MODULE.EffectComposer(renderer, {
|
|
275
|
-
frameBufferType: HalfFloatType,
|
|
276
|
-
stencilBuffer: true,
|
|
277
|
-
});
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
if (context.composer && context.composer !== this._composer) {
|
|
281
|
-
console.warn("There's already an active EffectComposer in your scene: replacing it with a new one. This might cause unexpected behaviour. Make sure to only use one PostprocessingManager/Volume in your scene.");
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
context.composer = this._composer;
|
|
285
|
-
const composer = context.composer;
|
|
286
|
-
composer.setMainCamera(cam);
|
|
287
|
-
composer.setRenderer(renderer);
|
|
288
|
-
composer.setMainScene(scene);
|
|
289
|
-
composer.autoRenderToScreen = true; // Must be enabled because it might be disabled during addPass by the composer itself (depending on the effect's settings or order)
|
|
290
|
-
composer.multisampling = 0; // Disable multisampling by default
|
|
291
|
-
|
|
292
|
-
for (const prev of composer.passes)
|
|
293
|
-
prev.dispose();
|
|
294
|
-
composer.removeAllPasses();
|
|
295
|
-
|
|
296
|
-
// Render to screen pass
|
|
297
|
-
const screenpass = new MODULES.POSTPROCESSING.MODULE.RenderPass(scene, cam);
|
|
298
|
-
screenpass.name = "RenderPass";
|
|
299
|
-
screenpass.mainScene = scene;
|
|
300
|
-
composer.addPass(screenpass);
|
|
301
|
-
|
|
302
|
-
const screenPassRender = screenpass.render;
|
|
303
|
-
this._customInputBuffer?.dispose();
|
|
304
|
-
this._customInputBuffer = null;
|
|
305
|
-
screenpass.render = (renderer, inputBuffer, outputBuffer, deltaTime, stencilTest) => {
|
|
306
|
-
if (!inputBuffer) return;
|
|
307
|
-
|
|
308
|
-
// screenPassRender.call(screenpass, renderer, inputBuffer, outputBuffer, deltaTime, stencilTest);
|
|
309
|
-
// return;
|
|
310
|
-
|
|
311
|
-
// Make sure multisampling is disabled on the composer buffers. Technically a user could still set multisampling directly on the composer so this is to override that and make sure these textures do NOT use multisampling
|
|
312
|
-
inputBuffer.samples = 0;
|
|
313
|
-
if (outputBuffer) {
|
|
314
|
-
outputBuffer.samples = 0;
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
// Make sure the input buffer is a WebGLRenderTarget with the correct settings
|
|
318
|
-
if (!this._customInputBuffer
|
|
319
|
-
|| this._customInputBuffer.width !== inputBuffer.width
|
|
320
|
-
|| this._customInputBuffer.height !== inputBuffer.height
|
|
321
|
-
|| this._customInputBuffer.samples !== this._multisampling
|
|
322
|
-
|| this._customInputBuffer.texture.format !== inputBuffer.texture.format
|
|
323
|
-
|| this._customInputBuffer.texture.type !== HalfFloatType
|
|
324
|
-
) {
|
|
325
|
-
this._customInputBuffer?.dispose();
|
|
326
|
-
|
|
327
|
-
this._customInputBuffer = new WebGLRenderTarget(inputBuffer.width, inputBuffer.height, {
|
|
328
|
-
format: inputBuffer.texture.format,
|
|
329
|
-
type: HalfFloatType,
|
|
330
|
-
depthBuffer: inputBuffer.depthBuffer,
|
|
331
|
-
depthTexture: inputBuffer.depthTexture
|
|
332
|
-
? new DepthTexture(inputBuffer.width, inputBuffer.height)
|
|
333
|
-
: undefined,
|
|
334
|
-
stencilBuffer: inputBuffer.stencilBuffer,
|
|
335
|
-
samples: Math.max(0, this._multisampling),
|
|
336
|
-
minFilter: inputBuffer.texture.minFilter ?? LinearFilter,
|
|
337
|
-
magFilter: inputBuffer.texture.magFilter ?? LinearFilter,
|
|
338
|
-
generateMipmaps: inputBuffer.texture.generateMipmaps,
|
|
339
|
-
});
|
|
340
|
-
this._customInputBufferId++;
|
|
341
|
-
this._customInputBuffer.texture.name = `CustomInputBuffer-${this._customInputBufferId}`;
|
|
342
|
-
if (this._customInputBuffer.depthTexture && inputBuffer.depthTexture) {
|
|
343
|
-
this._customInputBuffer.depthTexture.format = inputBuffer.depthTexture.format;
|
|
344
|
-
this._customInputBuffer.depthTexture.type = inputBuffer.depthTexture.type;
|
|
345
|
-
}
|
|
346
|
-
// https://github.com/pmndrs/postprocessing/blob/ad338df710ef41fee4e5d10ad2c2c299030d46ef/src/core/EffectComposer.js#L366
|
|
347
|
-
if (this._customInputBuffer.samples > 0)
|
|
348
|
-
(this._customInputBuffer as any).ignoreDepthForMultisampleCopy = false;
|
|
349
|
-
|
|
350
|
-
if (debug) console.warn(`[PostProcessing] Input buffer created with size ${this._customInputBuffer.width}x${this._customInputBuffer.height} and samples ${this._customInputBuffer.samples}`);
|
|
351
|
-
}
|
|
352
|
-
// Calling the original render function with the input buffer
|
|
353
|
-
screenPassRender.call(screenpass, renderer, this._customInputBuffer, outputBuffer, deltaTime, stencilTest);
|
|
354
|
-
// Blit the resulting buffer to the input buffer passed in by the composer so it's used for subsequent effects
|
|
355
|
-
Graphics.blit(this._customInputBuffer.texture, inputBuffer, {
|
|
356
|
-
renderer,
|
|
357
|
-
depthTexture: this._customInputBuffer.depthTexture,
|
|
358
|
-
depthWrite: true,
|
|
359
|
-
depthTest: true,
|
|
360
|
-
});
|
|
361
|
-
};
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
try {
|
|
365
|
-
orderEffects(this._effects);
|
|
366
|
-
|
|
367
|
-
let foundTonemappingEffect = false;
|
|
368
|
-
let activeTonemappingEffect: _TonemappingEffect | null = null;
|
|
369
|
-
for (let i = this._effects.length - 1; i >= 0; i--) {
|
|
370
|
-
const ef = this._effects[i].effect;
|
|
371
|
-
if (ef instanceof MODULES.POSTPROCESSING.MODULE.ToneMappingEffect) {
|
|
372
|
-
// If we already have a tonemapping effect, we can skip this one
|
|
373
|
-
if (foundTonemappingEffect) {
|
|
374
|
-
if (debug) console.warn(`[PostProcessing] Found multiple tonemapping effects in the scene: ${ef.name} and ${activeTonemappingEffect?.name}. Only the last one added will be used.`);
|
|
375
|
-
this._effects.splice(i, 1);
|
|
376
|
-
continue;
|
|
377
|
-
}
|
|
378
|
-
activeTonemappingEffect = ef;
|
|
379
|
-
foundTonemappingEffect = true;
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
const effectsToMerge: Array<Effect> = [];
|
|
384
|
-
let hasConvolutionEffectInArray = false;
|
|
385
|
-
|
|
386
|
-
for (let i = 0; i < this._effects.length; i++) {
|
|
387
|
-
const entry = this._effects[i];
|
|
388
|
-
const ef = entry.effect;
|
|
389
|
-
|
|
390
|
-
if (ef instanceof MODULES.POSTPROCESSING.MODULE.SMAAEffect) {
|
|
391
|
-
this._hasSmaaEffect = true;
|
|
392
|
-
}
|
|
393
|
-
else if (ef instanceof MODULES.POSTPROCESSING.MODULE.NormalPass) {
|
|
394
|
-
this._anyPassHasNormal = true;
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
// There can be only one tonemapping effect in the scene, so we skip all others
|
|
398
|
-
if (ef instanceof MODULES.POSTPROCESSING.MODULE.ToneMappingEffect && activeTonemappingEffect !== ef) {
|
|
399
|
-
// If we already have a tonemapping effect, we can skip this one
|
|
400
|
-
continue;
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
// We can also not merge multiple effects of the same type in one pass
|
|
404
|
-
// So we first need to create a new pass with whatever effects we have so far
|
|
405
|
-
// TODO: this seems to work fine for some effects (like ColorAdjustments) and only caused issues with multiple Tonemapping effects so far which is handled above
|
|
406
|
-
// const constructor = ef.constructor;
|
|
407
|
-
// if (effectsToMerge.find(e => e.constructor === constructor)) {
|
|
408
|
-
// this.createPassForMergeableEffects(effectsToMerge, composer, cam, scene);
|
|
409
|
-
// }
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
if (ef instanceof MODULES.POSTPROCESSING.MODULE.Effect) {
|
|
414
|
-
const attributes = ef.getAttributes();
|
|
415
|
-
const convolution = MODULES.POSTPROCESSING.MODULE.EffectAttribute.CONVOLUTION;
|
|
416
|
-
if (attributes & convolution) {
|
|
417
|
-
if (debug) console.log("[PostProcessing] Convolution effect: " + ef.name);
|
|
418
|
-
if (hasConvolutionEffectInArray) {
|
|
419
|
-
if (debug) console.log("[PostProcessing] → Merging effects [" + effectsToMerge.map(e => e.name).join(", ") + "]");
|
|
420
|
-
this.createPassForMergeableEffects(effectsToMerge, composer, cam, scene);
|
|
421
|
-
}
|
|
422
|
-
hasConvolutionEffectInArray = true;
|
|
423
|
-
}
|
|
424
|
-
// Otherwise we can merge it
|
|
425
|
-
effectsToMerge.push(ef as Effect);
|
|
426
|
-
}
|
|
427
|
-
else if (ef instanceof MODULES.POSTPROCESSING.MODULE.Pass) {
|
|
428
|
-
hasConvolutionEffectInArray = false;
|
|
429
|
-
this.createPassForMergeableEffects(effectsToMerge, composer, cam, scene);
|
|
430
|
-
ef.renderToScreen = false;
|
|
431
|
-
composer.addPass(ef as Pass);
|
|
432
|
-
}
|
|
433
|
-
else {
|
|
434
|
-
// seems some effects are not correctly typed, but three can deal with them,
|
|
435
|
-
// so we might need to just pass them through
|
|
436
|
-
hasConvolutionEffectInArray = false;
|
|
437
|
-
this.createPassForMergeableEffects(effectsToMerge, composer, cam, scene);
|
|
438
|
-
composer.addPass(ef);
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
this.createPassForMergeableEffects(effectsToMerge, composer, cam, scene);
|
|
444
|
-
}
|
|
445
|
-
catch (e) {
|
|
446
|
-
console.error("Error while applying postprocessing effects", e);
|
|
447
|
-
composer.passes.forEach(p => p.dispose());
|
|
448
|
-
composer.removeAllPasses();
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
// The last pass is the one that renders to the screen, so we need to set the gamma correction for it (and enable it for all others)
|
|
452
|
-
let foundEnabled = false;
|
|
453
|
-
for (let i = composer.passes.length - 1; i >= 0; i--) {
|
|
454
|
-
const pass = composer.passes[i];
|
|
455
|
-
let gammaCorrect = false;
|
|
456
|
-
let renderToScreen = false;
|
|
457
|
-
if (pass.enabled) {
|
|
458
|
-
if (!foundEnabled) {
|
|
459
|
-
gammaCorrect = true;
|
|
460
|
-
renderToScreen = true;
|
|
461
|
-
}
|
|
462
|
-
foundEnabled = true;
|
|
463
|
-
}
|
|
464
|
-
pass.renderToScreen = renderToScreen;
|
|
465
|
-
|
|
466
|
-
if ((pass as any)?.configuration !== undefined) {
|
|
467
|
-
(pass as any).configuration.gammaCorrection = gammaCorrect;
|
|
468
|
-
}
|
|
469
|
-
else if ("autosetGamma" in pass) {
|
|
470
|
-
// Some effects have a autosetGamma property that we can use to set the gamma correction
|
|
471
|
-
pass.autosetGamma = gammaCorrect;
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
this._anyPassHasDepth ||= pass.needsDepthTexture;
|
|
476
|
-
|
|
477
|
-
}
|
|
478
|
-
|
|
479
|
-
// DEBUG LAND BELOW
|
|
480
|
-
if (debug) console.log("[PostProcessing] Passes →", [...composer.passes], "\n---------------------------------\n• " + composer.passes.map(i => i.name).join("\n• ") + "\n");
|
|
481
|
-
if (debug) this._onCreateEffectsDebug(this._composer!, cam);
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
/** Should be called before `composer.addPass()` to create an effect pass with all previously collected effects that can be merged up to that point */
|
|
487
|
-
private createPassForMergeableEffects(effects: Array<Effect>, composer: EffectComposer, camera: Camera3, scene: Scene) {
|
|
488
|
-
if (effects.length > 0) {
|
|
489
|
-
const pass = new MODULES.POSTPROCESSING.MODULE.EffectPass(camera, ...effects);
|
|
490
|
-
pass.name = effects.map(e => e.name).join(", ");
|
|
491
|
-
pass.mainScene = scene;
|
|
492
|
-
pass.enabled = true;
|
|
493
|
-
pass.renderToScreen = false;
|
|
494
|
-
composer.addPass(pass);
|
|
495
|
-
effects.length = 0; // Clear effects after adding them to the pass
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
private _menuEntry: HTMLSelectElement | null = null;
|
|
502
|
-
private _passIndices: number[] | null = null;
|
|
503
|
-
|
|
504
|
-
private _onCreateEffectsDebug(composer: EffectComposer, cam: Camera3) {
|
|
505
|
-
if (debug === "passes") {
|
|
506
|
-
// DepthEffect for debugging purposes, disabled by default, can be selected in the debug pass select
|
|
507
|
-
const depthEffect = new MODULES.POSTPROCESSING.MODULE.DepthEffect({
|
|
508
|
-
blendFunction: MODULES.POSTPROCESSING.MODULE.BlendFunction.NORMAL,
|
|
509
|
-
inverted: true,
|
|
510
|
-
});
|
|
511
|
-
depthEffect.name = "Depth Effect";
|
|
512
|
-
const depthPass = new MODULES.POSTPROCESSING.MODULE.EffectPass(cam, depthEffect);
|
|
513
|
-
depthPass.name = "Depth Effect Pass";
|
|
514
|
-
depthPass.enabled = false;
|
|
515
|
-
composer.passes.push(depthPass);
|
|
516
|
-
|
|
517
|
-
if (this._passIndices !== null) {
|
|
518
|
-
const newPasses = [composer.passes[0]];
|
|
519
|
-
if (this._passIndices.length > 0) {
|
|
520
|
-
newPasses.push(...this._passIndices
|
|
521
|
-
.filter(x => x !== 0)
|
|
522
|
-
.map(index => composer.passes[index])
|
|
523
|
-
.filter(pass => pass)
|
|
524
|
-
);
|
|
525
|
-
}
|
|
526
|
-
if (newPasses.length > 0) {
|
|
527
|
-
console.log("[PostProcessing] Passes (selected) →", newPasses);
|
|
528
|
-
}
|
|
529
|
-
composer.passes.length = 0;
|
|
530
|
-
for (const pass of newPasses) {
|
|
531
|
-
pass.enabled = true;
|
|
532
|
-
pass.renderToScreen = false; // allows automatic setting for the last pass
|
|
533
|
-
composer.addPass(pass);
|
|
534
|
-
}
|
|
535
|
-
}
|
|
536
|
-
|
|
537
|
-
const menu = this.context.menu;
|
|
538
|
-
if (menu && this._passIndices === null) {
|
|
539
|
-
if (this._menuEntry)
|
|
540
|
-
this._menuEntry.remove();
|
|
541
|
-
|
|
542
|
-
const select = document.createElement("select");
|
|
543
|
-
select.multiple = true;
|
|
544
|
-
const defaultOpt = document.createElement("option");
|
|
545
|
-
defaultOpt.innerText = "Final Output";
|
|
546
|
-
defaultOpt.value = "-1";
|
|
547
|
-
select.appendChild(defaultOpt);
|
|
548
|
-
for (const eff of composer.passes) {
|
|
549
|
-
const opt = document.createElement("option");
|
|
550
|
-
opt.innerText = eff.name;
|
|
551
|
-
opt.value = `${composer.passes.indexOf(eff)}`;
|
|
552
|
-
opt.title = eff.name;
|
|
553
|
-
select.appendChild(opt);
|
|
554
|
-
}
|
|
555
|
-
menu.appendChild(select);
|
|
556
|
-
this._menuEntry = select;
|
|
557
|
-
select.addEventListener("change", () => {
|
|
558
|
-
const indices = Array.from(select.selectedOptions).map(option => parseInt(option.value));
|
|
559
|
-
if (indices.length === 1 && indices[0] === -1) {
|
|
560
|
-
this._passIndices = null;
|
|
561
|
-
}
|
|
562
|
-
else {
|
|
563
|
-
this._passIndices = indices;
|
|
564
|
-
}
|
|
565
|
-
this.applyEffects(this.context);
|
|
566
|
-
});
|
|
567
|
-
}
|
|
568
|
-
}
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
}
|
|
572
|
-
|
|
1
|
+
import type { Effect, EffectComposer, Pass, ToneMappingEffect as _TonemappingEffect } from "postprocessing";
|
|
2
|
+
import { Camera as Camera3, DepthTexture, HalfFloatType, LinearFilter, NoToneMapping, Scene, Texture, ToneMapping, WebGLRenderTarget } from "three";
|
|
3
|
+
|
|
4
|
+
import { showBalloonWarning } from "../../engine/debug/index.js";
|
|
5
|
+
// import { internal_SetSharpeningEffectModule } from "./Effects/Sharpening.js";
|
|
6
|
+
import { MODULES } from "../../engine/engine_modules.js";
|
|
7
|
+
import { Context } from "../../engine/engine_setup.js";
|
|
8
|
+
import { Graphics } from "../../engine/engine_three_utils.js";
|
|
9
|
+
import { Constructor } from "../../engine/engine_types.js";
|
|
10
|
+
import { getParam } from "../../engine/engine_utils.js";
|
|
11
|
+
import { Camera } from "../Camera.js";
|
|
12
|
+
import { threeToneMappingToEffectMode } from "./Effects/Tonemapping.utils.js";
|
|
13
|
+
import { PostProcessingEffect, PostProcessingEffectContext } from "./PostProcessingEffect.js";
|
|
14
|
+
import { orderEffects, PostprocessingEffectData, PostProcessingEffectOrder } from "./utils.js";
|
|
15
|
+
|
|
16
|
+
declare const NEEDLE_USE_POSTPROCESSING: boolean;
|
|
17
|
+
globalThis["NEEDLE_USE_POSTPROCESSING"] = globalThis["NEEDLE_USE_POSTPROCESSING"] !== undefined ? globalThis["NEEDLE_USE_POSTPROCESSING"] : true;
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
const debug = getParam("debugpost");
|
|
21
|
+
|
|
22
|
+
const activeKey = Symbol("needle:postprocessing-handler");
|
|
23
|
+
const autoclearSetting = Symbol("needle:previous-autoclear-state");
|
|
24
|
+
const previousToneMapping = Symbol("needle:previous-tone-mapping");
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* PostProcessingHandler is responsible for applying post processing effects to the scene. It is internally used by the {@link Volume} component
|
|
28
|
+
*/
|
|
29
|
+
export class PostProcessingHandler {
|
|
30
|
+
|
|
31
|
+
private _composer: EffectComposer | null = null;
|
|
32
|
+
private _lastVolumeComponents?: PostProcessingEffect[];
|
|
33
|
+
private readonly _effects: Array<PostprocessingEffectData> = [];
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Returns true if a specific effect is currently active in the post processing stack.
|
|
37
|
+
*/
|
|
38
|
+
getEffectIsActive(effect: Effect): boolean {
|
|
39
|
+
if (!effect) return false;
|
|
40
|
+
return this._isActive && this._effects.some(e => e.effect === effect);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
get isActive() {
|
|
44
|
+
return this._isActive;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
get composer() {
|
|
48
|
+
return this._composer;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
private _isActive: boolean = false;
|
|
52
|
+
private readonly context: Context;
|
|
53
|
+
|
|
54
|
+
constructor(context: Context) {
|
|
55
|
+
this.context = context;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
apply(components: PostProcessingEffect[]): Promise<void> {
|
|
59
|
+
if ("env" in import.meta && import.meta.env.VITE_NEEDLE_USE_POSTPROCESSING === "false") {
|
|
60
|
+
if (debug) console.warn("Postprocessing is disabled via vite env setting");
|
|
61
|
+
else console.debug("Postprocessing is disabled via vite env setting");
|
|
62
|
+
return Promise.resolve();
|
|
63
|
+
}
|
|
64
|
+
if (!NEEDLE_USE_POSTPROCESSING) {
|
|
65
|
+
if (debug) console.warn("Postprocessing is disabled via global vite define setting");
|
|
66
|
+
else console.debug("Postprocessing is disabled via vite define");
|
|
67
|
+
return Promise.resolve();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
this._isActive = true;
|
|
71
|
+
return this.onApply(this.context, components);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
unapply(dispose: boolean = true) {
|
|
75
|
+
if (debug) console.log("Unapplying postprocessing effects");
|
|
76
|
+
this._isActive = false;
|
|
77
|
+
if (this._lastVolumeComponents) {
|
|
78
|
+
for (const component of this._lastVolumeComponents) {
|
|
79
|
+
component.unapply();
|
|
80
|
+
}
|
|
81
|
+
this._lastVolumeComponents.length = 0;
|
|
82
|
+
}
|
|
83
|
+
const context = this.context;
|
|
84
|
+
const active = context[activeKey] as PostProcessingHandler | null;
|
|
85
|
+
if (active === this) {
|
|
86
|
+
delete context[activeKey];
|
|
87
|
+
|
|
88
|
+
// Restore the auto clear setting
|
|
89
|
+
if (typeof context.renderer[autoclearSetting] === "boolean") {
|
|
90
|
+
context.renderer.autoClear = context.renderer[autoclearSetting];
|
|
91
|
+
}
|
|
92
|
+
if (typeof context.renderer[previousToneMapping] === "number") {
|
|
93
|
+
context.renderer.toneMapping = context.renderer[previousToneMapping] as ToneMapping;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
this._composer?.removeAllPasses();
|
|
98
|
+
if (dispose) this._composer?.dispose();
|
|
99
|
+
|
|
100
|
+
if (context.composer === this._composer) {
|
|
101
|
+
context.composer = null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
dispose() {
|
|
106
|
+
this.unapply(true);
|
|
107
|
+
|
|
108
|
+
for (const effect of this._effects) {
|
|
109
|
+
effect.effect.dispose();
|
|
110
|
+
}
|
|
111
|
+
this._effects.length = 0;
|
|
112
|
+
this._composer = null;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
private async onApply(context: Context, components: PostProcessingEffect[]) {
|
|
116
|
+
|
|
117
|
+
if (!components) return;
|
|
118
|
+
|
|
119
|
+
// IMPORTANT
|
|
120
|
+
// Load postprocessing modules ONLY here to get lazy loading of the postprocessing package
|
|
121
|
+
await Promise.all([
|
|
122
|
+
MODULES.POSTPROCESSING.load(),
|
|
123
|
+
MODULES.POSTPROCESSING_AO.load(),
|
|
124
|
+
// import("./Effects/Sharpening.effect")
|
|
125
|
+
]);
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
// try {
|
|
129
|
+
// internal_SetSharpeningEffectModule(modules[2]);
|
|
130
|
+
// }
|
|
131
|
+
// catch (err) {
|
|
132
|
+
// console.error(err);
|
|
133
|
+
// }
|
|
134
|
+
|
|
135
|
+
context[activeKey] = this;
|
|
136
|
+
|
|
137
|
+
if (debug) console.log("Apply Postprocessing Effects", components);
|
|
138
|
+
|
|
139
|
+
this._lastVolumeComponents = [...components];
|
|
140
|
+
|
|
141
|
+
// store all effects in an array to apply them all in one pass
|
|
142
|
+
// const effects: Array<Effect | Pass> = [];
|
|
143
|
+
this._effects.length = 0;
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
// TODO: if an effect is added or removed during the loop this might not be correct anymore
|
|
147
|
+
const ctx: PostProcessingEffectContext = {
|
|
148
|
+
handler: this,
|
|
149
|
+
components: this._lastVolumeComponents,
|
|
150
|
+
}
|
|
151
|
+
for (let i = 0; i < this._lastVolumeComponents.length; i++) {
|
|
152
|
+
const component = this._lastVolumeComponents[i];
|
|
153
|
+
//@ts-ignore
|
|
154
|
+
component.context = context;
|
|
155
|
+
if (component.apply) {
|
|
156
|
+
if (component.active) {
|
|
157
|
+
if (!context.mainCameraComponent) {
|
|
158
|
+
console.error("No camera in scene found or available yet - can not create postprocessing effects");
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
// apply or collect effects
|
|
162
|
+
const res = component.apply(ctx);
|
|
163
|
+
if (!res) continue;
|
|
164
|
+
|
|
165
|
+
const name = component.typeName || component.constructor.name;
|
|
166
|
+
|
|
167
|
+
if (Array.isArray(res)) {
|
|
168
|
+
for (const effect of res) {
|
|
169
|
+
if (!validateEffect(name, effect)) continue;
|
|
170
|
+
this._effects.push({
|
|
171
|
+
effect,
|
|
172
|
+
typeName: component.typeName,
|
|
173
|
+
priority: component.order
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
if (!validateEffect(name, res)) continue;
|
|
179
|
+
this._effects.push({
|
|
180
|
+
effect: res,
|
|
181
|
+
typeName: component.typeName,
|
|
182
|
+
priority: component.order
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
function validateEffect(source: string, effect: Effect | Pass): boolean {
|
|
187
|
+
if (!effect) {
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
if (!(effect instanceof MODULES.POSTPROCESSING.MODULE.Effect || effect instanceof MODULES.POSTPROCESSING.MODULE.Pass)) {
|
|
191
|
+
console.warn(`PostprocessingEffect ${source} created neither Effect nor Pass - this might be caused by a bundler error or false import. Below you find some possible solutions:\n- If you create custom effect try creating it like this: 'new NEEDLE_ENGINE_MODULES.POSTPROCESSING.MODULE.Effect(...)' instead of 'new Effect(...)'`);
|
|
192
|
+
}
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
if (component.active)
|
|
199
|
+
showBalloonWarning("Volume component is not a VolumeComponent: " + component["__type"]);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
this.applyEffects(context);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
private _anyPassHasDepth = false;
|
|
207
|
+
private _anyPassHasNormal = false;
|
|
208
|
+
private _hasSmaaEffect = false;
|
|
209
|
+
|
|
210
|
+
get anyPassHasDepth() { return this._anyPassHasDepth; }
|
|
211
|
+
get anyPassHasNormal() { return this._anyPassHasNormal; }
|
|
212
|
+
get hasSmaaEffect() { return this._hasSmaaEffect; }
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
private _customInputBuffer: WebGLRenderTarget<Texture> | null = null;
|
|
217
|
+
private _customInputBufferId = 0;
|
|
218
|
+
private _multisampling: number = 0;
|
|
219
|
+
set multisampling(value: number) {
|
|
220
|
+
this._multisampling = value;
|
|
221
|
+
}
|
|
222
|
+
get multisampling() {
|
|
223
|
+
return this._multisampling;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
/** Build composer passes */
|
|
228
|
+
private applyEffects(context: Context) {
|
|
229
|
+
// Reset state
|
|
230
|
+
this._anyPassHasDepth = false;
|
|
231
|
+
this._anyPassHasNormal = false;
|
|
232
|
+
this._hasSmaaEffect = false;
|
|
233
|
+
|
|
234
|
+
if (this._effects.length <= 0) {
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
const camera = context.mainCameraComponent as Camera;
|
|
239
|
+
const renderer = context.renderer;
|
|
240
|
+
const scene = context.scene;
|
|
241
|
+
const cam = camera.threeCamera;
|
|
242
|
+
|
|
243
|
+
// Store the auto clear setting because the postprocessing composer just disables it
|
|
244
|
+
// and when we disable postprocessing we want to restore the original setting
|
|
245
|
+
// https://github.com/pmndrs/postprocessing/blob/271944b74b543a5b743a62803a167b60cc6bb4ee/src/core/EffectComposer.js#L230C12-L230C12
|
|
246
|
+
// First we need to get the previously set autoClear setting, if it exists
|
|
247
|
+
if (typeof renderer[autoclearSetting] === "boolean") {
|
|
248
|
+
renderer.autoClear = renderer[autoclearSetting];
|
|
249
|
+
}
|
|
250
|
+
renderer[autoclearSetting] = renderer.autoClear;
|
|
251
|
+
|
|
252
|
+
if (typeof renderer[previousToneMapping] === "number") {
|
|
253
|
+
renderer.toneMapping = renderer[previousToneMapping] as ToneMapping;
|
|
254
|
+
}
|
|
255
|
+
renderer[previousToneMapping] = renderer.toneMapping;
|
|
256
|
+
|
|
257
|
+
// Ensure that we have a tonemapping effect if the renderer is set to use a tone mapping
|
|
258
|
+
if (renderer.toneMapping != NoToneMapping) {
|
|
259
|
+
if (!this._effects.find(e => e instanceof MODULES.POSTPROCESSING.MODULE.ToneMappingEffect)) {
|
|
260
|
+
const tonemapping = new MODULES.POSTPROCESSING.MODULE.ToneMappingEffect();
|
|
261
|
+
tonemapping.name = `ToneMapping (${renderer.toneMapping})`;
|
|
262
|
+
tonemapping.mode = threeToneMappingToEffectMode(renderer.toneMapping);
|
|
263
|
+
this._effects.push({
|
|
264
|
+
typeName: "ToneMapping",
|
|
265
|
+
effect: tonemapping,
|
|
266
|
+
priority: PostProcessingEffectOrder.ToneMapping
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// create composer and set active on context
|
|
272
|
+
if (!this._composer) {
|
|
273
|
+
// const hdrRenderTarget = new WebGLRenderTarget(window.innerWidth, window.innerHeight, { type: HalfFloatType });
|
|
274
|
+
this._composer = new MODULES.POSTPROCESSING.MODULE.EffectComposer(renderer, {
|
|
275
|
+
frameBufferType: HalfFloatType,
|
|
276
|
+
stencilBuffer: true,
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
if (context.composer && context.composer !== this._composer) {
|
|
281
|
+
console.warn("There's already an active EffectComposer in your scene: replacing it with a new one. This might cause unexpected behaviour. Make sure to only use one PostprocessingManager/Volume in your scene.");
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
context.composer = this._composer;
|
|
285
|
+
const composer = context.composer;
|
|
286
|
+
composer.setMainCamera(cam);
|
|
287
|
+
composer.setRenderer(renderer);
|
|
288
|
+
composer.setMainScene(scene);
|
|
289
|
+
composer.autoRenderToScreen = true; // Must be enabled because it might be disabled during addPass by the composer itself (depending on the effect's settings or order)
|
|
290
|
+
composer.multisampling = 0; // Disable multisampling by default
|
|
291
|
+
|
|
292
|
+
for (const prev of composer.passes)
|
|
293
|
+
prev.dispose();
|
|
294
|
+
composer.removeAllPasses();
|
|
295
|
+
|
|
296
|
+
// Render to screen pass
|
|
297
|
+
const screenpass = new MODULES.POSTPROCESSING.MODULE.RenderPass(scene, cam);
|
|
298
|
+
screenpass.name = "RenderPass";
|
|
299
|
+
screenpass.mainScene = scene;
|
|
300
|
+
composer.addPass(screenpass);
|
|
301
|
+
|
|
302
|
+
const screenPassRender = screenpass.render;
|
|
303
|
+
this._customInputBuffer?.dispose();
|
|
304
|
+
this._customInputBuffer = null;
|
|
305
|
+
screenpass.render = (renderer, inputBuffer, outputBuffer, deltaTime, stencilTest) => {
|
|
306
|
+
if (!inputBuffer) return;
|
|
307
|
+
|
|
308
|
+
// screenPassRender.call(screenpass, renderer, inputBuffer, outputBuffer, deltaTime, stencilTest);
|
|
309
|
+
// return;
|
|
310
|
+
|
|
311
|
+
// Make sure multisampling is disabled on the composer buffers. Technically a user could still set multisampling directly on the composer so this is to override that and make sure these textures do NOT use multisampling
|
|
312
|
+
inputBuffer.samples = 0;
|
|
313
|
+
if (outputBuffer) {
|
|
314
|
+
outputBuffer.samples = 0;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// Make sure the input buffer is a WebGLRenderTarget with the correct settings
|
|
318
|
+
if (!this._customInputBuffer
|
|
319
|
+
|| this._customInputBuffer.width !== inputBuffer.width
|
|
320
|
+
|| this._customInputBuffer.height !== inputBuffer.height
|
|
321
|
+
|| this._customInputBuffer.samples !== this._multisampling
|
|
322
|
+
|| this._customInputBuffer.texture.format !== inputBuffer.texture.format
|
|
323
|
+
|| this._customInputBuffer.texture.type !== HalfFloatType
|
|
324
|
+
) {
|
|
325
|
+
this._customInputBuffer?.dispose();
|
|
326
|
+
|
|
327
|
+
this._customInputBuffer = new WebGLRenderTarget(inputBuffer.width, inputBuffer.height, {
|
|
328
|
+
format: inputBuffer.texture.format,
|
|
329
|
+
type: HalfFloatType,
|
|
330
|
+
depthBuffer: inputBuffer.depthBuffer,
|
|
331
|
+
depthTexture: inputBuffer.depthTexture
|
|
332
|
+
? new DepthTexture(inputBuffer.width, inputBuffer.height)
|
|
333
|
+
: undefined,
|
|
334
|
+
stencilBuffer: inputBuffer.stencilBuffer,
|
|
335
|
+
samples: Math.max(0, this._multisampling),
|
|
336
|
+
minFilter: inputBuffer.texture.minFilter ?? LinearFilter,
|
|
337
|
+
magFilter: inputBuffer.texture.magFilter ?? LinearFilter,
|
|
338
|
+
generateMipmaps: inputBuffer.texture.generateMipmaps,
|
|
339
|
+
});
|
|
340
|
+
this._customInputBufferId++;
|
|
341
|
+
this._customInputBuffer.texture.name = `CustomInputBuffer-${this._customInputBufferId}`;
|
|
342
|
+
if (this._customInputBuffer.depthTexture && inputBuffer.depthTexture) {
|
|
343
|
+
this._customInputBuffer.depthTexture.format = inputBuffer.depthTexture.format;
|
|
344
|
+
this._customInputBuffer.depthTexture.type = inputBuffer.depthTexture.type;
|
|
345
|
+
}
|
|
346
|
+
// https://github.com/pmndrs/postprocessing/blob/ad338df710ef41fee4e5d10ad2c2c299030d46ef/src/core/EffectComposer.js#L366
|
|
347
|
+
if (this._customInputBuffer.samples > 0)
|
|
348
|
+
(this._customInputBuffer as any).ignoreDepthForMultisampleCopy = false;
|
|
349
|
+
|
|
350
|
+
if (debug) console.warn(`[PostProcessing] Input buffer created with size ${this._customInputBuffer.width}x${this._customInputBuffer.height} and samples ${this._customInputBuffer.samples}`);
|
|
351
|
+
}
|
|
352
|
+
// Calling the original render function with the input buffer
|
|
353
|
+
screenPassRender.call(screenpass, renderer, this._customInputBuffer, outputBuffer, deltaTime, stencilTest);
|
|
354
|
+
// Blit the resulting buffer to the input buffer passed in by the composer so it's used for subsequent effects
|
|
355
|
+
Graphics.blit(this._customInputBuffer.texture, inputBuffer, {
|
|
356
|
+
renderer,
|
|
357
|
+
depthTexture: this._customInputBuffer.depthTexture,
|
|
358
|
+
depthWrite: true,
|
|
359
|
+
depthTest: true,
|
|
360
|
+
});
|
|
361
|
+
};
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
try {
|
|
365
|
+
orderEffects(this._effects);
|
|
366
|
+
|
|
367
|
+
let foundTonemappingEffect = false;
|
|
368
|
+
let activeTonemappingEffect: _TonemappingEffect | null = null;
|
|
369
|
+
for (let i = this._effects.length - 1; i >= 0; i--) {
|
|
370
|
+
const ef = this._effects[i].effect;
|
|
371
|
+
if (ef instanceof MODULES.POSTPROCESSING.MODULE.ToneMappingEffect) {
|
|
372
|
+
// If we already have a tonemapping effect, we can skip this one
|
|
373
|
+
if (foundTonemappingEffect) {
|
|
374
|
+
if (debug) console.warn(`[PostProcessing] Found multiple tonemapping effects in the scene: ${ef.name} and ${activeTonemappingEffect?.name}. Only the last one added will be used.`);
|
|
375
|
+
this._effects.splice(i, 1);
|
|
376
|
+
continue;
|
|
377
|
+
}
|
|
378
|
+
activeTonemappingEffect = ef;
|
|
379
|
+
foundTonemappingEffect = true;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
const effectsToMerge: Array<Effect> = [];
|
|
384
|
+
let hasConvolutionEffectInArray = false;
|
|
385
|
+
|
|
386
|
+
for (let i = 0; i < this._effects.length; i++) {
|
|
387
|
+
const entry = this._effects[i];
|
|
388
|
+
const ef = entry.effect;
|
|
389
|
+
|
|
390
|
+
if (ef instanceof MODULES.POSTPROCESSING.MODULE.SMAAEffect) {
|
|
391
|
+
this._hasSmaaEffect = true;
|
|
392
|
+
}
|
|
393
|
+
else if (ef instanceof MODULES.POSTPROCESSING.MODULE.NormalPass) {
|
|
394
|
+
this._anyPassHasNormal = true;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
// There can be only one tonemapping effect in the scene, so we skip all others
|
|
398
|
+
if (ef instanceof MODULES.POSTPROCESSING.MODULE.ToneMappingEffect && activeTonemappingEffect !== ef) {
|
|
399
|
+
// If we already have a tonemapping effect, we can skip this one
|
|
400
|
+
continue;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
// We can also not merge multiple effects of the same type in one pass
|
|
404
|
+
// So we first need to create a new pass with whatever effects we have so far
|
|
405
|
+
// TODO: this seems to work fine for some effects (like ColorAdjustments) and only caused issues with multiple Tonemapping effects so far which is handled above
|
|
406
|
+
// const constructor = ef.constructor;
|
|
407
|
+
// if (effectsToMerge.find(e => e.constructor === constructor)) {
|
|
408
|
+
// this.createPassForMergeableEffects(effectsToMerge, composer, cam, scene);
|
|
409
|
+
// }
|
|
410
|
+
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
if (ef instanceof MODULES.POSTPROCESSING.MODULE.Effect) {
|
|
414
|
+
const attributes = ef.getAttributes();
|
|
415
|
+
const convolution = MODULES.POSTPROCESSING.MODULE.EffectAttribute.CONVOLUTION;
|
|
416
|
+
if (attributes & convolution) {
|
|
417
|
+
if (debug) console.log("[PostProcessing] Convolution effect: " + ef.name);
|
|
418
|
+
if (hasConvolutionEffectInArray) {
|
|
419
|
+
if (debug) console.log("[PostProcessing] → Merging effects [" + effectsToMerge.map(e => e.name).join(", ") + "]");
|
|
420
|
+
this.createPassForMergeableEffects(effectsToMerge, composer, cam, scene);
|
|
421
|
+
}
|
|
422
|
+
hasConvolutionEffectInArray = true;
|
|
423
|
+
}
|
|
424
|
+
// Otherwise we can merge it
|
|
425
|
+
effectsToMerge.push(ef as Effect);
|
|
426
|
+
}
|
|
427
|
+
else if (ef instanceof MODULES.POSTPROCESSING.MODULE.Pass) {
|
|
428
|
+
hasConvolutionEffectInArray = false;
|
|
429
|
+
this.createPassForMergeableEffects(effectsToMerge, composer, cam, scene);
|
|
430
|
+
ef.renderToScreen = false;
|
|
431
|
+
composer.addPass(ef as Pass);
|
|
432
|
+
}
|
|
433
|
+
else {
|
|
434
|
+
// seems some effects are not correctly typed, but three can deal with them,
|
|
435
|
+
// so we might need to just pass them through
|
|
436
|
+
hasConvolutionEffectInArray = false;
|
|
437
|
+
this.createPassForMergeableEffects(effectsToMerge, composer, cam, scene);
|
|
438
|
+
composer.addPass(ef);
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
this.createPassForMergeableEffects(effectsToMerge, composer, cam, scene);
|
|
444
|
+
}
|
|
445
|
+
catch (e) {
|
|
446
|
+
console.error("Error while applying postprocessing effects", e);
|
|
447
|
+
composer.passes.forEach(p => p.dispose());
|
|
448
|
+
composer.removeAllPasses();
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
// The last pass is the one that renders to the screen, so we need to set the gamma correction for it (and enable it for all others)
|
|
452
|
+
let foundEnabled = false;
|
|
453
|
+
for (let i = composer.passes.length - 1; i >= 0; i--) {
|
|
454
|
+
const pass = composer.passes[i];
|
|
455
|
+
let gammaCorrect = false;
|
|
456
|
+
let renderToScreen = false;
|
|
457
|
+
if (pass.enabled) {
|
|
458
|
+
if (!foundEnabled) {
|
|
459
|
+
gammaCorrect = true;
|
|
460
|
+
renderToScreen = true;
|
|
461
|
+
}
|
|
462
|
+
foundEnabled = true;
|
|
463
|
+
}
|
|
464
|
+
pass.renderToScreen = renderToScreen;
|
|
465
|
+
|
|
466
|
+
if ((pass as any)?.configuration !== undefined) {
|
|
467
|
+
(pass as any).configuration.gammaCorrection = gammaCorrect;
|
|
468
|
+
}
|
|
469
|
+
else if ("autosetGamma" in pass) {
|
|
470
|
+
// Some effects have a autosetGamma property that we can use to set the gamma correction
|
|
471
|
+
pass.autosetGamma = gammaCorrect;
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
this._anyPassHasDepth ||= pass.needsDepthTexture;
|
|
476
|
+
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
// DEBUG LAND BELOW
|
|
480
|
+
if (debug) console.log("[PostProcessing] Passes →", [...composer.passes], "\n---------------------------------\n• " + composer.passes.map(i => i.name).join("\n• ") + "\n");
|
|
481
|
+
if (debug) this._onCreateEffectsDebug(this._composer!, cam);
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
/** Should be called before `composer.addPass()` to create an effect pass with all previously collected effects that can be merged up to that point */
|
|
487
|
+
private createPassForMergeableEffects(effects: Array<Effect>, composer: EffectComposer, camera: Camera3, scene: Scene) {
|
|
488
|
+
if (effects.length > 0) {
|
|
489
|
+
const pass = new MODULES.POSTPROCESSING.MODULE.EffectPass(camera, ...effects);
|
|
490
|
+
pass.name = effects.map(e => e.name).join(", ");
|
|
491
|
+
pass.mainScene = scene;
|
|
492
|
+
pass.enabled = true;
|
|
493
|
+
pass.renderToScreen = false;
|
|
494
|
+
composer.addPass(pass);
|
|
495
|
+
effects.length = 0; // Clear effects after adding them to the pass
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
private _menuEntry: HTMLSelectElement | null = null;
|
|
502
|
+
private _passIndices: number[] | null = null;
|
|
503
|
+
|
|
504
|
+
private _onCreateEffectsDebug(composer: EffectComposer, cam: Camera3) {
|
|
505
|
+
if (debug === "passes") {
|
|
506
|
+
// DepthEffect for debugging purposes, disabled by default, can be selected in the debug pass select
|
|
507
|
+
const depthEffect = new MODULES.POSTPROCESSING.MODULE.DepthEffect({
|
|
508
|
+
blendFunction: MODULES.POSTPROCESSING.MODULE.BlendFunction.NORMAL,
|
|
509
|
+
inverted: true,
|
|
510
|
+
});
|
|
511
|
+
depthEffect.name = "Depth Effect";
|
|
512
|
+
const depthPass = new MODULES.POSTPROCESSING.MODULE.EffectPass(cam, depthEffect);
|
|
513
|
+
depthPass.name = "Depth Effect Pass";
|
|
514
|
+
depthPass.enabled = false;
|
|
515
|
+
composer.passes.push(depthPass);
|
|
516
|
+
|
|
517
|
+
if (this._passIndices !== null) {
|
|
518
|
+
const newPasses = [composer.passes[0]];
|
|
519
|
+
if (this._passIndices.length > 0) {
|
|
520
|
+
newPasses.push(...this._passIndices
|
|
521
|
+
.filter(x => x !== 0)
|
|
522
|
+
.map(index => composer.passes[index])
|
|
523
|
+
.filter(pass => pass)
|
|
524
|
+
);
|
|
525
|
+
}
|
|
526
|
+
if (newPasses.length > 0) {
|
|
527
|
+
console.log("[PostProcessing] Passes (selected) →", newPasses);
|
|
528
|
+
}
|
|
529
|
+
composer.passes.length = 0;
|
|
530
|
+
for (const pass of newPasses) {
|
|
531
|
+
pass.enabled = true;
|
|
532
|
+
pass.renderToScreen = false; // allows automatic setting for the last pass
|
|
533
|
+
composer.addPass(pass);
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
const menu = this.context.menu;
|
|
538
|
+
if (menu && this._passIndices === null) {
|
|
539
|
+
if (this._menuEntry)
|
|
540
|
+
this._menuEntry.remove();
|
|
541
|
+
|
|
542
|
+
const select = document.createElement("select");
|
|
543
|
+
select.multiple = true;
|
|
544
|
+
const defaultOpt = document.createElement("option");
|
|
545
|
+
defaultOpt.innerText = "Final Output";
|
|
546
|
+
defaultOpt.value = "-1";
|
|
547
|
+
select.appendChild(defaultOpt);
|
|
548
|
+
for (const eff of composer.passes) {
|
|
549
|
+
const opt = document.createElement("option");
|
|
550
|
+
opt.innerText = eff.name;
|
|
551
|
+
opt.value = `${composer.passes.indexOf(eff)}`;
|
|
552
|
+
opt.title = eff.name;
|
|
553
|
+
select.appendChild(opt);
|
|
554
|
+
}
|
|
555
|
+
menu.appendChild(select);
|
|
556
|
+
this._menuEntry = select;
|
|
557
|
+
select.addEventListener("change", () => {
|
|
558
|
+
const indices = Array.from(select.selectedOptions).map(option => parseInt(option.value));
|
|
559
|
+
if (indices.length === 1 && indices[0] === -1) {
|
|
560
|
+
this._passIndices = null;
|
|
561
|
+
}
|
|
562
|
+
else {
|
|
563
|
+
this._passIndices = indices;
|
|
564
|
+
}
|
|
565
|
+
this.applyEffects(this.context);
|
|
566
|
+
});
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
}
|
|
572
|
+
|