Рассказываю про импорт анимации

Импорт текстур, моделей, звуков и пр.

Рассказываю про импорт анимации

Сообщение maxim rouf 29 янв 2010, 12:56

Предположим, у вас есть хаотично летающий кубик. :crazy:

Первое, что мы сделаем - разберемся с осями. Про выставление осей YZ уже писалось, так что эту часть я пропущу.
Далее - экспортируем, как FBX формат. Перед самим экспортом настраиваем параметры фильтрования анимационных ключей.
Это очень важно. Без фильтрации у меня получалось несколько тысяч ключей в одной анимации.
Animation --> Curve Filters --> Тут надо 2 галочки воткнуть.
Первая галка - Constant Key Reducer >>> в нем Translation = 0,001 и Rotation = 0,001 .... Auto Tangent - тоже отметить
Вторая галка - Key Reducer >>> с параметром 0,1

Следущий шаг это импорт FBX в Юнити. (кто не знал, если у FBX было имя xxx@name_01.fbx, то name_01 станет именем самой анимации)
Открываем окошко Animation и смотрим на кривые анимации. Первое что бросается в глаза - гладкие кривые с минимальным количеством точек.
- Ура!
Но это еще не все.. Если проиграть анимацию, можно заметить небольшую рябь.. (особенно это касается анимации камеры по кривой) Значит надо немного подправить в самой Юнити.
Скачиваем скрипт (для редактирования импортированной анимации) с официального форума, с помощью него создаём копию нашей анимации и снова открываем её в редакторе.
Пристально посмотрев на кривые, мы видим возле узлов волны.. - Выделяем все узлы ctrl+a и применяем сглаживание Auto, а затем Free Smooth.
- Все. Рябь в анимации пропала. Анимация лёгкая и пушистая.
Аватара пользователя
maxim rouf
UNIт
 
Сообщения: 87
Зарегистрирован: 23 июн 2009, 01:47
Откуда: Москва

Re: Рассказываю про импорт анимации

Сообщение maxim rouf 29 янв 2010, 18:26

Это касательно 3ds Max и Maya.
Ссылка на скрипт...
Аватара пользователя
maxim rouf
UNIт
 
Сообщения: 87
Зарегистрирован: 23 июн 2009, 01:47
Откуда: Москва

Re: Рассказываю про импорт анимации

Сообщение Neodrop 29 янв 2010, 19:11

Работает кстати, не всегда. По крайней мере, буквально вчера я столкнулся с тем, что он не может найти курвы в анимации, порезанной средствами Unity. Нужно проверить на анимациях, экспортнутых с того же файла через @
Пока ещё не успел провести эксперимент. Блин, ну что им кнопку было не встроить? :-?

Отредактировано : А, факингшит! Там же сперва нужно откопировать анимацию. Идиотский скрипт. Перепишу его сегодня, вероятно. Если не забуду. :-w
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Рассказываю про импорт анимации

Сообщение Neodrop 29 янв 2010, 21:06

Вот, улучшил малость. Скрипт сам создаёт копию и кладёт в неё скопированную анимацию. :D

Код: Выделить всё
using UnityEditor;
using UnityEngine;

//Created by Neodrop
//neodrop@unity3d.ru
// Based on http://answers.unity3d.com/questions/659/how-to-add-new-curves-or-animation-events-to-an-imported-animation

public class CurvesTransferer
{
    const string duplicatePostfix = "_copy";

    static void CopyClip(string importedPath, string copyPath)
    {
        AnimationClip src = AssetDatabase.LoadAssetAtPath(importedPath, typeof(AnimationClip)) as AnimationClip;
        AnimationClip newClip = new AnimationClip();
        newClip.name = src.name + duplicatePostfix;
        AssetDatabase.CreateAsset(newClip, copyPath);
        AssetDatabase.Refresh();
    }

    [MenuItem("Assets/Copy Animation Clip")]
    static void CopyCurvesToDuplicate()
    {
        // Get selected AnimationClip
        AnimationClip imported = Selection.activeObject as AnimationClip;
        if (imported == null)
        {
            Debug.Log("Selected object is not an AnimationClip");
            return;
        }

        // Find path of copy
        string importedPath = AssetDatabase.GetAssetPath(imported);
        string copyPath = importedPath.Substring(0, importedPath.LastIndexOf("/"));
        copyPath += "/" + imported.name + duplicatePostfix + ".anim";

        CopyClip(importedPath, copyPath);

        AnimationClip copy = AssetDatabase.LoadAssetAtPath(copyPath, typeof(AnimationClip)) as AnimationClip;
        if (copy == null)
        {
            Debug.Log("No copy found at " + copyPath);
            return;
        }
        // Copy curves from imported to copy
        AnimationClipCurveData[] curveDatas = AnimationUtility.GetAllCurves(imported, true);
        for (int i = 0; i < curveDatas.Length; i++)
        {
            AnimationUtility.SetEditorCurve(
                copy,
                curveDatas[i].path,
                curveDatas[i].type,
                curveDatas[i].propertyName,
                curveDatas[i].curve
            );
        }

        Debug.Log("Copying curves into " + copy.name + " is done");
    }
}


Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт


Вернуться в Медиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2