1. 程式人生 > >Unity3d 大場景優化 遮擋剔除

Unity3d 大場景優化 遮擋剔除

首先介紹下draw call(這個東西越少你的遊戲跑的越快):

在遊戲中每一個被展示的獨立的部分都被放在了一個特別的包中,我們稱之為描繪指令draw call,然後這個包傳遞到3D部分在螢幕上呈現出來。這就和你希望你的親友收到準備好的聖誕禮物需要包裝好然後穿過城市準時放在他應該出現的地方一樣沒什麼不同。你的CPU來完成包裝和傳遞他們的活,同時會消耗很多的頻寬,所以最終分配好這些關鍵性資源很重要。目前,真正可怕的事情是從描繪指令消耗遠景開始,每一個獨立的飛濺到地板上的血跡和一個角色或者一具死屍消耗的位元組是一樣的多的:他們都消耗同樣的描繪指令。除此之外,沒有什麼更多的差別。

那麼如何降低 draw call 呢??那麼我們就用到Culling(剔除)技術。如果不應用這個技術,電腦是不管3721把場景裡所有的東西都送去渲染的。看得見的也渲染,看不見得照樣也送去渲染。很傻是吧,那咋辦呢。得告訴電腦,那個你 看得見的渲染,看不見的就算了。於是就有了 1.視錐體剔除Frustum Culling這個unity系統自帶了好像,就不用操心了。 2.遮擋剔除Occlusion Culling

