@realsee/five 6.8.0-alpha.5 → 6.8.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/README.md +2 -5
  2. package/ai_guides/README.md +5 -0
  3. package/ai_guides/api.md +13 -0
  4. package/ai_guides/features/flowing-light-2d-pass.md +218 -0
  5. package/ai_guides/features/flowing-light-3d-pass.md +240 -0
  6. package/ai_guides/features/gaussian-blur-pass.md +202 -0
  7. package/ai_guides/features/load-external-model.md +16 -0
  8. package/ai_guides/features/load-progress.md +140 -0
  9. package/ai_guides/features/parameter.md +7 -0
  10. package/ai_guides/features/postprocessing.md +35 -2
  11. package/ai_guides/features/raycast.md +9 -0
  12. package/ai_guides/features/view-layer.md +8 -3
  13. package/ai_guides/features/work.md +17 -0
  14. package/ai_guides/glossary.md +17 -0
  15. package/ai_guides/release_notes/6.8.md +81 -0
  16. package/docs/assets/hierarchy.js +1 -1
  17. package/docs/assets/navigation.js +1 -1
  18. package/docs/assets/search.js +1 -1
  19. package/docs/classes/five.AdaptiveLuminancePass.html +1 -1
  20. package/docs/classes/five.BoundingMesh.html +1 -1
  21. package/docs/classes/five.Camera.html +1 -1
  22. package/docs/classes/five.EyeDomeLightingPass.html +1 -1
  23. package/docs/classes/five.Five.html +71 -71
  24. package/docs/classes/five.FivePass.html +1 -1
  25. package/docs/classes/five.InternalWebGLRenderer.html +1 -1
  26. package/docs/classes/five.Model.html +31 -31
  27. package/docs/classes/five.ModelScene.html +1 -1
  28. package/docs/classes/five.NetworkSubscribe.html +1 -1
  29. package/docs/classes/five.PBMContainer.html +1 -1
  30. package/docs/classes/five.PBMGSObject.html +1 -1
  31. package/docs/classes/five.PBMGroup.html +1 -1
  32. package/docs/classes/five.PBMMesh.html +1 -1
  33. package/docs/classes/five.PBMMeshMaterial.html +1 -1
  34. package/docs/classes/five.PBMPointCloud.html +1 -1
  35. package/docs/classes/five.PBMPointCloudMaterial.html +1 -1
  36. package/docs/classes/five.PBMSkinnedMesh.html +1 -1
  37. package/docs/classes/five.PanoCircleMesh.html +1 -1
  38. package/docs/classes/five.PanoCircleMeshCustom.html +1 -1
  39. package/docs/classes/five.PanoCircleMeshSolid.html +1 -1
  40. package/docs/classes/five.Parameter.html +1 -1
  41. package/docs/classes/five.Scene.html +1 -1
  42. package/docs/classes/five.Subscribe.html +1 -1
  43. package/docs/classes/five.Tile.html +1 -1
  44. package/docs/classes/five.Tile3D.html +30 -26
  45. package/docs/classes/five.TileNode.html +1 -1
  46. package/docs/classes/five.Trajectory.html +1 -1
  47. package/docs/classes/five.TrajectoryNode.html +1 -1
  48. package/docs/classes/five.Work.html +16 -16
  49. package/docs/classes/five.WorkResolvedObserver.html +27 -2
  50. package/docs/classes/gltf-loader.DDSLoader.html +1 -1
  51. package/docs/classes/gltf-loader.DRACOLoader.html +1 -1
  52. package/docs/classes/gltf-loader.GLTFLoader.html +1 -1
  53. package/docs/classes/gltf-loader.GLTFObject.html +1 -1
  54. package/docs/classes/gltf-loader.THREEGLTFLoader.html +1 -1
  55. package/docs/classes/line.Line.html +1 -1
  56. package/docs/classes/line.LineGeometry.html +1 -1
  57. package/docs/classes/line.LineMaterial.html +1 -1
  58. package/docs/classes/line.LineSegmentsGeometry.html +1 -1
  59. package/docs/classes/line.THREE_Line2.html +1 -1
  60. package/docs/classes/line.THREE_LineSegments2.html +1 -1
  61. package/docs/classes/plugins.BasePlugin.Controller.html +1 -1
  62. package/docs/classes/plugins.RoundedBoxGeometry.html +1 -1
  63. package/docs/classes/sticker.Sticker.html +1 -1
  64. package/docs/classes/vfx.Airflow.html +1 -1
  65. package/docs/classes/vfx.Flame.html +1 -1
  66. package/docs/classes/vfx.Particle.html +1 -1
  67. package/docs/classes/vfx.ParticleGPU.html +1 -1
  68. package/docs/classes/vfx.SpotLight.html +1 -1
  69. package/docs/documents/README.html +5 -0
  70. package/docs/documents/api.html +28 -3
  71. package/docs/documents/features_flowing-light-2d-pass.html +124 -0
  72. package/docs/documents/features_flowing-light-3d-pass.html +129 -0
  73. package/docs/documents/features_gaussian-blur-pass.html +182 -0
  74. package/docs/documents/features_load-external-model.html +19 -2
  75. package/docs/documents/features_load-progress.html +110 -0
  76. package/docs/documents/features_parameter.html +7 -0
  77. package/docs/documents/features_postprocessing.html +17 -3
  78. package/docs/documents/features_raycast.html +1 -1
  79. package/docs/documents/features_view-layer.html +9 -3
  80. package/docs/documents/features_work.html +1 -1
  81. package/docs/documents/glossary.html +21 -1
  82. package/docs/documents/release_notes_6.8.html +92 -0
  83. package/docs/functions/five.loadAt3d.html +1 -1
  84. package/docs/functions/five.loadB3dm.html +1 -1
  85. package/docs/functions/five.loadDome.html +1 -1
  86. package/docs/functions/five.loadDomez.html +1 -1
  87. package/docs/functions/five.loadFbx.html +1 -1
  88. package/docs/functions/five.loadGltf.html +1 -1
  89. package/docs/functions/five.loadPbm.html +1 -1
  90. package/docs/functions/five.loadPly.html +1 -1
  91. package/docs/functions/five.loadPnts.html +1 -1
  92. package/docs/functions/five.loadSplat.html +1 -1
  93. package/docs/functions/five.loadSpz.html +1 -1
  94. package/docs/functions/five.loadX3p.html +1 -1
  95. package/docs/functions/five.parseWork.html +1 -1
  96. package/docs/functions/vue.useFiveWorks.html +2 -2
  97. package/docs/hierarchy.html +1 -1
  98. package/docs/index.html +5 -0
  99. package/docs/interfaces/five.AddableObject.html +1 -1
  100. package/docs/interfaces/five.AjaxOptions.html +1 -1
  101. package/docs/interfaces/five.BaseEvent.html +2 -2
  102. package/docs/interfaces/five.EventCallback.html +15 -11
  103. package/docs/interfaces/five.GestureEvent.html +2 -2
  104. package/docs/interfaces/five.ImageOptions.html +1 -1
  105. package/docs/interfaces/five.IntersectEvent.html +2 -2
  106. package/docs/interfaces/five.IntersectMesh.html +1 -1
  107. package/docs/interfaces/five.IntersectMeshInterface.html +1 -1
  108. package/docs/interfaces/five.Intersection.html +4 -3
  109. package/docs/interfaces/five.LooseWorkWithExtrinsics.html +6 -6
  110. package/docs/interfaces/five.ModeChangeEvent.html +2 -2
  111. package/docs/interfaces/five.ModelControllerCustomInitArgs.html +1 -1
  112. package/docs/interfaces/five.ModelEvent.html +2 -2
  113. package/docs/interfaces/five.ModelSceneEvent.html +2 -2
  114. package/docs/interfaces/five.ModelTileEvent.html +8 -0
  115. package/docs/interfaces/five.MovePanoOptions.html +1 -1
  116. package/docs/interfaces/five.NetworkAbortError.html +1 -1
  117. package/docs/interfaces/five.NetworkFirbiddenError.html +1 -1
  118. package/docs/interfaces/five.NetworkOptions.html +1 -1
  119. package/docs/interfaces/five.NetworkProxyError.html +1 -1
  120. package/docs/interfaces/five.NetworkResourceEvent.html +2 -2
  121. package/docs/interfaces/five.NetworkResponseError.html +1 -1
  122. package/docs/interfaces/five.NetworkTimeoutError.html +1 -1
  123. package/docs/interfaces/five.ObjectEvent.html +2 -2
  124. package/docs/interfaces/five.PBMMaterial.html +1 -1
  125. package/docs/interfaces/five.PBMMeshMaterialParameters.html +1 -1
  126. package/docs/interfaces/five.PBMPointCloudMaterialParameters.html +1 -1
  127. package/docs/interfaces/five.PanoCircleMeshInterface.html +1 -1
  128. package/docs/interfaces/five.PanoEvent.html +2 -2
  129. package/docs/interfaces/five.PanoTextureEvent.html +2 -2
  130. package/docs/interfaces/five.PanoramaControllerCustomInitArgs.html +1 -1
  131. package/docs/interfaces/five.PanoramaLikeControllerCustomInitArgs.html +1 -1
  132. package/docs/interfaces/five.ParameterMaterialValue.html +1 -1
  133. package/docs/interfaces/five.ParameterTilesetValue.html +1 -1
  134. package/docs/interfaces/five.ParameterValue.html +1 -1
  135. package/docs/interfaces/five.Pose.html +1 -1
  136. package/docs/interfaces/five.RenderEvent.html +2 -2
  137. package/docs/interfaces/five.ResolvedParameterValue.html +1 -1
  138. package/docs/interfaces/five.State.html +1 -1
  139. package/docs/interfaces/five.StateEvent.html +2 -2
  140. package/docs/interfaces/five.TextureOptions.html +1 -1
  141. package/docs/interfaces/five.TopviewControllerCustomInitArgs.html +1 -1
  142. package/docs/interfaces/five.VRPanoramaControllerCustomInitArgs.html +1 -1
  143. package/docs/interfaces/five.ViewLayer.html +30 -26
  144. package/docs/interfaces/five.WorkCubeImage.html +1 -1
  145. package/docs/interfaces/five.WorkImage.html +1 -1
  146. package/docs/interfaces/five.WorkModel.html +8 -8
  147. package/docs/interfaces/five.WorkModelLayer.html +6 -6
  148. package/docs/interfaces/five.WorkObserver.html +27 -2
  149. package/docs/interfaces/five.WorkTile.html +1 -1
  150. package/docs/interfaces/five.WorksEvent.html +2 -2
  151. package/docs/interfaces/five.XRControllerEvent.html +2 -2
  152. package/docs/interfaces/five.XRGestureEvent.html +2 -2
  153. package/docs/interfaces/five.XRPanoramaControllerCustomInitArgs.html +1 -1
  154. package/docs/interfaces/five.XRSessionEvent.html +2 -2
  155. package/docs/interfaces/plugins.BackgroundPluginController.html +1 -1
  156. package/docs/interfaces/plugins.BackgroundPluginType.EventMap.html +1 -1
  157. package/docs/interfaces/plugins.BasePlugin.State.html +1 -1
  158. package/docs/interfaces/plugins.DynamicPathLinePluginController.html +1 -1
  159. package/docs/interfaces/plugins.DynamicPathLinePluginType.EventMap.html +1 -1
  160. package/docs/interfaces/plugins.DynamicPathLinePluginType.State.html +1 -1
  161. package/docs/interfaces/plugins.ItemMaskController.html +1 -1
  162. package/docs/interfaces/plugins.ItemMaskPluginType.EventMap.html +1 -1
  163. package/docs/interfaces/plugins.ItemMaskPluginType.State.html +1 -1
  164. package/docs/interfaces/plugins.OrientationPluginController.html +1 -1
  165. package/docs/interfaces/plugins.OrientationPluginType.EventMap.html +1 -1
  166. package/docs/interfaces/plugins.OrientationPluginType.State.html +1 -1
  167. package/docs/interfaces/plugins.PanoAnimeController.html +1 -1
  168. package/docs/interfaces/plugins.PanoAnimePluginType.EventMap.html +1 -1
  169. package/docs/interfaces/plugins.PanoAnimePluginType.State.html +1 -1
  170. package/docs/interfaces/plugins.PluginTemplateType.EventMap.html +1 -1
  171. package/docs/interfaces/plugins.PluginTemplateType.State.html +1 -1
  172. package/docs/interfaces/plugins.TrajectoryController.html +1 -1
  173. package/docs/interfaces/react.FiveInjectionTypes.html +13 -13
  174. package/docs/modules/five.html +1 -1
  175. package/docs/modules.html +1 -1
  176. package/docs/types/five.EventTypes.html +12 -10
  177. package/docs/types/five.NetworkProgressCallback.html +1 -1
  178. package/docs/types/five.ParseOptions.html +6 -6
  179. package/docs/types/plugins.BasePlugin.EventMap.html +1 -1
  180. package/five/application/events.d.ts +5 -1
  181. package/five/declare.d.ts +2 -1
  182. package/five/index.d.ts +1 -1
  183. package/five/index.js +429 -73
  184. package/five/index.mjs +5385 -4485
  185. package/five/model/intersection.d.ts +2 -0
  186. package/five/model/loaders/at3d.d.ts +1 -0
  187. package/five/model/loaders/b3dm.d.ts +1 -0
  188. package/five/model/loaders/dome.d.ts +1 -0
  189. package/five/model/loaders/domez.d.ts +1 -0
  190. package/five/model/loaders/fbx.d.ts +1 -0
  191. package/five/model/loaders/glTF-helpers/extensions/KHR_animation_pointer.d.ts +6 -0
  192. package/five/model/loaders/glTF-helpers/extensions/KHR_node_visibility.d.ts +6 -0
  193. package/five/model/loaders/glTF-helpers/index.d.ts +4 -0
  194. package/five/model/loaders/gltf.d.ts +1 -0
  195. package/five/model/loaders/obj.d.ts +1 -0
  196. package/five/model/loaders/pbm.d.ts +1 -0
  197. package/five/model/loaders/ply.d.ts +1 -0
  198. package/five/model/loaders/pnts.d.ts +1 -0
  199. package/five/model/loaders/splat.d.ts +1 -0
  200. package/five/model/loaders/spz.d.ts +1 -0
  201. package/five/model/loaders/x3p.d.ts +1 -0
  202. package/five/model/model.d.ts +26 -1
  203. package/five/model/tile3d/index.d.ts +5 -1
  204. package/five/model/tile3d/tile.d.ts +1 -0
  205. package/five/model/tile3d/trajectory.d.ts +1 -0
  206. package/five/model/view-layer.d.ts +1 -2
  207. package/five/renderer/postprocessing/index.d.ts +2 -0
  208. package/five/renderer/postprocessing/passes/flowing-light-2d-pass.d.ts +22 -0
  209. package/five/renderer/postprocessing/passes/flowing-light-3d-pass.d.ts +22 -0
  210. package/five/renderer/postprocessing/passes/gaussian-blur-pass.d.ts +1 -0
  211. package/five/utils/ajax.d.ts +1 -1
  212. package/five/utils/event.d.ts +6 -0
  213. package/five/work/work.d.ts +35 -2
  214. package/five/work/workObserverUtils.d.ts +36 -0
  215. package/gltf-loader/index.js +3 -3
  216. package/gltf-loader/index.mjs +3 -3
  217. package/line/index.js +3 -3
  218. package/line/index.mjs +3 -3
  219. package/llms.txt +5 -0
  220. package/package.json +1 -1
  221. package/plugins/index.js +2 -2
  222. package/plugins/index.mjs +2 -2
  223. package/react/index.js +2 -2
  224. package/react/index.mjs +2 -2
  225. package/shader-lib/index.js +2 -2
  226. package/shader-lib/index.mjs +2 -2
  227. package/sticker/index.js +3 -3
  228. package/sticker/index.mjs +3 -3
  229. package/umd/five-gltf-loader.js +3 -3
  230. package/umd/five-line.js +3 -3
  231. package/umd/five-plugins.js +2 -2
  232. package/umd/five-react.js +2 -2
  233. package/umd/five-shader-lib.js +2 -2
  234. package/umd/five-sticker.js +3 -3
  235. package/umd/five-vfx.js +2 -2
  236. package/umd/five-vue.js +2 -2
  237. package/umd/five.js +429 -73
  238. package/vfx/index.js +2 -2
  239. package/vfx/index.mjs +2 -2
  240. package/vue/index.js +2 -2
  241. package/vue/index.mjs +2 -2
  242. package/work-downloader/index.js +2 -2
  243. package/work-downloader/index.mjs +2 -2
