#memo

indiedev太郎

アニメについてのメモ

過去
ルートモーションについて
miyahuji111.hatenablog.com

09/08
歩きの種類について
歩きといっても、敵がいる状態での歩き、町中の歩き、いろいろコンテクストがある

09/11
AnimMontageについて
Unreal Engine | AnimMontage
Unreal Engine | 加算アニメーションを使用する

09/13
足のIKについて
miyahuji111.hatenablog.com

09/17
移動速度、距離について
CharacterMovementのMaxWalkSpeedは1秒間の移動距離なので、そこでいい感じの値を見つける
アニメ作るとき、この数値を1秒間で移動させる距離にする、24fpsなら24フレームでこの距離で動きを作る

Physical Animationsについて
miyahuji111.hatenablog.com

09/18
歩行のブレンドスペースの構築について
miyahuji111.hatenablog.com

AnimDynamics / 髪のシミュレーション

髪の動きやる、いくつかの方法あるのでどれが良さそうか見ていく、初音ミクちゃんくらい長い髪はまた違うと思うので、長さ別にも見る、また髪の作り方も何パターンかある、バリエーション

いくつか、以下です
1. 手付アニメ
2. PhAT(物理アセット)
3. AnimDynamics
4. APEX Clothing

続きを読む

UE4、SkeletalMesh周りのレギュレーション

UE4の機能を使うにあたって、やっておいたほうがいいことがままあり、とくにスケルタル
見つかり次第追記

Rootを移動用と回転用で分けるようにする、具体的には原点に移動専用のRootを作って、その下に回転専用のルートジョイントを作る
→ルートモーションをうまいこと機能させる
Unreal Engine | ルート モーション

ルートジョイントの名前は"RootNode"にする
→Apex Clothingを使うならこれでエラーがへる、使わないなら好きな名前で良いです
→→とやっていたけれど、MayaはなんかRootNodeという文字列を予約しているっぽくて、保存時に勝手に名前が変わってしまってアニメーションインポートが渋くなるみたいなことが起こるので、どうしましょう…
→→→現状"Root"で問題が出ていないので、そういうことにする

APEX Clothingでシミュレーションする布は1 Joint 1 Influenceにする
→複数Influenceあるとエラー出る、Apexやらないなら気にしなくていいです

UE側でIKやるつもりなら腕とか足は2boneにしておく
→膝の変形とか補助ボーンでがんばろう

UE4のApex Clothing

Mayaでもできるっぽいけどプラグイン入れ方よくわからんかったので、おなじみのこちらでやりました
物理-布シミュレーション - UE4 Document@com04

前提
・布やる部分のメッシュ、マテリアルはわけておく
・ボーン入れてウェイトやっておく

引っかかった所
・Simulationするとき、Animationあるならそれを、ないならBiondPoseにしておくと、布の挙動をマウスで触って確認できる

・APEXをマテリアルで適用するときにThere are no corresponding bones... いうエラー出る
→1枚の布に対して一つのジョイントでインフルエンス100%にする、例えばスカートに複数のジョイントのウェイトが入っているとこのエラーが出る
→→LODがめんどくさそう?
→→スペックやらなんやらで通常のジョイント構造も必要になる場合、APEX専用のジョイントを用意しないと行けないのでめんどくさい

・APEXをImportするとき、Apex Clothing Error - No reference to RootNode いうエラー出る
→ルートジョイントの名前を、APEX出力で"RootNode"なっているぽく(ちゃんと調べてない)、インポート時に当該ジョイントが無いといわれる
→→ルートジョイントの名前を予め"RootNode"としておくといける、リターゲットとかやるなら全アセットで共通のレギュレーションとなるので早めに注意しておく

・apxファイルを保存するとき、Inputで該当する布だけ選択するようにする
→全部選択しているとSubmeshがうんたらみたいなエラーがでる、詳しくはわかりません
→複数布があるばあい、布毎にapxファイルを作成すればよさそう(やっていない)

https://i.gyazo.com/05898b9d76db92c251ee03a44ec96aa4.gif
無事できました

疑問
・表裏で2ジオメトリになってるようなモデルうまいこといくのか問題
→ウェイト100なのでうまいこと行きそう(?)
→マテリアル側で表裏判定できるので、そっちでやる

・髪はClothできれいに出るのか問題
→アニメつけたほうが気持ちいいきがします

つんのめりアニメーション

敵とか撃たれた時の反応のアニメーション

HalfLife2とかではこの反応はなくて、インパクト部位から出血やら火花が出るだけ
最近のリッチなゲームだと結構見かける

敵が人型と仮定して、まず当たる部位のバリエーションがある
分けると、頭部、胴体、腕(左右)、脚部(左右)の6部位で、めんどくさいので頭胴足程度でもよさそう

次に、方向があって、前後左右各斜めの8方向でブレンドする

この時、全体の長さはもちろん、開始ポーズと、ツメの位置みたいなのを一致させるようにすると綺麗なブレンドになる
また、極端なポーズを入れると、ブレンドが不自然になるので、統一性を持たせる

