@realsee/five-webgpu 1.0.0-alpha.5 → 1.0.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai_guides/api.md +9 -8
- package/ai_guides/features/camera-animation.md +1 -1
- package/ai_guides/features/event.md +0 -1
- package/ai_guides/features/five.md +8 -8
- package/ai_guides/features/gesture.md +1 -1
- package/ai_guides/features/load-external-model.md +6 -6
- package/ai_guides/features/load-progress.md +2 -2
- package/ai_guides/features/mode.md +3 -23
- package/ai_guides/features/model.md +1 -1
- package/ai_guides/features/state.md +2 -2
- package/ai_guides/features/ultra-hdr.md +41 -32
- package/ai_guides/quick-start.md +2 -2
- package/ai_guides/release_notes/6.8.md +2 -2
- package/ai_guides/support.md +0 -4
- package/docs/assets/hierarchy.js +1 -1
- package/docs/assets/navigation.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/index.AdaptiveLuminancePass.html +1 -1
- package/docs/classes/index.BoundingMesh.html +1 -1
- package/docs/classes/index.EffectComposer.html +1 -1
- package/docs/classes/index.EyeDomeLightingPass.html +1 -1
- package/docs/classes/index.Five.html +68 -67
- package/docs/classes/index.FivePass.html +1 -1
- package/docs/classes/index.FlowingFireworks3DPass.html +1 -1
- package/docs/classes/index.FlowingLight2DPass.html +1 -1
- package/docs/classes/index.FlowingLight3DPass.html +1 -1
- package/docs/classes/index.GaussianBlurPass.html +1 -1
- package/docs/classes/index.InternalWebGPURenderer.html +4 -4
- package/docs/classes/index.Model.html +1 -1
- package/docs/classes/index.ModelScene.html +1 -1
- package/docs/classes/index.NetworkSubscribe.html +1 -1
- package/docs/classes/index.PBMCustomNode.html +8 -8
- package/docs/classes/index.PBMGaussianSplattingNodeMaterial.html +8 -6
- package/docs/classes/index.PBMGaussianSplattingObject.html +10 -4
- package/docs/classes/index.PBMGaussianSplattingRenderMesh.html +26 -15
- package/docs/classes/index.PBMGroup.html +1 -1
- package/docs/classes/index.PBMMesh.html +1 -1
- package/docs/classes/index.PBMMeshBasicMaterial.html +11 -7
- package/docs/classes/index.PBMMeshBasicNodeMaterial.html +11 -7
- package/docs/classes/index.PBMMeshPanoOnlyMaterial.html +11 -7
- package/docs/classes/index.PBMMeshPanoOnlyNodeMaterial.html +11 -7
- package/docs/classes/index.PBMMeshPhongMaterial.html +11 -7
- package/docs/classes/index.PBMMeshPhongNodeMaterial.html +11 -7
- package/docs/classes/index.PBMMeshPhysicalMaterial.html +11 -7
- package/docs/classes/index.PBMMeshPhysicalNodeMaterial.html +11 -7
- package/docs/classes/index.PBMPanoFilter.html +8 -8
- package/docs/classes/index.PBMPointCloud.html +1 -1
- package/docs/classes/index.PBMSkinnedMesh.html +1 -1
- package/docs/classes/index.PBMUpdateable.html +1 -1
- package/docs/classes/index.PanoCircleMesh.html +1 -1
- package/docs/classes/index.PanoCircleMeshCustom.html +5 -5
- package/docs/classes/index.PanoCircleMeshSolid.html +1 -1
- package/docs/classes/index.Parameter.html +1 -1
- package/docs/classes/index.Subscribe.html +1 -1
- package/docs/classes/index.TextureLoader.html +4 -1
- package/docs/classes/index.Tile3D.html +23 -21
- package/docs/classes/index.TileNode.html +1 -1
- package/docs/classes/index.Tileset.html +4 -4
- package/docs/classes/index.TrajectoryNode.html +3 -3
- package/docs/classes/index.Work.html +20 -18
- package/docs/classes/index.WorkResolvedObserver.html +22 -22
- package/docs/documents/api.html +11 -10
- package/docs/documents/features_camera-animation.html +1 -1
- package/docs/documents/features_event.html +0 -1
- package/docs/documents/features_five.html +7 -7
- package/docs/documents/features_gesture.html +1 -1
- package/docs/documents/features_load-external-model.html +6 -6
- package/docs/documents/features_load-progress.html +1 -1
- package/docs/documents/features_mode.html +5 -15
- package/docs/documents/features_model.html +1 -1
- package/docs/documents/features_state.html +1 -1
- package/docs/documents/features_ultra-hdr.html +50 -44
- package/docs/documents/quick-start.html +1 -1
- package/docs/documents/release_notes_6.8.html +2 -2
- package/docs/documents/support.html +1 -3
- package/docs/functions/index.customNodesCacheKey.html +1 -1
- package/docs/functions/index.parseWork.html +1 -1
- package/docs/functions/index.workToJson.html +1 -1
- package/docs/hierarchy.html +1 -1
- package/docs/interfaces/index.AddableObject.html +1 -1
- package/docs/interfaces/index.AjaxOptions.html +1 -1
- package/docs/interfaces/index.BaseEvent.html +2 -2
- package/docs/interfaces/index.Clock.html +24 -0
- package/docs/interfaces/index.EventCallback.html +49 -47
- package/docs/interfaces/index.FiveInitArgs.html +49 -40
- package/docs/interfaces/index.GainmapCfgData.html +15 -0
- package/docs/interfaces/index.GestureEvent.html +2 -2
- package/docs/interfaces/index.IPBMMaterial.html +10 -6
- package/docs/interfaces/index.ImageOptions.html +1 -1
- package/docs/interfaces/index.IntersectEvent.html +2 -2
- package/docs/interfaces/index.IntersectMesh.html +1 -1
- package/docs/interfaces/index.IntersectMeshInterface.html +1 -1
- package/docs/interfaces/index.Intersection.html +1 -1
- package/docs/interfaces/index.LoosePanoWork.html +2 -2
- package/docs/interfaces/index.LooseWork.html +2 -2
- package/docs/interfaces/index.LooseWorkInitial.html +2 -2
- package/docs/interfaces/index.LooseWorkModel.html +2 -2
- package/docs/interfaces/index.LooseWorkObserver.html +2 -2
- package/docs/interfaces/index.LooseWorkPanorama.html +4 -3
- package/docs/interfaces/index.LooseWorkWithExtrinsics.html +15 -9
- package/docs/interfaces/index.ModeChangeEvent.html +2 -2
- package/docs/interfaces/index.ModelControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/index.ModelEvent.html +2 -2
- package/docs/interfaces/index.ModelSceneEvent.html +2 -2
- package/docs/interfaces/index.ModelTileEvent.html +2 -2
- package/docs/interfaces/index.MovePanoOptions.html +1 -1
- package/docs/interfaces/index.NetworkAbortError.html +1 -1
- package/docs/interfaces/index.NetworkFirbiddenError.html +1 -1
- package/docs/interfaces/index.NetworkOptions.html +1 -1
- package/docs/interfaces/index.NetworkProxyError.html +1 -1
- package/docs/interfaces/index.NetworkResourceEvent.html +2 -2
- package/docs/interfaces/index.NetworkResponseError.html +1 -1
- package/docs/interfaces/index.NetworkTimeoutError.html +1 -1
- package/docs/interfaces/index.ObjectEvent.html +2 -2
- package/docs/interfaces/index.PBMClipperParameter.html +2 -2
- package/docs/interfaces/index.PBMCustomNodeContext.html +60 -12
- package/docs/interfaces/index.PBMCustomNodeOptions.html +4 -4
- package/docs/interfaces/index.PBMCustomNodePanoContext.html +12 -5
- package/docs/interfaces/index.PBMCustomNodeSlots.html +6 -6
- package/docs/interfaces/index.PBMPanoDepth.html +5 -5
- package/docs/interfaces/index.PBMPanoFilterValue.html +2 -2
- package/docs/interfaces/index.PBMPanoGainmap.html +6 -0
- package/docs/interfaces/index.PBMPanoPicture.html +9 -8
- package/docs/interfaces/index.PBMRefinedScreen.html +2 -2
- package/docs/interfaces/index.PanoCircleMeshCustomOptions.html +2 -2
- package/docs/interfaces/index.PanoCircleMeshInterface.html +1 -1
- package/docs/interfaces/index.PanoEvent.html +2 -2
- package/docs/interfaces/index.PanoTextureEvent.html +2 -2
- package/docs/interfaces/index.PanoramaControllerCustomInitArgs.html +9 -9
- package/docs/interfaces/index.PanoramaLikeControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/index.ParameterMaterialValue.html +1 -1
- package/docs/interfaces/index.ParameterTilesetValue.html +1 -1
- package/docs/interfaces/index.ParameterValue.html +1 -1
- package/docs/interfaces/index.Pose.html +1 -1
- package/docs/interfaces/index.RenderEvent.html +2 -2
- package/docs/interfaces/index.ResolvedParameterValue.html +1 -1
- package/docs/interfaces/index.State.html +1 -1
- package/docs/interfaces/index.StateEvent.html +2 -2
- package/docs/interfaces/index.TextureOptions.html +1 -1
- package/docs/interfaces/index.TilesetOptions.html +7 -2
- package/docs/interfaces/index.TopviewControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/index.VRPanoramaControllerCustomInitArgs.html +37 -0
- package/docs/interfaces/index.ViewLayer.html +23 -21
- package/docs/interfaces/index.WorkCubeHdrGainmapImage.html +10 -0
- package/docs/interfaces/index.WorkCubeImage.html +5 -9
- package/docs/interfaces/index.WorkImage.html +8 -12
- package/docs/interfaces/index.WorkInitial.html +8 -8
- package/docs/interfaces/index.WorkModel.html +8 -8
- package/docs/interfaces/index.WorkModelLayer.html +6 -6
- package/docs/interfaces/index.WorkObserver.html +23 -23
- package/docs/interfaces/index.WorkPanoramaJson.html +3 -2
- package/docs/interfaces/index.WorkTile.html +8 -12
- package/docs/interfaces/index.WorksEvent.html +2 -2
- package/docs/interfaces/index.XRControllerEvent.html +2 -2
- package/docs/interfaces/index.XRGestureEvent.html +2 -2
- package/docs/interfaces/index.XRSessionEvent.html +2 -2
- package/docs/modules/index.html +1 -1
- package/docs/types/index.ControllerCustomInitTypes.html +3 -2
- package/docs/types/index.ControllerEventTypes.html +25 -23
- package/docs/types/index.EventTypes.html +26 -26
- package/docs/types/index.Mode.html +2 -1
- package/docs/types/index.ParseOptions.html +14 -8
- package/docs/variables/index.GSPLAT_PIPELINE_AUTO.html +2 -0
- package/docs/variables/index.GSPLAT_PIPELINE_RASTER_CPU_SORT.html +2 -0
- package/docs/variables/index.GSPLAT_PIPELINE_RASTER_GPU_SORT.html +2 -0
- package/docs/variables/index.PROXY_CONTROLLER_EVENT_NAMES.html +1 -1
- package/docs/variables/index.controllersDefaultInitArgs.html +1 -1
- package/five/application/controllers.d.ts +4 -0
- package/five/application/events.d.ts +1 -1
- package/five/application/five.d.ts +4 -1
- package/five/application/fiveInitArgs.d.ts +13 -0
- package/five/application/mode.d.ts +2 -0
- package/five/cardboard/helper.d.ts +2 -0
- package/five/cardboard/index.d.ts +13 -0
- package/five/cardboard/sensor.d.ts +158 -0
- package/five/controllers/base.d.ts +3 -0
- package/five/controllers/events.d.ts +5 -3
- package/five/controllers/panorama.d.ts +2 -2
- package/five/controllers/vrPanorama.d.ts +56 -0
- package/five/core/panoVideo.d.ts +4 -1
- package/five/core/tiling.d.ts +25 -11
- package/five/gaussian-splatting/gpu-sort/prefixSumKernel.d.ts +65 -0
- package/five/gaussian-splatting/gpu-sort/radixSortModule.d.ts +128 -0
- package/five/gaussian-splatting/gpu-sort/shaders/prefixSum.d.ts +2 -0
- package/five/gaussian-splatting/gpu-sort/shaders/radixHistogram.d.ts +2 -0
- package/five/gaussian-splatting/gpu-sort/shaders/radixReorder.d.ts +2 -0
- package/five/gaussian-splatting/gpu-sort/shaders/sortKeygen.d.ts +2 -0
- package/five/gaussian-splatting/gpu-sort/sortAdapter.d.ts +234 -0
- package/five/gaussian-splatting/pipelines/cpuSortPipeline.d.ts +159 -0
- package/five/gaussian-splatting/pipelines/gpuSortPipeline.d.ts +98 -0
- package/five/gaussian-splatting/pipelines/gsplatPipeline.d.ts +104 -0
- package/five/gaussian-splatting/pipelines/pipelineMode.d.ts +42 -0
- package/five/gaussian-splatting/pipelines/sortThrottle.d.ts +45 -0
- package/five/index.d.ts +4 -1
- package/five/index.js +272 -269
- package/five/index.mjs +6979 -4610
- package/five/meshes/panoCircleMeshCustom.d.ts +1 -0
- package/five/model/index.d.ts +1 -1
- package/five/model/materials/pbmGaussianSplattingNodeMaterial.d.ts +4 -0
- package/five/model/materials/pbmMaterial.d.ts +113 -18
- package/five/model/materials/tsl/defines.d.ts +6 -1
- package/five/model/materials/tsl/outputBuilder.d.ts +1 -12
- package/five/model/materials/tsl/panoColor.d.ts +8 -2
- package/five/model/materials/tsl/utils.d.ts +13 -0
- package/five/model/objects/pbmGaussianSplattingObject.d.ts +9 -0
- package/five/model/objects/pbmGaussianSplattingRenderMesh.d.ts +67 -101
- package/five/model/tile3d/index.d.ts +2 -0
- package/five/model/tile3d/tileset.d.ts +5 -0
- package/five/model/tile3d/trajectory-content.d.ts +53 -0
- package/five/texture/loader.d.ts +6 -0
- package/five/types/cube.d.ts +0 -1
- package/five/utils/detector.d.ts +11 -1
- package/five/utils/error.d.ts +1 -0
- package/five/utils/event.d.ts +17 -1
- package/five/utils/gainmap-data.d.ts +23 -0
- package/five/work/index.d.ts +1 -1
- package/five/work/looseWorkType.d.ts +2 -1
- package/five/work/work.d.ts +30 -7
- package/five/work/workJsonType.d.ts +2 -1
- package/gltf-loader/gltf-object.d.ts +17 -0
- package/gltf-loader/index.d.ts +45 -0
- package/gltf-loader/index.js +255 -0
- package/gltf-loader/index.mjs +302 -0
- package/package.json +6 -1
- package/plugins/BackgroundPlugin/Controller.d.ts +20 -0
- package/plugins/BackgroundPlugin/index.d.ts +5 -0
- package/plugins/BackgroundPlugin/typings.d.ts +44 -0
- package/plugins/CSS2DPlugin/Controller.d.ts +59 -0
- package/plugins/CSS2DPlugin/index.d.ts +5 -0
- package/plugins/CSS2DPlugin/typing.d.ts +31 -0
- package/plugins/CSS3DPlugin/Controller.d.ts +64 -0
- package/plugins/CSS3DPlugin/index.d.ts +5 -0
- package/plugins/CSS3DPlugin/typing.d.ts +33 -0
- package/plugins/FloorplanPlugin/Controller.d.ts +100 -0
- package/plugins/FloorplanPlugin/index.d.ts +5 -0
- package/plugins/FloorplanPlugin/render/assets.d.ts +9 -0
- package/plugins/FloorplanPlugin/render/index.d.ts +35 -0
- package/plugins/FloorplanPlugin/render/isPointInPolygon.d.ts +5 -0
- package/plugins/FloorplanPlugin/render/renderFloor.d.ts +22 -0
- package/plugins/FloorplanPlugin/render/roomLabelVisibility.d.ts +10 -0
- package/plugins/FloorplanPlugin/typing.d.ts +156 -0
- package/plugins/FloorplanPlugin/typings/floorplanData.d.ts +112 -0
- package/plugins/FloorplanPlugin/typings/floorplanServerData.d.ts +78 -0
- package/plugins/FloorplanPlugin/typings/index.d.ts +2 -0
- package/plugins/FloorplanPlugin/utils/changeMode.d.ts +5 -0
- package/plugins/FloorplanPlugin/utils/changeModelCanvasOpacity.d.ts +6 -0
- package/plugins/FloorplanPlugin/utils/correctFiveState.d.ts +11 -0
- package/plugins/FloorplanPlugin/utils/equal.d.ts +9 -0
- package/plugins/FloorplanPlugin/utils/filter.d.ts +8 -0
- package/plugins/FloorplanPlugin/utils/fiveModelLoad.d.ts +6 -0
- package/plugins/FloorplanPlugin/utils/formatData.d.ts +6 -0
- package/plugins/FloorplanPlugin/utils/formatPosition.d.ts +33 -0
- package/plugins/FloorplanPlugin/utils/getDistanceFromModel.d.ts +6 -0
- package/plugins/FloorplanPlugin/utils/getPxmm.d.ts +19 -0
- package/plugins/FloorplanPlugin/utils/isTruelyObject.d.ts +4 -0
- package/plugins/FloorplanPlugin/utils/nearlyEqual.d.ts +8 -0
- package/plugins/FloorplanPlugin/utils/to.d.ts +5 -0
- package/plugins/Object3DHelperPlugin/Controller.d.ts +99 -0
- package/plugins/Object3DHelperPlugin/Controllers/BaseController.d.ts +142 -0
- package/plugins/Object3DHelperPlugin/Controllers/BoundingBoxController.d.ts +16 -0
- package/plugins/Object3DHelperPlugin/Controllers/MoveController.d.ts +66 -0
- package/plugins/Object3DHelperPlugin/Controllers/RotateController.d.ts +61 -0
- package/plugins/Object3DHelperPlugin/FiveControllerWrapper.d.ts +17 -0
- package/plugins/Object3DHelperPlugin/Helper/BaseHelper.d.ts +97 -0
- package/plugins/Object3DHelperPlugin/Helper/BoundingBoxHelper.d.ts +16 -0
- package/plugins/Object3DHelperPlugin/Helper/MoveHelper.d.ts +37 -0
- package/plugins/Object3DHelperPlugin/Helper/RotateHelper.d.ts +93 -0
- package/plugins/Object3DHelperPlugin/constant.d.ts +27 -0
- package/plugins/Object3DHelperPlugin/index.d.ts +6 -0
- package/plugins/Object3DHelperPlugin/typing.d.ts +143 -0
- package/plugins/Object3DHelperPlugin/utils/ArrowGroup.d.ts +22 -0
- package/plugins/Object3DHelperPlugin/utils/CenterHandle.d.ts +23 -0
- package/plugins/Object3DHelperPlugin/utils/PlaneHandle.d.ts +19 -0
- package/plugins/Object3DHelperPlugin/utils/calculateScaleByCamera.d.ts +5 -0
- package/plugins/Object3DHelperPlugin/utils/cameraHooks.d.ts +3 -0
- package/plugins/Object3DHelperPlugin/utils/direction.d.ts +14 -0
- package/plugins/Object3DHelperPlugin/utils/getMouseRaycaster.d.ts +5 -0
- package/plugins/Object3DHelperPlugin/utils/getOrthographicCameraDirection.d.ts +8 -0
- package/plugins/Object3DHelperPlugin/utils/setObjectQuaternion.d.ts +8 -0
- package/plugins/Object3DHelperPlugin/utils/solidGuide.d.ts +27 -0
- package/plugins/Object3DHelperPlugin/utils/tipsDom.d.ts +8 -0
- package/plugins/PanoAnimePlugin/Controller.d.ts +49 -0
- package/plugins/PanoAnimePlugin/index.d.ts +5 -0
- package/plugins/PanoAnimePlugin/typing.d.ts +37 -0
- package/plugins/index.d.ts +6 -0
- package/plugins/index.js +393 -3
- package/plugins/index.mjs +3421 -92
- package/plugins/thirdParty/CSS2DRenderer.d.ts +37 -0
- package/plugins/thirdParty/CSS3DRenderer.d.ts +45 -0
- package/plugins/thirdParty/OrbitControls.d.ts +78 -0
- package/plugins/thirdParty/domevents.d.ts +36 -0
- package/plugins/utils/clamp.d.ts +2 -0
- package/plugins/utils/uuid.d.ts +2 -0
- package/react/index.js +2 -2
- package/react/index.mjs +2 -2
- package/umd/five-gltf-loader.js +255 -0
- package/umd/five-plugins.js +461 -3
- package/umd/five-react.js +2 -2
- package/umd/five.js +350 -347
- package/docs/interfaces/index.PBMHDRConfig.html +0 -12
- package/five/gaussian-splatting/worker/dataWorker.d.ts +0 -1
- package/five/three-version-check.d.ts +0 -1
- package/five/utils/hdr-data.d.ts +0 -13
- package/five/utils/shaderContentFix.d.ts +0 -7
package/ai_guides/api.md
CHANGED
|
@@ -24,7 +24,7 @@ const five = new Five(initArgs?: FiveInitArgs);
|
|
|
24
24
|
| `five.scene` | `THREE.Scene` | The Three.js scene used for non-model elements. |
|
|
25
25
|
| `five.modelScene` | `ModelScene` | The Three.js scene used for the model. |
|
|
26
26
|
| `five.camera` | `Camera` | The internal camera. |
|
|
27
|
-
| `five.renderer` | `THREE.
|
|
27
|
+
| `five.renderer` | `THREE.WebGPURenderer` | The WebGPU renderer. |
|
|
28
28
|
| `five.needsRender` | `boolean` | Set to `true` to request a render frame in the next loop. |
|
|
29
29
|
| `five.plugins` | `Object` | Access to registered plugins. |
|
|
30
30
|
|
|
@@ -32,7 +32,7 @@ const five = new Five(initArgs?: FiveInitArgs);
|
|
|
32
32
|
|
|
33
33
|
| Property | Type | Description |
|
|
34
34
|
| :--- | :--- | :--- |
|
|
35
|
-
| `Five.Mode` | `Enum` | Available modes: `Panorama`, `Model`, `Floorplan`, `Topview`, `Mapview`, `VRPanorama
|
|
35
|
+
| `Five.Mode` | `Enum` | Available modes: `Panorama`, `Model`, `Floorplan`, `Topview`, `Mapview`, `VRPanorama`. |
|
|
36
36
|
|
|
37
37
|
## Initialization Configuration (`FiveInitArgs`)
|
|
38
38
|
|
|
@@ -40,8 +40,8 @@ Configuration object passed to the `Five` constructor.
|
|
|
40
40
|
|
|
41
41
|
```typescript
|
|
42
42
|
interface FiveInitArgs {
|
|
43
|
-
/** External
|
|
44
|
-
renderer?: THREE.
|
|
43
|
+
/** External WebGPURenderer. If provided, internal renderer creation is skipped. */
|
|
44
|
+
renderer?: THREE.WebGPURenderer;
|
|
45
45
|
|
|
46
46
|
/** Width/Height of the viewport relative to container (0-1). */
|
|
47
47
|
viewport?: { left: number; bottom: number; width: number; height: number };
|
|
@@ -80,12 +80,13 @@ interface FiveInitArgs {
|
|
|
80
80
|
|
|
81
81
|
## Core Methods
|
|
82
82
|
|
|
83
|
-
### `load(
|
|
83
|
+
### `load(inputWork, state?, options?, userAction?)`
|
|
84
84
|
Loads a "Work" (dataset) into the Five instance.
|
|
85
85
|
|
|
86
|
-
- **
|
|
86
|
+
- **inputWork**: The data object (`LooseWork` or `Work`) containing scene information.
|
|
87
87
|
- **state**: Initial state overrides. `"inherit"`, `"initial"`, or a `State` object.
|
|
88
88
|
- **options**: Loading options (e.g., transition duration).
|
|
89
|
+
- **userAction**: Whether the load was triggered by a user action. Defaults to `true`.
|
|
89
90
|
|
|
90
91
|
### `appendTo(element, size?)`
|
|
91
92
|
Mounts the Five canvas to a DOM element.
|
|
@@ -243,8 +244,8 @@ These events follow a standard naming convention and provide typed event objects
|
|
|
243
244
|
| :--- | :--- | :--- |
|
|
244
245
|
| `works.load` | Triggered when work data starts loading. | `WorksEvent` |
|
|
245
246
|
| `models.load` | Triggered when models are loaded. | `ModelSceneEvent` |
|
|
246
|
-
| `
|
|
247
|
-
| `
|
|
247
|
+
| `models.tileLoad` | Triggered when a 3D tile is loaded. | `ModelTileEvent` |
|
|
248
|
+
| `models.tileUnload` | Triggered when a 3D tile is unloaded. | `ModelTileEvent` |
|
|
248
249
|
| `pano.arrived` | Triggered when arrival at a panorama node. | `PanoEvent` |
|
|
249
250
|
| `pano.texture.progress` | Triggered when panorama texture loading progresses. | `{ progress, panoIndex }` |
|
|
250
251
|
| `render` | Triggered after each render frame. | `RenderEvent` |
|
|
@@ -104,7 +104,7 @@ five.changeMode(mode: Mode, options?, animationOptions?): Promise<void>
|
|
|
104
104
|
|
|
105
105
|
| Parameter | Type | Default | Description |
|
|
106
106
|
| :--- | :--- | :--- | :--- |
|
|
107
|
-
| `modeChangeDuration` | `number` | `
|
|
107
|
+
| `modeChangeDuration` | `number` | `800` | 模态切换 (如 Panorama -> Mapview) 的默认时长 (ms)。 |
|
|
108
108
|
|
|
109
109
|
### MovePanoOptions Configuration (移动参数)
|
|
110
110
|
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
```typescript
|
|
18
18
|
interface FiveInitArgs {
|
|
19
19
|
/** 外部传入的渲染器 (如果传入,部分渲染配置将失效) */
|
|
20
|
-
renderer?: THREE.
|
|
20
|
+
renderer?: THREE.WebGPURenderer;
|
|
21
21
|
/**
|
|
22
22
|
* 屏幕渲染区域 { left, bottom, width, height }
|
|
23
23
|
* 必须配合外部 renderer 使用
|
|
@@ -35,7 +35,7 @@ interface FiveInitArgs {
|
|
|
35
35
|
textureOptions?: TextureOptions;
|
|
36
36
|
/** 是否按需渲染 (默认 true, 推荐开启以节省性能) */
|
|
37
37
|
onlyRenderIfNeeds?: boolean;
|
|
38
|
-
/** 模式切换动画时长 (ms, 默认
|
|
38
|
+
/** 模式切换动画时长 (ms, 默认 800) */
|
|
39
39
|
modeChangeDuration?: number;
|
|
40
40
|
/** 是否支持滚轮缩放 (默认 true) */
|
|
41
41
|
enableWheel?: boolean;
|
|
@@ -55,7 +55,7 @@ Five 实例是整个 3D 场景的入口。
|
|
|
55
55
|
|
|
56
56
|
### Rendering Loop (渲染循环)
|
|
57
57
|
Five 内部维护了一个 `requestAnimationFrame` 循环。
|
|
58
|
-
- **按需渲染**: 默认开启 `onlyRenderIfNeeds
|
|
58
|
+
- **按需渲染**: 默认开启 `onlyRenderIfNeeds`,仅在画面发生变化(如视角移动、数据加载)时才触发渲染,大幅降低能耗。
|
|
59
59
|
- **手动触发**: 可以通过 `five.needsRender = true` 强制下一帧进行渲染。
|
|
60
60
|
|
|
61
61
|
### Resource Loading (资源加载)
|
|
@@ -71,7 +71,7 @@ Five 内部维护了一个 `requestAnimationFrame` 循环。
|
|
|
71
71
|
| `textureOptions` | `TextureOptions` | `{}` | 贴图加载策略,同上 |
|
|
72
72
|
| `onlyRenderIfNeeds` | `boolean` | `true` | 是否仅在需要时渲染,建议保持 `true` |
|
|
73
73
|
| `antialias` | `boolean` | `false` | 抗锯齿,开启会增加性能消耗 |
|
|
74
|
-
| `modeChangeDuration` | `number` | `
|
|
74
|
+
| `modeChangeDuration` | `number` | `800` | 模式切换动画时长 (ms) |
|
|
75
75
|
| `enableWheel` | `boolean` | `true` | 是否支持滚轮缩放 |
|
|
76
76
|
|
|
77
77
|
## Examples
|
|
@@ -103,7 +103,7 @@ five.load(workData);
|
|
|
103
103
|
import * as THREE from "three/webgpu";
|
|
104
104
|
import { Five } from "@realsee/five-webgpu";
|
|
105
105
|
|
|
106
|
-
const renderer = new THREE.
|
|
106
|
+
const renderer = new THREE.WebGPURenderer();
|
|
107
107
|
renderer.setSize(window.innerWidth, window.innerHeight);
|
|
108
108
|
document.body.appendChild(renderer.domElement);
|
|
109
109
|
|
|
@@ -152,8 +152,8 @@ five.updateCameraWithKeyframes(keyframes, 2000).then(() => {
|
|
|
152
152
|
### 实例方法 (Instance Methods)
|
|
153
153
|
|
|
154
154
|
- **`appendTo(element: HTMLElement)`**: 将 canvas 挂载到指定 DOM 元素。
|
|
155
|
-
- **`load(
|
|
156
|
-
- **`dispose()`**:
|
|
155
|
+
- **`load(inputWork, state?: "inherit" | "initial" | Partial<State>, options?: number | FiveLoadOptions, userAction?: boolean)`**: 加载场景数据。详见 [work.md](./work.md)。
|
|
156
|
+
- **`dispose()`**: 销毁实例并释放相关渲染资源。
|
|
157
157
|
- **`updateCamera(pose: Partial<Pose>, duration: number, userAction?: boolean)`**: 移动相机(不触发点位移动)。移动相机的视角或位置,不会改变当前所在的 PanoIndex。如果动画中途被打断,Promise 会被 reject。
|
|
158
158
|
- **`updateCameraWithKeyframes(keyframes: { progress: number; value: Pose; key?: string }[], duration: number, userAction?: boolean)`**: 通过关键帧动画移动相机。
|
|
159
159
|
- **`refresh()`**: 强制刷新画布尺寸。通常在窗口 resize 时调用,Five 会自动监听 resize,但在某些布局变化场景下可能需要手动调用。
|
|
@@ -164,7 +164,7 @@ five.updateCameraWithKeyframes(keyframes, 2000).then(() => {
|
|
|
164
164
|
1. **状态同步**:相机姿态已通过动画过渡到目标状态(`stateSynced` 为 true)。
|
|
165
165
|
2. **模型加载**:如果是 Floorplan/Topview/Mapview/Model 模态,需等待模型加载完成 (`modelScene.loaded`)。
|
|
166
166
|
3. **瓦片加载**:如果是 Panorama 模态且传入了 `{ tile: true }`,需等待当前视角的瓦片加载完成。
|
|
167
|
-
- **`setState(state: Partial<State>,
|
|
167
|
+
- **`setState(state: Partial<State>, immediately?: boolean, userAction?: boolean)`**: 变更当前状态(如点位、视角)。详见 [state.md](./state.md)。
|
|
168
168
|
- **`on(event, callback)` / `off(event, callback)`**: 事件监听。详见 [event.md](./event.md)。
|
|
169
169
|
|
|
170
170
|
## Related
|
|
@@ -30,7 +30,7 @@ export type LoadResultType<Scene = THREE.Object3D> = {
|
|
|
30
30
|
|
|
31
31
|
// 通用配置项接口
|
|
32
32
|
interface BaseLoaderOptions {
|
|
33
|
-
upAxis?: 'Y' | 'Z'; // 期望输出的上轴,默认为 'Z'
|
|
33
|
+
upAxis?: 'Y' | 'Z'; // 期望输出的上轴,默认为 'Z'(加载器输出坐标系)
|
|
34
34
|
modelUpAxis?: 'Y' | 'Z'; // (部分加载器支持) 原始模型的上轴,用于自动旋转修正
|
|
35
35
|
fetcher?: Fetcher; // 自定义网络请求 Fetcher
|
|
36
36
|
light?: boolean; // 是否使用简化/无光照材质 (取决于加载器实现)
|
|
@@ -44,15 +44,15 @@ interface BaseLoaderOptions {
|
|
|
44
44
|
这些加载函数(如 `loadGltf`, `loadPly`)是 `@realsee/five-webgpu` 包导出的**独立函数**,而非 `Five` 实例的方法。你需要单独引入它们使用。
|
|
45
45
|
|
|
46
46
|
### 坐标系转换 (Up-Axis Conversion)
|
|
47
|
-
Five
|
|
47
|
+
Five 运行时场景使用 **Y-up** (Y 轴向上) 的右手坐标系;加载器默认输出通常为 **Z-up**。
|
|
48
48
|
许多外部模型(如 standard GLTF, FBX)通常是 **Y-up** 的。
|
|
49
49
|
加载器提供了 `upAxis` 和 `modelUpAxis` 选项来自动处理旋转:
|
|
50
|
-
- `upAxis`:
|
|
50
|
+
- `upAxis`: 你期望得到的加载器输出坐标系上轴(通常保持默认 'Z')。
|
|
51
51
|
- `modelUpAxis`: 原始文件的上轴(如 GLTF 默认为 'Y',PLY 默认为 'Z')。
|
|
52
|
-
|
|
52
|
+
如果不指定,加载器会使用各自的默认值;将结果直接添加到 `five.scene` 时,应按需设置 `upAxis: 'Y'` 与 Five 的运行时坐标系对齐。
|
|
53
53
|
|
|
54
54
|
### 资源销毁 (Disposal)
|
|
55
|
-
加载的模型包含 Geometry、Material 和 Texture 等
|
|
55
|
+
加载的模型包含 Geometry、Material 和 Texture 等 GPU 资源。当你不再需要该模型时(例如切换场景或移除物体),**必须**调用返回结果中的 `dispose()` 方法来释放资源,否则会导致内存泄漏。
|
|
56
56
|
|
|
57
57
|
### Fetcher
|
|
58
58
|
所有加载器支持传入自定义 `fetcher`。这在需要鉴权、自定义 Header 或处理特定 CDN 逻辑时非常有用。如果不传,默认使用内部的 `internalFetcher`。
|
|
@@ -241,7 +241,7 @@ import { loadSplat } from '@realsee/five-webgpu';
|
|
|
241
241
|
|
|
242
242
|
loadSplat('https://example.com/scene.splat', {
|
|
243
243
|
modelUpAxis: 'Y', // 假设原始数据是 Y-up
|
|
244
|
-
upAxis: '
|
|
244
|
+
upAxis: 'Y', // 转换到 Five 的 Y-up 运行时坐标系
|
|
245
245
|
}).then((result) => {
|
|
246
246
|
const splatMesh = result.scene;
|
|
247
247
|
five.scene.add(splatMesh);
|
|
@@ -85,11 +85,11 @@ const progress = tile.content.loadProgress; // [0, 1]
|
|
|
85
85
|
监控单个 Tile 的加载与卸载事件,用于更精细的调试或资源统计。
|
|
86
86
|
|
|
87
87
|
```ts
|
|
88
|
-
five.on("
|
|
88
|
+
five.on("models.tileLoad", ({ tile }) => {
|
|
89
89
|
console.log(`Tile loaded: ${tile.debugLabel}, Size: ${tile.content.byteLength}`);
|
|
90
90
|
});
|
|
91
91
|
|
|
92
|
-
five.on("
|
|
92
|
+
five.on("models.tileUnload", ({ tile }) => {
|
|
93
93
|
console.log(`Tile unloaded: ${tile.debugLabel}`);
|
|
94
94
|
});
|
|
95
95
|
```
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Mode (模式)
|
|
2
2
|
|
|
3
|
-
- **Summary**: Five
|
|
4
|
-
- **Schema**: 字符串枚举类型,定义了
|
|
5
|
-
- **Concepts**: Panorama, Mapview, Floorplan, Topview, Model
|
|
3
|
+
- **Summary**: Five 支持全景漫游、模型浏览等五种交互模式,适用于不同的看房场景。
|
|
4
|
+
- **Schema**: 字符串枚举类型,定义了 5 种交互模式。
|
|
5
|
+
- **Concepts**: Panorama, Mapview, Floorplan, Topview, Model。
|
|
6
6
|
- **Examples**: 模式切换与事件监听。
|
|
7
7
|
|
|
8
8
|
## Schema
|
|
@@ -18,8 +18,6 @@ type Mode =
|
|
|
18
18
|
| "Floorplan" // 模型户型图模式
|
|
19
19
|
| "Topview" // 模型平面图模式
|
|
20
20
|
| "Model" // 模型游走模式
|
|
21
|
-
| "VRPanorama" // Cardboard VR 眼镜模式
|
|
22
|
-
| "XRPanorama" // WebXR 虚拟现实 VR 眼镜模式
|
|
23
21
|
```
|
|
24
22
|
|
|
25
23
|
## Concepts
|
|
@@ -34,8 +32,6 @@ type Mode =
|
|
|
34
32
|
* 交互:鼠标拖拽 / Pan手势平移相机;滚轮 / Pinch手势缩放画面;点击 / Tap切换到最近全景点。
|
|
35
33
|
* **Model (模型漫游)**: 适用于第一人称在场景中自由游览。交互同 Panorama,但不限制相机只能在观察点位置。
|
|
36
34
|
* 交互:鼠标拖拽 / Pan手势旋转视角;滚轮 / Pinch手势缩放视场角;点击 / Tap移动到指定位置。
|
|
37
|
-
* **VRPanorama / XRPanorama**: 适配 VR 设备(如 Google Cardboard, Apple Vision Pro 等)的沉浸式模式。
|
|
38
|
-
* 交互:配合设备手柄或头部追踪,基本交互逻辑同 Panorama。
|
|
39
35
|
|
|
40
36
|
## Configuration
|
|
41
37
|
|
|
@@ -135,22 +131,6 @@ interface ModelConfig {
|
|
|
135
131
|
}
|
|
136
132
|
```
|
|
137
133
|
|
|
138
|
-
### VRPanorama / XRPanorama (VR 模式)
|
|
139
|
-
|
|
140
|
-
继承自 Panorama 配置,但移除了俯仰角限制(`maxLatitude`, `minLatitude`),因为 VR 模式下视角由设备姿态控制。
|
|
141
|
-
|
|
142
|
-
```typescript
|
|
143
|
-
interface VRPanoramaConfig {
|
|
144
|
-
// ... 同 Panorama 基础配置
|
|
145
|
-
// 移除: maxLatitude, minLatitude
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
interface XRPanoramaConfig {
|
|
149
|
-
// ... 同 Panorama 基础配置
|
|
150
|
-
// 移除: maxLatitude, minLatitude
|
|
151
|
-
}
|
|
152
|
-
```
|
|
153
|
-
|
|
154
134
|
## Examples
|
|
155
135
|
|
|
156
136
|
### 快速上手 (Quick Example)
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
# UltraHDR /
|
|
1
|
+
# UltraHDR / gainmap 渲染
|
|
2
2
|
|
|
3
|
-
本篇说明 five-webgpu 如何用 UltraHDR(
|
|
3
|
+
本篇说明 five-webgpu 如何用 UltraHDR(gainmap)方案还原全景图的高动态范围,重点是**最终 RGB 是如何算出来的**。
|
|
4
4
|
|
|
5
5
|
## 基本原理
|
|
6
6
|
|
|
7
7
|
UltraHDR 不直接存 HDR 像素,而是拆成两部分:
|
|
8
8
|
|
|
9
9
|
- **SDR 底图(base / color)**:普通的 8bit 全景图,直接可显示。
|
|
10
|
-
- **
|
|
10
|
+
- **gainmap(增益图)**:每个像素存一个 `[0,1]` 的增益值,表示该像素相对 SDR 需要放大多少亮度。
|
|
11
11
|
|
|
12
12
|
渲染时的公式是:
|
|
13
13
|
|
|
@@ -15,11 +15,11 @@ UltraHDR 不直接存 HDR 像素,而是拆成两部分:
|
|
|
15
15
|
finalRGB = sdrRGB * boost(gain)
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
`boost` 是由
|
|
18
|
+
`boost` 是由 gainmap 值加上一组元数据(HDR config)算出的每通道增益系数。当没有 HDR(增益全为 1 / 未启用)时 `boost = 1`,退化为普通 SDR。
|
|
19
19
|
|
|
20
20
|
## 相关数据结构
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
gainmap 元数据来自每个点位的 `observer.images.gainmap?.cfg`(`GainmapCfgData`):该点位无 HDR 数据时 `images.gainmap` 字段不存在。
|
|
23
23
|
|
|
24
24
|
| 字段 | 含义 |
|
|
25
25
|
| --- | --- |
|
|
@@ -27,9 +27,9 @@ GainMap 元数据来自每个点位的 `hdrConfig`(`HDRCfgData`):
|
|
|
27
27
|
| `minContentBoost` | 内容侧最小亮度增益(gain=0 时对应,通常为 1) |
|
|
28
28
|
| `hdrCapacityMin` | 显示器 HDR 容量下限(通常为 1) |
|
|
29
29
|
| `hdrCapacityMax` | 显示器 HDR 容量上限 |
|
|
30
|
-
| `gamma` |
|
|
31
|
-
| `offsetSdr` | SDR
|
|
32
|
-
| `offsetHdr` | HDR
|
|
30
|
+
| `gamma` | gainmap 的编码 gamma(解码用 `1/gamma`) |
|
|
31
|
+
| `offsetSdr` | SDR 偏移,缺省 `1/64`(UltraHDR 规范默认值) |
|
|
32
|
+
| `offsetHdr` | HDR 偏移,缺省 `1/64`(UltraHDR 规范默认值) |
|
|
33
33
|
|
|
34
34
|
另外还有一个运行时可调参数:
|
|
35
35
|
|
|
@@ -37,7 +37,7 @@ GainMap 元数据来自每个点位的 `hdrConfig`(`HDRCfgData`):
|
|
|
37
37
|
|
|
38
38
|
## 最终 RGB 的计算步骤
|
|
39
39
|
|
|
40
|
-
对应实现见 `
|
|
40
|
+
对应实现见 `lib/five/model/materials/tsl/utils.ts#hdrBoost` / `#hdrOffset`(以及瓦片路径下等价的 `lib/five/core/tiling.ts#computeHDRBoostNode`)。
|
|
41
41
|
|
|
42
42
|
### 1. 计算显示权重 weight
|
|
43
43
|
|
|
@@ -55,11 +55,11 @@ weight = clamp(
|
|
|
55
55
|
- `weight = 1`:显示器能力达到内容上限 → 全量增益。
|
|
56
56
|
- 中间值:按比例插值。
|
|
57
57
|
|
|
58
|
-
>
|
|
58
|
+
> 两条路径都对分母做了保护:`max(denom, 1e-6)` 并乘以 `step(1e-6, denom)`,避免非 HDR(capacity 全为 1)时除零产生 NaN(此时权重取 0,退化为 SDR)。
|
|
59
59
|
|
|
60
|
-
### 2.
|
|
60
|
+
### 2. gainmap 解码(gamma)
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
gainmap 采样值经 gamma 还原为线性增益量(每通道独立),解码使用 gamma 的倒数:
|
|
63
63
|
|
|
64
64
|
```
|
|
65
65
|
gainLinear = pow(gainRGB, 1/gamma) // 对 r/g/b 分别做 pow,与 Adobe 规范一致
|
|
@@ -84,7 +84,7 @@ boost = exp2(logGain * weight) // 每通道
|
|
|
84
84
|
|
|
85
85
|
### 5. 得到最终颜色
|
|
86
86
|
|
|
87
|
-
应用
|
|
87
|
+
应用 gainmap 偏移得到最终 HDR 颜色(`offset` 为 0 时退化为 `sdr * boost`):
|
|
88
88
|
|
|
89
89
|
```
|
|
90
90
|
finalRGB = (sdrRGB + offsetSdr) * boost - offsetHdr
|
|
@@ -121,22 +121,22 @@ finalRGB = (sdrRGB + offsetSdr) * boost - offsetHdr
|
|
|
121
121
|
|
|
122
122
|
解码端 `applyGain`(带 displayBoost 的重载)核心逻辑:
|
|
123
123
|
|
|
124
|
-
```
|
|
124
|
+
```
|
|
125
125
|
logBoost = log2(minContentBoost) * (1 - gain) + log2(maxContentBoost) * gain;
|
|
126
126
|
gainFactor = exp2(logBoost * displayBoost / maxContentBoost);
|
|
127
127
|
finalRGB = sdr * gainFactor;
|
|
128
128
|
```
|
|
129
129
|
|
|
130
130
|
说明:
|
|
131
|
-
- `gain` 是
|
|
131
|
+
- `gain` 是 gainmap 采样值(`[0,1]`)。该库固定 `gamma = 1.0`、`offsetSdr = offsetHdr = 0`、`hdrCapacityMin = 1`、`hdrCapacityMax = maxContentBoost`,所以权重简化成 `displayBoost / maxContentBoost`。
|
|
132
132
|
- 元数据里的 `minContentBoost` / `maxContentBoost` 是**线性倍数**(非 log),在着色器里才取 `log2`。
|
|
133
133
|
- 来源:[ittiam-systems/libultrahdr](https://github.com/ittiam-systems/libultrahdr) / [AOSP libultrahdr](https://android.googlesource.com/platform/external/libultrahdr)。内容为改写。
|
|
134
134
|
|
|
135
|
-
### 2) MONOGRID `gainmap-js` v3.4.0(Adobe
|
|
135
|
+
### 2) MONOGRID `gainmap-js` v3.4.0(Adobe gainmap 规范的 three.js 移植)
|
|
136
136
|
|
|
137
137
|
解码 fragment shader 原式(等价重排):
|
|
138
138
|
|
|
139
|
-
```
|
|
139
|
+
```
|
|
140
140
|
logRecovery = pow(recovery, gamma); // gamma uniform = 1.0 / metadataGamma
|
|
141
141
|
logBoost = gainMapMin * (1 - logRecovery) + gainMapMax * logRecovery;
|
|
142
142
|
hdrColor = (sdr + offsetSdr) * exp2(logBoost * weightFactor) - offsetHdr;
|
|
@@ -161,17 +161,24 @@ weightFactor = clamp(
|
|
|
161
161
|
1. **元数据空间约定(最关键,仍需确认)**
|
|
162
162
|
- 本项目对 `minContentBoost / maxContentBoost / hdrCapacityMin / hdrCapacityMax` 在 shader 内部统一取 `log2`,说明这些字段在数据里是**线性倍数**(如 `maxContentBoost = 100`、`hdrCapacityMax = 1000`)。这与 **libultrahdr 约定一致**。
|
|
163
163
|
- 但 **Adobe / gainmap-js 约定相反**:这些字段在元数据里就已经是 **log2 空间**。
|
|
164
|
-
- 风险:如果
|
|
164
|
+
- 风险:如果 gainmap 资源是按 Adobe/UltraHDR 标准(XMP `hdrgm`)导出的,那里的 `HDRCapacityMin/Max`、`GainMapMin/Max` 已经是 log2 值,本项目再套一次 `log2` 就会**二次取对数**导致结果错误。务必确认打包侧写入的到底是线性倍数还是 log2 值。
|
|
165
165
|
|
|
166
|
-
2. **gamma 方向(✅
|
|
167
|
-
-
|
|
168
|
-
- `gamma = 1
|
|
169
|
-
-
|
|
166
|
+
2. **gamma 方向(✅ 已修复,pano 与瓦片两条路径一致)**
|
|
167
|
+
- 解码使用 `pow(gainRGB, 1/gamma)`(规范:`log_recovery = pow(recovery, 1.0 / map_gamma)`),与 Adobe / gainmap-js 规范一致;`gamma` 做了 `> 0` 保护,`gain` 先 clamp 到 `[0,1]`。
|
|
168
|
+
- `gamma = 1`(当前数据默认)时与旧行为相同,无回归;`gamma ≠ 1` 时结果才会正确。
|
|
169
|
+
- 注意:`PanoSourceNode` 已删除,公式现在在 `tsl/utils.ts#hdrBoost` 与 `tiling.ts#computeHDRBoostNode` 各有一份,改动需同步。
|
|
170
170
|
|
|
171
171
|
3. **offset 偏移(✅ 已支持)**
|
|
172
|
-
- 完整式:`hdr = (sdr + offsetSdr) * boost - offsetHdr`,由 `
|
|
173
|
-
- `offsetSdr` / `offsetHdr` 已加入 `
|
|
174
|
-
-
|
|
172
|
+
- 完整式:`hdr = (sdr + offsetSdr) * boost - offsetHdr`,由 `tsl/utils.ts#hdrOffset`(pano 路径)与 `tiling.ts#hdrOffsetNode`(瓦片路径)应用,不需要额外的 `applyHDROffset` 包装。
|
|
173
|
+
- `offsetSdr` / `offsetHdr` 已加入 `GainmapCfgData`(支持 `offset_sdr` / `offset_hdr` 下划线写法)、pano 材质 uniform(`pano0HdrOffsetSdr` 等)与瓦片 uniform,可从 `images.gainmap.cfg` 读取。
|
|
174
|
+
- **缺省值为 `1/64`**(见导出的 `DEFAULT_GAINMAP_CFG_DATA`,与 UltraHDR 规范默认一致):cfg 里没有该字段时按 `1/64` 解码。
|
|
175
|
+
- ⚠️ 编码/解码 offset 必须一致:若打包侧按 `offsetSdr = offsetHdr = 0` 生成 gain map,需在 cfg 里显式写 `0`(否则近黑会略有抬升);反之若按规范 `1/64` 编码,现在的默认值正好匹配。因此**建议打包侧始终在 cfg 中显式写入这两个字段**。
|
|
176
|
+
|
|
177
|
+
4. **gainmap 纹理的色彩空间(✅ 已改为 `NoColorSpace`)**
|
|
178
|
+
- 规范要求 gain map 直接使用 `encoded_recovery / 255`(其自带的色彩配置文件不生效)。
|
|
179
|
+
- 现在 pano 路径(`panorama` / `floorplan` / `mapview` 的 `loadCubeTexture`)与瓦片路径(`core/tiling.ts` 的 `loadTexture`)都显式传 `colorSpace: THREE.NoColorSpace`;SDR 底图仍为 `SRGBColorSpace`。
|
|
180
|
+
- three 的 GPU 纹理格式在**首次创建时**按 colorSpace 决定(WebGPU:sRGB → `rgba8unorm-srgb` 做硬件解码),之后只重传像素、不重建格式。因此瓦片纹理池改为按 `尺寸 + colorSpace` 分桶,避免色图与 gainmap 串用同一张池化纹理。
|
|
181
|
+
- 观感变化:gainmap 中间调不再被 sRGB 曲线压低(`maxDisplayBoost=4`、`maxContentBoost=100`、capacity `1..1000` 时,gain=0.5 的 boost 由约 1.22 → 1.59),亮部更亮;gain=0 与 gain=1 两端不变。若打包侧曾把 `recovery` 按 sRGB 预补偿写进 JPEG(非标准做法),需回退此项。
|
|
175
182
|
|
|
176
183
|
### weight 公式对比
|
|
177
184
|
|
|
@@ -191,14 +198,16 @@ weight = clamp( (log2(maxDisplayBoost) - hdrCapacityMin)
|
|
|
191
198
|
|
|
192
199
|
## 关键代码位置
|
|
193
200
|
|
|
194
|
-
- `lib/five/model/materials/
|
|
195
|
-
- `
|
|
196
|
-
- `
|
|
201
|
+
- `lib/five/model/materials/tsl/utils.ts`
|
|
202
|
+
- `hdrBoost(gainRGB, maxDisplayBoost, maxContentBoost, minContentBoost, capacityMin, capacityMax, gamma)`:增益系数计算(TSL 节点,含 gamma 解码与容量权重)。
|
|
203
|
+
- `hdrOffset(sdrRGB, boost, offsetSdr, offsetHdr)`:应用 offset 得到最终 HDR 颜色。
|
|
204
|
+
- `lib/five/model/materials/tsl/defines.ts`
|
|
205
|
+
- `pano0HdrColor` / `pano1HdrColor`:拼接 `hdrBoost` 与 `hdrOffset`,材质 uniform 由 `pbmMaterial.ts` 的 `pano0Hdr*` / `pano1Hdr*` 属性驱动。
|
|
197
206
|
- `lib/five/core/tiling.ts`
|
|
198
|
-
- `computeHDRBoostNode(gainRGB, uniforms)`:瓦片细化路径下的等价实现(带除零保护)。
|
|
199
|
-
- `TileMaterial.setupNode()`:`mix(sdr, sdr*boost, enabled)` 的烘焙逻辑。
|
|
200
|
-
- `lib/five/utils/
|
|
207
|
+
- `computeHDRBoostNode(gainRGB, uniforms)` / `hdrOffsetNode(...)`:瓦片细化路径下的等价实现(带除零保护)。
|
|
208
|
+
- `TileMaterial.setupNode()` / `BoundingMaterial`:`mix(sdr, (sdr + offsetSdr) * boost - offsetHdr, enabled)` 的烘焙逻辑。
|
|
209
|
+
- `lib/five/utils/gainmap-data.ts`:`GainmapCfgData` 定义与 `parseGainmapCfgData` 解析(兼容 camelCase 与下划线 key)。
|
|
201
210
|
|
|
202
211
|
## 使用示例
|
|
203
212
|
|
|
204
|
-
参见 `examples/hdr/index.ts` 与 `examples/_tools/hdr-viewer/panes/hdr.ts`:到达点位后从 `observer.images.
|
|
213
|
+
参见 `examples/hdr/index.ts` 与 `examples/_tools/hdr-viewer/panes/hdr.ts`:到达点位后从 `observer.images.gainmap?.cfg` 拉取元数据(无 HDR 时该字段不存在),`maxDisplayBoost` 可实时调节以观察增益变化。
|
package/ai_guides/quick-start.md
CHANGED
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
通过 npm 或 yarn 安装:
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
npm install three@^0.
|
|
10
|
+
npm install three@^0.183.2 @realsee/five-webgpu
|
|
11
11
|
# or
|
|
12
|
-
yarn add three@^0.
|
|
12
|
+
yarn add three@^0.183.2 @realsee/five-webgpu
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
> **注意**: Five 依赖 `three`,请确保安装了兼容的版本。
|
|
@@ -134,7 +134,7 @@ gaussian_splatting 的模型同时也支持 rayscast 射线检测。同点云的
|
|
|
134
134
|
#### 加载进度
|
|
135
135
|
- 新增 tile.content.loadProgress 属性,用于查看每个瓦片的加载进度 (0-1)。
|
|
136
136
|
- 新增 tile.content.byteLength 属性,可在加载过程中获取瓦片内容的字节长度。
|
|
137
|
-
- 同时,
|
|
137
|
+
- 同时,models.tileLoad 和 models.tileUnload 事件被添加,用于监控瓦片的生命周期。
|
|
138
138
|
- 加载函数(loadGltf, loadPly 等)现在支持 onDownloadProgress 回调,用于监控文件下载进度。
|
|
139
139
|
|
|
140
140
|
#### 射线检测增强
|
|
@@ -199,7 +199,7 @@ UV 转换工具函数
|
|
|
199
199
|
1. 优化 mapview 下滚动缩放。避免滚落所发有时会退回的问题。
|
|
200
200
|
2. 优化 floorplan 从下向上看时的交互的屏幕上下滑动反人类下意识的问题。
|
|
201
201
|
3. 优化 camera.autoNearFar 的计算结果。优化对于小物品的 near 过远以及 出现 z-fighting 的问题。
|
|
202
|
-
4. 添加了 gesture.
|
|
202
|
+
4. 添加了 gesture.fire 事件,发生在任意事件被触发。
|
|
203
203
|
5. gestureEvent.center gestureEvent.pointers 中加入了 buttons button shiftKey ctrlKey metaKey altKey 字段。
|
|
204
204
|
|
|
205
205
|
## 内部机制改动
|
package/ai_guides/support.md
CHANGED
|
@@ -14,10 +14,6 @@ Five 需要浏览器支持 **WebGL 1.0** (推荐 WebGL 2.0 以获得更好性能
|
|
|
14
14
|
| **Edge** | >= 13 | |
|
|
15
15
|
| **Android Webview** | >= 93 (Chrome内核) | |
|
|
16
16
|
|
|
17
|
-
## WebXR Support
|
|
18
|
-
|
|
19
|
-
如果需要使用 VR 模式 (XRPanorama),需要浏览器支持 [WebXR Device API](https://developer.mozilla.org/en-US/docs/Web/API/WebXR_Device_API)。
|
|
20
|
-
|
|
21
17
|
## Related
|
|
22
18
|
|
|
23
19
|
* [Quick Start](./quick-start.md)
|
package/docs/assets/hierarchy.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
window.hierarchyData = "
|
|
1
|
+
window.hierarchyData = "eJytWttu2zgQ/Rc9s10Ob6L81qTNIkDaBE23u0CRB8VmbTayFEhymqDIvy8oNTYpy/FQuy82bM/hOTOcGV7kX0ldVW2TzL4BFYporgmIDAgoKglPJSNCcQIyFYQD1UQxEEQxKYlKs4xwEIqAFBkRWhLJqCKKCyCKZ+KGJLX5Xph5a6uySWa/EqapeyvztUlmySfT/qzqu+vNbTOv7a1JSHJny0UyA6ZJsqmLZJbMi7xpTPOHLRfm8e0Q8XbVrouE9FbJLGmbxRs3xJv+i2eSCKY8xnc/8sfL+17OCxmT6oXMlq2pv+fzLZ9nf5BqC+roFN93MIYxhCBISTJf2WJRmzKZfRNM3TgVWnoqIuKLDWxAyjQloEAQLiQ4es21R39SbcqFLZdfq2KzNqgghJDYIGRUkUwyApR2cjKqAjmPkxQ9Roty1JJ51J/N0lblBPYxIE6Ai4GfCvcrU5sJCsaAWAUiCH/emA8PpmxxYX+xjs0BoJkiACAJABMEgHMCICgBkO5FZQQgdS/a2WWCAKOcAGPUveibTnkwe3+apt3UEeJ9ADZWmR+rc/dbY+YtnjOEIFmB+u3iY7Uwp6u8XEa4OsBgeWHIW3yxRSTtDoJlZWLIGskYxcb5kO16bspYJ3cYLK8YWWk/m6ba1PMI8jEgVoH0FVze/ohKZM8ezZd6fFd5WeHZttZYLpUNuL6Yx7juMARhmdMsWFHKhanxpJ49lk/7Hem6zdsIH3fm8f3bLeBAXf+WadeNIfPr9u+qvmvwSnbmSL8Z9ev2n8/R3T+EYFkZDVivTdPYqoxh9SFoVh2wnlZlW1dFEZNZeygstxrbK340zer4btW3Pn4SAKZhULSntp4XBkcW2iPouBAH6a6rwi5iOTsQglgEy3k4xummaat1LHOPwlCnbGz/EkQYtX15NcZhBonMn9bzdb40MQcuHxDdpSQVXW+S1J/r3209RkUIQXouRbAKVQ1uL+8M4z2VsvdUyuF6gF8KsH6lhyvn3NOHW2RHsNHeMw3E1RVxVd3FQQVFFuRtnMRxaLRCkbJeF/ixO7MPiFO/szpe3JxCOtzK7np+3yLOS9u+q5e4nH91BFyqcMqHva7O1/l/knVsEKQyoHpE2YW9M/+LutcGik0eN7PEhfKmEx6c169OPiLXx94w5uLILf4dpZAQUv51v8hbk98WiOwNzGPoueQZ4aq/s3IfQg0u0me2aE2N0rAzR5SSGjrcT+CnaoFzeGeOIEuDa4xzN1F5a2qbF7gG5QGiMyvjlAhQjAhKNRFUS9J/t/3Y/8oEJ4JzIEKAJkLSPhczTvdz8SRv7HzPhWOJGaAQ98Y0rN9+kKtVVS6jqQMUhjq4vt0O8tTYeV5MYA+BCAGg2IiAvKwuy+IpXsAAiLm0F/zAvLucnzb3PhIhgXM4MP+TJOwhERIEjKZgP50TVeyDEUIkHUvI39M6TcgI+LgQ93jJ32fbwvD3xzl7u5ilQQrWbafcu0f41ZqfF/mTtyK81ji31rgdgwIaVF1e52vTmvprXmywu10fEturFchuNXbvwRVTUxUPZjFBzzgUGQ0GYiwaL8kyISoBND46tMsI9+RzTJfLsca0E2T5yMmquPC7lbvtOt3cmu5si74f2yKiVXBJiRK8Tx8e3Pu6geNkYCV0XHt3gpe3jakfkBXqA6KdVmnvrwiedroh3Yyi+Z0x0luVDpleKmzP64O9cAx1vPGqNJWDY+VV3zQRR0tnGdN8lQZJlJZAVJZqklKlSQr9jtD95yAovwZ7bHpFw6EZTtOeUwfPqd4t8vvWPpiLzdqWeTlHRmIUhoi8Do4KH57M+2ptLuxy1dpyiaMeAWGIg9o6K6qftlx2Y7D3yMnfwyBosyDJ/SH4BFqOoR1kX9bd8Li085/+5pumsXl5UmxqnIwh4rjvafgg9rcfZ7Y27hlcE+n/AHeM/vn5X6pE5Qk="
|
|
@@ -1 +1 @@
|
|
|
1
|
-
window.navigationData = "
|
|
1
|
+
window.navigationData = "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"
|