咨询电话:400-810-1418服务与监督电话:400-810-1418转接2
  • 相关推荐
  • UE4手游如何渲染与优化环境反射?
  • Unreal制作布料角色交互设计教程
  • Unreal材质优化实用教程
  • Houdini18.5于Unreal实时渲染
  • Unreal中Decal贴花拉伸运用技巧
  • Unreal地形高级材质之根据斜率分配材质
  • Unreal教程:BluePrint制作灯光闪烁效果

    发布时间:2020-11-12 14:23:55

    Hello . 大家好,今天给大家模拟unreal中灯泡接触不良,我是木偶心没。一起来看这篇Unreal教程,BluePrint制作灯光闪烁效果。

    先理一下思路,一般游戏中的灯光不只是有直接从引擎里面拉出来的物理灯光,更需要有emissive的模型灯光,即我们的mesh文件,所以整个灯在闪烁的时候,物理灯光比如point light的强度变化要和模型灯光的emissive变化是要同频并且强度变化要一致。

    所以最方便的就是直接在模型灯光的BP中控制强度和emissive的值。

    1.gif

    如下,手残党直接拉的一个圆柱体当做模型灯光,并给了一个简陋的emissive材质;

    2.webp.jpg

    注意自发光的大小一定要暴露出来,方便在蓝图中读取。

    然后右键给这个mesh创建蓝图,并在蓝图中添加一个point light。

    3.webp.jpg

    日常生活中接触不良的灯泡的闪烁频率其实是不一样的,也就是每个亮度的持续时间是不一样的,所以我们需要在设置物理灯光的intensity和模型灯光的emissive之前进行亮度持续时间的设置,所以在Event Graph中,在Event BeginPlay 添加一个Delay节点。

    4.webp.jpg

    而Duration值的话需要输入一个随机数Random Float in Range,范围大概在0到0.5之间,因为推迟的时间不能长,接着开始给模型的emissive设置一个随机值,首先用节点Set Scalar Parameter Value on Materials获取材质里面暴露出来的参数emissive power,Parameter Value同样给一个随机值,范围0-1。

    5.webp.jpg

    然后用节点set intensity设置物理灯光的intensity,强度的话我们先用前面模型灯光的随机值乘上10000(因为物理灯光的intensity有点大)。由于需要不停的变换值,所以我们把最后的输出结果连到最开始的delay上面进行一个循环。

    6.webp.jpg

    Compile后在场景中运行可以看到,两个灯光都在变化,但是仔细看就会发现只是变化频率一致,而强度变化并不一样,在物理灯光近0的时候,而模型灯光还是近1的值。

    7.webp.jpg

    这是因为给到模型emissive的random值并不会同时被运用到物理灯光的intensity上,而是在走到set intensity的时候就变了一个随机值,所以我们现在要改的是将模型随机了以后的emissive的值给到物理灯光的intensity。我们就需要一个中间值来进行传递,才能保证两边的数值是一样的。

    我们在左侧新建一个float的变量current emissive,然后拉到蓝图中选择set,将模型的随机emissive值给到set,然后把set放在set scalar parameter value on material之前。

    8.png

    再拉一个surrent emissive到场景中然后选择get,把get到的值输入到set scalar parameter value on material的parameter value和set intensity的new intensity中

    再次编译就可以看到我们开始的效果,两个灯光属性的变化一致,同时增强或者减弱,并且时间和强度随机。

    9.gif

    一般为了使用方便,我们还需要把里面的数值参数暴露出来,是否闪烁也可以添加开关,方便艺术家在外部进行调整,完整节点如下;

    10.webp.jpg

    来源:Thepoly公众号