@woosh/meep-engine 2.48.19 → 2.48.21
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/package.json +1 -1
- package/src/core/binary/type/BinaryDataType.d.ts +15 -0
- package/src/{engine/graphics/render/forward_plus/data/computeDataType.js → core/binary/type/computeBinaryDataTypeByPrecision.js} +3 -3
- package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.js +62 -0
- package/src/core/graph/layout/computeDisconnectedSubGraphs.js +1 -0
- package/src/core/process/task/TaskGroup.js +1 -1
- package/src/core/process/task/util/task_tree_compute_leaf_tasks.js +21 -0
- package/src/engine/graphics/geometry/AttributeSpec.d.ts +2 -2
- package/src/engine/graphics/material/optimization/MaterialOptimizationContext.js +1 -3
- package/src/engine/graphics/render/forward_plus/LightManager.js +9 -7
- package/src/engine/graphics/{micron/render/instanced → texture}/AttributeDataTexture.js +28 -19
- package/src/engine/graphics/{render/forward_plus/data → texture}/TextureBackedMemoryRegion.js +8 -8
- package/src/engine/graphics/{render/forward_plus/data → texture}/computeThreeTextureFormat.js +2 -2
- package/src/engine/graphics/{render/forward_plus/data → texture}/computeThreeTextureInternalFormatFromDataType.js +1 -1
- package/src/engine/graphics/{render/forward_plus/data → texture}/computeThreeTextureTypeFromDataType.js +1 -1
- package/src/engine/graphics/texture/sampler/Sampler2D2Canvas.js +1 -1
- package/src/engine/graphics/texture/sampler/sampler2DToFloat32Texture.js +1 -3
- package/src/generation/GridTaskGroup.js +4 -4
- package/src/generation/filtering/numeric/util/populateSampler2DFromCellFilter.js +10 -2
- package/src/generation/filtering/numeric/util/sampler_from_filter.js +26 -0
- package/src/generation/filtering/numeric/util/visualise_filters_as_grid.js +81 -0
- package/src/generation/grid/generation/GridTaskSequence.js +3 -1
- package/src/engine/graphics/micron/MICRON_GEOMETRY_FIELD.js +0 -1
- package/src/engine/graphics/micron/MICRON_URI_FIELD.js +0 -1
- package/src/engine/graphics/micron/build/MICRON_PATCH_SIZE_MAX.js +0 -5
- package/src/engine/graphics/micron/build/PatchRepresentation.js +0 -424
- package/src/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +0 -311
- package/src/engine/graphics/micron/build/build_geometry_info.js +0 -21
- package/src/engine/graphics/micron/build/clustering/assignInitialPatchNeighbours.js +0 -63
- package/src/engine/graphics/micron/build/clustering/assign_patch_neighbours_from_topology.js +0 -46
- package/src/engine/graphics/micron/build/clustering/build_clustering_2.js +0 -37
- package/src/engine/graphics/micron/build/clustering/build_leaf_patches.js +0 -326
- package/src/engine/graphics/micron/build/clustering/build_leaf_patches_metis.js +0 -76
- package/src/engine/graphics/micron/build/clustering/computeBorderLengthChange.js +0 -59
- package/src/engine/graphics/micron/build/clustering/computeFaceCurvatureScore.js +0 -57
- package/src/engine/graphics/micron/build/clustering/computeOpenFaceFreedom.js +0 -35
- package/src/engine/graphics/micron/build/clustering/compute_face_connection_weight.js +0 -35
- package/src/engine/graphics/micron/build/clustering/populateOpenFaceNeighboursForPatch.js +0 -56
- package/src/engine/graphics/micron/build/clustering/validate_leaf_patch_connectivity.js +0 -44
- package/src/engine/graphics/micron/build/compute_micron_buffer_array_constructor.js +0 -24
- package/src/engine/graphics/micron/build/compute_vertex_remap_cost.js +0 -29
- package/src/engine/graphics/micron/build/debug/build_clustering_info.js +0 -58
- package/src/engine/graphics/micron/build/debug/build_graph_info.js +0 -59
- package/src/engine/graphics/micron/build/fill_patch_geometry_data.js +0 -270
- package/src/engine/graphics/micron/build/hierarchy/buildAbstractPatchHierarchy.js +0 -196
- package/src/engine/graphics/micron/build/hierarchy/build_intermediate_patch_topology.js +0 -162
- package/src/engine/graphics/micron/build/hierarchy/build_merge_graph.js +0 -89
- package/src/engine/graphics/micron/build/hierarchy/computePatchMergeScore.js +0 -146
- package/src/engine/graphics/micron/build/hierarchy/compute_patches_shared_vertex_count.js +0 -32
- package/src/engine/graphics/micron/build/hierarchy/compute_patches_shared_vertices.js +0 -34
- package/src/engine/graphics/micron/build/hierarchy/merge_patches.js +0 -581
- package/src/engine/graphics/micron/build/hierarchy/metis_cluster_clusters.js +0 -53
- package/src/engine/graphics/micron/build/hierarchy/optimize_graph_partitioning_balance.js +0 -515
- package/src/engine/graphics/micron/build/hierarchy/patch_combine.js +0 -180
- package/src/engine/graphics/micron/build/hierarchy/patch_fill_holes_by_uncollapse.js +0 -60
- package/src/engine/graphics/micron/build/hierarchy/patch_stitch_parent_border.js +0 -320
- package/src/engine/graphics/micron/build/hierarchy/qvdr_build_simplified_clusters.js +0 -547
- package/src/engine/graphics/micron/build/hierarchy/qvdr_build_tree.js +0 -140
- package/src/engine/graphics/micron/buildPatchwork.js +0 -68
- package/src/engine/graphics/micron/convert_three_object_to_micron.js +0 -179
- package/src/engine/graphics/micron/debug/VirtualGeometryStats.js +0 -42
- package/src/engine/graphics/micron/format/MICRON_GEOMETRY_PROPERTY_NAME.js +0 -1
- package/src/engine/graphics/micron/format/MicronGeometry.d.ts +0 -21
- package/src/engine/graphics/micron/format/MicronGeometry.js +0 -334
- package/src/engine/graphics/micron/format/MicronGeometryPatch.d.ts +0 -3
- package/src/engine/graphics/micron/format/MicronGeometryPatch.js +0 -205
- package/src/engine/graphics/micron/format/MicronGeometryPatchOccurance.js +0 -50
- package/src/engine/graphics/micron/format/ThreeMicronMesh.d.ts +0 -10
- package/src/engine/graphics/micron/format/ThreeMicronMesh.js +0 -45
- package/src/engine/graphics/micron/format/VirtualGeometry.js +0 -158
- package/src/engine/graphics/micron/format/micron_build_proxy_geometry.js +0 -205
- package/src/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.js +0 -123
- package/src/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.spec.js +0 -63
- package/src/engine/graphics/micron/format/serialization/collection/geometry_collection_serialization.js +0 -83
- package/src/engine/graphics/micron/format/serialization/collection/geometry_collection_serialization.spec.js +0 -51
- package/src/engine/graphics/micron/format/serialization/deserialize_attribute_spec.js +0 -25
- package/src/engine/graphics/micron/format/serialization/deserialize_patch.js +0 -106
- package/src/engine/graphics/micron/format/serialization/serialize_attribute_spec.js +0 -18
- package/src/engine/graphics/micron/format/serialization/serialize_patch.js +0 -84
- package/src/engine/graphics/micron/format/validate_patch_bounds.js +0 -69
- package/src/engine/graphics/micron/plugin/GLTFAssetTransformer.js +0 -265
- package/src/engine/graphics/micron/plugin/GLTF_MICRON_ID_FIELD.js +0 -5
- package/src/engine/graphics/micron/plugin/MicronRenderPlugin.d.ts +0 -8
- package/src/engine/graphics/micron/plugin/MicronRenderPlugin.js +0 -150
- package/src/engine/graphics/micron/plugin/serialization/BufferGeometrySerializationAdapter.js +0 -176
- package/src/engine/graphics/micron/plugin/shaded_geometry/MicronShadedGeometryRenderAdapter.js +0 -216
- package/src/engine/graphics/micron/prototypeMicronProxyBuild.js +0 -227
- package/src/engine/graphics/micron/prototypeVirtualGeometry.js +0 -911
- package/src/engine/graphics/micron/render/PatchCacheKey.js +0 -79
- package/src/engine/graphics/micron/render/VIRTUAL_MESH_FLAG.d.ts +0 -1
- package/src/engine/graphics/micron/render/VIRTUAL_MESH_FLAG.js +0 -1
- package/src/engine/graphics/micron/render/VirtualGeometryBuilder.js +0 -207
- package/src/engine/graphics/micron/render/approximateTriangleArea.js +0 -25
- package/src/engine/graphics/micron/render/culling/PatchCullingSystem.js +0 -129
- package/src/engine/graphics/micron/render/instanced/PatchDataTextures.js +0 -325
- package/src/engine/graphics/micron/render/instanced/ThreeInstancedAdapter.js +0 -175
- package/src/engine/graphics/micron/render/instanced/shader/constants.js +0 -3
- package/src/engine/graphics/micron/render/instanced/shader/gen_micron_vertex_attribute_texture_name.js +0 -8
- package/src/engine/graphics/micron/render/instanced/shader/shader_rewrite_standard.js +0 -250
- package/src/engine/graphics/micron/render/makeThreeMeshFromVirtualGeometry.js +0 -37
- package/src/engine/graphics/micron/render/refinement/ActivePatchFlags.js +0 -8
- package/src/engine/graphics/micron/render/refinement/ActivePatchList.js +0 -241
- package/src/engine/graphics/micron/render/refinement/ActivePatchRecord.js +0 -154
- package/src/engine/graphics/micron/render/refinement/RefinementSpec.js +0 -84
- package/src/engine/graphics/micron/render/refinement/get_geometry_patch_cut.js +0 -133
- package/src/engine/graphics/micron/render/refinement/is_patch_facing_back.js +0 -43
- package/src/engine/graphics/micron/render/refinement/is_patch_visible.js +0 -37
- package/src/engine/graphics/micron/render/v1/MaterialContext.js +0 -150
- package/src/engine/graphics/micron/render/v1/MaterialVertexSpec.js +0 -115
- package/src/engine/graphics/micron/render/v1/MicronRenderContext.js +0 -145
- package/src/engine/graphics/micron/render/v1/ThreeVirtualGeometryAdapter.js +0 -255
- package/src/engine/graphics/micron/render/v1/VGThreeRenderer.js +0 -142
- package/src/engine/graphics/micron/render/v1/getTransformedPositionsCached.js +0 -54
- package/src/engine/graphics/micron/simplifyGeometry.js +0 -26
- package/src/engine/graphics/micron/util/patchToBufferGeometry.js +0 -19
- /package/src/{engine/graphics/render/forward_plus/data → core/math}/NumericType.js +0 -0
- /package/src/engine/graphics/{render/forward_plus/data → texture}/channelCountToThreIntegerTextureType.js +0 -0
|
@@ -1,265 +0,0 @@
|
|
|
1
|
-
import { AssetTransformer } from "../../../asset/AssetTransformer.js";
|
|
2
|
-
import { BinaryBuffer } from "../../../../core/binary/BinaryBuffer.js";
|
|
3
|
-
import { MicronGeometry } from "../format/MicronGeometry.js";
|
|
4
|
-
import { MICRON_GEOMETRY_FIELD } from "../MICRON_GEOMETRY_FIELD.js";
|
|
5
|
-
import { async_traverse_three_object } from "../../../asset/loaders/async_traverse_three_object.js";
|
|
6
|
-
import { convert_three_object_to_micron } from "../convert_three_object_to_micron.js";
|
|
7
|
-
import { compute_geometry_polycount } from "../../geometry/compute_geometry_polycount.js";
|
|
8
|
-
import { traverseThreeObject } from "../../ecs/highlight/renderer/traverseThreeObject.js";
|
|
9
|
-
import { max2 } from "../../../../core/math/max2.js";
|
|
10
|
-
import {
|
|
11
|
-
deserialize_geometry_collection
|
|
12
|
-
} from "../format/serialization/collection/geometry_collection_serialization.js";
|
|
13
|
-
import { GLTF_MICRON_ID_FIELD } from "./GLTF_MICRON_ID_FIELD.js";
|
|
14
|
-
import { computePathDirectory } from "../../../../core/path/computePathDirectory.js";
|
|
15
|
-
|
|
16
|
-
export const ASSET_TYPE_ARRAY_BUFFER = "arraybuffer";
|
|
17
|
-
|
|
18
|
-
const DEFAULT_THRESHOLD_POLYCOUNT = 1024;
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
*
|
|
22
|
-
* @param {THREE.Object3D} object
|
|
23
|
-
* @return {number}
|
|
24
|
-
*/
|
|
25
|
-
function max_polycount(object) {
|
|
26
|
-
let r = 0;
|
|
27
|
-
|
|
28
|
-
traverseThreeObject(object, (m) => {
|
|
29
|
-
if (m.isMesh) {
|
|
30
|
-
const geo = m.geometry;
|
|
31
|
-
if (geo !== null) {
|
|
32
|
-
r = max2(r, compute_geometry_polycount(geo))
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
return r;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
*
|
|
42
|
-
* @param {THREE.Object3D} object
|
|
43
|
-
*/
|
|
44
|
-
function ensureProxy(object) {
|
|
45
|
-
if (object.isMicronMesh) {
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* @type {MicronGeometry}
|
|
49
|
-
*/
|
|
50
|
-
const micron_geo = object.geometry;
|
|
51
|
-
|
|
52
|
-
if (micron_geo.proxy === null) {
|
|
53
|
-
// proxy geometry doesn't exist, build one
|
|
54
|
-
micron_geo.buildProxy();
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
class TransformContext {
|
|
60
|
-
/**
|
|
61
|
-
*
|
|
62
|
-
* @param {AssetManager} assetManager
|
|
63
|
-
* @param {AbstractAsyncMap<THREE.BufferGeometry, MicronGeometry>} cache
|
|
64
|
-
*/
|
|
65
|
-
constructor(assetManager, cache) {
|
|
66
|
-
/**
|
|
67
|
-
*
|
|
68
|
-
* @type {AbstractAsyncMap<THREE.BufferGeometry, MicronGeometry>|undefined}
|
|
69
|
-
* @private
|
|
70
|
-
*/
|
|
71
|
-
this.__cache = cache;
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
*
|
|
75
|
-
* @type {MicronGeometry[]}
|
|
76
|
-
* @private
|
|
77
|
-
*/
|
|
78
|
-
this.__active_mesh_micron_cache = [];
|
|
79
|
-
|
|
80
|
-
this.__am = assetManager;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
*
|
|
85
|
-
* @param {{userData:{}}} gltf
|
|
86
|
-
* @param {AssetDescription} ad
|
|
87
|
-
*/
|
|
88
|
-
async load_mesh_micron_data(gltf, ad) {
|
|
89
|
-
// clear active cache
|
|
90
|
-
this.__active_mesh_micron_cache = [];
|
|
91
|
-
|
|
92
|
-
const micron_metadata = gltf.userData.micron;
|
|
93
|
-
|
|
94
|
-
if (micron_metadata === undefined) {
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
const uri = micron_metadata.geometry_data_uri;
|
|
99
|
-
if (uri === undefined) {
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
const base = computePathDirectory(ad.path);
|
|
104
|
-
|
|
105
|
-
let micron_data;
|
|
106
|
-
|
|
107
|
-
const micron_path = `${base}/${uri}`;
|
|
108
|
-
|
|
109
|
-
try {
|
|
110
|
-
micron_data = await this.__am.promise(micron_path, ASSET_TYPE_ARRAY_BUFFER, { skip_queue: true });
|
|
111
|
-
} catch (e) {
|
|
112
|
-
console.error(`Failed to load micron geometry '${micron_path}' referenced in GLTF (will skip): ${e}`);
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// deserialize micron data
|
|
117
|
-
const buffer = BinaryBuffer.fromArrayBuffer(micron_data.create());
|
|
118
|
-
|
|
119
|
-
deserialize_geometry_collection(this.__active_mesh_micron_cache, buffer);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* @param {THREE.Object3D} object
|
|
124
|
-
* @param {{asset:AssetDescription}} ctx
|
|
125
|
-
* @return {Promise<void>}
|
|
126
|
-
*/
|
|
127
|
-
async visitObjectToLoadMicron(object, ctx) {
|
|
128
|
-
if (!object.isMesh) {
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* @type {THREE.BufferGeometry}
|
|
134
|
-
*/
|
|
135
|
-
const geometry = object.geometry;
|
|
136
|
-
|
|
137
|
-
const micron_geometry_index = geometry.userData[GLTF_MICRON_ID_FIELD];
|
|
138
|
-
|
|
139
|
-
if (typeof micron_geometry_index !== "number") {
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
const micron_geometry = this.__active_mesh_micron_cache[micron_geometry_index];
|
|
144
|
-
|
|
145
|
-
if (micron_geometry === undefined) {
|
|
146
|
-
console.error(`Micron geometry '${micron_geometry_index}' not found`);
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
// set proxy for raycasting
|
|
151
|
-
micron_geometry.proxy = geometry;
|
|
152
|
-
|
|
153
|
-
geometry[MICRON_GEOMETRY_FIELD] = micron_geometry;
|
|
154
|
-
|
|
155
|
-
// push data into cache
|
|
156
|
-
if (this.__cache !== undefined) {
|
|
157
|
-
this.__cache.set(geometry, micron_geometry);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
export class GLTFAssetTransformer extends AssetTransformer {
|
|
164
|
-
/**
|
|
165
|
-
*
|
|
166
|
-
* @param {AbstractAsyncMap<THREE.BufferGeometry, MicronGeometry>} [cache]
|
|
167
|
-
*/
|
|
168
|
-
constructor(cache) {
|
|
169
|
-
super();
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
*
|
|
173
|
-
* @type {AbstractAsyncMap<THREE.BufferGeometry, MicronGeometry>|undefined}
|
|
174
|
-
* @private
|
|
175
|
-
*/
|
|
176
|
-
this.__cache = cache;
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
*
|
|
180
|
-
* @type {AssetManager|null}
|
|
181
|
-
* @private
|
|
182
|
-
*/
|
|
183
|
-
this.__am = null;
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* Minimum number of polygons required for micron to be used
|
|
187
|
-
* @type {number}
|
|
188
|
-
* @private
|
|
189
|
-
*/
|
|
190
|
-
this.__threshold_polycount = DEFAULT_THRESHOLD_POLYCOUNT;
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
*
|
|
194
|
-
* @type {MicronGeometry[]}
|
|
195
|
-
* @private
|
|
196
|
-
*/
|
|
197
|
-
this.__active_mesh_micron_cache = [];
|
|
198
|
-
|
|
199
|
-
/**
|
|
200
|
-
* @deprecated
|
|
201
|
-
* Whether override mesh will be created for the asset, this is generally outdated
|
|
202
|
-
* @type {boolean}
|
|
203
|
-
* @private
|
|
204
|
-
*/
|
|
205
|
-
this.__settings_build_override_mesh = false;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
/**
|
|
209
|
-
*
|
|
210
|
-
* @param {AssetManager|null} am
|
|
211
|
-
*/
|
|
212
|
-
set assetManager(am) {
|
|
213
|
-
this.__am = am;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
/**
|
|
218
|
-
*
|
|
219
|
-
* @param {Asset} source
|
|
220
|
-
* @param {AssetDescription} asset_description
|
|
221
|
-
* @return {Promise<Asset>}
|
|
222
|
-
*/
|
|
223
|
-
async transform(source, asset_description) {
|
|
224
|
-
const animationClips = source.animations;
|
|
225
|
-
|
|
226
|
-
if (animationClips !== undefined && animationClips.length > 0) {
|
|
227
|
-
// animations might cause trouble
|
|
228
|
-
console.warn(`model '${asset_description.path}' contains animations, these animations might not works as intended with micron.`);
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* @type {THREE.Object3D}
|
|
233
|
-
*/
|
|
234
|
-
const root = source.create();
|
|
235
|
-
|
|
236
|
-
const context = new TransformContext(this.__am, this.__cache);
|
|
237
|
-
|
|
238
|
-
await context.load_mesh_micron_data(source.gltf, asset_description);
|
|
239
|
-
|
|
240
|
-
// attempt to load existing micron geometries
|
|
241
|
-
await async_traverse_three_object(root, context.visitObjectToLoadMicron, context, {
|
|
242
|
-
asset: asset_description
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
const gltf_max_polycount = max_polycount(root);
|
|
246
|
-
|
|
247
|
-
if (gltf_max_polycount < this.__threshold_polycount) {
|
|
248
|
-
// no change, geometries are too small
|
|
249
|
-
return source;
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
if (this.__settings_build_override_mesh) {
|
|
253
|
-
console.warn(`Deprecated OVERRIDE_MESH setting is ON, generating override mesh for asset: ${asset_description}`);
|
|
254
|
-
|
|
255
|
-
const micron_root = await convert_three_object_to_micron(root.clone(), this.__cache);
|
|
256
|
-
micron_root.boundingSphere = root.boundingSphere;
|
|
257
|
-
|
|
258
|
-
source.override_mesh = micron_root;
|
|
259
|
-
|
|
260
|
-
traverseThreeObject(micron_root, ensureProxy);
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
return source;
|
|
264
|
-
}
|
|
265
|
-
}
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import { EnginePlugin } from "../../../plugin/EnginePlugin.js";
|
|
2
|
-
import { VGThreeRenderer } from "../render/v1/VGThreeRenderer.js";
|
|
3
|
-
import { RenderLayer } from "../../render/layers/RenderLayer.js";
|
|
4
|
-
import { RenderPassType } from "../../render/RenderPassType.js";
|
|
5
|
-
import { ArrayBufferLoader } from "../../../asset/loaders/ArrayBufferLoader.js";
|
|
6
|
-
import { ASSET_TYPE_ARRAY_BUFFER, GLTFAssetTransformer } from "./GLTFAssetTransformer.js";
|
|
7
|
-
import { ShadedGeometrySystem } from "../../ecs/mesh-v2/ShadedGeometrySystem.js";
|
|
8
|
-
import { MicronShadedGeometryRenderAdapter } from "./shaded_geometry/MicronShadedGeometryRenderAdapter.js";
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
*
|
|
12
|
-
* @type {string}
|
|
13
|
-
*/
|
|
14
|
-
const STORAGE_KEY = '@plugin/virtual-geometry-micron/geometry-cache';
|
|
15
|
-
|
|
16
|
-
export class MicronRenderPlugin extends EnginePlugin {
|
|
17
|
-
constructor() {
|
|
18
|
-
super();
|
|
19
|
-
|
|
20
|
-
this.id = "micron-renderer";
|
|
21
|
-
|
|
22
|
-
this.__vgtr = new VGThreeRenderer();
|
|
23
|
-
|
|
24
|
-
const layer = new RenderLayer();
|
|
25
|
-
layer.name = 'micron';
|
|
26
|
-
layer.managed = true;
|
|
27
|
-
layer.renderPass = RenderPassType.Opaque;
|
|
28
|
-
|
|
29
|
-
this.__vgtr.on.contextAdded.add(ctx => {
|
|
30
|
-
const visibleSet = layer.visibleSet;
|
|
31
|
-
|
|
32
|
-
const mesh = ctx.mesh;
|
|
33
|
-
|
|
34
|
-
visibleSet.elements.push(mesh);
|
|
35
|
-
visibleSet.size++;
|
|
36
|
-
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
*
|
|
42
|
-
* @type {GLTFAssetTransformer}
|
|
43
|
-
* @private
|
|
44
|
-
*/
|
|
45
|
-
this.__asset_transformer = new GLTFAssetTransformer();
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
*
|
|
49
|
-
* @type {ShadedGeometrySystem|null}
|
|
50
|
-
* @private
|
|
51
|
-
*/
|
|
52
|
-
this.__sg_system = null;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
*
|
|
57
|
-
* @param {System} system
|
|
58
|
-
* @private
|
|
59
|
-
*/
|
|
60
|
-
__handle_system_added(system) {
|
|
61
|
-
if (this.__sg_system !== null) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (!(system instanceof ShadedGeometrySystem)) {
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
*
|
|
71
|
-
* @type {ShadedGeometrySystem|null}
|
|
72
|
-
*/
|
|
73
|
-
const sg_system = system;
|
|
74
|
-
|
|
75
|
-
sg_system.register_render_adapter(2, () => {
|
|
76
|
-
const adapter = new MicronShadedGeometryRenderAdapter(this.__cache);
|
|
77
|
-
|
|
78
|
-
adapter.ctx = this.__vgtr.ctx;
|
|
79
|
-
|
|
80
|
-
return adapter;
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
this.__sg_system = sg_system;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
*
|
|
88
|
-
* @param {System} system
|
|
89
|
-
* @private
|
|
90
|
-
*/
|
|
91
|
-
__handle_system_removed(system) {
|
|
92
|
-
if (this.__sg_system === null) {
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
if (!(system instanceof ShadedGeometrySystem)) {
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
if (this.__sg_system !== system) {
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
this.__sg_system.unregister_render_adapter(2);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
async startup() {
|
|
108
|
-
|
|
109
|
-
const engine = this.engine;
|
|
110
|
-
|
|
111
|
-
const am = engine.assetManager;
|
|
112
|
-
|
|
113
|
-
// ensure that "arraybuffer" asset loader is present
|
|
114
|
-
if (am.getLoaderByType(ASSET_TYPE_ARRAY_BUFFER) === undefined) {
|
|
115
|
-
am.registerLoader(ASSET_TYPE_ARRAY_BUFFER, new ArrayBufferLoader({
|
|
116
|
-
fetch_priority: "low" // hint to fetch data in background
|
|
117
|
-
}));
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
this.__asset_transformer.assetManager = am;
|
|
121
|
-
|
|
122
|
-
am.registerTransformer("model/gltf", this.__asset_transformer);
|
|
123
|
-
am.registerTransformer("model/gltf+json", this.__asset_transformer);
|
|
124
|
-
|
|
125
|
-
engine.entityManager.on.systemAdded.add(this.__handle_system_added, this);
|
|
126
|
-
engine.entityManager.on.systemRemoved.add(this.__handle_system_removed, this);
|
|
127
|
-
|
|
128
|
-
engine.entityManager.systems.forEach(this.__handle_system_added, this);
|
|
129
|
-
|
|
130
|
-
await super.startup();
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
async shutdown() {
|
|
134
|
-
const engine = this.engine;
|
|
135
|
-
|
|
136
|
-
const am = engine.assetManager;
|
|
137
|
-
|
|
138
|
-
am.unregisterTransformer("model/gltf", this.__asset_transformer);
|
|
139
|
-
am.unregisterTransformer("model/gltf+json", this.__asset_transformer);
|
|
140
|
-
|
|
141
|
-
this.__asset_transformer.assetManager = null;
|
|
142
|
-
|
|
143
|
-
engine.entityManager.on.systemAdded.remove(this.__handle_system_added, this);
|
|
144
|
-
engine.entityManager.on.systemRemoved.remove(this.__handle_system_removed, this);
|
|
145
|
-
|
|
146
|
-
engine.entityManager.systems.forEach(this.__handle_system_removed, this);
|
|
147
|
-
|
|
148
|
-
await super.shutdown();
|
|
149
|
-
}
|
|
150
|
-
}
|
package/src/engine/graphics/micron/plugin/serialization/BufferGeometrySerializationAdapter.js
DELETED
|
@@ -1,176 +0,0 @@
|
|
|
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
|
-
}
|