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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/ai_guides/api.md +9 -8
  2. package/ai_guides/features/camera-animation.md +1 -1
  3. package/ai_guides/features/event.md +0 -1
  4. package/ai_guides/features/five.md +78 -9
  5. package/ai_guides/features/gesture.md +1 -1
  6. package/ai_guides/features/load-external-model.md +6 -6
  7. package/ai_guides/features/load-progress.md +2 -2
  8. package/ai_guides/features/material.md +35 -8
  9. package/ai_guides/features/mode.md +26 -29
  10. package/ai_guides/features/model.md +1 -1
  11. package/ai_guides/features/state.md +2 -2
  12. package/ai_guides/features/ultra-hdr.md +41 -32
  13. package/ai_guides/quick-start.md +2 -2
  14. package/ai_guides/release_notes/6.8.md +2 -2
  15. package/ai_guides/support.md +0 -4
  16. package/docs/assets/hierarchy.js +1 -1
  17. package/docs/assets/navigation.js +1 -1
  18. package/docs/assets/search.js +1 -1
  19. package/docs/classes/index.AdaptiveLuminancePass.html +1 -1
  20. package/docs/classes/index.BoundingMesh.html +1 -1
  21. package/docs/classes/index.Camera.html +1 -1
  22. package/docs/classes/index.EffectComposer.html +1 -1
  23. package/docs/classes/index.EyeDomeLightingPass.html +1 -1
  24. package/docs/classes/index.Five.html +69 -67
  25. package/docs/classes/index.FivePass.html +1 -1
  26. package/docs/classes/index.FlowingFireworks3DPass.html +1 -1
  27. package/docs/classes/index.FlowingLight2DPass.html +1 -1
  28. package/docs/classes/index.FlowingLight3DPass.html +2 -2
  29. package/docs/classes/index.GaussianBlurPass.html +1 -1
  30. package/docs/classes/index.InternalWebGPURenderer.html +8 -5
  31. package/docs/classes/index.Model.html +1 -1
  32. package/docs/classes/index.ModelScene.html +1 -1
  33. package/docs/classes/index.NetworkSubscribe.html +1 -1
  34. package/docs/classes/index.PBMCustomNode.html +8 -8
  35. package/docs/classes/index.PBMGaussianSplattingNodeMaterial.html +8 -6
  36. package/docs/classes/index.PBMGaussianSplattingObject.html +10 -4
  37. package/docs/classes/index.PBMGaussianSplattingRenderMesh.html +26 -15
  38. package/docs/classes/index.PBMGroup.html +1 -1
  39. package/docs/classes/index.PBMMesh.html +1 -1
  40. package/docs/classes/index.PBMMeshBasicMaterial.html +13 -8
  41. package/docs/classes/index.PBMMeshBasicNodeMaterial.html +15 -10
  42. package/docs/classes/index.PBMMeshPanoOnlyMaterial.html +13 -8
  43. package/docs/classes/index.PBMMeshPanoOnlyNodeMaterial.html +13 -8
  44. package/docs/classes/index.PBMMeshPhongMaterial.html +13 -8
  45. package/docs/classes/index.PBMMeshPhongNodeMaterial.html +15 -10
  46. package/docs/classes/index.PBMMeshPhysicalMaterial.html +13 -8
  47. package/docs/classes/index.PBMMeshPhysicalNodeMaterial.html +15 -10
  48. package/docs/classes/index.PBMPanoFilter.html +8 -8
  49. package/docs/classes/index.PBMPointCloud.html +6 -7
  50. package/docs/classes/index.PBMPointCloudMaterial.html +83 -0
  51. package/docs/classes/index.PBMSkinnedMesh.html +1 -1
  52. package/docs/classes/index.PBMUpdateable.html +1 -1
  53. package/docs/classes/index.PanoCircleMesh.html +1 -1
  54. package/docs/classes/index.PanoCircleMeshCustom.html +5 -5
  55. package/docs/classes/index.PanoCircleMeshSolid.html +1 -1
  56. package/docs/classes/index.Parameter.html +57 -56
  57. package/docs/classes/index.Scene.html +1 -1
  58. package/docs/classes/index.Subscribe.html +1 -1
  59. package/docs/classes/index.TextureLoader.html +4 -1
  60. package/docs/classes/index.Tile3D.html +23 -21
  61. package/docs/classes/index.TileNode.html +1 -1
  62. package/docs/classes/index.Tileset.html +4 -4
  63. package/docs/classes/index.TrajectoryNode.html +3 -3
  64. package/docs/classes/index.Work.html +20 -18
  65. package/docs/classes/index.WorkResolvedObserver.html +22 -22
  66. package/docs/classes/index.XRButton.html +3 -0
  67. package/docs/documents/api.html +11 -10
  68. package/docs/documents/features_camera-animation.html +1 -1
  69. package/docs/documents/features_event.html +0 -1
  70. package/docs/documents/features_five.html +51 -9
  71. package/docs/documents/features_gesture.html +1 -1
  72. package/docs/documents/features_load-external-model.html +6 -6
  73. package/docs/documents/features_load-progress.html +1 -1
  74. package/docs/documents/features_material.html +20 -9
  75. package/docs/documents/features_mode.html +28 -13
  76. package/docs/documents/features_model.html +1 -1
  77. package/docs/documents/features_state.html +1 -1
  78. package/docs/documents/features_ultra-hdr.html +50 -44
  79. package/docs/documents/quick-start.html +1 -1
  80. package/docs/documents/release_notes_6.8.html +2 -2
  81. package/docs/documents/support.html +1 -3
  82. package/docs/functions/index.customNodesCacheKey.html +1 -1
  83. package/docs/functions/index.parseWork.html +1 -1
  84. package/docs/functions/index.workToJson.html +1 -1
  85. package/docs/hierarchy.html +1 -1
  86. package/docs/interfaces/index.AddableObject.html +1 -1
  87. package/docs/interfaces/index.AjaxOptions.html +1 -1
  88. package/docs/interfaces/index.BaseEvent.html +2 -2
  89. package/docs/interfaces/index.Clock.html +24 -0
  90. package/docs/interfaces/index.DeviceProfile.html +8 -0
  91. package/docs/interfaces/index.EventCallback.html +49 -47
  92. package/docs/interfaces/index.FiveInitArgs.html +65 -41
  93. package/docs/interfaces/index.GainmapCfgData.html +15 -0
  94. package/docs/interfaces/index.GestureEvent.html +2 -2
  95. package/docs/interfaces/index.IPBMMaterial.html +12 -7
  96. package/docs/interfaces/index.ImageOptions.html +1 -1
  97. package/docs/interfaces/index.IntersectEvent.html +2 -2
  98. package/docs/interfaces/index.IntersectMesh.html +1 -1
  99. package/docs/interfaces/index.IntersectMeshInterface.html +1 -1
  100. package/docs/interfaces/index.Intersection.html +1 -1
  101. package/docs/interfaces/index.LoosePanoWork.html +2 -2
  102. package/docs/interfaces/index.LooseWork.html +2 -2
  103. package/docs/interfaces/index.LooseWorkInitial.html +2 -2
  104. package/docs/interfaces/index.LooseWorkModel.html +2 -2
  105. package/docs/interfaces/index.LooseWorkObserver.html +2 -2
  106. package/docs/interfaces/index.LooseWorkPanorama.html +4 -3
  107. package/docs/interfaces/index.LooseWorkWithExtrinsics.html +15 -9
  108. package/docs/interfaces/index.ModeChangeEvent.html +2 -2
  109. package/docs/interfaces/index.ModelControllerCustomInitArgs.html +1 -1
  110. package/docs/interfaces/index.ModelEvent.html +2 -2
  111. package/docs/interfaces/index.ModelSceneEvent.html +2 -2
  112. package/docs/interfaces/index.ModelTileEvent.html +2 -2
  113. package/docs/interfaces/index.MovePanoOptions.html +1 -1
  114. package/docs/interfaces/index.NetworkAbortError.html +1 -1
  115. package/docs/interfaces/index.NetworkFirbiddenError.html +1 -1
  116. package/docs/interfaces/index.NetworkOptions.html +1 -1
  117. package/docs/interfaces/index.NetworkProxyError.html +1 -1
  118. package/docs/interfaces/index.NetworkResourceEvent.html +2 -2
  119. package/docs/interfaces/index.NetworkResponseError.html +1 -1
  120. package/docs/interfaces/index.NetworkTimeoutError.html +1 -1
  121. package/docs/interfaces/index.ObjectEvent.html +2 -2
  122. package/docs/interfaces/index.PBMClipperParameter.html +2 -2
  123. package/docs/interfaces/index.PBMCustomNodeContext.html +60 -12
  124. package/docs/interfaces/index.PBMCustomNodeOptions.html +4 -4
  125. package/docs/interfaces/index.PBMCustomNodePanoContext.html +13 -6
  126. package/docs/interfaces/index.PBMCustomNodeSlots.html +6 -6
  127. package/docs/interfaces/index.PBMGaussianSplattingNodeMaterialOptions.html +4 -0
  128. package/docs/interfaces/index.PBMPanoDepth.html +5 -5
  129. package/docs/interfaces/index.PBMPanoFilterValue.html +2 -2
  130. package/docs/interfaces/index.PBMPanoGainmap.html +6 -0
  131. package/docs/interfaces/index.PBMPanoPicture.html +9 -8
  132. package/docs/interfaces/index.PBMRefinedScreen.html +2 -2
  133. package/docs/interfaces/index.PanoCircleMeshCustomOptions.html +2 -2
  134. package/docs/interfaces/index.PanoCircleMeshInterface.html +1 -1
  135. package/docs/interfaces/index.PanoEvent.html +2 -2
  136. package/docs/interfaces/index.PanoPrepareEvent.html +15 -0
  137. package/docs/interfaces/index.PanoTextureEvent.html +2 -2
  138. package/docs/interfaces/index.PanoramaControllerCustomInitArgs.html +9 -9
  139. package/docs/interfaces/index.PanoramaLikeControllerCustomInitArgs.html +1 -1
  140. package/docs/interfaces/index.ParameterMaterialValue.html +42 -41
  141. package/docs/interfaces/index.ParameterTilesetValue.html +15 -15
  142. package/docs/interfaces/index.ParameterValue.html +56 -55
  143. package/docs/interfaces/index.Pose.html +1 -1
  144. package/docs/interfaces/index.RenderEvent.html +2 -2
  145. package/docs/interfaces/index.ResolvedParameterValue.html +56 -55
  146. package/docs/interfaces/index.State.html +1 -1
  147. package/docs/interfaces/index.StateEvent.html +2 -2
  148. package/docs/interfaces/index.TextureOptions.html +1 -1
  149. package/docs/interfaces/index.TilesetOptions.html +7 -2
  150. package/docs/interfaces/index.TopviewControllerCustomInitArgs.html +1 -1
  151. package/docs/interfaces/index.VRPanoramaControllerCustomInitArgs.html +37 -0
  152. package/docs/interfaces/index.ViewLayer.html +23 -21
  153. package/docs/interfaces/index.WorkCubeHdrGainmapImage.html +10 -0
  154. package/docs/interfaces/index.WorkCubeImage.html +5 -9
  155. package/docs/interfaces/index.WorkImage.html +8 -12
  156. package/docs/interfaces/index.WorkInitial.html +8 -8
  157. package/docs/interfaces/index.WorkModel.html +8 -8
  158. package/docs/interfaces/index.WorkModelLayer.html +6 -6
  159. package/docs/interfaces/index.WorkObserver.html +23 -23
  160. package/docs/interfaces/index.WorkPanoramaJson.html +3 -2
  161. package/docs/interfaces/index.WorkTile.html +8 -12
  162. package/docs/interfaces/index.WorksEvent.html +2 -2
  163. package/docs/interfaces/index.XRControllerEvent.html +2 -2
  164. package/docs/interfaces/index.XRGestureEvent.html +2 -2
  165. package/docs/interfaces/index.XRPanoramaControllerCustomInitArgs.html +52 -0
  166. package/docs/interfaces/index.XRSessionEvent.html +2 -2
  167. package/docs/modules/index.html +1 -1
  168. package/docs/types/index.ControllerCustomInitTypes.html +4 -2
  169. package/docs/types/index.ControllerEventTypes.html +25 -23
  170. package/docs/types/index.DeviceProfileOverride.html +5 -0
  171. package/docs/types/index.EventTypes.html +26 -26
  172. package/docs/types/index.FlowingLightLineInput.html +11 -0
  173. package/docs/types/index.Mode.html +6 -3
  174. package/docs/types/index.OutputTextureDataType.html +1 -1
  175. package/docs/types/index.PBMCustomNodeTargetType.html +1 -1
  176. package/docs/types/index.ParseOptions.html +14 -8
  177. package/docs/types/index.XRMachineType.html +7 -0
  178. package/docs/variables/index.GSPLAT_PIPELINE_AUTO.html +2 -0
  179. package/docs/variables/index.GSPLAT_PIPELINE_RASTER_CPU_SORT.html +2 -0
  180. package/docs/variables/index.GSPLAT_PIPELINE_RASTER_GPU_SORT.html +2 -0
  181. package/docs/variables/index.PBMVertexMarkFlag.html +4 -0
  182. package/docs/variables/index.PROXY_CONTROLLER_EVENT_NAMES.html +1 -1
  183. package/docs/variables/index.controllersDefaultInitArgs.html +1 -1
  184. package/five/application/controllers.d.ts +8 -0
  185. package/five/application/events.d.ts +1 -1
  186. package/five/application/five.d.ts +6 -1
  187. package/five/application/fiveInitArgs.d.ts +32 -1
  188. package/five/application/mode.d.ts +8 -1
  189. package/five/cardboard/helper.d.ts +2 -0
  190. package/five/cardboard/index.d.ts +13 -0
  191. package/five/cardboard/sensor.d.ts +158 -0
  192. package/five/controllers/base.d.ts +3 -0
  193. package/five/controllers/events.d.ts +5 -3
  194. package/five/controllers/panorama.d.ts +2 -2
  195. package/five/controllers/vrPanorama.d.ts +56 -0
  196. package/five/controllers/xrPanorama.d.ts +506 -0
  197. package/five/core/internalWebGPURenderer.d.ts +7 -1
  198. package/five/core/panoVideo.d.ts +4 -1
  199. package/five/core/tiling.d.ts +25 -11
  200. package/five/core/webglAsyncReadFix.d.ts +25 -0
  201. package/five/gaussian-splatting/gpu-sort/prefixSumKernel.d.ts +65 -0
  202. package/five/gaussian-splatting/gpu-sort/radixSortModule.d.ts +128 -0
  203. package/five/gaussian-splatting/gpu-sort/shaders/prefixSum.d.ts +2 -0
  204. package/five/gaussian-splatting/gpu-sort/shaders/radixHistogram.d.ts +2 -0
  205. package/five/gaussian-splatting/gpu-sort/shaders/radixReorder.d.ts +2 -0
  206. package/five/gaussian-splatting/gpu-sort/shaders/sortKeygen.d.ts +2 -0
  207. package/five/gaussian-splatting/gpu-sort/sortAdapter.d.ts +234 -0
  208. package/five/gaussian-splatting/pipelines/cpuSortPipeline.d.ts +159 -0
  209. package/five/gaussian-splatting/pipelines/gpuSortPipeline.d.ts +98 -0
  210. package/five/gaussian-splatting/pipelines/gsplatPipeline.d.ts +104 -0
  211. package/five/gaussian-splatting/pipelines/pipelineMode.d.ts +42 -0
  212. package/five/gaussian-splatting/pipelines/sortThrottle.d.ts +45 -0
  213. package/five/index.d.ts +8 -2
  214. package/five/index.js +272 -269
  215. package/five/index.mjs +8389 -4487
  216. package/five/meshes/panoCircleMeshCustom.d.ts +1 -0
  217. package/five/model/index.d.ts +3 -2
  218. package/five/model/materials/pbmGaussianSplattingNodeMaterial.d.ts +4 -0
  219. package/five/model/materials/pbmMaterial.d.ts +126 -19
  220. package/five/model/materials/pbmMeshMaterial.d.ts +0 -9
  221. package/five/model/materials/pbmPointCloudNodeMaterial.d.ts +1 -1
  222. package/five/model/materials/tsl/defines.d.ts +6 -1
  223. package/five/model/materials/tsl/outputBuilder.d.ts +1 -12
  224. package/five/model/materials/tsl/panoColor.d.ts +8 -2
  225. package/five/model/materials/tsl/utils.d.ts +13 -0
  226. package/five/model/objects/pbmGaussianSplattingObject.d.ts +9 -0
  227. package/five/model/objects/pbmGaussianSplattingRenderMesh.d.ts +67 -101
  228. package/five/model/objects/pbmPointCloud.d.ts +0 -1
  229. package/five/model/objects/pbmPointCloudObject.d.ts +1 -1
  230. package/five/model/parameter.d.ts +5 -4
  231. package/five/model/tile3d/index.d.ts +2 -0
  232. package/five/model/tile3d/tileset.d.ts +5 -0
  233. package/five/model/tile3d/trajectory-content.d.ts +53 -0
  234. package/five/renderer/index.d.ts +1 -1
  235. package/five/renderer/postprocessing/index.d.ts +1 -1
  236. package/five/texture/loader.d.ts +6 -0
  237. package/five/types/cube.d.ts +0 -1
  238. package/five/utils/detector.d.ts +11 -1
  239. package/five/utils/error.d.ts +1 -0
  240. package/five/utils/event.d.ts +26 -3
  241. package/five/utils/gainmap-data.d.ts +23 -0
  242. package/five/webxr/XRControllerModelFactory.d.ts +55 -0
  243. package/five/webxr/buttonStateMachine.d.ts +31 -0
  244. package/five/webxr/deviceProfile.d.ts +70 -0
  245. package/five/webxr/inputSourceTracker.d.ts +59 -0
  246. package/five/webxr/referenceSpace.d.ts +60 -0
  247. package/five/webxr/renderTargetBridge.d.ts +45 -0
  248. package/five/webxr/xrButton.d.ts +4 -0
  249. package/five/webxr/xrManager.d.ts +174 -0
  250. package/five/work/index.d.ts +1 -1
  251. package/five/work/looseWorkType.d.ts +2 -1
  252. package/five/work/work.d.ts +30 -7
  253. package/five/work/workJsonType.d.ts +2 -1
  254. package/gltf-loader/gltf-object.d.ts +17 -0
  255. package/gltf-loader/index.d.ts +45 -0
  256. package/gltf-loader/index.js +255 -0
  257. package/gltf-loader/index.mjs +302 -0
  258. package/line/circle_png.d.ts +1 -0
  259. package/line/index.d.ts +49 -0
  260. package/line/index.js +255 -0
  261. package/line/index.mjs +340 -0
  262. package/package.json +30 -5
  263. package/plugins/BackgroundPlugin/Controller.d.ts +20 -0
  264. package/plugins/BackgroundPlugin/index.d.ts +5 -0
  265. package/plugins/BackgroundPlugin/typings.d.ts +44 -0
  266. package/plugins/CSS2DPlugin/Controller.d.ts +59 -0
  267. package/plugins/CSS2DPlugin/index.d.ts +5 -0
  268. package/plugins/CSS2DPlugin/typing.d.ts +31 -0
  269. package/plugins/CSS3DPlugin/Controller.d.ts +64 -0
  270. package/plugins/CSS3DPlugin/index.d.ts +5 -0
  271. package/plugins/CSS3DPlugin/typing.d.ts +33 -0
  272. package/plugins/FloorplanPlugin/Controller.d.ts +100 -0
  273. package/plugins/FloorplanPlugin/index.d.ts +6 -0
  274. package/plugins/FloorplanPlugin/render/assets.d.ts +9 -0
  275. package/plugins/FloorplanPlugin/render/index.d.ts +35 -0
  276. package/plugins/FloorplanPlugin/render/isPointInPolygon.d.ts +5 -0
  277. package/plugins/FloorplanPlugin/render/renderFloor.d.ts +22 -0
  278. package/plugins/FloorplanPlugin/render/roomLabelVisibility.d.ts +10 -0
  279. package/plugins/FloorplanPlugin/typing.d.ts +156 -0
  280. package/plugins/FloorplanPlugin/typings/floorplanData.d.ts +112 -0
  281. package/plugins/FloorplanPlugin/typings/floorplanJson.d.ts +167 -0
  282. package/plugins/FloorplanPlugin/typings/floorplanServerData.d.ts +78 -0
  283. package/plugins/FloorplanPlugin/typings/index.d.ts +3 -0
  284. package/plugins/FloorplanPlugin/utils/changeMode.d.ts +5 -0
  285. package/plugins/FloorplanPlugin/utils/changeModelCanvasOpacity.d.ts +6 -0
  286. package/plugins/FloorplanPlugin/utils/correctFiveState.d.ts +11 -0
  287. package/plugins/FloorplanPlugin/utils/equal.d.ts +9 -0
  288. package/plugins/FloorplanPlugin/utils/filter.d.ts +8 -0
  289. package/plugins/FloorplanPlugin/utils/fiveModelLoad.d.ts +6 -0
  290. package/plugins/FloorplanPlugin/utils/formatData.d.ts +6 -0
  291. package/plugins/FloorplanPlugin/utils/formatFloorplanJson.d.ts +20 -0
  292. package/plugins/FloorplanPlugin/utils/formatPosition.d.ts +33 -0
  293. package/plugins/FloorplanPlugin/utils/getDistanceFromModel.d.ts +6 -0
  294. package/plugins/FloorplanPlugin/utils/getPxmm.d.ts +19 -0
  295. package/plugins/FloorplanPlugin/utils/isTruelyObject.d.ts +4 -0
  296. package/plugins/FloorplanPlugin/utils/nearlyEqual.d.ts +8 -0
  297. package/plugins/FloorplanPlugin/utils/polylabel.d.ts +8 -0
  298. package/plugins/FloorplanPlugin/utils/to.d.ts +5 -0
  299. package/plugins/Object3DHelperPlugin/Controller.d.ts +99 -0
  300. package/plugins/Object3DHelperPlugin/Controllers/BaseController.d.ts +142 -0
  301. package/plugins/Object3DHelperPlugin/Controllers/BoundingBoxController.d.ts +16 -0
  302. package/plugins/Object3DHelperPlugin/Controllers/MoveController.d.ts +66 -0
  303. package/plugins/Object3DHelperPlugin/Controllers/RotateController.d.ts +61 -0
  304. package/plugins/Object3DHelperPlugin/FiveControllerWrapper.d.ts +17 -0
  305. package/plugins/Object3DHelperPlugin/Helper/BaseHelper.d.ts +97 -0
  306. package/plugins/Object3DHelperPlugin/Helper/BoundingBoxHelper.d.ts +16 -0
  307. package/plugins/Object3DHelperPlugin/Helper/MoveHelper.d.ts +37 -0
  308. package/plugins/Object3DHelperPlugin/Helper/RotateHelper.d.ts +93 -0
  309. package/plugins/Object3DHelperPlugin/constant.d.ts +27 -0
  310. package/plugins/Object3DHelperPlugin/index.d.ts +6 -0
  311. package/plugins/Object3DHelperPlugin/typing.d.ts +143 -0
  312. package/plugins/Object3DHelperPlugin/utils/ArrowGroup.d.ts +22 -0
  313. package/plugins/Object3DHelperPlugin/utils/CenterHandle.d.ts +23 -0
  314. package/plugins/Object3DHelperPlugin/utils/PlaneHandle.d.ts +19 -0
  315. package/plugins/Object3DHelperPlugin/utils/calculateScaleByCamera.d.ts +5 -0
  316. package/plugins/Object3DHelperPlugin/utils/cameraHooks.d.ts +3 -0
  317. package/plugins/Object3DHelperPlugin/utils/direction.d.ts +14 -0
  318. package/plugins/Object3DHelperPlugin/utils/getMouseRaycaster.d.ts +5 -0
  319. package/plugins/Object3DHelperPlugin/utils/getOrthographicCameraDirection.d.ts +8 -0
  320. package/plugins/Object3DHelperPlugin/utils/setObjectQuaternion.d.ts +8 -0
  321. package/plugins/Object3DHelperPlugin/utils/solidGuide.d.ts +27 -0
  322. package/plugins/Object3DHelperPlugin/utils/tipsDom.d.ts +8 -0
  323. package/plugins/PanoAnimePlugin/Controller.d.ts +49 -0
  324. package/plugins/PanoAnimePlugin/index.d.ts +5 -0
  325. package/plugins/PanoAnimePlugin/typing.d.ts +37 -0
  326. package/plugins/index.d.ts +6 -0
  327. package/plugins/index.js +748 -3
  328. package/plugins/index.mjs +28761 -88
  329. package/plugins/thirdParty/CSS2DRenderer.d.ts +37 -0
  330. package/plugins/thirdParty/CSS3DRenderer.d.ts +45 -0
  331. package/plugins/thirdParty/OrbitControls.d.ts +78 -0
  332. package/plugins/thirdParty/doctorstrange-model.d.ts +92 -0
  333. package/plugins/thirdParty/domevents.d.ts +36 -0
  334. package/plugins/utils/clamp.d.ts +2 -0
  335. package/plugins/utils/uuid.d.ts +2 -0
  336. package/react/index.js +2 -2
  337. package/react/index.mjs +2 -2
  338. package/sticker/geometry.d.ts +3 -0
  339. package/sticker/index.d.ts +68 -0
  340. package/sticker/index.js +255 -0
  341. package/sticker/index.mjs +358 -0
  342. package/umd/five-gltf-loader.js +255 -0
  343. package/umd/five-line.js +322 -0
  344. package/umd/five-plugins.js +816 -3
  345. package/umd/five-react.js +2 -2
  346. package/umd/five-sticker.js +255 -0
  347. package/umd/five-vfx.js +323 -0
  348. package/umd/five.js +347 -344
  349. package/vfx/airflow/airflow.d.ts +18 -0
  350. package/vfx/common/simplex-noise.d.ts +2 -0
  351. package/vfx/frame/frame.d.ts +27 -0
  352. package/vfx/index.d.ts +7 -0
  353. package/vfx/index.js +255 -0
  354. package/vfx/index.mjs +738 -0
  355. package/vfx/particle/instance.d.ts +36 -0
  356. package/vfx/particle/particle.d.ts +119 -0
  357. package/vfx/particle/utils.d.ts +11 -0
  358. package/vfx/particle-gpu/particle.d.ts +75 -0
  359. package/vfx/particle-gpu/utils.d.ts +11 -0
  360. package/vfx/spotLight/spotLight.d.ts +15 -0
  361. package/work-downloader/components/model-3d-tile.d.ts +2 -0
  362. package/work-downloader/components/model.d.ts +3 -0
  363. package/work-downloader/components/observer.d.ts +9 -0
  364. package/work-downloader/download.d.ts +16 -0
  365. package/work-downloader/index.d.ts +2 -0
  366. package/work-downloader/index.js +255 -0
  367. package/work-downloader/index.mjs +595 -0
  368. package/work-downloader/type.d.ts +28 -0
  369. package/work-downloader/utils/download-to-file.d.ts +1 -0
  370. package/work-downloader/utils/image-processing.d.ts +7 -0
  371. package/work-downloader/utils/join-url.d.ts +2 -0
  372. package/work-downloader/utils/log.d.ts +1 -0
  373. package/work-downloader/utils/relative-url.d.ts +1 -0
  374. package/docs/interfaces/index.PBMHDRConfig.html +0 -12
  375. package/five/gaussian-splatting/worker/dataWorker.d.ts +0 -1
  376. package/five/three-version-check.d.ts +0 -1
  377. package/five/utils/hdr-data.d.ts +0 -13
  378. package/five/utils/shaderContentFix.d.ts +0 -7
