@realsee/five-webgpu 1.0.0-alpha.5 → 1.0.0-alpha.6

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 (304) hide show
  1. package/ai_guides/api.md +9 -8
  2. package/ai_guides/features/camera-animation.md +1 -1
  3. package/ai_guides/features/event.md +0 -1
  4. package/ai_guides/features/five.md +8 -8
  5. package/ai_guides/features/gesture.md +1 -1
  6. package/ai_guides/features/load-external-model.md +6 -6
  7. package/ai_guides/features/load-progress.md +2 -2
  8. package/ai_guides/features/mode.md +3 -23
  9. package/ai_guides/features/model.md +1 -1
  10. package/ai_guides/features/state.md +2 -2
  11. package/ai_guides/features/ultra-hdr.md +41 -32
  12. package/ai_guides/quick-start.md +2 -2
  13. package/ai_guides/release_notes/6.8.md +2 -2
  14. package/ai_guides/support.md +0 -4
  15. package/docs/assets/hierarchy.js +1 -1
  16. package/docs/assets/navigation.js +1 -1
  17. package/docs/assets/search.js +1 -1
  18. package/docs/classes/index.AdaptiveLuminancePass.html +1 -1
  19. package/docs/classes/index.BoundingMesh.html +1 -1
  20. package/docs/classes/index.EffectComposer.html +1 -1
  21. package/docs/classes/index.EyeDomeLightingPass.html +1 -1
  22. package/docs/classes/index.Five.html +68 -67
  23. package/docs/classes/index.FivePass.html +1 -1
  24. package/docs/classes/index.FlowingFireworks3DPass.html +1 -1
  25. package/docs/classes/index.FlowingLight2DPass.html +1 -1
  26. package/docs/classes/index.FlowingLight3DPass.html +1 -1
  27. package/docs/classes/index.GaussianBlurPass.html +1 -1
  28. package/docs/classes/index.InternalWebGPURenderer.html +4 -4
  29. package/docs/classes/index.Model.html +1 -1
  30. package/docs/classes/index.ModelScene.html +1 -1
  31. package/docs/classes/index.NetworkSubscribe.html +1 -1
  32. package/docs/classes/index.PBMCustomNode.html +8 -8
  33. package/docs/classes/index.PBMGaussianSplattingNodeMaterial.html +8 -6
  34. package/docs/classes/index.PBMGaussianSplattingObject.html +10 -4
  35. package/docs/classes/index.PBMGaussianSplattingRenderMesh.html +26 -15
  36. package/docs/classes/index.PBMGroup.html +1 -1
  37. package/docs/classes/index.PBMMesh.html +1 -1
  38. package/docs/classes/index.PBMMeshBasicMaterial.html +11 -7
  39. package/docs/classes/index.PBMMeshBasicNodeMaterial.html +11 -7
  40. package/docs/classes/index.PBMMeshPanoOnlyMaterial.html +11 -7
  41. package/docs/classes/index.PBMMeshPanoOnlyNodeMaterial.html +11 -7
  42. package/docs/classes/index.PBMMeshPhongMaterial.html +11 -7
  43. package/docs/classes/index.PBMMeshPhongNodeMaterial.html +11 -7
  44. package/docs/classes/index.PBMMeshPhysicalMaterial.html +11 -7
  45. package/docs/classes/index.PBMMeshPhysicalNodeMaterial.html +11 -7
  46. package/docs/classes/index.PBMPanoFilter.html +8 -8
  47. package/docs/classes/index.PBMPointCloud.html +1 -1
  48. package/docs/classes/index.PBMSkinnedMesh.html +1 -1
  49. package/docs/classes/index.PBMUpdateable.html +1 -1
  50. package/docs/classes/index.PanoCircleMesh.html +1 -1
  51. package/docs/classes/index.PanoCircleMeshCustom.html +5 -5
  52. package/docs/classes/index.PanoCircleMeshSolid.html +1 -1
  53. package/docs/classes/index.Parameter.html +1 -1
  54. package/docs/classes/index.Subscribe.html +1 -1
  55. package/docs/classes/index.TextureLoader.html +4 -1
  56. package/docs/classes/index.Tile3D.html +23 -21
  57. package/docs/classes/index.TileNode.html +1 -1
  58. package/docs/classes/index.Tileset.html +4 -4
  59. package/docs/classes/index.TrajectoryNode.html +3 -3
  60. package/docs/classes/index.Work.html +20 -18
  61. package/docs/classes/index.WorkResolvedObserver.html +22 -22
  62. package/docs/documents/api.html +11 -10
  63. package/docs/documents/features_camera-animation.html +1 -1
  64. package/docs/documents/features_event.html +0 -1
  65. package/docs/documents/features_five.html +7 -7
  66. package/docs/documents/features_gesture.html +1 -1
  67. package/docs/documents/features_load-external-model.html +6 -6
  68. package/docs/documents/features_load-progress.html +1 -1
  69. package/docs/documents/features_mode.html +5 -15
  70. package/docs/documents/features_model.html +1 -1
  71. package/docs/documents/features_state.html +1 -1
  72. package/docs/documents/features_ultra-hdr.html +50 -44
  73. package/docs/documents/quick-start.html +1 -1
  74. package/docs/documents/release_notes_6.8.html +2 -2
  75. package/docs/documents/support.html +1 -3
  76. package/docs/functions/index.customNodesCacheKey.html +1 -1
  77. package/docs/functions/index.parseWork.html +1 -1
  78. package/docs/functions/index.workToJson.html +1 -1
  79. package/docs/hierarchy.html +1 -1
  80. package/docs/interfaces/index.AddableObject.html +1 -1
  81. package/docs/interfaces/index.AjaxOptions.html +1 -1
  82. package/docs/interfaces/index.BaseEvent.html +2 -2
  83. package/docs/interfaces/index.Clock.html +24 -0
  84. package/docs/interfaces/index.EventCallback.html +49 -47
  85. package/docs/interfaces/index.FiveInitArgs.html +49 -40
  86. package/docs/interfaces/index.GainmapCfgData.html +15 -0
  87. package/docs/interfaces/index.GestureEvent.html +2 -2
  88. package/docs/interfaces/index.IPBMMaterial.html +10 -6
  89. package/docs/interfaces/index.ImageOptions.html +1 -1
  90. package/docs/interfaces/index.IntersectEvent.html +2 -2
  91. package/docs/interfaces/index.IntersectMesh.html +1 -1
  92. package/docs/interfaces/index.IntersectMeshInterface.html +1 -1
  93. package/docs/interfaces/index.Intersection.html +1 -1
  94. package/docs/interfaces/index.LoosePanoWork.html +2 -2
  95. package/docs/interfaces/index.LooseWork.html +2 -2
  96. package/docs/interfaces/index.LooseWorkInitial.html +2 -2
  97. package/docs/interfaces/index.LooseWorkModel.html +2 -2
  98. package/docs/interfaces/index.LooseWorkObserver.html +2 -2
  99. package/docs/interfaces/index.LooseWorkPanorama.html +4 -3
  100. package/docs/interfaces/index.LooseWorkWithExtrinsics.html +15 -9
  101. package/docs/interfaces/index.ModeChangeEvent.html +2 -2
  102. package/docs/interfaces/index.ModelControllerCustomInitArgs.html +1 -1
  103. package/docs/interfaces/index.ModelEvent.html +2 -2
  104. package/docs/interfaces/index.ModelSceneEvent.html +2 -2
  105. package/docs/interfaces/index.ModelTileEvent.html +2 -2
  106. package/docs/interfaces/index.MovePanoOptions.html +1 -1
  107. package/docs/interfaces/index.NetworkAbortError.html +1 -1
  108. package/docs/interfaces/index.NetworkFirbiddenError.html +1 -1
  109. package/docs/interfaces/index.NetworkOptions.html +1 -1
  110. package/docs/interfaces/index.NetworkProxyError.html +1 -1
  111. package/docs/interfaces/index.NetworkResourceEvent.html +2 -2
  112. package/docs/interfaces/index.NetworkResponseError.html +1 -1
  113. package/docs/interfaces/index.NetworkTimeoutError.html +1 -1
  114. package/docs/interfaces/index.ObjectEvent.html +2 -2
  115. package/docs/interfaces/index.PBMClipperParameter.html +2 -2
  116. package/docs/interfaces/index.PBMCustomNodeContext.html +60 -12
  117. package/docs/interfaces/index.PBMCustomNodeOptions.html +4 -4
  118. package/docs/interfaces/index.PBMCustomNodePanoContext.html +12 -5
  119. package/docs/interfaces/index.PBMCustomNodeSlots.html +6 -6
  120. package/docs/interfaces/index.PBMPanoDepth.html +5 -5
  121. package/docs/interfaces/index.PBMPanoFilterValue.html +2 -2
  122. package/docs/interfaces/index.PBMPanoGainmap.html +6 -0
  123. package/docs/interfaces/index.PBMPanoPicture.html +9 -8
  124. package/docs/interfaces/index.PBMRefinedScreen.html +2 -2
  125. package/docs/interfaces/index.PanoCircleMeshCustomOptions.html +2 -2
  126. package/docs/interfaces/index.PanoCircleMeshInterface.html +1 -1
  127. package/docs/interfaces/index.PanoEvent.html +2 -2
  128. package/docs/interfaces/index.PanoTextureEvent.html +2 -2
  129. package/docs/interfaces/index.PanoramaControllerCustomInitArgs.html +9 -9
  130. package/docs/interfaces/index.PanoramaLikeControllerCustomInitArgs.html +1 -1
  131. package/docs/interfaces/index.ParameterMaterialValue.html +1 -1
  132. package/docs/interfaces/index.ParameterTilesetValue.html +1 -1
  133. package/docs/interfaces/index.ParameterValue.html +1 -1
  134. package/docs/interfaces/index.Pose.html +1 -1
  135. package/docs/interfaces/index.RenderEvent.html +2 -2
  136. package/docs/interfaces/index.ResolvedParameterValue.html +1 -1
  137. package/docs/interfaces/index.State.html +1 -1
  138. package/docs/interfaces/index.StateEvent.html +2 -2
  139. package/docs/interfaces/index.TextureOptions.html +1 -1
  140. package/docs/interfaces/index.TilesetOptions.html +7 -2
  141. package/docs/interfaces/index.TopviewControllerCustomInitArgs.html +1 -1
  142. package/docs/interfaces/index.VRPanoramaControllerCustomInitArgs.html +37 -0
  143. package/docs/interfaces/index.ViewLayer.html +23 -21
  144. package/docs/interfaces/index.WorkCubeHdrGainmapImage.html +10 -0
  145. package/docs/interfaces/index.WorkCubeImage.html +5 -9
  146. package/docs/interfaces/index.WorkImage.html +8 -12
  147. package/docs/interfaces/index.WorkInitial.html +8 -8
  148. package/docs/interfaces/index.WorkModel.html +8 -8
  149. package/docs/interfaces/index.WorkModelLayer.html +6 -6
  150. package/docs/interfaces/index.WorkObserver.html +23 -23
  151. package/docs/interfaces/index.WorkPanoramaJson.html +3 -2
  152. package/docs/interfaces/index.WorkTile.html +8 -12
  153. package/docs/interfaces/index.WorksEvent.html +2 -2
  154. package/docs/interfaces/index.XRControllerEvent.html +2 -2
  155. package/docs/interfaces/index.XRGestureEvent.html +2 -2
  156. package/docs/interfaces/index.XRSessionEvent.html +2 -2
  157. package/docs/modules/index.html +1 -1
  158. package/docs/types/index.ControllerCustomInitTypes.html +3 -2
  159. package/docs/types/index.ControllerEventTypes.html +25 -23
  160. package/docs/types/index.EventTypes.html +26 -26
  161. package/docs/types/index.Mode.html +2 -1
  162. package/docs/types/index.ParseOptions.html +14 -8
  163. package/docs/variables/index.GSPLAT_PIPELINE_AUTO.html +2 -0
  164. package/docs/variables/index.GSPLAT_PIPELINE_RASTER_CPU_SORT.html +2 -0
  165. package/docs/variables/index.GSPLAT_PIPELINE_RASTER_GPU_SORT.html +2 -0
  166. package/docs/variables/index.PROXY_CONTROLLER_EVENT_NAMES.html +1 -1
  167. package/docs/variables/index.controllersDefaultInitArgs.html +1 -1
  168. package/five/application/controllers.d.ts +4 -0
  169. package/five/application/events.d.ts +1 -1
  170. package/five/application/five.d.ts +4 -1
  171. package/five/application/fiveInitArgs.d.ts +13 -0
  172. package/five/application/mode.d.ts +2 -0
  173. package/five/cardboard/helper.d.ts +2 -0
  174. package/five/cardboard/index.d.ts +13 -0
  175. package/five/cardboard/sensor.d.ts +158 -0
  176. package/five/controllers/base.d.ts +3 -0
  177. package/five/controllers/events.d.ts +5 -3
  178. package/five/controllers/panorama.d.ts +2 -2
  179. package/five/controllers/vrPanorama.d.ts +56 -0
  180. package/five/core/panoVideo.d.ts +4 -1
  181. package/five/core/tiling.d.ts +25 -11
  182. package/five/gaussian-splatting/gpu-sort/prefixSumKernel.d.ts +65 -0
  183. package/five/gaussian-splatting/gpu-sort/radixSortModule.d.ts +128 -0
  184. package/five/gaussian-splatting/gpu-sort/shaders/prefixSum.d.ts +2 -0
  185. package/five/gaussian-splatting/gpu-sort/shaders/radixHistogram.d.ts +2 -0
  186. package/five/gaussian-splatting/gpu-sort/shaders/radixReorder.d.ts +2 -0
  187. package/five/gaussian-splatting/gpu-sort/shaders/sortKeygen.d.ts +2 -0
  188. package/five/gaussian-splatting/gpu-sort/sortAdapter.d.ts +234 -0
  189. package/five/gaussian-splatting/pipelines/cpuSortPipeline.d.ts +159 -0
  190. package/five/gaussian-splatting/pipelines/gpuSortPipeline.d.ts +98 -0
  191. package/five/gaussian-splatting/pipelines/gsplatPipeline.d.ts +104 -0
  192. package/five/gaussian-splatting/pipelines/pipelineMode.d.ts +42 -0
  193. package/five/gaussian-splatting/pipelines/sortThrottle.d.ts +45 -0
  194. package/five/index.d.ts +4 -1
  195. package/five/index.js +272 -269
  196. package/five/index.mjs +6979 -4610
  197. package/five/meshes/panoCircleMeshCustom.d.ts +1 -0
  198. package/five/model/index.d.ts +1 -1
  199. package/five/model/materials/pbmGaussianSplattingNodeMaterial.d.ts +4 -0
  200. package/five/model/materials/pbmMaterial.d.ts +113 -18
  201. package/five/model/materials/tsl/defines.d.ts +6 -1
  202. package/five/model/materials/tsl/outputBuilder.d.ts +1 -12
  203. package/five/model/materials/tsl/panoColor.d.ts +8 -2
  204. package/five/model/materials/tsl/utils.d.ts +13 -0
  205. package/five/model/objects/pbmGaussianSplattingObject.d.ts +9 -0
  206. package/five/model/objects/pbmGaussianSplattingRenderMesh.d.ts +67 -101
  207. package/five/model/tile3d/index.d.ts +2 -0
  208. package/five/model/tile3d/tileset.d.ts +5 -0
  209. package/five/model/tile3d/trajectory-content.d.ts +53 -0
  210. package/five/texture/loader.d.ts +6 -0
  211. package/five/types/cube.d.ts +0 -1
  212. package/five/utils/detector.d.ts +11 -1
  213. package/five/utils/error.d.ts +1 -0
  214. package/five/utils/event.d.ts +17 -1
  215. package/five/utils/gainmap-data.d.ts +23 -0
  216. package/five/work/index.d.ts +1 -1
  217. package/five/work/looseWorkType.d.ts +2 -1
  218. package/five/work/work.d.ts +30 -7
  219. package/five/work/workJsonType.d.ts +2 -1
  220. package/gltf-loader/gltf-object.d.ts +17 -0
  221. package/gltf-loader/index.d.ts +45 -0
  222. package/gltf-loader/index.js +255 -0
  223. package/gltf-loader/index.mjs +302 -0
  224. package/package.json +6 -1
  225. package/plugins/BackgroundPlugin/Controller.d.ts +20 -0
  226. package/plugins/BackgroundPlugin/index.d.ts +5 -0
  227. package/plugins/BackgroundPlugin/typings.d.ts +44 -0
  228. package/plugins/CSS2DPlugin/Controller.d.ts +59 -0
  229. package/plugins/CSS2DPlugin/index.d.ts +5 -0
  230. package/plugins/CSS2DPlugin/typing.d.ts +31 -0
  231. package/plugins/CSS3DPlugin/Controller.d.ts +64 -0
  232. package/plugins/CSS3DPlugin/index.d.ts +5 -0
  233. package/plugins/CSS3DPlugin/typing.d.ts +33 -0
  234. package/plugins/FloorplanPlugin/Controller.d.ts +100 -0
  235. package/plugins/FloorplanPlugin/index.d.ts +5 -0
  236. package/plugins/FloorplanPlugin/render/assets.d.ts +9 -0
  237. package/plugins/FloorplanPlugin/render/index.d.ts +35 -0
  238. package/plugins/FloorplanPlugin/render/isPointInPolygon.d.ts +5 -0
  239. package/plugins/FloorplanPlugin/render/renderFloor.d.ts +22 -0
  240. package/plugins/FloorplanPlugin/render/roomLabelVisibility.d.ts +10 -0
  241. package/plugins/FloorplanPlugin/typing.d.ts +156 -0
  242. package/plugins/FloorplanPlugin/typings/floorplanData.d.ts +112 -0
  243. package/plugins/FloorplanPlugin/typings/floorplanServerData.d.ts +78 -0
  244. package/plugins/FloorplanPlugin/typings/index.d.ts +2 -0
  245. package/plugins/FloorplanPlugin/utils/changeMode.d.ts +5 -0
  246. package/plugins/FloorplanPlugin/utils/changeModelCanvasOpacity.d.ts +6 -0
  247. package/plugins/FloorplanPlugin/utils/correctFiveState.d.ts +11 -0
  248. package/plugins/FloorplanPlugin/utils/equal.d.ts +9 -0
  249. package/plugins/FloorplanPlugin/utils/filter.d.ts +8 -0
  250. package/plugins/FloorplanPlugin/utils/fiveModelLoad.d.ts +6 -0
  251. package/plugins/FloorplanPlugin/utils/formatData.d.ts +6 -0
  252. package/plugins/FloorplanPlugin/utils/formatPosition.d.ts +33 -0
  253. package/plugins/FloorplanPlugin/utils/getDistanceFromModel.d.ts +6 -0
  254. package/plugins/FloorplanPlugin/utils/getPxmm.d.ts +19 -0
  255. package/plugins/FloorplanPlugin/utils/isTruelyObject.d.ts +4 -0
  256. package/plugins/FloorplanPlugin/utils/nearlyEqual.d.ts +8 -0
  257. package/plugins/FloorplanPlugin/utils/to.d.ts +5 -0
  258. package/plugins/Object3DHelperPlugin/Controller.d.ts +99 -0
  259. package/plugins/Object3DHelperPlugin/Controllers/BaseController.d.ts +142 -0
  260. package/plugins/Object3DHelperPlugin/Controllers/BoundingBoxController.d.ts +16 -0
  261. package/plugins/Object3DHelperPlugin/Controllers/MoveController.d.ts +66 -0
  262. package/plugins/Object3DHelperPlugin/Controllers/RotateController.d.ts +61 -0
  263. package/plugins/Object3DHelperPlugin/FiveControllerWrapper.d.ts +17 -0
  264. package/plugins/Object3DHelperPlugin/Helper/BaseHelper.d.ts +97 -0
  265. package/plugins/Object3DHelperPlugin/Helper/BoundingBoxHelper.d.ts +16 -0
  266. package/plugins/Object3DHelperPlugin/Helper/MoveHelper.d.ts +37 -0
  267. package/plugins/Object3DHelperPlugin/Helper/RotateHelper.d.ts +93 -0
  268. package/plugins/Object3DHelperPlugin/constant.d.ts +27 -0
  269. package/plugins/Object3DHelperPlugin/index.d.ts +6 -0
  270. package/plugins/Object3DHelperPlugin/typing.d.ts +143 -0
  271. package/plugins/Object3DHelperPlugin/utils/ArrowGroup.d.ts +22 -0
  272. package/plugins/Object3DHelperPlugin/utils/CenterHandle.d.ts +23 -0
  273. package/plugins/Object3DHelperPlugin/utils/PlaneHandle.d.ts +19 -0
  274. package/plugins/Object3DHelperPlugin/utils/calculateScaleByCamera.d.ts +5 -0
  275. package/plugins/Object3DHelperPlugin/utils/cameraHooks.d.ts +3 -0
  276. package/plugins/Object3DHelperPlugin/utils/direction.d.ts +14 -0
  277. package/plugins/Object3DHelperPlugin/utils/getMouseRaycaster.d.ts +5 -0
  278. package/plugins/Object3DHelperPlugin/utils/getOrthographicCameraDirection.d.ts +8 -0
  279. package/plugins/Object3DHelperPlugin/utils/setObjectQuaternion.d.ts +8 -0
  280. package/plugins/Object3DHelperPlugin/utils/solidGuide.d.ts +27 -0
  281. package/plugins/Object3DHelperPlugin/utils/tipsDom.d.ts +8 -0
  282. package/plugins/PanoAnimePlugin/Controller.d.ts +49 -0
  283. package/plugins/PanoAnimePlugin/index.d.ts +5 -0
  284. package/plugins/PanoAnimePlugin/typing.d.ts +37 -0
  285. package/plugins/index.d.ts +6 -0
  286. package/plugins/index.js +393 -3
  287. package/plugins/index.mjs +3421 -92
  288. package/plugins/thirdParty/CSS2DRenderer.d.ts +37 -0
  289. package/plugins/thirdParty/CSS3DRenderer.d.ts +45 -0
  290. package/plugins/thirdParty/OrbitControls.d.ts +78 -0
  291. package/plugins/thirdParty/domevents.d.ts +36 -0
  292. package/plugins/utils/clamp.d.ts +2 -0
  293. package/plugins/utils/uuid.d.ts +2 -0
  294. package/react/index.js +2 -2
  295. package/react/index.mjs +2 -2
  296. package/umd/five-gltf-loader.js +255 -0
  297. package/umd/five-plugins.js +461 -3
  298. package/umd/five-react.js +2 -2
  299. package/umd/five.js +350 -347
  300. package/docs/interfaces/index.PBMHDRConfig.html +0 -12
  301. package/five/gaussian-splatting/worker/dataWorker.d.ts +0 -1
  302. package/five/three-version-check.d.ts +0 -1
  303. package/five/utils/hdr-data.d.ts +0 -13
  304. package/five/utils/shaderContentFix.d.ts +0 -7
