【问题标题】:Create an animation from obj/gtlf files, import in Unity从 obj/gtlf 文件创建动画,在 Unity 中导入
【发布时间】:2022-01-05 12:44:36
【问题描述】:

我有 350 个 gtlf 文件。最初文件为 OBJ 格式(350 个文件 + 音频),我已使用 obj2gtlf 将它们转换为单独的 gtlf。

如何创建包含所有 350 个关键帧的动画 gtlf 文件?或者如何使用这 350 个 obj/gltf 文件在 Unity 中创建动画?

我想使用这些文件在 Unity 中导入/创建动画并运行 Hololens 应用程序。通过放置此动画,我希望看到在 Hololens 应用程序中播放的体积视频。

但我无法使用 gtlf 转换制作序列,它似乎只需要一个 gtlf 文件(而不是全部 350 个)并将纹理分离到单独的 jpg 文件中。我无法在 Unity 中使用 Timeline 创建动画。

谁能帮帮我?我是 Unity 新手,找不到解决方案

PS:骨骼动画不是解决方案。我的文件代表使用体积视频方法捕获的真人。他留下来,说话,微笑并移动他的手。我需要将 3d 动画模型导入 Unity 以使用它作为我的硕士论文。所以我没有为那个模型设置动画,我有一个捕获的视频作为 350 个 obj 文件 + 网格作为 jpg 和音频。我可以将单个 3d 模型导入为 obj 文件,但找不到导入动画体积视频的方法。

【问题讨论】:

  • 所以您的意思是您实际上有 350 个单独的单独网格对象,并且现在希望始终一次启用一个,对吗?这听起来很糟糕的性能......但是要么你把它们都放在层次结构中,SetActive它们一个接一个......或者你实际上只有一个对象但交换网格本身......虽然也取决于你的材料
  • 当你谈到关键帧时,你确定你想要 350 个单独的文件,或者更确切地说,例如一些动画骨骼?
  • 它应该是一个保持说话的人的体积视频,所以每个文件都是一个3d人模型,它们之间的差异很小。通过一个接一个地播放所有帧,我将看到这个人是如何说话和微笑的。
  • 听起来是一种非常奇怪的做法......为什么不在你的模型中使用合适的骨骼绑定并像往常一样设置动画呢?参见 a.g. Unity Learn - Animation RiggingAnimation Rigging Doc 本身或一般What is Rigging?
  • 原来是用体积视频的方法拍摄的真人。我需要将 3d 动画模型导入 Unity 以使用它作为我的硕士论文。所以我没有为他制作动画,我有一个捕获的视频作为 350 个 obj 文件 + 网格作为 jpg 和音频。我可以将单个 3d 模型导入为 obj 文件,但找不到导入动画体积视频的方法。

标签: unity3d animation hololens gltf


【解决方案1】:

您似乎有一个非常具体的用例,您确实需要将这些作为单独的 3D 模型和纹理/材质。

如前所述,最简单但可能不是最高性能的方法是简单地将所有这些 3D 对象放在您的场景中,并且一次只设置其中一个处于活动状态。

类似的东西,例如

public class ModelFrames : MonoBehaviour
{
    // You drag these all in once via the Inspector
    public GameObject[] models;

    private int currentIndex = -1;

    private void Awake()
    {
        foreach(var model in models)
        {
            model.SetActive(false);
        }
    }

    private void Update()
    {
        if(currentIndex >= 0)
        {
            models[currentIndex].SetActive(false);
        }

        currentIndex = (currentIndex + 1) % models.Length;

        models[currentIndex].SetActive(true);
    }
}

如果你不想切换每一帧,你也可以添加一些修饰符并做

public class ModelFrames : MonoBehaviour
{
    // You drag these all in once via the Inspector
    public GameObject[] models;

    public int targetFramesPerSecond = 60;

    private void Awake()
    {
        foreach(var model in models)
        {
            model.SetActive(false);
        }
    }

    private IEnumerator Start()
    {
        var currentIndex = 0;

        models[currentIndex].SetActive(true);

        while(true)
        {
            yield return new WaitForSeconds(1f / targetFramesPerSecond);

            models[currentIndex].SetActive(false);

            currentIndex = (currentIndex + 1) % models.Length;

            models[currentIndex].SetActive(true);
        }
    }
}

【讨论】:

  • 谢谢@derHugo!它解决了我的问题,我可以创建动画并在 HoloLens 上加载体积视频!
猜你喜欢
  • 1970-01-01
  • 2022-08-23
  • 2020-02-06
  • 2021-08-08
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 2012-07-31
  • 2018-10-05
相关资源
最近更新 更多