@realsee/five-webgpu 1.0.0-alpha.12 → 1.0.0-alpha.14

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 (431) hide show
  1. package/_virtual/_rolldown/runtime.js +3 -3
  2. package/docs/assets/hierarchy.js +1 -1
  3. package/docs/assets/navigation.js +1 -1
  4. package/docs/assets/search.js +1 -1
  5. package/docs/classes/index.AdaptiveLuminancePass.html +1 -1
  6. package/docs/classes/index.BoundingMesh.html +1 -1
  7. package/docs/classes/index.Camera.html +1 -1
  8. package/docs/classes/index.EyeDomeLightingPass.html +1 -1
  9. package/docs/classes/index.Five.html +41 -32
  10. package/docs/classes/index.FivePass.html +1 -1
  11. package/docs/classes/index.FiveRenderer.html +7 -2
  12. package/docs/classes/index.FlowingFireworks3DPass.html +1 -1
  13. package/docs/classes/index.FlowingLight2DPass.html +1 -1
  14. package/docs/classes/index.FlowingLight3DPass.html +1 -1
  15. package/docs/classes/index.GaussianBlurPass.html +1 -1
  16. package/docs/classes/index.InternalWebGPURenderer.html +4 -5
  17. package/docs/classes/index.Model.html +1 -1
  18. package/docs/classes/index.ModelScene.html +1 -1
  19. package/docs/classes/index.NetworkSubscribe.html +1 -1
  20. package/docs/classes/index.PBMCustomNode.html +1 -1
  21. package/docs/classes/index.PBMGaussianSplattingNodeMaterial.html +9 -9
  22. package/docs/classes/index.PBMGaussianSplattingObject.html +49 -11
  23. package/docs/classes/index.PBMGaussianSplattingRenderMesh.html +71 -16
  24. package/docs/classes/index.PBMGroup.html +1 -1
  25. package/docs/classes/index.PBMMesh.html +1 -1
  26. package/docs/classes/index.PBMMeshBasicMaterial.html +1 -1
  27. package/docs/classes/index.PBMMeshBasicNodeMaterial.html +1 -1
  28. package/docs/classes/index.PBMMeshPanoOnlyMaterial.html +1 -1
  29. package/docs/classes/index.PBMMeshPanoOnlyNodeMaterial.html +1 -1
  30. package/docs/classes/index.PBMMeshPhongMaterial.html +1 -1
  31. package/docs/classes/index.PBMMeshPhongNodeMaterial.html +1 -1
  32. package/docs/classes/index.PBMMeshPhysicalMaterial.html +1 -1
  33. package/docs/classes/index.PBMMeshPhysicalNodeMaterial.html +1 -1
  34. package/docs/classes/index.PBMPanoFilter.html +1 -1
  35. package/docs/classes/index.PBMPointCloud.html +1 -1
  36. package/docs/classes/index.PBMPointCloudMaterial.html +1 -1
  37. package/docs/classes/index.PBMSkinnedMesh.html +1 -1
  38. package/docs/classes/index.PBMUpdateable.html +1 -1
  39. package/docs/classes/index.PanoCircleMesh.html +1 -1
  40. package/docs/classes/index.PanoCircleMeshCustom.html +1 -1
  41. package/docs/classes/index.PanoCircleMeshSolid.html +1 -1
  42. package/docs/classes/index.Parameter.html +24 -22
  43. package/docs/classes/index.Scene.html +1 -1
  44. package/docs/classes/index.Subscribe.html +1 -1
  45. package/docs/classes/index.Tile3D.html +22 -22
  46. package/docs/classes/index.TileNode.html +2 -2
  47. package/docs/classes/index.TrajectoryNode.html +1 -1
  48. package/docs/classes/index.Work.html +15 -22
  49. package/docs/classes/index.WorkResolvedObserver.html +22 -22
  50. package/docs/functions/index.createWorks.html +1 -1
  51. package/docs/functions/index.parseWork.html +1 -1
  52. package/docs/hierarchy.html +1 -1
  53. package/docs/interfaces/index.AddableObject.html +1 -1
  54. package/docs/interfaces/index.AjaxOptions.html +1 -1
  55. package/docs/interfaces/index.BaseEvent.html +1 -1
  56. package/docs/interfaces/index.Clock.html +1 -1
  57. package/docs/interfaces/index.DeviceProfile.html +2 -2
  58. package/docs/interfaces/index.EventCallback.html +3 -3
  59. package/docs/interfaces/index.GestureEvent.html +1 -1
  60. package/docs/interfaces/index.IPBMMaterial.html +1 -1
  61. package/docs/interfaces/index.ImageOptions.html +1 -1
  62. package/docs/interfaces/index.IntersectEvent.html +1 -1
  63. package/docs/interfaces/index.IntersectMesh.html +1 -1
  64. package/docs/interfaces/index.IntersectMeshInterface.html +1 -1
  65. package/docs/interfaces/index.Intersection.html +1 -1
  66. package/docs/interfaces/index.LooseWorkWithExtrinsics.html +8 -8
  67. package/docs/interfaces/index.ModeChangeEvent.html +1 -1
  68. package/docs/interfaces/index.ModelControllerCustomInitArgs.html +1 -1
  69. package/docs/interfaces/index.ModelEvent.html +1 -1
  70. package/docs/interfaces/index.ModelSceneEvent.html +1 -1
  71. package/docs/interfaces/index.ModelTileEvent.html +1 -1
  72. package/docs/interfaces/index.MovePanoOptions.html +1 -1
  73. package/docs/interfaces/index.NetworkAbortError.html +1 -1
  74. package/docs/interfaces/index.NetworkFirbiddenError.html +1 -1
  75. package/docs/interfaces/index.NetworkOptions.html +1 -1
  76. package/docs/interfaces/index.NetworkProxyError.html +1 -1
  77. package/docs/interfaces/index.NetworkResourceEvent.html +1 -1
  78. package/docs/interfaces/index.NetworkResponseError.html +1 -1
  79. package/docs/interfaces/index.NetworkTimeoutError.html +1 -1
  80. package/docs/interfaces/index.ObjectEvent.html +1 -1
  81. package/docs/interfaces/index.PBMGaussianSplattingNodeMaterialOptions.html +3 -3
  82. package/docs/interfaces/index.PanoCircleMeshInterface.html +1 -1
  83. package/docs/interfaces/index.PanoEvent.html +1 -1
  84. package/docs/interfaces/index.PanoPrepareEvent.html +1 -1
  85. package/docs/interfaces/index.PanoTextureEvent.html +1 -1
  86. package/docs/interfaces/index.PanoramaControllerCustomInitArgs.html +1 -1
  87. package/docs/interfaces/index.PanoramaLikeControllerCustomInitArgs.html +1 -1
  88. package/docs/interfaces/index.ParameterMaterialValue.html +8 -6
  89. package/docs/interfaces/index.ParameterTilesetValue.html +15 -15
  90. package/docs/interfaces/index.ParameterValue.html +21 -19
  91. package/docs/interfaces/index.Pose.html +1 -1
  92. package/docs/interfaces/index.RenderEvent.html +1 -1
  93. package/docs/interfaces/index.ResolvedParameterValue.html +22 -20
  94. package/docs/interfaces/index.SplatData.html +10 -6
  95. package/docs/interfaces/index.State.html +1 -1
  96. package/docs/interfaces/index.StateEvent.html +1 -1
  97. package/docs/interfaces/index.TextureOptions.html +1 -1
  98. package/docs/interfaces/index.Tile3DOptions.html +2 -2
  99. package/docs/interfaces/index.TopviewControllerCustomInitArgs.html +1 -1
  100. package/docs/interfaces/index.VRPanoramaControllerCustomInitArgs.html +1 -1
  101. package/docs/interfaces/index.ViewLayer.html +22 -22
  102. package/docs/interfaces/index.WorkCubeHdrGainmapImage.html +2 -2
  103. package/docs/interfaces/index.WorkCubeImage.html +2 -2
  104. package/docs/interfaces/index.WorkImage.html +5 -5
  105. package/docs/interfaces/index.WorkInitial.html +8 -8
  106. package/docs/interfaces/index.WorkInitialJson.html +2 -2
  107. package/docs/interfaces/index.WorkJson.html +2 -4
  108. package/docs/interfaces/index.WorkModel.html +8 -8
  109. package/docs/interfaces/index.WorkModelJson.html +2 -2
  110. package/docs/interfaces/index.WorkModelLayer.html +6 -6
  111. package/docs/interfaces/index.WorkModelLayerJson.html +2 -2
  112. package/docs/interfaces/index.WorkObserver.html +23 -23
  113. package/docs/interfaces/index.WorkObserverJson.html +2 -2
  114. package/docs/interfaces/index.WorkPanoramaJson.html +2 -2
  115. package/docs/interfaces/index.WorkPanoramasJson.html +2 -2
  116. package/docs/interfaces/index.WorkTile.html +5 -5
  117. package/docs/interfaces/index.WorkVideo.html +4 -4
  118. package/docs/interfaces/index.WorksEvent.html +1 -1
  119. package/docs/interfaces/index.XRControllerEvent.html +1 -1
  120. package/docs/interfaces/index.XRGestureEvent.html +2 -2
  121. package/docs/interfaces/index.XRPanoramaControllerCustomInitArgs.html +1 -1
  122. package/docs/interfaces/index.XRSessionEvent.html +1 -1
  123. package/docs/modules/index.html +1 -1
  124. package/docs/types/index.LegacyEventType.html +3 -3
  125. package/docs/types/index.OutputTextureDataType.html +1 -1
  126. package/docs/types/index.ParseOptions.html +8 -8
  127. package/docs/types/index.PointCloudTransparencyMode.html +2 -0
  128. package/docs/types/index.Works.html +1 -1
  129. package/docs/variables/index.loadAt3d.html +2 -0
  130. package/docs/variables/index.loadDome.html +2 -0
  131. package/docs/variables/index.loadDomez.html +2 -0
  132. package/docs/variables/index.loadGltf.html +2 -0
  133. package/docs/variables/index.loadPbm.html +2 -0
  134. package/docs/variables/index.loadPly.html +2 -0
  135. package/five/application/five.d.ts +13 -0
  136. package/five/chunks/at3d.js +338 -0
  137. package/five/chunks/at3d.mjs +338 -0
  138. package/five/chunks/dome.js +338 -0
  139. package/five/chunks/dome.mjs +338 -0
  140. package/five/chunks/domez.js +338 -0
  141. package/five/chunks/domez.mjs +338 -0
  142. package/five/chunks/fbx.js +338 -0
  143. package/five/chunks/fbx.mjs +338 -0
  144. package/five/chunks/fflate.js +338 -0
  145. package/five/chunks/fflate.mjs +338 -0
  146. package/five/chunks/glTF-helpers.js +804 -0
  147. package/five/chunks/glTF-helpers.mjs +804 -0
  148. package/five/chunks/gltf.js +338 -0
  149. package/five/chunks/gltf.mjs +338 -0
  150. package/five/chunks/imageBitmap.js +338 -0
  151. package/five/chunks/imageBitmap.mjs +338 -0
  152. package/five/chunks/imageSupport.js +338 -0
  153. package/five/chunks/imageSupport.mjs +338 -0
  154. package/five/chunks/lzma.js +383 -0
  155. package/five/chunks/lzma.mjs +383 -0
  156. package/five/chunks/memoryUsage.js +339 -0
  157. package/five/chunks/memoryUsage.mjs +339 -0
  158. package/five/chunks/minimal.js +338 -0
  159. package/five/chunks/minimal.mjs +338 -0
  160. package/five/chunks/pbm.js +338 -0
  161. package/five/chunks/pbm.mjs +338 -0
  162. package/five/chunks/pbmGaussianSplattingObject.js +338 -0
  163. package/five/chunks/pbmGaussianSplattingObject.mjs +338 -0
  164. package/five/chunks/pbmMeshMaterial.js +338 -0
  165. package/five/chunks/pbmMeshMaterial.mjs +338 -0
  166. package/five/chunks/pick.js +338 -0
  167. package/five/chunks/pick.mjs +338 -0
  168. package/five/chunks/ply.js +339 -0
  169. package/five/chunks/ply.mjs +339 -0
  170. package/five/chunks/spz.js +364 -0
  171. package/five/chunks/spz.mjs +364 -0
  172. package/five/controllers/xrPanorama.d.ts +13 -0
  173. package/five/core/internalWebGPURenderer.d.ts +0 -3
  174. package/five/core/panoVideo.d.ts +2 -0
  175. package/five/core/webglBlendEquationFix.d.ts +41 -0
  176. package/five/gaussian-splatting/arena/splatArena.d.ts +227 -0
  177. package/five/gaussian-splatting/cullConstants.d.ts +68 -0
  178. package/five/gaussian-splatting/hybridConstants.d.ts +60 -0
  179. package/five/gaussian-splatting/instancePacking.d.ts +46 -0
  180. package/five/gaussian-splatting/mirrors/layoutMirror.d.ts +44 -0
  181. package/five/gaussian-splatting/mirrors/mirrorBuffer.d.ts +72 -0
  182. package/five/gaussian-splatting/mirrors/mirrorSet.d.ts +17 -0
  183. package/five/gaussian-splatting/mirrors/objectParamsMirror.d.ts +35 -0
  184. package/five/gaussian-splatting/mirrors/transformMirror.d.ts +26 -0
  185. package/five/gaussian-splatting/pipelines/gpuSortPipeline.d.ts +5 -31
  186. package/five/gaussian-splatting/pipelines/pipelineMode.d.ts +1 -2
  187. package/five/gaussian-splatting/sh-core/codec.d.ts +13 -0
  188. package/five/gaussian-splatting/sh-core/constants.d.ts +29 -0
  189. package/five/gaussian-splatting/sh-core/index.d.ts +4 -0
  190. package/five/gaussian-splatting/sh-core/rebakePolicy.d.ts +20 -0
  191. package/five/gaussian-splatting/sh-core/texelRange.d.ts +18 -0
  192. package/five/gaussian-splatting/shAssembler.d.ts +14 -0
  193. package/five/gaussian-splatting/shBakeScheduler.d.ts +26 -0
  194. package/five/gaussian-splatting/shBaker.d.ts +44 -0
  195. package/five/gaussian-splatting/shTileResource.d.ts +22 -0
  196. package/five/gaussian-splatting/splatAssembler.d.ts +1 -1
  197. package/five/gaussian-splatting/transformStore.d.ts +2 -2
  198. package/five/gaussian-splatting/worker/decodeWorker.d.ts +72 -0
  199. package/five/index.d.ts +0 -1
  200. package/five/index.js +138 -640
  201. package/five/index.mjs +229 -29261
  202. package/five/model/index.d.ts +18 -6
  203. package/five/model/loaders/glTF-helpers/extensions/KHR_gaussian_splatting_compression_spz.d.ts +1 -1
  204. package/five/model/loaders/glTF-helpers/extensions/KHR_gaussian_splatting_compression_spz_2.d.ts +1 -1
  205. package/five/model/loaders/ply.d.ts +22 -6
  206. package/five/model/loaders/spz.d.ts +9 -49
  207. package/five/model/loaders/spz.worker.d.ts +37 -0
  208. package/five/model/materials/pbmGaussianSplattingNodeMaterial.d.ts +6 -12
  209. package/five/model/objects/pbmGaussianSplattingObject.d.ts +91 -6
  210. package/five/model/objects/pbmGaussianSplattingRenderMesh.d.ts +357 -15
  211. package/five/model/parameter.d.ts +4 -0
  212. package/five/renderer/compute-renderers/binned/binned-core.d.ts +45 -2
  213. package/five/renderer/compute-renderers/binned/binned-pipelines.d.ts +82 -1
  214. package/five/renderer/compute-renderers/color-space.d.ts +13 -0
  215. package/five/renderer/compute-renderers/composite-pipelines.d.ts +36 -0
  216. package/five/renderer/compute-renderers/frame-plan.d.ts +166 -0
  217. package/five/renderer/compute-renderers/gsplat-hybrid-renderer.d.ts +386 -0
  218. package/five/renderer/compute-renderers/pointcloud-compute-renderer.d.ts +101 -16
  219. package/five/renderer/compute-renderers/shaders/composite-blend.d.ts +2 -0
  220. package/five/renderer/compute-renderers/shaders/gsplatHybridIndirect.d.ts +2 -0
  221. package/five/renderer/compute-renderers/shaders/gsplatProjector.d.ts +2 -0
  222. package/five/renderer/compute-renderers/shaders/gsplatQuad.d.ts +2 -0
  223. package/five/renderer/compute-renderers/shaders/lib/write-additive.d.ts +2 -0
  224. package/five/renderer/compute-renderers/shaders/lib/write-blend.d.ts +2 -0
  225. package/five/renderer/compute-renderers/shaders/lib/write-opaque.d.ts +2 -0
  226. package/five/renderer/compute-renderers/tile-uniform-writer.d.ts +70 -0
  227. package/five/renderer/compute-renderers/transparency-buffers.d.ts +59 -0
  228. package/five/renderer/compute-renderers/transparency-math.d.ts +70 -0
  229. package/five/renderer/compute-renderers/transparency-settings.d.ts +24 -0
  230. package/five/renderer/compute-renderers/uniform-layout.d.ts +11 -2
  231. package/five/renderer/five-renderer.d.ts +28 -3
  232. package/five/renderer/index.d.ts +1 -1
  233. package/five/renderer/postprocessing/passes/pass.js +3 -3
  234. package/five/renderer/postprocessing/passes/pass.mjs +3 -3
  235. package/five/renderer/tools/full-screen-quad.js +3 -3
  236. package/five/renderer/tools/full-screen-quad.mjs +3 -3
  237. package/five/texture/videoTextureBridge.d.ts +152 -0
  238. package/five/thirdparty/sha256.d.ts +149 -0
  239. package/five/utils/calculateThreeMouse.js +3 -3
  240. package/five/utils/calculateThreeMouse.mjs +3 -3
  241. package/five/utils/distance.js +3 -3
  242. package/five/utils/distance.mjs +3 -3
  243. package/five/utils/isNil.js +3 -3
  244. package/five/utils/isNil.mjs +3 -3
  245. package/five/utils/memoryUsage.d.ts +1 -1
  246. package/five/utils/uuid.js +3 -3
  247. package/five/utils/uuid.mjs +3 -3
  248. package/five/work/work.d.ts +0 -7
  249. package/five/work/workJsonType.d.ts +0 -2
  250. package/gltf-loader/index.js +3 -3
  251. package/gltf-loader/index.mjs +3 -50
  252. package/line/index.js +3 -3
  253. package/line/index.mjs +3 -88
  254. package/package.json +1 -1
  255. package/plugins/BackgroundPlugin/Controller.js +4 -4
  256. package/plugins/BackgroundPlugin/Controller.mjs +4 -4
  257. package/plugins/BackgroundPlugin/index.js +3 -3
  258. package/plugins/BackgroundPlugin/index.mjs +3 -3
  259. package/plugins/BasePlugin/index.js +3 -3
  260. package/plugins/BasePlugin/index.mjs +3 -3
  261. package/plugins/CSS2DPlugin/Controller.js +3 -3
  262. package/plugins/CSS2DPlugin/Controller.mjs +3 -3
  263. package/plugins/CSS2DPlugin/index.js +3 -3
  264. package/plugins/CSS2DPlugin/index.mjs +3 -3
  265. package/plugins/CSS2DPlugin/style.css_raw.js +4 -4
  266. package/plugins/CSS2DPlugin/style.css_raw.mjs +4 -4
  267. package/plugins/CSS3DPlugin/Controller.js +3 -3
  268. package/plugins/CSS3DPlugin/Controller.mjs +3 -3
  269. package/plugins/CSS3DPlugin/index.js +3 -3
  270. package/plugins/CSS3DPlugin/index.mjs +3 -3
  271. package/plugins/CSS3DPlugin/style.css_raw.js +4 -4
  272. package/plugins/CSS3DPlugin/style.css_raw.mjs +4 -4
  273. package/plugins/FloorplanPlugin/Controller.js +3 -3
  274. package/plugins/FloorplanPlugin/Controller.mjs +3 -3
  275. package/plugins/FloorplanPlugin/index.js +3 -3
  276. package/plugins/FloorplanPlugin/index.mjs +3 -3
  277. package/plugins/FloorplanPlugin/render/assets.js +3 -3
  278. package/plugins/FloorplanPlugin/render/assets.mjs +3 -3
  279. package/plugins/FloorplanPlugin/render/index.js +3 -3
  280. package/plugins/FloorplanPlugin/render/index.mjs +3 -3
  281. package/plugins/FloorplanPlugin/render/isPointInPolygon.js +3 -3
  282. package/plugins/FloorplanPlugin/render/isPointInPolygon.mjs +3 -3
  283. package/plugins/FloorplanPlugin/render/renderFloor.js +3 -3
  284. package/plugins/FloorplanPlugin/render/renderFloor.mjs +3 -3
  285. package/plugins/FloorplanPlugin/render/roomLabelVisibility.js +3 -3
  286. package/plugins/FloorplanPlugin/render/roomLabelVisibility.mjs +3 -3
  287. package/plugins/FloorplanPlugin/render/style.css_raw.js +4 -4
  288. package/plugins/FloorplanPlugin/render/style.css_raw.mjs +4 -4
  289. package/plugins/FloorplanPlugin/utils/changeMode.js +3 -3
  290. package/plugins/FloorplanPlugin/utils/changeMode.mjs +3 -3
  291. package/plugins/FloorplanPlugin/utils/changeModelCanvasOpacity.js +3 -3
  292. package/plugins/FloorplanPlugin/utils/changeModelCanvasOpacity.mjs +3 -3
  293. package/plugins/FloorplanPlugin/utils/correctFiveState.js +3 -3
  294. package/plugins/FloorplanPlugin/utils/correctFiveState.mjs +3 -3
  295. package/plugins/FloorplanPlugin/utils/equal.js +3 -3
  296. package/plugins/FloorplanPlugin/utils/equal.mjs +3 -3
  297. package/plugins/FloorplanPlugin/utils/filter.js +3 -3
  298. package/plugins/FloorplanPlugin/utils/filter.mjs +3 -3
  299. package/plugins/FloorplanPlugin/utils/fiveModelLoad.js +3 -3
  300. package/plugins/FloorplanPlugin/utils/fiveModelLoad.mjs +3 -3
  301. package/plugins/FloorplanPlugin/utils/formatData.js +3 -3
  302. package/plugins/FloorplanPlugin/utils/formatData.mjs +3 -3
  303. package/plugins/FloorplanPlugin/utils/formatFloorplanJson.js +3 -3
  304. package/plugins/FloorplanPlugin/utils/formatFloorplanJson.mjs +3 -3
  305. package/plugins/FloorplanPlugin/utils/formatPosition.js +3 -3
  306. package/plugins/FloorplanPlugin/utils/formatPosition.mjs +3 -3
  307. package/plugins/FloorplanPlugin/utils/getDistanceFromModel.js +3 -3
  308. package/plugins/FloorplanPlugin/utils/getDistanceFromModel.mjs +3 -3
  309. package/plugins/FloorplanPlugin/utils/getPxmm.js +3 -3
  310. package/plugins/FloorplanPlugin/utils/getPxmm.mjs +3 -3
  311. package/plugins/FloorplanPlugin/utils/isTruelyObject.js +3 -3
  312. package/plugins/FloorplanPlugin/utils/isTruelyObject.mjs +3 -3
  313. package/plugins/FloorplanPlugin/utils/nearlyEqual.js +3 -3
  314. package/plugins/FloorplanPlugin/utils/nearlyEqual.mjs +3 -3
  315. package/plugins/FloorplanPlugin/utils/polylabel.js +3 -3
  316. package/plugins/FloorplanPlugin/utils/polylabel.mjs +3 -3
  317. package/plugins/FloorplanPlugin/utils/to.js +3 -3
  318. package/plugins/FloorplanPlugin/utils/to.mjs +3 -3
  319. package/plugins/GaussianSplattingEntranceAnimationPlugin/Controller.d.ts +6 -0
  320. package/plugins/GaussianSplattingEntranceAnimationPlugin/Controller.js +3 -3
  321. package/plugins/GaussianSplattingEntranceAnimationPlugin/Controller.mjs +3 -3
  322. package/plugins/GaussianSplattingEntranceAnimationPlugin/index.js +3 -3
  323. package/plugins/GaussianSplattingEntranceAnimationPlugin/index.mjs +3 -3
  324. package/plugins/Object3DHelperPlugin/Controller.js +3 -3
  325. package/plugins/Object3DHelperPlugin/Controller.mjs +3 -3
  326. package/plugins/Object3DHelperPlugin/Controllers/BaseController.js +3 -3
  327. package/plugins/Object3DHelperPlugin/Controllers/BaseController.mjs +3 -3
  328. package/plugins/Object3DHelperPlugin/Controllers/BoundingBoxController.js +3 -3
  329. package/plugins/Object3DHelperPlugin/Controllers/BoundingBoxController.mjs +3 -3
  330. package/plugins/Object3DHelperPlugin/Controllers/MoveController.js +3 -3
  331. package/plugins/Object3DHelperPlugin/Controllers/MoveController.mjs +3 -3
  332. package/plugins/Object3DHelperPlugin/Controllers/RotateController.js +3 -3
  333. package/plugins/Object3DHelperPlugin/Controllers/RotateController.mjs +3 -3
  334. package/plugins/Object3DHelperPlugin/FiveControllerWrapper.js +3 -3
  335. package/plugins/Object3DHelperPlugin/FiveControllerWrapper.mjs +3 -3
  336. package/plugins/Object3DHelperPlugin/Helper/BaseHelper.js +3 -3
  337. package/plugins/Object3DHelperPlugin/Helper/BaseHelper.mjs +3 -3
  338. package/plugins/Object3DHelperPlugin/Helper/BoundingBoxHelper.js +3 -3
  339. package/plugins/Object3DHelperPlugin/Helper/BoundingBoxHelper.mjs +3 -3
  340. package/plugins/Object3DHelperPlugin/Helper/MoveHelper.js +3 -3
  341. package/plugins/Object3DHelperPlugin/Helper/MoveHelper.mjs +3 -3
  342. package/plugins/Object3DHelperPlugin/Helper/RotateHelper.js +3 -3
  343. package/plugins/Object3DHelperPlugin/Helper/RotateHelper.mjs +3 -3
  344. package/plugins/Object3DHelperPlugin/constant.js +3 -3
  345. package/plugins/Object3DHelperPlugin/constant.mjs +3 -3
  346. package/plugins/Object3DHelperPlugin/index.js +3 -3
  347. package/plugins/Object3DHelperPlugin/index.mjs +3 -3
  348. package/plugins/Object3DHelperPlugin/utils/ArrowGroup.js +3 -3
  349. package/plugins/Object3DHelperPlugin/utils/ArrowGroup.mjs +3 -3
  350. package/plugins/Object3DHelperPlugin/utils/CenterHandle.js +3 -3
  351. package/plugins/Object3DHelperPlugin/utils/CenterHandle.mjs +3 -3
  352. package/plugins/Object3DHelperPlugin/utils/PlaneHandle.js +3 -3
  353. package/plugins/Object3DHelperPlugin/utils/PlaneHandle.mjs +3 -3
  354. package/plugins/Object3DHelperPlugin/utils/calculateScaleByCamera.js +3 -3
  355. package/plugins/Object3DHelperPlugin/utils/calculateScaleByCamera.mjs +3 -3
  356. package/plugins/Object3DHelperPlugin/utils/cameraHooks.js +3 -3
  357. package/plugins/Object3DHelperPlugin/utils/cameraHooks.mjs +3 -3
  358. package/plugins/Object3DHelperPlugin/utils/direction.js +3 -3
  359. package/plugins/Object3DHelperPlugin/utils/direction.mjs +3 -3
  360. package/plugins/Object3DHelperPlugin/utils/getMouseRaycaster.js +3 -3
  361. package/plugins/Object3DHelperPlugin/utils/getMouseRaycaster.mjs +3 -3
  362. package/plugins/Object3DHelperPlugin/utils/getOrthographicCameraDirection.js +3 -3
  363. package/plugins/Object3DHelperPlugin/utils/getOrthographicCameraDirection.mjs +3 -3
  364. package/plugins/Object3DHelperPlugin/utils/setObjectQuaternion.js +3 -3
  365. package/plugins/Object3DHelperPlugin/utils/setObjectQuaternion.mjs +3 -3
  366. package/plugins/Object3DHelperPlugin/utils/solidGuide.js +3 -3
  367. package/plugins/Object3DHelperPlugin/utils/solidGuide.mjs +3 -3
  368. package/plugins/Object3DHelperPlugin/utils/tipsDom.js +3 -3
  369. package/plugins/Object3DHelperPlugin/utils/tipsDom.mjs +3 -3
  370. package/plugins/PanoAnimePlugin/Controller.js +3 -3
  371. package/plugins/PanoAnimePlugin/Controller.mjs +3 -3
  372. package/plugins/PanoAnimePlugin/index.js +3 -3
  373. package/plugins/PanoAnimePlugin/index.mjs +3 -3
  374. package/plugins/WordPassPlugin/Controller.js +3 -3
  375. package/plugins/WordPassPlugin/Controller.mjs +3 -3
  376. package/plugins/WordPassPlugin/hersheyFont.js +3 -3
  377. package/plugins/WordPassPlugin/hersheyFont.mjs +3 -3
  378. package/plugins/WordPassPlugin/index.js +3 -3
  379. package/plugins/WordPassPlugin/index.mjs +3 -3
  380. package/plugins/WordPassPlugin/textToStrokeOrderStrokes.js +4 -4
  381. package/plugins/WordPassPlugin/textToStrokeOrderStrokes.mjs +4 -4
  382. package/plugins/WordPassPlugin/word-pass.js +3 -3
  383. package/plugins/WordPassPlugin/word-pass.mjs +3 -3
  384. package/plugins/index.js +3 -3
  385. package/plugins/index.mjs +3 -3
  386. package/plugins/thirdParty/CSS2DRenderer.js +3 -3
  387. package/plugins/thirdParty/CSS2DRenderer.mjs +3 -3
  388. package/plugins/thirdParty/CSS3DRenderer.js +3 -3
  389. package/plugins/thirdParty/CSS3DRenderer.mjs +3 -3
  390. package/plugins/thirdParty/doctorstrange-model.js +75 -75
  391. package/plugins/thirdParty/doctorstrange-model.mjs +75 -75
  392. package/plugins/thirdParty/domevents.js +3 -3
  393. package/plugins/thirdParty/domevents.mjs +3 -3
  394. package/plugins/utils/absoluteUrl.js +3 -3
  395. package/plugins/utils/absoluteUrl.mjs +3 -3
  396. package/plugins/utils/calculatePath.js +3 -3
  397. package/plugins/utils/calculatePath.mjs +3 -3
  398. package/plugins/utils/clamp.js +3 -3
  399. package/plugins/utils/clamp.mjs +3 -3
  400. package/plugins/utils/uuid.js +3 -3
  401. package/plugins/utils/uuid.mjs +3 -3
  402. package/react/hooks/useFiveModelReadyState.d.ts +1 -1
  403. package/react/index.js +3 -3
  404. package/react/index.mjs +3 -644
  405. package/sticker/index.d.ts +7 -0
  406. package/sticker/index.js +46 -3
  407. package/sticker/index.mjs +43 -103
  408. package/umd/five-gltf-loader.js +3 -3
  409. package/umd/five-line.js +3 -3
  410. package/umd/five-plugins.js +3 -3
  411. package/umd/five-react.js +2 -2
  412. package/umd/five-sticker.js +46 -3
  413. package/umd/five-vfx.js +2 -2
  414. package/umd/five.js +216 -179
  415. package/vfx/index.js +3 -3
  416. package/vfx/index.mjs +3 -486
  417. package/work-downloader/index.js +3 -3
  418. package/work-downloader/index.mjs +3 -315
  419. package/docs/functions/index.loadAt3d.html +0 -1
  420. package/docs/functions/index.loadDome.html +0 -1
  421. package/docs/functions/index.loadDomez.html +0 -1
  422. package/docs/functions/index.loadGltf.html +0 -1
  423. package/docs/functions/index.loadPbm.html +0 -1
  424. package/docs/functions/index.loadPly.html +0 -1
  425. package/five/certificates/hardware.d.ts +0 -1
  426. package/five/gaussian-splatting/shStore.d.ts +0 -22
  427. package/five/thirdparty/jsrsasign.d.ts +0 -753
  428. package/five/work/keychain.d.ts +0 -5
  429. package/five/work/verify.d.ts +0 -7
  430. package/five/work/workVerify.d.ts +0 -2
  431. /package/five/{work/_ALLOW_HOST.d.ts → renderer/compute-renderers/shaders/composite-additive.d.ts} +0 -0
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five-webgpu
4
- * Generated: 2026/10/29
5
- * Version: 1.0.0-alpha.12
4
+ * Generated: 2026/11/3
5
+ * Version: 1.0.0-alpha.14
6
6
  * License:
