osgUtil.VertexCacheMissVisitor是一个OpenSceneGraph的访问者类,用于检测渲染时是否有顶点缓存缺失带来的性能问题,以及顶点缓存在渲染中是否被正确使用。
在执行场景图渲染时,osgUtil.VertexCacheMissVisitor会做如下工作:
from osg import osgDB, osgViewer, osgUtil
node = osgDB.readNodeFile("myModel.osg")
viewer = osgViewer.Viewer()
# 创建osgUtil.VertexCacheMissVisitor访问器
vcmVisitor = osgUtil.VertexCacheMissVisitor()
# 设置访问器的日志等级
vcmVisitor.setLogger(osg.NotifySeverity.NOTICE)
# 遍历场景图,并在Drawable节点上记录缓存使用情况
node.accept(vcmVisitor)
# 添加优化器osgUtil.FixVertexCacheVisitor
fixVisitor = osgUtil.FixVertexCacheVisitor()
node.accept(fixVisitor)
# 创建窗口并启动渲染循环
viewer.setSceneData(node)
viewer.run()
在渲染过程中,每300帧输出一次缓存使用情况的统计信息。
[INFO] [1634072504.451965, CacheMiss] Frame[300]: 12376 vertices (13.69%) missed cache, 2 peaks detected, with longest 152 frames.
[INFO] [1634072523.680346, CacheMiss] Frame[600]: 8416 vertices (9.30%) missed cache, 1 peaks detected, with longest 47 frames.
[INFO] [1634072546.086925, CacheMiss] Frame[900]: 10152 vertices (11.20%) missed cache, 1 peaks detected, with longest 49 frames.