u-space-mcp 0.0.16 → 0.0.18

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/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # u-space-mcp
2
2
 
3
- Model Context Protocol server for the `u-space` documentation, including the experimental `u-space/worker` OffscreenCanvas runtime, nested static-model decoding through `ModelLoaderManager.setDecodeWorker()` and `u-space/worker/model-decoder`, the core `InstanceObject` protocol, the public `src/batches` APIs (`ModelInstancedLayer` and `EditableGeometryBatchLayer`), core object defaults, and u-manager APIs/examples such as `UManagerLoader`, scene/facility instancing, opt-in `setEditableBatching()` static Geometry merging, semantic groups/floors/facilities, and semantic elevator/vent shafts. The index also covers atmosphere and fire WebGPU effects.
3
+ Model Context Protocol server for the `u-space` documentation, including the experimental `u-space/worker` OffscreenCanvas runtime, nested static-model decoding through `ModelLoaderManager.setDecodeWorker()` and `u-space/worker/model-decoder`, the core `InstanceObject` protocol, the public `src/batches` APIs (`ModelInstancedLayer` and `EditableGeometryBatchLayer`), core object defaults, `TSLEffects.outline()` with `InstanceObject` bounds proxies, and u-manager APIs/examples such as `UManagerLoader`, scene/facility instancing, opt-in `setEditableBatching()` static Geometry merging, semantic groups/floors/facilities, and semantic elevator/vent shafts. The index also covers atmosphere and fire WebGPU effects.
4
4
 
5
5
  The bundled docs index contains the canonical core `InstanceObject` API from `docs/api-objects.md`: identity fields and updates, local/world bounds, fallback render-object access, ownership-aware materializer/materialize protocol, style/highlight controls, dirty callbacks, automatic transform-to-batch sync, and the `isInstanceObject()` type guard. `docs/api-batches.md` covers the one-shot source/build lifecycle, duplicate-instance rejection, isolated per-layer transforms, unsupported reasons and per-instance negative-scale fallback, immediate CPU dirty/world-matrix sync, cross-layer old-copy hiding, independent materialized materials, typed events, materialized-hit filtering, safe disposal, statistics, and lazy-BVH source remapping.
6
6
 
7
- The u-manager coverage from `docs/api-plugin-u-manager.md` focuses on `SceneInstanceObject`, `FacilityInstanceObject`, semantic floor proxies, loaders, examples, scene/facility layer selection, and editable static batching through `setEditableBatching()` / `SceneEditableBatchLayer`. Retrieval distinguishes default `SceneInstancedLayer` path/model instancing from the editable primary layer and its sibling `SceneEditableBatchFallback`. `SceneEditableBatchLayer` is documented as a thin adapter over core `EditableGeometryBatchLayer<SceneInstanceObject>`; URL loading and fallback policy remain in `SceneLoader`, while Geometry merging, `batchObjectIndex` TSL state, materialize events, lazy BVH and disposal are core behavior. The index also includes `FireEffect` emitter setup, simulation/grid options, volumetric pass bounds, dynamic lights, and RenderPipeline output-effect integration.
7
+ The u-manager coverage from `docs/api-plugin-u-manager.md` focuses on `SceneInstanceObject`, `FacilityInstanceObject`, semantic floor proxies, loaders, examples, scene/facility layer selection, and editable static batching through `setEditableBatching()` / `SceneEditableBatchLayer`. Retrieval distinguishes default `SceneInstancedLayer` path/model instancing from the editable primary layer and its sibling `SceneEditableBatchFallback`. `SceneEditableBatchLayer` is documented as a thin adapter over core `EditableGeometryBatchLayer<SceneInstanceObject>`; URL loading and fallback policy remain in `SceneLoader`, while Geometry merging, `batchObjectIndex` TSL state, materialize events, lazy BVH and disposal are core behavior. Effects coverage includes `TSLEffects.outline()` options, selection/update/disposal lifecycle, RenderPipeline composition, ordinary `Object3D` and `InstanceObject` render-object/bounds-proxy behavior, and `examples/test_outline.html`. The index also includes `FireEffect` emitter setup, simulation/grid options, volumetric pass bounds, dynamic lights, and RenderPipeline output-effect integration.
8
8
 
9
9
  The Worker coverage from `docs/api-viewer.md` and `docs/examples-guide.md` explains the complete `OffscreenViewerHost` options/methods/events surface, main-thread canvas/input ownership, Worker-side Viewer creation, the `host.init()` / `initialized` renderer boundary versus the one-shot application `ready` boundary, structured-clone command boundaries, deduplicated ArrayBuffer transfer, built-in stats/viewpoint/render commands, rolling frame statistics, pre-ready fatal cleanup, canvas-transfer/post failures, initialization/disposal races, suppression of late business messages after disposal, browser and DOM-overlay limitations, and automatic aspect-preserving first-decode downscaling when ordinary images exceed the portable WebGPU `8192` texture limit. It also covers the nested model decoder Worker: static glTF/GLB/SBMX support and regular-loader/fatal-worker fallback, transferable buffers/bitmaps, serial ACK backpressure, bounded content-identity bitmap reuse, LoadingManager URL/lifecycle round-trips, same-origin credential isolation, safe node-graph validation, full-path cancellation, and identity-bound Worker disposal. `examples/offscreen/test_umanager2_offscreen.html` combines that decoder with OffscreenCanvas, `setEditableBatching()`, `compileAsync()`, standard transparent composition, native Three.js static-scene matrix updates, rolling frame-pacing statistics, and a visible-by-default semantic analysis overlay whose device selection, flight, highlight, and clear commands do not hide other objects. Explicit `InstanceObject.updateWorldMatrix(true, false)` and parent-group `updateWorldMatrix(true, true)` commits under a frozen root scene include instanced-buffer dirty propagation and editable-batch materialization.
10
10
 
