發表文章

Related Posts Plugin for WordPress, Blogger...

6-21 Maintainer And Build Report Tool

圖片
今天要來介紹兩款好用的插件『Maintainer』及『Build Report Tool』。Maintainer主要內建三種功能,Issues Finder、References Finder [Unity 5.6+] 、Project Cleaner 。 https://assetstore.unity.com/packages/tools/utilities/maintainer-32199 首先,透過Tools/Code Stage/Maintainer/Show中打開。 Issues Finder 在專案中搜尋潛在的問題,如Missing Componet,Missing Prefab,Duplicate Component等等,還能夠以逐個或批量處理其中的問題,非常方便。如下圖開啟Maintainer視窗後,按下Find issues!按鈕。 如下圖,Maintainer幫我找到了一些GameObject的Component不見了,有可能是因為Script改名以後導致參考出問題。按下眼睛的按鈕。 會自動跳轉到該GameObject上。 Maintainer也會找到某些GameObject有重複的Component,可能是不小心或是某些原因導致的。 放了兩個重複組件當然有可能會出問題,有了Maintainer就能非常方便的找到問題了。 按下Automatically fix selected issues if possible按鈕,便能自動修復,但仍會有少許的問題是Maintainer無法自動修復的。注意在使用之前,專案最好都要有備份比較安全唷! Project Cleaner 搜尋Project中的垃圾,意指那些沒有被任何場景使用到的Assets,讓您檢查並逐個或以批處理模式刪除。按下Scan Project後就會自動搜尋這些垃圾。 但以我的專案為例,有部分資源都是從Assets Store上下載的,雖然沒有任何場景使用,但不代表以後不會使用。針對這一類的Assets我並不想刪除,可以使用Manager Filters增加這一類的資料夾。 將不想被搜尋的資料夾拉近框框內。 再度搜尋就只會列出不在Filter內的資料夾內容,請大家根據情況自行決定要不要刪除吧。 ...

6-20 Advanced Render System

圖片
接著介紹插件『Advanced Render System』。這款插件能 將物件的Render壓縮成一張貼圖,依照攝影機的角度模擬真實的3D畫面,可以根據距離決定較近的物件要替換成原本的3D,較遠的物件用一張貼圖代替。效果很真實,看不太出破綻。 以下為原作者提供的教學影片。 接著來試驗看看吧,首先在Tools/NGSTools/AdvancedRenderSystem。 場景中會自動建立GameObject名為AdvancedRenderSystem。 在Inspector視窗中指定Camera為我們遊戲用的Main Camera,然後按下Open Manager Window。 然後可以使用Add Selection將場景中選取起來的物件,加入Advanced Render System中。此處我選擇使用Add Selection As Group,Group的概念是將此3D物件(比如說一棟房屋)一同壓縮成一片貼圖的模樣。 要特別注意的是這個選項Add All Static Objects,使用這個選項有可能把一棟房屋分解成許多細小的部分,然後再壓縮成貼圖,所以反而會大量產生Draw Calll。 按下Show Selected Objects後,可以看見有加入到Advanced Render System中的物件。 實際執行時,離玩家比較遠的物件會如下圖,變成被壓扁的貼圖的模樣。 當主角靠近到特定距離後。 會再替換回正常的3D物件,以免被看出破綻。 接著來進行比較,下圖為開啟Advanced Render System後的效果,可見遠方的村莊幾乎看不出破綻。Batches為99,FPS為47.5,Tris為104.1k。 下圖為未開啟狀態,Batches為115,FPS為49.2,Tris為118.1k。 從上述實驗來看, Batches與Tris都有顯著下降 ,尤其當村莊的房屋夠多夠大的時候,效能提升的幅度會更明顯。FPS沒有差異太大,應是 量不夠多無法引發質變 。 另外提供上述所說的特殊情形,誤用Add All Static Objects選項時,有可能造成如下情形,房屋被細分成許多塊,導致Batches大量增加到300以上。 正常情形應如下圖,貼圖...

6-19 Super Level Optimizer

