描边
效果如下:
(未开启目标Mesh自定义深度通道)
(开启目标Mesh自定义深度通道)
1、创建一个 PostProcessVolume。
2、PostProcessVolume 设置无限范围。
3、创建材质 M_Outline 并设置成后期处理。
float OutlineAlpha(float LineWidth) {
float2 UVs = GetSceneTextureUV(Parameters);
float2 TextureSize = GetSceneTextureViewSize(PPI_SceneDepth).zw;
float2 UVsAnchor[4] = {
float2(0, -1),
float2(1, 0),
float2(0, 1),
float2(-1, 0)
};
for (int i = 0; i < 4; i++) {
UVsAnchor[i] = UVs + UVsAnchor[i] * LineWidth * TextureSize;
}
float DepthAnchor = 0;
for (int j = 0; j < 4; j++) {
DepthAnchor += SceneTextureLookup(UVsAnchor[j], PPI_CustomDepth, false).x;
}
float Depth = SceneTextureLookup(UVs, PPI_CustomDepth, false).x;
float DepthEdge = Depth - DepthAnchor / 4;
float NormalAnchor = 0;
for (int j = 0; j < 4; j++) {
NormalAnchor += SceneTextureLookup(UVsAnchor[j], PPI_WorldNormal, false).x;
}
float Normal = SceneTextureLookup(UVs, PPI_WorldNormal, false).x;
float NormalEdge = Normal - NormalAnchor / 4;
float Alpha = DepthEdge;
// 启用法线描边。
Alpha = max(DepthEdge, NormalEdge);
Alpha = saturate(floor(Alpha));
return Alpha;
}
4、M_Outline 材质找到属性 可混合位置 设置成 色调映射前。
5、PostProcessVolume 引用后期处理材质 M_Outline。
6、找到要描边的Mesh,勾选 渲染 - 高级 - 渲染自定义深度通道。
也可以用 set render custom depth。
径向模糊
效果如下:
(未开启径向模糊效果)
(开启径向模糊效果)
1、创建后处理材质 M_RadialBlur。
float3 RadialBlur(float SampleNumber, float2 CenterPoint, float Offset) {
float2 UVs = GetDefaultSceneTextureUV(Parameters, PPI_PostProcessInput0);
float3 SumColor = float3(0, 0, 0);
float2 Direction = CenterPoint - GetViewportUV(Parameters);
for (int i = 0; i < SampleNumber; i++)
{
float2 UVsOffset = i * Offset * length(Direction) * Direction;
#if SHADING_PATH_MOBILE
SumColor += MobileSceneTextureLookup(Parameters, PPI_PostProcessInput0, UVs + UVsOffset).rgb;
#else
SumColor += SceneTextureLookup(UVs + UVsOffset, PPI_PostProcessInput0, false).rgb;
#endif
}
return SumColor / SampleNumber;
}
2、PostProcessVolume 引用后期处理材质 M_RadialBlur。