@@ -1,8 +1,8 @@
1
1
  <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>features/mode | 如视 Five SDK</title><meta name="description" content="Documentation for 如视 Five SDK"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">如视 Five SDK</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">features/mode</a></li></ul></div><div class="tsd-panel tsd-typography"><h1 id="mode-模式" class="tsd-anchor-link">Mode (模式)<a href="#mode-模式" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h1>
2
2
  <ul>
3
- <li><strong>Summary</strong>: Five 支持多种交互模式,包括全景漫游、模型浏览、VR/XR 等,适用于不同的看房场景。</li>
4
- <li><strong>Schema</strong>: 字符串枚举类型,定义了 6 种交互模式。</li>
5
- <li><strong>Concepts</strong>: Panorama, Mapview, Floorplan, Topview, Model, VR/XR。</li>
3
+ <li><strong>Summary</strong>: Five 支持全景漫游、模型浏览等五种交互模式,适用于不同的看房场景。</li>
4
+ <li><strong>Schema</strong>: 字符串枚举类型,定义了 5 种交互模式。</li>
5
+ <li><strong>Concepts</strong>: Panorama, Mapview, Floorplan, Topview, Model。</li>
6
6
  <li><strong>Examples</strong>: 模式切换与事件监听。</li>
7
7
  </ul>
