@needle-tools/engine 4.6.1-next.1e3d612 → 4.6.1-next.2b1af6a

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/dist/{needle-engine.bundle-Dx31Hfkf.js → needle-engine.bundle-BBxAzv6J.js} +6556 -6485
  2. package/dist/{needle-engine.bundle-BYdv-DmQ.min.js → needle-engine.bundle-BwVJc8bG.min.js} +170 -158
  3. package/dist/{needle-engine.bundle-DsI9yYlp.umd.cjs → needle-engine.bundle-cvRBTPLl.umd.cjs} +173 -161
  4. package/dist/needle-engine.js +48 -48
  5. package/dist/needle-engine.min.js +1 -1
  6. package/dist/needle-engine.umd.cjs +1 -1
  7. package/lib/engine/engine_context.d.ts +2 -1
  8. package/lib/engine/engine_context.js +3 -2
  9. package/lib/engine/engine_context.js.map +1 -1
  10. package/lib/engine/engine_three_utils.d.ts +17 -14
  11. package/lib/engine/engine_three_utils.js +106 -53
  12. package/lib/engine/engine_three_utils.js.map +1 -1
  13. package/lib/engine/engine_tonemapping.d.ts +4 -0
  14. package/lib/engine/engine_tonemapping.js +21 -18
  15. package/lib/engine/engine_tonemapping.js.map +1 -1
  16. package/lib/engine/engine_utils.js.map +1 -1
  17. package/lib/engine/webcomponents/needle-engine.d.ts +4 -1
  18. package/lib/engine/webcomponents/needle-engine.extras.js +3 -3
  19. package/lib/engine/webcomponents/needle-engine.extras.js.map +1 -1
  20. package/lib/engine/webcomponents/needle-engine.js +11 -21
  21. package/lib/engine/webcomponents/needle-engine.js.map +1 -1
  22. package/lib/engine-components/CameraUtils.js.map +1 -1
  23. package/lib/engine-components/postprocessing/Effects/BloomEffect.d.ts +1 -1
  24. package/lib/engine-components/postprocessing/Effects/BloomEffect.js +2 -2
  25. package/lib/engine-components/postprocessing/Effects/ColorAdjustments.d.ts +8 -0
  26. package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js +27 -8
  27. package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js.map +1 -1
  28. package/lib/engine-components/postprocessing/Effects/Sharpening.d.ts +1 -1
  29. package/lib/engine-components/postprocessing/Effects/Sharpening.js +2 -2
  30. package/lib/engine-components/postprocessing/Effects/Sharpening.js.map +1 -1
  31. package/lib/engine-components/postprocessing/Effects/Tonemapping.d.ts +2 -9
  32. package/lib/engine-components/postprocessing/Effects/Tonemapping.js +22 -57
  33. package/lib/engine-components/postprocessing/Effects/Tonemapping.js.map +1 -1
  34. package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.d.ts +13 -0
  35. package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.js +52 -0
  36. package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.js.map +1 -0
  37. package/lib/engine-components/postprocessing/PostProcessingEffect.d.ts +7 -7
  38. package/lib/engine-components/postprocessing/PostProcessingEffect.js +7 -7
  39. package/lib/engine-components/postprocessing/PostProcessingEffect.js.map +1 -1
  40. package/lib/engine-components/postprocessing/PostProcessingHandler.d.ts +6 -1
  41. package/lib/engine-components/postprocessing/PostProcessingHandler.js +107 -16
  42. package/lib/engine-components/postprocessing/PostProcessingHandler.js.map +1 -1
  43. package/lib/engine-components/postprocessing/Volume.js +19 -24
  44. package/lib/engine-components/postprocessing/Volume.js.map +1 -1
  45. package/lib/engine-components/postprocessing/index.d.ts +1 -1
  46. package/lib/engine-components/postprocessing/index.js +1 -1
  47. package/lib/engine-components/postprocessing/index.js.map +1 -1
  48. package/lib/engine-components/postprocessing/utils.d.ts +6 -6
  49. package/lib/engine-components/postprocessing/utils.js +26 -25
  50. package/lib/engine-components/postprocessing/utils.js.map +1 -1
  51. package/package.json +1 -1
  52. package/src/engine/engine_context.ts +5 -3
  53. package/src/engine/engine_three_utils.ts +134 -58
  54. package/src/engine/engine_tonemapping.ts +23 -24
  55. package/src/engine/engine_utils.ts +2 -2
  56. package/src/engine/webcomponents/needle-engine.extras.ts +3 -3
  57. package/src/engine/webcomponents/needle-engine.ts +14 -25
  58. package/src/engine-components/CameraUtils.ts +3 -3
  59. package/src/engine-components/postprocessing/Effects/BloomEffect.ts +2 -2
  60. package/src/engine-components/postprocessing/Effects/ColorAdjustments.ts +24 -13
  61. package/src/engine-components/postprocessing/Effects/Sharpening.ts +2 -2
  62. package/src/engine-components/postprocessing/Effects/Tonemapping.ts +24 -66
  63. package/src/engine-components/postprocessing/Effects/Tonemapping.utils.ts +60 -0
  64. package/src/engine-components/postprocessing/PostProcessingEffect.ts +7 -7
  65. package/src/engine-components/postprocessing/PostProcessingHandler.ts +122 -20
  66. package/src/engine-components/postprocessing/Volume.ts +19 -26
  67. package/src/engine-components/postprocessing/index.ts +1 -1
  68. package/src/engine-components/postprocessing/utils.ts +27 -26
