跳至内容

FidelityFX 镜头 1.1

FidelityFX Lens 是一款轻量级的着色器,提供镜头和胶片效果。其目的是帮助将可能干扰放大器和锐化器的操作(这些操作可能对噪声敏感)的胶片和相机效果,转移到这些各自的算法/通道之后。它不需要纹理,只需要少数可能已存在于引擎中的常量。

目前,FidelityFX Lens 包含色差、晕影和胶片颗粒效果。

着色语言要求

HLSL GLSL CS_6_0

输入

本节介绍 FidelityFX Lens 1.0 的输入。

输入名称类型说明
输入纹理Texture2D一个资源,包含迄今为止已渲染的源颜色目标,在经过几何、效果和缩放等渲染通道后。
常量常量缓冲区一个常量缓冲区,包含为效果选择的艺术值,例如胶片颗粒、晕影和色差的强度。

集成指南

回调函数

FidelityFX Lens 需要以下回调函数定义(如果 FidelityFX Lens 应与半精度类型一起使用,则为 [H] 版本)

FfxLensSampleR[H]

从颜色输入中采样红色通道。

FfxLensSampleG[H]

从颜色输入中采样绿色通道。

FfxLensSampleB[H]

从颜色输入中采样蓝色通道。

StoreLensOutput[H]

将 Lens 计算出的最终颜色存储到输出颜色缓冲区。

以上回调函数的注意:如果需要横向色差,R 和 B 可以指向主纹理的模糊版本。否则,这三者都可以指向同一个纹理。

主函数

在主函数中调用 FfxLens[H](需要色差时,请使用 FfxLensGetRGMag 和 CA 强度来获取红色和绿色放大值。

void CS(uint LocalThreadID : SV_GroupThreadID,
uint2 WorkGroupID : SV_GroupID)
{
FfxLens(LocalThreadID, WorkGroupID);
}

色差 (CA)

使用辅助函数 FfxLensGetRGMag 和所需的 CA 强度来获取红色和绿色放大值。

使用以下参数调用 FfxLensSampleWithChromaticAberration 以获取经过色差效果正确偏移的主颜色纹理的采样:

  • 像素坐标
  • 屏幕中心坐标
  • 红色和绿色放大值

晕影

这是一个简单的像素输入、像素输出函数。

使用以下参数调用 FfxLensApplyVignette 来写入应用了晕影效果的新计算颜色:

  • 像素坐标
  • 屏幕中心坐标
  • 要应用晕影的当前计算颜色
  • 强度值

胶片颗粒

与晕影类似,这也是一个像素输入、像素输出函数。

使用以下参数调用 FfxLensApplyFilmGrain 来写入应用了胶片颗粒效果的新计算颜色:

  • 像素坐标
  • 要应用颗粒的当前计算颜色
  • 颗粒大小/缩放值
  • 颗粒强度值

技术

色差 (CA)

色差有两种 类型,当相机的镜头系统:

  • 以不同的倍率放大每种颜色(横向),或者
  • 以不同的方式聚焦每种颜色(轴向)。

为了实现这种效果,我们以放大的偏移量采样每个通道,并可以选择从略微模糊的纹理中采样。

为了实现线性控制和逼真的镜头效果,我们使用 Cauchy 方程计算红色和绿色的放大程度。

alt text

我们为 K5 玻璃(一种常见的镜头材料)选择了 A 和 B。B 因子可以线性变化,从而产生平滑且在物理上可行的色差效果。

晕影

晕影效果是通过窗口化 Cos^4 衰减函数创建的。我们选择 Cos^4 是因为它反映了胶片对光线的物理响应。控件改变窗口大小,模拟胶片和光圈之间的大小差异。alt text

胶片颗粒

胶片颗粒代表真实胶片的感光晶体。为了模仿这种效果,我们首先使用有序的“颗粒”

alt text

使用高质量的随机数生成器 (RNG) [PCG-3D] 进行分割

alt text

这会产生逼真的颗粒分布。控件改变颗粒的大小和衰减因子,以达到最终期望的效果。

参考文献

[PCG-3D] GPU 渲染的哈希函数 https://www.jcgt.org/published/0009/03/02/paper.pdf

另请参阅

© . This site is unofficial and not affiliated with AMD.