前向渲染和延迟渲染基本概念


前言

这一篇是对之前欠的东西,延迟渲染这个东西具体有很多很多值得钻研的东西,这里只是对概念做一个简单的笔记。如果后续再需要深入了解的话,会再另作笔记。

前向渲染

前向渲染是大多数的引擎常用的标准渲染方式。每次遍历几何片元的时候,片段着色器中会先计算光照,之后将片段写入帧缓冲区。但是这样会有很多次的光照计算都是多余的。于是为了减少没必要的光照计算,出现了延迟渲染技术。

延迟渲染

延迟渲染是一种能有效减少光照计算的技术。

在渲染管线中,剔除、Early-Z等技术都是为了减少不必要的计算从而加快渲染流程,而这里的延迟渲染技术也是一样。

通俗易懂地来说,在前向渲染中,对于每个物体,其所占像素都需要进行一次光照的计算;而在延迟渲染中,就好比先把每个物体在计算光照前缓存起来,待所有物体都等着计算光照的时候,统一进行像素的光照计算,这样的话,每个像素就只需要算一遍。

缓存这些待计算光照像素的缓冲区叫做G-Buffer或者叫做几何缓冲区,其中包括屏幕空间深度、表面法线、漫反射颜色、高光颜色和高光因子。(生成G-Buffer的时机是在光栅化阶段?)

G-Buffer被生成后,几何信息可以在光照pass中用来计算光照信息,在光照pass中每个光源都被当作一个几何对象被执行,每个与灯光所表示的几何体相交的像素都使用期望的光照方程进行着色。相比于前向渲染,延迟渲染的光照计算只对每个光源及其覆盖的像素计算一次。

在大量动态光源的环境下,延迟渲染的优势可以很明显地体现出来。

不足之处

首先,延迟渲染需要大量的缓冲区。

其次,在延迟渲染中,只有不透明物体可以被光栅化到G-Buffer,原因是多个半透明对象可以覆盖同一个屏幕像素,而G-Buffer中每个像素只可以存储一个值。在光照Pass中,深度值,表面法线,diffuse颜色和高光色被当前的屏幕像素所采样来进行光照,因为每个G-Buffer只能采样一个值,透明物体不能光照pass中被支持。为了绕过这个问题,透明几何体必须使用标准的前向渲染技术进行渲染,可以限制场景中透明物体的数量或动态光源的数量。只包含不透明物体的场景可以处理大约2000个动态光源而不会发生帧率问题。

再者,延迟渲染只能在光照pass中模拟一个光照模型,这是因为在渲染灯光几何体时只能绑定一个片段着色器。当使用ubershader(把所有的计算都放到一个shader)时,这通常不会是一个问题。然而,如果你的渲染管线在多个像素着色器中使用不同的光照模型,通过切换渲染管线来执行延迟渲染是会有问题的。

还有,由于G-Buffer存的都是像素值,无法体现出每个像素对应的原始模型,也就是说多重采样反走样功能也无法实现。

所以说,如果硬件或环境不支持延迟渲染,却仍存在光照的计算压力该怎么办?可以使用前向渲染 + 静态光照贴图的方式来减小光照计算压力。

Forward+

Forward+也叫基于Tile的前向渲染,即前向渲染和基于tile的灯光剔除相结合的渲染技术。

Forward+渲染的第一个pass将灯光划分到一个个的小格子中(tile),第二个pass是使用标准的前向渲染来对每个物体进行着色。如此做,相比起普通的前向渲染,每个物体所需要迭代计算的光照少了很多(这就是所谓的通过灯光剔除减少计算),可以给性能带来明显的提升。

Pass

在图形学中常说的Pass,指的就是一个操作,即用来执行渲染技术的某一步骤。比如,不透明Pass指的是迭代场景中所有对象,渲染其中所有不透明的对象。

前向渲染通常只有两个Pass,即不透明Pass和透明Pass;

延迟渲染通常包含三个Pass,几何Pass、光照Pass和透明Pass;

Forward+也包含三个Pass,灯光剔除Pass、不透明Pass和透明Pass。

小结

概念差不多就是这些,具体细节还需继续学习。不废话,学就完事了。

参考

https://gamedevelopment.tutsplus.com/articles/forward-rendering-vs-deferred-rendering–gamedev-12342

https://www.jianshu.com/p/0994555aefb5

