当前位置: 首页 > news >正文

O3DE的Pass

Pass介绍

Pass是具有输入和输出的渲染过程。

在最终渲染帧中看到的每个细节都是通过一系列Pass(前一个Pass的输出是下一个Pass的输入)计算出来的。Pass可以生成图像(作为纹理、缓冲区或渲染目标)。每个图像都包含关于场景的特定信息,例如颜色、法线和深度。将这些图像组合在一起可以产生更复杂的效果,如阴影、照明、模糊、光晕和其他后处理效果。

  • .(输入要渲染的对象列表)——> forward render pass ——>(输出从场景中的摄影机视角观看到那些对象对应的渲染图像
  •  输入图像和深度缓冲区(记录了每个像素的深度值) ——> depth of field pass ——> 输出模拟真实世界相机聚焦特定区域的能力的新图像
  • 输入网格的顶点 ——> skinned mesh pass  ——>  通过计算顶点的移动距离输出新顶点

如何构建和使用pass

Pass System Overview - Open 3D Engine (o3de.org)https://docs.o3de.org/docs/atom-guide/dev-guide/passes/pass-system/

Pass可以是代码端(C++)、或数据端(JSON)格式、或两者的组合。

C++代码端里定义PASS的结构,如其属性和功能,并实现管理PASS的系统,如PASS创建和注册。数据端使用JSON格式将C++的PASS结构存储下来,允许使用JSON文件来编写PASS。通过编辑JSON文件,你可以修改PASS的属性和设置,而无需直接修改C++代码。这种架构将JSON的灵活配置和C++的实现能力结合在一起,使得编写和管理pass更加模块化和灵活。

PS:一般我们只会修改.pass(json格式),json格式会将Pass作为资产使用,所以此过程不需要重新rebuild程序。

.pass文件是把C++里的pass结构持久化到磁盘的文件,下面是一个.pass文件(里面是json格式)

PassTemplate File Specification - Open 3D Engine (o3de.org)https://docs.o3de.org/docs/atom-guide/dev-guide/passes/pass-template-file-spec/

{"Type": "JsonSerialization",     // JSON Serialization Header         "Version": 1,       //被序列化的类叫PassAsset,PassTemplate被序列化并包含在PassAsset中                   "ClassName": "PassAsset", "ClassData": {                             "PassTemplate": {             // PassTemplate"Name": "DownsamplePassTemplate", "PassClass": "ComputePass",     "Slots": [ ... ],"PassRequests": [ ... ],"ImageAttachments": [ ... ],"Connections": [ ... ],"FallbackConnections": [ ... ],"PassData": { ... },}}
}   

PASS系统中的类:Pass(所有类的基类) 、Parent Pass、Render Pass 类。

Pass类

Pass Attachments 是指PASS使用的渲染硬件接口 (RHI) 的附件,例如纹理、缓冲区和渲染目标。流程中的附件分为三种类型: 输入 (Input)、输出 (Output) 和输入输出 (InputOutput)。

附件类型的描述如下:

  • 输入 (Input):如果一个PASS只读取附件而不对其进行写入(修改)操作,则该附件槽位应该设置为输入类型。例如,在 SSAO(屏幕空间环境光遮蔽)中,深度缓冲区被绑定为输入类型,因为它只需要读取内容。

  • 输出 (Output):如果一个流程对附件进行写入操作,而且不需要保留附件的先前状态,则该附件槽位应该设置为输出类型。输出类型的附件可能会被清空或覆写。例如,在深度预处理流程中,深度缓冲区被绑定为输出类型,因为它只需要写入内容。另一个例子是全屏流程会将渲染结果写入目标渲染目标,该目标会被设置为输出类型。

  • 输入输出 (InputOutput):如果一个流程对附件进行写入操作,并且需要保留附件的先前状态,则该附件槽位应该设置为输入输出类型。输入输出类型的附件会保留先前状态。例如,在前向透明流程中,渲染目标就是一个输入输出类型的附件,因为该渲染目标已经包含了在不透明流程中渲染的像素。

Pass Behavior 是Pass具有的功能,被定义在虚拟函数中,这些虚拟函数的名称末尾有一个后缀Internal。

Parent Pass类

Parent Pass是由其他PASS组成的PASS,Parent Pass继承其他PASS。

Render Pass 

Render Pass 负责执行某种形式的GPU工作。

Atom提供了以下Render Pass ,这些pass实现了最常见的渲染用例

NameDescriptionAPI
光栅 Pass将场景中的对象转换为二维像素图。RasterPass
Compute Pass激活计算着色器以调度渲染命令.ComputePass
全屏三角 Pass

渲染一个覆盖整个屏幕的三角形。此PASS可用于全屏渲染其他视觉效果。

FullScreenTrianglePass
Copy Pass在GPU上复制图像和缓冲区。CopyPass

创建Pass

创建PASS中,涉及四个组件: PassPass SystemPass Template, and Pass Request。

创建PASS时,PASS系统使用PASS模板中定义的信息来创建PASS的实例。PASS请求可用于通知PASS系统创建PASS。

Pass中包含两部分:Name and Pass Descriptor(一个携带了老PASS的名字和功能的类,可以作为新PASS构造函数的输入)。

自定义PASS的步骤https://docs.o3de.org/docs/atom-guide/dev-guide/passes/authoring-passes/

http://www.lryc.cn/news/111049.html

相关文章:

  • 如何建立含有逻辑删除字段的唯一索引
  • C语言基础知识点一
  • Python 潮流周刊#14:Lpython 高性能编译器、Python 与 JavaScript 实现互通
  • JVM深入 —— JVM的体系架构
  • dialog => :before-close的属性应用
  • <van-empty description=““ /> 滚动条bug
  • 使用swiper实现图片轮播功能
  • Qt应用开发(基础篇)——时间类 QDateTime、QDate、QTime
  • Modbus TCP转Profinet网关modbus tcp转以太网
  • 笔记 | P4387 【深基15.习9】验证栈序列 题解
  • PyTorch中nn-XXX与F-XXX的区别
  • zookeeper集群和kafka的相关概念就部署
  • 第4集丨Vue 江湖 —— 计算属性
  • Docker 容器化学习
  • springboot第34集:ES 搜索,nginx
  • 微信小程序中的分包使用介绍
  • 【云原生】K8S二进制搭建二:部署CNI网络组件
  • 【iOS】—— 离屏渲染
  • 基于人工智能的中医图像分类系统设计与实现
  • spring security + oauth2 使用RedisTokenStore 以json格式存储
  • css position: sticky;实现上下粘性布局,中间区域滚动
  • 解密HTTP代理爬虫中的IP代理选择与管理策略
  • pytorch入门
  • Redis | 主从模式
  • C# Blazor 学习笔记(8):row/col布局开发
  • 金融供应链智能合约 -- 智能合约实例
  • 论文《Contrastive Meta Learning with Behavior Multiplicity for Recommendation》阅读
  • K8S 部署 RocketMQ
  • [Docker]入门之docker-compose
  • SAP ABAP中使用函数ALSM_EXCEL_TO_INTERNAL_TABLE读取EXCEL中不同的SHEET数据