【TA-霜狼_may-《百人计划》】图形3.4 延迟渲染管线介绍

  • @[TOC](【TA-霜狼_may-《百人计划》】图形3.4 延迟渲染管线介绍
  • 3.4.1 渲染路径
  • 3.4.2 渲染方式
    • 默认管线demo介绍
  • 3.4.3 前向渲染
  • 3.4.4 延迟渲染
  • 3.4.5 不同渲染路径的特性
  • 优缺点比较
    • 前向渲染缺点:
    • 前向渲染优点:
    • 延迟渲染缺点:
    • 延迟渲染优点:
  • 其他
    • 渲染路径设置
    • 移动端优化
    • 其他渲染路径
    • MSAA
    • 不同path下光源shader的编写
    • preZ / Zprepass
    • 一般在主机游戏中使用延迟渲染
  • 作业
    • 延迟渲染管线的优缺点
    • 如何优化(移动端优化技术)
      • IMR
      • TBR
      • 选择TBR的原因
      • 能够减少带宽的原因
      • TBR的过程
      • TBR的实现策略
    • TBDR
      • 什么是TBDR
      • TBR与TBDR的区别
      • HSR
  • 回答

3.4.1 渲染路径

渲染路径(Rendering Path)
决定光照的实现方式,简而言之,就是当前渲染目标使用光照的流程。

3.4.2 渲染方式

前向渲染(Forward Rendering)
延迟渲染 (Deferred Rendering)

默认管线demo介绍

前向渲染效果:
延迟渲染效果:

3.4.3 前向渲染


在前向渲染过程中,渲染每一帧时,每个顶点 / 片元都要执行一次片元着色器代码,这时需要将所有的光照信息都传递到片元着色器中。
虽然大部分的光照都趋向于小型化,即其照亮的区域不大,但即便这个光源距离很远,在计算光照的时候还是会将所有的光源都纳入考虑范围。
例如:物体受到n个光源影响,那么在每一个片元着色器代码中,都必须把n个光源都传递进这个片元着色器中进行计算。
在forward rendering中可以自定义设置需要进行逐像素渲染的光源数量。

3.4.4 延迟渲染

先不去做迭代三角形做光照计算,而是先找到所有能看到的像素,再去迭代光照。直接迭代三角形的话会造成大量开销,非常浪费。

将渲染拆分成两个渲染通道(pass)
第一个pass成为几何处理通路。首先将场景渲染一次,获得待渲染对象的各种几何信息存储到名为G-buffer的缓冲区中,这些缓冲区将会在之后用作更复杂的光照计算。
由于有深度测试,所以最终写入G-buffer中的各个数据都是离摄像机最近的片元的几何属性,这意味着最后在G-buffer中的片元必定要进行光照计算。

第二个pass成为光照处理通路。该pass会遍历所有G-buffer中的位置、颜色、法线等参数,执行一次光照计算。

无法用延迟渲染的方式对透明或者半透明物体进行渲染,所以在延迟渲染的过程中,透明物体的渲染依旧按照前向渲染的方式进行,在最后进行处理。

延迟渲染先将图像信息存入一个2D的RT(Render Texture)中,每一个RT都可以写进一个G-buffer中,所以当使用G-buffer中的数据进行光照计算时,相当于2D条件下的光照处理。

3.4.5 不同渲染路径的特性

  1. 后处理方式不同

    • 前向渲染需要单独渲染出一张深度图
    • 延迟渲染可以直接使用G-buffer中的深度图进行直接计算
  2. 着色计算不同(shader)
    • 由于延迟渲染光照计算统一在LightPass中完成,所以只能选择单个光照模型,如果你需要其他的光照模型,只能切换pass
  3. 抗锯齿方式不同

优缺点比较

前向渲染缺点:

  1. 光源数量对计算复杂度影响巨大
  2. 访问深度等数据需要额外计算

前向渲染优点:

  1. 支持半透明渲染
  2. 支持使用多个光照pass
  3. 支持自定义光照计算方式

延迟渲染缺点:

  1. 对MSAA支持不友好
  2. 透明物体渲染存在问题
  3. 占用大量的显存带宽

延迟渲染优点:

  1. 大量光照场景优势明显
  2. 只渲染可见像素,节省计算量
  3. 对后处理支持良好
  4. 用更少的shader

其他

渲染路径设置

移动端优化

  • 两个TBDR的理解

    • 一个是SIGGRAPH 2010上提出的,通过分块来降低带宽内存用量
    • 一个是PowerVR基于手机GPU的TBR架构提出的,通过HSR减少OverDraw


通过对画面进行分块来解决带宽瓶颈的问题。

其他渲染路径

  • 延迟光照(Light Pre-Pass / Deferred Lighting):减少G-buffer占用的过多开销,支持多种光照模型
  • Forward+ (Tiled Forward Rendering, 分块前向渲染):减少带宽,支持多光源,需要一个强制的preZ(深度计算)。它利用分块索引的方式以及深度和法线信息达到需要进行光照计算的片元进行光照计算
  • 群组计算 Clustered Rendering

MSAA

DX9不支持MSAA,由于延迟渲染中像素已经被光栅化了,所以无法用更大的像素对其进行渲染,造成MSAA失效的问题。

不同path下光源shader的编写

官方文档中有详细的说明

preZ / Zprepass

其中一个是利用pass进行深度计算,另一则是将深度信息绘制成RT,用途在于当进行大型草渲染的时候进行使用,或者是在透明物体的渲染过程中进行使用。

一般在主机游戏中使用延迟渲染

作业

延迟渲染管线的优缺点

  • 在大量光照的场景中优势明显

  • 只渲染可见像素,节省算力

  • 利用G-buffer优化后续处理

  • 不支持MSAA

  • 透明物体无法使用这种模式

  • 占用大量的显存带宽

  • 延迟渲染只能用同一套lighting pass

如何优化(移动端优化技术)

问题:如何解决移动端带宽占用高的问题?
首先要分清楚PC端和移动端两种不同的架构形式。

  • PC端架构IMR 和
  • 移动端架构TBR

IMR

全称:Immediate Mode Rendering,我们通常说PC端GPU渲染用的是如下的架构:

  • 蓝色部分代表正常的渲染管线,灰色部分对应GPU中的显存(包括集合信息,纹理信息,深度Buffer还有FrameBuffer)
  • 特点:对于每一步操作,渲染管线里的读写操作都是直接在显存和GPU中传输数据的,例如上图中中间一行的箭头,向上代表读取显存,向下代表写入显存
  • 这种方式下,每一次渲染完的Color和Depth数据写回到FrameBuffer和Depth Buffer都会产生很大的带宽消耗。

TBR

由于移动端需要控制功耗,大量的读写运算会急剧提高功耗,所以受到功耗限制,需要限制带宽。

TBR全称是:Tile-Based Rendering,
上图中,可以看到两个灰色条带,最下一层是系统内存(我存疑蛤)

选择TBR的原因

  • 即使是1080p的分辨率,在对每一帧都进行渲染的情况下对FrameBuffer的访问量是惊人的。
  • gpu的onchip memory(SRAM L1 L2 cache)较小,如果不采取措施的话将数据存储在DRAM中会造成大量的带宽消耗,从而无法控制功耗。
  • 为了解决上述问题,将FrameBuffer中的数据分隔成小块装在SRAM中,方便读写,完成整块的读写之后再统一存回DRAM中;

能够减少带宽的原因

  • TBR架构下,所有渲染之前的工作都在SRAM上完成,当整体完成渲染了才将数据搬回DRAM,减少了大量的读写操作;
  • 针对上述操作,读取只发生在需要几何以及纹理信息的时候,写回也只发生在整批绘制完成的时候,也就是说带宽消耗最大的DepthBuffer和ColorBuffer的读写都发生在On_Chip Memory上

比较如下:

TBR的过程

  1. 缓存所有绘制指令知道最后才开始进行真正绘制
  2. 首先对所有图元进行VS,把相关的所有绘制数据保存起来
  3. 计算每个tile都包含那些图元
  4. 开始绘制一个tile
  5. 依次绘制每个tile
  6. 把绘制好的所有tile拷贝到FrameBuffer中

TBR的实现策略

  • 在TBR中并不是来一个绘制就执行一个全过程,这样还是会有大量的读写操作问题。
  • TBR一般的策略是:对于从CPU发来的绘制,只对他们进行顶点处理,然后将产生的结果暂时存回物理内存,等到非要刷新整个FrameBuffer的时候,再对这部分数据做光栅化;

TBDR

什么是TBDR

Tile-based defer rendering
只有PowerVR的GPU是TBDR架构,其余的GPU还是TBR架构,是对TBR的改进,在TBR的基础上再加了一个Deferred。通过增加Rasterize(光栅化)到PS这一步之间的延迟,实现延后PS的操作

TBR与TBDR的区别

TBR: VS - Defer - RS - PS
TBDR: VS - Defer1 - RS - Defer2 - PS
通过第二个defer,真正最大程度的实现了“延后(Defer)PS的执行”,以避免执行不必要的PS计算带来的开销;

HSR

HSR对标之前学到过的Early-Z方法,由于TBR的特性,所有的图元信息都在被绘制前就完全保存下来,所以对这些信息进行深度计算,就不需要考虑绘制顺序问题了,从而几乎零成本的避免了OverDraw问题。

回答

  1. 在不使用FrameBuffer的时候 clear 或者 discard
  2. 在每一帧渲染前尽量clear
  3. 不要在每一帧中频繁的切换FrameBuffer
  4. 贴图尽量压缩
  5. 尽量开启Mipmap
  6. 随机纹理寻址相比相邻纹理寻址开销更大
  7. Trilinear/Anisotropic相对于Bilinear开销更大
  8. 使用LUT(Look up texture)可能会负优化
  9. 通道图尽量合并,减少贴图的采样次数
  10. 控制FrameBuffer的大小
  11. 避免大量的drawcall和顶点量
  12. 避免gpu上的 copy-on-write

参考链接

【TA-霜狼_may-《百人计划》】图形3.4 延迟渲染管线介绍相关推荐

  1. 百人计划 图形2.1 色彩空间

    色彩发送器 色彩认知:光源是出生点,光源发出光线,光线通过直射反射折射等路径最终进入人眼.在接收到光线后,人眼产生了一系列化学反应.由此把产生的信号传入大脑,大脑对颜色产生了认知感知. 光的要素: 光 ...

  2. 百人计划 图形1.4 PC手机图形API介绍

    前言 电脑工作原理:电脑是有各种不同的硬件组成,由驱动软件驱使硬件进行工作.所有的如软件工程师都会直接或间接使用到驱动. 定义:是一个针对GPU的图形库,用于渲染2D.3D矢量图形的跨语言.跨平台的应 ...

  3. 百人计划 图形 2.5 BUMP图改进

    基础感念 凹凸贴图技术是对物体表面贴图进行变化然后再进行光照计算的一种技术.例如给法线分量添加噪音,或者在一个保存扰动值的纹理图中进行查找,这是一种提升物体真实感的有效办法,但却不需要额外的提升物体的 ...

  4. 百人计划 图形2.2 模型与材质基础

    渲染流水线大致过程 1.顶点数据输入到顶点着色器中进行相关的顶点计算,然后进行图元装配,通过点与点之间的关系将点进行连接.2.再到几何着色器(可选着色器)进行图元的增加,再到光栅化通过遍历像素点将一个 ...

  5. 【TA-霜狼_may-《百人计划》】图形3.7.2 command buffer简

    [TA-霜狼_may-<百人计划>]图形3.72command buffer 及urp概述 @[TOC]([TA-霜狼_may-<百人计划>]图形3.72command buf ...

  6. 【TA-霜狼_may-《百人计划》】图形4.5 DoF景深基础

    [TA-霜狼_may-<百人计划>]图形4.5 Dof景深基础 @[TOC]([TA-霜狼_may-<百人计划>]图形4.5 Dof景深基础 4.5.1 景深 离散圈 4.5. ...

  7. 【TA-霜狼_may-《百人计划》】图形2.7.2 GPU硬件架构概述

    [TA-霜狼_may-<百人计划>]图形2.7.2 GPU硬件架构概述 @[TOC]([TA-霜狼_may-<百人计划>]图形2.7.2 GPU硬件架构概述 GPU是什么 GP ...

  8. 技美 百人计划 (图形)1.1渲染流程

    技美 百人计划 (图形) 图形 1.1 渲染流水管线2.1数学基础 很早之前就有关注百人计划这个系列的课程,也跟着看到了2.几的教学但是一直没有写笔记,最近看到百人计划已经快更新完毕了,决定从头看一遍 ...

  9. 个人学习笔记 ——【技术美术百人计划】图形 2.1 色彩空间介绍

    个人学习笔记 --[技术美术百人计划]图形 2.1 色彩空间介绍 图形 2.1 色彩空间介绍 个人学习笔记 --[技术美术百人计划]图形 2.1 色彩空间介绍 图形 2.1 色彩空间介绍 一.色彩发送 ...

最新文章

  1. python 做个创越火线挂_一日一技:用Python做个能挂墙上的大钟表
  2. 解决网站在负载均衡环境下SESSION丢失的问题
  3. P8实战(二):分布式锁前置技能 etcd 集群搭建
  4. PHP与C sharp互解加密算法
  5. [css] 浏览器是怎样判断元素是否和某个CSS选择器匹配?
  6. Redis问的太深入,面试官说:“你先回去等通知吧“!
  7. SpellGCN: Incorporating Phonological and Visual Similarities intoLanguage Models
  8. c#中对xml文件的基本操作
  9. 关于arp表的网络问题
  10. C#版OPOS打印(基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机)...
  11. 三星内存编码_看编号 识内存
  12. 常见的运营商网络安全问题
  13. liveness探测mysql_Kubernetes 服务中 Liveness 和 Readiness 探测
  14. 【比赛回顾】广工大2020级年ACM第一次月赛——Dio的面包工坊
  15. 唐玄奘:不要因为走得太远,而忘了为什么出发
  16. python迭代器定义_Python-迭代器相关概念
  17. linux文件夹缩略图不显示,分享|如何在终端显示图像缩略图
  18. 申宝投资-市场行情整体比较差
  19. 企业即时通讯软件有哪些功能?对企业有什么帮助?
  20. python实训总结万能版3000字_万能实习报告论文范文3000字

热门文章

  1. 单视图几何Vanish Point(消失点/灭点)计算方法——Robert_T_Collins(罗伯特·柯林斯)算法
  2. Zabbix学习笔记(七)---网络波动监控
  3. 什么样的DevOps技能是团队需要的?
  4. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
  5. 网站服务器过载,服务器过载保护
  6. flink报错:The types of the interface org.apache.flink.util.OutputTag could not be inferred.
  7. 前端面试经典js题目Foo 与 getName
  8. matlab 二维矩形函数,科学网—利用MATLAB对非矩形域实现二维插值 - 张乐乐的博文...
  9. 雷士灯wifi控制方法_欧普照明 WIFI控制安装使用说明
  10. WEBSHELL权限提升技巧(综合版)