找回密码
 立即注册
查看: 508|回复: 3

SideFX Labs Niagara

[复制链接]
发表于 2023-2-7 13:08 | 显示全部楼层 |阅读模式
写在前面

为什么需要这套工作流

在游戏特效制作需求中有很多是流体类的,比如海浪潮汐、烟雾、风吹沙动等,用传统cpu niagara无法很好实现(没法查询neighbor particles数据计算力的传递),虽然虚幻后续更新了Niagara的SimulationStage,但由于Gpu本身的不稳定性与多端适配兼容性差,让这个效果一直很难有好的解决方案,接下来让我们将目光聚焦到houdini上
Houdini作为一款强大的特效制作软件,对粒子、流体解算相关效果的把控能力非常强,如果能将Houdini的解算结果直接用于Niagara就好啦~
很巧的是,目前Houdini Labs给出了一套方案,可以用官方的插件将Houdini的粒子输出成hbjson缓存导入UE给Niagara使用,本文就基于这套流程做出详细讲解






这套工作流的优势和劣势


虽然这套工作流看上去很牛逼,能将不同软件的优势结合起来,但在实际运用中还是会存在一定程度的优势和劣势。
优势:

    • 【效果上限高】可以完成更复杂的粒子表现,表现力的上限为Houdini的上限。
    • 【可控性强】Houdini制作的粒子效果缓存导入Niagara可以进行二次编辑,可玩性最大化
    • 【多端可用】经过测试在手机端和pc端都能正常运行

劣势:

    • 【缓存文件较大】实测2000粒子137帧优化后缓存能达到3mb,还有较高优化空间
    • 【性能较差】niagara读取缓存效率偏低,插件本身未做优化
    • 【工作流较复杂】对制作者Houdini相关知识要求较高


环境配置

安装HoudiniLabs

打开Houdini,在快捷命令栏中加载 SideFX Labs 套件,在对应的栏中点击 “UpdateToolset” 后,点击下方的获取按钮即可从网络下载最新的labs套件





安装UE4插件


步骤一:找到官方github网站,下载对应UE4版本的HoudiniNiagara插件(步骤如下图所示)
https://github.com/sideeffects/HoudiniNiagara





步骤二:这里以UE4.26为例,将插件安装到项目中,解压第一步中下载好的插件文件夹,将其中的 HoudiniNiagara-UE4.26文件夹拷贝到项目工程文件夹下的Plugins文件夹下,启动项目,在Plugins面板搜索
“Houdini”,打开刚刚安装的插件,重启即可生效




H粒子导入Niagara流程

这里主要讲解以下动图效果案例(致敬死亡搁浅bt),图二是安卓端跑测录屏




Houdini部分

Houdini部分的粒子制作由于方法太多,这里就不细讲每一种情况了,主要看测试中使用Flip流体的相关方案(flip坑点比较多,比pop多)
步骤一:创建Flip粒子,这里使用CreateSurface节点将模型转换成vdb和粒子数据,然后用VolumeSource采样作为发射源





可以通过控制VolumeSource中的Activation数值控制发射器的发射


粒子的密度可以通过 Flip Dop Source 中的 Particle Separation 数值控制,数值越小粒子间距越小粒子数量越多


注意一:一定要在 FlipSolver 中打开 Add ID Attribute ,这样导出的粒子才有ID属性,不会在播放时疯狂抖动(使用pop解算的粒子无需考虑ID属性,会自动添加)


注意二:如果想要流体有age属性并会自动销毁,需要打开FlipSolver中的 Age Particles 和 Reap Particles,然后在post solve接口加入一个pop kill,里面写销毁逻辑





步骤二:在dop下连niagara节点(中间也可以加个 filecache 节点缓存解算内容),然后点击Render即可渲染到本地,这样在本地就能看到一个和 niagara 节点同名的 .hbjson 文件。至此Houdini解算的部分完成。(对于输出的粒子数量和帧数数据标准可以看下面性能优化部分)




UE4部分