8
8
  <h2 id="schema" class="tsd-anchor-link">Schema<a href="#schema" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
@@ -10,7 +10,7 @@
10
10
  <p><strong>Definition</strong>: <a href="../../five/application/mode.d.ts">Mode</a>, <a href="../../five/application/fiveInitArgs.d.ts">FiveInitArgs</a></p>
11
11
  </blockquote>
12
12
  <p><strong>Mode</strong> 类型定义如下:</p>
13
- <pre><code class="ts"><span class="hl-3">type</span><span class="hl-1"> </span><span class="hl-7">Mode</span><span class="hl-1"> =</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;Panorama&quot;</span><span class="hl-1"> </span><span class="hl-8">// 全景图游走模式</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;Mapview&quot;</span><span class="hl-1"> </span><span class="hl-8">// 模型地图模式</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;Floorplan&quot;</span><span class="hl-1"> </span><span class="hl-8">// 模型户型图模式</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;Topview&quot;</span><span class="hl-1"> </span><span class="hl-8">// 模型平面图模式</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;Model&quot;</span><span class="hl-1"> </span><span class="hl-8">// 模型游走模式</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;VRPanorama&quot;</span><span class="hl-1"> </span><span class="hl-8">// Cardboard VR 眼镜模式</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;XRPanorama&quot;</span><span class="hl-1"> </span><span class="hl-8">// WebXR 虚拟现实 VR 眼镜模式</span>
13
+ <pre><code class="ts"><span class="hl-3">type</span><span class="hl-1"> </span><span class="hl-7">Mode</span><span class="hl-1"> =</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;Panorama&quot;</span><span class="hl-1"> </span><span class="hl-8">// 全景图游走模式</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;Mapview&quot;</span><span class="hl-1"> </span><span class="hl-8">// 模型地图模式</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;Floorplan&quot;</span><span class="hl-1"> </span><span class="hl-8">// 模型户型图模式</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;Topview&quot;</span><span class="hl-1"> </span><span class="hl-8">// 模型平面图模式</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;Model&quot;</span><span class="hl-1"> </span><span class="hl-8">// 模型游走模式</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;VRPanorama&quot;</span><span class="hl-1"> </span><span class="hl-8">// 手机 Cardboard 分屏全景模式(陀螺仪驱动)</span>
14
14
  </code><button type="button">Copy</button></pre>
15
15
 
16
16
  <h2 id="concepts" class="tsd-anchor-link">Concepts<a href="#concepts" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
@@ -40,11 +40,15 @@
40
40
  <li>交互:鼠标拖拽 / Pan手势旋转视角;滚轮 / Pinch手势缩放视场角;点击 / Tap移动到指定位置。</li>
41
41
  </ul>
42
42
  </li>
43
- <li><strong>VRPanorama / XRPanorama</strong>: 适配 VR 设备(如 Google Cardboard, Apple Vision Pro 等)的沉浸式模式。
43
+ <li><strong>XRPanorama (WebXR 头显全景)</strong>: 适用于通过 WebXR 在 VR 头显(Pico / Quest / Apple Vision Pro 等)中沉浸式浏览全景。头显朝向决定看景方向,用手柄 / 注视射线指向并走动到全景点位。
44
44
  <ul>
