浅聊Cesium.js 后处理原理

news2024/11/27 14:50:53

浅聊Cesium.js 后处理原理

使用例子:

const stages = viewer.scene.postProcessStages;

const silhouette = Cesium.PostProcessStageLibrary.createSilhouetteStage()
silhouette.enabled = true;
stages.add(silhouette);

silhouette.uniforms.color = Cesium.Color.LIME;

涉及到相关类的关系:
请添加图片描述

0、整体流程

两步: 更新和执行.

function updateAndClearFramebuffers() {
  // ...

  const postProcess: PostProcessStageCollection = scene.postProcessStages;
  postProcess.update();
  postProcess.clear();
  // ...
}
Scene.prototype.resolveFramebuffers() {
  // ...
  const postProcess: PostProcessStageCollection = scene.postProcessStages;

  // 执行后处理渲染
  postProcess.execute();

  // 将结果输出到屏幕
  postProcess.copy();

  // ...
}

1、PostProcessStageCollection

PostProcessStageCollection

PostProcessStageCollection 是一个用于管理后处理阶段的集合类。主要作用和功能如下:

  • 阶段管理:
    以集合的方式管理多个后处理阶段。通常,一个后处理效果可能需要多个阶段的处理,例如先进行图像模糊,然后再应用色调映射。

  • 顺序控制:
    允许定义后处理阶段的执行顺序。通过调整阶段在集合中的顺序,可以控制它们的执行顺序。例如,如果需要先进行亮度调整,再进行颜色校正,可以通过调整阶段的顺序来实现。

  • 功能扩展:
    允许自定义后处理阶段,并将其添加到集合中。

PostProcessStageCollection
  ┣ _ao: PostProcessStageComposite
  ┣ _bloom: PostProcessStageComposite
  ┣ _fxaa: PostProcessStage
  ┣ _autoExposure: AutoExposure
  ┣ _textureCache: PostProcessStageTextureCache
  ┃
  ┣ add()update()
PostProcessStageCollection.prototype.update() {
  // ...
  this._textureCache.updateDependencies();
  this._textureCache.update(context);

  stages[i].update(context, useLogDepth);
  // ...
}

PostProcessStageCollection.prototype.execute() {
  // ...
  execute()
  // ...
}

2、PostProcessStage

PostProcessStage 是后处理阶段的基本单元,用于实现具体的图像处理效果。它是在渲染管线中的最后阶段之一,用于对场景渲染结果进行进一步处理和改善。

PostProcessStage
  ┣ _uniforms: Object
  ┣ _fragmentShader: string
  ┣ _passState: PassState
  ┣ _sampler: Sampler
  ┣ _command: DrawCommand
  ┃
  ┣ outputTexture: Texture
  ┣ _clearColor: Color
  ┣ _pixelFormat: PixelFormat
  ┣ _pixelDatatype: PixelDatatype
  ┃
  ┣ update()execute()destroy()
PostProcessStage.prototype.update() {
  // ...
  createUniformMap()
  updateUniformTextures()
  createDrawCommand()
  createSampler()
  // ...
}
PostProcessStage.prototype.execute() {
  // ...
  this._command.execute();
  // ...
}

3、PostProcessStageTextureCache

PostProcessStageTextureCache 是一个用于缓存后处理阶段纹理的工具。

后处理阶段通常需要使用中间纹理来存储和处理图像数据。PostProcessStageTextureCache 提供了一个管理这些中间纹理的机制,以提高效率和性能。

PostProcessStageTextureCache
  ┃
  ┣ _collection: PostProcessStageCollection
  ┣ _framebuffers: []
  ┣ _stageNameToFramebuffer: []
  ┣ _width: number
  ┣ _height: number
  ┣ _updateDependencies: boolean
  ┃
  ┣ update()clear()getStageByName()getOutputTexture()getFramebuffer()isDestroyed()destroy()updateDependencies()
PostProcessStageTextureCache.prototype.update() {
  // ...
  if (updateDependencies) {
    releaseResources(this);
  }

  if (this._framebuffers.length === 0) {
    createFramebuffers(this, context);
  }
  // ...
}

4、PostProcessStageComposite

