s3m-three 0.4.21 → 0.4.23

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.
Files changed (43) hide show
  1. package/dist/browser/s3m-three.iife.ext-three.js +35 -35
  2. package/dist/browser/s3m-three.iife.js +30 -30
  3. package/dist/render/DatasetManager.d.ts +30 -0
  4. package/dist/render/DatasetManager.d.ts.map +1 -1
  5. package/dist/render/DatasetManager.js +41 -0
  6. package/dist/render/DatasetManager.js.map +1 -1
  7. package/dist/render/GeometryBuilder.d.ts +18 -0
  8. package/dist/render/GeometryBuilder.d.ts.map +1 -1
  9. package/dist/render/GeometryBuilder.js +4 -1
  10. package/dist/render/GeometryBuilder.js.map +1 -1
  11. package/dist/render/S3MViewer.d.ts +68 -11
  12. package/dist/render/S3MViewer.d.ts.map +1 -1
  13. package/dist/render/S3MViewer.js +181 -19
  14. package/dist/render/S3MViewer.js.map +1 -1
  15. package/dist/render/StyleMaterial.d.ts +23 -2
  16. package/dist/render/StyleMaterial.d.ts.map +1 -1
  17. package/dist/render/StyleMaterial.js +35 -5
  18. package/dist/render/StyleMaterial.js.map +1 -1
  19. package/dist/render/TextureFactory.d.ts +23 -1
  20. package/dist/render/TextureFactory.d.ts.map +1 -1
  21. package/dist/render/TextureFactory.js +32 -8
  22. package/dist/render/TextureFactory.js.map +1 -1
  23. package/dist/render/viewer/LightRig.d.ts +21 -7
  24. package/dist/render/viewer/LightRig.d.ts.map +1 -1
  25. package/dist/render/viewer/LightRig.js +11 -13
  26. package/dist/render/viewer/LightRig.js.map +1 -1
  27. package/dist/render/viewer/types.d.ts +16 -2
  28. package/dist/render/viewer/types.d.ts.map +1 -1
  29. package/dist/render/viewer/types.js.map +1 -1
  30. package/dist/tileset/S3MTileset.d.ts +33 -0
  31. package/dist/tileset/S3MTileset.d.ts.map +1 -1
  32. package/dist/tileset/S3MTileset.js +27 -0
  33. package/dist/tileset/S3MTileset.js.map +1 -1
  34. package/docs/API.md +26 -5
  35. package/package.json +1 -1
  36. package/src/render/DatasetManager.ts +47 -0
  37. package/src/render/GeometryBuilder.ts +22 -1
  38. package/src/render/S3MViewer.ts +192 -19
  39. package/src/render/StyleMaterial.ts +48 -6
  40. package/src/render/TextureFactory.ts +50 -8
  41. package/src/render/viewer/LightRig.ts +23 -13
  42. package/src/render/viewer/types.ts +16 -2
  43. package/src/tileset/S3MTileset.ts +43 -0
@@ -32,6 +32,7 @@ import type {
32
32
  } from '../core/S3MBlockParser.js';
33
33
  import type { Anchor, ParsedTile, Stats, StyleUniforms } from '../core/types.js';
34
34
  import type { TileGeometryData } from '../core/TileGeometry.js';
35
+ import type { TextureCreateOptions } from '../render/TextureFactory.js';
35
36
  import type { Group, Texture } from 'three';
36
37
 
37
38
  function dirOf(url: string): string {
@@ -246,6 +247,12 @@ export type BuildTileFn = (
246
247
  assembled?: TileGeometryData;
247
248
  /** 深度偏移配置(透传给 buildTileObjects),见 BuildTileOptions.polygonOffset */
248
249
  polygonOffset?: { factor: number; units: number };
250
+ /** 光照模型档位(透传给 buildTileObjects),见 BuildTileOptions.materialQuality */
251
+ materialQuality?: 'pbr' | 'lambert';
252
+ /** 颜色管线(透传给 buildTileObjects),见 BuildTileOptions.colorPipeline */
253
+ colorPipeline?: 'linear' | 'direct';
254
+ /** 纹理创建参数(透传给 buildTileObjects → createTexture) */
255
+ textureOptions?: TextureCreateOptions;
249
256
  }
250
257
  ) => Promise<{ group: Group; stats: Partial<Stats> }>;
251
258
 
