999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Unity3D游戲開發的批處理技術研究

2020-02-04 16:09:09楊曉虎朱穎朱珣
科技創新與應用 2020年3期

楊曉虎 朱穎 朱珣

摘? 要:在傳統游戲開發的過程中,圖形渲染上的優化一直是一個難題,在Unity中最常用的優化方法就在于減少DrawCall,一次DrawCall就是CPU準備數據并通知GPU繪制圖形的過程。當DrawCall數量過多時,就會導致CPU大量計算進而導致CPU過載,影響游戲運行效率。而在Unity中,最有效的優化DrawCall的方法就是批處理,Unity中的批處理分為動態批處理和靜態批處理。同時,兩種批處理的效率和適用范圍也不一樣。可以通過Unity的Stats面板信息,觀察實際批處理對DrawCall數量的影響。對于動態批處理來說,優點是一切處理Unity自動完成的,不需要做任何操作,而且物體可以移動,缺點是限制很多。而對于靜態批處理來說,它的優點是自由度很高,限制很少;但缺點是可能會占用更多的內存,而經過靜態批處理后的所有物體都不可以再移動。

關鍵詞:Unity3D;動態批處理;靜態批處理;DrawCall

中圖分類號:TP317? ? ? ? ?文獻標志碼:A? ? ? ? ?文章編號:2095-2945(2020)03-0031-02

Abstract: In the process of traditional game development, the optimization of graphics rendering has always been a problem. The most commonly used optimization method in unity is to reduce the number of drawcalls, which is the process of CPU preparing data and informing GPU to draw graphics. When the number of drawcalls is too large, it will lead to a large number of CPU calculations, which will lead to CPU overload and affect the efficiency of the game. In unity, the most effective way to optimize drawcall is batch processing, which is divided into dynamic batching and static batching. At the same time, the efficiency and scope of application of the two batching are different. One can use the stats panel information of unity to observe the impact of the actual batching on the number of drawcalls. For dynamic batching, the advantage is that all processing is done automatically without any operation, and the object can be moved. The disadvantage is that there are many limitations. For static batching, it has the advantages of high degree of freedom and few restrictions, but it may occupy more memory, and after static batch processing, all objects can no longer be moved.

Keywords: Unity3D; dynamic batching; static batching; DrawCall

Unity3D中渲染優化——批處理技術

1 批處理

下Unity3D在屏幕上繪制一個圖形本質是調用OpenGL或者DirectX這樣的外部接口,因此在這個過程中會產生一定程度上的性能消耗。DrawCall是OpenGL中描述繪制次數的一個量。一個基本的OpenGL繪制流程是(1)設置顏色;(2)繪圖方式;(3)頂點坐標;(4)繪制,在繪制的過程中每幀都會重復這個過程,這就是一次DrawCall,所以當游戲中的繪制過程變得復雜的時候,就會帶來DrawCall的急劇增加,進而帶來游戲的性能問題,反映到游戲表現上就變成了優化問題。在Unity3D使用了批處理來達到降低DrawCall的目的,批處理希望通過對物體網格的重組來獲得更高的繪制效率。在Uniyu3D中支持兩種類型的批處理,分為動態批處理和靜態批處理。

2 材質影響

只有用相同材質的物體才可以進行批處理,因此,在程序中盡可能地復用材質,就能在批處理時減少更多的DrawCall。如果物體的兩個材質僅僅是紋理不相同,那么可以通過紋理拼合來將這兩張紋理合成一張大的紋理,合成后的單一材質可以用來替代之前的兩個材質。值得注意的是,在程序中應該使用Renderer.sharedMaterial來保證材質的共享狀態,因為改變Renderer.material會造成一份材質的拷貝,從而導致物體的原材質沒有被合并。

3 動態批處理

動態批處理的實現原理是:合并每一幀可以進行批處理的模型網格,再將合并后的模型數據傳遞給GPU,然后使用同一個材質對其渲染,動態批處理的優點在于一切處理由Unity3D自動完成,實現方便,同時經過批處理的物體仍然可以發生位置上的移動。

動態批處理只有對滿足條件的模型和材質才可以被動態批處理。所以動態批處理存在一些條件上的限制。

(1)動態批處理網格的頂點屬性規模要小于一個數值,該數值在最新版Unity2019.2中為900。針對此條限制,優化策略就是對shader的優化,盡量少使用頂點屬性,或者模型頂點數要盡可能的少。

(2)有多個Pass通道的Shader會中斷批處理。例如在前向渲染的過程中,使用額外的Pass來為模型添加更多的光照效果,但這樣一來模型就不會被動態批處理。

(3)需要謹慎處理使用了光照貼圖紋理的物體。例如,在光照貼圖紋理上的索引和偏移量以及縮放信息等。因此,為了讓這些物體可以被動態批處理,需要保證它們指向光照貼圖紋理中的同一個位置。

4 靜態批處理

靜態批處理的實現原理是,只有在運行的開始階段,把需要進行靜態批處理的模型合并到一個新的網格結構中。因此,靜態批處理的模型在運行時無法移動。同時由于合并操作只需要進行一次,靜態批處理的優化效率比動態批處理更高。靜態批處理是利用“空間”換“時間”的做法,靜態批處理時,合并后的幾何結構需要占用更多的內存來存儲。這是因為,如果一個物體模型在靜態批處理前共享了相同的網格,那么在內存中會產生一個該網格的復制品,因此當很多物體模型共用一份網格,就使原本一個網格變成了多個網格發送給了GPU。這并不是一件好事,例如在濃密森林中,會使用了很多個相同的樹網格,如果對這些樹物體進行動態批處理,會產生嚴重的內存開銷。所以這里是空間和時間上的一個取舍,需要在此找一個時間和空間的平衡點。

