【问题标题】:shader - CG/GLSL/HLSL how to implement jitteringshader - CG/GLSL/HLSL 如何实现抖动
【发布时间】:2012-12-30 18:52:32
【问题描述】:

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

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

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

【问题讨论】:

标签: glsl shader hlsl sampling cg


【解决方案1】:

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

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

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

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

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

    float4 噪声 = tex2D(noiseSampler,OriginalUV);

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

    float4 jitteredColor = tex2D(colorSampler,newUV);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    • 2013-11-17
    相关资源
    最近更新 更多