【问题标题】:Why the results are different by using TextureObj.Sample and SampleLevel to sample texture with only 1 mipmap level?为什么使用 TextureObj.Sample 和 SampleLevel 对只有 1 个 mipmap 级别的纹理进行采样,结果会有所不同?
【发布时间】:2012-12-06 08:42:57
【问题描述】:

根据 Crytek 的这篇论文:http://www.crytek.com/cryengine/presentations/CryENGINE3-reaching-the-speed-of-light,我实现了一种称为最佳拟合法线的 GBuffer 法线存储优化算法。它是由 D3D11 实现的,但使用的是 Shader Model 4.0。

由于使用此算法,我需要对最适合的法线查找纹理进行采样。实际上这是一个屏幕空间操作,并且这个纹理只有一个级别的mipmap,所以我应该使用TextureObject.SampleLevel( texcoord, 0.0f ) 只对这个纹理的级别0 进行采样。但是当我只用 0 级对其进行采样时,最终图像会出现一些黑白噪声像素。如果我改用 TexObj.Sample( texcoord ),这些噪音就消失了。据我所知,这两个函数在这种情况下应该完全一样,但为什么结果不同呢? GPU执行这些指令有什么神奇的吗?

顺便说一句,当我使用 SampleLevel 对纹理进行采样时,最终的质量看起来比使用 Sample 更好。任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: rendering gpu direct3d hlsl graphic


    【解决方案1】:

    您是否尝试过使用 PIX(或 VS2012 图形调试器)分析问题以确保您的源纹理在两种情况下都相同?此外,如果您可以发布使用这两种方法的两个比较屏幕截图,这可能会有所帮助。

    【讨论】:

    • 是的,我厌倦了用 PIX 和 Nsight 来比较它们,它们是一样的。我想上传屏幕截图,但我的程序正在工作网络中的计算机上运行。我无权复制它。谢谢你的建议。
    猜你喜欢
    • 2012-09-16
    • 2021-06-14
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多