gpt4 book ai didi

opengl - 有没有超过 GL_MAX_VIEWPORTS 的有效方法?

转载 作者:行者123 更新时间:2023-12-04 23:12:15 29 4
gpt4 key购买 nike

我目前正在实现 Oikonomidis et al., 2011 中提出的姿态估计算法。 ,这涉及在 N 中渲染网格不同的假设姿势(N 可能约为 64)。 2.5 节建议通过使用实例化同时生成多个渲染来加速计算(之后他们将每个渲染减少到 GPU 上的单个数字),从他们的描述中,听起来他们找到了一种方法来生成 N同时渲染。

在我的实现的设置阶段,我使用 OpenGL 视口(viewport)数组来定义 GL_MAX_VIEWPORTS视口(viewport)。然后在渲染阶段,我传输一个数组 GL_MAX_VIEWPORTS模型姿势矩阵到 mat4 uniform GPU 内存中的数组(我只对估计位置和方向感兴趣),并使用 gl_InvocationID在我的几何着色器中为网格的每个多边形选择适当的姿势矩阵和视口(viewport)。
GL_MAX_VIEWPORTS在我的机器上是 16(我有一个 GeForce GTX Titan),所以这种方法将允许我在 GPU 上一次渲染多达 16 个假设。这可能会足够快,但我仍然对以下内容感到好奇:

GL_MAX_VIEWPORTS 是否有解决方法?可能比调用我的渲染函数 ceil(double(N)/GL_MX_VIEWPORTS) 更快的限制次?

几周前我才开始学习基于着色器的 OpenGL 方法,所以我还不知道所有的技巧。我最初想用以下组合替换我对内置视口(viewport)支持的使用:

  • 添加 h*gl_InvocationID 的几何着色器到y透视投影后的顶点坐标(其中 h 是所需的视口(viewport)高度)并通过 gl_InvocationID到片段着色器上;和
  • discard 的片段着色器带有 y 的片段满足 y<gl_InvocationID*h || y>=(gl_InvocationID+1)*h 的坐标.

  • 但是由于担心分支和 discard,我推迟了进一步研究这个想法。会对性能非常不利。

    上述论文的作者发布了 technical report描述了他们的一些 GPU 加速方法,但还不够详细,无法回答我的问题。第 3.2.3 节说“在几何体实例化期间,视口(viewport)信息附加到每个顶点......自定义像素着色器剪辑超出其预定义视口(viewport)的像素”。这听起来与我上面描述的解决方法相似,但他们使用的是 Direct3D,因此将他们在 2011 年能够实现的目标与我今天在 OpenGL 中可以实现的目标进行比较并不容易。

    我意识到我的问题的唯一明确答案是实现解决方法并衡量其性能,但目前这是一个低优先级的好奇心,我还没有在其他任何地方找到答案,所以我希望更有经验的 GLSL 用户可能是能够提供他们节省时间的智慧。

    最佳答案

    粗略地看了一下论文,在我看来 actual viewport没有改变。也就是说,您仍在以相同的深度范围渲染到相同的宽度/高度和 X/Y 位置。

    您想要的是更改要渲染的图像。这是什么gl_Layer是为了;更改附加到要渲染到的帧缓冲区的分层图像数组中的哪一层。

    所以只需设置gl_ViewportIndex为所有顶点为 0。或者更具体地说,根本不要设置它。

    数量GS instancing invocations不一定是限制;那是你的选择。 GS 调用可以编写多个原语,每个原语到不同的层。因此,您可以让每个实例写入,例如,4 个基元,每个基元到 4 个单独的层。

    您唯一的限制应该是您可以使用的层数(由 GL_MAX_ARRAY_TEXTURE_LAYERSGL_MAX_FRAMEBUFFER_LAYERS 管理,两者都必须至少为 2048),以及单个 GS 调用可以发出的图元和顶点数据的数量(其中是 kind of complicated )。

    关于opengl - 有没有超过 GL_MAX_VIEWPORTS 的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55597357/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com