つんのめる足の順序は、左方向右方向からのインプットで変わってくるなどしていると、正面のアニメーションが1種類だときれいなブレンドが行われないので
左インプット用右インプット用でブレンドスペースを分けたりうまいことする

当たってくる弾薬にもバリエーションが有る、威力、爆発物、火炎瓶…
これでちょっと体が動く、1歩つんのめる、こける…のような、違った反応が出てくる

連続で攻撃があたった時、同一のアニメーションだと低予算感が漂うので、ここも変えるようにしたい

のように、バリエション地獄であり、HL2は完全に正しい


UEのサンプルでは、インパクト部位Belowの物理でこれを表現していたけれど、足がつんのめって動くみたいなのは流石にアニメーションじゃないと対応できないので、併用するのが良いと思いました

ルートモーションについて

ルートの差分をとって、キャラクタ移動に変換してくれる機能

ルートに回転のキーあったら回転しちゃうので、スケルトン構造は、原点にRootを作ってこれをルートモーション用として、移動のみ、その子にキャラルートを作るようにしておくと安心

キャラクタ側での適用方法は、AnimBP内のAnimPreviewEditorで、上部のEditDefaultsを選択して、RootMotionのところを、Root Motion from Everything にすると反映される
Montageの方はマルチプレイヤー用らしいけれど、機能制限があるらしく、単純な移動も反映されずよくわかりません

https://i.gyazo.com/23f43483cd5bb295c1bc1f96079a494b.png

参考
Unreal Engine | ルート モーション

NavMesh周りやる

NavMesh絶対しんどい、即死
箇条書き、即死


AAIController

AAIController::MoveTo
FAIMoveRequest型のMoveRequestを渡す
引数が正常か、もうゴールに到達してるかをチェックして、移動できるようであれば
1. FPathFindingQuery型のQueryを用意する
2. AAIController::PreparePathfinding関数を実行

AAIController::PreparePathfinding
1. 最新のUNavigationSystemを取得
2. ANavigationData* NavDataにNavSys->GetNavDataForProps(GetNavAgentPropertiesRef());


ANavigationData : AActor
TArray<FNavPathPoint> PathPoints;
TWeakObjectPtr<AActor> Base;

FPathFindingResult FindPath(const FNavAgentProperties& AgentProperties, const FPathFindingQuery& Query)
インライン関数


FPathFindingResult
FNavPathSharedPtr Path;
ENavigationQueryResult::Type Result;

検索したPath、その成否の構造体


FNavPathSharedPtr

FNavigationPathのスマートポインタ


FNavigationPath
TArray<FNavPathPoint> PathPoints;

Unreal Engine | FNavigationPath


FNavLocation

FVector Location;
NavNodeRef(uint64) NodeRef;

FNavPathPoint

FNavLocationを少し拡張

FPathFindingQueryData
TWeakObjectPtr<const UObject> Owner;
FVector StartLocation;
FVector EndLocation;
FSharedConstNavQueryFilter QueryFilter;
FNavAgentProperties NavAgentProperties;
int32 NavDataFlags;
uint32 bAllowPartialPaths : 1;
FPathFindingQuery : public FPathFindingQueryData
TWeakObjectPtr<const ANavigationData> NavData;
FNavPathSharedPtr PathInstanceToFill;
FNavAgentProperties NavAgentProperties;
FAIMoveRequest

AITypes.hで定義されている構造体
メンバ変数は
・AActor* GoalActor
・FVector GoalLocation
あとこまごまで、目的地を指定するかんじである
Unreal Engine | FAIMoveRequest

UNavigationSystem : public UBlueprintFunctionLibrary

Unreal Engine | UNavigationSystem


UNavigationSystem::FindPathToLocationSynchronously

FPathFindingResult UNavigationSystem::FindPathSync(FPathFindingQuery Query, EPathFindingMode::Type Mode)
Result = Query.NavData->FindPath(Query.NavAgentProperties, Query);

PathFollowingComponent


dtNavMeshQuery

ここに具体的な経路探索のアルゴリズムやらなんやらが

Unreal Engine | dtNavMeshQuery


ARecastNavMesh : public ANavigationData

honmei



<NavigationTypes.h>

FMovementProperties
uint32 bCanCrouch:1;
uint32 bCanJump:1;
...

AIがしゃがんだり泳いだりできるのかどうかやらを記す構造体


FNavAgentProperties : public FMovementProperties
float AgentRadius;
float AgentHeight;
float AgentStepHeight;
...

AIの移動性能とかを記す構造体


FNavDataConfig : public FNavAgentProperties
FName Name;
FColor Color;
TSubclassOf<ANavigationData> NavigationDataClass;
...

実際に使用するnavmeshのクラスや色やらを設定する構造体
NavigationSystemでは、RecastNavMeshがNavigationDataClassとされておる


わかrないでうs