link:
http://developer.amd.com/assets/D3DTutorial_Crytek.pdf
07年gdc crytek的一个文章,一些内容被wolfgang引用,拿下来一看,很不错。
volume相关技术就是处理衰减和散射。
开始将depth based render,也就是deferred shading的简化版。
读起来颇有点穿越的感觉,07年crytek还很扭捏的提一下depth based render,10年的时候已经满大街都是了。
发展恁快了。
skylight&global volume fog
这里的skylight不是指skylighting作用在物体上的效果,就是指render sky box本身。
这里一些做法可以是artist制作的,对于昼夜交替的情况,通过一些1d texture也可以做的不错。
这里是纯程序生成的做法。
主要是处理散射情况,使用mie算法来处理sample点,文中给出的是128*64,积分公式比较复杂,没什么必要列了。
结果存在floating point texture里,然后使用。
计算过程可以是cpu段多帧计算,也可以gpu端计算。
crytek提到有精度问题,这个resolution要自己把握一下了。
fog部分,是根据height和distance来计算浓度的。
使用exp来做衰减。
这个是global fog所以render的方式是render full screen quad这种方式。
global fog的color就使用sky light的颜色,sample那个texture就好。
fog volume
其实是global volume fog的一个特化,只是这次不是全屏quad,是一些具体形状。
- 类似deferred shading画point light的方式画box/sphere...到屏幕上
- pixel为最终pos,不像global的为depth反算出来的pos。
- apply上面的volume fog公式
cloud render
使用gradient based lighting+rim lighting达到这个效果。
distance cloud
使用2d plane借助一些volume property(normal, density texture)根据camera和sun的关系render distance cloud。