本文最后更新于:2025年1月14日 晚上
动画
MAYA导出FBX有许多需要注意的地方
模型的旋转,采样率
MAYA中起始帧需要是0
UE动画曲线默认是线性,MAYA是曲线,这个得改,不然时间数值对不上
如果不想改MAYA的这个曲线,就得增加UE的采样率(缺点是会增加内存)
UE动画数学是单精度浮点数,但是MAYA是双精度浮点数..
UE会自动压缩,可以关闭或者采用压缩破坏最小的选项
最佳实践总结如下
具体分类
Live Link插件
可以实时更新动画数据,达到所见即所得的工作体验。
Sequence其实就是时间和变量的对应,组织方式如下
用场(levelSequence)、次(take)来管理不同的Sequence
- 长期存在的,总是会被镜头拍到的,比如建筑、地形(可理解为静态模型),这种最好是可控制对象绑定在Sequence里面,如果是一些特定时间在存在的,可以直接变成可生成对象。
- 毛发可以先预先浏览,再导入精确的
- 如何管理可见性:1.关卡可见性轨道 2.蓝图里面有函数和事件可以卸载和加载关卡,缺点是不够直观 3.世界分区,将整个关卡放在一个大的关卡,可以自动加载和卸载
- 白模和资产制作可以并行制作,因为资源都是引用,后期再替换就可以了
如何用c++ Add Track?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| FMovieSceneTrack* AddNewTrack(ULevelSequence* Sequence, UClass* TrackClass, FName TrackName) { UMovieScene* MovieScene = Sequence->GetMovieScene(); FMovieSceneTrackMetaData MetaData; MetaData.DisplayName = FText::FromName(TrackName); FMovieSceneTrack* NewTrack = MovieScene->AddTrack(TrackClass, MetaData); return NewTrack; }
void AddTransformTrack(ULevelSequence* Sequence, AActor* TargetActor) { if (!Sequence || !TargetActor) { return; }
FMovieSceneTrack* TransformTrack = AddNewTrack( Sequence, UMovieScene3DTransformTrack::StaticClass(), FName(*FString::Printf(TEXT("%s Transform"), *TargetActor->GetName())) );
FGuid ObjectBinding = Sequence->GetMovieScene()->AddPossessable( TargetActor->GetActorLabel(), TargetActor->GetClass() ); Sequence->GetMovieScene()->AddTrack(UMovieScene3DTransformTrack::StaticClass(), ObjectBinding); }
|
常见的 Track 类型包括:
UMovieScene3DTransformTrack - 变换轨道
UMovieSceneFloatTrack - 浮点值轨道
UMovieSceneEventTrack - 事件轨道
UMovieSceneAudioTrack - 音频轨道
UMovieSceneCameraAnimTrack - 相机动画轨道
1 2 3 4 5 6 7 8 9
| void AddTransformKeyframe(UMovieScene3DTransformTrack* TransformTrack, FFrameNumber TimeFrame, FTransform Transform) { if (UMovieScene3DTransformSection* Section = Cast<UMovieScene3DTransformSection>(TransformTrack->CreateNewSection())) { TransformTrack->AddSection(*Section); Section->AddKey(TimeFrame, Transform); } }
|