@needle-tools/engine 2.65.2-pre → 2.67.0-pre
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 +43 -0
- package/dist/needle-engine.js +34490 -26304
- package/dist/needle-engine.umd.cjs +748 -303
- package/lib/engine/api.d.ts +4 -0
- package/lib/engine/api.js +10 -0
- package/lib/engine/api.js.map +1 -1
- package/lib/engine/codegen/register_types.js +23 -7
- package/lib/engine/codegen/register_types.js.map +1 -1
- package/lib/engine/debug/debug_overlay.js +11 -2
- package/lib/engine/debug/debug_overlay.js.map +1 -1
- package/lib/engine/engine_addressables.js +4 -4
- package/lib/engine/engine_addressables.js.map +1 -1
- package/lib/engine/engine_assetdatabase.d.ts +17 -51
- package/lib/engine/engine_assetdatabase.js +252 -126
- package/lib/engine/engine_assetdatabase.js.map +1 -1
- package/lib/engine/engine_components.js +13 -1
- package/lib/engine/engine_components.js.map +1 -1
- package/lib/engine/engine_components_internal.d.ts +8 -0
- package/lib/engine/engine_components_internal.js +29 -0
- package/lib/engine/engine_components_internal.js.map +1 -0
- package/lib/engine/engine_constants.d.ts +1 -0
- package/lib/engine/engine_constants.js +1 -0
- package/lib/engine/engine_constants.js.map +1 -1
- package/lib/engine/engine_context_registry.d.ts +2 -0
- package/lib/engine/engine_context_registry.js +6 -0
- package/lib/engine/engine_context_registry.js.map +1 -1
- package/lib/engine/engine_editor-sync.d.ts +9 -0
- package/lib/engine/engine_editor-sync.js +8 -0
- package/lib/engine/engine_editor-sync.js.map +1 -0
- package/lib/engine/engine_element.d.ts +1 -0
- package/lib/engine/engine_element.js +4 -1
- package/lib/engine/engine_element.js.map +1 -1
- package/lib/engine/engine_element_loading.d.ts +3 -2
- package/lib/engine/engine_element_loading.js +19 -15
- package/lib/engine/engine_element_loading.js.map +1 -1
- package/lib/engine/engine_gameobject.js +21 -23
- package/lib/engine/engine_gameobject.js.map +1 -1
- package/lib/engine/engine_gizmos.js +3 -1
- package/lib/engine/engine_gizmos.js.map +1 -1
- package/lib/engine/engine_gltf_builtin_components.d.ts +2 -3
- package/lib/engine/engine_gltf_builtin_components.js +23 -6
- package/lib/engine/engine_gltf_builtin_components.js.map +1 -1
- package/lib/engine/engine_networking.d.ts +3 -1
- package/lib/engine/engine_networking.js +10 -8
- package/lib/engine/engine_networking.js.map +1 -1
- package/lib/engine/engine_networking_auto.d.ts +1 -0
- package/lib/engine/engine_networking_auto.js +42 -9
- package/lib/engine/engine_networking_auto.js.map +1 -1
- package/lib/engine/engine_patcher.d.ts +8 -0
- package/lib/engine/engine_patcher.js +98 -0
- package/lib/engine/engine_patcher.js.map +1 -0
- package/lib/engine/engine_physics.d.ts +34 -2
- package/lib/engine/engine_physics.js +110 -11
- package/lib/engine/engine_physics.js.map +1 -1
- package/lib/engine/engine_scenetools.js +0 -1
- package/lib/engine/engine_scenetools.js.map +1 -1
- package/lib/engine/engine_serialization_core.js +4 -0
- package/lib/engine/engine_serialization_core.js.map +1 -1
- package/lib/engine/engine_setup.d.ts +1 -1
- package/lib/engine/engine_setup.js +12 -5
- package/lib/engine/engine_setup.js.map +1 -1
- package/lib/engine/engine_texture.d.ts +6 -1
- package/lib/engine/engine_texture.js +39 -1
- package/lib/engine/engine_texture.js.map +1 -1
- package/lib/engine/engine_types.d.ts +4 -0
- package/lib/engine/engine_types.js.map +1 -1
- package/lib/engine/engine_utils.js +3 -2
- package/lib/engine/engine_utils.js.map +1 -1
- package/lib/engine/extensions/NEEDLE_progressive.d.ts +0 -1
- package/lib/engine/extensions/NEEDLE_progressive.js +24 -26
- package/lib/engine/extensions/NEEDLE_progressive.js.map +1 -1
- package/lib/engine/extensions/NEEDLE_render_objects.js +9 -0
- package/lib/engine/extensions/NEEDLE_render_objects.js.map +1 -1
- package/lib/engine/extensions/extensions.d.ts +4 -1
- package/lib/engine/extensions/extensions.js +16 -0
- package/lib/engine/extensions/extensions.js.map +1 -1
- package/lib/engine/extensions/usage_tracker.d.ts +12 -0
- package/lib/engine/extensions/usage_tracker.js +59 -0
- package/lib/engine/extensions/usage_tracker.js.map +1 -0
- package/lib/engine-components/Animator.js +0 -1
- package/lib/engine-components/Animator.js.map +1 -1
- package/lib/engine-components/AnimatorController.js +4 -0
- package/lib/engine-components/AnimatorController.js.map +1 -1
- package/lib/engine-components/AudioSource.js +2 -1
- package/lib/engine-components/AudioSource.js.map +1 -1
- package/lib/engine-components/Camera.d.ts +6 -0
- package/lib/engine-components/Camera.js +70 -31
- package/lib/engine-components/Camera.js.map +1 -1
- package/lib/engine-components/CharacterController.d.ts +1 -0
- package/lib/engine-components/CharacterController.js +14 -9
- package/lib/engine-components/CharacterController.js.map +1 -1
- package/lib/engine-components/Collider.js +14 -1
- package/lib/engine-components/Collider.js.map +1 -1
- package/lib/engine-components/Component.d.ts +52 -0
- package/lib/engine-components/Component.js +55 -14
- package/lib/engine-components/Component.js.map +1 -1
- package/lib/engine-components/Networking.js +19 -0
- package/lib/engine-components/Networking.js.map +1 -1
- package/lib/engine-components/OrbitControls.d.ts +2 -0
- package/lib/engine-components/OrbitControls.js +9 -0
- package/lib/engine-components/OrbitControls.js.map +1 -1
- package/lib/engine-components/ParticleSystem.d.ts +5 -1
- package/lib/engine-components/ParticleSystem.js +52 -7
- package/lib/engine-components/ParticleSystem.js.map +1 -1
- package/lib/engine-components/ParticleSystemModules.d.ts +2 -0
- package/lib/engine-components/ParticleSystemModules.js +26 -0
- package/lib/engine-components/ParticleSystemModules.js.map +1 -1
- package/lib/engine-components/ParticleSystemSubEmitter.js +5 -2
- package/lib/engine-components/ParticleSystemSubEmitter.js.map +1 -1
- package/lib/engine-components/ReflectionProbe.js +18 -6
- package/lib/engine-components/ReflectionProbe.js.map +1 -1
- package/lib/engine-components/Renderer.d.ts +1 -1
- package/lib/engine-components/Renderer.js +33 -11
- package/lib/engine-components/Renderer.js.map +1 -1
- package/lib/engine-components/ScreenCapture.js +3 -3
- package/lib/engine-components/ScreenCapture.js.map +1 -1
- package/lib/engine-components/Skybox.js +2 -0
- package/lib/engine-components/Skybox.js.map +1 -1
- package/lib/engine-components/SmoothFollow.js +1 -2
- package/lib/engine-components/SmoothFollow.js.map +1 -1
- package/lib/engine-components/SpectatorCamera.js +3 -3
- package/lib/engine-components/SpectatorCamera.js.map +1 -1
- package/lib/engine-components/SyncedCamera.js +1 -1
- package/lib/engine-components/SyncedCamera.js.map +1 -1
- package/lib/engine-components/SyncedTransform.js +2 -2
- package/lib/engine-components/SyncedTransform.js.map +1 -1
- package/lib/engine-components/TestRunner.js +1 -1
- package/lib/engine-components/TestRunner.js.map +1 -1
- package/lib/engine-components/WebARCameraBackground.d.ts +19 -0
- package/lib/engine-components/WebARCameraBackground.js +185 -0
- package/lib/engine-components/WebARCameraBackground.js.map +1 -0
- package/lib/engine-components/WebARSessionRoot.js +3 -2
- package/lib/engine-components/WebARSessionRoot.js.map +1 -1
- package/lib/engine-components/WebXR.d.ts +4 -0
- package/lib/engine-components/WebXR.js +11 -8
- package/lib/engine-components/WebXR.js.map +1 -1
- package/lib/engine-components/WebXRAvatar.js +1 -0
- package/lib/engine-components/WebXRAvatar.js.map +1 -1
- package/lib/engine-components/WebXRGrabRendering.js +2 -2
- package/lib/engine-components/WebXRGrabRendering.js.map +1 -1
- package/lib/engine-components/WebXRSync.js +2 -2
- package/lib/engine-components/WebXRSync.js.map +1 -1
- package/lib/engine-components/codegen/components.d.ts +14 -6
- package/lib/engine-components/codegen/components.js +14 -6
- package/lib/engine-components/codegen/components.js.map +1 -1
- package/lib/engine-components/js-extensions/Object3D.js +4 -1
- package/lib/engine-components/js-extensions/Object3D.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/Antialiasing.d.ts +13 -0
- package/lib/engine-components/postprocessing/Effects/Antialiasing.js +46 -0
- package/lib/engine-components/postprocessing/Effects/Antialiasing.js.map +1 -0
- package/lib/engine-components/postprocessing/Effects/Bloom.d.ts +12 -0
- package/lib/engine-components/postprocessing/Effects/Bloom.js +76 -0
- package/lib/engine-components/postprocessing/Effects/Bloom.js.map +1 -0
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.d.ts +8 -0
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js +39 -0
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js.map +1 -0
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.d.ts +12 -0
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js +96 -0
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js.map +1 -0
- package/lib/engine-components/postprocessing/Effects/DepthOfField.d.ts +21 -0
- package/lib/engine-components/postprocessing/Effects/DepthOfField.js +87 -0
- package/lib/engine-components/postprocessing/Effects/DepthOfField.js.map +1 -0
- package/lib/engine-components/postprocessing/Effects/Pixelation.d.ts +7 -0
- package/lib/engine-components/postprocessing/Effects/Pixelation.js +30 -0
- package/lib/engine-components/postprocessing/Effects/Pixelation.js.map +1 -0
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.d.ts +11 -0
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.js +70 -0
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.js.map +1 -0
- package/lib/engine-components/postprocessing/Effects/Tonemapping.d.ts +16 -0
- package/lib/engine-components/postprocessing/Effects/Tonemapping.js +52 -0
- package/lib/engine-components/postprocessing/Effects/Tonemapping.js.map +1 -0
- package/lib/engine-components/postprocessing/Effects/Vignette.d.ts +11 -0
- package/lib/engine-components/postprocessing/Effects/Vignette.js +57 -0
- package/lib/engine-components/postprocessing/Effects/Vignette.js.map +1 -0
- package/lib/engine-components/postprocessing/PostProcessingEffect.d.ts +29 -0
- package/lib/engine-components/postprocessing/PostProcessingEffect.js +89 -0
- package/lib/engine-components/postprocessing/PostProcessingEffect.js.map +1 -0
- package/lib/engine-components/postprocessing/PostProcessingHandler.d.ts +13 -0
- package/lib/engine-components/postprocessing/PostProcessingHandler.js +119 -0
- package/lib/engine-components/postprocessing/PostProcessingHandler.js.map +1 -0
- package/lib/engine-components/postprocessing/Volume.d.ts +23 -0
- package/lib/engine-components/postprocessing/Volume.js +176 -0
- package/lib/engine-components/postprocessing/Volume.js.map +1 -0
- package/lib/engine-components/postprocessing/VolumeParameter.d.ts +21 -0
- package/lib/engine-components/postprocessing/VolumeParameter.js +75 -0
- package/lib/engine-components/postprocessing/VolumeParameter.js.map +1 -0
- package/lib/engine-components/postprocessing/VolumeProfile.d.ts +7 -0
- package/lib/engine-components/postprocessing/VolumeProfile.js +42 -0
- package/lib/engine-components/postprocessing/VolumeProfile.js.map +1 -0
- package/lib/engine-components/timeline/TimelineTracks.js +14 -15
- package/lib/engine-components/timeline/TimelineTracks.js.map +1 -1
- package/lib/engine-components/ui/Text.js +28 -170
- package/lib/engine-components/ui/Text.js.map +1 -1
- package/lib/engine-components-experimental/networking/PlayerSync.d.ts +18 -0
- package/lib/engine-components-experimental/networking/PlayerSync.js +62 -8
- package/lib/engine-components-experimental/networking/PlayerSync.js.map +1 -1
- package/lib/include/three/ARButton.d.ts +1 -1
- package/lib/include/three/ARButton.js +11 -19
- package/lib/include/three/ARButton.js.map +1 -1
- package/lib/include/three/VRButton.js +1 -4
- package/lib/include/three/VRButton.js.map +1 -1
- package/package.json +3 -2
- package/plugins/vite/drop-client.js +77 -0
- package/plugins/vite/drop.js +81 -0
- package/plugins/vite/editor-connection.js +121 -0
- package/plugins/vite/index.js +9 -4
- package/plugins/vite/meta.js +3 -0
- package/plugins/vite/poster-client.js +6 -4
- package/src/engine/api.ts +30 -1
- package/src/engine/codegen/register_types.js +25 -9
- package/src/engine/debug/debug_overlay.ts +11 -2
- package/src/engine/engine_addressables.ts +4 -4
- package/src/engine/engine_assetdatabase.ts +291 -184
- package/src/engine/engine_components.ts +20 -1
- package/src/engine/engine_components_internal.ts +30 -0
- package/src/engine/engine_constants.ts +4 -1
- package/src/engine/engine_context_registry.ts +7 -0
- package/src/engine/engine_editor-sync.ts +21 -0
- package/src/engine/engine_element.ts +8 -1
- package/src/engine/engine_element_loading.ts +19 -15
- package/src/engine/engine_gameobject.ts +579 -583
- package/src/engine/engine_gizmos.ts +3 -2
- package/src/engine/engine_gltf_builtin_components.ts +30 -15
- package/src/engine/engine_networking.ts +10 -8
- package/src/engine/engine_networking_auto.ts +48 -11
- package/src/engine/engine_patcher.ts +113 -0
- package/src/engine/engine_physics.ts +128 -12
- package/src/engine/engine_scenetools.ts +0 -1
- package/src/engine/engine_serialization_core.ts +6 -0
- package/src/engine/engine_setup.ts +15 -5
- package/src/engine/engine_texture.ts +54 -5
- package/src/engine/engine_types.ts +6 -1
- package/src/engine/engine_utils.ts +6 -5
- package/src/engine/extensions/NEEDLE_progressive.ts +32 -32
- package/src/engine/extensions/NEEDLE_render_objects.ts +10 -1
- package/src/engine/extensions/extensions.ts +22 -1
- package/src/engine/extensions/usage_tracker.ts +91 -0
- package/src/engine-components/Animator.ts +0 -1
- package/src/engine-components/AnimatorController.ts +2 -0
- package/src/engine-components/AudioSource.ts +1 -1
- package/src/engine-components/Camera.ts +77 -37
- package/src/engine-components/CharacterController.ts +12 -9
- package/src/engine-components/Collider.ts +16 -2
- package/src/engine-components/Component.ts +74 -30
- package/src/engine-components/Networking.ts +9 -1
- package/src/engine-components/OrbitControls.ts +11 -2
- package/src/engine-components/ParticleSystem.ts +54 -10
- package/src/engine-components/ParticleSystemModules.ts +28 -1
- package/src/engine-components/ParticleSystemSubEmitter.ts +5 -3
- package/src/engine-components/ReflectionProbe.ts +17 -7
- package/src/engine-components/Renderer.ts +36 -16
- package/src/engine-components/ScreenCapture.ts +3 -3
- package/src/engine-components/Skybox.ts +2 -0
- package/src/engine-components/SmoothFollow.ts +4 -4
- package/src/engine-components/SpectatorCamera.ts +3 -3
- package/src/engine-components/SyncedCamera.ts +1 -1
- package/src/engine-components/SyncedTransform.ts +2 -2
- package/src/engine-components/TestRunner.ts +1 -1
- package/src/engine-components/WebARCameraBackground.ts +215 -0
- package/src/engine-components/WebARSessionRoot.ts +3 -2
- package/src/engine-components/WebXR.ts +12 -8
- package/src/engine-components/WebXRAvatar.ts +1 -1
- package/src/engine-components/WebXRGrabRendering.ts +2 -2
- package/src/engine-components/WebXRSync.ts +2 -2
- package/src/engine-components/codegen/components.ts +14 -6
- package/src/engine-components/js-extensions/Object3D.ts +6 -1
- package/src/engine-components/postprocessing/Effects/Antialiasing.ts +52 -0
- package/src/engine-components/postprocessing/Effects/Bloom.ts +75 -0
- package/src/engine-components/postprocessing/Effects/ChromaticAberration.ts +36 -0
- package/src/engine-components/postprocessing/Effects/ColorAdjustments.ts +114 -0
- package/src/engine-components/postprocessing/Effects/DepthOfField.ts +90 -0
- package/src/engine-components/postprocessing/Effects/Pixelation.ts +28 -0
- package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.ts +71 -0
- package/src/engine-components/postprocessing/Effects/Tonemapping.ts +55 -0
- package/src/engine-components/postprocessing/Effects/Vignette.ts +55 -0
- package/src/engine-components/postprocessing/PostProcessingEffect.ts +112 -0
- package/src/engine-components/postprocessing/PostProcessingHandler.ts +148 -0
- package/src/engine-components/postprocessing/Volume.ts +194 -0
- package/src/engine-components/postprocessing/VolumeParameter.ts +85 -0
- package/src/engine-components/postprocessing/VolumeProfile.ts +40 -0
- package/src/engine-components/timeline/TimelineTracks.ts +16 -17
- package/src/engine-components/ui/Text.ts +37 -174
- package/src/engine-components-experimental/networking/PlayerSync.ts +69 -8
- package/src/include/three/ARButton.js +13 -24
- package/src/include/three/VRButton.js +1 -7
- package/lib/engine-components/Volume.d.ts +0 -34
- package/lib/engine-components/Volume.js +0 -140
- package/lib/engine-components/Volume.js.map +0 -1
- package/src/engine-components/Volume.ts +0 -141
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tonemapping.js","sourceRoot":"","sources":["../../../../../src/engine-components/postprocessing/Effects/Tonemapping.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AACrG,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAwB,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAG5D,MAAM,CAAN,IAAY,eAIX;AAJD,WAAY,eAAe;IACvB,qDAAQ,CAAA;IACR,2DAAW,CAAA;IACX,qDAAQ,CAAA;AACZ,CAAC,EAJW,eAAe,KAAf,eAAe,QAI1B;AAED,MAAM,OAAO,WAAY,SAAQ,oBAAoB;IAGjD,IAAI,QAAQ;QACR,OAAO,aAAa,CAAC;IACzB,CAAC;IAGD,IAAI,CAAmB;IAEvB,IAAI,aAAa,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAEpC,IAAI;QACA,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC;IAC3C,CAAC;IAED,KAAK;QACD,IAAI,CAAC,IAAK,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAK,CAAC,KAAK,CAAC,CAAA;IACjC,CAAC;IAED,OAAO;QACH,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,GAAG,aAAa,CAAC;IACtD,CAAC;IAEO,MAAM,CAAC,CAAC;QACZ,QAAQ,CAAC,EAAE;YACP,KAAK,eAAe,CAAC,IAAI;gBACrB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,GAAG,iBAAiB,CAAC;gBACtD,MAAM;YACV,KAAK,eAAe,CAAC,OAAO;gBACxB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,GAAG,mBAAmB,CAAC;gBACxD,MAAM;YACV,KAAK,eAAe,CAAC,IAAI;gBACrB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,GAAG,qBAAqB,CAAC;gBAC1D,MAAM;SACb;IACL,CAAC;CAEJ;AA/BG;IADC,YAAY,CAAC,eAAe,CAAC;yCACP;AAiC3B,wBAAwB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { VolumeParameter } from "../VolumeParameter";
|
|
2
|
+
import { EffectProviderResult, PostProcessingEffect } from "../PostProcessingEffect";
|
|
3
|
+
export declare class Vignette extends PostProcessingEffect {
|
|
4
|
+
get typeName(): string;
|
|
5
|
+
color: VolumeParameter;
|
|
6
|
+
intensity: VolumeParameter;
|
|
7
|
+
center: VolumeParameter;
|
|
8
|
+
init(): void;
|
|
9
|
+
onCreateEffect(): EffectProviderResult;
|
|
10
|
+
private updateDarkness;
|
|
11
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { serializable } from "../../../engine/engine_serialization";
|
|
8
|
+
import { VolumeParameter } from "../VolumeParameter";
|
|
9
|
+
import { PostProcessingEffect } from "../PostProcessingEffect";
|
|
10
|
+
import { registerCustomEffectType } from "../VolumeProfile";
|
|
11
|
+
import { VignetteEffect } from "postprocessing";
|
|
12
|
+
export class Vignette extends PostProcessingEffect {
|
|
13
|
+
get typeName() {
|
|
14
|
+
return "Vignette";
|
|
15
|
+
}
|
|
16
|
+
color;
|
|
17
|
+
intensity;
|
|
18
|
+
center;
|
|
19
|
+
init() {
|
|
20
|
+
this.color.defaultValue = { r: 0, g: 0, b: 0, a: 1 };
|
|
21
|
+
this.intensity.defaultValue = 0;
|
|
22
|
+
this.center.defaultValue = { x: 0.5, y: 0.5 };
|
|
23
|
+
}
|
|
24
|
+
onCreateEffect() {
|
|
25
|
+
// https://github.com/pmndrs/postprocessing/blob/f8ed90635ee6710744cc0f38811fc00ce873a450/src/effects/VignetteEffect.js
|
|
26
|
+
const vignette = new VignetteEffect();
|
|
27
|
+
this.intensity.onValueChanged = v => {
|
|
28
|
+
vignette.offset = v;
|
|
29
|
+
this.updateDarkness(vignette);
|
|
30
|
+
};
|
|
31
|
+
this.color.onValueChanged = _ => {
|
|
32
|
+
this.updateDarkness(vignette);
|
|
33
|
+
};
|
|
34
|
+
// this.center.onValueChanged = v => {
|
|
35
|
+
// console.log(v);
|
|
36
|
+
// vignette.offset = v.x;
|
|
37
|
+
// };
|
|
38
|
+
return vignette;
|
|
39
|
+
}
|
|
40
|
+
updateDarkness(effect) {
|
|
41
|
+
// const col = this.color.value;
|
|
42
|
+
// const colval = 1 - (col.r + col.g + col.b + col.a) / 4;
|
|
43
|
+
const val = this.intensity.value;
|
|
44
|
+
effect.darkness = val;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
__decorate([
|
|
48
|
+
serializable(VolumeParameter)
|
|
49
|
+
], Vignette.prototype, "color", void 0);
|
|
50
|
+
__decorate([
|
|
51
|
+
serializable(VolumeParameter)
|
|
52
|
+
], Vignette.prototype, "intensity", void 0);
|
|
53
|
+
__decorate([
|
|
54
|
+
serializable(VolumeParameter)
|
|
55
|
+
], Vignette.prototype, "center", void 0);
|
|
56
|
+
registerCustomEffectType("Vignette", Vignette);
|
|
57
|
+
//# sourceMappingURL=Vignette.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Vignette.js","sourceRoot":"","sources":["../../../../../src/engine-components/postprocessing/Effects/Vignette.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAwB,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhD,MAAM,OAAO,QAAS,SAAQ,oBAAoB;IAC9C,IAAI,QAAQ;QACR,OAAO,UAAU,CAAC;IACtB,CAAC;IAGD,KAAK,CAAmB;IAGxB,SAAS,CAAmB;IAG5B,MAAM,CAAmB;IAEzB,IAAI;QACA,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IAClD,CAAC;IAED,cAAc;QACV,uHAAuH;QACvH,MAAM,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;QAEtC,IAAI,CAAC,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC,EAAE;YAChC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACpB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAA;QACD,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,EAAE;YAC5B,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;QACF,sCAAsC;QACtC,sBAAsB;QACtB,6BAA6B;QAC7B,KAAK;QAEL,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEO,cAAc,CAAC,MAAsB;QACzC,gCAAgC;QAChC,0DAA0D;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACjC,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC;IAC1B,CAAC;CAEJ;AAxCG;IADC,YAAY,CAAC,eAAe,CAAC;uCACN;AAGxB;IADC,YAAY,CAAC,eAAe,CAAC;2CACF;AAG5B;IADC,YAAY,CAAC,eAAe,CAAC;wCACL;AAmC7B,wBAAwB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Effect, Pass } from "postprocessing";
|
|
2
|
+
import { Component } from "../Component";
|
|
3
|
+
import { ISerializable, SerializationContext } from "../../engine/engine_serialization_core";
|
|
4
|
+
import { EditorModification, IEditorModification } from "../../engine/engine_editor-sync";
|
|
5
|
+
export declare type EffectProviderResult = Effect | Pass | Array<Effect | Pass>;
|
|
6
|
+
export interface IEffectProvider {
|
|
7
|
+
apply(): void | undefined | EffectProviderResult;
|
|
8
|
+
unapply(): void;
|
|
9
|
+
}
|
|
10
|
+
export declare abstract class PostProcessingEffect extends Component implements IEffectProvider, ISerializable, IEditorModification {
|
|
11
|
+
abstract get typeName(): string;
|
|
12
|
+
onEnable(): void;
|
|
13
|
+
onDisable(): void;
|
|
14
|
+
active: boolean;
|
|
15
|
+
/** override to initialize bindings on parameters */
|
|
16
|
+
init(): void;
|
|
17
|
+
/** previously created effect (if any) */
|
|
18
|
+
private _result;
|
|
19
|
+
/** Apply post settings. Make sure to call super.apply() if you also create an effect */
|
|
20
|
+
apply(): void | undefined | EffectProviderResult;
|
|
21
|
+
/** Reset previously set values (e.g. when adjusting settings on the renderer like Tonemapping) */
|
|
22
|
+
unapply(): void;
|
|
23
|
+
/** implement to create a effect once to be cached in the base class. Make sure super.apply() is called if you also override apply */
|
|
24
|
+
onCreateEffect?(): EffectProviderResult | undefined;
|
|
25
|
+
dispose(): void;
|
|
26
|
+
private initParameters;
|
|
27
|
+
onAfterDeserialize(data: any, _context: SerializationContext): void;
|
|
28
|
+
onEditorModification(modification: EditorModification): void | boolean | undefined;
|
|
29
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { serializable } from "../../engine/engine_serialization";
|
|
8
|
+
import { VolumeParameter } from "./VolumeParameter";
|
|
9
|
+
import { Component } from "../Component";
|
|
10
|
+
export class PostProcessingEffect extends Component {
|
|
11
|
+
onEnable() {
|
|
12
|
+
// Dont override the serialized value by enabling (we could also just disable this component / map enabled to active)
|
|
13
|
+
if (this.__internalDidAwakeAndStart)
|
|
14
|
+
this.active = true;
|
|
15
|
+
}
|
|
16
|
+
onDisable() {
|
|
17
|
+
this.active = false;
|
|
18
|
+
}
|
|
19
|
+
active = true;
|
|
20
|
+
/** override to initialize bindings on parameters */
|
|
21
|
+
init() {
|
|
22
|
+
}
|
|
23
|
+
/** previously created effect (if any) */
|
|
24
|
+
_result;
|
|
25
|
+
/** Apply post settings. Make sure to call super.apply() if you also create an effect */
|
|
26
|
+
apply() {
|
|
27
|
+
if (!this._result) {
|
|
28
|
+
this._result = this.onCreateEffect?.call(this);
|
|
29
|
+
if (this._result) {
|
|
30
|
+
this.initParameters();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return this._result;
|
|
34
|
+
}
|
|
35
|
+
/** Reset previously set values (e.g. when adjusting settings on the renderer like Tonemapping) */
|
|
36
|
+
unapply() { }
|
|
37
|
+
dispose() {
|
|
38
|
+
if (this._result) {
|
|
39
|
+
if (Array.isArray(this._result)) {
|
|
40
|
+
this._result.forEach(r => r.dispose());
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
this._result.dispose();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
this._result = undefined;
|
|
47
|
+
}
|
|
48
|
+
initParameters() {
|
|
49
|
+
// Automatically call init on all VolumeParameter properties
|
|
50
|
+
// This will enforce the valueProcessor and onValueChanged to be called
|
|
51
|
+
const keys = Object.keys(this);
|
|
52
|
+
for (const key of keys) {
|
|
53
|
+
const value = this[key];
|
|
54
|
+
if (value instanceof VolumeParameter) {
|
|
55
|
+
value.__init();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
onAfterDeserialize(data, _context) {
|
|
60
|
+
// When using additional effects and parameters exported from the editor are not in the volume parameter format
|
|
61
|
+
if (typeof data === "object") {
|
|
62
|
+
const types = this["$serializedTypes"];
|
|
63
|
+
if (types) {
|
|
64
|
+
for (const fieldName in Object.keys(types)) {
|
|
65
|
+
const type = types[fieldName];
|
|
66
|
+
if (type === VolumeParameter) {
|
|
67
|
+
const value = data[fieldName];
|
|
68
|
+
if (value !== undefined) {
|
|
69
|
+
this[fieldName].value = value;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
onEditorModification(modification) {
|
|
77
|
+
// Handle a property modification if the property is a VolumeParameter and the modification is just a plain value
|
|
78
|
+
const key = modification.propertyName;
|
|
79
|
+
if (this[key] instanceof VolumeParameter) {
|
|
80
|
+
const value = modification.value;
|
|
81
|
+
this[key].value = value;
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
__decorate([
|
|
87
|
+
serializable()
|
|
88
|
+
], PostProcessingEffect.prototype, "active", void 0);
|
|
89
|
+
//# sourceMappingURL=PostProcessingEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PostProcessingEffect.js","sourceRoot":"","sources":["../../../../src/engine-components/postprocessing/PostProcessingEffect.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEjE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAWzC,MAAM,OAAgB,oBAAqB,SAAQ,SAAS;IAIxD,QAAQ;QACJ,qHAAqH;QACrH,IAAI,IAAI,CAAC,0BAA0B;YAC/B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,SAAS;QACL,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAGD,MAAM,GAAY,IAAI,CAAC;IAEvB,oDAAoD;IACpD,IAAI;IAEJ,CAAC;IAED,yCAAyC;IACjC,OAAO,CAA0C;IAGzD,wFAAwF;IACxF,KAAK;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,CAAC,cAAc,EAAE,CAAC;aACzB;SACJ;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,kGAAkG;IAClG,OAAO,KAAW,CAAC;IAKnB,OAAO;QACH,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBAC7B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;aAC1C;iBAAM;gBACH,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;aAC1B;SACJ;QACD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAC7B,CAAC;IAEO,cAAc;QAClB,4DAA4D;QAC5D,uEAAuE;QACvE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACpB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACxB,IAAI,KAAK,YAAY,eAAe,EAAE;gBAClC,KAAK,CAAC,MAAM,EAAE,CAAC;aAClB;SACJ;IACL,CAAC;IAED,kBAAkB,CAAC,IAAS,EAAE,QAA8B;QACxD,+GAA+G;QAC/G,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACvC,IAAI,KAAK,EAAE;gBACP,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;oBACxC,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;oBAC9B,IAAI,IAAI,KAAK,eAAe,EAAE;wBAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;wBAC9B,IAAI,KAAK,KAAK,SAAS,EAAE;4BACrB,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;yBACjC;qBACJ;iBACJ;aACJ;SACJ;IACL,CAAC;IAGD,oBAAoB,CAAC,YAAgC;QACjD,iHAAiH;QACjH,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,CAAC;QACtC,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,eAAe,EAAE;YACtC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;YACxB,OAAO,IAAI,CAAC;SACf;IACL,CAAC;CACJ;AA/EG;IADC,YAAY,EAAE;oDACQ"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Context } from "../../engine/engine_setup";
|
|
2
|
+
import { PostProcessingEffect } from "./PostProcessingEffect";
|
|
3
|
+
export declare class PostProcessingHandler {
|
|
4
|
+
private _composer;
|
|
5
|
+
private _lastVolumeComponents?;
|
|
6
|
+
private _effects;
|
|
7
|
+
apply(context: Context, components: PostProcessingEffect[]): void;
|
|
8
|
+
unapply(context: Context): void;
|
|
9
|
+
dispose(context: Context): void;
|
|
10
|
+
private onApply;
|
|
11
|
+
/** Build composer passes */
|
|
12
|
+
private applyEffects;
|
|
13
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { HalfFloatType } from "three";
|
|
2
|
+
import { getParam } from "../../engine/engine_utils";
|
|
3
|
+
import { Effect, EffectComposer, EffectPass, Pass, RenderPass } from "postprocessing";
|
|
4
|
+
import { showBalloonWarning } from "../../engine/debug/debug";
|
|
5
|
+
const debug = getParam("debugpost");
|
|
6
|
+
const activeKey = Symbol("postprocessing-handler");
|
|
7
|
+
export class PostProcessingHandler {
|
|
8
|
+
_composer = null;
|
|
9
|
+
_lastVolumeComponents;
|
|
10
|
+
_effects = [];
|
|
11
|
+
apply(context, components) {
|
|
12
|
+
this.onApply(context, components);
|
|
13
|
+
}
|
|
14
|
+
unapply(context) {
|
|
15
|
+
if (this._lastVolumeComponents) {
|
|
16
|
+
for (const component of this._lastVolumeComponents) {
|
|
17
|
+
component.unapply();
|
|
18
|
+
}
|
|
19
|
+
this._lastVolumeComponents.length = 0;
|
|
20
|
+
}
|
|
21
|
+
const active = context[activeKey];
|
|
22
|
+
if (active === this) {
|
|
23
|
+
delete context[activeKey];
|
|
24
|
+
}
|
|
25
|
+
if (context.composer === this._composer)
|
|
26
|
+
context.composer = null;
|
|
27
|
+
}
|
|
28
|
+
dispose(context) {
|
|
29
|
+
this.unapply(context);
|
|
30
|
+
for (const effect of this._effects) {
|
|
31
|
+
effect.dispose();
|
|
32
|
+
}
|
|
33
|
+
this._effects.length = 0;
|
|
34
|
+
}
|
|
35
|
+
onApply(context, components) {
|
|
36
|
+
if (!components)
|
|
37
|
+
return;
|
|
38
|
+
context[activeKey] = this;
|
|
39
|
+
if (debug)
|
|
40
|
+
console.log("refreshing volume profile", components);
|
|
41
|
+
this._lastVolumeComponents = [...components];
|
|
42
|
+
// store all effects in an array to apply them all in one pass
|
|
43
|
+
// const effects: Array<Effect | Pass> = [];
|
|
44
|
+
this._effects.length = 0;
|
|
45
|
+
for (const component of components) {
|
|
46
|
+
//@ts-ignore
|
|
47
|
+
component.context = context;
|
|
48
|
+
if (component.apply) {
|
|
49
|
+
if (component.active) {
|
|
50
|
+
if (!context.mainCameraComponent) {
|
|
51
|
+
console.error("No camera in scene found or available yet - can not create postprocessing effects");
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
// apply or collect effects
|
|
55
|
+
const res = component.apply();
|
|
56
|
+
if (res === undefined || res === null)
|
|
57
|
+
continue;
|
|
58
|
+
if (Array.isArray(res)) {
|
|
59
|
+
this._effects.push(...res);
|
|
60
|
+
}
|
|
61
|
+
else
|
|
62
|
+
this._effects.push(res);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
if (component.active)
|
|
67
|
+
showBalloonWarning("Volume component is not a VolumeComponent: " + component["__type"]);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
this.applyEffects(context);
|
|
71
|
+
}
|
|
72
|
+
/** Build composer passes */
|
|
73
|
+
applyEffects(context) {
|
|
74
|
+
const effectsOrPasses = this._effects;
|
|
75
|
+
const camera = context.mainCameraComponent;
|
|
76
|
+
const renderer = context.renderer;
|
|
77
|
+
if (effectsOrPasses.length <= 0)
|
|
78
|
+
return;
|
|
79
|
+
const cam = camera.cam;
|
|
80
|
+
// create composer and set active on context
|
|
81
|
+
if (!this._composer) {
|
|
82
|
+
// const hdrRenderTarget = new WebGLRenderTarget(window.innerWidth, window.innerHeight, { type: HalfFloatType });
|
|
83
|
+
this._composer = new EffectComposer(renderer, {
|
|
84
|
+
frameBufferType: HalfFloatType,
|
|
85
|
+
// multisampling: 2,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
context.composer = this._composer;
|
|
89
|
+
const composer = context.composer;
|
|
90
|
+
composer.setMainCamera(cam);
|
|
91
|
+
composer.setRenderer(renderer);
|
|
92
|
+
for (const prev of composer.passes)
|
|
93
|
+
prev.dispose();
|
|
94
|
+
composer.removeAllPasses();
|
|
95
|
+
composer.addPass(new RenderPass(context.scene, cam));
|
|
96
|
+
if (debug)
|
|
97
|
+
console.log("Set effects or passes", camera, effectsOrPasses, composer);
|
|
98
|
+
const effects = [];
|
|
99
|
+
for (const ef of effectsOrPasses) {
|
|
100
|
+
if (ef instanceof Effect)
|
|
101
|
+
effects.push(ef);
|
|
102
|
+
else if (ef instanceof Pass) {
|
|
103
|
+
const pass = new EffectPass(cam, ...effects);
|
|
104
|
+
pass.name = effects.map(e => e.constructor.name).join(", ");
|
|
105
|
+
pass.enabled = true;
|
|
106
|
+
composer.addPass(pass);
|
|
107
|
+
effects.length = 0;
|
|
108
|
+
composer.addPass(ef);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// create and apply uber pass
|
|
112
|
+
if (effects.length > 0) {
|
|
113
|
+
const pass = new EffectPass(cam, ...effects);
|
|
114
|
+
pass.enabled = true;
|
|
115
|
+
composer.addPass(pass);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=PostProcessingHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PostProcessingHandler.js","sourceRoot":"","sources":["../../../../src/engine-components/postprocessing/PostProcessingHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Behaviour } from "../Component";
|
|
2
|
+
import { VolumeProfile } from "./VolumeProfile";
|
|
3
|
+
import { EditorModification, IEditorModification as IEditorModificationReceiver } from "../../engine/engine_editor-sync";
|
|
4
|
+
export declare class Volume extends Behaviour implements IEditorModificationReceiver {
|
|
5
|
+
sharedProfile?: VolumeProfile;
|
|
6
|
+
private _postprocessing;
|
|
7
|
+
private _effects;
|
|
8
|
+
awake(): void;
|
|
9
|
+
start(): void;
|
|
10
|
+
onEnable(): void;
|
|
11
|
+
onDisable(): void;
|
|
12
|
+
onBeforeRender(): void;
|
|
13
|
+
onDestroy(): void;
|
|
14
|
+
private _lastApplyTime?;
|
|
15
|
+
private _rapidApplyCount;
|
|
16
|
+
private apply;
|
|
17
|
+
private unapply;
|
|
18
|
+
private tryApplyCache;
|
|
19
|
+
/** called from needle editor sync package if its active */
|
|
20
|
+
onEditorModification(modification: EditorModification): void | boolean | undefined;
|
|
21
|
+
private _recreateId;
|
|
22
|
+
private scheduleRecreate;
|
|
23
|
+
}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { Behaviour } from "../Component";
|
|
8
|
+
import { serializeable } from "../../engine/engine_serialization_decorator";
|
|
9
|
+
import { getParam } from "../../engine/engine_utils";
|
|
10
|
+
import { VolumeProfile } from "./VolumeProfile";
|
|
11
|
+
import { PostProcessingHandler } from "./PostProcessingHandler";
|
|
12
|
+
import { PostProcessingEffect } from "./PostProcessingEffect";
|
|
13
|
+
import { VolumeParameter } from "./VolumeParameter";
|
|
14
|
+
import { getEditorModificationCache } from "../../engine/engine_editor-sync";
|
|
15
|
+
import { isDevEnvironment } from "../../engine/debug";
|
|
16
|
+
// import { CustomPostProcessingEffect } from "./CustomPostProcessingEffect";
|
|
17
|
+
const debug = getParam("debugpost");
|
|
18
|
+
export class Volume extends Behaviour {
|
|
19
|
+
sharedProfile;
|
|
20
|
+
_postprocessing = new PostProcessingHandler();
|
|
21
|
+
_effects = [];
|
|
22
|
+
awake() {
|
|
23
|
+
// ensure the profile is initialized
|
|
24
|
+
this.sharedProfile?.init();
|
|
25
|
+
if (debug) {
|
|
26
|
+
console.log(this);
|
|
27
|
+
console.log("Press P to toggle post processing");
|
|
28
|
+
window.addEventListener("keydown", (e) => {
|
|
29
|
+
if (e.key === "p") {
|
|
30
|
+
console.log("Toggle volume: " + this.name, !this.enabled);
|
|
31
|
+
this.enabled = !this.enabled;
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
start() {
|
|
37
|
+
this.apply();
|
|
38
|
+
this.tryApplyCache();
|
|
39
|
+
}
|
|
40
|
+
onEnable() {
|
|
41
|
+
// We need to wait for the camera to be ready
|
|
42
|
+
if (this.__internalDidAwakeAndStart)
|
|
43
|
+
this.apply();
|
|
44
|
+
}
|
|
45
|
+
onDisable() {
|
|
46
|
+
this._postprocessing?.unapply(this.context);
|
|
47
|
+
}
|
|
48
|
+
onBeforeRender() {
|
|
49
|
+
if (!this.context.isInXR && this.context.composer && this.context.mainCamera) {
|
|
50
|
+
this.context.composer.setRenderer(this.context.renderer);
|
|
51
|
+
this.context.composer.setMainScene(this.context.scene);
|
|
52
|
+
this.context.composer.setMainCamera(this.context.mainCamera);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
onDestroy() {
|
|
56
|
+
this._postprocessing?.dispose(this.context);
|
|
57
|
+
}
|
|
58
|
+
_lastApplyTime;
|
|
59
|
+
_rapidApplyCount = 0;
|
|
60
|
+
apply() {
|
|
61
|
+
if (debug)
|
|
62
|
+
console.log("Apply PostProcessing", this);
|
|
63
|
+
if (isDevEnvironment()) {
|
|
64
|
+
if (this._lastApplyTime !== undefined && Date.now() - this._lastApplyTime < 100) {
|
|
65
|
+
this._rapidApplyCount++;
|
|
66
|
+
if (this._rapidApplyCount === 5)
|
|
67
|
+
console.warn("Detected rapid post processing modifications - this might be a bug", this);
|
|
68
|
+
}
|
|
69
|
+
this._lastApplyTime = Date.now();
|
|
70
|
+
}
|
|
71
|
+
this.unapply();
|
|
72
|
+
this._effects.length = 0;
|
|
73
|
+
// get from profile
|
|
74
|
+
if (this.sharedProfile?.components) {
|
|
75
|
+
this._effects.push(...this.sharedProfile.components);
|
|
76
|
+
}
|
|
77
|
+
// get additional effects
|
|
78
|
+
const additionalComponents = this.gameObject.getComponentsInChildren(PostProcessingEffect);
|
|
79
|
+
if (debug && additionalComponents?.length)
|
|
80
|
+
console.log("Additional", additionalComponents);
|
|
81
|
+
if (additionalComponents) {
|
|
82
|
+
for (const comp of additionalComponents) {
|
|
83
|
+
if (comp.active)
|
|
84
|
+
this._effects.push(comp);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (this._effects.length > 0) {
|
|
88
|
+
this._postprocessing.apply(this.context, this._effects);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
unapply() {
|
|
92
|
+
this._postprocessing.unapply(this.context);
|
|
93
|
+
}
|
|
94
|
+
tryApplyCache() {
|
|
95
|
+
const cache = getEditorModificationCache();
|
|
96
|
+
if (cache) {
|
|
97
|
+
for (const entry of cache.values())
|
|
98
|
+
this.onEditorModification(entry);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/** called from needle editor sync package if its active */
|
|
102
|
+
onEditorModification(modification) {
|
|
103
|
+
if (modification.propertyName.startsWith("postprocessing.")) {
|
|
104
|
+
if (!this._effects?.length)
|
|
105
|
+
return;
|
|
106
|
+
const path = modification.propertyName.split(".");
|
|
107
|
+
if (path.length === 3 || path.length === 4) {
|
|
108
|
+
const componentName = path[1];
|
|
109
|
+
const propertyName = path[2];
|
|
110
|
+
for (const comp of this._effects) {
|
|
111
|
+
if (comp.typeName?.toLowerCase() === componentName.toLowerCase()) {
|
|
112
|
+
if (propertyName === "active") {
|
|
113
|
+
comp.active = modification.value;
|
|
114
|
+
this.scheduleRecreate();
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
// cache the volume parameters
|
|
118
|
+
if (!effectVolumeProperties.has(componentName)) {
|
|
119
|
+
const volumeParameterKeys = new Array();
|
|
120
|
+
effectVolumeProperties.set(componentName, volumeParameterKeys);
|
|
121
|
+
const keys = Object.keys(comp);
|
|
122
|
+
for (const key of keys) {
|
|
123
|
+
const prop = comp[key];
|
|
124
|
+
if (prop instanceof VolumeParameter) {
|
|
125
|
+
volumeParameterKeys.push(key);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (effectVolumeProperties.has(componentName)) {
|
|
130
|
+
const paramName = propertyName.toLowerCase();
|
|
131
|
+
const volumeParameterKeys = effectVolumeProperties.get(componentName);
|
|
132
|
+
for (const key of volumeParameterKeys) {
|
|
133
|
+
if (key.toLowerCase() === paramName) {
|
|
134
|
+
const prop = comp[key];
|
|
135
|
+
if (prop instanceof VolumeParameter) {
|
|
136
|
+
const isActiveStateChange = path.length === 4 && path[3] === "active";
|
|
137
|
+
if (isActiveStateChange) {
|
|
138
|
+
prop.overrideState = modification.value;
|
|
139
|
+
this.scheduleRecreate();
|
|
140
|
+
}
|
|
141
|
+
else if (prop && prop.value !== undefined) {
|
|
142
|
+
prop.value = modification.value;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
console.warn("Unknown modification", propertyName);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
_recreateId = -1;
|
|
159
|
+
scheduleRecreate() {
|
|
160
|
+
// When the editor modifications come in with changed active effects we want/need to re-create the effects
|
|
161
|
+
// We defer it slightly because multiple active changes could be made and we dont want to recreate the full effect stack multiple times
|
|
162
|
+
const id = ++this._recreateId;
|
|
163
|
+
setTimeout(() => {
|
|
164
|
+
if (id !== this._recreateId)
|
|
165
|
+
return;
|
|
166
|
+
this.onDisable();
|
|
167
|
+
this.onEnable();
|
|
168
|
+
}, 200);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
__decorate([
|
|
172
|
+
serializeable(VolumeProfile)
|
|
173
|
+
], Volume.prototype, "sharedProfile", void 0);
|
|
174
|
+
/** cached VolumeParameter keys per object */
|
|
175
|
+
const effectVolumeProperties = new Map();
|
|
176
|
+
//# sourceMappingURL=Volume.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Volume.js","sourceRoot":"","sources":["../../../../src/engine-components/postprocessing/Volume.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare type VolumeParameterChangedEvent = (newValue: any, oldValue: any, parameter: VolumeParameter) => void;
|
|
2
|
+
export declare type VolumeParameterValueProcessor = (value: any) => any;
|
|
3
|
+
export declare class VolumeParameter {
|
|
4
|
+
get overrideState(): boolean;
|
|
5
|
+
set overrideState(val: boolean);
|
|
6
|
+
private _active;
|
|
7
|
+
get value(): any;
|
|
8
|
+
set value(val: any);
|
|
9
|
+
private _value;
|
|
10
|
+
private _lastActiveSetValue?;
|
|
11
|
+
set defaultValue(val: any);
|
|
12
|
+
private _defaultValue;
|
|
13
|
+
/** enforce the value to be set and onValueChanged to be called if assigned */
|
|
14
|
+
__init(): void;
|
|
15
|
+
/** called to modify a changing value before it is saved */
|
|
16
|
+
valueProcessor: VolumeParameterValueProcessor | undefined;
|
|
17
|
+
/** called when a value has changed (with the final value) */
|
|
18
|
+
onValueChanged: VolumeParameterChangedEvent | undefined;
|
|
19
|
+
private processValue;
|
|
20
|
+
private testIfValueChanged;
|
|
21
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { serializable } from "../../engine/engine_serialization";
|
|
8
|
+
export class VolumeParameter {
|
|
9
|
+
get overrideState() {
|
|
10
|
+
return this._active;
|
|
11
|
+
}
|
|
12
|
+
set overrideState(val) {
|
|
13
|
+
if (this._active === val)
|
|
14
|
+
return;
|
|
15
|
+
this._active = val;
|
|
16
|
+
const value = val ? this._lastActiveSetValue : this._defaultValue;
|
|
17
|
+
this.processValue(value, true);
|
|
18
|
+
}
|
|
19
|
+
_active = false;
|
|
20
|
+
get value() {
|
|
21
|
+
return this._value;
|
|
22
|
+
}
|
|
23
|
+
set value(val) {
|
|
24
|
+
this.processValue(val, false);
|
|
25
|
+
}
|
|
26
|
+
_value;
|
|
27
|
+
_lastActiveSetValue;
|
|
28
|
+
set defaultValue(val) {
|
|
29
|
+
this._defaultValue = val;
|
|
30
|
+
}
|
|
31
|
+
_defaultValue = undefined;
|
|
32
|
+
/** enforce the value to be set and onValueChanged to be called if assigned */
|
|
33
|
+
__init() {
|
|
34
|
+
this.processValue(this._lastActiveSetValue, true);
|
|
35
|
+
}
|
|
36
|
+
/** called to modify a changing value before it is saved */
|
|
37
|
+
valueProcessor;
|
|
38
|
+
/** called when a value has changed (with the final value) */
|
|
39
|
+
onValueChanged;
|
|
40
|
+
processValue(val, forceUpdate) {
|
|
41
|
+
if (val === null || val === undefined)
|
|
42
|
+
return;
|
|
43
|
+
if (!forceUpdate && this.testIfValueChanged(val) === false)
|
|
44
|
+
return;
|
|
45
|
+
const oldValue = this._value;
|
|
46
|
+
if (!this._active && this._defaultValue !== undefined) {
|
|
47
|
+
// when setting the default value we dont process them (default values are explicitly set from the effect that declares them
|
|
48
|
+
// with the value that is expected to received when the parameter is disabled)
|
|
49
|
+
this._value = this._defaultValue;
|
|
50
|
+
val = this._defaultValue;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
this._lastActiveSetValue = val;
|
|
54
|
+
if (this._active && this.valueProcessor)
|
|
55
|
+
val = this.valueProcessor(val);
|
|
56
|
+
this._value = val;
|
|
57
|
+
}
|
|
58
|
+
if (this.onValueChanged) {
|
|
59
|
+
this.onValueChanged(val, oldValue, this);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
testIfValueChanged(newValue) {
|
|
63
|
+
if (this._lastActiveSetValue === newValue)
|
|
64
|
+
return false;
|
|
65
|
+
// TODO: may need checks for colors or vectors (check by xyz,rgb because they might come in as anonymous objects via editor modifications)
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
__decorate([
|
|
70
|
+
serializable()
|
|
71
|
+
], VolumeParameter.prototype, "overrideState", null);
|
|
72
|
+
__decorate([
|
|
73
|
+
serializable()
|
|
74
|
+
], VolumeParameter.prototype, "value", null);
|
|
75
|
+
//# sourceMappingURL=VolumeParameter.js.map
|