s3m-three 0.4.17 → 0.4.19
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/assets/s3mWorker-4iTAmWIu.js +1 -0
- package/dist/browser/s3m-three.iife.ext-three.js +406 -91
- package/dist/browser/s3m-three.iife.js +434 -119
- package/dist/core/AttributeQuery.d.ts +13 -0
- package/dist/core/AttributeQuery.d.ts.map +1 -1
- package/dist/core/AttributeQuery.js +20 -3
- package/dist/core/AttributeQuery.js.map +1 -1
- package/dist/core/AuthFetch.d.ts +52 -0
- package/dist/core/AuthFetch.d.ts.map +1 -0
- package/dist/core/AuthFetch.js +44 -0
- package/dist/core/AuthFetch.js.map +1 -0
- package/dist/core/GaussianSplat.d.ts +64 -0
- package/dist/core/GaussianSplat.d.ts.map +1 -0
- package/dist/core/GaussianSplat.js +139 -0
- package/dist/core/GaussianSplat.js.map +1 -0
- package/dist/core/S3M1Parser.d.ts +1 -1
- package/dist/core/S3M1Parser.d.ts.map +1 -1
- package/dist/core/S3M1Parser.js +320 -25
- package/dist/core/S3M1Parser.js.map +1 -1
- package/dist/core/S3MBParser.d.ts.map +1 -1
- package/dist/core/S3MBParser.js +13 -0
- package/dist/core/S3MBParser.js.map +1 -1
- package/dist/core/S3MBlockParser.d.ts.map +1 -1
- package/dist/core/S3MBlockParser.js +56 -14
- package/dist/core/S3MBlockParser.js.map +1 -1
- package/dist/core/SplatLod.d.ts +36 -0
- package/dist/core/SplatLod.d.ts.map +1 -0
- package/dist/core/SplatLod.js +54 -0
- package/dist/core/SplatLod.js.map +1 -0
- package/dist/core/SplatProjection.d.ts +75 -0
- package/dist/core/SplatProjection.d.ts.map +1 -0
- package/dist/core/SplatProjection.js +162 -0
- package/dist/core/SplatProjection.js.map +1 -0
- package/dist/core/SplatSort.d.ts +13 -0
- package/dist/core/SplatSort.d.ts.map +1 -0
- package/dist/core/SplatSort.js +14 -0
- package/dist/core/SplatSort.js.map +1 -0
- package/dist/core/TexCoordZ.d.ts +94 -0
- package/dist/core/TexCoordZ.d.ts.map +1 -0
- package/dist/core/TexCoordZ.js +125 -0
- package/dist/core/TexCoordZ.js.map +1 -0
- package/dist/core/TextureDecode.d.ts +19 -0
- package/dist/core/TextureDecode.d.ts.map +1 -1
- package/dist/core/TextureDecode.js +53 -11
- package/dist/core/TextureDecode.js.map +1 -1
- package/dist/core/TileGeometry.d.ts +29 -0
- package/dist/core/TileGeometry.d.ts.map +1 -1
- package/dist/core/TileGeometry.js +130 -14
- package/dist/core/TileGeometry.js.map +1 -1
- package/dist/core/degradations.d.ts +37 -0
- package/dist/core/degradations.d.ts.map +1 -0
- package/dist/core/degradations.js +32 -0
- package/dist/core/degradations.js.map +1 -0
- package/dist/core/types.d.ts +36 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/render/DatasetManager.d.ts +18 -1
- package/dist/render/DatasetManager.d.ts.map +1 -1
- package/dist/render/DatasetManager.js +4 -1
- package/dist/render/DatasetManager.js.map +1 -1
- package/dist/render/FeatureStyleManager.d.ts.map +1 -1
- package/dist/render/FeatureStyleManager.js +7 -5
- package/dist/render/FeatureStyleManager.js.map +1 -1
- package/dist/render/GeometryBuilder.d.ts +24 -0
- package/dist/render/GeometryBuilder.d.ts.map +1 -1
- package/dist/render/GeometryBuilder.js +196 -5
- package/dist/render/GeometryBuilder.js.map +1 -1
- package/dist/render/HostRenderer.d.ts +105 -0
- package/dist/render/HostRenderer.d.ts.map +1 -0
- package/dist/render/HostRenderer.js +170 -0
- package/dist/render/HostRenderer.js.map +1 -0
- package/dist/render/Picker.d.ts.map +1 -1
- package/dist/render/Picker.js +19 -5
- package/dist/render/Picker.js.map +1 -1
- package/dist/render/S3MViewer.d.ts +79 -0
- package/dist/render/S3MViewer.d.ts.map +1 -1
- package/dist/render/S3MViewer.js +235 -16
- package/dist/render/S3MViewer.js.map +1 -1
- package/dist/render/SplatMaterial.d.ts +103 -0
- package/dist/render/SplatMaterial.d.ts.map +1 -0
- package/dist/render/SplatMaterial.js +388 -0
- package/dist/render/SplatMaterial.js.map +1 -0
- package/dist/render/SplatSorter.d.ts +14 -0
- package/dist/render/SplatSorter.d.ts.map +1 -0
- package/dist/render/SplatSorter.js +59 -0
- package/dist/render/SplatSorter.js.map +1 -0
- package/dist/render/StyleMaterial.d.ts +48 -0
- package/dist/render/StyleMaterial.d.ts.map +1 -1
- package/dist/render/StyleMaterial.js +292 -69
- package/dist/render/StyleMaterial.js.map +1 -1
- package/dist/render/TextureFactory.d.ts +10 -0
- package/dist/render/TextureFactory.d.ts.map +1 -1
- package/dist/render/TextureFactory.js +35 -5
- package/dist/render/TextureFactory.js.map +1 -1
- package/dist/render/lightingPreset.d.ts +53 -0
- package/dist/render/lightingPreset.d.ts.map +1 -0
- package/dist/render/lightingPreset.js +36 -0
- package/dist/render/lightingPreset.js.map +1 -0
- package/dist/render/materialAlpha.d.ts +51 -0
- package/dist/render/materialAlpha.d.ts.map +1 -0
- package/dist/render/materialAlpha.js +68 -0
- package/dist/render/materialAlpha.js.map +1 -0
- package/dist/tileset/S3MTileset.d.ts +50 -0
- package/dist/tileset/S3MTileset.d.ts.map +1 -1
- package/dist/tileset/S3MTileset.js +60 -5
- package/dist/tileset/S3MTileset.js.map +1 -1
- package/dist/vendor/browser-node-stub.js +10 -0
- package/dist/worker/s3mWorker.js +1166 -979
- package/dist/worker/s3mWorker.js.map +1 -1
- package/docs/API.md +55 -1
- package/docs/FORMAT-NOTES.md +338 -0
- package/package.json +1 -1
- package/src/core/AttributeQuery.ts +26 -3
- package/src/core/AuthFetch.ts +82 -0
- package/src/core/GaussianSplat.ts +175 -0
- package/src/core/S3M1Parser.ts +330 -24
- package/src/core/S3MBParser.ts +18 -0
- package/src/core/S3MBlockParser.ts +56 -11
- package/src/core/SplatLod.ts +83 -0
- package/src/core/SplatProjection.ts +231 -0
- package/src/core/SplatSort.ts +30 -0
- package/src/core/TexCoordZ.ts +160 -0
- package/src/core/TextureDecode.ts +63 -11
- package/src/core/TileGeometry.ts +138 -14
- package/src/core/degradations.ts +74 -0
- package/src/core/types.ts +32 -0
- package/src/index.ts +12 -1
- package/src/render/DatasetManager.ts +19 -1
- package/src/render/FeatureStyleManager.ts +7 -5
- package/src/render/GeometryBuilder.ts +239 -6
- package/src/render/HostRenderer.ts +222 -0
- package/src/render/Picker.ts +21 -5
- package/src/render/S3MViewer.ts +277 -15
- package/src/render/SplatMaterial.ts +433 -0
- package/src/render/SplatSorter.ts +59 -0
- package/src/render/StyleMaterial.ts +339 -69
- package/src/render/TextureFactory.ts +39 -5
- package/src/render/lightingPreset.ts +76 -0
- package/src/render/materialAlpha.ts +75 -0
- package/src/tileset/S3MTileset.ts +91 -5
- package/src/vendor/browser-node-stub.js +10 -0
- package/dist/browser/assets/s3mWorker-BjPOUgjg.js +0 -1
|
@@ -12,6 +12,13 @@ import type { S3MTexture } from '../core/types.js';
|
|
|
12
12
|
import type { DecodedTextureData } from '../core/TextureDecode.js';
|
|
13
13
|
export { PixelFormat } from '../core/TextureFormat.js';
|
|
14
14
|
export declare function setMaxAnisotropy(n: number, cap?: number): void;
|
|
15
|
+
/**
|
|
16
|
+
* 单独调各向异性上限(只影响之后创建的纹理)。
|
|
17
|
+
* supermap 预设会设成 1 —— 官方 iClient3D 不开各向异性,斜视角直接采高 mip
|
|
18
|
+
* 平均成纯色;我们默认拉满(Infinity)是为了倾斜摄影立面清晰度,代价是
|
|
19
|
+
* 米制平铺纹理的远处高频纹(点阵/砖缝)被硬保下来,怎么调光照都"不像官方"。
|
|
20
|
+
*/
|
|
21
|
+
export declare function setAnisotropyCap(cap: number): void;
|
|
15
22
|
export declare function setMaxTextureSize(n: number): void;
|
|
16
23
|
export declare function setCompressedTexturesSupported(v: boolean): void;
|
|
17
24
|
export interface DecodedTexture {
|
|
@@ -20,5 +27,8 @@ export interface DecodedTexture {
|
|
|
20
27
|
decoded: string;
|
|
21
28
|
}
|
|
22
29
|
export declare function setTextureOffThreadDecode(fn: ((tex: S3MTexture, compressed: boolean, maxSize?: number) => Promise<DecodedTextureData | null>) | null): void;
|
|
30
|
+
/** 切换纹理解码(只影响之后创建的纹理,已上传 GPU 的不受影响) */
|
|
31
|
+
export declare function setSrgbTextureDecode(v: boolean): void;
|
|
32
|
+
export declare function getSrgbTextureDecode(): boolean;
|
|
23
33
|
export declare function createTexture(tex: S3MTexture | null | undefined): Promise<DecodedTexture>;
|
|
24
34
|
//# sourceMappingURL=TextureFactory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextureFactory.d.ts","sourceRoot":"","sources":["../../src/render/TextureFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAcvD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,SAAW,GAAG,IAAI,CAGhE;AAQD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAEjD;AAUD,wBAAgB,8BAA8B,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAE/D;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;IAC9B,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;CACjB;AAWD,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,GAC1G,IAAI,CAEN;
|
|
1
|
+
{"version":3,"file":"TextureFactory.d.ts","sourceRoot":"","sources":["../../src/render/TextureFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAcvD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,SAAW,GAAG,IAAI,CAGhE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAElD;AAQD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAEjD;AAUD,wBAAgB,8BAA8B,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAE/D;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;IAC9B,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;CACjB;AAWD,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,GAC1G,IAAI,CAEN;AAuBD,uCAAuC;AACvC,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAErD;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAmCD,wBAAsB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,CAwD/F"}
|
|
@@ -24,6 +24,15 @@ export function setMaxAnisotropy(n, cap = Infinity) {
|
|
|
24
24
|
maxAnisotropy = Math.max(1, n | 0);
|
|
25
25
|
anisotropyCap = Number.isFinite(cap) && cap > 0 ? Math.max(1, cap) : Infinity;
|
|
26
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* 单独调各向异性上限(只影响之后创建的纹理)。
|
|
29
|
+
* supermap 预设会设成 1 —— 官方 iClient3D 不开各向异性,斜视角直接采高 mip
|
|
30
|
+
* 平均成纯色;我们默认拉满(Infinity)是为了倾斜摄影立面清晰度,代价是
|
|
31
|
+
* 米制平铺纹理的远处高频纹(点阵/砖缝)被硬保下来,怎么调光照都"不像官方"。
|
|
32
|
+
*/
|
|
33
|
+
export function setAnisotropyCap(cap) {
|
|
34
|
+
anisotropyCap = Number.isFinite(cap) && cap > 0 ? Math.max(1, cap) : Infinity;
|
|
35
|
+
}
|
|
27
36
|
/**
|
|
28
37
|
* 纹理长边像素上限(默认 Infinity = 不限制)。
|
|
29
38
|
* 只作用于非图集的 RGBA / WebP 产物,见 `core/TextureDecode.ts` 的 `maxSize`。
|
|
@@ -59,6 +68,21 @@ async function decodeTexture(tex, compressed, maxSize) {
|
|
|
59
68
|
}
|
|
60
69
|
return decodeTextureData(tex, { compressed, maxSize });
|
|
61
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* 纹理是否做 sRGB→linear 解码。
|
|
73
|
+
*
|
|
74
|
+
* 默认 true(three 线性 PBR 管线的正确姿势)。`lightingPreset: 'supermap'` 会关掉它:
|
|
75
|
+
* 官方 iClient3D 把贴图字节值**不解码**直接进 shader、在 sRGB 数值空间做 Lambert 直乘,
|
|
76
|
+
* 要逐像素对齐就得让字节值原样进来(输出端由 StyleMaterial 的 S3M_DIRECT_COLOR 抵消)。
|
|
77
|
+
*/
|
|
78
|
+
let srgbTextureDecode = true;
|
|
79
|
+
/** 切换纹理解码(只影响之后创建的纹理,已上传 GPU 的不受影响) */
|
|
80
|
+
export function setSrgbTextureDecode(v) {
|
|
81
|
+
srgbTextureDecode = v;
|
|
82
|
+
}
|
|
83
|
+
export function getSrgbTextureDecode() {
|
|
84
|
+
return srgbTextureDecode;
|
|
85
|
+
}
|
|
62
86
|
function configure(tex, srgb = true) {
|
|
63
87
|
tex.wrapS = THREE.RepeatWrapping;
|
|
64
88
|
tex.wrapT = THREE.RepeatWrapping;
|
|
@@ -67,7 +91,7 @@ function configure(tex, srgb = true) {
|
|
|
67
91
|
tex.generateMipmaps = true;
|
|
68
92
|
// 各向异性过滤对斜视角立面清晰度的提升比提高分辨率更直接
|
|
69
93
|
tex.anisotropy = anisotropyCap === Infinity ? maxAnisotropy : Math.min(maxAnisotropy, anisotropyCap);
|
|
70
|
-
if (srgb)
|
|
94
|
+
if (srgb && srgbTextureDecode)
|
|
71
95
|
tex.colorSpace = THREE.SRGBColorSpace;
|
|
72
96
|
tex.flipY = false;
|
|
73
97
|
tex.needsUpdate = true;
|
|
@@ -115,10 +139,14 @@ export async function createTexture(tex) {
|
|
|
115
139
|
}
|
|
116
140
|
else if (data.blocks && data.blockFormat) {
|
|
117
141
|
// DXT 块直传:GPU 硬件解压,省 4~8 倍上传带宽与显存。压缩纹理不能 generateMipmaps
|
|
118
|
-
// (WebGL
|
|
119
|
-
//
|
|
142
|
+
// (WebGL 限制)——所以**数据自带的内联 mip 链**(官方 iClient3D 逐层上传的那条)
|
|
143
|
+
// 必须切出来一起传,否则远处只有 level0 可采,高频纹/点阵全保留,永远"糊"不出
|
|
144
|
+
// 官方那种平均色;s3mHasAlpha 走 alphaTest 的 DXT1 1bit alpha 历史上没开过,
|
|
145
|
+
// DXT5 的 hasAlpha 由 decodeTextureData 判定
|
|
120
146
|
const format = data.blockFormat === 'dxt1' ? THREE.RGB_S3TC_DXT1_Format : THREE.RGBA_S3TC_DXT5_Format;
|
|
121
|
-
texture = new THREE.CompressedTexture(
|
|
147
|
+
texture = new THREE.CompressedTexture(data.mipmaps && data.mipmaps.length > 1
|
|
148
|
+
? data.mipmaps.map((m) => ({ data: m.data, width: m.width, height: m.height }))
|
|
149
|
+
: [{ data: data.blocks, width: data.width, height: data.height }], data.width, data.height, format, THREE.UnsignedByteType);
|
|
122
150
|
}
|
|
123
151
|
else {
|
|
124
152
|
const dt = new THREE.DataTexture(data.rgba, data.width, data.height, THREE.RGBAFormat, THREE.UnsignedByteType);
|
|
@@ -130,7 +158,9 @@ export async function createTexture(tex) {
|
|
|
130
158
|
const configured = isAtlas ? configureAtlas(texture) : configure(texture);
|
|
131
159
|
if (data.blocks) {
|
|
132
160
|
configured.generateMipmaps = false;
|
|
133
|
-
|
|
161
|
+
// 带链 → 三线性取链上高层级(官方同款平均效果);纯 level0 才退回 Linear 兜底
|
|
162
|
+
configured.minFilter =
|
|
163
|
+
data.mipmaps && data.mipmaps.length > 1 ? THREE.LinearMipmapLinearFilter : THREE.LinearFilter;
|
|
134
164
|
}
|
|
135
165
|
// flipY 为真即 S3MBLOCK 图集(见 core/types.ts),必须无 mip
|
|
136
166
|
return { texture: configured, decoded: data.kind };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextureFactory.js","sourceRoot":"","sources":["../../src/render/TextureFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,4CAA4C;AAC5C,IAAI,aAAa,GAAG,CAAC,CAAC;AAEtB;;;;;;GAMG;AACH,IAAI,aAAa,GAAG,QAAQ,CAAC;AAE7B,MAAM,UAAU,gBAAgB,CAAC,CAAS,EAAE,GAAG,GAAG,QAAQ;IACxD,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChF,CAAC;AAED;;;GAGG;AACH,IAAI,cAAc,GAAG,QAAQ,CAAC;AAE9B,MAAM,UAAU,iBAAiB,CAAC,CAAS;IACzC,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC/D,CAAC;AAED;;;;;GAKG;AACH,IAAI,2BAA2B,GAAG,KAAK,CAAC;AAExC,MAAM,UAAU,8BAA8B,CAAC,CAAU;IACvD,2BAA2B,GAAG,CAAC,CAAC;AAClC,CAAC;AAQD;;;;GAIG;AACH,IAAI,eAAe,GAER,IAAI,CAAC;AAEhB,MAAM,UAAU,yBAAyB,CACvC,EAA2G;IAE3G,eAAe,GAAG,EAAE,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,GAAe,EACf,UAAmB,EACnB,OAAe;IAEf,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAClE,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;IAClC,CAAC;IACD,OAAO,iBAAiB,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,SAAS,CAA0B,GAAM,EAAE,IAAI,GAAG,IAAI;IAC7D,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC;IACjC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC;IACjC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC;IACnC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,wBAAwB,CAAC;IAC/C,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC;IAC3B,8BAA8B;IAC9B,GAAG,CAAC,UAAU,GAAG,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IACrG,IAAI,IAAI;QAAE,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"TextureFactory.js","sourceRoot":"","sources":["../../src/render/TextureFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 光照预设。
|
|
3
|
+
*
|
|
4
|
+
* 默认那套(ambient 0.4 / hemi 0.8 / key 1.0 / fill 0.35)是为「线性 PBR 管线」
|
|
5
|
+
* 调的,亮部线性总量约 2.55。超图官方 iClient3D 走的是完全不同的着色模型
|
|
6
|
+
* (`S3MTiles/Shaders/S3MTilesFS.js`):
|
|
7
|
+
*
|
|
8
|
+
* ```glsl
|
|
9
|
+
* const vec3 SunLightColor = vec3(0.8);
|
|
10
|
+
* const vec3 AmbientLightColor = vec3(0.7);
|
|
11
|
+
* return uDiffuseColor.rgb * (SunLightColor * max(dot(n, L), 0.0) + AmbientLightColor * uAmbientColor.rgb);
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* 也就是**在 sRGB 数值空间里直接做 Lambert**,因子范围 0.7 ~ 1.5,没有 gamma 编码、
|
|
15
|
+
* 没有 tonemap。我们在线性空间乘、最后再做 linear→sRGB,同一个中间灰(sRGB 0.5):
|
|
16
|
+
*
|
|
17
|
+
* | | 官方 | 我们(默认) |
|
|
18
|
+
* |---|---|---|
|
|
19
|
+
* | 背光 | 0.5 × 0.7 = 0.35 | (0.214 × 0.8)^(1/2.2) ≈ 0.455 |
|
|
20
|
+
* | 受光 | 0.5 × 1.5 = 0.75 | (0.214 × 2.55)^(1/2.2) ≈ 0.76 |
|
|
21
|
+
*
|
|
22
|
+
* 暗部被 gamma 抬亮 30%,动态范围被压到 0.7~1.0,于是「发灰、饱和度低」。
|
|
23
|
+
*
|
|
24
|
+
* `'supermap'` 预设把线性光照总量重新压到与官方 sRGB 因子等效的区间:
|
|
25
|
+
* 0.7^2.2 ≈ 0.46(背光)到 1.5^2.2 ≈ 2.44(受光)。这不是逐像素复刻官方的
|
|
26
|
+
* sRGB 直乘(那需要放弃 PBR、改 `outputColorSpace = LinearSRGB`),
|
|
27
|
+
* 而是只动光源、可逆、不碰材质。
|
|
28
|
+
*/
|
|
29
|
+
export type LightingPreset = 'default' | 'supermap';
|
|
30
|
+
export interface PresetLightIntensities {
|
|
31
|
+
ambientIntensity: number;
|
|
32
|
+
hemisphereIntensity: number;
|
|
33
|
+
keyLightIntensity: number;
|
|
34
|
+
fillLightIntensity: number;
|
|
35
|
+
}
|
|
36
|
+
/** 现有默认值,一字节不改 */
|
|
37
|
+
export declare const DEFAULT_LIGHT_PRESET: PresetLightIntensities;
|
|
38
|
+
/**
|
|
39
|
+
* 对齐官方观感:几乎只留平行光 + 极低环境光。
|
|
40
|
+
*
|
|
41
|
+
* 背光总和 = 0.12 + 0.20 + 0.15 = 0.47(≈ 0.7^2.2)
|
|
42
|
+
* 受光总和 = 0.47 + 1.95 = 2.42(≈ 1.5^2.2)
|
|
43
|
+
*/
|
|
44
|
+
export declare const SUPERMAP_LIGHT_PRESET: PresetLightIntensities;
|
|
45
|
+
export declare const LIGHT_PRESETS: Record<LightingPreset, PresetLightIntensities>;
|
|
46
|
+
/** 预设名 → 强度组合;未知值回落默认,避免拼错名字把场景变全黑 */
|
|
47
|
+
export declare function resolveLightingPreset(preset?: string | null): PresetLightIntensities;
|
|
48
|
+
/** 线性总辐照度(供测试与调试:受光面 / 背光面) */
|
|
49
|
+
export declare function presetLinearRange(p: PresetLightIntensities): {
|
|
50
|
+
shadow: number;
|
|
51
|
+
lit: number;
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=lightingPreset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lightingPreset.d.ts","sourceRoot":"","sources":["../../src/render/lightingPreset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,CAAC;AAEpD,MAAM,WAAW,sBAAsB;IACrC,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,kBAAkB;AAClB,eAAO,MAAM,oBAAoB,EAAE,sBAKlC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,sBAKnC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,cAAc,EAAE,sBAAsB,CAGxE,CAAC;AAEF,sCAAsC;AACtC,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,sBAAsB,CAKpF;AAED,+BAA+B;AAC/B,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,sBAAsB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAG5F"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** 现有默认值,一字节不改 */
|
|
2
|
+
export const DEFAULT_LIGHT_PRESET = {
|
|
3
|
+
ambientIntensity: 0.4,
|
|
4
|
+
hemisphereIntensity: 0.8,
|
|
5
|
+
keyLightIntensity: 1.0,
|
|
6
|
+
fillLightIntensity: 0.35,
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* 对齐官方观感:几乎只留平行光 + 极低环境光。
|
|
10
|
+
*
|
|
11
|
+
* 背光总和 = 0.12 + 0.20 + 0.15 = 0.47(≈ 0.7^2.2)
|
|
12
|
+
* 受光总和 = 0.47 + 1.95 = 2.42(≈ 1.5^2.2)
|
|
13
|
+
*/
|
|
14
|
+
export const SUPERMAP_LIGHT_PRESET = {
|
|
15
|
+
ambientIntensity: 0.12,
|
|
16
|
+
hemisphereIntensity: 0.2,
|
|
17
|
+
keyLightIntensity: 1.95,
|
|
18
|
+
fillLightIntensity: 0.15,
|
|
19
|
+
};
|
|
20
|
+
export const LIGHT_PRESETS = {
|
|
21
|
+
default: DEFAULT_LIGHT_PRESET,
|
|
22
|
+
supermap: SUPERMAP_LIGHT_PRESET,
|
|
23
|
+
};
|
|
24
|
+
/** 预设名 → 强度组合;未知值回落默认,避免拼错名字把场景变全黑 */
|
|
25
|
+
export function resolveLightingPreset(preset) {
|
|
26
|
+
if (preset && Object.prototype.hasOwnProperty.call(LIGHT_PRESETS, preset)) {
|
|
27
|
+
return LIGHT_PRESETS[preset];
|
|
28
|
+
}
|
|
29
|
+
return DEFAULT_LIGHT_PRESET;
|
|
30
|
+
}
|
|
31
|
+
/** 线性总辐照度(供测试与调试:受光面 / 背光面) */
|
|
32
|
+
export function presetLinearRange(p) {
|
|
33
|
+
const shadow = p.ambientIntensity + p.hemisphereIntensity + p.fillLightIntensity;
|
|
34
|
+
return { shadow, lit: shadow + p.keyLightIntensity };
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=lightingPreset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lightingPreset.js","sourceRoot":"","sources":["../../src/render/lightingPreset.ts"],"names":[],"mappings":"AAqCA,kBAAkB;AAClB,MAAM,CAAC,MAAM,oBAAoB,GAA2B;IAC1D,gBAAgB,EAAE,GAAG;IACrB,mBAAmB,EAAE,GAAG;IACxB,iBAAiB,EAAE,GAAG;IACtB,kBAAkB,EAAE,IAAI;CACzB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA2B;IAC3D,gBAAgB,EAAE,IAAI;IACtB,mBAAmB,EAAE,GAAG;IACxB,iBAAiB,EAAE,IAAI;IACvB,kBAAkB,EAAE,IAAI;CACzB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAmD;IAC3E,OAAO,EAAE,oBAAoB;IAC7B,QAAQ,EAAE,qBAAqB;CAChC,CAAC;AAEF,sCAAsC;AACtC,MAAM,UAAU,qBAAqB,CAAC,MAAsB;IAC1D,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC;QAC1E,OAAO,aAAa,CAAC,MAAwB,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,iBAAiB,CAAC,CAAyB;IACzD,MAAM,MAAM,GAAG,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,mBAAmB,GAAG,CAAC,CAAC,kBAAkB,CAAC;IACjF,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,iBAAiB,EAAE,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S3MB 材质透明判定。
|
|
3
|
+
*
|
|
4
|
+
* 官方把 alphaMode 定义成三个**小写**枚举(`S3MTiles/Enum/AlphaMode.js`):
|
|
5
|
+
* ```
|
|
6
|
+
* OPAQUE: 'opaque' BLEND: 'blend' MASK: 'mask'
|
|
7
|
+
* ```
|
|
8
|
+
* 而 S3M 规范文档里写的是 `AM_OPAQUE / AM_BLEND / AM_MASK`。线上数据用的是前者
|
|
9
|
+
* (`3D-BIMbuilding-2` 的 `WhiteMaterial_1` 就是 `"alphaMode": "blend"`),
|
|
10
|
+
* 所以两种写法都要认,否则 blend 材质会被当成不透明 —— 表现就是「透明度不见了」。
|
|
11
|
+
*
|
|
12
|
+
* 另外还有一条官方没写进规范、但数据里真实存在的透明度来源:**顶点色 alpha**。
|
|
13
|
+
* SMID 4421 的材质无纹理、`diffuse.a = 1`,顶点色是 u8 `(0,128,192,63)`,
|
|
14
|
+
* 也就是 alpha ≈ 0.247。官方片元 `outColor = baseColorWithAlpha * uDiffuseColor`
|
|
15
|
+
* 里 `baseColorWithAlpha = vColor`(vec4),alpha 就靠这条路传下去。
|
|
16
|
+
*/
|
|
17
|
+
export type S3MAlphaMode = 'opaque' | 'blend' | 'mask';
|
|
18
|
+
/** 归一化 alphaMode:兼容小写枚举与规范里的 `AM_` 前缀,未知值一律按不透明处理 */
|
|
19
|
+
export declare function resolveAlphaMode(raw: unknown): S3MAlphaMode;
|
|
20
|
+
export interface MaterialAlphaInput {
|
|
21
|
+
/** 材质原始 alphaMode('blend' / 'AM_BLEND' / 'mask' / 'opaque' …) */
|
|
22
|
+
alphaMode?: unknown;
|
|
23
|
+
/** 材质 diffuse.a,缺省视为 1 */
|
|
24
|
+
diffuseAlpha?: number;
|
|
25
|
+
/** 材质 transparentsorting(配置开启透明度优化时官方也按透明处理) */
|
|
26
|
+
transparentSorting?: boolean;
|
|
27
|
+
/** 该几何顶点色 alpha 的最小值:<1 说明有半透明顶点 */
|
|
28
|
+
vertexAlphaMin?: number;
|
|
29
|
+
/** 内置水面材质且块里没有像素(我们自己的兜底上色) */
|
|
30
|
+
isWaterWithoutMap?: boolean;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 是否走透明(alpha 混合)管线。
|
|
34
|
+
*
|
|
35
|
+
* - `blend`:官方 `isTransparent = true`,进 TRANSLUCENT pass;
|
|
36
|
+
* - `mask`:官方也算透明,但它是**镂空**语义(alphaTest)。我们保持不透明队列 +
|
|
37
|
+
* alphaTest,否则树叶/栏杆之间会因 `depthWrite: false` 互相穿透;
|
|
38
|
+
* - 顶点色 alpha < 1:4421 这类"材质不透明但顶点半透明"的数据必须走混合。
|
|
39
|
+
*/
|
|
40
|
+
export declare function isTransparentMaterial(input: MaterialAlphaInput): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* 顶点色 alpha 的最小值:材质要不要开混合,取决于这块几何里有没有半透明顶点。
|
|
43
|
+
*
|
|
44
|
+
* 顶点数在几千到几万量级,一次线性扫描即可;只在建材质时算一次(每个 primitive 一次)。
|
|
45
|
+
* 没有 alpha 分量(老数据的 RGB)按 1 处理 —— 不能因为读不到就当成 0,那会整片全透明。
|
|
46
|
+
*/
|
|
47
|
+
export declare function minVertexAlpha(color: {
|
|
48
|
+
array: ArrayLike<number>;
|
|
49
|
+
components?: number;
|
|
50
|
+
} | undefined): number;
|
|
51
|
+
//# sourceMappingURL=materialAlpha.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialAlpha.d.ts","sourceRoot":"","sources":["../../src/render/materialAlpha.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAEvD,qDAAqD;AACrD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CAG3D;AAED,MAAM,WAAW,kBAAkB;IACjC,iEAAiE;IACjE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,oCAAoC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+BAA+B;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CASxE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GAAG,MAAM,CAW3G"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S3MB 材质透明判定。
|
|
3
|
+
*
|
|
4
|
+
* 官方把 alphaMode 定义成三个**小写**枚举(`S3MTiles/Enum/AlphaMode.js`):
|
|
5
|
+
* ```
|
|
6
|
+
* OPAQUE: 'opaque' BLEND: 'blend' MASK: 'mask'
|
|
7
|
+
* ```
|
|
8
|
+
* 而 S3M 规范文档里写的是 `AM_OPAQUE / AM_BLEND / AM_MASK`。线上数据用的是前者
|
|
9
|
+
* (`3D-BIMbuilding-2` 的 `WhiteMaterial_1` 就是 `"alphaMode": "blend"`),
|
|
10
|
+
* 所以两种写法都要认,否则 blend 材质会被当成不透明 —— 表现就是「透明度不见了」。
|
|
11
|
+
*
|
|
12
|
+
* 另外还有一条官方没写进规范、但数据里真实存在的透明度来源:**顶点色 alpha**。
|
|
13
|
+
* SMID 4421 的材质无纹理、`diffuse.a = 1`,顶点色是 u8 `(0,128,192,63)`,
|
|
14
|
+
* 也就是 alpha ≈ 0.247。官方片元 `outColor = baseColorWithAlpha * uDiffuseColor`
|
|
15
|
+
* 里 `baseColorWithAlpha = vColor`(vec4),alpha 就靠这条路传下去。
|
|
16
|
+
*/
|
|
17
|
+
/** 归一化 alphaMode:兼容小写枚举与规范里的 `AM_` 前缀,未知值一律按不透明处理 */
|
|
18
|
+
export function resolveAlphaMode(raw) {
|
|
19
|
+
const s = String(raw ?? '').trim().toLowerCase().replace(/^am_/, '');
|
|
20
|
+
return s === 'blend' || s === 'mask' ? s : 'opaque';
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 是否走透明(alpha 混合)管线。
|
|
24
|
+
*
|
|
25
|
+
* - `blend`:官方 `isTransparent = true`,进 TRANSLUCENT pass;
|
|
26
|
+
* - `mask`:官方也算透明,但它是**镂空**语义(alphaTest)。我们保持不透明队列 +
|
|
27
|
+
* alphaTest,否则树叶/栏杆之间会因 `depthWrite: false` 互相穿透;
|
|
28
|
+
* - 顶点色 alpha < 1:4421 这类"材质不透明但顶点半透明"的数据必须走混合。
|
|
29
|
+
*/
|
|
30
|
+
export function isTransparentMaterial(input) {
|
|
31
|
+
const mode = resolveAlphaMode(input.alphaMode);
|
|
32
|
+
if (mode === 'blend')
|
|
33
|
+
return true;
|
|
34
|
+
if (mode === 'mask')
|
|
35
|
+
return false;
|
|
36
|
+
if (input.transparentSorting === true)
|
|
37
|
+
return true;
|
|
38
|
+
if (input.isWaterWithoutMap === true)
|
|
39
|
+
return true;
|
|
40
|
+
if ((input.diffuseAlpha ?? 1) < 0.999)
|
|
41
|
+
return true;
|
|
42
|
+
if ((input.vertexAlphaMin ?? 1) < 0.999)
|
|
43
|
+
return true;
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* 顶点色 alpha 的最小值:材质要不要开混合,取决于这块几何里有没有半透明顶点。
|
|
48
|
+
*
|
|
49
|
+
* 顶点数在几千到几万量级,一次线性扫描即可;只在建材质时算一次(每个 primitive 一次)。
|
|
50
|
+
* 没有 alpha 分量(老数据的 RGB)按 1 处理 —— 不能因为读不到就当成 0,那会整片全透明。
|
|
51
|
+
*/
|
|
52
|
+
export function minVertexAlpha(color) {
|
|
53
|
+
if (!color || !color.array || color.array.length === 0)
|
|
54
|
+
return 1;
|
|
55
|
+
const comp = color.components ?? 4;
|
|
56
|
+
if (comp < 4)
|
|
57
|
+
return 1;
|
|
58
|
+
let min = 1;
|
|
59
|
+
for (let i = 3; i < color.array.length; i += comp) {
|
|
60
|
+
const a = color.array[i];
|
|
61
|
+
if (a < min)
|
|
62
|
+
min = a;
|
|
63
|
+
if (min <= 0.999)
|
|
64
|
+
return min; // 已经确定要透明,提前退出
|
|
65
|
+
}
|
|
66
|
+
return min;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=materialAlpha.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialAlpha.js","sourceRoot":"","sources":["../../src/render/materialAlpha.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,qDAAqD;AACrD,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrE,OAAO,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACtD,CAAC;AAeD;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAyB;IAC7D,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC/C,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAClC,IAAI,KAAK,CAAC,kBAAkB,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,KAAK,CAAC,iBAAiB,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,KAAK;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC,GAAG,KAAK;QAAE,OAAO,IAAI,CAAC;IACrD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,KAAoE;IACjG,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;IACnC,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACvB,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAClD,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,GAAG;YAAE,GAAG,GAAG,CAAC,CAAC;QACrB,IAAI,GAAG,IAAI,KAAK;YAAE,OAAO,GAAG,CAAC,CAAC,eAAe;IAC/C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { UnsupportedPolicy } from '../core/degradations.js';
|
|
2
|
+
import { type AuthenticateFn } from '../core/AuthFetch.js';
|
|
1
3
|
import type { S3MBlockAtlasImage } from '../core/S3MBlockParser.js';
|
|
2
4
|
import type { Anchor, ParsedTile, Stats, StyleUniforms } from '../core/types.js';
|
|
3
5
|
import type { TileGeometryData } from '../core/TileGeometry.js';
|
|
@@ -64,6 +66,14 @@ export interface TileNode {
|
|
|
64
66
|
parentUrl?: string;
|
|
65
67
|
/** 当前帧是否满足细化条件 */
|
|
66
68
|
needRefine?: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* 该瓦片高斯的最长轴中位长度(米)。非泼溅瓦片为 undefined。
|
|
71
|
+
* 有值时细化判据改走 core/SplatLod.ts —— 点云的各层 σ 恒定,
|
|
72
|
+
* 包围球像素误差那套判据对它无效(见该文件头部)。
|
|
73
|
+
*/
|
|
74
|
+
splatSigma?: number;
|
|
75
|
+
/** 该瓦片的高斯实例数(泼溅瓦片才有) */
|
|
76
|
+
splatCount?: number;
|
|
67
77
|
/** 该瓦片引用的纹理 key 清单,用于引用计数与显存释放 */
|
|
68
78
|
textureKeys?: string[];
|
|
69
79
|
/** 瓦片构建产生的统计信息,用于淘汰时准确扣减 stats */
|
|
@@ -79,6 +89,11 @@ export type BuildTileFn = (tile: ParsedTile, options: {
|
|
|
79
89
|
uniforms: StyleUniforms | null;
|
|
80
90
|
/** Worker 侧已完成的纯数据几何组装(经典 .s3mb 路径),构建器直接包装成 three 对象 */
|
|
81
91
|
assembled?: TileGeometryData;
|
|
92
|
+
/** 深度偏移配置(透传给 buildTileObjects),见 BuildTileOptions.polygonOffset */
|
|
93
|
+
polygonOffset?: {
|
|
94
|
+
factor: number;
|
|
95
|
+
units: number;
|
|
96
|
+
};
|
|
82
97
|
}) => Promise<{
|
|
83
98
|
group: Group;
|
|
84
99
|
stats: Partial<Stats>;
|
|
@@ -90,6 +105,11 @@ export interface S3MTilesetOptions {
|
|
|
90
105
|
/** 原始图像/子图集缓存上限(LRU),默认 128 */
|
|
91
106
|
maxImageCache?: number;
|
|
92
107
|
buildTile?: BuildTileFn | null;
|
|
108
|
+
/** 三角面材质深度偏移(共面摩尔纹 / 重合面归属),透传给 buildTileObjects */
|
|
109
|
+
polygonOffset?: {
|
|
110
|
+
factor: number;
|
|
111
|
+
units: number;
|
|
112
|
+
};
|
|
93
113
|
/**
|
|
94
114
|
* 是否用 Web Worker 解析经典 `.s3mb` 瓦片(默认开)。
|
|
95
115
|
*
|
|
@@ -129,6 +149,22 @@ export interface S3MTilesetOptions {
|
|
|
129
149
|
* 度量方式见 `_tmp/atlas/rule2.mts`。
|
|
130
150
|
*/
|
|
131
151
|
atlasLod?: boolean;
|
|
152
|
+
/**
|
|
153
|
+
* 鉴权适配函数(默认不传 = 行为与旧版一致)。每个请求(配置 scp / 瓦片 /
|
|
154
|
+
* 子图集)发出前过一遍,可改写 URL(加 `?token=`)或附加请求头。见 `AuthenticateFn`。
|
|
155
|
+
*/
|
|
156
|
+
authenticate?: AuthenticateFn;
|
|
157
|
+
/**
|
|
158
|
+
* 遇到「解析得了但画不出该有的样子」的数据时怎么办。**默认 `'warn'`**。
|
|
159
|
+
*
|
|
160
|
+
* 目前只有一类:3DGS 数据按点渲染(`gsScale` / `gsRotation` 的量化格式未标定)。
|
|
161
|
+
* 'warn' —— 首次遇到告警一次,照常出图。旧版没有这个开关,但也不告警,
|
|
162
|
+
* 所以这里的差异只有多一条日志,不传参时的渲染路径逐字未变。
|
|
163
|
+
* 'throw' —— 直接拒绝这类瓦片(标 `permanent`,不重试)。给「宁可不显示,
|
|
164
|
+
* 也不要显示一个看不出是错的画面」的场景。
|
|
165
|
+
* 'silent' —— 只记录到 `stats.degradations`,由 UI 自己决定怎么提示。
|
|
166
|
+
*/
|
|
167
|
+
unsupported?: UnsupportedPolicy;
|
|
132
168
|
}
|
|
133
169
|
export declare class S3MTileset {
|
|
134
170
|
configUrl: string;
|
|
@@ -186,6 +222,10 @@ export declare class S3MTileset {
|
|
|
186
222
|
private readonly _onError;
|
|
187
223
|
private readonly _onProgress;
|
|
188
224
|
private readonly _maxRetries;
|
|
225
|
+
/** 鉴权适配函数;undefined = 不做任何改写(行为与旧版一致) */
|
|
226
|
+
readonly authenticate: AuthenticateFn | undefined;
|
|
227
|
+
/** 能力降级的处置策略,默认 'warn',见 `S3MTilesetOptions.unsupported` */
|
|
228
|
+
private readonly _unsupported;
|
|
189
229
|
/** 失败重试计数与下次可用时间,退避期间 _enqueue 会直接跳过 */
|
|
190
230
|
private readonly _retryCount;
|
|
191
231
|
private readonly _retryAt;
|
|
@@ -200,6 +240,7 @@ export declare class S3MTileset {
|
|
|
200
240
|
/** 本数据集是 S3M 1.x(SuperMapCache,.s3m):子瓦地址规则与 3.x 不同 */
|
|
201
241
|
private isS3MV1;
|
|
202
242
|
private _buildTile;
|
|
243
|
+
private readonly _polygonOffset;
|
|
203
244
|
private readonly _uniforms;
|
|
204
245
|
/** 经典 .s3mb 的 Worker 解析客户端;undefined = 尚未尝试创建,null = 不可用/已降级 */
|
|
205
246
|
private _workerClient;
|
|
@@ -337,6 +378,15 @@ export declare class S3MTileset {
|
|
|
337
378
|
* 现在换图统一走 `_fillExternalAtlases` + `evaluateAtlasUpgrade` 的验证流程。
|
|
338
379
|
*/
|
|
339
380
|
private _upgradeAtlasLod;
|
|
381
|
+
/**
|
|
382
|
+
* 处置一块瓦片的降级项。
|
|
383
|
+
*
|
|
384
|
+
* 位置很讲究:必须在 `build` 之前。`'throw'` 策略下要在浪费一次几何组装
|
|
385
|
+
* (几十万面的解交错 + 合批)之前就拒绝,否则「拒绝」本身也成了开销。
|
|
386
|
+
*
|
|
387
|
+
* 抛出的错带 `permanent`,由 `_load` 的 catch 识别 → 不重试、直接进 failed。
|
|
388
|
+
*/
|
|
389
|
+
private _noteDegradations;
|
|
340
390
|
private _load;
|
|
341
391
|
/**
|
|
342
392
|
* @param camEnu 相机在该数据集局部 ENU 坐标系中的位置(米)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"S3MTileset.d.ts","sourceRoot":"","sources":["../../src/tileset/S3MTileset.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"S3MTileset.d.ts","sourceRoot":"","sources":["../../src/tileset/S3MTileset.ts"],"names":[],"mappings":"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"}
|