@@ -0,0 +1,202 @@
1
+ # Gaussian Blur Pass (高斯模糊通道)
2
+
3
+ - **Summary**: GaussianBlurPass 是一个后处理通道,用于对渲染结果应用高斯模糊效果。
4
+ - **Schema**: GaussianBlurPass 类及其关键参数。
5
+ - **Concepts**: 后处理通道 (Pass)、高斯模糊、Shader、EffectComposer。
6
+ - **Configuration**: 模糊半径 (radius) 和标准差 (sigma) 参数。
7
+ - **Examples**: 基础使用、参数调整。
8
+
9
+ ## Schema
10
+
11
+ > **Definition**: [GaussianBlurPass](../../five/renderer/postprocessing/passes/gaussian-blur-pass.d.ts)
12
+
13
+ `GaussianBlurPass` 是 `FivePass` 的子类,用于实现高斯模糊效果。其核心接口如下:
14
+
15
+ ```ts
16
+ import * as THREE from 'three';
17
+ import { FivePass } from './pass';
18
+ import { type Camera } from '../../../core/camera';
19
+
20
+ export class GaussianBlurPass extends FivePass {
21
+ // 构造函数,传入相机实例
22
+ constructor(camera: Camera);
23
+
24
+ // 设置模糊半径
25
+ public setRadius(radius: number): void;
26
+
27
+ // 渲染方法(由 EffectComposer 调用)
28
+ public render(
29
+ renderer: THREE.WebGLRenderer,
30
+ writeBuffer: THREE.WebGLRenderTarget,
31
+ readBuffer: THREE.WebGLRenderTarget,
32
+ deltaTime: number,
33
+ maskActive?: boolean,
34
+ ): void;
35
+
36
+ // 释放资源
37
+ public dispose(): void;
38
+ }
39
+ ```
40
+
41
+ ### Shader Uniforms (内部 Shader 参数)
42
+
43
+ 该通道使用 ShaderMaterial,包含以下 uniforms:
44
+
45
+ | Uniform | Type | Default | Description |
46
+ | :--- | :--- | :--- | :--- |
47
+ | `colorMap` | `THREE.Texture` | `null` | 输入纹理(来自 readBuffer) |
48
+ | `resolution` | `THREE.Vector2` | `相机分辨率` | 渲染目标的分辨率 |
49
+ | `radius` | `number` | `4.0` | 模糊采样半径(像素数) |
50
+ | `sigma` | `number` | `4.0` | 高斯核的标准差 |
51
+
52
+ ## Concepts
53
+
54
+ ### 后处理通道 (Post-Processing Pass)
55
+ GaussianBlurPass 是 Three.js EffectComposer 生态中的一个通道。它接收前一个通道的输出(readBuffer),进行高斯模糊处理后,输出到下一个通道或屏幕(writeBuffer 或 renderToScreen)。
56
+
57
+ ### 高斯模糊原理
58
+ 该通道采用离散高斯核进行模糊。在 fragment shader 中:
59
+ - 对采样范围内的像素(由 `radius` 定义)计算高斯权重
60
+ - 根据 `sigma` 值计算高斯分布的形状
61
+ - 对所有采样点的颜色值加权平均
62
+
63
+ ### 相机依赖
64
+ 构造函数需传入 `Camera` 实例,用于获取当前渲染分辨率。通过 `camera.resolution` 自动同步分辨率变化,确保模糊效果在窗口 resize 时保持正确。
65
+
66
+ ## Configuration
67
+
68
+ ### 常用参数
69
+
70
+ 通过 `setRadius()` 方法调整模糊效果强度:
71
+
72
+ | Parameter | Type | Default | Range | Description |
73
+ | :--- | :--- | :--- | :--- | :--- |
74
+ | `radius` | `number` | `4.0` | `0 ~ 8` | 采样半径(像素),值越大模糊越明显 |
75
+ | `sigma` | `number` | `4.0` | `0.1 ~ 10` | 高斯核标准差,控制模糊的柔和度 |
76
+
77
+ > 注意:当前实现中 `sigma` 固定为 4.0,仅 `radius` 可动态调整。如需修改 `sigma`,需直接访问 `material.uniforms.sigma.value`。
78
+
79
+ ## Instance Methods
80
+
81
+ ### `constructor(camera: Camera)`
82
+ 初始化高斯模糊通道,需传入相机实例以获取分辨率信息。
83
+
84
+ ### `setRadius(radius: number)`
85
+ 动态调整模糊半径。
86
+ - **参数**: `radius` - 采样半径,建议范围 1 ~ 8
87
+ - **默认值**: 4.0
88
+ - **影响**: 较大的 radius 会增加 GPU 计算成本
89
+
90
+ ### `render(...)`
91
+ 由 EffectComposer 在每一帧自动调用,用于执行模糊处理。通常不需要手动调用。
92
+
93
+ ### `dispose()`
94
+ 释放 Shader Material 和 FullScreenQuad 资源。在销毁 Pass 时必须调用,以防内存泄漏。
95
+
96
+ ## Examples
97
+
98
+ ### 快速上手 (Quick Example)
99
+
100
+ ```ts
101
+ import { Five } from '@realsee/five';
102
+ import { GaussianBlurPass } from '../../lib/five/renderer/postprocessing';
103
+
104
+ const five = new Five();
105
+
106
+ // 使用 Five 的 addPass() 方法添加后处理通道
107
+ const blurPass = new GaussianBlurPass(five.camera);
108
+ five.addPass(blurPass);
109
+
110
+ // 动画循环由 Five 内部管理
111
+ function animate() {
112
+ requestAnimationFrame(animate);
113
+ five.render();
114
+ }
115
+ animate();
116
+ ```
117
+
118
+ ### 进阶用法 (Advanced Usage)
119
+
120
+ #### 动态调整模糊强度
121
+
122
+ ```ts
123
+ const blurPass = new GaussianBlurPass(five.camera);
124
+ five.addPass(blurPass);
125
+
126
+ // 响应用户输入调整模糊半径
127
+ document.addEventListener('keydown', (e) => {
128
+ if (e.key === '+') {
129
+ const current = blurPass['material'].uniforms.radius.value;
130
+ blurPass.setRadius(Math.min(8, current + 0.5));
131
+ }
132
+ if (e.key === '-') {
133
+ const current = blurPass['material'].uniforms.radius.value;
134
+ blurPass.setRadius(Math.max(0, current - 0.5));
135
+ }
136
+ });
137
+ ```
138
+
139
+ #### 多通道组合(模糊 + 其他效果)
140
+
141
+ ```ts
142
+ // Five 的 addPass() 会自动管理后处理链
143
+ const blurPass = new GaussianBlurPass(five.camera);
144
+ five.addPass(blurPass);
145
+
146
+ // 可添加其他后处理通道
147
+ // five.addPass(otherPass);
148
+ ```
149
+
150
+ #### 修改高斯标准差 (Advanced)
151
+
152
+ ```ts
153
+ const blurPass = new GaussianBlurPass(five.camera);
154
+ five.addPass(blurPass);
155
+
156
+ // 获取 Material 并直接修改 sigma
157
+ const sigmaMaterial = blurPass['material'] as THREE.ShaderMaterial;
158
+ sigmaMaterial.uniforms.sigma.value = 2.0; // 调整标准差(更强锐利)
159
+ ```
160
+
161
+ ## Debugging
162
+
163
+ ### 检查模糊效果是否生效
164
+ - 确保 `renderToScreen` 为 `true`,或后续通道正确读取该通道的输出。
165
+ - 确保传入的 `camera` 对象有有效的 `resolution` 属性。
166
+
167
+ ### 性能优化建议
168
+ - 大 `radius` 值会导致 GPU 开销增加。建议在性能受限的设备上限制最大 radius(如 ≤ 6)。
169
+ - 考虑在低端设备上禁用该通道(设置 `blurPass.enabled = false`)。
170
+
171
+ ### 可视化调试
172
+ ```ts
173
+ // 监控当前模糊参数
174
+ const blurPass = new GaussianBlurPass(five.camera);
175
+ console.log('Blur Radius:', blurPass['material'].uniforms.radius.value);
176
+ console.log('Blur Sigma:', blurPass['material'].uniforms.sigma.value);
177
+ console.log('Resolution:', blurPass['material'].uniforms.resolution.value);
178
+ ```
179
+
180
+ ## Common Pitfalls
181
+
182
+ 1. **忘记调用 dispose()**
183
+ - 销毁 Pass 时,必须调用 `blurPass.dispose()` 释放 Shader 资源,否则会导致内存泄漏。
184
+
185
+ 2. **分辨率变化未更新**
186
+ - GaussianBlurPass 会自动从 `camera.resolution` 同步分辨率,无需手动处理。但如果使用自定义相机,需确保其 `resolution` 属性始终有效。
187
+
188
+ 3. **设置过大的 radius**
189
+ - 超过 8 的 radius 值虽然技术上可行,但会显著增加计算成本。建议不超过 8。
190
+
191
+ 4. **与其他 Pass 的 needsSwap 冲突**
192
+ - 如果通道链中多个 Pass 设置了不同的 `needsSwap` 值,可能导致缓冲区错乱。确保通道顺序和 swap 设置一致。
193
+
194
+ ## Related
195
+
196
+ * [Postprocessing](./postprocessing.md): 后处理通用概念与 EffectComposer 使用指南。
197
+
198
+ ---
199
+
200
+ ```yaml
201
+ tags: [postprocessing, shader, effect, blur, pass, rendering]
202
+ ```
@@ -34,6 +34,7 @@ interface BaseLoaderOptions {
34
34
  modelUpAxis?: 'Y' | 'Z'; // (部分加载器支持) 原始模型的上轴,用于自动旋转修正
35
35
  fetcher?: Fetcher; // 自定义网络请求 Fetcher
36
36
  light?: boolean; // 是否使用简化/无光照材质 (取决于加载器实现)
37
+ onDownloadProgress?: (progress: { loaded: number, total: number }) => void; // 下载进度回调
37
38
  }
