忍者ブログ
【備忘録】キャラクターモデルの物理アセットを作成する
クロスシミュレーションやリジッドボディを作成する前に物理アセットが必要になります。
また、物理アセットを作成することでラグドールや物理アニメーションを適応することができます。



【物理アセットを新規作成する】
キャラクターモデルをインポートした時に自動で新規作成されています。


もしも作成されていない場合は、スケルタルメッシュを右クリックして、作成する、物理アセット、作成を選択してください。




【物理アセットを編集する】
作成したばかりの状態ではこのように、コライダーの大きさもコンストレイントの角度も適切な状態ではありません。
カプセル型の体の部位ごとにコリジョンを設定するものがコライダー、コライダーとコライダーの間をつなぐ扇形のものがコンストレイントです。


このまま物理シミュレーションを行ってラグドール化すると、関節の可動域を超えてぐにゃぐにゃになって糸の切れたマリオネットのようになってしまいます。

※上のメニューの右のほうにシュミレートボタンがあります。

これを編集で整えていきます。


【コライダーの編集】
①コライダーの大きさ・位置・角度を整える
大きさを変えたいコライダーを選択して、大きさ・位置・角度を調整します。
スペースを押すとスケールモード・移動モード・回転モードを切り替えられます。


②コライダーを左右対称にする
このようにコライダーが左右非対称になってしまった場合、


正しい位置にある方のコライダーを右クリックして、Mirrorをクリックすると左右対称になります。




③コライダーを追加する
上の画像を見ると上腕にはコライダーがありますが前腕にはありません。
こういう時はまずスケルトンツリーの歯車をクリックして、すべてのボーンを表示を選択します。


ボーンの一覧からコライダーを追加したいボーンを選んで右クリックして、形状を追加、カプセルを追加を選択します。


無事コライダーが追加されるので、大きさや位置を整えます。


最終的にこのような形になりました。
すべてのボーンにコライダーを設定する必要はありません。
あとから参考にするUE5マネキンよりコライダーの数が少ないですが、これでも十分機能します。



【コンストレイントの編集】
①コンストレイントの値を調整する
コンストレイントの値はその関節の可動域を決める値です。
Swing1、Swing2、Twistの3つの値で制御します。
制限なく揺れさせたい場合はFreeを、固定したい場合はLockedを選択します。
この値を調整してラグドール化した時に関節が不自然な曲がり方をしないようにします。

ひとつひとつシミュレーションしながら値を調整するのは大変なので、UEマネキンの物理アセットを参考に数値を決めていきましょう。
自分の作り方ではUE5マネキンよりコライダーの数が少ないですが、コライダーを省略している部分は一番近い部位のコンストレイントを参考にすると良いです。

②コンストレイントをコピーする
左右のコンストレイントを同じにしたいときなどは、コンストレイントをコピーすることができます。
このように右肩に設定したコンストレイントの数値を左肩にもコピーしたいときは、


右肩のコンストレイントの上で右クリックしてプロパティをコピーを選択します。


左肩のコンストレイントの上で右クリックして、プロパティを貼り付けを選択します。


一つ一つコピーしなくても一括で設定する方法もあります。
このようにグラフエリアで同じ数値に設定したいコンストレイントを一括選択しておくと、一括でコンストレイント値を設定することができます。


③コンストレイントを追加する
このように胴体から腕へのコンストレイントが足りない場合、コンストレイントを追加します。


胴体のコライダーの上で右クリックして、コンストレイント、upperarm_lを選択します。
もう一度右クリックしてupperarm_rを選択します。


するとこのようにコンストレイントが追加されます。



最終的にこのような形になります。


この状態でシュミレートすると関節の可動域が自然な感じになります。



これで物理アセットの設定が完了したのでクロスシミュレーションやリジッドボディの設定を行うことができます。
PR
【備忘録】UE5に自作モデルをインポートする
これまでに作ったキャラクターモデルをUE5にインポートしていきます。
※これまでの作業工程
【備忘録】絵しか描けない人間がBlenderでモデルを自作してUE5で動かす

GameRigToolsでボーンを作っている場合はこの方法でできますが、別の方法でリギングしている場合はうまくいかないかもしれません。



【インポート先のフォルダを作る】
コンテンツブラウザ上で右クリックし、新規フォルダを作成します。
フォルダ上でF2を押してわかりやすい名前に変更しておきます。




【FBXをインポートする】
コンテンツブラウザ上にFBXファイルをドラッグ&ドロップします。
インポートオプションでスケルトンをSK_Mannequinに設定し、マテリアルのImportTexturesにチェックを入れた状態ですべてインポートをクリックします。


なんかエラーが出ますが無視して大丈夫です。


インポート先のフォルダはこのようになっています。
エクスポートするときに同じマテリアルを複数作っている場合、テクスチャが重複してしまうため、不要なものを削除します。


インポートしたスケルタルメッシュを開くとこんな感じです。
ここでマテリアルの設定が最初からうまくいっていたことがないです。


マテリアルの設定をしていきます。
ベースカラーとノーマルにそれぞれインポートしたテクスチャをつなぎます。


光沢を変えたい部分があるときはマテリアルを複製し、メタリックやスペキュラ、ラフネスの値を調整します。


目と髪のマテリアルの設定はこれまでの工程で説明しているのでそちらを参照してください。
【備忘録】絵しか描けない人間がBlenderでモデルを自作してUE5で動かす

