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那個單純靠技術和單人能力就能殺出一條血路的時代已經過去了。
反射的部分是我的最愛,的確很不錯。