O3DE的Pass

news2025/1/17 23:03:17

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.coloradmin.cn/o/829483.html

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

相关文章

【话题】感觉和身边其他人有差距怎么办?也许自我调整很重要

每个人能力有限,水平高低不同,我们身在大环境里,虽然在同一个起跑线上,但是时间久了,你会发现,并越来越感觉到和身边其他人有了差距,慢慢的会有一定的落差感,怎么办呢!通…

Android手机信息获取(详细版)

经典好文推荐,通过阅读本文,您将收获以下知识点: 一、 获取手机基本信息(厂商、型号等参数) 二、设备信息获取实现图 三、 获取手机设备 宽、高、IMEI 信息 四、 获取手机厂商名、产品名、手机品牌、手机型号、主板名、设备名 五、获取手机硬件名、SDK版本、android版本 、语…

无代码开发:打破传统开发模式,引领数字化转型新方向

随着数字化转型的加速,企业对于高效、便捷的软件开发需求愈发旺盛。无代码开发作为一种新兴的软件开发模式,以其可视化、模块化的开发方式,为数字化转型提供了新的方向。本文将从无代码开发的优势、应用场景、如何实现等方面进行详细解读&…

中介者模式——协调多个对象之间的交互

1、简介 1.1、概述 如果在一个系统中对象之间的联系呈现为网状结构,如下图所示: 对象之间存在大量的多对多联系,将导致系统非常复杂,这些对象既会影响别的对象,也会被别的对象所影响,这些对象称为同事对…

配置root账户ssh免密登录并使用docker-machine构建docker服务

简介 Docker Machine是一种可以在多种平台上快速安装和维护docker运行环境,并支持多种平台,让用户可以在很短时间内在本地或云环境中搭建一套docker主机集群的工具。 使用docker-machine命令,可以启动、审查、停止、重启托管的docker 也可以…

揭示用户激活的价值:为什么产品经理应该关注

如果你在一家SaaS公司工作,你可能自诩对漏斗指标有很好的理解,你可能可以倒背如流——获取,用户激活,保留,推荐和收入。你甚至可能记得它们的出处,但是你对这些指标的理解到底有多深呢?你知道你…

node.js系列-多种方案教你在node程序中同时使用CommonJS 和 ES Module 混合开发最佳实践

前情提要 我们平时使用的npm 第三方包一般基于这两种规范开发的,很容易遇到一个项目里既有 CommonJS 又有 ES Module 的情况,那么我们应该如何解决这种CommonJS 和 ES Module 混合开发的问题呢? CommonJS是什么? 2009年&#x…

C++学习笔记总结练习--容器

容器 1 简介 新标准库的容器壁使用原始的数组实现的数据结构要快很多。经过了精心的优化。 确定使用哪种容器 除非有明确的理由,否则使用vector随机元素访问vector或deque容器中间插入或者插入元素list、forward_list头尾插入元素,使用deque可以在输入…

RelativeSource有四种类型

Self FindAncestor TemplatedParent PreviousData a.Self Self用于绑定源和绑定目标相同的场景中。对象的一个属性与同一对象的另一个属性绑定。 例如&#xff0c;让我们取一个高度和宽度相同的椭圆。在XAML文件中添加下面给出的代码。宽度属性与高度属性相对绑定。 <G…

Stephen Wolfram:“足够大的网络肯定能做任何事!”

“Surely a Network That’s Big Enough Can Do Anything!” “足够大的网络肯定能做任何事&#xff01;” The capabilities of something like ChatGPT seem so impressive that one might imagine that if one could just “keep going” and train larger and larger neura…

【Kubernetes】Kubernetes的部署

kubernetes 一、Kubernetes 的安装部署1. 常见的安装部署方式1.1 Minikube1.2 Kubeadm1.3 二进制安装部署 2. K8S 部署 二进制与高可用的区别2.1 二进制部署2.2 kubeadm 部署 二、Kubernetes 的部署过程1. 二进制部署1.1 服务器相关设置以及架构1.2 操作系统初始化配置1.3 部署…

【前端|Javascript第1篇】一文搞懂Javascript的基本语法

欢迎来到JavaScript的奇妙世界&#xff01;作为前端开发的基石&#xff0c;JavaScript为网页增色不少&#xff0c;赋予了静态页面活力与交互性。如果你是一名前端小白&#xff0c;对编程一无所知&#xff0c;或者只是听说过JavaScript却从未涉足过&#xff0c;那么你来对了地方…

《探索文心千帆大模型平台: 代码编写从此变得轻松》

文章目录 前言一、初识文心千帆1.1 功能丰富1.2 注册登录 二、内置第三方大模型2.1 ERNIE-Bot模型2.2 ERNIE-Bot-turbo模型2.3 BLOOMZ-7B模型2.4 Llama模型全家桶2.5 在线体验2.5.1 代码编写能力简单提问复杂提问报错解决添加注释 2.5.2 逻辑判断先有鸡还是先有蛋&#xff1f;鸡…

CTF-MISC:BUUCTF练习汇总(26-31题)

CTF-MISC&#xff1a;BUUCTF练习汇总 26、后门查杀27、webshell后门28、来首歌吧29、荷兰宽带数据泄露30、面具下的flag31、九连环 26、后门查杀 解题思路&#xff1a;题干可知webshell的密码为flag&#xff0c;且下载的文件为网站源码&#xff0c;人工查找不太现实&#xff0…

【框架篇】Spring MVC 介绍及使用(详细教程)

Spring MVC 介绍 1&#xff0c;MVC 设计模式 MVC&#xff08;Model-View-Controller&#xff09;是一种常见的软件设计模式&#xff0c;用于将应用程序的逻辑分离成三个独立的组件&#xff1a; 模型&#xff08;Model&#xff09;&#xff1a;模型是应用程序的数据和业务逻辑…

微信小程序iconfont真机渲染失败

解决方法&#xff1a; 1.将下载的.woff文件在transfonter转为base64&#xff0c; 2.打开网站&#xff0c;导入文件&#xff0c;开启base64按钮&#xff0c;下载转换后的文件 3. 在下载解压后的文件夹中找到stylesheet.css&#xff0c;并复制其中的base64 4. 修改index.wxss文…

proj库配置与使用(window11,vs2019,x64)

前置安装依赖 1.SQLite3 安装 亲测 (97条消息) SQLite3源码下载与编译&#xff08;开发环境&#xff1a;Win10VS2022&#xff09;_sqlite3 下载_林夕07的博客-CSDN博客 2.TIFF 亲测 (97条消息) Win11下基于cmake-3.26.3 完美编译 TIFF-4.5.0源码_tiff 编译_GIS子枫的博客-C…

免费的ssl证书

免费的SSL证书对于保证网站的安全性和信任度来说是非常重要的。虽然有些人可能会认为&#xff0c;免费的SSL证书可能不如付费的证书有效&#xff0c;但事实并非如此。 首先&#xff0c;免费的SSL证书同样能够为网站提供加密与解密的功能。这意味着所有的数据将会在传输过程中被…

【雷达通信】非相干多视处理(CSA)(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…