@@ -26,6 +26,7 @@ declare class PanoCircleMeshCustom extends THREE.Object3D implements PanoCircleM
26
26
  loading: boolean;
27
27
  disabled: boolean;
28
28
  private panoMesh;
29
+ private panoU;
29
30
  constructor(options?: PanoCircleMeshCustomOptions);
30
31
  setProgress(progress: number): void;
31
32
  setOpacity(opacity: number): void;
@@ -5,7 +5,7 @@ export { PBMGaussianSplattingObject as PBMGSObject, } from "./objects/pbmGaussia
5
5
  export { PBMPointCloud, type PointCloudData, } from "./objects/pbmPointCloud";
6
6
  export { PBMGaussianSplattingRenderMesh, } from "./objects/pbmGaussianSplattingRenderMesh";
7
7
  export { PBMGaussianSplattingNodeMaterial, } from "./materials/pbmGaussianSplattingNodeMaterial";
8
- export { PBMUpdateable, PBMPanoFilter, PBMCustomNode, customNodesCacheKey, type IPBMMaterial, type PBMPanoFilterValue, type PBMAlphaMode, type PBMClipperParameter, type PBMColorStyle, type PBMFloorStyle, type PBMRoofStyle, type PBMPanoPicture, type PBMHDRConfig, type PBMPanoDepth, type PBMPointBack, type PBMPointCloudShaderType, type PBMPointShape, type PBMPointSize, type PBMRefinedScreen, type PBMTransition, type PBMCustomNodeSlots, type PBMCustomNodeTargetType, type PBMCustomNodeOptions, type PBMCustomNodeContext, type PBMCustomNodePanoContext, } from "./materials/pbmMaterial";
8
+ export { PBMUpdateable, PBMPanoFilter, PBMCustomNode, customNodesCacheKey, type IPBMMaterial, type PBMPanoFilterValue, type PBMAlphaMode, type PBMClipperParameter, type PBMColorStyle, type PBMFloorStyle, type PBMRoofStyle, type PBMPanoPicture, type PBMPanoGainmap, type PBMPanoDepth, type PBMPointBack, type PBMPointCloudShaderType, type PBMPointShape, type PBMPointSize, type PBMRefinedScreen, type PBMTransition, type PBMCustomNodeSlots, type PBMCustomNodeTargetType, type PBMCustomNodeOptions, type PBMCustomNodeContext, type PBMCustomNodePanoContext, } from "./materials/pbmMaterial";
9
9
  export { type PBMMeshMaterial, PBMMeshBasicMaterial, PBMMeshPhongMaterial, PBMMeshPhysicalMaterial, PBMMeshPanoOnlyMaterial } from './materials/pbmMeshMaterial';