遮擋剔除(Occlusion Culling

遮擋剔除是一種什麼樣的特性呢, 當一個物體被其他物體遮擋住而不在攝像機的可視範圍內時不對其進行渲染。

. 遮擋剔除在3D圖形計算中並不是自動進行的。因為在絕大多數情況下離 camera 最遠的物體首先被渲染,靠近攝像機的物體後渲染並覆蓋先前渲染的物體(這被稱為重複渲染,無效渲染"overdraw"). 遮擋剔除不同於視錐體剔除. 視錐體剔除只是不渲染攝像機視角範圍外的物體而對於被其他物體遮擋但依然在視角範圍內的物體則不包括在內. 注意當你使用遮擋剔除時你依然受益於視錐體剔除Frustum Culling.

Unity3d遊戲場景優化雜談(4)

左邊的場景使用了遮擋剔除. 右邊的場景未使用遮擋剔除.

遮擋剔除的執行將通過在場景中使用一個虛擬的攝像機來建立一個物體潛在可視性狀態(set)的層級. 這些資料可以讓每個執行時間內的攝像機來確定什麼能看見什麼看不見。通過這些資料

, Unity 將確定只把可以看見的物體送去渲染. 這將降低 draw calls 的數量並提供遊戲的執行效率.

occlusion culling的資料由單元(cells)組成. 每個單元是整個場景範圍數值的一部分. 更多特定的單元來自一個二叉樹( binary tree. Occlusion Culling使用兩個叉, 一個給 View Cells (靜態物體) 另一個給 Target Cells (移動物體). View Cells map給出了一個定義了靜態可視物體的索引列表 (精確剔除後的靜態物體).

非常重要的一點是在建立你的物體時要隨時注意,因為你需要在物體的尺寸和單元的尺寸間取得一個好的平衡. 理想情況下, you shouldn't have cells that are too small in comparison with your objects but equally you shouldn't have objects that cover many cells.有時你可以通過將大的物體拆成幾個部分來改進遮擋剔除效果. 無論如何你仍然能夠將小的物體合併為一體來降低draw calls,在它們都屬於一些小的元件的時候, occlusion culling 將不起作用.確定元件中那個是可視的元件的選集和可視資訊被認為是 PVS (潛在可視狀態Potentially Visible Set).

Occlusion Culling設定

為了使用遮擋剔除 需要進行相關的手動設定.首先 你關卡中的幾何體必須被分割成明顯的不同尺寸的塊. 這也有助於佈置關卡中小塊的容易定義的區域 被其他大物體遮擋(例如牆,建築物) 這意味著每個單獨的mesh被確定是否渲染取決於 occlusion 資料. 所以如果你有一個物體包含了房間裡的所有傢俱那麼所有的傢俱要麼全渲染,要麼全不渲染. 是否渲染是基於元件而不是基於每個單獨物體自身的。

在檢視面板(Inspector 你需要標識(tag 所有需要應用遮擋剔除的場景物體。最快的方法是是將你需要標示為 Static的物體作為一個 Empty GameObject 的子物體並設定這個Empty GameObject Static,option出現的時候選擇affect children. 當子物體被tagged as Static你可以取消子物體和Empty GameObject的父子關係.

Unity3d遊戲場景優化雜談(4)

檢視面板中的 Static checkbox 

下一步點選Tools->Occlusion Culling. 開啟 Occlusion Culling 檢視面板,在面板中你會發現幾個數值被調整過了。這些數值前面描述過:-

Occlusion Culling - Object

Unity3d遊戲場景優化雜談(4)

遮擋剔除檢視面板的 object標籤.

Object標籤可以讓你建立 Occlusion Areas GameObjects. 這些區域讓你指定什麼地方你會使用遮擋剔除.

注意: 預設情況下如果你不建立任何遮擋剔除區域, 整個場景都會進行遮擋剔除.

Properties

Quick Select

快速選擇和建立一個 Occlusion Area並且快速編輯它.

None

這個是預設值.

Create New

建立一個新的Occlusion Area GameObject.

當你點選 Create New in the Quick Select drop down, Unity將自動建立一個 Occlusion Area 並且刪除預設區域(整個場景). 現在你可以根據需要開始調整Occlusion Area(s).

Unity3d遊戲場景優化雜談(4)

Occlusion Area 檢視面板.

Properties


Size

定義 Occlusion Area的尺寸.

Center

選擇 Occlusion Area的中心. B預設為0,0,0 並在box的中心位置.

Is View Volume

定義攝像機的活動範圍區域. 點選這個選項才能應用遮擋剔除在Occlusion Area內的靜態物體.

Is Target Volume

如果你要遮擋剔除運動物體,開啟這個選項.

Target Resolution

相關推薦

Unity3d 場景優化 遮擋剔除

首先介紹下draw call(這個東西越少你的遊戲跑的越快): 在遊戲中每一個被展示的獨立的部分都被放在了一個特別的包中,我們稱之為“描繪指令”(draw call),然後這個包傳遞到3D部分在螢幕上呈現出來。這就和你希望你的親友收到準備好的

Unity3D-遊戲場景優化遮擋剔除(Occlusion Culling)的使用

在大型3D遊戲場景中,如何優化遊戲效能是非常重要的一步。一般遮擋剔除是非常常用的。接下來我們看看如何使用遮擋剔除。 假設這是一個遊戲場景。 下面這是相機的視口,相機的視覺是看不到很大立方體後面的那些小的立方體。   在運行遊戲的過程中,我們為了提高遊戲的效能,我們不希望渲染相機看不到的物體。

【Unity】unity中關於遊戲場景優化——遮擋剔除

遮擋剔除,當一個物體被其他物體遮擋住而不在攝像機的可視範圍內時不對其進行渲染。.遮擋剔除在3D圖形計算中並不是自動進行的。因為在絕大多數情況下離camera最遠的物體首先被渲染,靠近攝像機的物體後渲染並覆蓋先前渲染的物體(這被稱為重複渲染"overdraw").遮擋剔除不

Unity3D之InstantOC(遮擋剔除

toc 也有 光柵 nbsp 組裝 平臺 深度緩存 們的 distance 首先要先從網上下載InstantOC組件(網上資源很多的不用跟我要) 那麽介紹一下這個組件是幹什麽用的,為什麽要用它,有什麽好處 在遊戲中我們看到的物體,是如何呈現給我們的呢?如圖: 渲染管線

unity3d 場景地形怎麼做的啊

就是類似圖片裡這樣的大場景地形 怎麼做的啊 要用什麼外掛嗎 在u3d裡做這樣的地形 太卡了 怎麼辦啊 你可以製作很多精細的小場景、小地形,離的進了,就依次載入進來;離得遠了,就把那些精細的地形給銷燬掉。 你可以建立好幾個地形,設定他們的高度圖解析度,解析度越高就越

unity GPU優化(Occlusion Culling遮擋剔除,LOD多細節層次,GI(Global Illumination)全域性光照)

渲染管線: 定義:圖形資料在CPU上經過運算處理,最後輸出到螢幕的過程  1. 頂點處理:接收模型頂點資料、座標系轉換 2. 圖元裝配:組裝面、連線相鄰的頂點,繪製為三角面 3. 光柵化:計算三角面上的畫素,併為後面著色階段提供合理的插值引數(以及深度值) 4. 畫素處

Unity場景資料載入及優化方案

前段時間,有幾個虛擬模擬公司跟我請教關於大地形的載入優化問題,它們使用的引擎都是自己研發的,引擎對於開發者來說,大同小異,它們的基本構造是一樣的,關鍵是在於解決問題的方法,正是基於這個前提寫了這個課程,希望給讀者提供一些解決問題的思路。 目前,大地形動

Occlusion Culling遮擋剔除理解設定和地形優化應用

這裡使用的是unity5.5版本 具體解釋網上都有,就不多說了,這裡主要說明怎麼使用,以及引數設定和實際注意點 在大場景地形的優化上,但也不是隨便烘焙就能降低幀率的,必須結合實際情況來考慮,當然還有透明物體問題和動態物體的剔除等等都將詳細說明。   首先說一下烘焙的關係 因

unity 效能優化遮擋剔除(Occlusion Culling) 官方版

遮擋剔除 (Occlusion Culling) 功能可在物件因被其他物體遮擋,當前在相機中無法看到時,禁用物件渲染。該功能不會在三維計算機圖形中自動開啟,因為在大部分情況下,離相機最遠的物件最先渲染,離相機近的物件覆蓋先前的物體(該步驟稱之為“重複渲染 (overdraw)

深入淺出聊Unity3D項目優化:從Draw Calls到GC (難度2 推薦5)

分配 shade 觸發 比較 抉擇 share 關鍵字 兩個 聲明 原文出處: 慕容小匹夫的博客(@慕容小匹夫) 前言: 剛開始寫這篇文章的時候選了一個很土的題目。。。《Unity3D優化全解析》。因為這是一篇臨時起意才寫的文章,而且陳述的都是既有的事實,因而給自己“

Mysql千萬級優化

數據庫服務 時間段 系統 時也 導致 slave 如何 1.5 傳統 Mysql的單張表的最大數據存儲量尚沒有定論,一般情況下mysql單表記錄超過千萬以後性能會變得很差。因此,總結一些相關的Mysql千萬級大表的優化策略。 1.優化sql以及索引 1.1優化sql

Ceph部署安裝與性能調優實踐視頻課程(應用場景+優化

調優 term process 視頻課程 場景 無限 指標 同時 san Ceph部署安裝與性能調優實踐視頻課程(應用場景+優化) 【下載地址:https://pan.baidu.com/s/1hbmJwvNWOcGzu-7wcs7O7A 】 在虛擬化及雲計算技術大規模應用

MySQL優化方案

基於用戶 保存 優先 完成 優化方案 想要 存儲 addition 精確 MySQL大表優化方案 mysql 168 當MySQL單表記錄數過大時,增刪改查性能都會急劇下降,可以參考以下步驟

Tomcat 日誌設定 減少不必要的日誌,針對tomcat日誌過優化

Tomecat本身日誌優化 1、使得只生成catalina.out 2、自動按日切割壓縮打包日誌(tar.gz) 3、刪除15天前的舊檔案 4、使用cronolog定時執行該指令碼 步驟一:刪除webapps下的原始檔案,修改conf/logging.properties檔案 #2loca

通過JS動態切換場景xml

我們在利用krpano去製作720全景圖的時候,通常會遇到需要在兩個大場景下切換的情況,或許我們可以通過不同連結去跳轉,但是這樣使用者的體驗效果極差,因此我們可以通過JS動態切換大場景xml,具體步驟如下: 第一步:將需要切換的場景**.xml、panos裡面的檔案複製到相應目錄下 第二步:在tour.x

Unity3D無縫場景切換解決方案 - 簡單場景切換

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

地圖構建中不得不面對的問題—場景下的地圖構建與閉環

  開篇前試想這樣兩個場景:   在一個相對較小的地方(如房間),讓你快速找某個東西,是不是很容易,很清楚自己在哪裡,要怎麼拿到他。   然後,把你放到一個大場景(如商場),在不熟悉的情況下,是不是有點慌?   這兩個場景的典型區別就在於場景的大小不同,需要人處理的資訊量不同。同理,機器

高頻寫入redis場景優化

前言 工作中經常遇到要對redis進行高頻寫入,但是對於讀取時資料的實時性要求又不高的場景。為了優化效能,決定採用本地快取一部分資料整合後寫入。 依賴 <dependency> <groupId>com.google.guava</groupId> <art

MySQL千萬級優化解決方案

MySQL千萬級大表優化解決方案 非原創,純屬記錄一下。 背景 無意間看到了這篇文章,作者寫的很棒,於是乎,本人自私一把,把乾貨儲存下來。:-) 問題概述 使用阿里雲rds for MySQL資料庫(就是MySQL5.6版本),有個使用者上網記錄表6個月的資料量近2000萬,保留最近一年的資料量達到

Unity場景優化初探

一、什麼是批處理?   我們知道Unity3D在螢幕上繪製一個圖形本質上呼叫OpneGL或者DirectX這樣的API,因此在這個過程中會產生一定程度上的效能消耗。DrawCall是OpenGL中描述繪製次數的一個量,例如一個基本的OpenGL繪製流程是設定顏色->繪