【TA100】3.4 前向/延迟渲染管线介绍

news2024/11/26 23:17:11

一、渲染路径

1.什么是渲染路径(Rendering Path)

● 是决定光照实现的方式。(也就是当前渲染目标使用的光照流程

二、渲染方式

首先看一下两者的直观的不同
在这里插入图片描述

前向/正向渲染-Forward Rendering

一句话概括:每个光照都计算

1、流程

在这里插入图片描述
● 如图所示,流程为:
待渲染几何体 → 顶点着色器 → 片元着色器 → 渲染目标
○ 在渲染每一帧的时,每一个顶点/片元都要执行一次片元着色器代码,这时需要将所有的光照信息传到片元着色器中。
● 虽然大部分情况下的光照都趋向于小型化,而且照亮区域也不大,但即便是离这个像素所对应的世界空间的位置很远的光源,光照计算还是会把所有的光源考虑进去的。
● 简单来说就是不管光源的影响大不大,计算的时候都会把所有光源计算进去,这样就会造成一个很大的浪费

2、规则(如何渲染每一帧的)和注意事项

发生在顶点处理阶段,会计算所有顶点的光照。全平台支持
○ 规则1:最亮的几个光源会被实现为像素光照
○ 规则2:然后就是,最多四个光源会被实现为顶点光照
○ 规则3:剩下的光源会实现为效率较高的球面调谐光照(Spherical Hamanic),这是一种模拟光照
补充说明
○ 最亮的那盏光一定是像素光照
○ Light的Render Mode是important的光一定是像素光照
○ 如果前面的两条加起来的像素光照小于Quality Setting里的Pixel Light Count(最大像素光照数量),那么从剩下的光源中找出最亮的那几盏光源,实现为像素光照。
○ 最后剩下的光源,按照规则2或3。
○ 在base pass里执行一盏像素光、所有的顶点光和球面调谐光照,并且进行阴影计算。
○ 其余的像素光每盏一个Additional Pass,并且这些pass里没有阴影计算。
○ 场景中看到的阴影,全是base pass里计算出最亮那盏像素光的阴影,其他像素光是不计算阴影的。
最多的光源数是可以更改的
○ 以Unity中的为例,在project setting中
在这里插入图片描述
所以,如果一个物体受到n个光源影响,那么每个片元着色器执行代码时,都必须把n个光源传递给着色器中进行计算
在这里插入图片描述

延迟渲染-Deferred Rendering

一句话概括:先不计算光照,延迟到最后再一起计算

1、什么是延迟渲染

● 主要用来解决大量光照渲染的方案
● 延迟渲染的实质是:
○ 先不要做迭代三角形做光照计算,而是先找出来你能看到的所有像素,再去迭代光照。
○ 直接迭代三角形的话,由于大量三角形是看不到的,会造成极大的浪费。

2、流程

在这里插入图片描述
● 流程为:待渲染几何体 → 顶点着色器 → MRT → 光照计算 → 渲染目标
● 过程可以拆分为两个pass
○ 第一个pass:几何处理通路。
■ 首先将场景渲染一次,获取到的待渲染对象的各种几何信息存储到名为G-buffer的缓冲区中,这些缓冲区用来之后进行更复杂的光照计算。
■ 由于有深度测试,所以最终写入G-buffer中的,都是离摄像机最近的片元的集合属性,这就意味着,在G-buffer中的片元必定要进行光照计算。
○ 第二个pass:光照处理通路。
■ 这个pass会遍历所有G-buffer中的位置、颜色、法线等参数,执行一次光照计算。

Multiple Render Target(MRT)是一种指可以使绘制程序在单帧中同时渲染多个Render Target,也就是一次Draw可以将不同的信息分别画入多个Surface。是利用Pixel Shader实现Post-Process效果中很重要的一部分。每像素的数据保存到不同的缓冲区当中。这样的好处就是这些缓冲区数据由此可以成为照片级光照效果着色器的参数。!
在这种方法的帮助下,光照可以在所有几何图形被渲染以后最后进行应用,不再需要进行多步的渲染。因而这种技术也可以被称为延期着色(Deferred Shading)。存储在这种类型的表面中的数据可以包括位置、法线、颜色以及材质的信息。

3、一些注意事项

● G-buffer的概念
○ G-Buffer,全称Geometric Buffer ,译作几何缓冲区,它主要用于存储每个像素对应的位置(Position),法线(Normal),漫反射颜色(Diffuse Color)以及其他有用材质参数。
■ 根据这些信息,就可以在像空间(二维空间)中对每个像素进行光照处理。
在这里插入图片描述
在这里插入图片描述
○ UE4默认使用的是延迟管线
■ 我们在视图模式—缓冲显示—总览,就可以看到所有G-buffer的预览
在这里插入图片描述
● 延迟渲染不支持透明物体的渲染
○ 因为没有深度信息
○ 延迟渲染中的透明物体渲染方式和前向渲染相同

三、不同渲染路径的特性

1、后处理方式不同

● 如何需要深度信息进行后处理的话
○ 前向渲染需要单独渲染出一张深度图
○ 延迟渲染直接用G-buffer中的深度信息计算即可

2、着色计算不同(shader)

● 延迟渲染
○ 因为是最后统一计算光照的,所以只能算一个光照模型(如果需要其他光照模型,只能切换pass)

3、抗锯齿方式不同

● 后续具体说明

四、不同渲染路径的优劣

1、前向渲染的优点、缺点

优点
● 1.支持半透明渲染
● 2.支持使用多个光照pass
● 3.支持自定义光照计算方式
○ (延迟渲染是渲染到Gbuffer,再一起计算光照,所以不支持每一个物体用单独的光照方式计算)
缺点
● 1.光源数量对计算复杂度影响巨大
● 2.访问深度等数据需要额外计算(需要再渲染一张深度图)

2、延迟渲染的优点、缺点

优点
● 1.大量光照场景的情况下,优势明显
● 2.只渲染可见像素,节省计算量
● 3.对后处理支持良好(例如深度信息:直接拿G-buffer中的就行)
● 4.用更少的shader(所有的物体光照模型都一样,很多东西不用再定义了)
缺点
● 1.对MSAA支持不友好
● 2.透明物体渲染存在问题(深度问题,只渲染力物体最近的物体,渲染透明度时会出现问题)
● 3.占用大量的显存带宽
○ 涉及一个clear的操作,如果不清理的话,后边可以继续获取到
○ 每一帧都需要几张rt在显存中传输、清理等,会更耗带宽
● 4.只能使用同一个光照pass

五、其他部分

1、渲染路径的设置

● Project Setting中进行设置
在这里插入图片描述
在这里插入图片描述

2、TBDR

● 有两个TBDR,名字一样,内容不同

● 第一个:
○ 是SIGGRAPH2010提出的,作为传统Defferred Rendering的另一种主要改进,**分块延迟渲染(Tile-Based Deferred Rendering,TBDR)**旨在合理分摊开销(amortize overhead),自SIGGRAPH 2010上提出以来逐渐为业界所了解。基于延迟渲染的优化方式,通过分块来降低带宽内存用量(解决带宽和内存问题)
在这里插入图片描述
延迟渲染的分块,把整个图像分为很多块,再一块一块的渲染

● 第二个:
○ PowerVR基于手机GPU的TBR框架提出的改进,通过HSR减少Overdraw
○ TBDR这个架构是PowerVR提出来的对TBR的一次改进,在TBR的基础上再加了一个Deferred。
○ 通过做一些可见性测试来减少Overdraw
○ 涉及手机GPU架构,和延迟渲染没什么关系

3、其他渲染路径

1延迟光照(Light Pre-Pass / Deferred Lighting)

● 减少G-buffer占用的过多开销,支持多种光照模型
● 和延迟渲染的区别:
○ 用更少的buffe信息,着色计算的时候用的是forward,所以第三步开始都是前向渲染(可以对不同的物体进行不同的光照模型)

2Forward+(即Tiled Forward Rendering,分块正向渲染)

● 减少带宽,支持多光源,强制需要一个preZ
○ 通过分块索引的方式,以及深度和法线信息来到需要进行光照计算的片元进行光照计算。
○ 需要法线和深度的后处理需要单独渲染一个rt出来
○ 强制使用了一个preZ(如果没涉及过这个概念的话,可以理解为进行了一个深度预计算)

3 群组渲染(Clustered Rendering)

● 带宽相对减少,多光源下效率提升
● 分为forward和deferred两种
● 详细补充拓展:https://zhuanlan.zhihu.com/p/54694743

4、延迟渲染中MSAA存在的问题

● 前边补充的图里有提到“NO MSAA Possible”,也就是说延迟渲染管线不支持MSAA
● MSAA在延迟渲染中存在的问题:像素已经被光栅化了,所以没法用更大的像素来渲染。

5、不同path下光源shader的编写

● 详情请看官方文档

6、PreZ(Zprepass)

● 实际上就是一个深度计算
● 和深度图的区别
○ 都是深度信息
■ PreZ是用一个pass,只算深度
■ 深度图是算成了一张RT(RenderTexture),把深度信息绘制到了一张RT上。
○ 具体用途:
■ 大规模草、透明排序会用到PreZ
● early-z 和 PreZ的区别
○ early-z,自动的,对面数有要求(硬件自动)
○ PreZ,当early-z失效的时候,或者需要深度图的时候,一种手动代替的方案
● 后边课程还会细讲

7、一些补充

● Unity的urp是不支持延迟渲染的,老管线支持。
● UE默认管线就是延迟渲染管线
● 一般延迟渲染用于主机/大项目

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

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

相关文章

openpose原理以及各种细节的介绍

前言: OpenPose是一个基于深度学习的人体姿势估计库,它可以从图像或视频中准确地检测和估计人体的关键点和姿势信息。OpenPose的目标是将人体姿势估计变成一个实时、多人、准确的任务。——本节介绍openpose的原理部分 把关键点按照定义好的规则从上到下…

Matter实战系列-----5.matter设备证书烧录

一、安装工具 1.1 安装Commander_Linux工具 下载地址 https://www.silabs.com/documents/public/software/SimplicityCommander-Linux.zip 下载完之后解压缩,在压缩包内执行命令如下 tar jxvf Commander_linux_x86_64_1v15p0b1306.tar.bz cd ./commander ./co…

启动appium服务的2种方法(python脚本cmd窗口)

目录 前言: 1. 通过cmd窗口命令启动 1.1 启动单个appium服务 1.2 启动多个appium服务 2. 通过python脚本来启动 2.1 启动单个appium服务 2.2 启动多个appium服务 3. 启动校验 3.1 通过cmd命令查看 3.1.1 查看指定端口号 3.1.2 查看全部端口号 3.2 通过生…

华为笔记本怎么用U盘重装Win10系统?

华为笔记本怎么用U盘重装Win10系统?华为笔记本拥有指纹识别、背光键盘、信号增强等功能,带给用户超棒的操作体验,用户现在想用U盘来重装华为笔记本Win10系统,但不知道具体怎么操作,这时候用户就可以按照以下分享的华为…

CMAC算法介绍

文章目录 一、简介二、符号三、步骤3.1 子秘钥生成3.2 计算MAC值 一、简介 CMAC(Cipher Block Chaining-Message Authentication Code),也简称为CBC_MAC,它是一种基于对称秘钥分组加密算法的消息认证码。由于其是基于“对称秘钥分…

网络安全|渗透测试入门学习,从零基础入门到精通—渗透中的开发语言

目录 前面的话 开发语言 1、html 解析 2、JavaScript 用法 3、JAVA 特性 4、PHP 作用 PHP 能做什么? 5、C/C 使用 如何学习 前面的话 关于在渗透中需要学习的语言第一点个人认为就是可以打一下HTML,JS那些基础知识,磨刀不误砍柴…

RTU遥测终端机的应用场景有哪些?

遥测终端机又称智能RTU遥测终端机,是一种用于采集、传输和处理遥测数据的设备。在现代科技的发展中,遥测终端机扮演着重要的角色。它是一种能够实现远程监测和控制的关键设备,广泛应用于各个领域,包括水文水利、环境监测、工业自动…

Linux系统:优化命令sar

目录 一、理论 1.命令描述 2.命令作用 3.命令参数 4.实用实例 二、实验 1.压力测试 三、问题 1.Linux系统五大负载如何解决 2.为什么使用ab命令进行网络传输数据的压力测试 3.ab命令发送请求测试失败 四、总结 1.sar命令 2.ab命令 3.五大负载 一、理论 1.命令描…

MySQL的索引(我把梦想卖了 换成了柴米油盐)

文章目录 一、索引的概念二、索引的作用如何实现? 三、索引的副作用四、创建索引的原则依据创建索引的依据 五、索引的分类六、索引的增删改查1.创建索引(1)创建普通索引(2)创建唯一索引(3)创建…

Spring Boot进阶(51):Spring Boot项目如何集成 HTML?| 超级详细,建议收藏

1. 前言🔥 我们都知道,Spring Boot作为一款广泛应用于企业级的开发框架,其通过简化开发过程、提高开发效率赢得了众多开发者的青睐。在实际项目开发中,集成 HTML作为 Web 应用程序中的一个基本需求,也是现在极其常见的…

618最值得入手的数码产品有哪些?四款必入数码产品数码推荐

时间飞逝,不知不觉已经过了6月中旬,大家心心念念的618年中大促也即将迎来最后一波高潮。这次618大促各大品牌的优惠力度都非常可观,特别是数码产品类,可以说是今年最值得入手的时期。今天也为大家推荐几款高颜值数码好物&#xff…

在 Apple silicon Mac 上 DFU 模式修复或恢复 macOS 固件

搭载 Apple 芯片的 Mac 电脑 DFU 模式全新安装 macOS Ventura 请访问原文链接:https://sysin.org/blog/apple-silicon-mac-dfu/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org Mac computers with Apple silicon&a…

聚焦2023数博会|高端对话,大咖观点精彩荟萃(上)

当前数据作为新型生产要素,是数字化、网络化、智能化的基础,已快速融入生产、分配、流通、消费和社会服务管理等各环节,深刻改变着生产方式、生活方式和社会治理方式。数据基础制度建设事关国家发展和安全大局。为加快构建数据基础制度&#…

【C++】手撕跳表

文章目录 跳表简介时间复杂度 代码实现节点类跳表类 源代码(附详细注释)参考 跳表 简介 跳表全称为跳跃列表,它允许快速查询,插入和删除一个有序连续元素的数据链表。跳跃列表的平均查找和插入时间复杂度都是O(logn)。快速查询是…

代码随想录二叉树 Java(三)

文章目录 (简单)501. 二叉搜索树中的众数(*中等)236. 二叉树的最近公共祖先(中等)235. 二叉搜索树的最近公共祖先(中等)701. 二叉搜索树中的插入操作(*中等)4…

软件测试中如何编写单元测试用例(白盒测试)

目录 前言: 一、 单元测试的概念 二、开始测试前的准备 三、开始测试 四、完成测试 前言: 单元测试是软件测试中一种重要的测试方法,它是在代码级别进行测试,通过对每个模块或功能进行独立测试来保障代码的正确性和可靠性。…

实验篇(7.2) 11. 站对站安全隧道 - 双方互相发起连接(FortiGate-IPsec) ❀ 远程访问

【简介】前面我们实验的是FortiClient客户端与防火墙进行VPN连接,现在我们要做的实验是防火墙与防火墙之间进行VPN连接。现在我们来看看两台防火墙之间要怎样创建VPN连接。 实验要求与环境 OldMei集团深圳总部部署了域服务器和ERP服务器,用来对集团总部进…

【探索 Kubernetes|容器基础进阶篇 系列 3】容器进程的文件系统

文章目录 系列文章目录👹 关于作者一、回顾二、容器进程的文件系统是什么样子的?rootfs一致性解决应用依赖关系解决复用性 三、OverlayFS 联合文件系统先决条件overlay2 驱动程序如何工作结构图探索含义-磁盘上的镜像层和容器层镜像层容器层 四、overlay…

动态规划dp —— 26.环绕字符串中唯一的子字符串

1.状态表示 是什么?dp表中里的值所表示的含义就是状态表示 dp[i]表示:以i位置元素为结尾的所有的子串里面,有多少个在base中出现过 2.状态转移方程 dp[i] 等于什么 如果是单个字母的子串,肯定会在base中出现,所以…

一文详解!appium自动化测试

目录 前言: Appinum前置知识 Andriod SDK 元素获取—UI Automator adb命令实践 adb常用命令 小结 Package与Activity Activity页面布局元素 monkey简介 monkey事件 操作事件简介 monkey参数 事件类参数 约束类参数 调试类参数 Monkey参数应用综合案…