[gdc12]《孤岛惊魂3》的全局光照技术

来源:互联网 发布:淘宝网中老年服装品牌 编辑:程序博客网 时间:2024/04/29 22:01

这里写图片描述
http://www.gdcvault.com/play/1015326/Deferred-Radiance-Transfer-Volumes-Global
gdc12年的,farcry3使用的全局光照技术。

sum
一张图说明整个过程:
这里写图片描述
也就是会在场景里放置大量的probe,然后做预计算radiance transfer.
实时的时候,会首先对probe做lighting,然后lighting结果放入volume texture,进而lighting场景。

类似的技术让人想起irradiance volume这里最大的不同就是,radiance transfer volume放的是radiance transfer然后实时的再计算光照,这个最牛的地方,就是支持太阳光方向亮度变化的全局光照

radiance transfer
这个是在dx sample里就出现过的概念,本blog这里也做过解释。
这里写图片描述
PRT核心思想是建立起入射光和出射光的一个映射,这个映射是离线bake出来,与geometry,material相关的。
这个映射建立起来之后,给定入射光就可以以较低的代价计算出出射光,它有这样一些特点:
- 可以支持变化的光源
- 模型和材质需要保持稳定,以及简单数学能hold住的变化(比如旋转)
- 一般是处理低频的光照信息

radiance transfer概念清晰了之后,我们可以顺着pipeline走一轮
probe放置
这里是工具链方面,也非常的重要,probe的放置遵循三个原则:

  • 自动化:通过ray trace的方式,每4米,在静态模型(包括terrain)那里生成probe
  • 可以手动干预:volume类的做法都会遇到精度不足的问题,给美术提供一个手动干预的功能是很重要的
    • 比如在典型棘手的室内,美术可以放置专门用于室内的光照渲染volume和相应的probe
      这里写图片描述
  • debug visualize

radiance transfer bake
console上面(ps3和xbox360),bake

  • 三个向上的方向和一个向下的方向
  • sky visibility(用于矫正亮度)
    pc上面额外加一个local radiance transfer
    内存消耗也非常的低:
  • 一个probe,152byte
  • 一个sector上,console–15kb,pc–225kb

lighting
这部分就比较直接了,直接使用prt来做lighting就好,其中用到了sky visibility来矫正亮度。
然后类似irradiance volume,这里的光照信息,除了可以拿出来lighting场景,也可以拿出来lighting一些透明的东西。
这里写图片描述
这里写图片描述
值得一提的是一个低精度的occlusion信息,类似做法在cryengine,《刺客信条》等地方都有过,就是cook一个全场景的描述occlusion的信息,可以让远处的光照信息更加的准确。

0 0
原创粉丝点击