@realsee/five
Version:
Realsee Renderer SDK
132 lines (107 loc) • 5.07 kB
Markdown
# Panorama Tile
- **Summary**: 全景模式下的瓦片加载策略,支持多分辨率层级(LOD)和视锥体裁剪,以优化全景浏览的性能和清晰度。
- **Schema**: WorkTile 接口及相关配置参数。
- **Concepts**: LOD (Level of Detail), Frustum Culling, Tile URL Generation.
- **Configuration**: tileLevelForFov, tileMaxRequest, imageOptions.
- **Examples**: 瓦片数据结构查看与 Five 初始化配置。
## Schema
> **Definition**: [WorkImage](../../five/work/work.d.ts), [ImageOptions](../../five/types/imageOptions.d.ts)
### WorkObserver.images
点位全景图数据结构,包含瓦片列表。
```typescript
interface WorkImage {
/** 分辨率列表 */
sizeList: readonly number[];
/** 瓦片信息列表,按 level 排序 */
tiles: readonly WorkTile[];
// ... 其他基础图片 URL
}
```
### ImageOptions
全景图及瓦片的图片处理配置。
```typescript
interface ImageOptions {
/** 图片尺寸参数 (例如 512, 1024...) */
size?: number;
/** 图片质量参数 (0-100) */
quality?: number;
/** 图片格式参数 */
format?: "jpg" | "jpeg" | "png" | "heif" | "heic" | "webp" | "avif";
/** URL 转换函数 */
transform?: (url: string, options: ImageURLOptions) => string;
}
```
## Concepts
### Tile Parsing (瓦片解析)
在 `Five` 加载 `Work` 数据时,`WorkParser` 会解析 `panorama.size_list` (或 `panorama.tiles`) 字段。
- **Level 计算**: `level = log2(size / 512)`。
- **URL 生成**:
- 如果 `size > baseSize` (通常是初始全景图大小),URL 中的 `/cube_{size}/` 部分会被动态替换(通过 `replaceImageSize` 函数)。
- 如果 `size <= baseSize`,直接使用基础全景图 URL,并设置 `scale`。
- **排序**: 解析后的 `tiles` 数组会按 `level` 升序排列。
### sizeList
- **类型**: `readonly number[]`
- **说明**: 包含所有可用的分辨率(以像素为单位)。
- **示例**: `[2048, 6144]` 表示该点位全景图有两个层级,分别是 2048px 和 6144px。
- **图片路径**: 每个层级的图片路径都是 `cube_{size}`,`{size}` 是层级分辨率,必须与 `sizeList` 中的值对应。并必须存在 2048px 层级的图片。
### Level of Detail (LOD) & Loading Strategy
`PanoramaController` 使用 `Tiling` 类来管理瓦片加载:
- **LOD 选择**: 根据当前的视场角 (`FOV`) 和视图大小 (`viewSize`),计算所需的最佳瓦片层级。默认策略会优先保证画面清晰度,同时考虑网络开销。
- **视锥体裁剪 (Frustum Culling)**: 仅加载当前相机视锥体可见范围内的瓦片面。
- **并发控制**: 通过 `tileMaxRequest` 限制同时进行的网络请求数量,避免阻塞。
## Configuration
在初始化 `Five` 时,可以通过 `panorama` 配置参数来配置瓦片加载行为。
| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `tileLevelForFov` | `(fov: number, viewSize: Vector2) => number` \| `false` | `undefined` | 自定义函数,用于根据当前 FOV 和视图尺寸决定加载哪个层级的瓦片。返回 `level` 数值。如果设置为 `false`,则禁用动态瓦片加载。默认使用内部策略。 |
| `tileMaxRequest` | `number` | `3` | 最大的瓦片图片并发请求数。增加此值可能加快加载速度,但也可能导致网络拥塞。 |
| `imageOptions` | `ImageOptions` | `undefined` | 全景图及瓦片的图片处理配置。可用于全局控制图片的加载格式(如强制使用 WebP)、质量压缩比例或通过 `transform` 函数自定义图片 URL。 |
## Examples
### 查看瓦片数据结构
```typescript
import { Five } from "@realsee/five";
const five = new Five();
five.on("loaded", () => {
const observer = five.work.observers[0];
if (observer && observer.images && observer.images.tiles) {
console.log("Available Tiles:", observer.images.tiles);
observer.images.tiles.forEach(tile => {
console.log(`Level: ${tile.level}, Size: ${tile.size}, Scale: ${tile.scale}`);
});
}
});
```
### 配置瓦片加载策略与图片参数
```typescript
import { Five } from "@realsee/five";
const five = new Five({
// 自定义瓦片层级选择策略
tileLevelForFov: (fov, viewSize) => {
// 简单示例:FOV 小于 60 度时强制使用 Level 2,否则使用 Level 1
if (fov < 60) {
return 2;
}
return 1;
},
// 限制并发请求数
tileMaxRequest: 6,
// 图片加载配置
imageOptions: {
// 强制请求 WebP 格式的图片
format: "webp",
// 图片质量设置为 80%
quality: 80,
// (可选) 自定义 URL 转换逻辑
// transform: (url, options) => {
// return url + `?x-oss-process=image/format,webp/quality,q_80`;
// }
}
});
```
## Related
- [Mode](./mode.md): 了解不同模态下 Work 数据的表现。
- [ImageOptions](./image-options.md): 了解图片加载配置选项。
---
```yaml
tags: [全景瓦片, 高清全景, 分片加载, 瓦片, 全景图, 分辨率, 按需加载, pano-tile, observer, LOD, tile]
```