38
39
  ```
39
40
 
@@ -60,6 +61,21 @@ Five 使用 **Z-up** (Z 轴向上) 的右手坐标系。
60
61
 
61
62
  ### loadGltf
62
63
  加载 `.gltf` 或 `.glb` 文件。支持 Draco 压缩。
64
+ 支持扩展:
65
+ * `KHR_binary_glTF`
66
+ * `KHR_draco_mesh_compression`
67
+ * `KHR_texture_basisu`
68
+ * `KHR_texture_transform`
69
+ * `KHR_mesh_quantization`
70
+ * `KHR_materials_unlit`
71
+ * `KHR_node_visibility`
72
+ * `KHR_animation_pointer`
73
+ * `EXT_meshopt_compression`
74
+ * `EXT_texture_webp`
75
+ * `CESIUM_RTC`
76
+ * `REALSEE_materials_lightmap`
77
+ * `PBM_mesh`
78
+ * `KHR_gaussian_splatting_compression_spz`
63
79
 
64
80
  | 参数 | 类型 | 默认值 | 说明 |
65
81
  | --- | --- | --- | --- |
@@ -0,0 +1,140 @@
1
+ # Resource Loading Progress (资源加载进度)
2
+
3
+ - **Summary**: 监控 3D 模型与全景图的加载状态和实时进度。
4
+ - **Schema**: `Model`, `Tile`, `PanoTextureEvent`
5
+ - **Concepts**: Loaded vs Refined, Level of Detail (LOD), Panorama Lifecycle
6
+ - **Configuration**: `minLevelOfDetail`, `maxScreenSpaceError`
7
+ - **Examples**: 状态检查、进度监听、生命周期事件
8
+
9
+ ## Schema
10
+
11
+ > **Definition**: [Model](../../five/model/index.d.ts), [Tile](../../five/model/tile3d/tile.d.ts), [PanoTextureEvent](../../five/controllers/events.d.ts)
12
+
13
+ ## Concepts
14
+
15
+ 在 3D Tiles 模型(如 Five 的 Work 模型)中,"加载" 分为两个阶段:
16
+
17
+ 1. **Loaded (初步加载完成)**:
18
+ * 表示模型已经加载了足够用于显示的**基础**数据。
19
+ * 受 `minLevelOfDetail` 参数影响。只有当满足最小 LOD 要求的 Tile 加载完毕后,`loaded` 才会变为 `true`。
20
+ * 通常作为 "首屏加载完成" 的标志,此时模型可能还比较模糊。
21
+
22
+ 2. **Refined (细化完成)**:
23
+ * 表示模型在当前视角下,已经加载了所有必要的**高清**数据,达到了最佳渲染效果。
24
+ * 受 `maxScreenSpaceError` 参数影响。该值越小,需要的 Tile 精度越高,细化完成所需的时间越长。
25
+ * 这是一个动态状态。当相机移动时,可能会因为需要加载新的高清分块而从 `refined: true` 变为 `false`。
26
+
27
+ ## Instance Properties
28
+
29
+ ### Model Status
30
+
31
+ | Property | Type | Description |
32
+ | :--- | :--- | :--- |
33
+ | `five.model.loaded` | `boolean` | 检查模型是否已完成初步加载 (Loaded)。 |
34
+ | `five.model.refined` | `boolean` | 检查模型是否已完成细化 (Refined)。 |
35
+ | `five.model.refineProgress` | `[number, number]` | 细化进度元组 `[current, total]` (已加载/总需加载)。 |
36
+
37
+ ## Examples
38
+
39
+ ### 1. Model Loading (模型加载)
40
+
41
+ #### 检查当前状态 (State Checking)
42
+
43
+ ```ts
44
+ if (five.model.loaded) {
45
+ console.log("Model is ready (basic data loaded)!");
46
+ }
47
+
48
+ if (five.model.refined) {
49
+ console.log("Model is fully refined (high-res data loaded)!");
50
+ }
51
+ ```
52
+
53
+ #### 监控细化进度 (Refine Progress)
54
+
55
+ `five.model.refineProgress` 提供了当前视图下模型细化的整体进度。
56
+
57
+ ```ts
58
+ const [current, total] = five.model.refineProgress;
59
+ console.log(`Model Refine Progress: ${current} / ${total}`);
60
+
61
+ if (current === total && total > 0) {
62
+ console.log("Model is fully refined for current view.");
63
+ }
64
+ ```
65
+
66
+ #### 监听加载完成事件
67
+
68
+ ```ts
69
+ five.on("modelLoaded", () => {
70
+ console.log("Model has been loaded.");
71
+ });
72
+ ```
73
+
74
+ #### (Advanced) Tile 级别进度
75
+
76
+ 对于 `3dtiles` 类型的模型,你可以访问具体的 Tile 对象来查看进度。
77
+
78
+ ```ts
79
+ // 仅示例,通常在调试或特定渲染逻辑中使用
80
+ const progress = tile.content.loadProgress; // [0, 1]
81
+ ```
82
+
83
+ #### Tile Lifecycle Monitoring (Tile 生命周期监控)
84
+
85
+ 监控单个 Tile 的加载与卸载事件,用于更精细的调试或资源统计。
86
+
87
+ ```ts
88
+ five.on("model.tileLoad", (tile) => {
89
+ console.log(`Tile loaded: ${tile.debugLabel}, Size: ${tile.content.byteLength}`);
90
+ });
91
+
92
+ five.on("model.tileUnload", (tile) => {
93
+ console.log(`Tile unloaded: ${tile.debugLabel}`);
94
+ });
95
+ ```
96
+
97
+ ### 2. Panorama Loading (全景图加载)
98
+
99
+ 全景图通常在用户移动到某个点位时按需加载。
100
+
101
+ #### 监听加载进度
102
+
103
+ 使用 `pano.texture.progress` 事件获取当前全景图的加载进度。
104
+
105
+ ```ts
106
+ five.on("pano.texture.progress", (event) => {
107
+ const { progress, pano } = event;
108
+ console.log(`Pano ${pano.panoIndex} loading: ${(progress * 100).toFixed(1)}%`);
109
+ });
110
+ ```
111
+
112
+ #### 生命周期事件
113
+
114
+ * **`pano.texture.load`**: 开始加载。
115
+ * **`pano.texture.success`**: 加载完成。
116
+ * **`pano.texture.error`**: 加载失败。
117
+
118
+ ```ts
119
+ five.on("pano.texture.load", (event) => {
120
+ console.log(`Started loading pano ${event.pano.panoIndex}`);
121
+ });
122
+
123
+ five.on("pano.texture.success", (event) => {
124
+ console.log(`Finished loading pano ${event.pano.panoIndex}`);
125
+ });
126
+
127
+ five.on("pano.texture.error", (event) => {
128
+ console.error(`Failed to load pano ${event.pano.panoIndex}`, event.error);
129
+ });
130
+ ```
131
+
132
+ ## Related
133
+
134
+ * [Five Class](../api.md): Five 核心类 API 索引。
135
+
136
+ ---
137
+
138
+ ```yaml
139
+ tags: [loading, progress, refined, loaded, event]
140
+ ```
@@ -88,6 +88,13 @@ graph TD
88
88
  Model -->|Inherit| Layer2[ViewLayer.parameter]
89
89
  ```
