@needle-tools/engine 4.6.0 → 4.6.1-next.26cf56c

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.
Files changed (68) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/generateMeshBVH.worker-BaNp_Xtp.js +25 -0
  3. package/dist/{gltf-progressive-Bm9eEfgu.min.js → gltf-progressive-Bl4okF1b.min.js} +1 -1
  4. package/dist/{gltf-progressive-GjIqwSG3.js → gltf-progressive-DSpdn0QT.js} +2 -2
  5. package/dist/{gltf-progressive-Dn6o99rH.umd.cjs → gltf-progressive-P8b8a0qY.umd.cjs} +1 -1
  6. package/dist/{needle-engine.bundle-CoJqbtmp.umd.cjs → needle-engine.bundle-B0Kku0-E.umd.cjs} +145 -141
  7. package/dist/needle-engine.bundle-B23LP9xh.min.js +1563 -0
  8. package/dist/{needle-engine.bundle-DsrPZ9gj.js → needle-engine.bundle-gJVfKnbJ.js} +6252 -6216
  9. package/dist/needle-engine.js +4 -4
  10. package/dist/needle-engine.min.js +1 -1
  11. package/dist/needle-engine.umd.cjs +1 -1
  12. package/dist/{postprocessing-CRQa6Qxn.umd.cjs → postprocessing-BPhSPjAn.umd.cjs} +2 -2
  13. package/dist/{postprocessing-DF8AlRgW.min.js → postprocessing-DoBd3XIR.min.js} +2 -2
  14. package/dist/{postprocessing-D6W1EyZ-.js → postprocessing-XKNCD6By.js} +3 -3
  15. package/dist/{three-DMrv-4ar.umd.cjs → three-B_hneGZr.umd.cjs} +4 -4
  16. package/dist/{three-Bz6X1mrw.js → three-DrqIzZTH.js} +4198 -4198
  17. package/dist/{three-Boa-jOq-.min.js → three-DuDKwKB8.min.js} +33 -33
  18. package/dist/{three-examples-GggCDHv0.js → three-examples-B50TT3Iu.js} +5 -5
  19. package/dist/{three-examples-DuVhxqft.min.js → three-examples-DaDLBuy6.min.js} +14 -14
  20. package/dist/{three-examples-C7ryg8vN.umd.cjs → three-examples-X3OadjXB.umd.cjs} +3 -3
  21. package/dist/{three-mesh-ui-CY6Izc7C.min.js → three-mesh-ui-B3p3gyUz.min.js} +1 -1
  22. package/dist/{three-mesh-ui-CwlN0FUC.umd.cjs → three-mesh-ui-CQiIQIlA.umd.cjs} +1 -1
  23. package/dist/{three-mesh-ui-CLNOfsWn.js → three-mesh-ui-CxuWt7m-.js} +1 -1
  24. package/dist/{vendor-zxXa3Dmr.min.js → vendor-BlSxe9JJ.min.js} +3 -3
  25. package/dist/{vendor-BSD1RQIh.js → vendor-BmYIgaS1.js} +3 -3
  26. package/dist/{vendor-DHr4aqIZ.umd.cjs → vendor-Cavtu3CP.umd.cjs} +3 -3
  27. package/lib/engine/engine_assetdatabase.js +3 -1
  28. package/lib/engine/engine_assetdatabase.js.map +1 -1
  29. package/lib/engine/engine_context.d.ts +2 -2
  30. package/lib/engine/engine_context.js +11 -10
  31. package/lib/engine/engine_context.js.map +1 -1
  32. package/lib/engine/engine_utils_screenshot.d.ts +1 -1
  33. package/lib/engine/engine_utils_screenshot.js +11 -2
  34. package/lib/engine/engine_utils_screenshot.js.map +1 -1
  35. package/lib/engine-components/ReflectionProbe.d.ts +2 -1
  36. package/lib/engine-components/ReflectionProbe.js +4 -1
  37. package/lib/engine-components/ReflectionProbe.js.map +1 -1
  38. package/lib/engine-components/Renderer.js +9 -5
  39. package/lib/engine-components/Renderer.js.map +1 -1
  40. package/lib/engine-components/postprocessing/Effects/Antialiasing.js +2 -1
  41. package/lib/engine-components/postprocessing/Effects/Antialiasing.js.map +1 -1
  42. package/lib/engine-components/postprocessing/Effects/Tonemapping.js +10 -6
  43. package/lib/engine-components/postprocessing/Effects/Tonemapping.js.map +1 -1
  44. package/lib/engine-components/postprocessing/PostProcessingEffect.js +2 -1
  45. package/lib/engine-components/postprocessing/PostProcessingEffect.js.map +1 -1
  46. package/lib/engine-components/postprocessing/PostProcessingHandler.d.ts +8 -1
  47. package/lib/engine-components/postprocessing/PostProcessingHandler.js +103 -66
  48. package/lib/engine-components/postprocessing/PostProcessingHandler.js.map +1 -1
  49. package/lib/engine-components/postprocessing/Volume.d.ts +2 -0
  50. package/lib/engine-components/postprocessing/Volume.js +12 -1
  51. package/lib/engine-components/postprocessing/Volume.js.map +1 -1
  52. package/lib/engine-components/postprocessing/utils.d.ts +2 -0
  53. package/lib/engine-components/postprocessing/utils.js.map +1 -1
  54. package/package.json +2 -2
  55. package/plugins/vite/dependency-watcher.js +8 -2
  56. package/src/engine/engine_assetdatabase.ts +3 -1
  57. package/src/engine/engine_context.ts +14 -11
  58. package/src/engine/engine_utils_screenshot.ts +13 -3
  59. package/src/engine-components/ReflectionProbe.ts +5 -1
  60. package/src/engine-components/Renderer.ts +10 -7
  61. package/src/engine-components/postprocessing/Effects/Antialiasing.ts +2 -1
  62. package/src/engine-components/postprocessing/Effects/Tonemapping.ts +9 -7
  63. package/src/engine-components/postprocessing/PostProcessingEffect.ts +2 -1
  64. package/src/engine-components/postprocessing/PostProcessingHandler.ts +115 -72
  65. package/src/engine-components/postprocessing/Volume.ts +14 -1
  66. package/src/engine-components/postprocessing/utils.ts +2 -0
  67. package/dist/generateMeshBVH.worker-Cdfpaq5W.js +0 -25
  68. package/dist/needle-engine.bundle-BDO_N7gN.min.js +0 -1559
