Unity VFX粒子系统入门笔记-4-skinnedMeshRenderer

Visual Effect Graph 是一个可用于为 Unity 项目创建大规模视觉效果的包。Visual Effect Graph 利用 GPU 模拟粒子行为,可模拟的粒子数量远远超过内置粒子系统。本帖子作为本人先前的VFX学习记录,将会逐渐整理出来。


最近一直在写论文,希望能顺利毕业(T_T)。本教程将讲述如何使用skinned mesh render功能,对人物网格模型进行采样,来作为粒子的初始化位置。

最终效果:

蓝图节点:

1.导入必要资源

本小节需要使用一个带骨骼的模型进行测试。笔者使用了Unity Asset Store里的免费第三人称资源。直接在资产商店中将其添加至自己的资源库,然后在Unity的Pakage Manager中导入即可。

​导入完成后出现了警告。原因是该资源包使用了Unity的新版输入系统,但是我们的项目使用的是老版。点击Yes将会自动进行转换。

完成后在Starter Assets --> ThirdPersonController --> Scenes文件夹下找到一个名为PlayerGround的场景。点击进入后发现整个场景都是紫色的,这是由于该资源包中材质都使用的是Built-in内置渲染管线中的shader,因为咱们用的是HDRP高清渲染管线,自然会导致材质丢失。解决办法:打开Window-->Rendering-->HDRP Wizard, 然后点击”Convert All Built-in Materials to HDRP“,等待程序相应一段时间,即可完成材质转化,场景也恢复正常了。

​在Project面板中新建一个Visual Effect Graph文件;在场景中带有骨骼的这个角色预制件中新建一个空物体,并添加Visual Effect组件,将刚刚建好的VEG文件配置给该组件。

​在Project面板中,找到人物模型文件:StarterAssets --> ThirdPersonController --> Models --> Armature,点击选中;在Inspector面板中的Model版面下,勾选中Read/Write,允许我们对骨骼节点进行访问。

一切准备就绪!

2.访问网格信息和骨骼信息

在VEG蓝图中,新增两个变量:SkinnedMeshRender和Transform,前一个变量用来访问模型的网格信息,后一个文件用来访问模型的根骨骼Transform信息。

①.将Hierachy面板中,将人物模型的网格object赋值给刚刚新建的skinnedMeshRender变量。

②.在VFX object上新建一个VFX Property Binder脚本,新增一个Transform变量,将Property设置为蓝图中的HipTransform,Target设置为人物预制件中的根骨骼节点。

至此,已经完成了对人物模型网格信息和根骨骼信息的访问。

3.使用人物网格信息和骨骼信息

在VFX初始化阶段添加一个Position(Skinned Mesh)节点,并将变量SkinnedMeshRender作为输入,这里我们记录了人物模型网格的位置。

​再添加一个Set Position节点,并将骨骼Transform节点的Position信息作为输入,配置方式如下。

到这里就基本完成了使用人物骨骼信息作为粒子的初始化输入。

4.加亿点点细节

在update阶段根据自己的喜好加几个作用力,我使用Force施加了一个向上的力,并用Turbulence节点对运动进行扰乱,让效果更真实一点,具体节点可参考文章开头的蓝图部分。

最后在输出阶段设置贴图、颜色、和大小变换。贴图就直接用个方形贴图代替好了。颜色配置如下仅供参考。

5.注意事项

①.在HipTransform变量中需要将其设置为世界坐标,在蓝图的更新阶段可以采用局部坐标也可以采用世界坐标,如果采用世界坐标,则粒子的更新计算都在世界坐标下,那么显示出来的效果就如上图所示,和人物相对分开;如果跟新阶段用局部坐标,则粒子的位置计算都是相对于人物模型,会更加紧贴人物模型,如下图所示。

②.HipTransform只是用来确认粒子初始化的中心位置,可以新建一个空的GameObject,并将其赋值给HipTransform,用来对粒子初始化位置进行偏移。

猜你喜欢

转载自blog.csdn.net/weixin_43141652/article/details/123962118