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

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

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


渲染路径

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

Pass块内可选择的渲染路径:
Unity Shader 学习笔记(12) 渲染路径(Rendering Path)_第1张图片


前向渲染路径(Forward)

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

三种处理光照方式:

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

Unity Shader 学习笔记(12) 渲染路径(Rendering Path)_第2张图片

Unity使用的判断规则:

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

前向渲染两种Pass:

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

Unity Shader 学习笔记(12) 渲染路径(Rendering Path)_第3张图片

前向渲染可以使用的内置光照变量和函数:


顶点照明渲染路径(Vertex)

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

顶点照明渲染可以使用的内置变量和函数:
Unity Shader 学习笔记(12) 渲染路径(Rendering Path)_第4张图片


延迟渲染路径(Deferred)

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

主要包含两个Pass:

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

缺点:

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

G缓冲区所包含的渲染纹理:
Unity Shader 学习笔记(12) 渲染路径(Rendering Path)_第5张图片

延迟渲染可以使用的内置变量:
Unity Shader 学习笔记(12) 渲染路径(Rendering Path)_第6张图片

你可能感兴趣的:(Unity,Shader,图形学,Unity,Shader,学习笔记,unity,shader)