欢迎来到天天文库
浏览记录
ID:39469417
大小:878.50 KB
页数:11页
时间:2019-07-04
《Unity场景优化》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Unity場景優化首先介紹下drawcall(這個東西越少你的遊戲跑的越快):在遊戲中每一個被展示的獨立的部分都被放在了一個特別的包中,我們稱之為“描繪指令”(drawcall),然後這個包傳遞到3D部分在螢幕上呈現出來。這就和你希望你的親友收到準備好的聖誕禮物需要包裝好然後穿過城市準時放在他應該出現的地方一樣沒什麼不同。你的CPU來完成包裝和傳遞他們的活,同時會消耗很多的頻寬,所以最終分配好這些關鍵性資源很重要。目前,真正可怕的事情是從描繪指令消耗遠景開始,每一個獨立的飛濺到地板上的血跡和一個角色或者一
2、具死屍消耗的位元組是一樣的多的:他們都消耗同樣的描繪指令。除此之外,沒有什麼更多的差別。那麼如何降低drawcall呢??那麼我們就用到Culling(剔除)技術。如果不應用這個技術,電腦是不管3721把場景裡所有的東西都送去渲染的。看得見的也渲染,看不見得照樣也送去渲染。很傻是吧,那咋辦呢。得告訴電腦,那個你看得見的渲染,看不見的就算了。於是就有了1.視錐體剔除(FrustumCulling)這個unity系統自帶了好像,就不用操心了。2.遮擋剔除(OcclusionCulling)Unity3專業版內
3、置了一個強大的OcclusionCulling外掛程式Umbra免費的遮擋剔除(OcclusionCulling) 遮擋剔除是一種什麼樣的特性呢,當一個物體被其他物體遮擋住而不在攝像機的可視範圍內時不對其進行渲染。.遮擋剔除在3D圖形計算中並不是自動進行的。因為在絕大多數情況下離camera最遠的物體首先被渲染,靠近攝像機的物體後渲染並覆蓋先前渲染的物體(這被稱為重複渲染,無效渲染"overdraw").遮擋剔除不同於視錐體剔除.視錐體剔除只是不渲染攝像機視角範圍外的物體而對於被其他物體遮擋但依然在視角
4、範圍內的物體則不包括在內.注意當你使用遮擋剔除時你依然受益於視錐體剔除(FrustumCulling).左邊的場景使用了遮擋剔除.右邊的場景未使用遮擋剔除.遮擋剔除的運行將通過在場景中使用一個虛擬的攝像機來創建一個物體潛在可視性狀態(set)的層級.這些資料可以讓每個執行時間內的攝像機來確定什麼能看見什麼看不見。通過這些資料,Unity將確定只把可以看見的物體送去渲染.這將降低drawcalls的數量並提供遊戲的運行效率.occlusionculling的資料由單元(cells)組成.每個單元是整個場景範
5、圍數值的一部分.更多特定的單元來自一個二叉樹(binarytree).OcclusionCulling使用兩個叉,一個給ViewCells(靜態物體)另一個給TargetCells(移動物體).ViewCellsmap給出了一個定義了靜態可視物體的索引清單(精確剔除後的靜態物體).非常重要的一點是在創建你的物體時要隨時注意,因為你需要在物體的尺寸和單元的尺寸間取得一個好的平衡.理想情況下,youshouldn'thavecellsthataretoosmallincomparisonwithyourobj
6、ectsbutequallyyoushouldn'thaveobjectsthatcovermanycells.有時你可以通過將大的物體拆成幾個部分來改進遮擋剔除效果.無論如何你仍然能夠將小的物體合併為一體來降低drawcalls,在它們都屬於一些小的組件的時候,occlusionculling將不起作用.確定元件中那個是可視的元件的選集和可視資訊被認為是PVS(潛在可視狀態PotentiallyVisibleSet).OcclusionCulling設置為了使用遮擋剔除需要進行相關的手動設置.首先你關卡
7、中的幾何體必須被分割成明顯的不同尺寸的塊.這也有助於佈置關卡中小塊的容易定義的區域被其他大物體遮擋(例如牆,建築物)這意味著每個單獨的mesh被確定是否渲染取決於occlusion資料.所以如果你有一個物體包含了房間裡的所有傢俱那麼所有的傢俱要麼全渲染,要麼全不渲染.是否渲染是基於元件而不是基於每個單獨物體自身的。在檢視面板(Inspector)你需要標識(tag)所有需要應用遮擋剔除的場景物體。最快的方法是是將你需要標示為Static的物體作為一個EmptyGameObject的子物體並設置這個Empt
8、yGameObject為Static,當option出現的時候選擇affectchildren.當子物體被taggedasStatic你可以取消子物體和EmptyGameObject的父子關係.檢視面板中的Staticcheckbox 下一步點擊Tools->OcclusionCulling.打開OcclusionCulling檢視面板,在面板中你會發現幾個數值被調整過了。這些數值前面描述過:-OcclusionCulling
此文档下载收益归作者所有