7
7
  * Realsee SDK License Agreement
8
8
 
@@ -335,4 +335,4 @@
335
335
  * writing and signed by Realsee. You and Realsee hereto confirm that this
336
336
  * Agreement and all related documents shall be drafted in English.
337
337
 
338
- */import{distance as e}from"../../../five/utils/distance.mjs";import{Canvas as t}from"../../thirdParty/doctorstrange-model.mjs";import{polylabel as n}from"./polylabel.mjs";var r=500;function i(e,n={}){let{observers:r=[],locate:i=`zh-CN`,outlines:o=[]}=n;if(!e||e.floorplans.length===0)return null;let s=e.floorplans.map(e=>{let n=new t;return n.load(e),n}),c=l(s,e.vrData),p=e=>u(e,c);return{outlines:o,computed_data:{floor_datas:a(s,e,r,c,i),bounding:c,entrance:d(s,p),observers:f(s,e.vrData,r,p)}}}function a(e,t,n,r,i){return e.map((e,a)=>{let l=e.areas.map(t=>{let n=o(e,t),a=s(n),l={position:a,position_in_image:u(a,r)};return{id:t.id,size:e.info.ruleType===1?t.size(!1):t.size(),name:t.labelName(i),customized_name:t.customizedName||void 0,path:n,room_type:t.roomType(),floor_type:t.floorType(),room_label:l,observer_indexs:[],dimension:c(t,a)}}),d=e.areas,f=0;return n.filter(e=>e.floor_index===a).forEach(e=>{let n=p(e,t.vrData),r=-1;for(let e=f;e<d.length&&r===-1;e++)d[e].isPointInArea(n)&&(r=e);for(let e=f;e>=0&&r===-1;e--)d[e].isPointInArea(n)&&(r=e);r!==-1&&(f=r,l[r].observer_indexs.push(e.index))}),{floor_name:t.floorplans[a].name,floor_index:a,is_has_wall:e.lines.length>0,rules:m(e),rooms:l}})}function o(t,n){let r=[],i=n.points[0];return n.points.concat(i).reduce((n,i)=>{r.push(n);let a=t.getLineByPoints(n,i);if(!a)return i;if(a.curve){let t=a.curveCenterPoint(),o=a.curveR(),s=Math.abs(o-e(t,i)*a.length()/Math.abs(a.curve)/4),c=[a.curveCenterPoint.call({curve:s,points:[n,t]}),a.curveCenterPoint.call({curve:-s,points:[n,t]})].sort((t,n)=>e(n,i)-e(t,i))[0],l=[a.curveCenterPoint.call({curve:s,points:[t,i]}),a.curveCenterPoint.call({curve:-s,points:[t,i]})].sort((t,r)=>e(r,n)-e(t,n))[0];r.push(c,t,l)}if(!a.isEdge()||a.items.length===0)return i;let o=a.items.filter(e=>e.type===7||e.type===11);return o.length===0||o.forEach(t=>{let i=t.startPointAt(),a=t.endPointAt();e(i,n)>e(a,n)&&([i,a]=[a,i]);let[o,s]=g(700,[i,a])[0];r.push(i,o,s,a)}),i},i),r.map(({x:e,y:t})=>({x:e,y:t}))}function s(e){let[t,r]=n([e.map(({x:e,y:t})=>[Math.trunc(e),Math.trunc(t)])],1);return{x:t,y:r}}function c(e,t){let n=e.innerPath();if(n.length===0)return;let r=1/0,i=-1/0,a=1/0,o=-1/0;n.forEach(e=>{r=Math.min(r,e.x),i=Math.max(i,e.x),a=Math.min(a,e.y),o=Math.max(o,e.y)});let s=i-r,c=o-a,l=Math.round(t.x),u=Math.round(t.y);return{width:s,height:c,vertical:[{x:l,y:a},{x:l,y:o}],horizontal:[{x:r,y:u},{x:i,y:u}]}}function l(e,t){let n=1e3,r={min:{x:1/0,y:1/0},max:{x:-1/0,y:-1/0},origin:{x:0,y:0}};function i({x:e,y:t}){r.min.x=Math.min(e,r.min.x),r.min.y=Math.min(t,r.min.y),r.max.x=Math.max(e,r.max.x),r.max.y=Math.max(t,r.max.y)}return e.forEach(e=>{e.points.forEach(e=>i(e)),e.lines.forEach(e=>{e.curve!==0&&i(e.curveCenterPoint())})}),r.min.x-=n,r.min.y-=n,r.max.x+=n,r.max.y+=n,r.origin.x=t.origin.left,r.origin.y=t.origin.top,r}function u(e,t){let n=t.max.x-t.min.x,r=t.max.y-t.min.y;return{x:n===0?0:(e.x-t.min.x)/n,y:r===0?0:(t.max.y-e.y)/r}}function d(e,t){let n=e.map(e=>e.lineItems).reduce((e,t)=>e.concat(t),[]).find(e=>e.entrance!==null);if(!n)return null;let r=n.canvas,i=r.areas.find(e=>n.line.points.every(t=>e.points.indexOf(t)>=0));if(!i)return null;let a=v([n.startPointAt(),n.endPointAt()]),o=n.towardsRadWithArea(i)+n.entrance/180*Math.PI;return{position_in_image:t(a),north_rad:o,room_id:i.id,floor_index:e.findIndex(e=>e===r)}}function f(e,t,n,r){return n.filter(t=>e[t.floor_index]).map(e=>({floor_index:e.floor_index,position_in_image:r(p(e,t))}))}function p(e,t){return{x:e.position[0]*1e3+t.origin.left,y:-e.position[2]*1e3+t.origin.top}}function m(e){let t=[],n=[],i=[],a=[];for(let o of e.lines){if(!o.edgeComputed||!o.points.length)continue;let s=e.areas.find(e=>o.points.every(t=>e.points.includes(t)));if(!s)continue;let c=o.edgePoints(!0),l=s.innerPath(!0,!1),[u,d]=c.filter(e=>l.some(t=>h(t,e)));if(!u||!d)continue;let f={x:u.x|0,y:u.y|0},p={x:d.x|0,y:d.y|0},m=o.towardsRadWithArea(s),g=Math.cos(m),_=Math.sin(m);Math.abs(f.y-p.y)>r&&(g<0?a.push([f,p].sort((e,t)=>e.y-t.y)):g>0&&n.push([f,p].sort((e,t)=>e.y-t.y))),Math.abs(f.x-p.x)>r&&(_<0?i.push([f,p].sort((e,t)=>e.x-t.x)):_>0&&t.push([f,p].sort((e,t)=>e.x-t.x)))}return{top:t,right:n,bottom:i,left:a}}function h(e,t){return e.x===t.x&&e.y===t.y}function g(e,t){let n=_(t[1],t[0]),r,i;Math.abs(n)===1/0?(i=0,r=e):(i=Math.sqrt(e*e/(n*n+1)),r=i/-(1/n));let a=[[{x:t[0].x-r,y:t[0].y-i},{x:t[1].x-r,y:t[1].y-i}],[{x:t[0].x+r,y:t[0].y+i},{x:t[1].x+r,y:t[1].y+i}]];return t[1].x-t[0].x<0?a:t[1].x-t[0].x>0||t[1].y-t[0].y<0?a.reverse():a}function _(e,t){return(e.y-t.y)/(e.x-t.x)}function v(e){let t=Math.min(...e.map(e=>e.x)),n=Math.max(...e.map(e=>e.x)),r=Math.min(...e.map(e=>e.y)),i=Math.max(...e.map(e=>e.y));return{x:(t+n)/2,y:(r+i)/2}}export{i as default,i as formatFloorplanJson};
338
+ */import{distance}from"../../../five/utils/distance.mjs";import{Canvas}from"../../thirdParty/doctorstrange-model.mjs";import{polylabel}from"./polylabel.mjs";var MIN_RULE_LENGTH=500;function formatFloorplanJson(floorplanJson,options={}){let{observers=[],locate=`zh-CN`,outlines=[]}=options;if(!floorplanJson||floorplanJson.floorplans.length===0)return null;let canvasArray=floorplanJson.floorplans.map(floorplan=>{let canvas=new Canvas;return canvas.load(floorplan),canvas}),bounding=getBounding(canvasArray,floorplanJson.vrData),toImagePosition=point=>floorplanPosition2ImagePosition(point,bounding);return{outlines,computed_data:{floor_datas:getFloorDatas(canvasArray,floorplanJson,observers,bounding,locate),bounding,entrance:getEntrance(canvasArray,toImagePosition),observers:getObservers(canvasArray,floorplanJson.vrData,observers,toImagePosition)}}}function getFloorDatas(canvasArray,floorplanJson,observers,bounding,locate){return canvasArray.map((canvas,floorIndex)=>{let rooms=canvas.areas.map(area=>{let path=getCompleteRoomPoints(canvas,area),position=getCenterPointOfPath(path),room_label={position,position_in_image:floorplanPosition2ImagePosition(position,bounding)};return{id:area.id,size:canvas.info.ruleType===1?area.size(!1):area.size(),name:area.labelName(locate),customized_name:area.customizedName||void 0,path,room_type:area.roomType(),floor_type:area.floorType(),room_label,observer_indexs:[],dimension:getDimensionOfArea(area,position)}}),areas=canvas.areas,lastAreaIndex=0;return observers.filter(observer=>observer.floor_index===floorIndex).forEach(observer=>{let point=observerWorldPoint(observer,floorplanJson.vrData),findIndex=-1;for(let i=lastAreaIndex;i<areas.length&&findIndex===-1;i++)areas[i].isPointInArea(point)&&(findIndex=i);for(let i=lastAreaIndex;i>=0&&findIndex===-1;i--)areas[i].isPointInArea(point)&&(findIndex=i);findIndex!==-1&&(lastAreaIndex=findIndex,rooms[findIndex].observer_indexs.push(observer.index))}),{floor_name:floorplanJson.floorplans[floorIndex].name,floor_index:floorIndex,is_has_wall:canvas.lines.length>0,rules:getFloorplanRules(canvas),rooms}})}function getCompleteRoomPoints(canvas,area){let points=[],firstPoint=area.points[0];return area.points.concat(firstPoint).reduce((prevPoint,currPoint)=>{points.push(prevPoint);let line=canvas.getLineByPoints(prevPoint,currPoint);if(!line)return currPoint;if(line.curve){let centerPoint=line.curveCenterPoint(),curveR=line.curveR(),assistantCurveAbs=Math.abs(curveR-distance(centerPoint,currPoint)*line.length()/Math.abs(line.curve)/4),p3=[line.curveCenterPoint.call({curve:assistantCurveAbs,points:[prevPoint,centerPoint]}),line.curveCenterPoint.call({curve:-assistantCurveAbs,points:[prevPoint,centerPoint]})].sort((a,b)=>distance(b,currPoint)-distance(a,currPoint))[0],p4=[line.curveCenterPoint.call({curve:assistantCurveAbs,points:[centerPoint,currPoint]}),line.curveCenterPoint.call({curve:-assistantCurveAbs,points:[centerPoint,currPoint]})].sort((a,b)=>distance(b,prevPoint)-distance(a,prevPoint))[0];points.push(p3,centerPoint,p4)}if(!line.isEdge()||line.items.length===0)return currPoint;let lineItems=line.items.filter(lineItem=>lineItem.type===7||lineItem.type===11);return lineItems.length===0||lineItems.forEach(lineItem=>{let start=lineItem.startPointAt(),end=lineItem.endPointAt();distance(start,prevPoint)>distance(end,prevPoint)&&([start,end]=[end,start]);let[offsetStart,offsetEnd]=parallelLineOfLine(700,[start,end])[0];points.push(start,offsetStart,offsetEnd,end)}),currPoint},firstPoint),points.map(({x,y})=>({x,y}))}function getCenterPointOfPath(path){let[x,y]=polylabel([path.map(({x,y})=>[Math.trunc(x),Math.trunc(y)])],1);return{x,y}}function getDimensionOfArea(area,centerPoint){let points=area.innerPath();if(points.length===0)return;let minX=1/0,maxX=-1/0,minY=1/0,maxY=-1/0;points.forEach(point=>{minX=Math.min(minX,point.x),maxX=Math.max(maxX,point.x),minY=Math.min(minY,point.y),maxY=Math.max(maxY,point.y)});let width=maxX-minX,height=maxY-minY,x=Math.round(centerPoint.x),y=Math.round(centerPoint.y);return{width,height,vertical:[{x,y:minY},{x,y:maxY}],horizontal:[{x:minX,y},{x:maxX,y}]}}function getBounding(canvasArray,vrData){let padding=1e3,result={min:{x:1/0,y:1/0},max:{x:-1/0,y:-1/0},origin:{x:0,y:0}};function applyResult({x,y}){result.min.x=Math.min(x,result.min.x),result.min.y=Math.min(y,result.min.y),result.max.x=Math.max(x,result.max.x),result.max.y=Math.max(y,result.max.y)}return canvasArray.forEach(canvas=>{canvas.points.forEach(point=>applyResult(point)),canvas.lines.forEach(line=>{line.curve!==0&&applyResult(line.curveCenterPoint())})}),result.min.x-=padding,result.min.y-=padding,result.max.x+=padding,result.max.y+=padding,result.origin.x=vrData.origin.left,result.origin.y=vrData.origin.top,result}function floorplanPosition2ImagePosition(point,bounding){let boundingWidth=bounding.max.x-bounding.min.x,boundingHeight=bounding.max.y-bounding.min.y;return{x:boundingWidth===0?0:(point.x-bounding.min.x)/boundingWidth,y:boundingHeight===0?0:(bounding.max.y-point.y)/boundingHeight}}function getEntrance(canvasArray,toImagePosition){let lineItem=canvasArray.map(canvas=>canvas.lineItems).reduce((acc,val)=>acc.concat(val),[]).find(item=>item.entrance!==null);if(!lineItem)return null;let canvas=lineItem.canvas,area=canvas.areas.find(area=>lineItem.line.points.every(point=>area.points.indexOf(point)>=0));if(!area)return null;let position=getCenterPointOfPoints([lineItem.startPointAt(),lineItem.endPointAt()]),northRad=lineItem.towardsRadWithArea(area)+lineItem.entrance/180*Math.PI;return{position_in_image:toImagePosition(position),north_rad:northRad,room_id:area.id,floor_index:canvasArray.findIndex(canvasItem=>canvasItem===canvas)}}function getObservers(canvasArray,vrData,observers,toImagePosition){return observers.filter(observer=>canvasArray[observer.floor_index]).map(observer=>({floor_index:observer.floor_index,position_in_image:toImagePosition(observerWorldPoint(observer,vrData))}))}function observerWorldPoint(observer,vrData){return{x:observer.position[0]*1e3+vrData.origin.left,y:-observer.position[2]*1e3+vrData.origin.top}}function getFloorplanRules(canvas){let top=[],right=[],bottom=[],left=[];for(let line of canvas.lines){if(!line.edgeComputed||!line.points.length)continue;let area=canvas.areas.find(area=>line.points.every(point=>area.points.includes(point)));if(!area)continue;let linePoints=line.edgePoints(!0),areaInnerPath=area.innerPath(!0,!1),[pt0,pt1]=linePoints.filter(point=>areaInnerPath.some(p=>samePointAt(p,point)));if(!pt0||!pt1)continue;let roundedPt0={x:pt0.x|0,y:pt0.y|0},roundedPt1={x:pt1.x|0,y:pt1.y|0},towardsRad=line.towardsRadWithArea(area),relativeX=Math.cos(towardsRad),relativeY=Math.sin(towardsRad);Math.abs(roundedPt0.y-roundedPt1.y)>MIN_RULE_LENGTH&&(relativeX<0?left.push([roundedPt0,roundedPt1].sort((a,b)=>a.y-b.y)):relativeX>0&&right.push([roundedPt0,roundedPt1].sort((a,b)=>a.y-b.y))),Math.abs(roundedPt0.x-roundedPt1.x)>MIN_RULE_LENGTH&&(relativeY<0?bottom.push([roundedPt0,roundedPt1].sort((a,b)=>a.x-b.x)):relativeY>0&&top.push([roundedPt0,roundedPt1].sort((a,b)=>a.x-b.x)))}return{top,right,bottom,left}}function samePointAt(point1,point2){return point1.x===point2.x&&point1.y===point2.y}function parallelLineOfLine(distanceOfLine,linePoints){let k=getK(linePoints[1],linePoints[0]),dx,dy;Math.abs(k)===1/0?(dy=0,dx=distanceOfLine):(dy=Math.sqrt(distanceOfLine*distanceOfLine/(k*k+1)),dx=dy/-(1/k));let result=[[{x:linePoints[0].x-dx,y:linePoints[0].y-dy},{x:linePoints[1].x-dx,y:linePoints[1].y-dy}],[{x:linePoints[0].x+dx,y:linePoints[0].y+dy},{x:linePoints[1].x+dx,y:linePoints[1].y+dy}]];return linePoints[1].x-linePoints[0].x<0?result:linePoints[1].x-linePoints[0].x>0||linePoints[1].y-linePoints[0].y<0?result.reverse():result}function getK(p0,p1){return(p0.y-p1.y)/(p0.x-p1.x)}function getCenterPointOfPoints(points){let minX=Math.min(...points.map(p=>p.x)),maxX=Math.max(...points.map(p=>p.x)),minY=Math.min(...points.map(p=>p.y)),maxY=Math.max(...points.map(p=>p.y));return{x:(minX+maxX)/2,y:(minY+maxY)/2}}export{formatFloorplanJson as default,formatFloorplanJson};
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five-webgpu
4
- * Generated: 2026/10/29
5
- * Version: 1.0.0-alpha.12
4
+ * Generated: 2026/11/3
5
+ * Version: 1.0.0-alpha.14
6
6
  * License:
7
7
  * Realsee SDK License Agreement
8
8
 
@@ -335,4 +335,4 @@
335
335
  * writing and signed by Realsee. You and Realsee hereto confirm that this
336
336
  * Agreement and all related documents shall be drafted in English.
337
337
 
338
- */function e(e,t={}){let n=``,{needZ:r,format:i}=t;return(r?e.slice().concat(e[0]):e.slice()).forEach((e,t)=>{let{x:r,y:a}=i?i(e):e,o=`${r},${a}`;n+=(t===0?`M`:`L`)+o}),n+(r?`Z`:``)}function t({x:e,y:t},n){let{max:r,min:i}=n;return{x:e-i.x,y:r.y-t}}exports.formatFloorplanPoint=t,exports.pathD=e;
338
+ */function pathD(points,options={}){let d=``,{needZ,format}=options;return(needZ?points.slice().concat(points[0]):points.slice()).forEach((_point,index)=>{let{x,y}=format?format(_point):_point,point=`${x},${y}`;d+=(index===0?`M`:`L`)+point}),d+(needZ?`Z`:``)}function formatFloorplanPoint({x,y},bounding){let{max,min}=bounding;return{x:x-min.x,y:max.y-y}}exports.formatFloorplanPoint=formatFloorplanPoint,exports.pathD=pathD;
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five-webgpu
4
- * Generated: 2026/10/29
5
- * Version: 1.0.0-alpha.12
4
+ * Generated: 2026/11/3
5
+ * Version: 1.0.0-alpha.14
6
6
  * License:
