Unity Shader 学习笔记(12) 渲染路径(Rendering Path)

44 篇文章 5 订阅
36 篇文章 5 订阅

Unity Shader 学习笔记(12) 渲染路径(Rendering Path)

参考书籍:《Unity Shader 入门精要》
官网API:ShaderLab: Pass Tags
官网API:Rendering Paths


渲染路径

决定了光照如何应用到Unity Shader中。

Pass块内可选择的渲染路径:
在这里插入图片描述


前向渲染路径(Forward)

是传统的渲染方式。
原理:渲染该对象的渲染图元,计算两个缓冲区信息(颜色缓冲区、深度缓冲区)。利用深度的缓冲判断片元是否可见,可见就更新颜色缓冲,否则就丢弃。
  如果有N个物体受M个光源影响就需要N*M个Pass。渲染引擎通常会限制每个物体的逐像素光照数目。

三种处理光照方式:

  • 逐顶点处理。
  • 逐像素处理。
  • 球谐函数(Spherical Harmonics, SH)处理。

在这里插入图片描述

Unity使用的判断规则:

  • 场景中最亮的平行光按逐像素处理。
  • Render Mode 为 Not Important的光源,会逐顶点或者SH处理。
  • Render Mode 为 Important的光源,会逐像素处理。
  • 如果上面得到的逐像素光源小于Quality Setting中的逐像素光源数量,会有过更多光源以逐像素的方式进行渲染。

前向渲染两种Pass:

  • Base Pass。一般一个Unity Shader定义一个(双面渲染的话两个),执行一次。
  • Additional Pass。如果有N个光源影响该物体,就会执行N次。

在这里插入图片描述

前向渲染可以使用的内置光照变量和函数:
在这里插入图片描述


顶点照明渲染路径(Vertex)

即逐顶点计算光照。硬件配置要求最低,运算性能最高,效果最差的类型,不支持逐像素效果(如:阴影、法线映射、高精度高光反射等)。

顶点照明渲染可以使用的内置变量和函数:
在这里插入图片描述


延迟渲染路径(Deferred)

使用额外的缓冲区(G缓冲,Geometry-buffer),存储离摄像机最近的表明的其他信息(表面法线、位置、材质属性等)。避免前向渲染在大量实时光照下时的性能急速下降。实现就用两个Pass,与场景光源数目无关,而是和屏幕空间大小有关。

主要包含两个Pass:

  1. 第一个Pass:只计算哪些片元可见(深度缓冲技术),可见的就存到G缓冲中。
  2. 第二个Pass:利用G缓冲中的片元信息,计算光照。

缺点:

  • 不支持真正的抗锯齿(anti-aliasing)功能。
  • 不能处理半透明物体。
  • 显卡必须支持MRT(Multiple Render Targets)、Shader Mode3.0及以上、深度渲染纹理以及双面的模版缓冲。

G缓冲区所包含的渲染纹理:
在这里插入图片描述

延迟渲染可以使用的内置变量:
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值