由SRP(可编程渲染管线)说开去

前言:上上周UNITE,上一周开始看SRP,准备给大家分享,正好科普下渲染管线,于是有此文。

渲染管线(Render Pineline)

  1. 示意图
    img

  2. OPEN Render Pineline
    img

A. DrawCall

B. 渲染顺序

  1. 画家算法->深度测试
    img
    img
  2. 先渲染不透明物体(进行深度测试、写深度,通常意义下)
    img
    img
  3. 后渲染透明物体(进行深度测试、不写深度,通常意义下)
    img

C. 裁剪以及光栅化

  1. 视锥体
    img
  2. 投影转换之后裁剪
    img
  3. 光栅化
    img

内置渲染管线 (Built-In Render Pipeline)

1. 前向渲染

  1. Forward Base
    主方向光

  2. Forward Add
    第二展之外的方向光、点光、Spot Light

img
img

缺点:每多一个灯光、每多一个阴影,所有DrawCall多一倍

img

SRP小Demo参考链接

2. 延迟渲染

img

缺点:

  1. 不能使用MSAA
  2. 不支持Blending
  3. 需要硬件支持

可编程渲染管线 (Scriptable Render Pipeline)

A. Render Pipeline总体流程

img

B. Command Buffer

img

Command Buffer示例:
img

C. 自定义管线设置

img

HDRP & LWRP

HDRP

  1. 新的光照架构
    img
  2. 全线性空间、光强遵循物理、Reflection Probe、面积光
    img
    img
  3. 各向同性的散射GGX使得粗糙物体更加真实,添加次表面散射
    img
  4. 更多的内置着色器特性、以及贴花支持
    img
    img

HDRP详细参考链接

LWRP

最主要的差别是在光照计算、GI、阴影。
img
img
img
img

Unity2018渲染示例:
img
img

LWRP详细参考链接

小结

img
img

UNITE北京上关于SPR的讲演很水,GDC上有一个关于SRP的分享很好,推荐。

总体来说,不同的游戏、不同的平台得根据情况,去适用不同的渲染管线,如果游戏类型很专一,比如没有透明shader但是想用很多的灯光和阴影,就可以采用LWRP替代内置管线。或者根据具体情况订制。

附带CRT(Custom Render Texture)和 Shader Graph

CRT

Render Texture + Material(shader) -> new Texture

img
img

Shader Graph

img