Hello . 大家好,今天给大家模拟unreal中灯泡接触不良,我是木偶心没。一起来看这篇Unreal教程,BluePrint制作灯光闪烁效果。
先理一下思路,一般游戏中的灯光不只是有直接从引擎里面拉出来的物理灯光,更需要有emissive的模型灯光,即我们的mesh文件,所以整个灯在闪烁的时候,物理灯光比如point light的强度变化要和模型灯光的emissive变化是要同频并且强度变化要一致。
所以最方便的就是直接在模型灯光的BP中控制强度和emissive的值。

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

注意自发光的大小一定要暴露出来,方便在蓝图中读取。
然后右键给这个mesh创建蓝图,并在蓝图中添加一个point light。

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

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

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

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

这是因为给到模型emissive的random值并不会同时被运用到物理灯光的intensity上,而是在走到set intensity的时候就变了一个随机值,所以我们现在要改的是将模型随机了以后的emissive的值给到物理灯光的intensity。我们就需要一个中间值来进行传递,才能保证两边的数值是一样的。
我们在左侧新建一个float的变量current emissive,然后拉到蓝图中选择set,将模型的随机emissive值给到set,然后把set放在set scalar parameter value on material之前。

再拉一个surrent emissive到场景中然后选择get,把get到的值输入到set scalar parameter value on material的parameter value和set intensity的new intensity中
再次编译就可以看到我们开始的效果,两个灯光属性的变化一致,同时增强或者减弱,并且时间和强度随机。

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

来源:Thepoly公众号
上一篇 Unreal如何优化贴图?
热门课程
专业讲师指导 快速摆脱技能困惑相关文章
多种教程 总有一个适合自己专业问题咨询
你担心的问题,火星帮你解答此番调整与三年前网易高调“出海”的姿态形成强烈反差 与此同时,自2024年起,由知名MMO制作人Jack Emmert领导的奥......
收购之后,忽然科技承诺Cocos会全面回归永久免费、纯粹开源的路线,同时借助忽然科技的全球流量资源,为开发者提供更多价值它证明......
工具集中,dgaTension节点与dgaDelta节点发挥着关键作用它们基于每个顶点,对角色网格的两种状态进行细致比较,分别......
以Maya为核心的工业级制作流程,让中国团队掌握了从高精度建模、动态捕捉到光影渲染的全链路技术其前身“王琦电脑动画工作室”成立......
捕获一只少东家! 1 前言 Hello,大家好,我是火星时代广州校区3D模型大师班的学员苏颖,很荣幸可以和大家分享我第五阶段的......
有央企、也有外企,有影视公司、也有游戏公司!收喜报都收到手抽筋了!
又到了星仔最最最中意的晒喜报环节啦!!想想大家第一个月刚打开软件时的一脸蒙圈,夜夜肝作业到教室关门的咬牙坚持,再到毕业时拿上写......
同学您好!