我是靠谱客的博主 可爱白开水,最近开发中收集的这篇文章主要介绍Unity Taiwan: Unity 4.3 關於 Occlusion Culling : 最佳做法,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
這篇文章是由Jasin Bushnaie所撰寫,用來解釋Umbra在Unity 4.3上的遮擋剔除(Occlusion culling)的第二篇,本篇說明更深入的遮擋剔除調整,如果你錯過了第一篇基礎篇,請見:
http://unitytaiwan.blogspot.tw/2013/12/unity-43-occlusion-culling.html
本篇文章會給你一些技巧建議,幫助你獲得最好的遮擋效果。
何謂好的遮擋品質?
理所當然,首先第一件事情是確保場景中所設定的遮擋是有效果的,遮擋物儘可能放在又好又大的遮擋器後面(Occluder),精細的物件累積到和遮擋器差不多大的時候才從某個角度可以出現。
一般來說Umbra系統不支援遮擋器之間的交互運算,所以就算是茂密的叢林,有很多樹葉會遮擋掉它背後的東西,因為它只會做一次遮擋物的累積運算,所以就Umbra的觀點來看,一般在場景裡的樹和森林是很差的遮擋物,從另一方面來看,像山脈這樣的地形就是一個很好的遮擋物,Umbra一定可以如預期的捕捉到正確的遮擋資料庫裡。
在Umbra裡面主要有兩種物件類型:遮擋器(Occluders)和遮擋物(Occludees),前者是簡單的幾何圖形,Umbra也將它視為單一的實體模型。後者是畫面上那些物件,Umbra實際用來處理遮擋資料的。
遮擋器包含幾乎所有被標記為"靜態遮擋物件(Occluder static)"的物件,理所當然遮擋物就一定是標記了"靜態遮擋物件(Occluder static)"這個旗標。
就經驗來看,正常情況下你應該儘可能的標記為靜態物件好讓Umbra來剔除它們。
另外在預設情況下,大部分的靜態物件也可以作為遮擋器,只要確保你的物件是不透明的,否則就不適合成為一個遮擋器。(如果發生這樣的透明物件指定,Unity會警告你)
還有,如果你的物件包含很小的孔洞(例如有洞的乳酪或是茂密的植物),而且你希望從洞可以看到後面的東西,但調整smallest hole沒有達到你要的效果(關於smallest hole設定可以參考上一篇文章),你只需要把遮擋器的旗標移除就好了。
此外,由於遮擋器是被判定為實心,如果鏡頭沒有誤入遮擋器的情況下都可以正常剔除,這表示如果碰撞系統無法保證鏡頭不會誤入遮擋器,你應該把它的遮擋旗標移除。
物件的精細度
由於Umbra是處裡物件的遮擋剔除,物件不應該有誇張的大小,太大的物件是很難剔除,因為總是會看到物件的某一個部分,透過Umbra處理後幾乎是從來沒被剔除過。
所以如果有這樣的物件請把它分成小塊,像是可以把地形分成很多不同的區塊,不然整個地形從頭到尾都不會被剃除。
對遮擋剔除而言,分類規則最好自然一點,也就是說用正常邏輯思考物件歸類方法,分類太嚴格並不一定好,每一個群組應該是可視範圍接近的物件組合,另一方面來看,太過仔細的分類也可能導致一些不必要的效能消耗,實際上,如果場景有數以萬計遮擋物的話,這個問題就會常常發生。
也許應該強調的是,遮擋物分區問題比較大,遮擋器只是一個用來裝遮擋物的超大湯碗而已。
防漏模型
在上一篇文章裡,我簡單的介紹了Umbra如何像素化遮擋幾何,這些像素資料放在不同的區(Cell),然後通過傳送區(Portal)相互連結,Umbra在處理這個過程是很保守的,小的遮擋器通常會認定這些像素資料比實際上來的小,大的遮擋器會比實際上來的大。
這代表如果剛好有物件接合意外造成的孔,像素化的時候會修補掉而不會留下一個洞,這問題可能會導致奇怪的"遮擋洩漏",例如相機對著一面牆,但是因為牆上有隱形破洞導致牆後面看不到的物件都沒被剔除。
雖然像素化會幫你修補很多意外的孔洞,但在模型製作時就應該考慮模型的"水密處理",下一篇文章我也會介紹怎麼來解決這類問題。
找尋合適的參數值
不可否認,使用Umbra最難的部分是找到適合專案的各項參數,我們用Unity的預設值為出發點,假設Unity的單位對應你遊戲裡面的一米,且遊戲像是一個人類世界的規模(不是那種小分子世界或是有超大機器人的宇宙行星遊戲)。
在經驗法則上smallest hole開始可以給予較大的值,並邊做邊往下調到適合的感覺。
值調大一點有助於一開始快速的烘焙速度,當遊戲體驗中看到錯誤的遮擋才開始往下調整,直到整體感覺沒有問題。
至於Backface threshold參數,你可以從100開始如果你的遮擋數據過大或是當鏡頭很接近遮擋器時所呈現的結果怪異,試著把數值往下調90或更小。
最後的文章我會討論一些常見問題,各位也可以訪問www.umbrasoftware.com來或許更多消息。
最后
以上就是可爱白开水为你收集整理的Unity Taiwan: Unity 4.3 關於 Occlusion Culling : 最佳做法的全部内容,希望文章能够帮你解决Unity Taiwan: Unity 4.3 關於 Occlusion Culling : 最佳做法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复