Unity场景优化.doc_第1页
Unity场景优化.doc_第2页
Unity场景优化.doc_第3页
Unity场景优化.doc_第4页
Unity场景优化.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Unity場景優化首先介紹下draw call(這個東西越少你的遊戲跑的越快): 在遊戲中每一個被展示的獨立的部分都被放在了一個特別的包中,我們稱之為“描繪指令”(draw call),然後這個包傳遞到3D部分在螢幕上呈現出來。這就和你希望你的親友收到準備好的聖誕禮物需要包裝好然後穿過城市準時放在他應該出現的地方一樣沒什麼不同。你的CPU來完成包裝和傳遞他們的活,同時會消耗很多的頻寬,所以最終分配好這些關鍵性資源很重要。目前,真正可怕的事情是從描繪指令消耗遠景開始,每一個獨立的飛濺到地板上的血跡和一個角色或者一具死屍消耗的位元組是一樣的多的:他們都消耗同樣的描繪指令。除此之外,沒有什麼更多的差別。那麼如何降低 draw call 呢?那麼我們就用到Culling(剔除)技術。如果不應用這個技術,電腦是不管3721把場景裡所有的東西都送去渲染的。看得見的也渲染,看不見得照樣也送去渲染。很傻是吧,那咋辦呢。得告訴電腦,那個你看得見的渲染,看不見的就算了。於是就有了1.視錐體剔除(Frustum Culling)這個unity系統自帶了好像,就不用操心了。2.遮擋剔除(Occlusion Culling)Unity 3專業版內置了一個強大的 Occlusion Culling 外掛程式 Umbra免費的遮擋剔除(Occlusion Culling) 遮擋剔除是一種什麼樣的特性呢, 當一個物體被其他物體遮擋住而不在攝像機的可視範圍內時不對其進行渲染。. 遮擋剔除在3D圖形計算中並不是自動進行的。因為在絕大多數情況下離 camera 最遠的物體首先被渲染,靠近攝像機的物體後渲染並覆蓋先前渲染的物體(這被稱為重複渲染,無效渲染overdraw). 遮擋剔除不同於視錐體剔除. 視錐體剔除只是不渲染攝像機視角範圍外的物體而對於被其他物體遮擋但依然在視角範圍內的物體則不包括在內. 注意當你使用遮擋剔除時你依然受益於視錐體剔除(Frustum Culling).左邊的場景使用了遮擋剔除. 右邊的場景未使用遮擋剔除.遮擋剔除的運行將通過在場景中使用一個虛擬的攝像機來創建一個物體潛在可視性狀態(set)的層級. 這些資料可以讓每個執行時間內的攝像機來確定什麼能看見什麼看不見。通過這些資料, Unity 將確定只把可以看見的物體送去渲染. 這將降低 draw calls 的數量並提供遊戲的運行效率.occlusion culling的資料由單元(cells)組成. 每個單元是整個場景範圍數值的一部分. 更多特定的單元來自一個二叉樹( binary tree). Occlusion Culling使用兩個叉, 一個給 View Cells (靜態物體) 另一個給 Target Cells (移動物體). View Cells map給出了一個定義了靜態可視物體的索引清單 (精確剔除後的靜態物體).非常重要的一點是在創建你的物體時要隨時注意,因為你需要在物體的尺寸和單元的尺寸間取得一個好的平衡. 理想情況下, you shouldnt have cells that are too small in comparison with your objects but equally you shouldnt 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的父子關係.檢視面板中的 Static checkbox 下一步點擊Tools-Occlusion Culling. 打開 Occlusion Culling 檢視面板,在面板中你會發現幾個數值被調整過了。這些數值前面描述過:-Occlusion Culling - Object遮擋剔除檢視面板的 object標籤.Object標籤可以讓你創建 Occlusion Areas GameObjects. 這些區域讓你指定什麼地方你會使用遮擋剔除.注意: 預設情況下如果你不創建任何遮擋剔除區域, 整個場景都會進行遮擋剔除.PropertiesQuick Select快速選擇和創建一個 Occlusion Area並且快速編輯它.None這個是預設值.Create New創建一個新的Occlusion Area GameObject.當你點擊 Create New in the Quick Select drop down, Unity將自動創建一個 Occlusion Area 並且刪除預設區域(整個場景). 現在你可以根據需要開始調整Occlusion Area(s).Occlusion Area 檢視面板.PropertiesSize定義 Occlusion Area的尺寸.Center選擇 Occlusion Area的中心. B默認為0,0,0 並在box的中心位置.Is View Volume定義攝像機的活動範圍區域. 點選這個選項才能應用遮擋剔除在Occlusion Area內的靜態物體.Is Target Volume如果你要遮擋剔除運動物體,打開這個選項.Target Resolution確定區域內的 Occlusion Culling精度. 即一個 Occlusion Area的單元尺寸. 注意: 這個選項只對 Target Areas(移動物體)起作用.Low減少計算時間但同時精度降低.Medium計算時間和精度中等,比較平均.High計算時間長但精度高.Very High精度很高,計算時間更長.Extremely High最高精度.注意: 計算時間令人髮指。如果攝像機處於遮擋區域之外或者任何物體超出區域, 這些物體將不會被遮擋剔除.Occlusion Culling - BakeOcclusion culling 檢視面板 bake tab.PropertiesView Cell Size每個 view area單元的尺寸, 尺寸越小遮擋剔除越精確. 這個數值用來平衡遮擋剔除的精度和存儲容量Near Clip PlaneNear clip plane 如果設置最小數值 那麼遊戲中所有攝像機都可看到.Far Clip PlaneFar Clip Plane 用於選擇 objects. 任何物體的距離大於這個設定數值都會被自動遮擋.(Should be set to the largest far clip planed that will be used in the game of all the cameras)Quality品質級別Preview開發階段使用這個 (ie,不是很準確但可以讓你御覽在遊戲中的大致表現)Production如果開發基本結束準備發佈那就該選擇這個(會耗費更多的時間但更精確)當你調整完這些數值後可以點擊 Bake按鈕開始處理Occlusion Culling 資料. 如果你對結果不太滿意,你可以點擊Clear 按鈕刪除以前的計算資料.Occlusion Culling - VisualizationOcclusion culling 檢視面板visualization 可視 標籤PropertiesQuick Select讓你快速選擇場景中的任何攝像機來觀看遮擋剔除的效果The near and far planes 定義了一個虛擬攝像機來計算遮擋剔除資料. 如果你有幾個攝像機 near 或 far planes不同, 你應該設置near plane 和largest far plane distance適配所有攝像機來調整物體的包括範圍.所有場景裡的物體只在數值範圍內起作用所有請確定你的所有物體都處於可視範圍.當你準備好生成 occlusion data, 點擊 Bake 按鈕. 記住在 Bake標籤的Quality selection box 中事先選擇 Preview 和 Production. Preview可以快速生成資料並可以快速檢查結果. Production 用於產品發佈前的生成和檢測.請記住遮擋剔除的資料計算生成速度取決於事先設置的cell levels(單元級別), 資料尺寸大小和精度. Unity會在視窗底部顯示 PVS 運算狀態.運算處理結束後, 你會在View Area看到一些不同顏色的cube. 顏色相同的區域共用遮擋剔除資料.點擊Clear 如果你想刪除所有遮擋剔除的事先計算好的資料(預計算數據).Moving Objects如果想應用遮擋剔除到一個運動物體你必須創建一個Occlusion Area然後設定其尺寸來適配運動物體的活動空間(注意:運動物體不能被標示為static).創建 Occlusion Area後, 檢查Is Target Volume checkbox 來遮擋剔除運動物體.移動物體的Occlusion Area propertiesSize設定 Occlusion Area 尺寸.Center設定 Occlusion Area的中心. 默認0,0,0 並位於box的中心.Is View Volume定義攝像機能到哪裡. 檢查這個數值來遮擋剔除Occlusion Area中的static objects .Is Target Volume遮擋剔除運動物體時必選Target Resolution確定區域內的遮擋剔除精度。這將決定Occlusion Area的單元尺寸. 注意: 只對 Target Areas起作用.Low減少計算時間但同時精度降低.Medium計算時間和精度中等,比較平均.High計算時間長但精度高.Very High精度很高,計算時間更長.Extremely High最高精度.注意: 計算時間令人髮指。添加完Occlusion Area後, 你需要瞭解它是如何劃分單元中的box. 如果想瞭解occlusion area如何計算運動物體,你必須在Scene View中點選 Target按鈕 並且 關閉 View 按鈕同時Occlusion Culling 檢視面板是打開的.Selecting Target (moving objects) or View (static objects) 讓你御覽 calculated data 的運作.Testing the generated occlusionocclusion 設置完畢後, 打開Cull Geometry option (in the Occlusion Culling window) 並在場景視窗移動 Main Camera.iScene View 中的Occlusion View mode當你在周圍移動Main Camera (無論是否在 Play mode下), 你將會看到不同的物體disable. 你在這裡需要找出的是occlusion data中的任何錯誤. 當你移動攝像機時你可能會發現會有物體突然出現在視野當中. 如果這種情況發生, your options for fixing the error are either to change the resolution (if you are playing with target volumes), or to move objects around to cover up the error. To debug problems with occlusion, you can move the Main Camera to the problematic position for spot-checking.運算處理結束後, 你會在View Area看到一些不同顏色的cube. 藍色 cubes表現的是Target Volumes的單元劃分. 白色 cubes表現的是 View Volumes的單元劃分.如果參數設置正確你會看到一些物體不被渲染. 這表示要麼這些物體不在攝像機視角範圍內要麼被其他物體遮擋住了.如果occlusion完成後, 場景內任何物體也沒有被遮擋, 拆分物體至更小的pieces 以便它們能被完整地包含在一個單元中. 要提醒朋友們的是,如果場景複雜,品質設置高的話,烘焙過程將漫長的令人髮指。趕緊升級電腦吧!對於沒有買專業版並無法使用umbra外掛程式的朋友也不必擔心,還有另外一個Culling剔除外掛程式可以選擇,是完全免費共用的。具體名字忘記了,不過去unity網站的討論版搜一下Culling關鍵字可以很容易找見。就到這裡 .就到這裡.轉自:/s/blog_409cc4b00100oivo.htmlLOD(Level-of-detail)是最常用的遊戲優化技術。如果你的程式可以定制開發應用LOD的模組,當然是很美好的事情。不過如果沒有也沒關係,大家可以使用UniLOD這個協力廠商的LOD外掛程式。免費共用的哦(向UniLOD開發者致敬,讚美偉大的共用精神!)以下是簡介:功能眾多,涉及到場景管理,模型優化,資源管理員,及顯示效果變化,且不需要腳本編寫,全部通過編輯器實現!目前此unity3d擴展為開源的,你可以下載到原始程式碼來研究學習。特色:1.自動簡化網格體(Windows + Unity Pro only) 根據使用者的設定自動減面。2.Level-of-detail 編輯器 方便快捷的創建LOD元件來切換不同的品質級別或通過設定距離數值來顯示或隱藏物體。 創建你的 LOD 場景 方便快捷的用 LOD 元件來替換現有元件將現有的場景轉換為擁有LOD管理的場景。 將單個的mesh和貼圖成組來降低draw calls 將場景存儲為 標準 assets 或者 asset 包 3.場景管理 Streaming 支持Stream your scene as the player moves through the world 資源自動 loaded/unloaded Stream from resource folder, or asset bundles Minimal performance impact with resource buffering 可以根據需要調整, 速度或者記憶體 Takes care of switching quality levels as the player moves though the world 充分優化, 使用最少的資源 4.資源管理所有asset bundles 和普通資源都以標準方式載入。Keeps reference counts on your resources and 自動釋放 5.完整植入 Unity 並只需要通過UnityEditor API來操作。 無需輸入代碼Sorry,場景管理和資源管理的有些內容沒搞懂就不亂翻譯了。連結:/content/lod擴展beta版本發佈unilod-beta-levelofdetail-and-streaming-support當然,Unity3d自己的地形是自帶LOD功能的,當你刷好你的地形後,你只需要調整Pixel Error這個參數即可。Unity3d會自動計算生成地形的LOD,無需你做其他的任何設置。要提醒朋友們的是,如果你使用了Lightmap,那麼同時使用LOD的時候會有一些麻煩,我們的辦法是製作模型的時候事先做好第二套uv(不使用Unity的自動計算lightmapUV功能),而且所有LOD的第二套UV的分佈位置都一致,很費工。不知道有沒有更好的方法!轉自:/s/blog_409cc4b00100o6qu.html動態即時燈光相比靜態燈光,非常耗費資源。所以除了能動的角色和物體(比如可以被打的到處亂飛的油桶)靜態的地形和建築,通通使用Lightmap。強大的Unity內置了一個強大的光照圖烘焙工具Beast,這個東東是Autodesk公司的產品(可怕的壟斷,感覺和3d沾邊的軟體丫都要插一手)。據說用來製作過殺戮地帶和鏡之邊緣。 鏡之邊緣建築場景漂亮乾淨的光影,Lightmap的效果。在U

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论