Cesium 后处理(Post Process)
原文地址:https://blog.csdn.net/ls870061011/article/details/123910821
作者:GIS李胜
为实现三维模型的更炫、更酷、更美观,Cesium在1.46的版本中新增了场景的后期处理(Post Processing)功能,包括模型描边、黑白图、明亮度调整、夜市效果、环境光遮蔽,也包括雷达扫描、原型扩散等一些特效。今天我们来学习一下场景后期处理的基础知识和实现流程。
一、场景后期处理效果
Cesium为我们提供了一些默认的示例效果,但基本上可分为如下三类:
包括ambientOcclusion环境光遮挡、bloom发光效果、fxaa近似抗锯齿,我们挑选前两个为例进行说明。
1、环境光遮罩:
没有开启AO效果如下图一,开启AO效果如下图二,单纯的AO图如下图三
https://sandcastle.cesium.com/?src=Ambient%20Occlusion.html&label=Post%20Processing

2、发光bloom
https://sandcastle.cesium.com/?src=Bloom.html&label=Post%20Processing

3、抗锯齿 FXAA/MXAA
cesium demo https://sandcastle.cesium.com/?src=MSAA.html&label=Post%20Processing
FXAA + MSAA 4X 能起到非常不错的抗锯齿效果。

二、场景后期处理流程
场景的后期处理这个词比较陌生,但说起照片的PS大家都很熟悉,这两个过程非常类似。日常生活中我们拍摄完照片之后,发现太亮或太暗,又或者是皮肤不够白、脸上痘痘明显,我们可以调整亮度、修复一下嫩白的脸蛋,经过几波操作之后,得到了一张我们非常满意的照片。
我们可以把照片的修复过程简单理解成场景的后期处理过程,修图的过程就比喻成对三维场景中初始渲染的效果进行再处理,比如添加物体描边、明暗度调整、夜市效果等,最终把综合之后的效果在场景中渲染出来。Cesium中的场景后期处理的大概流程如下图所示:
下面结合Cesium本身的PostProcess类,详细的说明一下处理流程:
第一步:通过PostProcessStageLibrary创建一个或者多个后处理效果对象,得到多个PostProcessStage或PostProcessStageComposite;
第二步:将他们加入到PostProcessStageCollection对象中,并设置PostProcessStage或PostProcessStageComposite一些参数,如uniforms;
第三步:PostProcessStageCollection对象就会按照加入的顺序进行屏幕后期处理,在所有的效果都处理完毕后,最后绘制到屏幕上。
当然也可以省略第一步,直接利用PostProcessStageCollection实例化对象中已有的处理效果去实现,如ambientOcclusion、bloom、fxaa。
————————————————
三、场景后期处理相关类
上述提到了PostProcess类,基本上涉及到4个类文件,具体每个类的作用又是什么呢?我们来说明一下。
(1)PostProcessStage
对应于某个具体的后期处理效果,它的输入为场景渲染图或者上一个后期处理的结果图,输出结果是一张处理后的图片。
// Simple stage to change the colorvar
fs =
'uniform sampler2D colorTexture;\n' +
'varying vec2 v_textureCoordinates;\n' +
'uniform float scale;\n' +
'uniform vec3 offset;\n' +
'void main() {\n' +
' vec4 color = texture2D(colorTexture, v_textureCoordinates);\n' +
' gl_FragColor = vec4(color.rgb * scale + offset, 1.0);\n' +
'}\n';
scene.postProcessStages.add(new Cesium.PostProcessStage({
fragmentShader : fs,
uniforms : {
scale : 1.1,
offset : function() {
return new Cesium.Cartesian3(0.1, 0.2, 0.3);
}
}}));
(2)PostProcessStageComposite
一个集合对象,按顺序存储了不同的场景处理对象,存储类型为PostProcessStage或者PostProcessStageComposite的元素,并存储在stages属性中。
// Example 1: separable blur filter
// The input to blurXDirection is the texture rendered to by the scene or the output of the previous stage.
// The input to blurYDirection is the texture rendered to by blurXDirection.
scene.postProcessStages.add(new Cesium.PostProcessStageComposite({
stages : [blurXDirection, blurYDirection]}));
(3)PostProcessStageLibrary
负责创建具体的后期处理效果,提供了一些创建常用场景特效的方法,包括createBlackAndWhiteStage-黑色和白色渐变渲染、createBlurStage-高斯模、createBrightnessStage-纹理饱和、createDepthOfFieldStage-景深效果等,创建返回的结果是PostProcessStageComposite或者PostProcessStage类型。相对来说比较简单,直接调用即可。
var stages = viewer.scene.postProcessStages;
var silhouette = stages.add(
Cesium.PostProcessStageLibrary.createSilhouetteStage()
);
(4)PostProcessStageCollection
是一个集合类型的类,负责管理和维护放到集合中的PostProcessStage或PostProcessStageComposite类型对象,实例化对象可通过viewer.scene.postProcessStages直接获取,提供了一些常用的方法,如add、contains、destroy、remove等。
但需要注意的是,该集合中也设定了三个ambientOcclusion、bloom、fxaa效果,如果此类中的环境光遮挡-ambientOcclusion或发光效果-bloom被启用,它们将在所有其他阶段之前执行,优先级最高;如果近似抗锯齿-fxaa被启用,它将在所有其他阶段之后执行,优先级最低。
Cesium 后处理(Post Process)的更多相关文章
- Spring 实践 -IoC
Spring 实践 标签: Java与设计模式 Spring简介 Spring是分层的JavaSE/EE Full-Stack轻量级开源框架.以IoC(Inverse of Control 控制反转) ...
- cesium+ geoserverTerrainProvide+png展示3D高程图展示
一.发布png到geoserver的imagepyramid // translate png to tif epsg:4326 File png = new File(pngPathStr); Bu ...
- Cesium基础使用介绍
前言 最近折腾了一下三维地球,本文简单为大家介绍一款开源的三维地球软件--Cesium,以及如何快速上手Cesium.当然三维地球重要的肯定不是数据显示,这只是数据可视化的一小部分,重要的应该是背后的 ...
- Unity 后处理堆
Unity安装后处理的过程:windows---PacageManager---Post Processing Post Processing后处理堆需要知道要修改那个相机渲染的内容,先定位到相机,再 ...
- 【转载】Cesium基础使用介绍
既然给我发了参与方式,不参加似乎有点不给人面子,反正也没多少人看我的博客,那我就试试吧,也欢迎大家自己参与:2017年度全网原创IT博主评选活动投票:http://www.itbang.me/goVo ...
- vue+cesium初探(一) 加载cesium
参考文章1:https://www.cnblogs.com/laixiangran/p/4984522.html 参考文章2:https://blog.csdn.net/weixin_41940497 ...
- Cesium应用篇--添加雨雪天气
作为一个三维地球,在场景中来点雨雪效果,貌似可以增加一点真实感.Cesium官网Demo中有天气系统的实例,用的是Cesium中的粒子系统做的.效果如下图所示,粒子系统的本质是向场景中添加了很多物体, ...
- Cesium源码剖析---Post Processing之物体描边(Silhouette)
Cesium在1.46版本中新增了对整个场景的后期处理(Post Processing)功能,包括模型描边.黑白图.明亮度调整.夜视效果.环境光遮蔽等.对于这么炫酷的功能,我们绝不犹豫,先去翻一翻它的 ...
- cesium自定义气泡窗口infoWindow
一.自定义气泡窗口与cesium默认窗口效果对比: 1.cesium点击弹出气泡窗口显示的位置固定在地图的右上角,默认效果: 2.对于习惯arcgis或者openlayer气泡窗口样式的giser来说 ...
- cesium核心类Viewer简介
1.简单描述Viewer Viewer类是cesium的核心类,是地图可视化展示的主窗口,cesium程序应用的切入口,扮演必不可少的核心角色. 官网的英文解析如下: A base widget fo ...
随机推荐
- 升级adb
adb 是没有自动升级的命令的,如果想要更新adb的版本,需要在网上找到自己想要的版本进行更新. 为什么要更新呢? 肯定是在使用中遇到了什么问题必须升级版本才能解决,如果不影响使用,那都无所谓.这里提 ...
- Selenium+Python上传文件方法大全
转自:https://www.jianshu.com/p/fba37cc5d5e2
- SpringCloud设置随机端口后的问题
问题描述 SpringCloud服务提供者,设定了随机端口配置后,在EurekaServer中的注册端口.Tomcat的web端口.运行中获取到的server.port配置端口,共出现了4个不同的端口 ...
- sync同步工具使用
sync详解 sync概述: rsync是一个提供快速增量文件传输的开源工具.rsync在GNU通用公共许可证下免费提供,目前由Wayne Davison维护.传输前进行压缩,适合做备份使用. 命令格 ...
- 使用springboot+MybatisPlus+vue实现论文基础管理系统
页面效果如下 分析所需内容 数据库信息如下 t_paper t_comment 好了 数据库搞定 新建Springboot项目 选择Spring Initializr pom文件增加引入下面这三个依赖 ...
- P1296 奶牛的耳语
P1296 奶牛的耳语 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 本题核心思路: 1.读入后要排序以达到剪枝的目的 2.模拟,遇到不能再交流就转入下一头牛,否则计数器加一 3. ...
- selenium webdriver 无法选中元素,修改元素属性可见
<ul data-v-6529428e="" class="el-dropdown-menu el-popper filter-dropdown el-dropdo ...
- dpkt 简单应用
import dpktfrom dpkt.utils import mac_to_str,inet_to_strcap=f'D:/test_pacp/6.pcap'with open(cap,'rb' ...
- 3、一个简单的Java应用程序
/* 1.Java中区分大小写,如果出现了大小写拼写错误,例如将main拼写成Main,则程序将无法运行. 2.关键字public成为访问修饰符,用来控制程序的其他部分对这段代码的访问级别. 3.关键 ...
- flutter 环境配置以及我的第一个flutter程序(Hello World)
电脑配置: 操作系统: Windows 7 或更高版本 (64-bit) 磁盘空间: 400 MB (不包括Android Studio的磁盘空间). Windows下所需安装有: 1.Flutter ...