90
90
 
91
+ > **Global Configuration (全局设置)**:
92
+ > 若需修改所有模型的默认表现(如统一调暗亮度、统一设置显存上限),**请直接配置 `five.modelScene.parameter`**。它是继承链的根节点,其设置会向下传递给所有 Model 和 ViewLayer。
93
+ >
94
+ > **Why modelScene? (生命周期优势)**:
95
+ > `Model` 实例是跟随 Work 加载生命周期的(需 `five.load(work)` 后才能访问,且切换 Work 会销毁重建)。
96
+ > 相比之下,`ModelScene` 是常驻对象。因此,**使用 `modelScene` 进行配置更安全且持久**,既无需等待 Work 加载完成,也无需担心切换 Work 导致配置丢失。
97
+
91
98
  ## Examples
92
99
 
93
100
  ### 1. 基础配置 (Basic Usage)
@@ -1,6 +1,6 @@
1
1
  # 后处理 (Post Processing)
2
2
 
3
- - **Summary**: Five 提供了基于 EffectComposer 的后处理机制,内置了自适应亮度 (Auto Exposure) 和眼球穹顶光照 (EDL) 两种效果,并支持开发者编写自定义 Pass。
3
+ - **Summary**: Five 提供了基于 EffectComposer 的后处理机制,默认挂载了自适应亮度 (Auto Exposure) 和眼球穹顶光照 (EDL) 两种效果,同时提供多种可选内置 Pass,并支持开发者编写自定义 Pass
4
4
  - **Schema**: `FivePass` 类及 `Pass` 接口。
