Ogre渲染优化心得(五) -- 用硬件蒙皮代替软件蒙皮,用GPU代替CPU

骨骼动画的计算,是比较费时的,因为数据量大.

这部分数据,用CPU计算,就是软件蒙皮,用GPU去计算,就硬件蒙皮

1.软件蒙皮

Ogre本身已经实现了软件蒙皮,默认情况下就是软件蒙皮,计算的代码在void Entity::updateAnimation(void)

2.硬件蒙皮

需要用shader,把计算放到GPU里面去处理,而shader的代码,也不用自己去写,Ogre本身例子就带有一个支持2个权重的顶点程序,

因为一个顶点最多绑定4个骨头,最多4个权重,所以顶点也稍微麻烦,要4种情况都实现,那么,配置顶点程序就应该在代码里面动态添加,而不是写在.material里面.

更好的是用火炬之光的硬件蒙皮,有一套完整的实现,

我们需要硬件蒙皮么?答案是现在的每个3D游戏,都应该有.

天龙和火炬之光都用到了硬件蒙皮,因为他能大大地提高运行速度,

而火炬之光,唯一用到的shader程序,就硬件蒙皮,然后就找不到其他任何shader程序了.

所以,硬件蒙皮应该算是最重要的shader程序,效率啊.

我们用Ogre本身的例子来测试速度

6个人,132和198的fps,差距还是不小,

//////////////////////////////////////////////////////////////////////////////////////

另外,如果用了shader程序,那么我前面提到的XRAY的实现方法就要改了

因为前面的方法是针对固定渲染管线的,我是禁止渲染状态改变的方法来实现的,如果有shader程序,禁止了就不行

不过可以采用另外的方法,就是等pass的属性设置到渲染状态以后,我再更改渲染状态,在哪改?在SubEntity中重写下面的函数,

就可以在渲染前任意更改了

  virtual bool preRender(SceneManager* sm, RenderSystem* rsys)
                { (void)sm; (void)rsys; return true; }

猜你喜欢

转载自blog.csdn.net/qq18052887/article/details/6342482