@@ -9,7 +9,7 @@ import { Uniform } from "three";
9
9
  import { MODULES } from "../../../engine/engine_modules.js";
10
10
  import { serializable } from "../../../engine/engine_serialization.js";
11
11
  import { PostProcessingEffect } from "../PostProcessingEffect.js";
12
- import { PostProcessingEffectPriority } from "../utils.js";
12
+ import { PostProcessingEffectOrder } from "../utils.js";
13
13
  // import type { createSharpeningEffectType } from "./Sharpening.effect";
14
14
  // let __SHARPENING_MODULE: typeof import("./Sharpening.effect");
15
15
  // /** @hidden */
@@ -24,7 +24,7 @@ export class SharpeningEffect extends PostProcessingEffect {
24
24
  get typeName() {
25
25
  return "Sharpening";
26
26
  }
27
- priority = PostProcessingEffectPriority.Sharpening;
27
+ order = PostProcessingEffectOrder.Sharpening;
28
28
  _effect;
29
29
  onCreateEffect() {
30
30
  this._effect ??= new (createSharpeningEffectType())();
@@ -1 +1 @@
1
- {"version":3,"file":"Sharpening.js","sourceRoot":"","sources":["../../../../src/engine-components/postprocessing/Effects/Sharpening.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAC3D,yEAAyE;AAEzE,iEAAiE;AACjE,iBAAiB;AACjB,qGAAqG;AACrG,oCAAoC;AACpC,IAAI;AAEJ;;;GAGG;AACH,MAAM,OAAO,gBAAiB,SAAQ,oBAAoB;IAEtD,IAAI,QAAQ;QACR,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,QAAQ,GAAuB,4BAA4B,CAAC,UAAU,CAAC;IAE/D,OAAO,CAAO;IAEtB,cAAc;QACV,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,0BAA0B,EAAE,CAAC,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,IAAY,MAAM;QACd,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAGD,IAAI,MAAM,CAAC,KAAa;QACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,CAAC,OAAO;YACZ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,KAAK,GAAG,KAAK,CAAC;IAC3D,CAAC;IACD,IAAI,MAAM;QACN,IAAI,IAAI,CAAC,OAAO;YACZ,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,KAAK,CAAC;QACtD,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IACO,OAAO,GAAG,CAAC,CAAC;IAGpB,IAAI,MAAM,CAAC,KAAa;QACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,CAAC,OAAO;YACZ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,KAAK,GAAG,KAAK,CAAC;IAC3D,CAAC;IACD,IAAI,MAAM;QACN,IAAI,IAAI,CAAC,OAAO;YACZ,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,KAAK,CAAC;QACtD,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IACO,OAAO,GAAG,CAAC,CAAC;CAUvB;AAjCG;IADC,YAAY,EAAE;8CAKd;AASD;IADC,YAAY,EAAE;8CAKd;AAoBL,SAAS,0BAA0B;IAE/B,MAAM,IAAI,GAAG;;;;;KAKZ,CAAA;IAED,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAuCZ,CAAA;IAED,MAAM,iBAAkB,SAAQ,OAAO,CAAC,cAAc,CAAC,MAAO,CAAC,MAAM;QACjE;YACI,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE;gBACtB,YAAY,EAAE,IAAI;gBAClB,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM;gBACjE,QAAQ,EAAE,IAAI,GAAG,CAAuB;oBACpC,CAAC,QAAQ,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC1B,CAAC,QAAQ,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC1B,iCAAiC;iBACpC,CAAC;gBACF,UAAU,EAAE,eAAe,CAAC,WAAW;aAC1C,CAAC,CAAC;QACP,CAAC;KACJ;IACD,OAAO,iBAAiB,CAAC;AAG7B,CAAC"}
1
+ {"version":3,"file":"Sharpening.js","sourceRoot":"","sources":["../../../../src/engine-components/postprocessing/Effects/Sharpening.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,yEAAyE;AAEzE,iEAAiE;AACjE,iBAAiB;AACjB,qGAAqG;AACrG,oCAAoC;AACpC,IAAI;AAEJ;;;GAGG;AACH,MAAM,OAAO,gBAAiB,SAAQ,oBAAoB;IAEtD,IAAI,QAAQ;QACR,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,KAAK,GAAuB,yBAAyB,CAAC,UAAU,CAAC;IAEzD,OAAO,CAAO;IAEtB,cAAc;QACV,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,0BAA0B,EAAE,CAAC,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,IAAY,MAAM;QACd,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAGD,IAAI,MAAM,CAAC,KAAa;QACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,CAAC,OAAO;YACZ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,KAAK,GAAG,KAAK,CAAC;IAC3D,CAAC;IACD,IAAI,MAAM;QACN,IAAI,IAAI,CAAC,OAAO;YACZ,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,KAAK,CAAC;QACtD,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IACO,OAAO,GAAG,CAAC,CAAC;IAGpB,IAAI,MAAM,CAAC,KAAa;QACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,CAAC,OAAO;YACZ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,KAAK,GAAG,KAAK,CAAC;IAC3D,CAAC;IACD,IAAI,MAAM;QACN,IAAI,IAAI,CAAC,OAAO;YACZ,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,KAAK,CAAC;QACtD,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IACO,OAAO,GAAG,CAAC,CAAC;CAUvB;AAjCG;IADC,YAAY,EAAE;8CAKd;AASD;IADC,YAAY,EAAE;8CAKd;AAoBL,SAAS,0BAA0B;IAE/B,MAAM,IAAI,GAAG;;;;;KAKZ,CAAA;IAED,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAuCZ,CAAA;IAED,MAAM,iBAAkB,SAAQ,OAAO,CAAC,cAAc,CAAC,MAAO,CAAC,MAAM;QACjE;YACI,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE;gBACtB,YAAY,EAAE,IAAI;gBAClB,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM;gBACjE,QAAQ,EAAE,IAAI,GAAG,CAAuB;oBACpC,CAAC,QAAQ,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC1B,CAAC,QAAQ,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC1B,iCAAiC;iBACpC,CAAC;gBACF,UAAU,EAAE,eAAe,CAAC,WAAW;aAC1C,CAAC,CAAC;QACP,CAAC;KACJ;IACD,OAAO,iBAAiB,CAAC;AAG7B,CAAC"}
@@ -1,13 +1,6 @@
1
1
  import { EffectProviderResult, PostProcessingEffect } from "../PostProcessingEffect.js";
2
2
  import { VolumeParameter } from "../VolumeParameter.js";
3
- declare enum NEToneMappingMode {
4
- None = 0,
5
- Neutral = 1,
6
- ACES = 2,
7
- AgX = 3,
8
- KhronosNeutral = 4
9
- }
10
- type NEToneMappingModeNames = keyof typeof NEToneMappingMode;
3
+ import { NEToneMappingModeNames } from "./Tonemapping.utils.js";
11
4
  /**
12
5
  * @category Effects
13
6
  * @group Components
@@ -20,7 +13,7 @@ export declare class ToneMappingEffect extends PostProcessingEffect {
20
13
  setMode(mode: NEToneMappingModeNames): this;
21
14
  get isToneMapping(): boolean;
22
15
  onEffectEnabled(): void;
16
+ private _didCreateEffect;
23
17
  onCreateEffect(): EffectProviderResult | undefined;
24
18
  onBeforeRender(): void;
25
19
  }
26
- export {};
@@ -4,61 +4,16 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
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
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { ACESFilmicToneMapping, AgXToneMapping, LinearToneMapping, NeutralToneMapping, ReinhardToneMapping } from "three";
8
7
  import { MODULES } from "../../../engine/engine_modules.js";
9
8
  import { serializable } from "../../../engine/engine_serialization.js";
9
+ import { nameToThreeTonemapping } from "../../../engine/engine_tonemapping.js";
10
10
  import { getParam } from "../../../engine/engine_utils.js";
11
11
  import { PostProcessingEffect } from "../PostProcessingEffect.js";
12
12
  import { findPostProcessingManager } from "../utils.js";
13
13
  import { VolumeParameter } from "../VolumeParameter.js";
14
14
  import { registerCustomEffectType } from "../VolumeProfile.js";
15
+ import { NEToneMappingMode, threeToNeedleToneMapping, threeToneMappingToEffectMode, toThreeToneMapping } from "./Tonemapping.utils.js";
15
16
  const debug = getParam("debugpost");
16
- var NEToneMappingMode;
17
- (function (NEToneMappingMode) {
18
- NEToneMappingMode[NEToneMappingMode["None"] = 0] = "None";
19
- NEToneMappingMode[NEToneMappingMode["Neutral"] = 1] = "Neutral";
20
- NEToneMappingMode[NEToneMappingMode["ACES"] = 2] = "ACES";
21
- NEToneMappingMode[NEToneMappingMode["AgX"] = 3] = "AgX";
22
- NEToneMappingMode[NEToneMappingMode["KhronosNeutral"] = 4] = "KhronosNeutral";
23
- })(NEToneMappingMode || (NEToneMappingMode = {}));
24
- function toThreeToneMapping(mode) {
25
- switch (mode) {
26
- case NEToneMappingMode.None:
27
- return LinearToneMapping;
28
- case NEToneMappingMode.Neutral:
29
- return ReinhardToneMapping;
30
- case NEToneMappingMode.ACES:
31
- return ACESFilmicToneMapping;
32
- case NEToneMappingMode.AgX:
33
- return AgXToneMapping;
34
- case NEToneMappingMode.KhronosNeutral:
35
- return NeutralToneMapping;
36
- default:
37
- if (debug)
38
- console.warn("[Postprocessing] Unknown tone mapping mode", mode);
39
- return NeutralToneMapping;
40
- }
41
- }
42
- function threeToNeToneMapping(mode) {
43
- switch (mode) {
44
- case LinearToneMapping: return NEToneMappingMode.None;
45
- case ACESFilmicToneMapping: return NEToneMappingMode.ACES;
46
- case AgXToneMapping: return NEToneMappingMode.AgX;
47
- case NeutralToneMapping: return NEToneMappingMode.Neutral;
48
- case ReinhardToneMapping: return NEToneMappingMode.Neutral;
49
- default: return NEToneMappingMode.None;
50
- }
51
- }
52
- function threeToneMappingToEffectMode(mode) {
53
- switch (mode) {
54
- case LinearToneMapping: return MODULES.POSTPROCESSING.MODULE.ToneMappingMode.LINEAR;
55
- case ACESFilmicToneMapping: return MODULES.POSTPROCESSING.MODULE.ToneMappingMode.ACES_FILMIC;
56
- case AgXToneMapping: return MODULES.POSTPROCESSING.MODULE.ToneMappingMode.AGX;
57
- case NeutralToneMapping: return MODULES.POSTPROCESSING.MODULE.ToneMappingMode.NEUTRAL;
58
- case ReinhardToneMapping: return MODULES.POSTPROCESSING.MODULE.ToneMappingMode.REINHARD;
59
- default: return MODULES.POSTPROCESSING.MODULE.ToneMappingMode.LINEAR;
60
- }
61
- }
62
17
  /**
63
18
  * @category Effects
64
19
  * @group Components
@@ -88,6 +43,7 @@ export class ToneMappingEffect extends PostProcessingEffect {
88
43
  return;
89
44
  super.onEffectEnabled(ppmanager);
90
45
  }
46
+ _didCreateEffect = false;
91
47
  onCreateEffect() {
92
48
  // TODO: this should be done in the PostProcessingHandler
93
49
  if (this.postprocessingContext) {
@@ -102,9 +58,10 @@ export class ToneMappingEffect extends PostProcessingEffect {
102
58
  }
103
59
  }
104
60
  }
61
+ this._didCreateEffect = true;
105
62
  // ensure the effect tonemapping value is initialized
106
63
  if (this.mode.isInitialized == false) {
107
- const mode = threeToNeToneMapping(this.context.renderer.toneMapping);
64
+ const mode = threeToNeedleToneMapping(this.context.renderer.toneMapping);
108
65
  if (debug)
109
66
  console.log("[PostProcessing] Initializing ToneMapping mode to renderer.toneMapping", this.context.renderer.toneMapping + " → " + mode);
110
67
  this.mode.initialize(mode);
@@ -114,23 +71,31 @@ export class ToneMappingEffect extends PostProcessingEffect {
114
71
  mode: threeToneMappingToEffectMode(threeMode),
115
72
  });
116
73
  this.mode.onValueChanged = (newValue) => {
117
- const threeMode = toThreeToneMapping(newValue);
118
- tonemapping.mode = threeToneMappingToEffectMode(threeMode);
74
+ if (typeof newValue === "string") {
75
+ newValue = nameToThreeTonemapping(newValue);
76
+ tonemapping.mode = threeToneMappingToEffectMode(newValue);
77
+ }
78
+ else {
79
+ const threeMode = toThreeToneMapping(newValue);
80
+ tonemapping.mode = threeToneMappingToEffectMode(threeMode);
81
+ }
82
+ tonemapping.name = "ToneMapping (" + NEToneMappingMode[newValue] + ")";
119
83
  if (debug)
120
84
  console.log("[PostProcessing] ToneMapping mode changed to", NEToneMappingMode[newValue], threeMode, tonemapping.mode);
121
85
  };
122
86
  if (debug)
123
87
  console.log("[PostProcessing] Use ToneMapping", NEToneMappingMode[this.mode.value], threeMode, tonemapping.mode, "renderer.tonemapping: " + this.context.renderer.toneMapping);
124
- this.exposure.onValueChanged = (newValue) => {
125
- this.context.renderer.toneMappingExposure = newValue;
126
- };
127
88
  return tonemapping;
128
89
  }
129
90
  onBeforeRender() {
130
- if (this.mode.overrideState)
131
- this.context.renderer.toneMapping = toThreeToneMapping(this.mode.value);
132
- if (this.exposure.overrideState && this.exposure.value !== undefined)
133
- this.context.renderer.toneMappingExposure = this.exposure.value;
91
+ if (this._didCreateEffect) {
92
+ if (this.mode.overrideState)
93
+ this.context.renderer.toneMapping = toThreeToneMapping(this.mode.value);
94
+ if (this.exposure.overrideState && this.exposure.value !== undefined) {
95
+ const newValue = Math.max(0.01, this.exposure.value);
96
+ this.context.renderer.toneMappingExposure = newValue;
97
+ }
98
+ }
134
99
  }
135
100
  }
136
101
  __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"Tonemapping.js","sourceRoot":"","sources":["../../../../src/engine-components/postprocessing/Effects/Tonemapping.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Tonemapping.js","sourceRoot":"","sources":["../../../../src/engine-components/postprocessing/Effects/Tonemapping.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { ToneMappingMode } from "postprocessing";
2
+ import { ToneMapping } from "three";
3
+ export declare enum NEToneMappingMode {
4
+ None = 0,
5
+ Neutral = 1,
6
+ ACES = 2,
7
+ AgX = 3,
8
+ KhronosNeutral = 4
9
+ }
10
+ export type NEToneMappingModeNames = keyof typeof NEToneMappingMode;
11
+ export declare function toThreeToneMapping(mode: NEToneMappingMode | undefined): 1 | 2 | 4 | 6 | 7;
12
+ export declare function threeToNeedleToneMapping(mode: ToneMapping | number | undefined): NEToneMappingMode;
13
+ export declare function threeToneMappingToEffectMode(mode: number | undefined): ToneMappingMode;
@@ -0,0 +1,52 @@
1
+ import { ACESFilmicToneMapping, AgXToneMapping, LinearToneMapping, NeutralToneMapping, ReinhardToneMapping } from "three";
2
+ import { MODULES } from "../../../engine/engine_modules.js";
3
+ export var NEToneMappingMode;
4
+ (function (NEToneMappingMode) {
5
+ NEToneMappingMode[NEToneMappingMode["None"] = 0] = "None";
6
+ NEToneMappingMode[NEToneMappingMode["Neutral"] = 1] = "Neutral";
7
+ NEToneMappingMode[NEToneMappingMode["ACES"] = 2] = "ACES";
8
+ NEToneMappingMode[NEToneMappingMode["AgX"] = 3] = "AgX";
9
+ NEToneMappingMode[NEToneMappingMode["KhronosNeutral"] = 4] = "KhronosNeutral";
10
+ })(NEToneMappingMode || (NEToneMappingMode = {}));
11
+ const unknownTonemappingWarning = new Map();
12
+ export function toThreeToneMapping(mode) {
13
+ switch (mode) {
14
+ case NEToneMappingMode.None:
15
+ return LinearToneMapping;
16
+ case NEToneMappingMode.Neutral:
17
+ return ReinhardToneMapping;
18
+ case NEToneMappingMode.ACES:
19
+ return ACESFilmicToneMapping;
20
+ case NEToneMappingMode.AgX:
21
+ return AgXToneMapping;
22
+ case NEToneMappingMode.KhronosNeutral:
23
+ return NeutralToneMapping;
24
+ default:
25
+ if (!unknownTonemappingWarning.has(mode)) {
26
+ unknownTonemappingWarning.set(mode, true);
27
+ console.warn("[Postprocessing] Unknown tone mapping mode", mode);
28
+ }
29
+ return NeutralToneMapping;
30
+ }
31
+ }
32
+ export function threeToNeedleToneMapping(mode) {
33
+ switch (mode) {
34
+ case LinearToneMapping: return NEToneMappingMode.None;
35
+ case ACESFilmicToneMapping: return NEToneMappingMode.ACES;
36
+ case AgXToneMapping: return NEToneMappingMode.AgX;
37
+ case NeutralToneMapping: return NEToneMappingMode.Neutral;
38
+ case ReinhardToneMapping: return NEToneMappingMode.Neutral;
39
+ default: return NEToneMappingMode.None;
40
+ }
41
+ }
42
+ export function threeToneMappingToEffectMode(mode) {
43
+ switch (mode) {
44
+ case LinearToneMapping: return MODULES.POSTPROCESSING.MODULE.ToneMappingMode.LINEAR;
45
+ case ACESFilmicToneMapping: return MODULES.POSTPROCESSING.MODULE.ToneMappingMode.ACES_FILMIC;
46
+ case AgXToneMapping: return MODULES.POSTPROCESSING.MODULE.ToneMappingMode.AGX;
47
+ case NeutralToneMapping: return MODULES.POSTPROCESSING.MODULE.ToneMappingMode.NEUTRAL;
48
+ case ReinhardToneMapping: return MODULES.POSTPROCESSING.MODULE.ToneMappingMode.REINHARD;
49
+ default: return MODULES.POSTPROCESSING.MODULE.ToneMappingMode.LINEAR;
50
+ }
51
+ }
52
+ //# sourceMappingURL=Tonemapping.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tonemapping.utils.js","sourceRoot":"","sources":["../../../../src/engine-components/postprocessing/Effects/Tonemapping.utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAAe,MAAM,OAAO,CAAC;AAEvI,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAE5D,MAAM,CAAN,IAAY,iBAMX;AAND,WAAY,iBAAiB;IACzB,yDAAQ,CAAA;IACR,+DAAW,CAAA;IACX,yDAAQ,CAAA;IACR,uDAAO,CAAA;IACP,6EAAkB,CAAA;AACtB,CAAC,EANW,iBAAiB,KAAjB,iBAAiB,QAM5B;AAGD,MAAM,yBAAyB,GAAG,IAAI,GAAG,EAAgB,CAAC;AAE1D,MAAM,UAAU,kBAAkB,CAAC,IAAmC;IAClE,QAAQ,IAAI,EAAE;QACV,KAAK,iBAAiB,CAAC,IAAI;YACvB,OAAO,iBAAiB,CAAC;QAC7B,KAAK,iBAAiB,CAAC,OAAO;YAC1B,OAAO,mBAAmB,CAAC;QAC/B,KAAK,iBAAiB,CAAC,IAAI;YACvB,OAAO,qBAAqB,CAAC;QACjC,KAAK,iBAAiB,CAAC,GAAG;YACtB,OAAO,cAAc,CAAC;QAC1B,KAAK,iBAAiB,CAAC,cAAc;YACjC,OAAO,kBAAkB,CAAC;QAC9B;YACI,IAAG,CAAC,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACrC,yBAAyB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,IAAI,CAAC,CAAC;aACpE;YACD,OAAO,kBAAkB,CAAC;KACjC;AACL,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAsC;IAC3E,QAAQ,IAAI,EAAE;QACV,KAAK,iBAAiB,CAAC,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC;QACtD,KAAK,qBAAqB,CAAC,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC;QAC1D,KAAK,cAAc,CAAC,CAAC,OAAO,iBAAiB,CAAC,GAAG,CAAC;QAClD,KAAK,kBAAkB,CAAC,CAAC,OAAO,iBAAiB,CAAC,OAAO,CAAC;QAC1D,KAAK,mBAAmB,CAAC,CAAC,OAAO,iBAAiB,CAAC,OAAO,CAAC;QAC3D,OAAO,CAAC,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC;KAC1C;AAEL,CAAC;AAGD,MAAM,UAAU,4BAA4B,CAAC,IAAwB;IACjE,QAAQ,IAAI,EAAE;QACV,KAAK,iBAAiB,CAAC,CAAC,OAAO,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC;QACpF,KAAK,qBAAqB,CAAC,CAAC,OAAO,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC;QAC7F,KAAK,cAAc,CAAC,CAAC,OAAO,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC;QAC9E,KAAK,kBAAkB,CAAC,CAAC,OAAO,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC;QACtF,KAAK,mBAAmB,CAAC,CAAC,OAAO,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC;QACxF,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC;KACxE;AACL,CAAC"}
@@ -44,23 +44,23 @@ export interface IEffectProvider {
44
44
  export declare abstract class PostProcessingEffect extends Component implements IEffectProvider, IEditorModification {
45
45
  get isPostProcessingEffect(): boolean;
46
46
  /**
47
- * The priority of this effect. The higher the priority the later the effect will be applied in the post processing stack.
47
+ * The order of this effect. The higher the order the later the effect will be applied in the post processing stack.
48
48
  * This can be used to control the order of effects when multiple effects are applied.
49
- * It is recommended to use the PostProcessingEffectPriority constant to order your custom effects before or after built-in effects.
50
- * @default `undefined` (no specific priority set, will be applied in the order of registration)
49
+ * It is recommended to use the PostProcessingEffectOrder constant to order your custom effects before or after built-in effects.
50
+ * @default `undefined` (no specific order set, will be applied in the order of registration)
51
51
  *
52
52
  * @example
53
53
  * ```typescript
54
- * import { PostProcessingEffectPriority } from "@needle-tools/engine"
54
+ * import { PostProcessingEffectOrder } from "@needle-tools/engine"
55
55
  *
56
56
  * export class MyCustomEffect extends PostProcessingEffect {
57
- * priority: PostProcessingEffectPriority.Bloom + 1; // render after bloom
58
- *
57
+ * order: PostProcessingEffectOrder.Bloom + 1; // render after bloom
58
+ * // This will ensure that the effect is applied after the bloom effect in the post processing stack.
59
59
  * // ... the rest of your effect code
60
60
  * }
61
61
  * ```
62
62
  */
63
- priority: number | undefined;
63
+ order: number | undefined;
64
64
  constructor(params?: any);
65
65
  abstract get typeName(): string;
66
66
  /**
@@ -42,23 +42,23 @@ const debug = getParam("debugpost");
42
42
  export class PostProcessingEffect extends Component {
43
43
  get isPostProcessingEffect() { return true; }
44
44
  /**
45
- * The priority of this effect. The higher the priority the later the effect will be applied in the post processing stack.
45
+ * The order of this effect. The higher the order the later the effect will be applied in the post processing stack.
46
46
  * This can be used to control the order of effects when multiple effects are applied.
47
- * It is recommended to use the PostProcessingEffectPriority constant to order your custom effects before or after built-in effects.
48
- * @default `undefined` (no specific priority set, will be applied in the order of registration)
47
+ * It is recommended to use the PostProcessingEffectOrder constant to order your custom effects before or after built-in effects.
48
+ * @default `undefined` (no specific order set, will be applied in the order of registration)
49
49
  *
50
50
  * @example
51
51
  * ```typescript
52
- * import { PostProcessingEffectPriority } from "@needle-tools/engine"
52
+ * import { PostProcessingEffectOrder } from "@needle-tools/engine"
53
53
  *
54
54
  * export class MyCustomEffect extends PostProcessingEffect {
55
- * priority: PostProcessingEffectPriority.Bloom + 1; // render after bloom
56
- *
55
+ * order: PostProcessingEffectOrder.Bloom + 1; // render after bloom
56
+ * // This will ensure that the effect is applied after the bloom effect in the post processing stack.
57
57
  * // ... the rest of your effect code
58
58
  * }
59
59
  * ```
60
60
  */
61
- priority = undefined;
61
+ order = undefined;
62
62
  constructor(params = undefined) {
63
63
  super();
64
64
  if (params) {
@@ -1 +1 @@
1
- {"version":3,"file":"PostProcessingEffect.js","sourceRoot":"","sources":["../../../src/engine-components/postprocessing/PostProcessingEffect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PostProcessingEffect.js","sourceRoot":"","sources":["../../../src/engine-components/postprocessing/PostProcessingEffect.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { EffectComposer } from "postprocessing";
1
+ import { EffectComposer } from "postprocessing";
2
2
  import { Context } from "../../engine/engine_setup.js";
3
3
  import { PostProcessingEffect } from "./PostProcessingEffect.js";
4
4
  /**
@@ -23,6 +23,11 @@ export declare class PostProcessingHandler {
23
23
  get anyPassHasDepth(): boolean;
24
24
  get anyPassHasNormal(): boolean;
25
25
  get hasSmaaEffect(): boolean;
26
+ private _customInputBuffer;
27
+ private _customInputBufferId;
28
+ private _multisampling;
29
+ set multisampling(value: number);
30
+ get multisampling(): number;
26
31
  /** Build composer passes */
27
32
  private applyEffects;
28
33
  /** Should be called before `composer.addPass()` to create an effect pass with all previously collected effects that can be merged up to that point */
@@ -1,13 +1,16 @@
1
- import { HalfFloatType, NoToneMapping } from "three";
1
+ import { DepthTexture, HalfFloatType, LinearFilter, NoToneMapping, WebGLRenderTarget } from "three";
2
2
  import { showBalloonWarning } from "../../engine/debug/index.js";
3
3
  // import { internal_SetSharpeningEffectModule } from "./Effects/Sharpening.js";
4
4
  import { MODULES } from "../../engine/engine_modules.js";
5
+ import { Graphics } from "../../engine/engine_three_utils.js";
5
6
  import { getParam } from "../../engine/engine_utils.js";
6
- import { orderEffects } from "./utils.js";
7
+ import { threeToneMappingToEffectMode } from "./Effects/Tonemapping.utils.js";
8
+ import { orderEffects, PostProcessingEffectOrder } from "./utils.js";
7
9
  globalThis["NEEDLE_USE_POSTPROCESSING"] = globalThis["NEEDLE_USE_POSTPROCESSING"] !== undefined ? globalThis["NEEDLE_USE_POSTPROCESSING"] : true;
8
10
  const debug = getParam("debugpost");
9
11
  const activeKey = Symbol("needle:postprocessing-handler");
10
12
  const autoclearSetting = Symbol("needle:previous-autoclear-state");
13
+ const previousToneMapping = Symbol("needle:previous-tone-mapping");
11
14
  /**
12
15
  * PostProcessingHandler is responsible for applying post processing effects to the scene. It is internally used by the {@link Volume} component
13
16
  */
@@ -62,6 +65,9 @@ export class PostProcessingHandler {
62
65
  if (typeof context.renderer[autoclearSetting] === "boolean") {
63
66
  context.renderer.autoClear = context.renderer[autoclearSetting];
64
67
  }
68
+ if (typeof context.renderer[previousToneMapping] === "number") {
69
+ context.renderer.toneMapping = context.renderer[previousToneMapping];
70
+ }
65
71
  }
66
72
  this._composer?.removeAllPasses();
67
73
  if (dispose)
@@ -124,14 +130,14 @@ export class PostProcessingHandler {
124
130
  for (const effect of res) {
125
131
  this._effects.push({
126
132
  effect,
127
- priority: component.priority
133
+ priority: component.order
128
134
  });
129
135
  }
130
136
  }
131
137
  else {
132
138
  this._effects.push({
133
139
  effect: res,
134
- priority: component.priority
140
+ priority: component.order
135
141
  });
136
142
  }
137
143
  }
@@ -141,13 +147,6 @@ export class PostProcessingHandler {
141
147
  showBalloonWarning("Volume component is not a VolumeComponent: " + component["__type"]);
142
148
  }
143
149
  }
144
- // Ensure that we have a tonemapping effect if the renderer is set to use a tone mapping
145
- if (this.context.renderer.toneMapping != NoToneMapping) {
146
- if (!this._effects.find(e => e instanceof MODULES.POSTPROCESSING.MODULE.ToneMappingEffect)) {
147
- const tonemapping = new MODULES.POSTPROCESSING.MODULE.ToneMappingEffect();
148
- this._effects.push({ effect: tonemapping });
149
- }
150
- }
151
150
  this.applyEffects(context);
152
151
  }
153
152
  _anyPassHasDepth = false;
@@ -156,14 +155,22 @@ export class PostProcessingHandler {
156
155
  get anyPassHasDepth() { return this._anyPassHasDepth; }
157
156
  get anyPassHasNormal() { return this._anyPassHasNormal; }
158
157
  get hasSmaaEffect() { return this._hasSmaaEffect; }
158
+ _customInputBuffer = null;
159
+ _customInputBufferId = 0;
160
+ _multisampling = 0;
161
+ set multisampling(value) {
162
+ this._multisampling = value;
163
+ }
164
+ get multisampling() {
165
+ return this._multisampling;
166
+ }
159
167
  /** Build composer passes */
160
168
  applyEffects(context) {
161
169
  // Reset state
162
170
  this._anyPassHasDepth = false;
163
171
  this._anyPassHasNormal = false;
164
172
  this._hasSmaaEffect = false;
165
- const effectsOrPasses = this._effects;
166
- if (effectsOrPasses.length <= 0) {
173
+ if (this._effects.length <= 0) {
167
174
  return;
168
175
  }
169
176
  const camera = context.mainCameraComponent;
@@ -178,6 +185,19 @@ export class PostProcessingHandler {
178
185
  renderer.autoClear = renderer[autoclearSetting];
179
186
  }
180
187
  renderer[autoclearSetting] = renderer.autoClear;
188
+ if (typeof renderer[previousToneMapping] === "number") {
189
+ renderer.toneMapping = renderer[previousToneMapping];
190
+ }
191
+ renderer[previousToneMapping] = renderer.toneMapping;
192
+ // Ensure that we have a tonemapping effect if the renderer is set to use a tone mapping
193
+ if (renderer.toneMapping != NoToneMapping) {
194
+ if (!this._effects.find(e => e instanceof MODULES.POSTPROCESSING.MODULE.ToneMappingEffect)) {
195
+ const tonemapping = new MODULES.POSTPROCESSING.MODULE.ToneMappingEffect();
196
+ tonemapping.name = `ToneMapping (${renderer.toneMapping})`;
197
+ tonemapping.mode = threeToneMappingToEffectMode(renderer.toneMapping);
198
+ this._effects.push({ effect: tonemapping, priority: PostProcessingEffectOrder.ToneMapping });
199
+ }
200
+ }
181
201
  // create composer and set active on context
182
202
  if (!this._composer) {
183
203
  // const hdrRenderTarget = new WebGLRenderTarget(window.innerWidth, window.innerHeight, { type: HalfFloatType });
@@ -195,20 +215,77 @@ export class PostProcessingHandler {
195
215
  composer.setRenderer(renderer);
196
216
  composer.setMainScene(scene);
197
217
  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)
198
- composer.multisampling = 0;
218
+ composer.multisampling = 0; // Disable multisampling by default
199
219
  for (const prev of composer.passes)
200
220
  prev.dispose();
201
221
  composer.removeAllPasses();
202
222
  // Render to screen pass
203
223
  const screenpass = new MODULES.POSTPROCESSING.MODULE.RenderPass(scene, cam);
204
- screenpass.name = "Render To Screen";
224
+ screenpass.name = "RenderPass";
205
225
  screenpass.mainScene = scene;
206
226
  composer.addPass(screenpass);
227
+ const screenPassRender = screenpass.render;
228
+ this._customInputBuffer?.dispose();
229
+ this._customInputBuffer = null;
230
+ screenpass.render = (renderer, inputBuffer, outputBuffer, deltaTime, stencilTest) => {
231
+ if (!inputBuffer)
232
+ return;
233
+ // screenPassRender.call(screenpass, renderer, inputBuffer, outputBuffer, deltaTime, stencilTest);
234
+ // return;
235
+ // 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
236
+ inputBuffer.samples = 0;
237
+ if (outputBuffer) {
238
+ outputBuffer.samples = 0;
239
+ }
240
+ // Make sure the input buffer is a WebGLRenderTarget with the correct settings
241
+ if (!this._customInputBuffer
242
+ || this._customInputBuffer.width !== inputBuffer.width
243
+ || this._customInputBuffer.height !== inputBuffer.height
244
+ || this._customInputBuffer.samples !== this._multisampling
245
+ || this._customInputBuffer.texture.format !== inputBuffer.texture.format
246
+ || this._customInputBuffer.texture.type !== HalfFloatType) {
247
+ this._customInputBuffer?.dispose();
248
+ this._customInputBuffer = new WebGLRenderTarget(inputBuffer.width, inputBuffer.height, {
249
+ format: inputBuffer.texture.format,
250
+ type: HalfFloatType,
251
+ depthBuffer: inputBuffer.depthBuffer,
252
+ depthTexture: inputBuffer.depthTexture
253
+ ? new DepthTexture(inputBuffer.width, inputBuffer.height)
254
+ : undefined,
255
+ stencilBuffer: inputBuffer.stencilBuffer,
256
+ samples: Math.max(0, this._multisampling),
257
+ minFilter: inputBuffer.texture.minFilter ?? LinearFilter,
258
+ magFilter: inputBuffer.texture.magFilter ?? LinearFilter,
259
+ generateMipmaps: inputBuffer.texture.generateMipmaps,
260
+ });
261
+ this._customInputBufferId++;
262
+ this._customInputBuffer.texture.name = `CustomInputBuffer-${this._customInputBufferId}`;
263
+ if (this._customInputBuffer.depthTexture && inputBuffer.depthTexture) {
264
+ this._customInputBuffer.depthTexture.format = inputBuffer.depthTexture.format;
265
+ this._customInputBuffer.depthTexture.type = inputBuffer.depthTexture.type;
266
+ }
267
+ // https://github.com/pmndrs/postprocessing/blob/ad338df710ef41fee4e5d10ad2c2c299030d46ef/src/core/EffectComposer.js#L366
268
+ if (this._customInputBuffer.samples > 0)
269
+ this._customInputBuffer.ignoreDepthForMultisampleCopy = false;
270
+ if (debug)
271
+ console.warn(`[PostProcessing] Input buffer created with size ${this._customInputBuffer.width}x${this._customInputBuffer.height} and samples ${this._customInputBuffer.samples}`);
272
+ }
273
+ // Calling the original render function with the input buffer
274
+ screenPassRender.call(screenpass, renderer, this._customInputBuffer, outputBuffer, deltaTime, stencilTest);
275
+ // Blit the resulting buffer to the input buffer passed in by the composer so it's used for subsequent effects
276
+ Graphics.blit(this._customInputBuffer.texture, inputBuffer, {
277
+ renderer,
278
+ depthTexture: this._customInputBuffer.depthTexture,
279
+ depthWrite: true,
280
+ depthTest: true,
281
+ });
282
+ };
283
+ let foundTonemappingEffect = false;
207
284
  try {
208
285
  orderEffects(this._effects);
209
286
  const effectsToMerge = [];
210
287
  let hasConvolutionEffectInArray = false;
211
- for (const entry of effectsOrPasses) {
288
+ for (const entry of this._effects) {
212
289
  const ef = entry.effect;
213
290
  if (ef instanceof MODULES.POSTPROCESSING.MODULE.SMAAEffect) {
214
291
  this._hasSmaaEffect = true;
@@ -216,6 +293,20 @@ export class PostProcessingHandler {
216
293
  else if (ef instanceof MODULES.POSTPROCESSING.MODULE.NormalPass) {
217
294
  this._anyPassHasNormal = true;
218
295
  }
296
+ // There can be only one tonemapping effect in the scene, so we can skip all others
297
+ if (ef instanceof MODULES.POSTPROCESSING.MODULE.ToneMappingEffect) {
298
+ // If we already have a tonemapping effect, we can skip this one
299
+ if (foundTonemappingEffect)
300
+ continue;
301
+ foundTonemappingEffect = true;
302
+ }
303
+ // We can also not merge multiple effects of the same type in one pass
304
+ // So we first need to create a new pass with whatever effects we have so far
305
+ // 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
306
+ // const constructor = ef.constructor as Constructor<Effect | Pass>;
307
+ // if(effectsToMerge.find(e => e.constructor === constructor)) {
308
+ // // this.createPassForMergeableEffects(effectsToMerge, composer, cam, scene);
309
+ // }
219
310
  if (ef instanceof MODULES.POSTPROCESSING.MODULE.Effect) {
220
311
  const attributes = ef.getAttributes();
221
312
  const convolution = MODULES.POSTPROCESSING.MODULE.EffectAttribute.CONVOLUTION;