Niagara内容示例 2.2 Dynamic Beam

在这里插入图片描述

粒子效果

从向着一个方向生成条带,条带沿着某个轴在旋转,类似于舞蹈演员表演的条带舞。

Niagara蓝图部分

蓝图中文字介绍少了很多…不过起码说清了一件事,就是Ribbon Renderer条带渲染器不支持GPU,只能在CPU粒子的情况下运行。从结构上来看,和之前的Static Beam也没有太大差别(实际上是有的,主要体现在Update Beam,后面会分析到),可见“动态”二字更多的是反映到了参数的获取和传递上。

在这里插入图片描述

效果实现分析

首先来看看Beam Emitter Setup。之前没有细看,遗漏了一个重要的布尔值——Absolute Beam Start,字面上好像啥都看不出来,让我们去看看代码里是什么。双击模块进入Niagara Module Script。

在这里插入图片描述

这里截取我们要讨论的那部分。可见布尔值为true时,直接使用我们之前定的Beam Start位置,否则的话会进行一个本地空间到Simulation空间(可以简单理解为世界空间)的转换。

在这里插入图片描述

上面Beam End位置的值那么大是因为本次模拟使用的不是本地空间。

在这里插入图片描述

随后就是Beam Start Tangent和End Tangent,都是定义为x轴(Niagara System)(图中红色轴),然后用一个float量来调控其曲率。

在这里插入图片描述

终于到了Particle Spawn阶段,注意到这里使用了Initialize Ribbon来做初始化,其效果等同于Initialize Particle + Beam Width,即既定义Lifetime又定义了Ribbon的宽度。

在这里插入图片描述

Particle Update里,首当其冲的就是Update Beam。有了它,我们每帧可以去读BeamStart、BeamEnd等一系列参数的数据,并实时调整到条带上。否则话,当我们实时修改这些数据时,是相当于立马重新生成一条条带,而不是在已有条带上进行调整。

实时调整粒子位置——Rotate Around Point。主要作用就是读粒子的位置,然后再写入。

在这里插入图片描述

Rotation Phase来调控旋转的量,Rotation Rate则是旋转的方向和速率。在Setup里,可以进一步配置旋转的属性(Radius旋转半径,Rotation Center旋转中心,X Axis和Y Axis定义旋转所在的那个平面等等),其中Radius内部现在填写的不是一个不同的参数,而是一个HLSL代码片段(公式):

(1.0f-(abs((Particles.RibbonLinkOrder)-0.5f)*2.0f))*50.0f

不够直观,绘制成图像。可见,希望的效果是中间偏移大,两端偏移值小的效果。

在这里插入图片描述

OK,分析完成,其他剩余的就是之前就见过的模块,颜色,力和速度的解算器等等。

总结

本例的难度明显增加,技术点的密度明显增加,比如:HLSL表达式,本地空间,世界空间,Niagara模块脚本,帧更新数据的更新等等,其中尤其以几个空间的转换最容易把人绕晕。需要读者有比较好的数学和图像学功底。我在看本例的时候也花费了比前面几例更多的时间,相对来说思考得更为细致,目的是希望能够把东西想得更加透彻,解释得更加明白。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Claude的羽毛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值