浅聊Cesium.js 后处理原理

浅聊Cesium.js 后处理原理

使用例子:

const stages = viewer.scene.postProcessStages;

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

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

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

流程和three.js比较
在这里插入图片描述

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()
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cesium.js是一个基于WebGL的JavaScript 3D地球可视化引擎,主要用于创建高质量的地球和空间场景。在水利行业,Cesium.js具有以下应用场景: 1. 水文模拟:Cesium.js可以用于水文模拟应用,例如创建水文模型、水文可视化等。 2. 水利工程设计:Cesium.js可以用于水利工程设计应用,例如创建水闸模型、水库模型等。 3. 河流治理:Cesium.js可以用于河流治理应用,例如创建河流模型、水域环境保护等。 4. 水资源管理:Cesium.js可以用于水资源管理应用,例如创建水资源模型、水资源管理系统等。 5. 水利教育:Cesium.js可以用于水利教育应用,例如创建水利教育游戏、水利教育动画等。 Cesium.js可以通过创建高质量的3D地球场景来展示水利行业的各种应用场景,帮助用户更好地理解和掌握水利工程的运行原理和操作方法。同时,Cesium.js还支持多种数据格式和数据源,可以方便地进行数据的导入和处理,满足不同行业的需求。 例如,在水文模拟方面,Cesium.js可以将各种水文数据转换为3D地球场景,包括水文地形、水位、流量、水质等,帮助用户更好地理解水文过程和变化趋势。在水利教育方面,Cesium.js可以创建丰富的游戏和动画效果,帮助学生更好地理解和掌握水利知识。 综上所述,Cesium.js在水利行业的应用场景主要包括水文模拟、水利工程设计、河流治理、水资源管理和水利教育等方面,可以为水利行业的设计、演示和操作提供强有力的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值