概述
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
- 比如在典型棘手的室内,美术可以放置专门用于室内的光照渲染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的信息,可以让远处的光照信息更加的准确。
最后
以上就是怡然小伙为你收集整理的[gdc12]《孤岛惊魂3》的全局光照技术的全部内容,希望文章能够帮你解决[gdc12]《孤岛惊魂3》的全局光照技术所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复