@realsee/five-webgpu 1.0.0-alpha.5 → 1.0.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 (378) 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 +78 -9
  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/material.md +35 -8
  9. package/ai_guides/features/mode.md +26 -29
  10. package/ai_guides/features/model.md +1 -1
  11. package/ai_guides/features/state.md +2 -2
  12. package/ai_guides/features/ultra-hdr.md +41 -32
  13. package/ai_guides/quick-start.md +2 -2
  14. package/ai_guides/release_notes/6.8.md +2 -2
  15. package/ai_guides/support.md +0 -4
  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/index.AdaptiveLuminancePass.html +1 -1
  20. package/docs/classes/index.BoundingMesh.html +1 -1
  21. package/docs/classes/index.Camera.html +1 -1
  22. package/docs/classes/index.EffectComposer.html +1 -1
  23. package/docs/classes/index.EyeDomeLightingPass.html +1 -1
  24. package/docs/classes/index.Five.html +69 -67
  25. package/docs/classes/index.FivePass.html +1 -1
  26. package/docs/classes/index.FlowingFireworks3DPass.html +1 -1
  27. package/docs/classes/index.FlowingLight2DPass.html +1 -1
  28. package/docs/classes/index.FlowingLight3DPass.html +2 -2
  29. package/docs/classes/index.GaussianBlurPass.html +1 -1
  30. package/docs/classes/index.InternalWebGPURenderer.html +8 -5
  31. package/docs/classes/index.Model.html +1 -1
  32. package/docs/classes/index.ModelScene.html +1 -1
  33. package/docs/classes/index.NetworkSubscribe.html +1 -1
  34. package/docs/classes/index.PBMCustomNode.html +8 -8
  35. package/docs/classes/index.PBMGaussianSplattingNodeMaterial.html +8 -6
  36. package/docs/classes/index.PBMGaussianSplattingObject.html +10 -4
  37. package/docs/classes/index.PBMGaussianSplattingRenderMesh.html +26 -15
  38. package/docs/classes/index.PBMGroup.html +1 -1
  39. package/docs/classes/index.PBMMesh.html +1 -1
  40. package/docs/classes/index.PBMMeshBasicMaterial.html +13 -8
  41. package/docs/classes/index.PBMMeshBasicNodeMaterial.html +15 -10
  42. package/docs/classes/index.PBMMeshPanoOnlyMaterial.html +13 -8
  43. package/docs/classes/index.PBMMeshPanoOnlyNodeMaterial.html +13 -8
  44. package/docs/classes/index.PBMMeshPhongMaterial.html +13 -8
  45. package/docs/classes/index.PBMMeshPhongNodeMaterial.html +15 -10
  46. package/docs/classes/index.PBMMeshPhysicalMaterial.html +13 -8
  47. package/docs/classes/index.PBMMeshPhysicalNodeMaterial.html +15 -10
  48. package/docs/classes/index.PBMPanoFilter.html +8 -8
  49. package/docs/classes/index.PBMPointCloud.html +6 -7
  50. package/docs/classes/index.PBMPointCloudMaterial.html +83 -0
  51. package/docs/classes/index.PBMSkinnedMesh.html +1 -1
  52. package/docs/classes/index.PBMUpdateable.html +1 -1
  53. package/docs/classes/index.PanoCircleMesh.html +1 -1
  54. package/docs/classes/index.PanoCircleMeshCustom.html +5 -5
  55. package/docs/classes/index.PanoCircleMeshSolid.html +1 -1
  56. package/docs/classes/index.Parameter.html +57 -56
  57. package/docs/classes/index.Scene.html +1 -1
  58. package/docs/classes/index.Subscribe.html +1 -1
  59. package/docs/classes/index.TextureLoader.html +4 -1
  60. package/docs/classes/index.Tile3D.html +23 -21
  61. package/docs/classes/index.TileNode.html +1 -1
  62. package/docs/classes/index.Tileset.html +4 -4
  63. package/docs/classes/index.TrajectoryNode.html +3 -3
  64. package/docs/classes/index.Work.html +20 -18
  65. package/docs/classes/index.WorkResolvedObserver.html +22 -22
  66. package/docs/classes/index.XRButton.html +3 -0
  67. package/docs/documents/api.html +11 -10
  68. package/docs/documents/features_camera-animation.html +1 -1
  69. package/docs/documents/features_event.html +0 -1
  70. package/docs/documents/features_five.html +51 -9
  71. package/docs/documents/features_gesture.html +1 -1
  72. package/docs/documents/features_load-external-model.html +6 -6
  73. package/docs/documents/features_load-progress.html +1 -1
  74. package/docs/documents/features_material.html +20 -9
  75. package/docs/documents/features_mode.html +28 -13
  76. package/docs/documents/features_model.html +1 -1
  77. package/docs/documents/features_state.html +1 -1
  78. package/docs/documents/features_ultra-hdr.html +50 -44
  79. package/docs/documents/quick-start.html +1 -1
  80. package/docs/documents/release_notes_6.8.html +2 -2
  81. package/docs/documents/support.html +1 -3
  82. package/docs/functions/index.customNodesCacheKey.html +1 -1
  83. package/docs/functions/index.parseWork.html +1 -1
  84. package/docs/functions/index.workToJson.html +1 -1
  85. package/docs/hierarchy.html +1 -1
  86. package/docs/interfaces/index.AddableObject.html +1 -1
  87. package/docs/interfaces/index.AjaxOptions.html +1 -1
  88. package/docs/interfaces/index.BaseEvent.html +2 -2
  89. package/docs/interfaces/index.Clock.html +24 -0
  90. package/docs/interfaces/index.DeviceProfile.html +8 -0
  91. package/docs/interfaces/index.EventCallback.html +49 -47
  92. package/docs/interfaces/index.FiveInitArgs.html +65 -41
  93. package/docs/interfaces/index.GainmapCfgData.html +15 -0
  94. package/docs/interfaces/index.GestureEvent.html +2 -2
  95. package/docs/interfaces/index.IPBMMaterial.html +12 -7
  96. package/docs/interfaces/index.ImageOptions.html +1 -1
  97. package/docs/interfaces/index.IntersectEvent.html +2 -2
  98. package/docs/interfaces/index.IntersectMesh.html +1 -1
  99. package/docs/interfaces/index.IntersectMeshInterface.html +1 -1
  100. package/docs/interfaces/index.Intersection.html +1 -1
  101. package/docs/interfaces/index.LoosePanoWork.html +2 -2
  102. package/docs/interfaces/index.LooseWork.html +2 -2
  103. package/docs/interfaces/index.LooseWorkInitial.html +2 -2
  104. package/docs/interfaces/index.LooseWorkModel.html +2 -2
  105. package/docs/interfaces/index.LooseWorkObserver.html +2 -2
  106. package/docs/interfaces/index.LooseWorkPanorama.html +4 -3
  107. package/docs/interfaces/index.LooseWorkWithExtrinsics.html +15 -9
  108. package/docs/interfaces/index.ModeChangeEvent.html +2 -2
  109. package/docs/interfaces/index.ModelControllerCustomInitArgs.html +1 -1
  110. package/docs/interfaces/index.ModelEvent.html +2 -2
  111. package/docs/interfaces/index.ModelSceneEvent.html +2 -2
  112. package/docs/interfaces/index.ModelTileEvent.html +2 -2
  113. package/docs/interfaces/index.MovePanoOptions.html +1 -1
  114. package/docs/interfaces/index.NetworkAbortError.html +1 -1
  115. package/docs/interfaces/index.NetworkFirbiddenError.html +1 -1
  116. package/docs/interfaces/index.NetworkOptions.html +1 -1
  117. package/docs/interfaces/index.NetworkProxyError.html +1 -1
  118. package/docs/interfaces/index.NetworkResourceEvent.html +2 -2
  119. package/docs/interfaces/index.NetworkResponseError.html +1 -1
  120. package/docs/interfaces/index.NetworkTimeoutError.html +1 -1
  121. package/docs/interfaces/index.ObjectEvent.html +2 -2
  122. package/docs/interfaces/index.PBMClipperParameter.html +2 -2
  123. package/docs/interfaces/index.PBMCustomNodeContext.html +60 -12
  124. package/docs/interfaces/index.PBMCustomNodeOptions.html +4 -4
  125. package/docs/interfaces/index.PBMCustomNodePanoContext.html +13 -6
  126. package/docs/interfaces/index.PBMCustomNodeSlots.html +6 -6
  127. package/docs/interfaces/index.PBMGaussianSplattingNodeMaterialOptions.html +4 -0
  128. package/docs/interfaces/index.PBMPanoDepth.html +5 -5
  129. package/docs/interfaces/index.PBMPanoFilterValue.html +2 -2
  130. package/docs/interfaces/index.PBMPanoGainmap.html +6 -0
  131. package/docs/interfaces/index.PBMPanoPicture.html +9 -8
  132. package/docs/interfaces/index.PBMRefinedScreen.html +2 -2
  133. package/docs/interfaces/index.PanoCircleMeshCustomOptions.html +2 -2
  134. package/docs/interfaces/index.PanoCircleMeshInterface.html +1 -1
  135. package/docs/interfaces/index.PanoEvent.html +2 -2
  136. package/docs/interfaces/index.PanoPrepareEvent.html +15 -0
  137. package/docs/interfaces/index.PanoTextureEvent.html +2 -2
  138. package/docs/interfaces/index.PanoramaControllerCustomInitArgs.html +9 -9
  139. package/docs/interfaces/index.PanoramaLikeControllerCustomInitArgs.html +1 -1
  140. package/docs/interfaces/index.ParameterMaterialValue.html +42 -41
  141. package/docs/interfaces/index.ParameterTilesetValue.html +15 -15
  142. package/docs/interfaces/index.ParameterValue.html +56 -55
  143. package/docs/interfaces/index.Pose.html +1 -1
  144. package/docs/interfaces/index.RenderEvent.html +2 -2
  145. package/docs/interfaces/index.ResolvedParameterValue.html +56 -55
  146. package/docs/interfaces/index.State.html +1 -1
  147. package/docs/interfaces/index.StateEvent.html +2 -2
  148. package/docs/interfaces/index.TextureOptions.html +1 -1
  149. package/docs/interfaces/index.TilesetOptions.html +7 -2
  150. package/docs/interfaces/index.TopviewControllerCustomInitArgs.html +1 -1
  151. package/docs/interfaces/index.VRPanoramaControllerCustomInitArgs.html +37 -0
  152. package/docs/interfaces/index.ViewLayer.html +23 -21
  153. package/docs/interfaces/index.WorkCubeHdrGainmapImage.html +10 -0
  154. package/docs/interfaces/index.WorkCubeImage.html +5 -9
  155. package/docs/interfaces/index.WorkImage.html +8 -12
  156. package/docs/interfaces/index.WorkInitial.html +8 -8
  157. package/docs/interfaces/index.WorkModel.html +8 -8
  158. package/docs/interfaces/index.WorkModelLayer.html +6 -6
  159. package/docs/interfaces/index.WorkObserver.html +23 -23
  160. package/docs/interfaces/index.WorkPanoramaJson.html +3 -2
  161. package/docs/interfaces/index.WorkTile.html +8 -12
  162. package/docs/interfaces/index.WorksEvent.html +2 -2
  163. package/docs/interfaces/index.XRControllerEvent.html +2 -2
  164. package/docs/interfaces/index.XRGestureEvent.html +2 -2
  165. package/docs/interfaces/index.XRPanoramaControllerCustomInitArgs.html +52 -0
  166. package/docs/interfaces/index.XRSessionEvent.html +2 -2
  167. package/docs/modules/index.html +1 -1
  168. package/docs/types/index.ControllerCustomInitTypes.html +4 -2
  169. package/docs/types/index.ControllerEventTypes.html +25 -23
  170. package/docs/types/index.DeviceProfileOverride.html +5 -0
  171. package/docs/types/index.EventTypes.html +26 -26
  172. package/docs/types/index.FlowingLightLineInput.html +11 -0
  173. package/docs/types/index.Mode.html +6 -3
  174. package/docs/types/index.OutputTextureDataType.html +1 -1
  175. package/docs/types/index.PBMCustomNodeTargetType.html +1 -1
  176. package/docs/types/index.ParseOptions.html +14 -8
  177. package/docs/types/index.XRMachineType.html +7 -0
  178. package/docs/variables/index.GSPLAT_PIPELINE_AUTO.html +2 -0
  179. package/docs/variables/index.GSPLAT_PIPELINE_RASTER_CPU_SORT.html +2 -0
  180. package/docs/variables/index.GSPLAT_PIPELINE_RASTER_GPU_SORT.html +2 -0
  181. package/docs/variables/index.PBMVertexMarkFlag.html +4 -0
  182. package/docs/variables/index.PROXY_CONTROLLER_EVENT_NAMES.html +1 -1
  183. package/docs/variables/index.controllersDefaultInitArgs.html +1 -1
  184. package/five/application/controllers.d.ts +8 -0
  185. package/five/application/events.d.ts +1 -1
  186. package/five/application/five.d.ts +6 -1
  187. package/five/application/fiveInitArgs.d.ts +32 -1
  188. package/five/application/mode.d.ts +8 -1
  189. package/five/cardboard/helper.d.ts +2 -0
  190. package/five/cardboard/index.d.ts +13 -0
  191. package/five/cardboard/sensor.d.ts +158 -0
  192. package/five/controllers/base.d.ts +3 -0
  193. package/five/controllers/events.d.ts +5 -3
  194. package/five/controllers/panorama.d.ts +2 -2
  195. package/five/controllers/vrPanorama.d.ts +56 -0
  196. package/five/controllers/xrPanorama.d.ts +506 -0
  197. package/five/core/internalWebGPURenderer.d.ts +7 -1
  198. package/five/core/panoVideo.d.ts +4 -1
  199. package/five/core/tiling.d.ts +25 -11
  200. package/five/core/webglAsyncReadFix.d.ts +25 -0
  201. package/five/gaussian-splatting/gpu-sort/prefixSumKernel.d.ts +65 -0
  202. package/five/gaussian-splatting/gpu-sort/radixSortModule.d.ts +128 -0
  203. package/five/gaussian-splatting/gpu-sort/shaders/prefixSum.d.ts +2 -0
  204. package/five/gaussian-splatting/gpu-sort/shaders/radixHistogram.d.ts +2 -0
  205. package/five/gaussian-splatting/gpu-sort/shaders/radixReorder.d.ts +2 -0
  206. package/five/gaussian-splatting/gpu-sort/shaders/sortKeygen.d.ts +2 -0
  207. package/five/gaussian-splatting/gpu-sort/sortAdapter.d.ts +234 -0
  208. package/five/gaussian-splatting/pipelines/cpuSortPipeline.d.ts +159 -0
  209. package/five/gaussian-splatting/pipelines/gpuSortPipeline.d.ts +98 -0
  210. package/five/gaussian-splatting/pipelines/gsplatPipeline.d.ts +104 -0
  211. package/five/gaussian-splatting/pipelines/pipelineMode.d.ts +42 -0
  212. package/five/gaussian-splatting/pipelines/sortThrottle.d.ts +45 -0
  213. package/five/index.d.ts +8 -2
  214. package/five/index.js +272 -269
  215. package/five/index.mjs +8389 -4487
  216. package/five/meshes/panoCircleMeshCustom.d.ts +1 -0
  217. package/five/model/index.d.ts +3 -2
  218. package/five/model/materials/pbmGaussianSplattingNodeMaterial.d.ts +4 -0
  219. package/five/model/materials/pbmMaterial.d.ts +126 -19
  220. package/five/model/materials/pbmMeshMaterial.d.ts +0 -9
  221. package/five/model/materials/pbmPointCloudNodeMaterial.d.ts +1 -1
  222. package/five/model/materials/tsl/defines.d.ts +6 -1
  223. package/five/model/materials/tsl/outputBuilder.d.ts +1 -12
  224. package/five/model/materials/tsl/panoColor.d.ts +8 -2
  225. package/five/model/materials/tsl/utils.d.ts +13 -0
  226. package/five/model/objects/pbmGaussianSplattingObject.d.ts +9 -0
  227. package/five/model/objects/pbmGaussianSplattingRenderMesh.d.ts +67 -101
  228. package/five/model/objects/pbmPointCloud.d.ts +0 -1
  229. package/five/model/objects/pbmPointCloudObject.d.ts +1 -1
  230. package/five/model/parameter.d.ts +5 -4
  231. package/five/model/tile3d/index.d.ts +2 -0
  232. package/five/model/tile3d/tileset.d.ts +5 -0
  233. package/five/model/tile3d/trajectory-content.d.ts +53 -0
  234. package/five/renderer/index.d.ts +1 -1
  235. package/five/renderer/postprocessing/index.d.ts +1 -1
  236. package/five/texture/loader.d.ts +6 -0
  237. package/five/types/cube.d.ts +0 -1
  238. package/five/utils/detector.d.ts +11 -1
  239. package/five/utils/error.d.ts +1 -0
  240. package/five/utils/event.d.ts +26 -3
  241. package/five/utils/gainmap-data.d.ts +23 -0
  242. package/five/webxr/XRControllerModelFactory.d.ts +55 -0
  243. package/five/webxr/buttonStateMachine.d.ts +31 -0
  244. package/five/webxr/deviceProfile.d.ts +70 -0
  245. package/five/webxr/inputSourceTracker.d.ts +59 -0
  246. package/five/webxr/referenceSpace.d.ts +60 -0
  247. package/five/webxr/renderTargetBridge.d.ts +45 -0
  248. package/five/webxr/xrButton.d.ts +4 -0
  249. package/five/webxr/xrManager.d.ts +174 -0
  250. package/five/work/index.d.ts +1 -1
  251. package/five/work/looseWorkType.d.ts +2 -1
  252. package/five/work/work.d.ts +30 -7
  253. package/five/work/workJsonType.d.ts +2 -1
  254. package/gltf-loader/gltf-object.d.ts +17 -0
  255. package/gltf-loader/index.d.ts +45 -0
  256. package/gltf-loader/index.js +255 -0
  257. package/gltf-loader/index.mjs +302 -0
  258. package/line/circle_png.d.ts +1 -0
  259. package/line/index.d.ts +49 -0
  260. package/line/index.js +255 -0
  261. package/line/index.mjs +340 -0
  262. package/package.json +30 -5
  263. package/plugins/BackgroundPlugin/Controller.d.ts +20 -0
  264. package/plugins/BackgroundPlugin/index.d.ts +5 -0
  265. package/plugins/BackgroundPlugin/typings.d.ts +44 -0
  266. package/plugins/CSS2DPlugin/Controller.d.ts +59 -0
  267. package/plugins/CSS2DPlugin/index.d.ts +5 -0
  268. package/plugins/CSS2DPlugin/typing.d.ts +31 -0
  269. package/plugins/CSS3DPlugin/Controller.d.ts +64 -0
  270. package/plugins/CSS3DPlugin/index.d.ts +5 -0
  271. package/plugins/CSS3DPlugin/typing.d.ts +33 -0
  272. package/plugins/FloorplanPlugin/Controller.d.ts +100 -0
  273. package/plugins/FloorplanPlugin/index.d.ts +6 -0
  274. package/plugins/FloorplanPlugin/render/assets.d.ts +9 -0
  275. package/plugins/FloorplanPlugin/render/index.d.ts +35 -0
  276. package/plugins/FloorplanPlugin/render/isPointInPolygon.d.ts +5 -0
  277. package/plugins/FloorplanPlugin/render/renderFloor.d.ts +22 -0
  278. package/plugins/FloorplanPlugin/render/roomLabelVisibility.d.ts +10 -0
  279. package/plugins/FloorplanPlugin/typing.d.ts +156 -0
  280. package/plugins/FloorplanPlugin/typings/floorplanData.d.ts +112 -0
  281. package/plugins/FloorplanPlugin/typings/floorplanJson.d.ts +167 -0
  282. package/plugins/FloorplanPlugin/typings/floorplanServerData.d.ts +78 -0
  283. package/plugins/FloorplanPlugin/typings/index.d.ts +3 -0
  284. package/plugins/FloorplanPlugin/utils/changeMode.d.ts +5 -0
  285. package/plugins/FloorplanPlugin/utils/changeModelCanvasOpacity.d.ts +6 -0
  286. package/plugins/FloorplanPlugin/utils/correctFiveState.d.ts +11 -0
  287. package/plugins/FloorplanPlugin/utils/equal.d.ts +9 -0
  288. package/plugins/FloorplanPlugin/utils/filter.d.ts +8 -0
  289. package/plugins/FloorplanPlugin/utils/fiveModelLoad.d.ts +6 -0
  290. package/plugins/FloorplanPlugin/utils/formatData.d.ts +6 -0
  291. package/plugins/FloorplanPlugin/utils/formatFloorplanJson.d.ts +20 -0
  292. package/plugins/FloorplanPlugin/utils/formatPosition.d.ts +33 -0
  293. package/plugins/FloorplanPlugin/utils/getDistanceFromModel.d.ts +6 -0
  294. package/plugins/FloorplanPlugin/utils/getPxmm.d.ts +19 -0
  295. package/plugins/FloorplanPlugin/utils/isTruelyObject.d.ts +4 -0
  296. package/plugins/FloorplanPlugin/utils/nearlyEqual.d.ts +8 -0
  297. package/plugins/FloorplanPlugin/utils/polylabel.d.ts +8 -0
  298. package/plugins/FloorplanPlugin/utils/to.d.ts +5 -0
  299. package/plugins/Object3DHelperPlugin/Controller.d.ts +99 -0
  300. package/plugins/Object3DHelperPlugin/Controllers/BaseController.d.ts +142 -0
  301. package/plugins/Object3DHelperPlugin/Controllers/BoundingBoxController.d.ts +16 -0
  302. package/plugins/Object3DHelperPlugin/Controllers/MoveController.d.ts +66 -0
  303. package/plugins/Object3DHelperPlugin/Controllers/RotateController.d.ts +61 -0
  304. package/plugins/Object3DHelperPlugin/FiveControllerWrapper.d.ts +17 -0
  305. package/plugins/Object3DHelperPlugin/Helper/BaseHelper.d.ts +97 -0
  306. package/plugins/Object3DHelperPlugin/Helper/BoundingBoxHelper.d.ts +16 -0
  307. package/plugins/Object3DHelperPlugin/Helper/MoveHelper.d.ts +37 -0
  308. package/plugins/Object3DHelperPlugin/Helper/RotateHelper.d.ts +93 -0
  309. package/plugins/Object3DHelperPlugin/constant.d.ts +27 -0
  310. package/plugins/Object3DHelperPlugin/index.d.ts +6 -0
  311. package/plugins/Object3DHelperPlugin/typing.d.ts +143 -0
  312. package/plugins/Object3DHelperPlugin/utils/ArrowGroup.d.ts +22 -0
  313. package/plugins/Object3DHelperPlugin/utils/CenterHandle.d.ts +23 -0
  314. package/plugins/Object3DHelperPlugin/utils/PlaneHandle.d.ts +19 -0
  315. package/plugins/Object3DHelperPlugin/utils/calculateScaleByCamera.d.ts +5 -0
  316. package/plugins/Object3DHelperPlugin/utils/cameraHooks.d.ts +3 -0
  317. package/plugins/Object3DHelperPlugin/utils/direction.d.ts +14 -0
  318. package/plugins/Object3DHelperPlugin/utils/getMouseRaycaster.d.ts +5 -0
  319. package/plugins/Object3DHelperPlugin/utils/getOrthographicCameraDirection.d.ts +8 -0
  320. package/plugins/Object3DHelperPlugin/utils/setObjectQuaternion.d.ts +8 -0
  321. package/plugins/Object3DHelperPlugin/utils/solidGuide.d.ts +27 -0
  322. package/plugins/Object3DHelperPlugin/utils/tipsDom.d.ts +8 -0
  323. package/plugins/PanoAnimePlugin/Controller.d.ts +49 -0
  324. package/plugins/PanoAnimePlugin/index.d.ts +5 -0
  325. package/plugins/PanoAnimePlugin/typing.d.ts +37 -0
  326. package/plugins/index.d.ts +6 -0
  327. package/plugins/index.js +748 -3
  328. package/plugins/index.mjs +28761 -88
  329. package/plugins/thirdParty/CSS2DRenderer.d.ts +37 -0
  330. package/plugins/thirdParty/CSS3DRenderer.d.ts +45 -0
  331. package/plugins/thirdParty/OrbitControls.d.ts +78 -0
  332. package/plugins/thirdParty/doctorstrange-model.d.ts +92 -0
  333. package/plugins/thirdParty/domevents.d.ts +36 -0
  334. package/plugins/utils/clamp.d.ts +2 -0
  335. package/plugins/utils/uuid.d.ts +2 -0
  336. package/react/index.js +2 -2
  337. package/react/index.mjs +2 -2
  338. package/sticker/geometry.d.ts +3 -0
  339. package/sticker/index.d.ts +68 -0
  340. package/sticker/index.js +255 -0
  341. package/sticker/index.mjs +358 -0
  342. package/umd/five-gltf-loader.js +255 -0
  343. package/umd/five-line.js +322 -0
  344. package/umd/five-plugins.js +816 -3
  345. package/umd/five-react.js +2 -2
  346. package/umd/five-sticker.js +255 -0
  347. package/umd/five-vfx.js +323 -0
  348. package/umd/five.js +347 -344
  349. package/vfx/airflow/airflow.d.ts +18 -0
  350. package/vfx/common/simplex-noise.d.ts +2 -0
  351. package/vfx/frame/frame.d.ts +27 -0
  352. package/vfx/index.d.ts +7 -0
  353. package/vfx/index.js +255 -0
  354. package/vfx/index.mjs +738 -0
  355. package/vfx/particle/instance.d.ts +36 -0
  356. package/vfx/particle/particle.d.ts +119 -0
  357. package/vfx/particle/utils.d.ts +11 -0
  358. package/vfx/particle-gpu/particle.d.ts +75 -0
  359. package/vfx/particle-gpu/utils.d.ts +11 -0
  360. package/vfx/spotLight/spotLight.d.ts +15 -0
  361. package/work-downloader/components/model-3d-tile.d.ts +2 -0
  362. package/work-downloader/components/model.d.ts +3 -0
  363. package/work-downloader/components/observer.d.ts +9 -0
  364. package/work-downloader/download.d.ts +16 -0
  365. package/work-downloader/index.d.ts +2 -0
  366. package/work-downloader/index.js +255 -0
  367. package/work-downloader/index.mjs +595 -0
  368. package/work-downloader/type.d.ts +28 -0
  369. package/work-downloader/utils/download-to-file.d.ts +1 -0
  370. package/work-downloader/utils/image-processing.d.ts +7 -0
  371. package/work-downloader/utils/join-url.d.ts +2 -0
  372. package/work-downloader/utils/log.d.ts +1 -0
  373. package/work-downloader/utils/relative-url.d.ts +1 -0
  374. package/docs/interfaces/index.PBMHDRConfig.html +0 -12
  375. package/five/gaussian-splatting/worker/dataWorker.d.ts +0 -1
  376. package/five/three-version-check.d.ts +0 -1
  377. package/five/utils/hdr-data.d.ts +0 -13
  378. package/five/utils/shaderContentFix.d.ts +0 -7
