s3m-three 0.3.14 → 0.4.16

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.
@@ -37,6 +37,48 @@ export declare const SELECT_MODE: {
37
37
  };
38
38
  export type SelectMode = (typeof SELECT_MODE)[keyof typeof SELECT_MODE];
39
39
  export declare const SELECT_MODE_LABELS: Record<SelectMode, string>;
40
+ /**
41
+ * 全局棱线的画法。
42
+ *
43
+ * - `'line'` CPU 折边线:焊合 → 折边判定 → 屏幕空间等宽四边形(默认口径)
44
+ * - `'offset'` 同上,但整段沿「边法线」往外推 `edgeOffset` 米。贴在面上的线会被
45
+ * 面的明暗吃掉,推出去一点才看得清,代价是要多带一条 aNormal 属性
46
+ * - `'hull'` 背面外扩轮廓:把整块几何沿法线鼓一圈、只画背面,得到「白模 + 卡通
47
+ * 描边」的观感。不建任何折边几何,成本就是多画一遍网格
48
+ * - `'gpu'` 纯片元描边:在主材质里用屏幕导数找「法线突变」的像素,直接混成棱线色。
49
+ * 零几何、零额外 pass,代价是线宽约 1 个设备像素,且描不出几何外轮廓
50
+ */
51
+ export type EdgeStyle = 'line' | 'offset' | 'hull' | 'gpu';
52
+ /**
53
+ * `style.edges` 的取值。
54
+ *
55
+ * boolean 是旧口径(`true` = `'line'`),字符串 / 数组用来选画法,数组可叠加,
56
+ * 例如 `['line', 'hull']` = 折边线 + 外扩轮廓同时上。
57
+ * 注意 `'offset'` 隐含折边线:外推是折边线的修饰,不是另一种线。
58
+ */
59
+ export type EdgesOption = boolean | EdgeStyle | EdgeStyle[];
60
+ /** 归一化后的棱线开关 */
61
+ export interface EdgeModes {
62
+ /** 整体开关:任一画法命中就是 true */
63
+ enabled: boolean;
64
+ /** 是否建 CPU 折边线 */
65
+ line: boolean;
66
+ /** 折边线是否沿边法线外推 */
67
+ offset: boolean;
68
+ /** 是否挂背面外扩轮廓 */
69
+ hull: boolean;
70
+ /** 是否在材质里做片元级描边(零几何) */
71
+ gpu: boolean;
72
+ }
73
+ /**
74
+ * 把 `EdgesOption` 归一成四个开关。
75
+ *
76
+ * 未知值(宿主 JS 里传错字符串 / 脏数组)一律当关,不抛错也不误开——样式这种东西
77
+ * 出错时最该做的是「保持不动」,而不是把整个图层带崩。
78
+ */
79
+ export declare function resolveEdgeModes(value: EdgesOption | null | undefined): EdgeModes;
80
+ /** 两套开关是否等价(只比较有效位,用来判断要不要重建装饰) */
81
+ export declare function sameEdgeModes(a: EdgeModes, b: EdgeModes): boolean;
40
82
  /** 图层整体样式(宿主无关,S3MViewer 与 s3m-maplibre 的 S3MLayer 共用) */