10
10
  export { registerPBMMaterials, } from './materials/pbmMaterialRegister';
11
11
  export { PBMMeshBasicNodeMaterial, } from './materials/nodes/pbmMeshBasicNodeMaterial';
@@ -10,6 +10,7 @@
10
10
  *
11
11
  * 数据通过 DataTexture / 大数据纹理上传(阶段 E / 8 uint32 布局,2 texel/splat):
12
12
  * - splatIndex 实例属性(float) — 第 i 实例要绘制的全局点索引 P(CPU reorder 紧凑写入)
13
+ * useOrderTexture 开启时改由 orderTexture(R32UI,宽 2048)按 instanceIndex 取 P
13
14
  * - dataTexture RGBA32UI (2048 宽) — 每 splat 2 texel:
14
15
  * texel0: [posX/Y/Z 的 float32 位模式(bitcast), RGBA(uint8×4) 颜色]
15
16
  * texel1: [cov00|cov01, cov02|cov11, cov12|cov22 的 half(unpack2x16float), transformIndex<<16|layerIndex]
@@ -30,6 +31,8 @@ export declare class PBMGaussianSplattingNodeMaterial extends THREE.NodeMaterial
30
31
  layerIndicesTexture: THREE.DataTexture | null;
31
32
  shTexture: THREE.DataTexture | null;