前向渲染和延迟渲染基本概念相关推荐

  1. 图片渲染延迟_前向渲染与延迟渲染

    如果您开发过3D游戏,那么您可能会在现代图形引擎的研究中遇到术语"前向渲染"和"延迟渲染". 而且,通常,您必须选择一种在游戏中使用.但是它们是什么,它们有什么 ...

  2. 【技术美术图形部分】关于前向渲染和延迟渲染

    学习参考 [技术美术百人计划]图形 3.4 延迟渲染管线介绍 <Unity Shader 入门精要> 1 Unity的渲染路径 关于渲染路径,我在图形渲染管线1.0中就提过了,但只是初步的 ...

  3. mouseenter 延迟_前向渲染与延迟渲染

    如果您开发过3D游戏,那么您可能会在现代图形引擎的研究中遇到术语"前向渲染"和"延迟渲染". 而且,通常,您必须选择一种在游戏中使用.但是它们是什么,它们有什么 ...

  4. 【Unity渲染】前向渲染和延迟渲染的区别及切换

    前向渲染和延迟渲染通道的区别,主要在对于光源的处理上. Unity默认是前向渲染通道,如果光源特别多,可以使用延迟渲染. 前向渲染 使用前向渲染路径时,被照亮的对象将在单独的通道中进行渲染.根据场景中 ...

  5. 游戏渲染技术:前向渲染 vs 延迟渲染 vs Forward+渲染(二)

    GTA5 2 前向渲染 前向渲染是三个光照技术中最简单的,也是游戏图形渲染中最常见的技术.出于这个原因,也是光照计算最昂贵的技术,它不允许在场景中出现大量的动态光源. 大部分使用前向渲染的图形引擎会采 ...

  6. Unity前项渲染和延迟渲染(二)

    前项渲染和延迟渲染一直懵懵懂懂的,所以希望借此文章让自己更好的理解这两个渲染方式,本文主要参考<Unityshader入门精要>.如果有错误,欢迎指出.图片截图皆来自于<Unitys ...

  7. 3D图形学(6):正向渲染和延迟渲染

    内容引自<Real Time Rendering 3rd> Forward Rendering(正向渲染) 发生在渲染管线的顶点处理阶段,会计算所有的顶点的光照.全平台支持. 规则一:最亮 ...

  8. 前向渲染(Forward Rendering)和延迟渲染(Deferred Rendering)

    前向渲染(Forward Rendering) 它的实现最贴合我们的思维逻辑,当我们渲染模型时,只需要关心画模型然后直接处理光照,让它自己去做深度测试,最后深度测试过的都显示在屏幕上. 1.对要渲染的 ...

  9. 从0开始的技术美术之路(十六)延迟渲染

    本篇参考 "技术美术百人计划"·霜狼_may : <Shader入门精要>第九章·冯乐乐女神著: Unity官方手册 抗锯齿相关的大致了解 延迟渲染 手机TBDR框架 ...

最新文章

  1. iOS 性能优化总结
  2. redis有值查询返回null_Redis缓存穿透、缓存并发、热点缓存之最佳招式
  3. linux亲和性,两种亲和性
  4. Qt设置应用程序图标
  5. DW Question Answer Pro 1.3.4 DWQA问答系统插件
  6. C语言指针、数组与sizeof运算符
  7. 51单片机驱动ds12887c语言,51单片机+DS12887+12864大数字时钟程序+电路
  8. SAP plant and location
  9. Redux 并不慢,只是你使用姿势不对 —— 一份优化指南
  10. java之StringBuider与StringBuffer
  11. 基本农田卫星地图查询_#重庆朝天门#谷歌百度腾讯高德“卫星地图”PK,谷歌更胜一筹...
  12. maven构建MyBatis项目
  13. spring boot 和spring mvc区别
  14. Linux命令行下批量重命名文件名为数字索引编号(0~N.xxx)的方法
  15. 【概率论】5-9:多项式分布(The Multinomial Distributions)
  16. 【GIS开发】批量下载和拼接地图瓦片(Python)
  17. U盘转换NTFS格式
  18. 佳能打印机手机显示未连接服务器,佳能打印机出现服务器设置密码
  19. Serverless 极致弹性解构在线游戏行业痛点,你有过迷茫吗
  20. oracle10g 管理共享服务器

热门文章

  1. 服务器设置桌面快捷方式,Win7系统将IIS服务器发送到桌面快捷方式的方法
  2. 激光雷达点云数据的光伏应用文献阅读总结
  3. 阿里云移动端播放器高级功能---视频下载
  4. 笔记本扩展之后,插上耳机就会没有声音的解决方式
  5. 做了一个公众号关联小程序,看看干了哪些活。
  6. 用ptyhon和vba清除Word的标题样式保留字体格式,生成标题目录。
  7. 【AI创新者】小蚁首架张骏峰:让图像AI人尽可用转载
  8. python飞机_Python 飞机航班案例分析
  9. Lesson 9.4 随机森林在巨量数据上的增量学习和 Bagging 方法 6 大面试热点问题
  10. [C]获取硬盘序列号