7
7
  * Realsee SDK License Agreement
8
8
 
@@ -335,4 +335,4 @@
335
335
  * writing and signed by Realsee. You and Realsee hereto confirm that this
336
336
  * Agreement and all related documents shall be drafted in English.
337
337
 
338
- */function e(e,t={}){let n=``,{needZ:r,format:i}=t;return(r?e.slice().concat(e[0]):e.slice()).forEach((e,t)=>{let{x:r,y:a}=i?i(e):e,o=`${r},${a}`;n+=(t===0?`M`:`L`)+o}),n+(r?`Z`:``)}function t({x:e,y:t},n){let{max:r,min:i}=n;return{x:e-i.x,y:r.y-t}}export{t as formatFloorplanPoint,e as pathD};
338
+ */function pathD(points,options={}){let d=``,{needZ,format}=options;return(needZ?points.slice().concat(points[0]):points.slice()).forEach((_point,index)=>{let{x,y}=format?format(_point):_point,point=`${x},${y}`;d+=(index===0?`M`:`L`)+point}),d+(needZ?`Z`:``)}function formatFloorplanPoint({x,y},bounding){let{max,min}=bounding;return{x:x-min.x,y:max.y-y}}export{formatFloorplanPoint,pathD};
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five-webgpu
4
- * Generated: 2026/10/29
5
- * Version: 1.0.0-alpha.12
4
+ * Generated: 2026/11/3
5
+ * Version: 1.0.0-alpha.14
6
6
  * License:
7
7
  * Realsee SDK License Agreement
8
8
 
@@ -335,4 +335,4 @@
335
335
  * writing and signed by Realsee. You and Realsee hereto confirm that this
336
336
  * Agreement and all related documents shall be drafted in English.
337
337
 
338
- */function e(e,t,n){let r=e.modelScene.boundingBox,i=r.isEmpty()?10:Math.pow(Math.pow(r.max.x-r.min.x+1,2)+Math.pow(r.max.y-r.min.y+1,2)+Math.pow(r.max.z-r.min.z+1,2),1/2),a=i/2/Math.tan(Math.PI*t/360);return n<1&&(a/=n),Number.isNaN(a)?i:a}exports.getDistanceFromModel=e;
338
+ */function getDistanceFromModel(five,fov,aspect){let boundingBox=five.modelScene.boundingBox,radius=boundingBox.isEmpty()?10:Math.pow(Math.pow(boundingBox.max.x-boundingBox.min.x+1,2)+Math.pow(boundingBox.max.y-boundingBox.min.y+1,2)+Math.pow(boundingBox.max.z-boundingBox.min.z+1,2),1/2),distance=radius/2/Math.tan(Math.PI*fov/360);return aspect<1&&(distance/=aspect),Number.isNaN(distance)?radius:distance}exports.getDistanceFromModel=getDistanceFromModel;
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five-webgpu
4
- * Generated: 2026/10/29
5
- * Version: 1.0.0-alpha.12
4
+ * Generated: 2026/11/3
5
+ * Version: 1.0.0-alpha.14
6
6
  * License:
7
7
  * Realsee SDK License Agreement
8
8
 
@@ -335,4 +335,4 @@
335
335
  * writing and signed by Realsee. You and Realsee hereto confirm that this
336
336
  * Agreement and all related documents shall be drafted in English.
337
337
 
338
- */function e(e,t,n){let r=e.modelScene.boundingBox,i=r.isEmpty()?10:Math.pow(Math.pow(r.max.x-r.min.x+1,2)+Math.pow(r.max.y-r.min.y+1,2)+Math.pow(r.max.z-r.min.z+1,2),1/2),a=i/2/Math.tan(Math.PI*t/360);return n<1&&(a/=n),Number.isNaN(a)?i:a}export{e as getDistanceFromModel};
338
+ */function getDistanceFromModel(five,fov,aspect){let boundingBox=five.modelScene.boundingBox,radius=boundingBox.isEmpty()?10:Math.pow(Math.pow(boundingBox.max.x-boundingBox.min.x+1,2)+Math.pow(boundingBox.max.y-boundingBox.min.y+1,2)+Math.pow(boundingBox.max.z-boundingBox.min.z+1,2),1/2),distance=radius/2/Math.tan(Math.PI*fov/360);return aspect<1&&(distance/=aspect),Number.isNaN(distance)?radius:distance}export{getDistanceFromModel};
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five-webgpu
4
- * Generated: 2026/10/29
5
- * Version: 1.0.0-alpha.12
4
+ * Generated: 2026/11/3
5
+ * Version: 1.0.0-alpha.14
6
6
  * License:
7
7
  * Realsee SDK License Agreement
8
8
 
@@ -335,4 +335,4 @@
335
335
  * writing and signed by Realsee. You and Realsee hereto confirm that this
336
336
  * Agreement and all related documents shall be drafted in English.
337
337
 
338
- */const e=require("../../../_virtual/_rolldown/runtime.js");let t=require("three/webgpu");t=e.__toESM(t,1);function n(e,t){var n,r;let i=(r=(n=e.work)==null?void 0:n.observers)==null?[]:r;if(t>(i.length?Math.max(...i.map(e=>e.floorIndex)):0))return e.modelScene.boundingBox.max.y;let a=i.filter(e=>e.floorIndex===t).map(e=>e.standingPosition.y);return a.length?Math.max(...a):e.modelScene.boundingBox.min.y}function r(e,t,r=3){let i=e.modelScene.boundingBox;return r===3?(i.max.y+i.min.y)/2:r===2?n(e,t+1):n(e,t)}function i(e,n,i,a){let o=r(e,i,a==null?void 0:a.attachedTo),s=new t.Vector3(0,o,0),c=new t.Vector3(1,o,0),l=s.clone().project(e.camera),u=c.clone().project(e.camera);return Math.abs((u.x-l.x)/1e3)*(n.getBoundingClientRect().width/2)}exports.getAttachedY=r,exports.getFloorY=n,exports.getPxmm=i;
338
+ */const require_runtime=require("../../../_virtual/_rolldown/runtime.js");let three_webgpu=require("three/webgpu");three_webgpu=require_runtime.__toESM(three_webgpu,1);function getFloorY(five,floorIndex){var _a,_b;let observers=(_b=(_a=five.work)==null?void 0:_a.observers)==null?[]:_b;if(floorIndex>(observers.length?Math.max(...observers.map(ob=>ob.floorIndex)):0))return five.modelScene.boundingBox.max.y;let ys=observers.filter(ob=>ob.floorIndex===floorIndex).map(ob=>ob.standingPosition.y);return ys.length?Math.max(...ys):five.modelScene.boundingBox.min.y}function getAttachedY(five,floorIndex,attachedTo=3){let boundingBox=five.modelScene.boundingBox;return attachedTo===3?(boundingBox.max.y+boundingBox.min.y)/2:attachedTo===2?getFloorY(five,floorIndex+1):getFloorY(five,floorIndex)}function getPxmm(five,container,floorIndex,options){let y=getAttachedY(five,floorIndex,options==null?void 0:options.attachedTo),originPosition=new three_webgpu.Vector3(0,y,0),originPositionXUnit=new three_webgpu.Vector3(1,y,0),mouse=originPosition.clone().project(five.camera),xUnitMouse=originPositionXUnit.clone().project(five.camera);return Math.abs((xUnitMouse.x-mouse.x)/1e3)*(container.getBoundingClientRect().width/2)}exports.getAttachedY=getAttachedY,exports.getFloorY=getFloorY,exports.getPxmm=getPxmm;
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five-webgpu
4
- * Generated: 2026/10/29
5
- * Version: 1.0.0-alpha.12
4
+ * Generated: 2026/11/3
5
+ * Version: 1.0.0-alpha.14
6
6
  * License:
7
7
  * Realsee SDK License Agreement
8
8
 
@@ -335,4 +335,4 @@
335
335
  * writing and signed by Realsee. You and Realsee hereto confirm that this
336
336
  * Agreement and all related documents shall be drafted in English.
337
337
 
338
- */import*as e from"three/webgpu";function t(e,t){var n,r;let i=(r=(n=e.work)==null?void 0:n.observers)==null?[]:r;if(t>(i.length?Math.max(...i.map(e=>e.floorIndex)):0))return e.modelScene.boundingBox.max.y;let a=i.filter(e=>e.floorIndex===t).map(e=>e.standingPosition.y);return a.length?Math.max(...a):e.modelScene.boundingBox.min.y}function n(e,n,r=3){let i=e.modelScene.boundingBox;return r===3?(i.max.y+i.min.y)/2:r===2?t(e,n+1):t(e,n)}function r(t,r,i,a){let o=n(t,i,a==null?void 0:a.attachedTo),s=new e.Vector3(0,o,0),c=new e.Vector3(1,o,0),l=s.clone().project(t.camera),u=c.clone().project(t.camera);return Math.abs((u.x-l.x)/1e3)*(r.getBoundingClientRect().width/2)}export{n as getAttachedY,t as getFloorY,r as getPxmm};
338
+ */import*as THREE from"three/webgpu";function getFloorY(five,floorIndex){var _a,_b;let observers=(_b=(_a=five.work)==null?void 0:_a.observers)==null?[]:_b;if(floorIndex>(observers.length?Math.max(...observers.map(ob=>ob.floorIndex)):0))return five.modelScene.boundingBox.max.y;let ys=observers.filter(ob=>ob.floorIndex===floorIndex).map(ob=>ob.standingPosition.y);return ys.length?Math.max(...ys):five.modelScene.boundingBox.min.y}function getAttachedY(five,floorIndex,attachedTo=3){let boundingBox=five.modelScene.boundingBox;return attachedTo===3?(boundingBox.max.y+boundingBox.min.y)/2:attachedTo===2?getFloorY(five,floorIndex+1):getFloorY(five,floorIndex)}function getPxmm(five,container,floorIndex,options){let y=getAttachedY(five,floorIndex,options==null?void 0:options.attachedTo),originPosition=new THREE.Vector3(0,y,0),originPositionXUnit=new THREE.Vector3(1,y,0),mouse=originPosition.clone().project(five.camera),xUnitMouse=originPositionXUnit.clone().project(five.camera);return Math.abs((xUnitMouse.x-mouse.x)/1e3)*(container.getBoundingClientRect().width/2)}export{getAttachedY,getFloorY,getPxmm};
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five-webgpu
4
- * Generated: 2026/10/29
5
- * Version: 1.0.0-alpha.12
4
+ * Generated: 2026/11/3
5
+ * Version: 1.0.0-alpha.14
6
6
  * License:
7
7
  * Realsee SDK License Agreement
8
8
 
@@ -335,4 +335,4 @@
335
335
  * writing and signed by Realsee. You and Realsee hereto confirm that this
336
336
  * Agreement and all related documents shall be drafted in English.
337
337
 
338
- */function e(e){return Object.prototype.toString.call(e)===`[object Object]`}exports.isTruelyObject=e;
338
+ */function isTruelyObject(value){return Object.prototype.toString.call(value)===`[object Object]`}exports.isTruelyObject=isTruelyObject;
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five-webgpu
4
- * Generated: 2026/10/29
5
- * Version: 1.0.0-alpha.12
4
+ * Generated: 2026/11/3
5
+ * Version: 1.0.0-alpha.14
6
6
  * License:
7
7
  * Realsee SDK License Agreement
8
8
 
@@ -335,4 +335,4 @@
335
335
  * writing and signed by Realsee. You and Realsee hereto confirm that this
336
336
  * Agreement and all related documents shall be drafted in English.
337
337
 
338
- */function e(e){return Object.prototype.toString.call(e)===`[object Object]`}export{e as isTruelyObject};
338
+ */function isTruelyObject(value){return Object.prototype.toString.call(value)===`[object Object]`}export{isTruelyObject};
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five-webgpu
4
- * Generated: 2026/10/29
5
- * Version: 1.0.0-alpha.12
4
+ * Generated: 2026/11/3
5
+ * Version: 1.0.0-alpha.14
6
6
  * License:
7
7
  * Realsee SDK License Agreement
8
8
 
@@ -335,4 +335,4 @@
335
335
  * writing and signed by Realsee. You and Realsee hereto confirm that this
336
336
  * Agreement and all related documents shall be drafted in English.
337
337
 
338
- */function e(e,t,n=2){return Number(e.toFixed(n))===Number(t.toFixed(n))}function t(e,t,n=2){let r=Math.PI*2,i=e=>(e%r+r)%r,a=i(e),o=i(t),s=Math.min(Math.abs(a-o),r-Math.abs(a-o));return Number(s.toFixed(n))===0}exports.nearlyEqual=e,exports.nearlyEqualRad=t;
338
+ */function nearlyEqual(x,y,precision=2){return Number(x.toFixed(precision))===Number(y.toFixed(precision))}function nearlyEqualRad(x,y,precision=2){let TWO_PI=Math.PI*2,normalize=rad=>(rad%TWO_PI+TWO_PI)%TWO_PI,nx=normalize(x),ny=normalize(y),diff=Math.min(Math.abs(nx-ny),TWO_PI-Math.abs(nx-ny));return Number(diff.toFixed(precision))===0}exports.nearlyEqual=nearlyEqual,exports.nearlyEqualRad=nearlyEqualRad;
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five-webgpu
4
- * Generated: 2026/10/29
5
- * Version: 1.0.0-alpha.12
4
+ * Generated: 2026/11/3
5
+ * Version: 1.0.0-alpha.14
6
6
  * License:
7
7
  * Realsee SDK License Agreement
8
8
 
@@ -335,4 +335,4 @@
335
335
  * writing and signed by Realsee. You and Realsee hereto confirm that this
336
336
  * Agreement and all related documents shall be drafted in English.
337
337
 
338
- */function e(e,t,n=2){return Number(e.toFixed(n))===Number(t.toFixed(n))}function t(e,t,n=2){let r=Math.PI*2,i=e=>(e%r+r)%r,a=i(e),o=i(t),s=Math.min(Math.abs(a-o),r-Math.abs(a-o));return Number(s.toFixed(n))===0}export{e as nearlyEqual,t as nearlyEqualRad};
338
+ */function nearlyEqual(x,y,precision=2){return Number(x.toFixed(precision))===Number(y.toFixed(precision))}function nearlyEqualRad(x,y,precision=2){let TWO_PI=Math.PI*2,normalize=rad=>(rad%TWO_PI+TWO_PI)%TWO_PI,nx=normalize(x),ny=normalize(y),diff=Math.min(Math.abs(nx-ny),TWO_PI-Math.abs(nx-ny));return Number(diff.toFixed(precision))===0}export{nearlyEqual,nearlyEqualRad};
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five-webgpu
4
- * Generated: 2026/10/29
5
- * Version: 1.0.0-alpha.12
4
+ * Generated: 2026/11/3
5
+ * Version: 1.0.0-alpha.14
6
6
  * License:
7
7
  * Realsee SDK License Agreement
8
8
 
@@ -335,4 +335,4 @@
335
335
  * writing and signed by Realsee. You and Realsee hereto confirm that this
336
336
  * Agreement and all related documents shall be drafted in English.
337
337
 
