问题标签 [msaa]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
476 浏览

android - 当我使用 glBlitFramebuffer 实现 MSAA 时收到 INVALID OPERATION

也许我有一些愚蠢的问题。如果有人可以回复他们,我将不胜感激。所有问题都基于Android环境和OpenGL ES。

  1. 如何验证我是否打开了 MSAA?如果我用 50 点大小画一些GL_POINTS,就会有一些小方块。如果我启用了 4x MSAA,小方块可以变成圆点吗?

  2. 我尽我所能用 FBO 和 BlitFBO 启用 MSAA。glBlitFramebuffer()但它什么也没画,调用后出现错误 INVALID_OPERATION 。

这是我上面提到的完整项目:https ://github.com/Enoch-Liu/GL

以下是关键代码:

帧缓冲区已完成。

0 投票
1 回答
2870 浏览

opengl - OpenGL MSAA 有两种不同的方式。有什么区别?

我一直在寻找 OpenGL Multi Sample Anti Aliasing 教程,我找到了很多,但我会选择 2。

他们使用不同的方式来做到这一点。我已经测试了这两种方式,并且都适用于我的项目,所以我可以使用它们中的任何一种。

我使用它来将我的游戏引擎场景渲染为纹理。

这是第一种方式:

使用 MSAA 创建 FBO

当我需要绘制场景时

第二种方式:

使用 MSAA 创建 FBO

当我需要绘制场景时:

总结: 第一种方式:创建FBO,为颜色创建RBO,为深度创建RBO,并用于glRenderbufferStorageMultisample(...)指定MSAA级别。然后创建其他具有颜色纹理和深度的 RBO 的 FBO。

第二种方式:创建 FBO,为颜色创建纹理,为深度创建 RBO,并glTexImage2DMultisample(...)在纹理中使用 MSAA 级别。然后创建其他 FBO 和纹理。

使用一种方式或其他方式有什么区别?这个比那个好吗?

0 投票
1 回答
320 浏览

c++ - 延迟 MSAA 伪影

