Antsam

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

State Transition


Why we must use State Transition?
(From OpenSceneGraph)
Without state sorting, the the buses and GPU will
thrash between states, stalling the graphics
pipeline and destroying graphics throughput. As
GPU's get faster and faster, the cost of stalling
the graphics pipeline is also going up, so scene
graphs are becoming ever more important.


Ogre
Ogre通过Render Queue来实现state transition,ogre中
定义的Material类包含了渲染管道的状态(包括纹理等),
然后把用到相同Material的Renderable Object组织在一起。

这样渲染的时候减小了一些渲染状态的转化。


OpenSceneGraph
OpenSceneGraph中定义了一个StateSet类,用来包含渲染管道
的状态信息。OpenSceneGraph的设计思想是把渲染的物体和对
渲染物体的操作分开,或者说把场景树和对场景书的操作分开
(注意这里不仅是渲染的操作,可能是cull的操作,更新操作
等等)。

然后在里边的过程中生成一棵State Set Tree:

通过收集把有相同渲染状态的物体一起渲染。
当然在两个材质之间的转化也只会重新设置不同的状态。


HL2
Half life 2则是采用TransitionTable的方式来实现,HL2也是
通过Material来包含渲染状态的,如果有n个需渲染的物体,通
过计算一张TransitionTable,把各个物体之间的状态转化计算
出来。然后渲染的时候通过两个索引来产生转化的操作。这个
优化也是比较底层的,没有设计到如何安排材质之间的渲染顺序。

不过必须注意的是:State Transition的优化效果是有限的,
最好的优化应该在算法本身上。

posted on 2005-01-15 17:52  Antsam  阅读(1498)  评论(0编辑  收藏  举报