Forward+ Shading架构

Forward+ = Tile based Light Culling + Tile based Forward Rendering

整体渲染架构分为如下3大步骤:

1、PrePass
将场景的min z、max z渲染至z-buffer。

2、Tile based Light Culling
需要用到CS及其并行数据同步机制,是最复杂的一步。

  1. 将屏幕划分为8px x 8px的多个tile,每个tile对应一个thread group
  2. 针对每个thread group,结合其四个角与摄像机位置,并行计算其在viewer空间下的frustum多面体的4个面;每个group计算一次
  3. 针对每个thread group,发起8x8个thread,每个thread求得所在像素位置的max z与min z。然后利用group share数据同步机制,存储到group share data里。至此每个tile所对应的frustum构造完毕(共6个面)
  4. 针对每个thread group,利用其8x8个thread,每个thread承载一盏light的culling,可并行实现64盏灯的culling。Culling实现采用分离轴定律来判定tile frustum与light是否相交。并利用group share数据同步机制,将所有与tile frustum相交的light索引号存储到group share data中,形成tile所对应的light列表
  5. 针对每个thread group,发起1个thread,利用全局数据同步机制,将其tile所对应的light列表统一存入某全局数据区域。至此,所有tile所对应的light culling操作执行完毕。

3、Tile based Forward Shading
在ps中,根据像素位置判断出当前所属的tile,然后根据tile所对应的light列表,索引所有与tile相交的light,一次性进行所有光照与着色计算。

posted on 2021-11-08 10:40  c_dragon  阅读(72)  评论(0编辑  收藏  举报

导航