echart 实例显示位置_技术分享:如何在Unity中使用实例化渲染?
生活随笔
收集整理的這篇文章主要介紹了
echart 实例显示位置_技术分享:如何在Unity中使用实例化渲染?
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
編者按?在日常開發(fā)中,通常說到優(yōu)化、提高幀率時,總是會提到批量渲染。之前簡單總結(jié)了靜態(tài)合批(點此查看全文)以及動態(tài)合批(點此查看全文),這次作者將和大家聊聊實例化渲染。
作者:枸杞憂天
(本文內(nèi)容由公眾號“偶爾學(xué)學(xué)Unity”提供,轉(zhuǎn)載請征得同意。文章僅為作者觀點,不代表GWB立場)
當我們想要呈現(xiàn)這樣的場景:一片茂密的森林、廣闊的草原或崎嶇的山路時,會發(fā)現(xiàn)在這些場景中存在大量重復(fù)性元素:樹木、草和巖石。
仙境怕是也不過如此吧它們都使用了相同的模型,或者模型的種類很少,比如:樹可能只有幾種;但為了做出差異化,它們的顏色略有不同,高低參差不齊,當然位置也各不相同。使用靜態(tài)合批來處理它們(假設(shè)它們都沒有動畫),是不合適的。因為數(shù)量太多(林子大了,多少樹都有),所以合并后的網(wǎng)格體積可能非常大,這會引起內(nèi)存的增加;而且,這個合并后的網(wǎng)格還是由大量重復(fù)網(wǎng)格組成的,不劃算。使用動態(tài)合批來處理他們,雖然不會“合并”網(wǎng)格,但是仍然需要在渲染前遍歷所有頂點,進行空間變換的操作;雖然單顆樹、石頭的頂點數(shù)量可能不多,但由于數(shù)量很多,所以也會在一定程度上增加CPU性能的開銷,沒必要。那么,對于場景中這些模型重復(fù)、數(shù)量多的渲染需求,有沒有適合的批處理策略呢?有吧,實例化渲染就是為了解決這樣的問題。實例化渲染,是通過調(diào)用“特殊”的渲染接口,由GPU完成的“批處理”。它與傳統(tǒng)的渲染方式相比,最大的差別在于:調(diào)用渲染命令時需要告知GPU這次渲染的次數(shù)(繪制N個)。當GPU接到這個命令時,就會連續(xù)繪制N個物體到我們的屏幕上,其效率遠高于連續(xù)調(diào)用N次傳統(tǒng)渲染命令的和(一次繪制一個)。舉個例子,假設(shè)希望在屏幕上繪制出兩個顏色、位置均不同的箱子。如果使用傳統(tǒng)的渲染,則需要調(diào)用兩次渲染命令(DrawCall = 2),分別為:畫一個紅箱子 和 畫一個綠箱子。兩個顏色、位置各異的箱子如果使用實例化渲染,則只需要調(diào)用一次渲染命令(DrawCall = 1),并且附帶一個參數(shù)2(表示繪制兩個)即可。當然,如果只是這樣,那GPU就會把兩個箱子畫在相同的位置上。所以我們還需要告訴GPU兩個箱子各自的位置(其實是轉(zhuǎn)換矩陣)以及顏色。這個位置和顏色我們會按照數(shù)組的方式傳遞給GPU,大概這個樣子吧:分別傳遞保存位置和顏色的數(shù)組那接下來GPU在進行渲染時,就會在渲染每一個箱子的時候,根據(jù)當前箱子的索引(第幾個),拿到正確的屬性(位置、顏色)來進行繪制了。一個簡單的實例化渲染流程我們通過一個簡單的場景,來看一下Unity為實例化渲染做了什么。實例化渲染兩個彩色箱子顏色屬性通過MaterialPropertyBlock傳入通過GPA觀察Unity做了什么。GPA中的VertexBuffer和IndexBuffer中的信息注:Unity默認Cube網(wǎng)格,包含24個頂點和36個索引。頂點緩沖區(qū)Size = (Position(float3)
+ Normal(float3)
+ Tangent(float4)
+ TexCoord(float2)
+ TexCoord1(float2)) x 24 = 1344Byte
索引緩沖區(qū)Size = Index(ushort) x 36 = 72Byte
總結(jié)
以上是生活随笔為你收集整理的echart 实例显示位置_技术分享:如何在Unity中使用实例化渲染?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10安装ensp启动40_acer
- 下一篇: 图像归一化处理 相同像素_图像处理学习笔