PostProcessStageComposite是一个后处理阶段的组合器,用于将多个后处理阶段组合成一个整体的后处理效果。它提供了一种将多个处理阶段串联或并行执行的机制,以实现复杂的后处理效果。

5、PostProcessStageLibrary

各种后处理的实现代码集合。

PostProcessStageLibrary
  ┣ createBlurStage() // 高斯模糊createDepthOfFieldStage() // 景深createEdgeDetectionStage() // 检测边缘createSilhouetteStage() // 轮廓createBlackAndWhiteStage() // 黑白渐变渲染createNightVisionStage() // 夜视效果createLensFlareStage() // 镜头眩光
  ┃
  ┣ createAmbientOcclusionStage() // 环境光遮挡createFXAAStage() // 抗锯齿createAcesTonemappingStage()createFilmicTonemappingStage()createReinhardTonemappingStage()createModifiedReinhardTonemappingStage()createAutoExposureStage()createBrightnessStage()createBloomStage()createDepthViewStage()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/844196.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux内网穿透应用场景有哪些?快解析有什么用处?

随着网络技术的不断发展,无论是工作上还是在生活中人们对网络的依赖和需求越来越高。Linux内网穿透作为一种创新的解决方案,为我们提供了无限可能。 首先我们了解一下Linux操作系统。Linux是一套免费使用和自由传播的类Unix操作系统,是一个基…

流量卡线上销户全教程,剩余的话费还有可能给你退回来!

线上就可以注销手机卡你知道吗?目前三大运营商都开通了线上销户业务了,而且用不完的话费还可以退回来,建议大家点赞收藏起来,以免有需要的时候找不到了,大家好,我是流量卡葫芦妹。 ​ OK,不多废…

进程、线程、协程

目录 进程、线程、协程的概念 进程、线程、协程的上下文切换 使用协程的注意事项 协程与线程、进程的区别 进程、线程、协程的概念 进程: 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。每个进程…

redis原理 1:鞭辟入里 —— 线程 IO 模型

Redis 是个单线程程序!这点必须铭记。 也许你会怀疑高并发的 Redis 中间件怎么可能是单线程。很抱歉,它就是单线程,你的怀疑暴露了你基础知识的不足。莫要瞧不起单线程,除了 Redis 之外,Node.js 也是单线程&#xff0c…

封装上传文件组件(axios,onUploadProgress,取消请求)