32
33
  numPoints: number;
34
+ useOrderTexture: boolean;
35
+ orderTexture: THREE.Texture | null;
33
36
  shTextureSize: THREE.Vector2;
34
37
  aggregationEnabled: boolean;
35
38
  aggregationProgress: number;
@@ -42,6 +45,7 @@ export declare class PBMGaussianSplattingNodeMaterial extends THREE.NodeMaterial
42
45
  layerClipperRanges: THREE.Vector2[];
43
46
  clipperMatricesInverse: THREE.Matrix4[];
44
47
  private _uDataTex;
48
+ private _uOrderTex;
45
49
  private _uNumPoints;
46
50
  private _uTransformsTex;
47
51
  private _uTransformIndicesTex;
@@ -1,7 +1,7 @@
1
1
  import * as THREE from "three/webgpu";
2
2
  import { Subscribe } from '../../utils/subscribe';
3
3
  import type { PanoId } from '../../utils/pano';
4
- import type { HDRCfgData } from '../../utils/hdr-data';
4
+ import { type GainmapCfgData } from '../../utils/gainmap-data';
5
5
  import type { ParameterValue } from '../parameter';
6
6
  export type PBMPointCloudShaderType = 'pointcloud';
7
7
  export type PBMAlphaMode = 'OPAQUE' | 'MASK' | 'BLEND';
@@ -28,58 +28,144 @@ export type PBMCustomNodeTargetType = 'basic' | 'phong' | 'standard' | 'panoOnly
28
28
  * 这些字段是稳定的 PBM API,业务方不需要直接依赖内部 defines.ts 路径。
29
29
  */
30
30
  export interface PBMCustomNodePanoContext {
31
- /** 全景点位在世界空间中的原点 */
31
+ /** 全景点位在世界空间中的原点(pano 矩阵的平移列) */
32
32
  origin: THREE.Node<'vec3'>;
33
- /** 当前片元对应的全景采样方向 */
33
+ /** 当前片元对应的全景采样方向(已含 zoom 校正),可直接用于采样该 slot 的 cube 贴图 */
34
34
  sampleDirection: THREE.Node<'vec3'>;
35
- /** SDR 全景颜色 */
35
+ /**
36
+ * 该 slot 的 SDR 全景颜色(cube 贴图采样结果)
37
+ * @description 仅在该 slot 有贴图时可用:未加载 pano 数据(`pano0Map` / `pano1Map` 为 null)时引用会抛
38
+ * `THREE.TSL: texture( value ) expects a valid instance of THREE.Texture()`,
39
+ * 需要业务侧先在 slot 里判空(例如 `if (material.pano0Map == null) return color;`)再引用
40
+ */
36
41
  sdrColor: THREE.Node<'vec3'>;
37
- /** HDR 处理后的全景颜色 */
42
+ /**
43
+ * HDR 处理后的全景颜色
44
+ * @description 该 slot 未启用 HDR 时(无 gainmap 数据,或 `parameter.useHDR` 关闭)回退为
45
+ * {@link sdrColor},业务无需判断「HDR 数据是否存在」即可安全引用;
46
+ * 注意回退目标本身依赖贴图存在,该 slot 无贴图时同样会抛错(见 {@link sdrColor})
47
+ */
38
48
  hdrColor: THREE.Node<'vec3'>;
39
- /** 全景深度可信度 */
49
+ /**
50
+ * 全景深度可信度
51
+ * @description 该 slot 无深度贴图(或深度剔除未启用)时为常量 0,即不做深度剔除
52
+ */
40
53
  depthTrust: THREE.Node<'float'>;
41
54
  }
42
55
  /**
43
56
  * PBMCustomNode callback 可访问的内置 TSL 节点。
44
57
  *
45
- * 注意:这里暴露的是节点表达式,不是 CPU 侧的实时数值;它们会被编译进当前材质的 shader。
58
+ * 注意:
59
+ * - 这里暴露的是节点表达式,不是 CPU 侧的实时数值;它们会被编译进当前材质的 shader,
60
+ * 因此分支判断要用 TSL 逻辑节点(`.and()` / `.or()` / `mix()` / `If()` …),不能用 JS 的 `if` / 三元。
61
+ * - 引用即参与编译:slot 里用到的字段(及其依赖的 attribute / varying / uniform / 贴图)才会进入 program,
62
+ * 未引用的字段不产生开销;反过来,比如引用 {@link isHiddenCut} 会顺带把 `_feature_id_rsmask` 属性与
63
+ * `v_hiddenMark` varying 编进当前材质,即使该材质的 `vertexMarks` 为 false。
64
+ * - 各字段的实际可用性取决于当前材质配置(是否点云、是否启用 HDR 等),见各字段说明;
65
+ * 各 slot 的调用时机见 {@link PBMCustomNodeSlots}。
46
66
  */
47
67
  export interface PBMCustomNodeContext {
48
- /** 当前片元的世界空间位置 */
68
+ /**
69
+ * 当前片元的世界空间位置
70
+ * @description 已包含 instance / skinning / morph 变换与自定义 `vertexPosition` 的偏移;
71
+ * 点云材质中为点中心(billboard quad 展开前)的位置
72
+ */
49
73
  positionWorld: THREE.Node<'vec3'>;
50
- /** 当前片元的视图空间位置 */
74
+ /**
75
+ * 当前片元的视图空间(相机空间)位置
76
+ * @description 口径同 {@link positionWorld};点云材质中为点中心位置
77
+ */
51
78
  positionView: THREE.Node<'vec3'>;
52
- /** 相机朝向(世界/模型渲染使用的 varying) */
79
+ /**
80
+ * 相机朝向(世界空间单位向量,由 viewMatrix 推导并作为 varying 传入)
81
+ * @description 与相机位置无关的纯朝向;内置屋顶 AUTO 裁切用 `-cameraDirection.y` 表示「向下看」的程度
82
+ */
53
83
  cameraDirection: THREE.Node<'vec3'>;
54
- /** 当前渲染分辨率 */
84
+ /**
85
+ * 当前渲染分辨率(CSS 像素)
86
+ * @description 取自 `camera.resolution` 或 renderer viewport;换算成物理像素需乘 {@link pixelRatio}
87
+ * (如 SPREAD 过渡用它计算屏幕中心)
88
+ */
55
89
  resolution: THREE.Node<'vec2'>;
56
- /** 当前像素比 */
90
+ /** 当前像素比(`camera.pixelRatio` / `renderer.getPixelRatio()`) */
57
91
  pixelRatio: THREE.Node<'float'>;
58
92
  /** 模型/全景渲染参数 */
93
+ /** 起始点位 → 结束点位的过渡进度 [0, 1] */
59
94
  progress: THREE.Node<'float'>;
95
+ /**
96
+ * 显示端增益上限(`parameter.maxDisplayBoost`)
97
+ * @description 与 gainmap 的 capacity 上下限一起决定 HDR 提亮权重;未启用 HDR 时无意义
98
+ */
60
99
  maxDisplayBoost: THREE.Node<'float'>;
100
+ /**
101
+ * 模型显隐进度 [0, 1]:0 = 仅显示全景(模型不可见),1 = 完全显示模型
102
+ * @description 同时驱动 roof / hidden 裁切进度(`pow(modelAlpha, 5)`)与 panoOnly 材质的不透明度
103
+ */
61
104
  modelAlpha: THREE.Node<'float'>;
105
+ /** 模型颜色透明度系数(与 {@link floorOpacity} 一起乘入输出 alpha) */
62
106
  colorAlpha: THREE.Node<'float'>;
107
+ /**
108
+ * 场景亮度倍数(`parameter.brightness`)
109
+ * @description 注意:当前 TSL 输出管线未把它乘入 alpha(GLSL 版 mesh 为
110
+ * `alpha * floorOpacity * brightness`),内置渲染下暂不生效,仅自定义节点引用时才会进入 shader
111
+ */
63
112
  brightness: THREE.Node<'float'>;
113
+ /**
114
+ * HSV 饱和度偏移(`parameter.colorSaturation`,正值提饱和)
115
+ * @description 点云材质的内置颜色管线已应用;mesh 材质未应用,供自定义节点自行使用
116
+ */
64
117
  colorSaturation: THREE.Node<'float'>;
118
+ /** HSV 亮度偏移(`parameter.colorBrightness`,正值提亮),口径同 {@link colorSaturation} */
65
119
  colorBrightness: THREE.Node<'float'>;
120
+ /** 常量颜色(`colorStyle === 'CONSTANT'` 时作为模型基础色) */
66
121
  constantColor: THREE.Node<'vec3'>;
67
- /** 楼层和屋顶状态 */
122
+ /** 楼层、屋顶与隐藏标记状态 */
123
+ /** 当前渲染对象所属楼层索引(由模型/瓦片数据写入;bounding mesh 等不归属楼层的对象为 `-1`) */
68
124
  floorIndex: THREE.Node<'float'>;
125
+ /** 用户指定高亮显示的楼层索引;`-1` 表示所有楼层都算「当前楼层」 */
69
126
  shownFloorIndex: THREE.Node<'float'>;
127
+ /** 是否属于当前显示楼层(`shownFloorIndex < 0` 时恒为 true) */
70
128
  isCurrentFloor: THREE.Node<'bool'>;
129
+ /** 非当前楼层的淡出系数(随相机俯仰推导),当前楼层为 1 */
71
130
  floorOpacity: THREE.Node<'float'>;
131
+ /**
132
+ * 是否命中屋顶标记档位(`_feature_id_rsmask = 1`)
133
+ * @description 与 {@link isHidden} 一样直接由顶点属性推导,不受 `material.vertexMarks` 开关影响
134
+ */
72
135
  isRoof: THREE.Node<'bool'>;
136
+ /** 屋顶裁切判定(`roofStyle = 'AUTO'`):命中屋顶标记、且高度超过按相机俯仰角计算的阈值 */
73
137
  isRoofCameraCut: THREE.Node<'bool'>;
138
+ /** 屋顶裁切判定(`roofStyle = 'HIDE'`):命中屋顶标记、且高度超过按 `modelAlpha` 计算的阈值 */
74
139
  isRoofModelAlphaCut: THREE.Node<'bool'>;
140
+ /**
141
+ * 是否命中隐藏标记档位(`_feature_id_rsmask = 2`)
142
+ * @description 直接由顶点属性推导(几何体无该属性时回退 0,恒为 false),
143
+ * 与 {@link isRoof} 一致,**不受** `material.vertexMarks` 开关影响;
144
+ * 管线内置的自动隐藏裁切才受该开关门禁
145
+ */
146
+ isHidden: THREE.Node<'bool'>;
147
+ /**
148
+ * 隐藏裁切判定:命中隐藏标记档位、且世界高度超过由 `modelAlpha` 驱动的高度阈值
149
+ * @description Mesh 材质在 `vertexMarks` 开启时已按此判定 discard,自定义节点可直接复用它做额外处理
150
+ */
151
+ isHiddenCut: THREE.Node<'bool'>;
152
+ /** 模型包围盒最小角(与 {@link positionWorld} 同空间,用于高度裁切与高度色) */
75
153
  modelBoundingMin: THREE.Node<'vec3'>;
154
+ /** 模型包围盒最大角,口径同 {@link modelBoundingMin} */
76
155
  modelBoundingMax: THREE.Node<'vec3'>;
77
- /** 起始/结束全景点位的采样结果 */
156
+ /**
157
+ * 起始点位的全景采样结果
158
+ * @description 字段含义、以及「无数据时的回退行为」见 {@link PBMCustomNodePanoContext}
159
+ */
78
160
  pano0: PBMCustomNodePanoContext;
161
+ /** 结束点位的全景采样结果,口径同 {@link pano0} */
79
162
  pano1: PBMCustomNodePanoContext;
80
163
  /** 点云相关参数 */
164
+ /** 点大小基数(ATTENUATION 模式下与分辨率、视图距离一起换算为像素大小) */
81
165
  pointScale: THREE.Node<'float'>;
166
+ /** 点大小下限(CSS 像素,实际约束时会乘 {@link pixelRatio}) */
82
167
  pointMinPixel: THREE.Node<'float'>;
168
+ /** 点大小上限(CSS 像素,实际约束时会乘 {@link pixelRatio}) */
83
169
  pointMaxPixel: THREE.Node<'float'>;
84
170
  }
85
171
  /**
@@ -239,10 +325,15 @@ export interface PBMPanoPicture {
239
325
  matrix: THREE.Matrix4;
240
326
  /** 缩放 */
241
327
  zoom: number;
242
- hdrConfig?: PBMHDRConfig;
328
+ /** HDR gainmap(无 HDR 时不存在) */
329
+ gainmap?: PBMPanoGainmap;
243
330
  }
