渲染|引擎渲染方式
渲染引擎Thepoly 15492 0
实名

通过了实名认证的内容创造者

发布于 2022-3-29 18:58:37

您需要 登录 才可以下载或查看,没有账号?注册

x
            
81206981b603f57a91c07389ac43df78.jpg


Hello . 大家好
今天给大家简单介绍一下
引擎里面常见的渲染方式
我是木偶心没



一个完整的项目制作的时候,开始之前都要优先确定到底使用什么方式来渲染光照,比如前向渲染或者延迟渲染。这样才能针对每一个渲染方式不同的特点来制作物件,以避免后续更改渲染方式造成效果上的差异。
接下来就简单解释一下一般在引擎里面的选择前向渲染Forward Rendering和延迟渲染Deferred Rendering。




1
光栅化

为了更好的理解渲染方式,我们需要了解一下光栅化。
我们现在能看到的所有图像都是由像素组成的,也就是所有的模型和材质光照等信息最终都会被绘制成为像素显示在屏幕上,而这个绘制在屏幕像素上的过程就叫做光栅化。而光栅化的目的就是找出一个几何单元(比如三角形)所覆盖的像素。
过程如下,首先读取三个顶点,然后将这三个顶点连为三角形。接下来判断像素们是否在三角形内,如果在就直接用像素着色器计算出来的颜色对它进行上色。不断地的循环,知道画完模型所有的三角形,我们就能看到我们模型的渲染效果了。

938b75f8722898461ae1eb5eb8770a2a.png


而一个三角形的颜色取什么可以有三种方法;
1)三个定点颜色取平均值
2)取某一个顶点的颜色
3)三个顶点颜色的渐变
具体用哪一种可根据实际情况进行选择。
而前向渲染和延迟渲染就是对模型上面的光照进行光栅化的过程。他们的不同之处也在于对光照渲染的顺序问题。


2前向渲染Forward Rendering
前向渲染会对场景里每一个几何体进行光栅化,就需要对每一个几何体计算场景所有的灯光来得到他们正确的光影效果,
我们可以通过深度测试来舍弃被遮挡的或在相机的视椎体内不可见的几何对象来进行优化,也可以通过舍弃不在相机视椎体内的灯光来进一步优化。
所以,被剔除的这些几何体和一些不可见的灯光的计算是完全浪费的。同时因为每个几何体都需要计算所有的灯光,所以计算量非常大,即使是GPU也很难负担,所以如果选择使用前向渲染的话,场景中需要注意灯光的数量。
前向渲染的一个典型特征是一个几何体从传入显卡进行处理到最后屏幕显示图形的整个过程是不间断的,是一个线性的处理过程。




3延迟渲染Deferred Rendering
从名字来看,延迟说明了Geometry到RenderTarget的处理过程不是连续的,在从GS输出的光栅化了的数据会输入到Geometry Buffer,也就是G-Buffer,在这里是不会计算光照的。
G-Buffer生成后,开始计算光照,实际上接下来的计算基本上全是G=Buffer中的图像合成过程,由此可见一个灯光的计算实际上只会对它覆盖的像素计算一次,所以灯光的渲染成本就大大降低了。
而且G-Buffer里包含的各通道信息同样可以在后期处理中使用,所以延迟渲染能够表现的后期效果更多。
延迟渲染的基本原理是通过MRT(multiple render targets)将几何体渲染到屏幕空间,渲染过程不包括光照,而深度缓冲,法向量缓冲以及颜色缓冲作为不同的缓冲区被写入,这些缓冲区能够提供足够的信息使片元着色器的每一个光源针对每一个像素完成光照计算。
知道了每一个像素的距离和它对应的法向量,我们就可以得到光源照射在该像素上的最终效果。



4如何选择

虽然对比起来前向渲染更加消耗资源,而且延迟渲染能有更多效果,但是在实际项目中,需要根据目标平台以及各方面配置条件来进行选择。比如,一般在VR游戏里面就会使用前向渲染,因为延迟渲染生成的各个缓存很占用带宽,VR没法带动,所以需要使用前向渲染。但是因为前向灯光比较费,所以我们需要把灯光数量调低一些。
另外前向渲染可以使用MSAA多重采样抗锯齿来得到更好的抗锯齿效果;而延迟渲染就只能依赖临时抗锯齿TAA。而且延迟渲染也不能处理半透明物体。除此以外,延迟渲染对显卡也有一定的要求,必须支持MRT(Multiple Render Targets),Shader Mode3.0以上。




         

评分

参与人数 1活跃度 +20 展开 理由
郝认真 + 20 【点赞】这很有大网气质!

查看全部评分

本帖被以下画板推荐:

还没有设置签名!您可以在此展示你的链接,或者个人主页!
使用道具 <
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表