アニメについてのメモ
過去
ルートモーションについて
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
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ファイルを作成すればよさそう(やっていない)
疑問
・表裏で2ジオメトリになってるようなモデルうまいこといくのか問題
→ウェイト100なのでうまいこと行きそう(?)
→マテリアル側で表裏判定できるので、そっちでやる
・髪はClothできれいに出るのか問題
→アニメつけたほうが気持ちいいきがします
つんのめりアニメーション
敵とか撃たれた時の反応のアニメーション
HalfLife2とかではこの反応はなくて、インパクト部位から出血やら火花が出るだけ
最近のリッチなゲームだと結構見かける
敵が人型と仮定して、まず当たる部位のバリエーションがある
分けると、頭部、胴体、腕(左右)、脚部(左右)の6部位で、めんどくさいので頭胴足程度でもよさそう
次に、方向があって、前後左右各斜めの8方向でブレンドする
この時、全体の長さはもちろん、開始ポーズと、ツメの位置みたいなのを一致させるようにすると綺麗なブレンドになる
また、極端なポーズを入れると、ブレンドが不自然になるので、統一性を持たせる
つんのめる足の順序は、左方向右方向からのインプットで変わってくるなどしていると、正面のアニメーションが1種類だときれいなブレンドが行われないので
左インプット用右インプット用でブレンドスペースを分けたりうまいことする
当たってくる弾薬にもバリエーションが有る、威力、爆発物、火炎瓶…
これでちょっと体が動く、1歩つんのめる、こける…のような、違った反応が出てくる
連続で攻撃があたった時、同一のアニメーションだと低予算感が漂うので、ここも変えるようにしたい
のように、バリエション地獄であり、HL2は完全に正しい
UEのサンプルでは、インパクト部位Belowの物理でこれを表現していたけれど、足がつんのめって動くみたいなのは流石にアニメーションじゃないと対応できないので、併用するのが良いと思いました
ルートモーションについて
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のスマートポインタ
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
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