@needle-tools/engine 4.3.1 → 4.3.2-beta
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 +5 -0
- package/dist/needle-engine.bundle.js +4083 -4076
- package/dist/needle-engine.bundle.light.js +4085 -4081
- package/dist/needle-engine.bundle.light.min.js +124 -127
- package/dist/needle-engine.bundle.light.umd.cjs +122 -125
- package/dist/needle-engine.bundle.min.js +124 -127
- package/dist/needle-engine.bundle.umd.cjs +123 -126
- package/dist/needle-engine.d.ts +9 -9
- package/dist/needle-engine.light.d.ts +9 -9
- package/lib/engine/engine_time.d.ts +11 -2
- package/lib/engine/engine_time.js +12 -1
- package/lib/engine/engine_time.js.map +1 -1
- package/lib/engine-components/RendererInstancing.d.ts +1 -3
- package/lib/engine-components/RendererInstancing.js +6 -54
- package/lib/engine-components/RendererInstancing.js.map +1 -1
- package/lib/engine-components/postprocessing/PostProcessingHandler.d.ts +1 -1
- package/lib/engine-components/postprocessing/PostProcessingHandler.js +6 -14
- package/lib/engine-components/postprocessing/PostProcessingHandler.js.map +1 -1
- package/lib/engine-components/postprocessing/Volume.d.ts +15 -0
- package/lib/engine-components/postprocessing/Volume.js +73 -4
- package/lib/engine-components/postprocessing/Volume.js.map +1 -1
- package/package.json +1 -1
- package/src/engine/engine_time.ts +14 -2
- package/src/engine-components/RendererInstancing.ts +6 -57
- package/src/engine-components/postprocessing/PostProcessingHandler.ts +8 -14
- package/src/engine-components/postprocessing/Volume.ts +82 -6
|
@@ -6,7 +6,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
6
6
|
};
|
|
7
7
|
import { isDevEnvironment, showBalloonMessage } from "../../engine/debug/index.js";
|
|
8
8
|
import { serializeable } from "../../engine/engine_serialization_decorator.js";
|
|
9
|
-
import { getParam } from "../../engine/engine_utils.js";
|
|
9
|
+
import { DeviceUtilities, getParam } from "../../engine/engine_utils.js";
|
|
10
10
|
import { Behaviour } from "../Component.js";
|
|
11
11
|
import { EffectWrapper } from "./Effects/EffectWrapper.js";
|
|
12
12
|
import { PostProcessingEffect } from "./PostProcessingEffect.js";
|
|
@@ -53,6 +53,14 @@ export class Volume extends Behaviour {
|
|
|
53
53
|
return this._activeEffects;
|
|
54
54
|
}
|
|
55
55
|
sharedProfile;
|
|
56
|
+
/**
|
|
57
|
+
* Set multisampling to "auto" to automatically adjust the multisampling level based on performance.
|
|
58
|
+
* Set to a number to manually set the multisampling level.
|
|
59
|
+
* @default "auto"
|
|
60
|
+
* @min 0
|
|
61
|
+
* @max renderer.capabilities.maxSamples
|
|
62
|
+
*/
|
|
63
|
+
multisampling = "auto";
|
|
56
64
|
/**
|
|
57
65
|
* Add a post processing effect to the stack and schedules the effect stack to be re-created.
|
|
58
66
|
*/
|
|
@@ -69,6 +77,9 @@ export class Volume extends Behaviour {
|
|
|
69
77
|
this._isDirty = true;
|
|
70
78
|
return effect;
|
|
71
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Remove a post processing effect from the stack and schedules the effect stack to be re-created.
|
|
82
|
+
*/
|
|
72
83
|
removeEffect(effect) {
|
|
73
84
|
let index = -1;
|
|
74
85
|
if (!(effect instanceof PostProcessingEffect)) {
|
|
@@ -117,7 +128,12 @@ export class Volume extends Behaviour {
|
|
|
117
128
|
// ensure the profile is initialized
|
|
118
129
|
this.sharedProfile?.__init(this);
|
|
119
130
|
}
|
|
131
|
+
_componentEnabledTime = -1;
|
|
132
|
+
_multisampleAutoChangeTime = 0;
|
|
133
|
+
_multisampleAutoDecreaseTime = 0;
|
|
134
|
+
/** @internal */
|
|
120
135
|
onEnable() {
|
|
136
|
+
this._componentEnabledTime = this.context.time.realtimeSinceStartup;
|
|
121
137
|
this._isDirty = true;
|
|
122
138
|
}
|
|
123
139
|
/** @internal */
|
|
@@ -139,13 +155,43 @@ export class Volume extends Behaviour {
|
|
|
139
155
|
this.apply();
|
|
140
156
|
}
|
|
141
157
|
}
|
|
142
|
-
if (this.context.composer && this._postprocessing
|
|
158
|
+
if (this.context.composer && this._postprocessing && this._postprocessing.composer === this.context.composer) {
|
|
143
159
|
if (this.context.renderer.getContext().isContextLost()) {
|
|
144
160
|
this.context.renderer.forceContextRestore();
|
|
145
161
|
}
|
|
146
162
|
if (this.context.composer.getRenderer() !== this.context.renderer)
|
|
147
163
|
this.context.composer.setRenderer(this.context.renderer);
|
|
148
164
|
this.context.composer.setMainScene(this.context.scene);
|
|
165
|
+
const composer = this.context.composer;
|
|
166
|
+
if (this.multisampling === "auto") {
|
|
167
|
+
const timeSinceLastChange = this.context.time.realtimeSinceStartup - this._multisampleAutoChangeTime;
|
|
168
|
+
if (this.context.time.realtimeSinceStartup - this._componentEnabledTime > 2
|
|
169
|
+
&& timeSinceLastChange > .5) {
|
|
170
|
+
const prev = composer.multisampling;
|
|
171
|
+
if (composer.multisampling > 0 && this.context.time.smoothedFps <= 50) {
|
|
172
|
+
this._multisampleAutoChangeTime = this.context.time.realtimeSinceStartup;
|
|
173
|
+
this._multisampleAutoDecreaseTime = this.context.time.realtimeSinceStartup;
|
|
174
|
+
composer.multisampling *= .5;
|
|
175
|
+
composer.multisampling = Math.floor(composer.multisampling);
|
|
176
|
+
if (debug)
|
|
177
|
+
console.debug(`[PostProcessing] Reduced multisampling from ${prev} to ${composer.multisampling}`);
|
|
178
|
+
}
|
|
179
|
+
// if performance is good for a while try increasing multisampling again
|
|
180
|
+
else if (timeSinceLastChange > 1
|
|
181
|
+
&& this.context.time.smoothedFps >= 59
|
|
182
|
+
&& composer.multisampling < this.context.renderer.capabilities.maxSamples
|
|
183
|
+
&& this.context.time.realtimeSinceStartup - this._multisampleAutoDecreaseTime > 10) {
|
|
184
|
+
this._multisampleAutoChangeTime = this.context.time.realtimeSinceStartup;
|
|
185
|
+
composer.multisampling = composer.multisampling <= 0 ? 1 : composer.multisampling * 2;
|
|
186
|
+
composer.multisampling = Math.floor(composer.multisampling);
|
|
187
|
+
if (debug)
|
|
188
|
+
console.debug(`[PostProcessing] Increased multisampling from ${prev} to ${composer.multisampling}`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
composer.multisampling = Math.max(0, Math.min(this.multisampling, this.context.renderer.capabilities.maxSamples));
|
|
194
|
+
}
|
|
149
195
|
// only set the main camera if any pass has a different camera
|
|
150
196
|
// trying to avoid doing this regularly since it involves doing potentially unnecessary work
|
|
151
197
|
// https://github.com/pmndrs/postprocessing/blob/3d3df0576b6d49aec9e763262d5a1ff7429fd91a/src/core/EffectComposer.js#L406
|
|
@@ -198,8 +244,28 @@ export class Volume extends Behaviour {
|
|
|
198
244
|
if (this._activeEffects.length > 0) {
|
|
199
245
|
if (!this._postprocessing)
|
|
200
246
|
this._postprocessing = new PostProcessingHandler(this.context);
|
|
201
|
-
this._postprocessing.apply(this._activeEffects)
|
|
202
|
-
|
|
247
|
+
this._postprocessing.apply(this._activeEffects)
|
|
248
|
+
?.then(() => {
|
|
249
|
+
if (!this.activeAndEnabled)
|
|
250
|
+
return;
|
|
251
|
+
this._applyPostQueue();
|
|
252
|
+
const composer = this._postprocessing?.composer;
|
|
253
|
+
if (composer) {
|
|
254
|
+
if (this.multisampling === "auto") {
|
|
255
|
+
composer.multisampling = DeviceUtilities.isMobileDevice()
|
|
256
|
+
? 2
|
|
257
|
+
: 4;
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
composer.multisampling = Math.max(0, Math.min(this.multisampling, this.context.renderer.capabilities.maxSamples));
|
|
261
|
+
}
|
|
262
|
+
if (debug)
|
|
263
|
+
console.debug(`[PostProcessing] Set multisampling to ${composer.multisampling} (Is Mobile: ${DeviceUtilities.isMobileDevice()})`);
|
|
264
|
+
}
|
|
265
|
+
else if (debug) {
|
|
266
|
+
console.warn(`[PostProcessing] No composer found`);
|
|
267
|
+
}
|
|
268
|
+
});
|
|
203
269
|
}
|
|
204
270
|
}
|
|
205
271
|
unapply() {
|
|
@@ -292,6 +358,9 @@ export class Volume extends Behaviour {
|
|
|
292
358
|
__decorate([
|
|
293
359
|
serializeable(VolumeProfile)
|
|
294
360
|
], Volume.prototype, "sharedProfile", void 0);
|
|
361
|
+
__decorate([
|
|
362
|
+
serializeable()
|
|
363
|
+
], Volume.prototype, "multisampling", void 0);
|
|
295
364
|
/** cached VolumeParameter keys per object */
|
|
296
365
|
const effectVolumeProperties = new Map();
|
|
297
366
|
setPostprocessingManagerType(Volume);
|
|
@@ -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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@needle-tools/engine",
|
|
3
|
-
"version": "4.3.
|
|
3
|
+
"version": "4.3.2-beta",
|
|
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": {
|
|
@@ -42,7 +42,19 @@ export class Time implements ITime {
|
|
|
42
42
|
return this.clock.elapsedTime;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* @returns {Number} FPS for this frame.
|
|
47
|
+
* Note that this returns the raw value (e.g. 59.88023952362959) and will fluctuate a lot between frames.
|
|
48
|
+
* If you want a more stable FPS, use `smoothedFps` instead.
|
|
49
|
+
*/
|
|
50
|
+
get fps() {
|
|
51
|
+
return 1 / this.deltaTime;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Approximated frames per second
|
|
56
|
+
* @returns the smoothed FPS value over the last 60 frames with decimals.
|
|
57
|
+
*/
|
|
46
58
|
get smoothedFps() { return this._smoothedFps; }
|
|
47
59
|
/** The smoothed time in seconds it took to complete the last frame (Read Only). */
|
|
48
60
|
get smoothedDeltaTime() { return 1 / this._smoothedFps; }
|
|
@@ -51,7 +63,7 @@ export class Time implements ITime {
|
|
|
51
63
|
private clock = new Clock();
|
|
52
64
|
private _smoothedFps: number = 0;
|
|
53
65
|
private _smoothedDeltaTime: number = 0;
|
|
54
|
-
private _fpsSamples: number[] = [];
|
|
66
|
+
private readonly _fpsSamples: number[] = [];
|
|
55
67
|
private _fpsSampleIndex: number = 0;
|
|
56
68
|
|
|
57
69
|
constructor() {
|
|
@@ -573,7 +573,7 @@ class InstancedMeshRenderer {
|
|
|
573
573
|
this.markNeedsUpdate();
|
|
574
574
|
}
|
|
575
575
|
|
|
576
|
-
updateGeometry(geo: BufferGeometry,
|
|
576
|
+
updateGeometry(geo: BufferGeometry, geometryIndex: number): boolean {
|
|
577
577
|
if (!this.validateGeometry(geo)) {
|
|
578
578
|
return false;
|
|
579
579
|
}
|
|
@@ -582,10 +582,11 @@ class InstancedMeshRenderer {
|
|
|
582
582
|
this.grow(geo);
|
|
583
583
|
}
|
|
584
584
|
if (debugInstancing)
|
|
585
|
-
console.debug("UPDATE
|
|
585
|
+
console.debug("[Instancing] UPDATE GEOMETRY at " + geometryIndex, this._batchedMesh["_geometryCount"], geo.name, getMeshInformation(geo), geo.attributes.position.count, geo.index ? geo.index.count : 0);
|
|
586
586
|
|
|
587
|
-
|
|
588
|
-
|
|
587
|
+
this._batchedMesh.setGeometryAt(geometryIndex, geo);
|
|
588
|
+
// for LOD mesh updates we need to make sure to save the geometry index
|
|
589
|
+
this._geometryIds.set(geo, geometryIndex);
|
|
589
590
|
this.markNeedsUpdate();
|
|
590
591
|
return true;
|
|
591
592
|
}
|
|
@@ -692,8 +693,6 @@ class InstancedMeshRenderer {
|
|
|
692
693
|
|
|
693
694
|
// since we have a new batched mesh we need to re-add all the instances
|
|
694
695
|
// fixes https://linear.app/needle/issue/NE-5711
|
|
695
|
-
this._usedBuckets.length = 0;
|
|
696
|
-
this._availableBuckets.length = 0;
|
|
697
696
|
|
|
698
697
|
// add current instances to new instanced mesh
|
|
699
698
|
const original = [...this._handles];
|
|
@@ -758,9 +757,6 @@ class InstancedMeshRenderer {
|
|
|
758
757
|
}
|
|
759
758
|
|
|
760
759
|
|
|
761
|
-
private readonly _availableBuckets = new Array<BucketInfo>();
|
|
762
|
-
private readonly _usedBuckets = new Array<BucketInfo>();
|
|
763
|
-
|
|
764
760
|
private addGeometry(handle: InstanceHandle) {
|
|
765
761
|
|
|
766
762
|
const obj = handle.object;
|
|
@@ -770,51 +766,11 @@ class InstancedMeshRenderer {
|
|
|
770
766
|
return;
|
|
771
767
|
}
|
|
772
768
|
|
|
773
|
-
// if (handle.reservedVertexCount <= 0 || handle.reservedIndexCount <= 0) {
|
|
774
|
-
// console.error("Cannot add geometry with 0 vertices or indices", handle.name);
|
|
775
|
-
// return;
|
|
776
|
-
// }
|
|
777
|
-
// search the smallest available bucket that fits our handle
|
|
778
|
-
let smallestBucket: BucketInfo | null = null;
|
|
779
|
-
let smallestBucketIndex = -1;
|
|
780
|
-
for (let i = this._availableBuckets.length - 1; i >= 0; i--) {
|
|
781
|
-
const bucket = this._availableBuckets[i];
|
|
782
|
-
if (bucket.vertexCount >= handle.maxVertexCount && bucket.indexCount >= handle.maxIndexCount) {
|
|
783
|
-
if (smallestBucket == null || bucket.vertexCount < smallestBucket.vertexCount) {
|
|
784
|
-
smallestBucket = bucket;
|
|
785
|
-
smallestBucketIndex = i;
|
|
786
|
-
}
|
|
787
|
-
}
|
|
788
|
-
}
|
|
789
|
-
// if we have a bucket that is big enough, use it
|
|
790
|
-
if (smallestBucket != null) {
|
|
791
|
-
const bucket = smallestBucket;
|
|
792
|
-
if (debugInstancing)
|
|
793
|
-
console.debug(`[Instancing] SET GEOMETRY \"${handle.name}\"\nGEOMETRY_ID=${bucket.geometryIndex}\n${this._currentInstanceCount} instances\n${handle.maxVertexCount} vertices, ${handle.maxIndexCount} indices, `);
|
|
794
|
-
try {
|
|
795
|
-
this._batchedMesh.setGeometryAt(bucket.geometryIndex, handle.object.geometry as BufferGeometry);
|
|
796
|
-
const newIndex = this._batchedMesh.addInstance(bucket.geometryIndex);
|
|
797
|
-
this._batchedMesh.setMatrixAt(newIndex, handle.object.matrixWorld);
|
|
798
|
-
this._batchedMesh.setVisibleAt(newIndex, true);
|
|
799
|
-
handle.__instanceIndex = newIndex;
|
|
800
|
-
this._usedBuckets[bucket.geometryIndex] = bucket;
|
|
801
|
-
this._availableBuckets.splice(smallestBucketIndex, 1);
|
|
802
|
-
return;
|
|
803
|
-
}
|
|
804
|
-
catch (err) {
|
|
805
|
-
if (debugInstancing)
|
|
806
|
-
console.error("Failed to re-use space", err);
|
|
807
|
-
else if (isDevEnvironment()) {
|
|
808
|
-
console.warn(`Failed to re-use space \"${err instanceof Error ? err.message : err}\" in bucket ${bucket.geometryIndex} (${bucket.vertexCount}) - will add new geometry instead`);
|
|
809
|
-
}
|
|
810
|
-
}
|
|
811
|
-
}
|
|
812
|
-
|
|
813
769
|
// otherwise add more geometry / instances
|
|
814
770
|
let geometryId = this._geometryIds.get(geo);
|
|
815
771
|
if (geometryId === undefined || geometryId === null) {
|
|
816
772
|
if (debugInstancing)
|
|
817
|
-
console.debug(`[Instancing] > ADD GEOMETRY \"${handle.name}\"\n${this._currentInstanceCount} instances, ${handle.maxVertexCount} max vertices, ${handle.maxIndexCount} max indices`);
|
|
773
|
+
console.debug(`[Instancing] > ADD NEW GEOMETRY \"${handle.name} (${geo.name}; ${geo.uuid})\"\n${this._currentInstanceCount} instances, ${handle.maxVertexCount} max vertices, ${handle.maxIndexCount} max indices`);
|
|
818
774
|
|
|
819
775
|
geometryId = this._batchedMesh.addGeometry(geo, handle.maxVertexCount, handle.maxIndexCount);
|
|
820
776
|
this._geometryIds.set(geo, geometryId);
|
|
@@ -829,7 +785,6 @@ class InstancedMeshRenderer {
|
|
|
829
785
|
handle.__instanceIndex = i;
|
|
830
786
|
handle.__reservedVertexRange = handle.maxVertexCount;
|
|
831
787
|
handle.__reservedIndexRange = handle.maxIndexCount;
|
|
832
|
-
this._usedBuckets[i] = { geometryIndex: geometryId, vertexCount: handle.maxVertexCount, indexCount: handle.maxIndexCount };
|
|
833
788
|
this._batchedMesh.setMatrixAt(i, handle.object.matrixWorld);
|
|
834
789
|
if (debugInstancing)
|
|
835
790
|
console.debug(`[Instancing] > ADDED INSTANCE \"${handle.name}\"\nGEOMETRY_ID=${geometryId}\n${this._currentInstanceCount} instances\nIndex: ${handle.__instanceIndex}`);
|
|
@@ -842,7 +797,6 @@ class InstancedMeshRenderer {
|
|
|
842
797
|
console.warn("Cannot remove geometry, instance index is invalid", handle.name);
|
|
843
798
|
return;
|
|
844
799
|
}
|
|
845
|
-
this._usedBuckets.splice(handle.__instanceIndex, 1);
|
|
846
800
|
// deleteGeometry is currently not useable since there's no optimize method
|
|
847
801
|
// https://github.com/mrdoob/three.js/issues/27985
|
|
848
802
|
// if (del)
|
|
@@ -853,11 +807,6 @@ class InstancedMeshRenderer {
|
|
|
853
807
|
console.debug(`[Instancing] < REMOVE INSTANCE \"${handle.name}\" at [${handle.__instanceIndex}]\nGEOMETRY_ID=${handle.__geometryIndex}\n${this._currentInstanceCount} instances\nIndex: ${handle.__instanceIndex}`);
|
|
854
808
|
}
|
|
855
809
|
this._batchedMesh.deleteInstance(handle.__instanceIndex);
|
|
856
|
-
this._availableBuckets.push({
|
|
857
|
-
geometryIndex: handle.__geometryIndex,
|
|
858
|
-
vertexCount: handle.reservedVertexCount,
|
|
859
|
-
indexCount: handle.reservedIndexCount
|
|
860
|
-
});
|
|
861
810
|
}
|
|
862
811
|
}
|
|
863
812
|
|
|
@@ -43,20 +43,20 @@ export class PostProcessingHandler {
|
|
|
43
43
|
this.context = context;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
apply(components: PostProcessingEffect[]) {
|
|
46
|
+
apply(components: PostProcessingEffect[]) : Promise<void> {
|
|
47
47
|
if ("env" in import.meta && import.meta.env.VITE_NEEDLE_USE_POSTPROCESSING === "false") {
|
|
48
48
|
if (debug) console.warn("Postprocessing is disabled via vite env setting");
|
|
49
49
|
else console.debug("Postprocessing is disabled via vite env setting");
|
|
50
|
-
return;
|
|
50
|
+
return Promise.resolve();
|
|
51
51
|
}
|
|
52
52
|
if (!NEEDLE_USE_POSTPROCESSING) {
|
|
53
53
|
if (debug) console.warn("Postprocessing is disabled via global vite define setting");
|
|
54
54
|
else console.debug("Postprocessing is disabled via vite define");
|
|
55
|
-
return;
|
|
55
|
+
return Promise.resolve();
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
this._isActive = true;
|
|
59
|
-
this.onApply(this.context, components);
|
|
59
|
+
return this.onApply(this.context, components);
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
unapply() {
|
|
@@ -98,11 +98,12 @@ export class PostProcessingHandler {
|
|
|
98
98
|
|
|
99
99
|
// IMPORTANT
|
|
100
100
|
// Load postprocessing modules ONLY here to get lazy loading of the postprocessing package
|
|
101
|
-
|
|
101
|
+
await Promise.all([
|
|
102
102
|
MODULES.POSTPROCESSING.load(),
|
|
103
103
|
MODULES.POSTPROCESSING_AO.load(),
|
|
104
104
|
// import("./Effects/Sharpening.effect")
|
|
105
105
|
]);
|
|
106
|
+
|
|
106
107
|
// try {
|
|
107
108
|
// internal_SetSharpeningEffectModule(modules[2]);
|
|
108
109
|
// }
|
|
@@ -179,16 +180,15 @@ export class PostProcessingHandler {
|
|
|
179
180
|
// https://github.com/pmndrs/postprocessing/blob/271944b74b543a5b743a62803a167b60cc6bb4ee/src/core/EffectComposer.js#L230C12-L230C12
|
|
180
181
|
renderer[autoclearSetting] = renderer.autoClear;
|
|
181
182
|
|
|
182
|
-
const maxSamples = renderer.capabilities.maxSamples;
|
|
183
183
|
// create composer and set active on context
|
|
184
184
|
if (!this._composer) {
|
|
185
185
|
// const hdrRenderTarget = new WebGLRenderTarget(window.innerWidth, window.innerHeight, { type: HalfFloatType });
|
|
186
186
|
this._composer = new MODULES.POSTPROCESSING.MODULE.EffectComposer(renderer, {
|
|
187
187
|
frameBufferType: HalfFloatType,
|
|
188
188
|
stencilBuffer: true,
|
|
189
|
-
multisampling: Math.min(DeviceUtilities.isMobileDevice() ? 4 : 8, maxSamples),
|
|
190
189
|
});
|
|
191
190
|
}
|
|
191
|
+
|
|
192
192
|
if (context.composer && context.composer !== this._composer) {
|
|
193
193
|
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.");
|
|
194
194
|
}
|
|
@@ -219,18 +219,12 @@ export class PostProcessingHandler {
|
|
|
219
219
|
if (ef instanceof MODULES.POSTPROCESSING.MODULE.Effect)
|
|
220
220
|
effects.push(ef as Effect);
|
|
221
221
|
else if (ef instanceof MODULES.POSTPROCESSING.MODULE.Pass) {
|
|
222
|
-
// const pass = new MODULES.POSTPROCESSING.MODULE.EffectPass(cam, ...effects);
|
|
223
|
-
// pass.mainScene = scene;
|
|
224
|
-
// pass.name = effects.map(e => e.constructor.name).join(", ");
|
|
225
|
-
// pass.enabled = true;
|
|
226
|
-
// composer.addPass(pass);
|
|
227
|
-
// effects.length = 0;
|
|
228
222
|
composer.addPass(ef as Pass);
|
|
229
223
|
}
|
|
230
224
|
else {
|
|
231
225
|
// seems some effects are not correctly typed, but three can deal with them,
|
|
232
226
|
// so we might need to just pass them through
|
|
233
|
-
|
|
227
|
+
composer.addPass(ef);
|
|
234
228
|
}
|
|
235
229
|
}
|
|
236
230
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { Effect } from "postprocessing";
|
|
2
2
|
|
|
3
3
|
import { isDevEnvironment, showBalloonMessage } from "../../engine/debug/index.js";
|
|
4
|
+
import { Context } from "../../engine/engine_context.js";
|
|
4
5
|
import type { EditorModification, IEditorModification as IEditorModificationReceiver } from "../../engine/engine_editor-sync.js";
|
|
5
6
|
import { serializeable } from "../../engine/engine_serialization_decorator.js";
|
|
6
|
-
import { getParam } from "../../engine/engine_utils.js";
|
|
7
|
+
import { DeviceUtilities, getParam } from "../../engine/engine_utils.js";
|
|
7
8
|
import { Behaviour } from "../Component.js";
|
|
8
9
|
import { EffectWrapper } from "./Effects/EffectWrapper.js";
|
|
9
10
|
import { PostProcessingEffect } from "./PostProcessingEffect.js";
|
|
@@ -58,6 +59,16 @@ export class Volume extends Behaviour implements IEditorModificationReceiver, IP
|
|
|
58
59
|
@serializeable(VolumeProfile)
|
|
59
60
|
sharedProfile?: VolumeProfile;
|
|
60
61
|
|
|
62
|
+
/**
|
|
63
|
+
* Set multisampling to "auto" to automatically adjust the multisampling level based on performance.
|
|
64
|
+
* Set to a number to manually set the multisampling level.
|
|
65
|
+
* @default "auto"
|
|
66
|
+
* @min 0
|
|
67
|
+
* @max renderer.capabilities.maxSamples
|
|
68
|
+
*/
|
|
69
|
+
@serializeable()
|
|
70
|
+
multisampling: "auto" | number = "auto";
|
|
71
|
+
|
|
61
72
|
/**
|
|
62
73
|
* Add a post processing effect to the stack and schedules the effect stack to be re-created.
|
|
63
74
|
*/
|
|
@@ -66,12 +77,15 @@ export class Volume extends Behaviour implements IEditorModificationReceiver, IP
|
|
|
66
77
|
if (!(entry instanceof PostProcessingEffect)) {
|
|
67
78
|
entry = new EffectWrapper(entry);
|
|
68
79
|
}
|
|
69
|
-
if(entry.gameObject === undefined) this.gameObject.addComponent(entry);
|
|
80
|
+
if (entry.gameObject === undefined) this.gameObject.addComponent(entry);
|
|
70
81
|
if (this._effects.includes(entry)) return effect;
|
|
71
82
|
this._effects.push(entry);
|
|
72
83
|
this._isDirty = true;
|
|
73
84
|
return effect;
|
|
74
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* Remove a post processing effect from the stack and schedules the effect stack to be re-created.
|
|
88
|
+
*/
|
|
75
89
|
removeEffect<T extends PostProcessingEffect | Effect>(effect: T): T {
|
|
76
90
|
|
|
77
91
|
let index = -1;
|
|
@@ -106,7 +120,7 @@ export class Volume extends Behaviour implements IEditorModificationReceiver, IP
|
|
|
106
120
|
/**
|
|
107
121
|
* When dirty the post processing effects will be re-applied
|
|
108
122
|
*/
|
|
109
|
-
markDirty() {
|
|
123
|
+
markDirty(): void {
|
|
110
124
|
this._isDirty = true;
|
|
111
125
|
}
|
|
112
126
|
|
|
@@ -128,7 +142,13 @@ export class Volume extends Behaviour implements IEditorModificationReceiver, IP
|
|
|
128
142
|
this.sharedProfile?.__init(this);
|
|
129
143
|
}
|
|
130
144
|
|
|
145
|
+
private _componentEnabledTime: number = -1;
|
|
146
|
+
private _multisampleAutoChangeTime: number = 0;
|
|
147
|
+
private _multisampleAutoDecreaseTime: number = 0;
|
|
148
|
+
|
|
149
|
+
/** @internal */
|
|
131
150
|
onEnable(): void {
|
|
151
|
+
this._componentEnabledTime = this.context.time.realtimeSinceStartup;
|
|
132
152
|
this._isDirty = true;
|
|
133
153
|
}
|
|
134
154
|
|
|
@@ -155,7 +175,7 @@ export class Volume extends Behaviour implements IEditorModificationReceiver, IP
|
|
|
155
175
|
}
|
|
156
176
|
}
|
|
157
177
|
|
|
158
|
-
if (this.context.composer && this._postprocessing
|
|
178
|
+
if (this.context.composer && this._postprocessing && this._postprocessing.composer === this.context.composer) {
|
|
159
179
|
if (this.context.renderer.getContext().isContextLost()) {
|
|
160
180
|
this.context.renderer.forceContextRestore();
|
|
161
181
|
}
|
|
@@ -164,6 +184,40 @@ export class Volume extends Behaviour implements IEditorModificationReceiver, IP
|
|
|
164
184
|
|
|
165
185
|
this.context.composer.setMainScene(this.context.scene);
|
|
166
186
|
|
|
187
|
+
const composer = this.context.composer;
|
|
188
|
+
if (this.multisampling === "auto") {
|
|
189
|
+
|
|
190
|
+
const timeSinceLastChange = this.context.time.realtimeSinceStartup - this._multisampleAutoChangeTime;
|
|
191
|
+
|
|
192
|
+
if (this.context.time.realtimeSinceStartup - this._componentEnabledTime > 2
|
|
193
|
+
&& timeSinceLastChange > .5
|
|
194
|
+
) {
|
|
195
|
+
const prev = composer.multisampling;
|
|
196
|
+
|
|
197
|
+
if (composer.multisampling > 0 && this.context.time.smoothedFps <= 50) {
|
|
198
|
+
this._multisampleAutoChangeTime = this.context.time.realtimeSinceStartup;
|
|
199
|
+
this._multisampleAutoDecreaseTime = this.context.time.realtimeSinceStartup;
|
|
200
|
+
composer.multisampling *= .5;
|
|
201
|
+
composer.multisampling = Math.floor(composer.multisampling);
|
|
202
|
+
if (debug) console.debug(`[PostProcessing] Reduced multisampling from ${prev} to ${composer.multisampling}`);
|
|
203
|
+
}
|
|
204
|
+
// if performance is good for a while try increasing multisampling again
|
|
205
|
+
else if (timeSinceLastChange > 1
|
|
206
|
+
&& this.context.time.smoothedFps >= 59
|
|
207
|
+
&& composer.multisampling < this.context.renderer.capabilities.maxSamples
|
|
208
|
+
&& this.context.time.realtimeSinceStartup - this._multisampleAutoDecreaseTime > 10
|
|
209
|
+
) {
|
|
210
|
+
this._multisampleAutoChangeTime = this.context.time.realtimeSinceStartup;
|
|
211
|
+
composer.multisampling = composer.multisampling <= 0 ? 1 : composer.multisampling * 2;
|
|
212
|
+
composer.multisampling = Math.floor(composer.multisampling);
|
|
213
|
+
if (debug) console.debug(`[PostProcessing] Increased multisampling from ${prev} to ${composer.multisampling}`);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
composer.multisampling = Math.max(0, Math.min(this.multisampling, this.context.renderer.capabilities.maxSamples));
|
|
219
|
+
}
|
|
220
|
+
|
|
167
221
|
// only set the main camera if any pass has a different camera
|
|
168
222
|
// trying to avoid doing this regularly since it involves doing potentially unnecessary work
|
|
169
223
|
// https://github.com/pmndrs/postprocessing/blob/3d3df0576b6d49aec9e763262d5a1ff7429fd91a/src/core/EffectComposer.js#L406
|
|
@@ -222,8 +276,30 @@ export class Volume extends Behaviour implements IEditorModificationReceiver, IP
|
|
|
222
276
|
if (this._activeEffects.length > 0) {
|
|
223
277
|
if (!this._postprocessing)
|
|
224
278
|
this._postprocessing = new PostProcessingHandler(this.context);
|
|
225
|
-
|
|
226
|
-
this.
|
|
279
|
+
|
|
280
|
+
this._postprocessing.apply(this._activeEffects)
|
|
281
|
+
?.then(() => {
|
|
282
|
+
if (!this.activeAndEnabled) return;
|
|
283
|
+
|
|
284
|
+
this._applyPostQueue();
|
|
285
|
+
|
|
286
|
+
const composer = this._postprocessing?.composer;
|
|
287
|
+
if (composer) {
|
|
288
|
+
if (this.multisampling === "auto") {
|
|
289
|
+
composer.multisampling = DeviceUtilities.isMobileDevice()
|
|
290
|
+
? 2
|
|
291
|
+
: 4;
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
composer.multisampling = Math.max(0, Math.min(this.multisampling, this.context.renderer.capabilities.maxSamples));
|
|
295
|
+
}
|
|
296
|
+
if (debug) console.debug(`[PostProcessing] Set multisampling to ${composer.multisampling} (Is Mobile: ${DeviceUtilities.isMobileDevice()})`);
|
|
297
|
+
}
|
|
298
|
+
else if (debug) {
|
|
299
|
+
console.warn(`[PostProcessing] No composer found`);
|
|
300
|
+
}
|
|
301
|
+
})
|
|
302
|
+
|
|
227
303
|
}
|
|
228
304
|
|
|
229
305
|
}
|