IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 百人计划(图形部分)延迟渲染 -> 正文阅读

[C++知识库]百人计划(图形部分)延迟渲染

https://space.bilibili.com/7398208?spm_id_from=333.788.b_765f7570696e666f.1

?渲染路径(Rendering Path)

?它决定了光照如何应用到unity shader中。换句话讲,它是当前渲染目标使用光照的流程

?渲染方式

?前向渲染(Forward Rendering)

概述

?在渲染每一帧时,每一个顶点/片元都要执行一次片元着色器中的代码,这时需要将所有的光照信息都传递到片元着色器中进行计算,包括了即使距离很远影响微乎其微的小型光源,会造成很大的浪费

例如,物体受n个光源影响,那么在每一个片元执行着色器代码时,都必须把这n个光源都传递进着色器中执行光照计算。

流程

规则1:最亮的几个光源会被实现为像素光照

规则2:最多四个光源会被实现为顶点光照

规则3:剩下的光源会实现为效率较高的球面调谐光照(Spherical Hamanic),这是一种模拟光照

补充?

  • 最亮的那盏光一定是像素光照
  • Light的Render Mode是important的光一定是像素光照
  • 如果前面的两条加起来的像素光照小于Quality Setting里的Pixel Light Count(最大像素光照数量),那么从剩下的光源中找出最亮的那几盏光源,实现为像素光照。
  • 最后剩下的光源,按照规则2或3。
  • 在base pass里执行一盏像素光、所有的顶点光和球面调谐光照,并且进行阴影计算。
  • 其余的像素光每盏一个Additional Pass,并且这些pass里没有阴影计算。
  • 场景中看到的阴影,全是base pass里计算出最亮那盏像素光的阴影,其他像素光是不计算阴影的。

?

逐像素处理的光源数目可以在如下图的地方进行设置,会影响性能开耗?

image.png

?延迟渲染-Deferred Rendering

主要解决大量光照渲染的方案。实质上是先不迭代三角形做光照计算,而是先找出能看到的所有像素再去迭代光照,避免在看不到的三角形上造成浪费

概述

?过程可以拆分为两个pass

第一个pass:几何处理通路

  • 首先将场景渲染一次,获取到的待渲染对象的各种几何信息存储到名为G-buffer的缓冲区中,这些缓冲区用来之后进行更复杂的光照计算。
  • 由于有深度测试,所以最终写入G-buffer中的,都是离摄像机最近的片元的集合属性,这就意味着,在G-buffer中的片元必定要进行光照计算。

第二个pass:光照处理通路

  • 这个pass会遍历所有G-buffer中的位置、颜色、法线等参数,执行一次光照计算。
  • 透明物体没有深度信息,所以还是以前向渲染的方式在最后渲染

G-buffer的概念

RT(G-buffer)相当于把整个屏幕的信息绘制到一个图中,每个RT都可以写到一个G-buffer中

G-buffer中的数据都是2D的,所以我们的光照计算就相当于一个2D光照后处理

下图是经典G-buffer?

UE4中的G-buffer?

?不同渲染路径的特性?

1.后处理方式不同

如何需要深度信息进行后处理的话

  • 前向渲染需要单独渲染出一张深度图
  • 延迟渲染直接用G-buffer中的深度信息计算即可

2.着色计算不同(shader)

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

?3.抗锯齿方式不同

?优缺点

?渲染路径的设置

?在这里插入图片描述

?移动端优化TBDR

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

一个是SIGGRAPH 2010上提出的,通过分块降低带宽内存用量(需要规划很多G-buffer)

?一个是PowerVR基于手机GPU的TBR架构提出的,通过HSR减少overdraw

PowerVR基于手机GPU的TBR框架提出的改进,通过HSR减少Overdraw

TBDR这个架构是PowerVR提出来的对TBR的一次改进,在TBR的基础上再加了一个Deferred。

通过做一些可见性测试来减少Overdraw

涉及手机GPU架构,和延迟渲染没什么关系

这里提到的关于TBR 、PowerVR提出的TBRD,作业部分有整理,详细的也可以看知乎的这篇文章https://zhuanlan.zhihu.com/p/259760974

?其他渲染路径

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

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

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

  • 减少带宽,支持多光源,强制需要一个preZ
  • 通过分块索引的方式,以及深度和法线信息来到需要进行光照计算的片元进行光照计算。
  • 需要法线和深度的后处理需要单独渲染一个rt出来
  • 强制使用了一个preZ,进行了一个深度预计算。

群组渲染(Clustered Rendering)

  • 带宽相对减少,多光源下效率提升
  • 分为forward和deferred两种

延迟渲染中MSAA存在的问题

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

作业

总结延迟渲染管线的优缺点

优点

  • 1.大量光照场景优势明显
  • 2.只渲染可见像素,节省计算量
  • 3.对后处理支持良好(例如深度信息:直接拿G-buffer中的就行)

缺点

  • 1.不支持MSAA
  • 2.透明物体渲染不行
  • 3.占用大量的显存带宽
    • 涉及一个clear的操作,如果不清理的话,后边可以继续获取到
    • 每一帧都需要几张rt在显存中传输、清理等,会更耗带宽
  • 4.延迟渲染只能用同一套lighting pass(光照是一起计算的)

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 10:40:43  更:2021-09-10 10:42:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:18:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码