首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGL原语排序与原语批处理

OpenGL原语排序与原语批处理
EN

Stack Overflow用户
提问于 2015-08-03 21:22:20
回答 1查看 278关注 0票数 0

我一直在阅读一些基于OpenGL的架构如何管理它们的对象,以便根据我的应用程序的特定需求创建我自己的轻量级引擎(请不要“为什么不直接使用这个现有的产品”)。我一直在研究的一个架构是Qt的Quick Scene Graph,虽然它很有意义,但我对一些东西感到困惑。

根据它们的文档,不透明基元是从前到后排序的,而非不透明基元是从后到前排序的。排序是通过希望消除对出现在其他像素后面的像素的处理来进行早期z-killing。这似乎是一种相当普遍的做法,我明白。这不足为奇。

他们的文档还讨论了如何将使用相同材料的项目批量处理在一起,以减少状态更改的数量。也就是说,共享着色器程序可以绑定一次,然后使用同一着色器渲染多个项目。这也是有意义的,我对此很满意。

我不明白的是这两种技术是如何协同工作的。假设我有3种不同的材质(为了简化,假设它们都是不透明的)和100个项目,每个项目都使用这3种材质中的一种,那么理论上我可以根据这些材质创建3批。但是,如果我的100个项目在场景中的不同深度怎么办?然后,我是否需要创建3个以上的批次,以便能够正确地对项目进行排序并从前到后呈现它们?

根据我所读到的其他引擎,如Ogre 3D,这两种技术似乎经常使用,我只是不明白它们是如何一起使用的。

EN

回答 1

Stack Overflow用户

发布于 2015-08-03 21:42:06

如果您确实有3种材质,则只能根据对象的排序对渲染在组中的对象进行批处理。有时,可以针对彼此不重叠的对象优化排序,以最大限度地减少材质切换。

所有这些背后的真正“诀窍”是如何组合材料。如果引擎能够从3个源材质中创建一种材质,并使用着色器将材质设置正确地应用于不同的对象(主要是变换纹理坐标),则可以同时对所有内容进行批处理和排序。但如果这是不可能的,引擎就不能进一步优化它,不得不时不时地切换材料。

您不必将场景中的每种材质组合在一起。但是,如果可以对那些经常相互切换的材料进行分组,它已经可以大大提高性能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31788487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档