@realsee/five
Version:
Realsee Renderer SDK
223 lines (180 loc) • 10.3 kB
Markdown
Release Note 6.8.x
6.8.x 版本发布日志
```shell
npm install @realsee/five@6.8
```
# Gaussian Splatting (3DGS) 支持
Five 现已支持 Gaussian Splatting (3DGS) 渲染管线。这是一种基于点的渲染技术,能够提供高质量的实时渲染效果。
仅在 WebGL2 环境下可用。
## 文件格式支持
1. `.splat` 文档及工具 [GitHub - antimatter15/splat: WebGL 3D Gaussian Splat Viewer](https://github.com/antimatter15/splat)
2. `.spz` 文档及工具 GitHub - [nianticlabs/spz: File format for 3D Gaussian splats. About 10x smaller than the PLY equival](https://github.com/nianticlabs/spz)
3. `.glb` `.gltf` 对应的 KHR_gaussian_splatting, KHR_gaussian_splatting_compression_spz, KHR_gaussian_splatting_compression_spz_2 扩展。
## 支持 3d-tile
通过 3d-tile 标准,使用 glb 作为模型格式。
```json
{
"asset": {
"version": "1.0",
},
"geometricError": 265.4529731527354,
"root": {
"boundingVolume": {
"box": [
0.9499778747558594, 3.5037269592285156, 17.48550033569336,
97.01779174804688, 0.0, 0.0,
0.0, 88.27268981933594, 0.0,
0.0, 0.0, 20.292869567871094
]
},
"content": {
"uri": "splat.glb"
},
"geometricError": 66.36324328818385,
"refine": "ADD"
},
"transform": [
1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0
]
}
```
## 通过 Work 加载
```json
{
"work_code": "",
"model": {
"layers": {
"tileset_url": "tileset.json",
"name": "poincare_3dgs",
"type": "gaussian_splatting"
}
}
}
```
## 配置球谐光照阶数 (SH Degree)
可以通过 `five.parameter.gaussianSplattingSHDegree` 设置球谐光照阶数,支持 0, 1, 2 阶,默认为 0 阶。
```
const five = new Five({
parameters: {
gaussianSplattingSHDegree: 1 // 设置为 1 阶 SH
}
});
```
## 模型的射线检测
gaussian_splatting 的模型同时也支持 rayscast 射线检测。同点云的处理保持一致。但是因为 gaussian_splatting 的射线交点对应的法线方向是一个估算值,精度并不高。请酌情使用。
# glTF 模型支持增强
新增了对更多 glTF 扩展的支持,提升了模型的表现力和动画能力。
## 扩展新增及优化
### KHR_animation_pointer
KHR_animation_pointer 允许动画通道指向 glTF 资产中任何对象的任何属性。
默认的 animtion 只能修改 node 的 transform 实现节点的平移、旋转和缩放
这个能力可以实现材质动画。比如:
- 通过 uv transform 实现 texture 的移动,变化贴图位置。
- 通过修改 material 上的材质属性,可以动态修改金属粗糙,透明度,自发光程度。
- 通过修改 node 的 KHR_node_visibility 的扩展值,显隐某个节点。
- 等等
### KHR_node_visibility
允许设置节点的可见性属性。
用于 配合 KHR_animation_pointer 实现显隐效果。
### KHR_materials_clearcoat
用于在材质上添加一层透明涂层,模拟车漆、碳纤维、清漆木材等真实世界中的表面效果。
这个能力可以实现材质动画。比如
- 漆面等光滑的表面
- 塑料薄膜
- 等等
### KHR_materials_transmission
物理透光材质扩展,用于实现光线真正穿过物体的透明 / 半透明效果。
这个能力可以实现材质动画。比如
- 玻璃等即透光也反射的表面
- 等等
### KHR_materials_emissive_strength
调整自发光强度
### KHR_materials_unlit
不感光材质
正确解析 KHR_materials_unlit。是否感光作用到对应的 material 上,而不是 gltf 中的所有元素。
## 动画优化
- 处理额外动画骨骼未绑定导致的错误,出现的抖动。
- 修复 glTF 骨骼 weight 为整型时,导致 boneTransform 计算出错进而引发射线检测错误的问题。gltf parser 在加载非 float 数据时,现已自动转换为 float 使用。
# 模型 ViewLayer 加载策略优化
优化了 ViewLayer 的加载和显隐逻辑,以减少内存占用并提高性能。
### 默认加载策略变更
默认情况下,Five 不再加载所有图层,而是根据优先级仅加载一个图层。
优先级顺序:mesh > point_cloud > gaussian_splatting > 其他类型。
### 显隐与内存管理
- 显示: 当 viewLayer.visible = true 时,开始加载资源。
- 隐藏: 当 viewLayer.visible = false 时,释放该图层占用的所有内存资源。
### 加载进度
- 新增 tile.content.loadProgress 属性,用于查看每个瓦片的加载进度 (0-1)。
- 新增 tile.content.byteLength 属性,可在加载过程中获取瓦片内容的字节长度。
- 同时,model.tileLoad 和 model.tileUnload 事件被添加,用于监控瓦片的生命周期。
- 加载函数(loadGltf, loadPly 等)现在支持 onDownloadProgress 回调,用于监控文件下载进度。
### 射线检测增强
- 射线交点 Intersection 对象新增了 tile, model, viewLayer 字段,便于在射线检测时获取更详细的上下文信息。
- raycaster.hitFilter 回调函数的参数类型定义已更新,包含 model, viewLayer, tile 等上下文信息。
# Work 结构改变
## Observer 支持 uv 计算工具函数
为 WorkObserver 提供了更多实用的工具函数,便于进行坐标和 UV 转换。
UV 转换工具函数
- observer.vectorToEquirectangularUv: 将方向向量转化为全景图 uv。
- observer.equirectangularUvToVector: 将全景图 uv 转化为方向向量。
- observer.vectorToCubemapUv: 将方向向量转化为立方体贴图 uv。
- observer.cubemapUvToVector: 将立方体贴图 uv 转化为方向向量。
## five.panoId
新增 `five.panoId` 属性,使其与 `work.observer` 保持一致。
## derived_id 类型变更
derived_id 的类型从 `number` 改为 `number | string`。
# 全景图滤镜
新增了全景图滤镜功能,支持实时调整全景图的亮度、对比度、饱和度、色温和色调等参数。
通过 `five.modelScene.parameter.set('panoFilter', filter)` 绑定。
支持的参数如下:
- color: 颜色调整,包含色温 (Temperature) 和色调 (Tint)。
- highlightShadow: 高光和阴影的独立调节。包括高光 (Highlight) 和阴影 (Shadow) 全局(Global)。
- contrast: 对比度调整。
- saturation: 饱和度调整。
# 新增后处理效果 (Post-Processing Passes)
新增了三个可选的内置后处理 Pass,用于增强视觉效果。
- FlowingLight2DPass: 2D 流光效果,通常用于在屏幕空间绘制流动的光线(如道路流光)。
- FlowingLight3DPass: 3D 流光效果,基于深度缓冲区在三维模型表面绘制流光。
- GaussianBlurPass: 高斯模糊效果,可用于实现毛玻璃等视觉特效。
# 工具优化
## Work Viewer
https://vradmin.lianjia.com/project/
- 支持 debug -> stateSync。可以打开两个页面,均开启 stateSync。两边同步相机状态。
- 支持 work.json 拖拽加载加载。
## Model Viewer
https://vradmin.lianjia.com/poincare/
- 支持 debug -> stateSync。可以打开两个页面,均开启 stateSync。两边同步相机状态。
- 支持 模型文件拖拽加载加载。
## glTF Viewer
https://vradmin.lianjia.com/gltf/
- 支持 debug -> stateSync。可以打开两个页面,均开启 stateSync。两边同步相机状态。
- 支持 模型文件拖拽加载加载。
- 支持 额外绑定动画文件(仅读取 gltf 的 animations 的部分,并绑定到当前的模型上)。
- 支持 额外绑定动画的单独播放和暂停。
# 友好文档
全面重构了文档结构,使其更适合 AI 辅助编程工具 (如 Cursor, Copilot) 阅读和索引。
- 文档目录迁移至 ai_guides/,并在 package.json 中新增 ai 字段指向该目录。
- 文档内容包含源码链接 (source 字段),直接指向对应的 .ts 定义文件。
- 提供了更清晰的 API 定义和概念说明,例如新增了 ViewLayer 的详细文档。
- TypeScript 支持: 优化了 .d.ts 打包方式,声明文件现在与源码文件一一对应,提升了 IDE 的跳转体验。
# 其他
1. 优化 mapview 下滚动缩放。避免滚落所发有时会退回的问题。
2. 优化 floorplan 从下向上看时的交互的屏幕上下滑动反人类下意识的问题。
3. 优化 camera.autoNearFar 的计算结果。优化对于小物品的 near 过远以及 出现 z-fighting 的问题。
4. 添加了 gesture.fire 事件,发生在任意事件被触发。
5. gestureEvent.center gestureEvent.pointers 中加入了 buttons button shiftKey ctrlKey metaKey altKey 字段。
6. 修复 gesture.momentum 前没有触发 gesture.create 的问题。
7. 修复 gesture.pan 中 preventDefault 无法阻止触发 gesture.momentum 的问题。
8. 修复 gesture.pan 中第一次并没有 event.isFirst = true 的问题。
9. 添加自定义着色器 mainPanoColor 插入点,可以修改 pano0Color、pano1Color。
10. 新增 `parameter.resolveValue('xxx')` 快速获取单个参数的最终值,无需创建完整的 `ResolvedParameterValue` 对象。
11. 新增 `pano.prepare` 事件(ExtendableEvent),支持通过 `waitUntil(promise)` 在点位切换前插入异步操作。`PanoEvent` 和 `PanoPrepareEvent` 新增 `pano` 字段,包含目标点位信息。
12. `PanoPrepareEvent` 新增 `options`(`MovePanoOptions`)和 `prevMode`(`Mode`)字段。`options` 可在回调中直接修改(如修改 `effect`、`duration`、`longitude`、`latitude`、`fov` 等),修改后的值将影响实际的点位切换行为。
# 内部机制改动
1. glTF 加载 mesh / points 都将直接使用 PBM 材质,而不是作为 PBM_Mesh 扩展形式去替换覆盖使用three内置材质的方式。
2. 应用 animation pointer 以及 动画优化的原因。目前会重写 hack THREE.PropertyBinding.findNode。
3. 打包不再合并 .d.ts 文件。便于文档可以更便于找到对应的类型声明。
4. Parameter 性能优化:新增 `resolveValueTo` 支持对象复用以减少 GC,版本标识改用整数哈希(`versionNumber: number`)替代字符串拼接。