41
83
  export interface S3MStyle {
42
84
  /** 着色模式,见 STYLE */
@@ -79,14 +121,31 @@ export interface S3MStyle {
79
121
  outlineWidth?: number;
80
122
  /** 选中棱线的粗细(像素,默认 3,仅 outlineStyle: 'edges' 生效,缩放时保持恒定) */
81
123
  outlineWidthPx?: number;
82
- /** 是否显示几何棱线(CPU 端生成,有开销) */
83
- edges: boolean;
124
+ /**
125
+ * 是否显示几何棱线。
126
+ *
127
+ * 取值是 `boolean | EdgeStyle | EdgeStyle[]`:`true` 等价于 `'line'`(旧口径),
128
+ * `'hull'` 走背面外扩轮廓,`'offset'` 是折边线 + 法线外推,数组可叠加。
129
+ * 见 `resolveEdgeModes`。
130
+ */
131
+ edges: EdgesOption;
84
132
  /** 全局棱线粗细(像素,默认 1.2) */
85
133
  edgeWidth?: number;
86
134
  edgeColor: string;
87
135
  edgeOpacity?: number;
88
136
  /** 棱线临界角(度):相邻面法线夹角超过该值才描边,过滤掉浅坡与曲面细分。默认 55° */
89
137
  edgeThreshold?: number;
138
+ /** 折边线沿边法线外推的距离(米,默认 0.15,仅 edges 含 'offset' 生效) */
139
+ edgeOffset?: number;
140
+ /** 背面外扩轮廓的厚度(米,默认 0.9,仅 edges 含 'hull' 生效) */
141
+ edgeHullWidth?: number;
142
+ /**
143
+ * 忽略数据自带的棱线包(primitiveType 13),一律 CPU 现算。默认 false。
144
+ *
145
+ * 数据自带的棱线是 `LineBasicMaterial`,线宽恒 1px,`edgeWidth` / 外扩 / 单体跟随
146
+ * 全都吃不上。想让这些能力对所有数据统一生效就打开它,代价是 CPU 要现算折边。
147
+ */
148
+ forceCpuEdges?: boolean;
90
149
  roofThreshold?: number;
91
150
  /** 是否与模型原色贴图叠加混合(0 = 纯色覆盖,1 = 叠乘原色贴图) */
92
151
  texMix?: number;
@@ -109,7 +168,20 @@ export interface S3MStyle {
109
168
  fadeIn?: number;
110
169
  }
111
170
  export declare const DEFAULT_STYLE: S3MStyle;
112
- export interface StyledMaterial extends THREE.MeshStandardMaterial {
171
+ /** 光照模型:pbr(默认,MeshStandardMaterial)| lambert(省 GGX 与环境球谐) */
172
+ export type MaterialQuality = 'pbr' | 'lambert';
173
+ /**
174
+ * 切换光照模型。
175
+ *
176
+ * 'pbr'(默认)= `MeshStandardMaterial`,GGX + 环境球谐,质感最好也最贵。
177
+ * 'lambert' = `MeshLambertMaterial`,只保留漫反射 + 平行光,片元开销约省一半;
178
+ * 白模 / 纯色 / 按高度着色这类不需要高光的模式,肉眼差别很小。
179
+ *
180
+ * 注意:只影响之后创建的材质 —— 已加载的瓦片要重新加载才会换。
181
+ */
182
+ export declare function setMaterialQuality(q: MaterialQuality): void;
183
+ export declare function getMaterialQuality(): MaterialQuality;
184
+ export type StyledMaterial = (THREE.MeshStandardMaterial | THREE.MeshLambertMaterial) & {
113
185
  userData: {
114
186
  uSelBatch: {
115
187
  value: number;
@@ -136,7 +208,7 @@ export interface StyledMaterial extends THREE.MeshStandardMaterial {
136
208
  isStyled: true;
137
209
  [key: string]: unknown;
138
210
  };
139
- }
211
+ };
140
212
  export declare const DUMMY_BATCH_TEX: THREE.DataTexture;
141
213
  /** 全局共享 uniform(所有材质引用同一批对象,改 .value 即全场景生效) */
142
214
  export declare function createSharedUniforms(): StyleUniforms;
@@ -161,6 +233,24 @@ export interface StyledMaterialOptions {
161
233
  * 每个 Mesh 独享一个材质实例,但 uniform 对象是全局共享的。
162
234
  */
163
235
  export declare function createStyledMaterial(opts: StyledMaterialOptions): StyledMaterial;
236
+ /**
237
+ * 外扩轮廓的「外观」uniform。
238
+ *
239
+ * 与棱线一样,全局外扩是逐网格一份材质(要各绑各的单体状态纹理),但颜色 / 厚度 /
240
+ * 不透明度必须全局统一 —— 所以这些 `{ value }` 对象由调用方持有并共享给每一份材质,
241
+ * 改一次全场景生效。
242
+ */
243
+ export interface OutlineStyleUniforms {
244
+ uColor: {
245
+ value: THREE.Color;
246
+ };
247
+ uWidth: {
248
+ value: number;
249
+ };
250
+ uOpacity: {
251
+ value: number;
252
+ };
253
+ }
164
254
  export interface OutlineMaterial extends THREE.ShaderMaterial {
165
255
  uniforms: {
166
256
  uSelBatch: {
@@ -172,6 +262,9 @@ export interface OutlineMaterial extends THREE.ShaderMaterial {
172
262
  uWidth: {
173
263
  value: number;
174
264
  };
265
+ uOpacity: {
266
+ value: number;
267
+ };
175
268
  uElevation: {
176
269
  value: number;
177
270
  };
@@ -207,6 +300,15 @@ export interface OutlineMaterial extends THREE.ShaderMaterial {
207
300
  };
208
301
  };
209
302
  }
210
- /** 选中单体的描边材质(背面外扩法) */
211
- export declare function createOutlineMaterial(shared: StyleUniforms, initialWidth?: number): OutlineMaterial;
303
+ /**
304
+ * 描边材质(背面外扩法)。
305
+ *
306
+ * 选中侧与全局棱线共用这一份实现,差别只在 uniform:
307
+ * - 选中:`uSelBatch` = 选中单体的 batchId,只扩那一栋,不透明
308
+ * - 全局:`uSelWhole` = 1,整块几何都扩,走 `edgeOpacity` 混合
309
+ *
310
+ * @param styleUniforms 传入时**直接复用这些 `{ value }` 对象**,让逐网格材质共享外观
311
+ * @param transparent 全局外扩要能吃 `edgeOpacity`,选中侧保持不透明(默认 false)
312
+ */
313
+ export declare function createOutlineMaterial(shared: StyleUniforms, initialWidth?: number, styleUniforms?: OutlineStyleUniforms, transparent?: boolean): OutlineMaterial;
212
314
  //# sourceMappingURL=StyleMaterial.d.ts.map
@@ -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":"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"}
@@ -51,6 +51,39 @@ export const SELECT_MODE_LABELS = {
51
51
  [SELECT_MODE.MULTIPLY]: '叠乘模式 (Multiply)',
52
52
  [SELECT_MODE.GLOW_ONLY]: '仅描边发光 (Glow)',
53
53
  };
54
+ const EDGE_MODE_OFF = { enabled: false, line: false, offset: false, hull: false, gpu: false };
55
+ /**
56
+ * 把 `EdgesOption` 归一成四个开关。
57
+ *
58
+ * 未知值(宿主 JS 里传错字符串 / 脏数组)一律当关,不抛错也不误开——样式这种东西
59
+ * 出错时最该做的是「保持不动」,而不是把整个图层带崩。
60
+ */
61
+ export function resolveEdgeModes(value) {
62
+ if (value == null || value === false)
63
+ return { ...EDGE_MODE_OFF };
64
+ if (value === true)
65
+ return { ...EDGE_MODE_OFF, enabled: true, line: true };
66
+ const list = Array.isArray(value) ? value : [value];
67
+ const modes = { ...EDGE_MODE_OFF };
68
+ for (const item of list) {
69
+ if (item === 'line')
70
+ modes.line = true;
71
+ else if (item === 'offset') {
72
+ modes.line = true;
73
+ modes.offset = true;
74
+ }
75
+ else if (item === 'hull')
76
+ modes.hull = true;
77
+ else if (item === 'gpu')
78
+ modes.gpu = true;
79
+ }
80
+ modes.enabled = modes.line || modes.hull || modes.gpu;
81
+ return modes;
82
+ }
83
+ /** 两套开关是否等价(只比较有效位,用来判断要不要重建装饰) */
84
+ export function sameEdgeModes(a, b) {
85
+ return a.line === b.line && a.offset === b.offset && a.hull === b.hull && a.gpu === b.gpu;
86
+ }
54
87
  export const DEFAULT_STYLE = {
55
88
  mode: STYLE.TEXTURE,
56
89
  colorA: '#dfe6ee',
@@ -77,12 +110,35 @@ export const DEFAULT_STYLE = {
77
110
  edgeColor: '#334155',
78
111
  edgeOpacity: 0.6,
79
112
  edgeThreshold: 55,
113
+ edgeOffset: 0.15,
114
+ edgeHullWidth: 0.9,
115
+ forceCpuEdges: false,
80
116
  roofThreshold: 0.65,
81
117
  texMix: 0,
82
118
  ambientGain: 0,
83
119
  depthWrite: true,
84
120
  fadeIn: 0,
85
121
  };
122
+ /**
123
+ * 当前光照模型。模块级全局 —— 与 anisotropy / maxTextureSize 同一套设计,
124
+ * 同页多个图层会互相覆盖,后创建的那个决定全局。只影响**之后创建**的材质。
125
+ */
126
+ let materialQuality = 'pbr';
127
+ /**
128
+ * 切换光照模型。
129
+ *
130
+ * 'pbr'(默认)= `MeshStandardMaterial`,GGX + 环境球谐,质感最好也最贵。
131
+ * 'lambert' = `MeshLambertMaterial`,只保留漫反射 + 平行光,片元开销约省一半;
132
+ * 白模 / 纯色 / 按高度着色这类不需要高光的模式,肉眼差别很小。
133
+ *
134
+ * 注意:只影响之后创建的材质 —— 已加载的瓦片要重新加载才会换。
135
+ */
136
+ export function setMaterialQuality(q) {
137
+ materialQuality = q === 'lambert' ? 'lambert' : 'pbr';
138
+ }
139
+ export function getMaterialQuality() {
140
+ return materialQuality;
141
+ }
86
142
  const DUMMY_DATA = new Float32Array([
87
143
  -1, -1, -1, 0, // Row 0: color rgb, elevation/hidden
88
144
  0, 0, 0, 0, // Row 1: translation xyz, opacity
@@ -659,11 +715,11 @@ const FRAG_BAKE = /* glsl */ `
659
715
  */
660
716
  export function createStyledMaterial(opts) {
661
717
  const uniforms = opts.uniforms;
662
- const mat = new THREE.MeshStandardMaterial({
718
+ // 两种光照模型共用的参数。注入的 chunk 只动 diffuseColor / normal / transformed,
719
+ // 在 Standard 与 Lambert 的 shader 里都存在同名 include,所以模板不用分支。
720
+ const baseParams = {
663
721
  color: opts.color ?? new THREE.Color(0xffffff),
664
722
  map: opts.map ?? null,
665
- roughness: opts.roughness ?? 0.95,
666
- metalness: 0,
667
723
  side: opts.side ?? THREE.DoubleSide,
668
724
  transparent: !!opts.transparent,
669
725
  opacity: opts.opacity ?? 1,
@@ -674,7 +730,14 @@ export function createStyledMaterial(opts) {
674
730
  // 顶点色、贴图全部在自定义 chunk 里处理,不让 three 插手
675
731
  vertexColors: false,
676
732
  alphaTest: opts.alphaTest ?? 0,
677
- });
733
+ };
734
+ const mat = (materialQuality === 'lambert'
735
+ ? new THREE.MeshLambertMaterial(baseParams)
736
+ : new THREE.MeshStandardMaterial({
737
+ ...baseParams,
738
+ roughness: opts.roughness ?? 0.95,
739
+ metalness: 0,
740
+ }));
678
741
  // 选中单体编号:每个 Mesh 独立,默认 -1 表示无选中
679
742
  const uSelBatch = { value: -1 };
680
743
  // 没有单体化信息的几何(batchId = -1)只能整块选中
@@ -856,19 +919,36 @@ const OUTLINE_VERT = /* glsl */ `
856
919
  `;
857
920
  const OUTLINE_FRAG = /* glsl */ `
858
921
  uniform vec3 uColor;
922
+ uniform float uOpacity;
859
923
  varying float vSel;
860
924
  void main() {
861
925
  if ( vSel < 0.5 ) discard;
862
- gl_FragColor = vec4( uColor, 1.0 );
926
+ if ( uOpacity <= 0.003 ) discard;
927
+ gl_FragColor = vec4( uColor, uOpacity );
863
928
  }
864
929
  `;
865
- /** 选中单体的描边材质(背面外扩法) */
866
- export function createOutlineMaterial(shared, initialWidth = 0.9) {
930
+ /**
931
+ * 描边材质(背面外扩法)。
932
+ *
933
+ * 选中侧与全局棱线共用这一份实现,差别只在 uniform:
934
+ * - 选中:`uSelBatch` = 选中单体的 batchId,只扩那一栋,不透明
935
+ * - 全局:`uSelWhole` = 1,整块几何都扩,走 `edgeOpacity` 混合
936
+ *
937
+ * @param styleUniforms 传入时**直接复用这些 `{ value }` 对象**,让逐网格材质共享外观
938
+ * @param transparent 全局外扩要能吃 `edgeOpacity`,选中侧保持不透明(默认 false)
939
+ */
940
+ export function createOutlineMaterial(shared, initialWidth = 0.9, styleUniforms, transparent = false) {
941
+ const style = styleUniforms ?? {
942
+ uColor: { value: shared.uSelColor.value.clone() },
943
+ uWidth: { value: initialWidth },
944
+ uOpacity: { value: 1 },
945
+ };
867
946
  const mat = new THREE.ShaderMaterial({
868
947
  uniforms: {
869
948
  uSelBatch: { value: -1 },
870
949
  uSelWhole: { value: 0 },
871
- uWidth: { value: initialWidth },
950
+ uWidth: style.uWidth,
951
+ uOpacity: style.uOpacity,
872
952
  uElevation: { value: 0 },
873
953
  uBatchTex: { value: DUMMY_BATCH_TEX },
874
954
  uBatchTex2: { value: DUMMY_BATCH_TEX },
@@ -879,13 +959,13 @@ export function createOutlineMaterial(shared, initialWidth = 0.9) {
879
959
  uPathCount: shared.uPathCount ?? { value: 1 },
880
960
  uPathTexActive: shared.uPathTexActive ?? { value: 0 },
881
961
  uPathTime: shared.uPathTime ?? { value: 0 },
882
- uColor: { value: shared.uSelColor.value.clone() },
962
+ uColor: style.uColor,
883
963
  },
884
964
  vertexShader: OUTLINE_VERT,
885
965
  fragmentShader: OUTLINE_FRAG,
886
966
  side: THREE.BackSide,
887
967
  depthWrite: false,
888
- transparent: false,
968
+ transparent,
889
969
  // 描边要压在建筑后面一点,避免和本体 z-fighting
890
970
  polygonOffset: true,
891
971
  polygonOffsetFactor: 1,
@@ -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/docs/API.md CHANGED
@@ -173,6 +173,8 @@ new S3MViewer(options?: S3MViewerOptions)
173
173
  | `lodPixelRatioCap` | `number` | `Infinity` | LOD 判定屏幕高度的 **DPR 上限**(不截断)。默认按 `canvasHeight` 物理像素算,与官方 `calcPixFromCam` 同口径;3x DPR 手机上由此会多细化、多拉瓦片,传 `2` 即按「CSS 高度 × 2」截断 |
174
174
  | `anisotropyCap` | `number` | `Infinity` | 各向异性过滤上限(不封顶 = 取 GPU 最大值,通常 16)。移动端封到 4 / 8 肉眼通常无差,采样成本明显下降。只影响之后创建的纹理 |
175
175
  | `maxTextureSize` | `number` | `Infinity` | 纹理长边像素上限(不限制)。非图集的 RGBA / WebP 产物按 2× 盒式滤波减半到上限内;DXT 压缩直传与图集不受影响 |
176
+ | `maxImageCache` | `number` | `128` | 纹理缓存条数上限。一条 = 一张已解码的瓦片纹理,1024² RGBA 约 4MB,128 条即约 512MB 显存;低端设备 32~48。LRU,降下来下次淘汰时释放 |
177
+ | `materialQuality` | `'pbr' \| 'lambert'` | `'pbr'` | 光照模型。`lambert` 用 `MeshLambertMaterial` 替换 PBR,去掉 GGX 与环境球谐,片元约省一半;白模 / 纯色 / 按高度着色几乎无差。模块级全局,只影响之后创建的材质 |
176
178
  | `buildTile` | `BuildTileFn \| null` | — | 自定义瓦片构建器(测试 / 服务端渲染时注入) |
177
179
  | `attributes` | `AttributeQueryOptions` | — | 业务属性查询配置,配了才能 `colorByField()`,见[按业务字段着色](#按业务字段着色) |
178
180
  | `onRequestRepaint` | `() => void` | — | 宿主请求重画的信号:纯 three 宿主接自己的渲染循环 |
@@ -248,15 +250,19 @@ interface S3MDatasetOptions {
248
250
  setStyle(patch?: Partial<S3MStyle>, transition?: TransitionOptions): void
249
251
  getStyle(): S3MStyle & { modeLabel: string }
250
252
  setOpacity(opacity: number, transition?: TransitionOptions): void
251
- setEdges(enabled: boolean, transition?: TransitionOptions): void
253
+ setEdges(edges: EdgesOption, transition?: TransitionOptions): void
252
254
  ```
253
255
 
254
256
  `transition` 用来给能插值的字段加过渡,语义见[动画与过渡](#动画与过渡);不传则和旧版一样即时生效。
255
257
 
256
- `setStyle` 是**合并**语义,只传要改的字段。除了 `shading`(编译期宏,需重编译着色器)、`edges` / `edgeThreshold`(结构变更,走 `setEdges` / 重建棱线)之外,其余字段都是 uniform / 材质状态更新,热切换成本很低。
258
+ `setStyle` 是**合并**语义,只传要改的字段。除了 `shading`(编译期宏,需重编译着色器)、`edges` / `edgeThreshold` / `forceCpuEdges`(结构变更,走 `setEdges` / 重建棱线)之外,其余字段都是 uniform / 材质状态更新,热切换成本很低。
257
259
 
258
260
  棱线优先用**数据自带的棱线包**(`primitiveType === 13` 的索引包):解析时就建好 `LineSegments`,开关只是切 `visible`,成本为零。数据里没有时才用 `EdgesGeometry` 在 CPU 端现算(8ms 一帧切片,超过 12 万索引直接跳过)。棱线画成**屏幕空间等宽线**(`packages/s3m-three/src/render/EdgeLines.ts`):WebGL 的 `lineWidth` 恒定 1px,只有把每条棱摊成面向屏幕的四边形才能真的调粗细。
259
261
 
262
+ `setEdges` 收 `boolean | 'line' | 'offset' | 'hull' | 数组`:`'offset'` 让折边线沿边法线外推(不再被面的明暗吃掉),`'hull'` 走背面外扩轮廓(白模 + 卡通描边),数组可叠加。细节见[棱线画法](#棱线画法edges)。
263
+
264
+ 数据自带棱线包时 `edgeWidth` / 外扩 / 单体跟随都不生效(那是 `LineBasicMaterial`);要这些能力就把 `style.forceCpuEdges` 打开,改由 CPU 现算。
265
+
260
266
  > 注意:棱线包**不能**当三角面画。把它当 `TRIANGLES` 提交,每条棱线都会被连成一根几十上百米的尖刺。
261
267
 
262
268
  ### 光照控制 (Adjustable Lighting)
@@ -378,6 +384,7 @@ setAnisotropyCap(cap: number): void // Infinity = 取 GPU 最大值(
378
384
  readonly anisotropyCap: number
379
385
  setMaxTextureSize(n: number): void // Infinity = 不限制(默认)
380
386
  readonly maxTextureSize: number
387
+ readonly maxImageCache: number
381
388
  readonly stats: Stats
382
389
  readonly fps: number
383
390
  getBounds(): [[number, number], [number, number]] | null // 合并经纬度范围
@@ -428,16 +435,44 @@ interface S3MStyle {
428
435
  outlineColor?: string; // 描边颜色,默认跟随 selectColor
429
436
  outlineWidthPx?: number; // 选中棱线粗细(像素,默认 3),仅 outlineStyle: 'edges'
430
437
  outlineWidth?: number; // 外扩轮廓粗细(米,默认 0.9),仅 outlineStyle: 'hull'
431
- edges: boolean; // 全局棱线
438
+ edges: EdgesOption; // 全局棱线:boolean | 'line' | 'offset' | 'hull' | 数组
432
439
  edgeColor: string; // 棱线颜色
433
440
  edgeWidth?: number; // 全局棱线粗细(像素,默认 1.2)
434
441
  edgeOpacity?: number; // 棱线透明度(0.1 ~ 1.0),默认 0.45
435
442
  edgeThreshold?: number; // 棱线临界角(度,默认 55):相邻面法线夹角超过它才描边,调大滤掉浅坡
443
+ edgeOffset?: number; // 折边线沿边法线外推距离(米,默认 0.15),仅 edges 含 'offset'
444
+ edgeHullWidth?: number; // 背面外扩轮廓厚度(米,默认 0.9),仅 edges 含 'hull'
445
+ forceCpuEdges?: boolean; // 忽略数据自带的棱线包,一律 CPU 现算(默认 false)
436
446
  roofThreshold?: number; // 顶面法线判定阈值,默认 0.65
437
447
  fadeIn?: number; // 新瓦片淡入时长(毫秒,默认 0 = 关闭)
438
448
  }
439
449
  ```
440
450
 
451
+ ### 棱线画法(`edges`)
452
+
453
+ `edges` 从 boolean 扩成了 `boolean | EdgeStyle | EdgeStyle[]`,默认 `false`(不开)。
454
+
455
+ | 取值 | 效果 | 代价 |
456
+ |---|---|---|
457
+ | `true` / `'line'` | CPU 折边线(旧口径,行为逐字不变) | 焊合 + 折边判定 + 每段 4 顶点几何 |
458
+ | `'offset'` | 折边线 + 沿「边法线」外推 `edgeOffset` 米,线不会被面的明暗吃掉 | 同上,多一条 `aNormal` 属性 |
459
+ | `'hull'` | 背面外扩轮廓(选中侧 `outlineStyle: 'hull'` 的整场景版):顶点沿法线鼓 `edgeHullWidth` 米、只画背面 | 不建新几何,只是把网格多画一遍 |
460
+ | `'gpu'` | **后处理描边**:法线 + 深度渲进 RT,全屏 Sobel 找折边与轮廓 | 零 CPU 成本、线宽像素级可控;代价是几何多渲一遍(无贴图无光照)+ 一次全屏 pass,且**只支持 WebGL2** |
461
+ | `['line', 'hull']` | 折边线 + 外扩轮廓叠加 | 两者之和 |
462
+
463
+ 几条口径:
464
+
465
+ - `'offset'` 隐含折边线:外推是折边线的修饰,不是另一种线。
466
+ - `'gpu'` 是**后处理**,不在材质里求导:`dFdx` 只在 2×2 quad 内求差,quad 里跨出三角形的像素是同一三角形的外推值,所以片元着色器看不到三角形边界(平面着色几何的折边恰好就是三角形边界,实测法线导数恒为 0)。实现见 `render/GpuEdgePass.ts`:
467
+ 1. 用 `MeshNormalMaterial` 覆盖材质把场景渲进 RT(颜色 = 法线,深度 = 深度纹理);
468
+ 2. 全屏 quad 按 `edgeWidth` 像素采样 4 邻域,取「法线差 / 相对深度差」的最大值当描边;
469
+ 3. `gl_FragDepth` 写回该像素深度并开 `depthTest` —— 所以被地形 / 底图挡住的地方描边也会被挡住。
470
+ `edgeWidth` 在这里是采样偏移(线宽 ≈ 2×),`edgeThreshold` 是折边敏感度。可以和 `'line'` 叠加(`['gpu', 'line']`)。WebGL1 上自动跳过。
471
+ - 数组顺序无关、重复值无副作用;未知值(宿主传错字符串)一律当关,不抛错也不误开。
472
+ - 换画法(`line` ↔ `hull` ↔ `offset`)是结构变更,会先拆掉旧装饰再重建;同一画法重复设置不重建几何,滑块逐帧调样式也不卡。
473
+ - 外扩轮廓对**实例化几何跳过**:壳是 mesh 的子节点,不吃 `instanceMatrix`,硬挂会让所有实例的壳叠在原点。
474
+ - `forceCpuEdges: true` 时无视数据自带的棱线包(`primitiveType 13`),一律 CPU 现算 —— 那批 native 棱线是 `LineBasicMaterial`,线宽恒 1px,`edgeWidth` / 外扩 / 单体跟随全都吃不上。代价是 CPU 要按 8ms 一帧切片建线。
475
+
441
476
  ### 着色模式
442
477
 
443
478
  | 常量 | 值 | 说明 |
@@ -781,7 +816,7 @@ EASING_NAMES; // 全部内置名,适合生成下拉框
781
816
  ```ts
782
817
  setStyle(patch?: Partial<S3MStyle>, transition?: TransitionOptions): void
783
818
  setOpacity(opacity: number, transition?: TransitionOptions): void
784
- setEdges(enabled: boolean, transition?: TransitionOptions): void
819
+ setEdges(edges: EdgesOption, transition?: TransitionOptions): void
785
820
  setMode(mode: StyleMode, opts?: { duration?: number; dim?: number }): Promise<void>
786
821
  ```
787
822
 
@@ -791,7 +826,7 @@ setMode(mode: StyleMode, opts?: { duration?: number; dim?: number }): Promise<vo
791
826
  |---|---|---|
792
827
  | `style.opacity` | 1 | 共享 `uOpacity`;混合开关只在跨 `0.999` 时切一次 |
793
828
  | `style.colorA` / `colorB` / `colorC` / `selectColor` / `edgeColor` | 3 | 线性空间 RGB |
794
- | `style.texMix` / `floorHeight` / `selectOpacity` / `selectEmissive` / `selectElevation` / `dimFactor` / `roofThreshold` / `ambientGain` / `edgeWidth` / `edgeOpacity` / `outlineWidth` | 1 | 直接写 uniform / 字段 |
829
+ | `style.texMix` / `floorHeight` / `selectOpacity` / `selectEmissive` / `selectElevation` / `dimFactor` / `roofThreshold` / `ambientGain` / `edgeWidth` / `edgeOpacity` / `edgeOffset` / `edgeHullWidth` / `outlineWidth` | 1 | 直接写 uniform / 字段 |
795
830
  | `style.edgeFade` | 1 | 棱线淡入乘子,`setEdges` 内部使用 |
796
831
  | `style.fade` | 1 | 整体压暗乘子,`setMode` 内部使用 |
797
832
 
@@ -1207,6 +1242,8 @@ buildAttributes({ smid, box, triangles, floorHeight }) // → S3MFeatureAttribu
1207
1242
  | `lodPixelRatioCap` | LOD 判定用屏幕高度的 DPR 上限,默认不截断。见下方「移动端 / 差设备」 |
1208
1243
  | `anisotropyCap` | 各向异性过滤上限,默认取 GPU 最大值。移动端 4 / 8 通常肉眼无差 |
1209
1244
  | `maxTextureSize` | 纹理长边像素上限,默认不限制。手机上 1024 即可,显存降到 1/4 |
1245
+ | `maxImageCache` | 纹理缓存条数,默认 128。低端机 32~48,和 `maxTextureSize` 一起管显存 |
1246
+ | `materialQuality: 'lambert'` | 换成 Lambert 光照,片元约省一半。白模 / 按高度配色看不出差别,贴图模式会略平 |
1210
1247
  | `maxImageCache` | 原始图集与 leaf 段图像记录的 LRU 缓存容量上限(默认 128),超限自动淘汰旧缓存,防止漫游时内存不断累积 |
1211
1248
  | 纹理引用计数 | 瓦片淘汰时按引用计数释放未被其他瓦片复用的 `Texture` 并调用 `dispose()`,真正归还 GPU 显存 |
1212
1249
  | 几何/材质深度释放 | 瓦片注销时深度遍历对象树,彻底释放 `Mesh`、`Points`(点云/高斯泼溅)以及 `LineSegments`(棱线包)的 `BufferGeometry` 与材质 |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "s3m-three",
3
- "version": "0.3.14",
3
+ "version": "0.4.16",
4
4
  "description": "SuperMap S3M 三维模型格式的 three.js 渲染内核:浏览器内直接解析 .s3mb 瓦片,无需转 3D Tiles,支持 LOD 调度、白膜/按高度/按单体/动态扫描着色、单体级 GPU 拾取。宿主无关,可单独用于任意 three 场景。",
5
5
  "type": "module",
6
6
  "repository": {
package/src/index.ts CHANGED
@@ -120,9 +120,14 @@ export {
120
120
  createStyledMaterial,
121
121
  createOutlineMaterial,
122
122
  } from './render/StyleMaterial.js';
123
- export type { StyleMode, SelectMode, StyledMaterial, StyledMaterialOptions, OutlineMaterial } from './render/StyleMaterial.js';
123
+ export type { StyleMode, SelectMode, StyledMaterial, StyledMaterialOptions, OutlineMaterial, MaterialQuality } from './render/StyleMaterial.js';
124
+ export type { EdgeStyle, EdgesOption, EdgeModes, OutlineStyleUniforms } from './render/StyleMaterial.js';
125
+ export { resolveEdgeModes, sameEdgeModes } from './render/StyleMaterial.js';
126
+ export { setMaterialQuality, getMaterialQuality } from './render/StyleMaterial.js';
124
127
 
125
128
  export { Picker } from './render/Picker.js';
129
+ export { GpuEdgePass } from './render/GpuEdgePass.js';
130
+ export type { GpuEdgeParams } from './render/GpuEdgePass.js';
126
131
  export type { PickHit } from './render/Picker.js';
127
132
 
128
133
  export { Animator, Path, easing, cubicBezier, steps, EASING_NAMES } from './anim/index.js';
@@ -22,6 +22,8 @@ export interface S3MDatasetOptions {
22
22
  maxTiles?: number;
23
23
  /** 该数据集驻留三角形总数的软上限(默认跟随图层级设置;都不传则不限制) */
24
24
  maxTriangles?: number;
25
+ /** 该数据集的纹理缓存条数上限(默认跟随图层级设置,图层不传则 128) */
26
+ maxImageCache?: number;
25
27
  lodRangeScale?: number;
26
28
  /**
27
29
  * 垂直对齐基准(默认 'origin'):
@@ -167,7 +169,8 @@ export class DatasetManager {
167
169
  maxTiles: number,
168
170
  maxConcurrent: number,
169
171
  callbacks: DatasetManagerCallbacks,
170
- maxTriangles: number = Infinity
172
+ maxTriangles: number = Infinity,
173
+ maxImageCache: number = 128
171
174
  ): Promise<S3MDatasetEntry> {
172
175
  const existing = this.datasets.get(ds.id);
173
176
  if (existing) return existing;
@@ -198,6 +201,7 @@ export class DatasetManager {
198
201
  maxTiles: ds.maxTiles ?? maxTiles,
199
202
  maxConcurrent: maxConcurrent,
200
203
  maxTriangles: ds.maxTriangles ?? maxTriangles,
204
+ maxImageCache: ds.maxImageCache ?? maxImageCache,
201
205
  lodRangeScale: ds.lodRangeScale ?? defaultLodRangeScale,
202
206
  buildTile: buildTile ?? null,
203
207
  useWorker: ds.useWorker,