338
- */var e=class{constructor(e,t,r,i){this.x=e,this.y=t,this.h=r,this.d=n(e,t,i),this.max=this.d+this.h*Math.SQRT2}};function t(t,n=1){let i=0,a=0,o=0,s=0;for(let e=0;e<t[0].length;e++){let n=t[0][e];(!e||n[0]<i)&&(i=n[0]),(!e||n[1]<a)&&(a=n[1]),(!e||n[0]>o)&&(o=n[0]),(!e||n[1]>s)&&(s=n[1])}let c=o-i,l=s-a,u=Math.min(c,l),d=u/2;if(u===0)return[i,a];let f=[];for(let n=i;n<o;n+=u)for(let r=a;r<s;r+=u)f.push(new e(n+d,r+d,d,t));let p=r(t),m=new e(i+c/2,a+l/2,0,t);for(m.d>p.d&&(p=m);f.length;){f.sort((e,t)=>e.max-t.max);let r=f.pop();r.d>p.d&&(p=r),!(r.max-p.d<=n)&&(d=r.h/2,f.push(new e(r.x-d,r.y-d,d,t)),f.push(new e(r.x+d,r.y-d,d,t)),f.push(new e(r.x-d,r.y+d,d,t)),f.push(new e(r.x+d,r.y+d,d,t)))}return[p.x,p.y]}function n(e,t,n){let r=!1,a=1/0;for(let o=0;o<n.length;o++){let s=n[o];for(let n=0,o=s.length,c=o-1;n<o;c=n++){let o=s[n],l=s[c];o[1]>t!=l[1]>t&&e<(l[0]-o[0])*(t-o[1])/(l[1]-o[1])+o[0]&&(r=!r),a=Math.min(a,i(e,t,o,l))}}return(r?1:-1)*Math.sqrt(a)}function r(t){let n=0,r=0,i=0,a=t[0];for(let e=0,t=a.length,o=t-1;e<t;o=e++){let t=a[e],s=a[o],c=t[0]*s[1]-s[0]*t[1];r+=(t[0]+s[0])*c,i+=(t[1]+s[1])*c,n+=c*3}return n===0?new e(a[0][0],a[0][1],0,t):new e(r/n,i/n,0,t)}function i(e,t,n,r){let i=n[0],a=n[1],o=r[0]-i,s=r[1]-a;if(o!==0||s!==0){let n=((e-i)*o+(t-a)*s)/(o*o+s*s);n>1?(i=r[0],a=r[1]):n>0&&(i+=o*n,a+=s*n)}return o=e-i,s=t-a,o*o+s*s}exports.polylabel=t;
338
+ */var Cell=class{constructor(x,y,h,polygon){this.x=x,this.y=y,this.h=h,this.d=pointToPolygonDist(x,y,polygon),this.max=this.d+this.h*Math.SQRT2}};function polylabel(polygon,precision=1){let minX=0,minY=0,maxX=0,maxY=0;for(let i=0;i<polygon[0].length;i++){let p=polygon[0][i];(!i||p[0]<minX)&&(minX=p[0]),(!i||p[1]<minY)&&(minY=p[1]),(!i||p[0]>maxX)&&(maxX=p[0]),(!i||p[1]>maxY)&&(maxY=p[1])}let width=maxX-minX,height=maxY-minY,cellSize=Math.min(width,height),h=cellSize/2;if(cellSize===0)return[minX,minY];let cellQueue=[];for(let x=minX;x<maxX;x+=cellSize)for(let y=minY;y<maxY;y+=cellSize)cellQueue.push(new Cell(x+h,y+h,h,polygon));let bestCell=getCentroidCell(polygon),bboxCell=new Cell(minX+width/2,minY+height/2,0,polygon);for(bboxCell.d>bestCell.d&&(bestCell=bboxCell);cellQueue.length;){cellQueue.sort((a,b)=>a.max-b.max);let cell=cellQueue.pop();cell.d>bestCell.d&&(bestCell=cell),!(cell.max-bestCell.d<=precision)&&(h=cell.h/2,cellQueue.push(new Cell(cell.x-h,cell.y-h,h,polygon)),cellQueue.push(new Cell(cell.x+h,cell.y-h,h,polygon)),cellQueue.push(new Cell(cell.x-h,cell.y+h,h,polygon)),cellQueue.push(new Cell(cell.x+h,cell.y+h,h,polygon)))}return[bestCell.x,bestCell.y]}function pointToPolygonDist(x,y,polygon){let inside=!1,minDistSq=1/0;for(let k=0;k<polygon.length;k++){let ring=polygon[k];for(let i=0,len=ring.length,j=len-1;i<len;j=i++){let a=ring[i],b=ring[j];a[1]>y!=b[1]>y&&x<(b[0]-a[0])*(y-a[1])/(b[1]-a[1])+a[0]&&(inside=!inside),minDistSq=Math.min(minDistSq,getSegDistSq(x,y,a,b))}}return(inside?1:-1)*Math.sqrt(minDistSq)}function getCentroidCell(polygon){let area=0,x=0,y=0,points=polygon[0];for(let i=0,len=points.length,j=len-1;i<len;j=i++){let a=points[i],b=points[j],f=a[0]*b[1]-b[0]*a[1];x+=(a[0]+b[0])*f,y+=(a[1]+b[1])*f,area+=f*3}return area===0?new Cell(points[0][0],points[0][1],0,polygon):new Cell(x/area,y/area,0,polygon)}function getSegDistSq(px,py,a,b){let x=a[0],y=a[1],dx=b[0]-x,dy=b[1]-y;if(dx!==0||dy!==0){let t=((px-x)*dx+(py-y)*dy)/(dx*dx+dy*dy);t>1?(x=b[0],y=b[1]):t>0&&(x+=dx*t,y+=dy*t)}return dx=px-x,dy=py-y,dx*dx+dy*dy}exports.polylabel=polylabel;
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five-webgpu
4
- * Generated: 2026/10/29
5
- * Version: 1.0.0-alpha.12
4
+ * Generated: 2026/11/3
5
+ * Version: 1.0.0-alpha.14
6
6
  * License:
7
7
  * Realsee SDK License Agreement
8
8
 
@@ -335,4 +335,4 @@
335
335
  * writing and signed by Realsee. You and Realsee hereto confirm that this
336
336
  * Agreement and all related documents shall be drafted in English.
337
337
 
338
- */var e=class{constructor(e,t,r,i){this.x=e,this.y=t,this.h=r,this.d=n(e,t,i),this.max=this.d+this.h*Math.SQRT2}};function t(t,n=1){let i=0,a=0,o=0,s=0;for(let e=0;e<t[0].length;e++){let n=t[0][e];(!e||n[0]<i)&&(i=n[0]),(!e||n[1]<a)&&(a=n[1]),(!e||n[0]>o)&&(o=n[0]),(!e||n[1]>s)&&(s=n[1])}let c=o-i,l=s-a,u=Math.min(c,l),d=u/2;if(u===0)return[i,a];let f=[];for(let n=i;n<o;n+=u)for(let r=a;r<s;r+=u)f.push(new e(n+d,r+d,d,t));let p=r(t),m=new e(i+c/2,a+l/2,0,t);for(m.d>p.d&&(p=m);f.length;){f.sort((e,t)=>e.max-t.max);let r=f.pop();r.d>p.d&&(p=r),!(r.max-p.d<=n)&&(d=r.h/2,f.push(new e(r.x-d,r.y-d,d,t)),f.push(new e(r.x+d,r.y-d,d,t)),f.push(new e(r.x-d,r.y+d,d,t)),f.push(new e(r.x+d,r.y+d,d,t)))}return[p.x,p.y]}function n(e,t,n){let r=!1,a=1/0;for(let o=0;o<n.length;o++){let s=n[o];for(let n=0,o=s.length,c=o-1;n<o;c=n++){let o=s[n],l=s[c];o[1]>t!=l[1]>t&&e<(l[0]-o[0])*(t-o[1])/(l[1]-o[1])+o[0]&&(r=!r),a=Math.min(a,i(e,t,o,l))}}return(r?1:-1)*Math.sqrt(a)}function r(t){let n=0,r=0,i=0,a=t[0];for(let e=0,t=a.length,o=t-1;e<t;o=e++){let t=a[e],s=a[o],c=t[0]*s[1]-s[0]*t[1];r+=(t[0]+s[0])*c,i+=(t[1]+s[1])*c,n+=c*3}return n===0?new e(a[0][0],a[0][1],0,t):new e(r/n,i/n,0,t)}function i(e,t,n,r){let i=n[0],a=n[1],o=r[0]-i,s=r[1]-a;if(o!==0||s!==0){let n=((e-i)*o+(t-a)*s)/(o*o+s*s);n>1?(i=r[0],a=r[1]):n>0&&(i+=o*n,a+=s*n)}return o=e-i,s=t-a,o*o+s*s}export{t as polylabel};
338
+ */var Cell=class{constructor(x,y,h,polygon){this.x=x,this.y=y,this.h=h,this.d=pointToPolygonDist(x,y,polygon),this.max=this.d+this.h*Math.SQRT2}};function polylabel(polygon,precision=1){let minX=0,minY=0,maxX=0,maxY=0;for(let i=0;i<polygon[0].length;i++){let p=polygon[0][i];(!i||p[0]<minX)&&(minX=p[0]),(!i||p[1]<minY)&&(minY=p[1]),(!i||p[0]>maxX)&&(maxX=p[0]),(!i||p[1]>maxY)&&(maxY=p[1])}let width=maxX-minX,height=maxY-minY,cellSize=Math.min(width,height),h=cellSize/2;if(cellSize===0)return[minX,minY];let cellQueue=[];for(let x=minX;x<maxX;x+=cellSize)for(let y=minY;y<maxY;y+=cellSize)cellQueue.push(new Cell(x+h,y+h,h,polygon));let bestCell=getCentroidCell(polygon),bboxCell=new Cell(minX+width/2,minY+height/2,0,polygon);for(bboxCell.d>bestCell.d&&(bestCell=bboxCell);cellQueue.length;){cellQueue.sort((a,b)=>a.max-b.max);let cell=cellQueue.pop();cell.d>bestCell.d&&(bestCell=cell),!(cell.max-bestCell.d<=precision)&&(h=cell.h/2,cellQueue.push(new Cell(cell.x-h,cell.y-h,h,polygon)),cellQueue.push(new Cell(cell.x+h,cell.y-h,h,polygon)),cellQueue.push(new Cell(cell.x-h,cell.y+h,h,polygon)),cellQueue.push(new Cell(cell.x+h,cell.y+h,h,polygon)))}return[bestCell.x,bestCell.y]}function pointToPolygonDist(x,y,polygon){let inside=!1,minDistSq=1/0;for(let k=0;k<polygon.length;k++){let ring=polygon[k];for(let i=0,len=ring.length,j=len-1;i<len;j=i++){let a=ring[i],b=ring[j];a[1]>y!=b[1]>y&&x<(b[0]-a[0])*(y-a[1])/(b[1]-a[1])+a[0]&&(inside=!inside),minDistSq=Math.min(minDistSq,getSegDistSq(x,y,a,b))}}return(inside?1:-1)*Math.sqrt(minDistSq)}function getCentroidCell(polygon){let area=0,x=0,y=0,points=polygon[0];for(let i=0,len=points.length,j=len-1;i<len;j=i++){let a=points[i],b=points[j],f=a[0]*b[1]-b[0]*a[1];x+=(a[0]+b[0])*f,y+=(a[1]+b[1])*f,area+=f*3}return area===0?new Cell(points[0][0],points[0][1],0,polygon):new Cell(x/area,y/area,0,polygon)}function getSegDistSq(px,py,a,b){let x=a[0],y=a[1],dx=b[0]-x,dy=b[1]-y;if(dx!==0||dy!==0){let t=((px-x)*dx+(py-y)*dy)/(dx*dx+dy*dy);t>1?(x=b[0],y=b[1]):t>0&&(x+=dx*t,y+=dy*t)}return dx=px-x,dy=py-y,dx*dx+dy*dy}export{polylabel};
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five-webgpu
4
- * Generated: 2026/10/29
5
- * Version: 1.0.0-alpha.12
4
+ * Generated: 2026/11/3
5
+ * Version: 1.0.0-alpha.14
6
6
  * License:
7
7
  * Realsee SDK License Agreement
8
8
 
@@ -335,4 +335,4 @@
335
335
  * writing and signed by Realsee. You and Realsee hereto confirm that this
336
336
  * Agreement and all related documents shall be drafted in English.
337
337
 
338
- */let e=require("tslib");function t(t){return(0,e.__awaiter)(this,void 0,void 0,function*(){try{return[null,yield t]}catch(e){return e instanceof Error?[e,null]:[Error(String(e)),null]}})}exports.default=t,exports.to=t;
338
+ */let tslib=require("tslib");function to(promise){return(0,tslib.__awaiter)(this,void 0,void 0,function*(){try{return[null,yield promise]}catch(error){return error instanceof Error?[error,null]:[Error(String(error)),null]}})}exports.default=to,exports.to=to;
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five-webgpu
4
- * Generated: 2026/10/29
5
- * Version: 1.0.0-alpha.12
4
+ * Generated: 2026/11/3
5
+ * Version: 1.0.0-alpha.14
6
6
  * License:
7
7
  * Realsee SDK License Agreement
8
8
 
@@ -335,4 +335,4 @@
335
335
  * writing and signed by Realsee. You and Realsee hereto confirm that this
336
336
  * Agreement and all related documents shall be drafted in English.
337
337
 
338
- */import{__awaiter as e}from"tslib";function t(t){return e(this,void 0,void 0,function*(){try{return[null,yield t]}catch(e){return e instanceof Error?[e,null]:[Error(String(e)),null]}})}export{t as default,t as to};
338
+ */import{__awaiter}from"tslib";function to(promise){return __awaiter(this,void 0,void 0,function*(){try{return[null,yield promise]}catch(error){return error instanceof Error?[error,null]:[Error(String(error)),null]}})}export{to as default,to};
@@ -21,6 +21,12 @@ export declare class Controller extends BasePlugin.Controller<PluginType.State,
21
21
  private extractKeyframes;
22
22
  private computeAABB2D;
23
23
  private findClosestKeyframeToRay;
