Cesium中体渲染,去除Volume中的马赛克
产生马赛克的原因是所有数据都是真实数据,未对采样结果进行插值处理,上一篇文中采用的是Nearest
,所有采样结果都是基于真实数据的,即在不同位置处进行采样时,会查找相邻的最近体素的数据,用来当作当前位置的体素,所有采样结果会出现马赛克效果。
对于需要平滑处理的朋友,可以修改3D纹理中可选项中的缩放采样方法:
sampler: new Cesium.Sampler({
minificationFilter: Cesium.TextureMinificationFilter.LINEAR,
magnificationFilter: Cesium.TextureMagnificationFilter.LINEAR,
})
修改为LINEAR
即采用线性插值方法,而不是最近的体素值,结果即可比较平滑。
以下列一下Cesium内置的采样方法,mipmap对应的方法不做介绍,这个系列的体渲染文章中未考虑体数据做分级处理:
- LINEAR: 双线性插值,通过最近的四个体素取平均,产生结果较为平滑
- NEAREST: 返回最近的体素
其他插值方法
有兴趣的朋友可以做个算子,自己实现特定的插值方法,比如三线性插值,可以产生更平滑的结果。