s3m-three 0.4.18 → 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.
Files changed (130) hide show
  1. package/dist/browser/assets/s3mWorker-4iTAmWIu.js +1 -0
  2. package/dist/browser/s3m-three.iife.ext-three.js +406 -91
  3. package/dist/browser/s3m-three.iife.js +434 -119
  4. package/dist/core/GaussianSplat.d.ts +64 -0
  5. package/dist/core/GaussianSplat.d.ts.map +1 -0
  6. package/dist/core/GaussianSplat.js +139 -0
  7. package/dist/core/GaussianSplat.js.map +1 -0
  8. package/dist/core/S3M1Parser.d.ts +1 -1
  9. package/dist/core/S3M1Parser.d.ts.map +1 -1
  10. package/dist/core/S3M1Parser.js +320 -25
  11. package/dist/core/S3M1Parser.js.map +1 -1
  12. package/dist/core/S3MBParser.d.ts.map +1 -1
  13. package/dist/core/S3MBParser.js +13 -0
  14. package/dist/core/S3MBParser.js.map +1 -1
  15. package/dist/core/S3MBlockParser.d.ts.map +1 -1
  16. package/dist/core/S3MBlockParser.js +56 -14
  17. package/dist/core/S3MBlockParser.js.map +1 -1
  18. package/dist/core/SplatLod.d.ts +36 -0
  19. package/dist/core/SplatLod.d.ts.map +1 -0
  20. package/dist/core/SplatLod.js +54 -0
  21. package/dist/core/SplatLod.js.map +1 -0
  22. package/dist/core/SplatProjection.d.ts +75 -0
  23. package/dist/core/SplatProjection.d.ts.map +1 -0
  24. package/dist/core/SplatProjection.js +162 -0
  25. package/dist/core/SplatProjection.js.map +1 -0
  26. package/dist/core/SplatSort.d.ts +13 -0
  27. package/dist/core/SplatSort.d.ts.map +1 -0
  28. package/dist/core/SplatSort.js +14 -0
  29. package/dist/core/SplatSort.js.map +1 -0
  30. package/dist/core/TexCoordZ.d.ts +94 -0
  31. package/dist/core/TexCoordZ.d.ts.map +1 -0
  32. package/dist/core/TexCoordZ.js +125 -0
  33. package/dist/core/TexCoordZ.js.map +1 -0
  34. package/dist/core/TextureDecode.d.ts +19 -0
  35. package/dist/core/TextureDecode.d.ts.map +1 -1
  36. package/dist/core/TextureDecode.js +53 -11
  37. package/dist/core/TextureDecode.js.map +1 -1
  38. package/dist/core/TileGeometry.d.ts +29 -0
  39. package/dist/core/TileGeometry.d.ts.map +1 -1
  40. package/dist/core/TileGeometry.js +130 -14
  41. package/dist/core/TileGeometry.js.map +1 -1
  42. package/dist/core/degradations.d.ts +37 -0
  43. package/dist/core/degradations.d.ts.map +1 -0
  44. package/dist/core/degradations.js +32 -0
  45. package/dist/core/degradations.js.map +1 -0
  46. package/dist/core/types.d.ts +36 -0
  47. package/dist/core/types.d.ts.map +1 -1
  48. package/dist/index.d.ts +7 -1
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +4 -1
  51. package/dist/index.js.map +1 -1
  52. package/dist/render/DatasetManager.d.ts +11 -0
  53. package/dist/render/DatasetManager.d.ts.map +1 -1
  54. package/dist/render/DatasetManager.js +2 -0
  55. package/dist/render/DatasetManager.js.map +1 -1
  56. package/dist/render/FeatureStyleManager.d.ts.map +1 -1
  57. package/dist/render/FeatureStyleManager.js +7 -5
  58. package/dist/render/FeatureStyleManager.js.map +1 -1
  59. package/dist/render/GeometryBuilder.d.ts +24 -0
  60. package/dist/render/GeometryBuilder.d.ts.map +1 -1
  61. package/dist/render/GeometryBuilder.js +196 -5
  62. package/dist/render/GeometryBuilder.js.map +1 -1
  63. package/dist/render/Picker.d.ts.map +1 -1
  64. package/dist/render/Picker.js +19 -5
  65. package/dist/render/Picker.js.map +1 -1
  66. package/dist/render/S3MViewer.d.ts +69 -0
  67. package/dist/render/S3MViewer.d.ts.map +1 -1
  68. package/dist/render/S3MViewer.js +222 -12
  69. package/dist/render/S3MViewer.js.map +1 -1
  70. package/dist/render/SplatMaterial.d.ts +103 -0
  71. package/dist/render/SplatMaterial.d.ts.map +1 -0
  72. package/dist/render/SplatMaterial.js +388 -0
  73. package/dist/render/SplatMaterial.js.map +1 -0
  74. package/dist/render/SplatSorter.d.ts +14 -0
  75. package/dist/render/SplatSorter.d.ts.map +1 -0
  76. package/dist/render/SplatSorter.js +59 -0
  77. package/dist/render/SplatSorter.js.map +1 -0
  78. package/dist/render/StyleMaterial.d.ts +48 -0
  79. package/dist/render/StyleMaterial.d.ts.map +1 -1
  80. package/dist/render/StyleMaterial.js +292 -69
  81. package/dist/render/StyleMaterial.js.map +1 -1
  82. package/dist/render/TextureFactory.d.ts +10 -0
  83. package/dist/render/TextureFactory.d.ts.map +1 -1
  84. package/dist/render/TextureFactory.js +35 -5
  85. package/dist/render/TextureFactory.js.map +1 -1
  86. package/dist/render/lightingPreset.d.ts +53 -0
  87. package/dist/render/lightingPreset.d.ts.map +1 -0
  88. package/dist/render/lightingPreset.js +36 -0
  89. package/dist/render/lightingPreset.js.map +1 -0
  90. package/dist/render/materialAlpha.d.ts +51 -0
  91. package/dist/render/materialAlpha.d.ts.map +1 -0
  92. package/dist/render/materialAlpha.js +68 -0
  93. package/dist/render/materialAlpha.js.map +1 -0
  94. package/dist/tileset/S3MTileset.d.ts +42 -0
  95. package/dist/tileset/S3MTileset.d.ts.map +1 -1
  96. package/dist/tileset/S3MTileset.js +52 -1
  97. package/dist/tileset/S3MTileset.js.map +1 -1
  98. package/dist/vendor/browser-node-stub.js +10 -0
  99. package/dist/worker/s3mWorker.js +1166 -979
  100. package/dist/worker/s3mWorker.js.map +1 -1
  101. package/docs/API.md +55 -1
  102. package/docs/FORMAT-NOTES.md +338 -0
  103. package/package.json +1 -1
  104. package/src/core/GaussianSplat.ts +175 -0
  105. package/src/core/S3M1Parser.ts +330 -24
  106. package/src/core/S3MBParser.ts +18 -0
  107. package/src/core/S3MBlockParser.ts +56 -11
  108. package/src/core/SplatLod.ts +83 -0
  109. package/src/core/SplatProjection.ts +231 -0
  110. package/src/core/SplatSort.ts +30 -0
  111. package/src/core/TexCoordZ.ts +160 -0
  112. package/src/core/TextureDecode.ts +63 -11
  113. package/src/core/TileGeometry.ts +138 -14
  114. package/src/core/degradations.ts +74 -0
  115. package/src/core/types.ts +32 -0
  116. package/src/index.ts +8 -1
  117. package/src/render/DatasetManager.ts +10 -0
  118. package/src/render/FeatureStyleManager.ts +7 -5
  119. package/src/render/GeometryBuilder.ts +239 -6
  120. package/src/render/Picker.ts +21 -5
  121. package/src/render/S3MViewer.ts +255 -11
  122. package/src/render/SplatMaterial.ts +433 -0
  123. package/src/render/SplatSorter.ts +59 -0
  124. package/src/render/StyleMaterial.ts +339 -69
  125. package/src/render/TextureFactory.ts +39 -5
  126. package/src/render/lightingPreset.ts +76 -0
  127. package/src/render/materialAlpha.ts +75 -0
  128. package/src/tileset/S3MTileset.ts +78 -1
  129. package/src/vendor/browser-node-stub.js +10 -0
  130. package/dist/browser/assets/s3mWorker-BjPOUgjg.js +0 -1