對物體使用靜態批處理的方法是在場景中選中該物體,同時在其Inspector面板中選中Batching Static靜態屬性。在內部實現上,Unity首先把這些靜態物體變換到世界空間下,然后為它們構建一個更大的頂點和索引緩存,對于使用同一材質的物體。Unity只需要調用一個DrawCall就可以繪制全部物體。而對于使用不同材質的物體,靜態批處理同樣可以提升渲染性能。盡管這些物體仍然需要調用多個DrawCall,但靜態批處理可以減少這些DrawCall之間的狀態切換,而這些切換往往是費時的操作。

5 批處理效率分析

對Unity中動態批處理和靜態批處理進行簡單的測試。在空間中創建3個物體Cube。

通過勾選物體的Inspector面板中的Batching Static靜態屬性,來實現對物體是否進行靜態批處理。觀察Stats面板的Batches數量和Saved By batching數量的變化。

圖1 Unity中的Stats面板

在Unity中Batches數量相當于DrawCall。Saved By Batches是指通過批處理節省的Batches數量,見表1。

根據測試結果,只有使用相同材質的物體,再通過批處理可以從一定程度上降低DrawCall。將測試用的Cube更換成Capsule時,使用同一材質無法進行動態批處理,這是因為對于頂點數太多的物體,無法進行動態批處理,所以DrawCall沒有減少。

6 結束語

(1)如果不同的物體共享材質,則可以直接通過靜態批處理降低DrawCall。

(2)如果無法進行靜態批處理,而要使用動態批處理的話,那么盡可能減少物體的數目并且讓這些物體包含少量的頂點屬性和頂點數目。

(3)對于頂點數太多的物體(頂點數大于900),不能使用動態批處理,但是可以使用靜態批處理來降低DrawCall。

參考文獻:

[1]Fletcher Dunn,Ian Parberrry,3D數學基礎:圖形與游戲開發[M].史銀雪,陳洪,王榮靜,譯.北京:清華大學出版社,2005:225-368.

[2]馮樂樂. Unity Shader 入門精要[M].北京:人民郵電出版社,2016.

[3]Shireiner D, Shellers G, Kessenich J M, et al.OpenGL programming guide: The Offcial guide to learning OpenGL, version 4.3[M]. Addison-Wesley, 2013. 中譯本.OpenGL 編程指南(第八版).

[4]Wright R S, Heamel N, Shellers G M, et al. OpenGL SuperBible: comprehensive tutorial and reference[M]. Pearson Education, 2010. 中譯本:OenGL超級寶典(第五版).

主站蜘蛛池模板: 亚洲视频二| 欧美特黄一免在线观看| 最新国产网站| 一本大道无码日韩精品影视| 第一区免费在线观看| 九色最新网址| 中文字幕2区| 免费国产黄线在线观看| 久久99国产乱子伦精品免| 成人欧美日韩| 成人福利在线视频| 国产嫖妓91东北老熟女久久一| h网站在线播放| 欧美日韩午夜视频在线观看| 欧美午夜理伦三级在线观看| 亚洲福利视频一区二区| 欧美不卡视频在线| 毛片视频网| 国产欧美高清| 激情影院内射美女| 噜噜噜久久| 国产女人在线观看| 欧美日韩v| 精品免费在线视频| 在线观看国产小视频| 日韩毛片在线播放| 在线观看国产精品第一区免费| 99精品欧美一区| 国产成人av一区二区三区| 51国产偷自视频区视频手机观看| 99在线观看国产| 中文字幕欧美日韩高清| 99久久国产自偷自偷免费一区| 午夜在线不卡| 在线观看免费国产| 国产香蕉国产精品偷在线观看| 欧美三级视频网站| 国产麻豆福利av在线播放| 日韩欧美一区在线观看| 日韩黄色大片免费看| 国产一级妓女av网站| 国产特级毛片aaaaaaa高清| 中文毛片无遮挡播放免费| 国产视频 第一页| 国产成人h在线观看网站站| 国产欧美在线| 激情国产精品一区| 亚洲人成在线精品| 欧美特级AAAAAA视频免费观看| 亚洲午夜18| 亚洲综合18p| 久久精品国产精品一区二区| 日韩123欧美字幕| 国产黑丝视频在线观看| 国产欧美日韩免费| 91午夜福利在线观看| 香蕉久人久人青草青草| 好吊色国产欧美日韩免费观看| 久久久久久久97| 伊人精品视频免费在线| 97无码免费人妻超级碰碰碰| 日本免费a视频| 99人体免费视频| 亚洲一区色| 国产爽妇精品| 在线色国产| 色呦呦手机在线精品| 五月婷婷丁香色| 不卡无码网| 天堂成人在线| 亚洲一区黄色| 亚洲AV色香蕉一区二区| 久久久精品国产SM调教网站| 国产日韩精品欧美一区灰| 国产成人综合在线视频| 国产激爽大片高清在线观看| 久久99国产视频| 色婷婷久久| 免费人成在线观看成人片 | 国产精品一区二区不卡的视频| 国产成熟女人性满足视频| 中文字幕久久波多野结衣|