すべてのマテリアルの設定が終わったら、スケルタルメッシュを開いてマテリアルを割り当てていきます。
アセット詳細の各エレメントを一つずつハイライトさせてどのエレメントがどのメッシュに対応しているか確認しながらマテリアルを設定していきます。


すべて設定し終えるとこんな感じになります。


これでようやくUE5で自作モデルを動かすことができます。
アンリアルエンジンで、何らかのキーを押すと握手などのNPCのボーンをターゲットにしたエモートを行えるようにする方法です。
詳しく説明する気力がないのでとりあえず下書き状態ですがノードを公開していきます。


【備忘録】IKを使ってNPCと握手する

こんな感じで、NPCとの距離に誤差があっても右手同士が接触するように設定していきます。
あんまり近いとプレイヤーとNPCの体がめり込むので適当にコリジョンを設定しておきましょう。


【ブループリントインターフェース】
Talkという関数を設定したブループリントインターフェース(以降BPI)を作成します。
このBPIを親となるNPCのインターフェースに設定しておきます。
これで子NPCを作成してNPCを複数設置することができます。


【アニメモンタージュの作成】

カーブを追加し、手を差し出して引っ込めるところの値が1.0になるようにします。
アニメーションはMixamoからダウンロードしました。
カーブの作り方は参考資料①を参照してください。


【プレイヤーのアニメBPの設定】
・イベントグラフ側

GetAllActorsOfClassに親NPCを設定し、子NPCの中から一番近いNPCを検索して、手のボーン位置を取得します。


アニメモンタージュのカーブの値をAlphaとして取得します。


・アニメグラフ側

FABRIKで制御するボーンを設定します。
手のボーン位置とアニメモンタージュのカーブ値を入力ピンに入れておきます。
FABRIKの使い方は参考資料の②を参照してください。


【NPCのアニメBPの設定】
・イベントグラフ側

プレイヤーの手のボーン位置を取得します。
※LookatLocationは先述の「近づくと見つめてくるアクタ」制作のための変数なので今回は設定しなくてOK


NPCのほうでもアニメモンタージュのカーブの値をAlphaとして取得します。


・アニメグラフ側

FABRIKで制御するボーンを設定します。
手のボーン位置とアニメモンタージュのカーブ値を入力ピンに入れておきます。


【プレイヤーBPの設定】

Enterを押すと近くのアクタを検索し、BPIが実装されていたらその中で一番近いアクタに対してイベントを実行するというものです。
BPIの詳細は参考資料③を参照してください。
試作ではアニメーションと会話を同時に行うようにしていたので余計なものがついていますが、呼び出すBPIはTalkだけでOKです。


【親NPCイベントグラフの設定】

長いし読みにくいけど頑張って読んでください…。
BPIを利用して、エンターを押すと、プレイヤーの操作を無効にして、プレイヤーとNPCが向き直って、握手のアニメーションを再生して、NPCの向きだけが元に戻って、プレイヤーが動けるようになる。
…という流れです。
大元から色々削ったり追加したりしていますが、この流れの作り方は参考資料④を参照してください。


まとめる気力がなかったので抜けがあるかも…。
気が向いたらちゃんと推敲して書き直します。


【主に参考にさせていただいた資料】
Unreal Engine 5: CCDIK
UE4 IKを使ってリアルタイムにボーンを制御してみる
【UE4・UE5】〈Tips〉使わないのはもったいない!ブループリントインターフェースを日本一分かりやすく解説する試み
RPGでよくある会話システムを作ろう!!キャラクター構成編[ UE TURORIAL ]
2か月くらい前からUE5をはじめてます。
まずは簡単な習作を作ろうといろいろ調べていく過程で、思いついたことや試したことをネットの海に流していきます。

LookAtでプレイヤーを見つめてくるアクタの作り方は公式のドキュメントにも解説があるのですが、「ある程度近づくと見つめてくる」アクタの作り方は調べても見つけられなかったので試してみたものをメモしておきます。

【備忘録】近づくと見つめてくるアクタ
文章で説明するより実際のノードを見てもらうのが早いと思うので画像を貼っていきます。



【アニメBPイベントグラフの設定】
まずはアクタに設定するアニメBPのイベントグラフ。


下のほうは公式でも説明がある部分です。ここでプレイヤーの位置を取得します。
上のほうが今回のメイン「近づくと」を設定する部分です。

新しく「ActorPlayerDistance」という名前でfloat変数を作成し、IsValid?を挟んでセットします。
※IsValid?がないと動作はしますがエラーが出ます。
アクタとプレイヤーの距離を取得し、取得した値を割り算(divide)の下のピンにつなぎ、上の数値には「このくらいの距離まで近づいたら見つめてきてほしい」という値を設定します。
※例では100にしています。
割った値を「ActorPlayerDistance」としてセットします。



【アニメグラフの設定】
アニメグラフで設定した「LookAt」のAlphaに先ほど設定した「ActorPlayerDistance」をつなぎます。


例では頭・胸・腰の三か所にLookAtを設定しています。



【結果】
近づくと見つめてくるけど…


離れると視線を外す。


そんなアクタができました。

<< 前のページ   |  HOME  |
プロフィール
HN:
山乃 ゆぎと
性別:
非公開
最新コメント
[09/06 グリペン]
[07/03 くらげ]
[04/30 NONAME]

Template by Emile*Emilie
忍者ブログ [PR]