目录 定时模拟进度条 方法 A.axios B.xhr 取消请求​​​​​​​ 完整代码 A.自定义上传组件 B.二次封装组件 情况 增加cancelToken不生效,刷新页面 进度条太快->设置浏览器网速 定时模拟进度条 startUpload() {if (!this.file) return;const totalS…

AWS 中文入门开发教学 49- S3 - 区域间复制

知识点 S3 存储桶内容在全球区域间进行复制官网 https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/replication.html 实战演习 在东京区建立存储桶 Name: woyaofuzhi启用版本控制(完成区域间复制必须开启版本控制) 在新加坡区建立存储桶 Name: woyaofuzhibac…

科技感响应式管理系统后台登录页ui设计html模板

做了一个科技感的后台管理系统登录页设计,并且尝试用响应式布局把前端html写了出来,发现并没有现象中的那么容易,chrome等标准浏览器都显示的挺好,但IE11下面却出现了很多错位,兼容起来还是挺费劲的,真心不…

【Python从入门到进阶】31、使用JSONPath解析淘票票网站地区接口数据

接上篇《30、JSONPath的介绍和使用》 上一篇我们介绍了JSONPath的基础和具体使用,本篇我们来具体使用JSONPath,来解析淘票票网站的地区接口数据。 一、引言 1、JsonPath的作用和用途? JsonPath是一种用于在JSON数据中进行查询和提取的表达…

Python测试框架pytest:测试用例、查找子集、参数化、跳过

Pytest是一个基于python的测试框架,用于编写和执行测试代码。pytest主要用于API测试,可以编写代码来测试API、数据库、UI等。 pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个优点: 简单灵活,容易上手。…

3D数字孪生技术在工业制造中的应用

工业生产是现代工业生产和城市化建设的重要组成部分,工业生产逐渐批量化和自动化,利用数字孪生3D可视化技术对工厂生产的环境、设备、管道和仪表等元素在虚拟世界中模拟和重建,实现工业生产的管理、规划、设计和运营数字化可视化管理。 提高生…

利用openTCS实现车辆调度系统(五)openTCS WEB接口及扩展

上一篇介绍了RMI接口的使用,但是RMI接口只有java可以使用,不能前端直接调用。openTCS最新版本中新增了很多WEB接口,openTCS启动后即可调用。web接口文档地址 默认地址前缀为:localhost:55200/v1 例如,获取车辆列表。 …

JVM系统优化实践(24):ZGC(一)

您好,这里是「码农镖局」CSDN博客,欢迎您来,欢迎您再来~ 截止到目前,算上ZGC,Java一共有九种类型的GC,它们分别是: 1、Serial GC 串行/作用于新生代/复制算法/响应速度优先/适用于单…

分享一个霓虹灯拨动开关

先看效果&#xff1a; 再看代码&#xff08;查看更多&#xff09;&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title> 霓虹灯拨动开关</title><style>* {border: 0;box-sizin…

【linux】安装pytorch3d

写在开头 不要看网上的博客安装&#xff0c;直接参考官方安装文档去安装。 坑 坑1&#xff1a;安装pytorch3d后torch.cuda用不了 使用下面的命令安装后 conda install pytorch3d会提示安装下面的包&#xff0c;注意pytorch和torchvision都是cpu版本的&#xff0c;这样就会…

以太网帧格式与吞吐量计算

以太网帧结构 帧大小的定义 以太网单个最大帧 6&#xff08;目的MAC地址&#xff09; 6&#xff08;源MAC地址&#xff09; 2&#xff08;帧类型&#xff09; 1500{IP数据包[IP头&#xff08;20&#xff09;DATA&#xff08;1480&#xff09;]} 4&#xff08;CRC校验&#xff…

【福建事业单位-资料分析】01 数学推理-基础-特征-非特征数列

【福建事业单位-资料分析】01 数学推理-基础-特征-非特征数列 一、基础数列总结 二、特征数列2.1 多重数列项数多&#xff0c;多于7项总结 2.2机械划分①小数;ab②大数字多&#xff08;三位数、四位数&#xff09;&#xff0c;达到一半或者以上总结 2.3分数数列大通分总结 2.4幂…

【MySQL】事务的多版本并发控制(MVCC)

目录 一、数据库并发的三种场景二、MVCC2.1 三个记录隐藏字段2.2 undo log&#xff08;撤销日志&#xff09;2.3 模拟MVCC2.3.1 模拟更新&#xff08;update&#xff09;2.3.1 模拟删除&#xff08;delete&#xff09;2.3.1 模拟插入&#xff08;insert&#xff09;2.3.1 模拟查…

bilibili的评论ip属地显示未知

现象 出于某些原因&#xff0c;我们在日常使用中的大部分平台都开启了IP地址显示&#xff0c;一般会显示当事人所在的地址&#xff0c;这其中就有一些奇怪的地址&#xff0c;&#xff08;在此不谈魔法&#xff09;就比如我最近在刷B站的时候&#xff0c;就在评论区发现了一些显…

C高级【day4】

思维导图&#xff1a; 写一个函数&#xff0c;获取用户的uid和gid并使用变量接收&#xff1a; #!/bin/bashfunction get_uid {my_uidid -umy_gidid -g }get_uid echo "当前用户的UID&#xff1a;$my_uid" echo "当前用户的GID&#xff1a;$my_gid"整理冒泡…

布隆过滤器,Guava实现布隆过滤器(本地内存),Redis实现布隆过滤器(分布式)

一、前言 利用布隆过滤器可以快速地解决项目中一些比较棘手的问题。如网页 URL 去重、垃圾邮件识别、大集合中重复元素的判断和缓存穿透等问题。不知道从什么时候开始&#xff0c;本来默默无闻的布隆过滤器一下子名声大噪&#xff0c;在面试中面试官问到怎么避免缓存穿透&#…