圖片
本章要來介紹插件『Super Level Optimizer』。首先,如果大家常看Unity 效能優化相關的文章,肯定都會看到Mesh Combine以及Texture Atlas。 理解優化的時候,注意CPU與GPU的差異。 任何優化的第一規則都是查明性能瓶頸在哪裡,因為優化GPU和優化CPU的策略常常是不同的(甚至常常是相互對立的——常常為了優化CPU而把它的一些工作交給GPU,反之亦然)。 GPU 常常受限於 填充率 和存儲器帶寬。 如果遊戲在較低的顯示解析度上運行更快,則很可能是受限於GPU的填充率。 CPU 常常受限於需要渲染的物品數量,我們通常叫它「 draw calls 」, 如果在PC上它常常多達幾千個,或者在移動設備上多達幾百個,那麼你可能需要優化物體的數量。 CPU優化:draw call數量 為了渲染一個物體到螢幕上,CPU需要做一些工作——比如,哪些燈光影響物體,建立著色器和著色器參數,給顯卡驅動發送繪製命令,然後準備發送給顯卡的命令。單個物體的CPU開銷並不昂貴,但是如果有很多可見物體,這些開銷會累加。 所以,舉例來說,比如你有1000個三角形,相比每個三角形一個獨立的網格,它們都在一個網格中對CPU開銷要低得多。這兩種方案對於GPU來說差別不大,但是CPU渲染1000個物體(代替1個)的開銷多很多。 為了讓CPU做更少的工作,減少可見對象的數量是很有效的:合併接近的物體。可以手工合併,也可以利用Unity的drawcall batching(批量draw call)。 Texture Atlas: 在物體中使用更少的材質。可以把獨立的紋理合併成一個更大的紋理圖集。 Mesh Combine: 合併物體使每個網格有至少幾百個三角形,並且整個網格只使用一種材質。合併兩個不共用同一材質的物體並不會提升性能,理解這一點很重要。擁有多個材質的最常見原因是兩個網格不共用相同的紋理,所以為了優化CPU性能,你要確保合併的物體共用相同的紋理。 上述說明參考自: Unity3D圖形性能優化最佳攻略 https://read01.com/O3K4em.html#.Wv6aqtOFOi4 GPU優化:LOD和Occlusion Culling https://3dactionrpg.blogspot.tw/...

6-18 Polygonal Culling

圖片
本章要來介紹這款插件『Polygonal Culling』,這款插件 可以根據攝影機的角度,將場景上的物件進行多邊形剔除,Unity內建的Occlusion Culling只能夠針對整個物件的顯示或隱藏,無法細分成小的多邊形。Polygonal Culling的原理是自動將物件的Mesh分割成多個細小的物件,然後再配合Unity的Occlusion Culling功能。 https://assetstore.unity.com/packages/tools/modeling/polygonal-culling-67638 首先,如下圖,遊戲已開啟Unity內建的Occlusion Culling功能。 接著,請記得要自己安裝好插件,然後選擇NGSTools Polygonal Culling。 此時場景上會自動建立一個GameObject名為Polygonal Culling。 選擇以後於Inspector視窗能看見Open window的選項。 點選以後會跳出一個使用視窗,有作者介紹,請選擇Let's start。 Max Stack應是指切割的深度,該值設越高,Block數量會越多。Min Triangles Count則是指一個Block內的Triangle數量,該值越高代表切割的程度越簡單。此處我使用作者影片中的預設值,後半段我會再針對這兩項數值進行更深入的實驗。接著按下Visualize按鈕。 接著會自動針對場景中為Static的物件進行判別,分割Block區域。好了以後選擇Next。 Culling type選擇Standard Occlusion,為什麼要跟Unity內建的Occlusion配合?因為我的地形系統使用Terrain,只有內建的Occlusion才可以搭配,Polygonal Culling插件對Terrain不起作用。 接著選擇Bake。 接著試驗看看吧,實際執行遊戲以後,發現火堆會依據主角的位置,只產生部分3D物件。 若未使用Polygonal Culling,則會顯示完整的火堆物件。 消失的時候也會整個消失。 如圖為村莊的部分。 見圖片左下角的房屋,主角靠近的時候,後半段因為比較遠又看不見,所以那部份的3...