s3m-three 0.4.15 → 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.
- package/dist/browser/s3m-three.iife.ext-three.js +100 -24
- package/dist/browser/s3m-three.iife.js +100 -24
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/render/EdgeLines.d.ts +14 -2
- package/dist/render/EdgeLines.d.ts.map +1 -1
- package/dist/render/EdgeLines.js +45 -8
- package/dist/render/EdgeLines.js.map +1 -1
- package/dist/render/GpuEdgePass.d.ts +58 -0
- package/dist/render/GpuEdgePass.d.ts.map +1 -0
- package/dist/render/GpuEdgePass.js +207 -0
- package/dist/render/GpuEdgePass.js.map +1 -0
- package/dist/render/S3MViewer.d.ts +49 -7
- package/dist/render/S3MViewer.d.ts.map +1 -1
- package/dist/render/S3MViewer.js +240 -50
- package/dist/render/S3MViewer.js.map +1 -1
- package/dist/render/StyleMaterial.d.ts +93 -4
- package/dist/render/StyleMaterial.d.ts.map +1 -1
- package/dist/render/StyleMaterial.js +59 -6
- package/dist/render/StyleMaterial.js.map +1 -1
- package/docs/API.md +37 -5
- package/package.json +1 -1
- package/src/index.ts +4 -0
- package/src/render/EdgeLines.ts +50 -8
- package/src/render/GpuEdgePass.ts +236 -0
- package/src/render/S3MViewer.ts +262 -49
- package/src/render/StyleMaterial.ts +134 -8
|
@@ -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
|
-
/**
|
|
83
|
-
|
|
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;
|
|
@@ -174,6 +233,24 @@ export interface StyledMaterialOptions {
|
|
|
174
233
|
* 每个 Mesh 独享一个材质实例,但 uniform 对象是全局共享的。
|
|
175
234
|
*/
|
|
176
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
|
+
}
|
|
177
254
|
export interface OutlineMaterial extends THREE.ShaderMaterial {
|
|
178
255
|
uniforms: {
|
|
179
256
|
uSelBatch: {
|
|
@@ -185,6 +262,9 @@ export interface OutlineMaterial extends THREE.ShaderMaterial {
|
|
|
185
262
|
uWidth: {
|
|
186
263
|
value: number;
|
|
187
264
|
};
|
|
265
|
+
uOpacity: {
|
|
266
|
+
value: number;
|
|
267
|
+
};
|
|
188
268
|
uElevation: {
|
|
189
269
|
value: number;
|
|
190
270
|
};
|
|
@@ -220,6 +300,15 @@ export interface OutlineMaterial extends THREE.ShaderMaterial {
|
|
|
220
300
|
};
|
|
221
301
|
};
|
|
222
302
|
}
|
|
223
|
-
/**
|
|
224
|
-
|
|
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;
|
|
225
314
|
//# sourceMappingURL=StyleMaterial.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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;AAItD,+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
|
|
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,6 +110,9 @@ 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,
|
|
@@ -883,19 +919,36 @@ const OUTLINE_VERT = /* glsl */ `
|
|
|
883
919
|
`;
|
|
884
920
|
const OUTLINE_FRAG = /* glsl */ `
|
|
885
921
|
uniform vec3 uColor;
|
|
922
|
+
uniform float uOpacity;
|
|
886
923
|
varying float vSel;
|
|
887
924
|
void main() {
|
|
888
925
|
if ( vSel < 0.5 ) discard;
|
|
889
|
-
|
|
926
|
+
if ( uOpacity <= 0.003 ) discard;
|
|
927
|
+
gl_FragColor = vec4( uColor, uOpacity );
|
|
890
928
|
}
|
|
891
929
|
`;
|
|
892
|
-
/**
|
|
893
|
-
|
|
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
|
+
};
|
|
894
946
|
const mat = new THREE.ShaderMaterial({
|
|
895
947
|
uniforms: {
|
|
896
948
|
uSelBatch: { value: -1 },
|
|
897
949
|
uSelWhole: { value: 0 },
|
|
898
|
-
uWidth:
|
|
950
|
+
uWidth: style.uWidth,
|
|
951
|
+
uOpacity: style.uOpacity,
|
|
899
952
|
uElevation: { value: 0 },
|
|
900
953
|
uBatchTex: { value: DUMMY_BATCH_TEX },
|
|
901
954
|
uBatchTex2: { value: DUMMY_BATCH_TEX },
|
|
@@ -906,13 +959,13 @@ export function createOutlineMaterial(shared, initialWidth = 0.9) {
|
|
|
906
959
|
uPathCount: shared.uPathCount ?? { value: 1 },
|
|
907
960
|
uPathTexActive: shared.uPathTexActive ?? { value: 0 },
|
|
908
961
|
uPathTime: shared.uPathTime ?? { value: 0 },
|
|
909
|
-
uColor:
|
|
962
|
+
uColor: style.uColor,
|
|
910
963
|
},
|
|
911
964
|
vertexShader: OUTLINE_VERT,
|
|
912
965
|
fragmentShader: OUTLINE_FRAG,
|
|
913
966
|
side: THREE.BackSide,
|
|
914
967
|
depthWrite: false,
|
|
915
|
-
transparent
|
|
968
|
+
transparent,
|
|
916
969
|
// 描边要压在建筑后面一点,避免和本体 z-fighting
|
|
917
970
|
polygonOffset: true,
|
|
918
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
|
@@ -250,15 +250,19 @@ interface S3MDatasetOptions {
|
|
|
250
250
|
setStyle(patch?: Partial<S3MStyle>, transition?: TransitionOptions): void
|
|
251
251
|
getStyle(): S3MStyle & { modeLabel: string }
|
|
252
252
|
setOpacity(opacity: number, transition?: TransitionOptions): void
|
|
253
|
-
setEdges(
|
|
253
|
+
setEdges(edges: EdgesOption, transition?: TransitionOptions): void
|
|
254
254
|
```
|
|
255
255
|
|
|
256
256
|
`transition` 用来给能插值的字段加过渡,语义见[动画与过渡](#动画与过渡);不传则和旧版一样即时生效。
|
|
257
257
|
|
|
258
|
-
`setStyle` 是**合并**语义,只传要改的字段。除了 `shading`(编译期宏,需重编译着色器)、`edges` / `edgeThreshold`(结构变更,走 `setEdges` / 重建棱线)之外,其余字段都是 uniform / 材质状态更新,热切换成本很低。
|
|
258
|
+
`setStyle` 是**合并**语义,只传要改的字段。除了 `shading`(编译期宏,需重编译着色器)、`edges` / `edgeThreshold` / `forceCpuEdges`(结构变更,走 `setEdges` / 重建棱线)之外,其余字段都是 uniform / 材质状态更新,热切换成本很低。
|
|
259
259
|
|
|
260
260
|
棱线优先用**数据自带的棱线包**(`primitiveType === 13` 的索引包):解析时就建好 `LineSegments`,开关只是切 `visible`,成本为零。数据里没有时才用 `EdgesGeometry` 在 CPU 端现算(8ms 一帧切片,超过 12 万索引直接跳过)。棱线画成**屏幕空间等宽线**(`packages/s3m-three/src/render/EdgeLines.ts`):WebGL 的 `lineWidth` 恒定 1px,只有把每条棱摊成面向屏幕的四边形才能真的调粗细。
|
|
261
261
|
|
|
262
|
+
`setEdges` 收 `boolean | 'line' | 'offset' | 'hull' | 数组`:`'offset'` 让折边线沿边法线外推(不再被面的明暗吃掉),`'hull'` 走背面外扩轮廓(白模 + 卡通描边),数组可叠加。细节见[棱线画法](#棱线画法edges)。
|
|
263
|
+
|
|
264
|
+
数据自带棱线包时 `edgeWidth` / 外扩 / 单体跟随都不生效(那是 `LineBasicMaterial`);要这些能力就把 `style.forceCpuEdges` 打开,改由 CPU 现算。
|
|
265
|
+
|
|
262
266
|
> 注意:棱线包**不能**当三角面画。把它当 `TRIANGLES` 提交,每条棱线都会被连成一根几十上百米的尖刺。
|
|
263
267
|
|
|
264
268
|
### 光照控制 (Adjustable Lighting)
|
|
@@ -431,16 +435,44 @@ interface S3MStyle {
|
|
|
431
435
|
outlineColor?: string; // 描边颜色,默认跟随 selectColor
|
|
432
436
|
outlineWidthPx?: number; // 选中棱线粗细(像素,默认 3),仅 outlineStyle: 'edges'
|
|
433
437
|
outlineWidth?: number; // 外扩轮廓粗细(米,默认 0.9),仅 outlineStyle: 'hull'
|
|
434
|
-
edges:
|
|
438
|
+
edges: EdgesOption; // 全局棱线:boolean | 'line' | 'offset' | 'hull' | 数组
|
|
435
439
|
edgeColor: string; // 棱线颜色
|
|
436
440
|
edgeWidth?: number; // 全局棱线粗细(像素,默认 1.2)
|
|
437
441
|
edgeOpacity?: number; // 棱线透明度(0.1 ~ 1.0),默认 0.45
|
|
438
442
|
edgeThreshold?: number; // 棱线临界角(度,默认 55):相邻面法线夹角超过它才描边,调大滤掉浅坡
|
|
443
|
+
edgeOffset?: number; // 折边线沿边法线外推距离(米,默认 0.15),仅 edges 含 'offset'
|
|
444
|
+
edgeHullWidth?: number; // 背面外扩轮廓厚度(米,默认 0.9),仅 edges 含 'hull'
|
|
445
|
+
forceCpuEdges?: boolean; // 忽略数据自带的棱线包,一律 CPU 现算(默认 false)
|
|
439
446
|
roofThreshold?: number; // 顶面法线判定阈值,默认 0.65
|
|
440
447
|
fadeIn?: number; // 新瓦片淡入时长(毫秒,默认 0 = 关闭)
|
|
441
448
|
}
|
|
442
449
|
```
|
|
443
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
|
+
|
|
444
476
|
### 着色模式
|
|
445
477
|
|
|
446
478
|
| 常量 | 值 | 说明 |
|
|
@@ -784,7 +816,7 @@ EASING_NAMES; // 全部内置名,适合生成下拉框
|
|
|
784
816
|
```ts
|
|
785
817
|
setStyle(patch?: Partial<S3MStyle>, transition?: TransitionOptions): void
|
|
786
818
|
setOpacity(opacity: number, transition?: TransitionOptions): void
|
|
787
|
-
setEdges(
|
|
819
|
+
setEdges(edges: EdgesOption, transition?: TransitionOptions): void
|
|
788
820
|
setMode(mode: StyleMode, opts?: { duration?: number; dim?: number }): Promise<void>
|
|
789
821
|
```
|
|
790
822
|
|
|
@@ -794,7 +826,7 @@ setMode(mode: StyleMode, opts?: { duration?: number; dim?: number }): Promise<vo
|
|
|
794
826
|
|---|---|---|
|
|
795
827
|
| `style.opacity` | 1 | 共享 `uOpacity`;混合开关只在跨 `0.999` 时切一次 |
|
|
796
828
|
| `style.colorA` / `colorB` / `colorC` / `selectColor` / `edgeColor` | 3 | 线性空间 RGB |
|
|
797
|
-
| `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 / 字段 |
|
|
798
830
|
| `style.edgeFade` | 1 | 棱线淡入乘子,`setEdges` 内部使用 |
|
|
799
831
|
| `style.fade` | 1 | 整体压暗乘子,`setMode` 内部使用 |
|
|
800
832
|
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -121,9 +121,13 @@ export {
|
|
|
121
121
|
createOutlineMaterial,
|
|
122
122
|
} from './render/StyleMaterial.js';
|
|
123
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';
|
|
124
126
|
export { setMaterialQuality, getMaterialQuality } from './render/StyleMaterial.js';
|
|
125
127
|
|
|
126
128
|
export { Picker } from './render/Picker.js';
|
|
129
|
+
export { GpuEdgePass } from './render/GpuEdgePass.js';
|
|
130
|
+
export type { GpuEdgeParams } from './render/GpuEdgePass.js';
|
|
127
131
|
export type { PickHit } from './render/Picker.js';
|
|
128
132
|
|
|
129
133
|
export { Animator, Path, easing, cubicBezier, steps, EASING_NAMES } from './anim/index.js';
|
package/src/render/EdgeLines.ts
CHANGED
|
@@ -34,6 +34,8 @@ export interface ThickLineStyleUniforms {
|
|
|
34
34
|
uWidth: { value: number };
|
|
35
35
|
uOpacity: { value: number };
|
|
36
36
|
uElevation?: { value: number };
|
|
37
|
+
/** 沿边法线外推的距离(米)。不传或 0 = 线贴在面上,与改动前一致 */
|
|
38
|
+
uOffset?: { value: number };
|
|
37
39
|
}
|
|
38
40
|
|
|
39
41
|
/** 等宽线的「单体状态」uniform:直接复用主材质 userData 里那几个对象,自动跟随 */
|
|
@@ -54,6 +56,7 @@ export interface ThickLineMaterial extends THREE.ShaderMaterial {
|
|
|
54
56
|
ThickLineStyleUniforms &
|
|
55
57
|
Required<ThickLineBatchUniforms> & {
|
|
56
58
|
uTranslation: { value: THREE.Vector3 };
|
|
59
|
+
uOffset: { value: number };
|
|
57
60
|
[uniform: string]: THREE.IUniform;
|
|
58
61
|
};
|
|
59
62
|
}
|
|
@@ -69,11 +72,13 @@ const VERT = /* glsl */ `
|
|
|
69
72
|
attribute vec3 aOther;
|
|
70
73
|
attribute float aSide;
|
|
71
74
|
attribute float aBatchId;
|
|
75
|
+
attribute vec3 aNormal;
|
|
72
76
|
|
|
73
77
|
uniform vec2 uResolution;
|
|
74
78
|
uniform float uDpr;
|
|
75
79
|
uniform float uWidth;
|
|
76
80
|
uniform float uElevation;
|
|
81
|
+
uniform float uOffset;
|
|
77
82
|
uniform vec3 uTranslation;
|
|
78
83
|
uniform sampler2D uBatchTex;
|
|
79
84
|
uniform sampler2D uBatchTex2;
|
|
@@ -95,8 +100,11 @@ const VERT = /* glsl */ `
|
|
|
95
100
|
void main() {
|
|
96
101
|
// 单体平移 / 旋转 / 拔高 / 隐藏:与主着色器同一份 6 行状态纹理、同一套变换口径。
|
|
97
102
|
// 不采样的话,单体一动或一转棱线就留在原地——这正是「棱线跟随」要解决的。
|
|
98
|
-
|
|
99
|
-
|
|
103
|
+
// 外推画法:整段沿「边法线」挪出去 uOffset 米(aNormal 全 0 时等于没挪,
|
|
104
|
+
// 普通折边线走的还是原来那条路径)。必须在旋转 / 拔高之前做,才是物体空间里的外扩。
|
|
105
|
+
vec3 s3mEdgeOffset = aNormal * uOffset;
|
|
106
|
+
vec3 s3mA = position + s3mEdgeOffset;
|
|
107
|
+
vec3 s3mB = aOther + s3mEdgeOffset;
|
|
100
108
|
vec3 s3mCustomOffset = vec3( 0.0 );
|
|
101
109
|
mat3 s3mRot = mat3( 1.0 );
|
|
102
110
|
vec3 s3mPivot = vec3( 0.0 );
|
|
@@ -257,6 +265,7 @@ export function createThickLineMaterial(
|
|
|
257
265
|
uOpacity: style.uOpacity,
|
|
258
266
|
uWidth: style.uWidth,
|
|
259
267
|
uElevation: style.uElevation ?? { value: opts.elevation ?? 0 },
|
|
268
|
+
uOffset: style.uOffset ?? { value: 0 },
|
|
260
269
|
uTranslation: { value: new THREE.Vector3(0, 0, 0) },
|
|
261
270
|
uBatchTex: batch.uBatchTex,
|
|
262
271
|
uBatchTex2: batch.uBatchTex2,
|
|
@@ -288,10 +297,13 @@ export function createThickLineMaterial(
|
|
|
288
297
|
* @param batchIds 每段所属的单体 batchId(长度 = 段数)。给了它,顶点着色器才能
|
|
289
298
|
* 按单体从状态纹理取平移/拔高——棱线跟随移动靠的就是这个。不传全部填 -1,
|
|
290
299
|
* 着色器会跳过采样(等于不参与单体状态)。
|
|
300
|
+
* @param normals 每段一条「边法线」(长度 = 段数 × 6,两端点各一份,同一条棱共用)。
|
|
301
|
+
* 只有外推画法需要;不传就全填 0,`uOffset` 乘上去等于没推,普通折边线的行为不变。
|
|
291
302
|
*/
|
|
292
303
|
export function buildThickLineGeometry(
|
|
293
304
|
segments: ArrayLike<number>,
|
|
294
|
-
batchIds?: ArrayLike<number
|
|
305
|
+
batchIds?: ArrayLike<number>,
|
|
306
|
+
normals?: ArrayLike<number>
|
|
295
307
|
): THREE.BufferGeometry {
|
|
296
308
|
const count = Math.floor(segments.length / 6);
|
|
297
309
|
const vertexCount = count * 4;
|
|
@@ -300,6 +312,7 @@ export function buildThickLineGeometry(
|
|
|
300
312
|
const other = new Float32Array(vertexCount * 3);
|
|
301
313
|
const side = new Float32Array(vertexCount);
|
|
302
314
|
const batch = new Float32Array(vertexCount);
|
|
315
|
+
const normal = new Float32Array(vertexCount * 3);
|
|
303
316
|
const index = vertexCount > 65535 ? new Uint32Array(count * 6) : new Uint16Array(count * 6);
|
|
304
317
|
|
|
305
318
|
for (let i = 0; i < count; i++) {
|
|
@@ -311,6 +324,9 @@ export function buildThickLineGeometry(
|
|
|
311
324
|
const by = segments[s + 4];
|
|
312
325
|
const bz = segments[s + 5];
|
|
313
326
|
const b = batchIds ? Number(batchIds[i] ?? -1) : -1;
|
|
327
|
+
const nx = normals ? Number(normals[s] ?? 0) : 0;
|
|
328
|
+
const ny = normals ? Number(normals[s + 1] ?? 0) : 0;
|
|
329
|
+
const nz = normals ? Number(normals[s + 2] ?? 0) : 0;
|
|
314
330
|
|
|
315
331
|
const v = i * 4;
|
|
316
332
|
// A 端两枚
|
|
@@ -319,7 +335,13 @@ export function buildThickLineGeometry(
|
|
|
319
335
|
// B 端两枚(side 反号)
|
|
320
336
|
setVertex(v + 2, bx, by, bz, ax, ay, az, 1);
|
|
321
337
|
setVertex(v + 3, bx, by, bz, ax, ay, az, -1);
|
|
322
|
-
for (let k = 0; k < 4; k++)
|
|
338
|
+
for (let k = 0; k < 4; k++) {
|
|
339
|
+
batch[v + k] = b;
|
|
340
|
+
const p = (v + k) * 3;
|
|
341
|
+
normal[p] = nx;
|
|
342
|
+
normal[p + 1] = ny;
|
|
343
|
+
normal[p + 2] = nz;
|
|
344
|
+
}
|
|
323
345
|
|
|
324
346
|
const o = i * 6;
|
|
325
347
|
index[o] = v;
|
|
@@ -355,6 +377,7 @@ export function buildThickLineGeometry(
|
|
|
355
377
|
geometry.setAttribute('aOther', new THREE.BufferAttribute(other, 3));
|
|
356
378
|
geometry.setAttribute('aSide', new THREE.BufferAttribute(side, 1));
|
|
357
379
|
geometry.setAttribute('aBatchId', new THREE.BufferAttribute(batch, 1));
|
|
380
|
+
geometry.setAttribute('aNormal', new THREE.BufferAttribute(normal, 3));
|
|
358
381
|
geometry.setIndex(new THREE.BufferAttribute(index, 1));
|
|
359
382
|
geometry.computeBoundingSphere();
|
|
360
383
|
return geometry;
|
|
@@ -411,11 +434,15 @@ const QUANT = 100;
|
|
|
411
434
|
*
|
|
412
435
|
* 非索引几何没有共享顶点,直接用顶点号去重会让每条边都被判成边界边。
|
|
413
436
|
* 所以这里先按位置量化把顶点归一化成 canonical id,再走同一套逻辑。
|
|
437
|
+
*
|
|
438
|
+
* @param outNormals 传了就把「边法线」按段追加进去(每段 6 个 float,两端点各一份)。
|
|
439
|
+
* 折边取相邻两面的平均法线,边界边取唯一那一面的法线。外推画法靠它决定往哪推。
|
|
414
440
|
*/
|
|
415
441
|
export function buildFeatureEdgeSegments(
|
|
416
442
|
geometry: THREE.BufferGeometry,
|
|
417
443
|
ranges?: EdgeVertexRange[] | null,
|
|
418
|
-
creaseAngle = 40
|
|
444
|
+
creaseAngle = 40,
|
|
445
|
+
outNormals?: number[]
|
|
419
446
|
): Float32Array | null {
|
|
420
447
|
const position = geometry.getAttribute('position') as THREE.BufferAttribute | undefined;
|
|
421
448
|
if (!position) return null;
|
|
@@ -480,11 +507,12 @@ export function buildFeatureEdgeSegments(
|
|
|
480
507
|
let ny = 0;
|
|
481
508
|
let nz = 0;
|
|
482
509
|
|
|
483
|
-
const emit = (lo: number, hi: number): boolean => {
|
|
510
|
+
const emit = (lo: number, hi: number, ex: number, ey: number, ez: number): boolean => {
|
|
484
511
|
if (out.length >= MAX_EDGE_SEGMENTS * 6) return false;
|
|
485
512
|
const a = repIdx(lo);
|
|
486
513
|
const b = repIdx(hi);
|
|
487
514
|
out.push(px[a], py[a], pz[a], px[b], py[b], pz[b]);
|
|
515
|
+
outNormals?.push(ex, ey, ez, ex, ey, ez);
|
|
488
516
|
return true;
|
|
489
517
|
};
|
|
490
518
|
|
|
@@ -502,7 +530,21 @@ export function buildFeatureEdgeSegments(
|
|
|
502
530
|
// 与首个共用该边的三角形比夹角
|
|
503
531
|
const dot = nx * normals[first * 3] + ny * normals[first * 3 + 1] + nz * normals[first * 3 + 2];
|
|
504
532
|
if (dot < cosLimit) {
|
|
505
|
-
|
|
533
|
+
// 两面的平均法线就是这条棱「往外」的方向;两面接近反向时退回当前面法线
|
|
534
|
+
let ex = normals[first * 3] + nx;
|
|
535
|
+
let ey = normals[first * 3 + 1] + ny;
|
|
536
|
+
let ez = normals[first * 3 + 2] + nz;
|
|
537
|
+
const l = Math.hypot(ex, ey, ez);
|
|
538
|
+
if (l > 1e-9) {
|
|
539
|
+
ex /= l;
|
|
540
|
+
ey /= l;
|
|
541
|
+
ez /= l;
|
|
542
|
+
} else {
|
|
543
|
+
ex = nx;
|
|
544
|
+
ey = ny;
|
|
545
|
+
ez = nz;
|
|
546
|
+
}
|
|
547
|
+
emit(lo, hi, ex, ey, ez);
|
|
506
548
|
seen.set(key, -1);
|
|
507
549
|
} else {
|
|
508
550
|
seen.set(key, -2);
|
|
@@ -543,7 +585,7 @@ export function buildFeatureEdgeSegments(
|
|
|
543
585
|
if (first < 0) continue;
|
|
544
586
|
const lo = Math.floor(key / span);
|
|
545
587
|
const hi = key - lo * span;
|
|
546
|
-
if (!emit(lo, hi)) break;
|
|
588
|
+
if (!emit(lo, hi, normals[first * 3], normals[first * 3 + 1], normals[first * 3 + 2])) break;
|
|
547
589
|
}
|
|
548
590
|
|
|
549
591
|
return out.length > 0 ? new Float32Array(out) : null;
|