遊戲引擎中的Mesh類是否需要在記憶體中儲存頂點資料?

時間 2021-05-10 10:04:12

1樓:ArcEcho

這個其實看dx12的資源繫結會來的更清晰。dx12中最終在drawcall時設定給gpu的是VERTEX_BUFFER_VIEW,這個物件裡面包含gpu上的乙個vertual address。換言之就是就draw call而言只要保證gpu上有那麼一塊資料即可。

在引擎層面就需要根據使用需求來考慮要不要在cpu記憶體上存放了。比如你要頻繁修改資料,這個時候可以使用upload heap來關聯你的resource,這樣可以方便的在map後通過拷貝資料的方式來修改你的resource資料,這是因為上傳堆可以同時被cpu 和 gpu訪問。而不需要cpu訪問的資料可以放在預設堆中。

雖然上文中有很多陌生的概念比如「上傳堆」什麼的,但是它反映了引擎可能的使用需求。簡而言之,如果你需要cpu端改變頂點資料且改變基於其前繼狀態,那麼最好在cpu能快速訪問的位置記錄這麼這資料,否則沒必要。

2樓:

頂點資訊應該就是指Vertex Buffer和Index Buffer。

首先看下到底是誰需要這兩個,就是引擎底層,DX,OpenGL之類的底層API。這裡就是繫結,設定渲染狀態,執行draw call的地方。

正確的做法就是像Ogre那樣,可能是在載入Mesh的時候就建立對應的Buffer,只是在MeshData裡面存乙個對應的Buffer指標。

Unity的MeshFilter裡面,其實就是有乙個Mesh的Handler,裡面有這個Mesh的頂點資訊。

至於手動指定MeshFilter裡的Mesh資訊,比如用CPU去模擬乙個水面,目測每一幀都需要去生成Buffer。

對於Mesh的碰撞檢測,CPU那裡肯定是要乙份Handler的。

CPU端去修改mesh資料,基本都需要在記憶體裡面存乙份,比如Minecraft裡面的地形Mesh生成,每次地形的修改也會重新生成一次mesh,渲染的時候把buffer 傳給gpu ,解除安裝地形的時候,對應的記憶體資料也會被清掉。

3樓:

Unity裡面可以選擇不在記憶體保留頂點資料: Mesh.UploadMeshData 引數markNoLongerReadableFrees up system memory copy of mesh data when set to true.

除了dynamic mesh之外,物理引擎也有可能會用到mesh的資料。

如何解決Unity遊戲引擎的遊戲執行中突然崩潰報錯問題?(已解決)?

秦無邪 很少崩潰吧,我用了2年,主要在Mac上使用,PC上也會用,只遇到過使用最新版不穩定,畫面會閃爍的bug,還有自己寫了死迴圈會卡死Unity Editor,其他幾乎沒有崩潰過,當然,我PC比較乾淨,只裝了乙個微軟自帶的防毒軟體和乙個CCleaner,其他會跳廣告的軟體全刪了 孟婆我要奶茶 我們...

遊戲 渲染 引擎類的程式設計師什麼電腦足夠使用?

答案是永遠不夠用 處理很簡單你只需要買你能夠買的起最貴的電腦 同等價位下綜合性能最好的電腦就可以了。因為這一塊的領域太複雜了,考驗的是綜合能力,即便你的電腦已經是最頂級的了,跑乙個大場景的CPU靜態烘焙也是20分鐘起步,編譯一套UE4原始碼也是10分鐘起步,你永遠都會覺得慢。上面還有老哥說RTX,U...

不同品牌的路由器能mesh組網嗎?是否需要刷機?

般來說,不同品牌的mesh協議是不一定相容的。路由器的本質是乙個linux伺服器,主要管理的是資訊的分發。對於不同品牌的路由器來說,雖然底層linux 核心是一樣的,但是在應用層面,即軟體怎麼來控制分發,加快分發的效率或者重傳 快取等相關機制都是不一樣的,基本上是做不到不同品牌之間能夠共享mesh ...