在Player?Settings?中開啟Graphics Jobs?可以顯著提升圖形渲染的表現(xiàn)估盘。
Graphics?Job?勾選時紊遵,將允許Unity?使用Worker threads?來處理原本在主線程和渲染線程
減少批次(batches)或者令更多的物體共用同樣的渲染狀態(tài)(render?state)可以減少SetPass calls辣苏。
減少需要被渲染的物體數(shù)量可以減少SetPass calls涎显。
減少可見的物體數(shù)量
調(diào)整攝像機的遠裁剪面并使用霧效來彌補遠處物體無法被看見的失真現(xiàn)象
使用攝像機(camera)組件的layer cull distance?屬性為不同層次的物體設置裁剪距離挚瘟,如此可以保持場景的真實的前提下減少需要被渲染的物體數(shù)量
使用occlusion culling?技術
減少每個物體需要被渲染的次數(shù)可以減少SetPass calls?的數(shù)量叹谁。
實時光照、陰影和反射等效果可能會導致物體被渲染多次乘盖,從而影響性能焰檩。挑選合適的渲染路徑對渲染性能有很大影響。一般情況下订框,Deffered Rendering?更適合使用大量實時光照锅尘、陰影和反射效果的高端設備,F(xiàn)orward Rendering?更加適合低端設備。
渲染實時陰影時藤违,首先需要將會產(chǎn)生陰影的所有物體渲染進shadow map浪腐,因此有明顯的渲染消耗。
對于靜態(tài)物體(不會移動的物體)可以使用烘焙技術來預計算光照從而減少實時光照計算顿乒。
對于使用實時陰影的項目议街,使用Shadow?Distance、Shadow Cascades?等技術有效優(yōu)化實時陰影造成的渲染消耗璧榄。
反射探針可以創(chuàng)建非常真實的反射效果特漩,但是會造成batches?上的開銷,應該盡量減少使用骨杂。
合并批次從而減少SetPass calls?的數(shù)量涂身。
可以合并為同一個批次(batch)的物體必須滿足兩個條件:使用同一個材質(zhì)的同一個實例;擁有完全相同的材質(zhì)設置(texture搓蚪、shader蛤售、shader?的參數(shù)等)。盡量讓更多的物體使用相同的材質(zhì)以更好地利用合批(batching)技術
通過圖集技術可以增加合批物體數(shù)量:對于那些使用相同材質(zhì)妒潭,僅僅是材質(zhì)實例使用不同貼圖的情況悴能,使用圖集技術將不同的貼圖打包進一個圖集中,這樣就可以使用同一個材質(zhì)實例雳灾,達成合批條件漠酿。
注意Renderer.material?和Renderer.sharedMaterial?的區(qū)別,前者被修改后將會創(chuàng)建一個新的材質(zhì)實例(無法合批)谎亩。
對于Shadow Caster Pass炒嘲,只要其內(nèi)部使用的屬性相同,即使其在不同的材質(zhì)中仍然可以和合批匈庭。
靜態(tài)合批(static?batching)可能會導致更高的內(nèi)存和存儲消耗:靜態(tài)合批前摸吠,每個參與合批的物體都會創(chuàng)建一個副本,因此不適合密集型顯示的物體群(例如茂密森林中的樹木)
動態(tài)合批會導致一定的cpu?消耗嚎花。
目前支持合批的組件有MeshRenderer寸痢、Trail Renderers、LineRenderers紊选、Particle System?和Sprite Renderers啼止。
SkinnedMeshRenderer?不支持合批,可以使用SkinnedMeshRenderer.BakeMesh?方法創(chuàng)建一個合適的pose?后改用MeshRenderer?以支持合批技術兵罢。
如果目標平臺支持献烦,嘗試開啟Player?Settings?中的GPU Skinning,讓GPU?接管蒙皮卖词。
由于半透明物體需要嚴格按照從后往前的順序渲染巩那,相較于不透明物體而言吏夯,他們更難達成合批條件。
提升像素填充率(filling rate)的手段
降低片元著色器的計算復雜度
檢查透明材質(zhì)即横、粒子系統(tǒng)和UI?元素的重疊情況噪生,防止過量的overdraw
過量的后處理很容易導致像素填充率問題,如果需要用到大量的后處理效果东囚,考慮將這些后處理合并到一個pass?中跺嗽,例如Unity?提供的PostProcessing Stack
解決內(nèi)存帶寬問題
通過降低紋理內(nèi)存占用來解決內(nèi)存帶寬問題。
使用紋理壓縮技術可以極大減少紋理的大小页藻。
使用Mipmap?技術可以降低遠處物體占用內(nèi)存帶寬的問題桨嫁。