45
- <li>交互:配合设备手柄或头部追踪,基本交互逻辑同 Panorama。</li>
45
+ <li>交互:头显朝向看景;手柄指向射线(或 Vision Pro 的注视射线)拾取;手柄按键 tap / press 走点与触发事件。</li>
46
+ <li>前置条件:<strong>必须在 <code>new Five({ forceWebGL: true })</code> 时开启 WebGL2 回落后端</strong>(<code>three</code> 的 WebGPU 后端目前不支持 WebXR);浏览器需支持 WebXR(存在 <code>navigator.xr</code>)。</li>
47
+ <li>进入:<code>five.changeMode('XRPanorama')</code> 或 <code>five.setState({ mode: 'XRPanorama' })</code>,会触发一次 XR 会话权限请求(需在用户手势中调用)。</li>
48
+ <li>退出:监听 <code>xr.session.end</code> 事件后切回其他模式(如 <code>Panorama</code>)。</li>
46
49
  </ul>
47
50
  </li>
51
+ <li><strong>VRPanorama (Cardboard 分屏全景)</strong>: 适用于手机配合 Cardboard 眼镜的分屏体验。使用陀螺仪驱动视角,左右眼分屏渲染。<strong>不需要头显设备,也不需要 <code>forceWebGL</code></strong>。</li>
48
52
  </ul>
49
53
  <h2 id="configuration" class="tsd-anchor-link">Configuration<a href="#configuration" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
50
54
  <p>初始化 <code>new Five()</code> 时,可以通过配置参数对各个模式进行个性化定制。</p>
@@ -69,11 +73,6 @@
69
73
  <pre><code class="typescript"><span class="hl-3">interface</span><span class="hl-1"> </span><span class="hl-7">ModelConfig</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">moveSpeed</span><span class="hl-1">?: </span><span class="hl-7">number</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-6">defaultFov</span><span class="hl-1">?: </span><span class="hl-7">number</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">// ... 同 Panorama 基础配置</span><br/><span class="hl-1">}</span>
70
74
  </code><button type="button">Copy</button></pre>
71
75
 
72
- <h3 id="vrpanorama-xrpanorama-vr-模式" class="tsd-anchor-link">VRPanorama / XRPanorama (VR 模式)<a href="#vrpanorama-xrpanorama-vr-模式" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
73
- <p>继承自 Panorama 配置,但移除了俯仰角限制(<code>maxLatitude</code>, <code>minLatitude</code>),因为 VR 模式下视角由设备姿态控制。</p>
74
- <pre><code class="typescript"><span class="hl-3">interface</span><span class="hl-1"> </span><span class="hl-7">VRPanoramaConfig</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-8">// ... 同 Panorama 基础配置</span><br/><span class="hl-1"> </span><span class="hl-8">// 移除: maxLatitude, minLatitude</span><br/><span class="hl-1">}</span><br/><br/><span class="hl-3">interface</span><span class="hl-1"> </span><span class="hl-7">XRPanoramaConfig</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-8">// ... 同 Panorama 基础配置</span><br/><span class="hl-1"> </span><span class="hl-8">// 移除: maxLatitude, minLatitude</span><br/><span class="hl-1">}</span>
75
- </code><button type="button">Copy</button></pre>
76
-
77
76
  <h2 id="examples" class="tsd-anchor-link">Examples<a href="#examples" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
78
77
  <h3 id="快速上手-quick-example" class="tsd-anchor-link">快速上手 (Quick Example)<a href="#快速上手-quick-example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
79
78
  <p>使用 <code>setState</code> 切换模式:</p>
@@ -100,15 +99,31 @@
100
99
  <li><strong>相机类型差异</strong>:<code>Topview</code> 模式使用的是正交相机 (OrthographicCamera),而其他模式使用的是透视相机 (PerspectiveCamera)。在进行自定义渲染或计算时需注意投影矩阵的差异。</li>
101
100
  <li><strong>切换动画</strong>:<code>setState</code> 触发的切换动画是自动规划的,而 <code>changeMode</code> 允许更细粒度的控制。如果需要精确控制动画时长或回调,请使用 <code>changeMode</code>。</li>
102
101
  <li><strong>全景加载</strong>:<code>Panorama</code> 模式下会自动使用瓦片(tile)方式加载全景图以平衡效率和清晰度,而其他模式(如 <code>Mapview</code>)主要展示模型几何。</li>
102
+ <li><strong><code>XRPanorama</code> 与 <code>VRPanorama</code> 不要混淆</strong>:
103
+ <ul>
104
+ <li><code>VRPanorama</code> 是手机 Cardboard 分屏 + 陀螺仪方案,<strong>不需要头显、不需要 <code>forceWebGL</code></strong>,面向的是把手机塞进纸盒眼镜的场景。</li>
105
+ <li><code>XRPanorama</code> 走的是真正的 WebXR 头显设备(Pico / Quest / Apple Vision Pro 等),<strong>必须 <code>new Five({ forceWebGL: true })</code></strong>,面向的是独立 VR 头显。</li>
106
+ <li>两者的驱动源(陀螺仪 vs WebXR viewer pose)、渲染路径(分屏 quad vs XR projection layer)、输入方式(无手柄 vs 手柄 / 注视射线)都不同,切换前请先确认目标设备。</li>
107
+ </ul>
108
+ </li>
109
+ <li><strong><code>XRPanorama</code> 的能力降级限制</strong>(均源自 <code>forceWebGL</code> 的 WebGL2 回落后端,无法规避):
110
+ <ul>
111
+ <li><strong>XR 下没有后处理</strong>:XR 模式会整体旁路 <code>FiveRenderer</code> 的后处理链路(合成 / EffectComposer 全屏 pass 都不参与),滤镜、泛光等后处理效果在头显中不生效。</li>
112
+ <li><strong>点云走 NodeMaterial 路径</strong>:<code>forceWebGL</code> 下点云不再走 WebGPU compute 光栅化,而是退回 NodeMaterial 渲染路径。</li>
113
+ <li><strong>3DGS 走 CPU 排序,且 VR 中性能预期需放低</strong>:<code>forceWebGL</code> 下 3DGS 只能走 CPU 排序(<code>RASTER_CPU_SORT</code>);在 XR 中还叠加了双眼渲染的开销,务必对点数 / 显示做降级,不要期待与 WebGPU 后端相同的帧率。</li>
114
+ </ul>
115
+ </li>
103
116
  </ol>
104
117
  <h2 id="related" class="tsd-anchor-link">Related<a href="#related" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
105
118
  <ul>
106
119
  <li><a href="features_state.html">State - 状态</a>: 了解 Mode 在 State 中的位置及其他状态属性。</li>
107
120
  <li><a href="features_gesture.html">Gesture - 手势</a>: 了解不同模式下的手势交互逻辑。</li>
108
121
  <li><a href="features_event.html">Event - 事件</a>: 了解模式切换等相关事件。</li>
122
+ <li><a href="features_five.html">Five - 核心类</a>: 了解 <code>forceWebGL</code> 初始化参数(进入 <code>XRPanorama</code> 的前置条件)。</li>
123
+ <li>XR 示例:参见 <code>examples/xr</code>(<code>forceWebGL: true</code> + 按钮进入 <code>XRPanorama</code>)。</li>
109
124
  </ul>
110
125
  <hr>
111
- <pre><code class="yaml"><span class="hl-0">tags</span><span class="hl-1">: [</span><span class="hl-2">mode</span><span class="hl-1">, </span><span class="hl-2">state</span><span class="hl-1">, </span><span class="hl-2">interaction</span><span class="hl-1">]</span>
126
+ <pre><code class="yaml"><span class="hl-0">tags</span><span class="hl-1">: [</span><span class="hl-2">mode</span><span class="hl-1">, </span><span class="hl-2">state</span><span class="hl-1">, </span><span class="hl-2">interaction</span><span class="hl-1">, </span><span class="hl-2">xr</span><span class="hl-1">, </span><span class="hl-2">webxr</span><span class="hl-1">, </span><span class="hl-2">vr</span><span class="hl-1">, </span><span class="hl-2">forceWebGL</span><span class="hl-1">, </span><span class="hl-2">XRPanorama</span><span class="hl-1">, </span><span class="hl-2">VRPanorama</span><span class="hl-1">]</span>
112
127
  </code><button type="button">Copy</button></pre>
113
128
 
114
- </div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#mode-模式"><span>Mode (模式)</span></a><ul><li><a href="#schema"><span>Schema</span></a></li><li><a href="#concepts"><span>Concepts</span></a></li><li><a href="#configuration"><span>Configuration</span></a></li><li><ul><li><a href="#panorama-全景漫游"><span>Panorama (全景漫游)</span></a></li><li><a href="#mapview-模型地图"><span>Mapview (模型地图)</span></a></li><li><a href="#floorplan-模型户型"><span>Floorplan (模型户型)</span></a></li><li><a href="#topview-模型平面"><span>Topview (模型平面)</span></a></li><li><a href="#model-模型漫游"><span>Model (模型漫游)</span></a></li><li><a href="#vrpanorama-xrpanorama-vr-模式"><span>VR<wbr/>Panorama / <wbr/>XR<wbr/>Panorama (<wbr/>VR 模式)</span></a></li></ul></li><li><a href="#examples"><span>Examples</span></a></li><li><ul><li><a href="#快速上手-quick-example"><span>快速上手 (<wbr/>Quick <wbr/>Example)</span></a></li><li><a href="#初始化配置示例-initialization-configuration-example"><span>初始化配置示例 (<wbr/>Initialization <wbr/>Configuration <wbr/>Example)</span></a></li><li><a href="#动态修改配置-update-configuration"><span>动态修改配置 (<wbr/>Update <wbr/>Configuration)</span></a></li><li><a href="#进阶用法-advanced-usage"><span>进阶用法 (<wbr/>Advanced <wbr/>Usage)</span></a></li></ul></li><li><a href="#common-pitfalls"><span>Common <wbr/>Pitfalls</span></a></li><li><a href="#related"><span>Related</span></a></li></ul></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">如视 Five SDK</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
129
+ </div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#mode-模式"><span>Mode (模式)</span></a><ul><li><a href="#schema"><span>Schema</span></a></li><li><a href="#concepts"><span>Concepts</span></a></li><li><a href="#configuration"><span>Configuration</span></a></li><li><ul><li><a href="#panorama-全景漫游"><span>Panorama (全景漫游)</span></a></li><li><a href="#mapview-模型地图"><span>Mapview (模型地图)</span></a></li><li><a href="#floorplan-模型户型"><span>Floorplan (模型户型)</span></a></li><li><a href="#topview-模型平面"><span>Topview (模型平面)</span></a></li><li><a href="#model-模型漫游"><span>Model (模型漫游)</span></a></li></ul></li><li><a href="#examples"><span>Examples</span></a></li><li><ul><li><a href="#快速上手-quick-example"><span>快速上手 (<wbr/>Quick <wbr/>Example)</span></a></li><li><a href="#初始化配置示例-initialization-configuration-example"><span>初始化配置示例 (<wbr/>Initialization <wbr/>Configuration <wbr/>Example)</span></a></li><li><a href="#动态修改配置-update-configuration"><span>动态修改配置 (<wbr/>Update <wbr/>Configuration)</span></a></li><li><a href="#进阶用法-advanced-usage"><span>进阶用法 (<wbr/>Advanced <wbr/>Usage)</span></a></li></ul></li><li><a href="#common-pitfalls"><span>Common <wbr/>Pitfalls</span></a></li><li><a href="#related"><span>Related</span></a></li></ul></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">如视 Five SDK</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
@@ -115,7 +115,7 @@ Model 加载完成后,会自动根据 Work 数据生成对应的 ViewLayer,
115
115
  </table>