@@ -155,7 +155,7 @@ export const docsIndex = [
155
155
  "id": "api-effects",
156
156
  "path": "api-effects.md",
157
157
  "title": "Effects API",
158
- "summary": "`u-space` 提供了两个基于 Three.js 着色语言(TSL/WebGPU 节点)的静态特效工具:`MaterialEffects` 用于为对象应用高亮、呼吸等材质特效,`TSLEffects` 用于生成动态颜色节点模式。 静态工具类,将基于 TSL 的视觉特效直接应用于对象的材质。适用于任何 `Object3D`(支持单个或数组),会自动遍历所有子网格。 当对象是 `InstanceObject`(例如 `SceneInstanceObject`、`FacilityInstanceObject` 或楼层里的 `FloorSemanticInstanceObject`)时,`highlightColor()` / `removeHighlightColor()` 会通过 `setInstanceHighlight()` / `clearInstanceHighlight()` 改",
158
+ "summary": "`u-space` 提供了两个基于 Three.js 着色语言(TSL/WebGPU 节点)的静态特效工具:`MaterialEffects` 用于为对象应用高亮、呼吸等材质特效,`TSLEffects` 用于生成动态颜色节点模式和可组合的 Outline 输出效果。 静态工具类,将基于 TSL 的视觉特效直接应用于对象的材质。适用于任何 `Object3D`(支持单个或数组),会自动遍历所有子网格。 当对象是 `InstanceObject`(例如 `SceneInstanceObject`、`FacilityInstanceObject` 或楼层里的 `FloorSemanticInstanceObject`)时,`highlightColor()` / `removeHighlightColor()` 会通过 `setInstanceHighlight()` / `clearInst",
159
159
  "headings": [
160
160
  {
161
161
  "level": 1,
@@ -205,6 +205,18 @@ export const docsIndex = [
205
205
  "level": 2,
206
206
  "text": "TSLEffects"
207
207
  },
208
+ {
209
+ "level": 3,
210
+ "text": "TSLEffects.outline(options?)"
211
+ },
212
+ {
213
+ "level": 4,
214
+ "text": "TSLOutlineOptions"
215
+ },
216
+ {
217
+ "level": 4,
218
+ "text": "返回的 TSLOutlineEffect"
219
+ },
208
220
  {
209
221
  "level": 3,
210
222
  "text": "TSLEffects.flow(parameters?)"
@@ -218,7 +230,7 @@ export const docsIndex = [
218
230
  "text": "TSLEffects.fluid(parameters?)"
219
231
  }
220
232
  ],
221
- "content": "# Effects API\n\n`u-space` 提供了两个基于 Three.js 着色语言(TSL/WebGPU 节点)的静态特效工具:`MaterialEffects` 用于为对象应用高亮、呼吸等材质特效,`TSLEffects` 用于生成动态颜色节点模式。\n\n## `MaterialEffects`\n\n静态工具类,将基于 TSL 的视觉特效直接应用于对象的材质。适用于任何 `Object3D`(支持单个或数组),会自动遍历所有子网格。\n当对象是 `InstanceObject`(例如 `SceneInstanceObject`、`FacilityInstanceObject` 或楼层里的 `FloorSemanticInstanceObject`)时,`highlightColor()` / `removeHighlightColor()` 会通过 `setInstanceHighlight()` / `clearInstanceHighlight()` 改写该实例的颜色和透明度,而不是改动共享 batch 材质。\n`InstanceObject` 支持 `overwrite` 的替换/染色语义;`depthWrite` 属于共享 batch 材质状态,不能按单个实例设置,因此对该类对象不会生效。\n\n特性:\n- **效果可叠加**:高亮和呼吸效果可同时作用于同一对象,呼吸在高亮结果之上混合\n- **共享材质安全**:按材质跟踪引用计数,多个 Mesh 共享材质时互不干扰\n- **完整还原**:移除效果时自动恢复材质原始的 `colorNode`、`opacityNode`、`transparent` 和 `depthWrite` 状态\n\n### `MaterialEffects.highlightColor(object, options?)`\n\n为对象中所有网格应用颜色/透明度高亮。\n\n```typescript\nimport { MaterialEffects } from 'u-space';\n\n// 以 50% 透明度高亮为红色(叠加模式)\nMaterialEffects.highlightColor(myModel, {\n color: 0xff0000,\n opacity: 0.5,\n overwrite: false, // false = 叠加(相乘),true = 完全替换颜色\n});\n\n// 半透明效果\nMaterialEffects.highlightColor(myModel, { opacity: 0.3 });\n\n// X 光效果(替换颜色 + 关闭深度写入)\nMaterialEffects.highlightColor(myModel, {\n color: 0x0088ff,\n opacity: 0.25,\n overwrite: true,\n depthWrite: false,\n});\n\n// 支持数组\nMaterialEffects.highlightColor([model1, model2], { color: 0x00ff00 });\n```\n\n#### `HighlightColorOptions`\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :---------- | :-------------------- | :---------- | :--------------------------------------------------------------------------- |\n| `color` | `ColorRepresentation` | `0xff0000` | 高亮颜色。 |\n| `opacity` | `number` | `0.5` | 高亮时材质的透明度。 |\n| `overwrite` | `boolean` | `false` | `false` = 与原始颜色相乘(叠加);`true` = 完全替换颜色。 |\n| `depthWrite` | `boolean` | — | 可选。设为 `false` 可产生 X 光透视效果。不设置时保持原始值。 |\n| `multiplyOpacity` | `boolean` | `false` | 可选。设为 `true` 时高亮透明度会与材质原始透明度相乘,主要用于语义 fallback 模型内部。 |\n\n### `MaterialEffects.removeHighlightColor(object)`\n\n移除高亮效果。当对象上所有效果都被移除后,材质将完整恢复到原始状态。\n\n```typescript\nMaterialEffects.removeHighlightColor(myModel);\n```\n\n### `MaterialEffects.breatheColor(object, options?)`\n\n为对象应用呼吸灯效果,颜色在材质原色与目标颜色之间随时间脉冲变化。需要 `viewer.frameloop = 'always'`。\n\n```typescript\nMaterialEffects.breatheColor(myModel, {\n color: 0x00ff00,\n speed: 1.0,\n intensity: 2.0,\n});\nviewer.frameloop = 'always';\n```\n\n#### `BreatheColorOptions`\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :---------- | :-------------------- | :---------- | :--------------------------------- |\n| `color` | `ColorRepresentation` | `0x00ff00` | 呼吸目标颜色。 |\n| `speed` | `number` | `1.0` | 振荡速度。 |\n| `intensity` | `number` | `2.0` | 控制峰值的锐度。 |\n\n### `MaterialEffects.removeBreatheColor(object)`\n\n移除呼吸效果。\n\n```typescript\nMaterialEffects.removeBreatheColor(myModel);\n```\n\n### `MaterialEffects.wireframe(object, enabled?)`\n\n开启或关闭线框渲染模式。\n\n```typescript\nMaterialEffects.wireframe(myModel); // 开启线框\nMaterialEffects.wireframe(myModel, false); // 关闭线框\nMaterialEffects.removeWireframe(myModel); // 等同于 wireframe(obj, false)\n```\n\n### `MaterialEffects.fadeIn(object, options?)` / `MaterialEffects.fadeOut(object, options?)`\n\n淡入/淡出动画效果。返回 `Promise`,在动画完成后 resolve。淡出后对象材质保持透明状态。\n\n```typescript\n// 淡出\nawait MaterialEffects.fadeOut(myModel, { duration: 1000 });\n\n// 淡入\nawait MaterialEffects.fadeIn(myModel, { duration: 500 });\n```\n\n> 动画期间需要持续渲染,建议配合 `viewer.frameloop = 'always'` 使用。\n\n#### `FadeOptions`\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :--------- | :------- | :----- | :------------------ |\n| `duration` | `number` | `500` | 动画时长(毫秒)。 |\n\n---\n\n## `TSLEffects`\n\n静态工厂类,返回 TSL 颜色节点。将返回值赋给 `NodeMaterial` 的 `material.colorNode` 即可应用动态着色器特效。持续动画需要 `viewer.frameloop = 'always'`。\n\n### `TSLEffects.flow(parameters?)`\n\n沿网格 UV X 轴方向的定向光扫效果,适用于道路、管道和流线。\n\n```typescript\nimport { TSLEffects } from 'u-space';\n\nmyTubeMesh.material.colorNode = TSLEffects.flow({\n baseColor: 0x001133,\n flowColor: 0x00aaff,\n speed: 1.5,\n scale: 4.0,\n intensity: 6.0,\n});\nviewer.frameloop = 'always';\n```\n\n**参数:**\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :---------- | :-------------------- | :---------- | :------------------------------------------------ |\n| `baseColor` | `ColorRepresentation` | `0xffffff` | 背景/底色。 |\n| `flowColor` | `ColorRepresentation` | `0x00ff00` | 扫光高亮颜色。 |\n| `speed` | `number` | `1.0` | 动画速度(越高扫光越快)。 |\n| `scale` | `number` | `3.0` | 图案的空间频率。 |\n| `intensity` | `number` | `4.0` | 峰值锐度,值越高光束越细。 |\n\n### `TSLEffects.breathe(parameters?)`\n\n在两种颜色之间随时间振荡的脉冲发光效果,适合状态指示器和警报。\n\n```typescript\nmyMesh.material.colorNode = TSLEffects.breathe({\n baseColor: 0x333333,\n breathColor: 0x00ff88,\n speed: 2.0,\n intensity: 3.0,\n});\n```\n\n**参数:**\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :------------ | :-------------------- | :---------- | :--------------------------------- |\n| `baseColor` | `ColorRepresentation` | `0xffffff` | 低/静息状态的颜色。 |\n| `breathColor` | `ColorRepresentation` | `0x00ff00` | 峰值亮度时的颜色。 |\n| `speed` | `number` | `1.0` | 振荡速度。 |\n| `intensity` | `number` | `2.0` | 控制峰值的锐度。 |\n\n### `TSLEffects.fluid(parameters?)`\n\n噪声扭曲的流动效果,适用于水面、等离子体或有机流动材质。\n\n```typescript\nmyPlaneMesh.material.colorNode = TSLEffects.fluid({\n baseColor: 0x002244,\n flowColor: 0x0066ff,\n speed: 0.5,\n scale: 2.0,\n intensity: 1.5,\n distortion: 0.3,\n});\n```\n\n**参数:**\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :----------- | :-------------------- | :---------- | :-------------------------------------------- |\n| `baseColor` | `ColorRepresentation` | `0xffffff` | 基础颜色。 |\n| `flowColor` | `ColorRepresentation` | `0x0000ff` | 流体高亮颜色。 |\n| `speed` | `number` | `1.0` | 动画速度。 |\n| `scale` | `number` | `1.0` | 噪声图案的 UV 缩放比例。 |\n| `intensity` | `number` | `1.0` | 流体图案的锐度。 |\n| `distortion` | `number` | `0.5` | 采样前噪声对 UV 的扭曲程度。 |\n"
233
+ "content": "# Effects API\n\n`u-space` 提供了两个基于 Three.js 着色语言(TSL/WebGPU 节点)的静态特效工具:`MaterialEffects` 用于为对象应用高亮、呼吸等材质特效,`TSLEffects` 用于生成动态颜色节点模式和可组合的 Outline 输出效果。\n\n## `MaterialEffects`\n\n静态工具类,将基于 TSL 的视觉特效直接应用于对象的材质。适用于任何 `Object3D`(支持单个或数组),会自动遍历所有子网格。\n当对象是 `InstanceObject`(例如 `SceneInstanceObject`、`FacilityInstanceObject` 或楼层里的 `FloorSemanticInstanceObject`)时,`highlightColor()` / `removeHighlightColor()` 会通过 `setInstanceHighlight()` / `clearInstanceHighlight()` 改写该实例的颜色和透明度,而不是改动共享 batch 材质。\n`InstanceObject` 支持 `overwrite` 的替换/染色语义;`depthWrite` 属于共享 batch 材质状态,不能按单个实例设置,因此对该类对象不会生效。\n\n特性:\n- **效果可叠加**:高亮和呼吸效果可同时作用于同一对象,呼吸在高亮结果之上混合\n- **共享材质安全**:按材质跟踪引用计数,多个 Mesh 共享材质时互不干扰\n- **完整还原**:移除效果时自动恢复材质原始的 `colorNode`、`opacityNode`、`transparent` 和 `depthWrite` 状态\n\n### `MaterialEffects.highlightColor(object, options?)`\n\n为对象中所有网格应用颜色/透明度高亮。\n\n```typescript\nimport { MaterialEffects } from 'u-space';\n\n// 以 50% 透明度高亮为红色(叠加模式)\nMaterialEffects.highlightColor(myModel, {\n color: 0xff0000,\n opacity: 0.5,\n overwrite: false, // false = 叠加(相乘),true = 完全替换颜色\n});\n\n// 半透明效果\nMaterialEffects.highlightColor(myModel, { opacity: 0.3 });\n\n// X 光效果(替换颜色 + 关闭深度写入)\nMaterialEffects.highlightColor(myModel, {\n color: 0x0088ff,\n opacity: 0.25,\n overwrite: true,\n depthWrite: false,\n});\n\n// 支持数组\nMaterialEffects.highlightColor([model1, model2], { color: 0x00ff00 });\n```\n\n#### `HighlightColorOptions`\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :---------- | :-------------------- | :---------- | :--------------------------------------------------------------------------- |\n| `color` | `ColorRepresentation` | `0xff0000` | 高亮颜色。 |\n| `opacity` | `number` | `0.5` | 高亮时材质的透明度。 |\n| `overwrite` | `boolean` | `false` | `false` = 与原始颜色相乘(叠加);`true` = 完全替换颜色。 |\n| `depthWrite` | `boolean` | — | 可选。设为 `false` 可产生 X 光透视效果。不设置时保持原始值。 |\n| `multiplyOpacity` | `boolean` | `false` | 可选。设为 `true` 时高亮透明度会与材质原始透明度相乘,主要用于语义 fallback 模型内部。 |\n\n### `MaterialEffects.removeHighlightColor(object)`\n\n移除高亮效果。当对象上所有效果都被移除后,材质将完整恢复到原始状态。\n\n```typescript\nMaterialEffects.removeHighlightColor(myModel);\n```\n\n### `MaterialEffects.breatheColor(object, options?)`\n\n为对象应用呼吸灯效果,颜色在材质原色与目标颜色之间随时间脉冲变化。需要 `viewer.frameloop = 'always'`。\n\n```typescript\nMaterialEffects.breatheColor(myModel, {\n color: 0x00ff00,\n speed: 1.0,\n intensity: 2.0,\n});\nviewer.frameloop = 'always';\n```\n\n#### `BreatheColorOptions`\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :---------- | :-------------------- | :---------- | :--------------------------------- |\n| `color` | `ColorRepresentation` | `0x00ff00` | 呼吸目标颜色。 |\n| `speed` | `number` | `1.0` | 振荡速度。 |\n| `intensity` | `number` | `2.0` | 控制峰值的锐度。 |\n\n### `MaterialEffects.removeBreatheColor(object)`\n\n移除呼吸效果。\n\n```typescript\nMaterialEffects.removeBreatheColor(myModel);\n```\n\n### `MaterialEffects.wireframe(object, enabled?)`\n\n开启或关闭线框渲染模式。\n\n```typescript\nMaterialEffects.wireframe(myModel); // 开启线框\nMaterialEffects.wireframe(myModel, false); // 关闭线框\nMaterialEffects.removeWireframe(myModel); // 等同于 wireframe(obj, false)\n```\n\n### `MaterialEffects.fadeIn(object, options?)` / `MaterialEffects.fadeOut(object, options?)`\n\n淡入/淡出动画效果。返回 `Promise`,在动画完成后 resolve。淡出后对象材质保持透明状态。\n\n```typescript\n// 淡出\nawait MaterialEffects.fadeOut(myModel, { duration: 1000 });\n\n// 淡入\nawait MaterialEffects.fadeIn(myModel, { duration: 500 });\n```\n\n> 动画期间需要持续渲染,建议配合 `viewer.frameloop = 'always'` 使用。\n\n#### `FadeOptions`\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :--------- | :------- | :----- | :------------------ |\n| `duration` | `number` | `500` | 动画时长(毫秒)。 |\n\n---\n\n## `TSLEffects`\n\n静态工厂类。`flow()`、`breathe()` `fluid()` 返回可赋给 `NodeMaterial.colorNode` 的 TSL 颜色节点;`outline()` 返回接入 `RenderPipeline` 的输出效果。持续动画需要 `viewer.frameloop = 'always'`。\n\n### `TSLEffects.outline(options?)`\n\n创建基于 Three.js `OutlineNode` 的屏幕空间描边效果。它不会修改对象材质,而是通过 `RenderPipeline.addOutputEffect()` 叠加在默认渲染结果上,因此可以与内置 Bloom、SSGI、SSR 以及其他 output effects 组合。\n\n```typescript\nimport { TSLEffects } from 'u-space';\n\nconst outline = TSLEffects.outline({\n selectedObjects: [model],\n edgeStrength: 3,\n edgeThickness: 1.5,\n edgeGlow: 0,\n visibleEdgeColor: 0x00e5ff,\n hiddenEdgeColor: 0xff4d6d,\n downSampleRatio: 2,\n instanceBoundsProxy: true,\n instanceBoundsPadding: 0.05,\n});\n\nviewer.renderPipeline.addOutputEffect(outline);\n\n// 替换当前描边对象,不需要重建后处理链。\noutline.setSelectedObjects([anotherObject]);\n\n// 运行时更新样式与 InstanceObject bounds proxy 参数。\noutline.update({ edgeStrength: 4, edgeGlow: 0.25 });\nviewer.render();\n\n// 销毁前先从 RenderPipeline 移除。\nviewer.renderPipeline.removeOutputEffect(outline);\noutline.dispose();\n```\n\n#### `TSLOutlineOptions`\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :--- | :--- | :--- | :--- |\n| `selectedObjects` | `readonly Object3D[]` | `[]` | 初始描边对象。普通 Mesh、Group 与核心 `InstanceObject` 均可传入。 |\n| `edgeStrength` | `number` | `3` | 边缘颜色强度。 |\n| `edgeThickness` | `number` | `1` | 边缘厚度。 |\n| `edgeGlow` | `number` | `0` | 描边向外扩散的发光强度。 |\n| `visibleEdgeColor` | `ColorRepresentation` | `0xffffff` | 可见边缘颜色。 |\n| `hiddenEdgeColor` | `ColorRepresentation` | `0x4e3636` | 被遮挡边缘颜色。 |\n| `downSampleRatio` | `number` | `2` | Outline pass 降采样比例;非有限值或 `<= 0` 时恢复为 `2`。值越大成本越低,但边缘精度也越低。 |\n| `instanceBoundsProxy` | `boolean` | `true` | `InstanceObject` 没有可直接描边的渲染子树时,是否用世界包围盒代理生成轮廓。 |\n| `instanceBoundsPadding` | `number` | `0` | bounds proxy 每个方向额外扩张的世界单位。 |\n| `instanceBoundsMinSize` | `number` | `0.001` | bounds proxy 每个轴向的最小尺寸,避免退化包围盒无法描边。 |\n\n#### 返回的 `TSLOutlineEffect`\n\n| 成员 | 说明 |\n| :--- | :--- |\n| `selectedObjects` | 当前逻辑选择对象的只读快照。 |\n| `outlineNode` | 当前内部 `OutlineNode`;在 RenderPipeline 首次构建前为 `null`,Scene 或 Camera 变化后可能被替换。 |\n| `setSelectedObjects(objects)` | 替换当前选择并返回自身,便于链式调用。空数组会清除描边。 |\n| `update(options)` | 更新除 `selectedObjects` 外的全部样式和 bounds proxy 选项,并返回自身。 |\n| `dispose()` | 释放内部 OutlineNode、代理 Geometry/Material 和 dirty 订阅。调用前应先 `removeOutputEffect()`。 |\n\n对于 `InstanceObject`,效果会优先描边 `getInstanceRenderObject()` 返回的可渲染对象;如果逻辑对象自身包含 Mesh/Sprite,则直接使用该对象;只有两者都不可用时才根据 `getInstanceBoundingBox()` 创建不可见 bounds proxy。代理会监听 `onInstanceRenderDirty()`,在实例显隐、变换或包围盒变化后同步,而且不会参与拾取、颜色输出或阴影。\n\n> 如果业务设置了自定义 `viewer.renderPipeline.setOutputComposer()`,RenderPipeline 会按自定义 composer 语义跳过所有 output effects,Outline 也不会显示。更新选择或参数后,`frameloop = 'demand'` 的 Viewer 需要调用 `viewer.render()` 或 `viewer.invalidate()` 请求新帧。\n\n[在线示例](https://u-space-phi.vercel.app/examples/test_outline.html)\n\n### `TSLEffects.flow(parameters?)`\n\n沿网格 UV X 轴方向的定向光扫效果,适用于道路、管道和流线。\n\n```typescript\nimport { TSLEffects } from 'u-space';\n\nmyTubeMesh.material.colorNode = TSLEffects.flow({\n baseColor: 0x001133,\n flowColor: 0x00aaff,\n speed: 1.5,\n scale: 4.0,\n intensity: 6.0,\n});\nviewer.frameloop = 'always';\n```\n\n**参数:**\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :---------- | :-------------------- | :---------- | :------------------------------------------------ |\n| `baseColor` | `ColorRepresentation` | `0xffffff` | 背景/底色。 |\n| `flowColor` | `ColorRepresentation` | `0x00ff00` | 扫光高亮颜色。 |\n| `speed` | `number` | `1.0` | 动画速度(越高扫光越快)。 |\n| `scale` | `number` | `3.0` | 图案的空间频率。 |\n| `intensity` | `number` | `4.0` | 峰值锐度,值越高光束越细。 |\n\n### `TSLEffects.breathe(parameters?)`\n\n在两种颜色之间随时间振荡的脉冲发光效果,适合状态指示器和警报。\n\n```typescript\nmyMesh.material.colorNode = TSLEffects.breathe({\n baseColor: 0x333333,\n breathColor: 0x00ff88,\n speed: 2.0,\n intensity: 3.0,\n});\n```\n\n**参数:**\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :------------ | :-------------------- | :---------- | :--------------------------------- |\n| `baseColor` | `ColorRepresentation` | `0xffffff` | 低/静息状态的颜色。 |\n| `breathColor` | `ColorRepresentation` | `0x00ff00` | 峰值亮度时的颜色。 |\n| `speed` | `number` | `1.0` | 振荡速度。 |\n| `intensity` | `number` | `2.0` | 控制峰值的锐度。 |\n\n### `TSLEffects.fluid(parameters?)`\n\n噪声扭曲的流动效果,适用于水面、等离子体或有机流动材质。\n\n```typescript\nmyPlaneMesh.material.colorNode = TSLEffects.fluid({\n baseColor: 0x002244,\n flowColor: 0x0066ff,\n speed: 0.5,\n scale: 2.0,\n intensity: 1.5,\n distortion: 0.3,\n});\n```\n\n**参数:**\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :----------- | :-------------------- | :---------- | :-------------------------------------------- |\n| `baseColor` | `ColorRepresentation` | `0xffffff` | 基础颜色。 |\n| `flowColor` | `ColorRepresentation` | `0x0000ff` | 流体高亮颜色。 |\n| `speed` | `number` | `1.0` | 动画速度。 |\n| `scale` | `number` | `1.0` | 噪声图案的 UV 缩放比例。 |\n| `intensity` | `number` | `1.0` | 流体图案的锐度。 |\n| `distortion` | `number` | `0.5` | 采样前噪声对 UV 的扭曲程度。 |\n"
222
234
  },
223
235
  {
224
236
  "id": "api-interactions",
@@ -749,7 +761,7 @@ export const docsIndex = [
749
761
  "text": "dispose()"
750
762
  }
751
763
  ],
752
- "content": "# Objects API\n\n`u-space` 提供了若干对象封装类,主要扩展自 Three.js 的基础节点,使 3D 资产的操作和加载更加便捷。\n\n## 基础类\n\n### `BaseMesh`\n\n继承自 `THREE.Mesh`,`u-space` 中所有基础网格类都继承于此。\n\n**关键属性:**\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :--------------------------- | :-------- | :----- | :------------------------------------------------------------- |\n| `castShadow` | `boolean` | `true` | 默认参与阴影投射;可在单个对象上改为 `false`。 |\n| `receiveShadow` | `boolean` | `true` | 默认接收阴影;可在不需要阴影的网格上改为 `false`。 |\n| `ignoreInvisibleWhenRaycast` | `boolean` | `true` | 为 `true` 时,不可见的网格在射线检测时会被跳过(不参与碰撞)。 |\n\n### `BaseGroup`\n\n继承自 `THREE.Group`,`Model` 和 `Topology` 均继承于此。\n\n**关键属性:**\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :--------------------------- | :-------- | :----- | :--------------------------------------------------------------- |\n| `ignoreInvisibleWhenRaycast` | `boolean` | `true` | 为 `true` 时,不可见的组在射线检测时会被跳过(不参与碰撞)。 |\n\n## `InstanceObject`\n\n`InstanceObject` 是核心包导出的统一实例对象基类。无论实例最终由合并楼层几何、`InstancedMesh`、`EditableGeometryBatchLayer` 还是 fallback `Model` 渲染,业务代码都可以使用相同的身份、显隐、颜色、透明度、高亮、包围盒和 materialize API。\n\n```typescript\nimport {\n InstanceObject,\n isInstanceObject,\n INSTANCE_COLOR_MODE_NONE,\n INSTANCE_COLOR_MODE_OVERRIDE,\n INSTANCE_COLOR_MODE_TINT,\n} from 'u-space';\n```\n\n### 类型和常量\n\n#### `InstanceStyle`\n\n| 属性 | 类型 | 说明 |\n| :---------- | :-------------- | :------------------------------------------------------ |\n| `color` | `Color \\| null` | 当前样式颜色;`null` 表示不使用实例颜色。 |\n| `colorMode` | `number` | 当前颜色模式,值为下表中的颜色模式常量。 |\n| `opacity` | `number` | 当前透明度,实例设置 API 会将其限制在 `0` 到 `1` 之间。 |\n\n#### `InstanceObjectOptions`\n\n| 属性 | 类型 | 必填 | 默认值 | 说明 |\n| :------------ | :------- | :--- | :----------------- | :------------------------- |\n| `boundsName?` | `string` | 否 | `'InstanceBounds'` | 内部手动包围盒节点的名称。 |\n\n#### `InstanceIdentity`\n\n| 属性 | 类型 | 必填 | 说明 |\n| :------ | :--------------- | :--- | :------------------------------------------------------ |\n| `id?` | `string \\| null` | 否 | 实例 ID。省略时保持原值,显式传 `null` 时清为空字符串。 |\n| `kind?` | `string \\| null` | 否 | 实例类型。省略时保持原值,显式传 `null` 时清为空字符串。 |\n| `name?` | `string \\| null` | 否 | 实例名称。省略时保持原值,显式传 `null` 时清为空字符串。 |\n\n`InstanceIdentity` 的三个字段都可省略且可为 `null`:省略的字段保持不变,显式传入 `null` 会将对应身份字段清为空字符串。\n\n#### 颜色模式常量\n\n| 常量 | 值 | 说明 |\n| :----------------------------- | :-: | :--------------------------------------------- |\n| `INSTANCE_COLOR_MODE_NONE` | `0` | 不使用实例颜色。 |\n| `INSTANCE_COLOR_MODE_OVERRIDE` | `1` | 使用指定颜色覆盖原材质颜色。 |\n| `INSTANCE_COLOR_MODE_TINT` | `2` | 将指定颜色作为 tint 与原材质颜色混合。 |\n\n### 字段\n\n| 字段 | 类型 | 默认值 | 说明 |\n| :--------------- | :------------------ | :----------------- | :------------------------------------------------------- |\n| `isInstanceObject` | `boolean` | `true` | 实例对象标识,供 `isInstanceObject()` 类型守卫使用。 |\n| `type` | `string` | `'InstanceObject'` | Three.js 对象类型名称。 |\n| `instanceId` | `string` | `''` | 实例 ID。 |\n| `instanceKind` | `string` | `''` | 实例类型。 |\n| `instanceName` | `string` | `''` | 实例名称。 |\n| `geometry` | `BufferGeometry` | 空几何体 | 实例对象公开的兼容几何体字段。 |\n| `boundingBox` | `Box3 \\| null` | `null` | 本地坐标包围盒缓存。 |\n| `boundingSphere` | `Sphere \\| null` | `null` | 本地坐标包围球缓存。 |\n\n### 构造函数\n\n#### `new InstanceObject(options?)`\n\n```typescript\nconst instance = new InstanceObject({ boundsName: 'FloorBounds' });\n```\n\n`options` 的类型为 `InstanceObjectOptions`;省略时使用默认的内部包围盒节点名称 `InstanceBounds`。\n\n### 身份和样式\n\n身份、显隐和基础样式方法都返回当前实例,可以链式调用:\n\n```typescript\nconst instance = new InstanceObject()\n .setInstanceIdentity({ id: 'room-101', kind: 'room', name: '会议室 101' })\n .setInstanceVisible(true)\n .setInstanceColor('#4f8cff')\n .setInstanceOpacity(0.65);\n\ninstance.setInstanceHighlight('#ffff00', 0.9);\ninstance.clearInstanceHighlight();\ninstance.resetInstanceColor();\n```\n\n| 方法 | 返回值 | 说明 |\n| :--- | :----- | :--- |\n| `setInstanceIdentity(identity: InstanceIdentity)` | `this` | 更新身份字段;省略字段保持不变,`null` 将对应字段清为空字符串。 |\n| `setInstanceVisible(visible: boolean)` | `this` | 设置实例显隐并标记渲染数据需要同步。 |\n| `setInstanceColor(color: ColorRepresentation)` | `this` | 设置基础覆盖色,颜色模式变为 `INSTANCE_COLOR_MODE_OVERRIDE`。 |\n| `resetInstanceColor()` | `this` | 清除基础颜色,颜色模式恢复为 `INSTANCE_COLOR_MODE_NONE`。 |\n| `setInstanceOpacity(opacity: number)` | `this` | 设置基础透明度;传入值会被限制在 `0` 到 `1` 之间。 |\n| `getInstanceColor(target = new Color())` | `Color` | 将当前生效样式的颜色写入 `target` 并返回;未设置颜色时返回白色。 |\n| `hasInstanceColor()` | `boolean` | 当前生效样式是否包含颜色。 |\n| `getInstanceOpacity()` | `number` | 返回当前生效样式的透明度。 |\n| `setInstanceHighlight(color: ColorRepresentation, opacity: number, overwrite = false)` | `this` | 设置临时高亮;默认使用 `INSTANCE_COLOR_MODE_TINT`,`overwrite` 为 `true` 时使用覆盖模式,透明度会被限制在 `0` 到 `1` 之间。 |\n| `clearInstanceHighlight()` | `this` | 清除临时高亮并恢复基础样式。 |\n| `getInstanceColorMode()` | `number` | 返回当前生效样式的颜色模式。 |\n\n临时高亮优先于基础颜色和透明度;`clearInstanceHighlight()` 会恢复基础样式。默认场景矩阵自动更新开启时,实例 transform 的世界矩阵发生变化会自动触发 dirty callback,所属 `ModelInstancedLayer` 会在下一次渲染前同步 instance buffer。业务代码只需修改 `position`、`rotation`、`quaternion` 或 `scale`,不需要直接写内部 instance matrix,也不需要手动调用 `InstanceObject.updateMatrixWorld()`。\n\n如果为大型静态场景显式设置了 `viewer.scene.matrixWorldAutoUpdate = false`,renderer 不会再遍历该根节点,修改后必须用 Three.js 原生方法提交受影响范围并请求新帧:\n\n```typescript\ninstance.position.set(10, 0, 5);\ninstance.updateWorldMatrix(true, false);\nviewer.invalidate();\n\n// 修改父 Group 时更新整个受影响子树。\ngroup.updateWorldMatrix(true, true);\nviewer.invalidate();\n```\n\n`InstanceObject` 覆盖了原生 `updateWorldMatrix(updateParents, updateChildren)` 和 `updateMatrixWorld(force)`,两条路径都会检测世界矩阵及祖先显隐变化并触发 dirty callback。对 Group 使用 `updateChildren: true` 时,后代 `InstanceObject` 也会执行该检测;editable batch 中与烘焙矩阵不同的 `SceneInstanceObject` 会按合批规则 materialize。\n\n### 包围盒和相机定位\n\n`boundingBox` 和 `boundingSphere` 是本地坐标缓存;`computeBoundingBox()` 与 `computeBoundingSphere()` 会按需更新它们。`getInstanceBoundingBox(target, true)` 返回世界坐标包围盒。\n\n| 方法 | 返回值 | 说明 |\n| :--- | :----- | :--- |\n| `setInstanceBounds(bounds: Box3)` | `this` | 克隆并设置手动本地包围盒;空包围盒会被忽略。 |\n| `computeBoundingBox()` | `void` | 计算并缓存本地坐标包围盒。 |\n| `computeBoundingSphere()` | `void` | 基于本地包围盒计算并缓存本地坐标包围球。 |\n| `getInstanceBoundingBox(target = new Box3(), world = false)` | `Box3` | 将包围盒写入 `target`;`world` 为 `true` 时返回世界坐标结果。 |\n\n实例可以直接交给相机控制器定位:\n\n```typescript\nawait viewer.controls.flyToObject(instance);\n```\n\n当实例没有可供计算的渲染几何体,或业务端已经拥有精确范围时,可以手动提供本地包围盒并按需获取世界范围:\n\n```typescript\nimport { Box3, Vector3 } from 'three/webgpu';\n\ninstance\n .setInstanceBounds(new Box3(\n new Vector3(-2, 0, -3),\n new Vector3(2, 4, 3),\n ))\n .position.set(100, 0, 50);\n\nconst worldBounds = instance.getInstanceBoundingBox(new Box3(), true);\n```\n\n### Fallback 渲染对象\n\n`setInstanceRenderObject()` 用于挂载无法进入合并几何或 `InstancedMesh` 管线的 fallback Three.js 对象。`InstanceObject` 会将当前显隐、颜色、透明度和高亮语义统一应用到该对象。\n\n| 方法 | 返回值 | 说明 |\n| :--- | :----- | :--- |\n| `setInstanceRenderObject(object: Object3D \\| null)` | `this` | 替换 fallback 渲染对象;传入 `null` 时解除当前对象。 |\n| `getInstanceRenderObject()` | `Object3D \\| null` | 返回当前 fallback 渲染对象。 |\n| `setInstanceMaterializer(materializer)` | `this` | 设置 batching 实现使用的低层 materialize delegate;传入 `null` 时解除。普通业务通常不直接调用。 |\n| `clearInstanceMaterializer(materializer?)` | `this` | 不传参数时直接解除;传入 delegate 时只在当前 delegate 与其相同时解除,用于安全释放 materializer 所有权。 |\n| `materialize()` | `Object3D \\| null` | 调用当前 materializer;未连接 materializer 时返回已有 fallback render object 或 `null`。 |\n\n```typescript\nimport { Model } from 'u-space';\n\nconst fallbackModel = new Model();\nawait fallbackModel.loadAsync({ url: '/models/special-room.glb' });\n\ninstance\n .setInstanceRenderObject(fallbackModel)\n .setInstanceColor('#ff8a3d')\n .setInstanceOpacity(0.8);\n```\n\n`EditableGeometryBatchLayer` 会自动连接 `setInstanceMaterializer()`,并在 dispose 时通过所有权匹配安全解除。当实例 transform 或半透明状态无法继续由烘焙 Geometry 表达时,layer 会 clone 完整模板、克隆独立材质并挂到当前实例,同时立即提交新对象的世界矩阵并让其他 active layer 隐藏同一实例的旧烘焙副本;业务也可以显式调用 `instance.materialize()`。完整构建、unsupported fallback 和事件语义见 [Batches API](./api-batches#editablegeometrybatchlayer)。\n\n### Dirty callback\n\n| 方法 | 返回值 | 说明 |\n| :--- | :----- | :--- |\n| `onInstanceRenderDirty(callback: () => void)` | `() => boolean` | 注册 dirty callback,并返回用于取消订阅的函数。 |\n| `markInstanceRenderDirty()` | `this` | 立即通知所有已注册的 dirty callback。 |\n\n保存并调用取消订阅函数,避免监听方销毁后遗留回调:\n\n```typescript\nconst dirtyInstances = new Set<InstanceObject>();\nconst unsubscribe = instance.onInstanceRenderDirty(() => {\n dirtyInstances.add(instance);\n});\n\n// 不再需要监听时\nunsubscribe();\ndirtyInstances.delete(instance);\n```\n\n### 类型守卫\n\n#### `isInstanceObject(object)`\n\n`isInstanceObject(object: Object3D): object is InstanceObject` 检查对象的 `isInstanceObject` 标识,并在 TypeScript 中将其收窄为 `InstanceObject`。\n\n```typescript\nif (isInstanceObject(object)) {\n object.setInstanceHighlight('#ffff00', 1);\n}\n```\n\n## 模型\n\n`Model` 类继承自 `BaseGroup`(进而继承自 `THREE.Group`),简化了异步加载 `glb`、`gltf` 等外部 3D 模型的流程,内置多层缓存支持。\n\n```typescript\nimport { Model } from 'u-space';\n\nconst myModel = new Model();\n```\n\n### 加载资产\n\n`loadAsync` 方法负责从 URL 加载资产并将其添加到组中。\n\n```typescript\nawait myModel.loadAsync(parameters: ModelParameters)\n```\n\n#### `ModelParameters`\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :----------- | :-------- | :----- | :-------------------------------------------------------------------------------------- |\n| `url` | `string` | — | `.gltf` 或 `.glb` 文件的 URL。 |\n| `cache` | `boolean` | `true` | 启用内存缓存。若模型已加载过,则直接从内存中获取并克隆。 |\n| `persistent` | `boolean` | `true` | 使用浏览器 Cache API 启用持久化磁盘缓存,适合较大的模型。 |\n\n#### 缓存示例\n\n```javascript\n// 默认开启双层缓存,直接加载即可\nconst model1 = new Model();\nmodel1.loadAsync({ url: 'model.glb' });\n\n// 禁用内存缓存(每次都从网络或持久化缓存重新加载)\nconst model2 = new Model();\nmodel2.loadAsync({ url: 'model.glb', cache: false });\n\n// 完全禁用缓存\nconst model3 = new Model();\nmodel3.loadAsync({ url: 'model.glb', cache: false, persistent: false });\n```\n\n### 动画\n\n`Model` 在加载含内置动画的模型(如 glTF/FBX)后,会自动初始化 `AnimationMixer` 并收集 `AnimationClip`。\n\n**属性:**\n\n| 属性 | 类型 | 说明 |\n| :----------- | :-------------------------- | :----------------------------------------- |\n| `mixer` | `AnimationMixer \\| null` | 动画混合器,加载含动画模型后自动创建。 |\n| `animations` | `AnimationClip[]` | 模型内置的动画片段列表。 |\n\n#### `playAnimation(nameOrIndex?, options?)`\n\n播放指定动画。不传参时播放第一个动画。\n\n```typescript\n// 按名称播放\nmodel.playAnimation('Walk');\n\n// 按索引播放\nmodel.playAnimation(0);\n\n// 带选项\nmodel.playAnimation('Run', {\n loop: true, // 是否循环(默认 true)\n repetitions: 3, // 循环次数(默认 Infinity)\n timeScale: 1.5, // 播放速度(默认 1)\n clampWhenFinished: true, // 播放结束后停留在最后一帧(默认 false)\n});\n```\n\n#### `playAllAnimations(options?)`\n\n播放模型所有内置动画。参数同 `playAnimation`。\n\n```typescript\nmodel.playAllAnimations({ timeScale: 2 });\n```\n\n#### `stopAnimation(nameOrIndex?)`\n\n停止指定动画。不传参时停止所有动画。\n\n```typescript\nmodel.stopAnimation('Walk'); // 停止指定动画\nmodel.stopAnimation(); // 停止所有动画\n```\n\n#### `updateAnimation(delta)`\n\n推进动画时间,需在渲染循环中调用。`delta` 为帧间隔时间(秒),可从 Viewer 事件的 `delta` 属性获取。\n\n```typescript\nviewer.addEventListener('beforeRender', (e) => {\n model.updateAnimation(e.delta);\n});\n```\n\n### 空间查询\n\n#### `getBoundingBox()`\n\n获取模型的轴对齐包围盒(AABB)。\n\n```typescript\nconst box = myModel.getBoundingBox();\nconst size = box.getSize(new Vector3());\nconsole.log('模型尺寸:', size);\n```\n\n#### `getCenter()`\n\n获取模型包围盒的中心点。\n\n```typescript\nconst center = myModel.getCenter();\nconsole.log('模型中心:', center);\n```\n\n### 材质操作\n\n#### `setMaterial(material)`\n\n将模型内所有 Mesh 的材质统一替换为指定材质。\n\n```typescript\nimport { MeshStandardMaterial } from 'three/webgpu';\n\nmyModel.setMaterial(new MeshStandardMaterial({ color: 0xff0000 }));\n```\n\n### 清除缓存\n\n可通过 `Model` 类的静态方法手动清除内部缓存:\n\n- `Model.clearMemoryCache()`:清除运行时内存缓存。\n- `await Model.clearPersistentCache()`:完全清除浏览器中 `u-space` 模型的持久化缓存。\n\n## 网格\n\n`u-space` 提供了多种精简的网格类,均继承自 `BaseMesh`。所有类默认使用 `MeshStandardNodeMaterial`,构造函数接受 `{ geometryParameters, materialParameters }` 参数,并支持交互事件分发。\n\n### `SphereMesh`\n\n```typescript\nimport { SphereMesh } from 'u-space';\n\nconst sphere = new SphereMesh({\n geometryParameters: { radius: 1, widthSegments: 32, heightSegments: 32 },\n materialParameters: { color: 0x0077ff },\n});\n```\n\n**`SphereMeshParameters`**\n\n| 属性 | 类型 | 说明 |\n| :-------------------- | :----------------------------------- | :----------------------------------------------- |\n| `geometryParameters` | `SphereGeometry` 构造函数参数 | `radius`、`widthSegments`、`heightSegments` 等。 |\n| `materialParameters` | `MeshStandardNodeMaterialParameters` | 标准材质选项(颜色等)。 |\n\n### `PlaneMesh`\n\n水平平面网格。\n\n```typescript\nimport { PlaneMesh } from 'u-space';\n\nconst plane = new PlaneMesh({\n geometryParameters: { width: 10, height: 10 },\n materialParameters: { color: 0x888888 },\n});\n```\n\n### `CircleMesh`\n\n圆形平面网格。\n\n```typescript\nimport { CircleMesh } from 'u-space';\n\nconst circle = new CircleMesh({\n geometryParameters: { radius: 5, segments: 64 },\n});\n```\n\n### `TubeMesh`\n\n沿指定 `Curve<Vector3>` 曲线生成的管道网格。\n\n```typescript\nimport { TubeMesh } from 'u-space';\nimport { CatmullRomCurve3, Vector3 } from 'three/webgpu';\n\nconst path = new CatmullRomCurve3([new Vector3(0,0,0), new Vector3(5,2,5)]);\nconst tube = new TubeMesh({\n geometryParameters: { path, tubularSegments: 20, radius: 0.2, radialSegments: 8 },\n materialParameters: { color: 0x00ff00 },\n});\n```\n\n### `ShapeMesh`\n\n由 `THREE.Shape` 或 2D 点生成的平面网格。\n\n```typescript\nimport { ShapeMesh } from 'u-space';\n\n// 从显式 Shape 创建\nconst mesh = new ShapeMesh({ geometryParameters: { shape: myShape } });\n\n// 静态辅助方法:从 x/z 点数组创建\nconst mesh2 = ShapeMesh.createFromPoints([{ x: 0, z: 0 }, { x: 5, z: 0 }, { x: 5, z: 5 }]);\n```\n\n### `ExtrudeMesh`\n\n由 `THREE.Shape` 或 2D 点拉伸生成的 3D 实体网格。\n\n```typescript\nimport { ExtrudeMesh } from 'u-space';\n\nconst solid = new ExtrudeMesh({\n geometryParameters: {\n shape: myShape,\n options: { depth: 3, bevelEnabled: false },\n },\n materialParameters: { color: 0xff8800 },\n});\n\n// 静态辅助方法\nconst solid2 = ExtrudeMesh.createFromPoints(\n [{ x: 0, z: 0 }, { x: 5, z: 0 }, { x: 5, z: 5 }],\n { geometryParameters: { options: { depth: 2, bevelEnabled: false } } }\n);\n```\n\n## Poi\n\n`Poi` 是一个基于 canvas 渲染的公告板(精灵),用于在 3D 场景中放置图标和标签,继承自 `BaseSprite`。\n\n```typescript\nimport { Poi } from 'u-space';\n\nconst poi = new Poi({\n img: '/icons/marker.png',\n text: '我的位置',\n fontSize: 28,\n color: '#ffffff',\n backgroundColor: 'rgba(0,0,0,0.6)',\n textPosition: 'right',\n});\n// 构造时会自动调用 updateAsync(),无需手动调用\n// 如需更新参数,可再次调用:\n// await poi.updateAsync({ text: '新文字' });\n\npoi.position.set(10, 5, 10);\nviewer.scene.add(poi);\n```\n\n### `PoiParameters`\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :---------------- | :------------------------------------------ | :----------------------- | :--------------------------------- |\n| `img` | `string \\| CanvasImageSource` | `''` | 图标图片 URL 或元素。 |\n| `text` | `string` | `''` | 标签文字。 |\n| `fontSize` | `number` | `32` | 字体大小(像素)。 |\n| `fontFamily` | `string` | `'Arial'` | 字体族。 |\n| `color` | `string` | `'#ffffff'` | 文字颜色。 |\n| `iconSize` | `number` | `64` | 图标大小(像素)。 |\n| `padding` | `number` | `10` | 内容四周的内边距。 |\n| `backgroundColor` | `string` | `'rgba(0, 0, 0, 0)'` | 背景填充颜色。 |\n| `borderRadius` | `number` | `8` | 背景圆角半径。 |\n| `textPosition` | `'top' \\| 'bottom' \\| 'left' \\| 'right'` | `'right'` | 文字相对图标的位置。 |\n| `scaleFactor` | `number` | `0.01` | canvas 像素到世界单位的缩放系数。 |\n\n### 方法\n\n#### `updateAsync(parameters?)`\n\n使用可选的参数覆盖重新渲染 canvas 纹理。构造时会自动调用一次,后续参数未变化时会跳过重绘。\n\n```typescript\nawait poi.updateAsync({ text: '更新后的标签', color: '#ffff00' });\nviewer.render();\n```\n\n#### `dispose()`\n\n释放 canvas 纹理和材质。\n\n## Topology\n\n`Topology` 是一个带有内置 3D 可视化的图数据结构。它存储节点(位置)和带权重的边,实现了 Dijkstra 最短路径算法,并将图渲染为球体和管道。\n\n```typescript\nimport { Topology } from 'u-space';\n\nconst topo = new Topology({\n nodeColor: 0x0000ff,\n nodeRadius: 0.3,\n edgeColor: 0x00ff00,\n edgeRadius: 0.05,\n});\n\ntopo.addNode('A', new Vector3(0, 0, 0));\ntopo.addNode('B', new Vector3(5, 0, 0));\ntopo.addNode('C', new Vector3(5, 0, 5));\n\ntopo.addEdge('A', 'B');\ntopo.addEdge('B', 'C');\n\ntopo.renderGraph(); // 创建球体 + 管道网格\nviewer.scene.add(topo);\n```\n\n### `TopologyParameters`\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :------------ | :-------------------- | :---------- | :----------------------- |\n| `nodeColor` | `ColorRepresentation` | `0x0000ff` | 节点球体颜色。 |\n| `nodeRadius` | `number` | `0.5` | 节点球体半径。 |\n| `edgeColor` | `ColorRepresentation` | `0x00ff00` | 边管道颜色。 |\n| `edgeRadius` | `number` | `0.1` | 边管道半径。 |\n| `pathColor` | `ColorRepresentation` | `0xff00ff` | 路径可视化颜色。 |\n| `pathRadius` | `number` | `0.2` | 路径管道半径。 |\n\n### 方法\n\n#### `addNode(id, position)`\n\n向图中添加一个节点。\n\n#### `removeNode(id)`\n\n移除一个节点及其关联的边。\n\n#### `addEdge(from, to, weight?, bidirectional?)`\n\n在两个节点之间添加一条边。`weight` 默认为欧氏距离,`bidirectional` 默认为 `true`(双向)。\n\n#### `removeEdge(from, to, bidirectional?)`\n\n移除两个节点之间的边。\n\n#### `getShortestPath(startId, endId): Vector3[]`\n\n使用 Dijkstra 算法返回最短路径(世界坐标位置数组)。若不存在路径则返回 `[]`。\n\n#### `renderGraph()`\n\n根据当前节点和边构建球体/管道场景图。修改图后需调用此方法刷新可视化。\n\n#### `clearGraph()`\n\n移除并释放所有图网格。\n\n#### `renderPath(points, color?): TubeMesh`\n\n将给定点通过 CatmullRomCurve3 平滑处理后渲染为管道网格。\n\n```typescript\nconst path = topo.getShortestPath('A', 'C');\ntopo.renderPath(path, 0xff0000);\nviewer.render();\n```\n\n#### `clearPaths()`\n\n移除并释放所有路径网格。\n\n#### `getNeighbors(id): Map<string, number> | undefined`\n\n返回节点的邻接表(邻居 ID → 边权重)。\n\n#### `exportData(): TopologyData`\n\n将当前拓扑图(节点和边)导出为 JSON 可序列化对象。\n\n```typescript\nconst data = topo.exportData();\n// { nodes: Record<string, {x,y,z}>, edges: Array<{from,to,weight}> }\n```\n\n双向边在导出时会去重,只保留一条记录。\n\n#### `importData(data: TopologyData)`\n\n从 `exportData()` 返回的数据中还原拓扑图,替换当前所有节点、边和路径网格,并重新渲染。\n\n```typescript\ntopo.importData(data);\n```\n\n#### `dispose()`\n\n清除图和路径网格。\n"
764
+ "content": "# Objects API\n\n`u-space` 提供了若干对象封装类,主要扩展自 Three.js 的基础节点,使 3D 资产的操作和加载更加便捷。\n\n## 基础类\n\n### `BaseMesh`\n\n继承自 `THREE.Mesh`,`u-space` 中所有基础网格类都继承于此。\n\n**关键属性:**\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :--------------------------- | :-------- | :----- | :------------------------------------------------------------- |\n| `castShadow` | `boolean` | `true` | 默认参与阴影投射;可在单个对象上改为 `false`。 |\n| `receiveShadow` | `boolean` | `true` | 默认接收阴影;可在不需要阴影的网格上改为 `false`。 |\n| `ignoreInvisibleWhenRaycast` | `boolean` | `true` | 为 `true` 时,不可见的网格在射线检测时会被跳过(不参与碰撞)。 |\n\n### `BaseGroup`\n\n继承自 `THREE.Group`,`Model` 和 `Topology` 均继承于此。\n\n**关键属性:**\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :--------------------------- | :-------- | :----- | :--------------------------------------------------------------- |\n| `ignoreInvisibleWhenRaycast` | `boolean` | `true` | 为 `true` 时,不可见的组在射线检测时会被跳过(不参与碰撞)。 |\n\n## `InstanceObject`\n\n`InstanceObject` 是核心包导出的统一实例对象基类。无论实例最终由合并楼层几何、`InstancedMesh`、`EditableGeometryBatchLayer` 还是 fallback `Model` 渲染,业务代码都可以使用相同的身份、显隐、颜色、透明度、高亮、包围盒和 materialize API。\n\n```typescript\nimport {\n InstanceObject,\n isInstanceObject,\n INSTANCE_COLOR_MODE_NONE,\n INSTANCE_COLOR_MODE_OVERRIDE,\n INSTANCE_COLOR_MODE_TINT,\n} from 'u-space';\n```\n\n### 类型和常量\n\n#### `InstanceStyle`\n\n| 属性 | 类型 | 说明 |\n| :---------- | :-------------- | :------------------------------------------------------ |\n| `color` | `Color \\| null` | 当前样式颜色;`null` 表示不使用实例颜色。 |\n| `colorMode` | `number` | 当前颜色模式,值为下表中的颜色模式常量。 |\n| `opacity` | `number` | 当前透明度,实例设置 API 会将其限制在 `0` 到 `1` 之间。 |\n\n#### `InstanceObjectOptions`\n\n| 属性 | 类型 | 必填 | 默认值 | 说明 |\n| :------------ | :------- | :--- | :----------------- | :------------------------- |\n| `boundsName?` | `string` | 否 | `'InstanceBounds'` | 内部手动包围盒节点的名称。 |\n\n#### `InstanceIdentity`\n\n| 属性 | 类型 | 必填 | 说明 |\n| :------ | :--------------- | :--- | :------------------------------------------------------ |\n| `id?` | `string \\| null` | 否 | 实例 ID。省略时保持原值,显式传 `null` 时清为空字符串。 |\n| `kind?` | `string \\| null` | 否 | 实例类型。省略时保持原值,显式传 `null` 时清为空字符串。 |\n| `name?` | `string \\| null` | 否 | 实例名称。省略时保持原值,显式传 `null` 时清为空字符串。 |\n\n`InstanceIdentity` 的三个字段都可省略且可为 `null`:省略的字段保持不变,显式传入 `null` 会将对应身份字段清为空字符串。\n\n#### 颜色模式常量\n\n| 常量 | 值 | 说明 |\n| :----------------------------- | :-: | :--------------------------------------------- |\n| `INSTANCE_COLOR_MODE_NONE` | `0` | 不使用实例颜色。 |\n| `INSTANCE_COLOR_MODE_OVERRIDE` | `1` | 使用指定颜色覆盖原材质颜色。 |\n| `INSTANCE_COLOR_MODE_TINT` | `2` | 将指定颜色作为 tint 与原材质颜色混合。 |\n\n### 字段\n\n| 字段 | 类型 | 默认值 | 说明 |\n| :--------------- | :------------------ | :----------------- | :------------------------------------------------------- |\n| `isInstanceObject` | `boolean` | `true` | 实例对象标识,供 `isInstanceObject()` 类型守卫使用。 |\n| `type` | `string` | `'InstanceObject'` | Three.js 对象类型名称。 |\n| `instanceId` | `string` | `''` | 实例 ID。 |\n| `instanceKind` | `string` | `''` | 实例类型。 |\n| `instanceName` | `string` | `''` | 实例名称。 |\n| `geometry` | `BufferGeometry` | 空几何体 | 实例对象公开的兼容几何体字段。 |\n| `boundingBox` | `Box3 \\| null` | `null` | 本地坐标包围盒缓存。 |\n| `boundingSphere` | `Sphere \\| null` | `null` | 本地坐标包围球缓存。 |\n\n### 构造函数\n\n#### `new InstanceObject(options?)`\n\n```typescript\nconst instance = new InstanceObject({ boundsName: 'FloorBounds' });\n```\n\n`options` 的类型为 `InstanceObjectOptions`;省略时使用默认的内部包围盒节点名称 `InstanceBounds`。\n\n### 身份和样式\n\n身份、显隐和基础样式方法都返回当前实例,可以链式调用:\n\n```typescript\nconst instance = new InstanceObject()\n .setInstanceIdentity({ id: 'room-101', kind: 'room', name: '会议室 101' })\n .setInstanceVisible(true)\n .setInstanceColor('#4f8cff')\n .setInstanceOpacity(0.65);\n\ninstance.setInstanceHighlight('#ffff00', 0.9);\ninstance.clearInstanceHighlight();\ninstance.resetInstanceColor();\n```\n\n| 方法 | 返回值 | 说明 |\n| :--- | :----- | :--- |\n| `setInstanceIdentity(identity: InstanceIdentity)` | `this` | 更新身份字段;省略字段保持不变,`null` 将对应字段清为空字符串。 |\n| `setInstanceVisible(visible: boolean)` | `this` | 设置实例显隐并标记渲染数据需要同步。 |\n| `setInstanceColor(color: ColorRepresentation)` | `this` | 设置基础覆盖色,颜色模式变为 `INSTANCE_COLOR_MODE_OVERRIDE`。 |\n| `resetInstanceColor()` | `this` | 清除基础颜色,颜色模式恢复为 `INSTANCE_COLOR_MODE_NONE`。 |\n| `setInstanceOpacity(opacity: number)` | `this` | 设置基础透明度;传入值会被限制在 `0` 到 `1` 之间。 |\n| `getInstanceColor(target = new Color())` | `Color` | 将当前生效样式的颜色写入 `target` 并返回;未设置颜色时返回白色。 |\n| `hasInstanceColor()` | `boolean` | 当前生效样式是否包含颜色。 |\n| `getInstanceOpacity()` | `number` | 返回当前生效样式的透明度。 |\n| `setInstanceHighlight(color: ColorRepresentation, opacity: number, overwrite = false)` | `this` | 设置临时高亮;默认使用 `INSTANCE_COLOR_MODE_TINT`,`overwrite` 为 `true` 时使用覆盖模式,透明度会被限制在 `0` 到 `1` 之间。 |\n| `clearInstanceHighlight()` | `this` | 清除临时高亮并恢复基础样式。 |\n| `getInstanceColorMode()` | `number` | 返回当前生效样式的颜色模式。 |\n\n临时高亮优先于基础颜色和透明度;`clearInstanceHighlight()` 会恢复基础样式。默认场景矩阵自动更新开启时,实例 transform 的世界矩阵发生变化会自动触发 dirty callback,所属 `ModelInstancedLayer` 会在下一次渲染前同步 instance buffer。业务代码只需修改 `position`、`rotation`、`quaternion` 或 `scale`,不需要直接写内部 instance matrix,也不需要手动调用 `InstanceObject.updateMatrixWorld()`。\n\n如果为大型静态场景显式设置了 `viewer.scene.matrixWorldAutoUpdate = false`,renderer 不会再遍历该根节点,修改后必须用 Three.js 原生方法提交受影响范围并请求新帧:\n\n```typescript\ninstance.position.set(10, 0, 5);\ninstance.updateWorldMatrix(true, false);\nviewer.invalidate();\n\n// 修改父 Group 时更新整个受影响子树。\ngroup.updateWorldMatrix(true, true);\nviewer.invalidate();\n```\n\n`InstanceObject` 覆盖了原生 `updateWorldMatrix(updateParents, updateChildren)` 和 `updateMatrixWorld(force)`,两条路径都会检测世界矩阵及祖先显隐变化并触发 dirty callback。对 Group 使用 `updateChildren: true` 时,后代 `InstanceObject` 也会执行该检测;editable batch 中与烘焙矩阵不同的 `SceneInstanceObject` 会按合批规则 materialize。\n\n### 包围盒和相机定位\n\n`boundingBox` 和 `boundingSphere` 是本地坐标缓存;`computeBoundingBox()` 与 `computeBoundingSphere()` 会按需更新它们。`getInstanceBoundingBox(target, true)` 返回世界坐标包围盒。\n\n| 方法 | 返回值 | 说明 |\n| :--- | :----- | :--- |\n| `setInstanceBounds(bounds: Box3)` | `this` | 克隆并设置手动本地包围盒;空包围盒会被忽略。 |\n| `computeBoundingBox()` | `void` | 计算并缓存本地坐标包围盒。 |\n| `computeBoundingSphere()` | `void` | 基于本地包围盒计算并缓存本地坐标包围球。 |\n| `getInstanceBoundingBox(target = new Box3(), world = false)` | `Box3` | 将包围盒写入 `target`;`world` 为 `true` 时返回世界坐标结果。 |\n\n实例可以直接交给相机控制器定位:\n\n```typescript\nawait viewer.controls.flyToObject(instance);\n```\n\n当实例没有可供计算的渲染几何体,或业务端已经拥有精确范围时,可以手动提供本地包围盒并按需获取世界范围:\n\n```typescript\nimport { Box3, Vector3 } from 'three/webgpu';\n\ninstance\n .setInstanceBounds(new Box3(\n new Vector3(-2, 0, -3),\n new Vector3(2, 4, 3),\n ))\n .position.set(100, 0, 50);\n\nconst worldBounds = instance.getInstanceBoundingBox(new Box3(), true);\n```\n\n### Fallback 渲染对象\n\n`setInstanceRenderObject()` 用于挂载无法进入合并几何或 `InstancedMesh` 管线的 fallback Three.js 对象。`InstanceObject` 会将当前显隐、颜色、透明度和高亮语义统一应用到该对象。\n\n| 方法 | 返回值 | 说明 |\n| :--- | :----- | :--- |\n| `setInstanceRenderObject(object: Object3D \\| null)` | `this` | 替换 fallback 渲染对象;传入 `null` 时解除当前对象。 |\n| `getInstanceRenderObject()` | `Object3D \\| null` | 返回当前 fallback 渲染对象。 |\n| `setInstanceMaterializer(materializer)` | `this` | 设置 batching 实现使用的低层 materialize delegate;传入 `null` 时解除。普通业务通常不直接调用。 |\n| `clearInstanceMaterializer(materializer?)` | `this` | 不传参数时直接解除;传入 delegate 时只在当前 delegate 与其相同时解除,用于安全释放 materializer 所有权。 |\n| `materialize()` | `Object3D \\| null` | 调用当前 materializer;未连接 materializer 时返回已有 fallback render object 或 `null`。 |\n\n```typescript\nimport { Model } from 'u-space';\n\nconst fallbackModel = new Model();\nawait fallbackModel.loadAsync({ url: '/models/special-room.glb' });\n\ninstance\n .setInstanceRenderObject(fallbackModel)\n .setInstanceColor('#ff8a3d')\n .setInstanceOpacity(0.8);\n```\n\n`EditableGeometryBatchLayer` 会自动连接 `setInstanceMaterializer()`,并在 dispose 时通过所有权匹配安全解除。当实例 transform 或半透明状态无法继续由烘焙 Geometry 表达时,layer 会 clone 完整模板、克隆独立材质并挂到当前实例,同时立即提交新对象的世界矩阵并让其他 active layer 隐藏同一实例的旧烘焙副本;业务也可以显式调用 `instance.materialize()`。完整构建、unsupported fallback 和事件语义见 [Batches API](./api-batches#editablegeometrybatchlayer)。\n\n### Dirty callback\n\n| 方法 | 返回值 | 说明 |\n| :--- | :----- | :--- |\n| `onInstanceRenderDirty(callback: () => void)` | `() => boolean` | 注册 dirty callback,并返回用于取消订阅的函数。 |\n| `markInstanceRenderDirty()` | `this` | 立即通知所有已注册的 dirty callback。 |\n\n保存并调用取消订阅函数,避免监听方销毁后遗留回调:\n\n```typescript\nconst dirtyInstances = new Set<InstanceObject>();\nconst unsubscribe = instance.onInstanceRenderDirty(() => {\n dirtyInstances.add(instance);\n});\n\n// 不再需要监听时\nunsubscribe();\ndirtyInstances.delete(instance);\n```\n\n### 类型守卫\n\n#### `isInstanceObject(object)`\n\n`isInstanceObject(object: Object3D): object is InstanceObject` 检查对象的 `isInstanceObject` 标识,并在 TypeScript 中将其收窄为 `InstanceObject`。\n\n```typescript\nif (isInstanceObject(object)) {\n object.setInstanceHighlight('#ffff00', 1);\n}\n```\n\n## 模型\n\n`Model` 类继承自 `BaseGroup`(进而继承自 `THREE.Group`),简化了异步加载 `glb`、`gltf` 等外部 3D 模型的流程,内置多层缓存支持。\n\n```typescript\nimport { Model } from 'u-space';\n\nconst myModel = new Model();\n```\n\n### 加载资产\n\n`loadAsync` 方法负责从 URL 加载资产并将其添加到组中。\n\n```typescript\nawait myModel.loadAsync(parameters: ModelParameters)\n```\n\n#### `ModelParameters`\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :----------- | :-------- | :----- | :-------------------------------------------------------------------------------------- |\n| `url` | `string` | — | `.gltf` 或 `.glb` 文件的 URL。 |\n| `cache` | `boolean` | `true` | 启用内存 LRU 缓存。若同一请求已加载,则直接从内存中获取并克隆;最多保留 32 项。 |\n| `persistent` | `boolean` | `true` | 使用浏览器 Cache API 持久化模型及外部 glTF 依赖;最多保留 64 项或 512 MiB。 |\n| `cacheMode` | `string` | — | 覆盖持久化缓存策略:`no-store`、`reload`、`revalidate` 或 `force-cache`。 |\n| `cacheKey` | `string` | — | 为同一 URL 指定版本化缓存身份;适用于发布后 URL 不变的模型。 |\n\n#### 缓存示例\n\n```javascript\n// 默认开启双层缓存,直接加载即可\nconst model1 = new Model();\nmodel1.loadAsync({ url: 'model.glb' });\n\n// 禁用内存缓存(每次都从网络或持久化缓存重新加载)\nconst model2 = new Model();\nmodel2.loadAsync({ url: 'model.glb', cache: false });\n\n// 完全禁用缓存\nconst model3 = new Model();\nmodel3.loadAsync({ url: 'model.glb', cache: false, persistent: false });\n\n// 发布新模型但 URL 保持不变时,获取网络版本并更新该版本条目\nconst model4 = new Model();\nmodel4.loadAsync({ url: 'model.glb', cacheMode: 'reload', cacheKey: '2026-09-02' });\n```\n\n持久化缓存保留响应类型、验证器和真实字节长度。默认无服务端缓存指令的资源可复用 7 天;到期后优先使用 `ETag` / `Last-Modified` 条件验证,断网时可回退到已存在的非空缓存。`no-store` 不读取或写入持久化缓存;`reload` 强制网络请求并更新缓存;`revalidate` 即使缓存仍新鲜也会条件验证;`force-cache` 优先返回已有的非空缓存。`Cache-Control: no-store/private` 与 `Vary: Cookie/*` 响应不会写入缓存。空缓存、截断的外部 buffer、解析失败或缓存命中时未解码的贴图会删除相关缓存资源并重新请求一次。请求头、credentials 模式和 `cacheKey` 共同参与缓存身份,避免不同授权请求或版本共用同一条目。\n\n### 动画\n\n`Model` 在加载含内置动画的模型(如 glTF/FBX)后,会自动初始化 `AnimationMixer` 并收集 `AnimationClip`。\n\n**属性:**\n\n| 属性 | 类型 | 说明 |\n| :----------- | :-------------------------- | :----------------------------------------- |\n| `mixer` | `AnimationMixer \\| null` | 动画混合器,加载含动画模型后自动创建。 |\n| `animations` | `AnimationClip[]` | 模型内置的动画片段列表。 |\n\n#### `playAnimation(nameOrIndex?, options?)`\n\n播放指定动画。不传参时播放第一个动画。\n\n```typescript\n// 按名称播放\nmodel.playAnimation('Walk');\n\n// 按索引播放\nmodel.playAnimation(0);\n\n// 带选项\nmodel.playAnimation('Run', {\n loop: true, // 是否循环(默认 true)\n repetitions: 3, // 循环次数(默认 Infinity)\n timeScale: 1.5, // 播放速度(默认 1)\n clampWhenFinished: true, // 播放结束后停留在最后一帧(默认 false)\n});\n```\n\n#### `playAllAnimations(options?)`\n\n播放模型所有内置动画。参数同 `playAnimation`。\n\n```typescript\nmodel.playAllAnimations({ timeScale: 2 });\n```\n\n#### `stopAnimation(nameOrIndex?)`\n\n停止指定动画。不传参时停止所有动画。\n\n```typescript\nmodel.stopAnimation('Walk'); // 停止指定动画\nmodel.stopAnimation(); // 停止所有动画\n```\n\n#### `updateAnimation(delta)`\n\n推进动画时间,需在渲染循环中调用。`delta` 为帧间隔时间(秒),可从 Viewer 事件的 `delta` 属性获取。\n\n```typescript\nviewer.addEventListener('beforeRender', (e) => {\n model.updateAnimation(e.delta);\n});\n```\n\n### 空间查询\n\n#### `getBoundingBox()`\n\n获取模型的轴对齐包围盒(AABB)。\n\n```typescript\nconst box = myModel.getBoundingBox();\nconst size = box.getSize(new Vector3());\nconsole.log('模型尺寸:', size);\n```\n\n#### `getCenter()`\n\n获取模型包围盒的中心点。\n\n```typescript\nconst center = myModel.getCenter();\nconsole.log('模型中心:', center);\n```\n\n### 材质操作\n\n#### `setMaterial(material)`\n\n将模型内所有 Mesh 的材质统一替换为指定材质。\n\n```typescript\nimport { MeshStandardMaterial } from 'three/webgpu';\n\nmyModel.setMaterial(new MeshStandardMaterial({ color: 0xff0000 }));\n```\n\n### 清除缓存\n\n可通过 `Model` 类的静态方法手动清除内部缓存:\n\n- `Model.clearMemoryCache()`:清除运行时内存缓存。\n- `await Model.clearPersistentCache()`:完全清除浏览器中 `u-space` 模型的持久化缓存。\n- `await ModelLoaderManager.deletePersistentCache(url, { cacheKey })`:仅删除指定 URL 与版本身份的持久化缓存。\n\n## 网格\n\n`u-space` 提供了多种精简的网格类,均继承自 `BaseMesh`。所有类默认使用 `MeshStandardNodeMaterial`,构造函数接受 `{ geometryParameters, materialParameters }` 参数,并支持交互事件分发。\n\n### `SphereMesh`\n\n```typescript\nimport { SphereMesh } from 'u-space';\n\nconst sphere = new SphereMesh({\n geometryParameters: { radius: 1, widthSegments: 32, heightSegments: 32 },\n materialParameters: { color: 0x0077ff },\n});\n```\n\n**`SphereMeshParameters`**\n\n| 属性 | 类型 | 说明 |\n| :-------------------- | :----------------------------------- | :----------------------------------------------- |\n| `geometryParameters` | `SphereGeometry` 构造函数参数 | `radius`、`widthSegments`、`heightSegments` 等。 |\n| `materialParameters` | `MeshStandardNodeMaterialParameters` | 标准材质选项(颜色等)。 |\n\n### `PlaneMesh`\n\n水平平面网格。\n\n```typescript\nimport { PlaneMesh } from 'u-space';\n\nconst plane = new PlaneMesh({\n geometryParameters: { width: 10, height: 10 },\n materialParameters: { color: 0x888888 },\n});\n```\n\n### `CircleMesh`\n\n圆形平面网格。\n\n```typescript\nimport { CircleMesh } from 'u-space';\n\nconst circle = new CircleMesh({\n geometryParameters: { radius: 5, segments: 64 },\n});\n```\n\n### `TubeMesh`\n\n沿指定 `Curve<Vector3>` 曲线生成的管道网格。\n\n```typescript\nimport { TubeMesh } from 'u-space';\nimport { CatmullRomCurve3, Vector3 } from 'three/webgpu';\n\nconst path = new CatmullRomCurve3([new Vector3(0,0,0), new Vector3(5,2,5)]);\nconst tube = new TubeMesh({\n geometryParameters: { path, tubularSegments: 20, radius: 0.2, radialSegments: 8 },\n materialParameters: { color: 0x00ff00 },\n});\n```\n\n### `ShapeMesh`\n\n由 `THREE.Shape` 或 2D 点生成的平面网格。\n\n```typescript\nimport { ShapeMesh } from 'u-space';\n\n// 从显式 Shape 创建\nconst mesh = new ShapeMesh({ geometryParameters: { shape: myShape } });\n\n// 静态辅助方法:从 x/z 点数组创建\nconst mesh2 = ShapeMesh.createFromPoints([{ x: 0, z: 0 }, { x: 5, z: 0 }, { x: 5, z: 5 }]);\n```\n\n### `ExtrudeMesh`\n\n由 `THREE.Shape` 或 2D 点拉伸生成的 3D 实体网格。\n\n```typescript\nimport { ExtrudeMesh } from 'u-space';\n\nconst solid = new ExtrudeMesh({\n geometryParameters: {\n shape: myShape,\n options: { depth: 3, bevelEnabled: false },\n },\n materialParameters: { color: 0xff8800 },\n});\n\n// 静态辅助方法\nconst solid2 = ExtrudeMesh.createFromPoints(\n [{ x: 0, z: 0 }, { x: 5, z: 0 }, { x: 5, z: 5 }],\n { geometryParameters: { options: { depth: 2, bevelEnabled: false } } }\n);\n```\n\n## Poi\n\n`Poi` 是一个基于 canvas 渲染的公告板(精灵),用于在 3D 场景中放置图标和标签,继承自 `BaseSprite`。\n\n```typescript\nimport { Poi } from 'u-space';\n\nconst poi = new Poi({\n img: '/icons/marker.png',\n text: '我的位置',\n fontSize: 28,\n color: '#ffffff',\n backgroundColor: 'rgba(0,0,0,0.6)',\n textPosition: 'right',\n});\n// 构造时会自动调用 updateAsync(),无需手动调用\n// 如需更新参数,可再次调用:\n// await poi.updateAsync({ text: '新文字' });\n\npoi.position.set(10, 5, 10);\nviewer.scene.add(poi);\n```\n\n### `PoiParameters`\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :---------------- | :------------------------------------------ | :----------------------- | :--------------------------------- |\n| `img` | `string \\| CanvasImageSource` | `''` | 图标图片 URL 或元素。 |\n| `text` | `string` | `''` | 标签文字。 |\n| `fontSize` | `number` | `32` | 字体大小(像素)。 |\n| `fontFamily` | `string` | `'Arial'` | 字体族。 |\n| `color` | `string` | `'#ffffff'` | 文字颜色。 |\n| `iconSize` | `number` | `64` | 图标大小(像素)。 |\n| `padding` | `number` | `10` | 内容四周的内边距。 |\n| `backgroundColor` | `string` | `'rgba(0, 0, 0, 0)'` | 背景填充颜色。 |\n| `borderRadius` | `number` | `8` | 背景圆角半径。 |\n| `textPosition` | `'top' \\| 'bottom' \\| 'left' \\| 'right'` | `'right'` | 文字相对图标的位置。 |\n| `scaleFactor` | `number` | `0.01` | canvas 像素到世界单位的缩放系数。 |\n\n### 方法\n\n#### `updateAsync(parameters?)`\n\n使用可选的参数覆盖重新渲染 canvas 纹理。构造时会自动调用一次,后续参数未变化时会跳过重绘。\n\n```typescript\nawait poi.updateAsync({ text: '更新后的标签', color: '#ffff00' });\nviewer.render();\n```\n\n#### `dispose()`\n\n释放 canvas 纹理和材质。\n\n## Topology\n\n`Topology` 是一个带有内置 3D 可视化的图数据结构。它存储节点(位置)和带权重的边,实现了 Dijkstra 最短路径算法,并将图渲染为球体和管道。\n\n```typescript\nimport { Topology } from 'u-space';\n\nconst topo = new Topology({\n nodeColor: 0x0000ff,\n nodeRadius: 0.3,\n edgeColor: 0x00ff00,\n edgeRadius: 0.05,\n});\n\ntopo.addNode('A', new Vector3(0, 0, 0));\ntopo.addNode('B', new Vector3(5, 0, 0));\ntopo.addNode('C', new Vector3(5, 0, 5));\n\ntopo.addEdge('A', 'B');\ntopo.addEdge('B', 'C');\n\ntopo.renderGraph(); // 创建球体 + 管道网格\nviewer.scene.add(topo);\n```\n\n### `TopologyParameters`\n\n| 属性 | 类型 | 默认值 | 说明 |\n| :------------ | :-------------------- | :---------- | :----------------------- |\n| `nodeColor` | `ColorRepresentation` | `0x0000ff` | 节点球体颜色。 |\n| `nodeRadius` | `number` | `0.5` | 节点球体半径。 |\n| `edgeColor` | `ColorRepresentation` | `0x00ff00` | 边管道颜色。 |\n| `edgeRadius` | `number` | `0.1` | 边管道半径。 |\n| `pathColor` | `ColorRepresentation` | `0xff00ff` | 路径可视化颜色。 |\n| `pathRadius` | `number` | `0.2` | 路径管道半径。 |\n\n### 方法\n\n#### `addNode(id, position)`\n\n向图中添加一个节点。\n\n#### `removeNode(id)`\n\n移除一个节点及其关联的边。\n\n#### `addEdge(from, to, weight?, bidirectional?)`\n\n在两个节点之间添加一条边。`weight` 默认为欧氏距离,`bidirectional` 默认为 `true`(双向)。\n\n#### `removeEdge(from, to, bidirectional?)`\n\n移除两个节点之间的边。\n\n#### `getShortestPath(startId, endId): Vector3[]`\n\n使用 Dijkstra 算法返回最短路径(世界坐标位置数组)。若不存在路径则返回 `[]`。\n\n#### `renderGraph()`\n\n根据当前节点和边构建球体/管道场景图。修改图后需调用此方法刷新可视化。\n\n#### `clearGraph()`\n\n移除并释放所有图网格。\n\n#### `renderPath(points, color?): TubeMesh`\n\n将给定点通过 CatmullRomCurve3 平滑处理后渲染为管道网格。\n\n```typescript\nconst path = topo.getShortestPath('A', 'C');\ntopo.renderPath(path, 0xff0000);\nviewer.render();\n```\n\n#### `clearPaths()`\n\n移除并释放所有路径网格。\n\n#### `getNeighbors(id): Map<string, number> | undefined`\n\n返回节点的邻接表(邻居 ID → 边权重)。\n\n#### `exportData(): TopologyData`\n\n将当前拓扑图(节点和边)导出为 JSON 可序列化对象。\n\n```typescript\nconst data = topo.exportData();\n// { nodes: Record<string, {x,y,z}>, edges: Array<{from,to,weight}> }\n```\n\n双向边在导出时会去重,只保留一条记录。\n\n#### `importData(data: TopologyData)`\n\n从 `exportData()` 返回的数据中还原拓扑图,替换当前所有节点、边和路径网格,并重新渲染。\n\n```typescript\ntopo.importData(data);\n```\n\n#### `dispose()`\n\n清除图和路径网格。\n"
753
765
  },
754
766
  {
755
767
  "id": "api-plugin-atmosphere",
@@ -1412,7 +1424,7 @@ export const docsIndex = [
1412
1424
  "id": "changelog",
1413
1425
  "path": "changelog.md",
1414
1426
  "title": "更新日志",
1415
- "summary": "- **嵌套模型 Decode Worker** 新增 `u-space/worker/model-decoder` `ModelLoaderManager.setDecodeWorker()`;静态 glTF/GLB/SBMX 可在 render Worker 之外完成 fetch/cache、SBMX 还原、JSON/base64/buffer 与图片解码,再以 transferable `ArrayBuffer` / `ImageBitmap` 交回 Three.js owner。协议使用单包 ACK backpressure、AbortSignal 和贴图内容身份复用,复杂 glTF 特性自动回退原 loader;Offscreen UManager 示例默认启用,并支持 `?modelDecodeWorker=off` A/B。 - **Offscreen 在线示例** ",
1427
+ "summary": "- **模型持久化缓存**:主线程与 decode Worker 统一使用带版本、容量和响应元数据的 Cache Storage 策略,缓存项记录真实 `Content-Length`;模型及外部 glTF buffer/贴图支持过期与 `ETag` / `Last-Modified` 条件验证、离线旧缓存、授权请求隔离和损坏缓存单次自愈。调用方可通过 `cacheMode` 跳过、刷新、重验或强制读取缓存,通过 `cacheKey` 隔离同一 URL 的模型版本并精确删除目标缓存。对象内存缓存改为 32 LRU,磁盘缓存限制为 64 项或 512 MiB,并遵循 `no-store/private` 与敏感 `Vary` 响应。 - **UManager 示例**:目标对象不存在、不是 Mesh 或使用多材质时,示例不再直接写入材质属性而导致页面报错。 - **Offscreen ",
1416
1428
  "headings": [
1417
1429
  {
1418
1430
  "level": 1,
@@ -1422,6 +1434,26 @@ export const docsIndex = [
1422
1434
  "level": 2,
1423
1435
  "text": "未发布"
1424
1436
  },
1437
+ {
1438
+ "level": 2,
1439
+ "text": "0.0.33"
1440
+ },
1441
+ {
1442
+ "level": 3,
1443
+ "text": "修复与优化"
1444
+ },
1445
+ {
1446
+ "level": 2,
1447
+ "text": "0.0.32"
1448
+ },
1449
+ {
1450
+ "level": 3,
1451
+ "text": "修复与优化"
1452
+ },
1453
+ {
1454
+ "level": 3,
1455
+ "text": "文档"
1456
+ },
1425
1457
  {
1426
1458
  "level": 2,
1427
1459
  "text": "0.0.31"
@@ -1655,13 +1687,13 @@ export const docsIndex = [
1655
1687
  "text": "新增"
1656
1688
  }
1657
1689
  ],
1658
- "content": "# 更新日志\n\n## 未发布\n\n## 0.0.31\n\n### 新增\n\n- **嵌套模型 Decode Worker** — 新增 `u-space/worker/model-decoder` 和 `ModelLoaderManager.setDecodeWorker()`;静态 glTF/GLB/SBMX 可在 render Worker 之外完成 fetch/cache、SBMX 还原、JSON/base64/buffer 与图片解码,再以 transferable `ArrayBuffer` / `ImageBitmap` 交回 Three.js owner。协议使用单包 ACK backpressure、AbortSignal 和贴图内容身份复用,复杂 glTF 特性自动回退原 loader;Offscreen UManager 示例默认启用,并支持 `?modelDecodeWorker=off` A/B。\n\n### 修复与优化\n\n- **Offscreen 在线示例** — Vercel 发布现在通过专用 Vite 配置构建 `examples/offscreen/test_umanager2_offscreen.html`,输出可直接运行的主线程 JavaScript、ES module Worker 和 Draco/Basis WASM 资源,不再让生产页面直接加载 TypeScript;Worker 的 HDR URL 同时兼容本地 `/textures/` 与线上 `/examples/textures/` 路径。\n- **Offscreen Worker 超大贴图** — Worker runtime 同时覆盖 Three.js `ImageLoader` 与 `ImageBitmapLoader`;JPEG/PNG/GIF/WebP 任一边超过 WebGPU 默认 `8192` 上限时,在首次 `createImageBitmap()` 解码时等比缩小并保留 loader options/cache/abort 语义,避免 `Texture size` 继续级联为 `Invalid TextureView`、`Invalid BindGroup` 和 `Invalid CommandBuffer`。未知格式在解码后缩放并释放临时原图,源资产不会被修改。\n- **Offscreen UManager 设备调试** — 增加上一个/下一个设备、飞向、高亮和清除命令;语义楼层、墙体、空间、门窗和设备默认全部显示,设备切换、飞向和清除不再改变其他对象显隐。\n- **模型 Decode Worker 稳定性与安全性** — 外部 buffer/贴图恢复 `LoadingManager.resolveURL()` 和完整 item 生命周期,跨域依赖不再继承模型请求的授权 headers/credentials;增加 glTF 节点图规模、深度、环、多父节点与重复 child 校验,并把贴图内容身份缓存改为有界 LRU。decode Worker 崩溃会自动摘除并回退当前请求,`setDecodeWorker()` 返回实例绑定 disposer,AbortSignal 也覆盖普通 loader 路径;失败的 `Model` 内存缓存 Promise 会被清除以允许重试。\n\n## 0.0.30\n\n### 新增\n\n- **AO 示例** — 新增 `examples/test_ao.html`,通过 SSGI 的 `giIntensity: 0` 默认开启纯 AO,并提供遮蔽强度、半径和厚度实时调节。\n- **RenderPipeline SSR** — 新增 `enableSSR()`、`updateSSR()` 和 `disableSSR()`,封装 Stochastic SSR、Temporal Reproject、Recurrent Denoise、velocity 以及双向历史反馈;提供完整 SSR 与降噪参数配置。\n- **Viewer** — 新增可选 `pixelRatio` 构造参数,省略时继续使用 `Math.min(window.devicePixelRatio, 1.5)`。\n- **Offscreen UManager 示例** — `examples/offscreen/test_umanager2_offscreen.html` 现在在 Worker 内启用 `SceneLoader.setEditableBatching()`、预热 WebGPU batch pipeline,并将渲染与 editable batch 统计传回主线程 HUD。\n- **u-manager editable batching** — `SceneLoader.setEditableBatching()` 可把大型、主要静态的普通 Mesh 场景按材质和 Geometry 布局烘焙合并到 `SceneEditableBatchLayer`,同时保留 `SceneInstanceObject` 的显隐、颜色、高亮、bounds 和 raycast 映射;transform 或半透明修改会只 materialize 当前对象,透明/蒙皮/morph/自定义材质等不支持子集保持安全 fallback。\n- **核心 Batches API** — 新增公共 `src/batches` 模块和 `EditableGeometryBatchLayer<T extends InstanceObject>`,提供通用 source/build/unsupported 结果、TSL dirty 状态、typed materialize 事件、lazy BVH hit remap、统计与资源释放;`ModelInstancedLayer` 同步归入该模块,顶层 `u-space` 导入方式保持不变。\n\n### 变更\n\n- **Offscreen Worker breaking** — 移除 callback 风格的 `defineWorkerViewer()`、`WorkerViewerSetup`、`WorkerViewerSetupResult` 和 `WorkerViewerContext`;改为在 module Worker 顶层 `await createWorkerViewer()`,并通过返回的 `WorkerViewerRuntime` 顺序调用 `status()`、`registerCommand()`、`onDispose()` 和 `ready()`。\n- **InstanceObject materialize** — 将 `SceneInstanceObject` 私有的 materializer delegate 提升为核心 `InstanceObject.setInstanceMaterializer()` / `clearInstanceMaterializer()` / `materialize()` 协议;`SceneEditableBatchLayer` 改为核心 `EditableGeometryBatchLayer` 的 scene-specific 薄适配层,fallback 移除改用 typed `materialize` 事件。\n\n### 修复与优化\n\n- **Offscreen UManager 帧率与楼壳显示** — 示例保留语义数据用于相机定位,但默认隐藏会半透明覆盖楼壳的高 draw-call 分析层;同时通过 Three.js 原生 `Scene.matrixWorldAutoUpdate` / `Object3D.updateWorldMatrix()` 关闭静态场景每帧整树矩阵遍历,并保留标准 RenderPipeline scene pass 以确保源模型透明对象正确合成。在不调整 pixel ratio 的情况下,目标场景持续拖拽可维持约 59–60 FPS。\n- **Editable Geometry Batch 不透明材质** — 不透明 batch 不再复用动态 opacity 节点同时驱动 alpha 输出和 `maskNode`;源材质 opacity 路径保持不变,对象显隐改用独立布尔遮罩,修复建筑楼壳被错误显示为半透明的问题。\n- **InstanceObject 静态矩阵更新** — 覆盖 Three.js 原生 `updateWorldMatrix()`,与 `updateMatrixWorld()` 共享世界矩阵/祖先显隐 dirty 检测;根 Scene 冻结自动矩阵更新后,显式更新单个实例或父 Group 仍会同步 instanced buffer,并让 editable batch 的变换差异正确触发 materialize。\n- **Editable Geometry Batch 拾取** — 公共 `EditableGeometryBatchLayer` 继承 `BaseGroup`,内部未导出的 `EditableGeometryBatchMesh` 继承 `BaseMesh` 并在自定义 BVH raycast 前保留不可见短路;隐藏整个 editable layer 或单个 merged batch 后不会继续命中逻辑对象。\n- **Editable Geometry Batch 生命周期** — 修复多个 layer 共用 inverse matrix、dirty transform 因旧 bounds 先被视锥裁剪、冻结根 Scene 下新挂载模型错过当帧世界矩阵、跨 layer materialize 后旧副本仍显示、materialize 对象共享模板材质、旧烘焙位置残留 BVH 命中、负缩放实例错误进入 merged/instanced path、重复实例生成幽灵几何、重复 build 累积资源、旧 layer dispose 清除新 materializer,以及 build 期间已 materialize 对象重复进入透明 fallback;`EditableGeometryBatchLayer` 现在是 one-shot builder。\n- **Offscreen HUD** — renderer stats 改为 1 秒滚动窗口的 FPS、平均/p95/最大帧间隔、超过 25ms 的占比和样本数,并排除 demand 模式从静止恢复时的空闲间隔。\n- **Offscreen Worker lifecycle** — 修复初始化期间销毁导致 `host.init()` 永久 pending、canvas 转移/初始 `postMessage()` 失败后未完成本地清理、dispose 后迟到的业务消息仍被派发、待发送 pointer move rAF 未取消、`ready()` 前加载失败未释放 Worker/GPU 资源,以及重复 `ArrayBuffer` transfer list 抛出 `DataCloneError`。\n- **RenderPipeline SSGI** — 修正 AO/GI 合成,改为 `scene × AO + diffuse × GI`,确保 `aoIntensity` 与 `giIntensity` 分别作用于遮蔽和间接漫反射;同时兼容 Viewer 默认的 reversed depth 背景判断,并在与 SSR 同时启用时复用 diffuse MRT 附件。\n- **RenderPipeline SSR** — 兼容 Viewer 默认的 `reversedDepthBuffer`:三个内部全屏 pass 会正确跳过 clear-depth 背景,同时保留 raw reversed depth 用于位置重建、ray marching 和 temporal history。\n- **SSR 示例** — 新增 `examples/test_ssr.html`,并使用 1× drawing buffer、`maxDistance: 0.4`、静态 2048² 阴影和关闭默认性能面板的配置降低 GPU 开销。\n\n### 文档\n\n- **docs/mcp** — 将核心 `InstanceObject` 的完整 API 归入 Objects 文档,并同步 u-manager 子类引用、LLM 摘要和 MCP 检索索引;运行时 API 未发生变化。\n- **u-manager editable batching** — 补充 `setEditableBatching()` 配置、合并键、TSL 状态纹理、materialize/fallback 边界、统计字段、显存权衡、`test_umanager2.html` 示例和 MCP 检索范围。\n- **OffscreenCanvas Worker** — 补充 `OffscreenViewerHost` 构造选项、方法、事件和统计字段,明确 `host.init()` / `initialized` 与一次性业务 `ready` 的边界,以及 `examples/offscreen/test_umanager2_offscreen.html` 的 editable batching、`compileAsync()` 预热、HUD 统计、静态根节点下 `InstanceObject` 显式矩阵提交、structured-clone/command 边界和 MCP 检索入口。\n- **SSR** — 补充完整 RenderPipeline SSR API、时域/降噪配置、reversed-depth 兼容说明、性能建议与在线示例入口。\n\n## 0.0.29\n\n### 变更\n\n- **u-manager breaking** — 通用实例基类和模型合批层从 `plugins/u-manager/instances` 移入核心;`InstanceObject` 位于 `src/instances`,`ModelInstancedLayer` / `InstanceCullingOptions` 位于 `src/batches`,均继续通过顶层 `u-space` 导出;旧 `SemanticInstanceObject` / `SemanticModelInstancedLayer` 命名不再保留。\n- **u-manager breaking** — `ModelInstancedLayer` 移除旧的 `addSemanticBatch()` 公开入口,改为 `reserveBatch()`、`addInstance()` / `addInstances()`、`getInstanceById()`、`removeInstance()` / `removeInstances()`、`removeBatch()` 和 `clearBatches()`,支持运行时实例新增/删除、按 URL batch 的 capacity 预分配与扩容;`removeInstances()` 支持直接传单个字符串 `instanceId`,并且 layer 内部不再从 `instance.userData` 扫描 ID。\n- **u-manager breaking** — `InstanceObject` 使用独立身份字段 `instanceId`、`instanceKind`、`instanceName` 和 `setInstanceIdentity()`;Scene / Facility instancing 的查询、删除和 raycast remap 都使用这些字段,`userData` 只保留原始业务元数据。\n- **u-manager breaking** — `SemanticGroup`、`BuildingGroup` 和 `FloorMesh` 的 building/floor/facility 索引统一读取语义对象 ID、实例对象 `instanceId` 或显式传入的别名,不再把 `userData.id`、`userData.semanticId`、`userData.facilityId` 自动注册成查询 ID;`ModelInstancedLayer` 会拒绝重复 `instanceId` 的新增实例,并在身份字段变化后按需刷新 id 索引。\n- **u-manager** — `InstanceObject` 新增对象级 `boundingBox`、`boundingSphere`、`computeBoundingBox()` 和 `computeBoundingSphere()`,`SceneInstanceObject`、`FacilityInstanceObject` 以及楼层语义代理可直接传给 `viewer.controls.flyToObject()`。\n- **u-manager** — `ModelInstancedLayer` 的内部实例矩阵同步改为 WebGPU storage instanced buffer 路径,运行时新增或移动实例后会在下一帧立即同步 matrix;外部仍通过修改 `InstanceObject` transform 和 dirty sync 使用,不需要直接写内部 `InstancedMesh.instanceMatrix`。\n- **u-manager** — `SemanticGroup` 新增 `getDefaultFacilityLayer()`,`SceneLoader.loadAsync()` 返回的 `SceneGroup` 新增 `sceneLayer` / `getDefaultSceneLayer()`,外部可直接获取默认 Facilities 和场景模型合批层。\n- **docs/mcp** — 更新 u-manager 文档、Examples Guide、LLM 索引和 MCP 检索说明,推荐通过 `viewer.controls.flyToObject()` 飞向实例;`getInstanceBoundingBox(target, true)` 保留给手动合并或调整世界包围盒的场景。\n\n### 示例与文档\n\n- **在线示例** — `examples/importmap.js` 的 CDN fallback 版本更新为 `0.0.29`,Vercel 部署会继续按 `package.json` 注入当前版本。\n\n## 0.0.28\n\n### 新增\n\n- **u-manager** — 新增 `UManagerLoader` 一体化入口,可同时加载 `SemanticLoader` 和 `SceneLoader`,返回带 `semanticGroup` / `sceneGroup` 直接属性的 `UManagerSceneGroup`,并复用 semantic id 去重避免重复建筑/设备。\n- **examples/docs/mcp** — 新增 `examples/test_umanager_loader.html`,演示 `UManagerLoader` 一次加载语义楼层、Facilities 和非语义场景树,并补充 Examples Guide 与 MCP 检索入口。\n\n### 变更\n\n- **u-manager breaking** — `SceneInstanceObject`、`FacilityInstanceObject` 和楼层多边形语义统一到 `InstanceObject` API:使用 `setInstanceVisible()`、`setInstanceColor()`、`setInstanceOpacity()`、`getInstanceBoundingBox()` 等方法,不再使用 scene/facility 专属实例方法。\n- **u-manager** — 新增共享 `ModelInstancedLayer`,`SceneInstancedLayer` 和 `FacilityInstancedLayer` 共用同一套模型模板 instancing、material groups、多材质、dirty sync、raycast remap 和 fallback wrapper 逻辑。\n- **ObjectManager / MaterialEffects** — 对语义实例的显隐、透明度和高亮控制统一识别 `InstanceObject`,不再维护 SceneInstance/FacilityInstance 两套特殊分支。\n- **u-manager loader** — `SceneLoader` 不再解析场景树里的 `AREA`、`FLOOR`、`ROOM` 语义面;楼层、区域和房间统一由 `SemanticLoader` / `SemanticGroup` 处理,避免同一语义对象在组合加载时重复出现。\n\n### 示例与文档\n\n- **在线示例** — `examples/importmap.js` 的 CDN fallback 版本更新为 `0.0.28`,Vercel 部署会继续按 `package.json` 注入当前版本。\n\n## 0.0.27\n\n### 变更\n\n- **u-manager semantics** — `FacilityInstancedLayer` 的相机逐实例裁剪改为显式开启:默认不再按当前相机视锥或 `minScreenRadius` 压缩 active instances,避免相机距离影响设备显隐;需要性能压缩时可通过 `setInstanceCulling({ enabled: true })` 开启。\n- **u-manager semantics** — `FacilityInstancedLayer` 使用动态 `Group` 包裹 Facilities `InstancedMesh` batch,避免 Three.js WebGPU render bundle 缓存跳过子 mesh 的渲染前同步;`hideAllFacilities()` 后再 `showAllFacilities()` 不会复用过期 active instance 状态。\n- **u-manager semantics** — `FacilityInstancedLayer` 支持合法 `material[]` + `geometry.groups` 的设备模板进入 instancing;只有 groups 缺失或材质索引非法的多材质 Mesh 才回退为普通 `Model`。\n- **u-manager semantics** — Facilities instancing 会在相机矩阵、投影矩阵或 viewport 高度变化时重新压缩当前帧实例;设备显隐、颜色、透明度和 `planish('Facilities')` / `unplanish('Facilities')` 改变 transform 时刷新 instance data。\n- **u-manager semantics** — 全部设备隐藏或透明度为 0 时,`FacilityInstancedLayer` 会关闭空的内部 `InstancedMesh`;通过 `showAllFacilities()` 或单设备 API 恢复时会重新加入渲染同步。\n- **fire 插件** — 新增 `FireEffect`,封装 Three.js 官方 `webgpu_volume_fire` 体积火焰示例,支持 WebGPU 3D 流体模拟、烟雾散射、动态光照、体积阴影、output effect 叠加和 `cameraChange` 相机切换同步。\n- **u-manager loader** — `SceneLoader` 默认读取同路径 `db/semantic_model.json` 并按语义 `ID` 跳过重复场景树节点,支持与 `SemanticLoader` 同时加载。\n- **u-manager loader** — `SceneLoader` 默认按模型 `path` 合并重复静态 3D 节点,通过 `SceneInstancedLayer` 批量渲染,同时保留 `SceneInstanceObject` 逻辑对象用于单模型 ID 检索、显隐、颜色、透明度、包围盒和事件派发。\n- **docs/mcp** — 补充 `SceneInstanceObject` 和 `FacilityInstanceObject` 通过 `objectManager.getById()` + `getInstanceBoundingBox()` + `controls.flyToBox()` 飞向单个实例的示例与 MCP 检索说明。\n- **ObjectManager / MaterialEffects** — `setOpacity()`、`show()` / `hide()`、`isolate()`、`showAll()` 以及 `highlightColor()` / `removeHighlightColor()` 支持 `SceneInstanceObject` 的 per-instance 控制。\n- **u-manager loader** — `SceneLoader` 创建的根组、`GROUP` 和 `STUB` 节点改为 `BaseGroup`,隐藏后可通过对象自身 `raycast()` 返回值阻止子级继续参与递归射线检测。\n- **Viewer** — 默认使用 Three.js `reversedDepthBuffer` 替代 `logarithmicDepthBuffer`,减少 WebGPU 顶视角多层透明场景的 fragment 压力,同时保留远距离深度精度。\n\n### 示例与文档\n\n- **在线示例** — `examples/importmap.js` 的 CDN fallback 版本更新为 `0.0.27`,Vercel 部署会继续按 `package.json` 注入当前版本。\n\n## 0.0.26\n\n### 修复\n\n- **u-manager semantics** — `FloorMesh.planish()` 会在压平后的语义实例和 Facilities 上加入稳定的轻微 Y 偏移,减少门、墙等重叠薄片之间的共面闪烁。\n- **u-manager semantics** — `FloorMesh` 会按实例透明度把合并语义网格拆分到不透明和透明材质通道,避免墙、柱、门等完全不透明实例也走透明渲染队列,降低近距离压平场景的 overdraw 成本。\n- **u-manager semantics** — `BuildingGroup` 新增 `getFloorById()`、`getElevatorById()` 和 `getVentById()`,内部通过 `Map` 维护楼层、电梯井和通风井语义 ID 索引。\n- **u-manager semantics** — `FacilityInstancedLayer` 只在实例矩阵、颜色或透明度变化时上传对应 instance buffer,静态 Facilities 不再每帧重复提交全部实例数据;渲染前会按每个 Facility 实例的世界包围盒和当前相机视锥压缩本帧 active instance count,不再通过相机距离阈值裁剪设备。\n- **u-manager semantics** — 修复 Facilities 视锥裁剪在视角切换后可能沿用上一帧 active subset 的 `visible` / `boundingSphere` 状态,导致某些视角下设备整批隐藏的问题;instanced batch 会保留完整包围球,同时用 `count` 控制本帧 active 实例。\n- **u-manager semantics** — Instanced Facilities 的 batch 材质默认保持不透明,只有源材质本身透明或当前渲染实例存在半透明 opacity 时才切到透明队列,减少完全不透明设备在近距离视角下的 overdraw。\n- **MaterialEffects** — 高亮、呼吸色、线框和淡入淡出效果支持材质数组,确保多材质 Mesh 和 `FloorMesh` 双材质通道都能正确应用并恢复材质状态。\n- **docs/mcp** — 补充 Facilities auto instancing 的动态材质透明度、包围盒视锥裁剪、`controls.flyToBox()` 飞向设备,以及多材质 fallback 对颜色/透明度 override 的支持说明。\n\n### 示例与文档\n\n- **在线示例** — `examples/importmap.js` 的 CDN fallback 版本更新为 `0.0.26`,Vercel 部署会继续按 `package.json` 注入当前版本。\n\n## 0.0.25\n\n### 新增\n\n- **u-manager semantics** — 新增 `SemanticGroup`,作为单次 `SemanticParser` 解析结果的顶层容器;`SemanticLoader.loadAsync()` / `SemanticParser.parseAsync()` 直接返回完整语义场景。\n- **u-manager semantics** — `SemanticGroup` 新增 `getBuildingById(id)`,支持按语义数据里的 `Building.ID` 获取建筑。\n- **u-manager semantics** — `SemanticGroup` 和 `BuildingGroup` 的建筑/设备 ID 查询改为内部 `Map` 索引,并通过楼层设备索引版本自动同步,避免每次查询扫描数组。\n- **u-manager semantics** — `FloorMesh.planish()` / `unplanish()`、`BuildingGroup.planishFloors()` / `unplanishFloors()` 和 `SemanticGroup.planishFloors()` / `unplanishFloors()` 会把所有合并语义实例和 Facilities 都按包围盒贴到楼层平面,而不是围绕实例自身基点压缩。\n- **u-manager semantics** — 新增 scene-level Facilities auto instancing:同模型 URL 的静态设备会合并到 `SemanticGroup.facilityLayer` 的 `InstancedMesh` batch,同时保留楼层下的设备引用用于检索、显隐、颜色和透明度控制;带动画、骨骼、morph target 或多材质 Mesh 的设备自动回退为普通 `Model`。\n- **u-manager semantics** — `SemanticGroup`、`BuildingGroup` 和 `FloorMesh` 新增 `getFacilityById()` 设备检索,返回的 `FacilityInstanceObject` 可通过统一 `setInstanceVisible()`、`setInstanceColor()`、`resetInstanceColor()` 和 `setInstanceOpacity()` 控制普通设备模型或 scene-level instanced 设备引用。\n- **docs/mcp** — 补充 Facilities auto instancing 的材质透明度行为、`resetInstanceColor()` 语义,以及多材质 fallback 对颜色/透明度 override 的限制说明。\n\n### 修复\n\n- **u-manager semantics** — 修复 scene-level instanced Facilities 的点击和指针事件派发:射线命中会映射回楼层下的 `FacilityInstanceObject`,并继续冒泡到所属 `FloorMesh`、`BuildingGroup` 和 `SemanticGroup`。\n- **u-manager semantics** — `FacilityInstancedLayer` 继承 `BaseGroup`,避免 `facilityLayer.visible = false` 后内部 `InstancedMesh` 仍参与射线检测并触发隐藏设备点击事件。\n- **u-manager semantics** — 移除语义设备解析里的 `sid` 检索和注册逻辑;Facilities 只按 `Facility.ID` 以及显式传入的别名进入楼层索引和 `viewer.objectManager`。\n\n### 示例与文档\n\n- **在线示例** — `examples/importmap.js` 的 CDN fallback 版本更新为 `0.0.25`,Vercel 部署会继续按 `package.json` 注入当前版本。\n\n## 0.0.23\n\n### 新增\n\n- **u-manager semantics** — `BuildingGroup` 新增 `isolateFloors(floors)`,支持按多个 `FloorMesh` 或楼层下标同时隔离显示多个楼层;`isolateFloor()` 继续兼容单楼层调用,并可接收数组作为便捷写法。\n- **u-manager semantics** — `SemanticLoader` 新增 `Facilities` 解析:从 `Stories[].Facilities` 索引读取顶层设备语义,用 `Facility.ID` 匹配解密后的 `tree_models` 设备节点,沿父级累乘本地矩阵得到设备世界矩阵,加载 3D 设备模型并转换为楼层局部矩阵后挂载到对应 `FloorMesh`。\n- **u-manager semantics** — `FloorMesh` 新增楼层设备检索与统一语义实体 API:`getFacilityById()`、`getFacilityAt()`、`getFacilities()`、`removeFacility()`、`showAllFacilities()`、`hideAllFacilities()`、`getSemanticById()`、`getSemantics()` 和 `getSemanticsByKind('Facilities')`;`BuildingGroup.showAllFacilities()/hideAllFacilities()` 支持批量显示或隐藏整栋建筑内的楼层设备。\n- **u-space MCP** — 文档索引同步楼层 `Facilities` 解析和检索 API,MCP 客户端可检索设备按楼层挂载、`tree_models` 解密匹配、本地矩阵父级累乘和世界坐标转换规则。\n\n### 示例与文档\n\n- **在线示例** — `examples/importmap.js` 的 CDN fallback 版本更新为 `0.0.23`,部署流程仍会优先按 `package.json` 注入当前版本。\n\n## 0.0.21\n\n### 新增\n\n- **u-manager semantics** — `SemanticLoader` 支持解析建筑级 `Elevators` 和 `Vents`,以 `Polygon.shape` 作为底面轮廓、`Elevation` 作为底面高度、`TotalHeight` 作为拉伸高度生成 `ExtrudeMesh`,并通过 `BuildingGroup.elevatorMeshes`、`BuildingGroup.ventMeshes` 及 add/get/remove 方法管理。\n\n### 修复\n\n- **透明语义体块渲染** — 电梯井/通风井在渲染阶段沿法线轻微内收,`Spaces` 实例使用稳定 per-instance 渲染偏移抖动,缓解与墙体或完全重叠空间共面时的 z-fighting。\n- **atmosphere 插件** — 后处理链移除 aerial perspective 节点,保留 lens flare、tone mapping、temporal antialias 和 dithering;`scene.backgroundNode` 使用 `skyBackground()`,`scene.environmentNode` 使用 `skyEnvironment()`,并继续在关闭插件时恢复启用前的背景和环境节点。\n\n### 示例与文档\n\n- **在线示例** — `examples/importmap.js` 的 CDN fallback 版本更新为 `0.0.21`,部署流程仍会优先按 `package.json` 注入当前版本。\n\n## 0.0.18\n\n### 变更\n\n- **版本发布** — 同步发布包含新版大气插件实现、RenderPipeline output effects 和一键 MCP 发布脚本的 npm 包。\n\n## 0.0.17\n\n### 新增\n\n- **atmosphere 插件** — `Atmosphere.enable(options)` 从占位实现升级为可用的大气渲染:支持 WGS84 经纬高定位、太阳/月亮方向、天空背景、天空环境、aerial perspective、lens flare、tone mapping、temporal antialias、dithering 和 `AtmosphereLight` 阴影。\n- **RenderPipeline** — 新增 `addOutputEffect()` / `removeOutputEffect()` 与 `addMRTChannel()` / `removeMRTChannel()`,插件可追加输出后处理和独立 MRT 通道,不再占用业务侧 `setOutputComposer()`。\n\n### 变更\n\n- **大气状态更新** — 大气插件在 `beforeRender` 中刷新相机 ECEF 位置、太阳/月亮方向和阴影 target,相机控制器驱动的移动也能逐帧更新大气状态。\n- **MCP 发布** — 根目录 MCP 发布入口合并为 `pnpm publish:mcp`,命令会先递增 `u-space-mcp` 的 patch 版本,再构建文档索引并发布 npm 包。\n\n## 0.0.16\n\n### 新增\n\n- **u-manager semantics** — `FloorMesh.planish(kind?)`、`FloorMesh.unplanish(kind?)`、`BuildingGroup.planishFloors(kind?)` 和 `BuildingGroup.unplanishFloors(kind?)` 支持按 `Walls`、`Columns`、`Spaces`、`Doors`、`Windows` 语义类型压平或恢复;`setScaleYAt(index, y)` 可只调整单个语义实例的 Y 轴缩放。\n- **BaseMesh** — 默认开启 `castShadow` 与 `receiveShadow`,基础网格和继承自 `BaseMesh` 的对象会直接参与阴影投射与接收。\n\n### 变更\n\n- **语义类型命名** — `SemanticKind` 统一为数据源字段风格:`Walls`、`Columns`、`Spaces`、`Doors`、`Windows`。\n- **示例与依赖** — 更新 `load_tiles.html` 示例依赖,新增 `@takram/three-atmosphere`、`postprocessing` peer dependency,并将 Vite 外部依赖边界扩展到所有 `@takram/*` 包。\n\n## 0.0.12\n\n### 新增\n\n- **u-manager semantics** — 新增 `SemanticLoader`、`BuildingGroup`、`FloorMesh` 语义楼层 API,支持楼层隔离、实例级颜色/透明度/显隐/matrix/scale 控制,以及实例包围盒/包围球查询。\n- **u-space MCP** — 内置文档索引同步语义楼层 API,MCP 客户端可检索 `SemanticLoader`、`BuildingGroup` 和 `FloorMesh` 用法。\n\n## 0.0.8\n\n### 新增\n\n- **Viewer** — `resize()`、`screenshot()`、`setBackground()`、`setEnvironment()`、`enableShadow()`/`disableShadow()`、`enableFog()`/`enableFogExp2()`/`disableFog()`\n- **CameraControls** — `flyTo()`、`getCameraViewpoint()`、`lock()`/`unlock()`、`setViewMode('2d' | '3d')`\n- **ObjectManager** — `show()`/`hide()`、`isolate()`、`showAll()`、`setOpacity()`、`getBoundingBox()`、`forEach()`、`filter()`\n- **InteractionManager** — `enable()`/`disable()`、`setInteractable()`、`addIgnore()`/`removeIgnore()`\n- **Selection** — 新增框选(rubber-band)和单选/多选/切换模块,支持 `select`/`deselect`/`change` 事件\n- **MaterialEffects** — `wireframe()`/`removeWireframe()`、`transparent()`/`removeTransparent()`、`xray()`/`removeXray()`、`fadeIn()`/`fadeOut()`\n- **Model** — `getBoundingBox()`、`getCenter()`、`setMaterial()`\n- **SceneManager** — 新模块,多场景创建、注册、切换与序列化\n- **LightManager** — 新模块,灯光便捷创建、4 种预设(indoor/outdoor/studio/warehouse)、Helper 可视化\n- **MeasureTool** — 新工具,距离/面积/角度测量,结果可视化渲染到场景\n- **ClippingTool** — 新工具,基于 WebGPU `ClippingGroup` 的剖切面与剖切盒\n- **AnnotationManager** — 新工具,3D 引线标注 + HTML 浮动标签\n- **示例** — 新增 8 个交互式示例页面\n\n### 修复\n\n- **Selection** — 框选覆盖层改为挂载到容器元素(而非 canvas),修复框选矩形不可见的问题\n- **ClippingTool** — 从 `renderer.clippingPlanes`(WebGL API)重写为 `ClippingGroup`(WebGPU API),修复剖切无效的问题\n- **MaterialEffects** — fade 动画在对象移除场景后自动停止,避免内存泄漏\n- **InteractionManager** — `dispose()` 中清除 `clickTimer`,避免定时器泄漏\n- **LightManager** — 修复 `removeAll()`/`hideAllHelpers()` 中遍历 Map 同时删除的问题\n- **ObjectManager** — `setOpacity()` 先检查 `isMesh` 再类型转换\n- **ClippingTool** — `PlaneHelper` 颜色使用 `new Color(color).getHex()` 替代直接 `as number`\n- **MeasureTool** — 移除 WebGPU 不支持的 `linewidth` 属性\n\n---\n\n## 0.0.7\n\n### 变更\n\n- 文档拆分:将插件文档拆分为独立文件\n- 新增 CameraControls 独立文档页\n- 修复 getting-started 中的死链\n- 修复 sbmx loader 示例使用新的 MaterialEffects API\n\n---\n\n## 0.0.6\n\n### 新增\n\n- **MaterialEffects** — 可组合的材质特效系统,支持安全共享材质和 remove API\n- **RenderPipeline** — 内置 Bloom、SSGI、TRAA 后处理及 OutputComposer API\n- **CSSRenderer** — CSS2D / CSS2.5D / CSS3D 叠加渲染 HTML 元素\n- 从 `package.json` 导出 `version`,统一示例 importmap\n\n---\n\n## 0.0.5\n\n### 变更\n\n- 版本发布(无重大功能变更)\n\n---\n\n## 0.0.4\n\n### 新增\n\n- **Model** — 动画播放支持(`playAnimation`、`stopAnimation`、`updateAnimation`)\n- **ViewerEventMap** — 事件回调新增 `delta` 时间参数\n\n---\n\n## 0.0.3\n\n### 新增\n\n- **ObjectControls** 插件 — 交互式移动、旋转、缩放 3D 对象\n- **TopologyDrawer** 插件 — 在场景任意表面交互式绘制拓扑路径图\n- **Topology** — `exportData()` / `importData()` 数据序列化\n\n### 变更\n\n- **Interactions** — `contextmenu` 事件替换为 `rightclick`\n- **Poi** — 优化渲染性能,新增 `scaleFactor` 参数\n- 文档全面完善:本地搜索、侧边栏优化、各插件文档页\n\n---\n\n## 0.0.0\n\n### 新增\n\n- 项目初始化:Viewer 核心、WebGPU 渲染器、场景/相机/控制器\n- 模型加载系统:双层缓存(内存 + 持久化)、Draco/KTX2/Meshopt 支持\n- 交互系统:射线检测、事件冒泡、自定义 3D 对象事件\n- 对象系统:Model、Poi、Topology、基础网格(Sphere/Plane/Circle/Tube/Extrude/Shape)\n- ObjectManager 集中式对象注册\n- 补间动画系统\n- u-manager 插件:场景加载、动画、属性、视点管理\n- tiles 插件:ArcGIS 3D 瓦片 / GIS 地球渲染\n- minimap 插件:2D 小地图\n- keyboard-controls 插件:WASD 键盘控制\n- tracking-controls 插件:相机跟随\n- atmosphere 插件:天空/大气渲染\n- curve-movement 插件:曲线路径动画\n"
1690
+ "content": "# 更新日志\n\n## 未发布\n\n## 0.0.33\n\n### 修复与优化\n\n- **模型持久化缓存**:主线程与 decode Worker 统一使用带版本、容量和响应元数据的 Cache Storage 策略,缓存项记录真实 `Content-Length`;模型及外部 glTF buffer/贴图支持过期与 `ETag` / `Last-Modified` 条件验证、离线旧缓存、授权请求隔离和损坏缓存单次自愈。调用方可通过 `cacheMode` 跳过、刷新、重验或强制读取缓存,通过 `cacheKey` 隔离同一 URL 的模型版本并精确删除目标缓存。对象内存缓存改为 32 项 LRU,磁盘缓存限制为 64 项或 512 MiB,并遵循 `no-store/private` 与敏感 `Vary` 响应。\n- **UManager 示例**:目标对象不存在、不是 Mesh 或使用多材质时,示例不再直接写入材质属性而导致页面报错。\n\n## 0.0.32\n\n### 修复与优化\n\n- **Offscreen 在线示例场景源** — 保留本地 `examples/scenes/飞龙吾悦广场` 及其匹配密钥;GitHub 发布流程会在 Vercel 构建前拉取真实 Git LFS 对象,构建脚本也会拒绝仅含 pointer 的场景。超过 Vercel 单文件上限的场景资源会在部署产物中拆成 90 MiB 分片,由 render/decode Worker 流式还原,既避免把 LFS pointer 当作 JSON,也不替换原场景。\n\n### 文档\n\n- **TSLEffects Outline** — 补齐 `TSLEffects.outline()`、`TSLOutlineOptions`、`TSLOutlineEffect`、RenderPipeline output-effect 接入、`InstanceObject` 渲染对象/bounds proxy 策略、资源释放、`test_outline.html` 在线示例及 MCP/LLM 检索入口。该效果最早随 `0.0.30` 发布,本次补全此前遗漏的文档发布面。\n\n## 0.0.31\n\n### 新增\n\n- **嵌套模型 Decode Worker** — 新增 `u-space/worker/model-decoder` 和 `ModelLoaderManager.setDecodeWorker()`;静态 glTF/GLB/SBMX 可在 render Worker 之外完成 fetch/cache、SBMX 还原、JSON/base64/buffer 与图片解码,再以 transferable `ArrayBuffer` / `ImageBitmap` 交回 Three.js owner。协议使用单包 ACK backpressure、AbortSignal 和贴图内容身份复用,复杂 glTF 特性自动回退原 loader;Offscreen UManager 示例默认启用,并支持 `?modelDecodeWorker=off` A/B。\n\n### 修复与优化\n\n- **Offscreen 在线示例** — Vercel 发布现在通过专用 Vite 配置构建 `examples/offscreen/test_umanager2_offscreen.html`,输出可直接运行的主线程 JavaScript、ES module Worker 和 Draco/Basis WASM 资源,不再让生产页面直接加载 TypeScript;Worker 的 HDR URL 同时兼容本地 `/textures/` 与线上 `/examples/textures/` 路径。\n- **Offscreen Worker 超大贴图** — Worker runtime 同时覆盖 Three.js `ImageLoader` 与 `ImageBitmapLoader`;JPEG/PNG/GIF/WebP 任一边超过 WebGPU 默认 `8192` 上限时,在首次 `createImageBitmap()` 解码时等比缩小并保留 loader options/cache/abort 语义,避免 `Texture size` 继续级联为 `Invalid TextureView`、`Invalid BindGroup` 和 `Invalid CommandBuffer`。未知格式在解码后缩放并释放临时原图,源资产不会被修改。\n- **Offscreen UManager 设备调试** — 增加上一个/下一个设备、飞向、高亮和清除命令;语义楼层、墙体、空间、门窗和设备默认全部显示,设备切换、飞向和清除不再改变其他对象显隐。\n- **模型 Decode Worker 稳定性与安全性** — 外部 buffer/贴图恢复 `LoadingManager.resolveURL()` 和完整 item 生命周期,跨域依赖不再继承模型请求的授权 headers/credentials;增加 glTF 节点图规模、深度、环、多父节点与重复 child 校验,并把贴图内容身份缓存改为有界 LRU。decode Worker 崩溃会自动摘除并回退当前请求,`setDecodeWorker()` 返回实例绑定 disposer,AbortSignal 也覆盖普通 loader 路径;失败的 `Model` 内存缓存 Promise 会被清除以允许重试。\n\n## 0.0.30\n\n### 新增\n\n- **TSLEffects Outline** — 新增 `TSLEffects.outline()` 可组合 output effect,支持普通 `Object3D` 与核心 `InstanceObject` 的可见/隐藏边缘描边、运行时选择和样式更新,以及在实例没有直接可描边渲染子树时使用世界包围盒代理;`examples/test_outline.html` 提供交互示例。\n- **AO 示例** — 新增 `examples/test_ao.html`,通过 SSGI 的 `giIntensity: 0` 默认开启纯 AO,并提供遮蔽强度、半径和厚度实时调节。\n- **RenderPipeline SSR** — 新增 `enableSSR()`、`updateSSR()` 和 `disableSSR()`,封装 Stochastic SSR、Temporal Reproject、Recurrent Denoise、velocity 以及双向历史反馈;提供完整 SSR 与降噪参数配置。\n- **Viewer** — 新增可选 `pixelRatio` 构造参数,省略时继续使用 `Math.min(window.devicePixelRatio, 1.5)`。\n- **Offscreen UManager 示例** — `examples/offscreen/test_umanager2_offscreen.html` 现在在 Worker 内启用 `SceneLoader.setEditableBatching()`、预热 WebGPU batch pipeline,并将渲染与 editable batch 统计传回主线程 HUD。\n- **u-manager editable batching** — `SceneLoader.setEditableBatching()` 可把大型、主要静态的普通 Mesh 场景按材质和 Geometry 布局烘焙合并到 `SceneEditableBatchLayer`,同时保留 `SceneInstanceObject` 的显隐、颜色、高亮、bounds 和 raycast 映射;transform 或半透明修改会只 materialize 当前对象,透明/蒙皮/morph/自定义材质等不支持子集保持安全 fallback。\n- **核心 Batches API** — 新增公共 `src/batches` 模块和 `EditableGeometryBatchLayer<T extends InstanceObject>`,提供通用 source/build/unsupported 结果、TSL dirty 状态、typed materialize 事件、lazy BVH hit remap、统计与资源释放;`ModelInstancedLayer` 同步归入该模块,顶层 `u-space` 导入方式保持不变。\n\n### 变更\n\n- **Offscreen Worker breaking** — 移除 callback 风格的 `defineWorkerViewer()`、`WorkerViewerSetup`、`WorkerViewerSetupResult` 和 `WorkerViewerContext`;改为在 module Worker 顶层 `await createWorkerViewer()`,并通过返回的 `WorkerViewerRuntime` 顺序调用 `status()`、`registerCommand()`、`onDispose()` 和 `ready()`。\n- **InstanceObject materialize** — 将 `SceneInstanceObject` 私有的 materializer delegate 提升为核心 `InstanceObject.setInstanceMaterializer()` / `clearInstanceMaterializer()` / `materialize()` 协议;`SceneEditableBatchLayer` 改为核心 `EditableGeometryBatchLayer` 的 scene-specific 薄适配层,fallback 移除改用 typed `materialize` 事件。\n\n### 修复与优化\n\n- **Offscreen UManager 帧率与楼壳显示** — 示例保留语义数据用于相机定位,但默认隐藏会半透明覆盖楼壳的高 draw-call 分析层;同时通过 Three.js 原生 `Scene.matrixWorldAutoUpdate` / `Object3D.updateWorldMatrix()` 关闭静态场景每帧整树矩阵遍历,并保留标准 RenderPipeline scene pass 以确保源模型透明对象正确合成。在不调整 pixel ratio 的情况下,目标场景持续拖拽可维持约 59–60 FPS。\n- **Editable Geometry Batch 不透明材质** — 不透明 batch 不再复用动态 opacity 节点同时驱动 alpha 输出和 `maskNode`;源材质 opacity 路径保持不变,对象显隐改用独立布尔遮罩,修复建筑楼壳被错误显示为半透明的问题。\n- **InstanceObject 静态矩阵更新** — 覆盖 Three.js 原生 `updateWorldMatrix()`,与 `updateMatrixWorld()` 共享世界矩阵/祖先显隐 dirty 检测;根 Scene 冻结自动矩阵更新后,显式更新单个实例或父 Group 仍会同步 instanced buffer,并让 editable batch 的变换差异正确触发 materialize。\n- **Editable Geometry Batch 拾取** — 公共 `EditableGeometryBatchLayer` 继承 `BaseGroup`,内部未导出的 `EditableGeometryBatchMesh` 继承 `BaseMesh` 并在自定义 BVH raycast 前保留不可见短路;隐藏整个 editable layer 或单个 merged batch 后不会继续命中逻辑对象。\n- **Editable Geometry Batch 生命周期** — 修复多个 layer 共用 inverse matrix、dirty transform 因旧 bounds 先被视锥裁剪、冻结根 Scene 下新挂载模型错过当帧世界矩阵、跨 layer materialize 后旧副本仍显示、materialize 对象共享模板材质、旧烘焙位置残留 BVH 命中、负缩放实例错误进入 merged/instanced path、重复实例生成幽灵几何、重复 build 累积资源、旧 layer dispose 清除新 materializer,以及 build 期间已 materialize 对象重复进入透明 fallback;`EditableGeometryBatchLayer` 现在是 one-shot builder。\n- **Offscreen HUD** — renderer stats 改为 1 秒滚动窗口的 FPS、平均/p95/最大帧间隔、超过 25ms 的占比和样本数,并排除 demand 模式从静止恢复时的空闲间隔。\n- **Offscreen Worker lifecycle** — 修复初始化期间销毁导致 `host.init()` 永久 pending、canvas 转移/初始 `postMessage()` 失败后未完成本地清理、dispose 后迟到的业务消息仍被派发、待发送 pointer move rAF 未取消、`ready()` 前加载失败未释放 Worker/GPU 资源,以及重复 `ArrayBuffer` transfer list 抛出 `DataCloneError`。\n- **RenderPipeline SSGI** — 修正 AO/GI 合成,改为 `scene × AO + diffuse × GI`,确保 `aoIntensity` 与 `giIntensity` 分别作用于遮蔽和间接漫反射;同时兼容 Viewer 默认的 reversed depth 背景判断,并在与 SSR 同时启用时复用 diffuse MRT 附件。\n- **RenderPipeline SSR** — 兼容 Viewer 默认的 `reversedDepthBuffer`:三个内部全屏 pass 会正确跳过 clear-depth 背景,同时保留 raw reversed depth 用于位置重建、ray marching 和 temporal history。\n- **SSR 示例** — 新增 `examples/test_ssr.html`,并使用 1× drawing buffer、`maxDistance: 0.4`、静态 2048² 阴影和关闭默认性能面板的配置降低 GPU 开销。\n\n### 文档\n\n- **docs/mcp** — 将核心 `InstanceObject` 的完整 API 归入 Objects 文档,并同步 u-manager 子类引用、LLM 摘要和 MCP 检索索引;运行时 API 未发生变化。\n- **u-manager editable batching** — 补充 `setEditableBatching()` 配置、合并键、TSL 状态纹理、materialize/fallback 边界、统计字段、显存权衡、`test_umanager2.html` 示例和 MCP 检索范围。\n- **OffscreenCanvas Worker** — 补充 `OffscreenViewerHost` 构造选项、方法、事件和统计字段,明确 `host.init()` / `initialized` 与一次性业务 `ready` 的边界,以及 `examples/offscreen/test_umanager2_offscreen.html` 的 editable batching、`compileAsync()` 预热、HUD 统计、静态根节点下 `InstanceObject` 显式矩阵提交、structured-clone/command 边界和 MCP 检索入口。\n- **SSR** — 补充完整 RenderPipeline SSR API、时域/降噪配置、reversed-depth 兼容说明、性能建议与在线示例入口。\n\n## 0.0.29\n\n### 变更\n\n- **u-manager breaking** — 通用实例基类和模型合批层从 `plugins/u-manager/instances` 移入核心;`InstanceObject` 位于 `src/instances`,`ModelInstancedLayer` / `InstanceCullingOptions` 位于 `src/batches`,均继续通过顶层 `u-space` 导出;旧 `SemanticInstanceObject` / `SemanticModelInstancedLayer` 命名不再保留。\n- **u-manager breaking** — `ModelInstancedLayer` 移除旧的 `addSemanticBatch()` 公开入口,改为 `reserveBatch()`、`addInstance()` / `addInstances()`、`getInstanceById()`、`removeInstance()` / `removeInstances()`、`removeBatch()` 和 `clearBatches()`,支持运行时实例新增/删除、按 URL batch 的 capacity 预分配与扩容;`removeInstances()` 支持直接传单个字符串 `instanceId`,并且 layer 内部不再从 `instance.userData` 扫描 ID。\n- **u-manager breaking** — `InstanceObject` 使用独立身份字段 `instanceId`、`instanceKind`、`instanceName` 和 `setInstanceIdentity()`;Scene / Facility instancing 的查询、删除和 raycast remap 都使用这些字段,`userData` 只保留原始业务元数据。\n- **u-manager breaking** — `SemanticGroup`、`BuildingGroup` 和 `FloorMesh` 的 building/floor/facility 索引统一读取语义对象 ID、实例对象 `instanceId` 或显式传入的别名,不再把 `userData.id`、`userData.semanticId`、`userData.facilityId` 自动注册成查询 ID;`ModelInstancedLayer` 会拒绝重复 `instanceId` 的新增实例,并在身份字段变化后按需刷新 id 索引。\n- **u-manager** — `InstanceObject` 新增对象级 `boundingBox`、`boundingSphere`、`computeBoundingBox()` 和 `computeBoundingSphere()`,`SceneInstanceObject`、`FacilityInstanceObject` 以及楼层语义代理可直接传给 `viewer.controls.flyToObject()`。\n- **u-manager** — `ModelInstancedLayer` 的内部实例矩阵同步改为 WebGPU storage instanced buffer 路径,运行时新增或移动实例后会在下一帧立即同步 matrix;外部仍通过修改 `InstanceObject` transform 和 dirty sync 使用,不需要直接写内部 `InstancedMesh.instanceMatrix`。\n- **u-manager** — `SemanticGroup` 新增 `getDefaultFacilityLayer()`,`SceneLoader.loadAsync()` 返回的 `SceneGroup` 新增 `sceneLayer` / `getDefaultSceneLayer()`,外部可直接获取默认 Facilities 和场景模型合批层。\n- **docs/mcp** — 更新 u-manager 文档、Examples Guide、LLM 索引和 MCP 检索说明,推荐通过 `viewer.controls.flyToObject()` 飞向实例;`getInstanceBoundingBox(target, true)` 保留给手动合并或调整世界包围盒的场景。\n\n### 示例与文档\n\n- **在线示例** — `examples/importmap.js` 的 CDN fallback 版本更新为 `0.0.29`,Vercel 部署会继续按 `package.json` 注入当前版本。\n\n## 0.0.28\n\n### 新增\n\n- **u-manager** — 新增 `UManagerLoader` 一体化入口,可同时加载 `SemanticLoader` 和 `SceneLoader`,返回带 `semanticGroup` / `sceneGroup` 直接属性的 `UManagerSceneGroup`,并复用 semantic id 去重避免重复建筑/设备。\n- **examples/docs/mcp** — 新增 `examples/test_umanager_loader.html`,演示 `UManagerLoader` 一次加载语义楼层、Facilities 和非语义场景树,并补充 Examples Guide 与 MCP 检索入口。\n\n### 变更\n\n- **u-manager breaking** — `SceneInstanceObject`、`FacilityInstanceObject` 和楼层多边形语义统一到 `InstanceObject` API:使用 `setInstanceVisible()`、`setInstanceColor()`、`setInstanceOpacity()`、`getInstanceBoundingBox()` 等方法,不再使用 scene/facility 专属实例方法。\n- **u-manager** — 新增共享 `ModelInstancedLayer`,`SceneInstancedLayer` 和 `FacilityInstancedLayer` 共用同一套模型模板 instancing、material groups、多材质、dirty sync、raycast remap 和 fallback wrapper 逻辑。\n- **ObjectManager / MaterialEffects** — 对语义实例的显隐、透明度和高亮控制统一识别 `InstanceObject`,不再维护 SceneInstance/FacilityInstance 两套特殊分支。\n- **u-manager loader** — `SceneLoader` 不再解析场景树里的 `AREA`、`FLOOR`、`ROOM` 语义面;楼层、区域和房间统一由 `SemanticLoader` / `SemanticGroup` 处理,避免同一语义对象在组合加载时重复出现。\n\n### 示例与文档\n\n- **在线示例** — `examples/importmap.js` 的 CDN fallback 版本更新为 `0.0.28`,Vercel 部署会继续按 `package.json` 注入当前版本。\n\n## 0.0.27\n\n### 变更\n\n- **u-manager semantics** — `FacilityInstancedLayer` 的相机逐实例裁剪改为显式开启:默认不再按当前相机视锥或 `minScreenRadius` 压缩 active instances,避免相机距离影响设备显隐;需要性能压缩时可通过 `setInstanceCulling({ enabled: true })` 开启。\n- **u-manager semantics** — `FacilityInstancedLayer` 使用动态 `Group` 包裹 Facilities `InstancedMesh` batch,避免 Three.js WebGPU render bundle 缓存跳过子 mesh 的渲染前同步;`hideAllFacilities()` 后再 `showAllFacilities()` 不会复用过期 active instance 状态。\n- **u-manager semantics** — `FacilityInstancedLayer` 支持合法 `material[]` + `geometry.groups` 的设备模板进入 instancing;只有 groups 缺失或材质索引非法的多材质 Mesh 才回退为普通 `Model`。\n- **u-manager semantics** — Facilities instancing 会在相机矩阵、投影矩阵或 viewport 高度变化时重新压缩当前帧实例;设备显隐、颜色、透明度和 `planish('Facilities')` / `unplanish('Facilities')` 改变 transform 时刷新 instance data。\n- **u-manager semantics** — 全部设备隐藏或透明度为 0 时,`FacilityInstancedLayer` 会关闭空的内部 `InstancedMesh`;通过 `showAllFacilities()` 或单设备 API 恢复时会重新加入渲染同步。\n- **fire 插件** — 新增 `FireEffect`,封装 Three.js 官方 `webgpu_volume_fire` 体积火焰示例,支持 WebGPU 3D 流体模拟、烟雾散射、动态光照、体积阴影、output effect 叠加和 `cameraChange` 相机切换同步。\n- **u-manager loader** — `SceneLoader` 默认读取同路径 `db/semantic_model.json` 并按语义 `ID` 跳过重复场景树节点,支持与 `SemanticLoader` 同时加载。\n- **u-manager loader** — `SceneLoader` 默认按模型 `path` 合并重复静态 3D 节点,通过 `SceneInstancedLayer` 批量渲染,同时保留 `SceneInstanceObject` 逻辑对象用于单模型 ID 检索、显隐、颜色、透明度、包围盒和事件派发。\n- **docs/mcp** — 补充 `SceneInstanceObject` 和 `FacilityInstanceObject` 通过 `objectManager.getById()` + `getInstanceBoundingBox()` + `controls.flyToBox()` 飞向单个实例的示例与 MCP 检索说明。\n- **ObjectManager / MaterialEffects** — `setOpacity()`、`show()` / `hide()`、`isolate()`、`showAll()` 以及 `highlightColor()` / `removeHighlightColor()` 支持 `SceneInstanceObject` 的 per-instance 控制。\n- **u-manager loader** — `SceneLoader` 创建的根组、`GROUP` 和 `STUB` 节点改为 `BaseGroup`,隐藏后可通过对象自身 `raycast()` 返回值阻止子级继续参与递归射线检测。\n- **Viewer** — 默认使用 Three.js `reversedDepthBuffer` 替代 `logarithmicDepthBuffer`,减少 WebGPU 顶视角多层透明场景的 fragment 压力,同时保留远距离深度精度。\n\n### 示例与文档\n\n- **在线示例** — `examples/importmap.js` 的 CDN fallback 版本更新为 `0.0.27`,Vercel 部署会继续按 `package.json` 注入当前版本。\n\n## 0.0.26\n\n### 修复\n\n- **u-manager semantics** — `FloorMesh.planish()` 会在压平后的语义实例和 Facilities 上加入稳定的轻微 Y 偏移,减少门、墙等重叠薄片之间的共面闪烁。\n- **u-manager semantics** — `FloorMesh` 会按实例透明度把合并语义网格拆分到不透明和透明材质通道,避免墙、柱、门等完全不透明实例也走透明渲染队列,降低近距离压平场景的 overdraw 成本。\n- **u-manager semantics** — `BuildingGroup` 新增 `getFloorById()`、`getElevatorById()` 和 `getVentById()`,内部通过 `Map` 维护楼层、电梯井和通风井语义 ID 索引。\n- **u-manager semantics** — `FacilityInstancedLayer` 只在实例矩阵、颜色或透明度变化时上传对应 instance buffer,静态 Facilities 不再每帧重复提交全部实例数据;渲染前会按每个 Facility 实例的世界包围盒和当前相机视锥压缩本帧 active instance count,不再通过相机距离阈值裁剪设备。\n- **u-manager semantics** — 修复 Facilities 视锥裁剪在视角切换后可能沿用上一帧 active subset 的 `visible` / `boundingSphere` 状态,导致某些视角下设备整批隐藏的问题;instanced batch 会保留完整包围球,同时用 `count` 控制本帧 active 实例。\n- **u-manager semantics** — Instanced Facilities 的 batch 材质默认保持不透明,只有源材质本身透明或当前渲染实例存在半透明 opacity 时才切到透明队列,减少完全不透明设备在近距离视角下的 overdraw。\n- **MaterialEffects** — 高亮、呼吸色、线框和淡入淡出效果支持材质数组,确保多材质 Mesh 和 `FloorMesh` 双材质通道都能正确应用并恢复材质状态。\n- **docs/mcp** — 补充 Facilities auto instancing 的动态材质透明度、包围盒视锥裁剪、`controls.flyToBox()` 飞向设备,以及多材质 fallback 对颜色/透明度 override 的支持说明。\n\n### 示例与文档\n\n- **在线示例** — `examples/importmap.js` 的 CDN fallback 版本更新为 `0.0.26`,Vercel 部署会继续按 `package.json` 注入当前版本。\n\n## 0.0.25\n\n### 新增\n\n- **u-manager semantics** — 新增 `SemanticGroup`,作为单次 `SemanticParser` 解析结果的顶层容器;`SemanticLoader.loadAsync()` / `SemanticParser.parseAsync()` 直接返回完整语义场景。\n- **u-manager semantics** — `SemanticGroup` 新增 `getBuildingById(id)`,支持按语义数据里的 `Building.ID` 获取建筑。\n- **u-manager semantics** — `SemanticGroup` 和 `BuildingGroup` 的建筑/设备 ID 查询改为内部 `Map` 索引,并通过楼层设备索引版本自动同步,避免每次查询扫描数组。\n- **u-manager semantics** — `FloorMesh.planish()` / `unplanish()`、`BuildingGroup.planishFloors()` / `unplanishFloors()` 和 `SemanticGroup.planishFloors()` / `unplanishFloors()` 会把所有合并语义实例和 Facilities 都按包围盒贴到楼层平面,而不是围绕实例自身基点压缩。\n- **u-manager semantics** — 新增 scene-level Facilities auto instancing:同模型 URL 的静态设备会合并到 `SemanticGroup.facilityLayer` 的 `InstancedMesh` batch,同时保留楼层下的设备引用用于检索、显隐、颜色和透明度控制;带动画、骨骼、morph target 或多材质 Mesh 的设备自动回退为普通 `Model`。\n- **u-manager semantics** — `SemanticGroup`、`BuildingGroup` 和 `FloorMesh` 新增 `getFacilityById()` 设备检索,返回的 `FacilityInstanceObject` 可通过统一 `setInstanceVisible()`、`setInstanceColor()`、`resetInstanceColor()` 和 `setInstanceOpacity()` 控制普通设备模型或 scene-level instanced 设备引用。\n- **docs/mcp** — 补充 Facilities auto instancing 的材质透明度行为、`resetInstanceColor()` 语义,以及多材质 fallback 对颜色/透明度 override 的限制说明。\n\n### 修复\n\n- **u-manager semantics** — 修复 scene-level instanced Facilities 的点击和指针事件派发:射线命中会映射回楼层下的 `FacilityInstanceObject`,并继续冒泡到所属 `FloorMesh`、`BuildingGroup` 和 `SemanticGroup`。\n- **u-manager semantics** — `FacilityInstancedLayer` 继承 `BaseGroup`,避免 `facilityLayer.visible = false` 后内部 `InstancedMesh` 仍参与射线检测并触发隐藏设备点击事件。\n- **u-manager semantics** — 移除语义设备解析里的 `sid` 检索和注册逻辑;Facilities 只按 `Facility.ID` 以及显式传入的别名进入楼层索引和 `viewer.objectManager`。\n\n### 示例与文档\n\n- **在线示例** — `examples/importmap.js` 的 CDN fallback 版本更新为 `0.0.25`,Vercel 部署会继续按 `package.json` 注入当前版本。\n\n## 0.0.23\n\n### 新增\n\n- **u-manager semantics** — `BuildingGroup` 新增 `isolateFloors(floors)`,支持按多个 `FloorMesh` 或楼层下标同时隔离显示多个楼层;`isolateFloor()` 继续兼容单楼层调用,并可接收数组作为便捷写法。\n- **u-manager semantics** — `SemanticLoader` 新增 `Facilities` 解析:从 `Stories[].Facilities` 索引读取顶层设备语义,用 `Facility.ID` 匹配解密后的 `tree_models` 设备节点,沿父级累乘本地矩阵得到设备世界矩阵,加载 3D 设备模型并转换为楼层局部矩阵后挂载到对应 `FloorMesh`。\n- **u-manager semantics** — `FloorMesh` 新增楼层设备检索与统一语义实体 API:`getFacilityById()`、`getFacilityAt()`、`getFacilities()`、`removeFacility()`、`showAllFacilities()`、`hideAllFacilities()`、`getSemanticById()`、`getSemantics()` 和 `getSemanticsByKind('Facilities')`;`BuildingGroup.showAllFacilities()/hideAllFacilities()` 支持批量显示或隐藏整栋建筑内的楼层设备。\n- **u-space MCP** — 文档索引同步楼层 `Facilities` 解析和检索 API,MCP 客户端可检索设备按楼层挂载、`tree_models` 解密匹配、本地矩阵父级累乘和世界坐标转换规则。\n\n### 示例与文档\n\n- **在线示例** — `examples/importmap.js` 的 CDN fallback 版本更新为 `0.0.23`,部署流程仍会优先按 `package.json` 注入当前版本。\n\n## 0.0.21\n\n### 新增\n\n- **u-manager semantics** — `SemanticLoader` 支持解析建筑级 `Elevators` 和 `Vents`,以 `Polygon.shape` 作为底面轮廓、`Elevation` 作为底面高度、`TotalHeight` 作为拉伸高度生成 `ExtrudeMesh`,并通过 `BuildingGroup.elevatorMeshes`、`BuildingGroup.ventMeshes` 及 add/get/remove 方法管理。\n\n### 修复\n\n- **透明语义体块渲染** — 电梯井/通风井在渲染阶段沿法线轻微内收,`Spaces` 实例使用稳定 per-instance 渲染偏移抖动,缓解与墙体或完全重叠空间共面时的 z-fighting。\n- **atmosphere 插件** — 后处理链移除 aerial perspective 节点,保留 lens flare、tone mapping、temporal antialias 和 dithering;`scene.backgroundNode` 使用 `skyBackground()`,`scene.environmentNode` 使用 `skyEnvironment()`,并继续在关闭插件时恢复启用前的背景和环境节点。\n\n### 示例与文档\n\n- **在线示例** — `examples/importmap.js` 的 CDN fallback 版本更新为 `0.0.21`,部署流程仍会优先按 `package.json` 注入当前版本。\n\n## 0.0.18\n\n### 变更\n\n- **版本发布** — 同步发布包含新版大气插件实现、RenderPipeline output effects 和一键 MCP 发布脚本的 npm 包。\n\n## 0.0.17\n\n### 新增\n\n- **atmosphere 插件** — `Atmosphere.enable(options)` 从占位实现升级为可用的大气渲染:支持 WGS84 经纬高定位、太阳/月亮方向、天空背景、天空环境、aerial perspective、lens flare、tone mapping、temporal antialias、dithering 和 `AtmosphereLight` 阴影。\n- **RenderPipeline** — 新增 `addOutputEffect()` / `removeOutputEffect()` 与 `addMRTChannel()` / `removeMRTChannel()`,插件可追加输出后处理和独立 MRT 通道,不再占用业务侧 `setOutputComposer()`。\n\n### 变更\n\n- **大气状态更新** — 大气插件在 `beforeRender` 中刷新相机 ECEF 位置、太阳/月亮方向和阴影 target,相机控制器驱动的移动也能逐帧更新大气状态。\n- **MCP 发布** — 根目录 MCP 发布入口合并为 `pnpm publish:mcp`,命令会先递增 `u-space-mcp` 的 patch 版本,再构建文档索引并发布 npm 包。\n\n## 0.0.16\n\n### 新增\n\n- **u-manager semantics** — `FloorMesh.planish(kind?)`、`FloorMesh.unplanish(kind?)`、`BuildingGroup.planishFloors(kind?)` 和 `BuildingGroup.unplanishFloors(kind?)` 支持按 `Walls`、`Columns`、`Spaces`、`Doors`、`Windows` 语义类型压平或恢复;`setScaleYAt(index, y)` 可只调整单个语义实例的 Y 轴缩放。\n- **BaseMesh** — 默认开启 `castShadow` 与 `receiveShadow`,基础网格和继承自 `BaseMesh` 的对象会直接参与阴影投射与接收。\n\n### 变更\n\n- **语义类型命名** — `SemanticKind` 统一为数据源字段风格:`Walls`、`Columns`、`Spaces`、`Doors`、`Windows`。\n- **示例与依赖** — 更新 `load_tiles.html` 示例依赖,新增 `@takram/three-atmosphere`、`postprocessing` peer dependency,并将 Vite 外部依赖边界扩展到所有 `@takram/*` 包。\n\n## 0.0.12\n\n### 新增\n\n- **u-manager semantics** — 新增 `SemanticLoader`、`BuildingGroup`、`FloorMesh` 语义楼层 API,支持楼层隔离、实例级颜色/透明度/显隐/matrix/scale 控制,以及实例包围盒/包围球查询。\n- **u-space MCP** — 内置文档索引同步语义楼层 API,MCP 客户端可检索 `SemanticLoader`、`BuildingGroup` 和 `FloorMesh` 用法。\n\n## 0.0.8\n\n### 新增\n\n- **Viewer** — `resize()`、`screenshot()`、`setBackground()`、`setEnvironment()`、`enableShadow()`/`disableShadow()`、`enableFog()`/`enableFogExp2()`/`disableFog()`\n- **CameraControls** — `flyTo()`、`getCameraViewpoint()`、`lock()`/`unlock()`、`setViewMode('2d' | '3d')`\n- **ObjectManager** — `show()`/`hide()`、`isolate()`、`showAll()`、`setOpacity()`、`getBoundingBox()`、`forEach()`、`filter()`\n- **InteractionManager** — `enable()`/`disable()`、`setInteractable()`、`addIgnore()`/`removeIgnore()`\n- **Selection** — 新增框选(rubber-band)和单选/多选/切换模块,支持 `select`/`deselect`/`change` 事件\n- **MaterialEffects** — `wireframe()`/`removeWireframe()`、`transparent()`/`removeTransparent()`、`xray()`/`removeXray()`、`fadeIn()`/`fadeOut()`\n- **Model** — `getBoundingBox()`、`getCenter()`、`setMaterial()`\n- **SceneManager** — 新模块,多场景创建、注册、切换与序列化\n- **LightManager** — 新模块,灯光便捷创建、4 种预设(indoor/outdoor/studio/warehouse)、Helper 可视化\n- **MeasureTool** — 新工具,距离/面积/角度测量,结果可视化渲染到场景\n- **ClippingTool** — 新工具,基于 WebGPU `ClippingGroup` 的剖切面与剖切盒\n- **AnnotationManager** — 新工具,3D 引线标注 + HTML 浮动标签\n- **示例** — 新增 8 个交互式示例页面\n\n### 修复\n\n- **Selection** — 框选覆盖层改为挂载到容器元素(而非 canvas),修复框选矩形不可见的问题\n- **ClippingTool** — 从 `renderer.clippingPlanes`(WebGL API)重写为 `ClippingGroup`(WebGPU API),修复剖切无效的问题\n- **MaterialEffects** — fade 动画在对象移除场景后自动停止,避免内存泄漏\n- **InteractionManager** — `dispose()` 中清除 `clickTimer`,避免定时器泄漏\n- **LightManager** — 修复 `removeAll()`/`hideAllHelpers()` 中遍历 Map 同时删除的问题\n- **ObjectManager** — `setOpacity()` 先检查 `isMesh` 再类型转换\n- **ClippingTool** — `PlaneHelper` 颜色使用 `new Color(color).getHex()` 替代直接 `as number`\n- **MeasureTool** — 移除 WebGPU 不支持的 `linewidth` 属性\n\n---\n\n## 0.0.7\n\n### 变更\n\n- 文档拆分:将插件文档拆分为独立文件\n- 新增 CameraControls 独立文档页\n- 修复 getting-started 中的死链\n- 修复 sbmx loader 示例使用新的 MaterialEffects API\n\n---\n\n## 0.0.6\n\n### 新增\n\n- **MaterialEffects** — 可组合的材质特效系统,支持安全共享材质和 remove API\n- **RenderPipeline** — 内置 Bloom、SSGI、TRAA 后处理及 OutputComposer API\n- **CSSRenderer** — CSS2D / CSS2.5D / CSS3D 叠加渲染 HTML 元素\n- 从 `package.json` 导出 `version`,统一示例 importmap\n\n---\n\n## 0.0.5\n\n### 变更\n\n- 版本发布(无重大功能变更)\n\n---\n\n## 0.0.4\n\n### 新增\n\n- **Model** — 动画播放支持(`playAnimation`、`stopAnimation`、`updateAnimation`)\n- **ViewerEventMap** — 事件回调新增 `delta` 时间参数\n\n---\n\n## 0.0.3\n\n### 新增\n\n- **ObjectControls** 插件 — 交互式移动、旋转、缩放 3D 对象\n- **TopologyDrawer** 插件 — 在场景任意表面交互式绘制拓扑路径图\n- **Topology** — `exportData()` / `importData()` 数据序列化\n\n### 变更\n\n- **Interactions** — `contextmenu` 事件替换为 `rightclick`\n- **Poi** — 优化渲染性能,新增 `scaleFactor` 参数\n- 文档全面完善:本地搜索、侧边栏优化、各插件文档页\n\n---\n\n## 0.0.0\n\n### 新增\n\n- 项目初始化:Viewer 核心、WebGPU 渲染器、场景/相机/控制器\n- 模型加载系统:双层缓存(内存 + 持久化)、Draco/KTX2/Meshopt 支持\n- 交互系统:射线检测、事件冒泡、自定义 3D 对象事件\n- 对象系统:Model、Poi、Topology、基础网格(Sphere/Plane/Circle/Tube/Extrude/Shape)\n- ObjectManager 集中式对象注册\n- 补间动画系统\n- u-manager 插件:场景加载、动画、属性、视点管理\n- tiles 插件:ArcGIS 3D 瓦片 / GIS 地球渲染\n- minimap 插件:2D 小地图\n- keyboard-controls 插件:WASD 键盘控制\n- tracking-controls 插件:相机跟随\n- atmosphere 插件:天空/大气渲染\n- curve-movement 插件:曲线路径动画\n"
1659
1691
  },
1660
1692
  {
1661
1693
  "id": "examples-guide",
1662
1694
  "path": "examples-guide.md",
1663
1695
  "title": "示例指南",
1664
- "summary": "`u-space` 的 `examples/` 目录中包含了大量演示引擎功能的示例。以下是几个关键示例及其所展示的系统特性。 示例统一通过 `examples/importmap.js` 注入 Import Map。本地通过 `localhost`、`127.0.0.1`、`0.0.0.0` 或 `192.168.x.x` 访问时会加载仓库里的 `../dist/` 构建产物;在线部署或非本地域名访问时会从 jsDelivr 加载当前发布版本 `u-space@0.0.31`。Vercel 文档部署会继续把 `__VERSION__` 占位符替换为 `package.json` 中的版本号,源码里的 `0.0.31` 作为直接托管 `examples/` 时的 fallback。 插件示例可以在页面加载 `importmap.js` 前通过 `window.__IMPORTS__` 声明额",
1696
+ "summary": "`u-space` 的 `examples/` 目录中包含了大量演示引擎功能的示例。以下是几个关键示例及其所展示的系统特性。 示例统一通过 `examples/importmap.js` 注入 Import Map。本地通过 `localhost`、`127.0.0.1`、`0.0.0.0` 或 `192.168.x.x` 访问时会加载仓库里的 `../dist/` 构建产物;在线部署或非本地域名访问时会从 jsDelivr 加载当前发布版本 `u-space@0.0.33`。Vercel 文档部署会继续把 `__VERSION__` 占位符替换为 `package.json` 中的版本号,源码里的 `0.0.33` 作为直接托管 `examples/` 时的 fallback。 插件示例可以在页面加载 `importmap.js` 前通过 `window.__IMPORTS__` 声明额",
1665
1697
  "headings": [
1666
1698
  {
1667
1699
  "level": 1,
@@ -1793,7 +1825,7 @@ export const docsIndex = [
1793
1825
  },
1794
1826
  {
1795
1827
  "level": 2,
1796
- "text": "16. test_selection.html:Selection 选择系统"
1828
+ "text": "16. test_outline.html:TSLEffects Outline 描边"
1797
1829
  },
1798
1830
  {
1799
1831
  "level": 3,
@@ -1801,7 +1833,7 @@ export const docsIndex = [
1801
1833
  },
1802
1834
  {
1803
1835
  "level": 2,
1804
- "text": "17. test_measure.html:MeasureTool 测量工具"
1836
+ "text": "17. test_selection.html:Selection 选择系统"
1805
1837
  },
1806
1838
  {
1807
1839
  "level": 3,
@@ -1809,7 +1841,7 @@ export const docsIndex = [
1809
1841
  },
1810
1842
  {
1811
1843
  "level": 2,
1812
- "text": "18. test_annotation.html:AnnotationManager 标注管理"
1844
+ "text": "18. test_measure.html:MeasureTool 测量工具"
1813
1845
  },
1814
1846
  {
1815
1847
  "level": 3,
@@ -1817,7 +1849,7 @@ export const docsIndex = [
1817
1849
  },
1818
1850
  {
1819
1851
  "level": 2,
1820
- "text": "19. test_clipping.html:ClippingTool 剖切工具"
1852
+ "text": "19. test_annotation.html:AnnotationManager 标注管理"
1821
1853
  },
1822
1854
  {
1823
1855
  "level": 3,
@@ -1825,7 +1857,7 @@ export const docsIndex = [
1825
1857
  },
1826
1858
  {
1827
1859
  "level": 2,
1828
- "text": "20. test_lights.html:LightManager 灯光管理"
1860
+ "text": "20. test_clipping.html:ClippingTool 剖切工具"
1829
1861
  },
1830
1862
  {
1831
1863
  "level": 3,
@@ -1833,7 +1865,7 @@ export const docsIndex = [
1833
1865
  },
1834
1866
  {
1835
1867
  "level": 2,
1836
- "text": "21. test_fire.html:WebGPU 体积火焰"
1868
+ "text": "21. test_lights.html:LightManager 灯光管理"
1837
1869
  },
1838
1870
  {
1839
1871
  "level": 3,
@@ -1841,7 +1873,7 @@ export const docsIndex = [
1841
1873
  },
1842
1874
  {
1843
1875
  "level": 2,
1844
- "text": "22. test_ssr.html:SSR 时空降噪"
1876
+ "text": "22. test_fire.html:WebGPU 体积火焰"
1845
1877
  },
1846
1878
  {
1847
1879
  "level": 3,
@@ -1849,20 +1881,28 @@ export const docsIndex = [
1849
1881
  },
1850
1882
  {
1851
1883
  "level": 2,
1852
- "text": "23. test_ao.html:环境光遮蔽"
1884
+ "text": "23. test_ssr.html:SSR 时空降噪"
1885
+ },
1886
+ {
1887
+ "level": 3,
1888
+ "text": "核心要点:"
1889
+ },
1890
+ {
1891
+ "level": 2,
1892
+ "text": "24. test_ao.html:环境光遮蔽"
1853
1893
  },
1854
1894
  {
1855
1895
  "level": 3,
1856
1896
  "text": "核心要点:"
1857
1897
  }
1858
1898
  ],
1859
- "content": "# 示例指南\n\n`u-space` 的 `examples/` 目录中包含了大量演示引擎功能的示例。以下是几个关键示例及其所展示的系统特性。\n\n## 运行方式与版本\n\n示例统一通过 `examples/importmap.js` 注入 Import Map。本地通过 `localhost`、`127.0.0.1`、`0.0.0.0` 或 `192.168.x.x` 访问时会加载仓库里的 `../dist/` 构建产物;在线部署或非本地域名访问时会从 jsDelivr 加载当前发布版本 `u-space@0.0.31`。Vercel 文档部署会继续把 `__VERSION__` 占位符替换为 `package.json` 中的版本号,源码里的 `0.0.31` 作为直接托管 `examples/` 时的 fallback。\n\n插件示例可以在页面加载 `importmap.js` 前通过 `window.__IMPORTS__` 声明额外依赖。将 `u-space/plugins/<name>` 的值设为 `true` 时,`importmap.js` 会自动在本地和 CDN 路径之间切换。\n\n## 1. `demo01.html`:基础配置与交互\n\n该示例演示了通过 WebGPU 渲染 3D 场景所需的最少配置,与 [快速上手](./getting-started.md) 指南中的内容一致。\n\n### 核心要点:\n\n- 将 `Viewer` 注入 DOM 元素。\n- 使用 WebGPU `Color` 设置场景背景。\n- 添加基础几何体(如 `BoxGeometry`)。\n- 通过 `viewer.interactionManager.pointerMoveEventsEnabled` 启用全局交互。\n- 像操作 DOM 元素一样,为 3D 网格原生绑定事件监听(`click`、`pointerenter`、`pointerleave`)。\n\n## 2. `test_loader.html`:模型缓存机制\n\n该示例深入解析了 `u-space` 的模型加载管线,阐明运行时缓存与浏览器持久化缓存之间的区别。\n\n### 核心要点:\n\n- 使用全局 `Model` 类通过 `Model.prototype.loadAsync()` 异步加载 `.glb` 文件。\n- 理解 `cache: true`(将模型节点保留在内存中,可实现即时克隆/实例化)。\n- 理解 `persistent: true`(使用 Service Worker / Cache Storage API 对实际网络请求数据进行持久化缓存)。\n- 演示如何将这些异步加载的资源安全地注册到 `viewer.objectManager`。\n- 提供通过 `Model.clearMemoryCache()` 和 `Model.clearPersistentCache()` 手动清除缓存的示例。\n\n## 3. `load_tiles.html`:GIS 与地球渲染\n\n该示例使用外部对等依赖 `3d-tiles-renderer`,通过 `u-space` 插件安全封装后,渲染大规模 LOD GIS 地球。\n\n### 核心要点:\n\n- 动态实例化复杂插件(`ArcgisTilesRenderer`),并传入核心 viewer 引用。\n- 由于瓦片是异步流式加载并持续更新视口的,需使用 `viewer.frameloop = 'always'`。\n- 通过插件的 `invalidate(lon, lat, alt)` 方法定位到指定的经纬高位置。\n- 使用 `lonLatHeightToPosition()` / `positionToLonLatHeight()` 在 WGS84 经纬高和场景世界坐标之间互转。\n\n## 4. `test_umanager.html`:场景组合与解析器\n\n该综合示例融合了多种工具,展示如何构建完整的应用程序,而不仅仅是放置单个模型。\n\n### 核心要点:\n\n- 同时初始化多个插件(minimap、tracking、keyboard-controls),并通过 `.enable()` / `.disable()` 切换其状态。\n- 流式传输结构化场景布局,解析场景描述(`SceneLoader`、`TopologiesLoader`)。\n- 使用相机动画(`VisionsLoader` 和 `VisionsParser`)在场景中编排预定义的飞行路径。\n- 获取复杂的节点材质,并自定义 WebGPU 专属的 TSL(Three Shading Language)节点,如 `TSLEffects.fluid()`。\n\n## 5. `test_umanager_loader.html`:UManagerLoader 一体化加载\n\n[在线演示](https://u-space-phi.vercel.app/examples/test_umanager_loader.html)\n\n该示例演示通过 `UManagerLoader` 在同一个路径下同时加载语义楼层、Facilities 和非语义场景树内容。加载结果会返回一个 `UManagerSceneGroup`,其中 `semanticGroup` 指向 `SemanticGroup`,`sceneGroup` 指向非语义场景组。\n\n### 核心要点:\n\n- 使用 `UManagerLoader.setPath()` 配置场景根目录,并通过一次 `loadAsync()` 完成 `SemanticLoader` + `SceneLoader` 组合加载。\n- `SceneLoader` 会自动跳过语义文件中已存在的 `id`,避免建筑、楼层或设备重复加载。\n- 通过 `root.semanticGroup.getDefaultFacilityLayer()` 和 `root.sceneGroup.getDefaultSceneLayer()` 直接获取默认设备合批层和场景模型合批层。\n- 通过 `viewer.objectManager` 获取 `SceneInstanceObject` 和 `FacilityInstanceObject`,再直接使用 `viewer.controls.flyToObject()` 飞向单个实例。\n- 使用 `setInstanceHighlight()`、`setInstanceVisible()`、`setInstanceOpacity()` 等统一 API 控制实例,不需要关心底层是合并几何、`InstancedMesh` 还是 fallback `Model`。\n- 示例把 `viewer`、`loader`、`root`、`semanticGroup`、`sceneGroup`、`facilityLayer`、`sceneLayer`、`sceneInstances` 和 `facilities` 暴露到 `window.uManagerExample`,方便在控制台调试。\n\n## 6. `test_umanager_dynamic_instances.html`:运行时动态实例\n\n[在线演示](https://u-space-phi.vercel.app/examples/test_umanager_dynamic_instances.html)\n\n该示例把运行时实例新增、删除、恢复和按 ID 查询拆到独立场景中,避免和 `UManagerLoader` 的一体化加载流程混在一起。\n\n### 核心要点:\n\n- 创建 `SceneInstancedLayer` 并调用 `reserveBatch(url, template, capacity)` 预分配容量。\n- 通过 `SceneInstanceObject.setInstanceIdentity({ id, kind, name })` 设置实例独立身份字段,不依赖 `userData` 参与 layer 内部索引。\n- 同一个 layer 内 `instanceId` 必须唯一;重复 ID 的新增会返回 `false`,加入后修改身份字段会在下一次按 ID 查询时刷新索引。\n- 使用 `addInstances()` 批量新增实例,使用 `removeInstance(id)` / `removeInstances(id)` 按完整 `instanceId` 删除实例。\n- 使用 `getInstanceById(id)` 快速获取实例,返回对象可直接用于 `setInstanceHighlight()` 和 `viewer.controls.flyToObject()`。\n- 示例把 `viewer`、`layer`、`template`、`allInstances` 和 `removedInstances` 暴露到 `window.dynamicInstanceExample`。\n\n## 7. `test_umanager2.html`:大型场景可编辑静态合批\n\n该性能目标场景同时加载语义对象和完整场景树,并通过 `SceneLoader.setEditableBatching()` 把兼容的普通 Mesh 烘焙合并到 `SceneEditableBatchLayer`。它适合 draw calls 和可渲染 Mesh 数量成为主要 CPU/GPU 提交瓶颈、但业务仍需要按对象 ID 显隐、高亮或偶尔移动对象的场景。\n\n### 核心要点:\n\n- 使用 `setEditableBatching({ maxVerticesPerBatch, maxIndicesPerBatch, freezeAnimations })` 显式开启;默认 `SceneLoader` 行为不变。\n- 兼容的不透明 Mesh 按材质、Geometry attribute 布局、阴影状态和 `renderOrder` 合并;透明、蒙皮、morph、自定义 shader 和不兼容 Geometry 保留 fallback。\n- 合批对象仍保留 `SceneInstanceObject`,显隐、颜色和不透明高亮通过 TSL 状态纹理更新;transform 或半透明修改只 materialize 当前对象。\n- 页面使用 `pixelRatio: 1` 控制高 DPI drawing buffer 成本,并关闭不需要的交互 raycast。\n- 首帧前通过 `renderer.compileAsync()` 预热 WebGPU material pipeline,避免把编译中的中间画面展示给用户。\n- 使用 `?editableBatching=false` 可关闭该路径,与默认 path-based `SceneInstancedLayer`/普通模型加载结果做性能和画面对比。\n- `sceneGroup.userData.editableBatch` 提供 `sourceMeshes`、`batches`、`drawCallsSaved`、`vertices`、`indices` 和 fallback 原因统计。\n\n该模式通过展开重复顶点换取更少 draw calls;高重复、大 Geometry 的同模板对象可能仍更适合 `SceneInstancedLayer`。详见 [u-manager `setEditableBatching()` API](./api-plugin-u-manager.md#可编辑静态合批seteditablebatching)。\n\n## 8. `test_umanager2_offscreen.html`:OffscreenCanvas Worker + editable batching\n\n该示例是 `test_umanager2.html` 的 Worker 版本。完整 `Viewer`、Three.js 对象重建、editable batch 构建、相机控制和 WebGPU 渲染运行在 dedicated render Worker;主线程只持有可见 canvas、转发输入/resize,并显示 Worker 返回的状态与统计。静态 SBMX/glTF 的 fetch、字节/JSON/base64 解析和图片解码继续拆到 render Worker 创建的第二个 decode Worker,因此加载新模型时已有 3D 场景仍可响应输入。\n\n通过专用 Vite 配置启动:\n\n```bash\npnpm example:offscreen\n```\n\n然后访问 `http://127.0.0.1:5510/offscreen/test_umanager2_offscreen.html`。该示例的 HTML、主线程入口、Worker 入口和专用 Vite 配置集中在 `examples/offscreen/` 目录。可用 `pnpm build:example:offscreen` 验证生产构建。\n\n[在线演示](https://u-space-phi.vercel.app/examples/offscreen/test_umanager2_offscreen.html)由一键发布流程单独打包:HTML 加载生成的 JavaScript,Worker 保持 ES module 格式,Draco/Basis WASM 等资源写入 `/examples/assets/`。线上页面不直接执行源码 `.ts`,HDR 则复用 `/examples/textures/puresky_1k.hdr`。\n\n### 核心要点:\n\n- 主线程使用 `OffscreenViewerHost` 调用 `transferControlToOffscreen()`,以 structured-clone 消息转发 pointer、wheel、resize 和业务 command。\n- Worker 在模块顶层通过 `const worker = await createWorkerViewer()` 创建真正的 `Viewer`,随后以顺序式代码加载 HDR、`SemanticLoader` 和 `SceneLoader`,无需把整个入口包进 setup callback。\n- render Worker 通过 `ModelLoaderManager.setDecodeWorker()` 启用 `test_umanager2_offscreen.decode.worker.ts`,并把返回的实例绑定 disposer 注册到 runtime 清理;decode Worker 从 `u-space/worker/model-decoder` 调用 `installModelDecodeWorker()`,以 transferable `ArrayBuffer` / `ImageBitmap` 返回静态 glTF 数据,Three.js/GPU 对象仍只在 render Worker 创建。外部 buffer/贴图继续经过 render Worker 的 LoadingManager URL modifier 与加载统计,跨域依赖不会继承模型请求的敏感 headers/credentials。\n- 解码队列一次只允许一个待确认数据包;render Worker 重建后发送 ACK 再取下一项,防止 1GB 级场景同时堆积多个模型副本。相同图片通过有界 LRU 内容指纹复用 bitmap 身份,避免把原本 25 个 editable material batches 拆成大量重复批次,同时不永久持有所有历史贴图。\n- animation、skin、morph、camera、sparse accessor、glTF extension/压缩扩展和非 triangle primitive 不进入快速路径,会自动使用现有 loader。访问 `?modelDecodeWorker=off` 可关闭嵌套 Worker,与原始 loader 做画面、批次和加载响应 A/B 对比;默认开启。\n- Worker runtime 同时接管 Three.js `ImageLoader` 与 `ImageBitmapLoader`:JPEG/PNG/GIF/WebP 任一边超过 WebGPU 默认 `8192` 上限时,会在第一次 `createImageBitmap()` 解码时等比缩小,保留 loader options/cache/abort 语义且不修改源文件,避免 `Texture size` 引发的 WebGPU validation 级联错误。\n- `await host.init()` / `initialized` 只表示 Worker 内 `viewer.init()` 完成;HDR、模型、editable batch、pipeline 预热和业务首帧完成后,Worker 才显式调用一次 `worker.ready(detail)`。主线程应先注册 `ready` 监听,再执行 `host.init()`,并在 `ready` 后调用业务 command。\n- `SceneLoader.setEditableBatching()` 在 Worker 中完成 Geometry 克隆、变换烘焙、合并和 TSL 状态纹理创建;透明、蒙皮、morph、自定义 shader 等不支持子集保持 fallback。\n- 首帧前关闭 controls invalidation 并等待 `renderer.compileAsync()`,预热 WebGPU 合批管线后再显示完整画面。\n- HUD 显示实际 `drawCalls`、三角形、`static scene matrices` 状态,以及 1 秒滚动窗口的 FPS、平均/p95/最大帧间隔、超过 25ms 的占比和样本数;demand 模式恢复时的空闲间隔不会被误算成渲染帧。\n- 示例调用 `semanticGroup.showAllFloors().showAllFacilities()` 并保持 `SemanticGroup.visible = true`,楼层、墙体、空间、门窗和设备等所有语义对象均保留且默认显示。HUD 的设备调试区通过 Worker command 选择、飞向、高亮或清除当前 Facility;这些操作都不修改任何语义对象或建筑场景的显隐状态,“清除调试”只撤销高亮。\n- `SemanticLoader` 的压平语义 Geometry 属于分析叠加层,本示例按调试需求默认显示完整语义模型,因此其半透明颜色会与建筑楼壳叠加;业务项目可以按自身展示策略单独控制该层。\n- 标准 RenderPipeline scene pass 保持启用,editable batch 只接收源模型中的不透明 Mesh;透明子 Mesh 保留标准 fallback,以兼顾透明合成正确性和不降低 pixel ratio 的运镜帧率。\n- 相机拖拽继续由主线程事件桥接到 Worker;业务对象不能跨线程传输,按 ID 显隐、变色、transform 或 `materialize()` 应包装成 Worker command,通过 `host.request()` 调用。\n- 相机定位后先调用 Three.js 原生 `viewer.scene.updateMatrixWorld(true)`,再设置 `viewer.scene.matrixWorldAutoUpdate = false` 跳过每帧整树矩阵遍历;新增场景层级后用 `scene.updateWorldMatrix(true, true)` 只提交新增子树。Worker command 修改单个普通 Mesh 或 `InstanceObject` 时调用 `object.updateWorldMatrix(true, false)`,修改 Group 时调用 `group.updateWorldMatrix(true, true)`,最后调用 `viewer.invalidate()`。`InstanceObject` 的原生方法覆盖会继续触发 instance buffer dirty 或 editable-batch materialize。\n- `ready()` 前的加载或管线预编译异常会触发 error、逆序资源清理和 Worker 关闭;初始化期间销毁 Host、canvas 转移/初始消息失败或 Worker 主动关闭会 reject 尚未完成的 `host.init()` / `request()` 并清理 DOM、resize 和待发送 pointer move。Host dispose 后会忽略队列中迟到的业务事件与 response。\n- Offscreen 负责释放主线程,editable batching 负责减少 draw submission;两者都不会自动减少三角形或透明 overdraw。\n\n浏览器必须同时支持 `transferControlToOffscreen()` 和 Worker WebGPU。CSS2D/CSS3D、`Info` 等真实 DOM 叠加层仍应保留在主线程。完整接口和边界见 [Viewer OffscreenCanvas Worker API](./api-viewer.md#offscreencanvas-worker实验性)。\n\n## 9. `test_model_animation.html`:模型内置动画\n\n[在线演示](https://u-space-phi.vercel.app/examples/test_model_animation.html)\n\n该示例演示了如何加载含内置动画的 glTF 模型,并通过 `Model` 类的动画 API 控制播放。\n\n### 核心要点:\n\n- 使用 `Model.loadAsync()` 加载带动画的 `.glb` 文件,动画片段自动初始化。\n- 使用 `viewer.frameloop = 'always'` 开启持续渲染以驱动动画。\n- 监听 `beforeRender` 事件,通过 `model.updateAnimation(e.delta)` 推进动画时间。\n- 使用 `model.playAnimation(name)` 按名称播放单个动画,`model.playAllAnimations()` 播放全部。\n- 使用 `model.stopAnimation()` 停止动画播放。\n\n## 10. `test_css_renderer.html`:CSS2D / CSS2.5D / CSS3D 渲染器\n\n该示例演示了如何在 3D 场景中叠加渲染 HTML 元素,展示三种 CSS 渲染模式的效果差异。\n\n### 核心要点:\n\n- 使用 `viewer.cssRenderer.createCSS2DObject()` 创建始终面向相机、固定屏幕尺寸的 2D 标签。\n- 使用 `viewer.cssRenderer.createCSS25DObject()` 创建面向相机但随距离缩放的 2.5D 精灵。\n- 使用 `viewer.cssRenderer.createCSS3DObject()` 创建具有完整 3D 变换的面板。\n- CSS2.5D 和 CSS3D 对象需要设置 `scale`(通常 `0.01`),因为 HTML 元素的像素尺寸远大于 3D 世界单位。\n- 渲染器采用懒加载,仅在首次创建对应类型对象时初始化。\n\n## 11. `test_postprocessing.html`:后处理效果\n\n该示例演示了 `RenderPipeline` 的内置后处理功能,包括 Bloom、SSGI、TRAA 以及自定义后处理组合器。\n\n### 核心要点:\n\n- 使用 `viewer.renderPipeline.enableBloom()` / `disableBloom()` 运行时切换 Bloom 效果。\n- 使用 `viewer.renderPipeline.updateBloom()` 实时调整 strength、radius、threshold 参数。\n- 使用 `viewer.renderPipeline.enableSSGI()` / `disableSSGI()` 切换屏幕空间全局光照。\n- 使用 `viewer.renderPipeline.updateSSGI()` 实时调整 SSGI 参数(直接修改 uniform,无需重建节点图)。\n- 使用 `viewer.renderPipeline.enableTRAA()` / `disableTRAA()` 切换时间抗锯齿。\n- 使用 `viewer.renderPipeline.setOutputComposer()` 自定义后处理链(示例中实现了灰度滤镜)。\n- 使用 `setOutputComposer(null)` 恢复默认渲染管线。\n\n## 12. `test_viewer_utils.html`:Viewer 工具方法\n\n该示例演示了 `Viewer` 新增的便捷方法:截图导出、背景切换、雾效控制和阴影开关。\n\n### 核心要点:\n\n- 使用 `viewer.screenshot()` 导出当前渲染画面为 PNG 文件。\n- 使用 `viewer.setBackground(color)` 快速切换场景背景颜色。\n- 使用 `viewer.enableFog()` / `viewer.disableFog()` 控制雾效。\n- 使用 `viewer.enableShadow()` / `viewer.disableShadow()` 控制阴影渲染。\n- 使用 `viewer.resize(width, height)` 手动触发尺寸更新。\n\n## 13. `test_camera_controls.html`:CameraControls 增强方法\n\n该示例演示了 `CameraControls` 的飞行定位、视角存取、锁定和二三维切换功能。\n\n### 核心要点:\n\n- 使用 `viewer.controls.flyTo(position, target)` 将相机飞行到指定坐标。\n- 使用 `viewer.controls.getCameraViewpoint()` 获取当前视角数据。\n- 使用 `viewer.controls.setCameraViewpoint(data)` 恢复保存的视角。\n- 使用 `viewer.controls.lock()` / `unlock()` 锁定或解锁相机控制。\n- 使用 `viewer.controls.setViewMode('2d')` / `setViewMode('3d')` 在二三维视图间切换。\n\n## 14. `test_object_manager.html`:ObjectManager 增强方法\n\n该示例演示了 `ObjectManager` 的显隐控制、孤立显示、透明度设置、包围盒查询和过滤功能。\n\n### 核心要点:\n\n- 使用 `viewer.objectManager.show(id)` / `hide(id)` 控制对象可见性。\n- 使用 `viewer.objectManager.isolate(ids)` 孤立显示指定对象。\n- 使用 `viewer.objectManager.setOpacity(id, value)` 设置材质透明度。\n- 使用 `viewer.objectManager.getBoundingBox()` 查询所有对象的包围盒。\n- 使用 `viewer.objectManager.filter(predicate)` 按条件过滤对象。\n\n## 15. `test_material_effects.html`:MaterialEffects 增强效果\n\n该示例演示了材质效果系统的线框、半透明、X 光和淡入淡出功能。\n\n### 核心要点:\n\n- 使用 `MaterialEffects.wireframe(object)` 开启线框渲染模式。\n- 使用 `MaterialEffects.highlightColor(object, { opacity })` 设置半透明效果。\n- 使用 `MaterialEffects.highlightColor(object, { color, opacity, overwrite: true, depthWrite: false })` 实现 X 光透视效果。\n- 使用 `MaterialEffects.fadeOut(object)` / `fadeIn(object)` 执行淡入淡出动画。\n- 使用 `MaterialEffects.removeHighlightColor(object)` 恢复原始材质状态。\n\n## 16. `test_selection.html`:Selection 选择系统\n\n该示例演示了对象选择系统的单选和框选功能。\n\n### 核心要点:\n\n- 创建 `Selection` 实例并监听 `select`、`deselect`、`change` 事件。\n- 使用 `selection.select()` / `deselect()` / `toggle()` / `clear()` 进行程序化选择操作。\n- 使用 `selection.enableBoxSelection()` 开启鼠标框选模式。\n- 框选模式下可配合 `viewer.controls.lock()` 避免框选与相机旋转冲突。\n\n## 17. `test_measure.html`:MeasureTool 测量工具\n\n该示例演示了 3D 场景中的距离、面积和角度测量。\n\n### 核心要点:\n\n- 使用 `measureTool.measureDistance(pointA, pointB)` 测量两点距离。\n- 使用 `measureTool.measureArea(points)` 测量多边形面积。\n- 使用 `measureTool.measureAngle(pointA, vertex, pointC)` 测量夹角。\n- 测量结果以可视化线条渲染到场景中,返回的 `MeasureResult` 包含数值和单位。\n\n## 18. `test_annotation.html`:AnnotationManager 标注管理\n\n该示例演示了 3D 标注的创建、更新和管理,配合 `CSSRenderer` 实现 HTML 浮动标签。\n\n### 核心要点:\n\n- 创建 `AnnotationManager` 实例并通过 `setCSSObjectFactory()` 绑定 `CSSRenderer`。\n- 使用 `annotationManager.add(id, options)` 添加带引线和自定义样式的标注。\n- 使用 `annotationManager.addText(text, position)` 快捷添加纯文本标注。\n- 使用 `updateContent()` 动态更新标注内容,`updatePosition()` 移动标注位置。\n- 使用 `hideAll()` / `showAll()` 批量控制标注显隐。\n\n## 19. `test_clipping.html`:ClippingTool 剖切工具\n\n该示例演示了剖切面的创建和实时调整。\n\n### 核心要点:\n\n- 创建 `ClippingTool` 实例并调用 `attach()` 将场景物体移入 ClippingGroup。\n- 使用 `clippingTool.addPlane(id, options)` 添加剖切面。\n- 使用滑块通过 `clippingTool.setPlaneConstant()` 实时调整剖切位置。\n- 使用 `showHelper()` / `hideHelper()` 切换剖切面可视化辅助。\n\n## 20. `test_lights.html`:LightManager 灯光管理\n\n该示例演示了灯光管理器的灯光预设和 Helper 可视化功能。\n\n### 核心要点:\n\n- 创建 `LightManager` 实例并使用 `applyPreset()` 一键应用灯光预设。\n- 支持 4 种预设:`indoor`(室内)、`outdoor`(室外)、`studio`(摄影棚)、`warehouse`(仓库)。\n- 使用 `showAllHelpers()` / `hideAllHelpers()` 显示或隐藏灯光辅助可视化。\n- 每种预设会自动清除旧灯光并创建新的灯光组合。\n\n## 21. `test_fire.html`:WebGPU 体积火焰\n\n该示例演示了 `u-space/plugins/fire` 的 `FireEffect` 插件,封装 Three.js 官方体积火焰示例,在独立 volumetric pass 中模拟火焰和烟雾后叠加到主场景。\n\n### 核心要点:\n\n- 使用 `FireEffect` 创建 WebGPU 体积火焰、烟雾、扰动、动态点光源和体积阴影。\n- 通过 `position` 和 `size` 设置体积盒底部中心和烟雾扩散约束范围。\n- 默认使用 `TeapotGeometry(0.8, 28)` 作为 emitter;也可以传入业务 `Object3D` 和自定义 `emitterGeometry`。\n- 通过 `fire.update()` 实时调整 `fireIntensity`、`smokeLifespan`、`emitterRadius` 等参数。\n- 插件使用 RenderPipeline output effect 接入,不占用业务侧的 `setOutputComposer()`。\n\n## 22. `test_ssr.html`:SSR 时空降噪\n\n[在线演示](https://u-space-phi.vercel.app/examples/test_ssr.html)\n\n该示例使用程序化室内场景演示完整的屏幕空间反射链路:Stochastic SSR、Temporal Reproject 和 Recurrent Denoise。\n\n### 核心要点:\n\n- 使用 `viewer.renderPipeline.enableSSR()` / `disableSSR()` 开关完整 SSR 后处理链。\n- 使用 `viewer.renderPipeline.updateSSR()` 实时调整 ray marching、历史帧数和降噪参数。\n- SSR 自动写入打包的法线/粗糙度、漫反射/金属度及 velocity MRT 通道。\n- 默认 `Viewer` 的 reversed depth 可直接使用;RenderPipeline 会在三个内部 pass 中正确跳过背景,同时保持原始深度用于位置与历史重建。\n- 使用 `viewer.frameloop = 'always'` 为时域重投影和循环降噪提供连续帧。\n- 场景包含移动发光球体,可直接观察运动向量重投影与残影收敛效果。\n- 示例通过 `pixelRatio: 1` 使用 1× drawing buffer,避免 Retina 屏幕把 Temporal Reproject 和 Recurrent Denoise 放大到 2.25 倍像素量。\n- `maxDistance` 从默认值 `0.4` 开始,保留滑块用于观察追踪距离对质量和性能的影响。\n- 移动物体继续生成 velocity,但不投射动态阴影;2048² 方向光阴影只更新一次。\n\n## 23. `test_ao.html`:环境光遮蔽\n\n[在线演示](https://u-space-phi.vercel.app/examples/test_ao.html)\n\n该示例使用程序化墙角与紧密摆放的几何体,独立展示 RenderPipeline 的 SSGI AO 分量。页面默认开启 AO,并固定 `giIntensity: 0`,因此画面只保留 `scene.rgb × AO` 遮蔽效果。\n\n### 核心要点:\n\n- 使用 `viewer.renderPipeline.enableSSGI()` 开启 AO,并通过 `giIntensity: 0` 关闭间接漫反射。\n- 使用 `disableSSGI()` 对比无 AO 画面,再使用当前参数重新开启。\n- 使用 `updateSSGI()` 实时调整 `aoIntensity`、`radius` 和 `thickness`。\n- 使用 `pixelRatio: 1` 控制全屏 SSGI 在高 DPI 屏幕上的成本。\n- 场景不加载外部资源,墙角、堆叠物体和窄缝可以直接观察接触遮蔽。\n"
1899
+ "content": "# 示例指南\n\n`u-space` 的 `examples/` 目录中包含了大量演示引擎功能的示例。以下是几个关键示例及其所展示的系统特性。\n\n## 运行方式与版本\n\n示例统一通过 `examples/importmap.js` 注入 Import Map。本地通过 `localhost`、`127.0.0.1`、`0.0.0.0` 或 `192.168.x.x` 访问时会加载仓库里的 `../dist/` 构建产物;在线部署或非本地域名访问时会从 jsDelivr 加载当前发布版本 `u-space@0.0.33`。Vercel 文档部署会继续把 `__VERSION__` 占位符替换为 `package.json` 中的版本号,源码里的 `0.0.33` 作为直接托管 `examples/` 时的 fallback。\n\n插件示例可以在页面加载 `importmap.js` 前通过 `window.__IMPORTS__` 声明额外依赖。将 `u-space/plugins/<name>` 的值设为 `true` 时,`importmap.js` 会自动在本地和 CDN 路径之间切换。\n\n## 1. `demo01.html`:基础配置与交互\n\n该示例演示了通过 WebGPU 渲染 3D 场景所需的最少配置,与 [快速上手](./getting-started.md) 指南中的内容一致。\n\n### 核心要点:\n\n- 将 `Viewer` 注入 DOM 元素。\n- 使用 WebGPU `Color` 设置场景背景。\n- 添加基础几何体(如 `BoxGeometry`)。\n- 通过 `viewer.interactionManager.pointerMoveEventsEnabled` 启用全局交互。\n- 像操作 DOM 元素一样,为 3D 网格原生绑定事件监听(`click`、`pointerenter`、`pointerleave`)。\n\n## 2. `test_loader.html`:模型缓存机制\n\n该示例深入解析了 `u-space` 的模型加载管线,阐明运行时缓存与浏览器持久化缓存之间的区别。\n\n### 核心要点:\n\n- 使用全局 `Model` 类通过 `Model.prototype.loadAsync()` 异步加载 `.glb` 文件。\n- 理解 `cache: true`(将模型节点保留在内存中,可实现即时克隆/实例化)。\n- 理解 `persistent: true`(使用 Cache Storage API 持久化模型及外部 glTF 依赖,无需注册 Service Worker)。\n- 演示如何将这些异步加载的资源安全地注册到 `viewer.objectManager`。\n- 提供通过 `Model.clearMemoryCache()` 和 `Model.clearPersistentCache()` 手动清除缓存的示例。\n\n## 3. `load_tiles.html`:GIS 与地球渲染\n\n该示例使用外部对等依赖 `3d-tiles-renderer`,通过 `u-space` 插件安全封装后,渲染大规模 LOD GIS 地球。\n\n### 核心要点:\n\n- 动态实例化复杂插件(`ArcgisTilesRenderer`),并传入核心 viewer 引用。\n- 由于瓦片是异步流式加载并持续更新视口的,需使用 `viewer.frameloop = 'always'`。\n- 通过插件的 `invalidate(lon, lat, alt)` 方法定位到指定的经纬高位置。\n- 使用 `lonLatHeightToPosition()` / `positionToLonLatHeight()` 在 WGS84 经纬高和场景世界坐标之间互转。\n\n## 4. `test_umanager.html`:场景组合与解析器\n\n该综合示例融合了多种工具,展示如何构建完整的应用程序,而不仅仅是放置单个模型。\n\n### 核心要点:\n\n- 同时初始化多个插件(minimap、tracking、keyboard-controls),并通过 `.enable()` / `.disable()` 切换其状态。\n- 流式传输结构化场景布局,解析场景描述(`SceneLoader`、`TopologiesLoader`)。\n- 使用相机动画(`VisionsLoader` 和 `VisionsParser`)在场景中编排预定义的飞行路径。\n- 获取复杂的节点材质,并自定义 WebGPU 专属的 TSL(Three Shading Language)节点,如 `TSLEffects.fluid()`。\n\n## 5. `test_umanager_loader.html`:UManagerLoader 一体化加载\n\n[在线演示](https://u-space-phi.vercel.app/examples/test_umanager_loader.html)\n\n该示例演示通过 `UManagerLoader` 在同一个路径下同时加载语义楼层、Facilities 和非语义场景树内容。加载结果会返回一个 `UManagerSceneGroup`,其中 `semanticGroup` 指向 `SemanticGroup`,`sceneGroup` 指向非语义场景组。\n\n### 核心要点:\n\n- 使用 `UManagerLoader.setPath()` 配置场景根目录,并通过一次 `loadAsync()` 完成 `SemanticLoader` + `SceneLoader` 组合加载。\n- `SceneLoader` 会自动跳过语义文件中已存在的 `id`,避免建筑、楼层或设备重复加载。\n- 通过 `root.semanticGroup.getDefaultFacilityLayer()` 和 `root.sceneGroup.getDefaultSceneLayer()` 直接获取默认设备合批层和场景模型合批层。\n- 通过 `viewer.objectManager` 获取 `SceneInstanceObject` 和 `FacilityInstanceObject`,再直接使用 `viewer.controls.flyToObject()` 飞向单个实例。\n- 使用 `setInstanceHighlight()`、`setInstanceVisible()`、`setInstanceOpacity()` 等统一 API 控制实例,不需要关心底层是合并几何、`InstancedMesh` 还是 fallback `Model`。\n- 示例把 `viewer`、`loader`、`root`、`semanticGroup`、`sceneGroup`、`facilityLayer`、`sceneLayer`、`sceneInstances` 和 `facilities` 暴露到 `window.uManagerExample`,方便在控制台调试。\n\n## 6. `test_umanager_dynamic_instances.html`:运行时动态实例\n\n[在线演示](https://u-space-phi.vercel.app/examples/test_umanager_dynamic_instances.html)\n\n该示例把运行时实例新增、删除、恢复和按 ID 查询拆到独立场景中,避免和 `UManagerLoader` 的一体化加载流程混在一起。\n\n### 核心要点:\n\n- 创建 `SceneInstancedLayer` 并调用 `reserveBatch(url, template, capacity)` 预分配容量。\n- 通过 `SceneInstanceObject.setInstanceIdentity({ id, kind, name })` 设置实例独立身份字段,不依赖 `userData` 参与 layer 内部索引。\n- 同一个 layer 内 `instanceId` 必须唯一;重复 ID 的新增会返回 `false`,加入后修改身份字段会在下一次按 ID 查询时刷新索引。\n- 使用 `addInstances()` 批量新增实例,使用 `removeInstance(id)` / `removeInstances(id)` 按完整 `instanceId` 删除实例。\n- 使用 `getInstanceById(id)` 快速获取实例,返回对象可直接用于 `setInstanceHighlight()` 和 `viewer.controls.flyToObject()`。\n- 示例把 `viewer`、`layer`、`template`、`allInstances` 和 `removedInstances` 暴露到 `window.dynamicInstanceExample`。\n\n## 7. `test_umanager2.html`:大型场景可编辑静态合批\n\n该性能目标场景同时加载语义对象和完整场景树,并通过 `SceneLoader.setEditableBatching()` 把兼容的普通 Mesh 烘焙合并到 `SceneEditableBatchLayer`。它适合 draw calls 和可渲染 Mesh 数量成为主要 CPU/GPU 提交瓶颈、但业务仍需要按对象 ID 显隐、高亮或偶尔移动对象的场景。\n\n### 核心要点:\n\n- 使用 `setEditableBatching({ maxVerticesPerBatch, maxIndicesPerBatch, freezeAnimations })` 显式开启;默认 `SceneLoader` 行为不变。\n- 兼容的不透明 Mesh 按材质、Geometry attribute 布局、阴影状态和 `renderOrder` 合并;透明、蒙皮、morph、自定义 shader 和不兼容 Geometry 保留 fallback。\n- 合批对象仍保留 `SceneInstanceObject`,显隐、颜色和不透明高亮通过 TSL 状态纹理更新;transform 或半透明修改只 materialize 当前对象。\n- 页面使用 `pixelRatio: 1` 控制高 DPI drawing buffer 成本,并关闭不需要的交互 raycast。\n- 首帧前通过 `renderer.compileAsync()` 预热 WebGPU material pipeline,避免把编译中的中间画面展示给用户。\n- 使用 `?editableBatching=false` 可关闭该路径,与默认 path-based `SceneInstancedLayer`/普通模型加载结果做性能和画面对比。\n- `sceneGroup.userData.editableBatch` 提供 `sourceMeshes`、`batches`、`drawCallsSaved`、`vertices`、`indices` 和 fallback 原因统计。\n\n该模式通过展开重复顶点换取更少 draw calls;高重复、大 Geometry 的同模板对象可能仍更适合 `SceneInstancedLayer`。详见 [u-manager `setEditableBatching()` API](./api-plugin-u-manager.md#可编辑静态合批seteditablebatching)。\n\n## 8. `test_umanager2_offscreen.html`:OffscreenCanvas Worker + editable batching\n\n该示例是 `test_umanager2.html` 的 Worker 版本。完整 `Viewer`、Three.js 对象重建、editable batch 构建、相机控制和 WebGPU 渲染运行在 dedicated render Worker;主线程只持有可见 canvas、转发输入/resize,并显示 Worker 返回的状态与统计。静态 SBMX/glTF 的 fetch、字节/JSON/base64 解析和图片解码继续拆到 render Worker 创建的第二个 decode Worker,因此加载新模型时已有 3D 场景仍可响应输入。\n\n通过专用 Vite 配置启动:\n\n```bash\npnpm example:offscreen\n```\n\n然后访问 `http://127.0.0.1:5510/offscreen/test_umanager2_offscreen.html`。该示例的 HTML、主线程入口、Worker 入口和专用 Vite 配置集中在 `examples/offscreen/` 目录。可用 `pnpm build:example:offscreen` 验证生产构建。\n\n[在线演示](https://u-space-phi.vercel.app/examples/offscreen/test_umanager2_offscreen.html)由一键发布流程单独打包:HTML 加载生成的 JavaScript,Worker 保持 ES module 格式,Draco/Basis WASM 等资源写入 `/examples/assets/`。线上页面不直接执行源码 `.ts`,HDR 则复用 `/examples/textures/puresky_1k.hdr`。\n\n### 核心要点:\n\n- 主线程使用 `OffscreenViewerHost` 调用 `transferControlToOffscreen()`,以 structured-clone 消息转发 pointer、wheel、resize 和业务 command。\n- Worker 在模块顶层通过 `const worker = await createWorkerViewer()` 创建真正的 `Viewer`,随后以顺序式代码加载 HDR、`SemanticLoader` 和 `SceneLoader`,无需把整个入口包进 setup callback。\n- render Worker 通过 `ModelLoaderManager.setDecodeWorker()` 启用 `test_umanager2_offscreen.decode.worker.ts`,并把返回的实例绑定 disposer 注册到 runtime 清理;decode Worker 从 `u-space/worker/model-decoder` 调用 `installModelDecodeWorker()`,以 transferable `ArrayBuffer` / `ImageBitmap` 返回静态 glTF 数据,Three.js/GPU 对象仍只在 render Worker 创建。外部 buffer/贴图继续经过 render Worker 的 LoadingManager URL modifier 与加载统计,跨域依赖不会继承模型请求的敏感 headers/credentials。\n- 解码队列一次只允许一个待确认数据包;render Worker 重建后发送 ACK 再取下一项,防止 1GB 级场景同时堆积多个模型副本。相同图片通过有界 LRU 内容指纹复用 bitmap 身份,避免把原本 25 个 editable material batches 拆成大量重复批次,同时不永久持有所有历史贴图。\n- animation、skin、morph、camera、sparse accessor、glTF extension/压缩扩展和非 triangle primitive 不进入快速路径,会自动使用现有 loader。访问 `?modelDecodeWorker=off` 可关闭嵌套 Worker,与原始 loader 做画面、批次和加载响应 A/B 对比;默认开启。\n- Worker runtime 同时接管 Three.js `ImageLoader` 与 `ImageBitmapLoader`:JPEG/PNG/GIF/WebP 任一边超过 WebGPU 默认 `8192` 上限时,会在第一次 `createImageBitmap()` 解码时等比缩小,保留 loader options/cache/abort 语义且不修改源文件,避免 `Texture size` 引发的 WebGPU validation 级联错误。\n- `await host.init()` / `initialized` 只表示 Worker 内 `viewer.init()` 完成;HDR、模型、editable batch、pipeline 预热和业务首帧完成后,Worker 才显式调用一次 `worker.ready(detail)`。主线程应先注册 `ready` 监听,再执行 `host.init()`,并在 `ready` 后调用业务 command。\n- `SceneLoader.setEditableBatching()` 在 Worker 中完成 Geometry 克隆、变换烘焙、合并和 TSL 状态纹理创建;透明、蒙皮、morph、自定义 shader 等不支持子集保持 fallback。\n- 首帧前关闭 controls invalidation 并等待 `renderer.compileAsync()`,预热 WebGPU 合批管线后再显示完整画面。\n- HUD 显示实际 `drawCalls`、三角形、`static scene matrices` 状态,以及 1 秒滚动窗口的 FPS、平均/p95/最大帧间隔、超过 25ms 的占比和样本数;demand 模式恢复时的空闲间隔不会被误算成渲染帧。\n- 示例调用 `semanticGroup.showAllFloors().showAllFacilities()` 并保持 `SemanticGroup.visible = true`,楼层、墙体、空间、门窗和设备等所有语义对象均保留且默认显示。HUD 的设备调试区通过 Worker command 选择、飞向、高亮或清除当前 Facility;这些操作都不修改任何语义对象或建筑场景的显隐状态,“清除调试”只撤销高亮。\n- `SemanticLoader` 的压平语义 Geometry 属于分析叠加层,本示例按调试需求默认显示完整语义模型,因此其半透明颜色会与建筑楼壳叠加;业务项目可以按自身展示策略单独控制该层。\n- 标准 RenderPipeline scene pass 保持启用,editable batch 只接收源模型中的不透明 Mesh;透明子 Mesh 保留标准 fallback,以兼顾透明合成正确性和不降低 pixel ratio 的运镜帧率。\n- 相机拖拽继续由主线程事件桥接到 Worker;业务对象不能跨线程传输,按 ID 显隐、变色、transform 或 `materialize()` 应包装成 Worker command,通过 `host.request()` 调用。\n- 相机定位后先调用 Three.js 原生 `viewer.scene.updateMatrixWorld(true)`,再设置 `viewer.scene.matrixWorldAutoUpdate = false` 跳过每帧整树矩阵遍历;新增场景层级后用 `scene.updateWorldMatrix(true, true)` 只提交新增子树。Worker command 修改单个普通 Mesh 或 `InstanceObject` 时调用 `object.updateWorldMatrix(true, false)`,修改 Group 时调用 `group.updateWorldMatrix(true, true)`,最后调用 `viewer.invalidate()`。`InstanceObject` 的原生方法覆盖会继续触发 instance buffer dirty 或 editable-batch materialize。\n- `ready()` 前的加载或管线预编译异常会触发 error、逆序资源清理和 Worker 关闭;初始化期间销毁 Host、canvas 转移/初始消息失败或 Worker 主动关闭会 reject 尚未完成的 `host.init()` / `request()` 并清理 DOM、resize 和待发送 pointer move。Host dispose 后会忽略队列中迟到的业务事件与 response。\n- Offscreen 负责释放主线程,editable batching 负责减少 draw submission;两者都不会自动减少三角形或透明 overdraw。\n\n浏览器必须同时支持 `transferControlToOffscreen()` 和 Worker WebGPU。CSS2D/CSS3D、`Info` 等真实 DOM 叠加层仍应保留在主线程。完整接口和边界见 [Viewer OffscreenCanvas Worker API](./api-viewer.md#offscreencanvas-worker实验性)。\n\n## 9. `test_model_animation.html`:模型内置动画\n\n[在线演示](https://u-space-phi.vercel.app/examples/test_model_animation.html)\n\n该示例演示了如何加载含内置动画的 glTF 模型,并通过 `Model` 类的动画 API 控制播放。\n\n### 核心要点:\n\n- 使用 `Model.loadAsync()` 加载带动画的 `.glb` 文件,动画片段自动初始化。\n- 使用 `viewer.frameloop = 'always'` 开启持续渲染以驱动动画。\n- 监听 `beforeRender` 事件,通过 `model.updateAnimation(e.delta)` 推进动画时间。\n- 使用 `model.playAnimation(name)` 按名称播放单个动画,`model.playAllAnimations()` 播放全部。\n- 使用 `model.stopAnimation()` 停止动画播放。\n\n## 10. `test_css_renderer.html`:CSS2D / CSS2.5D / CSS3D 渲染器\n\n该示例演示了如何在 3D 场景中叠加渲染 HTML 元素,展示三种 CSS 渲染模式的效果差异。\n\n### 核心要点:\n\n- 使用 `viewer.cssRenderer.createCSS2DObject()` 创建始终面向相机、固定屏幕尺寸的 2D 标签。\n- 使用 `viewer.cssRenderer.createCSS25DObject()` 创建面向相机但随距离缩放的 2.5D 精灵。\n- 使用 `viewer.cssRenderer.createCSS3DObject()` 创建具有完整 3D 变换的面板。\n- CSS2.5D 和 CSS3D 对象需要设置 `scale`(通常 `0.01`),因为 HTML 元素的像素尺寸远大于 3D 世界单位。\n- 渲染器采用懒加载,仅在首次创建对应类型对象时初始化。\n\n## 11. `test_postprocessing.html`:后处理效果\n\n该示例演示了 `RenderPipeline` 的内置后处理功能,包括 Bloom、SSGI、TRAA 以及自定义后处理组合器。\n\n### 核心要点:\n\n- 使用 `viewer.renderPipeline.enableBloom()` / `disableBloom()` 运行时切换 Bloom 效果。\n- 使用 `viewer.renderPipeline.updateBloom()` 实时调整 strength、radius、threshold 参数。\n- 使用 `viewer.renderPipeline.enableSSGI()` / `disableSSGI()` 切换屏幕空间全局光照。\n- 使用 `viewer.renderPipeline.updateSSGI()` 实时调整 SSGI 参数(直接修改 uniform,无需重建节点图)。\n- 使用 `viewer.renderPipeline.enableTRAA()` / `disableTRAA()` 切换时间抗锯齿。\n- 使用 `viewer.renderPipeline.setOutputComposer()` 自定义后处理链(示例中实现了灰度滤镜)。\n- 使用 `setOutputComposer(null)` 恢复默认渲染管线。\n\n## 12. `test_viewer_utils.html`:Viewer 工具方法\n\n该示例演示了 `Viewer` 新增的便捷方法:截图导出、背景切换、雾效控制和阴影开关。\n\n### 核心要点:\n\n- 使用 `viewer.screenshot()` 导出当前渲染画面为 PNG 文件。\n- 使用 `viewer.setBackground(color)` 快速切换场景背景颜色。\n- 使用 `viewer.enableFog()` / `viewer.disableFog()` 控制雾效。\n- 使用 `viewer.enableShadow()` / `viewer.disableShadow()` 控制阴影渲染。\n- 使用 `viewer.resize(width, height)` 手动触发尺寸更新。\n\n## 13. `test_camera_controls.html`:CameraControls 增强方法\n\n该示例演示了 `CameraControls` 的飞行定位、视角存取、锁定和二三维切换功能。\n\n### 核心要点:\n\n- 使用 `viewer.controls.flyTo(position, target)` 将相机飞行到指定坐标。\n- 使用 `viewer.controls.getCameraViewpoint()` 获取当前视角数据。\n- 使用 `viewer.controls.setCameraViewpoint(data)` 恢复保存的视角。\n- 使用 `viewer.controls.lock()` / `unlock()` 锁定或解锁相机控制。\n- 使用 `viewer.controls.setViewMode('2d')` / `setViewMode('3d')` 在二三维视图间切换。\n\n## 14. `test_object_manager.html`:ObjectManager 增强方法\n\n该示例演示了 `ObjectManager` 的显隐控制、孤立显示、透明度设置、包围盒查询和过滤功能。\n\n### 核心要点:\n\n- 使用 `viewer.objectManager.show(id)` / `hide(id)` 控制对象可见性。\n- 使用 `viewer.objectManager.isolate(ids)` 孤立显示指定对象。\n- 使用 `viewer.objectManager.setOpacity(id, value)` 设置材质透明度。\n- 使用 `viewer.objectManager.getBoundingBox()` 查询所有对象的包围盒。\n- 使用 `viewer.objectManager.filter(predicate)` 按条件过滤对象。\n\n## 15. `test_material_effects.html`:MaterialEffects 增强效果\n\n该示例演示了材质效果系统的线框、半透明、X 光和淡入淡出功能。\n\n### 核心要点:\n\n- 使用 `MaterialEffects.wireframe(object)` 开启线框渲染模式。\n- 使用 `MaterialEffects.highlightColor(object, { opacity })` 设置半透明效果。\n- 使用 `MaterialEffects.highlightColor(object, { color, opacity, overwrite: true, depthWrite: false })` 实现 X 光透视效果。\n- 使用 `MaterialEffects.fadeOut(object)` / `fadeIn(object)` 执行淡入淡出动画。\n- 使用 `MaterialEffects.removeHighlightColor(object)` 恢复原始材质状态。\n\n## 16. `test_outline.html`:TSLEffects Outline 描边\n\n[在线演示](https://u-space-phi.vercel.app/examples/test_outline.html)\n\n该示例演示 `TSLEffects.outline()` 作为 RenderPipeline output effect 对普通 Mesh、Group 和核心 `InstanceObject` 进行屏幕空间描边。\n\n### 核心要点:\n\n- 使用 `viewer.renderPipeline.addOutputEffect(outline)` 叠加 Outline,不修改原始材质,也不占用业务侧 `setOutputComposer()`。\n- 使用 `outline.setSelectedObjects()` 在 Box、Sphere、`InstanceObject`、全部对象和空选择之间切换。\n- 使用 `outline.update()` 实时调整强度、厚度、Glow 和 `instanceBoundsPadding`。\n- `InstanceObject` 有实际渲染对象时直接描边;没有可渲染子树时可通过 `getInstanceBoundingBox()` 自动生成不可见 bounds proxy。\n- 销毁时先调用 `removeOutputEffect(outline)`,再调用 `outline.dispose()` 释放 OutlineNode 与代理资源。\n\n## 17. `test_selection.html`:Selection 选择系统\n\n该示例演示了对象选择系统的单选和框选功能。\n\n### 核心要点:\n\n- 创建 `Selection` 实例并监听 `select`、`deselect`、`change` 事件。\n- 使用 `selection.select()` / `deselect()` / `toggle()` / `clear()` 进行程序化选择操作。\n- 使用 `selection.enableBoxSelection()` 开启鼠标框选模式。\n- 框选模式下可配合 `viewer.controls.lock()` 避免框选与相机旋转冲突。\n\n## 18. `test_measure.html`:MeasureTool 测量工具\n\n该示例演示了 3D 场景中的距离、面积和角度测量。\n\n### 核心要点:\n\n- 使用 `measureTool.measureDistance(pointA, pointB)` 测量两点距离。\n- 使用 `measureTool.measureArea(points)` 测量多边形面积。\n- 使用 `measureTool.measureAngle(pointA, vertex, pointC)` 测量夹角。\n- 测量结果以可视化线条渲染到场景中,返回的 `MeasureResult` 包含数值和单位。\n\n## 19. `test_annotation.html`:AnnotationManager 标注管理\n\n该示例演示了 3D 标注的创建、更新和管理,配合 `CSSRenderer` 实现 HTML 浮动标签。\n\n### 核心要点:\n\n- 创建 `AnnotationManager` 实例并通过 `setCSSObjectFactory()` 绑定 `CSSRenderer`。\n- 使用 `annotationManager.add(id, options)` 添加带引线和自定义样式的标注。\n- 使用 `annotationManager.addText(text, position)` 快捷添加纯文本标注。\n- 使用 `updateContent()` 动态更新标注内容,`updatePosition()` 移动标注位置。\n- 使用 `hideAll()` / `showAll()` 批量控制标注显隐。\n\n## 20. `test_clipping.html`:ClippingTool 剖切工具\n\n该示例演示了剖切面的创建和实时调整。\n\n### 核心要点:\n\n- 创建 `ClippingTool` 实例并调用 `attach()` 将场景物体移入 ClippingGroup。\n- 使用 `clippingTool.addPlane(id, options)` 添加剖切面。\n- 使用滑块通过 `clippingTool.setPlaneConstant()` 实时调整剖切位置。\n- 使用 `showHelper()` / `hideHelper()` 切换剖切面可视化辅助。\n\n## 21. `test_lights.html`:LightManager 灯光管理\n\n该示例演示了灯光管理器的灯光预设和 Helper 可视化功能。\n\n### 核心要点:\n\n- 创建 `LightManager` 实例并使用 `applyPreset()` 一键应用灯光预设。\n- 支持 4 种预设:`indoor`(室内)、`outdoor`(室外)、`studio`(摄影棚)、`warehouse`(仓库)。\n- 使用 `showAllHelpers()` / `hideAllHelpers()` 显示或隐藏灯光辅助可视化。\n- 每种预设会自动清除旧灯光并创建新的灯光组合。\n\n## 22. `test_fire.html`:WebGPU 体积火焰\n\n该示例演示了 `u-space/plugins/fire` 的 `FireEffect` 插件,封装 Three.js 官方体积火焰示例,在独立 volumetric pass 中模拟火焰和烟雾后叠加到主场景。\n\n### 核心要点:\n\n- 使用 `FireEffect` 创建 WebGPU 体积火焰、烟雾、扰动、动态点光源和体积阴影。\n- 通过 `position` 和 `size` 设置体积盒底部中心和烟雾扩散约束范围。\n- 默认使用 `TeapotGeometry(0.8, 28)` 作为 emitter;也可以传入业务 `Object3D` 和自定义 `emitterGeometry`。\n- 通过 `fire.update()` 实时调整 `fireIntensity`、`smokeLifespan`、`emitterRadius` 等参数。\n- 插件使用 RenderPipeline output effect 接入,不占用业务侧的 `setOutputComposer()`。\n\n## 23. `test_ssr.html`:SSR 时空降噪\n\n[在线演示](https://u-space-phi.vercel.app/examples/test_ssr.html)\n\n该示例使用程序化室内场景演示完整的屏幕空间反射链路:Stochastic SSR、Temporal Reproject 和 Recurrent Denoise。\n\n### 核心要点:\n\n- 使用 `viewer.renderPipeline.enableSSR()` / `disableSSR()` 开关完整 SSR 后处理链。\n- 使用 `viewer.renderPipeline.updateSSR()` 实时调整 ray marching、历史帧数和降噪参数。\n- SSR 自动写入打包的法线/粗糙度、漫反射/金属度及 velocity MRT 通道。\n- 默认 `Viewer` 的 reversed depth 可直接使用;RenderPipeline 会在三个内部 pass 中正确跳过背景,同时保持原始深度用于位置与历史重建。\n- 使用 `viewer.frameloop = 'always'` 为时域重投影和循环降噪提供连续帧。\n- 场景包含移动发光球体,可直接观察运动向量重投影与残影收敛效果。\n- 示例通过 `pixelRatio: 1` 使用 1× drawing buffer,避免 Retina 屏幕把 Temporal Reproject 和 Recurrent Denoise 放大到 2.25 倍像素量。\n- `maxDistance` 从默认值 `0.4` 开始,保留滑块用于观察追踪距离对质量和性能的影响。\n- 移动物体继续生成 velocity,但不投射动态阴影;2048² 方向光阴影只更新一次。\n\n## 24. `test_ao.html`:环境光遮蔽\n\n[在线演示](https://u-space-phi.vercel.app/examples/test_ao.html)\n\n该示例使用程序化墙角与紧密摆放的几何体,独立展示 RenderPipeline 的 SSGI AO 分量。页面默认开启 AO,并固定 `giIntensity: 0`,因此画面只保留 `scene.rgb × AO` 遮蔽效果。\n\n### 核心要点:\n\n- 使用 `viewer.renderPipeline.enableSSGI()` 开启 AO,并通过 `giIntensity: 0` 关闭间接漫反射。\n- 使用 `disableSSGI()` 对比无 AO 画面,再使用当前参数重新开启。\n- 使用 `updateSSGI()` 实时调整 `aoIntensity`、`radius` 和 `thickness`。\n- 使用 `pixelRatio: 1` 控制全屏 SSGI 在高 DPI 屏幕上的成本。\n- 场景不加载外部资源,墙角、堆叠物体和窄缝可以直接观察接触遮蔽。\n"
1860
1900
  },
1861
1901
  {
1862
1902
  "id": "getting-started",
1863
1903
  "path": "getting-started.md",
1864
1904
  "title": "快速上手 u-space",
1865
- "summary": "`u-space` 是一个基于 Three.js 的 WebGPU 3D 引擎。本指南将向你展示如何搭建一个基础的 `u-space` 应用。 确保已将 `@types/three` `three` 安装为对等依赖。如果你计划使用交互功能,还需要安装 `camera-controls`。 ```bash",
1905
+ "summary": "`u-space` 是一个基于 Three.js 的 WebGPU 3D 引擎。本指南使用 React、TypeScript Vite 搭建一个基础应用。 ```bash pnpm create vite u-space-demo --template react-ts",
1866
1906
  "headings": [
1867
1907
  {
1868
1908
  "level": 1,
@@ -1870,27 +1910,31 @@ export const docsIndex = [
1870
1910
  },
1871
1911
  {
1872
1912
  "level": 2,
1873
- "text": "安装"
1913
+ "text": "创建项目"
1874
1914
  },
1875
1915
  {
1876
- "level": 2,
1877
- "text": "基础配置"
1916
+ "level": 3,
1917
+ "text": "1. 初始化 React + Vite"
1878
1918
  },
1879
1919
  {
1880
1920
  "level": 3,
1881
- "text": "1. HTML 结构"
1921
+ "text": "2. 安装 u-space"
1922
+ },
1923
+ {
1924
+ "level": 2,
1925
+ "text": "编写场景组件"
1882
1926
  },
1883
1927
  {
1884
1928
  "level": 3,
1885
- "text": "2. Import Maps"
1929
+ "text": "1. 替换 src/App.tsx"
1886
1930
  },
1887
1931
  {
1888
1932
  "level": 3,
1889
- "text": "3. 初始化 Viewer 并添加对象"
1933
+ "text": "2. 替换 src/index.css"
1890
1934
  },
1891
1935
  {
1892
1936
  "level": 3,
1893
- "text": "4. 启用交互"
1937
+ "text": "3. 启动开发服务器"
1894
1938
  },
1895
1939
  {
1896
1940
  "level": 2,
@@ -1901,7 +1945,7 @@ export const docsIndex = [
1901
1945
  "text": "下一步"
1902
1946
  }
1903
1947
  ],
1904
- "content": "# 快速上手 `u-space`\n\n`u-space` 是一个基于 Three.js 的 WebGPU 3D 引擎。本指南将向你展示如何搭建一个基础的 `u-space` 应用。\n\n## 安装\n\n确保已将 `@types/three` `three` 安装为对等依赖。如果你计划使用交互功能,还需要安装 `camera-controls`。\n\n```bash\npnpm install three camera-controls\n```\n\n## 基础配置\n\n以下是一个最小示例,展示如何初始化 `u-space` 的 `Viewer` 并向场景中添加一个可交互对象。\n\n### 1. HTML 结构\n\n创建一个容纳 3D 查看器的元素。\n\n```html\n<!DOCTYPE html>\n<html lang=\"zh\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>u-space App</title>\n </head>\n <body style=\"margin: 0\">\n <div id=\"app\" style=\"width: 100vw; height: 100vh\"></div>\n <!-- 脚本放这里 -->\n </body>\n</html>\n```\n\n### 2. Import Maps\n\n由于 `u-space` 依赖 Three.js 的 WebGPU 特性,建议配置 Import Map 以解析 Three.js 的 WebGPU 构建版本。\n\n```html\n<script type=\"importmap\">\n {\n \"imports\": {\n \"three\": \"/node_modules/three/build/three.webgpu.js\",\n \"three/webgpu\": \"/node_modules/three/build/three.webgpu.js\",\n \"three/addons/\": \"/node_modules/three/examples/jsm/\",\n \"camera-controls\": \"/node_modules/camera-controls/dist/camera-controls.module.js\",\n \"u-space\": \"path/to/u-space/dist/index.js\"\n }\n }\n</script>\n```\n\n### 3. 初始化 Viewer 并添加对象\n\n初始化 `Viewer` 并向场景中添加一个基础 Three.js 对象。\n\n```html\n<script type=\"module\">\n import { Color, GridHelper, Mesh, BoxGeometry, MeshBasicMaterial } from 'three/webgpu';\n import { Viewer } from 'u-space';\n\n const app = document.getElementById('app');\n\n // 初始化查看器\n const viewer = new Viewer({\n el: app,\n rendererOptions: { forceWebGL: false }, // 优先使用 WebGPU\n });\n await viewer.init();\n\n // 设置背景颜色\n viewer.scene.background = new Color(0x666666);\n\n // 添加网格辅助线\n const gridHelper = new GridHelper(10, 10);\n viewer.scene.add(gridHelper);\n\n // 添加一个立方体\n const geometry = new BoxGeometry(1, 1, 1);\n const material = new MeshBasicMaterial({ color: 0xff0000 });\n const box = new Mesh(geometry, material);\n box.position.set(0, 0.5, 0);\n viewer.scene.add(box);\n\n // 渲染场景\n viewer.render();\n</script>\n```\n\n### 4. 启用交互\n\n`u-space` 内置了 `InteractionManager`,可以轻松为 3D 对象添加事件监听。\n\n```javascript\n// 启用指针移动事件(pointerenter / pointerleave 需要此开关)\nviewer.interactionManager.pointerMoveEventsEnabled = true;\n\n// 添加点击事件\nbox.addEventListener('click', (e) => {\n console.log('点击位置:', e.event.intersect.point);\n material.color.set(Math.random() * 0xffffff);\n viewer.render(); // 请求新一帧渲染\n});\n\n// 添加悬停事件\nbox.addEventListener('pointerenter', (e) => {\n document.body.style.cursor = 'pointer';\n material.color.set(0x00ff00);\n viewer.render();\n});\n\nbox.addEventListener('pointerleave', (e) => {\n document.body.style.cursor = 'default';\n material.color.set(0xff0000);\n viewer.render();\n});\n```\n\n这样就完成了!你现在拥有一个基础的 `u-space` 应用。\n\n## 版本信息\n\n`u-space` 导出了 `version` 常量,同时在 `window.__USPACE__` 上挂载了版本信息,方便调试和版本检查。\n\n```typescript\nimport { version } from 'u-space';\nconsole.log(version); // e.g. '0.0.31'\n\n// 也可以通过全局变量访问\nconsole.log(window.__USPACE__.version);\n```\n\n## 下一步\n\n- 深入了解 [Viewer API](./api-viewer.md)\n- 探索如何 [加载模型与使用对象](./api-objects.md)\n- 理解 [交互系统](./api-interactions.md)\n- 使用 [Managers API](./api-managers.md) 注册和检索对象\n- 通过插件添加 [瓦片地图](./api-plugin-tiles.md)、[小地图](./api-plugin-minimap.md)、[键盘控制](./api-plugin-keyboard-controls.md) 等功能\n- 使用 [Animations API](./api-animations.md) 为属性添加动画\n- 使用 [Effects API](./api-effects.md) 应用视觉特效\n- 浏览 [示例指南](./examples-guide.md)\n"
1948
+ "content": "# 快速上手 `u-space`\n\n`u-space` 是一个基于 Three.js 的 WebGPU 3D 引擎。本指南使用 React、TypeScriptVite 搭建一个基础应用。\n\n## 创建项目\n\n### 1. 初始化 React + Vite\n\n```bash\npnpm create vite u-space-demo --template react-ts\ncd u-space-demo\npnpm install\n```\n\n### 2. 安装 `u-space`\n\n```bash\npnpm add u-space three camera-controls\npnpm add -D @types/three\n```\n\nVite 会直接解析 npm 包及 `three/webgpu`,不需要额外配置模块映射。\n\n## 编写场景组件\n\n### 1. 替换 `src/App.tsx`\n\n下面的组件会初始化 `Viewer`、添加一个可交互的立方体,并在 React 组件卸载时释放资源。\n\n```tsx\nimport { useEffect, useRef } from 'react';\nimport { BoxGeometry, Color, GridHelper, MeshBasicMaterial } from 'three/webgpu';\nimport { BaseMesh, Viewer } from 'u-space';\n\nexport default function App() {\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n let viewer: Viewer | undefined;\n let cancelled = false;\n\n async function setup() {\n const nextViewer = new Viewer({\n el: container,\n rendererOptions: { forceWebGL: false },\n });\n await nextViewer.init();\n\n // 兼容 React StrictMode 在开发环境中的重复挂载检查\n if (cancelled) {\n nextViewer.dispose();\n return;\n }\n\n nextViewer.scene.background = new Color(0x666666);\n nextViewer.scene.add(new GridHelper(10, 10));\n\n const material = new MeshBasicMaterial({ color: 0xff0000 });\n const box = new BaseMesh(new BoxGeometry(1, 1, 1), material);\n box.position.set(0, 0.5, 0);\n nextViewer.scene.add(box);\n\n nextViewer.interactionManager.pointerMoveEventsEnabled = true;\n\n box.addEventListener('click', ({ event }) => {\n console.log('点击位置:', event.intersect?.point);\n material.color.set(Math.random() * 0xffffff);\n void nextViewer.render();\n });\n\n box.addEventListener('pointerenter', () => {\n document.body.style.cursor = 'pointer';\n });\n\n box.addEventListener('pointerleave', () => {\n document.body.style.cursor = 'default';\n });\n\n viewer = nextViewer;\n void viewer.render();\n }\n\n void setup();\n\n return () => {\n cancelled = true;\n document.body.style.cursor = 'default';\n viewer?.dispose();\n };\n }, []);\n\n return <div ref={containerRef} className=\"viewer\" />;\n}\n```\n\n`BaseMesh` 已包含 `u-space` 交互事件类型,因此可以直接监听 `click`、`pointerenter` 和 `pointerleave`。\n\n### 2. 替换 `src/index.css`\n\n```css\nhtml,\nbody,\n#root,\n.viewer {\n width: 100%;\n height: 100%;\n margin: 0;\n}\n\nbody {\n overflow: hidden;\n}\n```\n\n### 3. 启动开发服务器\n\n```bash\npnpm dev\n```\n\n打开 Vite 输出的本地地址,即可看到并操作 `u-space` 场景。\n\n## 版本信息\n\n`u-space` 导出了 `version` 常量,同时在 `window.__USPACE__` 上挂载了版本信息,方便调试和版本检查。\n\n```typescript\nimport { version } from 'u-space';\nconsole.log(version); // e.g. '0.0.33'\n\n// 也可以通过全局变量访问\nconsole.log(window.__USPACE__.version);\n```\n\n## 下一步\n\n- 深入了解 [Viewer API](./api-viewer.md)\n- 探索如何 [加载模型与使用对象](./api-objects.md)\n- 理解 [交互系统](./api-interactions.md)\n- 使用 [Managers API](./api-managers.md) 注册和检索对象\n- 通过插件添加 [瓦片地图](./api-plugin-tiles.md)、[小地图](./api-plugin-minimap.md)、[键盘控制](./api-plugin-keyboard-controls.md) 等功能\n- 使用 [Animations API](./api-animations.md) 为属性添加动画\n- 使用 [Effects API](./api-effects.md) 应用视觉特效\n- 浏览 [示例指南](./examples-guide.md)\n"
1905
1949
  },
1906
1950
  {
1907
1951
  "id": "index",
@@ -1930,7 +1974,7 @@ export const docsIndex = [
1930
1974
  "text": "维护"
1931
1975
  }
1932
1976
  ],
1933
- "content": "---\nlayout: home\n\nhero:\n name: u-space\n text: WebGPU-ready 3D Engine\n tagline: 基于 Three.js 的插件化 3D 可视化库,支持 GIS 瓦片、动画、场景管理与交互系统。\n actions:\n - theme: brand\n text: 快速上手\n link: /getting-started\n - theme: alt\n text: API 文档\n link: /api-viewer\n - theme: alt\n text: 在线示例\n link: /examples/\n target: _self\n\nfeatures:\n - title: WebGPU 优先\n details: 基于 Three.js WebGPU 渲染器,支持 TSL(Three Shading Language)着色器节点,同时保持 WebGL 兼容回退。\n - title: 插件化架构\n details: 核心轻量,通过独立插件按需扩展:GIS 瓦片、小地图、键盘控制、场景管理、曲线动画等。\n - title: 交互系统\n details: 内置射线检测与事件冒泡,像操作 DOM 元素一样为 3D 对象添加 click、pointerenter 等事件。\n---\n\n## 文档目录\n\n### 核心 API\n\n| 文档 | 说明 |\n| :--- | :--- |\n| [Viewer](./api-viewer) | 核心类:渲染器、场景、相机、控制器、事件,以及带超大贴图保护的实验性 OffscreenCanvas Worker runtime |\n| [CameraControls](./api-camera-controls) | 相机控制:飞行、视角切换、视点过渡 |\n| [CSSRenderer](./api-css-renderer) | CSS 渲染器:CSS2D / CSS2.5D / CSS3D 叠加 HTML 元素 |\n| [RenderPipeline](./api-render-pipeline) | 后处理管线:Bloom、SSGI、SSR 时空降噪、TRAA、自定义后处理 |\n| [Objects](./api-objects) | 3D 对象:统一 `InstanceObject` API、模型加载、基础网格、Poi、Topology |\n| [Batches](./api-batches) | 公共批处理:`ModelInstancedLayer`、`EditableGeometryBatchLayer`、fallback、materialize 与 raycast remap |\n| [Interactions](./api-interactions) | 交互管理:射线检测、鼠标/触摸事件、框选 |\n| [Managers](./api-managers) | 对象管理、场景管理、灯光管理 |\n| [Animations](./api-animations) | 补间动画:`tweenAnimation`、`Tween`、缓动模式 |\n| [Effects](./api-effects) | 视觉特效:高亮、呼吸、线框、淡入淡出、流动、流体(TSL) |\n| [Tools](./api-tools) | 工具:测量(距离/面积/角度)、剖切(面/盒)、标注管理 |\n\n### 插件\n\n所有插件从 `u-space/plugins/<name>` 导入。\n\n| 插件 | 说明 |\n| :--- | :--- |\n| [keyboard-controls](./api-plugin-keyboard-controls) | WASD / 方向键控制相机移动与旋转 |\n| [minimap](./api-plugin-minimap) | 2D 小地图叠加层 |\n| [tiles](./api-plugin-tiles) | ArcGIS 3D 瓦片 / GIS 地球渲染 |\n| [u-manager](./api-plugin-u-manager) | 场景加载、可编辑静态 Geometry batching、模型 instancing、语义楼层/井道/设备、拓扑、动画、属性与视点管理 |\n| [curve-movement](./api-plugin-curve-movement) | 沿样条曲线移动相机或对象 |\n| [tracking-controls](./api-plugin-tracking-controls) | 相机跟随移动目标 |\n| [atmosphere](./api-plugin-atmosphere) | 天空背景、天空环境、太阳/月亮光照与阴影 |\n| [fire](./api-plugin-fire) | WebGPU 体积火焰、烟雾、湍流、动态光照与阴影 |\n| [object-controls](./api-plugin-object-controls) | 交互式移动、旋转、缩放 3D 对象 |\n| [topology-drawer](./api-plugin-topology-drawer) | 在场景任意表面交互式绘制拓扑路径图 |\n\n### MCP\n\n| 文档 | 说明 |\n| :--- | :--- |\n| [u-space MCP](./mcp) | 面向 Mastra、Claude Desktop、Cursor 等 MCP 客户端的只读文档检索服务器 |\n\n### 维护\n\n| 文档 | 说明 |\n| :--- | :--- |\n| [一键发布](./release) | 通过 GitHub Actions、npm Trusted Publishing 和 Vercel 发布 `u-space`、`u-space-mcp`、docs 与 examples |\n"
1977
+ "content": "---\nlayout: home\n\nhero:\n name: u-space\n text: WebGPU-ready 3D Engine\n tagline: 基于 Three.js 的插件化 3D 可视化库,支持 GIS 瓦片、动画、场景管理与交互系统。\n actions:\n - theme: brand\n text: 快速上手\n link: /getting-started\n - theme: alt\n text: API 文档\n link: /api-viewer\n - theme: alt\n text: 在线示例\n link: /examples/\n target: _self\n\nfeatures:\n - title: WebGPU 优先\n details: 基于 Three.js WebGPU 渲染器,支持 TSL(Three Shading Language)着色器节点,同时保持 WebGL 兼容回退。\n - title: 插件化架构\n details: 核心轻量,通过独立插件按需扩展:GIS 瓦片、小地图、键盘控制、场景管理、曲线动画等。\n - title: 交互系统\n details: 内置射线检测与事件冒泡,像操作 DOM 元素一样为 3D 对象添加 click、pointerenter 等事件。\n---\n\n## 文档目录\n\n### 核心 API\n\n| 文档 | 说明 |\n| :--- | :--- |\n| [Viewer](./api-viewer) | 核心类:渲染器、场景、相机、控制器、事件,以及带超大贴图保护的实验性 OffscreenCanvas Worker runtime |\n| [CameraControls](./api-camera-controls) | 相机控制:飞行、视角切换、视点过渡 |\n| [CSSRenderer](./api-css-renderer) | CSS 渲染器:CSS2D / CSS2.5D / CSS3D 叠加 HTML 元素 |\n| [RenderPipeline](./api-render-pipeline) | 后处理管线:Bloom、SSGI、SSR 时空降噪、TRAA、自定义后处理 |\n| [Objects](./api-objects) | 3D 对象:统一 `InstanceObject` API、模型加载、基础网格、Poi、Topology |\n| [Batches](./api-batches) | 公共批处理:`ModelInstancedLayer`、`EditableGeometryBatchLayer`、fallback、materialize 与 raycast remap |\n| [Interactions](./api-interactions) | 交互管理:射线检测、鼠标/触摸事件、框选 |\n| [Managers](./api-managers) | 对象管理、场景管理、灯光管理 |\n| [Animations](./api-animations) | 补间动画:`tweenAnimation`、`Tween`、缓动模式 |\n| [Effects](./api-effects) | 视觉特效:高亮、呼吸、线框、淡入淡出、流动、流体与可组合 Outline(TSL) |\n| [Tools](./api-tools) | 工具:测量(距离/面积/角度)、剖切(面/盒)、标注管理 |\n\n### 插件\n\n所有插件从 `u-space/plugins/<name>` 导入。\n\n| 插件 | 说明 |\n| :--- | :--- |\n| [keyboard-controls](./api-plugin-keyboard-controls) | WASD / 方向键控制相机移动与旋转 |\n| [minimap](./api-plugin-minimap) | 2D 小地图叠加层 |\n| [tiles](./api-plugin-tiles) | ArcGIS 3D 瓦片 / GIS 地球渲染 |\n| [u-manager](./api-plugin-u-manager) | 场景加载、可编辑静态 Geometry batching、模型 instancing、语义楼层/井道/设备、拓扑、动画、属性与视点管理 |\n| [curve-movement](./api-plugin-curve-movement) | 沿样条曲线移动相机或对象 |\n| [tracking-controls](./api-plugin-tracking-controls) | 相机跟随移动目标 |\n| [atmosphere](./api-plugin-atmosphere) | 天空背景、天空环境、太阳/月亮光照与阴影 |\n| [fire](./api-plugin-fire) | WebGPU 体积火焰、烟雾、湍流、动态光照与阴影 |\n| [object-controls](./api-plugin-object-controls) | 交互式移动、旋转、缩放 3D 对象 |\n| [topology-drawer](./api-plugin-topology-drawer) | 在场景任意表面交互式绘制拓扑路径图 |\n\n### MCP\n\n| 文档 | 说明 |\n| :--- | :--- |\n| [u-space MCP](./mcp) | 面向 Mastra、Claude Desktop、Cursor 等 MCP 客户端的只读文档检索服务器 |\n\n### 维护\n\n| 文档 | 说明 |\n| :--- | :--- |\n| [一键发布](./release) | 通过 GitHub Actions、npm Trusted Publishing 和 Vercel 发布 `u-space`、`u-space-mcp`、docs 与 examples |\n"
1934
1978
  },
1935
1979
  {
1936
1980
  "id": "mcp",
@@ -1966,6 +2010,10 @@ export const docsIndex = [
1966
2010
  "level": 2,
1967
2011
  "text": "InstanceObject 与 u-manager 检索范围"
1968
2012
  },
2013
+ {
2014
+ "level": 2,
2015
+ "text": "Effects 检索范围"
2016
+ },
1969
2017
  {
1970
2018
  "level": 2,
1971
2019
  "text": "fire 检索范围"
@@ -1975,7 +2023,7 @@ export const docsIndex = [
1975
2023
  "text": "包结构"
1976
2024
  }
1977
2025
  ],
1978
- "content": "# u-space MCP\n\n`u-space-mcp` 是面向 `u-space` 文档的 Model Context Protocol(MCP)服务器。它把当前文档打包成只读 MCP 工具,方便 Mastra、Claude Desktop、Cursor 等 MCP 客户端在回答 `u-space` API、插件和示例问题时直接检索官方文档,包括实验性 `u-space/worker` OffscreenCanvas runtime、`OffscreenViewerHost`、top-level await `createWorkerViewer()`、Worker command/事件桥接、`ModelLoaderManager.setDecodeWorker()` + `u-space/worker/model-decoder` 嵌套静态模型解码、transferable/ACK backpressure、普通图片超过 WebGPU `8192` 上限时的解码前缩放、Three.js 原生静态场景矩阵策略及其与 `setEditableBatching()` 的组合;核心 `src/batches` 导出的 `ModelInstancedLayer` 与 `EditableGeometryBatchLayer`;`u-manager` 的 `UManagerLoader` 一体化加载入口、`SceneLoader` 语义去重、path-based model instancing 和 scene-specific editable batching adapter、Semantic/Facilities API,以及 atmosphere 和 fire 插件的 WebGPU 效果。\n\n## 安装与启动\n\n推荐通过 `npx` 使用已发布的 npm 包:\n\n```json\n{\n \"mcpServers\": {\n \"uSpace\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"u-space-mcp@latest\"]\n }\n }\n}\n```\n\n本地开发文档时,可以通过 `--docs` 指向仓库里的 docs 目录:\n\n```json\n{\n \"mcpServers\": {\n \"uSpace\": {\n \"command\": \"npx\",\n \"args\": [\n \"-y\",\n \"u-space-mcp@latest\",\n \"--docs\",\n \"/Users/jiangqi/Desktop/xunwei/SoonSpace/u-space/docs\"\n ]\n }\n }\n}\n```\n\n也可以使用环境变量:\n\n```bash\nU_SPACE_DOCS_PATH=/path/to/u-space/docs npx -y u-space-mcp@latest\n```\n\n## Mastra 接入\n\n在 Mastra 中通过 `MCPClient` 使用 stdio 形式接入:\n\n```typescript\nimport { MCPClient } from '@mastra/mcp';\n\nexport const uSpaceMcpClient = new MCPClient({\n id: 'u-space-mcp-client',\n servers: {\n uSpace: {\n command: 'npx',\n args: ['-y', 'u-space-mcp@latest'],\n stderr: 'pipe',\n },\n },\n});\n```\n\n然后把工具挂到 Agent 上:\n\n```typescript\nexport const codingAgent = new Agent({\n // ...\n tools: {\n ...(await uSpaceMcpClient.listTools()),\n },\n});\n```\n\n## 工具列表\n\n`u-space-mcp` 只提供只读工具:\n\n| 工具 | 说明 |\n| :--- | :--- |\n| `list_docs` | 列出可用文档页 |\n| `search_docs` | 按关键词、API 名、插件名或概念检索文档 |\n| `get_doc` | 按 path 或 id 读取单篇文档 |\n| `get_api_reference` | 面向 API / 类 / 方法 / 插件的检索 |\n| `find_examples` | 查找示例和用法相关文档 |\n| `get_changelog` | 读取更新日志 |\n\n## 示例检索\n\nMCP 文档索引包含 `examples/test_umanager_loader.html`、`examples/test_umanager_dynamic_instances.html`、`examples/test_umanager2.html` 和 `examples/offscreen/test_umanager2_offscreen.html` 的说明。检索 `UManagerLoader example`、`test_umanager_loader` 或 `UManagerLoader 用法` 可以找到一体化加载示例;检索 `dynamic instances`、`getInstanceById` 或 `test_umanager_dynamic_instances` 可以找到运行时实例编辑示例;检索 `setEditableBatching`、`SceneEditableBatchLayer`、`SceneEditableBatchFallback`、`editable batching`、`materialize` 或 `test_umanager2` 可以找到大型静态场景合批及其与 `SceneInstancedLayer` fallback 的关系;检索 `OffscreenCanvas`、`OffscreenViewerHost`、`host.init`、`initialized`、`ready`、`createWorkerViewer`、`ModelLoaderManager.setDecodeWorker`、`model-decoder`、`decode Worker`、`transferable`、`ACK backpressure`、`ImageBitmapLoader`、`maxTextureDimension2D`、`oversized texture`、`top-level await`、`u-space/worker`、`Worker WebGPU` 或 `test_umanager2_offscreen` 可以找到 Worker 渲染、嵌套静态模型解码、生命周期、事件/command 桥接、超大贴图缩放、editable batching、pipeline 预热和主线程/GPU 性能边界。\n\n## OffscreenCanvas Worker 检索范围\n\n| 关键词 / API | 可检索内容 |\n| :----------- | :--------- |\n| `OffscreenViewerHost` | 主线程 canvas 所有权、完整构造选项/方法/事件、`transferControlToOffscreen()`、pointer/wheel/resize 转发、renderer 滚动统计和 `request()` command 调用;`host.init()` / `initialized` 只等待 `viewer.init()`,业务资源完成由一次性 `ready` 表示。还包括 init canvas transfer/post 失败或初始化期间 dispose 的 Promise rejection/资源清理,以及 dispose 后忽略迟到业务消息的语义。 |\n| `createWorkerViewer` | module Worker 顶层可直接 await 的命令式入口;同步安装 host 消息监听,完成 OffscreenCanvas/`viewer.init()` 后返回 `WorkerViewerRuntime`,提供状态、事件、command、逆序 dispose 和一次性业务 ready 生命周期、ready 前 fatal cleanup、去重 ArrayBuffer transfer,以及内置 `getStats` / `getViewpoint` / `setViewpoint` / `render` 命令。 |\n| `ModelLoaderManager.setDecodeWorker` / `u-space/worker/model-decoder` | render Worker 创建第二个模型 decode Worker 的接线方式;静态 glTF/GLB/SBMX 支持范围,fetch/cache/SBMX/JSON/base64/ImageBitmap 工作边界,transferable 数据包、串行 ACK backpressure、有界贴图内容身份复用、LoadingManager URL/item 生命周期、跨域凭据隔离、节点图安全校验、完整 AbortSignal、故障回退,以及实例绑定的 Worker disposer。 |\n| `test_umanager2_offscreen` | UManager Worker 示例启动方式、HDR/语义/场景加载、默认启用嵌套模型 decode Worker、`?modelDecodeWorker=off` A/B 开关、`setEditableBatching()`、`compileAsync()` 首帧预热、滚动帧率 HUD、标准透明合成、静态场景矩阵冻结/显式提交,以及默认显示全部语义对象且设备选择/飞向/高亮不改变其他对象显隐的调试策略。 |\n| `ImageLoader` / `ImageBitmapLoader` / `maxTextureDimension2D` | Worker 普通图片加载兼容层、JPEG/PNG/GIF/WebP 编码尺寸预读、超过默认 `8192` limit 时的首次解码等比缩放、未知格式 fallback、源 bitmap 释放,以及 loader options/cache/request headers/abort 语义。 |\n| `matrixWorldAutoUpdate` / `updateMatrixWorld` / `updateWorldMatrix` | 使用 Three.js 原生 API 冻结静态 Scene,按需提交单个对象或新增子树,并通过 `viewer.invalidate()` 请求新帧;单个 `InstanceObject.updateWorldMatrix(true, false)` 或父 Group 的 `updateWorldMatrix(true, true)` 仍会触发 dirty callback、instanced buffer 同步和 editable-batch materialize,相机矩阵继续独立更新。 |\n| `OffscreenCanvas` + `setEditableBatching` | Offscreen 移走主线程解析/合并/渲染提交,editable batching 减少 draw submission;Three.js 对象必须留在 Worker,业务对象操作通过 structured-clone command 调用。 |\n\n## InstanceObject 与 u-manager 检索范围\n\nMCP 文档索引会同步 `docs/api-objects.md` 中的核心 `InstanceObject` API,以及 `docs/api-plugin-u-manager.md` 中的 u-manager 子类、加载器和合批层 API。客户端可以直接检索以下关键词:\n\n| 关键词 / API | 可检索内容 |\n| :----------- | :--------- |\n| `UManagerLoader` | 同时加载 `SemanticLoader` 和 `SceneLoader`、自动复用 semantic id 去重、返回带 `semanticGroup` / `sceneGroup` 直接属性的 `UManagerSceneGroup`;可通过 `semanticGroup.getDefaultFacilityLayer()` 和 `sceneGroup.getDefaultSceneLayer()` 直接访问默认合批层。 |\n| `InstanceObject` | 核心 `u-space` 导出 `InstanceObject`、`InstanceStyle`、`InstanceObjectOptions`、`InstanceIdentity`、`InstanceMaterializer`、`INSTANCE_COLOR_MODE_*` 和 `isInstanceObject()` 类型守卫;包括身份、样式、bounds、dirty、fallback render object,以及公共 `setInstanceMaterializer()` / ownership-aware `clearInstanceMaterializer()` / `materialize()` 协议;默认自动矩阵遍历和冻结根 Scene 后显式 `updateWorldMatrix()` 都会同步 batching 状态。实例可直接用于 `controls.flyToObject()`。 |\n| `ModelInstancedLayer` | `SceneInstancedLayer` 与 `FacilityInstancedLayer` 的共享实现:模板 mesh 保持独立以保留透明排序和局部包围体,复杂静态几何在射线通过实例包围体后按需建立并复用 `three-mesh-bvh`;普通静态模型可对明确的热点 root 显式调用 `enableMeshBVHRaycast(root)`,不对整个大场景自动建树;同时提供合法 material groups、多材质 instancing、`getInstances()`、`getInstanceById()`、运行时实例新增/删除、capacity 预分配与扩容、重复 `instanceId` 拒绝加入、身份字段变化后按需刷新 id 索引、dirty-driven buffer sync、transform 变化后渲染前同步 instance matrix、raycast hit remap 和可选相机实例裁剪;内部索引使用实例独立字段,不依赖 `userData`。 |\n| `EditableGeometryBatchLayer` | 核心 `src/batches` one-shot 公共类,接收 `Model` 模板和不重复的 `InstanceObject[]` source,按材质/Geometry 布局/阴影/renderOrder 烘焙合并静态 Geometry;每个 layer 独立维护矩阵状态,使用 `batchObjectIndex` + Float `DataTexture` + TSL 立即同步 dirty CPU 状态,返回带 `reasons` 的 unsupported source,支持同帧世界矩阵提交、跨 layer 旧副本隐藏、独立材质 materialize、typed event、materialized BVH hit 过滤、按实例 negative-scale fallback、安全 ownership dispose 和统计。 |\n| `SceneLoader` | 场景树加载、语义 `ID` 去重、返回 `SceneGroup`、默认重复 3D 模型 path instancing,以及 opt-in `setEditableBatching({ maxVerticesPerBatch, maxIndicesPerBatch, freezeAnimations })` 静态 Geometry 合批;unsupported template/子 Mesh 安全 fallback,负缩放实例绕过 `InstancedMesh`,build 期间已 materialize 的实例不会重复进入透明 fallback。 |\n| `SceneGroup` | `SceneLoader.loadAsync()` 返回根组,保留原始场景树层级,并通过 `sceneLayer` / `getDefaultSceneLayer()` 暴露主渲染层:默认是 `SceneInstancedLayer`,opt-in editable batching 且存在 merged Mesh 时是与其没有继承关系的 `SceneEditableBatchLayer`;只有 fallback 而无 merged Mesh 时返回 `null`。editable batch 统计位于 `userData.editableBatch`。 |\n| `SceneInstanceObject` | `SceneLoader` 的单模型逻辑引用、`id` / `sid` 检索、`instanceKind = 'SceneInstances'`、统一显隐/颜色/透明度/高亮/bounds/dirty API,以及 editable batch 的 `materialize()`;世界 transform 或半透明变化时可只恢复当前普通 `Model`。 |\n| `SceneInstancedLayer` | `SceneLoader` 内部批量渲染层、共享 `ModelInstancedLayer`、dirty-driven instance buffer 同步、raycast hit remap。 |\n| `SceneEditableBatchLayer` | `EditableGeometryBatchLayer<SceneInstanceObject>` 的 u-manager 薄适配层,作为 opt-in 静态 Geometry 合并主层;通用 batching、materialize、内部 `BaseMesh`、不可见 raycast 短路和 lazy BVH 由核心层实现。`SceneLoader` 负责 URL source 与同级 `SceneEditableBatchFallback`(`SceneInstancedLayer`)/普通 `Model` fallback,并监听 typed `materialize` 事件移除对应 fallback instance。 |\n| `FacilityInstanceObject` | 楼层下的设备引用、`objectManager.getById()` 全局检索、对象级包围盒缓存 + `controls.flyToObject()` 飞向单设备、统一 `setInstance*` 控制、fallback `Model` wrapper 和事件目标。 |\n| `FacilityInstancedLayer` | `SemanticGroup.facilityLayer` / `SemanticGroup.getDefaultFacilityLayer()`、`getInstances()`、`getInstanceById()`、`reserveBatch()`、`addInstance()` / `addInstances()`、`removeInstance()` / `removeInstances()`(支持单个 `instanceId` 字符串)、`removeBatch()`、`clearBatches()`、batch 创建条件、`setInstanceCulling()`、动态 Facilities batch、可选按相机视锥压缩 active instances、可选 `minScreenRadius` 屏幕尺寸裁剪、dirty-driven instance buffer 同步和 raycast hit remap。 |\n| `Facilities` | `SemanticLoader` 解析、`FloorMesh.getFacilityById()`、`FacilityInstanceObject.setInstanceOpacity()`、普通 `Model` fallback wrapper 与 scene-level instancing 的一致 API;`SemanticGroup` / `BuildingGroup` / `FloorMesh` 查询使用对象语义 ID、实例 `instanceId` 或显式别名,不扫描 `userData` ID。 |\n\n## fire 检索范围\n\nMCP 文档索引会同步 `docs/api-plugin-fire.md` 中的 FireEffect API、参数和示例。客户端可以直接检索以下关键词:\n\n| 关键词 / API | 可检索内容 |\n| :----------- | :--------- |\n| `FireEffect` | 插件创建、`enable()`、`update()`、`setEmitter()`、`reset()`、`disable()` 和 `dispose()`。 |\n| `fire` / `volumetric fire` | WebGPU 体积火焰、烟雾散射、curl noise、buoyancy、Jacobi pressure projection 和 raymarch 输出。 |\n| `emitterGeometry` / `emitterRadius` | 默认 `TeapotGeometry(0.8, 28)`、自定义 emitter 几何、业务 `Object3D` matrix 驱动和移动扰动半径。 |\n| `size` / `gridSize` | 体积盒世界范围、烟雾扩散边界和 3D 模拟网格尺寸。 |\n| `addOutputEffect` | `FireEffect` 通过 RenderPipeline output effect 叠加体积 pass,不占用业务 `setOutputComposer()`。 |\n| `keyLight` / `pointLight` | 体积阴影 spot light、跟随火焰核心的动态点光源和可关闭的内置光源。 |\n\n## 包结构\n\n源码位于 `packages/u-space-mcp`。本地兼容发布入口会先递增 `u-space-mcp` 的 patch 版本,再从 `docs/*.md` 生成内置文档索引、编译并通过当前 npm 登录态发布,因此启用 npm 2FA 时仍会请求 OTP:\n\n```bash\npnpm publish:mcp\n```\n\n维护者发布完整版本时应使用 [`pnpm release:all`](./release)。该命令触发 GitHub Actions,通过 npm Trusted Publishing/OIDC 同时发布 `u-space` 与 `u-space-mcp`,不需要 `NPM_TOKEN` 或每次输入 OTP,并继续部署 docs 与 examples。\n\n发布后的包不依赖本机绝对路径;只有在传入 `--docs` 或设置 `U_SPACE_DOCS_PATH` 时,才会读取本地文档目录。\n"
2026
+ "content": "# u-space MCP\n\n`u-space-mcp` 是面向 `u-space` 文档的 Model Context Protocol(MCP)服务器。它把当前文档打包成只读 MCP 工具,方便 Mastra、Claude Desktop、Cursor 等 MCP 客户端在回答 `u-space` API、插件和示例问题时直接检索官方文档,包括实验性 `u-space/worker` OffscreenCanvas runtime、`OffscreenViewerHost`、top-level await `createWorkerViewer()`、Worker command/事件桥接、`ModelLoaderManager.setDecodeWorker()` + `u-space/worker/model-decoder` 嵌套静态模型解码、transferable/ACK backpressure、普通图片超过 WebGPU `8192` 上限时的解码前缩放、Three.js 原生静态场景矩阵策略及其与 `setEditableBatching()` 的组合;核心 `src/batches` 导出的 `ModelInstancedLayer` 与 `EditableGeometryBatchLayer`;`TSLEffects.outline()` 可组合描边和 `InstanceObject` bounds proxy;`u-manager` 的 `UManagerLoader` 一体化加载入口、`SceneLoader` 语义去重、path-based model instancing 和 scene-specific editable batching adapter、Semantic/Facilities API,以及 atmosphere 和 fire 插件的 WebGPU 效果。\n\n## 安装与启动\n\n推荐通过 `npx` 使用已发布的 npm 包:\n\n```json\n{\n \"mcpServers\": {\n \"uSpace\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"u-space-mcp@latest\"]\n }\n }\n}\n```\n\n本地开发文档时,可以通过 `--docs` 指向仓库里的 docs 目录:\n\n```json\n{\n \"mcpServers\": {\n \"uSpace\": {\n \"command\": \"npx\",\n \"args\": [\n \"-y\",\n \"u-space-mcp@latest\",\n \"--docs\",\n \"/Users/jiangqi/Desktop/xunwei/SoonSpace/u-space/docs\"\n ]\n }\n }\n}\n```\n\n也可以使用环境变量:\n\n```bash\nU_SPACE_DOCS_PATH=/path/to/u-space/docs npx -y u-space-mcp@latest\n```\n\n## Mastra 接入\n\n在 Mastra 中通过 `MCPClient` 使用 stdio 形式接入:\n\n```typescript\nimport { MCPClient } from '@mastra/mcp';\n\nexport const uSpaceMcpClient = new MCPClient({\n id: 'u-space-mcp-client',\n servers: {\n uSpace: {\n command: 'npx',\n args: ['-y', 'u-space-mcp@latest'],\n stderr: 'pipe',\n },\n },\n});\n```\n\n然后把工具挂到 Agent 上:\n\n```typescript\nexport const codingAgent = new Agent({\n // ...\n tools: {\n ...(await uSpaceMcpClient.listTools()),\n },\n});\n```\n\n## 工具列表\n\n`u-space-mcp` 只提供只读工具:\n\n| 工具 | 说明 |\n| :--- | :--- |\n| `list_docs` | 列出可用文档页 |\n| `search_docs` | 按关键词、API 名、插件名或概念检索文档 |\n| `get_doc` | 按 path 或 id 读取单篇文档 |\n| `get_api_reference` | 面向 API / 类 / 方法 / 插件的检索 |\n| `find_examples` | 查找示例和用法相关文档 |\n| `get_changelog` | 读取更新日志 |\n\n## 示例检索\n\nMCP 文档索引包含 `examples/test_outline.html`、`examples/test_umanager_loader.html`、`examples/test_umanager_dynamic_instances.html`、`examples/test_umanager2.html` 和 `examples/offscreen/test_umanager2_offscreen.html` 的说明。检索 `TSLEffects.outline`、`outline effect`、`instanceBoundsProxy` 或 `test_outline` 可以找到描边 API 与交互示例;检索 `UManagerLoader example`、`test_umanager_loader` 或 `UManagerLoader 用法` 可以找到一体化加载示例;检索 `dynamic instances`、`getInstanceById` 或 `test_umanager_dynamic_instances` 可以找到运行时实例编辑示例;检索 `setEditableBatching`、`SceneEditableBatchLayer`、`SceneEditableBatchFallback`、`editable batching`、`materialize` 或 `test_umanager2` 可以找到大型静态场景合批及其与 `SceneInstancedLayer` fallback 的关系;检索 `OffscreenCanvas`、`OffscreenViewerHost`、`host.init`、`initialized`、`ready`、`createWorkerViewer`、`ModelLoaderManager.setDecodeWorker`、`model-decoder`、`decode Worker`、`transferable`、`ACK backpressure`、`ImageBitmapLoader`、`maxTextureDimension2D`、`oversized texture`、`top-level await`、`u-space/worker`、`Worker WebGPU` 或 `test_umanager2_offscreen` 可以找到 Worker 渲染、嵌套静态模型解码、生命周期、事件/command 桥接、超大贴图缩放、editable batching、pipeline 预热和主线程/GPU 性能边界。\n\n## OffscreenCanvas Worker 检索范围\n\n| 关键词 / API | 可检索内容 |\n| :----------- | :--------- |\n| `OffscreenViewerHost` | 主线程 canvas 所有权、完整构造选项/方法/事件、`transferControlToOffscreen()`、pointer/wheel/resize 转发、renderer 滚动统计和 `request()` command 调用;`host.init()` / `initialized` 只等待 `viewer.init()`,业务资源完成由一次性 `ready` 表示。还包括 init canvas transfer/post 失败或初始化期间 dispose 的 Promise rejection/资源清理,以及 dispose 后忽略迟到业务消息的语义。 |\n| `createWorkerViewer` | module Worker 顶层可直接 await 的命令式入口;同步安装 host 消息监听,完成 OffscreenCanvas/`viewer.init()` 后返回 `WorkerViewerRuntime`,提供状态、事件、command、逆序 dispose 和一次性业务 ready 生命周期、ready 前 fatal cleanup、去重 ArrayBuffer transfer,以及内置 `getStats` / `getViewpoint` / `setViewpoint` / `render` 命令。 |\n| `ModelLoaderManager.setDecodeWorker` / `u-space/worker/model-decoder` | render Worker 创建第二个模型 decode Worker 的接线方式;静态 glTF/GLB/SBMX 支持范围,fetch/cache/SBMX/JSON/base64/ImageBitmap 工作边界,transferable 数据包、串行 ACK backpressure、有界贴图内容身份复用、LoadingManager URL/item 生命周期、跨域凭据隔离、节点图安全校验、完整 AbortSignal、故障回退,以及实例绑定的 Worker disposer。 |\n| `test_umanager2_offscreen` | UManager Worker 示例启动方式、HDR/语义/场景加载、默认启用嵌套模型 decode Worker、`?modelDecodeWorker=off` A/B 开关、`setEditableBatching()`、`compileAsync()` 首帧预热、滚动帧率 HUD、标准透明合成、静态场景矩阵冻结/显式提交,以及默认显示全部语义对象且设备选择/飞向/高亮不改变其他对象显隐的调试策略。 |\n| `ImageLoader` / `ImageBitmapLoader` / `maxTextureDimension2D` | Worker 普通图片加载兼容层、JPEG/PNG/GIF/WebP 编码尺寸预读、超过默认 `8192` limit 时的首次解码等比缩放、未知格式 fallback、源 bitmap 释放,以及 loader options/cache/request headers/abort 语义。 |\n| `matrixWorldAutoUpdate` / `updateMatrixWorld` / `updateWorldMatrix` | 使用 Three.js 原生 API 冻结静态 Scene,按需提交单个对象或新增子树,并通过 `viewer.invalidate()` 请求新帧;单个 `InstanceObject.updateWorldMatrix(true, false)` 或父 Group 的 `updateWorldMatrix(true, true)` 仍会触发 dirty callback、instanced buffer 同步和 editable-batch materialize,相机矩阵继续独立更新。 |\n| `OffscreenCanvas` + `setEditableBatching` | Offscreen 移走主线程解析/合并/渲染提交,editable batching 减少 draw submission;Three.js 对象必须留在 Worker,业务对象操作通过 structured-clone command 调用。 |\n\n## InstanceObject 与 u-manager 检索范围\n\nMCP 文档索引会同步 `docs/api-objects.md` 中的核心 `InstanceObject` API,以及 `docs/api-plugin-u-manager.md` 中的 u-manager 子类、加载器和合批层 API。客户端可以直接检索以下关键词:\n\n| 关键词 / API | 可检索内容 |\n| :----------- | :--------- |\n| `UManagerLoader` | 同时加载 `SemanticLoader` 和 `SceneLoader`、自动复用 semantic id 去重、返回带 `semanticGroup` / `sceneGroup` 直接属性的 `UManagerSceneGroup`;可通过 `semanticGroup.getDefaultFacilityLayer()` 和 `sceneGroup.getDefaultSceneLayer()` 直接访问默认合批层。 |\n| `InstanceObject` | 核心 `u-space` 导出 `InstanceObject`、`InstanceStyle`、`InstanceObjectOptions`、`InstanceIdentity`、`InstanceMaterializer`、`INSTANCE_COLOR_MODE_*` 和 `isInstanceObject()` 类型守卫;包括身份、样式、bounds、dirty、fallback render object,以及公共 `setInstanceMaterializer()` / ownership-aware `clearInstanceMaterializer()` / `materialize()` 协议;默认自动矩阵遍历和冻结根 Scene 后显式 `updateWorldMatrix()` 都会同步 batching 状态。实例可直接用于 `controls.flyToObject()`。 |\n| `ModelInstancedLayer` | `SceneInstancedLayer` 与 `FacilityInstancedLayer` 的共享实现:模板 mesh 保持独立以保留透明排序和局部包围体,复杂静态几何在射线通过实例包围体后按需建立并复用 `three-mesh-bvh`;普通静态模型可对明确的热点 root 显式调用 `enableMeshBVHRaycast(root)`,不对整个大场景自动建树;同时提供合法 material groups、多材质 instancing、`getInstances()`、`getInstanceById()`、运行时实例新增/删除、capacity 预分配与扩容、重复 `instanceId` 拒绝加入、身份字段变化后按需刷新 id 索引、dirty-driven buffer sync、transform 变化后渲染前同步 instance matrix、raycast hit remap 和可选相机实例裁剪;内部索引使用实例独立字段,不依赖 `userData`。 |\n| `EditableGeometryBatchLayer` | 核心 `src/batches` one-shot 公共类,接收 `Model` 模板和不重复的 `InstanceObject[]` source,按材质/Geometry 布局/阴影/renderOrder 烘焙合并静态 Geometry;每个 layer 独立维护矩阵状态,使用 `batchObjectIndex` + Float `DataTexture` + TSL 立即同步 dirty CPU 状态,返回带 `reasons` 的 unsupported source,支持同帧世界矩阵提交、跨 layer 旧副本隐藏、独立材质 materialize、typed event、materialized BVH hit 过滤、按实例 negative-scale fallback、安全 ownership dispose 和统计。 |\n| `SceneLoader` | 场景树加载、语义 `ID` 去重、返回 `SceneGroup`、默认重复 3D 模型 path instancing,以及 opt-in `setEditableBatching({ maxVerticesPerBatch, maxIndicesPerBatch, freezeAnimations })` 静态 Geometry 合批;unsupported template/子 Mesh 安全 fallback,负缩放实例绕过 `InstancedMesh`,build 期间已 materialize 的实例不会重复进入透明 fallback。 |\n| `SceneGroup` | `SceneLoader.loadAsync()` 返回根组,保留原始场景树层级,并通过 `sceneLayer` / `getDefaultSceneLayer()` 暴露主渲染层:默认是 `SceneInstancedLayer`,opt-in editable batching 且存在 merged Mesh 时是与其没有继承关系的 `SceneEditableBatchLayer`;只有 fallback 而无 merged Mesh 时返回 `null`。editable batch 统计位于 `userData.editableBatch`。 |\n| `SceneInstanceObject` | `SceneLoader` 的单模型逻辑引用、`id` / `sid` 检索、`instanceKind = 'SceneInstances'`、统一显隐/颜色/透明度/高亮/bounds/dirty API,以及 editable batch 的 `materialize()`;世界 transform 或半透明变化时可只恢复当前普通 `Model`。 |\n| `SceneInstancedLayer` | `SceneLoader` 内部批量渲染层、共享 `ModelInstancedLayer`、dirty-driven instance buffer 同步、raycast hit remap。 |\n| `SceneEditableBatchLayer` | `EditableGeometryBatchLayer<SceneInstanceObject>` 的 u-manager 薄适配层,作为 opt-in 静态 Geometry 合并主层;通用 batching、materialize、内部 `BaseMesh`、不可见 raycast 短路和 lazy BVH 由核心层实现。`SceneLoader` 负责 URL source 与同级 `SceneEditableBatchFallback`(`SceneInstancedLayer`)/普通 `Model` fallback,并监听 typed `materialize` 事件移除对应 fallback instance。 |\n| `FacilityInstanceObject` | 楼层下的设备引用、`objectManager.getById()` 全局检索、对象级包围盒缓存 + `controls.flyToObject()` 飞向单设备、统一 `setInstance*` 控制、fallback `Model` wrapper 和事件目标。 |\n| `FacilityInstancedLayer` | `SemanticGroup.facilityLayer` / `SemanticGroup.getDefaultFacilityLayer()`、`getInstances()`、`getInstanceById()`、`reserveBatch()`、`addInstance()` / `addInstances()`、`removeInstance()` / `removeInstances()`(支持单个 `instanceId` 字符串)、`removeBatch()`、`clearBatches()`、batch 创建条件、`setInstanceCulling()`、动态 Facilities batch、可选按相机视锥压缩 active instances、可选 `minScreenRadius` 屏幕尺寸裁剪、dirty-driven instance buffer 同步和 raycast hit remap。 |\n| `Facilities` | `SemanticLoader` 解析、`FloorMesh.getFacilityById()`、`FacilityInstanceObject.setInstanceOpacity()`、普通 `Model` fallback wrapper 与 scene-level instancing 的一致 API;`SemanticGroup` / `BuildingGroup` / `FloorMesh` 查询使用对象语义 ID、实例 `instanceId` 或显式别名,不扫描 `userData` ID。 |\n\n## Effects 检索范围\n\nMCP 文档索引会同步 `docs/api-effects.md` 中的 `MaterialEffects` / `TSLEffects` API,以及 `docs/examples-guide.md` 中的 Outline 示例。客户端可以直接检索以下关键词:\n\n| 关键词 / API | 可检索内容 |\n| :----------- | :--------- |\n| `TSLEffects.outline` / `TSLOutlineEffect` | 通过 `RenderPipeline.addOutputEffect()` 接入描边、`setSelectedObjects()` 替换选择、`update()` 动态调参,以及 `removeOutputEffect()` 后 `dispose()` 的完整生命周期。 |\n| `TSLOutlineOptions` | 可见/隐藏边缘颜色、强度、厚度、Glow、降采样比例,以及 `instanceBoundsProxy`、padding 和最小尺寸默认值。 |\n| `InstanceObject outline` / `instanceBoundsProxy` | 优先使用实例的实际渲染对象或逻辑对象渲染子树;都不存在时由世界包围盒创建不可见代理,并随 dirty callback 更新。 |\n| `test_outline` | Box、Sphere 与核心 `InstanceObject` 的交互选择、实时参数调整和 output-effect 资源释放示例。 |\n\n## fire 检索范围\n\nMCP 文档索引会同步 `docs/api-plugin-fire.md` 中的 FireEffect API、参数和示例。客户端可以直接检索以下关键词:\n\n| 关键词 / API | 可检索内容 |\n| :----------- | :--------- |\n| `FireEffect` | 插件创建、`enable()`、`update()`、`setEmitter()`、`reset()`、`disable()` 和 `dispose()`。 |\n| `fire` / `volumetric fire` | WebGPU 体积火焰、烟雾散射、curl noise、buoyancy、Jacobi pressure projection 和 raymarch 输出。 |\n| `emitterGeometry` / `emitterRadius` | 默认 `TeapotGeometry(0.8, 28)`、自定义 emitter 几何、业务 `Object3D` matrix 驱动和移动扰动半径。 |\n| `size` / `gridSize` | 体积盒世界范围、烟雾扩散边界和 3D 模拟网格尺寸。 |\n| `addOutputEffect` | `FireEffect` 通过 RenderPipeline output effect 叠加体积 pass,不占用业务 `setOutputComposer()`。 |\n| `keyLight` / `pointLight` | 体积阴影 spot light、跟随火焰核心的动态点光源和可关闭的内置光源。 |\n\n## 包结构\n\n源码位于 `packages/u-space-mcp`。本地兼容发布入口会先递增 `u-space-mcp` 的 patch 版本,再从 `docs/*.md` 生成内置文档索引、编译并通过当前 npm 登录态发布,因此启用 npm 2FA 时仍会请求 OTP:\n\n```bash\npnpm publish:mcp\n```\n\n维护者发布完整版本时应使用 [`pnpm release:all`](./release)。该命令触发 GitHub Actions,通过 npm Trusted Publishing/OIDC 同时发布 `u-space` 与 `u-space-mcp`,不需要 `NPM_TOKEN` 或每次输入 OTP,并继续部署 docs 与 examples。\n\n发布后的包不依赖本机绝对路径;只有在传入 `--docs` 或设置 `U_SPACE_DOCS_PATH` 时,才会读取本地文档目录。\n"
1979
2027
  },
1980
2028
  {
1981
2029
  "id": "release",
@@ -1 +1 @@
1
- {"version":3,"file":"docs-index.js","sourceRoot":"","sources":["../../src/generated/docs-index.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,SAAS,GAAe;IACnC;QACE,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,mBAAmB;QAC3B,OAAO,EAAE,gBAAgB;QACzB,SAAS,EAAE,4NAA4N;QACvO,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,gBAAgB;aACzB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,gBAAgB;aACzB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,kBAAkB;aAC3B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,mBAAmB;aAC5B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;SACF;QACD,SAAS,EAAE,szFAAszF;KACl0F;IACD;QACE,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,gBAAgB;QACxB,OAAO,EAAE,aAAa;QACtB,SAAS,EAAE,oOAAoO;QAC/O,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,aAAa;aACtB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,qBAAqB;aAC9B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,4BAA4B;aACrC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,mBAAmB;aAC5B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,aAAa;aACtB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,yBAAyB;aAClC;SACF;QACD,SAAS,EAAE,m/KAAm/K;KAC//K;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,MAAM,EAAE,wBAAwB;QAChC,OAAO,EAAE,oBAAoB;QAC7B,SAAS,EAAE,wPAAwP;QACnQ,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,oBAAoB;aAC7B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,yBAAyB;aAClC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,iBAAiB;aAC1B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,+BAA+B;aACxC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,kDAAkD;aAC3D;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,qBAAqB;aAC9B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,mCAAmC;aAC5C;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,sBAAsB;aAC/B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,mBAAmB;aAC5B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,sCAAsC;aAC/C;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,qBAAqB;aAC9B;SACF;QACD,SAAS,EAAE,42IAA42I;KACx3I;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,qBAAqB;QAC7B,OAAO,EAAE,iBAAiB;QAC1B,SAAS,EAAE,gLAAgL;QAC3L,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,iBAAiB;aAC1B;SACF;QACD,SAAS,EAAE,mkDAAmkD;KAC/kD;IACD;QACE,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,gBAAgB;QACxB,OAAO,EAAE,aAAa;QACtB,SAAS,EAAE,kZAAkZ;QAC7Z,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,aAAa;aACtB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,iBAAiB;aAC1B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,kDAAkD;aAC3D;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,uBAAuB;aAChC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,8CAA8C;aACvD;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,gDAAgD;aACzD;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,qBAAqB;aAC9B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,4CAA4C;aACrD;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,6CAA6C;aACtD;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,sFAAsF;aAC/F;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,aAAa;aACtB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,YAAY;aACrB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,8BAA8B;aACvC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,iCAAiC;aAC1C;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,+BAA+B;aACxC;SACF;QACD,SAAS,EAAE,w8NAAw8N;KACp9N;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,qBAAqB;QAC7B,OAAO,EAAE,kBAAkB;QAC3B,SAAS,EAAE,4XAA4X;QACvY,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,kBAAkB;aAC3B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,QAAQ;aACjB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,QAAQ;aACjB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,SAAS;aAClB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,kBAAkB;aAC3B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,mBAAmB;aAC5B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,wBAAwB;aACjC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,sBAAsB;aAC/B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,uCAAuC;aAChD;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,0CAA0C;aACnD;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,mBAAmB;aAC5B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,WAAW;aACpB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,WAAW;aACpB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,qBAAqB;aAC9B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,mBAAmB;aAC5B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,WAAW;aACpB;SACF;QACD,SAAS,EAAE,68MAA68M;KACz9M;IACD;QACE,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,iBAAiB;QACzB,OAAO,EAAE,cAAc;QACvB,SAAS,EAAE,uLAAuL;QAClM,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,cAAc;aACvB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,eAAe;aACxB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,qBAAqB;aAC9B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,yBAAyB;aAClC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,yBAAyB;aAClC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,gCAAgC;aACzC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,0BAA0B;aACnC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,wBAAwB;aACjC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,4BAA4B;aACrC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,4BAA4B;aACrC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,qCAAqC;aAC9C;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,wBAAwB;aACjC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,WAAW;aACpB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,yCAAyC;aAClD;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,6BAA6B;aACtC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,mBAAmB;aAC5B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,mBAAmB;aAC5B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,cAAc;aACvB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,uBAAuB;aAChC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,0CAA0C;aACnD;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,gBAAgB;aACzB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,yBAAyB;aAClC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,cAAc;aACvB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,YAAY;aACrB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,+BAA+B;aACxC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;SACF;QACD,SAAS,EAAE,+kMAA+kM;KAC3lM;IACD;QACE,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,gBAAgB;QACxB,OAAO,EAAE,aAAa;QACtB,SAAS,EAAE,kHAAkH;QAC7H,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,aAAa;aACtB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,KAAK;aACd;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,UAAU;aACnB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,WAAW;aACpB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,gBAAgB;aACzB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,eAAe;aACxB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,uBAAuB;aAChC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,kBAAkB;aAC3B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,QAAQ;aACjB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,8BAA8B;aACvC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,UAAU;aACnB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,eAAe;aACxB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,gBAAgB;aACzB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,0BAA0B;aACnC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,iBAAiB;aAC1B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,uCAAuC;aAChD;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,6BAA6B;aACtC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,6BAA6B;aACtC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,wBAAwB;aACjC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,kBAAkB;aAC3B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,aAAa;aACtB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,uBAAuB;aAChC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,YAAY;aACrB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,WAAW;aACpB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,YAAY;aACrB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,UAAU;aACnB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,WAAW;aACpB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,aAAa;aACtB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,KAAK;aACd;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,eAAe;aACxB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,0BAA0B;aACnC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,WAAW;aACpB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,UAAU;aACnB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,oBAAoB;aAC7B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,uBAAuB;aAChC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,gBAAgB;aACzB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,4CAA4C;aACrD;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,sCAAsC;aAC/C;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,4CAA4C;aACrD;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,eAAe;aACxB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,cAAc;aACvB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,sCAAsC;aAC/C;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,cAAc;aACvB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,mDAAmD;aAC5D;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,4BAA4B;aACrC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,gCAAgC;aACzC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,WAAW;aACpB;SACF;QACD,SAAS,EAAE,8ioBAA8ioB;KAC1joB;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,MAAM,EAAE,0BAA0B;QAClC,OAAO,EAAE,YAAY;QACrB,SAAS,EAAE,oVAAoV;QAC/V,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,YAAY;aACrB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,KAAK;aACd;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,wBAAwB;aACjC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,kBAAkB;aAC3B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,kBAAkB;aAC3B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,2CAA2C;aACpD;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,eAAe;aACxB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,WAAW;aACpB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,WAAW;aACpB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,SAAS;aAClB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;SACF;QACD,SAAS,EAAE,49IAA49I;KACx+I;IACD;QACE,IAAI,EAAE,2BAA2B;QACjC,MAAM,EAAE,8BAA8B;QACtC,OAAO,EAAE,gBAAgB;QACzB,SAAS,EAAE,6JAA6J;QACxK,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,gBAAgB;aACzB;SACF;QACD,SAAS,EAAE,0wDAA0wD;KACtxD;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,oBAAoB;QAC5B,OAAO,EAAE,MAAM;QACf,SAAS,EAAE,sNAAsN;QACjO,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,KAAK;aACd;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,kCAAkC;aAC3C;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,kBAAkB;aAC3B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,kBAAkB;aAC3B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,uBAAuB;aAChC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,gCAAgC;aACzC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,SAAS;aAClB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,WAAW;aACpB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,WAAW;aACpB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,SAAS;aAClB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,SAAS;aAClB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,SAAS;aAClB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,sBAAsB;aAC/B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;SACF;QACD,SAAS,EAAE,2vMAA2vM;KACvwM;IACD;QACE,IAAI,EAAE,8BAA8B;QACpC,MAAM,EAAE,iCAAiC;QACzC,OAAO,EAAE,mBAAmB;QAC5B,SAAS,EAAE,wHAAwH;QACnI,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,mBAAmB;aAC5B;SACF;QACD,SAAS,EAAE,g5BAAg5B;KAC55B;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,MAAM,EAAE,uBAAuB;QAC/B,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,oIAAoI;QAC/I,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,SAAS;aAClB;SACF;QACD,SAAS,EAAE,goCAAgoC;KAC5oC;IACD;QACE,IAAI,EAAE,4BAA4B;QAClC,MAAM,EAAE,+BAA+B;QACvC,OAAO,EAAE,iBAAiB;QAC1B,SAAS,EAAE,0KAA0K;QACrL,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,iBAAiB;aAC1B;SACF;QACD,SAAS,EAAE,g1FAAg1F;KAC51F;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,qBAAqB;QAC7B,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,oLAAoL;QAC/L,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;SACF;QACD,SAAS,EAAE,8hEAA8hE;KAC1iE;IACD;QACE,IAAI,EAAE,4BAA4B;QAClC,MAAM,EAAE,+BAA+B;QACvC,OAAO,EAAE,iBAAiB;QAC1B,SAAS,EAAE,kNAAkN;QAC7N,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,iBAAiB;aAC1B;SACF;QACD,SAAS,EAAE,qgEAAqgE;KACjhE;IACD;QACE,IAAI,EAAE,8BAA8B;QACpC,MAAM,EAAE,iCAAiC;QACzC,OAAO,EAAE,mBAAmB;QAC5B,SAAS,EAAE,+GAA+G;QAC1H,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,mBAAmB;aAC5B;SACF;QACD,SAAS,EAAE,g6BAAg6B;KAC56B;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,MAAM,EAAE,yBAAyB;QACjC,OAAO,EAAE,WAAW;QACpB,SAAS,EAAE,kZAAkZ;QAC7Z,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,WAAW;aACpB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,gBAAgB;aACzB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,gBAAgB;aACzB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,eAAe;aACxB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,eAAe;aACxB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,SAAS;aAClB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,wBAAwB;aACjC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,wBAAwB;aACjC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,qBAAqB;aAC9B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,WAAW;aACpB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,QAAQ;aACjB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,aAAa;aACtB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,+BAA+B;aACxC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,oBAAoB;aAC7B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,gBAAgB;aACzB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,aAAa;aACtB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,YAAY;aACrB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,qBAAqB;aAC9B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,qBAAqB;aAC9B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,yBAAyB;aAClC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,mCAAmC;aAC5C;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,+BAA+B;aACxC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,qCAAqC;aAC9C;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,kBAAkB;aAC3B;SACF;QACD,SAAS,EAAE,+jqCAA+jqC;KAC3kqC;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,MAAM,EAAE,wBAAwB;QAChC,OAAO,EAAE,2BAA2B;QACpC,SAAS,EAAE,qKAAqK;QAChL,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,2BAA2B;aACpC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,aAAa;aACtB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,gBAAgB;aACzB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,YAAY;aACrB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,aAAa;aACtB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,WAAW;aACpB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,4BAA4B;aACrC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,kBAAkB;aAC3B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,mBAAmB;aAC5B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,aAAa;aACtB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,wBAAwB;aACjC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,gBAAgB;aACzB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,gBAAgB;aACzB;SACF;QACD,SAAS,EAAE,uiOAAuiO;KACnjO;IACD;QACE,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,cAAc;QACtB,OAAO,EAAE,WAAW;QACpB,SAAS,EAAE,8FAA8F;QACzG,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,WAAW;aACpB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,aAAa;aACtB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,2CAA2C;aACpD;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,+BAA+B;aACxC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,gDAAgD;aACzD;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,eAAe;aACxB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,qBAAqB;aAC9B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,cAAc;aACvB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,qBAAqB;aAC9B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,wBAAwB;aACjC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,sBAAsB;aAC/B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,8EAA8E;aACvF;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,WAAW;aACpB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,mBAAmB;aAC5B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,8BAA8B;aACvC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,kBAAkB;aAC3B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,mBAAmB;aAC5B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,mCAAmC;aAC5C;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;SACF;QACD,SAAS,EAAE,ulNAAulN;KACnmN;IACD;QACE,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,eAAe;QACvB,OAAO,EAAE,YAAY;QACrB,SAAS,EAAE,sHAAsH;QACjI,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,YAAY;aACrB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,eAAe;aACxB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,QAAQ;aACjB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,wBAAwB;aACjC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,4BAA4B;aACrC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,2DAA2D;aACpE;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,uDAAuD;aAChE;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,eAAe;aACxB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,2BAA2B;aACpC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,4BAA4B;aACrC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,yBAAyB;aAClC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,sBAAsB;aAC/B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,mBAAmB;aAC5B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,2BAA2B;aACpC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,wBAAwB;aACjC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,kCAAkC;aAC3C;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,8DAA8D;aACvE;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,YAAY;aACrB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,gBAAgB;aACzB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,cAAc;aACvB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,WAAW;aACpB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,6BAA6B;aACtC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,eAAe;aACxB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,oBAAoB;aAC7B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,qBAAqB;aAC9B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,8BAA8B;aACvC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;SACF;QACD,SAAS,EAAE,g+qBAAg+qB;KAC5+qB;IACD;QACE,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,cAAc;QACtB,OAAO,EAAE,MAAM;QACf,SAAS,EAAE,kZAAkZ;QAC7Z,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,KAAK;aACd;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,QAAQ;aACjB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,QAAQ;aACjB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,QAAQ;aACjB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,QAAQ;aACjB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,QAAQ;aACjB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,QAAQ;aACjB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,QAAQ;aACjB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,QAAQ;aACjB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,QAAQ;aACjB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,QAAQ;aACjB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,QAAQ;aACjB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,QAAQ;aACjB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,QAAQ;aACjB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;SACF;QACD,SAAS,EAAE,y9nBAAy9nB;KACr+nB;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,mBAAmB;QAC3B,OAAO,EAAE,MAAM;QACf,SAAS,EAAE,kZAAkZ;QAC7Z,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,SAAS;aAClB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,wBAAwB;aACjC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,4BAA4B;aACrC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,8BAA8B;aACvC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,gCAAgC;aACzC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,mDAAmD;aAC5D;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,iDAAiD;aAC1D;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,oCAAoC;aAC7C;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,6EAA6E;aACtF;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,qCAAqC;aAC9C;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,wDAAwD;aACjE;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,oCAAoC;aAC7C;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,wCAAwC;aACjD;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,mDAAmD;aAC5D;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,iDAAiD;aAC1D;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,qDAAqD;aAC9D;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,wCAAwC;aACjD;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,wCAAwC;aACjD;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,iDAAiD;aAC1D;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,0CAA0C;aACnD;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,wCAAwC;aACjD;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,gCAAgC;aACzC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,4BAA4B;aACrC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,wBAAwB;aACjC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;SACF;QACD,SAAS,EAAE,i9eAAi9e;KAC79e;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,oBAAoB;QAC5B,OAAO,EAAE,cAAc;QACvB,SAAS,EAAE,4JAA4J;QACvK,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,cAAc;aACvB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,YAAY;aACrB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,gBAAgB;aACzB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,qBAAqB;aAC9B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,SAAS;aAClB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,KAAK;aACd;SACF;QACD,SAAS,EAAE,47GAA47G;KACx8G;IACD;QACE,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,oCAAoC;QAC/C,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,QAAQ;aACjB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,KAAK;aACd;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;SACF;QACD,SAAS,EAAE,mkFAAmkF;KAC/kF;IACD;QACE,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,aAAa;QACtB,SAAS,EAAE,kZAAkZ;QAC7Z,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,aAAa;aACtB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,WAAW;aACpB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,6BAA6B;aACtC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,iCAAiC;aAC1C;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,WAAW;aACpB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,KAAK;aACd;SACF;QACD,SAAS,EAAE,6gUAA6gU;KACzhU;IACD;QACE,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,MAAM;QACf,SAAS,EAAE,kFAAkF;QAC7F,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,OAAO;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,+BAA+B;aACxC;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,oBAAoB;aAC7B;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI;aACb;SACF;QACD,SAAS,EAAE,igGAAigG;KAC7gG;CACF,CAAC"}
1
+ {"version":3,"file":"docs-index.js","sourceRoot":"","sources":["../../src/generated/docs-index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "u-space-mcp",
3
- "version": "0.0.16",
3
+ "version": "0.0.18",
4
4
  "description": "Model Context Protocol server for u-space documentation.",
5
5
  "type": "module",
6
6
  "bin": {