5
5
  - **Concepts**: EffectComposer, G-Buffer, Pass, AdaptiveLuminance, EyeDomeLighting。
6
6
  - **Configuration**: 开启内置 Pass 的开关及参数配置。
@@ -57,7 +57,7 @@ export class FivePass implements Pass {
57
57
 
58
58
  ## Built-in Passes (内置 Pass)
59
59
 
60
- Five 内置了两个 Pass 实例,挂载在 `five` 实例上,默认是关闭状态。
60
+ Five 默认挂载了两个 Pass 实例,挂载在 `five` 实例上,默认是关闭状态。
61
61
 
62
62
  ### 1. AdaptiveLuminancePass
63
63
 
@@ -80,6 +80,36 @@ Five 内置了两个 Pass 实例,挂载在 `five` 实例上,默认是关闭
80
80
  * `radius` (number): 采样半径,影响阴影的范围。
81
81
  * **注意**: 这是一个基于屏幕空间深度的算法,依赖 Depth Buffer。
82
82
 
83
+ ### 3. Optional Built-in Passes (可选内置 Pass)
84
+
85
+ Five 新增了三个可选使用的内置 Pass,这些 Pass 没有预先挂载在 `five` 实例上,需手动导入并添加到渲染链中:
86
+
87
+ * **[GaussianBlurPass](gaussian-blur-pass.md)**: 高斯模糊效果。
88
+ * **[FlowingLight2DPass](flowing-light-2d-pass.md)**: 2D 流光效果(通常用于平面路线流光)。
89
+ * **[FlowingLight3DPass](flowing-light-3d-pass.md)**: 3D 流光效果(通常用于空间路径流光)。
90
+
91
+ #### GaussianBlurPass 使用示例
92
+
93
+ ```typescript
94
+ import { GaussianBlurPass } from '@realsee/five';
95
+
96
+ // 1. 创建 GaussianBlurPass 实例 (需要传入 camera)
97
+ const gaussianBlurPass = new GaussianBlurPass(five.camera);
98
+
99
+ // 2. 配置参数
100
+ // 设置模糊半径 (默认 4.0)
101
+ gaussianBlurPass.setRadius(6);
102
+
103
+ // 3. 将 Pass 添加到渲染链
104
+ five.addPass(gaussianBlurPass);
105
+
106
+ // 4. (可选) 动态开关
107
+ // gaussianBlurPass.enabled = false;
108
+
109
+ // 5. (可选) 移除 Pass
110
+ // five.removePass(gaussianBlurPass);
111
+ ```
112
+
83
113
  ## Custom Pass (自定义 Pass)
84
114
 
85
115
  如果需要实现自定义的后处理效果(如景深、色彩校正、描边等),建议继承 `FivePass`。
@@ -216,6 +246,9 @@ class FogPass extends FivePass {
216
246
 
217
247
  ## Related
218
248
 
249
+ * [Gaussian Blur Pass](gaussian-blur-pass.md): 高斯模糊 Pass 文档。
250
+ * [Flowing Light 2D Pass](flowing-light-2d-pass.md): 2D 流光 Pass 文档。
251
+ * [Flowing Light 3D Pass](flowing-light-3d-pass.md): 3D 流光 Pass 文档。
219
252
  * [five.ts](../../five/application/five.d.ts): 查看 `addPass` 方法的实现。
220
253
  * [pass.ts](../../five/renderer/postprocessing/passes/pass.d.ts): 查看 `FivePass` 基类定义。
221
254
 
@@ -43,6 +43,15 @@ declare module 'three' {
43
43
  */
44
44
  floorIndex?: number;
45
45
  }
46
+
47
+ export interface Intersection {
48
+ /** 命中的具体 Tile 对象 (仅 3DTiles) */
49
+ tile?: Tile;
50
+ /** 命中的 ViewLayer 对象 */
51
+ viewLayer?: ViewLayer;
52
+ /** 命中的 Model 对象 */
53
+ model?: Model;
54
+ }
46
55
  }
47
56
  ```
48
57
 
@@ -88,14 +88,19 @@ graph TD
88
88
 
89
89
  ### 4. Visibility Control (可见性控制)
90
90
 
91
- 默认情况下,**所有**定义在 `work.model.layers` 中的图层都会被加载并显示。
91
+ 默认情况下,Five **不会**加载所有图层,而是根据优先级**仅加载一个**图层,以节省资源。
92
+ 优先级顺序:`mesh` > `point_cloud` > 其他类型。
93
+
94
+ **可见性与内存管理 (Visibility & Memory)**:
95
+ * **显示 (Show)**: 当图层设置为可见 (`visible = true`) 时,Five 会开始加载该图层的资源。
96
+ * **隐藏 (Hide)**: 当图层设置为隐藏 (`visible = false`) 时,Five 会**释放该图层占用的所有内存资源** (Geometry, Texture 等)。这意味着“隐藏”等同于“卸载”。
92
97
 
93
98
  Five 提供了两种层级的可见性控制方式:
94
99
 
95
100
  1. **初始化配置 (Load Options)**:
96
101
  在 `five.load` 时,通过 `model["3d-tiles"].showLayers` 参数指定初始显示的图层。
97
- * `true` (默认): 显示所有图层。
98
- * `string[]`: 仅显示名称在数组中的图层(例如 `['mesh']` 只显示模型,隐藏点云)。
102
+ * `true` (默认): 使用上述的默认优先级策略(仅加载一个最佳图层)。
103
+ * `string[]`: 仅显示名称在数组中的图层(例如 `['mesh', 'point_cloud']` 可以强制同时显示模型和点云)。
99
104
 
100
105
  2. **运行时控制 (Runtime Control)**:
101
106
  加载完成后,可以直接修改 `viewLayer.visible` 属性来切换可见性。
@@ -15,6 +15,8 @@
15
15
  import * as THREE from "three";
16
16
  import type { Mode } from "@realsee/five";
17
17
 
18
+ type CubeFace = 'up' | 'down' | 'left' | 'right' | 'front' | 'back';
19
+
18
20
  /** Work 实体:VR 项目的根对象 */
19
21
  export interface Work {
20
22
  /** 唯一标识 (Work ID) */
@@ -74,6 +76,21 @@ export interface WorkObserver {
74
76
 
75
77
  /** 点位全景图资源信息 */
76
78
  images: WorkImage;
79
+
80
+ /** 获取点位的全局坐标 */
81
+ getWorldPosition(this: WorkObserver): THREE.Vector3;
82
+
83
+ /** 获取点位的全局地面坐标 */
84
+ getWorldStandingPosition(this: WorkObserver): THREE.Vector3;
85
+
86
+ /** 将方向向量转化为全景图 uv */
87
+ vectorToEquirectangularUv(vector: THREE.Vector3, uvOrigin?: 'top-left' | 'bottom-left'): THREE.Vector2;
88
+ /** 将全景图 uv 转化为方向向量 */
89
+ equirectangularUvToVector(uv: THREE.Vector2, uvOrigin?: 'top-left' | 'bottom-left'): THREE.Vector3;
90
+ /** 将方向向量转化为获六视图 uv */
91
+ vectorToCubemapUv(vector: THREE.Vector3, uvOrigin?: 'top-left' | 'bottom-left'): [cubeFace: CubeFace, cubemapUv: THREE.Vector2];
92
+ /** 将六视图 uv 转化为方向向量 */
93
+ cubemapUvToVector(cubeFace: CubeFace, uv: THREE.Vector2, uvOrigin?: 'top-left' | 'bottom-left'): THREE.Vector3;
77
94
  }
78
95
 
79
96
  /** 初始化位姿参数 */
@@ -58,6 +58,23 @@ Five 定义的五种浏览状态:
58
58
  ### G-Buffer / Geometry Buffer
59
59
  用于后处理的几何缓冲区,包含深度 (Depth)、法线 (Normal)、ID 等信息,用于实现高级特效(如轮廓线、SSAO)。
60
60
 
61
+ ### ViewLayer
62
+ 管理 `Model` 内部特定 3D 资源(如 Mesh、PointCloud、Gaussian Splatting)的图层。
63
+ - 继承自 `Tile3D`。
64
+ - 拥有独立的 `Parameter` 配置(覆盖上层配置)。
65
+ - 支持可见性控制 (`visible`) 和优先级加载。
66
+
67
+ ### Gaussian Splatting (3DGS)
68
+ 一种基于点的 3D 渲染技术,通过各向异性高斯球(Splat)来表示场景。
69
+ - 相比传统 Mesh,能更真实地还原复杂光照和细节。
70
+ - Five 支持 `.spz` 和 `.splat` 格式的 3DGS 渲染。
71
+
72
+ ### 3D Tiles Refinement (细化)
73
+ 3D Tiles 加载过程中的状态概念:
74
+ - **Loaded (已加载)**: 瓦片的基本数据已下载并解析,满足最低显示要求 (`minLevelOfDetail`)。
75
+ - **Refined (已细化)**: 瓦片已加载最高质量数据,满足当前视角的屏幕空间误差要求 (`maxScreenSpaceError`)。
76
+ - `five.model.refineProgress` 可用于监控当前视角的细化进度。
77
+
61
78
  ## Interaction (交互)
62
79
 
63
80
  ### Raycast (射线检测)
@@ -0,0 +1,81 @@
1
+ # Release Note 6.8.x
2
+ > 6.8.x 版本发布日志
3
+
4
+ ```shell
5
+ npm install @realsee/five@6.8
6
+ ```
7
+
8
+ ## Gaussian Splatting (3DGS) 支持
9
+ > Five 现已支持 Gaussian Splatting (3DGS) 渲染管线。这是一种基于点的渲染技术,能够提供高质量的实时渲染效果。
10
+
11
+ * **前提条件**: 仅在 WebGL2 环境下可用。
12
+ * **数据支持**:
13
+ * 支持 `3dtiles` 中包含 3DGS 数据。
14
+ * 支持加载 `.spz` (version 2) 或 `.splat` 格式的数据。
15
+ * 支持通过 glTF 扩展加载 content 为 `.spz` 的 glTF/glb 文件。
16
+ * **功能特性**:
17
+ * 支持透视相机与正交相机渲染。
18
+ * 支持 BVH 构建,支持射线检测 (Raycast)。
19
+ * `pbmGSObject` 继承自 `THREE.Points`。
20
+
21
+ ### 配置球谐光照阶数 (SH Degree)
22
+ 可以通过 `five.parameter.gsSHDegree` 设置球谐光照阶数,支持 0, 1, 2 阶,默认为 0 阶。
23
+
24
+ ```ts
25
+ const five = new Five({
26
+ parameters: {
27
+ gsSHDegree: 1 // 设置为 1 阶 SH
28
+ }
29
+ });
30
+ ```
31
+
32
+ ## ViewLayer 加载策略优化
33
+ > 优化了 ViewLayer 的加载和显隐逻辑,以减少内存占用并提高性能。
34
+
35
+ ### 默认加载策略变更
36
+ 默认情况下,Five **不再加载所有图层**,而是根据优先级**仅加载一个**图层。
37
+ 优先级顺序:`mesh` > `point_cloud` > 其他类型。
38
+
39
+ ### 显隐与内存管理
40
+ * **显示**: 当 `viewLayer.visible = true` 时,开始加载资源。
41
+ * **隐藏**: 当 `viewLayer.visible = false` 时,**释放该图层占用的所有内存资源**。
42
+
43
+ ### 加载进度
44
+ 新增 `tile.content.loadProgress` 属性,用于查看每个瓦片的加载进度 (0-1)。
45
+ 新增 `tile.content.byteLength` 属性,可在加载过程中获取瓦片内容的字节长度。
46
+ 同时,`model.tileLoad` 和 `model.tileUnload` 事件被添加,用于监控瓦片的生命周期。
47
+
48
+ ### 下载进度回调
49
+ 外部模型加载函数(`loadGltf`, `loadPly` 等)现在支持 `onDownloadProgress` 回调,用于监控文件下载进度。
50
+
51
+ ### 射线检测增强
52
+ * `Intersection` 对象新增了 `tile`, `model`, `viewLayer` 字段,便于在射线检测时获取更详细的上下文信息。
53
+ * `raycaster.hitFilter` 回调函数的参数类型定义已更新,包含 `model`, `viewLayer`, `tile` 等上下文信息。
54
+
55
+ ## AI 友好文档 (AI Guides)
56
+ > 全面重构了文档结构,使其更适合 AI 辅助编程工具 (如 Cursor, Copilot) 阅读和索引。
57
+
58
+ * 文档目录迁移至 `ai_guides/`,并在 `package.json` 中新增 `ai` 字段指向该目录。
59
+ * 文档内容包含源码链接 (`source` 字段),直接指向对应的 `.ts` 定义文件。
60
+ * 提供了更清晰的 API 定义和概念说明,例如新增了 [ViewLayer](../features/view-layer.md) 的详细文档。
61
+
62
+ ## 新增后处理效果 (Post-Processing Passes)
63
+ > 新增了三个可选的内置后处理 Pass,用于增强视觉效果。
64
+
65
+ * **[FlowingLight2DPass](../features/flowing-light-2d-pass.md)**: 2D 流光效果,通常用于在屏幕空间绘制流动的光线(如道路流光)。
66
+ * **[FlowingLight3DPass](../features/flowing-light-3d-pass.md)**: 3D 流光效果,基于深度缓冲区在三维模型表面绘制流光。
67
+ * **[GaussianBlurPass](../features/gaussian-blur-pass.md)**: 高斯模糊效果,可用于实现毛玻璃等视觉特效。
68
+
69
+ ## 其他优化
70
+ * **点云渲染**: 计算点位透明度时,现在会排除不活跃的点,提升渲染正确性。
71
+ * **TypeScript 支持**: 优化了 `.d.ts` 打包方式,声明文件现在与源码文件一一对应,提升了 IDE 的跳转体验。
72
+
73
+ ## glTF 支持**: 新增 `KHR_animation_pointer` 和 `KHR_node_visibility` 扩展支持
74
+ * `KHR_animation_pointer` 扩展 允许动画通道指向 glTF 资产中任何对象的任何属性,而不仅仅是节点的平移、旋转和缩放。
75
+ * `KHR_node_visibility` 扩展 允许设置节点的可见性属性。
76
+
77
+ ## work 提供 uv 转化函数。
78
+ * `vectorToEquirectangularUv` 方法将方向向量转化为全景图 uv。
79
+ * `equirectangularUvToVector` 方法将全景图 uv 转化为方向向量。
80
+ * `vectorToCubemapUv` 方法将方向向量转化为立方体贴图 uv。
81
+ * `cubemapUvToVector` 方法将立方体贴图 uv 转化为方向向量。
@@ -1 +1 @@
1
- window.hierarchyData = "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"
1
+ window.hierarchyData = "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"