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