GameDesign 板


LINE

粉絲團文章連結: https://www.facebook.com/life.is.kuso.game/posts/278181642573356 這個做法是看完GPU Pro7這本書的心得,在此要先感謝作者Anton Kai Michels跟Peter Sikachev。 這次要介紹的是古墓奇兵:崛起(Rise of the Tomb Raider)中的雪地 做法,有玩這遊戲的人可能會注意到,雪景做得還不錯。這系列的文章 將分成上、中、下三篇,上篇會先講解如何做出腳踏下的深度,中篇則 會介紹周圍隆起的雪堆計算方式,來讓場景顯得更真實,下篇則會說明 雪地的腳印痕跡如何隨時間恢復。 用於古墓奇兵的雪地做法,是一種被稱為延遲變形(deferred deformation) 的新技術,地形變形在實時渲染中,一直是個已知的未解決問題,以往 的解法呈現的細節不夠讓人覺得真實。而延遲變形則提供了一個有擴充 性、低記憶體、又可精細到公分等級的解決方案,並且在任何地形都能 呈現任意數量的變形,其細節不只能呈現走過的凹陷,甚至能呈現邊緣 被影響所造成的隆起,以及根據條件決定是否慢慢回填凹陷。 提到雪景, 蝙蝠俠:阿卡漢始源(Batman: Arkham Origins)的效果其 實很不錯(註一),不過其雪景只發生在平面的地形,在此就不詳談,由 於GPU在DirectX 11中的硬體支援,這種技術基本上利用渲染流程中去 處理,因此能做出非常準確的變形,可是卻無法用在任意地形上,且只 會有凹陷而不會有邊緣的隆起。 (https://cdn-images-1.medium.com/max/1200/1*w539g2-wHVmSLvc-hd4K2Q.png
在解說技術之前,需要先說明會用到的一些名詞,列舉如下: 雪地高度(snow height):  要變形的雪地的垂直座標(通常為vertex.z) 變形點(deformation points):  會造成變形的物件的3D座標位置 腳高度(foot height):  變形點的垂直座標(通常為point.z) 拖曳凹陷(trail depression):  拖曳痕跡的一部分,為雪地高度下踩下的部分 拖曳隆起(trail elevation):  沿著拖曳痕跡產生的小凸起,當推開雪時應該自然產生的效果 變形高度映射(deformation heightmap):  一張用來儲存變形的貼圖,32bit,1024*1024 凹陷深度(depression depth):  (雪地高地-腳高度)的絕對值 變形著色器(deformation shader):  將變形輸出到變形高度映射的著色器 填充著色器(fill shader):  用來計算在暴風雪中回填拖曳痕跡的著色器 雪地著色器(snow shader):  用於變形的雪的材質的著色器 想像一下原本的地形網格上,有一層雪的網格(mesh),然後有不定數 量的動態物件造成雪地變形,而要渲染雪的變形時,我們必須先得知 動態物件、雪跟地形之間的高度關係,所以必須先利用從正上方俯視 的方式,將這兩層網格分別渲染到兩個高度映射來得知高度,然後再 將動態物件渲染到一個變形高度映射,取得其在雪跟地形之間的逼近 值(clamp),當渲染雪的變形的時後,再從做好的變形高度映射取樣, 來取代雪原本的頂點與法線(normal)。 (作法的思路) (https://cdn-images-1.medium.com/max/1200/1*tal2N7TYFrmzW-X6r7XonQ.png
而這個簡單的做法有兩個缺點,一是必須先從鳥勘視角渲染一次來做 出兩張高度映射,二是每個動態物件需要一個繪圖指令(draw call), 解決的方式就是接下來要介紹的延遲變形。 延遲變形的思路,第一個就是不用先做一次雪網格的高度映射,而是 在雪的渲染流程中,去取用雪網格的頂點位置即是其高度,第二個是 變形的逼近值在被取樣時才計算,而非渲染時。所以精確的變形計算 是在渲染雪的時後,才稱之為延遲變形。重點是要將雪的高度從雪的 頂點著色器(vertex shader),傳到雪的像素著色器(pixel shader), 以計算每個像素的法線。其演算法如下: (延遲變形演算法概要) (https://cdn-images-1.medium.com/max/1200/1*M_xzTuHTQsm_BikvLawAqw.png
延遲變形演算法中的一個重點就是:把變形當成一個二次曲線(quadratic curve)。藉由近似動態物件形狀的點,去計算其變形高度。算法如下:  變形高度 = 點高度+ (到點的距離)平方 × 美術縮放值 這些變形點會被放到一個全域緩衝(buffer),而每個變形著色器則會 被分配到變形點周圍32像素平方的區域(1.64 m平方),然後利用原子 級同步最小值(atomic minimum)計算,輸出受影響的像素的變形高度 。由於可能有不同的動態物件去影響到同一個高度映射中的像素,所 以原子級同步取最小值是必須的。因為在DirectX 11中能夠做這種運 算的只有unordered access view(UAV),其形態是32-bit integer, 因此變形高度映射的型態也必須是R32_UINT。 註一:如果對蝙蝠俠的做法有興趣,可以參考GDC的資料 (http://www.gdcvault.com/play/1020177/Deformable-Snow-Rendering-in-Batman) --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.116.86.176
※ 文章網址: https://webptt.com/m.aspx?n=bbs/GameDesign/M.1468941917.A.3D8.html
1F:推 hinenak: 07/20 00:03
2F:推 riveranb: 推,好文 07/20 08:23
3F:推 wangm4a1: 推 07/25 03:01







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP