渲染管线概述

一、简介
渲染管线也称为渲染流水线,是芯片内部处理图形信号相互独立的并行处理单元。一个流水线是一序列可以并行和按照固定顺序进行的阶段,每个阶段都从它的前一阶段接收输入,然后把输出发给随后的阶段。

二、渲染管线
着色器定义了对象本身的外观(其材质属性)以及它如何对光线做出反应。由于照明计算必须内置到着色器中,并且有许多可能的光影类型,因此编写“正常工作”的高质量着色器将是一项相关任务。为了使它更容易,Unity具有表面着色器,其中所有的照明,阴影,光照贴图,前进与延期渲染事情都会自动处理。

以下为4个渲染路径:
1)正向渲染路径 Forward Rendering path
ForwardBase pass 一次性渲染 ambient、lightmaps、主要的方向光、以及非重点的(vertex/SH)光照
ForwardAdd pass 被用于任何 additive per-pixel lights;每个被这样的光照亮的物体的一次调用就完成了
如果使用了正向渲染,但着色器没有 forward-suitable 的通道(即既不存在ForwardBase也不存在ForwardAdd通道类型),那么该对象就像在Vertex Lit路径中一样呈现。
2)延迟渲染路径 Deferred Shading path
Deferred pass渲染所有光照所需的信息(在内置着色器中:漫反射颜色,镜面颜色,平滑度,世界空间法线,发射)。
它还将光照贴图,反射探针和环境照明添加到 emission chanel 中。

3)Legacy Deferred Lighting path
PrepassBase pass 渲染 法线和镜面指数;
PrepassFinal pass 渲染 通过结合纹理、光照、自发光材质属性,来渲染最终颜色。
所有的在场景中的光照都在屏幕空间单独完成。
4)Legacy Vertex Lit Rendering path
由于顶点照明最常用于不支持可编程着色器的平台,因此Unity无法在内部创建多个着色器变体来处理光照贴图 vs 非光照贴图情况。因此,要处理光照贴图和非光照贴图对象,必须明确写入多个pass。
Vertex pass 被用于非光照贴图物体。所有的光照被一次性渲染,使用的是 fixed function OpenGL/Direct3D光照模型(Blinn-Phong)
VertexLMRGBM pass 被用于光照贴图物体(当光照贴图是 RGBM 编码(PC和主机))。没有实时光照被应用、pass通道被期待用于处理 纹理和光照贴图的结合。
VertexLMM pass 被用于光照贴图物体(当光照贴图是 double-LDR 编码(手机平台))。没有实时光照被应用、pass通道被期待用于处理 纹理和光照贴图的结合。

同时渲染管线可分为固定渲染管线和可编程的渲染管线,这里我们介绍下可编程渲染管线中的着色器部分,它们的实现是基于GLSL语言。
顶点着色器:
1>将物体空间的数据(点)作为顶点着色器的输入
2>将所有在自己范围中的点全部遍历一遍,就是每个点都会算进行加工
3>高度可编程配置

片元着色器(fragment shader)
将裁剪空间中的点从裁剪空间->屏幕空间就是片元着色器的工作。
屏幕映射,就是之前说的第六步不是我们做,是显卡固定好了的算法。片元着色器是计算每个像素的颜色的。如果看过相关代码,你会发现片元着色器会返回一个四元数-(r,g,b,a)->分别为(red<红>,green<绿>,blue<蓝>,alpha<透明度>).
片元着色器:
1>将裁减空间的数据(点)作为片元着色器的输入
2>将所有在自己范围中的像素全部遍历一遍(三角遍历—Triangle Traversal),就是每个片元(像素)都会运算进行加工。
3>高度可编程配置

三、总结
本篇文章中,我们介绍了渲染管线的基础内容,同时提到了着色器的部分内容,这些在往期博客中我有过介绍,大家有兴趣的话可以去了解下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值