Cesium中是该如何正确打开PostProcessStageLibrary 库(1)

Cesium.js 的 PostProcessStageLibrary 是一个用于创建和应用后期处理效果的库。

以下是我整理记录的相关资料,帮助自己更好地接收了解 Cesium 中的后期处理(Post Processing)。

介绍

PostProcessStageLibrary 库提供了一组预定义的后期处理效果,开发者可以使用这些效果来轻松地增强或修改 Cesium.js 应用程序中的渲染效果,并创造出更加逼真和引人注目的视觉感观。

如上图所示,包含:

  • Bloom(泛光)
  • FXAA(快速近似抗锯齿)
  • Ambient Occlusion(环境遮蔽)
  • Depth of Field(景深)
  • Brightness (明亮度)
  • HDR(高动态范围)
  • Tone Mapping(色调映射)
  • ...

一般的后期处理效果(如:景深、明亮度),有提供相应的PostProcessStageLibrary处理函数,但是某些后期处理效果(如:Bloom、FXAA、Ambient Occlusion),却是内置在viewer.scene.postProcessStages(初次执行的阶段渲染到的输出纹理),不需要添加额外的PostProcessStage或PostProcessStageComposite。

FXAA(快速近似抗锯齿)

Cesium 场景默认不开启(enabled 为 false)

说明

fxaa 效果的后期处理效果,添加抗锯齿效果。 启用后,此阶段将在所有其他阶段之后执行。

设置

  1. 获取场景 fxaa 后期处理阶段:
tsx 复制代码
this.fxaa = this.viewer.scene.postProcessStages.fxaa;
  1. 通过 GUI 可视化控件,修改 fxaa 属性值,来查看 fxaa 变化:
ts 复制代码
let fxaa_folder = gui.addFolder("Fxaa");
fxaa_folder.add({ show: true }, "show").onChange((v: boolean) => {
  viewer.scene.postProcessStages.fxaa.enabled = v;
});

Bloom(泛光)

Cesium 场景默认不开启(enabled 为 false)

说明

bloom 效果的后期处理效果,添加发光效果,使明亮区域更亮,使黑暗区域更暗。 启用后,此阶段将在所有其他阶段之前执行。

uniforms

参数 类型 描述
glowOnly boolean (默认值为 false) 当 true 时,将仅显示发光效果。 当 false 时,发光将被添加到输入纹理中。
contrast number 对比度,-255.0, 255.0 范围内的标量值(默认值为 128.0)
brightness number 明亮度( -0.3)
delta number 计算高斯滤波器的权重(默认值为 1.0)
sigma number 计算高斯滤波器的权重(默认值为 2.0 )
stepSize number 到下一个纹素的距离(默认值为 1.0 )

设置

  1. 获取场景 bloom 后期处理阶段:
tsx 复制代码
this.bloom = this.viewer.scene.postProcessStages.bloom;
  1. 通过 GUI 可视化控件,修改 Bloom 属性值,来查看 Bloom 变化:
ts 复制代码
const reviseGui = (
  bloom: Cesium.PostProcessStageComposite,
  guiParams: BloomParamsInterface,
) => {
  bloom.enabled = Boolean(guiParams.show);
  bloom.uniforms.glowOnly = Boolean(guiParams.glowOnly);
  bloom.uniforms.contrast = Number(guiParams.contrast);
  bloom.uniforms.brightness = Number(guiParams.brightness);
  bloom.uniforms.delta = Number(guiParams.delta);
  bloom.uniforms.sigma = Number(guiParams.sigma);
  bloom.uniforms.stepSize = Number(guiParams.stepSize);
};

Ambient Occlusion(环境遮蔽)

Cesium 场景默认不开启(enabled 为 false)

说明

ambientOcclusion 效果的后期处理效果,设置场景环境光遮蔽。 环境光遮蔽模拟来自环境光的阴影。当表面接收光线时,无论光线的位置如何,这些阴影将始终存在。 启用后,此阶段将在所有其他阶段之前执行。

uniforms

参数 类型 描述
intensity number 用于以指数方式使阴影变亮或变暗。值越高,阴影越暗。(默认值为 3.0)
bias number 如果样本法线与相机矢量之间的点积小于此值,则采样将停止在当前方向上。(默认值为 0.1)
lengthCap number 如果从当前样本到第一个样本的距离大于此值,则取样将停止在当前方向上。(默认值为 0.26)
stepSize number 指示在当前方向上到下一个纹素样本的距离。(默认值为 1.95)
frustumLength number 如果当前片段与相机的距离大于此值,则不会计算该片段的环境光遮蔽。(默认值为 1000.0)
ambientOcclusionOnly boolean 这是一个有用的调试选项,用于查看更改统一值的效果。(默认值为 false) 当 true 时,只有生成的阴影被写入输出。 当 false 时,输入纹理使用环境光遮蔽进行调制。
delta number 计算高斯滤波器的权重(默认值为 1.0)
sigma number 计算高斯滤波器的权重(默认值为 2.0 )
stepSize number 到下一个纹素的距离(默认值为 1.0 )

设置

  1. 获取场景 AmbientOcclusion 后期处理阶段:
tsx 复制代码
this.ambientOcclusion = this.viewer.scene.postProcessStages.ambientOcclusion;
  1. 通过 GUI 可视化控件,修改 AmbientOcclusion 属性值,来查看 AmbientOcclusion 变化:
ts 复制代码
const reviseGui = (
  ambientOcclusion: Cesium.PostProcessStageComposite,
  guiParams: AmbientOcclusionParamsInterface,
) => {
  ambientOcclusion.enabled = Boolean(guiParams.show);
  ambientOcclusion.uniforms.ambientOcclusionOnly = Boolean(
    guiParams.ambientOcclusionOnly,
  );
  ambientOcclusion.uniforms.bias = Number(guiParams.bias);
  ambientOcclusion.uniforms.blurStepSize = Number(guiParams.blurStepSize);
  ambientOcclusion.uniforms.delta = Number(guiParams.delta);
  ambientOcclusion.uniforms.frustumLength = Number(guiParams.frustumLength);
  ambientOcclusion.uniforms.intensity = Number(guiParams.intensity);
  ambientOcclusion.uniforms.lengthCap = Number(guiParams.lengthCap);
  ambientOcclusion.uniforms.sigma = Number(guiParams.sigma);
  ambientOcclusion.uniforms.stepSize = Number(guiParams.stepSize);
};

相关资料

相关推荐
子兮曰4 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰4 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万4 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝4 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋4 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁4 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
李少兄4 天前
JavaScript 隐式全局变量解析
javascript
汉堡大王95274 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大4 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师4 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端