


點擊看看視頻講解:UE4中運用自定義深度剔除內三角(內三角切片)
注意,距離攝像頭近的對象幾乎是黑色的,可能很難看得見!
2. 渲染物體邊框
為了渲染特定網格的輪廓(比如一個掉下的同伴、一個可以利用的戰利品箱子等等),我們需要一個緩存去抓取到他們的陰影。自定義深度對這樣的需求來說非常完美。
自定義深度給我們的對象填滿了深度信息,所以我們可以在后期處理時用附近的像素做一個簡單的深度比對。如果一個附近單元有深度信息但它的像素並沒有,那我們就用輪廓的顏色給它上色。
我們可以用另外一個技巧通過比對自定義深度和場景深度(Scene Depth)給所有閉合幾何圖案畫上一層半透明的覆蓋區。如果自定義深度比場景深度大,那就給場景深度進行一個融合。
在后期效果中結合使用這兩種技巧的結果如下:
我跳過了大多數實現過程的細節,如果你有任何問題,可以盡管在下方留言問問。最后的效果我也做好了大家可以任意下載,可在你們的游戲中隨意修改和使用。
----------------------------
輪廓后期處理【下載點這里】
閉合像素帶有半透明圖層的輪廓后期處理材料
在往你項目的內容文件夾復制uasset為后綴的文件之后,千萬記得在你場景里加入一個叫作『后期處理卷(Post Process Volume)』,然后打開『無限制(Unbound)』屬性,而且別忘記在『可混入(Blendables)』里放入后期效果材料。
----------------------------
3. 內三角切片(Culling Inner Triangles)
當在模型上應用透明度時比如說在擁有內三角的角色上時(眼鏡、嘴巴、手臂、或者有一點盔甲嵌入皮膚上時),會看到材料上有一個惹眼的高亮處,怎么看都不對勁。這種情況我們就可以使用自定義深度來解決。
通過使用自定義深度緩存來渲染我們的角色我們可以剔除在網格外殼下的任何像素。當比較場景深度和自定義深度時一點深度補償是需要添加的,以防止過多像素包括外殼被剔除了。為了這個目的的材質設置其實很簡單:
材質節點——復制這個網址里的內容,你可以直接粘貼到你的材質里。(項目源代碼在GitHub上可找到)
我在下面的設置里做了分別啟用和關閉“深度的剔除”的效果對比。右邊的角色用紅色顯示所有閉合像素。我對每個角色渲染兩次以讓它們運行於一定的限度里,這樣透明材料不會渲染進自定義深度里(The character on the right displays all occluded pixels in red. I rendered each character TWICE to work around a limitation where transparent materials do not render into custom depth at all)(這對於場景深度來說很正常,但當在一個有透明效果的網格上明確應用自定義深度時則是不可取的)。你可以下載項目源代碼去看清這都是怎么完成的。
點擊觀看教學視頻:在UE4中運用 自定義深度 去剔除內三角
在游戲《Switch》上我們運用這個技術在一種隱身效果上,讓它有一個更流暢的“殼”,同時高亮一個有着很多重疊像素的網格。
非常重要的是我們需要知道如果多種材質運用這個技術的話只有最靠近攝像頭的物體能夠准確地進行剔除動作。在這幅圖片中你可以看到當多個網格重疊時有可能發生錯誤。所以考慮使用這個技術時應該把這種現象考慮在內(本文由52vr.com用心翻譯)。如果只是少量地運用這種方式或者用在連續性的獨立場景上,則可能永遠都不會有問題。
這個問題在做剔除操作的時候可能可以通過添加一個最大值的深度增量來解決。我對這個點沒有過多闡述,以后如果開始有實際操作性的問題我可能就回來說一說這個。
4. 其它用法
在游戲《Switch》上我們給一些功能用上了自定義深度,其中一個有着一種X射線材料,可以把牆后面的玩家暴露出來。我添加了一個關於這個想法的早期證明短視頻,請點擊觀看。
5. 多顏色輪廓效果(Multi-Color Outline Effect)
在多個引擎版本之前『模板索引(Stencil Index)』緩沖功能是配合自定義深度一起工作的。這讓我們能夠在其它許多很酷的效果中制造多顏色輪廓的效果!點擊這里了解這種新效果的更多信息,其中包括這種處理程序的下載鏈接。
6. 問題和局限性
自定義深度並不能在半透明材質上工作。在這種情況下你需要網格的一個復制品,這個復制品是一種簡單的非透明材質,打開了自定義深度功能而關閉了渲染主要通道(Render Main Pass)。相關信息可以查看AnswerHub
因為緩沖里都是應用了自定義深度的物體,在有多層重疊的網格時(一個疊着另一個)它將不會發揮作用,這取決於你怎樣使用深度數值——如果你使用自定義深度想要剔除內三角的話,一個透明網格可能被完全剔除。一種可能的變通方法是當你在尋找內三角以去除錯誤的時候,添加一個最大值的深度差別。
7. 參考資料