116
116
  <h2 id="examples" class="tsd-anchor-link">Examples<a href="#examples" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
117
117
  <h3 id="获取并操作当前模型" class="tsd-anchor-link">获取并操作当前模型<a href="#获取并操作当前模型" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
118
- <pre><code class="typescript"><span class="hl-8">// 获取当前模型</span><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">model</span><span class="hl-1"> = </span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-6">models</span><span class="hl-1">[</span><span class="hl-11">0</span><span class="hl-1">];</span><br/><br/><span class="hl-10">if</span><span class="hl-1"> (</span><span class="hl-6">model</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-6">console</span><span class="hl-1">.</span><span class="hl-5">log</span><span class="hl-1">(</span><span class="hl-9">&quot;模型对应 Work 名称:&quot;</span><span class="hl-1">, </span><span class="hl-6">model</span><span class="hl-1">.</span><span class="hl-6">work</span><span class="hl-1">.</span><span class="hl-6">name</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-6">console</span><span class="hl-1">.</span><span class="hl-5">log</span><span class="hl-1">(</span><span class="hl-9">&quot;模型是否细化完成:&quot;</span><span class="hl-1">, </span><span class="hl-6">model</span><span class="hl-1">.</span><span class="hl-6">refined</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-8">// 监听模型细化事件</span><br/><span class="hl-1"> </span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-5">on</span><span class="hl-1">(</span><span class="hl-9">&quot;model.refined&quot;</span><span class="hl-1">, () </span><span class="hl-3">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">console</span><span class="hl-1">.</span><span class="hl-5">log</span><span class="hl-1">(</span><span class="hl-9">&quot;模型高清资源加载完毕&quot;</span><span class="hl-1">);</span><br/><span class="hl-1"> });</span><br/><span class="hl-1">}</span>
118
+ <pre><code class="typescript"><span class="hl-8">// 获取当前模型</span><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">model</span><span class="hl-1"> = </span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-6">models</span><span class="hl-1">[</span><span class="hl-11">0</span><span class="hl-1">];</span><br/><br/><span class="hl-10">if</span><span class="hl-1"> (</span><span class="hl-6">model</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-6">console</span><span class="hl-1">.</span><span class="hl-5">log</span><span class="hl-1">(</span><span class="hl-9">&quot;模型对应 Work 名称:&quot;</span><span class="hl-1">, </span><span class="hl-6">model</span><span class="hl-1">.</span><span class="hl-6">work</span><span class="hl-1">.</span><span class="hl-6">name</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-6">console</span><span class="hl-1">.</span><span class="hl-5">log</span><span class="hl-1">(</span><span class="hl-9">&quot;模型是否细化完成:&quot;</span><span class="hl-1">, </span><span class="hl-6">model</span><span class="hl-1">.</span><span class="hl-6">refined</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-8">// 监听模型细化事件</span><br/><span class="hl-1"> </span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-5">on</span><span class="hl-1">(</span><span class="hl-9">&quot;models.refined&quot;</span><span class="hl-1">, () </span><span class="hl-3">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">console</span><span class="hl-1">.</span><span class="hl-5">log</span><span class="hl-1">(</span><span class="hl-9">&quot;模型高清资源加载完毕&quot;</span><span class="hl-1">);</span><br/><span class="hl-1"> });</span><br/><span class="hl-1">}</span>
119
119
  </code><button type="button">Copy</button></pre>
120
120
 
121
121
  <h3 id="遍历-viewlayer" class="tsd-anchor-link">遍历 ViewLayer<a href="#遍历-viewlayer" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
@@ -51,7 +51,7 @@
51
51
 
52
52
  <h3 id="详细示例-detailed-example" class="tsd-anchor-link">详细示例 (Detailed Example)<a href="#详细示例-detailed-example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
53
53
  <p>获取当前状态并基于此修改:</p>
54
- <pre><code class="ts"><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">state</span><span class="hl-1"> = </span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-6">state</span><span class="hl-1">;</span><br/><br/><span class="hl-8">// 在当前状态基础上,向右旋转 90 度,并略微拉远距离</span><br/><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-5">setState</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-6">longitude:</span><span class="hl-1"> </span><span class="hl-6">tate</span><span class="hl-1">.</span><span class="hl-6">longitude</span><span class="hl-1"> + </span><span class="hl-6">Math</span><span class="hl-1">.</span><span class="hl-4">PI</span><span class="hl-1"> / </span><span class="hl-11">2</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">distance:</span><span class="hl-1"> </span><span class="hl-6">tate</span><span class="hl-1">.</span><span class="hl-6">distance</span><span class="hl-1"> + </span><span class="hl-11">2.0</span><br/><span class="hl-1">});</span>
54
+ <pre><code class="ts"><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">state</span><span class="hl-1"> = </span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-6">state</span><span class="hl-1">;</span><br/><br/><span class="hl-8">// 在当前状态基础上,向右旋转 90 度,并略微拉远距离</span><br/><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-5">setState</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-6">longitude:</span><span class="hl-1"> </span><span class="hl-6">state</span><span class="hl-1">.</span><span class="hl-6">longitude</span><span class="hl-1"> + </span><span class="hl-6">Math</span><span class="hl-1">.</span><span class="hl-4">PI</span><span class="hl-1"> / </span><span class="hl-11">2</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">distance:</span><span class="hl-1"> </span><span class="hl-6">state</span><span class="hl-1">.</span><span class="hl-6">distance</span><span class="hl-1"> + </span><span class="hl-11">2.0</span><br/><span class="hl-1">});</span>
55
55
  </code><button type="button">Copy</button></pre>
56
56
 
57
57
  <h2 id="common-pitfalls" class="tsd-anchor-link">Common Pitfalls<a href="#common-pitfalls" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
@@ -1,18 +1,18 @@
1
- <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>features/ultra-hdr | 如视 Five SDK</title><meta name="description" content="Documentation for 如视 Five SDK"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">如视 Five SDK</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">features/ultra-hdr</a></li></ul></div><div class="tsd-panel tsd-typography"><h1 id="ultrahdr-gainmap-渲染" class="tsd-anchor-link">UltraHDR / GainMap 渲染<a href="#ultrahdr-gainmap-渲染" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h1>
2
- <p>本篇说明 five-webgpu 如何用 UltraHDR(GainMap)方案还原全景图的高动态范围,重点是<strong>最终 RGB 是如何算出来的</strong>。</p>
1
+ <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>features/ultra-hdr | 如视 Five SDK</title><meta name="description" content="Documentation for 如视 Five SDK"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">如视 Five SDK</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">features/ultra-hdr</a></li></ul></div><div class="tsd-panel tsd-typography"><h1 id="ultrahdr-gainmap-渲染" class="tsd-anchor-link">UltraHDR / gainmap 渲染<a href="#ultrahdr-gainmap-渲染" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h1>
2
+ <p>本篇说明 five-webgpu 如何用 UltraHDR(gainmap)方案还原全景图的高动态范围,重点是<strong>最终 RGB 是如何算出来的</strong>。</p>
3
3
  <h2 id="基本原理" class="tsd-anchor-link">基本原理<a href="#基本原理" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
4
4
  <p>UltraHDR 不直接存 HDR 像素,而是拆成两部分:</p>
5
5
  <ul>
6
6
  <li><strong>SDR 底图(base / color)</strong>:普通的 8bit 全景图,直接可显示。</li>
7
- <li><strong>GainMap(增益图)</strong>:每个像素存一个 <code>[0,1]</code> 的增益值,表示该像素相对 SDR 需要放大多少亮度。</li>
7
+ <li><strong>gainmap(增益图)</strong>:每个像素存一个 <code>[0,1]</code> 的增益值,表示该像素相对 SDR 需要放大多少亮度。</li>
8
8
  </ul>
9
9
  <p>渲染时的公式是:</p>
10
10
  <pre><code><span class="hl-6">finalRGB</span><span class="hl-1"> = </span><span class="hl-6">sdrRGB</span><span class="hl-1"> * </span><span class="hl-5">boost</span><span class="hl-1">(</span><span class="hl-6">gain</span><span class="hl-1">)</span>
11
11
  </code><button>Copy</button></pre>
12
12
 
13
- <p><code>boost</code> 是由 GainMap 值加上一组元数据(HDR config)算出的每通道增益系数。当没有 HDR(增益全为 1 / 未启用)时 <code>boost = 1</code>,退化为普通 SDR。</p>
13
+ <p><code>boost</code> 是由 gainmap 值加上一组元数据(HDR config)算出的每通道增益系数。当没有 HDR(增益全为 1 / 未启用)时 <code>boost = 1</code>,退化为普通 SDR。</p>
14
14
  <h2 id="相关数据结构" class="tsd-anchor-link">相关数据结构<a href="#相关数据结构" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
15
- <p>GainMap 元数据来自每个点位的 <code>hdrConfig</code>(<code>HDRCfgData</code>):</p>
15
+ <p>gainmap 元数据来自每个点位的 <code>observer.images.gainmap?.cfg</code>(<code>GainmapCfgData</code>):该点位无 HDR 数据时 <code>images.gainmap</code> 字段不存在。</p>
16
16
  <table>
17
17
  <thead>
18
18
  <tr>
@@ -39,15 +39,15 @@
39
39
  </tr>
40
40
  <tr>
41
41
  <td><code>gamma</code></td>
42
- <td>GainMap 的编码 gamma(解码用 <code>1/gamma</code>)</td>
42
+ <td>gainmap 的编码 gamma(解码用 <code>1/gamma</code>)</td>
43
43
  </tr>
44
44
  <tr>
45
45
  <td><code>offsetSdr</code></td>
46
- <td>SDR 偏移,默认 0(Adobe 规范默认 <code>1/64</code>)</td>
46
+ <td>SDR 偏移,缺省 <code>1/64</code>(UltraHDR 规范默认值)</td>
47
47
  </tr>
48
48
  <tr>
49
49
  <td><code>offsetHdr</code></td>
50
- <td>HDR 偏移,默认 0(Adobe 规范默认 <code>1/64</code>)</td>
50
+ <td>HDR 偏移,缺省 <code>1/64</code>(UltraHDR 规范默认值)</td>
51
51
  </tr>
52
52
  </tbody>
53
53
  </table>
@@ -56,7 +56,7 @@
56
56
  <li><code>maxDisplayBoost</code>:当前显示器 / 场景允许的最大显示增益,决定实际能还原多少 HDR。可通过 <code>five.modelScene.parameter.set('maxDisplayBoost', value)</code> 实时调整。</li>
57
57
  </ul>
58
58
  <h2 id="最终-rgb-的计算步骤" class="tsd-anchor-link">最终 RGB 的计算步骤<a href="#最终-rgb-的计算步骤" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
59
- <p>对应实现见 <code>PanoSourceNode.computeHDRBoost</code>(以及瓦片路径下等价的 <code>tiling.ts#computeHDRBoostNode</code>)。</p>
59
+ <p>对应实现见 <code>lib/five/model/materials/tsl/utils.ts#hdrBoost</code> / <code>#hdrOffset</code>(以及瓦片路径下等价的 <code>lib/five/core/tiling.ts#computeHDRBoostNode</code>)。</p>
60
60
  <h3 id="1-计算显示权重-weight" class="tsd-anchor-link">1. 计算显示权重 weight<a href="#1-计算显示权重-weight" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
61
61
  <p>根据显示器容量把 <code>maxDisplayBoost</code> 归一化到 <code>[0,1]</code>:</p>
62
62
  <pre><code><span class="hl-6">weight</span><span class="hl-1"> = </span><span class="hl-5">clamp</span><span class="hl-1">(</span><br/><span class="hl-1"> (</span><span class="hl-5">log2</span><span class="hl-1">(</span><span class="hl-6">maxDisplayBoost</span><span class="hl-1">) - </span><span class="hl-5">log2</span><span class="hl-1">(</span><span class="hl-6">hdrCapacityMin</span><span class="hl-1">)) /</span><br/><span class="hl-1"> (</span><span class="hl-5">log2</span><span class="hl-1">(</span><span class="hl-6">hdrCapacityMax</span><span class="hl-1">) - </span><span class="hl-5">log2</span><span class="hl-1">(</span><span class="hl-6">hdrCapacityMin</span><span class="hl-1">)),</span><br/><span class="hl-1"> </span><span class="hl-11">0</span><span class="hl-1">, </span><span class="hl-11">1</span><br/><span class="hl-1">)</span>
@@ -68,10 +68,10 @@
68
68
  <li>中间值:按比例插值。</li>
69
69
  </ul>
70
70
  <blockquote>
71
- <p>瓦片路径(<code>computeHDRBoostNode</code>)对分母做了保护:<code>max(denom, 1e-6)</code> 并乘以 <code>step(1e-6, denom)</code>,避免非 HDR(capacity 全为 1)时除零产生 NaN。</p>
71
+ <p>两条路径都对分母做了保护:<code>max(denom, 1e-6)</code> 并乘以 <code>step(1e-6, denom)</code>,避免非 HDR(capacity 全为 1)时除零产生 NaN(此时权重取 0,退化为 SDR)。</p>
72
72
  </blockquote>
73
- <h3 id="2-gainmap-解码(gamma)" class="tsd-anchor-link">2. GainMap 解码(gamma)<a href="#2-gainmap-解码(gamma)" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
74
- <p>GainMap 采样值经 gamma 还原为线性增益量(每通道独立),解码使用 gamma 的倒数:</p>
73
+ <h3 id="2-gainmap-解码(gamma)" class="tsd-anchor-link">2. gainmap 解码(gamma)<a href="#2-gainmap-解码(gamma)" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
74
+ <p>gainmap 采样值经 gamma 还原为线性增益量(每通道独立),解码使用 gamma 的倒数:</p>
75
75
  <pre><code><span class="hl-6">gainLinear</span><span class="hl-1"> = </span><span class="hl-5">pow</span><span class="hl-1">(</span><span class="hl-6">gainRGB</span><span class="hl-1">, </span><span class="hl-11">1</span><span class="hl-1">/</span><span class="hl-6">gamma</span><span class="hl-1">) </span><span class="hl-8">// 对 r/g/b 分别做 pow,与 Adobe 规范一致</span>
76
76
  </code><button>Copy</button></pre>
77
77
 
@@ -86,7 +86,7 @@
86
86
  </code><button>Copy</button></pre>
87
87
 
88
88
  <h3 id="5-得到最终颜色" class="tsd-anchor-link">5. 得到最终颜色<a href="#5-得到最终颜色" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
89
- <p>应用 GainMap 偏移得到最终 HDR 颜色(<code>offset</code> 为 0 时退化为 <code>sdr * boost</code>):</p>
89
+ <p>应用 gainmap 偏移得到最终 HDR 颜色(<code>offset</code> 为 0 时退化为 <code>sdr * boost</code>):</p>
90
90
  <pre><code><span class="hl-6">finalRGB</span><span class="hl-1"> = (</span><span class="hl-6">sdrRGB</span><span class="hl-1"> + </span><span class="hl-6">offsetSdr</span><span class="hl-1">) * </span><span class="hl-6">boost</span><span class="hl-1"> - </span><span class="hl-6">offsetHdr</span><br/><span class="hl-6">finalA</span><span class="hl-1"> = </span><span class="hl-6">sdrA</span>
91
91
  </code><button>Copy</button></pre>
92
92
 
@@ -102,28 +102,19 @@
102
102
  <p>以下公式来自两个权威开源实现,可作为校验基准。内容已改写以符合许可要求。</p>
103
103
  <h3 id="1-google-(c,)" class="tsd-anchor-link">1) Google <code>libultrahdr</code>(C++,<code>gainmapmath.cpp</code>)<a href="#1-google-(c,)" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
104
104
  <p>解码端 <code>applyGain</code>(带 displayBoost 的重载)核心逻辑:</p>
105
- <pre><code class="cpp">logBoost = log2(minContentBoost) * (1 - gain) + log2(maxContentBoost) * gain;
106
- gainFactor = exp2(logBoost * displayBoost / maxContentBoost);
107
- finalRGB = sdr * gainFactor;
108
- </code><button type="button">Copy</button></pre>
105
+ <pre><code><span class="hl-6">logBoost</span><span class="hl-1"> = </span><span class="hl-5">log2</span><span class="hl-1">(</span><span class="hl-6">minContentBoost</span><span class="hl-1">) * (</span><span class="hl-11">1</span><span class="hl-1"> - </span><span class="hl-6">gain</span><span class="hl-1">) + </span><span class="hl-5">log2</span><span class="hl-1">(</span><span class="hl-6">maxContentBoost</span><span class="hl-1">) * </span><span class="hl-6">gain</span><span class="hl-1">;</span><br/><span class="hl-6">gainFactor</span><span class="hl-1"> = </span><span class="hl-5">exp2</span><span class="hl-1">(</span><span class="hl-6">logBoost</span><span class="hl-1"> * </span><span class="hl-6">displayBoost</span><span class="hl-1"> / </span><span class="hl-6">maxContentBoost</span><span class="hl-1">);</span><br/><span class="hl-6">finalRGB</span><span class="hl-1"> = </span><span class="hl-6">sdr</span><span class="hl-1"> * </span><span class="hl-6">gainFactor</span><span class="hl-1">;</span>
106
+ </code><button>Copy</button></pre>
109
107
 
110
108
  <p>说明:</p>
111
109
  <ul>
112
- <li><code>gain</code> 是 GainMap 采样值(<code>[0,1]</code>)。该库固定 <code>gamma = 1.0</code>、<code>offsetSdr = offsetHdr = 0</code>、<code>hdrCapacityMin = 1</code>、<code>hdrCapacityMax = maxContentBoost</code>,所以权重简化成 <code>displayBoost / maxContentBoost</code>。</li>
110
+ <li><code>gain</code> 是 gainmap 采样值(<code>[0,1]</code>)。该库固定 <code>gamma = 1.0</code>、<code>offsetSdr = offsetHdr = 0</code>、<code>hdrCapacityMin = 1</code>、<code>hdrCapacityMax = maxContentBoost</code>,所以权重简化成 <code>displayBoost / maxContentBoost</code>。</li>
113
111
  <li>元数据里的 <code>minContentBoost</code> / <code>maxContentBoost</code> 是<strong>线性倍数</strong>(非 log),在着色器里才取 <code>log2</code>。</li>
114
112
  <li>来源:<a href="https://github.com/ittiam-systems/libultrahdr">ittiam-systems/libultrahdr</a> / <a href="https://android.googlesource.com/platform/external/libultrahdr">AOSP libultrahdr</a>。内容为改写。</li>
115
113
  </ul>
116
- <h3 id="2-monogrid-v340(adobe-gainmap-规范的-threejs-移植)" class="tsd-anchor-link">2) MONOGRID <code>gainmap-js</code> v3.4.0(Adobe GainMap 规范的 three.js 移植)<a href="#2-monogrid-v340(adobe-gainmap-规范的-threejs-移植)" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
114
+ <h3 id="2-monogrid-v340(adobe-gainmap-规范的-threejs-移植)" class="tsd-anchor-link">2) MONOGRID <code>gainmap-js</code> v3.4.0(Adobe gainmap 规范的 three.js 移植)<a href="#2-monogrid-v340(adobe-gainmap-规范的-threejs-移植)" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
117
115
  <p>解码 fragment shader 原式(等价重排):</p>
118
- <pre><code class="glsl">logRecovery = pow(recovery, gamma); // gamma uniform = 1.0 / metadataGamma
119
- logBoost = gainMapMin * (1 - logRecovery) + gainMapMax * logRecovery;
120
- hdrColor = (sdr + offsetSdr) * exp2(logBoost * weightFactor) - offsetHdr;
121
-
122
- weightFactor = clamp(
123
- (log2(maxDisplayBoost) - hdrCapacityMin) / (hdrCapacityMax - hdrCapacityMin),
124
- 0, 1
125
- );
126
- </code><button type="button">Copy</button></pre>
116
+ <pre><code><span class="hl-6">logRecovery</span><span class="hl-1"> = </span><span class="hl-5">pow</span><span class="hl-1">(</span><span class="hl-6">recovery</span><span class="hl-1">, </span><span class="hl-6">gamma</span><span class="hl-1">); </span><span class="hl-8">// gamma uniform = 1.0 / metadataGamma</span><br/><span class="hl-6">logBoost</span><span class="hl-1"> = </span><span class="hl-6">gainMapMin</span><span class="hl-1"> * (</span><span class="hl-11">1</span><span class="hl-1"> - </span><span class="hl-6">logRecovery</span><span class="hl-1">) + </span><span class="hl-6">gainMapMax</span><span class="hl-1"> * </span><span class="hl-6">logRecovery</span><span class="hl-1">;</span><br/><span class="hl-6">hdrColor</span><span class="hl-1"> = (</span><span class="hl-6">sdr</span><span class="hl-1"> + </span><span class="hl-6">offsetSdr</span><span class="hl-1">) * </span><span class="hl-5">exp2</span><span class="hl-1">(</span><span class="hl-6">logBoost</span><span class="hl-1"> * </span><span class="hl-6">weightFactor</span><span class="hl-1">) - </span><span class="hl-6">offsetHdr</span><span class="hl-1">;</span><br/><br/><span class="hl-6">weightFactor</span><span class="hl-1"> = </span><span class="hl-5">clamp</span><span class="hl-1">(</span><br/><span class="hl-1"> (</span><span class="hl-5">log2</span><span class="hl-1">(</span><span class="hl-6">maxDisplayBoost</span><span class="hl-1">) - </span><span class="hl-6">hdrCapacityMin</span><span class="hl-1">) / (</span><span class="hl-6">hdrCapacityMax</span><span class="hl-1"> - </span><span class="hl-6">hdrCapacityMin</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-11">0</span><span class="hl-1">, </span><span class="hl-11">1</span><br/><span class="hl-1">);</span>
117
+ </code><button>Copy</button></pre>
127
118
 
