看板 GameDesign 關於我們 聯絡資訊
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技術在更多的遊戲中出現 以上 :) -- Web http://AllenChou.net Twitter http://twitter.com/TheAllenChou LinkedIn http://linkedin.com/in/MingLunChou -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 160.33.43.15 ※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1461881269.A.BCD.html ※ 編輯: cjcat2266 (160.33.43.15), 04/29/2016 06:27:39
yichen: 推推推!感謝分享!! 04/29 07:57
nfs258147: 推 04/29 08:41
a83a83cjcj: 推 04/29 08:49
z82101096: 感謝分享! 04/29 08:57
dreamnook: 推 04/29 09:07
※ 編輯: cjcat2266 (160.33.43.15), 04/29/2016 09:10:35
RobinpeterH: 感謝分享! 04/29 10:28
Bencrie: 感謝分享 XD 04/29 11:43
rurumi0318: 推! 真用心~ 04/29 12:21
LEDtorch: 04/29 15:12
jimmycool: 也可以讀讀去年的paper: http://bit.ly/1PRtFaY 04/29 20:50
jimmycool: 類似的idea 2004就有了,但是最近大家才知道怎麼做在 04/29 20:50
jimmycool: 現有的graphics pipeline裡面 04/29 20:50
riveranb: 推 04/30 00:14
lemmii: push 05/01 02:50