s3m-three 0.3.2 → 0.3.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"StyleMaterial.d.ts","sourceRoot":"","sources":["../../src/render/StyleMaterial.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StyleMaterial.d.ts","sourceRoot":"","sources":["../../src/render/StyleMaterial.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtD,+BAA+B;AAC/B,eAAO,MAAM,KAAK;;;;;;;;;;CAUR,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,OAAO,KAAK,CAAC,CAAC;AAE3D,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAUlD,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,WAAW;IACtB,wBAAwB;;IAExB,iCAAiC;;IAEjC,4BAA4B;;IAE5B,uBAAuB;;CAEf,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAExE,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAKzD,CAAC;AAIF,0DAA0D;AAC1D,MAAM,WAAW,QAAQ;IACvB,mBAAmB;IACnB,IAAI,EAAE,SAAS,CAAC;IAChB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,kCAAkC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2BAA2B;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yBAAyB;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe;IACf,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC3B,oBAAoB;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC,6BAA6B;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4BAA4B;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,aAAa,EAAE,QA6B3B,CAAC;AAEF,MAAM,WAAW,cAAe,SAAQ,KAAK,CAAC,oBAAoB;IAChE,QAAQ,EAAE;QACR,SAAS,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7B,SAAS,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7B,SAAS,EAAE;YAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAA;SAAE,CAAC;QACpC,cAAc,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QAClC,eAAe,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QACnC,QAAQ,EAAE,IAAI,CAAC;QACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAGD,eAAO,MAAM,eAAe,mBAA6E,CAAC;AAK1G,gDAAgD;AAChD,wBAAgB,oBAAoB,IAAI,aAAa,CAqCpD;AAiVD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,aAAa,CAAC;IACxB,GAAG,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC;IACpB,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,GAAG,cAAc,CAwFhF;AA6CD,MAAM,WAAW,eAAgB,SAAQ,KAAK,CAAC,cAAc;IAC3D,QAAQ,EAAE;QACR,SAAS,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7B,SAAS,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7B,MAAM,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QAC1B,UAAU,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QAC9B,SAAS,EAAE;YAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAA;SAAE,CAAC;QACpC,cAAc,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QAClC,eAAe,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QACnC,MAAM,EAAE;YAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAA;SAAE,CAAC;KAChC,CAAC;CACH;AAED,uBAAuB;AACvB,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,SAAM,GAAG,eAAe,CAwBhG"}
@@ -72,9 +72,10 @@ export const DEFAULT_STYLE = {
72
72
  outlineWidth: 0.9,
73
73
  outlineWidthPx: 3,
74
74
  edges: false,
75
- edgeWidth: 1.2,
75
+ edgeWidth: 1.5,
76
76
  edgeColor: '#334155',
77
- edgeOpacity: 0.45,
77
+ edgeOpacity: 0.6,
78
+ edgeThreshold: 55,
78
79
  roofThreshold: 0.65,
79
80
  texMix: 0,
80
81
  depthWrite: true,
@@ -1 +1 @@
1
- {"version":3,"file":"StyleMaterial.js","sourceRoot":"","sources":["../../src/render/StyleMaterial.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StyleMaterial.js","sourceRoot":"","sources":["../../src/render/StyleMaterial.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "s3m-three",
3
- "version": "0.3.2",
3
+ "version": "0.3.5",
4
4
  "description": "SuperMap S3M 三维模型格式的 three.js 渲染内核:浏览器内直接解析 .s3mb 瓦片,无需转 3D Tiles,支持 LOD 调度、白膜/按高度/按单体/动态扫描着色、单体级 GPU 拾取。宿主无关,可单独用于任意 three 场景。",
5
5
  "type": "module",
6
6
  "repository": {
@@ -31,6 +31,12 @@ export interface S3MDatasetOptions {
31
31
  align?: DatasetAlignment;
32
32
  /** 垂直高度偏移(米),在 align 对齐基准上的额外偏移,正数抬升,负数下降,默认 0 */
33
33
  heightOffset?: number;
34
+ /**
35
+ * 是否对该数据集生成几何棱线(CPU 端 EdgesGeometry)。
36
+ * - 不填:跟随全局 `style.edges`
37
+ * - true / false:强制开 / 关(例如地形、绿地、道路只显示材质、不描边)
38
+ */
39
+ enableEdges?: boolean;
34
40
  }
35
41
 
36
42
  export interface S3MDatasetEntry {
@@ -0,0 +1,56 @@
1
+ /**
2
+ * 轻量版顶点焊合(只按位置)
3
+ *
4
+ * 为什么不用 three/examples/jsm/utils/BufferGeometryUtils.js 的 mergeVertices:
5
+ * 1. jsm 子路径导入会在宿主打包器里给 three 制造第二个依赖入口,
6
+ * 典型症状就是控制台「WARNING: Multiple instances of Three.js being imported.」
7
+ * ——同一页面出现两份 three,instanceof 全部失灵。库端唯一治本的办法是
8
+ * 不引入 jsm 子路径,把 import 面收敛到 `three` 一个入口。
9
+ * 2. 对「提棱线」这个用途,位置焊合反而是更对的行为:完整版 mergeVertices
10
+ * 要求所有属性都在容差内匹配,而 S3M 几何常是「每面独立顶点 + 各自 UV」,
11
+ * 重合顶点会因 UV 不同而焊不上,EdgesGeometry 照样把每条三角形边当边界。
12
+ *
13
+ * 输出只保留 position(EdgesGeometry 只消费位置),并把原索引重映射到焊后顶点。
14
+ */
15
+ import * as THREE from 'three';
16
+
17
+ export function mergeVerticesByPosition(
18
+ geometry: THREE.BufferGeometry,
19
+ tolerance: number
20
+ ): THREE.BufferGeometry {
21
+ const pos = geometry.getAttribute('position') as THREE.BufferAttribute | undefined;
22
+ if (!pos || pos.count === 0) return geometry;
23
+
24
+ const inv = 1 / Math.max(tolerance, 1e-9);
25
+ /** 网格哈希:坐标量化到 tolerance 网格,同格即视为重合 */
26
+ const map = new Map<string, number>();
27
+ const out: number[] = [];
28
+ const remap = new Int32Array(pos.count);
29
+
30
+ for (let i = 0; i < pos.count; i++) {
31
+ const x = pos.getX(i);
32
+ const y = pos.getY(i);
33
+ const z = pos.getZ(i);
34
+ const key = `${Math.round(x * inv)},${Math.round(y * inv)},${Math.round(z * inv)}`;
35
+ let id = map.get(key);
36
+ if (id === undefined) {
37
+ id = out.length / 3;
38
+ out.push(x, y, z);
39
+ map.set(key, id);
40
+ }
41
+ remap[i] = id;
42
+ }
43
+
44
+ // 原几何可能带索引:按原三角形拓扑重映射,不能按顶点顺序重造三角形
45
+ const srcIndex = geometry.getIndex();
46
+ const triCount = srcIndex ? srcIndex.count : pos.count;
47
+ const outIndex = new Uint32Array(triCount);
48
+ for (let i = 0; i < triCount; i++) {
49
+ outIndex[i] = remap[srcIndex ? srcIndex.getX(i) : i]!;
50
+ }
51
+
52
+ const welded = new THREE.BufferGeometry();
53
+ welded.setAttribute('position', new THREE.Float32BufferAttribute(out, 3));
54
+ welded.setIndex(new THREE.BufferAttribute(outIndex, 1));
55
+ return welded;
56
+ }
@@ -42,6 +42,7 @@ import {
42
42
  createThickLineMaterial,
43
43
  } from './EdgeLines.js';
44
44
  import type { LineSharedUniforms, ThickLineMaterial } from './EdgeLines.js';
45
+ import { mergeVerticesByPosition } from './MergeVertices.js';
45
46
  import {
46
47
  resolveFeature,
47
48
  measureSegments,
@@ -321,6 +322,8 @@ export class S3MViewer {
321
322
  private _selectionEdges: THREE.Mesh | null = null;
322
323
  private _selectionEdgeMeshes: THREE.Mesh[] = [];
323
324
  private _edgesEnabled = false;
325
+ /** 预制棱线缓存(Crease Cache):从外部 source-creases 载入的全局统一 LineSegments,性能最高、视觉最干净 */
326
+ private _creaseLines: THREE.LineSegments | null = null;
324
327
 
325
328
  /** 业务属性查询(可选,配了 `attributes` 才有) */
326
329
  attributeQuery: AttributeQuery | null = null;
@@ -413,6 +416,11 @@ export class S3MViewer {
413
416
  width: this.style.outlineWidthPx ?? 3,
414
417
  });
415
418
 
419
+ // 关键:style.edges 是个开关,但构造函数从没据此启用过棱线,导致
420
+ // `style: { edges: true }` 形同虚设、_edgesEnabled 永远是 false。
421
+ // 这里按 style 实际值调一次 setEdges,让开关真正生效(与 setEdges 后来的手工调用一致)。
422
+ this.setEdges(!!this.style.edges);
423
+
416
424
  this._fps.last = performance.now();
417
425
  this._datasetQueue = this._normalizeDatasets(options);
418
426
  if (options.attributes) this.attributeQuery = new AttributeQuery(options.attributes);
@@ -424,19 +432,25 @@ export class S3MViewer {
424
432
  * 绑定宿主画布与 WebGL 上下文,建场景并启动数据集队列。
425
433
  * MapLibre 宿主由 S3MLayer 在 onAdd 里调用;纯 three 宿主直接传自己的 canvas / gl。
426
434
  */
427
- mount(canvas: HTMLCanvasElement, gl: WebGLRenderingContext | WebGL2RenderingContext): void {
428
- this.canvas = canvas;
429
-
430
- this.renderer = new THREE.WebGLRenderer({
435
+ /** 创建并配置一个绑定到给定 gl 上下文的 three renderer(mount 与上下文恢复共用) */
436
+ private _createRenderer(canvas: HTMLCanvasElement, gl: WebGLRenderingContext | WebGL2RenderingContext): THREE.WebGLRenderer {
437
+ const r = new THREE.WebGLRenderer({
431
438
  canvas,
432
439
  context: gl as WebGLRenderingContext,
433
440
  antialias: true,
434
441
  });
435
- this.renderer.autoClear = false;
436
- this.renderer.setPixelRatio(1);
442
+ r.autoClear = false;
443
+ r.setPixelRatio(1);
437
444
  // 白模 albedo 接近 1,不做色调映射会过曝成一片纯白、丢失明暗关系
438
- this.renderer.toneMapping = THREE.ACESFilmicToneMapping;
439
- this.renderer.toneMappingExposure = 1.0;
445
+ r.toneMapping = THREE.ACESFilmicToneMapping;
446
+ r.toneMappingExposure = 1.0;
447
+ return r;
448
+ }
449
+
450
+ mount(canvas: HTMLCanvasElement, gl: WebGLRenderingContext | WebGL2RenderingContext): void {
451
+ this.canvas = canvas;
452
+
453
+ this.renderer = this._createRenderer(canvas, gl);
440
454
  setMaxAnisotropy(this.renderer.capabilities.getMaxAnisotropy());
441
455
 
442
456
  this.scene = new THREE.Scene();
@@ -454,9 +468,42 @@ export class S3MViewer {
454
468
  this._recomputeAnchors();
455
469
  }
456
470
 
471
+ /**
472
+ * WebGL 上下文恢复后原地换新 renderer,保留已经加载好的场景与瓦片。
473
+ *
474
+ * MapLibre 在 `webglcontextlost` 时会销毁 style 并丢弃自定义图层(自定义图层
475
+ * 无法序列化进 style,所以恢复后不会自动加回)。但自定义图层的 `onRemove` 不会被
476
+ * 调用,因此我们的 scene / 几何体 / 材质 / 纹理 / 已加载瓦片都还在内存里。
477
+ *
478
+ * three 的 GPU 状态是按 renderer 实例缓存的,所以只需把 renderer / picker 换成
479
+ * 绑在新 gl 上的新实例,下一帧渲染时 three 会自动把现存的几何体、材质、纹理
480
+ * 重新上传到新上下文 —— 不需要重建场景,也不需要重新拉瓦片。
481
+ */
482
+ restoreContext(gl: WebGLRenderingContext | WebGL2RenderingContext): void {
483
+ if (!this.canvas) {
484
+ // 理论不会走到:没 mount 过就没有上下文可恢复
485
+ console.warn('[s3m] restoreContext 调用过早(尚未 mount),按首次挂载处理');
486
+ return;
487
+ }
488
+ try {
489
+ // 旧上下文已失效,dispose 可能抛错,忽略即可
490
+ this.renderer?.dispose();
491
+ } catch {
492
+ /* noop */
493
+ }
494
+ this.renderer = this._createRenderer(this.canvas, gl);
495
+ setMaxAnisotropy(this.renderer.capabilities.getMaxAnisotropy());
496
+ this.picker?.dispose();
497
+ this.picker = new Picker(this.renderer);
498
+ // 共享 uniform / 材质引用不变,three 重新编译着色器时会自然接管;
499
+ // 这里只确保下一帧尽快驱动一次渲染。
500
+ this._requestRepaint();
501
+ }
502
+
457
503
  /** 解绑场景并释放全部 GPU 资源。对应 MapLibre 图层的 onRemove()。 */
458
504
  unmount(): void {
459
505
  for (const id of [...this.datasets.keys()]) this.removeDataset(id);
506
+ this.clearCreases();
460
507
  this.groundManager.dispose();
461
508
  this.picker?.dispose();
462
509
  this.picker = null;
@@ -958,7 +1005,11 @@ export class S3MViewer {
958
1005
  this._indexMeshSmids(mesh);
959
1006
  this._addMeshHeight(mesh);
960
1007
  // 点云没有「棱」:给一堆孤立点建 EdgesGeometry 又慢又没意义
961
- if (this._edgesEnabled && !hasNativeEdges && !isPoints) this._ensureEdges(mesh);
1008
+ // 点云没有「棱」:给一堆孤立点建 EdgesGeometry 又慢又没意义。
1009
+ // 自动描边受三道开关控制:全局 style.edges / 数据集 enableEdges / 地形绿地等关键字跳过。
1010
+ if (!hasNativeEdges && !isPoints && this._datasetEdgesEnabled(entry) && !this._shouldSkipAutoEdges(ud, entry.name)) {
1011
+ this._ensureEdges(mesh);
1012
+ }
962
1013
 
963
1014
  // 新瓦片要继承当前的不透明度与着色方式
964
1015
  if (isPoints) {
@@ -1128,8 +1179,12 @@ export class S3MViewer {
1128
1179
  // 点云不走 StyleMaterial 的 uMode,模式切换要单独同步它的材质
1129
1180
  if ('mode' in patch) this._applyPointCloudStyles();
1130
1181
  if ('shading' in patch) this._applyShading();
1131
- if ('edges' in patch) this.setEdges(!!this.style.edges);
1132
- else if ('edgeColor' in patch || 'edgeWidth' in patch || 'opacity' in patch || 'edgeOpacity' in patch) {
1182
+ // 临界角变了要重建 CPU 棱线(EdgesGeometry 参数),开/关走 setEdges 整体刷新
1183
+ if ('edgeThreshold' in patch && this._edgesEnabled) {
1184
+ this.setEdges(true);
1185
+ } else if ('edges' in patch) {
1186
+ this.setEdges(!!this.style.edges);
1187
+ } else if ('edgeColor' in patch || 'edgeWidth' in patch || 'opacity' in patch || 'edgeOpacity' in patch) {
1133
1188
  this._refreshEdgeLines();
1134
1189
  }
1135
1190
  if (this._selection) {
@@ -1371,14 +1426,66 @@ export class S3MViewer {
1371
1426
  step();
1372
1427
  }
1373
1428
 
1429
+ /**
1430
+ * 挂载预制棱线缓存(Crease Cache)。
1431
+ *
1432
+ * 直接把 `source-creases.f32` 这类 Float32Array 缓冲载入为一组全局统一的
1433
+ * LineSegments —— 相比逐 Mesh 现算 EdgesGeometry,性能高一个量级,视觉也最干净。
1434
+ * 坐标按「场景本地坐标」(相对场景锚点的米)处理,与瓦片几何同一坐标系。
1435
+ *
1436
+ * @param url 棱线缓存地址(二进制 Float32 序列:x,y,z,x,y,z,… 成对成段)
1437
+ */
1438
+ async loadCreases(url: string): Promise<void> {
1439
+ const resp = await fetch(url);
1440
+ if (!resp.ok) throw new Error(`[s3m] 棱线缓存加载失败: ${resp.status} ${url}`);
1441
+ const buf = await resp.arrayBuffer();
1442
+ const arr = new Float32Array(buf);
1443
+ if (arr.length < 6) return;
1444
+
1445
+ const geo = new THREE.BufferGeometry();
1446
+ geo.setAttribute('position', new THREE.BufferAttribute(arr, 3));
1447
+ const s = this.style;
1448
+ const mat = new THREE.LineBasicMaterial({
1449
+ color: new THREE.Color(s.edgeColor),
1450
+ transparent: true,
1451
+ opacity: Math.min(1, Math.max(0, s.edgeOpacity ?? 0.6)) * Math.min(1, Math.max(0.05, s.opacity ?? 1)),
1452
+ depthWrite: false,
1453
+ });
1454
+ const lines = new THREE.LineSegments(geo, mat);
1455
+ lines.renderOrder = 2;
1456
+ lines.frustumCulled = false;
1457
+ lines.raycast = () => {};
1458
+
1459
+ this.clearCreases();
1460
+ this._creaseLines = lines;
1461
+ this.scene?.add(lines);
1462
+ this._requestRepaint();
1463
+ }
1464
+
1465
+ /** 移除并释放预制棱线缓存 */
1466
+ clearCreases(): void {
1467
+ if (!this._creaseLines) return;
1468
+ this.scene?.remove(this._creaseLines);
1469
+ this._creaseLines.geometry.dispose();
1470
+ (this._creaseLines.material as THREE.Material)?.dispose?.();
1471
+ this._creaseLines = null;
1472
+ this._requestRepaint();
1473
+ }
1474
+
1374
1475
  /** 让全局棱线材质跟上 style.edgeColor / edgeWidth / edgeOpacity */
1375
1476
  private _syncEdgeStyle(): void {
1376
1477
  const s = this.style;
1377
1478
  const u = this.edgeMaterial.uniforms;
1378
1479
  u.uColor.value.set(s.edgeColor);
1379
- u.uWidth.value = Math.max(0.1, s.edgeWidth ?? 1.2);
1480
+ u.uWidth.value = Math.max(0.1, s.edgeWidth ?? 1.5);
1380
1481
  u.uOpacity.value =
1381
- Math.min(1, Math.max(0, s.edgeOpacity ?? 0.45)) * Math.min(1, Math.max(0.05, s.opacity ?? 1));
1482
+ Math.min(1, Math.max(0, s.edgeOpacity ?? 0.6)) * Math.min(1, Math.max(0.05, s.opacity ?? 1));
1483
+ // 预制棱线缓存(LineBasicMaterial)同步颜色 / 不透明度
1484
+ if (this._creaseLines) {
1485
+ const m = this._creaseLines.material as THREE.LineBasicMaterial;
1486
+ m.color.set(s.edgeColor);
1487
+ m.opacity = Math.min(1, Math.max(0, s.edgeOpacity ?? 0.6)) * Math.min(1, Math.max(0.05, s.opacity ?? 1));
1488
+ }
1382
1489
  }
1383
1490
 
1384
1491
  /** 让数据自带的棱线跟着 style.edgeColor / opacity 走(这些是 LineBasicMaterial,改不了粗细) */
@@ -1386,7 +1493,7 @@ export class S3MViewer {
1386
1493
  const mat = lines.material as THREE.LineBasicMaterial;
1387
1494
  if (!mat || !mat.color) return;
1388
1495
  mat.color.set(this.style.edgeColor);
1389
- const baseOpacity = this.style.edgeOpacity ?? 0.45;
1496
+ const baseOpacity = this.style.edgeOpacity ?? 0.6;
1390
1497
  mat.opacity = baseOpacity * Math.min(1, Math.max(0.05, this.style.opacity ?? 1));
1391
1498
  mat.transparent = true;
1392
1499
  mat.polygonOffset = true;
@@ -1404,14 +1511,48 @@ export class S3MViewer {
1404
1511
  }
1405
1512
  }
1406
1513
 
1514
+ /** 地形 / 绿地 / 道路 / 地面铺装等不参与自动描边(数据自带棱线包另说) */
1515
+ private static readonly _EDGE_SKIP_KEYWORDS = [
1516
+ 'terrain', 'ground', 'vegetation', 'green', 'road', 'dem',
1517
+ '绿地', '道路', '地面', '地形', '植被', '铺装',
1518
+ ];
1519
+
1520
+ /** 数据集级别的棱线开关:enableEdges 优先,否则跟随全局 style.edges */
1521
+ private _datasetEdgesEnabled(entry: S3MDatasetEntry): boolean {
1522
+ const opt = entry.options?.enableEdges;
1523
+ if (opt === true) return true;
1524
+ if (opt === false) return false;
1525
+ return this._edgesEnabled;
1526
+ }
1527
+
1528
+ /** 该 mesh 是否命中「跳过自动描边」的关键字(skeletonName / 数据集名) */
1529
+ private _shouldSkipAutoEdges(ud: MeshUserData, datasetName: string): boolean {
1530
+ const hay = `${ud.skeletonName ?? ''} ${datasetName}`.toLowerCase();
1531
+ return S3MViewer._EDGE_SKIP_KEYWORDS.some((k) => hay.includes(k));
1532
+ }
1533
+
1407
1534
  private _ensureEdges(mesh: THREE.Mesh): void {
1408
1535
  const ud = mesh.userData as MeshUserData;
1409
1536
  if (ud.edges || ud.nativeEdges || !mesh.geometry) return;
1410
- const indexCount = mesh.geometry.index?.count ?? 0;
1537
+ // 地形 / 绿地 / 道路等不参与自动描边(即使全局开棱线也要跳过)
1538
+ if (this._shouldSkipAutoEdges(ud, '')) return;
1539
+
1540
+ const posAttr = mesh.geometry.getAttribute('position');
1541
+ const indexCount = mesh.geometry.index?.count ?? (posAttr ? posAttr.count : 0);
1411
1542
  // 棱线是 CPU 端建的,超大几何直接跳过,避免拖慢加载
1412
1543
  if (indexCount > 120000) return;
1413
1544
 
1414
- const source = new THREE.EdgesGeometry(mesh.geometry, 40);
1545
+ // 1. 先做顶点容差焊合,让相邻三角形正确共享边索引。
1546
+ // S3M 几何常为「每面独立顶点」,不焊合的话 EdgesGeometry 会把每条三角形边都当成边界,棱线爆炸。
1547
+ // 注意用本地实现而不是 three/examples/jsm —— jsm 子路径导入会在宿主里
1548
+ // 制造第二份 three 实例("Multiple instances of Three.js" 警告的元凶)。
1549
+ // tolerance 取米级模型下的 5mm,足以合并重合顶点又不会误并真实相邻面。
1550
+ const welded = mergeVerticesByPosition(mesh.geometry, 0.005);
1551
+ // 2. 调大临界角(默认 55°,可在 style.edgeThreshold 调),过滤浅坡与曲面细分,只保留真正的棱。
1552
+ const thresholdAngle = this.style.edgeThreshold ?? 55;
1553
+ const source = new THREE.EdgesGeometry(welded, thresholdAngle);
1554
+ welded.dispose();
1555
+
1415
1556
  const attr = source.getAttribute('position') as THREE.BufferAttribute | undefined;
1416
1557
  const segments = attr ? (attr.array as Float32Array) : null;
1417
1558
  source.dispose();
@@ -2132,6 +2273,9 @@ export class S3MViewer {
2132
2273
  canvasHeight: number;
2133
2274
  }): boolean {
2134
2275
  if (!this.renderer || !this.scene || !this.camera || !this.sceneAnchor || !this.canvas) return false;
2276
+ // 上下文丢失期间(丢失→恢复之间)不要尝试渲染,否则会刷一堆 GL 错误
2277
+ const gl = this.renderer.getContext() as WebGLRenderingContext | null;
2278
+ if (gl && typeof gl.isContextLost === 'function' && gl.isContextLost()) return false;
2135
2279
 
2136
2280
  // 脏标记正常由微任务刷掉;这里再兜一次底,保证「本帧画出来的」一定是最新样式
2137
2281
  this.flushOverrides();
@@ -110,6 +110,8 @@ export interface S3MStyle {
110
110
  edgeWidth?: number;
111
111
  edgeColor: string;
112
112
  edgeOpacity?: number;
113
+ /** 棱线临界角(度):相邻面法线夹角超过该值才描边,过滤掉浅坡与曲面细分。默认 55° */
114
+ edgeThreshold?: number;
113
115
  roofThreshold?: number;
114
116
  /** 是否与模型原色贴图叠加混合(0 = 纯色覆盖,1 = 叠乘原色贴图) */
115
117
  texMix?: number;
@@ -139,9 +141,10 @@ export const DEFAULT_STYLE: S3MStyle = {
139
141
  outlineWidth: 0.9,
140
142
  outlineWidthPx: 3,
141
143
  edges: false,
142
- edgeWidth: 1.2,
144
+ edgeWidth: 1.5,
143
145
  edgeColor: '#334155',
144
- edgeOpacity: 0.45,
146
+ edgeOpacity: 0.6,
147
+ edgeThreshold: 55,
145
148
  roofThreshold: 0.65,
146
149
  texMix: 0,
147
150
  depthWrite: true,