@headless-three/renderer 0.1.8 → 0.1.10

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/dist/scene.d.ts CHANGED
@@ -19,6 +19,7 @@ export interface SceneExtractionCache {
19
19
  instancedNormalExpansions: WeakMap<ThreeBufferGeometryLike, Map<string, CachedInstancedNormalExpansion>>;
20
20
  instancedUvExpansions: WeakMap<ThreeBufferGeometryLike, Map<string, CachedInstancedUvExpansion>>;
21
21
  instancedColorExpansions: WeakMap<ThreeBufferGeometryLike, Map<string, CachedInstancedColorExpansion>>;
22
+ indexRanges: WeakMap<ThreeBufferGeometryLike, Map<string, CachedIndexRangeExpansion>>;
22
23
  batchedGeometryViews: WeakMap<ThreeBufferGeometryLike, Map<string, CachedBatchedGeometryView>>;
23
24
  dashedLines: WeakMap<ThreeBufferGeometryLike, Map<string, CachedDashedLineExpansion>>;
24
25
  instancedDashedLines: WeakMap<ThreeBufferGeometryLike, Map<string, CachedInstancedDashedLineExpansion>>;
@@ -29,6 +30,20 @@ export interface SceneExtractionCache {
29
30
  materialScalarFeatures: MaterialScalarFeatureExtractionCache;
30
31
  pointBillboards: WeakMap<ThreeObject3DLike, Map<string, CachedPointBillboardExpansion>>;
31
32
  spriteBillboards: WeakMap<ThreeObject3DLike, CachedSpriteBillboardExpansion>;
33
+ nativeMeshPayloads: NativeMeshPayloadCache;
34
+ }
35
+ interface NativeMeshPayloadCache {
36
+ objectIds: WeakMap<object, number>;
37
+ payloads: Map<string, CachedNativeMeshPayload>;
38
+ pending: Set<string>;
39
+ nextObjectId: number;
40
+ nextPayloadId: number;
41
+ }
42
+ interface CachedNativeMeshPayload {
43
+ key: number;
44
+ vertexCount: number;
45
+ indexCount?: number;
46
+ ready: boolean;
32
47
  }
33
48
  interface CachedInstancedMeshInstances {
34
49
  signature: InstancedMeshSignature;
@@ -50,6 +65,10 @@ interface CachedInstancedColorExpansion {
50
65
  signature: InstancedColorExpansionSignature;
51
66
  colors: number[];
52
67
  }
68
+ interface CachedIndexRangeExpansion {
69
+ signature: IndexRangeExpansionSignature;
70
+ indices: number[];
71
+ }
53
72
  interface CachedBatchedGeometryView {
54
73
  signature: BatchedGeometryViewSignature;
55
74
  view: ThreeBufferGeometryLike;
@@ -222,6 +241,14 @@ interface InstancedColorExpansionSignature {
222
241
  color: AttributeSignature;
223
242
  label: string;
224
243
  }
244
+ interface IndexRangeExpansionSignature {
245
+ cacheable: boolean;
246
+ geometryVersion?: number;
247
+ sourceIndices: number[];
248
+ start: number;
249
+ count: number;
250
+ index: AttributeSignature;
251
+ }
225
252
  interface AttributeSignature {
226
253
  ref?: ThreeBufferAttributeLike;
227
254
  version?: number;
@@ -248,5 +275,6 @@ interface RenderCallbackContext {
248
275
  }
249
276
  export declare function createSceneExtractionCache(): SceneExtractionCache;
250
277
  export declare function flattenScene(scene: ThreeObject3DLike, camera?: ThreeCameraLike, viewportHeight?: number, globalClippingPlanes?: readonly NativeClippingPlane[], localClippingEnabled?: boolean, shadowMaterialMode?: ShadowMaterialMode, materialContext?: MaterialExtractionContext, sortOptions?: SceneSortOptions, overrideMaterial?: ThreeMaterialLike, cache?: SceneExtractionCache, callbackContext?: RenderCallbackContext): NativeSceneMesh[];
278
+ export declare function commitNativeMeshPayloadCache(cache: SceneExtractionCache): void;
251
279
  export {};
252
280
  //# sourceMappingURL=scene.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../api/scene.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../api/scene.ts"],"names":[],"mappings":"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"}
package/dist/scene.js CHANGED
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createSceneExtractionCache = createSceneExtractionCache;
4
4
  exports.flattenScene = flattenScene;
5
+ exports.commitNativeMeshPayloadCache = commitNativeMeshPayloadCache;
5
6
  const math_1 = require("./math");
6
7
  const attributes_1 = require("./attributes");
7
8
  const materials_1 = require("./materials");
@@ -35,6 +36,7 @@ function createSceneExtractionCache() {
35
36
  instancedNormalExpansions: new WeakMap(),
36
37
  instancedUvExpansions: new WeakMap(),
37
38
  instancedColorExpansions: new WeakMap(),
39
+ indexRanges: new WeakMap(),
38
40
  batchedGeometryViews: new WeakMap(),
39
41
  dashedLines: new WeakMap(),
40
42
  instancedDashedLines: new WeakMap(),
@@ -45,6 +47,13 @@ function createSceneExtractionCache() {
45
47
  materialScalarFeatures: new WeakMap(),
46
48
  pointBillboards: new WeakMap(),
47
49
  spriteBillboards: new WeakMap(),
50
+ nativeMeshPayloads: {
51
+ objectIds: new WeakMap(),
52
+ payloads: new Map(),
53
+ pending: new Set(),
54
+ nextObjectId: 1,
55
+ nextPayloadId: 1,
56
+ },
48
57
  };
49
58
  }
50
59
  function flattenScene(scene, camera, viewportHeight = 512, globalClippingPlanes = [], localClippingEnabled = true, shadowMaterialMode, materialContext = {}, sortOptions = {}, overrideMaterial, cache, callbackContext) {
@@ -55,7 +64,20 @@ function flattenScene(scene, camera, viewportHeight = 512, globalClippingPlanes
55
64
  clipShadows: false,
56
65
  };
57
66
  visitObject(scene, camera, meshes, 0, viewportHeight, clippingContext, localClippingEnabled, shadowMaterialMode, materialContext, overrideMaterial, cache, callbackContext);
58
- return nativeMeshesFromSortedFlattened(sortFlattenedMeshes(meshes, sortOptions));
67
+ const nativeMeshes = nativeMeshesFromSortedFlattened(sortFlattenedMeshes(meshes, sortOptions));
68
+ if (cache) {
69
+ applyNativeMeshPayloadCache(nativeMeshes, cache.nativeMeshPayloads);
70
+ }
71
+ return nativeMeshes;
72
+ }
73
+ function commitNativeMeshPayloadCache(cache) {
74
+ const payloads = cache.nativeMeshPayloads;
75
+ for (const signature of payloads.pending) {
76
+ const cached = payloads.payloads.get(signature);
77
+ if (cached)
78
+ cached.ready = true;
79
+ }
80
+ payloads.pending.clear();
59
81
  }
60
82
  function visitObject(object, camera, meshes, groupOrder, viewportHeight, clippingContext, localClippingEnabled, shadowMaterialMode, materialContext, overrideMaterial, cache, callbackContext) {
61
83
  if (!object)
@@ -177,7 +199,7 @@ function appendMesh(object, camera, meshes, groupOrder, clippingContext, localCl
177
199
  const clipping = clippingState(clippingContext, material, localClippingEnabled);
178
200
  const wireframe = isMeshWireframeMaterial(material);
179
201
  if (index) {
180
- const indices = index.slice(group.start, group.start + group.count);
202
+ const indices = indexRangeWithCache(cache, geometry, index, group.start, group.count);
181
203
  if (indices.length % 3 !== 0) {
182
204
  throw new Error(`THREE.Mesh "${object.name || object.uuid || '<unnamed>'}" has a non-triangle index range`);
183
205
  }
@@ -517,7 +539,7 @@ function appendShadowOnlyMeshGroup(object, camera, meshes, group, groupOrder, cl
517
539
  const wireframe = isDepthDistanceWireframeMaterial(shadowMaterial);
518
540
  const hiddenMainPass = shadowOnlyMainPassState();
519
541
  if (index) {
520
- const indices = index.slice(group.start, group.start + group.count);
542
+ const indices = indexRangeWithCache(cache, object.geometry, index, group.start, group.count);
521
543
  if (indices.length % 3 !== 0) {
522
544
  throw new Error(`THREE.Mesh "${object.name || object.uuid || '<unnamed>'}" has a non-triangle index range`);
523
545
  }
@@ -1643,6 +1665,84 @@ function nativeMeshesFromSortedFlattened(meshes) {
1643
1665
  }
1644
1666
  return nativeMeshes;
1645
1667
  }
1668
+ const NativeMeshPayloadCacheLimit = 2048;
1669
+ function applyNativeMeshPayloadCache(meshes, cache) {
1670
+ for (const mesh of meshes) {
1671
+ const signature = nativeMeshPayloadSignature(mesh, cache);
1672
+ if (!signature)
1673
+ continue;
1674
+ let cached = cache.payloads.get(signature);
1675
+ if (!cached) {
1676
+ const positions = mesh.positions;
1677
+ cached = {
1678
+ key: cache.nextPayloadId++,
1679
+ vertexCount: positions.length / 3,
1680
+ indexCount: mesh.indices?.length,
1681
+ ready: false,
1682
+ };
1683
+ evictNativeMeshPayloads(cache);
1684
+ cache.payloads.set(signature, cached);
1685
+ }
1686
+ mesh.nativeMeshKey = cached.key;
1687
+ mesh.nativeVertexCount = cached.vertexCount;
1688
+ mesh.nativeIndexCount = cached.indexCount;
1689
+ if (cached.ready) {
1690
+ mesh.positions = [];
1691
+ delete mesh.indices;
1692
+ delete mesh.normals;
1693
+ delete mesh.colors;
1694
+ delete mesh.uvs;
1695
+ delete mesh.uvs2;
1696
+ }
1697
+ else {
1698
+ cache.pending.add(signature);
1699
+ }
1700
+ }
1701
+ }
1702
+ function nativeMeshPayloadSignature(mesh, cache) {
1703
+ if (!mesh.positions || mesh.positions.length === 0)
1704
+ return null;
1705
+ if (mesh.positions.length % 3 !== 0)
1706
+ return null;
1707
+ if (!nativeMeshPayloadCacheable(mesh))
1708
+ return null;
1709
+ return [
1710
+ 'p', nativeMeshPayloadObjectId(cache, mesh.positions),
1711
+ 'i', nativeMeshPayloadObjectId(cache, mesh.indices),
1712
+ 'n', nativeMeshPayloadObjectId(cache, mesh.normals),
1713
+ 'c', nativeMeshPayloadObjectId(cache, mesh.colors),
1714
+ 'u', nativeMeshPayloadObjectId(cache, mesh.uvs),
1715
+ 'v', nativeMeshPayloadObjectId(cache, mesh.uvs2),
1716
+ 'flat', mesh.flatShading === true ? 1 : 0,
1717
+ 'topology', mesh.topology ?? 'triangles',
1718
+ ].join(':');
1719
+ }
1720
+ function nativeMeshPayloadCacheable(mesh) {
1721
+ return mesh.displacementMap == null
1722
+ && mesh.normalMap == null
1723
+ && mesh.bumpMap == null
1724
+ && mesh.clearcoatNormalMap == null
1725
+ && (mesh.anisotropy == null || mesh.anisotropy <= 0);
1726
+ }
1727
+ function nativeMeshPayloadObjectId(cache, value) {
1728
+ if (value == null)
1729
+ return 'none';
1730
+ let id = cache.objectIds.get(value);
1731
+ if (id === undefined) {
1732
+ id = cache.nextObjectId++;
1733
+ cache.objectIds.set(value, id);
1734
+ }
1735
+ return String(id);
1736
+ }
1737
+ function evictNativeMeshPayloads(cache) {
1738
+ while (cache.payloads.size >= NativeMeshPayloadCacheLimit) {
1739
+ const first = cache.payloads.keys().next();
1740
+ if (first.done)
1741
+ return;
1742
+ cache.payloads.delete(first.value);
1743
+ cache.pending.delete(first.value);
1744
+ }
1745
+ }
1646
1746
  function sortInfoForObject(object, material, camera, sortIndex, groupOrder, transform, geometry, group, sortItemObject, sortItemZOverride) {
1647
1747
  const renderOrder = renderOrderNumber(object.renderOrder, 'object.renderOrder', 0);
1648
1748
  const z = camera ? projectedObjectZ(object, camera, transform) : 0;
@@ -2324,11 +2424,11 @@ function expandVec3ValuesForInstances(values, start, count, instanceCount, offse
2324
2424
  return out;
2325
2425
  }
2326
2426
  function expandVec3ValuesForInstancesWithCache(cache, geometry, position, values, start, count, instanceCount, offsetAttribute, scaleAttribute) {
2327
- if (instanceCount <= 1 && !offsetAttribute && !scaleAttribute) {
2427
+ if (!cache) {
2328
2428
  return expandVec3ValuesForInstances(values, start, count, instanceCount, offsetAttribute, scaleAttribute);
2329
2429
  }
2330
2430
  const signature = instancedPositionExpansionSignature(geometry, position, values, start, count, instanceCount, offsetAttribute, scaleAttribute);
2331
- if (!cache || !signature.cacheable) {
2431
+ if (!signature.cacheable) {
2332
2432
  return expandVec3ValuesForInstances(values, start, count, instanceCount, offsetAttribute, scaleAttribute);
2333
2433
  }
2334
2434
  const key = `${start}:${count}:${instanceCount}`;
@@ -2420,11 +2520,11 @@ function expandNormalValuesForInstances(attribute, values, start, count, instanc
2420
2520
  return out;
2421
2521
  }
2422
2522
  function expandNormalValuesForInstancesWithCache(cache, geometry, attribute, values, start, count, instanceCount, label = 'geometry.attributes.normal') {
2423
- if (instanceCount <= 1 && !isInstancedAttribute(attribute)) {
2523
+ if (!cache) {
2424
2524
  return expandNormalValuesForInstances(attribute, values, start, count, instanceCount, label);
2425
2525
  }
2426
2526
  const signature = instancedNormalExpansionSignature(geometry, attribute, values, start, count, instanceCount, label);
2427
- if (!cache || !signature.cacheable) {
2527
+ if (!signature.cacheable) {
2428
2528
  return expandNormalValuesForInstances(attribute, values, start, count, instanceCount, label);
2429
2529
  }
2430
2530
  const key = `${label}:${start}:${count}:${instanceCount}`;
@@ -2483,11 +2583,11 @@ function expandUvChannelForInstances(channel, start, count, instanceCount) {
2483
2583
  return out;
2484
2584
  }
2485
2585
  function expandUvChannelForInstancesWithCache(cache, geometry, channel, start, count, instanceCount) {
2486
- if (instanceCount <= 1 && !isInstancedAttribute(channel.attribute)) {
2586
+ if (!cache) {
2487
2587
  return expandUvChannelForInstances(channel, start, count, instanceCount);
2488
2588
  }
2489
2589
  const signature = instancedUvExpansionSignature(geometry, channel, start, count, instanceCount);
2490
- if (!cache || !signature.cacheable) {
2590
+ if (!signature.cacheable) {
2491
2591
  return expandUvChannelForInstances(channel, start, count, instanceCount);
2492
2592
  }
2493
2593
  const key = `${channel.label}:${start}:${count}:${instanceCount}`;
@@ -2585,11 +2685,11 @@ function expandColorAttributeForInstances(attribute, materialColor, start, count
2585
2685
  return out;
2586
2686
  }
2587
2687
  function expandColorAttributeForInstancesWithCache(cache, geometry, attribute, materialColor, start, count, instanceCount, label = 'geometry.attributes.color') {
2588
- if (instanceCount <= 1 && !isInstancedAttribute(attribute)) {
2688
+ if (!cache) {
2589
2689
  return expandColorAttributeForInstances(attribute, materialColor, start, count, instanceCount, label);
2590
2690
  }
2591
2691
  const signature = instancedColorExpansionSignature(geometry, attribute, materialColor, start, count, instanceCount, label);
2592
- if (!cache || !signature.cacheable) {
2692
+ if (!signature.cacheable) {
2593
2693
  return expandColorAttributeForInstances(attribute, materialColor, start, count, instanceCount, label);
2594
2694
  }
2595
2695
  const key = `${label}:${start}:${count}:${instanceCount}`;
@@ -2630,6 +2730,46 @@ function sameInstancedColorExpansionSignature(a, b) {
2630
2730
  && sameAttributeSignature(a.color, b.color)
2631
2731
  && a.label === b.label;
2632
2732
  }
2733
+ function indexRangeWithCache(cache, geometry, indices, start, count) {
2734
+ if (!cache)
2735
+ return indices.slice(start, start + count);
2736
+ const signature = indexRangeExpansionSignature(geometry, indices, start, count);
2737
+ if (!signature.cacheable)
2738
+ return indices.slice(start, start + count);
2739
+ const key = `${start}:${count}`;
2740
+ let geometryCache = cache.indexRanges.get(geometry);
2741
+ const cached = geometryCache?.get(key);
2742
+ if (cached && sameIndexRangeExpansionSignature(cached.signature, signature)) {
2743
+ return cached.indices;
2744
+ }
2745
+ const range = indices.slice(start, start + count);
2746
+ if (!geometryCache) {
2747
+ geometryCache = new Map();
2748
+ cache.indexRanges.set(geometry, geometryCache);
2749
+ }
2750
+ geometryCache.set(key, { signature, indices: range });
2751
+ return range;
2752
+ }
2753
+ function indexRangeExpansionSignature(geometry, indices, start, count) {
2754
+ const signature = {
2755
+ cacheable: true,
2756
+ geometryVersion: geometry.version,
2757
+ sourceIndices: indices,
2758
+ start,
2759
+ count,
2760
+ index: attributeSignature(geometry.index),
2761
+ };
2762
+ signature.cacheable = attributeSignatureCacheable(signature.index);
2763
+ return signature;
2764
+ }
2765
+ function sameIndexRangeExpansionSignature(a, b) {
2766
+ return a.cacheable === b.cacheable
2767
+ && a.geometryVersion === b.geometryVersion
2768
+ && a.sourceIndices === b.sourceIndices
2769
+ && a.start === b.start
2770
+ && a.count === b.count
2771
+ && sameAttributeSignature(a.index, b.index);
2772
+ }
2633
2773
  function expandIndicesForInstances(indices, vertexCount, instanceCount) {
2634
2774
  if (instanceCount <= 1)
2635
2775
  return indices;