【发布时间】:2012-12-30 18:52:32
【问题描述】:
在计算机图形学中,将抖动应用于采样位置以避免可见的采样模式是一种常见的技术。
在片段着色器中将抖动应用于采样位置的正确方法是什么?我能想到的一种方法是将噪声纹理输入着色器,然后根据该噪声纹理的 texlvalue 更改任何想要采样的采样位置。
有没有更好的方法来实现抖动?
【问题讨论】:
标签: glsl shader hlsl sampling cg
在计算机图形学中,将抖动应用于采样位置以避免可见的采样模式是一种常见的技术。
在片段着色器中将抖动应用于采样位置的正确方法是什么?我能想到的一种方法是将噪声纹理输入着色器,然后根据该噪声纹理的 texlvalue 更改任何想要采样的采样位置。
有没有更好的方法来实现抖动?
【问题讨论】:
标签: glsl shader hlsl sampling cg
各种硬件驱动程序 AA 方案通常已经基于抖动 - 每个供应商都有自己喜欢的模式。不幸的是,用户/玩家经常会弄乱设置并打开和关闭。
这可能会让你认为没有“正确”的方法——你是对的!有一些方法,其中一些对于某些任务是正确的。学习和使用你喜欢的东西。
对于表面纹理抖动,您可以尝试以下方法:
在 Photoshop 中,制作 256x512 rgb 图像(或 256x511,对于某些版本的 NVIDIA DDS 导出器),用随机噪声填充它,保存为 DDS 并使用“使用现有的 mip 贴图”。无论纹理缩放多少(至少在许多有用的尺寸范围内),这都会为您提供大致均匀的噪声。
在您的着色器中,读取噪声纹理,然后将其应用到 UV,然后读取您的其他纹理,例如
float4 噪声 = tex2D(noiseSampler,OriginalUV);
float2 newUV = OriginalUV + someSmallScale*(noise.xy-0.5);
float4 jitteredColor = tex2D(colorSampler,newUV);
根据需要尝试其他变体。请注意,强烈的纹理抖动会导致大量纹理缓存未命中,这可能会降低性能,并且在法线贴图周围要小心,因为您会将高频分量引入已经过滤的信号中。
【讨论】: