[sig09]Rendering Technology at Black Rock Studio

来源:互联网 发布:下载一亩田软件 编辑:程序博客网 时间:2024/04/30 11:00


siggraph09, black rock studio在《pure》&<split/second>中的渲染技术介绍:link

link1

这篇文章的含金量颇让我吃惊,短小强悍。

---------------------------------

ground cover render in pure

使用交叉摆放的sprite来render大量的草。

使用density map来放置草,有tile cache(camera移动的时候就不用完全重建),render的时候就是sprite。

---------------------------------

tree rendering

树的渲染中比较有挑战的是叶子的反锯齿,alpha test和alpha to coverage都不够好。

black rock是使用

  • 画alpha mask的时候输出color和alpha
    • color使用add作为blend op
    • alpha使用max作为blend op
  • shader里最后画tree的时候,把color.r和alpha做一个平均,然后blend
    • 这样就可以得到特别好的aa的结果
    • 同时因为有alpha mask,也不用担心排序的问题

----------
render in split/second

deferred lighting, g buffer format:

1

Albedo.r

Albedo .b

Albedo.g

Unlit.r

2

Normal.x

Normal.y

Normal.z

Unlit.b & Edge

3

Unlit.g

Specular

Motion.x

Motion.y


shadow:

  • screen space shadow map
  • pcf
  • 使用shadow edge mask来把需要pcf处理的地方划出来,只对这个部分来做pcf,这个对效率又不错的提升:
    • 使用downsample的方式来划出来pcf需要做的区域,效率差距:
    • Without mask

      6.4ms

      With mask

      1.7ms

      Calc mask

      0.6ms


irradiance volume:

像light propagation volume一样,把sh系数存到volume texture里,在deferred renderer中去sample sh,来做indirect lighting:cool。

在link1中继续细致的讲解。

  • cook time:
  • 使用octree来做场景划分
  • 最大的划分单位是一个streaming sector
  • 如果一个grid里面有geometry,就继续划分,到一个指定的最小值为止
  • runtime:
  • irradiance volume数据以sector来store和streaming
  • 使用64*64*16的volume texture
  • 存的方式不是sh,而是ambient cube,这里有一个表:

  • 我们可以看出,ambient cube是一个介于order1和order2之间的一个存储量
  • 每帧去更新volume texture,有cache,搞好的部分就不更新了,计算的时候会根据变化重新计算偏移
  • 从下图我们可以看见,volume texture lookup是非常昂贵的,quarter buffer一个比较合适的选择

  • 2m的resolution对于volume tex来说比较合适的(对于split/second来说)
  • split/second还尝试了使用non uniform volume texture,这样就有了一个lod的概念,但是这样就给cache的update带来问题,最后被弃用
  • 当然irradiance volume最棒的地方就是提供了real time indirect lighting的可能性

原创粉丝点击