@realsee/five-webgpu 1.0.0-alpha.4 → 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 (313) 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.Camera.html +1 -1
  21. package/docs/classes/index.EffectComposer.html +1 -1
  22. package/docs/classes/index.EyeDomeLightingPass.html +1 -1
  23. package/docs/classes/index.Five.html +68 -67
  24. package/docs/classes/index.FivePass.html +1 -1
  25. package/docs/classes/index.FlowingFireworks3DPass.html +1 -1
  26. package/docs/classes/index.FlowingLight2DPass.html +1 -1
  27. package/docs/classes/index.FlowingLight3DPass.html +1 -1
  28. package/docs/classes/index.GaussianBlurPass.html +1 -1
  29. package/docs/classes/index.InternalWebGPURenderer.html +14 -3
  30. package/docs/classes/index.Model.html +1 -1
  31. package/docs/classes/index.ModelScene.html +1 -1
  32. package/docs/classes/index.NetworkSubscribe.html +1 -1
  33. package/docs/classes/index.PBMCustomNode.html +57 -0
  34. package/docs/classes/index.PBMGaussianSplattingNodeMaterial.html +8 -6
  35. package/docs/classes/index.PBMGaussianSplattingObject.html +10 -4
  36. package/docs/classes/index.PBMGaussianSplattingRenderMesh.html +26 -15
  37. package/docs/classes/index.PBMGroup.html +1 -1
  38. package/docs/classes/index.PBMMesh.html +1 -1
  39. package/docs/classes/index.PBMMeshBasicMaterial.html +16 -5
  40. package/docs/classes/index.PBMMeshBasicNodeMaterial.html +28 -7
  41. package/docs/classes/index.PBMMeshPanoOnlyMaterial.html +16 -5
  42. package/docs/classes/index.PBMMeshPanoOnlyNodeMaterial.html +28 -7
  43. package/docs/classes/index.PBMMeshPhongMaterial.html +16 -5
  44. package/docs/classes/index.PBMMeshPhongNodeMaterial.html +28 -7
  45. package/docs/classes/index.PBMMeshPhysicalMaterial.html +16 -5
  46. package/docs/classes/index.PBMMeshPhysicalNodeMaterial.html +28 -7
  47. package/docs/classes/index.PBMPanoFilter.html +8 -8
  48. package/docs/classes/index.PBMPointCloud.html +1 -1
  49. package/docs/classes/index.PBMSkinnedMesh.html +1 -1
  50. package/docs/classes/index.PBMUpdateable.html +1 -1
  51. package/docs/classes/index.PanoCircleMesh.html +1 -1
  52. package/docs/classes/index.PanoCircleMeshCustom.html +5 -5
  53. package/docs/classes/index.PanoCircleMeshSolid.html +1 -1
  54. package/docs/classes/index.Parameter.html +57 -52
  55. package/docs/classes/index.Scene.html +1 -1
  56. package/docs/classes/index.Subscribe.html +1 -1
  57. package/docs/classes/index.TextureLoader.html +4 -1
  58. package/docs/classes/index.Tile3D.html +23 -21
  59. package/docs/classes/index.TileNode.html +1 -1
  60. package/docs/classes/index.Tileset.html +4 -4
  61. package/docs/classes/index.TrajectoryNode.html +3 -3
  62. package/docs/classes/index.Work.html +20 -18
  63. package/docs/classes/index.WorkResolvedObserver.html +22 -22
  64. package/docs/documents/api.html +11 -10
  65. package/docs/documents/features_camera-animation.html +1 -1
  66. package/docs/documents/features_event.html +0 -1
  67. package/docs/documents/features_five.html +7 -7
  68. package/docs/documents/features_gesture.html +1 -1
  69. package/docs/documents/features_load-external-model.html +6 -6
  70. package/docs/documents/features_load-progress.html +1 -1
  71. package/docs/documents/features_mode.html +5 -15
  72. package/docs/documents/features_model.html +1 -1
  73. package/docs/documents/features_state.html +1 -1
  74. package/docs/documents/features_ultra-hdr.html +50 -44
  75. package/docs/documents/quick-start.html +1 -1
  76. package/docs/documents/release_notes_6.8.html +2 -2
  77. package/docs/documents/support.html +1 -3
  78. package/docs/functions/index.customNodesCacheKey.html +3 -0
  79. package/docs/functions/index.parseWork.html +1 -1
  80. package/docs/functions/index.workToJson.html +1 -1
  81. package/docs/hierarchy.html +1 -1
  82. package/docs/interfaces/index.AddableObject.html +1 -1
  83. package/docs/interfaces/index.AjaxOptions.html +1 -1
  84. package/docs/interfaces/index.BaseEvent.html +2 -2
  85. package/docs/interfaces/index.Clock.html +24 -0
  86. package/docs/interfaces/index.EventCallback.html +49 -47
  87. package/docs/interfaces/index.FiveInitArgs.html +49 -40
  88. package/docs/interfaces/index.GainmapCfgData.html +15 -0
  89. package/docs/interfaces/index.GestureEvent.html +2 -2
  90. package/docs/interfaces/index.IPBMMaterial.html +15 -4
  91. package/docs/interfaces/index.ImageOptions.html +1 -1
  92. package/docs/interfaces/index.IntersectEvent.html +2 -2
  93. package/docs/interfaces/index.IntersectMesh.html +1 -1
  94. package/docs/interfaces/index.IntersectMeshInterface.html +1 -1
  95. package/docs/interfaces/index.Intersection.html +1 -1
  96. package/docs/interfaces/index.LoosePanoWork.html +2 -2
  97. package/docs/interfaces/index.LooseWork.html +2 -2
  98. package/docs/interfaces/index.LooseWorkInitial.html +2 -2
  99. package/docs/interfaces/index.LooseWorkModel.html +2 -2
  100. package/docs/interfaces/index.LooseWorkObserver.html +2 -2
  101. package/docs/interfaces/index.LooseWorkPanorama.html +4 -3
  102. package/docs/interfaces/index.LooseWorkWithExtrinsics.html +15 -9
  103. package/docs/interfaces/index.ModeChangeEvent.html +2 -2
  104. package/docs/interfaces/index.ModelControllerCustomInitArgs.html +1 -1
  105. package/docs/interfaces/index.ModelEvent.html +2 -2
  106. package/docs/interfaces/index.ModelSceneEvent.html +2 -2
  107. package/docs/interfaces/index.ModelTileEvent.html +2 -2
  108. package/docs/interfaces/index.MovePanoOptions.html +1 -1
  109. package/docs/interfaces/index.NetworkAbortError.html +1 -1
  110. package/docs/interfaces/index.NetworkFirbiddenError.html +1 -1
  111. package/docs/interfaces/index.NetworkOptions.html +1 -1
  112. package/docs/interfaces/index.NetworkProxyError.html +1 -1
  113. package/docs/interfaces/index.NetworkResourceEvent.html +2 -2
  114. package/docs/interfaces/index.NetworkResponseError.html +1 -1
  115. package/docs/interfaces/index.NetworkTimeoutError.html +1 -1
  116. package/docs/interfaces/index.ObjectEvent.html +2 -2
  117. package/docs/interfaces/index.PBMClipperParameter.html +2 -2
  118. package/docs/interfaces/index.PBMCustomNodeContext.html +87 -0
  119. package/docs/interfaces/index.PBMCustomNodeOptions.html +10 -0
  120. package/docs/interfaces/index.PBMCustomNodePanoContext.html +20 -0
  121. package/docs/interfaces/index.PBMCustomNodeSlots.html +31 -0
  122. package/docs/interfaces/index.PBMPanoDepth.html +5 -5
  123. package/docs/interfaces/index.PBMPanoFilterValue.html +2 -2
  124. package/docs/interfaces/index.PBMPanoGainmap.html +6 -0
  125. package/docs/interfaces/index.PBMPanoPicture.html +9 -8
  126. package/docs/interfaces/index.PBMRefinedScreen.html +2 -2
  127. package/docs/interfaces/index.PanoCircleMeshCustomOptions.html +2 -2
  128. package/docs/interfaces/index.PanoCircleMeshInterface.html +1 -1
  129. package/docs/interfaces/index.PanoEvent.html +2 -2
  130. package/docs/interfaces/index.PanoTextureEvent.html +2 -2
  131. package/docs/interfaces/index.PanoramaControllerCustomInitArgs.html +9 -9
  132. package/docs/interfaces/index.PanoramaLikeControllerCustomInitArgs.html +1 -1
  133. package/docs/interfaces/index.ParameterMaterialValue.html +42 -37
  134. package/docs/interfaces/index.ParameterTilesetValue.html +15 -15
  135. package/docs/interfaces/index.ParameterValue.html +56 -51
  136. package/docs/interfaces/index.Pose.html +1 -1
  137. package/docs/interfaces/index.RenderEvent.html +2 -2
  138. package/docs/interfaces/index.ResolvedParameterValue.html +56 -51
  139. package/docs/interfaces/index.State.html +1 -1
  140. package/docs/interfaces/index.StateEvent.html +2 -2
  141. package/docs/interfaces/index.TextureOptions.html +1 -1
  142. package/docs/interfaces/index.TilesetOptions.html +7 -2
  143. package/docs/interfaces/index.TopviewControllerCustomInitArgs.html +1 -1
  144. package/docs/interfaces/index.VRPanoramaControllerCustomInitArgs.html +37 -0
  145. package/docs/interfaces/index.ViewLayer.html +23 -21
  146. package/docs/interfaces/index.WorkCubeHdrGainmapImage.html +10 -0
  147. package/docs/interfaces/index.WorkCubeImage.html +5 -9
  148. package/docs/interfaces/index.WorkImage.html +8 -12
  149. package/docs/interfaces/index.WorkInitial.html +8 -8
  150. package/docs/interfaces/index.WorkModel.html +8 -8
  151. package/docs/interfaces/index.WorkModelLayer.html +6 -6
  152. package/docs/interfaces/index.WorkObserver.html +23 -23
  153. package/docs/interfaces/index.WorkPanoramaJson.html +3 -2
  154. package/docs/interfaces/index.WorkTile.html +8 -12
  155. package/docs/interfaces/index.WorksEvent.html +2 -2
  156. package/docs/interfaces/index.XRControllerEvent.html +2 -2
  157. package/docs/interfaces/index.XRGestureEvent.html +2 -2
  158. package/docs/interfaces/index.XRSessionEvent.html +2 -2
  159. package/docs/modules/index.html +1 -1
  160. package/docs/types/index.ControllerCustomInitTypes.html +3 -2
  161. package/docs/types/index.ControllerEventTypes.html +25 -23
  162. package/docs/types/index.EventTypes.html +26 -26
  163. package/docs/types/index.Mode.html +2 -1
  164. package/docs/types/index.PBMCustomNodeTargetType.html +2 -0
  165. package/docs/types/index.ParseOptions.html +14 -8
  166. package/docs/variables/index.GSPLAT_PIPELINE_AUTO.html +2 -0
  167. package/docs/variables/index.GSPLAT_PIPELINE_RASTER_CPU_SORT.html +2 -0
  168. package/docs/variables/index.GSPLAT_PIPELINE_RASTER_GPU_SORT.html +2 -0
  169. package/docs/variables/index.PROXY_CONTROLLER_EVENT_NAMES.html +1 -1
  170. package/docs/variables/index.controllersDefaultInitArgs.html +1 -1
  171. package/five/application/controllers.d.ts +4 -0
  172. package/five/application/events.d.ts +1 -1
  173. package/five/application/five.d.ts +4 -1
  174. package/five/application/fiveInitArgs.d.ts +13 -0
  175. package/five/application/mode.d.ts +2 -0
  176. package/five/cardboard/helper.d.ts +2 -0
  177. package/five/cardboard/index.d.ts +13 -0
  178. package/five/cardboard/sensor.d.ts +158 -0
  179. package/five/controllers/base.d.ts +3 -0
  180. package/five/controllers/events.d.ts +5 -3
  181. package/five/controllers/panorama.d.ts +2 -2
  182. package/five/controllers/vrPanorama.d.ts +56 -0
  183. package/five/core/internalWebGPURenderer.d.ts +16 -0
  184. package/five/core/panoVideo.d.ts +4 -1
  185. package/five/core/tiling.d.ts +40 -9
  186. package/five/gaussian-splatting/gpu-sort/prefixSumKernel.d.ts +65 -0
  187. package/five/gaussian-splatting/gpu-sort/radixSortModule.d.ts +128 -0
  188. package/five/gaussian-splatting/gpu-sort/shaders/prefixSum.d.ts +2 -0
  189. package/five/gaussian-splatting/gpu-sort/shaders/radixHistogram.d.ts +2 -0
  190. package/five/gaussian-splatting/gpu-sort/shaders/radixReorder.d.ts +2 -0
  191. package/five/gaussian-splatting/gpu-sort/shaders/sortKeygen.d.ts +2 -0
  192. package/five/gaussian-splatting/gpu-sort/sortAdapter.d.ts +234 -0
  193. package/five/gaussian-splatting/pipelines/cpuSortPipeline.d.ts +159 -0
  194. package/five/gaussian-splatting/pipelines/gpuSortPipeline.d.ts +98 -0
  195. package/five/gaussian-splatting/pipelines/gsplatPipeline.d.ts +104 -0
  196. package/five/gaussian-splatting/pipelines/pipelineMode.d.ts +42 -0
  197. package/five/gaussian-splatting/pipelines/sortThrottle.d.ts +45 -0
  198. package/five/index.d.ts +4 -1
  199. package/five/index.js +272 -269
  200. package/five/index.mjs +7183 -4546
  201. package/five/meshes/panoCircleMeshCustom.d.ts +1 -0
  202. package/five/model/index.d.ts +1 -1
  203. package/five/model/materials/nodes/pbmMeshBasicNodeMaterial.d.ts +2 -0
  204. package/five/model/materials/nodes/pbmMeshPanoOnlyNodeMaterial.d.ts +2 -0
  205. package/five/model/materials/nodes/pbmMeshPhongNodeMaterial.d.ts +2 -0
  206. package/five/model/materials/nodes/pbmMeshPhysicalNodeMaterial.d.ts +2 -0
  207. package/five/model/materials/pbmGaussianSplattingNodeMaterial.d.ts +4 -0
  208. package/five/model/materials/pbmMaterial.d.ts +268 -5
  209. package/five/model/materials/tsl/defines.d.ts +8 -2
  210. package/five/model/materials/tsl/outputBuilder.d.ts +8 -15
  211. package/five/model/materials/tsl/panoColor.d.ts +8 -2
  212. package/five/model/materials/tsl/utils.d.ts +13 -0
  213. package/five/model/objects/pbmGaussianSplattingObject.d.ts +9 -0
  214. package/five/model/objects/pbmGaussianSplattingRenderMesh.d.ts +67 -101
  215. package/five/model/parameter.d.ts +13 -1
  216. package/five/model/tile3d/index.d.ts +2 -0
  217. package/five/model/tile3d/tileset.d.ts +5 -0
  218. package/five/model/tile3d/trajectory-content.d.ts +53 -0
  219. package/five/texture/loader.d.ts +6 -0
  220. package/five/types/cube.d.ts +0 -1
  221. package/five/utils/detector.d.ts +11 -1
  222. package/five/utils/error.d.ts +1 -0
  223. package/five/utils/event.d.ts +17 -1
  224. package/five/utils/gainmap-data.d.ts +23 -0
  225. package/five/work/index.d.ts +1 -1
  226. package/five/work/looseWorkType.d.ts +2 -1
  227. package/five/work/work.d.ts +30 -7
  228. package/five/work/workJsonType.d.ts +2 -1
  229. package/gltf-loader/gltf-object.d.ts +17 -0
  230. package/gltf-loader/index.d.ts +45 -0
  231. package/gltf-loader/index.js +255 -0
  232. package/gltf-loader/index.mjs +302 -0
  233. package/package.json +6 -1
  234. package/plugins/BackgroundPlugin/Controller.d.ts +20 -0
  235. package/plugins/BackgroundPlugin/index.d.ts +5 -0
  236. package/plugins/BackgroundPlugin/typings.d.ts +44 -0
  237. package/plugins/CSS2DPlugin/Controller.d.ts +59 -0
  238. package/plugins/CSS2DPlugin/index.d.ts +5 -0
  239. package/plugins/CSS2DPlugin/typing.d.ts +31 -0
  240. package/plugins/CSS3DPlugin/Controller.d.ts +64 -0
  241. package/plugins/CSS3DPlugin/index.d.ts +5 -0
  242. package/plugins/CSS3DPlugin/typing.d.ts +33 -0
  243. package/plugins/FloorplanPlugin/Controller.d.ts +100 -0
  244. package/plugins/FloorplanPlugin/index.d.ts +5 -0
  245. package/plugins/FloorplanPlugin/render/assets.d.ts +9 -0
  246. package/plugins/FloorplanPlugin/render/index.d.ts +35 -0
  247. package/plugins/FloorplanPlugin/render/isPointInPolygon.d.ts +5 -0
  248. package/plugins/FloorplanPlugin/render/renderFloor.d.ts +22 -0
  249. package/plugins/FloorplanPlugin/render/roomLabelVisibility.d.ts +10 -0
  250. package/plugins/FloorplanPlugin/typing.d.ts +156 -0
  251. package/plugins/FloorplanPlugin/typings/floorplanData.d.ts +112 -0
  252. package/plugins/FloorplanPlugin/typings/floorplanServerData.d.ts +78 -0
  253. package/plugins/FloorplanPlugin/typings/index.d.ts +2 -0
  254. package/plugins/FloorplanPlugin/utils/changeMode.d.ts +5 -0
  255. package/plugins/FloorplanPlugin/utils/changeModelCanvasOpacity.d.ts +6 -0
  256. package/plugins/FloorplanPlugin/utils/correctFiveState.d.ts +11 -0
  257. package/plugins/FloorplanPlugin/utils/equal.d.ts +9 -0
  258. package/plugins/FloorplanPlugin/utils/filter.d.ts +8 -0
  259. package/plugins/FloorplanPlugin/utils/fiveModelLoad.d.ts +6 -0
  260. package/plugins/FloorplanPlugin/utils/formatData.d.ts +6 -0
  261. package/plugins/FloorplanPlugin/utils/formatPosition.d.ts +33 -0
  262. package/plugins/FloorplanPlugin/utils/getDistanceFromModel.d.ts +6 -0
  263. package/plugins/FloorplanPlugin/utils/getPxmm.d.ts +19 -0
  264. package/plugins/FloorplanPlugin/utils/isTruelyObject.d.ts +4 -0
  265. package/plugins/FloorplanPlugin/utils/nearlyEqual.d.ts +8 -0
  266. package/plugins/FloorplanPlugin/utils/to.d.ts +5 -0
  267. package/plugins/Object3DHelperPlugin/Controller.d.ts +99 -0
  268. package/plugins/Object3DHelperPlugin/Controllers/BaseController.d.ts +142 -0
  269. package/plugins/Object3DHelperPlugin/Controllers/BoundingBoxController.d.ts +16 -0
  270. package/plugins/Object3DHelperPlugin/Controllers/MoveController.d.ts +66 -0
  271. package/plugins/Object3DHelperPlugin/Controllers/RotateController.d.ts +61 -0
  272. package/plugins/Object3DHelperPlugin/FiveControllerWrapper.d.ts +17 -0
  273. package/plugins/Object3DHelperPlugin/Helper/BaseHelper.d.ts +97 -0
  274. package/plugins/Object3DHelperPlugin/Helper/BoundingBoxHelper.d.ts +16 -0
  275. package/plugins/Object3DHelperPlugin/Helper/MoveHelper.d.ts +37 -0
  276. package/plugins/Object3DHelperPlugin/Helper/RotateHelper.d.ts +93 -0
  277. package/plugins/Object3DHelperPlugin/constant.d.ts +27 -0
  278. package/plugins/Object3DHelperPlugin/index.d.ts +6 -0
  279. package/plugins/Object3DHelperPlugin/typing.d.ts +143 -0
  280. package/plugins/Object3DHelperPlugin/utils/ArrowGroup.d.ts +22 -0
  281. package/plugins/Object3DHelperPlugin/utils/CenterHandle.d.ts +23 -0
  282. package/plugins/Object3DHelperPlugin/utils/PlaneHandle.d.ts +19 -0
  283. package/plugins/Object3DHelperPlugin/utils/calculateScaleByCamera.d.ts +5 -0
  284. package/plugins/Object3DHelperPlugin/utils/cameraHooks.d.ts +3 -0
  285. package/plugins/Object3DHelperPlugin/utils/direction.d.ts +14 -0
  286. package/plugins/Object3DHelperPlugin/utils/getMouseRaycaster.d.ts +5 -0
  287. package/plugins/Object3DHelperPlugin/utils/getOrthographicCameraDirection.d.ts +8 -0
  288. package/plugins/Object3DHelperPlugin/utils/setObjectQuaternion.d.ts +8 -0
  289. package/plugins/Object3DHelperPlugin/utils/solidGuide.d.ts +27 -0
  290. package/plugins/Object3DHelperPlugin/utils/tipsDom.d.ts +8 -0
  291. package/plugins/PanoAnimePlugin/Controller.d.ts +49 -0
  292. package/plugins/PanoAnimePlugin/index.d.ts +5 -0
  293. package/plugins/PanoAnimePlugin/typing.d.ts +37 -0
  294. package/plugins/index.d.ts +6 -0
  295. package/plugins/index.js +393 -3
  296. package/plugins/index.mjs +3421 -92
  297. package/plugins/thirdParty/CSS2DRenderer.d.ts +37 -0
  298. package/plugins/thirdParty/CSS3DRenderer.d.ts +45 -0
  299. package/plugins/thirdParty/OrbitControls.d.ts +78 -0
  300. package/plugins/thirdParty/domevents.d.ts +36 -0
  301. package/plugins/utils/clamp.d.ts +2 -0
  302. package/plugins/utils/uuid.d.ts +2 -0
  303. package/react/index.js +2 -2
  304. package/react/index.mjs +2 -2
  305. package/umd/five-gltf-loader.js +255 -0
  306. package/umd/five-plugins.js +461 -3
  307. package/umd/five-react.js +2 -2
  308. package/umd/five.js +350 -347
  309. package/docs/interfaces/index.PBMHDRConfig.html +0 -12
  310. package/five/gaussian-splatting/worker/dataWorker.d.ts +0 -1
  311. package/five/three-version-check.d.ts +0 -1
  312. package/five/utils/hdr-data.d.ts +0 -13
  313. package/five/utils/shaderContentFix.d.ts +0 -7
