@woosh/meep-engine 2.33.59 → 2.33.63
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/bvh2/aabb3/AABB3.js +4 -1
- package/core/bvh2/traversal/traverseBinaryNodeUsingVisitor.js +6 -6
- package/core/cache/Cache.js +7 -0
- package/core/collection/array/fastArrayEquals.js +17 -0
- package/core/collection/array/typed/is_typed_array_equals.js +58 -0
- package/core/collection/map/AbstractAsyncMap.js +30 -0
- package/core/collection/map/AsyncMapWrapper.js +16 -0
- package/core/collection/map/AsyncRemoteHashMap.js +358 -0
- package/core/collection/map/CachedAsyncMap.js +34 -0
- package/core/geom/3d/SurfacePoint3.js +44 -5
- package/core/geom/Vector2.d.ts +2 -0
- package/core/geom/Vector4.js +5 -5
- package/core/geom/packing/MaxRectangles.js +13 -4
- package/core/math/hash/murmur3_32.js +3 -3
- package/ecs/grid/pick.js +44 -0
- package/editor/actions/concrete/PaintTerrainOverlayAction.js +1 -1
- package/editor/process/ObstacleGridDisplayProcess.js +1 -1
- package/editor/process/symbolic/makeGridPositionSymbolDisplay.js +1 -1
- package/editor/tools/FoliagePaintTool.js +1 -1
- package/editor/tools/GridPaintTool.js +2 -2
- package/editor/tools/paint/TerrainPaintTool.js +2 -2
- package/editor/tools/paint/TerrainTexturePaintTool.js +1 -1
- package/editor/view/EditorView.js +1 -1
- package/editor/view/GridPickCoordinateView.js +2 -2
- package/engine/animation/removeEntityGenericEffect.js +22 -31
- package/engine/asset/Asset.js +0 -45
- package/engine/asset/AssetDescription.js +51 -0
- package/engine/asset/AssetManager.d.ts +7 -0
- package/engine/asset/AssetManager.js +98 -2
- package/engine/asset/AssetTransformer.d.ts +5 -0
- package/engine/asset/AssetTransformer.js +15 -0
- package/engine/asset/loaders/GLTFAssetLoader.js +27 -25
- package/engine/asset/loaders/material/computeImageBitmapEquality.js +2 -2
- package/engine/asset/loaders/material/computeTextureEquality.js +2 -2
- package/engine/asset/loaders/material/computeTextureHash.js +7 -13
- package/engine/ecs/animation/InverseKinematicsSystem.js +1 -1
- package/engine/ecs/attachment/AttachmentSystem.js +18 -17
- package/engine/ecs/evaluation/world/ReadTerrainLayerWeightPointFitness.js +1 -1
- package/engine/ecs/fow/FogOfWarRevealerSystem.js +2 -2
- package/engine/ecs/grid/HeightMap2NormalMap.js +1 -1
- package/engine/ecs/grid/NormalMap2AOMap.js +1 -1
- package/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +60 -45
- package/engine/ecs/gui/position/ViewportPositionSystem.js +5 -5
- package/engine/ecs/parent/EntityNode.d.ts +20 -0
- package/engine/ecs/parent/EntityNode.js +284 -0
- package/engine/ecs/parent/FaceEditor.js +137 -0
- package/engine/ecs/parent/testCompositionEntityNode.js +153 -0
- package/engine/ecs/parent/testHuDPerf.js +123 -0
- package/engine/ecs/storage/binary/BinaryClassUpgrader.js +1 -0
- package/engine/ecs/team/Team.js +82 -0
- package/engine/ecs/terrain/ecs/ClingToTerrainSystem.js +2 -2
- package/engine/ecs/terrain/ecs/Terrain.js +14 -5
- package/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +112 -0
- package/engine/ecs/terrain/util/obtainTerrain.js +23 -0
- package/engine/ecs/tooltip/TooltipComponentSystem.js +1 -1
- package/engine/ecs/util/removeComponentsExcept.js +3 -3
- package/engine/graphics/GraphicsEngine.js +4 -5
- package/engine/graphics/camera/testClippingPlaneComputation.js +0 -4
- package/engine/graphics/ecs/camera/topdown/TopDownCameraLanderSystem.js +1 -1
- package/engine/graphics/ecs/light/LightSystem.js +1 -1
- package/engine/graphics/ecs/mesh/Mesh.js +5 -5
- package/engine/graphics/ecs/mesh/MeshSystem.js +12 -20
- package/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +29 -0
- package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.js +158 -1
- package/engine/graphics/ecs/path/testPathDisplaySystem.js +0 -2
- package/engine/graphics/ecs/trail2d/Trail2D.js +35 -1
- package/engine/graphics/ecs/trail2d/Trail2DSystem.js +26 -19
- package/engine/graphics/ecs/trail2d/makeGradientTrail.js +68 -0
- package/engine/graphics/ecs/water/WaterSystem.js +1 -1
- package/engine/graphics/ecs/water2/shader/testWaterShader.js +1 -1
- package/engine/graphics/geometry/buffered/query/GeometrySpatialQueryAccelerator.js +55 -11
- package/engine/graphics/micron/convert_three_object_to_micron.js +24 -7
- package/engine/graphics/micron/plugin/MicronRenderPlugin.js +107 -4
- package/engine/graphics/micron/plugin/serialization/BufferGeometrySerializationAdapter.js +176 -0
- package/engine/graphics/micron/render/v1/MaterialContext.js +1 -0
- package/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +19 -3
- package/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +3 -6
- package/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +0 -2
- package/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +2 -4
- package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +3 -1
- package/engine/graphics/render/frame_graph/FrameGraphBuilder.js +36 -0
- package/engine/graphics/render/frame_graph/IRenderContext.js +8 -0
- package/engine/graphics/render/frame_graph/RenderPass.js +32 -0
- package/engine/graphics/render/frame_graph/RenderPassFlags.js +6 -0
- package/engine/graphics/render/frame_graph/RenderPassResources.js +15 -0
- package/engine/graphics/render/frame_graph/Resource.js +21 -0
- package/engine/graphics/render/frame_graph/ResourceReference.js +14 -0
- package/engine/graphics/render/frame_graph/TextureDescriptor.js +30 -0
- package/engine/graphics/render/frame_graph/UsageModeType.js +5 -0
- package/engine/graphics/render/frame_graph/sample/deferred/GBufferDrawPass.js +27 -0
- package/engine/graphics/render/frame_graph/sample/deferred/PresentPass.js +17 -0
- package/engine/graphics/render/visibility/hiz/prototypeHiZ.js +0 -2
- package/engine/graphics/render/webgpu/sample/MeshInstance.js +99 -0
- package/engine/graphics/render/webgpu/sample/fragmentDeferredRendering.wgsl +71 -0
- package/engine/graphics/render/webgpu/sample/fragmentGBuffersDebugView.wgsl +39 -0
- package/engine/graphics/render/webgpu/sample/fragmentWriteGBuffers.wgsl +21 -0
- package/engine/graphics/render/webgpu/sample/lightUpdate.wgsl +41 -0
- package/engine/graphics/render/webgpu/sample/main.js +604 -0
- package/engine/graphics/render/webgpu/sample/vertexTextureQuad.wgsl +9 -0
- package/engine/graphics/render/webgpu/sample/vertexWriteGBuffers.wgsl +30 -0
- package/engine/graphics/shadows/ShadowMapRenderer.js +10 -4
- package/engine/graphics/shadows/testShadowMapRendering.js +0 -2
- package/engine/graphics/texture/sampler/Sampler2D.js +24 -45
- package/engine/{ecs/grid → graphics/texture/sampler}/sampler2DToFloat32Texture.js +1 -1
- package/engine/graphics/util/modelHitTest.js +63 -0
- package/engine/grid/systems/GridPosition2TransformSystem.js +1 -1
- package/engine/grid/systems/ViewportGridProjectionSystem.js +1 -1
- package/engine/grid/transform2grid/Transform2GridPositionSystem.js +1 -1
- package/engine/intelligence/behavior/ecs/WaitForEventBehavior.js +3 -0
- package/engine/save/storage/IndexedDBStorage.js +8 -1
- package/engine/scene/transitionToScene.js +1 -1
- package/generation/grid/actions/ContinuousGridCellActionSetTerrainHeight.js +1 -1
- package/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.js +1 -1
- package/generation/markers/debug/visualizeMarkers.js +1 -1
- package/generation/theme/ThemeEngine.js +1 -1
- package/package.json +1 -1
- package/samples/terrain/main.js +117 -0
- package/util/ScreenGridPicker.js +3 -0
- package/view/minimap/Minimap.js +1 -1
- package/engine/ecs/sockets/AttachmentSocketsSystem.js +0 -10
|
@@ -3,6 +3,57 @@ import { VGThreeRenderer } from "../render/v1/VGThreeRenderer.js";
|
|
|
3
3
|
import { RenderLayer } from "../../render/layers/RenderLayer.js";
|
|
4
4
|
import { RenderPassType } from "../../render/RenderPassType.js";
|
|
5
5
|
import { SOURCE_RENDER_LAYER_PROPERTY } from "../../render/visibility/VisibilityComputer.js";
|
|
6
|
+
import { AssetTransformer } from "../../../asset/AssetTransformer.js";
|
|
7
|
+
import { convert_three_object_to_micron } from "../convert_three_object_to_micron.js";
|
|
8
|
+
import { Cache } from "../../../../core/cache/Cache.js";
|
|
9
|
+
import { computeGeometryHash } from "../../../asset/loaders/geometry/geometry/computeGeometryHash.js";
|
|
10
|
+
import { computeGeometryEquality } from "../../../asset/loaders/geometry/geometry/computeGeometryEquality.js";
|
|
11
|
+
import { CachedAsyncMap } from "../../../../core/collection/map/CachedAsyncMap.js";
|
|
12
|
+
import { AsyncRemoteHashMap } from "../../../../core/collection/map/AsyncRemoteHashMap.js";
|
|
13
|
+
import { BufferGeometrySerializationAdapter } from "./serialization/BufferGeometrySerializationAdapter.js";
|
|
14
|
+
import { MicronGeometryBinarySerializationAdapter } from "../format/serialization/MicronGeometryBinarySerializationAdapter.js";
|
|
15
|
+
import { AsyncMapWrapper } from "../../../../core/collection/map/AsyncMapWrapper.js";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
*
|
|
19
|
+
* @type {string}
|
|
20
|
+
*/
|
|
21
|
+
const STORAGE_KEY = '@plugin/virtual-geometry-micron/geometry-cache';
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class GLTFAssetTransformer extends AssetTransformer {
|
|
25
|
+
/**
|
|
26
|
+
*
|
|
27
|
+
* @param {AbstractAsyncMap<THREE.BufferGeometry, MicronGeometry>} cache
|
|
28
|
+
*/
|
|
29
|
+
constructor(cache) {
|
|
30
|
+
super();
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
*
|
|
34
|
+
* @type {AbstractAsyncMap<THREE.BufferGeometry, MicronGeometry>}
|
|
35
|
+
* @private
|
|
36
|
+
*/
|
|
37
|
+
this.__cache = cache;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async transform(source) {
|
|
41
|
+
const animationClips = source.animations;
|
|
42
|
+
if (animationClips !== undefined && animationClips.length > 0) {
|
|
43
|
+
// not suitable
|
|
44
|
+
return source;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const root = source.create();
|
|
48
|
+
|
|
49
|
+
const micron_root = await convert_three_object_to_micron(root.clone(), this.__cache);
|
|
50
|
+
micron_root.boundingSphere = root.boundingSphere;
|
|
51
|
+
|
|
52
|
+
source.override_mesh = micron_root;
|
|
53
|
+
|
|
54
|
+
return source;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
6
57
|
|
|
7
58
|
export class MicronRenderPlugin extends EnginePlugin {
|
|
8
59
|
constructor() {
|
|
@@ -37,6 +88,40 @@ export class MicronRenderPlugin extends EnginePlugin {
|
|
|
37
88
|
});
|
|
38
89
|
|
|
39
90
|
this.__view_observers = new Map();
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
*
|
|
94
|
+
* @type {AsyncRemoteHashMap}
|
|
95
|
+
* @private
|
|
96
|
+
*/
|
|
97
|
+
this.__persisted_geometry = new AsyncRemoteHashMap({
|
|
98
|
+
keyHashFunction: computeGeometryHash,
|
|
99
|
+
keyEqualityFunction: computeGeometryEquality,
|
|
100
|
+
keySerializationAdapter: new BufferGeometrySerializationAdapter(),
|
|
101
|
+
valueSerializationAdapter: new MicronGeometryBinarySerializationAdapter(),
|
|
102
|
+
storageKeyPrefix: STORAGE_KEY,
|
|
103
|
+
|
|
104
|
+
});
|
|
105
|
+
/**
|
|
106
|
+
*
|
|
107
|
+
* @type {AbstractAsyncMap<THREE.BufferGeometry, MicronGeometry>}
|
|
108
|
+
* @private
|
|
109
|
+
*/
|
|
110
|
+
this.__cache = new CachedAsyncMap(
|
|
111
|
+
new AsyncMapWrapper(new Cache({
|
|
112
|
+
keyHashFunction: computeGeometryHash,
|
|
113
|
+
keyEqualityFunction: computeGeometryEquality
|
|
114
|
+
})),
|
|
115
|
+
this.__persisted_geometry
|
|
116
|
+
);
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
*
|
|
120
|
+
* @type {AssetTransformer}
|
|
121
|
+
* @private
|
|
122
|
+
*/
|
|
123
|
+
this.__asset_transformer = new GLTFAssetTransformer(this.__cache);
|
|
124
|
+
|
|
40
125
|
}
|
|
41
126
|
|
|
42
127
|
/**
|
|
@@ -87,13 +172,22 @@ export class MicronRenderPlugin extends EnginePlugin {
|
|
|
87
172
|
view.on.preRender.remove(observer);
|
|
88
173
|
}
|
|
89
174
|
|
|
175
|
+
__ingest_cache() {
|
|
176
|
+
this.engine.storage.lo
|
|
177
|
+
}
|
|
178
|
+
|
|
90
179
|
async startup() {
|
|
91
180
|
|
|
181
|
+
const engine = this.engine;
|
|
182
|
+
|
|
183
|
+
engine.assetManager.registerTransformer("model/gltf", this.__asset_transformer);
|
|
184
|
+
engine.assetManager.registerTransformer("model/gltf+json", this.__asset_transformer);
|
|
185
|
+
|
|
92
186
|
/**
|
|
93
187
|
*
|
|
94
188
|
* @type {GraphicsEngine}
|
|
95
189
|
*/
|
|
96
|
-
const ge =
|
|
190
|
+
const ge = engine.graphics;
|
|
97
191
|
|
|
98
192
|
ge.layers.add(this.__micron_render_layer);
|
|
99
193
|
|
|
@@ -101,13 +195,22 @@ export class MicronRenderPlugin extends EnginePlugin {
|
|
|
101
195
|
ge.views.elements.on.removed.add(this.__handle_view_removed, this);
|
|
102
196
|
|
|
103
197
|
// link all views
|
|
104
|
-
ge.views.elements.forEach(this.__handle_view_added,this);
|
|
198
|
+
ge.views.elements.forEach(this.__handle_view_added, this);
|
|
199
|
+
|
|
200
|
+
this.__persisted_geometry.attach_storage(engine.storage);
|
|
105
201
|
|
|
106
202
|
await super.startup();
|
|
107
203
|
}
|
|
108
204
|
|
|
109
205
|
async shutdown() {
|
|
110
|
-
const
|
|
206
|
+
const engine = this.engine;
|
|
207
|
+
|
|
208
|
+
this.__persisted_geometry.detach_storage();
|
|
209
|
+
|
|
210
|
+
engine.assetManager.unregisterTransformer("model/gltf", this.__asset_transformer);
|
|
211
|
+
engine.assetManager.unregisterTransformer("model/gltf+json", this.__asset_transformer);
|
|
212
|
+
|
|
213
|
+
const ge = engine.graphics;
|
|
111
214
|
|
|
112
215
|
ge.layers.remove(this.__micron_render_layer);
|
|
113
216
|
|
|
@@ -115,7 +218,7 @@ export class MicronRenderPlugin extends EnginePlugin {
|
|
|
115
218
|
ge.views.elements.on.removed.remove(this.__handle_view_removed, this);
|
|
116
219
|
|
|
117
220
|
// clear all observer
|
|
118
|
-
ge.views.elements.forEach(this.__handle_view_removed,this);
|
|
221
|
+
ge.views.elements.forEach(this.__handle_view_removed, this);
|
|
119
222
|
|
|
120
223
|
await super.shutdown();
|
|
121
224
|
}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { BinaryClassSerializationAdapter } from "../../../../ecs/storage/binary/BinaryClassSerializationAdapter.js";
|
|
2
|
+
import { BufferAttribute, BufferGeometry } from "three";
|
|
3
|
+
|
|
4
|
+
function typed_array_to_enum(array) {
|
|
5
|
+
if (array instanceof Uint8Array) {
|
|
6
|
+
return 0;
|
|
7
|
+
} else if (array instanceof Uint16Array) {
|
|
8
|
+
return 1;
|
|
9
|
+
} else if (array instanceof Uint32Array) {
|
|
10
|
+
return 2;
|
|
11
|
+
} else if (array instanceof Uint8Array) {
|
|
12
|
+
return 3;
|
|
13
|
+
} else if (array instanceof Uint16Array) {
|
|
14
|
+
return 4;
|
|
15
|
+
} else if (array instanceof Uint32Array) {
|
|
16
|
+
return 5;
|
|
17
|
+
} else if (array instanceof Float32Array) {
|
|
18
|
+
return 6;
|
|
19
|
+
} else if (array instanceof Float64Array) {
|
|
20
|
+
return 7;
|
|
21
|
+
} else {
|
|
22
|
+
throw new Error('Unsupported array type');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function marker_to_typed_array_constructor(marker) {
|
|
27
|
+
switch (marker) {
|
|
28
|
+
case 0:
|
|
29
|
+
return Uint8Array;
|
|
30
|
+
case 1:
|
|
31
|
+
return Uint16Array;
|
|
32
|
+
case 2:
|
|
33
|
+
return Uint32Array;
|
|
34
|
+
case 3:
|
|
35
|
+
return Int8Array;
|
|
36
|
+
case 4:
|
|
37
|
+
return Int16Array;
|
|
38
|
+
case 5:
|
|
39
|
+
return Int32Array;
|
|
40
|
+
case 6:
|
|
41
|
+
return Float32Array;
|
|
42
|
+
case 7:
|
|
43
|
+
return Float64Array;
|
|
44
|
+
default:
|
|
45
|
+
throw new Error('Unsupported marker');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
*
|
|
51
|
+
* @param {BinaryBuffer} buffer
|
|
52
|
+
* @param {Uint8Array|Float32Array|ArrayLike<number>} value
|
|
53
|
+
*/
|
|
54
|
+
function write_typed_array(buffer, value) {
|
|
55
|
+
|
|
56
|
+
buffer.writeUint8(typed_array_to_enum(value));
|
|
57
|
+
buffer.writeUintVar(value.byteLength);
|
|
58
|
+
|
|
59
|
+
const data = new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
|
|
60
|
+
buffer.writeBytes(data, 0, value.byteLength);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function read_typed_array(buffer) {
|
|
64
|
+
const type_marker = buffer.readUint8();
|
|
65
|
+
const byte_length = buffer.readUintVar();
|
|
66
|
+
|
|
67
|
+
const array = new Uint8Array(byte_length);
|
|
68
|
+
|
|
69
|
+
buffer.readBytes(array, 0, byte_length);
|
|
70
|
+
|
|
71
|
+
// re-interpret bytes
|
|
72
|
+
const TypedArray = marker_to_typed_array_constructor(type_marker);
|
|
73
|
+
|
|
74
|
+
return new TypedArray(array.buffer, 0);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
*
|
|
79
|
+
* @param {BinaryBuffer} buffer
|
|
80
|
+
* @param {BufferAttribute} value
|
|
81
|
+
*/
|
|
82
|
+
function write_attribute(buffer, value) {
|
|
83
|
+
buffer.writeUTF8String(value.name);
|
|
84
|
+
buffer.writeUintVar(value.itemSize);
|
|
85
|
+
buffer.writeUint8(value.normalized ? 1 : 0);
|
|
86
|
+
buffer.writeUint32(value.usage);
|
|
87
|
+
|
|
88
|
+
write_typed_array(buffer, value.array);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
*
|
|
93
|
+
* @param {BinaryBuffer} buffer
|
|
94
|
+
* @returns {BufferAttribute}
|
|
95
|
+
*/
|
|
96
|
+
function read_attribute(buffer) {
|
|
97
|
+
const name = buffer.readUTF8String();
|
|
98
|
+
const itemSize = buffer.readUintVar();
|
|
99
|
+
const normalized = buffer.readUint8() !== 0;
|
|
100
|
+
const usage = buffer.readUint32();
|
|
101
|
+
|
|
102
|
+
const array = read_typed_array(buffer);
|
|
103
|
+
|
|
104
|
+
const attribute = new BufferAttribute(array, itemSize, normalized);
|
|
105
|
+
|
|
106
|
+
attribute.usage = usage;
|
|
107
|
+
attribute.name = name;
|
|
108
|
+
|
|
109
|
+
return attribute;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export class BufferGeometrySerializationAdapter extends BinaryClassSerializationAdapter {
|
|
113
|
+
constructor() {
|
|
114
|
+
super();
|
|
115
|
+
|
|
116
|
+
this.klass = BufferGeometry;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
*
|
|
121
|
+
* @param {BinaryBuffer} buffer
|
|
122
|
+
* @param {BufferGeometry} value
|
|
123
|
+
*/
|
|
124
|
+
serialize(buffer, value) {
|
|
125
|
+
// write index if one exists
|
|
126
|
+
const index = value.getIndex();
|
|
127
|
+
if (index === null) {
|
|
128
|
+
buffer.writeUint8(0);
|
|
129
|
+
} else {
|
|
130
|
+
buffer.writeUint8(1);
|
|
131
|
+
|
|
132
|
+
write_attribute(buffer, index);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const attributes = value.attributes;
|
|
136
|
+
const attribute_keys = Object.keys(attributes);
|
|
137
|
+
|
|
138
|
+
const attribute_count = attribute_keys.length;
|
|
139
|
+
buffer.writeUintVar(attribute_count);
|
|
140
|
+
|
|
141
|
+
for (let i = 0; i < attribute_count; i++) {
|
|
142
|
+
const attribute_key = attribute_keys[i];
|
|
143
|
+
|
|
144
|
+
buffer.writeUTF8String(attribute_key);
|
|
145
|
+
|
|
146
|
+
const attribute = attributes[attribute_key];
|
|
147
|
+
|
|
148
|
+
write_attribute(buffer, attribute);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
*
|
|
154
|
+
* @param {BinaryBuffer} buffer
|
|
155
|
+
* @param {BufferGeometry} value
|
|
156
|
+
*/
|
|
157
|
+
deserialize(buffer, value) {
|
|
158
|
+
const index_flag = buffer.readUint8();
|
|
159
|
+
|
|
160
|
+
if (index_flag !== 0) {
|
|
161
|
+
value.setIndex(read_attribute(buffer));
|
|
162
|
+
} else {
|
|
163
|
+
value.setIndex(null);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const attribute_count = buffer.readUintVar();
|
|
167
|
+
|
|
168
|
+
for (let i = 0; i < attribute_count; i++) {
|
|
169
|
+
const attribute_key = buffer.readUTF8String();
|
|
170
|
+
|
|
171
|
+
const attribute = read_attribute(buffer);
|
|
172
|
+
|
|
173
|
+
value.setAttribute(attribute_key, attribute);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
@@ -82,6 +82,7 @@ export class MaterialContext {
|
|
|
82
82
|
|
|
83
83
|
if (material[MATERIAL_FLAG] === undefined) {
|
|
84
84
|
material.onBeforeCompile = composeCompile(this.material.onBeforeCompile, rewrite_material);
|
|
85
|
+
material.needsUpdate = true;
|
|
85
86
|
|
|
86
87
|
material[MATERIAL_FLAG] = true;
|
|
87
88
|
material[MATERIAL_VERTEX_DISPLACED] = true;
|
|
@@ -10,11 +10,26 @@ import {
|
|
|
10
10
|
} from "../emitter/PARTICLE_ATTRIBUTES.js";
|
|
11
11
|
import { update_parameters } from "./update_parameters.js";
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Common buffer for better memory layout
|
|
15
|
+
* @type {ArrayBuffer}
|
|
16
|
+
*/
|
|
17
|
+
const scratch_common_buffer = new ArrayBuffer(4 * 3 * 2);
|
|
18
|
+
/**
|
|
19
|
+
*
|
|
20
|
+
* @type {Float32Array|number[]|vec3}
|
|
21
|
+
*/
|
|
22
|
+
const velocity = new Float32Array(scratch_common_buffer, 0, 3);
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
*
|
|
26
|
+
* @type {Float32Array|number[]|vec3}
|
|
27
|
+
*/
|
|
28
|
+
const position = new Float32Array(scratch_common_buffer, 3 * 4, 3);
|
|
15
29
|
|
|
16
30
|
export class SimulationStepFixedPhysics extends AbstractSimulationStep {
|
|
17
31
|
execute() {
|
|
32
|
+
let i = 0;
|
|
18
33
|
const particles = this.particles;
|
|
19
34
|
const timeDelta = this.timeDelta;
|
|
20
35
|
|
|
@@ -31,7 +46,7 @@ export class SimulationStepFixedPhysics extends AbstractSimulationStep {
|
|
|
31
46
|
*/
|
|
32
47
|
const layers = emitter.layers.asArray();
|
|
33
48
|
|
|
34
|
-
for (
|
|
49
|
+
for (; i < liveParticleCount; i++) {
|
|
35
50
|
|
|
36
51
|
const layer_position = particles.readAttributeScalar(i, PARTICLE_ATTRIBUTE_LAYER_POSITION);
|
|
37
52
|
|
|
@@ -70,6 +85,7 @@ export class SimulationStepFixedPhysics extends AbstractSimulationStep {
|
|
|
70
85
|
|
|
71
86
|
particles.readAttributeVector3(i, PARTICLE_ATTRIBUTE_POSITION, position);
|
|
72
87
|
|
|
88
|
+
// Verlet integration
|
|
73
89
|
const p_x = position[0] + velocity[0] * timeDelta;
|
|
74
90
|
const p_y = position[1] + velocity[1] * timeDelta;
|
|
75
91
|
const p_z = position[2] + velocity[2] * timeDelta;
|
|
@@ -3,7 +3,6 @@ import { EngineConfiguration } from "../../../../../../EngineConfiguration.js";
|
|
|
3
3
|
import GUIElementSystem from "../../../../../../ecs/gui/GUIElementSystem.js";
|
|
4
4
|
import HeadsUpDisplaySystem from "../../../../../../ecs/gui/hud/HeadsUpDisplaySystem.js";
|
|
5
5
|
import TagSystem from "../../../../../../ecs/systems/TagSystem.js";
|
|
6
|
-
import { AttachmentSocketsSystem } from "../../../../../../ecs/sockets/AttachmentSocketsSystem.js";
|
|
7
6
|
import { AttachmentSystem } from "../../../../../../ecs/attachment/AttachmentSystem.js";
|
|
8
7
|
import { SoundEmitterSystem } from "../../../../../../sound/ecs/emitter/SoundEmitterSystem.js";
|
|
9
8
|
import SoundControllerSystem from "../../../../../../sound/ecs/SoundControllerSystem.js";
|
|
@@ -43,8 +42,6 @@ import { RepeatBehavior } from "../../../../../../intelligence/behavior/decorato
|
|
|
43
42
|
import { ActionBehavior } from "../../../../../../intelligence/behavior/primitive/ActionBehavior.js";
|
|
44
43
|
import { pingpong } from "../../../../../../../core/math/pingpong.js";
|
|
45
44
|
import { ParameterLookupTable } from "../../parameter/ParameterLookupTable.js";
|
|
46
|
-
import { pick } from "../../../../../../../../model/game/util/ScreenGridPicker.js";
|
|
47
|
-
import { obtainTerrain } from "../../../../../../../../model/game/scenes/SceneUtils.js";
|
|
48
45
|
import GUIElement from "../../../../../../ecs/gui/GUIElement.js";
|
|
49
46
|
import EmptyView from "../../../../../../../view/elements/EmptyView.js";
|
|
50
47
|
import HeadsUpDisplay from "../../../../../../ecs/gui/hud/HeadsUpDisplay.js";
|
|
@@ -78,6 +75,8 @@ import { UnitSphereShape3D } from "../../../../../../../core/geom/3d/shape/UnitS
|
|
|
78
75
|
import TopDownCameraController from "../../../../../ecs/camera/topdown/TopDownCameraController.js";
|
|
79
76
|
import { randomFloatBetween } from "../../../../../../../core/math/random/randomFloatBetween.js";
|
|
80
77
|
import { MicronRenderPlugin } from "../../../../../micron/plugin/MicronRenderPlugin.js";
|
|
78
|
+
import { obtainTerrain } from "../../../../../../ecs/terrain/util/obtainTerrain.js";
|
|
79
|
+
import { pick } from "../../../../../../../ecs/grid/pick.js";
|
|
81
80
|
|
|
82
81
|
const engineHarness = new EngineHarness();
|
|
83
82
|
|
|
@@ -99,7 +98,6 @@ function makeConfig(engine) {
|
|
|
99
98
|
|
|
100
99
|
config.systems.push(
|
|
101
100
|
new TagSystem(),
|
|
102
|
-
new AttachmentSocketsSystem(),
|
|
103
101
|
new AttachmentSystem(),
|
|
104
102
|
new SoundEmitterSystem(assetManager, sound.destination, sound.context),
|
|
105
103
|
new SoundControllerSystem(),
|
|
@@ -132,6 +130,7 @@ function makeConfig(engine) {
|
|
|
132
130
|
|
|
133
131
|
// Plugins
|
|
134
132
|
config.addPlugin(MicronRenderPlugin);
|
|
133
|
+
config.addPlugin(AmbientOcclusionPostProcessEffect);
|
|
135
134
|
|
|
136
135
|
|
|
137
136
|
// Knowledge
|
|
@@ -159,8 +158,6 @@ async function init(harness) {
|
|
|
159
158
|
await engine.graphics.loadEnvironmentMap(buildCubeURLs('data/textures/cubemaps/hip_miramar/32/', '.png'));
|
|
160
159
|
|
|
161
160
|
|
|
162
|
-
await engine.plugins.acquire(AmbientOcclusionPostProcessEffect);
|
|
163
|
-
|
|
164
161
|
await harness.initialize();
|
|
165
162
|
|
|
166
163
|
main(engine);
|
|
@@ -8,7 +8,6 @@ import PathFollowingSystem from "../../../../navigation/ecs/path_following/PathF
|
|
|
8
8
|
import SteeringSystem from "../../../../ecs/systems/SteeringSystem.js";
|
|
9
9
|
import MotionSystem from "../../../../ecs/systems/MotionSystem.js";
|
|
10
10
|
import TagSystem from "../../../../ecs/systems/TagSystem.js";
|
|
11
|
-
import { AttachmentSocketsSystem } from "../../../../ecs/sockets/AttachmentSocketsSystem.js";
|
|
12
11
|
import { AttachmentSystem } from "../../../../ecs/attachment/AttachmentSystem.js";
|
|
13
12
|
import { SoundEmitterSystem } from "../../../../sound/ecs/emitter/SoundEmitterSystem.js";
|
|
14
13
|
import SoundControllerSystem from "../../../../sound/ecs/SoundControllerSystem.js";
|
|
@@ -93,7 +92,6 @@ function makeConfig(engine) {
|
|
|
93
92
|
new SteeringSystem(),
|
|
94
93
|
new MotionSystem(),
|
|
95
94
|
new TagSystem(),
|
|
96
|
-
new AttachmentSocketsSystem(),
|
|
97
95
|
new AttachmentSystem(),
|
|
98
96
|
new SoundEmitterSystem(assetManager, sound.destination, sound.context),
|
|
99
97
|
new SoundControllerSystem(),
|
|
@@ -9,7 +9,6 @@ import PathFollowingSystem from "../../../../navigation/ecs/path_following/PathF
|
|
|
9
9
|
import SteeringSystem from "../../../../ecs/systems/SteeringSystem.js";
|
|
10
10
|
import MotionSystem from "../../../../ecs/systems/MotionSystem.js";
|
|
11
11
|
import TagSystem from "../../../../ecs/systems/TagSystem.js";
|
|
12
|
-
import { AttachmentSocketsSystem } from "../../../../ecs/sockets/AttachmentSocketsSystem.js";
|
|
13
12
|
import { AttachmentSystem } from "../../../../ecs/attachment/AttachmentSystem.js";
|
|
14
13
|
import { SoundEmitterSystem } from "../../../../sound/ecs/emitter/SoundEmitterSystem.js";
|
|
15
14
|
import SoundControllerSystem from "../../../../sound/ecs/SoundControllerSystem.js";
|
|
@@ -70,7 +69,6 @@ import Renderable from "../../../../ecs/components/Renderable.js";
|
|
|
70
69
|
import { makeHelperSphereGeometry } from "../../../../../editor/process/symbolic/makeHelperSphereGeometry.js";
|
|
71
70
|
import TopDownCameraController from "../../../ecs/camera/topdown/TopDownCameraController.js";
|
|
72
71
|
import ThreeFactory from "../../../three/ThreeFactory.js";
|
|
73
|
-
import { obtainTerrain } from "../../../../../../model/game/scenes/SceneUtils.js";
|
|
74
72
|
import { JsonAssetLoader } from "../../../../asset/loaders/JsonAssetLoader.js";
|
|
75
73
|
import { TextureAssetLoader } from "../../../../asset/loaders/texture/TextureAssetLoader.js";
|
|
76
74
|
import { GameAssetType } from "../../../../asset/GameAssetType.js";
|
|
@@ -82,8 +80,9 @@ import { ParticleEmitterSystem } from "../../../particles/ecs/ParticleEmitterSys
|
|
|
82
80
|
import { ShadedGeometrySystem } from "../../../ecs/mesh-v2/ShadedGeometrySystem.js";
|
|
83
81
|
import { FogOfWar } from "../../../../ecs/fow/FogOfWar.js";
|
|
84
82
|
import { FogOfWarRevealer } from "../../../../ecs/fow/FogOfWarRevealer.js";
|
|
85
|
-
import Team from "
|
|
83
|
+
import Team from "../../../../ecs/team/Team.js";
|
|
86
84
|
import { AmbientOcclusionPostProcessEffect } from "../../buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js";
|
|
85
|
+
import { obtainTerrain } from "../../../../ecs/terrain/util/obtainTerrain.js";
|
|
87
86
|
|
|
88
87
|
const geo_light_center_octahedron = new BoxBufferGeometry(0.1, 0.1, 0.1);
|
|
89
88
|
const engineHarness = new EngineHarness();
|
|
@@ -120,7 +119,6 @@ function makeConfig(engine) {
|
|
|
120
119
|
new SteeringSystem(),
|
|
121
120
|
new MotionSystem(),
|
|
122
121
|
new TagSystem(),
|
|
123
|
-
new AttachmentSocketsSystem(),
|
|
124
122
|
new AttachmentSystem(),
|
|
125
123
|
new SoundEmitterSystem(assetManager, sound.destination, sound.context),
|
|
126
124
|
new SoundControllerSystem(),
|
|
@@ -116,14 +116,16 @@ export function query_bvh_frustum_from_texture(
|
|
|
116
116
|
const radius = source_data[light_address + 3];
|
|
117
117
|
|
|
118
118
|
if (!point_light_inside_volume(light_x, light_y, light_z, radius, points, planes)) {
|
|
119
|
+
// cull
|
|
119
120
|
continue;
|
|
120
121
|
}
|
|
122
|
+
|
|
121
123
|
} else if (light_type === 3) {
|
|
122
124
|
// decal
|
|
123
125
|
debugger;
|
|
124
126
|
|
|
125
127
|
} else {
|
|
126
|
-
throw new Error(
|
|
128
|
+
throw new Error(`Unsupported light type ${light_type}`);
|
|
127
129
|
}
|
|
128
130
|
|
|
129
131
|
// write to output
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
|
|
3
|
+
export class FrameGraphBuilder {
|
|
4
|
+
/**
|
|
5
|
+
*
|
|
6
|
+
* @param {TextureDescriptor} descriptor
|
|
7
|
+
* @returns {Resource}
|
|
8
|
+
*/
|
|
9
|
+
createTexture(descriptor) {
|
|
10
|
+
throw new Error('Not Implemented');
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
*
|
|
15
|
+
* @param {Resource} resource
|
|
16
|
+
* @param {number} flags
|
|
17
|
+
* @returns {ResourceReference}
|
|
18
|
+
*/
|
|
19
|
+
read(resource, flags) {
|
|
20
|
+
assert.equal(resource.isResource, true, 'resource.isResource !== true');
|
|
21
|
+
|
|
22
|
+
throw new Error('Not Implemented');
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
*
|
|
27
|
+
* @param {Resource} resource
|
|
28
|
+
* @param {number} flags
|
|
29
|
+
* @returns {ResourceReference}
|
|
30
|
+
*/
|
|
31
|
+
write(resource, flags) {
|
|
32
|
+
assert.equal(resource.isResource, true, 'resource.isResource !== true');
|
|
33
|
+
|
|
34
|
+
throw new Error('Not Implemented');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const DEFAULT_FLAGS = 0;
|
|
2
|
+
|
|
3
|
+
export class RenderPass {
|
|
4
|
+
|
|
5
|
+
constructor() {
|
|
6
|
+
this.ref_count = 0;
|
|
7
|
+
/**
|
|
8
|
+
*
|
|
9
|
+
* @type {number|RenderPassFlags}
|
|
10
|
+
*/
|
|
11
|
+
this.flags = DEFAULT_FLAGS;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
*
|
|
16
|
+
* @param {FrameGraphBuilder} builder
|
|
17
|
+
* @param {Object<Resource>} inputs
|
|
18
|
+
* @returns {Object<Resource>}
|
|
19
|
+
*/
|
|
20
|
+
setup(builder, inputs) {
|
|
21
|
+
throw new Error('Not Implemented');
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
*
|
|
26
|
+
* @param {RenderPassResources} resources
|
|
27
|
+
* @param {IRenderContext} render_context
|
|
28
|
+
*/
|
|
29
|
+
execute(resources, render_context) {
|
|
30
|
+
throw new Error('Not Implemented');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Built by FrameGraphBuilder, maps abstract resource handles to concrete, allocated GPU resources
|
|
5
|
+
*/
|
|
6
|
+
export class RenderPassResources {
|
|
7
|
+
/**
|
|
8
|
+
*
|
|
9
|
+
* @param {Resource} resource
|
|
10
|
+
* @returns {Texture}
|
|
11
|
+
*/
|
|
12
|
+
getTexture(resource) {
|
|
13
|
+
throw new Error('Not Implemented');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export class Resource {
|
|
2
|
+
constructor() {
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @type {number}
|
|
6
|
+
*/
|
|
7
|
+
this.ref_count = 0;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
*
|
|
11
|
+
* @type {TextureDescriptor}
|
|
12
|
+
*/
|
|
13
|
+
this.descriptor = null;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @readonly
|
|
19
|
+
* @type {boolean}
|
|
20
|
+
*/
|
|
21
|
+
Resource.prototype.isResource = true;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { FloatType } from "three";
|
|
2
|
+
|
|
3
|
+
const TextureInitialState = {
|
|
4
|
+
/**
|
|
5
|
+
* Clear the texture.
|
|
6
|
+
*/
|
|
7
|
+
Clear: 0,
|
|
8
|
+
/**
|
|
9
|
+
* Doesn't matter. No need to clear
|
|
10
|
+
*/
|
|
11
|
+
Undefined: 1
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export class TextureDescriptor {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.height = 0;
|
|
17
|
+
this.width = 0;
|
|
18
|
+
/**
|
|
19
|
+
* Render texture type
|
|
20
|
+
* @type {number}
|
|
21
|
+
*/
|
|
22
|
+
this.format = FloatType;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* What should the texture be initialized to
|
|
26
|
+
* @type {number}
|
|
27
|
+
*/
|
|
28
|
+
this.initialState = TextureInitialState.Clear;
|
|
29
|
+
}
|
|
30
|
+
}
|