question:关于地形的Title绘制,有兴趣的的进来看看!!!相互学习,
好久没有发帖子了,最新想问下地形相关内容(没有地形贴图等)
地形lod会把一个513*513的地形分块(Title:32*32)
那么绘制这么多的三角形有2中方法
(因为会有lod,所以会每次tick的时候 重新计算三角形)
1.每个Title分别管理自己的顶点buff和index,这样每次tick就会重新create新的index,
通过遍历去将所有的Titile的数据画出来
2.整个地形使用一个Buff,和Index,这样每次tick也会重新create新的index,只是每个Titile的index都会拼进这个打的index中
那么上面2中方法哪个好呢。
第1种方法,会画多次,这样会造成性能的差异
第2中方法,画一次,但是没有第1中在结构中占优势。
我想知道 其中工作中,大家都使用的是什么方法。
另外一点,CreateVertexBuffer,CreateVertexIndex 其实是一个很费cpu的函数,如果一个513*513的地形,直接创建一个buff,和index,不lod后,画出513*513*2个三角形,貌似是fps最高的。而以上其实会每次tick重算,那么会降低了速度。却为什么没有人使用最笨的方法呢。
[解决办法]
应该是第一种办法好
理由1
使用第一种办法,应该每次只会把需要显示的vb(vertexbuffer)和ib(indexbuffer)传输到显卡去,不会有冗余的数据
而第二种办法,会把所有的vb和ib都传输进取, 其中很多根本就不会被使用
传输多大的数据到显卡是很影响效率的
理由2
从数据的生成和处理的角度,也就是场景的管理的角度来说,前者更合适
lod本来就是因为远近,而生成不同的几何数据, 比如最远处的title可能都只是一个四边形了
512*512的标准结构也不适合这种情况的处理
[解决办法]
真正的地型lod基本上每块动态切出来的地皮都是共用一个顶点缓冲和索引缓冲的,一般只有不同lod级别的地型块交界处为了修补裂缝,才有可能会去动态修改顶点或索引,这要看是设计成什么样子了。
还有就是lod在渲染大地形的时候,才有效率上的优势,小的地块直接用mesh做那是最省事的。
[解决办法]
动态地形的顶点高度往往都是保存在纹理中的,vertex shader阶段顶点的高度往往都是采样高度纹理得到的。所以共用顶点缓冲不是问题。不同动态地形方案间的区别基本都只是体现在裂缝的处理方式上。