@@ -0,0 +1,159 @@
1
+ import * as THREE from 'three/webgpu';
2
+ import { GSplatPipeline, type PipelineFrameParams, type PipelineIndexSource } from './gsplatPipeline';
3
+ /**
4
+ * CPU 排序管线(Pipeline_Mode = `RASTER_CPU_SORT`)
5
+ *
6
+ * 对现有「Sort_Worker + WASM `_sort` + Reorder_CPU」链路的**封装搬移**:算法、数据流、
7
+ * generation 配对与 `splatIndex` 写入逻辑与改造前逐项一致(Requirement 9.1 / 9.2),
8
+ * 只是从 `PBMGaussianSplattingRenderMesh` 移入本类,使 Render_Mesh 只依赖
9
+ * `GSplatPipeline` 契约而不直接引用 Sort_Worker。
10
+ *
11
+ * 数据流:
12
+ * 1. `requestSort`:`assembler.extractSortInputs()`(世界坐标 + transformIndex)与
13
+ * `transformStore.transforms`(20 float/对象)投给 worker,并带上 viewProj;
14
+ * 2. worker 回传 `depthIndex` → `applyDepthIndex` 存为 `orderData` 并按 generation 取回布局快照;
15
+ * 3. `frameUpdate`:`applyReorderCPU` 用「旧布局 → 当前布局」段表 remap,紧凑写入
16
+ * `splatIndex` 实例属性(tile 增删时保持排序与大纹理映射一致、不闪烁)。
17
+ *
18
+ * 排序是**异步**的:本帧投递、后续帧消费结果,因此不依赖同帧的 `assembler.assemble()`。
19
+ *
20
+ * 能力:`usesGpuSort` 沿用基类默认 `false`(Render_Mesh 因此保留 Reorder_CPU 与
21
+ * Layout_Generation 路径),`indexSource` 为 `splatIndex` 实例属性(Requirement 10.5)。
22
+ */
23
+ export declare class CpuSortPipeline extends GSplatPipeline {
24
+ private sortWorker;
25
+ /**
26
+ * 「已产出新排序结果、需要重绘」的回调。
27
+ *
28
+ * 搬移前这里是 `renderMesh.needsRender = true`;worker 回传发生在渲染循环之外,而 five 是
29
+ * 按需渲染,必须主动申请下一帧,否则结果要等到下次有人触发渲染才生效。由 Render_Mesh 在
30
+ * 构造管线时注入 `() => { this.needsRender = true; }` 以保持原行为。
31
+ */
32
+ private readonly onNeedsRender?;
33
+ /**
34
+ * splatIndex 实例属性:每实例一个全局点索引 P(CPU reorder 后紧凑写入)。材质顶点用
35
+ * `attribute('splatIndex')` 取点。初始容量 1,随排序结果按 2 的幂扩容
36
+ * (`ensureSplatIndexCapacity`)。
37
+ */
38
+ private splatIndex;
39
+ /** splatIndex 实例属性的当前容量(点数);不足时按 2 的幂扩容。 */
40
+ private splatIndexCapacity;
41
+ /** 单调递增的排序请求代;每代记录其所基于的布局快照,回传时按代取回(防异步错配)。 */
42
+ private sortGeneration;
43
+ /** 当前排序输入是否已上传给 worker(场景/transform 变化时置 false 触发重传)。 */
44
+ private sortDataUploaded;
45
+ /**
46
+ * Sort_Worker 是否已进入不可恢复的失败态(WASM 加载失败)。一旦置位,`instanceCount`
47
+ * 恒为 0,Render_Mesh 持续降级为空绘制而不中断渲染循环(Requirement 16.4)。
48
+ */
49
+ private sortWorkerFailed;
50
+ /** 当前 order 长度(= 最近一次排序回传的 depthIndex 长度 = 该次排序时 vertexCount)。 */
51
+ private orderCount;
52
+ /**
53
+ * 最近一次排序回传的 depthIndex 副本(基于 orderBaseSnapshot 布局的全局点索引 P 的排列)。
54
+ * 作为 CPU reorder 的输入源:`applyReorderCPU` 用「orderBaseSnapshot → 当前布局」段表把它
55
+ * remap 到当前布局,紧凑写入 splatIndex 实例属性,从而在 tile 增删(布局变化)时保持排序与
56
+ * 大纹理映射一致、不闪烁。
57
+ */
58
+ private orderData;
59
+ /** order 内容变化(新排序回传)→ 需重跑 CPU reorder。 */
60
+ private orderDirty;
61
+ /** 布局变化(LOD 增删 / 场景重建)→ 需以新布局(新段表)重跑 CPU reorder。 */
62
+ private layoutDirty;
63
+ /** 当前存活实例数(= 最近一次 applyReorderCPU 写入 splatIndex 的点数)。 */
64
+ private aliveCount;
65
+ /** 当前 order 所基于的布局快照(= 该次排序发起时的布局)。 */
66
+ private orderBaseSnapshot;
67
+ /** generation → 该次排序发起时的布局快照。 */
68
+ private snapshotByGen;
69
+ /** viewProj 计算用临时矩阵(避免每帧分配)。 */
70
+ private scratchViewProj;
71
+ constructor(renderer: THREE.WebGPURenderer, onNeedsRender?: () => void);
72
+ /**
73
+ * 本帧可绘制实例数 = CPU reorder 写入的存活点数。
74
+ *
75
+ * worker 处于 WASM 失败态、或尚无有效排序结果(`orderCount <= 0`)时为 0,
76
+ * 与改造前 Render_Mesh 空绘制降级门中属于本管线的两项判据逐项一致
77
+ * (数据纹理是否就绪等资源判据仍留在 Render_Mesh 侧)。
78
+ */
79
+ get instanceCount(): number;
80
+ /**
81
+ * 绘制索引来源:`splatIndex` 实例属性。
82
+ *
83
+ * 注意扩容会**换掉属性对象**(`ensureSplatIndexCapacity` 新建更大的
84
+ * `InstancedBufferAttribute`),因此 Render_Mesh 需每帧比较身份,变化时重新
85
+ * `geometry.setAttribute('splatIndex', attribute)` 并同步 `_maxInstanceCount = attribute.count`。
86
+ */
87
+ get indexSource(): PipelineIndexSource;
88
+ /**
89
+ * 排序输入变脏(对象集合变化、某对象 transform 变化、管线刚切换)。
90
+ *
91
+ * 除基类的脏标记外还要清 `sortDataUploaded`(下次排序必定重传 worker 输入)并置
92
+ * `layoutDirty`(以当前布局的新段表重跑 reorder)。搬移前 `sortDataUploaded=false` 与
93
+ * `layoutDirty=true` 只在场景重建时置位、transform 变化只置 `sortInputsDirty`;此处合并后
94
+ * 输出不变:transform 变化帧本就因 `inputsDirty` 走 `postSortData`,且布局未变时段表
95
+ * 与上次等价,reorder 结果逐点相同。
96
+ */
97
+ markInputsDirty(): void;
98
+ /**
99
+ * 请求排序:必要时重传排序输入,然后投递本帧 viewProj。
100
+ * **不做节流判断**——是否调用由外层 Sort_Throttle 决定(Requirement 7.1)。
101
+ */
102
+ requestSort(ctx: PipelineFrameParams): void;
103
+ /**
104
+ * 每帧:order 或布局变化时把排序结果修正到当前布局(防 tile 增删闪烁)。
105
+ * 相机静止帧不重跑。
106
+ */
107
+ frameUpdate(ctx: PipelineFrameParams): void;
108
+ /** 终止 worker 并清理排序状态引用(Requirement 10.8)。 */
109
+ dispose(): void;
110
+ /**
111
+ * 确保 splatIndex 实例属性容量 >= requiredCount;不足时按 2 的幂扩容(保留旧内容)。
112
+ * 返回当前(可能是新建的)属性。
113
+ */
114
+ private ensureSplatIndexCapacity;
115
+ /**
116
+ * 把排序输入喂给 Sort_Worker:位置 + transformIndex 来自 assembler.extractSortInputs(),
117
+ * 变换矩阵来自 transformStore.transforms(20 float/对象,与 sort.cpp `_sort` 步长一致)。
118
+ * 每次上传 ++generation,回传时据此丢弃过期结果。
119
+ */
120
+ private postSortData;
121
+ /**
122
+ * 应用排序结果:
123
+ * 1. 保存 depthIndex 副本到 `orderData`(作为 CPU reorder 的输入源;实际 remap 在
124
+ * frameUpdate 中由 applyReorderCPU 完成,此处不写 splatIndex)。
125
+ * 2. 置 orderDirty(新排序回传 → 需重跑 CPU reorder)。
126
+ * 3. 按 generation 取回该次排序真正基于的布局快照,作为 reorder 基准,并清理更旧快照
127
+ * (worker 结果按 generation 单调返回,更旧快照不会再用到)。
128
+ * 保证:每次回传的 depthIndex 恒为「该代排序时 totalPoints」的一个排列,点数守恒。
129
+ */
130
+ private applyDepthIndex;
131
+ /** 捕获当前布局:assembler.regions 的 {object, start, count}(顺序即全局点区间顺序)。 */
132
+ private snapshotLayout;
133
+ /**
134
+ * 用「排序时旧布局 → 当前布局」构造 reorder 段表:
135
+ * - 存活对象:{ oldStart, oldEnd, delta = 当前 start - 旧 start, removed: false }
136
+ * - 被删对象:{ oldStart, oldEnd, delta: 0, removed: true }
137
+ * 段按 oldStart 升序(base 已按 start 升序)、区间不重叠;相邻同类段(同 removed 且
138
+ * removed 或 delta 相同、且首尾相接)合并以压低段数(供 applyReorderCPU 二分查找)。
139
+ */
140
+ private buildSegments;
141
+ /**
142
+ * 二分查找覆盖全局点索引 P 的段(段按 oldStart 升序、区间 [oldStart,oldEnd) 连续无重叠)。
143
+ * 找不到(P 越界,理论上不会发生)返回 null。
144
+ */
145
+ private findSegment;
146
+ /**
147
+ * CPU reorder:把最近一次排序回传的 depthIndex(orderData,基于 orderBaseSnapshot 旧布局的
148
+ * 全局点索引 P 的排列)用「旧布局 → 当前布局」段表 remap 到当前布局,紧凑写入 splatIndex 实例属性:
149
+ * - 存活对象点 P → 写入 P + delta;
150
+ * - 被删对象点(removed)→ 跳过(不写,实例数不计)。
151
+ * 从而在 tile 增删(布局变化)时保持排序顺序与大纹理映射一致、不闪烁(等价 five 的 ReorderPass)。
152
+ * 结果存活点数写入 `aliveCount`,由 Render_Mesh 经 `instanceCount` 取用。
153
+ *
154
+ * 搬移说明:原实现在此顺带写 `material.numPoints = assembler.totalPoints`(shader 端
155
+ * `P >= numPoints` 的保护性剔除);该赋值与 `syncMaterialTextures` 中的同名赋值取值相同,
156
+ * 且新流程中 `syncMaterialTextures` 在本方法之前执行,故此处不再重复写材质(管线不触碰材质)。
157
+ */
158
+ private applyReorderCPU;
159
+ }
@@ -0,0 +1,98 @@
1
+ import * as THREE from 'three/webgpu';
2
+ import { GSplatPipeline, type PipelineFrameParams, type PipelineIndexSource } from './gsplatPipeline';
3
+ /**
4
+ * GPU 排序管线(Pipeline_Mode = `RASTER_GPU_SORT`)
5
+ *
6
+ * 组合 `SortAdapter` + `RadixSortModule`:一次 `requestSort` 在**同一帧内**完成
7
+ * Distance_Range 计算 → keygen → radix sort → Order_Texture 写入(Requirement 12.1 / 12.2),
8
+ * 结果经 Order_Texture 供材质顶点阶段 `textureLoad` 取点。
9
+ *
10
+ * 与 CPU 管线的关键差异:
11
+ * - 排序是**同步生效**的(本帧 submit、本帧绘制读取),因此没有 generation 配对、没有
12
+ * Reorder_CPU、没有 `splatIndex` 上传(Requirement 12.4);
13
+ * - 因为同帧生效,也就**不需要主动请求额外的 Render_Frame**(Requirement 12.3)——
14
+ * `CpuSortPipeline` 那个 `onNeedsRender` 回调在这里没有对应物;
15
+ * - Data_Texture 必须在排序前就位,这由 Render_Mesh 把 `assembler.assemble()` 提前到排序之前
16
+ * 保证(Requirement 12.5)。
17
+ *
18
+ * 不可用性(`unusable`)汇聚三个来源,经 `checkLimits` 统一走「解析为 `RASTER_CPU_SORT` →
19
+ * 下一帧 `syncPipelineMode` 切换」这条降级路径(Requirement 15.4 / 16.1 / 16.3),
20
+ * 本类内部不写单独的降级分支。
21
+ */
22
+ export declare class GpuSortPipeline extends GSplatPipeline {
23
+ /** 原生设备。取不到(非 WebGPU 后端)时管线直接进入失败态。 */
24
+ private readonly device;
25
+ /** 3DGS ↔ 通用排序模块的对接层。构造失败或 device lost 后为 null。 */
26
+ private sortAdapter;
27
+ /** compute pipeline(keygen / radix sort / prefix sum)创建失败(Requirement 16.1)。 */
28
+ private _pipelineCreateFailed;
29
+ /** `GPUDevice` 触发 lost 事件(Requirement 16.3)。 */
30
+ private _deviceLost;
31
+ /** `dispose()` 之后忽略迟到的 `device.lost` 回调,避免在已释放对象上写状态。 */
32
+ private _disposed;
33
+ /** 是否已产出过至少一次有效排序结果(Order_Texture 已写入)。 */
34
+ private _hasSorted;
35
+ /** 最近一次成功排序时的 Total_Points(= Order_Texture 当前承载的点数)。 */
36
+ private _sortedPoints;
37
+ /** 本帧 Total_Points,由 `frameUpdate` 记录。初值 0 使首个 `frameUpdate` 之前不绘制。 */
38
+ private _frameTotalPoints;
39
+ /** 首次排序前充当 `indexSource` 的占位纹理,按需懒建。 */
40
+ private placeholderTexture;
41
+ constructor(renderer: THREE.WebGPURenderer);
42
+ /** 自行在 GPU 上排序:Render_Mesh 因此跳过 Reorder_CPU、Layout_Generation 与 `splatIndex` 写入。 */
43
+ get usesGpuSort(): boolean;
44
+ /**
45
+ * 管线是否已不可用。为真时 `checkLimits` 返回「GPU 管线已失效」,
46
+ * 下一帧的 `syncPipelineMode` 把模式解析为 `RASTER_CPU_SORT` 并完成切换。
47
+ *
48
+ * 三个来源:
49
+ * - `_pipelineCreateFailed`:compute pipeline 创建失败(Requirement 16.1)
50
+ * - `_deviceLost`:`GPUDevice` 丢失(Requirement 16.3)
51
+ * - `sortAdapter.unusable`:keygen dispatch 规模超设备单维上限。keygen shader 只用 `gid.x`
52
+ * 编址,无法像排序模块那样退化为 2D dispatch,其承载上限(约 1677 万点)低于
53
+ * `checkLimits` 按 2D dispatch 允许的规模,所以这一项必须由本 getter 补上——
54
+ * `checkLimits` 自己检不出来。
55
+ */
56
+ get unusable(): boolean;
57
+ /**
58
+ * 本帧可绘制实例数。
59
+ *
60
+ * 资源就绪且已有排序结果时为 Total_Points(Requirement 6.5),否则 0。取
61
+ * `min(本帧点数, 最近一次排序的点数)` 是一层保护:若布局在排序后变大而本帧尚未重排,
62
+ * 多出来的实例在 Order_Texture 里没有对应条目,不绘制它们比绘制越界读到的 0 更正确。
63
+ *
64
+ * 返回 0 的情形:管线不可用(Requirement 16.1 / 16.3)、尚无有效排序结果
65
+ * (Requirement 8.10,含刚切换到本管线的那几帧)、Total_Points 为 0(Requirement 16.5)。
66
+ */
67
+ get instanceCount(): number;
68
+ /**
69
+ * 绘制索引来源:Order_Texture(Requirement 10.6)。
70
+ *
71
+ * Order_Texture 在点数变化时会被 `SortAdapter` 重建(换掉纹理对象),所以 Render_Mesh 需每帧
72
+ * 取用并按引用同步给材质,不能只在首帧绑定一次。
73
+ */
74
+ get indexSource(): PipelineIndexSource;
75
+ /**
76
+ * 请求排序:自建 encoder 录入整条排序链路,一次 submit,同帧生效。
77
+ *
78
+ * **不做节流判断**——是否调用由外层 Sort_Throttle 决定(Requirement 7.1)。
79
+ * 也不请求额外的 Render_Frame:结果对本帧绘制即刻可见,five 的按需渲染语义不变
80
+ * (Requirement 12.3)。
81
+ *
82
+ * 用**自建 encoder** 而不是渲染器的当前 encoder:three 的渲染 encoder 生命周期不对外开放,
83
+ * 且排序必须整体排在本帧绘制命令之前。独立提交靠队列顺序保证这一点。
84
+ */
85
+ requestSort(ctx: PipelineFrameParams): void;
86
+ /**
87
+ * 每帧记录本帧点数,供 `instanceCount` 判定。
88
+ *
89
+ * GPU 路径没有 CPU 路径那样的「把异步结果修正到当前布局」工作(Order_Texture 在
90
+ * `requestSort` 里已就地写好),所以这里只有一次赋值。
91
+ */
92
+ frameUpdate(ctx: PipelineFrameParams): void;
93
+ /** 释放全部 GPU 资源:`SortAdapter`(含 Key_Buffer、uniform、Order_Texture、排序模块)与占位纹理。 */
94
+ dispose(): void;
95
+ /** 释放 `SortAdapter` 并清零排序状态,使 `instanceCount` 立即回到 0。 */
96
+ private releaseAdapter;
97
+ private ensurePlaceholderTexture;
98
+ }
@@ -0,0 +1,104 @@
1
+ import type * as THREE from 'three/webgpu';
2
+ import type { Camera } from '../../core/camera';
3
+ import type { PBMGaussianSplattingObject } from '../../model/objects/pbmGaussianSplattingObject';
4
+ import type { SplatAssembler } from '../splatAssembler';
5
+ import type { TransformStore } from '../transformStore';
6
+ /**
7
+ * 绘制索引来源:管线告诉 Render_Mesh「第 i 个实例要绘制的全局点索引 P 从哪里取」。
8
+ * - `attribute` :CPU 排序路径,P 来自 `splatIndex` 实例属性
9
+ * - `orderTexture`:GPU 排序路径,P 来自 R32UI 的 Order_Texture
10
+ *
11
+ * 新增管线实现时在此联合类型上扩展分支,Render_Mesh 按 `kind` 绑定,不做 `instanceof` 判断。
12
+ */
13
+ export type PipelineIndexSource = {
14
+ kind: 'attribute';
15
+ attribute: THREE.InstancedBufferAttribute;
16
+ } | {
17
+ kind: 'orderTexture';
18
+ texture: THREE.Texture;
19
+ };
20
+ /**
21
+ * 每帧调用参数(params bag)。
22
+ *
23
+ * Render_Mesh 持有**唯一一个**实例,每帧填字段后传给管线,以避免每个 Render_Frame 产生新分配
24
+ * (Requirement 10.7)。因此实现方**不得保留该对象或其字段的引用**:字段内容在下一帧会被覆写,
25
+ * 需要跨帧使用的数据必须在调用内自行取值或拷贝。
26
+ */
27
+ export interface PipelineFrameParams {
28
+ /** 本帧相机(five Camera,含 `matrixWorld` 与投影矩阵)。 */
29
+ camera: Camera;
30
+ /** 当前布局中的 3DGS 对象,顺序与 assembler / transformStore 一致。 */
31
+ objects: readonly PBMGaussianSplattingObject[];
32
+ /** 大数据纹理组装器,本帧已完成 assemble。 */
33
+ assembler: SplatAssembler;
34
+ /** 变换存储(GPU 纹理 + 排序用数组)。 */
35
+ transformStore: TransformStore;
36
+ /** 当前布局总点数(`assembler.totalPoints`)。 */
37
+ totalPoints: number;
38
+ }
39
+ /**
40
+ * 3DGS 渲染管线抽象基类。
41
+ *
42
+ * Render_Mesh 唯一依赖的契约(Requirement 10.1 / 10.2):排序、绘制索引来源、绘制实例数、
43
+ * 材质取点方式、资源释放。按 Pipeline_Mode 在实现间整体切换,Render_Mesh 不引用 Sort_Worker、
44
+ * Radix_Sort_Module、Sort_Adapter 或任何 WebGPU 资源。
45
+ *
46
+ * 采用**抽象基类而非纯接口**(Requirement 10.3):公共状态(`renderer` / `inputsDirty`)与
47
+ * 能力 getter 上提到基类,`markInputsDirty` / `requestSort` / `frameUpdate` / `dispose` 一律给
48
+ * 无副作用默认实现,使 Render_Mesh 可无条件调用而不必按实现类型分支。
49
+ *
50
+ * 后续阶段新增管线(如 `COMPUTE_GPU_SORT` 软光栅化)只需继承本类并在 Pipeline_Mode 解析里加一个
51
+ * 分支,Render_Mesh 的消费代码与切换机制不用改(Requirement 10.9)。
52
+ */
53
+ export declare abstract class GSplatPipeline {
54
+ /** three 渲染器。取原生 `GPUDevice` / `GPUTexture` 的入口,由各实现按需使用。 */
55
+ protected readonly renderer: THREE.WebGPURenderer;
56
+ /**
57
+ * 排序输入是否为脏(对象集合变化、某对象 transform 变化、管线刚切换)。
58
+ * 由 `markInputsDirty()` 置位,实现在完成排序后自行清除。初值为 true,使首帧必定排序。
59
+ */
60
+ protected inputsDirty: boolean;
61
+ constructor(renderer: THREE.WebGPURenderer);
62
+ /**
63
+ * 是否自行在 GPU 上完成排序。
64
+ * 为 true 时 Render_Mesh 跳过 Reorder_CPU、Layout_Generation 与 `splatIndex` 写入。
65
+ */
66
+ get usesGpuSort(): boolean;
67
+ /**
68
+ * 材质是否应启用 Order_Texture 取点。
69
+ * 由 `usesGpuSort` 派生,实现类通常无需单独覆盖。
70
+ */
71
+ get requiresOrderTexture(): boolean;
72
+ /**
73
+ * 本帧可绘制实例数。资源未就绪、排序失败或尚无有效排序结果时返回 0
74
+ * (Render_Mesh 据此降级为空绘制而不中断渲染循环)。
75
+ */
76
+ abstract get instanceCount(): number;
77
+ /** 绘制索引来源。Render_Mesh 按 `kind` 绑定 Order_Texture 或 `splatIndex` 实例属性。 */
78
+ abstract get indexSource(): PipelineIndexSource;
79
+ /**
80
+ * 通知管线排序输入已变化(布局或 transform 变化、管线刚切换)。
81
+ * 基类仅记录脏标记;实现可覆盖以追加动作(如令 worker 重传输入),覆盖时需调用 `super`。
82
+ */
83
+ markInputsDirty(): void;
84
+ /**
85
+ * 请求排序。**不做节流判断**——是否调用由外层 Sort_Throttle 决定(Requirement 7.1)。
86
+ *
87
+ * 基类为无副作用空实现,使将来某个无需每帧排序的管线(例如全静态场景的预排序管线)可直接继承。
88
+ *
89
+ * @param _ctx 每帧参数,跨帧复用,不得保留引用。
90
+ */
91
+ requestSort(_ctx: PipelineFrameParams): void;
92
+ /**
93
+ * 每帧无条件调用(排序之后、绘制之前),供实现同步材质参数、上传实例属性等。
94
+ * 基类为无副作用空实现。
95
+ *
96
+ * @param _ctx 每帧参数,跨帧复用,不得保留引用。
97
+ */
98
+ frameUpdate(_ctx: PipelineFrameParams): void;
99
+ /**
100
+ * 释放管线持有的全部资源(Worker、GPU buffer、纹理等,Requirement 10.8)。
101
+ * 基类为无副作用空实现。
102
+ */
103
+ dispose(): void;
104
+ }
@@ -0,0 +1,42 @@
1
+ import type * as THREE from 'three/webgpu';
2
+ /** 由设备能力自动解析。永不作为 Current_Pipeline_Mode 出现。 */
3
+ export declare const GSPLAT_PIPELINE_AUTO = 0;
4
+ /** TSL 硬件光栅化 + wasm worker 排序(现状,WebGL2 路径)。 */
5
+ export declare const GSPLAT_PIPELINE_RASTER_CPU_SORT = 1;
6
+ /** TSL 硬件光栅化 + GPU compute radix sort。 */
7
+ export declare const GSPLAT_PIPELINE_RASTER_GPU_SORT = 2;
8
+ /**
9
+ * GPU 管线的可用性探针。
10
+ *
11
+ * 只声明 `checkLimits` 真正需要的那一个成员,避免 `pipelineMode.ts` 反向依赖
12
+ * `GSplatPipeline` / `GpuSortPipeline` 的具体类型(`GpuSortPipeline` 的
13
+ * `unusable` getter 结构上满足这个约定)。
14
+ */
15
+ export interface GSplatPipelineUsability {
16
+ readonly unusable?: boolean;
17
+ }
18
+ /**
19
+ * 按当前点数检查设备 limits 是否支撑 GPU 排序管线。
20
+ *
21
+ * @param device 已就绪的 `GPUDevice`
22
+ * @param totalPoints 当前场景的 Total_Points
23
+ * @param activePipeline 当前生效的管线(可选)。其 `unusable` 为真时(compute pipeline
24
+ * 创建失败或 device lost)一并视为不可用,使运行期失败复用同一条降级路径。
25
+ * @returns 不可用时返回可读的原因字符串,可用时返回 `null`
26
+ */
27
+ export declare function checkLimits(device: GPUDevice, totalPoints: number, activePipeline?: GSplatPipelineUsability | null): string | null;
28
+ /**
29
+ * 把 Requested_Pipeline_Mode 解析为 Current_Pipeline_Mode。
30
+ *
31
+ * - `AUTO`:后端为 WebGPU、`GPUDevice` 就绪且 limits 通过时选 `RASTER_GPU_SORT`,否则 `RASTER_CPU_SORT`
32
+ * - 显式 `RASTER_GPU_SORT`:前提不满足时静默降级为 `RASTER_CPU_SORT`(不抛错)
33
+ * - 解析过程抛异常:`console.warn` 并返回 `RASTER_CPU_SORT`
34
+ *
35
+ * 返回值永不为 `GSPLAT_PIPELINE_AUTO`。
36
+ *
37
+ * @param requested Requested_Pipeline_Mode
38
+ * @param renderer 当前渲染器
39
+ * @param totalPoints 当前场景的 Total_Points,用于按实际规模检查 limits
40
+ * @param activePipeline 当前生效的管线,透传给 `checkLimits` 以纳入其 `unusable` 状态
41
+ */
42
+ export declare function resolvePipelineMode(requested: number, renderer: THREE.WebGPURenderer, totalPoints: number, activePipeline?: GSplatPipelineUsability | null): number;
@@ -0,0 +1,45 @@
1
+ import * as THREE from 'three/webgpu';
2
+ /**
3
+ * 排序节流器
4
+ *
5
+ * 只负责回答「本 Render_Frame 是否需要调用管线的排序」这一个问题:
6
+ * 不持有任何 GPU 资源,不引用排序模块,对 `GSplatPipeline` 的内部逻辑无侵入。
7
+ *
8
+ * 阈值语义与字段名沿用改造前 `PBMGaussianSplattingRenderMesh.shouldSort`,
9
+ * 使 `RASTER_CPU_SORT` 与 `RASTER_GPU_SORT` 两条管线的节流行为完全一致。
10
+ */
11
+ export declare class SortThrottle {
12
+ /** 平移增量阈值(世界单位):超过才重排。 */
13
+ sortCameraDistance: number;
14
+ /** 姿态相似度阈值(|quat 点积|):低于才重排(0.99 ≈ 约 16° 内不重排)。 */
15
+ sortCameraCoorient: number;
16
+ /** 最小重排间隔(ms):即使相机已明显变化也不超过此频率,0 = 不限。 */
17
+ sortMinIntervalMs: number;
18
+ /** 上次排序时的相机世界矩阵快照(尚未排序过时为 null)。 */
19
+ private prevMatrix;
20
+ /** 上次排序的时间戳(ms)。 */
21
+ private lastTime;
22
+ /** 是否已产生过至少一次排序结果。 */
23
+ private hasSorted;
24
+ /**
25
+ * 判定本帧是否需要排序。
26
+ *
27
+ * 判定顺序(与改造前实现一致,`inputsDirty` 优先于时间门):
28
+ * 1. 尚未排序过,或排序输入已脏(对象集合 / transform 变化)→ 必须排序。
29
+ * 数据变了不重排会用旧布局的索引访问新布局的数据。
30
+ * 2. 距上次排序不足 `sortMinIntervalMs` → 不排序。
31
+ * 3. 无相机快照(理论上被步骤 1 覆盖,仅作兜底)→ 排序。
32
+ * 4. 相机位移超过 `sortCameraDistance`,或姿态相似度低于 `sortCameraCoorient` → 排序。
33
+ *
34
+ * @param camera 当前帧相机
35
+ * @param inputsDirty 对象集合或某对象 transform 是否发生变化
36
+ */
37
+ shouldSort(camera: THREE.Camera, inputsDirty: boolean): boolean;
38
+ /** 记录本次排序:快照相机矩阵与时间戳。排序被实际发起后调用。 */
39
+ markSorted(camera: THREE.Camera): void;
40
+ /**
41
+ * 重置节流状态,使下一帧必定重排。
42
+ * 管线切换时调用(切换后的新管线尚无任何排序结果)。
43
+ */
44
+ reset(): void;
45
+ }
package/five/index.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  /// <reference types="./declare" />
2
2
 
