UE4 Material 果冻般抖动

1.材质截图
在这里插入图片描述在这里插入图片描述

1.1材料参数

HitPixelPosition:定义了被击打Pixel的位置,所以该Pixel的震动幅度是最大的,并且带动一定范围内的其他的Pixel一起震动。ShakeRadius:由半径定义了一个范围,该范围内的所有Pixel都可以被带动起来,一起震动。当然了,距离被击打位置越远,振幅越小。HitPixelOffset:定义了被击打Pixel的偏移量(Vector3向量),基于世界空间坐标系。

1.2材质节点
Absolute World Position:该值表示当前渲染的Pixel位置。
在这里插入图片描述

以上图表完成一个映射:y=f(x)a、x是当前被渲染的像素的坐标,即Absolute World Position。b、y是一个Scalar,值域是[0,1],将y称作衰减因子。通俗的说就是将所有渲染的像素分为2部分,球体内部和球体外部。该球体以HitPixelPosition为球心,以ShakeRadius为半径,球心处的值为1,球面处为0,中间部分按比例插值,当然球体外部的也都是0。

在这里插入图片描述

随着渲染像素距离击打点像素的距离越来越大,这个y值(衰减因子)由1逐渐的过渡到0,完美的表示了震动幅度随距离的增长而逐渐衰减。(如果觉得线性衰减的效果不是自己想要的,读者可以将1-x节点替换成任何其他算法,只要该算法将01映射为10即可)。
y*HitPixelOffset:衰减因子乘以Offset,作为最终输出,就完成了某一特定时刻的渲染状态,将HitPixelOffset修改为基于时间的函数,就可以让渲染状态随着时间变化,也就是动了起来。(在Material里有time等函数,但可控性不好,所以放在BluePrint里做)。

2.Actor 蓝图
在这里插入图片描述
绿色字体是对应变量的默认值
在这里插入图片描述
动态材质的创建放在BeginPlay和Construction Scrip都可以
在这里插入图片描述
HitPixelOffset一定要按照Hit Impact Normal来计算,因为这是受力的方向
在这里插入图片描述

3.其他
落实到具体应用的时候,可以根据子弹等其他因素,在运行状态修改Actor中不同变量的值,就可以达到不同子弹可以打出不同的震动效果,包括幅度,波及范围之类的。

原网址链接:https://zhuanlan.zhihu.com/p/48684767?utm_source=qq&utm_medium=social&utm_oi=664357116958085120

猜你喜欢

转载自blog.csdn.net/qq_42716155/article/details/84098768