@@ -1 +1 @@
1
- {"version":3,"file":"Volume.js","sourceRoot":"","sources":["../../../src/engine-components/postprocessing/Volume.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Volume.js","sourceRoot":"","sources":["../../../src/engine-components/postprocessing/Volume.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,8 @@ import { type PostProcessingEffect } from "./PostProcessingEffect.js";
3
3
  export declare const debug: string | number | boolean;
4
4
  export type IPostProcessingManager = IComponent & {
5
5
  get isPostProcessingManager(): boolean;
6
+ get dirty(): boolean;
7
+ set dirty(value: boolean);
6
8
  addEffect(effect: PostProcessingEffect): void;
7
9
  removeEffect(effect: PostProcessingEffect): void;
8
10
  };
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/engine-components/postprocessing/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAE/E,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAGxD,MAAM,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;AAS3C,IAAI,yBAAyB,GAAuD,IAAI,CAAC;AAEzF,MAAM,UAAU,4BAA4B,CAAC,IAAiD;IAC1F,yBAAyB,GAAG,IAAI,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAA4B;IAClE,IAAI,GAAG,GAAG,MAAM,CAAC,UAA6B,CAAC;IAC/C,OAAO,GAAG,EAAE;QACR,KAAK,MAAM,IAAI,IAAI,0BAA0B,CAAC,GAAG,CAAC,EAAE;YAChD,IAAK,IAA0C,CAAC,uBAAuB,KAAK,IAAI,EAAE;gBAC9E,OAAO,IAAyC,CAAC;aACpD;SACJ;QACD,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;KACpB;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAA4B;IACjE,IAAI,OAAO,GAAkC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAC/E,IAAI,CAAC,OAAO,EAAE;QACV,IAAI,yBAAyB,EAAE;YAC3B,IAAI,KAAK;gBACL,OAAO,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YAChE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC3B,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;SAC5D;aACI;YACD,IAAI,gBAAgB,EAAE;gBAClB,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;SACxD;KACJ;IACD,OAAO,OAAO,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/engine-components/postprocessing/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAE/E,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAGxD,MAAM,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;AAW3C,IAAI,yBAAyB,GAAuD,IAAI,CAAC;AAEzF,MAAM,UAAU,4BAA4B,CAAC,IAAiD;IAC1F,yBAAyB,GAAG,IAAI,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAA4B;IAClE,IAAI,GAAG,GAAG,MAAM,CAAC,UAA6B,CAAC;IAC/C,OAAO,GAAG,EAAE;QACR,KAAK,MAAM,IAAI,IAAI,0BAA0B,CAAC,GAAG,CAAC,EAAE;YAChD,IAAK,IAA0C,CAAC,uBAAuB,KAAK,IAAI,EAAE;gBAC9E,OAAO,IAAyC,CAAC;aACpD;SACJ;QACD,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;KACpB;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAA4B;IACjE,IAAI,OAAO,GAAkC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAC/E,IAAI,CAAC,OAAO,EAAE;QACV,IAAI,yBAAyB,EAAE;YAC3B,IAAI,KAAK;gBACL,OAAO,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YAChE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC3B,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;SAC5D;aACI;YACD,IAAI,gBAAgB,EAAE;gBAClB,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;SACxD;KACJ;IACD,OAAO,OAAO,CAAC;AACnB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@needle-tools/engine",
3
- "version": "4.6.0",
3
+ "version": "4.6.1-next.26cf56c",
4
4
  "description": "Needle Engine is a web-based runtime for 3D apps. It runs on your machine for development with great integrations into editors like Unity or Blender - and can be deployed onto any device! It is flexible, extensible and networking and XR are built-in.",
5
5
  "main": "dist/needle-engine.min.js",
6
6
  "exports": {
@@ -167,4 +167,4 @@
167
167
  "module": "lib/needle-engine.js",
168
168
  "typings": "lib/needle-engine.d.ts",
169
169
  "types": "lib/needle-engine.d.ts"
170
- }
170
+ }
@@ -162,8 +162,14 @@ function testIfInstallIsRequired(projectDir, packageJson) {
162
162
  }
163
163
  if (expectedVersion?.length > 0) {
164
164
  const isRange = expectedVersion.includes("x") || expectedVersion.includes("^") || expectedVersion.includes(">") || expectedVersion.includes("<") || expectedVersion.includes("~");
165
- const isLatest = expectedVersion === "latest";
166
- if (!isRange && !isLatest) {
165
+ const isTagName = expectedVersion === "stable" ||
166
+ expectedVersion === "latest" ||
167
+ expectedVersion === "next" ||
168
+ expectedVersion === "beta" ||
169
+ expectedVersion === "alpha" ||
170
+ expectedVersion === "canary" ||
171
+ expectedVersion === "experimental";
172
+ if (!isRange && !isTagName) {
167
173
  const packageJsonPath = path.join(depPath, "package.json");
168
174
  /** @type {String} */
169
175
  const installedVersion = JSON.parse(readFileSync(packageJsonPath, "utf8")).version;
@@ -61,7 +61,9 @@ export function disposeObjectResources(obj: object | null | undefined) {
61
61
  return;
62
62
  }
63
63
 
64
- obj[$disposed] = true;
64
+ if(typeof obj === "object") {
65
+ obj[$disposed] = true;
66
+ }
65
67
 
66
68
  if (obj instanceof Scene) {
67
69
  disposeObjectResources(obj.environment);
@@ -758,6 +758,9 @@ export class Context implements IContext {
758
758
  this.physics?.engine?.clearCaches();
759
759
  this.lodsManager.disable();
760
760
 
761
+ this._onBeforeRenderListeners.clear();
762
+ this._onAfterRenderListeners.clear();
763
+
761
764
  if (!this.isManagedExternally) {
762
765
  if (this.renderer) {
763
766
  this.renderer.renderLists.dispose();
@@ -889,16 +892,17 @@ export class Context implements IContext {
889
892
  }
890
893
  }
891
894
 
892
- private _onBeforeRenderListeners = new Map<string, OnRenderCallback[]>();
893
- private _onAfterRenderListeners = new Map<string, OnRenderCallback[]>();
895
+ private readonly _onBeforeRenderListeners = new Map<string, OnRenderCallback[]>();
896
+ private readonly _onAfterRenderListeners = new Map<string, OnRenderCallback[]>();
894
897
 
895
898
  /** Use to subscribe to onBeforeRender events on threejs objects.
896
899
  * @link https://threejs.org/docs/#api/en/core/Object3D.onBeforeRender
897
900
  */
898
901
  addBeforeRenderListener(target: Object3D, callback: OnRenderCallback) {
899
902
  if (!this._onBeforeRenderListeners.has(target.uuid)) {
900
- this._onBeforeRenderListeners.set(target.uuid, []);
901
- target.onBeforeRender = this._createRenderCallbackWrapper(target, this._onBeforeRenderListeners);
903
+ const arr: OnRenderCallback[] = [];
904
+ this._onBeforeRenderListeners.set(target.uuid, arr);
905
+ target.onBeforeRender = this._createRenderCallbackWrapper(arr);
902
906
  }
903
907
  this._onBeforeRenderListeners.get(target.uuid)!.push(callback);
904
908
  }
@@ -919,8 +923,9 @@ export class Context implements IContext {
919
923
  */
920
924
  addAfterRenderListener(target: Object3D, callback: OnRenderCallback) {
921
925
  if (!this._onAfterRenderListeners.has(target.uuid)) {
922
- this._onAfterRenderListeners.set(target.uuid, []);
923
- target.onAfterRender = this._createRenderCallbackWrapper(target, this._onAfterRenderListeners);
926
+ const arr = [];
927
+ this._onAfterRenderListeners.set(target.uuid, arr);
928
+ target.onAfterRender = this._createRenderCallbackWrapper(arr);
924
929
  }
925
930
  this._onAfterRenderListeners.get(target.uuid)?.push(callback);
926
931
  }
@@ -937,12 +942,10 @@ export class Context implements IContext {
937
942
  }
938
943
 
939
944
 
940
- private _createRenderCallbackWrapper(target: Object3D, array: Map<string, OnRenderCallback[]>): OnRenderCallback {
945
+ private _createRenderCallbackWrapper(array: OnRenderCallback[]): OnRenderCallback {
941
946
  return (renderer, scene, camera, geometry, material, group) => {
942
- const arr = array.get(target.uuid);
943
- if (!arr) return;
944
- for (let i = 0; i < arr.length; i++) {
945
- const fn = arr[i];
947
+ for (let i = 0; i < array.length; i++) {
948
+ const fn = array[i];
946
949
  fn(renderer, scene, camera, geometry, material, group);
947
950
  }
948
951
  }
@@ -45,7 +45,7 @@ export declare type ScreenshotOptions = {
45
45
  /**
46
46
  * The context to take the screenshot from. If not provided, the current context will be used.
47
47
  */
48
- context?: Pick<Context, "scene" | "renderer" | "mainCamera" | "renderNow" | "updateAspect" | "updateSize" | "currentFrameEvent">,
48
+ context?: Pick<Context, "scene" | "renderer" | "mainCamera" | "renderNow" | "updateAspect" | "updateSize" | "currentFrameEvent" | "devicePixelRatio">,
49
49
  /**
50
50
  * The width of the screenshot - if not provided, the width of the current renderer will be used.
51
51
  */
@@ -205,11 +205,21 @@ export function screenshot2(opts: ScreenshotOptionsDataUrl | ScreenshotOptionsTe
205
205
  const renderWidth = width;
206
206
  const renderHeight = height;
207
207
 
208
- // apply page zoom
209
- const zoomLevel = window.devicePixelRatio || 1;
208
+ // Apply page zoom
209
+ let zoomLevel = (window.devicePixelRatio || 1);
210
+ let contextZoomLevel = 1;
211
+ // Apply context zoom level
212
+ if (context.devicePixelRatio === 'auto' || context.devicePixelRatio === 'manual')
213
+ contextZoomLevel = 1;
214
+ else
215
+ contextZoomLevel = context.devicePixelRatio / window.devicePixelRatio;
216
+ zoomLevel *= contextZoomLevel;
210
217
  width /= zoomLevel;
211
218
  height /= zoomLevel;
212
219
 
220
+ width = Math.floor(width);
221
+ height = Math.floor(height);
222
+
213
223
  // save XR state and reset it for screenshot
214
224
  const xrframe = renderer.xr.isPresenting && renderer.xr.getFrame();
215
225
  const previousXRState = renderer.xr.enabled;
@@ -22,6 +22,10 @@ export class ReflectionProbe extends Behaviour {
22
22
 
23
23
  private static _probes: Map<Context, ReflectionProbe[]> = new Map();
24
24
 
25
+ static isUsingReflectionProbe(material: Material) {
26
+ return !!(material[$reflectionProbeKey] || material[$originalMaterial]?.[$reflectionProbeKey]);
27
+ }
28
+
25
29
  public static get(object: Object3D | null | undefined, context: Context, isAnchor: boolean, anchor?: Object3D): ReflectionProbe | null {
26
30
  if (!object || object.isObject3D !== true) return null;
27
31
  if (disable) return null;
@@ -29,7 +33,7 @@ export class ReflectionProbe extends Behaviour {
29
33
  if (probes) {
30
34
  for (const probe of probes) {
31
35
  if (!probe.__didAwake) probe.__internalAwake();
32
- if (probe.enabled) {
36
+ if (probe.activeAndEnabled) {
33
37
  if (anchor) {
34
38
  // test if anchor is reflection probe object
35
39
  if (probe.gameObject === anchor) {
@@ -708,7 +708,15 @@ export class Renderer extends Behaviour implements IRenderer {
708
708
  if (this.reflectionProbeUsage !== ReflectionProbeUsage.Off && this._reflectionProbe) {
709
709
  this._reflectionProbe.onSet(this);
710
710
  }
711
-
711
+ // since three 163 we need to set the envMap to the scene envMap if it is not set
712
+ // otherwise the envmapIntensity has no effect: https://github.com/mrdoob/three.js/pull/27903
713
+ // internal issue: https://linear.app/needle/issue/NE-6363
714
+ for (const mat of this._sharedMaterials) {
715
+ // If the material has a envMap and is NOT using a reflection probe we set the envMap to the scene environment
716
+ if (mat && "envMap" in mat && "envMapIntensity" in mat && !ReflectionProbe.isUsingReflectionProbe(mat)) {
717
+ mat.envMap = this.context.scene.environment;
718
+ }
719
+ }
712
720
  }
713
721
 
714
722
  private onBeforeRenderThree = (_renderer, _scene, _camera, _geometry, material, _group) => {
@@ -716,11 +724,6 @@ export class Renderer extends Behaviour implements IRenderer {
716
724
  const factor = this.hasLightmap ? Math.PI : 1;
717
725
  const environmentIntensity = this.context.mainCameraComponent?.environmentIntensity ?? 1;
718
726
  material.envMapIntensity = Math.max(0, environmentIntensity * this.context.sceneLighting.environmentIntensity / factor);
719
-
720
- // since three 163 we need to set the envMap to the scene envMap if it is not set
721
- // otherwise the envmapIntensity has no effect: https://github.com/mrdoob/three.js/pull/27903
722
- // internal issue: https://linear.app/needle/issue/NE-6363
723
- if (!material.envMap) material.envMap = this.context.scene.environment;
724
727
  }
725
728
 
726
729
  if (this._lightmaps) {
@@ -856,7 +859,7 @@ export class SkinnedMeshRenderer extends MeshRenderer {
856
859
  mesh.computeBoundingSphere();
857
860
  mesh.geometry = geometry;
858
861
  }
859
- catch(err) {
862
+ catch (err) {
860
863
  console.error(`Error updating bounding sphere for ${mesh.name}`, err);
861
864
  }
862
865
  }
@@ -33,7 +33,8 @@ export class Antialiasing extends PostProcessingEffect {
33
33
  onCreateEffect(): EffectProviderResult {
34
34
  const effect = new MODULES.POSTPROCESSING.MODULE.SMAAEffect({
35
35
  preset: MODULES.POSTPROCESSING.MODULE.SMAAPreset.HIGH,
36
- edgeDetectionMode: MODULES.POSTPROCESSING.MODULE.EdgeDetectionMode.DEPTH
36
+ edgeDetectionMode: MODULES.POSTPROCESSING.MODULE.EdgeDetectionMode.LUMA,
37
+ predicationMode: MODULES.POSTPROCESSING.MODULE.PredicationMode.DEPTH,
37
38
  });
38
39
 
39
40
  this.preset.onValueChanged = (newValue) => {
@@ -1,5 +1,5 @@
1
1
  import type { ToneMappingEffect as _TonemappingEffect, ToneMappingMode } from "postprocessing";
2
- import { ACESFilmicToneMapping, AgXToneMapping, LinearToneMapping, NeutralToneMapping, NoToneMapping, ReinhardToneMapping } from "three";
2
+ import { ACESFilmicToneMapping, AgXToneMapping, LinearToneMapping, NeutralToneMapping, NoToneMapping, ReinhardToneMapping, WebGLRenderer } from "three";
3
3
 
4
4
  import { MODULES } from "../../../engine/engine_modules.js";
5
5
  import { serializable } from "../../../engine/engine_serialization.js";
@@ -36,6 +36,7 @@ function toThreeToneMapping(mode: NEToneMappingMode | undefined) {
36
36
  case NEToneMappingMode.KhronosNeutral:
37
37
  return NeutralToneMapping;
38
38
  default:
39
+ if(debug) console.warn("[Postprocessing] Unknown tone mapping mode", mode);
39
40
  return NeutralToneMapping;
40
41
  }
41
42
  }
@@ -84,7 +85,7 @@ export class ToneMappingEffect extends PostProcessingEffect {
84
85
  setMode(mode: NEToneMappingModeNames) {
85
86
  const enumValue = NEToneMappingMode[mode as NEToneMappingModeNames];
86
87
  if (enumValue === undefined) {
87
- console.error("Invalid ToneMapping mode", mode);
88
+ console.error("[PostProcessing] Invalid ToneMapping mode", mode);
88
89
  return this;
89
90
  }
90
91
  this.mode.value = enumValue;
@@ -110,7 +111,7 @@ export class ToneMappingEffect extends PostProcessingEffect {
110
111
  if (other === this) break;
111
112
  // If another tonemapping effect is found, warn the user
112
113
  if (other != this && other instanceof ToneMappingEffect) {
113
- console.warn("Multiple tonemapping effects found in the same postprocessing stack: Please check your scene setup.", { activeEffect: other, ignoredEffect: this });
114
+ console.warn("[PostProcessing] Multiple tonemapping effects found in the same postprocessing stack: Please check your scene setup.", { activeEffect: other, ignoredEffect: this });
114
115
  return undefined;
115
116
  }
116
117
  }
@@ -119,8 +120,9 @@ export class ToneMappingEffect extends PostProcessingEffect {
119
120
 
120
121
  // ensure the effect tonemapping value is initialized
121
122
  if (this.mode.isInitialized == false) {
122
- const init = threeToNeToneMapping(this.context.renderer.toneMapping);
123
- this.mode.initialize(init);
123
+ const mode = threeToNeToneMapping(this.context.renderer.toneMapping);
124
+ if(debug) console.log("[PostProcessing] Initializing ToneMapping mode to renderer.toneMapping", this.context.renderer.toneMapping + " → " + mode);
125
+ this.mode.initialize(mode);
124
126
  }
125
127
 
126
128
  const threeMode = toThreeToneMapping(this.mode.value);
@@ -130,9 +132,9 @@ export class ToneMappingEffect extends PostProcessingEffect {
130
132
  this.mode.onValueChanged = (newValue) => {
131
133
  const threeMode = toThreeToneMapping(newValue);
132
134
  tonemapping.mode = threeToneMappingToEffectMode(threeMode);
133
- if (debug) console.log("ToneMapping mode changed to", NEToneMappingMode[newValue], threeMode, tonemapping.mode);
135
+ if (debug) console.log("[PostProcessing] ToneMapping mode changed to", NEToneMappingMode[newValue], threeMode, tonemapping.mode);
134
136
  };
135
- if (debug) console.log("Use ToneMapping", NEToneMappingMode[this.mode.value], threeMode, tonemapping.mode, "renderer.tonemapping: " + this.context.renderer.toneMapping);
137
+ if (debug) console.log("[PostProcessing] Use ToneMapping", NEToneMappingMode[this.mode.value], threeMode, tonemapping.mode, "renderer.tonemapping: " + this.context.renderer.toneMapping);
136
138
 
137
139
 
138
140
  this.exposure.onValueChanged = (newValue) => {
@@ -103,7 +103,8 @@ export abstract class PostProcessingEffect extends Component implements IEffectP
103
103
  protected onEffectEnabled(manager?: IPostProcessingManager) {
104
104
  if (manager && manager.isPostProcessingManager === true) this._manager = manager;
105
105
  else if (!this._manager) this._manager = getPostProcessingManager(this);
106
- this._manager?.addEffect(this);
106
+ this._manager!.addEffect(this);
107
+ this._manager!.dirty = true;
107
108
  }
108
109
 
109
110
  /** override to initialize bindings on parameters */
@@ -1,5 +1,5 @@
1
1
  import type { Effect, EffectComposer, Pass, ToneMappingEffect as _TonemappingEffect } from "postprocessing";
2
- import { HalfFloatType, NoToneMapping } from "three";
2
+ import { Camera as Camera3, HalfFloatType, NoToneMapping } from "three";
3
3
 
4
4
  import { showBalloonWarning } from "../../engine/debug/index.js";
5
5
  // import { internal_SetSharpeningEffectModule } from "./Effects/Sharpening.js";
@@ -44,7 +44,7 @@ export class PostProcessingHandler {
44
44
  this.context = context;
45
45
  }
46
46
 
47
- apply(components: PostProcessingEffect[]) : Promise<void> {
47
+ apply(components: PostProcessingEffect[]): Promise<void> {
48
48
  if ("env" in import.meta && import.meta.env.VITE_NEEDLE_USE_POSTPROCESSING === "false") {
49
49
  if (debug) console.warn("Postprocessing is disabled via vite env setting");
50
50
  else console.debug("Postprocessing is disabled via vite env setting");
@@ -164,14 +164,20 @@ export class PostProcessingHandler {
164
164
  this.applyEffects(context);
165
165
  }
166
166
 
167
+ private _anyPassHasDepth = false;
168
+ private _anyPassHasNormal = false;
169
+ private _hasSmaaEffect = false;
170
+
171
+ get anyPassHasDepth() { return this._anyPassHasDepth; }
172
+ get anyPassHasNormal() { return this._anyPassHasNormal; }
173
+ get hasSmaaEffect() { return this._hasSmaaEffect; }
174
+
167
175
 
168
176
  /** Build composer passes */
169
177
  private applyEffects(context: Context) {
170
178
 
171
179
  const effectsOrPasses = this._effects;
172
-
173
180
  if (effectsOrPasses.length <= 0) return;
174
-
175
181
  const camera = context.mainCameraComponent as Camera;
176
182
  const renderer = context.renderer;
177
183
  const scene = context.scene;
@@ -182,6 +188,17 @@ export class PostProcessingHandler {
182
188
  // https://github.com/pmndrs/postprocessing/blob/271944b74b543a5b743a62803a167b60cc6bb4ee/src/core/EffectComposer.js#L230C12-L230C12
183
189
  renderer[autoclearSetting] = renderer.autoClear;
184
190
 
191
+ // Reset state
192
+ this._anyPassHasDepth = false;
193
+ this._anyPassHasNormal = false;
194
+ this._hasSmaaEffect = false;
195
+
196
+ for (const ef of effectsOrPasses) {
197
+ if (ef instanceof MODULES.POSTPROCESSING.MODULE.SMAAEffect) {
198
+ this._hasSmaaEffect = true;
199
+ }
200
+ }
201
+
185
202
  // create composer and set active on context
186
203
  if (!this._composer) {
187
204
  // const hdrRenderTarget = new WebGLRenderTarget(window.innerWidth, window.innerHeight, { type: HalfFloatType });
@@ -194,11 +211,13 @@ export class PostProcessingHandler {
194
211
  if (context.composer && context.composer !== this._composer) {
195
212
  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.");
196
213
  }
214
+
197
215
  context.composer = this._composer;
198
216
  const composer = context.composer;
199
217
  composer.setMainCamera(cam);
200
218
  composer.setRenderer(renderer);
201
219
  composer.setMainScene(scene);
220
+ 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)
202
221
 
203
222
  for (const prev of composer.passes)
204
223
  prev.dispose();
@@ -218,9 +237,11 @@ export class PostProcessingHandler {
218
237
  const effects: Array<Effect> = [];
219
238
 
220
239
  for (const ef of effectsOrPasses) {
221
- if (ef instanceof MODULES.POSTPROCESSING.MODULE.Effect)
240
+ if (ef instanceof MODULES.POSTPROCESSING.MODULE.Effect) {
222
241
  effects.push(ef as Effect);
242
+ }
223
243
  else if (ef instanceof MODULES.POSTPROCESSING.MODULE.Pass) {
244
+ ef.renderToScreen = false;
224
245
  composer.addPass(ef as Pass);
225
246
  }
226
247
  else {
@@ -233,9 +254,10 @@ export class PostProcessingHandler {
233
254
  // create and apply uber pass
234
255
  if (effects.length > 0) {
235
256
  const pass = new MODULES.POSTPROCESSING.MODULE.EffectPass(cam, ...effects);
236
- pass.name = effects.map(e => e.name).join(" ");
257
+ pass.name = effects.map(e => e.name).join(", ");
237
258
  pass.mainScene = scene;
238
259
  pass.enabled = true;
260
+ pass.renderToScreen = false;
239
261
  composer.addPass(pass);
240
262
  }
241
263
  }
@@ -255,8 +277,10 @@ export class PostProcessingHandler {
255
277
  pass.name = ef.name;
256
278
  composer.addPass(pass);
257
279
  }
258
- else if (ef instanceof MODULES.POSTPROCESSING.MODULE.Pass)
280
+ else if (ef instanceof MODULES.POSTPROCESSING.MODULE.Pass) {
281
+ ef.renderToScreen = false;
259
282
  composer.addPass(ef as Pass);
283
+ }
260
284
  else
261
285
  // seems some effects are not correctly typed, but three can deal with them,
262
286
  // so we just pass them through
@@ -264,10 +288,90 @@ export class PostProcessingHandler {
264
288
  }
265
289
  }
266
290
 
267
- if (debug) {
291
+ // 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)
292
+ for (let i = 0; i < composer.passes.length; i++) {
293
+ const pass = composer.passes[i];
294
+ const isLast = i === composer.passes.length - 1;
295
+ if ((pass as any)?.configuration !== undefined) {
296
+ (pass as any).configuration.gammaCorrection = isLast;
297
+ }
298
+ else if ("autosetGamma" in pass) {
299
+ // Some effects have a autosetGamma property that we can use to set the gamma correction
300
+ pass.autosetGamma = isLast;
301
+ }
302
+
303
+ this._anyPassHasDepth ||= pass.needsDepthTexture;
304
+ if (pass instanceof MODULES.POSTPROCESSING.MODULE.NormalPass) {
305
+ this._anyPassHasNormal = true;
306
+ }
307
+ if (pass instanceof MODULES.POSTPROCESSING.MODULE.SMAAEffect) {
308
+ this._hasSmaaEffect = true;
309
+ }
310
+ }
311
+
312
+ // DEBUG LAND BELOW
313
+ if (debug) console.log("[PostProcessing] Passes →", [...composer.passes], "\n---------------------------------\n• " + composer.passes.map(i => i.name).join("\n• ") + "\n");
314
+ if (debug) this._onCreateEffectsDebug(this._composer!, cam);
315
+ }
316
+
317
+ private orderEffects() {
318
+ if (debug === "verbose") console.debug("Before ordering effects", [...this._effects]);
319
+
320
+ // Order of effects for correct results.
321
+ // Aligned with https://github.com/pmndrs/postprocessing/wiki/Effect-Merging#effect-execution-order
322
+ // We can not put this into global scope because then the module might not yet be initialized
323
+ effectsOrder ??= [
324
+ MODULES.POSTPROCESSING.MODULE.NormalPass,
325
+ MODULES.POSTPROCESSING.MODULE.DepthDownsamplingPass,
326
+ MODULES.POSTPROCESSING.MODULE.SMAAEffect,
327
+ MODULES.POSTPROCESSING.MODULE.SSAOEffect,
328
+ MODULES.POSTPROCESSING_AO.MODULE.N8AOPostPass,
329
+ MODULES.POSTPROCESSING.MODULE.TiltShiftEffect,
330
+ MODULES.POSTPROCESSING.MODULE.DepthOfFieldEffect,
331
+ MODULES.POSTPROCESSING.MODULE.ChromaticAberrationEffect,
332
+ MODULES.POSTPROCESSING.MODULE.BloomEffect,
333
+ MODULES.POSTPROCESSING.MODULE.SelectiveBloomEffect,
334
+ MODULES.POSTPROCESSING.MODULE.VignetteEffect,
335
+ MODULES.POSTPROCESSING.MODULE.PixelationEffect,
336
+ MODULES.POSTPROCESSING.MODULE.ToneMappingEffect,
337
+ MODULES.POSTPROCESSING.MODULE.HueSaturationEffect,
338
+ MODULES.POSTPROCESSING.MODULE.BrightnessContrastEffect,
339
+ // __SHARPENING_MODULE._SharpeningEffect,
340
+ ];
341
+
342
+
343
+ // TODO: enforce correct order of effects (e.g. DOF before Bloom)
344
+ const effects = this._effects;
345
+ effects.sort((a, b) => {
346
+ // we use find index here because sometimes constructor names are prefixed with `_`
347
+ // TODO: find a more robust solution that isnt name based (not sure if that exists tho... maybe we must give effect TYPES some priority/index)
348
+ const aidx = effectsOrder!.findIndex(e => a.constructor.name.endsWith(e.name));
349
+ const bidx = effectsOrder!.findIndex(e => b.constructor.name.endsWith(e.name));
350
+ // Unknown effects should be rendered first
351
+ if (aidx < 0) {
352
+ if (debug) console.warn("Unknown effect found: ", a.constructor.name);
353
+ return -1;
354
+ }
355
+ else if (bidx < 0) {
356
+ if (debug) console.warn("Unknown effect found: ", b.constructor.name);
357
+ return 1;
358
+ }
359
+ // if (aidx < 0) return 1;
360
+ // if (bidx < 0) return -1;
361
+ return aidx - bidx;
362
+ });
363
+
364
+ if (debug === "verbose") console.debug("After ordering effects", [...this._effects]);
365
+ }
366
+
268
367
 
269
- console.log("[PostProcessing] Passes →", composer.passes);
270
368
 
369
+
370
+ private _menuEntry: HTMLSelectElement | null = null;
371
+ private _passIndices: number[] | null = null;
372
+
373
+ private _onCreateEffectsDebug(composer: EffectComposer, cam: Camera3) {
374
+ if (debug === "passes") {
271
375
  // DepthEffect for debugging purposes, disabled by default, can be selected in the debug pass select
272
376
  const depthEffect = new MODULES.POSTPROCESSING.MODULE.DepthEffect({
273
377
  blendFunction: MODULES.POSTPROCESSING.MODULE.BlendFunction.NORMAL,
@@ -303,7 +407,7 @@ export class PostProcessingHandler {
303
407
  if (menu && this._passIndices === null) {
304
408
  if (this._menuEntry)
305
409
  this._menuEntry.remove();
306
-
410
+
307
411
  const select = document.createElement("select");
308
412
  select.multiple = true;
309
413
  const defaultOpt = document.createElement("option");
@@ -327,73 +431,12 @@ export class PostProcessingHandler {
327
431
  else {
328
432
  this._passIndices = indices;
329
433
  }
330
-
331
- this.applyEffects(context);
434
+ this.applyEffects(this.context);
332
435
  });
333
436
  }
334
437
  }
335
438
  }
336
439
 
337
- private _menuEntry: HTMLSelectElement | null = null;
338
- private _passIndices: number[] | null = null;
339
-
340
- private orderEffects() {
341
- if (debug) console.log("Before ordering effects", [...this._effects]);
342
-
343
-
344
-
345
- // Order of effects for correct results.
346
- // Aligned with https://github.com/pmndrs/postprocessing/wiki/Effect-Merging#effect-execution-order
347
- // We can not put this into global scope because then the module might not yet be initialized
348
- effectsOrder ??= [
349
- MODULES.POSTPROCESSING.MODULE.NormalPass,
350
- MODULES.POSTPROCESSING.MODULE.DepthDownsamplingPass,
351
- MODULES.POSTPROCESSING.MODULE.SMAAEffect,
352
- MODULES.POSTPROCESSING.MODULE.SSAOEffect,
353
- MODULES.POSTPROCESSING_AO.MODULE.N8AOPostPass,
354
- MODULES.POSTPROCESSING.MODULE.TiltShiftEffect,
355
- MODULES.POSTPROCESSING.MODULE.DepthOfFieldEffect,
356
- MODULES.POSTPROCESSING.MODULE.ChromaticAberrationEffect,
357
- MODULES.POSTPROCESSING.MODULE.BloomEffect,
358
- MODULES.POSTPROCESSING.MODULE.SelectiveBloomEffect,
359
- MODULES.POSTPROCESSING.MODULE.VignetteEffect,
360
- MODULES.POSTPROCESSING.MODULE.PixelationEffect,
361
- MODULES.POSTPROCESSING.MODULE.ToneMappingEffect,
362
- MODULES.POSTPROCESSING.MODULE.HueSaturationEffect,
363
- MODULES.POSTPROCESSING.MODULE.BrightnessContrastEffect,
364
- // __SHARPENING_MODULE._SharpeningEffect,
365
- ];
366
-
367
-
368
- // TODO: enforce correct order of effects (e.g. DOF before Bloom)
369
- const effects = this._effects;
370
- effects.sort((a, b) => {
371
- // we use find index here because sometimes constructor names are prefixed with `_`
372
- // TODO: find a more robust solution that isnt name based (not sure if that exists tho... maybe we must give effect TYPES some priority/index)
373
- const aidx = effectsOrder!.findIndex(e => a.constructor.name.endsWith(e.name));
374
- const bidx = effectsOrder!.findIndex(e => b.constructor.name.endsWith(e.name));
375
- // Unknown effects should be rendered first
376
- if (aidx < 0) {
377
- if (debug) console.warn("Unknown effect found: ", a.constructor.name);
378
- return -1;
379
- }
380
- else if (bidx < 0) {
381
- if (debug) console.warn("Unknown effect found: ", b.constructor.name);
382
- return 1;
383
- }
384
- if (aidx < 0) return 1;
385
- if (bidx < 0) return -1;
386
- return aidx - bidx;
387
- });
388
- if (debug) console.log("After ordering effects", [...this._effects]);
389
- for (let i = 0; i < effects.length; i++) {
390
- const effect = effects[i] as any;
391
- if (effect?.configuration?.gammaCorrection !== undefined) {
392
- const isLast = i === effects.length - 1;
393
- effect.configuration.gammaCorrection = isLast;
394
- }
395
- }
396
- }
397
440
  }
398
441
 
399
442
  let effectsOrder: Array<Constructor<Effect | Pass>> | null = null;