24
+ /**
25
+ * 是否允许播放入场动画。
26
+ * 受 parameter.enableGaussianSplattingInitAnimation 控制(默认 false),
27
+ * 为 false 时不激活动画(高斯点按正常原始尺寸渲染)。
28
+ */
29
+ private isInitAnimationEnabled;
24
30
  /**
25
31
  * 查找 PBMGaussianSplatting 渲染网格。
26
32
  * 通过 `isPBMGaussianSplattingMaterial` 标记识别 NodeMaterial(参见 PBMGaussianSplattingNodeMaterial)。
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five-webgpu
4
- * Generated: 2026/10/29
5
- * Version: 1.0.0-alpha.12
4
+ * Generated: 2026/11/3
5
+ * Version: 1.0.0-alpha.14
6
6
  * License:
7
7
  * Realsee SDK License Agreement
8
8
 
@@ -335,4 +335,4 @@
335
335
  * writing and signed by Realsee. You and Realsee hereto confirm that this
336
336
  * Agreement and all related documents shall be drafted in English.
337
337
 
338
- */const e=require("../../_virtual/_rolldown/runtime.js"),t=require("../BasePlugin/index.js");let n=require("tslib"),r=require("@realsee/five-webgpu"),i=require("three/webgpu");i=e.__toESM(i,1);var a=class{constructor(e,t,n,r,i){this.R=e,this.Q=t,this.A=n,this.B=r,this.C=i,this.cov=NaN,this.x=NaN}filter(e,t=0){if(isNaN(this.x))this.x=1/this.C*e,this.cov=1/this.C*this.Q*(1/this.C);else{let n=this.A*this.x+this.B*t,r=this.A*this.cov*this.A+this.R,i=r*this.C*(1/(this.C*r*this.C+this.Q));this.x=n+i*(e-this.C*n),this.cov=r-i*this.C*r}return this.x}},o=class extends t.BasePlugin.Controller{updateState(e,t){let n=this.state;this.state=Object.assign(Object.assign({},this.state),e),this.hooks.emit(`stateChange`,{state:this.state,prevState:n,userAction:t})}constructor(e,t){var n,r,i;super(e),this.boundingAABB=null,this.cancelAnimation=null,this.boundsSet=!1,this.keyframes=[],this.five=e,this.state={enabled:!0,visible:!0},this.duration=(n=t==null?void 0:t.duration)==null?5e3:n,this.curveHeight=(r=t==null?void 0:t.curveHeight)==null?1.5:r,this.pointDuration=(i=t==null?void 0:t.pointDuration)==null?3e3:i}load(){return(0,n.__awaiter)(this,void 0,void 0,function*(){})}enable(e){var t;if(this.state.enabled)return;let n=(t=e==null?void 0:e.userAction)==null?!0:t;this.updateState({enabled:!0},n)}disable(e){var t;if(this.state.enabled===!1)return;let n=(t=e==null?void 0:e.userAction)==null?!0:t;this.updateState({enabled:!1},n)}dispose(){this.disable(),this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null);try{let e=this.findRenderMesh();e&&(e.material.aggregationEnabled=!1,e.material.aggregationProgress=1)}catch(e){}}extractKeyframes(e){let t=[];if(!e.content.data)throw Error(`轨迹数据未加载`);let n=e.content.data.positionArray,r=n.length/3,o=.01,s=.1,c=new a(o,s,1,0,1),l=new a(o,s,1,0,1),u=new a(o,s,1,0,1),d=new Float32Array(r);for(let e=0;e<r;e++)if(e===0)d[e]=0;else{let t=new i.Vector3(n[(e-1)*3],n[(e-1)*3+1],n[(e-1)*3+2]);d[e]=new i.Vector3(n[e*3],n[e*3+1],n[e*3+2]).distanceTo(t)+d[e-1]}for(let a=0;a<r;a++){let o=new i.Vector3(0,0,0),s=0;for(let e=a-5;e<a+6;e++)e>=0&&e<r&&(o.add(new i.Vector3(n[e*3],n[e*3+1],n[e*3+2])),s++);o.divideScalar(s).applyMatrix4(e.transform);let f=c.filter(o.x),p=l.filter(o.y),m=u.filter(o.z);t.push({position:new i.Vector3(f,p,m),location:d[a]})}return t}computeAABB2D(e){let t=1/0,n=-1/0,r=1/0,a=-1/0;for(let i of e)i.position.x<t&&(t=i.position.x),i.position.x>n&&(n=i.position.x),i.position.z<r&&(r=i.position.z),i.position.z>a&&(a=i.position.z);return{min:new i.Vector2(t,r),max:new i.Vector2(n,a)}}findClosestKeyframeToRay(e,t){let n=1/0,r=t[0].position.clone(),a=new i.Vector3;for(let i of t){e.closestPointToPoint(i.position,a);let t=a.distanceTo(i.position);t<n&&(n=t,r=i.position.clone())}return r}findRenderMesh(){let e=null;if(this.five.scene.traverse(t=>{if(e)return;let n=t,r=n.material;r&&r.isPBMGaussianSplattingMaterial&&(e=n)}),!e)throw Error(`未找到 GaussianSplatting 渲染网格`);return e}loadTrajectoryDataIfNeeded(e){return(0,n.__awaiter)(this,void 0,void 0,function*(){var t,n,i,a,o,s,c,l;if((t=e.content)!=null&&t.data)return;if(((n=e.content)==null?void 0:n.loadState)===`LOADING`){yield new Promise(t=>{let n=r.AnimationFrameLoop.shared.add(()=>{var r;let i=(r=e.content)==null?void 0:r.loadState;(i===`READY`||i===`FAILED`||i===`UNLOADED`)&&(n(),t())})});return}let u=(i=this.five.model.viewLayers)==null?void 0:i[0],d=u==null?void 0:u.fetcher,f=u==null?void 0:u.search,p=(a=e.content)==null?void 0:a.uri;if(!d||!p)return;let m=f?p.includes(`?`)?`${p}&${f.replace(/^\?/,``)}`:`${p}${f.startsWith(`?`)?f:`?${f}`}`:p;e.content.loadState=`LOADING`;try{let t=yield(0,r.loadPly)(m,{type:`geometry`,customPropertyMapping:{time:{itemType:`uint32`,itemNames:[`time_milisec`]}},fetcher:d}),n=t.scene,i=n.getAttribute(`position`),a=n.getAttribute(`time`),u=(o=i==null?void 0:i.array)==null?new Float32Array:o,f=(s=a==null?void 0:a.array)==null?new Uint32Array:s;e.content.data={uri:m,byteLength:(c=t.byteLength)==null?0:c,memoryUsage:(l=t.memoryUsage)==null?0:l,positionArray:u,timeArray:f,object:null},e.content.loadState=`READY`}catch(t){console.warn(`[GaussianSplattingEntranceAnimationPlugin] trajectory ply 加载失败,将使用 3DGS AABB 回退`,t),e.content.data=void 0,e.content.loadState=`FAILED`}})}computeGSSceneBounds(){let e=new i.Box3,t=new i.Box3;return this.five.scene.traverse(n=>{let r=n;(r==null?void 0:r.boundingBox)instanceof i.Box3&&!r.boundingBox.isEmpty()&&(t.copy(r.boundingBox),r.matrixWorld&&t.applyMatrix4(r.matrixWorld),e.union(t))}),e.isEmpty()?null:e}getCameraCurve(){return(0,n.__awaiter)(this,void 0,void 0,function*(){var e,t,n,r,a,o,s,c,l,u;let d=(r=(n=(t=(e=this.five.model.viewLayers)==null?void 0:e[0])==null?void 0:t.trajectories)==null?void 0:n[0])==null?(c=(s=(o=(a=this.five.model.viewLayers)==null?void 0:a[0])==null?void 0:o.scene)==null?void 0:s.trajectories)==null?void 0:c[0]:r,f=null,p=null;if(d&&(yield this.loadTrajectoryDataIfNeeded(d),(l=d.content)!=null&&l.data&&((u=d.content.data.positionArray)==null?void 0:u.length)>=6&&(f=this.extractKeyframes(d),f.length>=2?p=this.computeAABB2D(f):f=null)),!f||!p){let e=this.computeGSSceneBounds();if(!e)throw Error(`未找到可用于计算入场曲线的 3DGS 边界或轨迹`);p={min:new i.Vector2(e.min.x,e.min.z),max:new i.Vector2(e.max.x,e.max.z)};let t=(p.min.x+p.max.x)/2,n=(p.min.y+p.max.y)/2,r=(e.min.y+e.max.y)/2,a=Math.max(p.max.x-p.min.x,p.max.y-p.min.y)*.5;f=[];let o=0,s=null;for(let e=0;e<16;e++){let c=e/16*Math.PI*2,l=new i.Vector3(t+Math.cos(c)*a,r,n+Math.sin(c)*a);s&&(o+=l.distanceTo(s)),f.push({position:l,location:o}),s=l}}this.keyframes=f,this.boundingAABB=p;let m=this.curveHeight,h=new i.Vector3((p.min.x+p.max.x)/2,m,(p.min.y+p.max.y)/2),g=(p.max.x-p.min.x)/2,_=(p.max.y-p.min.y)/2,v=Math.sqrt(g*g+_*_),y=e=>{let t=new i.Vector3().subVectors(e,h);return t.length()<.001&&t.set(1,0,0),h.clone().add(t.normalize().multiplyScalar(v))},b=new i.Vector3(f[0].position.x,m,f[0].position.z),x=y(b),S=new i.Vector3().subVectors(h,b).normalize(),C=new i.Ray(b,S),w=new i.Vector3(-S.z,0,S.x).normalize(),T=new i.Ray(h,w),E=this.findClosestKeyframeToRay(T,f),D=y(new i.Vector3(E.x,m,E.z)),O=this.findClosestKeyframeToRay(C,f),k=y(new i.Vector3(O.x,m,O.z));return new i.CatmullRomCurve3([x,D,k],!1,`centripetal`,.5)})}setBounding(e,t,n){let r=this.findRenderMesh();r.material.aggregationBoundsMin.copy(e),r.material.aggregationBoundsMax.copy(t),this.boundsSet=!0}setBounds(){if(!this.boundingAABB)throw Error(`请先调用 getCameraCurve 计算轨迹边界`);let e=this.boundingAABB,t=this.findRenderMesh(),n=new i.Vector3(e.min.x,0,e.min.y),r=new i.Vector3(e.max.x,3,e.max.y);t.material.aggregationBoundsMin.copy(n),t.material.aggregationBoundsMax.copy(r),this.boundsSet=!0}normalizedPointDuration(){let e=this.pointDuration;return e<=0?.01:Math.min(e<=1?e:e/this.duration,1)}resetToPointCloud(){return(0,n.__awaiter)(this,void 0,void 0,function*(){this.boundingAABB||(yield this.getCameraCurve()),this.setBounds();let e=this.findRenderMesh().material;e.aggregationEnabled=!0,e.aggregationProgress=0,e.aggregationPointDuration=this.normalizedPointDuration(),this.five.needsRender=!0,this.five.modelSceneNeedsRender=!0})}startAggregation(){if(!this.boundsSet)throw Error(`请先调用 setBounds 设置聚合边界`);let e=this.findRenderMesh().material;e.aggregationEnabled=!0,e.aggregationProgress=0,e.aggregationPointDuration=this.normalizedPointDuration(),this.five.needsRender=!0;let t=performance.now(),n=this.duration;this.cancelAnimation=r.AnimationFrameLoop.shared.add(()=>{let r=performance.now()-t,i=Math.min(r/n,1);e.aggregationProgress=i*i*(3-2*i),this.five.needsRender=!0,this.five.modelSceneNeedsRender=!0,i>=1&&(e.aggregationEnabled=!1,this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null))})}playEntrance(){return(0,n.__awaiter)(this,void 0,void 0,function*(){let e=yield this.getCameraCurve(),t=this.boundingAABB,n=new i.Vector3((t.min.x+t.max.x)/2,this.curveHeight,(t.min.y+t.max.y)/2),a=e.getPointAt(0),o=new r.Camera(90).copy(this.five.camera);o.position.copy(a),o.lookAt(n),o.computePose(0),this.five.setState(Object.assign({},o.pose)),this.setBounds();let s=this.findRenderMesh().material;s.aggregationEnabled=!0,s.aggregationProgress=0,s.aggregationPointDuration=this.normalizedPointDuration(),this.five.needsRender=!0;let c=this.duration,l=performance.now();return new Promise(t=>{this.cancelAnimation=r.AnimationFrameLoop.shared.add(()=>{let r=performance.now()-l,i=Math.min(r/c,1),a=i*i*(3-2*i);s.aggregationProgress=a,this.five.modelSceneNeedsRender=!0;let u=e.getPointAt(a);o.position.copy(u),o.lookAt(n),o.computePose(0),this.five.setState(Object.assign({},o.pose)),this.five.needsRender=!0,i>=1&&(s.aggregationEnabled=!1,s.aggregationProgress=1,this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null),t())})})})}};exports.Controller=o;
338
+ */const require_runtime=require("../../_virtual/_rolldown/runtime.js"),require_index=require("../BasePlugin/index.js");let tslib=require("tslib"),_realsee_five_webgpu=require("@realsee/five-webgpu"),three_webgpu=require("three/webgpu");three_webgpu=require_runtime.__toESM(three_webgpu,1);var KalmanFilter=class{constructor(R,Q,A,B,C){this.R=R,this.Q=Q,this.A=A,this.B=B,this.C=C,this.cov=NaN,this.x=NaN}filter(z,u=0){if(isNaN(this.x))this.x=1/this.C*z,this.cov=1/this.C*this.Q*(1/this.C);else{let predX=this.A*this.x+this.B*u,predCov=this.A*this.cov*this.A+this.R,K=predCov*this.C*(1/(this.C*predCov*this.C+this.Q));this.x=predX+K*(z-this.C*predX),this.cov=predCov-K*this.C*predCov}return this.x}},Controller=class extends require_index.BasePlugin.Controller{updateState(state,userAction){let prevState=this.state;this.state=Object.assign(Object.assign({},this.state),state),this.hooks.emit(`stateChange`,{state:this.state,prevState,userAction})}constructor(five,config){var _a,_b,_c;super(five),this.boundingAABB=null,this.cancelAnimation=null,this.boundsSet=!1,this.keyframes=[],this.five=five,this.state={enabled:!0,visible:!0},this.duration=(_a=config==null?void 0:config.duration)==null?5e3:_a,this.curveHeight=(_b=config==null?void 0:config.curveHeight)==null?1.5:_b,this.pointDuration=(_c=config==null?void 0:config.pointDuration)==null?3e3:_c}load(){return(0,tslib.__awaiter)(this,void 0,void 0,function*(){})}enable(options){var _a;if(this.state.enabled)return;let userAction=(_a=options==null?void 0:options.userAction)==null?!0:_a;this.updateState({enabled:!0},userAction)}disable(options){var _a;if(this.state.enabled===!1)return;let userAction=(_a=options==null?void 0:options.userAction)==null?!0:_a;this.updateState({enabled:!1},userAction)}dispose(){this.disable(),this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null);try{let renderMesh=this.findRenderMesh();renderMesh&&(renderMesh.material.aggregationEnabled=!1,renderMesh.material.aggregationProgress=1)}catch(_){}}extractKeyframes(trajectory){let keyframes=[];if(!trajectory.content.data)throw Error(`轨迹数据未加载`);let points=trajectory.content.data.positionArray,numPoints=points.length/3,R=.01,Q=.1,kfX=new KalmanFilter(R,Q,1,0,1),kfY=new KalmanFilter(R,Q,1,0,1),kfZ=new KalmanFilter(R,Q,1,0,1),lineDistances=new Float32Array(numPoints);for(let i=0;i<numPoints;i++)if(i===0)lineDistances[i]=0;else{let prev=new three_webgpu.Vector3(points[(i-1)*3],points[(i-1)*3+1],points[(i-1)*3+2]);lineDistances[i]=new three_webgpu.Vector3(points[i*3],points[i*3+1],points[i*3+2]).distanceTo(prev)+lineDistances[i-1]}for(let i=0;i<numPoints;i++){let smoothPosition=new three_webgpu.Vector3(0,0,0),count=0;for(let j=i-5;j<i+6;j++)j>=0&&j<numPoints&&(smoothPosition.add(new three_webgpu.Vector3(points[j*3],points[j*3+1],points[j*3+2])),count++);smoothPosition.divideScalar(count).applyMatrix4(trajectory.transform);let x=kfX.filter(smoothPosition.x),y=kfY.filter(smoothPosition.y),z=kfZ.filter(smoothPosition.z);keyframes.push({position:new three_webgpu.Vector3(x,y,z),location:lineDistances[i]})}return keyframes}computeAABB2D(keyframes){let minX=1/0,maxX=-1/0,minZ=1/0,maxZ=-1/0;for(let kf of keyframes)kf.position.x<minX&&(minX=kf.position.x),kf.position.x>maxX&&(maxX=kf.position.x),kf.position.z<minZ&&(minZ=kf.position.z),kf.position.z>maxZ&&(maxZ=kf.position.z);return{min:new three_webgpu.Vector2(minX,minZ),max:new three_webgpu.Vector2(maxX,maxZ)}}findClosestKeyframeToRay(ray,keyframes){let closestDist=1/0,closestPos=keyframes[0].position.clone(),tmpVec=new three_webgpu.Vector3;for(let kf of keyframes){ray.closestPointToPoint(kf.position,tmpVec);let dist=tmpVec.distanceTo(kf.position);dist<closestDist&&(closestDist=dist,closestPos=kf.position.clone())}return closestPos}isInitAnimationEnabled(){return this.five.modelScene.parameter.resolveValue(`enableGaussianSplattingInitAnimation`)===!0}findRenderMesh(){let found=null;if(this.five.scene.traverse(object=>{if(found)return;let mesh=object,material=mesh.material;material&&material.isPBMGaussianSplattingMaterial&&(found=mesh)}),!found)throw Error(`未找到 GaussianSplatting 渲染网格`);return found}loadTrajectoryDataIfNeeded(trajectory){return(0,tslib.__awaiter)(this,void 0,void 0,function*(){var _a,_b,_c,_d,_e,_f,_g,_h;if((_a=trajectory.content)!=null&&_a.data)return;if(((_b=trajectory.content)==null?void 0:_b.loadState)===`LOADING`){yield new Promise(resolve=>{let cancel=_realsee_five_webgpu.AnimationFrameLoop.shared.add(()=>{var _a;let s=(_a=trajectory.content)==null?void 0:_a.loadState;(s===`READY`||s===`FAILED`||s===`UNLOADED`)&&(cancel(),resolve())})});return}let viewLayer=(_c=this.five.model.viewLayers)==null?void 0:_c[0],fetcher=viewLayer==null?void 0:viewLayer.fetcher,search=viewLayer==null?void 0:viewLayer.search,uri=(_d=trajectory.content)==null?void 0:_d.uri;if(!fetcher||!uri)return;let url=search?uri.includes(`?`)?`${uri}&${search.replace(/^\?/,``)}`:`${uri}${search.startsWith(`?`)?search:`?${search}`}`:uri;trajectory.content.loadState=`LOADING`;try{let plyResult=yield(0,_realsee_five_webgpu.loadPly)(url,{type:`geometry`,customPropertyMapping:{time:{itemType:`uint32`,itemNames:[`time_milisec`]}},fetcher}),geometry=plyResult.scene,positionAttr=geometry.getAttribute(`position`),timeAttr=geometry.getAttribute(`time`),positionArray=(_e=positionAttr==null?void 0:positionAttr.array)==null?new Float32Array:_e,timeArray=(_f=timeAttr==null?void 0:timeAttr.array)==null?new Uint32Array:_f;trajectory.content.data={uri:url,byteLength:(_g=plyResult.byteLength)==null?0:_g,memoryUsage:(_h=plyResult.memoryUsage)==null?0:_h,positionArray,timeArray,object:null},trajectory.content.loadState=`READY`}catch(err){console.warn(`[GaussianSplattingEntranceAnimationPlugin] trajectory ply 加载失败,将使用 3DGS AABB 回退`,err),trajectory.content.data=void 0,trajectory.content.loadState=`FAILED`}})}computeGSSceneBounds(){let bounds=new three_webgpu.Box3,tmpBox=new three_webgpu.Box3;return this.five.scene.traverse(object=>{let anyObj=object;(anyObj==null?void 0:anyObj.boundingBox)instanceof three_webgpu.Box3&&!anyObj.boundingBox.isEmpty()&&(tmpBox.copy(anyObj.boundingBox),anyObj.matrixWorld&&tmpBox.applyMatrix4(anyObj.matrixWorld),bounds.union(tmpBox))}),bounds.isEmpty()?null:bounds}getCameraCurve(){return(0,tslib.__awaiter)(this,void 0,void 0,function*(){var _a,_b,_c,_d,_e,_f,_g,_h,_j,_k;let trajectory=(_d=(_c=(_b=(_a=this.five.model.viewLayers)==null?void 0:_a[0])==null?void 0:_b.trajectories)==null?void 0:_c[0])==null?(_h=(_g=(_f=(_e=this.five.model.viewLayers)==null?void 0:_e[0])==null?void 0:_f.scene)==null?void 0:_g.trajectories)==null?void 0:_h[0]:_d,keyframes=null,aabb=null;if(trajectory&&(yield this.loadTrajectoryDataIfNeeded(trajectory),(_j=trajectory.content)!=null&&_j.data&&((_k=trajectory.content.data.positionArray)==null?void 0:_k.length)>=6&&(keyframes=this.extractKeyframes(trajectory),keyframes.length>=2?aabb=this.computeAABB2D(keyframes):keyframes=null)),!keyframes||!aabb){let sceneBounds=this.computeGSSceneBounds();if(!sceneBounds)throw Error(`未找到可用于计算入场曲线的 3DGS 边界或轨迹`);aabb={min:new three_webgpu.Vector2(sceneBounds.min.x,sceneBounds.min.z),max:new three_webgpu.Vector2(sceneBounds.max.x,sceneBounds.max.z)};let cx=(aabb.min.x+aabb.max.x)/2,cz=(aabb.min.y+aabb.max.y)/2,y=(sceneBounds.min.y+sceneBounds.max.y)/2,r=Math.max(aabb.max.x-aabb.min.x,aabb.max.y-aabb.min.y)*.5;keyframes=[];let acc=0,prev=null;for(let i=0;i<16;i++){let t=i/16*Math.PI*2,p=new three_webgpu.Vector3(cx+Math.cos(t)*r,y,cz+Math.sin(t)*r);prev&&(acc+=p.distanceTo(prev)),keyframes.push({position:p,location:acc}),prev=p}}this.keyframes=keyframes,this.boundingAABB=aabb;let curveHeight=this.curveHeight,aabbCenter=new three_webgpu.Vector3((aabb.min.x+aabb.max.x)/2,curveHeight,(aabb.min.y+aabb.max.y)/2),halfW=(aabb.max.x-aabb.min.x)/2,halfH=(aabb.max.y-aabb.min.y)/2,boundingRadius=Math.sqrt(halfW*halfW+halfH*halfH),projectToSphere=pt=>{let dir=new three_webgpu.Vector3().subVectors(pt,aabbCenter);return dir.length()<.001&&dir.set(1,0,0),aabbCenter.clone().add(dir.normalize().multiplyScalar(boundingRadius))},startRaw=new three_webgpu.Vector3(keyframes[0].position.x,curveHeight,keyframes[0].position.z),startPoint=projectToSphere(startRaw),primaryDir=new three_webgpu.Vector3().subVectors(aabbCenter,startRaw).normalize(),primaryRay=new three_webgpu.Ray(startRaw,primaryDir),secondaryDir=new three_webgpu.Vector3(-primaryDir.z,0,primaryDir.x).normalize(),secondaryRay=new three_webgpu.Ray(aabbCenter,secondaryDir),p1Raw=this.findClosestKeyframeToRay(secondaryRay,keyframes),p1=projectToSphere(new three_webgpu.Vector3(p1Raw.x,curveHeight,p1Raw.z)),p2Raw=this.findClosestKeyframeToRay(primaryRay,keyframes),p2=projectToSphere(new three_webgpu.Vector3(p2Raw.x,curveHeight,p2Raw.z));return new three_webgpu.CatmullRomCurve3([startPoint,p1,p2],!1,`centripetal`,.5)})}setBounding(boundsMin,boundsMax,_center){let renderMesh=this.findRenderMesh();renderMesh.material.aggregationBoundsMin.copy(boundsMin),renderMesh.material.aggregationBoundsMax.copy(boundsMax),this.boundsSet=!0}setBounds(){if(!this.boundingAABB)throw Error(`请先调用 getCameraCurve 计算轨迹边界`);let aabb=this.boundingAABB,renderMesh=this.findRenderMesh(),boundsMin=new three_webgpu.Vector3(aabb.min.x,0,aabb.min.y),boundsMax=new three_webgpu.Vector3(aabb.max.x,3,aabb.max.y);renderMesh.material.aggregationBoundsMin.copy(boundsMin),renderMesh.material.aggregationBoundsMax.copy(boundsMax),this.boundsSet=!0}normalizedPointDuration(){let pd=this.pointDuration;return pd<=0?.01:Math.min(pd<=1?pd:pd/this.duration,1)}resetToPointCloud(){return(0,tslib.__awaiter)(this,void 0,void 0,function*(){if(!this.isInitAnimationEnabled())return;this.boundingAABB||(yield this.getCameraCurve()),this.setBounds();let material=this.findRenderMesh().material;material.aggregationEnabled=!0,material.aggregationProgress=0,material.aggregationPointDuration=this.normalizedPointDuration(),this.five.needsRender=!0,this.five.modelSceneNeedsRender=!0})}startAggregation(){if(!this.isInitAnimationEnabled()){console.warn(`[GaussianSplattingEntranceAnimationPlugin] modelScene.enableGaussianSplattingInitAnimation 为 false,已跳过聚合动画`);return}if(!this.boundsSet)throw Error(`请先调用 setBounds 设置聚合边界`);let material=this.findRenderMesh().material;material.aggregationEnabled=!0,material.aggregationProgress=0,material.aggregationPointDuration=this.normalizedPointDuration(),this.five.needsRender=!0;let startTime=performance.now(),duration=this.duration;this.cancelAnimation=_realsee_five_webgpu.AnimationFrameLoop.shared.add(()=>{let elapsed=performance.now()-startTime,progress=Math.min(elapsed/duration,1);material.aggregationProgress=progress*progress*(3-2*progress),this.five.needsRender=!0,this.five.modelSceneNeedsRender=!0,progress>=1&&(material.aggregationEnabled=!1,this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null))})}playEntrance(){return(0,tslib.__awaiter)(this,void 0,void 0,function*(){if(!this.isInitAnimationEnabled()){console.warn(`[GaussianSplattingEntranceAnimationPlugin] modelScene.enableGaussianSplattingInitAnimation 为 false,已跳过入场动画`);return}let curve=yield this.getCameraCurve(),aabb=this.boundingAABB,boundingCenter=new three_webgpu.Vector3((aabb.min.x+aabb.max.x)/2,this.curveHeight,(aabb.min.y+aabb.max.y)/2),startPoint=curve.getPointAt(0),visualCamera=new _realsee_five_webgpu.Camera(90).copy(this.five.camera);visualCamera.position.copy(startPoint),visualCamera.lookAt(boundingCenter),visualCamera.computePose(0),this.five.setState(Object.assign({},visualCamera.pose)),this.setBounds();let material=this.findRenderMesh().material;material.aggregationEnabled=!0,material.aggregationProgress=0,material.aggregationPointDuration=this.normalizedPointDuration(),this.five.needsRender=!0;let duration=this.duration,startTime=performance.now();return new Promise(resolve=>{this.cancelAnimation=_realsee_five_webgpu.AnimationFrameLoop.shared.add(()=>{let elapsed=performance.now()-startTime,t=Math.min(elapsed/duration,1),eased=t*t*(3-2*t);material.aggregationProgress=eased,this.five.modelSceneNeedsRender=!0;let point=curve.getPointAt(eased);visualCamera.position.copy(point),visualCamera.lookAt(boundingCenter),visualCamera.computePose(0),this.five.setState(Object.assign({},visualCamera.pose)),this.five.needsRender=!0,t>=1&&(material.aggregationEnabled=!1,material.aggregationProgress=1,this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null),resolve())})})})}};exports.Controller=Controller;
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five-webgpu
4
- * Generated: 2026/10/29
5
- * Version: 1.0.0-alpha.12
4
+ * Generated: 2026/11/3
5
+ * Version: 1.0.0-alpha.14
6
6
  * License:
