link:
http://www.nvidia.com/content/PDF/GDC2011/Epic.pdf
deferred shading
轻描淡写的提了一下,实在是在业界已经普及了,epic大肆宣扬就没意思了,只是更新下大家的knowledge base,unreal engine 3现在也defer了。
short hair
使用camera aligned triangle strip, 然后配上贴图,很类似grass的渲染。
重点在alias的处理,在单纯的1x buffer怎么做都是达不到高质量:
alpha test:alis
alpha blend:sort, fogging, dof
alpha to coverage:problems with many layers
最后选择是在4xmsaa buffer上做alphatest,然后resolve,可以说是super sample anti alias
per fragment AA
MSAA会出现左边白边的问题,原因是边缘处depth远近不一样,而必须有一个值。
unreal使用stencil把这个部分标出来,然后先做perpixel shading,这个过程stencil被全写过的部分就可以无视,被半写过部分就是可能白边的地方,再做一次perfragment shading就好了。
的确是比较不错地办法。
subsurface scattering
效果很棒,牵涉的论文读起来要费挺多的事情,pdf里面martin也就淡淡的一句,screenspace搜集lighting contribution,随机的搜集周围16个sample。
Reflection
使用billboard+raytrace的方式来完成。
平面反射,也就是把camera相对于反射面翻转,然后render场景的方法只能适合水或者单纯的平地面,对于复杂形状不行。
unreal的方式非常针对夜晚情形,只反射一些亮的东西,把这些东西做成billboard在反射中使用。
使用raytrace来sample反射的内容,由于是billboard,所以计算还是相对轻量级。
至于各种奇怪的反射,拉长条的,blurry的,就在这个算法下把reflection ray稍加变动就可以。
reflection shadow, epic做的真是够纠结的,
static是用一个offline生成的存在volume texture里的distance field
dynamic是用传统planar reflection的方法用反射camera画depth,根据depth的每一个texel来画quad产生final mask。
final mask与billboard一起作用营造出有shadow的反射。
这里的消耗感觉有点惊人。
Bokeh
估计这届gdc之后最明显普及的一个东东就是这个了,背景中亮片的效果。
基本算法还是brightpass检测,在亮的pixel上画quad或者类似的一些形状。
epic的dof solution还包括近景和远景的blur,所以使用了3个layer来区分,避免出现artifact。
由于这个效果是不需要准确的效果,所以low resolution的方案是肯定要使用的了。
其他,
文中提到一个能量守恒(energy preserving),就是对光照模型做一些矫正,保证radiance和irradiance能量上一致,这。。。玩家的火轮眼真的有能力识别这个么?
screen space subsurface scattering里面reference有点多,需要慢慢看一下,但是由于这个和手头工作相去有点远,所以优先级要降低了。
其实看下,这个demo里面的技术也没有太多特别的,但是拿出来就是震撼。
再次诠释了游戏发展至今绝不是一条腿可以跑的,tech,art,design三者都强的才是王者。
carmack那个单纯靠技术和单人能力就能杀出一条血路的时代已经过去了。
反射的部分是我的最爱,的确很不错。