0

在计算机图形学中,将抖动应用于采样位置以避免可见的采样模式是一种常见的技术。

将抖动应用于片段着色器中的采样位置的正确方法是什么?我能想到的一种方法是将噪声纹理输入着色器,然后根据该噪声纹理的 texlvalue 更改任何想要采样的采样位置。

有没有更好的方法来实现抖动?

4

1 回答 1

1

各种硬件驱动程序 AA 方案通常已经基于抖动——每个供应商都有自己喜欢的模式。不幸的是,用户/玩家经常会弄乱设置并打开和关闭东西。

这可能会让你认为没有“正确”的方法——你是对的!有一些方法,其中一些对于某些任务是正确的。学习和使用你喜欢的东西。

对于表面纹理抖动,您可以尝试以下操作:

  1. 在 Photoshop 中,制作一个 256x512 rgb 图像(或 256x511,对于某些版本的 NVIDIA DDS 导出器),用随机噪声填充它,用“使用现有的 mip 贴图”保存为 DDS。无论纹理缩放多少(至少在许多有用的大小范围内),这都会为您提供大致均匀的噪声。

  2. 在您的着色器中,读取噪声纹理,然后将其应用于 UV,然后读取您的其他纹理,例如

    float4 噪声 = tex2D(noiseSampler,OriginalUV);

    float2 newUV = OriginalUV + someSmallScale*(noise.xy-0.5);

    float4 jitteredColor = tex2D(colorSampler,newUV);

根据需要尝试其他变体。请注意,强烈的纹理抖动会导致大量纹理缓存未命中,这可能会降低性能,并且在法线贴图周围要小心,因为您会将高频分量引入已经过滤的信号中。

于 2012-12-30T10:52:32.130 回答