火焰效果材质实现_在UE4中实现Radial Blur效果

45abd35121fa5e8ec8e9390592fd7130.png

Radial Blur(径向模糊)效果,是一种从屏幕中心向外呈幅射状的逐渐模糊的后期效果,一般出现在镜头高速运动的时候。

径向模糊的特点是从某个像素为中心向外辐射状扩散,因此需要采样的像素在原像素和中间点像素的连线上,不同连线上的点不会相互影响。 简单的说,就是像素的颜色是由该像素的点与中心点之间连线上进行采样(如图),然后求将这些采样点颜色的加权平均和作为该像素的颜色。[1]

本文以UE4的Third Person示例工程为例,实现Radial Blur效果,并进行效果动态控制和效果剔除的扩展。

后期材质

在工程的Content目录新建一个Post Process材质M_RadialBlur,材质节点如下图:

5b31c31430490b0d1e95fd422ae73469.png
RadialBlur后期材质

图中RadialBlur结点为Custom节点,Code代码为:

static const int SceneTextureId = 14;
float2 UV = GetDefaultSceneTextureUV(Parameters, SceneTextureId);
float3 Sum = float3(0, 0, 0);

float2 Dir = float2(CenterX, CenterY) - GetViewportUV(Parameters);
for (int it = 0; it < SampleNum; it++)
{
	float2 UVOffset = it * Offset * length(Dir) * Dir;
	
	#if SHADING_PATH_MOBILE
	Sum += MobileSceneTextureLookup(Parameters, SceneTextureId, UV + UVOffset).rgb;
	#else
	Sum += SceneTextureLookup(UV + UVOffset, SceneTextureId, false).rgb;
	#endif
}

return Sum/SampleNum;

其中:

1.SceneTextureId做为SceneTextureLookup的第二个参数,值14表示采样对象为Post Process Input 0。

Post Process Input 0对象为当前屏幕已绘制内容,相当于 Unity中后期回调函数void OnRenderImage(RenderTexture source, RenderTexture destination)中source的colorBuffer。

2.UVOffset用于计算采样偏移量,采样方向Dir由中心位置减当前像素位置得到,偏移程度由length(Dir)得到,使离中心点越远,偏移量越大。

3.SampleNum表示采样次数,多次采样叠加的颜色除于采样次数得到最终的颜色,采样次数越高,最后得到的图像越连续。

自定义usf文件

Shader代码可以直接在Custom节点的Code文本框编辑,但更合理的做法是自定义一个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值