@@ -0,0 +1,65 @@
1
+ /**
2
+ * 并行前缀和(Blelloch exclusive scan)内核。
3
+ *
4
+ * 移植自 PlayCanvas `scene/graphics/prefix-sum-kernel.js`,改写为直接调用原生 WebGPU API。
5
+ * 与 3DGS 业务完全解耦:只认 `GPUDevice`、一个 uint32 storage buffer 与元素数。
6
+ *
7
+ * 结构:256 线程 / 512 元素每 workgroup,单 workgroup 内做 Blelloch scan,
8
+ * 每个 workgroup 的总和写入 blockSums;blockSums 元素数 > 1 时递归地对 blockSums 再做一次
9
+ * scan,最后逆序把各层 scan 结果加回下层。层数约为 `ceil(log₅₁₂(count))`,实践中不超过 3。
10
+ */
11
+ export declare class PrefixSumKernel {
12
+ private readonly device;
13
+ /** 各 scan 层,index 0 为最外层(调用方的 buffer) */
14
+ private readonly passes;
15
+ /** 本次 encode 实际参与 dispatch 的层数(容量按高水位保留,规模按当前 count 走) */
16
+ private activeLevels;
17
+ /** 当前 pass 结构绑定的输入 buffer,identity 变化时需重建绑定组 */
18
+ private dataBuffer;
19
+ private readonly bindGroupLayout;
20
+ private readonly scanPipeline;
21
+ private readonly addBlockPipeline;
22
+ private readonly maxWorkgroupsPerDimension;
23
+ /** uniform 写入 scratch,避免每次 writeBuffer 新建 typed array */
24
+ private readonly uniformScratch;
25
+ constructor(device: GPUDevice);
26
+ /**
27
+ * 把 `dataBuffer` 的前 `count` 个 u32 原地替换为它们的 exclusive scan 结果。
28
+ *
29
+ * 只向传入的 encoder 录制命令,不做 submit;uniform 通过 `queue.writeBuffer` 更新,
30
+ * 队列顺序保证其在本 encoder 提交前生效。
31
+ *
32
+ * dispatch 次数为 `2L - 1`(L 层 scan + L-1 层 add_block_sums)。
33
+ *
34
+ * @param encoder 调用方的命令编码器
35
+ * @param dataBuffer 待 scan 的 storage buffer(usage 需含 STORAGE)
36
+ * @param count 参与 scan 的元素数
37
+ */
38
+ encode(encoder: GPUCommandEncoder, dataBuffer: GPUBuffer, count: number): void;
39
+ /**
40
+ * 按新的输入 buffer 与元素数调整 pass 结构。
41
+ *
42
+ * 仅在「输入 buffer 变了」或「元素数超出层 0 的已分配容量」时重建结构——后者同时覆盖了
43
+ * 「需要更多层」的情形(层数是 count 的单调函数)。规模缩小时保留高水位容量,只更新各层
44
+ * 的 count / dispatch 规模与生效层数(Requirement 14.6 / 14.7)。
45
+ *
46
+ * 相对 PlayCanvas 的一处修正:原实现只比较层数,元素数在同层数内增长时 blockSum 容量会
47
+ * 不足;这里以 `allocatedCount` 作为重建判据。
48
+ */
49
+ private resize;
50
+ /**
51
+ * 递归建层:本层建 blockSumBuffer / uniform / bindGroup,
52
+ * `workgroupCount > 1` 时对 blockSumBuffer 再递归建一层,并把本层标记为需要 add_block_sums。
53
+ */
54
+ private createPassesRecursive;
55
+ /**
56
+ * 单维 workgroup 数超过设备上限时退化为 2D dispatch:`x = floor(sqrt(n))`、`y = ceil(n / x)`。
57
+ * shader 用 `w_id.x + w_id.y * w_dim.x` 扁平化编号,多出来的 workgroup 由 elementCount
58
+ * 边界检查丢弃(Requirement 14.5-14.7 之外的 2.6)。
59
+ */
60
+ private findOptimalDispatchSize;
61
+ /** 释放各层 buffer 但保留 pipeline 与 layout(供 resize 重建结构时使用)。 */
62
+ private destroyPasses;
63
+ /** 释放全部自有 GPU 资源。pipeline / layout 无显式销毁 API,随对象一起被回收。 */
64
+ destroy(): void;
65
+ }
@@ -0,0 +1,128 @@
1
+ export declare const WORKGROUP_SIZE_X = 16;
2
+ export declare const WORKGROUP_SIZE_Y = 16;
3
+ /** 16 × 16 = 256 线程 / workgroup */
4
+ export declare const THREADS_PER_WORKGROUP: number;
5
+ /** 每线程处理 8 个元素 */
6
+ export declare const ELEMENTS_PER_THREAD = 8;
7
+ /** 256 × 8 = 2048 元素 / workgroup。与 Order_Texture 宽度相同,容量对齐策略利用了这一点 */
8
+ export declare const ELEMENTS_PER_WORKGROUP: number;
9
+ /** 每 pass 处理 4 bit */
10
+ export declare const BITS_PER_PASS = 4;
11
+ /** 1 << 4 = 16 个桶 */
12
+ export declare const BUCKET_COUNT: number;
13
+ export interface RadixSortResult {
14
+ /** 排序后的索引缓冲。前 elementCount 个元素为按 key 升序排列的原始下标。 */
15
+ sortedIndices: GPUBuffer;
16
+ }
17
+ export interface RadixSortOptions {
18
+ /**
19
+ * 允许在首个 pass 读完后覆写调用方的 keys,把它借用为 ping-pong 的一侧,省一份 N × 4。
20
+ * 借用的 buffer 不由本模块销毁;调用方需保证每次排序前自行重写 keys 内容。
21
+ */
22
+ destructiveKeys?: boolean;
23
+ /** 容量下限(元素数),纯分配参数,不参与排序,用于让调用方对齐分配粒度。 */
24
+ minCapacity?: number;
25
+ }
26
+ /**
27
+ * compute pipeline / shader module 创建失败时抛出的可识别错误。
28
+ * 上层(GpuSortPipeline)捕获它以置 `unusable` 标记并降级到 CPU 排序管线。
29
+ */
30
+ export declare class RadixSortPipelineError extends Error {
31
+ constructor(message: string, cause?: unknown);
32
+ }
33
+ /** 判断任意异常是否为本模块的 pipeline 创建失败错误。 */
34
+ export declare function isRadixSortPipelineError(error: unknown): error is RadixSortPipelineError;
35
+ /**
36
+ * 通用 GPU radix sort(4-bit multipass)。
37
+ *
38
+ * 移植自 PlayCanvas `scene/graphics/radix-sort/compute-radix-sort-multipass.js`,改写为直接调用
39
+ * 原生 WebGPU API。与 3DGS 业务完全解耦:只认 `GPUDevice`、一个 uint32 key 缓冲、元素数与位宽,
40
+ * 不感知 splat、相机与纹理格式,也不含 key 计算与节流判断(Requirement 1)。
41
+ *
42
+ * 每 pass 三段:histogram → `PrefixSumKernel` exclusive scan → ranked scatter(reorder)。
43
+ * 不依赖 subgroup 特性;单维 workgroup 数超上限时退化为 2D dispatch。
44
+ */
45
+ export declare class RadixSortModule {
46
+ private readonly device;
47
+ private readonly prefixSum;
48
+ private readonly histogramBindGroupLayout;
49
+ private readonly reorderBindGroupLayout;
50
+ private readonly histogramPipelineLayout;
51
+ private readonly reorderPipelineLayout;
52
+ private readonly histogramModule;
53
+ private readonly reorderModule;
54
+ /**
55
+ * pipeline 按 pass 索引缓存,`numBits` 变化时只补建缺失的 pass。
56
+ * reorder 的 `IS_LAST_PASS` 不由 pass 索引单独决定(同一 pass 在不同 numPasses 下可能是末 pass),
57
+ * 因此末 pass 变体单独一份缓存。
58
+ */
59
+ private readonly histogramPipelines;
60
+ private readonly reorderPipelines;
61
+ private readonly reorderLastPipelines;
62
+ private keys0;
63
+ /** 非破坏性模式下模块自有的第二份 keys;破坏性模式下为 null(改借用调用方 keys) */
64
+ private ownKeys1;
65
+ private values0;
66
+ private values1;
67
+ /** digit-major 的 workgroup 直方图:[digit * workgroupCount + workgroupId] */
68
+ private blockSums;
69
+ /** 已分配的元素数(2048 的整数倍),即高水位。blockSums 容量为 `16 × capacity / 2048` */
70
+ private capacity;
71
+ /** 当前缓冲集合是按破坏性模式分配的 */
72
+ private destructiveKeys;
73
+ /** 当前绑定组里引用的调用方 keys,identity 变化时需重建绑定组 */
74
+ private callerKeys;
75
+ private readonly uniformBuffer;
76
+ private readonly uniformScratch;
77
+ private writtenWorkgroupCount;
78
+ private writtenElementCount;
79
+ /** 绑定组缓存。键由参与的 buffer 组合而成,ping-pong 的组合数有限,缓存后不再每帧新建 */
80
+ private readonly histogramBindGroups;
81
+ private readonly reorderBindGroups;
82
+ private readonly maxWorkgroupsPerDimension;
83
+ constructor(device: GPUDevice);
84
+ /**
85
+ * 把 `keys` 的前 `elementCount` 个元素按升序排序,返回对应的索引缓冲。
86
+ *
87
+ * 只向传入的 encoder 录制命令,不做 submit——调用方可把 keygen、排序与后续拷贝录进同一个
88
+ * encoder 一次提交。uniform 通过 `queue.writeBuffer` 更新,队列顺序保证其在提交前生效。
89
+ *
90
+ * 结果落在哪个 ping-pong buffer 由 pass 数奇偶决定,不额外分配输出缓冲(Requirement 2.7)。
91
+ *
92
+ * @param encoder 调用方的命令编码器
93
+ * @param keys uint32 key 缓冲(usage 需含 STORAGE;`destructiveKeys` 时它会被当作 ping-pong 一侧写入)
94
+ * @param elementCount 本次参与排序的元素数
95
+ * @param numBits key 有效位数,应为 4 的倍数
96
+ * @param opts `destructiveKeys` 借用调用方 keys 省一份缓冲;`minCapacity` 仅影响分配
97
+ * @throws RadixSortPipelineError compute pipeline 创建失败
98
+ */
99
+ encode(encoder: GPUCommandEncoder, keys: GPUBuffer, elementCount: number, numBits: number, opts?: RadixSortOptions): RadixSortResult;
100
+ /** 释放全部自有 GPU 资源。借用的调用方 keys 不在此列。 */
101
+ destroy(): void;
102
+ /** 破坏性模式下 keys1 是调用方的 keys,否则是模块自有的那一份。 */
103
+ private resolveKeys1;
104
+ /**
105
+ * 按高水位分配 ping-pong 与 blockSums 缓冲。
106
+ *
107
+ * 容量向上对齐到 `ELEMENTS_PER_WORKGROUP`(2048)个元素,使 values 缓冲的字节长度天然是
108
+ * `2048 × 4 = 8192` 的整数倍,直接满足 Order_Texture 整行 `copyBufferToTexture` 的尺寸要求。
109
+ * 元素数缩小时保留高水位不缩容(Requirement 14.5 / 14.6)。
110
+ */
111
+ private ensureCapacity;
112
+ private destroyOwnBuffers;
113
+ /** 规模变化时才改写 uniform,避免每帧无谓的 writeBuffer。 */
114
+ private writeUniforms;
115
+ /**
116
+ * 单维 workgroup 数超过设备上限时退化为 2D dispatch:`x = floor(sqrt(n))`、`y = ceil(n / x)`。
117
+ * shader 用 `w_id.x + w_id.y * w_dim.x` 扁平化编号,补齐出的多余 workgroup 由 uniform 里的
118
+ * workgroupCount / elementCount 边界检查丢弃(Requirement 2.6)。
119
+ */
120
+ private findOptimalDispatchSize;
121
+ private getHistogramPipeline;
122
+ private getReorderPipeline;
123
+ /** 缓冲身份标签,用于绑定组缓存键。ping-pong 只在有限几个 buffer 间轮换。 */
124
+ private bufferTag;
125
+ private getHistogramBindGroup;
126
+ private getReorderBindGroup;
127
+ private clearBindGroupCache;
128
+ }
@@ -0,0 +1,2 @@
1
+ declare const _default: string;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: string;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: string;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: string;
2
+ export default _default;
@@ -0,0 +1,234 @@
1
+ import * as THREE from 'three/webgpu';
2
+ import type { Camera } from '../../core/camera';
3
+ import type { PBMGaussianSplattingObject } from '../../model/objects/pbmGaussianSplattingObject';
4
+ /**
5
+ * Order_Texture 宽度固定 2048,高 `ceil(totalPoints / 2048)`。
6
+ *
7
+ * 这个值与 `ELEMENTS_PER_WORKGROUP`、Data_Texture 宽度、材质里的 `ORDER_TEXTURE_WIDTH` 相同,
8
+ * 是本特性多处对齐关系的公共基数:排序结果缓冲按 2048 元素粒度分配,所以整行
9
+ * `copyBufferToTexture`(每行 8192 字节,是 256 的整数倍)天然不会越界。
10
+ */
11
+ export declare const ORDER_TEXTURE_WIDTH = 2048;
12
+ /** 当前帧全部 splat 的 Depth_Metric 取值区间。两端通常均为负值且 `minDist < maxDist`。 */
13
+ export interface DistanceRange {
14
+ /** 最远处(Depth_Metric 最小值) */
15
+ minDist: number;
16
+ /** 最近处(Depth_Metric 最大值) */
17
+ maxDist: number;
18
+ }
19
+ /** Key_Bit_Width 自适应的计算结果。 */
20
+ export interface KeyBitConfig {
21
+ /** 由点数推出的原始位数,已 clamp 到 [10, 20] */
22
+ numBits: number;
23
+ /** 对齐到 radix 边界(4 的倍数)后的实际位宽,取值 {12, 16, 20} */
24
+ keyBitWidth: number;
25
+ /** 量化桶数 `1 << keyBitWidth` */
26
+ bucketCount: number;
27
+ }
28
+ /**
29
+ * 按 Total_Points 自适应 Key_Bit_Width(Requirement 3.1 / 3.3)。
30
+ *
31
+ * `numBits = clamp(round(log2(totalPoints / 4)), 10, 20)` 让量化精度随场景规模增长,
32
+ * 再向上对齐到 4 的倍数,使 radix sort 的 pass 数(`keyBitWidth / 4`)为整数。
33
+ */
34
+ export declare function computeKeyBitConfig(totalPoints: number): KeyBitConfig;
35
+ /**
36
+ * 3DGS 与 `RadixSortModule` 之间的对接层。
37
+ *
38
+ * **本文件是 `gpu-sort/` 下允许与 3DGS 业务耦合的例外**(Requirement 1.2):它引用 three 与 five
39
+ * 的模型类型,把 five 的 Data_Texture / Transform_Store 接到与业务无关的通用排序模块上。
40
+ *
41
+ * 职责分三块:
42
+ * 1. Distance_Range 计算(CPU,遍历各对象包围盒 8 角点)
43
+ * 2. Key_Bit_Width 自适应与 keygen compute pass(读 Data_Texture / Transform_Store 直接算 Sort_Key,
44
+ * 不经任何 CPU 侧中间数组)
45
+ * 3. 调用 `RadixSortModule` 并把排序结果 `copyBufferToTexture` 写入 Order_Texture
46
+ *
47
+ * 入口是 `encode`:一次调用把上述三步录进调用方的同一个 encoder,由调用方 submit。
48
+ */
49
+ export declare class SortAdapter {
50
+ private readonly renderer;
51
+ private readonly device;
52
+ /** 通用排序模块。构造失败时其错误会被包装为 `RadixSortPipelineError` 向上抛出。 */
53
+ private readonly radixSort;
54
+ private readonly keygenBindGroupLayout;
55
+ private readonly keygenPipeline;
56
+ private readonly uniformBuffer;
57
+ /** KeygenUniforms 的 CPU 侧暂存,f32 / u32 两个视图共享同一段内存。 */
58
+ private readonly uniformScratch;
59
+ private readonly uniformF32;
60
+ private readonly uniformU32;
61
+ private keyBuffer;
62
+ /** 已分配的 key 元素数(2048 的整数倍) */
63
+ private keyCapacity;
64
+ private orderGpuTexture;
65
+ /** 包装 `orderGpuTexture` 的 three 纹理,供材质绑定。尺寸变化时与原生纹理一同重建。 */
66
+ private orderThreeTexture;
67
+ /** 当前 Order_Texture 的高度。与新算出的高度相同时复用,不同则销毁重建。 */
68
+ private orderTextureHeight;
69
+ /** `GPUTextureView` 缓存。three 侧纹理重建时旧 `GPUTexture` 被 GC,条目随之失效。 */
70
+ private readonly textureViewCache;
71
+ private keygenBindGroup;
72
+ private boundDataTexture;
73
+ private boundTransformTexture;
74
+ private boundKeyBuffer;
75
+ /** 诊断开关。见 `debugValidateOrder`。 */
76
+ private validateOrderEnabled;
77
+ /** 回读用 staging buffer。仅在诊断开启时惰性创建,关闭时销毁。 */
78
+ private stagingBuffer;
79
+ /** staging buffer 已分配的元素数(2048 的整数倍,高水位复用)。 */
80
+ private stagingCapacity;
81
+ /**
82
+ * 是否已有一次回读在途。
83
+ *
84
+ * `mapAsync` 期间的 buffer 不能作为 `copyBufferToBuffer` 的目标,且逐帧堆积回读毫无意义,
85
+ * 因此在途时直接跳过本帧的校验。
86
+ */
87
+ private validationInFlight;
88
+ private readonly maxWorkgroupsPerDimension;
89
+ /**
90
+ * keygen 所需 workgroup 数超出设备单维上限(约 `256 × 65535 ≈ 1677 万`点)。
91
+ * keygen shader 只用 `gid.x` 编址,无法像排序模块那样退化为 2D dispatch,因此这种极端规模下
92
+ * 本适配器不可用,由上层经 `checkLimits` 统一降级到 CPU 排序管线。
93
+ */
94
+ private keygenDispatchUnsupported;
95
+ constructor(renderer: THREE.WebGPURenderer, device: GPUDevice);
96
+ /**
97
+ * 本适配器是否已不可用。为真时上层应经 `checkLimits` 降级到 CPU 排序管线。
98
+ * 目前唯一来源是 keygen dispatch 规模超设备单维上限(见 `keygenDispatchUnsupported`)。
99
+ */
100
+ get unusable(): boolean;
101
+ /**
102
+ * 开发期排列性诊断开关(Requirement 13.3 / 13.4),**默认关闭**。
103
+ *
104
+ * 开启后每次排序会把 `Sorted_Indices_Buffer` 的前 `totalPoints` 个元素经 staging buffer 回读,
105
+ * 校验其构成 `[0, totalPoints)` 的一个排列(design.md 的 Property 1)。回读依赖 `mapAsync`,
106
+ * 有同步停顿,只应在排查问题时临时打开。
107
+ *
108
+ * 关闭状态下不创建 staging buffer、不录任何拷贝命令、不发起任何回读,因此零开销。
109
+ */
110
+ get debugValidateOrder(): boolean;
111
+ set debugValidateOrder(value: boolean);
112
+ /**
113
+ * 供材质绑定的 Order_Texture(three 纹理包装)。首次成功排序前为 `null`,
114
+ * 此时材质用自身的 1×1 R32UI 占位纹理保证可编译。
115
+ */
116
+ get orderTexture(): THREE.Texture | null;
117
+ /**
118
+ * 排序主流程:Distance_Range → keygen → radix sort → 写 Order_Texture。
119
+ *
120
+ * 全部命令录进调用方的 encoder,一次 submit 即可,中途不做 GPU 回读也不等待。
121
+ *
122
+ * @param encoder 调用方的命令编码器
123
+ * @param objects 当前布局中的 3DGS 对象,顺序与 assembler / transformStore 一致
124
+ * @param camera 本帧相机
125
+ * @param dataTexture Data_Texture(`SplatAssembler.dataTexture`)
126
+ * @param transformTexture Transform_Store 纹理(`TransformStore.texture`)
127
+ * @param totalPoints 当前布局总点数
128
+ * @returns 是否成功录入。以下情形返回 `false` 且不录任何 dispatch,调用方应保持上一次的
129
+ * Order_Texture(或在从未排序时令 `instanceCount = 0`),下帧重试:
130
+ * - `totalPoints === 0`(Requirement 16.5)
131
+ * - Data_Texture / Transform_Store 尚未拿到原生 `GPUTexture`(Requirement 16.2)
132
+ * - keygen dispatch 规模超设备单维上限(此后 `unusable` 为真,由上层降级)
133
+ */
134
+ encode(encoder: GPUCommandEncoder, objects: readonly PBMGaussianSplattingObject[], camera: Camera, dataTexture: THREE.Texture | null, transformTexture: THREE.Texture | null, totalPoints: number): boolean;
135
+ /**
136
+ * 计算当前帧的 Distance_Range(Requirement 5.1 / 5.2 / 5.3 / 5.5)。
137
+ *
138
+ * 遍历每个对象**对象空间** AABB 的 8 个角点,经该对象 `matrixWorld` 变换到世界空间后求
139
+ * Depth_Metric,取全部结果的 min / max。成本为 `对象数 × 8` 次矩阵变换,不触碰 splat 点数据。
140
+ *
141
+ * 相机 Z 轴取 `matrixWorld` 第三列(**+Z,不取负**):three 约定相机看向 -Z,所以 +Z 指向相机
142
+ * 背后,越远的点 Depth_Metric 越小(越负)。因此 `minDist` 对应最远处、`maxDist` 对应最近处,
143
+ * 归一化后最远点 `t = 0` → Sort_Key 最小 → 升序排序天然是「由远到近」。
144
+ *
145
+ * 副作用:把相机位置与 Z 轴写入模块级 `_camPos` / `_camZ`,`writeKeygenUniforms` 紧随其后取用。
146
+ *
147
+ * @returns 无有效 AABB 或区间退化(单点场景、所有点共面且垂直于视线)时兜底返回 `{ 0, 1 }`,
148
+ * 避免 `invRange` 为 Infinity。
149
+ */
150
+ computeDistanceRange(objects: readonly PBMGaussianSplattingObject[], camera: Camera): DistanceRange;
151
+ /**
152
+ * 录入 keygen compute pass:为每个 splat 算出 Sort_Key 并写入 Key_Buffer。
153
+ *
154
+ * 只向 encoder 录命令,不 submit;uniform 经 `queue.writeBuffer` 更新,队列顺序保证其在
155
+ * 命令缓冲执行前生效。
156
+ *
157
+ * @param encoder 调用方的命令编码器
158
+ * @param objects 当前布局中的 3DGS 对象,顺序与 assembler / transformStore 一致
159
+ * @param camera 本帧相机
160
+ * @param dataTexture Data_Texture(`SplatAssembler.dataTexture`)
161
+ * @param transformTexture Transform_Store 纹理(`TransformStore.texture`)
162
+ * @param totalPoints 当前布局总点数
163
+ * @param bucketCount 量化桶数(`computeKeyBitConfig` 的结果)
164
+ * @returns 写入的 Key_Buffer;点数为 0、纹理尚未就绪或 dispatch 规模超上限时返回 `null`
165
+ * (调用方据此本帧跳过排序,下帧重试)
166
+ */
167
+ encodeKeygen(encoder: GPUCommandEncoder, objects: readonly PBMGaussianSplattingObject[], camera: Camera, dataTexture: THREE.Texture | null, transformTexture: THREE.Texture | null, totalPoints: number, bucketCount: number): GPUBuffer | null;
168
+ /** 释放自有 GPU 资源:Key_Buffer、uniform buffer、Order_Texture 与排序模块。 */
169
+ dispose(): void;
170
+ /**
171
+ * 录入排序结果到 staging buffer 的拷贝,并安排一次异步回读校验。
172
+ *
173
+ * 拷贝必须录进**同一个 encoder**:`sortedIndices` 是排序模块的 ping-pong buffer,下一帧就会被
174
+ * 覆写,submit 之后再取内容已经不是本帧结果。
175
+ *
176
+ * 回读本身完全异步(`onSubmittedWorkDone` → `mapAsync`),不阻塞 encode 主流程;上一次回读
177
+ * 仍在途时直接跳过(`mapAsync` 期间的 buffer 不能作为拷贝目标)。
178
+ */
179
+ private encodeOrderValidation;
180
+ /** staging buffer 按 2048 元素粒度分配并高水位复用,与 Key_Buffer 同一策略。 */
181
+ private ensureStagingBuffer;
182
+ private destroyStagingBuffer;
183
+ /** 等待本帧命令执行完毕后回读 staging buffer 并做排列性校验。 */
184
+ private readbackAndValidate;
185
+ /**
186
+ * 校验前 `totalPoints` 个元素构成 `[0, totalPoints)` 的一个排列(design.md 的 Property 1)。
187
+ *
188
+ * 一旦发现越界或重复即 `console.error` 并中断本次校验——排序一旦出错通常是成片的,
189
+ * 逐个报告只会淹没控制台。
190
+ */
191
+ private validatePermutation;
192
+ /**
193
+ * 按当前点数准备 Order_Texture:高度不变则复用,变化则销毁旧纹理按新尺寸重建
194
+ * (Requirement 6.2 / 6.4 / 14.4)。
195
+ *
196
+ * usage 只需 `TEXTURE_BINDING | COPY_DST`:材质 `textureLoad` 读取 + `copyBufferToTexture` 写入。
197
+ * 重建时同时换掉包装用的 three 纹理对象——材质按引用同步(`syncDynamicUniforms`),
198
+ * three 也据此重建 bind group。
199
+ */
200
+ private ensureOrderTexture;
201
+ private destroyOrderTexture;
202
+ /**
203
+ * 按 `RadixSortModule` 的 2048 元素粒度分配 Key_Buffer 并按高水位复用。
204
+ *
205
+ * 与排序模块的容量策略保持同一粒度,使 `destructiveKeys` 模式下 Key_Buffer 能直接充当
206
+ * ping-pong 的一侧;点数缩小时不缩容,避免分配抖动。
207
+ */
208
+ private ensureKeyBuffer;
209
+ /** 已分配的 key 元素数,供排序模块以同一粒度对齐其内部容量(`minCapacity`)。 */
210
+ private get keyBufferCapacity();
211
+ /**
212
+ * 计算 Distance_Range 并写入 KeygenUniforms。
213
+ *
214
+ * 每次实际排序都重算(Requirement 5.4),因此不做脏检查——相机与区间几乎每次都在变。
215
+ */
216
+ private writeKeygenUniforms;
217
+ /**
218
+ * 取 three 纹理背后的原生 `GPUTexture`,拿不到时用 `initTexture` 强制上传后重取。
219
+ *
220
+ * three 的 `DataTexture` 通常在首次被材质使用时才上传,而排序发生在渲染之前。若只是等待就绪,
221
+ * 会形成「拿不到纹理 → 不排序 → `instanceCount = 0` 不渲染 → 纹理永远不上传」的死锁,
222
+ * 显式 `initTexture` 打破它。
223
+ */
224
+ private resolveGpuTexture;
225
+ /** `GPUTextureView` 按 `GPUTexture` 身份缓存,不每帧重建。 */
226
+ private getTextureView;
227
+ /**
228
+ * keygen 绑定组缓存。缓存键是两个 `GPUTexture` 与 Key_Buffer 的身份——three 侧纹理对象被替换时
229
+ * (`TransformStore.sync` 每次都重建纹理、`SplatAssembler.assemble` 在高度变化时重建)
230
+ * 必须重建绑定组,只看 `totalPoints` 是不够的。
231
+ */
232
+ private getKeygenBindGroup;
233
+ private invalidateKeygenBindGroup;
234
+ }
@@ -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
+ }