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.mzph.cn/news/20253.shtml

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

相关文章

不藏了!极狐GitLab 向你介绍一位研发效能「六边形战士」

怎么用数字说清研发效能? 总是觉得研发资源不够用? 高效工作全靠领导盯? 不问不知道项目推迟发布? 代码泄漏了才紧急采取措施? 是时候甩开这些“研发人的 PTSD”了😣 极狐星,给专业的你更…

Unity Shader:常用的C#与shader交互的方法

俗话说久病成医,虽然不是专业技术美术,但代码写久了自然会积累一些常用的shader交互方法。零零散散的,总结如下: 1,改变UGUI的材质球属性 有时候我们需要改变ui的一些属性,从而实现想要的效果。通常UGUI上…

Spring如何通过三级缓存解决循环依赖问题?

目录 一、什么是Spring 二、循环依赖问题 三、三级缓存机制 四、如何通过三级缓存解决循环依赖问题 一、什么是Spring Spring框架是一个开源的Java应用程序开发框架,提供了一种全面的、一致的编程模型,用于构建企业级应用程序和服务。它由Rod Johnso…

多个List 合并变成一个List+一个List 根据某个字段相等的另一个字段相加,并排序变成新的List

List<CurveTimeAndValueDomain> curves new ArrayList<>();for (int i 0; i < columnNames.size(); i){if (columnNames.get(i).equals(PlantConstant.TENDOWNFX) || columnNames.get(i).equals(PlantConstant.TENDOWNQP)) {//10千伏以下 数据 进行缓慢处理cu…

代码随想录算法训练营第五十三天 | 1143.最长公共子序列、1035.不相交的线、53.最大子数组和

文章目录 一、1143.最长公共子序列二、1035.不相交的线三、最大子数组和 一、1143.最长公共子序列 题目链接 代码如下&#xff1a; class Solution { public:int longestCommonSubsequence(string text1, string text2) {vector<vector<int>> dp (text1.size() …

Stable Diffusion中人物生成相关的negative prompts

下面是常用的negative prompt&#xff0c;在使用stable Diffusion webui等工具生成时可以填入。 bad anatomy, bad proportions, blurry, cloned face, deformed, disfigured, duplicate, extra arms, extra fingers, extra limbs, extra legs, fused fingers, gross proporti…

深度学习(32)——CycleGAN(1)

深度学习&#xff08;32&#xff09;——CycleGAN&#xff08;1&#xff09; 文章目录 深度学习&#xff08;32&#xff09;——CycleGAN&#xff08;1&#xff09;1. GAN原理2. CycleGAN&#xff08;1&#xff09;原理&#xff08;2&#xff09;核心思想&#xff08;3&#xf…

git回退到指定版本

#首先使用该方法查看版本号&#xff0c;后面可以接-n,n为数量&#xff0c;指定展示前几个版本记录。 git log &#xff08;或 git reflog&#xff09;#xxx换成你想回退的版本号。 git reset --hard xxx#强制推送到远程仓库&#xff0c;让远程仓库版本号一致。 git push origin…

PtahDAO:全球首个DAO治理资产信托计划的金融平台

金融科技是当今世界最具创新力和影响力的领域之一&#xff0c;区块链技术作为金融科技的核心驱动力&#xff0c;正在颠覆传统的金融模式&#xff0c;为全球用户提供更加普惠、便捷、安全的金融服务。在这个变革的浪潮中&#xff0c;PtahDAO&#xff08;普塔道&#xff09;作为全…

优漫动游|前端程序员容易出错的基础知识

web全栈是目前比较流行的语言&#xff0c;因为前端较其他语言相比&#xff0c;简单好学&#xff0c;而且现在的互联网公司几乎缺不了web前端开发&#xff0c;行业的需求致使大量的人转型前端&#xff0c;对于刚学前端的同学来讲&#xff0c;他们缺乏开发经验&#xff0c;在项目…

【C++】类与对象(2)

文章目录 前言一、类的6个默认成员函数二、构造函数1.概念2.特性3.初始化列表 三、析构函数1.概念2.特性 四、拷贝构造函数1.概念2.特性 五、赋值运算符重载1.运算符重载2.赋值运算符重载3.前置和后置重载 六、取地址及const取地址操作符重载总结 前言 在前面&#xff0c;给大…

【题解】单链表的排序

单链表的排序 题目链接&#xff1a;单链表的排序 解题思路1&#xff1a;分治、双指针 分治就是分而治之的意思&#xff0c;分的意思是说将一个大且复杂的问题划分成多个性质相似但是规模更小的问题&#xff0c;子问题继续按照同样的思路进行划分&#xff0c;直到问题被划分为…

【C++】开源:matplotlib-cpp静态图表库配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍matplotlib-cpp图表库配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&…

DC.js教程_编程入门自学教程_菜鸟教程-免费教程分享

教程简介 DC.js 是一个优秀的 JavaScript 库&#xff0c;用于在浏览器、移动设备中进行数据分析&#xff0c;最终有助于创建数据可视化&#xff1b;DC.js 是一个用于探索大型多维数据集的图表库&#xff0c;它依靠 D3.js 引擎以 CSS 友好的 SVG 格式呈现图表。它允许呈现复杂的…

ES6 - 数组新增的一些常用方法

文章目录 1&#xff0c;Array.from()2&#xff0c;Array.of()3&#xff0c;find()&#xff0c;findIndex()&#xff0c;findLast()和findLastIndex()4&#xff0c;Array.fill()5&#xff0c;keys()&#xff0c;values() 和 entries()6&#xff0c;Array.includes()7&#xff0c…

flask-----请求和响应,session

1 所有web:请求对象&#xff0c;响应对象(go,java,ptyhon) django&#xff1a;request&#xff08;每个请求一个request&#xff09;&#xff0c;新手四件套 flask&#xff1a;requset&#xff1a;全局的&#xff0c;但是也是每个请求一个request&#xff0c;新手三件套 2 fl…

【uniapp 报错 Cannot read properties of null (reading ‘offsetWidth‘)解决办法】

该错误通常是由于访问了一个空值的offsetWidth而引起的。解决方法如下&#xff1a; 检查代码中是否有访问了空值的情况&#xff0c;比如变量未初始化或者传入了空值参数或者事件未定义。 在操作元素之前&#xff0c;确保元素已经被正确加载。可以使用如下方法&#xff1a; <…

解决vue-print-nb-jeecg打印el-table表格预览竖版显示不全的问题!

第一步: 下载 vue-print-nb-jeecg 插件 npm install vue-print-nb-jeecg –save第二步: 在main.js中,引用并注册全局使用 import Print from vue-print-nb-jeecg Vue.use(Print);第三步: 需要打印的元素添加 id <div id"printMe">xxxx内容</div>第四步…

某行动态cookie反爬虫分析

某行动态cookie反爬虫分析 1. 预览 反爬网址(base64): aHR0cDovL3d3dy5wYmMuZ292LmNu 反爬截图&#xff1a; 需要先加载运行js代码&#xff0c;可能是对环境进行检测&#xff0c;反调试之类的 无限debugger 处理办法 网上大部分人说的都是添加cookie来解决。 那个noscript…

友盟+、GrowingIO和神策数据 对比

对于市面上的数据平台&#xff0c;先简单归个类。 1、移动统计平台&#xff0c;如友盟、talkingdata、百度云统计、腾讯移动应用统计等。 相同点是数据源都是埋点数据。友盟有免费版本。 前端效果&#xff1a;展现形式上为BI报表。 常用操作是页面内点击和筛选。 使用要求…