u-space-mcp 0.0.17 → 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.
@@ -761,7 +761,7 @@ export const docsIndex = [
761
761
  "text": "dispose()"
762
762
  }
763
763
  ],
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` | 启用内存缓存。若模型已加载过,则直接从内存中获取并克隆。 |\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"
765
765
  },
766
766
  {
767
767
  "id": "api-plugin-atmosphere",
@@ -1424,7 +1424,7 @@ export const docsIndex = [
1424
1424
  "id": "changelog",
1425
1425
  "path": "changelog.md",
1426
1426
  "title": "更新日志",
1427
- "summary": "- **Offscreen 在线示例场景源** 保留本地 `examples/scenes/飞龙吾悦广场` 及其匹配密钥;GitHub 发布流程会在 Vercel 构建前拉取真实 Git LFS 对象,构建脚本也会拒绝仅含 pointer 的场景。超过 Vercel 单文件上限的场景资源会在部署产物中拆成 90 MiB 分片,由 render/decode Worker 流式还原,既避免把 LFS pointer 当作 JSON,也不替换原场景。 - **TSLEffects Outline** 补齐 `TSLEffects.outline()`、`TSLOutlineOptions`、`TSLOutlineEffect`、RenderPipeline output-effect 接入、`InstanceObject` 渲染对象/bounds proxy 策略、资源释放、`test",
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 ",
1428
1428
  "headings": [
1429
1429
  {
1430
1430
  "level": 1,
@@ -1434,6 +1434,14 @@ export const docsIndex = [
1434
1434
  "level": 2,
1435
1435
  "text": "未发布"
1436
1436
  },
1437
+ {
1438
+ "level": 2,
1439
+ "text": "0.0.33"
1440
+ },
1441
+ {
1442
+ "level": 3,
1443
+ "text": "修复与优化"
1444
+ },
1437
1445
  {
1438
1446
  "level": 2,
1439
1447
  "text": "0.0.32"
@@ -1679,13 +1687,13 @@ export const docsIndex = [
1679
1687
  "text": "新增"
1680
1688
  }
1681
1689
  ],
1682
- "content": "# 更新日志\n\n## 未发布\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"
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"
1683
1691
  },
1684
1692
  {
1685
1693
  "id": "examples-guide",
1686
1694
  "path": "examples-guide.md",
1687
1695
  "title": "示例指南",
1688
- "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.32`。Vercel 文档部署会继续把 `__VERSION__` 占位符替换为 `package.json` 中的版本号,源码里的 `0.0.32` 作为直接托管 `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__` 声明额",
1689
1697
  "headings": [
1690
1698
  {
1691
1699
  "level": 1,
@@ -1888,7 +1896,7 @@ export const docsIndex = [
1888
1896
  "text": "核心要点:"
1889
1897
  }
1890
1898
  ],
1891
- "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.32`。Vercel 文档部署会继续把 `__VERSION__` 占位符替换为 `package.json` 中的版本号,源码里的 `0.0.32` 作为直接托管 `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_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"
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"
1892
1900
  },
1893
1901
  {
1894
1902
  "id": "getting-started",
@@ -1937,7 +1945,7 @@ export const docsIndex = [
1937
1945
  "text": "下一步"
1938
1946
  }
1939
1947
  ],
1940
- "content": "# 快速上手 `u-space`\n\n`u-space` 是一个基于 Three.js 的 WebGPU 3D 引擎。本指南使用 React、TypeScript 和 Vite 搭建一个基础应用。\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.32'\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、TypeScript 和 Vite 搭建一个基础应用。\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"
1941
1949
  },
1942
1950
  {
1943
1951
  "id": "index",
@@ -1 +1 @@
1
- {"version":3,"file":"docs-index.js","sourceRoot":"","sources":["../../src/generated/docs-index.ts"],"names":[],"mappings":"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"}
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.17",
3
+ "version": "0.0.18",
4
4
  "description": "Model Context Protocol server for u-space documentation.",
5
5
  "type": "module",
6
6
  "bin": {