7
7
  * Realsee SDK License Agreement
8
8
 
@@ -335,4 +335,4 @@
335
335
  * writing and signed by Realsee. You and Realsee hereto confirm that this
336
336
  * Agreement and all related documents shall be drafted in English.
337
337
 
338
- */import{BasePlugin as e}from"../BasePlugin/index.mjs";import{__awaiter as t}from"tslib";import{AnimationFrameLoop as n,Camera as r,loadPly as i}from"@realsee/five-webgpu";import*as a from"three/webgpu";var o=class{constructor(e,t,n,r,i){this.R=e,this.Q=t,this.A=n,this.B=r,this.C=i,this.cov=NaN,this.x=NaN}filter(e,t=0){if(isNaN(this.x))this.x=1/this.C*e,this.cov=1/this.C*this.Q*(1/this.C);else{let n=this.A*this.x+this.B*t,r=this.A*this.cov*this.A+this.R,i=r*this.C*(1/(this.C*r*this.C+this.Q));this.x=n+i*(e-this.C*n),this.cov=r-i*this.C*r}return this.x}},s=class extends e.Controller{updateState(e,t){let n=this.state;this.state=Object.assign(Object.assign({},this.state),e),this.hooks.emit(`stateChange`,{state:this.state,prevState:n,userAction:t})}constructor(e,t){var n,r,i;super(e),this.boundingAABB=null,this.cancelAnimation=null,this.boundsSet=!1,this.keyframes=[],this.five=e,this.state={enabled:!0,visible:!0},this.duration=(n=t==null?void 0:t.duration)==null?5e3:n,this.curveHeight=(r=t==null?void 0:t.curveHeight)==null?1.5:r,this.pointDuration=(i=t==null?void 0:t.pointDuration)==null?3e3:i}load(){return t(this,void 0,void 0,function*(){})}enable(e){var t;if(this.state.enabled)return;let n=(t=e==null?void 0:e.userAction)==null?!0:t;this.updateState({enabled:!0},n)}disable(e){var t;if(this.state.enabled===!1)return;let n=(t=e==null?void 0:e.userAction)==null?!0:t;this.updateState({enabled:!1},n)}dispose(){this.disable(),this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null);try{let e=this.findRenderMesh();e&&(e.material.aggregationEnabled=!1,e.material.aggregationProgress=1)}catch(e){}}extractKeyframes(e){let t=[];if(!e.content.data)throw Error(`轨迹数据未加载`);let n=e.content.data.positionArray,r=n.length/3,i=.01,s=.1,c=new o(i,s,1,0,1),l=new o(i,s,1,0,1),u=new o(i,s,1,0,1),d=new Float32Array(r);for(let e=0;e<r;e++)if(e===0)d[e]=0;else{let t=new a.Vector3(n[(e-1)*3],n[(e-1)*3+1],n[(e-1)*3+2]);d[e]=new a.Vector3(n[e*3],n[e*3+1],n[e*3+2]).distanceTo(t)+d[e-1]}for(let i=0;i<r;i++){let o=new a.Vector3(0,0,0),s=0;for(let e=i-5;e<i+6;e++)e>=0&&e<r&&(o.add(new a.Vector3(n[e*3],n[e*3+1],n[e*3+2])),s++);o.divideScalar(s).applyMatrix4(e.transform);let f=c.filter(o.x),p=l.filter(o.y),m=u.filter(o.z);t.push({position:new a.Vector3(f,p,m),location:d[i]})}return t}computeAABB2D(e){let t=1/0,n=-1/0,r=1/0,i=-1/0;for(let a of e)a.position.x<t&&(t=a.position.x),a.position.x>n&&(n=a.position.x),a.position.z<r&&(r=a.position.z),a.position.z>i&&(i=a.position.z);return{min:new a.Vector2(t,r),max:new a.Vector2(n,i)}}findClosestKeyframeToRay(e,t){let n=1/0,r=t[0].position.clone(),i=new a.Vector3;for(let a of t){e.closestPointToPoint(a.position,i);let t=i.distanceTo(a.position);t<n&&(n=t,r=a.position.clone())}return r}findRenderMesh(){let e=null;if(this.five.scene.traverse(t=>{if(e)return;let n=t,r=n.material;r&&r.isPBMGaussianSplattingMaterial&&(e=n)}),!e)throw Error(`未找到 GaussianSplatting 渲染网格`);return e}loadTrajectoryDataIfNeeded(e){return t(this,void 0,void 0,function*(){var t,r,a,o,s,c,l,u;if((t=e.content)!=null&&t.data)return;if(((r=e.content)==null?void 0:r.loadState)===`LOADING`){yield new Promise(t=>{let r=n.shared.add(()=>{var n;let i=(n=e.content)==null?void 0:n.loadState;(i===`READY`||i===`FAILED`||i===`UNLOADED`)&&(r(),t())})});return}let d=(a=this.five.model.viewLayers)==null?void 0:a[0],f=d==null?void 0:d.fetcher,p=d==null?void 0:d.search,m=(o=e.content)==null?void 0:o.uri;if(!f||!m)return;let h=p?m.includes(`?`)?`${m}&${p.replace(/^\?/,``)}`:`${m}${p.startsWith(`?`)?p:`?${p}`}`:m;e.content.loadState=`LOADING`;try{let t=yield i(h,{type:`geometry`,customPropertyMapping:{time:{itemType:`uint32`,itemNames:[`time_milisec`]}},fetcher:f}),n=t.scene,r=n.getAttribute(`position`),a=n.getAttribute(`time`),o=(s=r==null?void 0:r.array)==null?new Float32Array:s,d=(c=a==null?void 0:a.array)==null?new Uint32Array:c;e.content.data={uri:h,byteLength:(l=t.byteLength)==null?0:l,memoryUsage:(u=t.memoryUsage)==null?0:u,positionArray:o,timeArray:d,object:null},e.content.loadState=`READY`}catch(t){console.warn(`[GaussianSplattingEntranceAnimationPlugin] trajectory ply 加载失败,将使用 3DGS AABB 回退`,t),e.content.data=void 0,e.content.loadState=`FAILED`}})}computeGSSceneBounds(){let e=new a.Box3,t=new a.Box3;return this.five.scene.traverse(n=>{let r=n;(r==null?void 0:r.boundingBox)instanceof a.Box3&&!r.boundingBox.isEmpty()&&(t.copy(r.boundingBox),r.matrixWorld&&t.applyMatrix4(r.matrixWorld),e.union(t))}),e.isEmpty()?null:e}getCameraCurve(){return t(this,void 0,void 0,function*(){var e,t,n,r,i,o,s,c,l,u;let d=(r=(n=(t=(e=this.five.model.viewLayers)==null?void 0:e[0])==null?void 0:t.trajectories)==null?void 0:n[0])==null?(c=(s=(o=(i=this.five.model.viewLayers)==null?void 0:i[0])==null?void 0:o.scene)==null?void 0:s.trajectories)==null?void 0:c[0]:r,f=null,p=null;if(d&&(yield this.loadTrajectoryDataIfNeeded(d),(l=d.content)!=null&&l.data&&((u=d.content.data.positionArray)==null?void 0:u.length)>=6&&(f=this.extractKeyframes(d),f.length>=2?p=this.computeAABB2D(f):f=null)),!f||!p){let e=this.computeGSSceneBounds();if(!e)throw Error(`未找到可用于计算入场曲线的 3DGS 边界或轨迹`);p={min:new a.Vector2(e.min.x,e.min.z),max:new a.Vector2(e.max.x,e.max.z)};let t=(p.min.x+p.max.x)/2,n=(p.min.y+p.max.y)/2,r=(e.min.y+e.max.y)/2,i=Math.max(p.max.x-p.min.x,p.max.y-p.min.y)*.5;f=[];let o=0,s=null;for(let e=0;e<16;e++){let c=e/16*Math.PI*2,l=new a.Vector3(t+Math.cos(c)*i,r,n+Math.sin(c)*i);s&&(o+=l.distanceTo(s)),f.push({position:l,location:o}),s=l}}this.keyframes=f,this.boundingAABB=p;let m=this.curveHeight,h=new a.Vector3((p.min.x+p.max.x)/2,m,(p.min.y+p.max.y)/2),g=(p.max.x-p.min.x)/2,_=(p.max.y-p.min.y)/2,v=Math.sqrt(g*g+_*_),y=e=>{let t=new a.Vector3().subVectors(e,h);return t.length()<.001&&t.set(1,0,0),h.clone().add(t.normalize().multiplyScalar(v))},b=new a.Vector3(f[0].position.x,m,f[0].position.z),x=y(b),S=new a.Vector3().subVectors(h,b).normalize(),C=new a.Ray(b,S),w=new a.Vector3(-S.z,0,S.x).normalize(),T=new a.Ray(h,w),E=this.findClosestKeyframeToRay(T,f),D=y(new a.Vector3(E.x,m,E.z)),O=this.findClosestKeyframeToRay(C,f),k=y(new a.Vector3(O.x,m,O.z));return new a.CatmullRomCurve3([x,D,k],!1,`centripetal`,.5)})}setBounding(e,t,n){let r=this.findRenderMesh();r.material.aggregationBoundsMin.copy(e),r.material.aggregationBoundsMax.copy(t),this.boundsSet=!0}setBounds(){if(!this.boundingAABB)throw Error(`请先调用 getCameraCurve 计算轨迹边界`);let e=this.boundingAABB,t=this.findRenderMesh(),n=new a.Vector3(e.min.x,0,e.min.y),r=new a.Vector3(e.max.x,3,e.max.y);t.material.aggregationBoundsMin.copy(n),t.material.aggregationBoundsMax.copy(r),this.boundsSet=!0}normalizedPointDuration(){let e=this.pointDuration;return e<=0?.01:Math.min(e<=1?e:e/this.duration,1)}resetToPointCloud(){return t(this,void 0,void 0,function*(){this.boundingAABB||(yield this.getCameraCurve()),this.setBounds();let e=this.findRenderMesh().material;e.aggregationEnabled=!0,e.aggregationProgress=0,e.aggregationPointDuration=this.normalizedPointDuration(),this.five.needsRender=!0,this.five.modelSceneNeedsRender=!0})}startAggregation(){if(!this.boundsSet)throw Error(`请先调用 setBounds 设置聚合边界`);let e=this.findRenderMesh().material;e.aggregationEnabled=!0,e.aggregationProgress=0,e.aggregationPointDuration=this.normalizedPointDuration(),this.five.needsRender=!0;let t=performance.now(),r=this.duration;this.cancelAnimation=n.shared.add(()=>{let n=performance.now()-t,i=Math.min(n/r,1);e.aggregationProgress=i*i*(3-2*i),this.five.needsRender=!0,this.five.modelSceneNeedsRender=!0,i>=1&&(e.aggregationEnabled=!1,this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null))})}playEntrance(){return t(this,void 0,void 0,function*(){let e=yield this.getCameraCurve(),t=this.boundingAABB,i=new a.Vector3((t.min.x+t.max.x)/2,this.curveHeight,(t.min.y+t.max.y)/2),o=e.getPointAt(0),s=new r(90).copy(this.five.camera);s.position.copy(o),s.lookAt(i),s.computePose(0),this.five.setState(Object.assign({},s.pose)),this.setBounds();let c=this.findRenderMesh().material;c.aggregationEnabled=!0,c.aggregationProgress=0,c.aggregationPointDuration=this.normalizedPointDuration(),this.five.needsRender=!0;let l=this.duration,u=performance.now();return new Promise(t=>{this.cancelAnimation=n.shared.add(()=>{let n=performance.now()-u,r=Math.min(n/l,1),a=r*r*(3-2*r);c.aggregationProgress=a,this.five.modelSceneNeedsRender=!0;let o=e.getPointAt(a);s.position.copy(o),s.lookAt(i),s.computePose(0),this.five.setState(Object.assign({},s.pose)),this.five.needsRender=!0,r>=1&&(c.aggregationEnabled=!1,c.aggregationProgress=1,this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null),t())})})})}};export{s as Controller};
338
+ */import{BasePlugin}from"../BasePlugin/index.mjs";import{__awaiter}from"tslib";import{AnimationFrameLoop,Camera,loadPly}from"@realsee/five-webgpu";import*as THREE from"three/webgpu";var KalmanFilter=class{constructor(R,Q,A,B,C){this.R=R,this.Q=Q,this.A=A,this.B=B,this.C=C,this.cov=NaN,this.x=NaN}filter(z,u=0){if(isNaN(this.x))this.x=1/this.C*z,this.cov=1/this.C*this.Q*(1/this.C);else{let predX=this.A*this.x+this.B*u,predCov=this.A*this.cov*this.A+this.R,K=predCov*this.C*(1/(this.C*predCov*this.C+this.Q));this.x=predX+K*(z-this.C*predX),this.cov=predCov-K*this.C*predCov}return this.x}},Controller=class extends BasePlugin.Controller{updateState(state,userAction){let prevState=this.state;this.state=Object.assign(Object.assign({},this.state),state),this.hooks.emit(`stateChange`,{state:this.state,prevState,userAction})}constructor(five,config){var _a,_b,_c;super(five),this.boundingAABB=null,this.cancelAnimation=null,this.boundsSet=!1,this.keyframes=[],this.five=five,this.state={enabled:!0,visible:!0},this.duration=(_a=config==null?void 0:config.duration)==null?5e3:_a,this.curveHeight=(_b=config==null?void 0:config.curveHeight)==null?1.5:_b,this.pointDuration=(_c=config==null?void 0:config.pointDuration)==null?3e3:_c}load(){return __awaiter(this,void 0,void 0,function*(){})}enable(options){var _a;if(this.state.enabled)return;let userAction=(_a=options==null?void 0:options.userAction)==null?!0:_a;this.updateState({enabled:!0},userAction)}disable(options){var _a;if(this.state.enabled===!1)return;let userAction=(_a=options==null?void 0:options.userAction)==null?!0:_a;this.updateState({enabled:!1},userAction)}dispose(){this.disable(),this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null);try{let renderMesh=this.findRenderMesh();renderMesh&&(renderMesh.material.aggregationEnabled=!1,renderMesh.material.aggregationProgress=1)}catch(_){}}extractKeyframes(trajectory){let keyframes=[];if(!trajectory.content.data)throw Error(`轨迹数据未加载`);let points=trajectory.content.data.positionArray,numPoints=points.length/3,R=.01,Q=.1,kfX=new KalmanFilter(R,Q,1,0,1),kfY=new KalmanFilter(R,Q,1,0,1),kfZ=new KalmanFilter(R,Q,1,0,1),lineDistances=new Float32Array(numPoints);for(let i=0;i<numPoints;i++)if(i===0)lineDistances[i]=0;else{let prev=new THREE.Vector3(points[(i-1)*3],points[(i-1)*3+1],points[(i-1)*3+2]);lineDistances[i]=new THREE.Vector3(points[i*3],points[i*3+1],points[i*3+2]).distanceTo(prev)+lineDistances[i-1]}for(let i=0;i<numPoints;i++){let smoothPosition=new THREE.Vector3(0,0,0),count=0;for(let j=i-5;j<i+6;j++)j>=0&&j<numPoints&&(smoothPosition.add(new THREE.Vector3(points[j*3],points[j*3+1],points[j*3+2])),count++);smoothPosition.divideScalar(count).applyMatrix4(trajectory.transform);let x=kfX.filter(smoothPosition.x),y=kfY.filter(smoothPosition.y),z=kfZ.filter(smoothPosition.z);keyframes.push({position:new THREE.Vector3(x,y,z),location:lineDistances[i]})}return keyframes}computeAABB2D(keyframes){let minX=1/0,maxX=-1/0,minZ=1/0,maxZ=-1/0;for(let kf of keyframes)kf.position.x<minX&&(minX=kf.position.x),kf.position.x>maxX&&(maxX=kf.position.x),kf.position.z<minZ&&(minZ=kf.position.z),kf.position.z>maxZ&&(maxZ=kf.position.z);return{min:new THREE.Vector2(minX,minZ),max:new THREE.Vector2(maxX,maxZ)}}findClosestKeyframeToRay(ray,keyframes){let closestDist=1/0,closestPos=keyframes[0].position.clone(),tmpVec=new THREE.Vector3;for(let kf of keyframes){ray.closestPointToPoint(kf.position,tmpVec);let dist=tmpVec.distanceTo(kf.position);dist<closestDist&&(closestDist=dist,closestPos=kf.position.clone())}return closestPos}isInitAnimationEnabled(){return this.five.modelScene.parameter.resolveValue(`enableGaussianSplattingInitAnimation`)===!0}findRenderMesh(){let found=null;if(this.five.scene.traverse(object=>{if(found)return;let mesh=object,material=mesh.material;material&&material.isPBMGaussianSplattingMaterial&&(found=mesh)}),!found)throw Error(`未找到 GaussianSplatting 渲染网格`);return found}loadTrajectoryDataIfNeeded(trajectory){return __awaiter(this,void 0,void 0,function*(){var _a,_b,_c,_d,_e,_f,_g,_h;if((_a=trajectory.content)!=null&&_a.data)return;if(((_b=trajectory.content)==null?void 0:_b.loadState)===`LOADING`){yield new Promise(resolve=>{let cancel=AnimationFrameLoop.shared.add(()=>{var _a;let s=(_a=trajectory.content)==null?void 0:_a.loadState;(s===`READY`||s===`FAILED`||s===`UNLOADED`)&&(cancel(),resolve())})});return}let viewLayer=(_c=this.five.model.viewLayers)==null?void 0:_c[0],fetcher=viewLayer==null?void 0:viewLayer.fetcher,search=viewLayer==null?void 0:viewLayer.search,uri=(_d=trajectory.content)==null?void 0:_d.uri;if(!fetcher||!uri)return;let url=search?uri.includes(`?`)?`${uri}&${search.replace(/^\?/,``)}`:`${uri}${search.startsWith(`?`)?search:`?${search}`}`:uri;trajectory.content.loadState=`LOADING`;try{let plyResult=yield loadPly(url,{type:`geometry`,customPropertyMapping:{time:{itemType:`uint32`,itemNames:[`time_milisec`]}},fetcher}),geometry=plyResult.scene,positionAttr=geometry.getAttribute(`position`),timeAttr=geometry.getAttribute(`time`),positionArray=(_e=positionAttr==null?void 0:positionAttr.array)==null?new Float32Array:_e,timeArray=(_f=timeAttr==null?void 0:timeAttr.array)==null?new Uint32Array:_f;trajectory.content.data={uri:url,byteLength:(_g=plyResult.byteLength)==null?0:_g,memoryUsage:(_h=plyResult.memoryUsage)==null?0:_h,positionArray,timeArray,object:null},trajectory.content.loadState=`READY`}catch(err){console.warn(`[GaussianSplattingEntranceAnimationPlugin] trajectory ply 加载失败,将使用 3DGS AABB 回退`,err),trajectory.content.data=void 0,trajectory.content.loadState=`FAILED`}})}computeGSSceneBounds(){let bounds=new THREE.Box3,tmpBox=new THREE.Box3;return this.five.scene.traverse(object=>{let anyObj=object;(anyObj==null?void 0:anyObj.boundingBox)instanceof THREE.Box3&&!anyObj.boundingBox.isEmpty()&&(tmpBox.copy(anyObj.boundingBox),anyObj.matrixWorld&&tmpBox.applyMatrix4(anyObj.matrixWorld),bounds.union(tmpBox))}),bounds.isEmpty()?null:bounds}getCameraCurve(){return __awaiter(this,void 0,void 0,function*(){var _a,_b,_c,_d,_e,_f,_g,_h,_j,_k;let trajectory=(_d=(_c=(_b=(_a=this.five.model.viewLayers)==null?void 0:_a[0])==null?void 0:_b.trajectories)==null?void 0:_c[0])==null?(_h=(_g=(_f=(_e=this.five.model.viewLayers)==null?void 0:_e[0])==null?void 0:_f.scene)==null?void 0:_g.trajectories)==null?void 0:_h[0]:_d,keyframes=null,aabb=null;if(trajectory&&(yield this.loadTrajectoryDataIfNeeded(trajectory),(_j=trajectory.content)!=null&&_j.data&&((_k=trajectory.content.data.positionArray)==null?void 0:_k.length)>=6&&(keyframes=this.extractKeyframes(trajectory),keyframes.length>=2?aabb=this.computeAABB2D(keyframes):keyframes=null)),!keyframes||!aabb){let sceneBounds=this.computeGSSceneBounds();if(!sceneBounds)throw Error(`未找到可用于计算入场曲线的 3DGS 边界或轨迹`);aabb={min:new THREE.Vector2(sceneBounds.min.x,sceneBounds.min.z),max:new THREE.Vector2(sceneBounds.max.x,sceneBounds.max.z)};let cx=(aabb.min.x+aabb.max.x)/2,cz=(aabb.min.y+aabb.max.y)/2,y=(sceneBounds.min.y+sceneBounds.max.y)/2,r=Math.max(aabb.max.x-aabb.min.x,aabb.max.y-aabb.min.y)*.5;keyframes=[];let acc=0,prev=null;for(let i=0;i<16;i++){let t=i/16*Math.PI*2,p=new THREE.Vector3(cx+Math.cos(t)*r,y,cz+Math.sin(t)*r);prev&&(acc+=p.distanceTo(prev)),keyframes.push({position:p,location:acc}),prev=p}}this.keyframes=keyframes,this.boundingAABB=aabb;let curveHeight=this.curveHeight,aabbCenter=new THREE.Vector3((aabb.min.x+aabb.max.x)/2,curveHeight,(aabb.min.y+aabb.max.y)/2),halfW=(aabb.max.x-aabb.min.x)/2,halfH=(aabb.max.y-aabb.min.y)/2,boundingRadius=Math.sqrt(halfW*halfW+halfH*halfH),projectToSphere=pt=>{let dir=new THREE.Vector3().subVectors(pt,aabbCenter);return dir.length()<.001&&dir.set(1,0,0),aabbCenter.clone().add(dir.normalize().multiplyScalar(boundingRadius))},startRaw=new THREE.Vector3(keyframes[0].position.x,curveHeight,keyframes[0].position.z),startPoint=projectToSphere(startRaw),primaryDir=new THREE.Vector3().subVectors(aabbCenter,startRaw).normalize(),primaryRay=new THREE.Ray(startRaw,primaryDir),secondaryDir=new THREE.Vector3(-primaryDir.z,0,primaryDir.x).normalize(),secondaryRay=new THREE.Ray(aabbCenter,secondaryDir),p1Raw=this.findClosestKeyframeToRay(secondaryRay,keyframes),p1=projectToSphere(new THREE.Vector3(p1Raw.x,curveHeight,p1Raw.z)),p2Raw=this.findClosestKeyframeToRay(primaryRay,keyframes),p2=projectToSphere(new THREE.Vector3(p2Raw.x,curveHeight,p2Raw.z));return new THREE.CatmullRomCurve3([startPoint,p1,p2],!1,`centripetal`,.5)})}setBounding(boundsMin,boundsMax,_center){let renderMesh=this.findRenderMesh();renderMesh.material.aggregationBoundsMin.copy(boundsMin),renderMesh.material.aggregationBoundsMax.copy(boundsMax),this.boundsSet=!0}setBounds(){if(!this.boundingAABB)throw Error(`请先调用 getCameraCurve 计算轨迹边界`);let aabb=this.boundingAABB,renderMesh=this.findRenderMesh(),boundsMin=new THREE.Vector3(aabb.min.x,0,aabb.min.y),boundsMax=new THREE.Vector3(aabb.max.x,3,aabb.max.y);renderMesh.material.aggregationBoundsMin.copy(boundsMin),renderMesh.material.aggregationBoundsMax.copy(boundsMax),this.boundsSet=!0}normalizedPointDuration(){let pd=this.pointDuration;return pd<=0?.01:Math.min(pd<=1?pd:pd/this.duration,1)}resetToPointCloud(){return __awaiter(this,void 0,void 0,function*(){if(!this.isInitAnimationEnabled())return;this.boundingAABB||(yield this.getCameraCurve()),this.setBounds();let material=this.findRenderMesh().material;material.aggregationEnabled=!0,material.aggregationProgress=0,material.aggregationPointDuration=this.normalizedPointDuration(),this.five.needsRender=!0,this.five.modelSceneNeedsRender=!0})}startAggregation(){if(!this.isInitAnimationEnabled()){console.warn(`[GaussianSplattingEntranceAnimationPlugin] modelScene.enableGaussianSplattingInitAnimation 为 false,已跳过聚合动画`);return}if(!this.boundsSet)throw Error(`请先调用 setBounds 设置聚合边界`);let material=this.findRenderMesh().material;material.aggregationEnabled=!0,material.aggregationProgress=0,material.aggregationPointDuration=this.normalizedPointDuration(),this.five.needsRender=!0;let startTime=performance.now(),duration=this.duration;this.cancelAnimation=AnimationFrameLoop.shared.add(()=>{let elapsed=performance.now()-startTime,progress=Math.min(elapsed/duration,1);material.aggregationProgress=progress*progress*(3-2*progress),this.five.needsRender=!0,this.five.modelSceneNeedsRender=!0,progress>=1&&(material.aggregationEnabled=!1,this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null))})}playEntrance(){return __awaiter(this,void 0,void 0,function*(){if(!this.isInitAnimationEnabled()){console.warn(`[GaussianSplattingEntranceAnimationPlugin] modelScene.enableGaussianSplattingInitAnimation 为 false,已跳过入场动画`);return}let curve=yield this.getCameraCurve(),aabb=this.boundingAABB,boundingCenter=new THREE.Vector3((aabb.min.x+aabb.max.x)/2,this.curveHeight,(aabb.min.y+aabb.max.y)/2),startPoint=curve.getPointAt(0),visualCamera=new Camera(90).copy(this.five.camera);visualCamera.position.copy(startPoint),visualCamera.lookAt(boundingCenter),visualCamera.computePose(0),this.five.setState(Object.assign({},visualCamera.pose)),this.setBounds();let material=this.findRenderMesh().material;material.aggregationEnabled=!0,material.aggregationProgress=0,material.aggregationPointDuration=this.normalizedPointDuration(),this.five.needsRender=!0;let duration=this.duration,startTime=performance.now();return new Promise(resolve=>{this.cancelAnimation=AnimationFrameLoop.shared.add(()=>{let elapsed=performance.now()-startTime,t=Math.min(elapsed/duration,1),eased=t*t*(3-2*t);material.aggregationProgress=eased,this.five.modelSceneNeedsRender=!0;let point=curve.getPointAt(eased);visualCamera.position.copy(point),visualCamera.lookAt(boundingCenter),visualCamera.computePose(0),this.five.setState(Object.assign({},visualCamera.pose)),this.five.needsRender=!0,t>=1&&(material.aggregationEnabled=!1,material.aggregationProgress=1,this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null),resolve())})})})}};export{Controller};
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five-webgpu
4
- * Generated: 2026/10/29
5
- * Version: 1.0.0-alpha.12
4
+ * Generated: 2026/11/3
5
+ * Version: 1.0.0-alpha.14
6
6
  * License:
