@woosh/meep-engine 2.34.32 → 2.34.36
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/core/assert.js +11 -0
- package/core/binary/BitSet.js +5 -0
- package/core/bvh2/BinaryNode.js +210 -74
- package/core/bvh2/Node.d.ts +3 -0
- package/core/bvh2/aabb3/AABB3.js +50 -4
- package/core/bvh2/aabb3/AABB3Math.js +1 -1
- package/core/bvh2/aabb3/aabb3_from_v3_array.js +34 -0
- package/core/bvh2/aabb3/aabb3_from_v3_array_transformed.js +39 -0
- package/core/bvh2/aabb3/aabb3_intersects_frustum_degree.js +46 -0
- package/core/bvh2/transform/RotationOptimizer.js +2 -262
- package/core/bvh2/transform/tryRotateSingleNode.js +259 -0
- package/core/bvh2/traversal/ThreeFrustumsIntersectionBVHVisitor.js +16 -35
- package/core/bvh2/traversal/queryBinaryNode_FrustumIntersections.js +52 -0
- package/core/collection/list/List.js +0 -34
- package/core/events/signal/Signal.js +1 -1
- package/core/geom/3d/aabb/aabb3_matrix4_project.js +2 -3
- package/core/geom/Quaternion.d.ts +2 -0
- package/engine/Engine.js +5 -0
- package/engine/asset/loaders/ArrayBufferLoader.js +7 -0
- package/engine/asset/loaders/image/ImageRGBADataLoader.js +11 -6
- package/engine/development/performance/AbstractMetric.js +4 -0
- package/engine/development/performance/RingBufferMetric.js +4 -0
- package/engine/ecs/EntityBuilder.js +12 -5
- package/engine/ecs/EntityComponentDataset.js +26 -6
- package/engine/ecs/attachment/AttachmentSystem.js +1 -1
- package/engine/ecs/attachment/TransformAttachmentBinding.js +0 -1
- package/engine/ecs/foliage/FoliageVisibilitySetBuilder.js +1 -31
- package/engine/ecs/foliage/InstancedFoliage.js +81 -152
- package/engine/ecs/foliage/ViewState.js +190 -0
- package/engine/ecs/foliage/ecs/Foliage2System.js +80 -12
- package/engine/ecs/foliage/ecs/InstancedMeshComponent.js +30 -0
- package/engine/ecs/foliage/ecs/InstancedMeshLayer.js +16 -0
- package/engine/ecs/foliage/ecs/InstancedMeshUtils.js +2 -2
- package/engine/ecs/parent/EntityNode.js +31 -49
- package/engine/ecs/sockets/AttachmentSockets.js +11 -1
- package/engine/ecs/transform-attachment/TransformAttachment.js +88 -0
- package/engine/ecs/transform-attachment/TransformAttachmentSystem.js +59 -0
- package/engine/graphics/GraphicsEngine.js +23 -2
- package/engine/graphics/ecs/light/binding/three/ThreeLightBinding.js +2 -19
- package/engine/graphics/ecs/mesh/updateNodeByTransformAndBBB.js +21 -21
- package/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +9 -1
- package/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.js +4 -1
- package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.js +3 -0
- package/engine/graphics/ecs/mesh-v2/sample/load_gltf.js +40 -8
- package/engine/graphics/ecs/mesh-v2/three_object_to_entity_composition.js +3 -3
- package/engine/graphics/geometry/instancing/InstancedMeshGroup.js +17 -11
- package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +1 -34
- package/engine/graphics/micron/build/fill_patch_geometry_data.js +19 -6
- package/engine/graphics/micron/format/MicronGeometry.js +21 -0
- package/engine/graphics/micron/plugin/MicronRenderPlugin.js +0 -3
- package/engine/graphics/micron/prototypeVirtualGeometry.js +69 -1
- package/engine/graphics/render/layers/RenderLayer.js +22 -85
- package/engine/graphics/render/visibility/VisibilityComputer.js +23 -103
- package/engine/sound/ecs/emitter/SoundEmitterSystem.js +1 -1
- package/package.json +1 -1
- package/samples/terrain/editor.js +0 -1
|
@@ -1,42 +1,14 @@
|
|
|
1
|
-
import { Frustum } from "three";
|
|
2
|
-
import { frustumFromCamera } from "../../ecs/camera/CameraSystem.js";
|
|
3
1
|
import { assert } from "../../../../core/assert.js";
|
|
4
2
|
|
|
5
|
-
const frustum = new Frustum();
|
|
6
|
-
/**
|
|
7
|
-
*
|
|
8
|
-
* @type {VisibilityFilter[]}
|
|
9
|
-
*/
|
|
10
|
-
const objectFilters = [];
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
*
|
|
14
|
-
* @type {function[]}
|
|
15
|
-
*/
|
|
16
|
-
const objectFilterExecutors = [];
|
|
17
|
-
|
|
18
|
-
export const SOURCE_RENDER_LAYER_PROPERTY = '@meep-render-layer';
|
|
19
|
-
|
|
20
3
|
export class VisibilityComputer {
|
|
21
4
|
constructor() {
|
|
22
|
-
|
|
23
|
-
*
|
|
24
|
-
* @type {VisibilityFilter[]}
|
|
25
|
-
*/
|
|
26
|
-
this.filters = [];
|
|
5
|
+
|
|
27
6
|
/**
|
|
28
7
|
*
|
|
29
8
|
* @type {CameraView}
|
|
30
9
|
*/
|
|
31
10
|
this.__view = null;
|
|
32
11
|
|
|
33
|
-
/**
|
|
34
|
-
* @deprecated use view.frustum instead
|
|
35
|
-
* @type {Frustum[]}
|
|
36
|
-
* @private
|
|
37
|
-
*/
|
|
38
|
-
this.__frustums = [];
|
|
39
|
-
|
|
40
12
|
/**
|
|
41
13
|
*
|
|
42
14
|
* @type {RenderLayer}
|
|
@@ -53,15 +25,28 @@ export class VisibilityComputer {
|
|
|
53
25
|
}
|
|
54
26
|
|
|
55
27
|
/**
|
|
56
|
-
*
|
|
28
|
+
* @deprecated
|
|
29
|
+
* @returns {VisibilityFilter[]}
|
|
30
|
+
*/
|
|
31
|
+
get filters() {
|
|
32
|
+
|
|
33
|
+
throw new Error('Method is deprecated');
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @deprecated
|
|
38
|
+
* @param {VisibilityFilter[]} v
|
|
39
|
+
*/
|
|
40
|
+
set filters(v) {
|
|
41
|
+
throw new Error('Method is deprecated');
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @deprecated
|
|
57
46
|
* @param {VisibilityFilter} filter
|
|
58
47
|
*/
|
|
59
48
|
addFilter(filter) {
|
|
60
|
-
|
|
61
|
-
throw new Error(`Filter named '${filter.name}' already exists`);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
this.filters.push(filter);
|
|
49
|
+
throw new Error('Method is deprecated');
|
|
65
50
|
}
|
|
66
51
|
|
|
67
52
|
/**
|
|
@@ -70,16 +55,8 @@ export class VisibilityComputer {
|
|
|
70
55
|
* @returns {boolean}
|
|
71
56
|
*/
|
|
72
57
|
removeFilter(filter) {
|
|
73
|
-
const i = this.filters.indexOf(filter);
|
|
74
|
-
|
|
75
|
-
if (i === -1) {
|
|
76
|
-
//not present
|
|
77
|
-
return false;
|
|
78
|
-
}
|
|
79
58
|
|
|
80
|
-
|
|
81
|
-
this.filters.splice(i, 1);
|
|
82
|
-
return true;
|
|
59
|
+
throw new Error('Method is deprecated');
|
|
83
60
|
}
|
|
84
61
|
|
|
85
62
|
/**
|
|
@@ -97,9 +74,6 @@ export class VisibilityComputer {
|
|
|
97
74
|
__includeObject(object3d) {
|
|
98
75
|
assert.equal(object3d.isObject3D, true, 'object3d.isObject3D !== true');
|
|
99
76
|
|
|
100
|
-
// mark object, this is a hack, needs to be fixed at some point
|
|
101
|
-
object3d[SOURCE_RENDER_LAYER_PROPERTY] = this.__activeLayer;
|
|
102
|
-
|
|
103
77
|
//object passed all filters, add it to visible set
|
|
104
78
|
this.__output.push(object3d);
|
|
105
79
|
|
|
@@ -111,8 +85,6 @@ export class VisibilityComputer {
|
|
|
111
85
|
* @param {RenderLayer} layer
|
|
112
86
|
*/
|
|
113
87
|
__processLayer(layer) {
|
|
114
|
-
|
|
115
|
-
|
|
116
88
|
if (!layer.state.visible) {
|
|
117
89
|
//whole layer is hidden
|
|
118
90
|
|
|
@@ -123,61 +95,13 @@ export class VisibilityComputer {
|
|
|
123
95
|
this.__activeLayer = layer;
|
|
124
96
|
|
|
125
97
|
if (layer.managed) {
|
|
126
|
-
this.__output.pushOther(layer.visibleSet);
|
|
127
98
|
|
|
128
|
-
|
|
129
|
-
const elements = layer.visibleSet.elements;
|
|
130
|
-
|
|
131
|
-
const element_count = elements.length;
|
|
132
|
-
for (let j = 0; j < element_count; j++) {
|
|
133
|
-
const object3D = elements[j];
|
|
134
|
-
|
|
135
|
-
object3D[SOURCE_RENDER_LAYER_PROPERTY] = layer;
|
|
136
|
-
}
|
|
99
|
+
this.__output.pushOther(layer.visibleSet);
|
|
137
100
|
|
|
138
101
|
return;
|
|
139
102
|
}
|
|
140
103
|
|
|
141
|
-
|
|
142
|
-
// this.__output.initializeUpdate();
|
|
143
|
-
|
|
144
|
-
const filters = this.filters;
|
|
145
|
-
const filterCount = filters.length;
|
|
146
|
-
|
|
147
|
-
let objectFilterCount = 0;
|
|
148
|
-
let i;
|
|
149
|
-
for (i = 0; i < filterCount; i++) {
|
|
150
|
-
const f = filters[i];
|
|
151
|
-
|
|
152
|
-
if (f.enabled && f.layerPredicate(layer)) {
|
|
153
|
-
objectFilters[objectFilterCount] = f;
|
|
154
|
-
objectFilterExecutors[objectFilterCount] = f.objectPredicateExecute;
|
|
155
|
-
|
|
156
|
-
objectFilterCount++;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
//prepare filters
|
|
162
|
-
for (i = 0; i < objectFilterCount; i++) {
|
|
163
|
-
const f = objectFilters[i];
|
|
164
|
-
|
|
165
|
-
f.objectPredicateInitialize(this.__view.camera);
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
objectFilterExecutors.length = objectFilterCount;
|
|
169
|
-
|
|
170
|
-
layer.buildVisibleSet(this.__frustums, objectFilterExecutors, this.__includeObject, this);
|
|
171
|
-
|
|
172
|
-
//finalize filters
|
|
173
|
-
for (i = 0; i < objectFilterCount; i++) {
|
|
174
|
-
const f = objectFilters[i];
|
|
175
|
-
|
|
176
|
-
f.objectPredicateFinalize();
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
// layer.visibleSet.finalizeUpdate();
|
|
104
|
+
layer.buildVisibleSet(this.__view, this.__includeObject, this);
|
|
181
105
|
}
|
|
182
106
|
|
|
183
107
|
|
|
@@ -193,10 +117,6 @@ export class VisibilityComputer {
|
|
|
193
117
|
* @param {RenderLayerManager} renderLayers
|
|
194
118
|
*/
|
|
195
119
|
build(renderLayers) {
|
|
196
|
-
frustumFromCamera(this.__view.camera, frustum);
|
|
197
|
-
|
|
198
|
-
this.__frustums = [frustum];
|
|
199
|
-
|
|
200
120
|
renderLayers.traverse(this.__processLayer, this);
|
|
201
121
|
}
|
|
202
122
|
}
|
|
@@ -14,11 +14,11 @@ import { BinaryNode } from "../../../../core/bvh2/BinaryNode.js";
|
|
|
14
14
|
import SoundListener from "../SoundListener.js";
|
|
15
15
|
import { IncrementalDeltaSet } from "../../../graphics/render/visibility/IncrementalDeltaSet.js";
|
|
16
16
|
import { queryBinaryNode_SphereIntersections_Data } from "../../../../core/bvh2/traversal/queryBinaryNode_SphereIntersections.js";
|
|
17
|
-
import { tryRotateSingleNode } from "../../../../core/bvh2/transform/RotationOptimizer.js";
|
|
18
17
|
import { SoundEmitterComponentContext } from "./SoundEmitterComponentContext.js";
|
|
19
18
|
import { SoundEmitterFlags } from "./SoundEmitterFlags.js";
|
|
20
19
|
import { SoundEmitterChannel } from "./SoundEmitterChannel.js";
|
|
21
20
|
import { invokeObjectCompare } from "../../../../core/model/object/invokeObjectCompare.js";
|
|
21
|
+
import { tryRotateSingleNode } from "../../../../core/bvh2/transform/tryRotateSingleNode.js";
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
* @readonly
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"productName": "Meep",
|
|
6
6
|
"description": "production-ready JavaScript game engine based on Entity Component System Architecture",
|
|
7
7
|
"author": "Alexander Goldring",
|
|
8
|
-
"version": "2.34.
|
|
8
|
+
"version": "2.34.36",
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"gl-matrix": "3.4.3",
|
|
11
11
|
"fast-levenshtein": "2.0.6",
|
|
@@ -20,7 +20,6 @@ import { copy_Sampler2D_channel_data } from "../../engine/graphics/texture/sampl
|
|
|
20
20
|
import { TextureAssetLoader } from "../../engine/asset/loaders/texture/TextureAssetLoader.js";
|
|
21
21
|
import { CanvasView } from "../../view/elements/CanvasView.js";
|
|
22
22
|
import convertSampler2D2Canvas from "../../engine/graphics/texture/sampler/Sampler2D2Canvas.js";
|
|
23
|
-
import { drawSamplerHTML } from "../../engine/graphics/texture/sampler/util/drawSamplerHTML.js";
|
|
24
23
|
|
|
25
24
|
const engineHarness = new EngineHarness();
|
|
26
25
|
|