根据 Crytek 的这篇论文,我实现了一种称为最佳拟合法线的 GBuffer 法线存储优化算法:http ://www.crytek.com/cryengine/presentations/CryENGINE3-reaching-the-speed-of-light 。它是由 D3D11 实现的,但使用的是 Shader Model 4.0。
由于使用此算法,我需要对最适合的正常查找纹理进行采样。实际上这是一个屏幕空间操作,并且这个纹理只有一个级别的mipmap,所以我应该使用TextureObject.SampleLevel( texcoord, 0.0f ) 只对这个纹理的级别0 进行采样。但是当我只用 0 级对其进行采样时,最终图像会出现一些黑白噪声像素。如果我改用 TexObj.Sample( texcoord ),这些噪音就消失了。据我所知,这两个函数在这种情况下应该完全一样,但为什么结果不同呢?当 GPU 执行这些指令时有什么魔法吗?
顺便说一句,当我使用 SampleLevel 对纹理进行采样时,最终质量看起来比使用 Sample 更好。任何帮助将不胜感激,谢谢!