3
- import "./three-version-check";
4
3
  import "./certificates/hardware";
5
4
  export * from './model';
6
5
  export * from "./work";
@@ -18,6 +17,8 @@ export { imageURL as defaultImageURLTransform, type ImageURLOptions, type ImageU
18
17
  export { imageSupport } from "./utils/imageSupport";
19
18
  export { Motion, type MotionKeyframe, type MotionValue, type MotionConfig, type MotionInitalValue, type MotionCircle, } from "./utils/motion";
20
19
  export { isPanoId, panoEqual, panoParse, panoStringify, type PanoId, type Pano, } from "./utils/pano";
20
+ export { type GainmapCfgData, } from "./utils/gainmap-data";
21
+ export { type Clock, } from "./utils/clock";
21
22
  export { coordinatesToVector, vectorToCoordinates, headingToLongitude, longitudeToHeading, } from './utils/vectorCoordinates';
22
23
  export { draco, type Draco } from './utils/draco';
23
24
  export { makeBoundingVolume, isBoundingVolume, createDebugBoundingMesh, type BoundingVolume, type CullingVolume, type VolumePlaneIntersect, type BoundingVolumeJson, type BoxBoundingVolume, type BoxBoundingVolumeJson, type RegionBoundingVolume, type RegionBoundingVolumeJson, type SphereBoundingVolume, type SphereBoundingVolumeJson } from './utils/volume';
@@ -42,6 +43,7 @@ export { type IntersectMeshInterface } from "./types/intersectMeshInterface";
42
43
  export { type Intersection } from "./model/intersection";
43
44
  export { Five } from "./application/five";
44
45
  export { type Mode } from "./application/mode";
46
+ export { GSPLAT_PIPELINE_AUTO, GSPLAT_PIPELINE_RASTER_CPU_SORT, GSPLAT_PIPELINE_RASTER_GPU_SORT, } from "./gaussian-splatting/pipelines/pipelineMode";
45
47
  export { PROXY_CONTROLLER_EVENT_NAMES, type EventTypes, type ControllerEventTypes, type EventCallback, } from "./application/events";
46
48
  export { type LegacyEventType, type GestureTypes, type WebXRControllerKey, type WebXRControllerType, type WebXRControllerParams, type WebXRAxesParams } from './application/events-legacy';
47
49
  export { type FiveInitArgs } from "./application/fiveInitArgs";
@@ -54,5 +56,6 @@ export { type FloorplanControllerCustomInitArgs } from "./controllers/floorplan"
54
56
  export { type ModelControllerCustomInitArgs } from "./controllers/model";
55
57
  export { type PanoramaControllerCustomInitArgs } from "./controllers/panorama";
56
58
  export { type TopviewControllerCustomInitArgs } from "./controllers/topview";
59
+ export { type VRPanoramaControllerCustomInitArgs } from "./controllers/vrPanorama";
57
60
  export { type PanoramaLikeControllerCustomInitArgs } from "./controllers/panoramaLike";
58
61
  export { type MapviewControllerCustomInitArgs } from "./controllers/mapview";