【发布时间】:2015-04-09 18:51:59
【问题描述】:
我今天使用 C# 和 OpenTK 进行了一些基准测试,只是想看看在帧率下降之前我可以实际渲染多少。我得到的数字非常惊人,我对我的测试结果非常满意。
在我的项目中,我正在加载由 968 个三角形组成的搅拌机猴子。然后我实例化它并渲染它 100 次。这意味着我每帧渲染 96,800 个三角形。这个数字远远超过了我在游戏中任何给定场景中需要渲染的任何东西。在此之后,我将其推得更远,并在不同的位置渲染了 2000 只猴子。我现在渲染了惊人的 1,936,000(每帧几乎 200 万个三角形),并且帧速率仍然锁定在每秒 60 帧!这个数字让我大吃一惊。我把它推得更远,最后帧率开始下降,但这只是意味着每帧实例化的限制大约是 400 万个三角形。
不过我只是想知道,因为我使用的是一些旧版 OpenGL,如果这仍然可以进一步推动 - 还是我应该打扰?
对于我的测试,我加载了搅拌机猴子模型,使用不推荐使用的调用将其存储到显示列表中,例如:
modelMeshID = MeshGenerator.Generate( delegate {
GL.Begin( PrimitiveType.Triangles );
foreach( Face f in model.Faces ) {
foreach( ModelVertex p in f.Points ) {
Vector3 v = model.Vertices[ p.Vertex ];
Vector3 n = model.Normals[ p.Normal ];
Vector2 tc = model.TexCoords[ p.TexCoord ];
GL.Normal3( n.X , n.Y , n.Z );
GL.TexCoord2( tc.Y , tc.X );
GL.Vertex3( v.X , v.Y , v.Z );
}
}
GL.End();
} );
然后调用该列表 x 次。 我的问题是,如果我将 VAO(顶点数组对象)放入显示列表而不是旧的 GL.Vertex3 api,是否可以加快速度?这会影响性能吗?还是会与显示列表产生相同的结果?
这是几千张的截图:
我的系统规格:
CPU: AMD Athlon IIx4(quad core) 620 2.60 GHz
Graphics Card: AMD Radeon HD 6800
【问题讨论】:
-
您测量的是什么硬件?
-
永远不要用顶点绘制
GL,if you can buffer 它们... -
@RetoKoradi 查看我的更新。
-
@n0rd 的意思是简单的几何、实例化、缺乏转换等……允许大量优化,大多数实际应用程序不可用,从而加快速度“人为地”,因此它不能代表任何其他应用程序的性能
-
是的,没有纹理,没有批处理,没有着色器。这些中的每一个都会付出代价。此外,从一帧中只有大约 100 个猴子头来判断(在您声称要绘制的数千个中),您绘制的 95% 的内容在早期管道阶段被剪切。所以你得到的数字不代表任何东西。
标签: c# opengl performance-testing opentk