7
7
  * Realsee SDK License Agreement
8
8
 
@@ -335,4 +335,4 @@
335
335
  * writing and signed by Realsee. You and Realsee hereto confirm that this
336
336
  * Agreement and all related documents shall be drafted in English.
337
337
 
338
- */const e=require("./Controller.js");var t=(t,n)=>new e.Controller(t,n);exports.GaussianSplattingEntranceAnimationPlugin=t;
338
+ */const require_Controller=require("./Controller.js");var GaussianSplattingEntranceAnimationPlugin=(five,config)=>new require_Controller.Controller(five,config);exports.GaussianSplattingEntranceAnimationPlugin=GaussianSplattingEntranceAnimationPlugin;
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five-webgpu
4
- * Generated: 2026/10/29
5
- * Version: 1.0.0-alpha.12
4
+ * Generated: 2026/11/3
5
+ * Version: 1.0.0-alpha.14
6
6
  * License:
7
7
  * Realsee SDK License Agreement
8
8
 
@@ -335,4 +335,4 @@
335
335
  * writing and signed by Realsee. You and Realsee hereto confirm that this
336
336
  * Agreement and all related documents shall be drafted in English.
337
337
 
338
- */import{Controller as e}from"./Controller.mjs";var t=(t,n)=>new e(t,n);export{t as GaussianSplattingEntranceAnimationPlugin};
338
+ */import{Controller}from"./Controller.mjs";var GaussianSplattingEntranceAnimationPlugin=(five,config)=>new Controller(five,config);export{GaussianSplattingEntranceAnimationPlugin};