@@ -258,6 +265,15 @@ export interface S3MTilesetOptions {
258
265
  buildTile?: BuildTileFn | null;
259
266
  /** 三角面材质深度偏移(共面摩尔纹 / 重合面归属),透传给 buildTileObjects */
260
267
  polygonOffset?: { factor: number; units: number };
268
+ /**
269
+ * 光照模型档位,透传给 buildTileObjects。不传 = 读模块级默认。
270
+ * 由 DatasetManager 从图层 / 数据集设置带下来。
271
+ */
272
+ materialQuality?: 'pbr' | 'lambert';
273
+ /** 颜色管线,透传给 buildTileObjects。不传 = 读模块级默认。由图层的渲染 profile 带下来 */
274
+ colorPipeline?: 'linear' | 'direct';
275
+ /** 纹理创建参数(sRGB 解码 / 尺寸上限 / 各向异性上限),透传给 createTexture */
276
+ textureOptions?: TextureCreateOptions;
261
277
  /**
262
278
  * 是否用 Web Worker 解析经典 `.s3mb` 瓦片(默认开)。
263
279
  *
@@ -471,6 +487,9 @@ export class S3MTileset {
471
487
  private isS3MV1 = false;
472
488
  private _buildTile: BuildTileFn | null;
473
489
  private readonly _polygonOffset: { factor: number; units: number } | undefined;
490
+ private _materialQuality: 'pbr' | 'lambert' | undefined;
491
+ private _colorPipeline: 'linear' | 'direct' | undefined;
492
+ private _textureOptions: TextureCreateOptions | undefined;
474
493
  private readonly _uniforms: StyleUniforms | null;
475
494
  /** 经典 .s3mb 的 Worker 解析客户端;undefined = 尚未尝试创建,null = 不可用/已降级 */
476
495
  private _workerClient: S3MWorkerClient | null | undefined; private readonly _useWorker: boolean;
@@ -491,6 +510,9 @@ export class S3MTileset {
491
510
  // 渲染层可注入:Node 环境下不需要 three,也能跑 URL / 解析链路
492
511
  this._buildTile = options.buildTile ?? null;
493
512
  this._polygonOffset = options.polygonOffset;
513
+ this._materialQuality = options.materialQuality;
514
+ this._colorPipeline = options.colorPipeline;
515
+ this._textureOptions = options.textureOptions;
494
516
  // 着色器共享 uniform,由 S3MLayer 持有并传进来
495
517
  this._uniforms = options.uniforms ?? null;
496
518
  this._useWorker = options.useWorker !== false;
@@ -722,6 +744,24 @@ export class S3MTileset {
722
744
  this.maxMemory = Number.isFinite(bytes) && bytes > 0 ? bytes : Infinity;
723
745
  }
724
746
 
747
+ /**
748
+ * 运行时改本数据集的光照模型档位。只影响**之后**构建的瓦片材质;
749
+ * 场上已有材质由 `S3MViewer.setMaterialQuality` 原位重建。
750
+ * `undefined` = 跟随模块级默认。
751
+ */
752
+ setMaterialQuality(q: 'pbr' | 'lambert' | undefined): void {
753
+ this._materialQuality = q;
754
+ }
755
+
756
+ /**
757
+ * 运行时改本数据集的渲染 profile(颜色管线 / 纹理参数)。
758
+ * 只影响**之后**构建的瓦片材质与纹理;场上已有的由 `S3MViewer` 统一重建 / 重传。
759
+ */
760
+ setRenderProfile(p: { colorPipeline?: 'linear' | 'direct'; textureOptions?: TextureCreateOptions }): void {
761
+ if (p.colorPipeline !== undefined) this._colorPipeline = p.colorPipeline;
762
+ if (p.textureOptions !== undefined) this._textureOptions = p.textureOptions;
763
+ }
764
+
725
765
  /**
726
766
  * 当前数据集驻留的显存与内存总字节数(几何缓冲精确大小 + 纹理显存估计)
727
767
  */
@@ -1245,6 +1285,9 @@ export class S3MTileset {
1245
1285
  uniforms: this._uniforms,
1246
1286
  assembled,
1247
1287
  polygonOffset: this._polygonOffset,
1288
+ materialQuality: this._materialQuality,
1289
+ colorPipeline: this._colorPipeline,
1290
+ textureOptions: this._textureOptions,
1248
1291
  });
1249
1292
  const { group, stats } = buildRes;
1250
1293
  const texKeys = (buildRes as any).textureKeys ?? (group.userData?.textureKeys as string[] | undefined) ?? Object.keys(tile.textures ?? {});