@needle-tools/engine 2.67.3-pre → 2.67.4-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 +3 -0
- package/dist/needle-engine.js +2472 -2473
- package/dist/needle-engine.umd.cjs +71 -71
- package/lib/engine-components/postprocessing/Effects/Bloom.js +13 -11
- package/lib/engine-components/postprocessing/Effects/Bloom.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js +20 -35
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/DepthOfField.d.ts +0 -2
- package/lib/engine-components/postprocessing/Effects/DepthOfField.js +3 -11
- package/lib/engine-components/postprocessing/Effects/DepthOfField.js.map +1 -1
- package/lib/engine-components/postprocessing/PostProcessingHandler.js +1 -0
- package/lib/engine-components/postprocessing/PostProcessingHandler.js.map +1 -1
- package/lib/engine-components/postprocessing/Volume.d.ts +2 -1
- package/lib/engine-components/postprocessing/Volume.js +12 -5
- package/lib/engine-components/postprocessing/Volume.js.map +1 -1
- package/package.json +1 -1
- package/src/engine-components/postprocessing/Effects/Bloom.ts +13 -11
- package/src/engine-components/postprocessing/Effects/ColorAdjustments.ts +18 -36
- package/src/engine-components/postprocessing/Effects/DepthOfField.ts +3 -15
- package/src/engine-components/postprocessing/PostProcessingHandler.ts +1 -0
- package/src/engine-components/postprocessing/Volume.ts +16 -6
|
@@ -4,7 +4,7 @@ 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 { BloomEffect, SelectiveBloomEffect } from "postprocessing";
|
|
7
|
+
import { BlendFunction, BloomEffect, SelectiveBloomEffect } from "postprocessing";
|
|
8
8
|
import { serializable } from "../../../engine/engine_serialization";
|
|
9
9
|
import { PostProcessingEffect } from "../PostProcessingEffect";
|
|
10
10
|
import { VolumeParameter } from "../VolumeParameter";
|
|
@@ -22,14 +22,14 @@ export class Bloom extends PostProcessingEffect {
|
|
|
22
22
|
this.intensity.defaultValue = 0;
|
|
23
23
|
this.scatter.defaultValue = .2;
|
|
24
24
|
if (this.selectiveBloom) {
|
|
25
|
-
this.threshold.valueProcessor = (v) => v
|
|
26
|
-
this.intensity.valueProcessor = (v) => v
|
|
27
|
-
this.scatter.valueProcessor = (v) =>
|
|
25
|
+
this.threshold.valueProcessor = (v) => v;
|
|
26
|
+
this.intensity.valueProcessor = (v) => v;
|
|
27
|
+
this.scatter.valueProcessor = (v) => 1 * Math.PI * (1 - v);
|
|
28
28
|
}
|
|
29
29
|
else {
|
|
30
|
-
this.threshold.valueProcessor = (v) => v
|
|
30
|
+
this.threshold.valueProcessor = (v) => v;
|
|
31
31
|
this.intensity.valueProcessor = (v) => v; // * 2.2;
|
|
32
|
-
this.scatter.valueProcessor = (v) => (1 - v);
|
|
32
|
+
this.scatter.valueProcessor = (v) => 100 * (1 - v);
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
onCreateEffect() {
|
|
@@ -37,20 +37,21 @@ export class Bloom extends PostProcessingEffect {
|
|
|
37
37
|
if (this.selectiveBloom) {
|
|
38
38
|
// https://github.com/pmndrs/postprocessing/blob/64d2829f014cfec97a46bf3c109f3abc55af0715/demo/src/demos/BloomDemo.js#L265
|
|
39
39
|
const selectiveBloom = bloom = new SelectiveBloomEffect(this.context.scene, this.context.mainCamera, {
|
|
40
|
+
blendFunction: BlendFunction.ADD,
|
|
41
|
+
mipmapBlur: true,
|
|
40
42
|
luminanceThreshold: this.threshold.value,
|
|
41
43
|
luminanceSmoothing: this.scatter.value,
|
|
42
44
|
intensity: this.intensity.value,
|
|
43
|
-
mipmapBlur: false,
|
|
44
45
|
});
|
|
45
46
|
selectiveBloom.inverted = true;
|
|
46
47
|
}
|
|
47
48
|
else {
|
|
48
49
|
bloom = new BloomEffect();
|
|
49
50
|
}
|
|
50
|
-
const blur = bloom["mipmapBlurPass"];
|
|
51
|
-
if (typeof blur === "object") {
|
|
52
|
-
|
|
53
|
-
}
|
|
51
|
+
// const blur = bloom["mipmapBlurPass"];
|
|
52
|
+
// if (typeof blur === "object") {
|
|
53
|
+
// blur.radius = this.scatter.value;
|
|
54
|
+
// }
|
|
54
55
|
this.intensity.onValueChanged = newValue => {
|
|
55
56
|
bloom.intensity = newValue;
|
|
56
57
|
};
|
|
@@ -58,6 +59,7 @@ export class Bloom extends PostProcessingEffect {
|
|
|
58
59
|
bloom.luminanceMaterial.threshold = newValue;
|
|
59
60
|
};
|
|
60
61
|
this.scatter.onValueChanged = newValue => {
|
|
62
|
+
bloom.luminancePass.enabled = true;
|
|
61
63
|
bloom.luminanceMaterial.smoothing = newValue;
|
|
62
64
|
};
|
|
63
65
|
return bloom;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Bloom.js","sourceRoot":"","sources":["../../../../../src/engine-components/postprocessing/Effects/Bloom.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"Bloom.js","sourceRoot":"","sources":["../../../../../src/engine-components/postprocessing/Effects/Bloom.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ import { serializable } from "../../../engine/engine_serialization";
|
|
|
9
9
|
import { PostProcessingEffect } from "../PostProcessingEffect";
|
|
10
10
|
import { VolumeParameter } from "../VolumeParameter";
|
|
11
11
|
import { registerCustomEffectType } from "../VolumeProfile";
|
|
12
|
-
import { NoToneMapping } from "three";
|
|
12
|
+
import { LinearToneMapping, NoToneMapping } from "three";
|
|
13
13
|
export class ColorAdjustments extends PostProcessingEffect {
|
|
14
14
|
get typeName() {
|
|
15
15
|
return "ColorAdjustments";
|
|
@@ -20,20 +20,17 @@ export class ColorAdjustments extends PostProcessingEffect {
|
|
|
20
20
|
saturation;
|
|
21
21
|
init() {
|
|
22
22
|
this.postExposure.valueProcessor = v => {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return Math.pow(2, v);
|
|
26
|
-
}
|
|
27
|
-
// Custom effects need modification
|
|
28
|
-
else {
|
|
29
|
-
return v / (2 * Math.PI);
|
|
30
|
-
}
|
|
23
|
+
v = Math.pow(2, v);
|
|
24
|
+
return v;
|
|
31
25
|
};
|
|
32
26
|
this.postExposure.defaultValue = 0;
|
|
33
27
|
this.contrast.valueProcessor = (v) => {
|
|
34
|
-
let divisor =
|
|
28
|
+
let divisor = 1;
|
|
35
29
|
if (v > 0)
|
|
36
|
-
divisor
|
|
30
|
+
divisor = 200;
|
|
31
|
+
else if (v < 0)
|
|
32
|
+
divisor = 100;
|
|
33
|
+
// if (v > 0) divisor *= Math.PI;
|
|
37
34
|
const val = v / divisor;
|
|
38
35
|
return val;
|
|
39
36
|
};
|
|
@@ -41,7 +38,9 @@ export class ColorAdjustments extends PostProcessingEffect {
|
|
|
41
38
|
this.hueShift.valueProcessor = (v) => Math.PI * v / 180;
|
|
42
39
|
this.hueShift.defaultValue = 0;
|
|
43
40
|
this.saturation.valueProcessor = (v) => {
|
|
44
|
-
|
|
41
|
+
if (v < 0)
|
|
42
|
+
return (v / 100);
|
|
43
|
+
return (v / (100 * Math.PI));
|
|
45
44
|
};
|
|
46
45
|
this.saturation.defaultValue = 0;
|
|
47
46
|
}
|
|
@@ -49,35 +48,21 @@ export class ColorAdjustments extends PostProcessingEffect {
|
|
|
49
48
|
this.context.renderer.toneMappingExposure = 1;
|
|
50
49
|
}
|
|
51
50
|
onCreateEffect() {
|
|
51
|
+
if (this.context.renderer.toneMapping === NoToneMapping && this.postExposure.overrideState)
|
|
52
|
+
this.context.renderer.toneMapping = LinearToneMapping;
|
|
52
53
|
const brightnesscontrast = new BrightnessContrastEffect();
|
|
53
|
-
// TODO: darkening etc doesnt really work well in all cases right now
|
|
54
54
|
this.postExposure.onValueChanged = v => {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
else if (v > 0) {
|
|
62
|
-
this.context.renderer.toneMappingExposure = v;
|
|
63
|
-
brightnesscontrast.brightness = 0;
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
this.context.renderer.toneMappingExposure = v;
|
|
67
|
-
brightnesscontrast.brightness = 0;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
// Otherwise use the effect (they look sligthly different/behave different unfortunately)
|
|
71
|
-
else {
|
|
72
|
-
this.context.renderer.toneMappingExposure = 0;
|
|
73
|
-
brightnesscontrast.brightness = v;
|
|
74
|
-
}
|
|
55
|
+
if (this.context.renderer.toneMapping === NoToneMapping)
|
|
56
|
+
this.context.renderer.toneMapping = LinearToneMapping;
|
|
57
|
+
this.context.renderer.toneMappingExposure = v;
|
|
58
|
+
};
|
|
59
|
+
this.contrast.onValueChanged = v => {
|
|
60
|
+
brightnesscontrast.contrast = v;
|
|
75
61
|
};
|
|
76
|
-
this.contrast.onValueChanged = v => brightnesscontrast.contrast = v;
|
|
77
62
|
const hueSaturationEffect = new HueSaturationEffect();
|
|
78
63
|
this.hueShift.onValueChanged = v => hueSaturationEffect.hue = v;
|
|
79
64
|
this.saturation.onValueChanged = v => hueSaturationEffect.saturation = v;
|
|
80
|
-
return [
|
|
65
|
+
return [hueSaturationEffect, brightnesscontrast];
|
|
81
66
|
}
|
|
82
67
|
}
|
|
83
68
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColorAdjustments.js","sourceRoot":"","sources":["../../../../../src/engine-components/postprocessing/Effects/ColorAdjustments.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,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;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ColorAdjustments.js","sourceRoot":"","sources":["../../../../../src/engine-components/postprocessing/Effects/ColorAdjustments.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,4 @@ export declare class DepthOfField extends PostProcessingEffect {
|
|
|
16
16
|
init(): void;
|
|
17
17
|
onCreateEffect(): DepthOfFieldEffect[] | undefined;
|
|
18
18
|
unapply(): void;
|
|
19
|
-
calculateFocusDistance(target: any): number;
|
|
20
|
-
viewZToOrthographicDepth(viewZ: any, near: any, far: any): number;
|
|
21
19
|
}
|
|
@@ -5,7 +5,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
7
|
import { DepthOfFieldEffect } from "postprocessing";
|
|
8
|
-
import { getWorldPosition } from "../../../engine/engine_three_utils";
|
|
9
8
|
import { serializable } from "../../../engine/engine_serialization";
|
|
10
9
|
import { Mathf } from "../../../engine/engine_math";
|
|
11
10
|
import { PostProcessingEffect } from "../PostProcessingEffect";
|
|
@@ -51,22 +50,15 @@ export class DepthOfField extends PostProcessingEffect {
|
|
|
51
50
|
focalLength: 1,
|
|
52
51
|
bokehScale: 20,
|
|
53
52
|
});
|
|
54
|
-
this.focusDistance.onValueChanged = v =>
|
|
53
|
+
this.focusDistance.onValueChanged = v => {
|
|
54
|
+
dof.circleOfConfusionMaterial.worldFocusDistance = v;
|
|
55
|
+
};
|
|
55
56
|
this.focalLength.onValueChanged = v => dof.circleOfConfusionMaterial.worldFocusRange = v;
|
|
56
57
|
this.aperture.onValueChanged = v => dof.bokehScale = v;
|
|
57
58
|
return [dof];
|
|
58
59
|
}
|
|
59
60
|
unapply() {
|
|
60
61
|
}
|
|
61
|
-
calculateFocusDistance(target) {
|
|
62
|
-
const camera = this.context.mainCamera;
|
|
63
|
-
const distance = getWorldPosition(camera).distanceTo(target);
|
|
64
|
-
// console.log(distance, camera.near, camera.far);
|
|
65
|
-
return this.viewZToOrthographicDepth(-distance, camera.near, camera.far);
|
|
66
|
-
}
|
|
67
|
-
viewZToOrthographicDepth(viewZ, near, far) {
|
|
68
|
-
return (viewZ + near) / (near - far);
|
|
69
|
-
}
|
|
70
62
|
}
|
|
71
63
|
__decorate([
|
|
72
64
|
serializable()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DepthOfField.js","sourceRoot":"","sources":["../../../../../src/engine-components/postprocessing/Effects/DepthOfField.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"DepthOfField.js","sourceRoot":"","sources":["../../../../../src/engine-components/postprocessing/Effects/DepthOfField.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IACxB,qDAAO,CAAA;IACP,+DAAY,CAAA;IACZ,yDAAS,CAAA;AACb,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B;AAED,MAAM,OAAO,YAAa,SAAQ,oBAAoB;IAElD,IAAI,QAAQ;QACR,OAAO,cAAc,CAAC;IAC1B,CAAC;IAGD,IAAI,CAAqB;IAGzB,aAAa,CAAmB;IAGhC,WAAW,CAAmB;IAG9B,QAAQ,CAAmB;IAG3B,iBAAiB,CAAmB;IAEpC,IAAI;QACA,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,CAAC,CAAC,EAAE;YAClC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YAClB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAA,wDAAwD;YACtE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,CAAC,CAAC,EAAE;YAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC;IACN,CAAC;IAED,cAAc;QACV,IAAG,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QACxD,2EAA2E;QAC3E,kCAAkC;QAClC,sBAAsB;QACtB,2CAA2C;QAC3C,MAAM;QACN,MAAM,GAAG,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAW,EAAE;YACzD,eAAe,EAAE,EAAE;YACnB,WAAW,EAAE,CAAC;YACd,UAAU,EAAE,EAAE;SACjB,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,CAAC,CAAC,EAAE;YACpC,GAAG,CAAC,yBAAyB,CAAC,kBAAkB,GAAG,CAAC,CAAC;QACzD,CAAC,CAAA;QACD,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,CAAC,eAAe,GAAG,CAAC,CAAC;QACzF,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;QAGvD,OAAO,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IAED,OAAO;IACP,CAAC;CAEJ;AAtDG;IADC,YAAY,EAAE;0CACU;AAGzB;IADC,YAAY,CAAC,eAAe,CAAC;mDACE;AAGhC;IADC,YAAY,CAAC,eAAe,CAAC;iDACA;AAG9B;IADC,YAAY,CAAC,eAAe,CAAC;8CACH;AAG3B;IADC,YAAY,CAAC,eAAe,CAAC;uDACM;AA2CxC,wBAAwB,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC"}
|
|
@@ -106,6 +106,7 @@ export class PostProcessingHandler {
|
|
|
106
106
|
composer.addPass(new RenderPass(context.scene, cam));
|
|
107
107
|
if (debug)
|
|
108
108
|
console.log("Set effects or passes", camera, effectsOrPasses, composer);
|
|
109
|
+
// TODO: enforce correct order of effects (e.g. DOF before Bloom)
|
|
109
110
|
const effects = [];
|
|
110
111
|
for (const ef of effectsOrPasses) {
|
|
111
112
|
if (ef instanceof Effect)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostProcessingHandler.js","sourceRoot":"","sources":["../../../../src/engine-components/postprocessing/PostProcessingHandler.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"PostProcessingHandler.js","sourceRoot":"","sources":["../../../../src/engine-components/postprocessing/PostProcessingHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,9 +13,10 @@ export declare class Volume extends Behaviour implements IEditorModificationRece
|
|
|
13
13
|
private _rapidApplyCount;
|
|
14
14
|
private apply;
|
|
15
15
|
private unapply;
|
|
16
|
-
private
|
|
16
|
+
private _applyPostQueue;
|
|
17
17
|
/** called from needle editor sync package if its active */
|
|
18
18
|
onEditorModification(modification: EditorModification): void | boolean | undefined;
|
|
19
|
+
private _modificationQueue?;
|
|
19
20
|
private _recreateId;
|
|
20
21
|
private scheduleRecreate;
|
|
21
22
|
}
|
|
@@ -11,7 +11,6 @@ import { VolumeProfile } from "./VolumeProfile";
|
|
|
11
11
|
import { PostProcessingHandler } from "./PostProcessingHandler";
|
|
12
12
|
import { PostProcessingEffect } from "./PostProcessingEffect";
|
|
13
13
|
import { VolumeParameter } from "./VolumeParameter";
|
|
14
|
-
import { getEditorModificationCache } from "../../engine/engine_editor-sync";
|
|
15
14
|
import { isDevEnvironment } from "../../engine/debug";
|
|
16
15
|
const debug = getParam("debugpost");
|
|
17
16
|
export class Volume extends Behaviour {
|
|
@@ -84,20 +83,27 @@ export class Volume extends Behaviour {
|
|
|
84
83
|
this._postprocessing = new PostProcessingHandler(this.context);
|
|
85
84
|
this._postprocessing.apply(this._effects);
|
|
86
85
|
}
|
|
86
|
+
this._applyPostQueue();
|
|
87
87
|
}
|
|
88
88
|
unapply() {
|
|
89
89
|
this._postprocessing?.unapply();
|
|
90
90
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
for (const entry of cache.values())
|
|
91
|
+
_applyPostQueue() {
|
|
92
|
+
if (this._modificationQueue) {
|
|
93
|
+
for (const entry of this._modificationQueue.values())
|
|
95
94
|
this.onEditorModification(entry);
|
|
95
|
+
this._modificationQueue.clear();
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
/** called from needle editor sync package if its active */
|
|
99
99
|
onEditorModification(modification) {
|
|
100
100
|
if (modification.propertyName.startsWith("postprocessing.")) {
|
|
101
|
+
if (!this._postprocessing) {
|
|
102
|
+
if (!this._modificationQueue)
|
|
103
|
+
this._modificationQueue = new Map();
|
|
104
|
+
this._modificationQueue.set(modification.propertyName, modification);
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
101
107
|
if (!this._effects?.length)
|
|
102
108
|
return;
|
|
103
109
|
const path = modification.propertyName.split(".");
|
|
@@ -152,6 +158,7 @@ export class Volume extends Behaviour {
|
|
|
152
158
|
}
|
|
153
159
|
return false;
|
|
154
160
|
}
|
|
161
|
+
_modificationQueue;
|
|
155
162
|
_recreateId = -1;
|
|
156
163
|
scheduleRecreate() {
|
|
157
164
|
// When the editor modifications come in with changed active effects we want/need to re-create the effects
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Volume.js","sourceRoot":"","sources":["../../../../src/engine-components/postprocessing/Volume.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAc,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"Volume.js","sourceRoot":"","sources":["../../../../src/engine-components/postprocessing/Volume.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAc,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;AAEpC,MAAM,OAAO,MAAO,SAAQ,SAAS;IAGjC,aAAa,CAAiB;IAEtB,eAAe,CAAyB;IACxC,QAAQ,GAA2B,EAAE,CAAC;IAE9C,KAAK;QACD,oCAAoC;QACpC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;QAE3B,IAAI,KAAK,EAAE;YACP,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;YACjD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;gBACrC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;oBACf,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC1D,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;iBAChC;YACL,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IAED,SAAS;QACL,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC;IACpC,CAAC;IAED,cAAc;QACV,4GAA4G;QAC5G,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ;gBACvD,IAAI,CAAC,KAAK,EAAE,CAAC;SACpB;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YAC1E,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACzD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACvD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;SAChE;IACL,CAAC;IAED,SAAS;QACL,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC;IACpC,CAAC;IAEO,cAAc,CAAU;IACxB,gBAAgB,GAAG,CAAC,CAAC;IAErB,KAAK;QACT,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAEpF,IAAI,gBAAgB,EAAE,EAAE;YACpB,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,GAAG,GAAG,EAAE;gBAC7E,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,IAAI,CAAC,gBAAgB,KAAK,CAAC;oBAC3B,OAAO,CAAC,IAAI,CAAC,oEAAoE,EAAE,IAAI,CAAC,CAAC;aAChG;YACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;SACpC;QAGD,IAAI,CAAC,OAAO,EAAE,CAAC;QAEf,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACzB,mBAAmB;QACnB,IAAI,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE;YAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;SACxD;QACD,yBAAyB;QACzB,MAAM,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,CAAC;QAC3F,IAAI,KAAK,IAAI,oBAAoB,EAAE,MAAM;YACrC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;QACpD,IAAI,oBAAoB,EAAE;YACtB,KAAK,MAAM,IAAI,IAAI,oBAAoB,EAAE;gBACrC,IAAI,IAAI,CAAC,MAAM;oBAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC7C;SACJ;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,eAAe;gBACrB,IAAI,CAAC,eAAe,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC7C;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;IAC3B,CAAC;IAEO,OAAO;QACX,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC;IACpC,CAAC;IAGO,eAAe;QACnB,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;gBAAE,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YACvF,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;SACnC;IACL,CAAC;IAED,2DAA2D;IAC3D,oBAAoB,CAAC,YAAgC;QAEjD,IAAI,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE;YAEzD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;gBACvB,IAAI,CAAC,IAAI,CAAC,kBAAkB;oBAAE,IAAI,CAAC,kBAAkB,GAAG,IAAI,GAAG,EAA8B,CAAC;gBAC9F,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;gBACrE,OAAO,IAAI,CAAC;aACf;YAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM;gBAAE,OAAO;YACnC,MAAM,IAAI,GAAG,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;gBACxC,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;oBAC9B,IAAI,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,aAAa,CAAC,WAAW,EAAE,EAAE;wBAE9D,IAAI,YAAY,KAAK,QAAQ,EAAE;4BAC3B,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;4BACjC,IAAI,CAAC,gBAAgB,EAAE,CAAC;4BACxB,OAAO;yBACV;wBAED,8BAA8B;wBAC9B,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;4BAC5C,MAAM,mBAAmB,GAAG,IAAI,KAAK,EAAU,CAAC;4BAChD,sBAAsB,CAAC,GAAG,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;4BAC/D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BAC/B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;gCACpB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;gCACvB,IAAI,IAAI,YAAY,eAAe,EAAE;oCACjC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iCACjC;6BACJ;yBACJ;wBAED,IAAI,sBAAsB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;4BAC3C,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;4BAC7C,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,GAAG,CAAC,aAAa,CAAE,CAAC;4BACvE,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE;gCACnC,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,SAAS,EAAE;oCACjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAoB,CAAC;oCAC1C,IAAI,IAAI,YAAY,eAAe,EAAE;wCACjC,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;wCACtE,IAAI,mBAAmB,EAAE;4CACrB,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC;4CACxC,IAAI,CAAC,gBAAgB,EAAE,CAAC;yCAC3B;6CACI,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;4CACvC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;yCACnC;qCACJ;oCACD,OAAO;iCACV;6BACJ;yBACJ;wBAED,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,YAAY,CAAC,CAAC;wBACnD,OAAO;qBACV;iBACJ;aACJ;YACD,OAAO,IAAI,CAAC;SACf;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,kBAAkB,CAAmC;IAErD,WAAW,GAAW,CAAC,CAAC,CAAC;IACzB,gBAAgB;QACpB,0GAA0G;QAC1G,uIAAuI;QACvI,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC;QAC9B,UAAU,CAAC,GAAG,EAAE;YACZ,IAAI,EAAE,KAAK,IAAI,CAAC,WAAW;gBAAE,OAAO;YACpC,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpB,CAAC,EAAE,GAAG,CAAC,CAAC;IACZ,CAAC;CAEJ;AArLG;IADC,aAAa,CAAC,aAAa,CAAC;6CACC;AAuLlC,6CAA6C;AAC7C,MAAM,sBAAsB,GAA0B,IAAI,GAAG,EAAoB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@needle-tools/engine",
|
|
3
|
-
"version": "2.67.
|
|
3
|
+
"version": "2.67.4-pre",
|
|
4
4
|
"description": "Needle Engine is a web-based runtime for 3D apps. It runs on your machine for development, and can be deployed anywhere. It is flexible, extensible, and collaboration and XR come naturally.",
|
|
5
5
|
"main": "dist/needle-engine.umd.cjs",
|
|
6
6
|
"module": "lib/needle-engine.js",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BloomEffect, SelectiveBloomEffect } from "postprocessing";
|
|
1
|
+
import { BlendFunction, BloomEffect, SelectiveBloomEffect } from "postprocessing";
|
|
2
2
|
import { serializable } from "../../../engine/engine_serialization";
|
|
3
3
|
import { PostProcessingEffect } from "../PostProcessingEffect";
|
|
4
4
|
import { VolumeParameter } from "../VolumeParameter";
|
|
@@ -25,14 +25,14 @@ export class Bloom extends PostProcessingEffect {
|
|
|
25
25
|
this.scatter.defaultValue = .2;
|
|
26
26
|
|
|
27
27
|
if (this.selectiveBloom) {
|
|
28
|
-
this.threshold.valueProcessor = (v: number) => v
|
|
29
|
-
this.intensity.valueProcessor = (v: number) => v
|
|
30
|
-
this.scatter.valueProcessor = (v: number) =>
|
|
28
|
+
this.threshold.valueProcessor = (v: number) => v;
|
|
29
|
+
this.intensity.valueProcessor = (v: number) => v;
|
|
30
|
+
this.scatter.valueProcessor = (v: number) => 1 * Math.PI * (1 - v);
|
|
31
31
|
}
|
|
32
32
|
else {
|
|
33
|
-
this.threshold.valueProcessor = (v: number) => v
|
|
33
|
+
this.threshold.valueProcessor = (v: number) => v;
|
|
34
34
|
this.intensity.valueProcessor = (v: number) => v;// * 2.2;
|
|
35
|
-
this.scatter.valueProcessor = (v: number) => (1 - v);
|
|
35
|
+
this.scatter.valueProcessor = (v: number) => 100 * (1 - v);
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
|
|
@@ -41,10 +41,11 @@ export class Bloom extends PostProcessingEffect {
|
|
|
41
41
|
if (this.selectiveBloom) {
|
|
42
42
|
// https://github.com/pmndrs/postprocessing/blob/64d2829f014cfec97a46bf3c109f3abc55af0715/demo/src/demos/BloomDemo.js#L265
|
|
43
43
|
const selectiveBloom = bloom = new SelectiveBloomEffect(this.context.scene, this.context.mainCamera!, {
|
|
44
|
+
blendFunction: BlendFunction.ADD,
|
|
45
|
+
mipmapBlur: true,
|
|
44
46
|
luminanceThreshold: this.threshold.value,
|
|
45
47
|
luminanceSmoothing: this.scatter.value,
|
|
46
48
|
intensity: this.intensity.value,
|
|
47
|
-
mipmapBlur: false,
|
|
48
49
|
});
|
|
49
50
|
selectiveBloom.inverted = true;
|
|
50
51
|
}
|
|
@@ -53,10 +54,10 @@ export class Bloom extends PostProcessingEffect {
|
|
|
53
54
|
}
|
|
54
55
|
|
|
55
56
|
|
|
56
|
-
const blur = bloom["mipmapBlurPass"];
|
|
57
|
-
if (typeof blur === "object") {
|
|
58
|
-
|
|
59
|
-
}
|
|
57
|
+
// const blur = bloom["mipmapBlurPass"];
|
|
58
|
+
// if (typeof blur === "object") {
|
|
59
|
+
// blur.radius = this.scatter.value;
|
|
60
|
+
// }
|
|
60
61
|
|
|
61
62
|
this.intensity.onValueChanged = newValue => {
|
|
62
63
|
bloom!.intensity = newValue;
|
|
@@ -65,6 +66,7 @@ export class Bloom extends PostProcessingEffect {
|
|
|
65
66
|
bloom!.luminanceMaterial.threshold = newValue;
|
|
66
67
|
};
|
|
67
68
|
this.scatter.onValueChanged = newValue => {
|
|
69
|
+
bloom!.luminancePass.enabled = true;
|
|
68
70
|
bloom!.luminanceMaterial.smoothing = newValue;
|
|
69
71
|
};
|
|
70
72
|
|
|
@@ -3,7 +3,7 @@ import { serializable } from "../../../engine/engine_serialization";
|
|
|
3
3
|
import { EffectProviderResult, PostProcessingEffect } from "../PostProcessingEffect";
|
|
4
4
|
import { VolumeParameter } from "../VolumeParameter";
|
|
5
5
|
import { registerCustomEffectType } from "../VolumeProfile";
|
|
6
|
-
import { NoToneMapping } from "three";
|
|
6
|
+
import { CustomToneMapping, LinearToneMapping, NoToneMapping } from "three";
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
export class ColorAdjustments extends PostProcessingEffect {
|
|
@@ -26,20 +26,16 @@ export class ColorAdjustments extends PostProcessingEffect {
|
|
|
26
26
|
|
|
27
27
|
init() {
|
|
28
28
|
this.postExposure!.valueProcessor = v => {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return Math.pow(2, v);
|
|
32
|
-
}
|
|
33
|
-
// Custom effects need modification
|
|
34
|
-
else {
|
|
35
|
-
return v / (2 * Math.PI);
|
|
36
|
-
}
|
|
29
|
+
v = Math.pow(2, v);
|
|
30
|
+
return v;
|
|
37
31
|
}
|
|
38
32
|
this.postExposure.defaultValue = 0;
|
|
39
33
|
|
|
40
34
|
this.contrast.valueProcessor = (v: number) => {
|
|
41
|
-
let divisor =
|
|
42
|
-
if (v > 0) divisor
|
|
35
|
+
let divisor = 1;
|
|
36
|
+
if (v > 0) divisor = 200;
|
|
37
|
+
else if (v < 0) divisor = 100;
|
|
38
|
+
// if (v > 0) divisor *= Math.PI;
|
|
43
39
|
const val = v / divisor;
|
|
44
40
|
return val;
|
|
45
41
|
};
|
|
@@ -49,7 +45,8 @@ export class ColorAdjustments extends PostProcessingEffect {
|
|
|
49
45
|
this.hueShift.defaultValue = 0;
|
|
50
46
|
|
|
51
47
|
this.saturation.valueProcessor = (v: number) => {
|
|
52
|
-
return (v /
|
|
48
|
+
if (v < 0) return (v / 100);
|
|
49
|
+
return (v / (100 * Math.PI));
|
|
53
50
|
}
|
|
54
51
|
this.saturation.defaultValue = 0;
|
|
55
52
|
}
|
|
@@ -60,39 +57,24 @@ export class ColorAdjustments extends PostProcessingEffect {
|
|
|
60
57
|
|
|
61
58
|
|
|
62
59
|
onCreateEffect(): EffectProviderResult {
|
|
63
|
-
|
|
60
|
+
if (this.context.renderer.toneMapping === NoToneMapping && this.postExposure.overrideState)
|
|
61
|
+
this.context.renderer.toneMapping = LinearToneMapping;
|
|
64
62
|
const brightnesscontrast = new BrightnessContrastEffect();
|
|
65
|
-
// TODO: darkening etc doesnt really work well in all cases right now
|
|
66
63
|
this.postExposure!.onValueChanged = v => {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
else if (v > 0) {
|
|
74
|
-
this.context.renderer.toneMappingExposure = v;
|
|
75
|
-
brightnesscontrast.brightness = 0;
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
this.context.renderer.toneMappingExposure = v;
|
|
79
|
-
brightnesscontrast.brightness = 0;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
// Otherwise use the effect (they look sligthly different/behave different unfortunately)
|
|
83
|
-
else {
|
|
84
|
-
this.context.renderer.toneMappingExposure = 0;
|
|
85
|
-
brightnesscontrast.brightness = v;
|
|
86
|
-
}
|
|
64
|
+
if (this.context.renderer.toneMapping === NoToneMapping)
|
|
65
|
+
this.context.renderer.toneMapping = LinearToneMapping;
|
|
66
|
+
this.context.renderer.toneMappingExposure = v;
|
|
67
|
+
}
|
|
68
|
+
this.contrast!.onValueChanged = v => {
|
|
69
|
+
brightnesscontrast.contrast = v;
|
|
87
70
|
}
|
|
88
|
-
this.contrast!.onValueChanged = v => brightnesscontrast.contrast = v;
|
|
89
71
|
|
|
90
72
|
|
|
91
73
|
const hueSaturationEffect = new HueSaturationEffect();
|
|
92
74
|
this.hueShift!.onValueChanged = v => hueSaturationEffect.hue = v;
|
|
93
75
|
this.saturation!.onValueChanged = v => hueSaturationEffect.saturation = v;
|
|
94
76
|
|
|
95
|
-
return [
|
|
77
|
+
return [hueSaturationEffect, brightnesscontrast];
|
|
96
78
|
}
|
|
97
79
|
|
|
98
80
|
// apply() {
|
|
@@ -61,7 +61,9 @@ export class DepthOfField extends PostProcessingEffect {
|
|
|
61
61
|
bokehScale: 20,
|
|
62
62
|
});
|
|
63
63
|
|
|
64
|
-
this.focusDistance.onValueChanged = v =>
|
|
64
|
+
this.focusDistance.onValueChanged = v => {
|
|
65
|
+
dof.circleOfConfusionMaterial.worldFocusDistance = v;
|
|
66
|
+
}
|
|
65
67
|
this.focalLength.onValueChanged = v => dof.circleOfConfusionMaterial.worldFocusRange = v;
|
|
66
68
|
this.aperture.onValueChanged = v => dof.bokehScale = v;
|
|
67
69
|
|
|
@@ -69,22 +71,8 @@ export class DepthOfField extends PostProcessingEffect {
|
|
|
69
71
|
return [dof];
|
|
70
72
|
}
|
|
71
73
|
|
|
72
|
-
|
|
73
74
|
unapply() {
|
|
74
75
|
}
|
|
75
76
|
|
|
76
|
-
|
|
77
|
-
calculateFocusDistance(target) {
|
|
78
|
-
|
|
79
|
-
const camera = this.context.mainCamera! as PerspectiveCamera;
|
|
80
|
-
const distance = getWorldPosition(camera).distanceTo(target);
|
|
81
|
-
// console.log(distance, camera.near, camera.far);
|
|
82
|
-
return this.viewZToOrthographicDepth(-distance, camera.near, camera.far);
|
|
83
|
-
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
viewZToOrthographicDepth(viewZ, near, far) {
|
|
87
|
-
return (viewZ + near) / (near - far);
|
|
88
|
-
}
|
|
89
77
|
}
|
|
90
78
|
registerCustomEffectType("DepthOfField", DepthOfField);
|
|
@@ -95,25 +95,33 @@ export class Volume extends Behaviour implements IEditorModificationReceiver {
|
|
|
95
95
|
this._postprocessing = new PostProcessingHandler(this.context);
|
|
96
96
|
this._postprocessing.apply(this._effects);
|
|
97
97
|
}
|
|
98
|
+
|
|
99
|
+
this._applyPostQueue();
|
|
98
100
|
}
|
|
99
101
|
|
|
100
102
|
private unapply() {
|
|
101
103
|
this._postprocessing?.unapply();
|
|
102
104
|
}
|
|
103
105
|
|
|
104
|
-
|
|
105
|
-
private
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
106
|
+
|
|
107
|
+
private _applyPostQueue() {
|
|
108
|
+
if (this._modificationQueue) {
|
|
109
|
+
for (const entry of this._modificationQueue.values()) this.onEditorModification(entry);
|
|
110
|
+
this._modificationQueue.clear();
|
|
109
111
|
}
|
|
110
112
|
}
|
|
111
113
|
|
|
112
|
-
|
|
113
114
|
/** called from needle editor sync package if its active */
|
|
114
115
|
onEditorModification(modification: EditorModification): void | boolean | undefined {
|
|
115
116
|
|
|
116
117
|
if (modification.propertyName.startsWith("postprocessing.")) {
|
|
118
|
+
|
|
119
|
+
if (!this._postprocessing) {
|
|
120
|
+
if (!this._modificationQueue) this._modificationQueue = new Map<string, EditorModification>();
|
|
121
|
+
this._modificationQueue.set(modification.propertyName, modification);
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
|
|
117
125
|
if (!this._effects?.length) return;
|
|
118
126
|
const path = modification.propertyName.split(".");
|
|
119
127
|
if (path.length === 3 || path.length === 4) {
|
|
@@ -173,6 +181,8 @@ export class Volume extends Behaviour implements IEditorModificationReceiver {
|
|
|
173
181
|
return false;
|
|
174
182
|
}
|
|
175
183
|
|
|
184
|
+
private _modificationQueue?: Map<string, EditorModification>;
|
|
185
|
+
|
|
176
186
|
private _recreateId: number = -1;
|
|
177
187
|
private scheduleRecreate() {
|
|
178
188
|
// When the editor modifications come in with changed active effects we want/need to re-create the effects
|