游戏引擎中的Mesh类是否需要在内存中存储顶点数据?Unity中DrawCall和openGL、光栅化等有何内在联系

发表时间:2018-02-09 15:55:01 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《新换的主板电脑开机滴滴滴不停的叫50?求助求助者电脑配多大的电源》相关知识。本篇中小编将再为您讲解标题游戏引擎中的Mesh类是否需要在内存中存储顶点数据?Unity中DrawCall和openGL、光栅化等有何内在联系。

游戏引擎中的Mesh(SubMesh)类的顶点信息是否有必要以成员变量的形式存储在内存中,还是只需要存储在GPU缓冲中,在Mesh中保存①个GPU缓冲的引用即可。

举两个例子:

在Unity③d中,Mesh类包含有vertices,normals,triangles等成员用于存储顶点信息,并通过这些成员来修改定点数据。(Unity - Scripting API: MeshUnity - Scripting API: Mesh)Unity - Scripting API: Mesh

在Ogre,SubMesh类中包含VertexData和IndexData成员,而VertexData和IndexData包含GPU缓冲的指针,并没有在内存中存储顶点数据。

请问哪种设计更合理。以及CPU端应该以何种形式实时修改顶点数据。

顶点信息 应该就是指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 ,卸载地形的时候,对应的内存数据也会被清掉。

\", \"extras\": \"\", \"created_time\": ①④⑨③②⑥⑥③①② · \"type\": \"answer

到现在仍然不是很明白这个问题,希望可以提供思路。

drawcall,理解为调用①次绘制。

在调用绘制前有若干准备工作,准备之后调用绘制,在绘制中又做若干工作。

所以压根不调用绘制,那自然省去后面这些工作。

但是drawcall的数量和性能不是线性相关,比如画①个矩形,和画①个史莱姆,虽然都是①次,但是对于性能的消耗是不同的,这个需要用相关的工具去看apicall,再结合api的复杂度来分析。

跟opengl的关系,①个drawcall中可能调用多次opengl的api,这个我不确认,但是应该没有线性关系。

跟光栅化的关系,光栅化是最后将所有换为像素的过程,所以也是没有线性关系,drawcall多了光栅化的工作会更多。

写完。。。坐等打脸。。

编后语:关于《游戏引擎中的Mesh类是否需要在内存中存储顶点数据?Unity中DrawCall和openGL、光栅化等有何内在联系》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《求助电脑换了新主板后开机就一直重启5?华硕p8z77-v lx2主板可以插固态硬盘么》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题