UE4部分只稍微讲一下数据导入和使用的相关内容,后续延展可以按照niagara的正常用法走,反正都是一堆数据怎么处理都可以,就看艺术家们的发挥了。
步骤一:将 hbjson 文件拖入引擎ContentBrowser中,如果前面UE插件有安装好的话就能在内容浏览器中看到这个图标的内容,双击打开即可看到内部的各种属性,包括粒子数量等




步骤二:新建 NiagaraSystem,选择从选择的发射器创建,然后选择 Houdini niagara Basic 创建粒子




步骤三:打开粒子系统,在下面三个地方替换粒子缓存即可,粒子的大小颜色等可以按照常规做法实现,粒子生命用Normalized Age属性即可。做完摆放到场景中即可看到最终效果


注意:如果需要在场景中摆放多个粒子系统,需要开启每个粒子系统的ForceSolo,不然效果会出错




性能优化

不要滥用!方案适用场景和使用标准

适用场景
  因为这套方案性能不太行,所以并不能达到场景通用特效的性能标准,目前只能在以下环节使用

    • 表演线过场动画
    • 较为小型的副本、登录界面、抽卡界面等非大世界关卡

使用标准
对于粒子数量也有较高要求,一般来说可以按照下面三个配置标准来选择输出
低配粒子数量帧数量记录数据缓存大小
PC<500<60P id<1mb
移动端<250<60P id<500kb
中配粒子数量帧数量记录数据缓存大小
PC<1000<90P id<2mb
移动端<500<90P id<1mb
高配粒子数量帧数量记录数据缓存大小
PC<1500<120P id<3mb
移动端<750<120P id<1.5mb
对于记录数据,必须包括粒子位置 P 和粒子编号数据 id,两个缺一不可,还有其他数据可选:time N v life type Cd Alpha age pscale,除非必要,否则不要记录,会增加缓存文件大小
减少缓存大小

目前减少缓存的方案有下面三种,有些已经实现有些暂未实现,已实现的会在后方标注(完成),未实现的在后方标注(TODO)
方案一:通过减少缓存粒子数量 + 帧数量减少缓存大小(具体标准按照上面的使用标准表格确定)(完成)
方案二:通过优化缓存文件数据记录精度,此处修改 Float 和 Int 精度到16位(原本是32位)(TODO)
步骤一:将niagara节点的hda复制到本地(可以重新创建一份hda,保存到本地,这样才能修改内部节点内容)


步骤二:右键解锁Niagara节点,点击进入找到ropnet节点,继续点进去看到有个叫 niagara_rop2 的节点,右键点击Type Properties,找到 Script 面板,在145行找到 TYPE_INT32,改成 TYPE_INT16(完成)







步骤三:需要将 TYPE_FLOAT32 类型改成 16位,这个类型是 hbjson 库里的,库的位置在 "C:\Program Files\Side Effects Software\sidefx_packages\SideFXLabs18.5\scripts\python\hbjson.py" ,打开文件可以看到有一堆可选的数据类型,但是没有16位Float,后续要怎么加需要大佬协助了(TODO)





方案三:根据粒子位移效果定义少量关键帧,只记录这些关键帧而不是每帧记录(TODO)
减少性能消耗

由于Niagara中获取Houdini导出缓存刷新粒子消耗巨大,50个发射器每个2000粒子pc端大概需要15ms(niagara原生粒子对比只需要1ms不到)。于是有了以下两个设想,都是需要完成的
    方案一:根据上面减少缓存大小的方案三只读取关键帧数据,多用线性插值,减少读取缓存的消耗(TODO)
    方案二:使用niagara内置api接口刷新粒子位置(TODO)
Q&A

这里收集一些常见的bug问题
问题一:为什么我的niagara粒子在引擎中有闪烁?
解答:看看ue粒子发射器属性ForceSolo有没有打开,同时检查Houdini Flip Solver中的ID属性有没有写入

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2023-2-7 13:15 | 显示全部楼层
看看我刷到了什么!!!
发表于 2023-2-7 13:23 | 显示全部楼层
看看我刷到了什么!!!
发表于 2023-2-7 13:26 | 显示全部楼层
看看我刷到了什么!!!
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-21 21:19 , Processed in 0.096327 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表