这是一个难以在Google中搜索的问题,因为它在财务方面具有其他含义。
当然,我在这里的意思是“绘图”,如计算机图形学..而不是金钱..
我有兴趣防止3D绘图和2D绘图的过度绘制 (我应该把它们分成两个不同的问题吗?)
我意识到这可能是一个非常广泛的问题,因为我没有指定使用哪种技术。如果它太宽泛,也许我可以阅读一些资源的一些提示就可以了。
编辑:
透支的意思是:
答案 0 :(得分:5)
这是一个相当复杂的话题。
首先要考虑的是frustum culling。它将过滤掉不在摄像机视野范围内的物体,这样您就可以在渲染阶段传递它们。
第二件事是对相机中物体进行Z排序。最好从前到后渲染它们,这样近处的物体会将“近似值”写入深度缓冲区,而远处物体的像素将不会被绘制,因为它们不会通过深度测试。这将节省GPU的填充率和像素着色器工作。但请注意,如果场景中有半透明对象,则应首先按顺序绘制它们,以便进行alpha混合。
如果您使用某种空间分区,例如Octree或Quadtree,这两件事都可以实现。哪个更好取决于你的游戏。 Quadtree适用于大型开放空间,而Octree适用于多层次的室内空间。
不要忘记简单的back-face culling可以在DirectX和OpenGL中使用单行启用,以防止绘制看到相机背面的面部。
答案 1 :(得分:5)
问题实在太宽泛了:o)查看这些“指针”并更具体地询问。
典型的过度抽取抑制剂是:
稍微高一点的逻辑电平:
答案 2 :(得分:2)
根据距离和位置减少您考虑绘制的对象数量(即拒绝观看截头体外的那些对象)。
还要考虑使用某种基于对象的遮挡系统来允许大型物体遮挡小物体。然而,除非你有很多具有相当规则形状的大型物体,否则这可能不值得。在某些情况下,您可以预处理静态对象的潜在可见集。
您的API通常会拒绝不面向视点的多边形,因为您通常不想绘制背面。
说到实际渲染时间,从前到后渲染不透明对象通常很有帮助,因此深度缓冲测试最终会拒绝整个多边形。如果你打开了深度缓冲,这也适用于2D。
请记住,这是性能优化问题。大多数应用程序不会出现重大问题。在您花费资源修复问题之前,请使用Pix或NVIDIA PerfHUD等工具来衡量您的问题。