@@ -0,0 +1,64 @@
1
+ /**
2
+ * 3DGS(高斯泼溅)逐点属性的解码
3
+ *
4
+ * 输入是 MeshOpt 骨架里的两条自定义流,各 4 字节/顶点:
5
+ * `gsScale` —— 3 个 u8,log 量化;第 4 字节是填充
6
+ * `gsRotation` —— 3 个 u8 存四元数的 x/y/z;w 由公式补;第 4 字节是填充
7
+ *
8
+ * 这两条流以前是「保留原始字节但语义未知」(FORMAT-NOTES 第九节的 D 级),
9
+ * 所以只能按点渲染。量化格式最终不是靠统计猜出来的,是从官方 worker
10
+ * `SuperMap3D/Workers/GaussianSplating.js`(3.9 KB)里读出来的,公式逐字如下:
11
+ *
12
+ * ```js
13
+ * function j(t){ // scale
14
+ * a[n*3+0] = Math.exp(t[n*4+0]/16 - 10)
15
+ * a[n*3+1] = Math.exp(t[n*4+1]/16 - 10)
16
+ * a[n*3+2] = Math.exp(t[n*4+2]/16 - 10)
17
+ * }
18
+ * function D(t){ // rotation
19
+ * c = t[n]/127.5 - 1; f = t[n+1]/127.5 - 1; x = t[n+2]/127.5 - 1
20
+ * s = Math.sqrt(Math.max(0, 1 - (c*c + f*f + x*x)))
21
+ * a[n] = s; a[n+1] = c; a[n+2] = f; a[n+3] = x // (w, x, y, z)
22
+ * }
23
+ * ```
24
+ *
25
+ * 官方还有第二条分支(`isSPZCompress && version === 1.1`)走 10-10-10-2 的
26
+ * 「smallest three」打包,本模块也实现了 —— 见 `decodeRotation` 的 mode 判定。
27
+ *
28
+ * **为什么以前看这 4 字节像乱码**:第 4 字节确实不参与解码,于是同一瓦片里它
29
+ * 一会儿是 0 一会儿是 207(填充的残留),拿 32 位整数字段或 4 分量向量去套,
30
+ * 自然怎么都对不上。只取前 3 字节 + w 由单位化补出,立刻就是干净的四元数。
31
+ */
32
+ export interface SplatData {
33
+ /** 3N(米,场景 ENU 坐标) */
34
+ positions: Float32Array;
35
+ /** 3N(米,三个主轴的高斯半径) */
36
+ scales: Float32Array;
37
+ /** 4N,单位四元数 (x, y, z, w) —— three 的 Quaternion 顺序 */
38
+ rotations: Float32Array;
39
+ /** 4N,RGBA8 */
40
+ colors: Uint8Array;
41
+ count: number;
42
+ }
43
+ /**
44
+ * scale:`exp(byte/16 - 10)` 米。
45
+ * 值域 byte ∈ [0,255] → [4.54e-5, 380] 米,建筑泼溅的典型值(0.01~1 米)落在中段。
46
+ */
47
+ export declare function decodeScale(bytes: Uint8Array, stride: number, offset: number, count: number): Float32Array;
48
+ /**
49
+ * rotation:3 个 u8 直接归一化到 [-1,1],第四个分量由单位化补出。
50
+ *
51
+ * 输出顺序是 three 的 `(x, y, z, w)`,而官方内部是 `(w, x, y, z)` —— 这里已经换过。
52
+ */
53
+ export declare function decodeRotation(bytes: Uint8Array, stride: number, offset: number, count: number): Float32Array;
54
+ export declare function lastRotationResidual(): number;
55
+ /**
56
+ * 10-10-10-2 的 smallest-three(官方 `U()`,`isSPZCompress && version === 1.1` 时走这条)。
57
+ *
58
+ * 3 个分量各 10 bit(第 9 bit 是符号),剩下 2 bit 记录「哪一维是最大的」,
59
+ * 最大维由单位化补出 —— 这样只需要 32 bit 就能无损表达一个单位四元数。
60
+ */
61
+ export declare function decodeRotationSmallestThree(bytes: Uint8Array, stride: number, offset: number, count: number): Float32Array;
62
+ /** 逐点协方差矩阵的上三角(6 个 float):`Σ = R S Sᵀ Rᵀ`,供 EWA 投影用 */
63
+ export declare function covariance(sx: number, sy: number, sz: number, qx: number, qy: number, qz: number, qw: number, out: Float32Array, at: number): void;
64
+ //# sourceMappingURL=GaussianSplat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GaussianSplat.d.ts","sourceRoot":"","sources":["../../src/core/GaussianSplat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AASH,MAAM,WAAW,SAAS;IACxB,sBAAsB;IACtB,SAAS,EAAE,YAAY,CAAC;IACxB,sBAAsB;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,qDAAqD;IACrD,SAAS,EAAE,YAAY,CAAC;IACxB,eAAe;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAS1G;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAkB7G;AAUD,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,YAAY,CA0Bd;AAED,uDAAuD;AACvD,wBAAgB,UAAU,CACxB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,YAAY,EACjB,EAAE,EAAE,MAAM,GACT,IAAI,CAqBN"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * 3DGS(高斯泼溅)逐点属性的解码
3
+ *
4
+ * 输入是 MeshOpt 骨架里的两条自定义流,各 4 字节/顶点:
5
+ * `gsScale` —— 3 个 u8,log 量化;第 4 字节是填充
6
+ * `gsRotation` —— 3 个 u8 存四元数的 x/y/z;w 由公式补;第 4 字节是填充
7
+ *
8
+ * 这两条流以前是「保留原始字节但语义未知」(FORMAT-NOTES 第九节的 D 级),
9
+ * 所以只能按点渲染。量化格式最终不是靠统计猜出来的,是从官方 worker
10
+ * `SuperMap3D/Workers/GaussianSplating.js`(3.9 KB)里读出来的,公式逐字如下:
11
+ *
12
+ * ```js
13
+ * function j(t){ // scale
14
+ * a[n*3+0] = Math.exp(t[n*4+0]/16 - 10)
15
+ * a[n*3+1] = Math.exp(t[n*4+1]/16 - 10)
16
+ * a[n*3+2] = Math.exp(t[n*4+2]/16 - 10)
17
+ * }
18
+ * function D(t){ // rotation
19
+ * c = t[n]/127.5 - 1; f = t[n+1]/127.5 - 1; x = t[n+2]/127.5 - 1
20
+ * s = Math.sqrt(Math.max(0, 1 - (c*c + f*f + x*x)))
21
+ * a[n] = s; a[n+1] = c; a[n+2] = f; a[n+3] = x // (w, x, y, z)
22
+ * }
23
+ * ```
24
+ *
25
+ * 官方还有第二条分支(`isSPZCompress && version === 1.1`)走 10-10-10-2 的
26
+ * 「smallest three」打包,本模块也实现了 —— 见 `decodeRotation` 的 mode 判定。
27
+ *
28
+ * **为什么以前看这 4 字节像乱码**:第 4 字节确实不参与解码,于是同一瓦片里它
29
+ * 一会儿是 0 一会儿是 207(填充的残留),拿 32 位整数字段或 4 分量向量去套,
30
+ * 自然怎么都对不上。只取前 3 字节 + w 由单位化补出,立刻就是干净的四元数。
31
+ */
32
+ /** SPZ 的 log 量化:scale 实际是 exp(v/16 - 10) 米 */
33
+ const SCALE_LOG_DIV = 16;
34
+ const SCALE_LOG_BIAS = 10;
35
+ /** rotation 的 u8 归一化:0 → -1,255 → 1 */
36
+ const ROT_U8_SCALE = 127.5;
37
+ /**
38
+ * scale:`exp(byte/16 - 10)` 米。
39
+ * 值域 byte ∈ [0,255] → [4.54e-5, 380] 米,建筑泼溅的典型值(0.01~1 米)落在中段。
40
+ */
41
+ export function decodeScale(bytes, stride, offset, count) {
42
+ const out = new Float32Array(count * 3);
43
+ for (let i = 0; i < count; i++) {
44
+ const o = i * stride + offset;
45
+ out[i * 3] = Math.exp(bytes[o] / SCALE_LOG_DIV - SCALE_LOG_BIAS);
46
+ out[i * 3 + 1] = Math.exp(bytes[o + 1] / SCALE_LOG_DIV - SCALE_LOG_BIAS);
47
+ out[i * 3 + 2] = Math.exp(bytes[o + 2] / SCALE_LOG_DIV - SCALE_LOG_BIAS);
48
+ }
49
+ return out;
50
+ }
51
+ /**
52
+ * rotation:3 个 u8 直接归一化到 [-1,1],第四个分量由单位化补出。
53
+ *
54
+ * 输出顺序是 three 的 `(x, y, z, w)`,而官方内部是 `(w, x, y, z)` —— 这里已经换过。
55
+ */
56
+ export function decodeRotation(bytes, stride, offset, count) {
57
+ const out = new Float32Array(count * 4);
58
+ let maxErr = 0;
59
+ for (let i = 0; i < count; i++) {
60
+ const o = i * stride + offset;
61
+ const x = bytes[o] / ROT_U8_SCALE - 1;
62
+ const y = bytes[o + 1] / ROT_U8_SCALE - 1;
63
+ const z = bytes[o + 2] / ROT_U8_SCALE - 1;
64
+ const w = Math.sqrt(Math.max(0, 1 - (x * x + y * y + z * z)));
65
+ out[i * 4] = x;
66
+ out[i * 4 + 1] = y;
67
+ out[i * 4 + 2] = z;
68
+ out[i * 4 + 3] = w;
69
+ maxErr = Math.max(maxErr, Math.abs(x * x + y * y + z * z + w * w - 1));
70
+ }
71
+ // 模长偏差只可能在「四元数确实不是这套编码」时出现,留给调用方判断
72
+ rotationResidual = maxErr;
73
+ return out;
74
+ }
75
+ /**
76
+ * 上一次 `decodeRotation` 的单位化残差(|q|²-1 的最大绝对值)。
77
+ *
78
+ * 这是判定「编码分支猜对没有」的判据:`D()` 分支下 w 是补出来的,残差恒 ≈ 0;
79
+ * 如果数据其实是 smallest-three 打包,把前 3 字节当分量解出来的 |q|² 会明显偏离 1。
80
+ */
81
+ let rotationResidual = 0;
82
+ export function lastRotationResidual() {
83
+ return rotationResidual;
84
+ }
85
+ /**
86
+ * 10-10-10-2 的 smallest-three(官方 `U()`,`isSPZCompress && version === 1.1` 时走这条)。
87
+ *
88
+ * 3 个分量各 10 bit(第 9 bit 是符号),剩下 2 bit 记录「哪一维是最大的」,
89
+ * 最大维由单位化补出 —— 这样只需要 32 bit 就能无损表达一个单位四元数。
90
+ */
91
+ export function decodeRotationSmallestThree(bytes, stride, offset, count) {
92
+ const out = new Float32Array(count * 4);
93
+ const MASK = (1 << 9) - 1;
94
+ const SQRT_HALF = Math.SQRT1_2;
95
+ for (let i = 0; i < count; i++) {
96
+ const o = i * stride + offset;
97
+ const packed = (bytes[o] | (bytes[o + 1] << 8) | (bytes[o + 2] << 16) | (bytes[o + 3] << 24)) >>> 0;
98
+ const largest = (packed >>> 30) & 3;
99
+ let rest = packed;
100
+ let sumSq = 0;
101
+ for (let axis = 3; axis >= 0; axis--) {
102
+ if (axis === largest)
103
+ continue;
104
+ const mag = rest & MASK;
105
+ const negative = (rest >>> 9) & 1;
106
+ rest >>>= 10;
107
+ // 值域 [-√½, √½]:单位四元数里任一分量的上界
108
+ let v = (SQRT_HALF * mag) / MASK;
109
+ if (negative)
110
+ v = -v;
111
+ out[i * 4 + axis] = v;
112
+ sumSq += v * v;
113
+ }
114
+ out[i * 4 + largest] = Math.sqrt(Math.max(1 - sumSq, 0));
115
+ }
116
+ rotationResidual = 0;
117
+ return out;
118
+ }
119
+ /** 逐点协方差矩阵的上三角(6 个 float):`Σ = R S Sᵀ Rᵀ`,供 EWA 投影用 */
120
+ export function covariance(sx, sy, sz, qx, qy, qz, qw, out, at) {
121
+ // 旋转矩阵(列主序 3×3)
122
+ const xx = qx * qx, yy = qy * qy, zz = qz * qz;
123
+ const xy = qx * qy, xz = qx * qz, yz = qy * qz;
124
+ const wx = qw * qx, wy = qw * qy, wz = qw * qz;
125
+ const r00 = 1 - 2 * (yy + zz), r01 = 2 * (xy - wz), r02 = 2 * (xz + wy);
126
+ const r10 = 2 * (xy + wz), r11 = 1 - 2 * (xx + zz), r12 = 2 * (yz - wx);
127
+ const r20 = 2 * (xz - wy), r21 = 2 * (yz + wx), r22 = 1 - 2 * (xx + yy);
128
+ // M = R · diag(s),则 Σ = M Mᵀ
129
+ const m00 = r00 * sx, m01 = r01 * sy, m02 = r02 * sz;
130
+ const m10 = r10 * sx, m11 = r11 * sy, m12 = r12 * sz;
131
+ const m20 = r20 * sx, m21 = r21 * sy, m22 = r22 * sz;
132
+ out[at] = m00 * m00 + m01 * m01 + m02 * m02;
133
+ out[at + 1] = m00 * m10 + m01 * m11 + m02 * m12;
134
+ out[at + 2] = m00 * m20 + m01 * m21 + m02 * m22;
135
+ out[at + 3] = m10 * m10 + m11 * m11 + m12 * m12;
136
+ out[at + 4] = m10 * m20 + m11 * m21 + m12 * m22;
137
+ out[at + 5] = m20 * m20 + m21 * m21 + m22 * m22;
138
+ }
139
+ //# sourceMappingURL=GaussianSplat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GaussianSplat.js","sourceRoot":"","sources":["../../src/core/GaussianSplat.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import type { ParsedTile } from './types.js';
2
2
  export interface ParseS3M1Options {
3
3
  inflate?: (bytes: Uint8Array) => Uint8Array | Promise<Uint8Array>;
4
4
  }
5
- /** 是不是 S3M 1.x 容器 */
5
+ /** 是不是 S3M 1.x 容器(版本字节 0 或 1) */
6
6
  export declare function isS3M1Buffer(buffer: ArrayBuffer): boolean;
7
7
  /**
8
8
  * 按「字节/像素」反推 S3MPixelFormat。
@@ -1 +1 @@
1
- {"version":3,"file":"S3M1Parser.d.ts","sourceRoot":"","sources":["../../src/core/S3M1Parser.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAKV,UAAU,EAIX,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CACnE;AAED,qBAAqB;AACrB,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAGzD;AAoMD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAQvE;AA4CD,wBAAsB,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,CAuH7G"}
1
+ {"version":3,"file":"S3M1Parser.d.ts","sourceRoot":"","sources":["../../src/core/S3M1Parser.ts"],"names":[],"mappings":"AA+DA,OAAO,KAAK,EAKV,UAAU,EAKX,MAAM,YAAY,CAAC;AAepB,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CACnE;AAED,iCAAiC;AACjC,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAKzD;AAsZD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAQvE;AAgDD,wBAAsB,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,CAwK7G"}