128
119
  <p>说明(这是最贴近 Adobe 官方规范的实现):</p>
129
120
  <ul>
@@ -141,23 +132,33 @@ weightFactor = clamp(
141
132
  <ul>
142
133
  <li>本项目对 <code>minContentBoost / maxContentBoost / hdrCapacityMin / hdrCapacityMax</code> 在 shader 内部统一取 <code>log2</code>,说明这些字段在数据里是<strong>线性倍数</strong>(如 <code>maxContentBoost = 100</code>、<code>hdrCapacityMax = 1000</code>)。这与 <strong>libultrahdr 约定一致</strong>。</li>
143
134
  <li>但 <strong>Adobe / gainmap-js 约定相反</strong>:这些字段在元数据里就已经是 <strong>log2 空间</strong>。</li>
144
- <li>风险:如果 GainMap 资源是按 Adobe/UltraHDR 标准(XMP <code>hdrgm</code>)导出的,那里的 <code>HDRCapacityMin/Max</code>、<code>GainMapMin/Max</code> 已经是 log2 值,本项目再套一次 <code>log2</code> 就会<strong>二次取对数</strong>导致结果错误。务必确认打包侧写入的到底是线性倍数还是 log2 值。</li>
135
+ <li>风险:如果 gainmap 资源是按 Adobe/UltraHDR 标准(XMP <code>hdrgm</code>)导出的,那里的 <code>HDRCapacityMin/Max</code>、<code>GainMapMin/Max</code> 已经是 log2 值,本项目再套一次 <code>log2</code> 就会<strong>二次取对数</strong>导致结果错误。务必确认打包侧写入的到底是线性倍数还是 log2 值。</li>
145
136
  </ul>
146
137
  </li>
147
138
  <li>
148
- <p><strong>gamma 方向(✅ 已修复)</strong></p>
139
+ <p><strong>gamma 方向(✅ 已修复,pano 与瓦片两条路径一致)</strong></p>
149
140
  <ul>
150
- <li>现在解码使用 <code>pow(gainRGB, 1/gamma)</code>,与 Adobe / gainmap-js 规范一致。</li>
151
- <li><code>gamma = 1</code>(当前默认)时与旧行为相同,无回归;<code>gamma ≠ 1</code> 时结果才会正确。</li>
152
- <li>同时修正了 <code>PanoSourceNode.update</code> 里 <code>gamma ?? 1000</code> 的可疑默认值为 <code>?? 1</code>。</li>
141
+ <li>解码使用 <code>pow(gainRGB, 1/gamma)</code>(规范:<code>log_recovery = pow(recovery, 1.0 / map_gamma)</code>),与 Adobe / gainmap-js 规范一致;<code>gamma</code> 做了 <code>&gt; 0</code> 保护,<code>gain</code> 先 clamp 到 <code>[0,1]</code>。</li>
142
+ <li><code>gamma = 1</code>(当前数据默认)时与旧行为相同,无回归;<code>gamma ≠ 1</code> 时结果才会正确。</li>
143
+ <li>注意:<code>PanoSourceNode</code> 已删除,公式现在在 <code>tsl/utils.ts#hdrBoost</code> 与 <code>tiling.ts#computeHDRBoostNode</code> 各有一份,改动需同步。</li>
153
144
  </ul>
154
145
  </li>
155
146
  <li>
156
147
  <p><strong>offset 偏移(✅ 已支持)</strong></p>
157
148
  <ul>
158
- <li>完整式:<code>hdr = (sdr + offsetSdr) * boost - offsetHdr</code>,由 <code>applyHDROffset</code> / <code>applyHDROffsetNode</code> 统一应用。</li>
159
- <li><code>offsetSdr</code> / <code>offsetHdr</code> 已加入 <code>HDRCfgData</code> 与瓦片 uniform,可从 <code>hdrConfig</code> 读取。</li>
160
- <li><strong>默认值为 0</strong>(等价于 <code>sdr * boost</code>,与历史行为一致)。注意 Adobe 规范默认是 <code>1/64</code>;若资源按非零 offset 编码,需在配置里显式提供对应值,暗部才能严格还原。</li>
149
+ <li>完整式:<code>hdr = (sdr + offsetSdr) * boost - offsetHdr</code>,由 <code>tsl/utils.ts#hdrOffset</code>(pano 路径)与 <code>tiling.ts#hdrOffsetNode</code>(瓦片路径)应用,不需要额外的 <code>applyHDROffset</code> 包装。</li>
150
+ <li><code>offsetSdr</code> / <code>offsetHdr</code> 已加入 <code>GainmapCfgData</code>(支持 <code>offset_sdr</code> / <code>offset_hdr</code> 下划线写法)、pano 材质 uniform(<code>pano0HdrOffsetSdr</code> 等)与瓦片 uniform,可从 <code>images.gainmap.cfg</code> 读取。</li>
151
+ <li><strong>缺省值为 <code>1/64</code></strong>(见导出的 <code>DEFAULT_GAINMAP_CFG_DATA</code>,与 UltraHDR 规范默认一致):cfg 里没有该字段时按 <code>1/64</code> 解码。</li>
152
+ <li>⚠️ 编码/解码 offset 必须一致:若打包侧按 <code>offsetSdr = offsetHdr = 0</code> 生成 gain map,需在 cfg 里显式写 <code>0</code>(否则近黑会略有抬升);反之若按规范 <code>1/64</code> 编码,现在的默认值正好匹配。因此<strong>建议打包侧始终在 cfg 中显式写入这两个字段</strong>。</li>
153
+ </ul>
154
+ </li>
155
+ <li>
156
+ <p><strong>gainmap 纹理的色彩空间(✅ 已改为 <code>NoColorSpace</code>)</strong></p>
157
+ <ul>
158
+ <li>规范要求 gain map 直接使用 <code>encoded_recovery / 255</code>(其自带的色彩配置文件不生效)。</li>
159
+ <li>现在 pano 路径(<code>panorama</code> / <code>floorplan</code> / <code>mapview</code> 的 <code>loadCubeTexture</code>)与瓦片路径(<code>core/tiling.ts</code> 的 <code>loadTexture</code>)都显式传 <code>colorSpace: THREE.NoColorSpace</code>;SDR 底图仍为 <code>SRGBColorSpace</code>。</li>
160
+ <li>three 的 GPU 纹理格式在<strong>首次创建时</strong>按 colorSpace 决定(WebGPU:sRGB → <code>rgba8unorm-srgb</code> 做硬件解码),之后只重传像素、不重建格式。因此瓦片纹理池改为按 <code>尺寸 + colorSpace</code> 分桶,避免色图与 gainmap 串用同一张池化纹理。</li>
161
+ <li>观感变化:gainmap 中间调不再被 sRGB 曲线压低(<code>maxDisplayBoost=4</code>、<code>maxContentBoost=100</code>、capacity <code>1..1000</code> 时,gain=0.5 的 boost 由约 1.22 → 1.59),亮部更亮;gain=0 与 gain=1 两端不变。若打包侧曾把 <code>recovery</code> 按 sRGB 预补偿写进 JPEG(非标准做法),需回退此项。</li>
161
162
  </ul>
162
163
  </li>
163
164
  </ol>
@@ -169,20 +170,25 @@ weightFactor = clamp(
169
170
  <p>两式在“capacity 线性 vs log2”约定统一后是同一个公式。</p>
170
171
  <h2 id="关键代码位置" class="tsd-anchor-link">关键代码位置<a href="#关键代码位置" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
171
172
  <ul>
172
- <li><code>lib/five/model/materials/nodes/PanoSourceNode.ts</code>
173
+ <li><code>lib/five/model/materials/tsl/utils.ts</code>
174
+ <ul>
175
+ <li><code>hdrBoost(gainRGB, maxDisplayBoost, maxContentBoost, minContentBoost, capacityMin, capacityMax, gamma)</code>:增益系数计算(TSL 节点,含 gamma 解码与容量权重)。</li>
176
+ <li><code>hdrOffset(sdrRGB, boost, offsetSdr, offsetHdr)</code>:应用 offset 得到最终 HDR 颜色。</li>
177
+ </ul>
178
+ </li>
179
+ <li><code>lib/five/model/materials/tsl/defines.ts</code>
173
180
  <ul>
174
- <li><code>computeHDRBoost(gainRGB, maxDisplayBoost)</code>:增益系数计算(TSL 节点)。</li>
175
- <li><code>sampleHDR(cameraDirection, maxDisplayBoost, rgba?)</code>:采样 SDR 底图与 GainMap 并输出 <code>sdrColor.rgb * boost</code>。</li>
181
+ <li><code>pano0HdrColor</code> / <code>pano1HdrColor</code>:拼接 <code>hdrBoost</code> 与 <code>hdrOffset</code>,材质 uniform 由 <code>pbmMaterial.ts</code> 的 <code>pano0Hdr*</code> / <code>pano1Hdr*</code> 属性驱动。</li>
176
182
  </ul>
177
183
  </li>
178
184
  <li><code>lib/five/core/tiling.ts</code>
179
185
  <ul>
180
- <li><code>computeHDRBoostNode(gainRGB, uniforms)</code>:瓦片细化路径下的等价实现(带除零保护)。</li>
181
- <li><code>TileMaterial.setupNode()</code>:<code>mix(sdr, sdr*boost, enabled)</code> 的烘焙逻辑。</li>
186
+ <li><code>computeHDRBoostNode(gainRGB, uniforms)</code> / <code>hdrOffsetNode(...)</code>:瓦片细化路径下的等价实现(带除零保护)。</li>
187
+ <li><code>TileMaterial.setupNode()</code> / <code>BoundingMaterial</code>:<code>mix(sdr, (sdr + offsetSdr) * boost - offsetHdr, enabled)</code> 的烘焙逻辑。</li>
182
188
  </ul>
183
189
  </li>
184
- <li><code>lib/five/utils/hdr-data.ts</code>:<code>HDRCfgData</code> 定义与 <code>parseHDRCfgData</code> 解析。</li>
190
+ <li><code>lib/five/utils/gainmap-data.ts</code>:<code>GainmapCfgData</code> 定义与 <code>parseGainmapCfgData</code> 解析(兼容 camelCase 与下划线 key)。</li>
185
191
  </ul>
186
192
  <h2 id="使用示例" class="tsd-anchor-link">使用示例<a href="#使用示例" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
187
- <p>参见 <code>examples/hdr/index.ts</code> 与 <code>examples/_tools/hdr-viewer/panes/hdr.ts</code>:到达点位后从 <code>observer.images.hdrConfig</code> 拉取元数据,<code>maxDisplayBoost</code> 可实时调节以观察增益变化。</p>
188
- </div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#ultrahdr-gainmap-渲染"><span>Ultra<wbr/>HDR / <wbr/>Gain<wbr/>Map 渲染</span></a><ul><li><a href="#基本原理"><span>基本原理</span></a></li><li><a href="#相关数据结构"><span>相关数据结构</span></a></li><li><a href="#最终-rgb-的计算步骤"><span>最终 <wbr/>RGB 的计算步骤</span></a></li><li><ul><li><a href="#1-计算显示权重-weight"><span>1. 计算显示权重 weight</span></a></li><li><a href="#2-gainmap-解码(gamma)"><span>2. <wbr/>Gain<wbr/>Map 解码(gamma)</span></a></li><li><a href="#3-在-log-域插值出增益"><span>3. 在 log 域插值出增益</span></a></li><li><a href="#4-应用显示权重并还原到线性倍数"><span>4. 应用显示权重并还原到线性倍数</span></a></li><li><a href="#5-得到最终颜色"><span>5. 得到最终颜色</span></a></li></ul></li><li><a href="#完整公式汇总"><span>完整公式汇总</span></a></li><li><a href="#官方参考公式"><span>官方参考公式</span></a></li><li><ul><li><a href="#1-google-(c,)"><span>1) <wbr/>Google (<wbr/>C++,)</span></a></li><li><a href="#2-monogrid-v340(adobe-gainmap-规范的-threejs-移植)"><span>2) <wbr/>MONOGRID v3.4.0(<wbr/>Adobe <wbr/>Gain<wbr/>Map 规范的 three.js 移植)</span></a></li></ul></li><li><a href="#本项目公式-vs-官方公式(差异核对)"><span>本项目公式 vs 官方公式(差异核对)</span></a></li><li><ul><li><a href="#weight-公式对比"><span>weight 公式对比</span></a></li></ul></li><li><a href="#关键代码位置"><span>关键代码位置</span></a></li><li><a href="#使用示例"><span>使用示例</span></a></li></ul></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">如视 Five SDK</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
193
+ <p>参见 <code>examples/hdr/index.ts</code> 与 <code>examples/_tools/hdr-viewer/panes/hdr.ts</code>:到达点位后从 <code>observer.images.gainmap?.cfg</code> 拉取元数据(无 HDR 时该字段不存在),<code>maxDisplayBoost</code> 可实时调节以观察增益变化。</p>
194
+ </div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#ultrahdr-gainmap-渲染"><span>Ultra<wbr/>HDR / gainmap 渲染</span></a><ul><li><a href="#基本原理"><span>基本原理</span></a></li><li><a href="#相关数据结构"><span>相关数据结构</span></a></li><li><a href="#最终-rgb-的计算步骤"><span>最终 <wbr/>RGB 的计算步骤</span></a></li><li><ul><li><a href="#1-计算显示权重-weight"><span>1. 计算显示权重 weight</span></a></li><li><a href="#2-gainmap-解码(gamma)"><span>2. gainmap 解码(gamma)</span></a></li><li><a href="#3-在-log-域插值出增益"><span>3. 在 log 域插值出增益</span></a></li><li><a href="#4-应用显示权重并还原到线性倍数"><span>4. 应用显示权重并还原到线性倍数</span></a></li><li><a href="#5-得到最终颜色"><span>5. 得到最终颜色</span></a></li></ul></li><li><a href="#完整公式汇总"><span>完整公式汇总</span></a></li><li><a href="#官方参考公式"><span>官方参考公式</span></a></li><li><ul><li><a href="#1-google-(c,)"><span>1) <wbr/>Google (<wbr/>C++,)</span></a></li><li><a href="#2-monogrid-v340(adobe-gainmap-规范的-threejs-移植)"><span>2) <wbr/>MONOGRID v3.4.0(<wbr/>Adobe gainmap 规范的 three.js 移植)</span></a></li></ul></li><li><a href="#本项目公式-vs-官方公式(差异核对)"><span>本项目公式 vs 官方公式(差异核对)</span></a></li><li><ul><li><a href="#weight-公式对比"><span>weight 公式对比</span></a></li></ul></li><li><a href="#关键代码位置"><span>关键代码位置</span></a></li><li><a href="#使用示例"><span>使用示例</span></a></li></ul></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">如视 Five SDK</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
@@ -4,7 +4,7 @@
4
4
  </ul>
5
5
  <h2 id="installation" class="tsd-anchor-link">Installation<a href="#installation" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
6
6
  <p>通过 npm 或 yarn 安装:</p>
7
- <pre><code class="bash"><span class="hl-5">npm</span><span class="hl-1"> </span><span class="hl-9">install</span><span class="hl-1"> </span><span class="hl-9">three@^0.117.1</span><span class="hl-1"> </span><span class="hl-9">@realsee/five-webgpu</span><br/><span class="hl-8"># or</span><br/><span class="hl-5">yarn</span><span class="hl-1"> </span><span class="hl-9">add</span><span class="hl-1"> </span><span class="hl-9">three@^0.117.1</span><span class="hl-1"> </span><span class="hl-9">@realsee/five-webgpu</span>
7
+ <pre><code class="bash"><span class="hl-5">npm</span><span class="hl-1"> </span><span class="hl-9">install</span><span class="hl-1"> </span><span class="hl-9">three@^0.183.2</span><span class="hl-1"> </span><span class="hl-9">@realsee/five-webgpu</span><br/><span class="hl-8"># or</span><br/><span class="hl-5">yarn</span><span class="hl-1"> </span><span class="hl-9">add</span><span class="hl-1"> </span><span class="hl-9">three@^0.183.2</span><span class="hl-1"> </span><span class="hl-9">@realsee/five-webgpu</span>
8
8
  </code><button type="button">Copy</button></pre>
9
9
 
10
10
  <blockquote>
@@ -102,7 +102,7 @@
102
102
  <ul>
103
103
  <li>新增 tile.content.loadProgress 属性,用于查看每个瓦片的加载进度 (0-1)。</li>
104
104
  <li>新增 tile.content.byteLength 属性,可在加载过程中获取瓦片内容的字节长度。</li>
105
- <li>同时,model.tileLoad 和 model.tileUnload 事件被添加,用于监控瓦片的生命周期。</li>
105
+ <li>同时,models.tileLoad 和 models.tileUnload 事件被添加,用于监控瓦片的生命周期。</li>
106
106
  <li>加载函数(loadGltf, loadPly 等)现在支持 onDownloadProgress 回调,用于监控文件下载进度。</li>
107
107
  </ul>
108
108
  <h4 id="射线检测增强" class="tsd-anchor-link">射线检测增强<a href="#射线检测增强" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4>
@@ -177,7 +177,7 @@ UV 转换工具函数</p>
177
177
  <li>优化 mapview 下滚动缩放。避免滚落所发有时会退回的问题。</li>
178
178
  <li>优化 floorplan 从下向上看时的交互的屏幕上下滑动反人类下意识的问题。</li>
179
179
  <li>优化 camera.autoNearFar 的计算结果。优化对于小物品的 near 过远以及 出现 z-fighting 的问题。</li>
180
- <li>添加了 gesture.create 事件,发生在所有事件创建时。</li>
180
+ <li>添加了 gesture.fire 事件,发生在任意事件被触发。</li>
181
181
  <li>gestureEvent.center gestureEvent.pointers 中加入了 buttons button shiftKey ctrlKey metaKey altKey 字段。</li>
182
182
  </ol>
183
183
  <h2 id="内部机制改动" class="tsd-anchor-link">内部机制改动<a href="#内部机制改动" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
@@ -40,10 +40,8 @@
40
40
  </tr>
41
41
  </tbody>
42
42
  </table>
43
- <h2 id="webxr-support" class="tsd-anchor-link">WebXR Support<a href="#webxr-support" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
44
- <p>如果需要使用 VR 模式 (XRPanorama),需要浏览器支持 <a href="https://developer.mozilla.org/en-US/docs/Web/API/WebXR_Device_API">WebXR Device API</a>。</p>
45
43
  <h2 id="related" class="tsd-anchor-link">Related<a href="#related" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
46
44
  <ul>
47
45
  <li><a href="quick-start.html">Quick Start</a></li>
48
46
  </ul>
49
- </div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#browser-support-浏览器支持"><span>Browser <wbr/>Support (浏览器支持)</span></a><ul><li><a href="#compatibility"><span>Compatibility</span></a></li><li><a href="#webxr-support"><span>Web<wbr/>XR <wbr/>Support</span></a></li><li><a href="#related"><span>Related</span></a></li></ul></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">如视 Five SDK</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
47
+ </div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#browser-support-浏览器支持"><span>Browser <wbr/>Support (浏览器支持)</span></a><ul><li><a href="#compatibility"><span>Compatibility</span></a></li><li><a href="#related"><span>Related</span></a></li></ul></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">如视 Five SDK</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
@@ -1,3 +1,3 @@
1
1
  <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>customNodesCacheKey | 如视 Five SDK</title><meta name="description" content="Documentation for 如视 Five SDK"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">如视 Five SDK</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="../modules/index.html">index</a></li><li><a href="" aria-current="page">customNodesCacheKey</a></li></ul><h1>Function customNodesCacheKey</h1></div><section class="tsd-panel"><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link" id="customnodescachekey"><span class="tsd-kind-call-signature">customNodesCacheKey</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">customNodes</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-keyword">readonly</span> <a href="../classes/index.PBMCustomNode.html" class="tsd-signature-type tsd-kind-class">PBMCustomNode</a><span class="tsd-signature-symbol">[]</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><a href="#customnodescachekey" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>生成 customNodes 数组的 customProgramCacheKey 片段。
2
2
  在 NodeMaterial 的 customProgramCacheKey() 中调用。</p>
3
- </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">customNodes</span>: <span class="tsd-signature-keyword">readonly</span> <a href="../classes/index.PBMCustomNode.html" class="tsd-signature-type tsd-kind-class">PBMCustomNode</a><span class="tsd-signature-symbol">[]</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">undefined</span></span></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4><aside class="tsd-sources"><ul><li>Defined in lib/five/model/materials/pbmMaterial.ts:263</li></ul></aside></div></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">如视 Five SDK</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
3
+ </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">customNodes</span>: <span class="tsd-signature-keyword">readonly</span> <a href="../classes/index.PBMCustomNode.html" class="tsd-signature-type tsd-kind-class">PBMCustomNode</a><span class="tsd-signature-symbol">[]</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">undefined</span></span></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4><aside class="tsd-sources"><ul><li>Defined in lib/five/model/materials/pbmMaterial.ts:361</li></ul></aside></div></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">如视 Five SDK</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>