原文地址: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实例化对象中已有的处理效果去实现,如ambientOcclusionbloomfxaa
————————————————

三、场景后期处理相关类

上述提到了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)的更多相关文章

  1. Spring 实践 -IoC

    Spring 实践 标签: Java与设计模式 Spring简介 Spring是分层的JavaSE/EE Full-Stack轻量级开源框架.以IoC(Inverse of Control 控制反转) ...

  2. cesium+ geoserverTerrainProvide+png展示3D高程图展示

    一.发布png到geoserver的imagepyramid // translate png to tif epsg:4326 File png = new File(pngPathStr); Bu ...

  3. Cesium基础使用介绍

    前言 最近折腾了一下三维地球,本文简单为大家介绍一款开源的三维地球软件--Cesium,以及如何快速上手Cesium.当然三维地球重要的肯定不是数据显示,这只是数据可视化的一小部分,重要的应该是背后的 ...

  4. Unity 后处理堆

    Unity安装后处理的过程:windows---PacageManager---Post Processing Post Processing后处理堆需要知道要修改那个相机渲染的内容,先定位到相机,再 ...

  5. 【转载】Cesium基础使用介绍

    既然给我发了参与方式,不参加似乎有点不给人面子,反正也没多少人看我的博客,那我就试试吧,也欢迎大家自己参与:2017年度全网原创IT博主评选活动投票:http://www.itbang.me/goVo ...

  6. vue+cesium初探(一) 加载cesium

    参考文章1:https://www.cnblogs.com/laixiangran/p/4984522.html 参考文章2:https://blog.csdn.net/weixin_41940497 ...

  7. Cesium应用篇--添加雨雪天气

    作为一个三维地球,在场景中来点雨雪效果,貌似可以增加一点真实感.Cesium官网Demo中有天气系统的实例,用的是Cesium中的粒子系统做的.效果如下图所示,粒子系统的本质是向场景中添加了很多物体, ...

  8. Cesium源码剖析---Post Processing之物体描边(Silhouette)

    Cesium在1.46版本中新增了对整个场景的后期处理(Post Processing)功能,包括模型描边.黑白图.明亮度调整.夜视效果.环境光遮蔽等.对于这么炫酷的功能,我们绝不犹豫,先去翻一翻它的 ...

  9. cesium自定义气泡窗口infoWindow

    一.自定义气泡窗口与cesium默认窗口效果对比: 1.cesium点击弹出气泡窗口显示的位置固定在地图的右上角,默认效果: 2.对于习惯arcgis或者openlayer气泡窗口样式的giser来说 ...

  10. cesium核心类Viewer简介

    1.简单描述Viewer Viewer类是cesium的核心类,是地图可视化展示的主窗口,cesium程序应用的切入口,扮演必不可少的核心角色. 官网的英文解析如下: A base widget fo ...

随机推荐

  1. uiautomator2自动化工具的下载与安装

    前言: 相信很多使用appium做过APP自动化的人都深有感触: 1,安装麻烦,配置环境可能会难道不少人 2,appium运行慢.时间长 3,uiautomatorviewer定位元素时得关掉appi ...

  2. 用python判断三角形的形状

    # coding:utf-8 class point: def __init__(self,x,y,name): self.x = x self.y = y self.name = name '''两 ...

  3. Day11-数组的使用

    数组的使用 一.数组的使用 package com.array; public class ArrayDemo03 { public static void main(String[] args) { ...

  4. gcc的编译过程

    1. 预处理,生成 .i 的文件.(input) 2. 将 .i的文件转换成汇编语言,生成 .s 的文件 3.生成机器语言文件,.o的文件 4.连接目标代码,生成可执行文件 .out

  5. 4组-Beta冲刺-4/5

    一.基本情况 队名:摸鲨鱼小队 组长博客:https://www.cnblogs.com/smallgrape/p/15604878.html github链接:https://github.com/ ...

  6. Coder vs Programmer: Difference You Should Know

    In this tech-driven world, you may have heard the terms 'coder' and 'programmer' used interchangeabl ...

  7. uniapp相关

    1.uniapp官网 网址:https://uniapp.dcloud.net.cn/ 2.引入组件库 网址:https://www.uviewui.com/ 3.问题如下 (1)使用SwipeAct ...

  8. mybatis-plus 3.4.3.1 进行批量 saveOrUpdate

    service类通过 SqlHelper.saveOrUpdateBatch 实现通过自定义的 唯一索引 进行 批量保存更新 import com.baomidou.mybatisplus.core. ...

  9. python3GUI--轮播图效果展示By:PyQt5(附源码下载地址)

    @ 目录 一.前言 二.展示 1.酷我音乐 2.QQ飞车 3.虎牙 4.网易云音乐 5.英雄联盟 6.英雄联盟(Pro) 7.腾讯视频 三.源代码 1.demo02GUI.py 2.engine.py ...

  10. api进阶Day1文件的创建、删除、访问、设置过滤器并查询。目录的删除、创建。

    文件的创建: package file; import java.io.File; import java.io.IOException; /* create:创建 new:新 file:文件 使用F ...