UE4高斯模糊后处理

image-20210103163949472

去饱和测试

return dot(SceneTexture,float3(0.3,0.59,0.11));

image-20210103150452328

image-20210103150502447

高斯模糊

首先我们需要将SceneTexture节点转换为HLSL,为了方便我们后续的操作,查看着色器代码可以看到HLSL代码

SceneTextureLookup(GetDefaultSceneTextureUV(Parameters, 14), 14, false);

SceneTextureLookup

float4 SceneTextureLookup(float2 UV, int SceneTextureIndex, bool Filtered)

uv:采样UV

SceneTextureIndex:要采样的贴图Index

Filtered:是否需要双线性过滤

虚幻引擎着色器

这时候如果我们直接断开SceneTexture,并修改Gaussain.usf中修改为

return SceneTextureLookup(GetDefaultSceneTextureUV(Parameters, 8), 8, false);

报错了,是因为SceneTextureLookup需要引入头文件才能使用,所以我们需要连接SceneTexture用于引入头文件。

image-20210103153204226

恢复正常

image-20210103153345798

开始

首先确定好高斯模糊公式,接受-1到1的输入,输出0到1的值。可以看出和平均模糊不同,距离当前像素越远,那么对中心的越小

\LARGE f(x) = e^{-0.5(\pi x)^{2}

image-20210103162825939

struct FunctionStruct
{
    //计算一维高斯模糊
    float Cal_1DGaussian(float x)
    {
        return exp(-0.5f * pow(3.141 * x, 2));
    }
};

初始化数据

FunctionStruct FS;

//需要获得的场景贴图index
static const int SceneTextureID = 14;
//纹素大小,比如一张512 X 512大小的纹理,那么纹素大小为(1/512)
//用于UV的偏移
float2 TexelSize = View.ViewSizeAndInvSize.zw;
//获取当前像素的UV
float2 UV = GetDefaultSceneTextureUV(Parameters, SceneTextureID);
//用于存储累积的颜色
float3 PixelSum = float3(0, 0, 0);
//累积权重值
float WeightSum = 0;

用两个for循环来进行水平和垂直的模糊处理

//水平与垂直模糊
for (int x = -BlurRadius;x<=BlurRadius;x++)
{
    for (int y = -BlurRadius;y<=BlurRadius;y++)
    {
        //计算偏移的UV
        float2 offsetUV = UV + float2(x,y)*TexelSize;
        //采样偏移后的贴图颜色
        float3 PixelColor = SceneTextureLookup(offsetUV,SceneTextureID,false).rgb;
        //计算采样像素的权重,/Raduis的原因是为了限制输入范围为-1到1
        float weight = FS.Cal_1DGaussian(x / BlurRadius) * FS.Cal_1DGaussian(y / BlurRadius);
        //累加颜色
        PixelSum += PixelColor*weight;
        //累加权重值
        WeightSum += weight;
    }
}

//返回加权平均值
return PixelSum / WeightSum;

蓝图传递BlurRadius,其实就是卷积核大小范围,比如传入了BlurRadius为2,那么卷积核大小为5x5。

image-20210103163620243

最终结果

image-20210103163705080

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2021 Opda
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信