UE径向模糊+色差材质制作

参数UV,SampleDistance,Function,Amount,DistanceSum

cpp 复制代码
// 将采样数量限制在 2 到 64 之间,防止采样次数过少或过多
int IntAmount = clamp((int)Amount, 2, 64);

// 指定后处理输入纹理索引,14 对应 PostProcessInput0
const int TexIndex = 14;

// 根据采样数量计算每次采样的距离,防止除零
float PDistance = DistanceSum / max(IntAmount, 1);

// 设置径向模糊中心点,UV 坐标中心为 (0.5, 0.5)
float2 Center = float2(0.5, 0.5);

// 计算当前像素指向模糊中心的方向向量
float2 Dir = Center - UV;

// 初始化颜色累加器,用于存储所有采样的颜色
float3 SumColor = 0;

// 初始化权重累加器,用于存储 RGB 通道的颜色权重
float3 SumWeight = 0;

// 根据采样数量循环,逐步获取不同位置的场景颜色
for (int i = 0; i < IntAmount; i++)
{
    // 将当前采样序号转换为 0 到 1 之间的渐变值
    float Alpha = (float)i / (IntAmount - 1);

    // 根据渐变值计算当前采样的 RGB 色彩权重
    float3 ColorM = Lerp3Color(Alpha);

    // 沿径向方向计算采样位置,形成径向模糊效果
    float2 Pos = UV + Dir * (PDistance * i * SampleDistance);

    // 将采样坐标限制在 0 到 1 之间,防止超出屏幕范围
    Pos = saturate(Pos);

    // 将视口 UV 坐标转换为场景纹理 UV 坐标
    float2 FinalUV = ViewportUVToSceneTextureUV(Pos, TexIndex);

    // 从 PostProcessInput0 中读取当前采样位置的场景颜色
    float3 SceneColor = SceneTextureLookup(FinalUV, TexIndex, false).rgb;

    // 将采样颜色乘以 RGB 权重,并累加到颜色结果中
    SumColor += SceneColor * ColorM;

    // 累加 RGB 权重,用于最后的颜色归一化
    SumWeight += ColorM;
}

// 将累加颜色除以总权重,防止权重为零导致计算异常,并输出最终颜色
return float4(SumColor / max(SumWeight, 0.0001), 1.0);
cpp 复制代码
// 返回数值 1,作为前一个代码块的输出结果
return 1;
}

// 定义 Lerp3Color 颜色插值函数,输入 Alpha 用于控制颜色渐变
float3 Lerp3Color(float Alpha)
{
    // 定义蓝色通道,蓝色强度为 1.5
    float3 R = float3(0.0, 0.0, 1.5);

    // 定义绿色通道,绿色强度为 0.5
    float3 G = float3(0.0, 0.5, 0.0);

    // 定义红色通道,红色强度为 1.0
    float3 B = float3(1.0, 0.0, 0.0);

    // 先根据 Alpha 在蓝色和绿色之间插值,再根据 Alpha 在结果和红色之间插值
    return lerp(
        // Alpha 从 0 到 0.5 时,蓝色逐渐过渡到绿色
        lerp(R, G, saturate(Alpha * 2.0)),

        // 第二阶段的目标颜色为红色
        B,

        // 将 Alpha 映射到 0 到 1,控制绿色到红色的过渡
        saturate(Alpha * 2.0 - 1.0)
    ); // 返回最终的 RGB 渐变颜色
相关推荐
总要学点什么3 小时前
第98篇:三维特效-材质线效果——给一条线换十种材质,虚线的图案只填了一半
开发语言·前端·javascript·ecmascript·gis·webgl·材质
Martina_03218 小时前
AI生成3D场景从白模换成精模后镜头全偏了?用6步检查单位、枢轴与层级替换
图像处理·人工智能·3d·ai·自然语言处理·材质·1024程序员节
敢敢のwings1 天前
机器人如何通过触觉认识物体:从材质分类到接触状态判断
分类·机器人·材质
Martina_03215 天前
AI生成3D模型一合并网格,材质就串色?用6步检查材质槽、UV与图集重映射
图像处理·人工智能·3d·材质·uv·游戏策划·1024程序员节
Solange__6 天前
图片转3D导出GLB、FBX还是OBJ?按5类任务比较材质、动画与可编辑性
人工智能·3d·ai·自然语言处理·编辑器·blender·材质
暴走约伯8 天前
【VFX工具链源码拆解 02】告别机械劳动(上):一键统改百个子粒子颜色与批量重命名
3d·unity·c#·材质
暴走约伯9 天前
【VFX工具链源码拆解 03】告别机械劳动(下):材质字典映射批处理与智能纹理槽识别
unity·游戏引擎·材质
小雨爱测10 天前
3ds Max 入门到进阶:建模、材质、灯光与渲染全流程指南
3d·材质
FansAI_art12 天前
3D潮玩手办的材质还原与多角色同屏防崩坏
3d·材质