今天分享一下Alembic插件的使用教程,这个插件的主要作用就是将.abc文件导入到Unity,然后进行播放。 .abc文件主要是影像业界使用的数据格式,用于存储巨大的顶点缓存数据。 Alembic插件就是转化这些影像资料和动力学等的模拟结果转换为顶点缓存数据为Unity可以使用的文件。
abc文件转化为Unity可以识别的Prefabs文件
参考网站: Alembic官方网站 Github地址: https://github.com/Unity-Technologies/AlembicForUnity UnityPackge包下载链接: https://download.csdn.net/download/q764424567/12333549
首先我们要把这个包导入到场景中:
然后我们将.abc动画文件导入到Unity的Assets任意文件夹中,会发现文件导入之后就变成了Unity可识别的prefabs文件:
在StreamingAssets文件夹中会同步生成一个abc格式的文件:
这是因为为了从文件中流传送数据,即使是build后也需要保留abc文件。
接着我们看一下导入的abc文件格式:
如果Interpolate Samples有效,或者如果abc文件中包含velocity数据,可以将velocity数据传递给着色器。 Alembic/Standard着色器是在普通的Standard着色器的基础上添加基于上述velocity的motion vector生成的着色器。 在需要motion vector的情况下会有帮助,比如后期效果的MotionBlur。
如果你想在自己的整形器中添加motion vector生成功能,可以修改SubShader中usepass " hidden/alembi/c/motionvectors motionvectors "这一行的代码。 内部的想知道详细情况,请参照alembicmotionvectors.cginc。(因为向第4个UV传递velocity数据,以此为基础计算出1帧前的顶点位置)
左边是未加工的,右边是输出motion vector并加上Post Processing Stack的MotionBlur的状态。
由插件生成的prefab有一个叫做AlembicStreamPlayer的组件,它负责播放。 移动Time参数可以确认Mesh的移动。 控制Timeline播放动画。 Vertex Motion Scale是计算velocity时的倍率。 越大的velocity越大,在后效果MotionBlur中会出现激烈的模糊。
代码:
using UnityEngine;
using UTJ.Alembic;
public class Test_ABC : MonoBehaviour
{
public GameObject m_AbcObjcect;
AlembicStreamPlayer m_AlembicSP;
float m_TempTime = 0;
void Start()
{
m_AlembicSP = m_AbcObjcect.GetComponent<AlembicStreamPlayer>();
}
void Update()
{
m_TempTime += Time.deltaTime;
m_AlembicSP.currentTime = m_TempTime;
if (m_TempTime>3)
{
m_TempTime = 0;
}
}
}