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/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云曦暑期学习第四周——流量、日志分析

1 日志分析 1.1 What is 日志 日志,是作为记录系统与服务最直接有效的方法。在日志中,可以发现访问记录以及发现攻击线索。日志分析也是最常用的分析安全 事件所采用的途径。系统日志和 web 日志分别记录了不同内容,为分析攻击提供了有效证…

【敏捷开发】测试驱动开发(TDD)

测试驱动开发(Test-Driven Development,简称TDD)是敏捷开发模式中的一项核心实践和技术,也是一种设计方法论。TDD有别于以往的“先编码,后测试”的开发模式,要求在设计与编码之前,先编写测试脚本…

java+python企业会议在线办公微信小程序 ia505

一、小程序端功能 该部分内容提供员工注册、员工资料修改、通知公告、部门信息、会议记录等等功能。 二、管理员管理功能 该部分内容包含了首页、个人中心、通知公告管理、员工管理、部门信息管理、职位信息管理、会议记录管理、待办事项管理、工资信息管理、留言板管理、系统管…

Spring Boot 单元测试

目录 1.什么是单元测试? 2.单元测试的优点 3.Spring Boot 单元测试使用 3.1 生成单元测试的类 3.2 添加 Spring Boot 框架测试注解:SpringBootTest 3.3 添加单元测试业务逻辑 3.4 注解 Transactional 4. 断言 1.什么是单元测试? 单元…

Flink开发环境准备: centos-jdk8

linux-jdk8 - Flink开发环境准备 一、基本介绍二、环境准备1.1 JDK环境1.2 开发工具1.3 Maven环境 三、flink下载安装配置3.1 Flink下载3.2 flink本地模式安装 - linux3.3 常用配置3.4 日志的查看和配置 四、单机 Standalone 的方式运行 Flink 一、基本介绍 Flink底层源码是基于…

Open3D (C++) 计算矩阵的广义逆

目录 一、算法原理1、广义逆2、计算过程二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,原文链接。爬虫网站自重,把自己当个人,爬些不完整的误导别人有意思吗???? 一、算法原理 1、广义逆 非方阵不存在逆,但是存在广义逆(伪逆)。对于一个矩阵

【大数据】-- docker 启动 mysql 5.7,开启 binlog

1.说明 mysql binlog:二进制日志文件。它有两个作用,一是增量备份,即只备份新增的内容,可以用于恢复数据;二是用于主从复制等,即主节点维护了一个binlog日志文件,从节点从binlog中同步数据。 …

ChatGPT下架官方检测工具,承认无法鉴别AI内容

去年底,OpenAI 推出的 ChatGPT ,带来了生成式人工智能涌现的热潮。它不仅能够协助完成撰写邮件、视频脚本、文案、翻译、代码等任务,还能通过学习和理解人类的语言来进行对话,并根据聊天的上下文进行互动。 但随之而来的争议也让人…

【雕爷学编程】Arduino动手做(186)---WeMos ESP32开发板15

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…

Java 8 中使用 Stream 遍历树形结构

在实际开发中,我们经常会开发菜单,树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中的Stream流一次性把数据查出来,然后通过流式处理,我们一起来看看&#x…

找不到org.apache.http.annotation.NotThreadSafe的类文件

问题现象 最近在做一个调用包含请求体的GET请求功能的时候,引用了 httpclient-4.5.2.jar 和 httpcore-4.4.5.jar。 在工程编译环节报错如下: 原因分析 httpcore 和 httpclient 的版本不匹配。 解决方案 将 httpcore 的版本由 4.4.5 改为 4.4.4&am…

Unity学习参考文档和开发工具

☺ unity的官网文档:脚本 - Unity 手册 ■ 学习方式: 首先了解unity相关概述,快速认识unity编辑器,然后抓住重点的学:游戏对象、组件|C#脚本、预制体、UI ☺ 学习过程你会发现,其实Unity中主要是用c#进行开…

大麦订单生成器 大麦一键生成订单

后台一键生成链接,独立后台管理 教程:修改数据库config/Conn.php 不会可以看源码里有教程 下载源码程序:https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

基于C#的应用程序单例唯一运行的完美解决方案 - 开源研究系列文章

今次介绍一个应用程序单例唯一运行方案的代码。 我们知道,有些应用程序在操作系统中需要单例唯一运行,因为程序多开的话会对程序运行效果有影响,最基本的例子就是打印机,只能运行一个实例。这里将笔者单例运行的代码共享出来&…

安防监控视频融合EasyCVR平台接入RTSP流后设备显示离线是什么原因?

安防监控视频EasyCVR视频汇聚融合平台基于云边端智能协同架构,具有强大的数据接入、处理及分发能力,平台支持海量视频汇聚管理、全网分发、按需调阅、鉴权播放、智能分析等视频能力与服务。平台开放度高、兼容性强、可支持灵活拓展与第三方集成&#xff…

聊聊比亚迪的DM-i技术

比亚迪的DM-i技术是一种混合动力技术,结合了燃油发动机和电动技术,旨在提高汽车的燃油经济性和环境友好性。 DM-i技术的核心是搭载了一台高效的燃油发动机和一组电动机,通过电子控制系统实现两者的协同工作。在日常行驶中,汽车首先…

Baumer工业相机堡盟工业相机如何通过BGAPISDK获取相机接口数据吞吐量(C++)

Baumer工业相机堡盟工业相机如何通过BGAPISDK里函数来获取相机当前数据吞吐量(C) Baumer工业相机Baumer工业相机的数据吞吐量的技术背景CameraExplorer如何查看相机吞吐量信息在BGAPI SDK里通过函数获取相机接口吞吐量 Baumer工业相机通过BGAPI SDK获取数…

vue3中的自定义指令用法

我们都知道vue2中自定义指令全局和局部是这样写的 局部: 全局: 可vue3写法发生改变,如下: 全局: 局部:

台式机/工控机通过网线共享笔记本电脑无线网络linux系统下 usb网卡的驱动安装

一、台式机/工控机通过网线共享笔记本电脑无线网络 1、 将台式机通过网线和笔记本连接。 2、 将笔记本的“本地连接”和“无线网络连接”的ipv4均设置为自动获取。 4.修改台式机的IP地址为如下(对应笔记本信息) IP地址为192.168.XXX.12 子网掩码为255.2…

JavaScript |(六)DOM事件 | 尚硅谷JavaScript基础实战

学习来源:尚硅谷JavaScript基础&实战丨JS入门到精通全套完整版 文章目录 📚事件对象📚事件的冒泡📚事件的委派📚事件的绑定🐇赋值绑定🐇addEventListener()🐇attachEvent()&…