244
- export interface PBMHDRConfig extends HDRCfgData {
331
+ /** pano 的 HDR gainmap:增益图六视图 cube 贴图 + 增益图配置 */
332
+ export interface PBMPanoGainmap {
333
+ /** 增益图六视图贴图 */
245
334
  map: THREE.CubeTexture;
335
+ /** 增益图配置 */
336
+ cfg: GainmapCfgData;
246
337
  }
247
338
  export interface PBMPanoDepth {
248
339
  /** 点位 Id */
@@ -269,12 +360,14 @@ export interface IPBMMaterial {
269
360
  pano0Histogram: THREE.Vector4;
270
361
  pano0Matrix: THREE.Matrix4;
271
362
  pano0Zoom: number;
272
- pano0GainMap: THREE.CubeTexture | null;
363
+ pano0Gainmap: THREE.CubeTexture | null;
273
364
  pano0HdrMaxContentBoost: number;
274
365
  pano0HdrMinContentBoost: number;
275
366
  pano0HdrCapacityMin: number;
276
367
  pano0HdrCapacityMax: number;
277
368
  pano0HdrGamma: number;
369
+ pano0HdrOffsetSdr: number;
370
+ pano0HdrOffsetHdr: number;
278
371
  pano0DepthMap: THREE.CubeTexture | null;
279
372
  pano0DepthMaxDepth: number;
280
373
  pano1Map: THREE.CubeTexture | null;
@@ -282,12 +375,14 @@ export interface IPBMMaterial {
282
375
  pano1Histogram: THREE.Vector4;
283
376
  pano1Matrix: THREE.Matrix4;
284
377
  pano1Zoom: number;
285
- pano1GainMap: THREE.CubeTexture | null;
378
+ pano1Gainmap: THREE.CubeTexture | null;
286
379
  pano1HdrMaxContentBoost: number;
287
380
  pano1HdrMinContentBoost: number;
288
381
  pano1HdrCapacityMin: number;
289
382
  pano1HdrCapacityMax: number;
290
383
  pano1HdrGamma: number;
384
+ pano1HdrOffsetSdr: number;
385
+ pano1HdrOffsetHdr: number;
291
386
  pano1DepthMap: THREE.CubeTexture | null;
292
387
  pano1DepthMaxDepth: number;
293
388
  panoFilterSaturationBias: number;
@@ -3,7 +3,6 @@ export declare const TRANSPARENT: THREE.ConstNode<"vec4", THREE.Vector4>;
3
3
  export declare const resolution: THREE.UniformNode<"vec2", THREE.Vector2>;
4
4
  export declare const pixelRatio: THREE.UniformNode<"float", number>;
5
5
  export declare const vCameraDirection: THREE.VaryingNode<"vec3">;
6
- export declare const vRoofMark: THREE.VaryingNode<"float">;
7
6
  export declare const progress: THREE.Node<"float">;
8
7
  export declare const maxDisplayBoost: THREE.Node<"float">;
9
8
  export declare const modelAlpha: THREE.Node<"float">;
@@ -15,6 +14,8 @@ export declare const pano0HdrMinContentBoost: THREE.Node<"float">;
15
14
  export declare const pano0HdrCapacityMin: THREE.Node<"float">;
16
15
  export declare const pano0HdrCapacityMax: THREE.Node<"float">;
17
16
  export declare const pano0HdrGamma: THREE.Node<"float">;
17
+ export declare const pano0HdrOffsetSdr: THREE.Node<"float">;
18
+ export declare const pano0HdrOffsetHdr: THREE.Node<"float">;
18
19
  export declare const pano0DepthMaxDepth: THREE.Node<"float">;
19
20
  export declare const pano1Matrix: THREE.Node<"mat4">;
20
21
  export declare const pano1Zoom: THREE.Node<"float">;
@@ -24,6 +25,8 @@ export declare const pano1HdrMinContentBoost: THREE.Node<"float">;
24
25
  export declare const pano1HdrCapacityMin: THREE.Node<"float">;
25
26
  export declare const pano1HdrCapacityMax: THREE.Node<"float">;
26
27
  export declare const pano1HdrGamma: THREE.Node<"float">;
28
+ export declare const pano1HdrOffsetSdr: THREE.Node<"float">;
29
+ export declare const pano1HdrOffsetHdr: THREE.Node<"float">;
27
30
  export declare const pano1DepthMaxDepth: THREE.Node<"float">;
28
31
  export declare const panoFilterSaturationBias: THREE.Node<"float">;
29
32
  export declare const panoFilterContrastBias: THREE.Node<"float">;
@@ -49,6 +52,8 @@ export declare const isCurrentFloor: THREE.VarNode<"bool">;
49
52
  export declare const isRoof: THREE.VarNode<"bool">;
50
53
  export declare const isRoofCameraCut: THREE.VarNode<"bool">;
51
54
  export declare const isRoofModelAlphaCut: THREE.VarNode<"bool">;
55
+ export declare const isHidden: THREE.VarNode<"bool">;
56
+ export declare const isHiddenCut: THREE.VarNode<"bool">;
52
57
  export declare const pano0Origin: THREE.VarNode<"vec3">;
53
58
  export declare const pano0SampleDirection: THREE.VarNode<"vec3">;
54
59
  export declare const pano1Origin: THREE.VarNode<"vec3">;
@@ -7,18 +7,7 @@
7
7
  * 通用工具函数(rgb2hsv, hsv2rgb, resolutionUniform, pixelRatioUniform)在 utils.ts 中。
8
8
  */
9
9
  import * as THREE from 'three/webgpu';
10
- import type { PBMTransition, PBMColorStyle, PBMCustomNodeTargetType, IPBMMaterial } from '../pbmMaterial';
11
- export interface SetupPanoOutputOptions {
12
- useVertexMark: boolean;
13
- useFloorStyleVisibility: boolean;
14
- useGradientTexture: boolean;
15
- useRefinedScreen: boolean;
16
- usePanoFilter: boolean;
17
- usePanoDepth: boolean;
18
- useHDR: boolean;
19
- colorMode: PBMColorStyle;
20
- transition: PBMTransition;
21
- }
10
+ import type { PBMCustomNodeTargetType, IPBMMaterial } from '../pbmMaterial';
22
11
  export declare function setupMeshOutput(material: THREE.NodeMaterial & IPBMMaterial, builder: THREE.NodeBuilder, materialType: PBMCustomNodeTargetType): void;
23
12
  /**
24
13
  * 在 NodeMaterial 已完成 morph/skinning/instance 等标准顶点处理后,
@@ -12,6 +12,12 @@ export declare function panoColor(options: {
12
12
  transition: PBMTransition;
13
13
  usePanoFilter: boolean;
14
14
  useRefinedScreen: boolean;
15
- useHDR: boolean;
16
- usePanoDepth: boolean;
15
+ /** pano0 的 HDR 分支开关 */
16
+ usePano0HDR: boolean;
17
+ /** pano1 的 HDR 分支开关 */
18
+ usePano1HDR: boolean;
19
+ /** pano0 的深度剔除开关 */
20
+ usePano0Depth: boolean;
21
+ /** pano1 的深度剔除开关 */
22
+ usePano1Depth: boolean;
17
23
  }): THREE.TSL.FnNode<[number | THREE.Node], THREE.VarNode<"vec3">>;
@@ -5,7 +5,20 @@ import * as THREE from 'three/webgpu';
5
5
  export declare const rgb2hsv: THREE.TSL.FnNode<[number | THREE.Node], THREE.Node<"vec3">>;
6
6
  export declare const hsv2rgb: THREE.TSL.FnNode<[number | THREE.Node], THREE.Node<"vec3">>;
7
7
  export declare const unpackRGBAToDepth: THREE.TSL.FnNode<[number | THREE.Node], THREE.Node<"float">>;
8
+ /**
9
+ * 由 gainmap 值计算 HDR 增益系数
10
+ * @description 与 UltraHDR 规范一致:
11
+ * 1. gain 为数据(非颜色),取值 [0,1]
12
+ * 2. 解码 gamma:pow(gain, 1/gamma)(规范为 `log_recovery = pow(recovery, 1.0/map_gamma)`)
13
+ * 3. 在 log2 空间用 min/maxContentBoost 插值,再乘显示器容量权重
14
+ * 4. capacity 上下限相等(分母为 0)时权重取 0,避免 NaN
15
+ */
8
16
  export declare const hdrBoost: THREE.TSL.FnNode<[number | THREE.Node, number | THREE.Node, number | THREE.Node, number | THREE.Node, number | THREE.Node, number | THREE.Node, number | THREE.Node], THREE.Node<"vec3">>;
17
+ /**
18
+ * 应用 gainmap 偏移,得到最终 HDR 颜色
19
+ * @description 与 UltraHDR 规范一致:`(sdr + offsetSdr) * boost - offsetHdr`
20
+ */
21
+ export declare const hdrOffset: THREE.TSL.FnNode<[number | THREE.Node, number | THREE.Node, number | THREE.Node, number | THREE.Node], THREE.Node<"vec3">>;
9
22
  export declare const zoomVector: THREE.TSL.FnNode<[number | THREE.Node, number | THREE.Node, number | THREE.Node], THREE.Node<"vec3">>;
10
23
  /** 计算全景采样方向:用 mat4 矩阵右乘方向向量 (w=0) 得到旋转后的方向 */
11
24
  export declare const sampleDirection: THREE.TSL.FnNode<[number | THREE.Node, number | THREE.Node, number | THREE.Node, number | THREE.Node], THREE.Node<"vec3">>;
@@ -50,6 +50,15 @@ export declare class PBMGaussianSplattingObject extends THREE.Points<THREE.Buffe
50
50
  reattach(positions: ArrayBufferLike, rotations: ArrayBufferLike, scales: ArrayBufferLike, colors: ArrayBufferLike, selection: ArrayBufferLike): void;
51
51
  get selected(): boolean;
52
52
  set selected(selected: boolean);
53
+ /**
54
+ * 对象空间(未经任何变换)的 AABB,由 packedData / positions 的原始坐标构建。
55
+ *
56
+ * 直接返回内部实例以避免每次访问都分配,**调用方不得修改**。
57
+ * 与 `boundingBox` 的区别:后者已把 `position` 与 `scale` 烘进结果(但忽略旋转与父级变换),
58
+ * 因此不能再与 `matrixWorld` 组合使用;本 getter 才是可配合 `matrixWorld` 求世界空间角点的那一个,
59
+ * GPU 排序的 Distance_Range 计算依赖它。
60
+ */
61
+ get objectSpaceBoundingBox(): THREE.Box3;
53
62
  get boundingBox(): THREE.Box3;
54
63
  /**
55
64
  * 从 packedData 即时解码第 index 个 splat 的 3D 协方差矩阵(half-precision → float)。
@@ -1,9 +1,9 @@
1
1
  import * as THREE from 'three/webgpu';
2
2
  import { PBMGaussianSplattingNodeMaterial } from '../materials/pbmGaussianSplattingNodeMaterial';
3
3
  /**
4
- * 3DGS 渲染 Mesh(WebGPU / TSL 版,纯 CPU 数据准备)
4
+ * 3DGS 渲染 Mesh(WebGPU / TSL 版)
5
5
  *
6
- * 主循环用四个协作者准备数据(**无任何 compute shader**):
6
+ * 主循环用四个协作者准备数据:
7
7
  * - `SplatAssembler`:per-object region 增量 diff + **CPU 拼装** 大数据纹理
8
8
  * (把各对象 packedData 紧凑拷进 CPU 缓冲,写 transformIndex/layerIndex 到 texel1.w;
9
9
  * 经 THREE.DataTexture 上传供主材质采样)
@@ -15,11 +15,14 @@ import { PBMGaussianSplattingNodeMaterial } from '../materials/pbmGaussianSplatt
15
15
  * 索引顺序 ≡ `SHStore` 写入顺序。四个协作者都从**同一有序 `objects` 数组、同一顺序**同步,
16
16
  * 因此不会产生 transformIndex / SH 错位;`onBeforeRender` 中另加防御性一致性断言兜底。
17
17
  *
18
- * 排序:把 `SplatAssembler.extractSortInputs()`(世界坐标 + transformIndex)与
19
- * `TransformStore.transforms`(20 float/对象)喂给 Sort_Worker,回传的 `depthIndex`
20
- * 保存为 `orderData`。每帧(order 或布局变化时)在 **CPU 端** 用「旧布局→当前布局」段表
21
- * 把 orderData remap 到当前布局,紧凑写入 `splatIndex` 实例属性,材质用 `splatIndex` 取点驱动
22
- * instanced draw(tile 增删布局变化时保持排序与大纹理映射一致、不闪烁)。
18
+ * 排序:本类**不再自己排序**。排序、绘制索引来源与绘制实例数一律经 `GSplatPipeline` 抽象基类
19
+ * 消费(Requirement 10.2):
20
+ * - `RASTER_CPU_SORT`(`CpuSortPipeline`):wasm worker 排序 + Reorder_CPU,索引来自
21
+ * `splatIndex` 实例属性;
22
+ * - `RASTER_GPU_SORT`(`GpuSortPipeline`):GPU radix sort,索引来自 R32UI Order_Texture。
23
+ * 「本帧是否需要排序」由 `SortThrottle` 判定(相机小平移 / 小角度 / min-interval 门),
24
+ * 与管线实现无关,两条路径的节流行为完全一致。管线按 `pipelineMode` 解析结果整体切换,
25
+ * 本类不引用 Sort_Worker、排序模块或任何 WebGPU 资源。
23
26
  *
24
27
  * 大数据纹理:
25
28
  * - `SplatAssembler` 在对象集合变化时在 **CPU** 端把各对象 packedData 紧凑拼进一张
@@ -36,100 +39,61 @@ declare class PBMGaussianSplattingRenderMesh extends THREE.Mesh<THREE.InstancedB
36
39
  private transformStore;
37
40
  private layerRegistry;
38
41
  private shStore;
39
- private sortWorker;
42
+ /**
43
+ * 当前生效的排序管线。由 `syncPipelineMode` 按 Current_Pipeline_Mode 创建 / 重建,
44
+ * 尚未创建(首帧之前)时为 null。
45
+ */
46
+ private pipeline;
47
+ /** 排序节流器:判定本 Render_Frame 是否需要调用 `pipeline.requestSort`。 */
48
+ private throttle;
49
+ /** Requested_Pipeline_Mode(外部经 `pipelineMode` 写入,下一帧生效)。 */
50
+ private _requestedPipelineMode;
51
+ /**
52
+ * Current_Pipeline_Mode(`resolvePipelineMode` 的解析结果,永不为 `AUTO`)。
53
+ * 初值取 CPU 排序:管线未创建前对外报告最保守的取值。
54
+ */
55
+ private _activePipelineMode;
56
+ /**
57
+ * 创建当前 `pipeline` 时所用的渲染器。渲染器只能从 `onBeforeRender` 拿到,因此管线在首帧
58
+ * 才创建;若本 Mesh 被挂到另一个渲染器上(renderer 身份变化),管线持有的 device 资源不再
59
+ * 有效,需连同模式一起重建。
60
+ */
61
+ private _pipelineRenderer;
62
+ /**
63
+ * 传给管线的每帧参数。**跨帧复用同一个对象**(Requirement 10.7),每帧填字段后传入,
64
+ * 不在渲染循环里新建。`camera` 由每帧填充,构造时无值。
65
+ */
66
+ private _frameParams;
40
67
  /**
41
68
  * 大纹理待组装标记:tile 集合变化(rebuildScene)时置 true;onBeforeRender 中即调用
42
69
  * `assembler.assemble()`(CPU 拼装 + DataTexture 上传)并清除。相机移动帧不置位(不重组装)。
43
70
  */
44
71
  private assemblePending;
45
- /** splatIndex 实例属性的当前容量(点数);不足时按 2 的幂扩容。 */
46
- private splatIndexCapacity;
47
- /** 单调递增的排序请求代;每代记录其所基于的布局快照,回传时按代取回(防异步错配)。 */
48
- private sortGeneration;
49
- /** 当前排序输入是否已上传给 worker(场景/transform 变化时置 false 触发重传)。 */
50
- private sortDataUploaded;
51
- /** 排序输入(布局 / transform)自上次上传后是否已变化——脏则强制重排并重传。 */
52
- private sortInputsDirty;
53
72
  private forceClipperUniformRefresh;
73
+ private usedSHDegree;
74
+ constructor();
54
75
  /**
55
- * Sort_Worker 是否已进入不可恢复的失败态(WASM 加载失败)。一旦置位,Render_Mesh
56
- * 持续降级为空绘制(instanceCount=0),不再尝试消费排序结果(Requirement 18.1)。
57
- */
58
- private sortWorkerFailed;
59
- /** 当前 order 长度(= 最近一次排序回传的 depthIndex 长度 = 该次排序时 vertexCount)。 */
60
- private orderCount;
61
- /**
62
- * 最近一次排序回传的 depthIndex 副本(基于 orderBaseSnapshot 布局的全局点索引 P 的排列)。
63
- * 作为 CPU reorder 的输入源:`applyReorderCPU` 用「orderBaseSnapshot → 当前布局」段表把它
64
- * remap 到当前布局,紧凑写入 splatIndex 实例属性,从而在 tile 增删(布局变化)时保持排序与
65
- * 大纹理映射一致、不闪烁。
76
+ * Requested_Pipeline_Mode(`GSPLAT_PIPELINE_*`)。写入后在**下一帧**由
77
+ * `syncPipelineMode` 解析并按需重建管线,便于开发期在同场景下对比两条管线
78
+ * (Requirement 13.2)。
66
79
  */
67
- private orderData;
68
- /** order 内容变化(新排序回传)→ 需重跑 CPU reorder。 */
69
- private orderDirty;
70
- /** 布局变化(LOD 增删 / 场景重建)→ 需以新布局(新段表)重跑 CPU reorder。 */
71
- private layoutDirty;
72
- /** 当前存活实例数(= 最近一次 applyReorderCPU 写入 splatIndex 的点数)。 */
73
- private aliveCount;
74
- /** 当前 order 所基于的布局快照(= 该次排序发起时的布局)。 */
75
- private orderBaseSnapshot;
76
- /** generation → 该次排序发起时的布局快照。 */
77
- private snapshotByGen;
78
- private prevSortCameraMatrix;
80
+ get pipelineMode(): number;
81
+ set pipelineMode(value: number);
82
+ /** 实际生效的 Current_Pipeline_Mode(解析后的结果,永不为 `AUTO`)。 */
83
+ get currentPipelineMode(): number;
79
84
  /** 平移增量阈值(世界单位):超过才重排。 */
80
- sortCameraDistance: number;
85
+ get sortCameraDistance(): number;
86
+ set sortCameraDistance(value: number);
81
87
  /** 姿态相似度阈值(|quat 点积|):低于才重排(0.99 ≈ 约 16° 内不重排)。 */
82
- sortCameraCoorient: number;
88
+ get sortCameraCoorient(): number;
89
+ set sortCameraCoorient(value: number);
83
90
  /** 最小重排间隔(ms):即使脏也不超过此频率,0=不限。 */
84
- sortMinIntervalMs: number;
85
- private sortLastTime;
86
- private _scratchViewProj;
87
- private usedSHDegree;
88
- constructor();
91
+ get sortMinIntervalMs(): number;
92
+ set sortMinIntervalMs(value: number);
89
93
  private createGeometry;
90
- /**
91
- * 确保 splatIndex 实例属性容量 >= requiredCount;不足时按 2 的幂扩容(保留旧内容)。
92
- * 返回当前(可能是新建的)属性。
93
- */
94
- private ensureSplatIndexCapacity;
95
94
  private createMaterial;
96
95
  private createDefaultLayerClipperRanges;
97
96
  private createDefaultClipperMatrices;
98
- /**
99
- * 应用排序结果:
100
- * 1. 保存 depthIndex 副本到 `orderData`(作为 CPU reorder 的输入源;实际 remap 在
101
- * onBeforeRender 中由 applyReorderCPU 完成,此处不写 splatIndex)。
102
- * 2. 置 orderDirty(新排序回传 → 需重跑 CPU reorder)。
103
- * 3. 按 generation 取回该次排序真正基于的布局快照,作为 reorder 基准,并清理更旧快照
104
- * (worker 结果按 generation 单调返回,更旧快照不会再用到)。
105
- * 保证:每次回传的 depthIndex 恒为「该代排序时 totalPoints」的一个排列,点数守恒。
106
- */
107
- private applyDepthIndex;
108
- /** 捕获当前布局:assembler.regions 的 {object, start, count}(顺序即全局点区间顺序)。 */
109
- private snapshotLayout;
110
- /**
111
- * 用「排序时旧布局 → 当前布局」构造 reorder 段表:
112
- * - 存活对象:{ oldStart, oldEnd, delta = 当前 start - 旧 start, removed: false }
113
- * - 被删对象:{ oldStart, oldEnd, delta: 0, removed: true }
114
- * 段按 oldStart 升序(base 已按 start 升序)、区间不重叠;相邻同类段(同 removed 且
115
- * removed 或 delta 相同、且首尾相接)合并以压低段数(供 applyReorderCPU 二分查找)。
116
- */
117
- private buildSegments;
118
- /**
119
- * 二分查找覆盖全局点索引 P 的段(段按 oldStart 升序、区间 [oldStart,oldEnd) 连续无重叠)。
120
- * 找不到(P 越界,理论上不会发生)返回 null。
121
- */
122
- private findSegment;
123
- /**
124
- * CPU reorder:把最近一次排序回传的 depthIndex(orderData,基于 orderBaseSnapshot 旧布局的
125
- * 全局点索引 P 的排列)用「旧布局 → 当前布局」段表 remap 到当前布局,紧凑写入 splatIndex 实例属性:
126
- * - 存活对象点 P → 写入 P + delta;
127
- * - 被删对象点(removed)→ 跳过(不写,实例数不计)。
128
- * 从而在 tile 增删(布局变化)时保持排序顺序与大纹理映射一致、不闪烁(等价 five 的 ReorderPass)。
129
- * 结果实例数写入 `geometry.instanceCount`(= 存活点数 n)。material.numPoints 设为当前布局总点数
130
- * 作 shader 端 P>=numPoints 的保护性剔除(正常情况下存活区都 < numPoints)。
131
- */
132
- private applyReorderCPU;
133
97
  private collectObjects;
134
98
  private isSceneNeedsRebuild;
135
99
  private getClipperHash;
@@ -142,8 +106,8 @@ declare class PBMGaussianSplattingRenderMesh extends THREE.Mesh<THREE.InstancedB
142
106
  /**
143
107
  * 场景变化时按**同一有序 objects**依次同步四个协作者,保证布局三一致:
144
108
  * layerRegistry / transformStore 先行(assembler 的 resolveIndices 依赖二者的 indexOf/layerIndexOf),
145
- * 再 assembler.sync(增量 diff + 连续 start 偏移,不触碰 GPU)→ shStore.sync;大纹理 GPU 组装
146
- * 延迟到 onBeforeRender 中 device 就绪时的 assembler.assemble(device)。
109
+ * 再 assembler.sync(增量 diff + 连续 start 偏移,不触碰 GPU)→ shStore.sync;大纹理组装
110
+ * 延迟到 onBeforeRender 中的 assembler.assemble()。
147
111
  */
148
112
  private rebuildScene;
149
113
  /**
@@ -151,21 +115,23 @@ declare class PBMGaussianSplattingRenderMesh extends THREE.Mesh<THREE.InstancedB
151
115
  * 四者由 rebuildScene 从同一 objects 同序同步,正常情况下恒成立;不成立即视为错误状态并告警。
152
116
  */
153
117
  private assertLayoutConsistency;
154
- /**
155
- * 把排序输入喂给 Sort_Worker:位置 + transformIndex 来自 assembler.extractSortInputs(),
156
- * 变换矩阵来自 transformStore.transforms(20 float/对象,与 sort.cpp `_sort` 步长一致)。
157
- * 每次上传 ++generation,回传时据此丢弃过期结果。
158
- */
159
- private postSortData;
160
- /**
161
- * 是否需要重排:
162
- * - 排序输入脏(布局 / transform 变化)或尚未上传过 → 强制重排;
163
- * - 否则比较相机相对「上次排序时快照」的平移 / 姿态增量,均小于阈值则跳过(小角度节流)。
164
- */
165
- private shouldSort;
166
- private requestSort;
167
118
  /** 把 store 产出的纹理与 SH 阶数同步到材质。 */
168
119
  private syncMaterialTextures;
120
+ /**
121
+ * 每帧一次的 Pipeline_Mode 检查与管线切换(Requirement 8.2)。
122
+ *
123
+ * 之所以每帧检查而非首帧一次性初始化:`pipelineMode` 的运行时修改要在下一帧生效
124
+ * (Requirement 8.6 / 13.2),且 `totalPoints` 增长导致 limits 越界、或 GPU 管线运行期失效
125
+ * (compute pipeline 创建失败 / device lost,经 `unusable` 汇聚)时都要能自动降级。
126
+ * 所有降级情形统一归结为「`resolvePipelineMode` 返回 `RASTER_CPU_SORT`」后由本方法完成切换
127
+ * (Requirement 15.4),因此不存在第二条降级代码路径。
128
+ *
129
+ * 模式未变且管线已就绪时只做一次整数比较即返回,开销可忽略(Requirement 8.10)。
130
+ *
131
+ * @param renderer 本帧渲染器(由 `onBeforeRender` 传入,是取 `GPUDevice` 的唯一入口)
132
+ * @param totalPoints 当前布局的 Total_Points,用于按实际规模检查 limits
133
+ */
134
+ private syncPipelineMode;
169
135
  onBeforeRender: (renderer: any, scene: THREE.Scene, camera: THREE.Camera, ..._rest: any[]) => void;
170
136
  dispose(): void;
171
137
  }
@@ -73,6 +73,8 @@ export declare class Tile3D extends THREE.Object3D {
73
73
  loadContent(tile: Tile): Promise<void>;
74
74
  unloadContent(tile: Tile): Promise<void>;
75
75
  loadAllTilesets(): Promise<void>;
76
+ loadTrajectory(trajectory: Trajectory): Promise<void>;
77
+ unloadTrajectory(trajectory: Trajectory): Promise<void>;
76
78
  intersectRaycaster(raycaster: THREE.Raycaster, target?: Intersection[]): Intersection[];
77
79
  update(renderer: THREE.WebGPURenderer, camera: Camera, modelScene: ModelScene, model: Model): boolean;
78
80
  dispose(): void;
@@ -12,6 +12,11 @@ export interface TilesetOptions {
12
12
  onTileLoad: (tile: Tile) => any;
13
13
  onTileUnload: (tile: Tile) => any;
14
14
  onTileError: (tile: Tile, error: Error) => any;
15
+ trajectoryLoader: (trajectory: Trajectory) => Promise<void>;
16
+ trajectoryUnloader: (trajectory: Trajectory) => Promise<void>;
17
+ onTrajectoryLoad: (trajectory: Trajectory) => any;
18
+ onTrajectoryUnload: (trajectory: Trajectory) => any;
19
+ onTrajectoryError: (trajectory: Trajectory, error: Error) => any;
15
20
  }
16
21
  export declare class Tileset {
17
22
  asset: {