|
|
原文地址:
http://www.azure.com.cn/article.asp?id=352
如有转载, 请注明:
http://www.azure.com.cn/
也许这种方法有人使用过, 只是我孤陋寡闻了, 没有听说过.
希望大家不要见笑哦!!
今天午睡, 一直想着现在游戏的效率不高, 半睡半醒间, 突然想到了一种小植物的制作方案, 可以将大量小植物的材质都统一起来, 这样的话就算是不同样式的草都可以打包成一个 StaticGeometry , StaticGeometry 的作用就是将相同材质的物体打成一组, 用一个DP渲染出来.
众所周知, 现在图形显示卡, 对于多边形数已经不是瓶颈了, 一次渲染100W个顶点的模型, 和分10W次渲染10W个10个顶点的模型, 前者的效率要远远高于后者, 前者的DP = 1, 而后者的DP = 100000 (DP就是D3D一个API, DrawPrimitives() 的缩写) , 可是对于小植物的渲染来说, 太不幸的它属于后面一种情况, 模型的顶点少, 但量确非常大, 所以根据当代显卡的构架, 为了更高的渲染效率, 我们必须把DP降下来. 可是有一种情况是不可能把两个模型放到一个DP来一起渲染的, 那就是两个物体的材质不同时候. 但是小植物每种的纹理都不相同, 这就意味着他们的材质都不相同, 也意味着 StaticGeometry 对他们根本不起效果.
但我想到一种方法, 纹理集的方法, 可以将所有小植物的材质统一.
其实小植物的材质有大部分内容都是相同的, 同样的 alpha_reject 值, 同样的 diffuse, ambient 值. 唯一不同就是那个纹理 TextureStateUnit, 他们指向不同的纹理图片. 如果能把纹理图片统一起来, 不就OK了吗?
这样我想到, 让所有小植物共用一张纹理图集, 见下图:

然后让美术, 制作16种不同的草模型(十字平面交叉就行), 他们使用不同的UV坐标, 去指向图集中自己的纹理部分.
这样以来, 16种不同的植物都是一种材质了. 他们都可以在一个batch中渲染, 这样不是很好吗?
以上就是我所提出的方案. 不知道有没有什么问题,
如果存在什么重大问题. 欢迎大家指正.
www.azure.com.cn |
|