这是我渲染场景的过程:

  • 绑定 MSAA x4 GBuffer(4 个颜色附件、位置、正常、颜色和不亮颜色(仅限天空盒。我还有一个深度组件/纹理)。
  • 绘制天空盒
  • 绘制地理
  • 将所有颜色和深度组件 Blit 到单个样本 FBO
  • 应用光照(我使用深度纹理通过检查深度纹理值是否小于 1 来检查它是否应该被照亮)。
  • 渲染四边形

这就是正在发生的事情:

单样本 多样品

正如你所看到的,我在边缘而不是平滑边缘得到了这些白色和黑色的伪影。(需要注意的是,如果我移除光照并且只在没有光照的情况下渲染纹理,我不会得到这个并且它会正确平滑)。

这是我的着色器(它实现了 SSAO,但似乎没有影响)。

所以最后一个 if 语句检查它是否在深度纹理中,如果是则应用光照,如果不是则只绘制天空盒(这样光照不会应用于天空盒)。

我花了几天时间试图解决这个问题,通过比较法线、位置和深度来改变检查它是否应该轻的方法,将格式更改为更高的分辨率(例如使用 RGB16F 而不是 RGB8 等),但我可以' t 弄清楚是什么导致它并为每个样本进行照明(使用 texel 提取)将是密集的方式。

有任何想法吗?

0 投票
1 回答
53 浏览

user-interface - Firefox 遍历树失败,进一步调查显示树层次结构混乱

我正在使用 UIA 遍历 Firefox 元素树。我正在树中的多个节点之间创建路径。然而,这遇到了问题,因为树中的元素似乎混合在一起。那就是存在重复的运行时 ID,并且层次结构都搞砸了。

UI Spy 应用程序显示以下异常

“UI 自动化树导航已损坏。其中一个后代的父代存在,但后代不是父代的子代”

我该如何解决这个问题?任何帮助表示赞赏。

0 投票
1 回答
349 浏览

directx-12 - dx12 打开 4x msaa 失败

我正在学习“使用 DirectX 12 进行 3D 游戏编程的介绍”。在初始化 d3d(第 4 章)中运行示例代码,当我想使用 4xmsaa 时,发生了错误,如下图,请帮助我。 错误的数字

0 投票
1 回答
1219 浏览

swift - 如何为渲染到纹理 iOS 应用启用 MSAA

我有一个工作渲染到纹理玩具 iOS 应用程序。问题是它有很多锯齿,因为它是点采样而不是抗锯齿的:

在此处输入图像描述

我增加了MTKView子类中的样本数4以启用 MSAA。

这是相关代码的样子。

我将一个为 MSAA 配置的颜色和深度缓冲区附加到renderPassDesc

在我的绘制循环中,我从片段着色器中收到以下错误,该错误消耗了渲染到的纹理:

断言失败片段函数(finalPassOverlayFragmentShader):纹理类型不正确(MTLTextureType2DMultisample)绑定在索引 0(预期MTLTextureType2D)的纹理绑定处underlay[0]

这是片段着色器:

我确定我错过了某个地方的设置,但我找不到它。

我在这里错过了什么?

更新 0

现在,我的 2-pass 玩具发生了 MSAA。唯一的问题是没有太多的抗锯齿发生。事实上,很难说发生了什么变化。这是我的最新设置

更新 1

锯齿似乎来自渲染到纹理,而不是资产中。下面是并排比较。在启用 MSAA 的情况下,使用单通道渲染顶部图像。底部图像被渲染为纹理。锯齿在底部图像中清晰可见

单程 在此处输入图像描述

2遍 在此处输入图像描述

0 投票
1 回答
340 浏览

opengl - 可以从 MSAA FBO 读取单个样本吗?

使用 OpenGL 绘制对象并让我的片段着色器输出一个标量整数 ID。为了绘制对象,我使用多重采样进行抗锯齿,所以当我为整数 ID 创建缓冲区时,我必须将其创建为 MSAA 缓冲区以及完整的 FBO:

正如您在上面的代码中看到的,我有 2 个 FBO。第一个是 MSAA,它有一个用于绘制场景的缓冲区、一个深度缓冲区和一个用于 ID 的整数缓冲区。第二个 FBO 是单采样(非 MSAA),只有绘图场景缓冲区和整数缓冲区。在我绘制完所有内容(片段着色器为每个像素设置索引)之后,我首先将整数 ID 缓冲区(GL_COLOR_ATTACHMENT1)读取到单个采样的 FBO,以便从中获取 glReadPixels。在这个特定的代码中,我只是读取鼠标指向的 1 个像素:

我的问题是,当我进行 blit 时,我想要的像素的多样本被插入到我要读取的单个像素中。我想要它用于我用来绘制场景的颜色缓冲区,但我不希望它用于我读取的整数 ID。如果我正在读取一个包含 ID 为 50 和 ID 为 100 的片段的像素,我想读取 50 或 100(不在乎哪个)。但我得到的是 50 到 100 之间的某个值,比如 75。75 实际上可能是一个完全不同的像素,所以我根本不想要那个。

我可以做些什么来读取整数 ID 的单个样本而不是多个样本的插值?

0 投票
1 回答
443 浏览

webgl - 是否可以在 WebGL2 中将 MSAA 渲染为 RGBA32F 纹理?

首先,我的 msaa 工作得很好,像这样(摘要):

现在,我想将 sceneFramebuffer 渲染为 RGBA32F 以用于 HDR,当我尝试此配置时:

我明白了: GL ERROR :GL_INVALID_OPERATION : glBlitFramebufferCHROMIUM: src 和 dst 格式因颜色而异

但是,当我为 sceneFramebuffer 设置msaa: 0时,它会显示我的场景,但当然没有 msaa 抗锯齿。

是否有可能以某种方式结合多重采样和浮点输出,我将用于 hdr?

谢谢!

0 投票
2 回答
703 浏览

nvidia - Vulkan API:支持的最大 MSAA 样本为 VK_SAMPLE_COUNT_8_BIT

我正在编写基于 Vulkan API 的渲染器。目前我正在尝试为颜色附件添加 MSAA。我很确定我可以使用VK_SAMPLE_COUNT_16_BIT ,但 limits.framebufferColorSampleCounts返回允许 MSAA 级别高达VK_SAMPLE_COUNT_8_BIT(含)的位标志

我在全新的 NVIDIA QUADRO RTX 3000 卡上运行。我还使用最新的 NVIDIA 驱动程序:441.28 我检查了 OpenGL 和 GPU 上限查看器显示的限制

GL_MAX_FRAMEBUFFER_SAMPLES = 32

这有什么意义?限制是否仅由 Vulkan API 规定?如果硬件不支持超过 x8 那么这是否意味着 OpenGL 驱动程序在 CPU 上模拟它,例如通过超级采样之类的东西?这就是我在 khronosdev.slack 的几位渲染开发人员所说的?是否有意义?供应商是否不必使用标准进行编译,要么以正确的方式实施 MSAA,要么根本不实施?

是否有可能 OpenGL 不“真正”支持超过 x8 MSAA,但驱动程序通过像超级采样这样的东西来模拟它?

更新

这个页面解释了 OpenGL 的 MSAA 实现的整个状态,实际上它很清楚为什么 Vulkan 在我的卡上不提供超过 x8 的样本。这是妙语:

一些 NVIDIA 驱动程序支持多重采样模式,这些模式在内部实现为多重采样和自动超级采样的组合,以获得比硬件直接支持的更高级别的抗锯齿。

0 投票
1 回答
496 浏览

webgl - Webgl 2.0 中的 Msaa - 在 Quad 上执行 Msaa

我尝试在帧缓冲区上执行 MSAA,在独立版本中,我将一个立方体绘制到帧缓冲区并将该帧缓冲区 blit 到画布上,它就像一个魅力:

但是当我在我的引擎中使用延迟管道执行此操作时,会执行 blit,但不会执行 MultiSample (MSAA)。我能想到的区别是我在那里将绘制到四边形的图像写入帧缓冲区,在工作示例中是立方体。

根据要求,如果它不起作用,设置如下: