[情報] GDC講座: 幾何正確地渲染影子

作者: cjcat2266 (CJ Cat)   2016-04-29 06:07:45
Uncharted 4送廠壓片之後
整個工作室都閒了下來,大部分的人都跑去休假了
沒有休假的(包含我),現在就是隨意進行R&D
一部份程式人員在研究趕工期間錯過的GDC講座
我發現有個不用付費就可以觀看的講座,覺得很有意思,貼來分享一下
http://goo.gl/8Lylup
Advanced Geometrically Correct Shadows for Modern Game Engines
"適合現代遊戲引擎的進階幾何正確影子渲染法"
(by Jon Story)
以下是我個人的簡易詮釋
詳細附圖說明請看原講座錄影聯結
目前最多人用的即時影子渲染法是shadow map
這個方法有幾個缺點
- 影子的品質和運算效能取決於shadow map的解析度
- 高頻率的幾何細節,會因為shadow map解析度不夠而產生影子缺塊
- 為了解決stairing瑕疵而導入的補正權重會造成Peter Panning瑕疵
講座提供的解決方法為Frustum Traced Shadow (FTS)
大致步驟如下
1. 渲染好screen space depth buffer (SSDB)
2. 準備一個2D light space buffer (LSB)
3. 到目前為止都還跟shadow map一樣,接下來就不同了
準備一個screen space list buffer (SSLB)
每一個LSB像素代表一個linked list的開頭,連結著每一個SSLB裏面的像素
同一個linked list裏面的SSLB像素
代表world space座標映照到同一個LSB像素
4. 接下來在LSB上面rasterize所有shadow caster的三角形
每個三角形,都是先用geometry shader計算出因光源產生的影子frustum
針對每一個被涵蓋的LSB像素,iterate所有linked list串起來的SSLB像素
每一個SSLB像素對應的world space座標,測試是否有被影子frustum涵蓋
如果有被涵蓋,該像素就在此shadow caster三角形的影子內
這個做法最大的優點就是可以生出幾何正確的影子,跟shadow map解析度完全無關
效能瓶頸之一是linked list的長度
講座中有提供一個dynamic reprojection解法,可以有效消除這個效能瓶頸
基本上就是把過長的linked lists對應的SSLB像素區域,再做一次投射到一個新的SSLB
原本的非零SSLB區域也重新伸展到整個buffer的範圍,以有效利用記憶體
到目前為止做出來的是hard shadow
要做出soft shadow,Jon提出的做法是與percentage closer soft shadow (PCSS)做混合
當一個像素與shadow caster距離較近,則FTS權重較高,反之則PCSS權重較高
Jon稱這個混合方為Hybrid Frustum Traced Shadow (HFTS)
HFTS的效能需求普遍比shadow map高一些,但仍然能夠即時渲染
未來可望HFTS技術在更多的遊戲中出現
以上 :)
作者: yichen (蒼穹之下任我行)   2016-04-29 07:57:00
推推推!感謝分享!!
作者: nfs258147 (258)   2016-04-29 08:41:00
作者: a83a83cjcj (馬馬虎虎)   2016-04-29 08:49:00
作者: z82101096 (USA)   2016-04-29 08:57:00
感謝分享!
作者: dreamnook (亞龍)   2016-04-29 09:07:00
作者: RobinpeterH (Tabasco)   2016-04-29 10:28:00
感謝分享!
作者: Bencrie   2016-04-29 11:43:00
感謝分享 XD
作者: rurumi0318 (C萌的把拔)   2016-04-29 12:21:00
推! 真用心~
作者: jimmycool (北七)   2016-04-29 20:50:00
也可以讀讀去年的paper: http://bit.ly/1PRtFaY類似的idea 2004就有了,但是最近大家才知道怎麼做在現有的graphics pipeline裡面
作者: riveranb (River)   2016-04-30 00:14:00
作者: lemmii   2016-05-01 02:50:00
push

Links booklink

Contact Us: admin [ a t ] ucptt.com