Unity效能最佳化GPU渲染最佳化

weigang發表於2024-05-20
GPU最佳化不夠容易出現
1.發熱嚴重,耗電量高
2.FPS降低
GPU最佳化的方向:
1.畫素的複雜度,比如實施陰影(手遊中禁用),複雜的shader
2.頂點過多,也就是模型面數多、複雜
3.GPU的視訊記憶體頻寬
一、最佳化美術資源
1)合理規劃圖集
2)約定好模型的最大三角形面數
3)制定合理的粒子效果規範
4)減少模型數量,谷歌數量,使用法線貼圖代替細節模型
使用平臺推薦的壓縮方式
1)安卓平臺 ETC1
2)IOS平臺PVRTC
簡化或者最佳化Shader
1)少使用的函式:pow,sin,cos等
2)fixed、half、float慢慢斟酌著使用,切忌浪費,採取夠用的型別就行
3)在遊戲開始前就對Shader進行編譯和載入。
二、減少繪製數目
1)保持材質的數目儘可能少。這使得Unity更容易進行批處理。
2)使用紋理圖集(一張大貼圖裡包含了很多子貼圖)來代替一系列單獨的小貼圖。它們可以更快地被載入,具有很少的狀態轉換,而且批處理更友好。
3)如果使用了紋理圖集和共享材質,使用Renderer.sharedMaterial 來代替Renderer.material 。
4)使用光照紋理(lightmap)而非實時燈光。
5)使用LOD(細節級別漸變),好處就是對那些離得遠,看不清的物體的細節可以忽略。也就是根據距離的遠近使用不同模型級別,這樣就可以減少模型上面的頂點和麵片數量從而提高效能。
6)遮擋剔除(Occlusion culling)
三、最佳化視訊記憶體頻寬
1)壓縮圖片,減小視訊記憶體頻寬的壓力。例如:可以透過減色的方式減少圖片大小。許多UI其實用的色彩很少,用不到256色,這類圖片就可以使用減色壓縮。
2)使用MipMap(紋理貼圖金字塔)貼圖會根據攝像機距離模型的遠近而調整不同的不同質量的貼圖顯示。
Mipmap中每一個層級的小圖都是主圖的一個特定比例的縮小細節的複製品。因為存了主圖和它的那些縮小的複製品,所以記憶體佔用會比之前大。但是為何又最佳化了視訊記憶體頻寬呢?因為可以根據實際情況,選擇適合的小圖來渲染。所以,雖然會消耗一些記憶體,但是為了圖片渲染的質量(比壓縮要好),這種方式也是推薦的。

相關文章