fc2ブログ

凛(kagring)のUE5/UE4とゲーム制作と雑記ブログ

2016 年から UE4 / 2021年から UE5 を触り始めました。勉強したもののメモ用ブログです。ゲーム制作に関するメモや雑記とか色々あります。C++ での Qt、Unity もほんの少しあります。

2017年05月 | ARCHIVE-SELECT | 2017年07月

PREV | PAGE-SELECT |

≫ EDIT

UE4 キャラクターの顔を特定の位置に向ける・Transform の向きを Blueprint で制御する(Look At)

人体のキャラクターモデルなどを使ってゲームを作ってる場合、
キャラクターの顔を特定の方向に向けたくなると思います。
今回はその方法を。
こちらのサイトを参考にさせていただきました!

・UE4 LookAt機能を使ってGrayちゃんに見つめてもらってみる
http://unrealengine.hatenablog.com/entry/2017/06/05/220000

こういった感じの処理ですね。

Transform の向きを制御するには「アニメーションブループリント」で制御します。
Transform 関係のBPは必ずこれになるみたいですね。
向きを特定の方向に向けるには「Look At」ノードを使います。
LookAt004.png

LookAtノードは複数でてきますが、あくまでも"Skeletal Control(スケルタル制御)"のLookAtノードを使用してください。


LookAt000.png
ノードを追加するとこうなります。

Look At スケルタル コントロール ノードについての公式ドキュメントはこちらに。

・Look At
https://docs.unrealengine.com/latest/JPN/Engine/Animation/NodeReference/SkeletalControls/LookAt/index.html

次にどの Transform に対して処理をするかの指定を詳細タブで行います。
LookAt104.png
こんな感じで「Bone to Modify」に処理をしたい Transform を指定します。
今回は首を制御したいので「neck_01」を指定しています。

ここでひとつ注意しなければなりません。どの軸が正面になるかはボーンが個々に持つ、ローカルの回転軸を利用します。"In Local Space"のチェックを外すとワールド軸を利用できますが、やり方がかなり複雑になってしまうのでそれは避けます。

とあるので、「Look At Axis」で指定するものは
キャラクターのモデルの構造に合わせて指定するようにしましょう。
今回使ったデフォルトのマネキンでは「Y」を指定してみました。
パラメータは全体的にこんな感じですね。
LookAt104.png

最後に向けたい位置を指定します。

詳細から"(As pin) Look at Location"を選択し、Look Atノード上でVector型ピンを出現させます。あとはこのLook at Locationに値を渡せるようなVector変数を作って繋いでおきます。

となっているのでチェックを入れて表示するようにしましょう。
LookAt002.png

そうすると「Look At」ノードがこんな感じになります。
LookAt001.png
「Look At Location」に向かせたい位置を指定すると Transform の向きが変わります。

この処理はアニメーションブループリントをコンパイルすることで
プレビュー画面でも見ることができます。
LookAt100.png
こんな感じに表示されるので、目で見て確認するのがよいかもです。

実際のアニメーションブループリントのノードのつなぎはこんな感じになります。
LookAt003.png
「Local To Component」はノードを繋ぐと勝手に追加されるので気にしないでよさそうです。

あと、最後に一応実践的にやったほうが良いと思うので、
ゲーム中のカメラの方向を向くように実装してみたいと思います。
参考にさせてもらっているサイトのように、「Look At」に渡す位置を変数にします。
LookAt102.png
位置の入力を「Look At Position」という変数を使って繋いでみました。
変数を公開情報にするのを忘れないようにしましょう。

あとはこの変数を外部から変更してあげれば、
その位置の方向をキャラクターが向くようになるはずです。

今回はカメラの位置をとってくるようにしてみました。
LookAt103.png
こんな感じで毎フレームカメラの位置をとってきて
先ほど変数にした「Look At Location」に対して代入しています。

これを実行するとこんな感じに。
LookAt101.png
マネキンだとかなりわかりにくいのですが、なんとなく向いてる気がします。

結構適当に設定してみましたが、うまく制御すると
キャラクターが自然な動きをするのでいろいろと使う機会は多そうですね。

| UE4 | 12:21 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 アニメーションブループリント(Animation Blueprint)のサンプル

アニメーションブループリントについて少し勉強しているのでメモです。
アニメーションブループリントの作り方は公式ドキュメントがあります。

・Animation ブループリントの作成
https://docs.unrealengine.com/latest/JPN/Engine/Animation/AnimBlueprints/Creation/index.html

ちなみにサンプルから見てみたいということもあったので確認方法を。
まず「ThirdPersonCharacter」を選択します。
アニメーションBP000

詳細パネルにアニメーションブループリントが設定されているのを確認します。
アニメーションBP001

設定されている「ThirdPerson_AnimBP」を開きます。
アニメーションBP002

ブループリントを開いたら「AnimGraph」を選択して開きます。
アニメーションBP005

するとこんな感じの画面が開きます。
アニメーションBP004

他にもイベントグラフ(EventGraph)もありますが、
この画面でノードでトランスフォームに対してあれこれが設定できるようです。
アニメーションBP003
基本はこの状態になっているようです。

とりあえずは何ができるかを学んでいこうと思います。

| UE4 | 12:56 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 エンジンの拡張設定と同じように品質をベンチマークを走らせて自動で設定する(Run Hardware Benchmark、Apply Hardware Benchmark Results)

動作が重くて動かないときなどが結構あると思いますが
軽くしたりクオリティを上げたりなどを、UE4の設定と同じように変更する方法です。
今回はベンチマークを走らせ、自動で最適っぽい設定にする方法です。

こちらを参考にさせていただきました。

・[UE4]ベンチマーク結果に応じて描画品質を変える
http://unwitherer.blogspot.jp/2017/05/ue4.html?spref=tw

ベンチマークを走らせるには
「Run Hardware Benchmark」ノードを実行します。
ハードウェアベンチマーク000

RunHardwareBenchmarkの引数は次のようになっています。
WorkScale:ベンチマーク試行回数
CPU Multiplier & GPU Multiplier:ベンチマーク結果の倍率

WorkScaleはベンチマークの試行回数です。最終的なベンチマークの結果は、
複数回行われるベンチマーク結果の総和をWorkScaleで割ることで得られる平均となります。
WorkScaleが小さいほど試行回数が少なく、計算量は減りますが、結果の信頼性に関わるため、
通常はこの値は変更しない方が良いかと思われます。
CPU MultiplierとGPU Multiplierはベンチマーク結果の倍率で、
この値が高い程、高い品質(負荷 高)を維持しようとし、値が低いほど、低い品質(負荷 低)に抑えようとします。
これらは、ある程度負荷が大きくても品質を下げすぎないようにするときに便利な引数かと思われます。
また、CPUとGPUに別々に設定できるので、例えばCPU Multiplierを高くして、GPU Multiplierを低くすることで、
CPU性能を重視した設定にすることもできるでしょう。
とはいえ、この項目も基本的には変更しない方が無難だと思われます。

「Work Scale」はベンチマークの試行回数。
「CPU Multiplier」はベンチマーク結果の倍率。
「GPU Multiplier」はベンチマーク結果の倍率。

ベンチマークの結果を反映させるのは
「Apply Hardware Benchmark Results」ノードを使います。
ハードウェアベンチマーク001
普段は「Apply Settings」ノードを使いますが特殊ですね。

というわけで使い方はこんな感じに。
ハードウェアベンチマーク002
これを実行してみるとこんな感じに設定されました。
ハードウェアベンチマーク003
もともともは全部シネマティックだったのが中になったようですね。

こちらもあまり使うことはないと思いますが、
とりあえず見た目よりも動くことが大事!などであれば使う機会もありそうです。

| UE4 | 15:53 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 エンジンの拡張設定と同じように品質を個別に設定する(Set View Distance Quality、Set Anti Aliasing Quality、Set Post Processing Quality、Set Shadow Quality、Set Texture Quality、Set Visual Effect Quality、Set Foliage Quality)

動作が重くて動かないときなどが結構あると思いますが
軽くしたりクオリティを上げたりなどを、UE4の設定と同じように個別で変更する方法です。

こちらを参考にさせていただきました。

・[UE4]ベンチマーク結果に応じて描画品質を変える
http://unwitherer.blogspot.jp/2017/05/ue4.html?spref=tw

・UE4で全体の描画クオリティの調整
http://hogetatu.hatenablog.com/entry/2015/10/04/035219

UE4には品質を設定する項目があります。
「エンジンの拡張機能設定(Engine Scalability Settings)」というものですね。
「設定」の「エンジンの拡張機能設定」で品質ウィンドウが開きます。
品質一括設定001
こんな感じですね。
品質一括設定000
これの各項目を個別に設定するためのノードがたくさんあります。

設定できる項目はこんな感じに公式ページに載っています。

・拡張性のリファレンス
https://docs.unrealengine.com/latest/JPN/Engine/Performance/Scalability/ScalabilityReference/index.html#

「表示距離」は「Set View Distance Quality」ノード。
品質個別設定005
「Value」は「0 = 近接、1 = 中、2 = 遠方、3 = Epic、4 = シネマティック」となります。

「アンチエイリアス」は「Set Anti Aliasing Quality」ノード。
品質個別設定007
「Value」は「0 = 低、1 = 中、2 = 高、3 = Epic、4 = シネマティック」となります。

「ポストプロセス」は「Set Post Processing Quality」ノード。
品質個別設定001
「Value」は「0 = 低、1 = 中、2 = 高、3 = Epic、4 = シネマティック」となります。

「シャドウ」は「Set Shadow Quality」ノード。
品質個別設定002
「Value」は「0 = 低、1 = 中、2 = 高、3 = Epic、4 = シネマティック」となります。

「テクスチャ」は「Set Texture Quality」ノード。
品質個別設定003
「Value」は「0 = 低、1 = 中、2 = 高、3 = Epic、4 = シネマティック」となります。

「エフェクト」は「Set Visual Effect Quality」ノード。
品質個別設定004
「Value」は「0 = 低、1 = 中、2 = 高、3 = Epic、4 = シネマティック」となります。

「フォリッジ」は「Set Foliage Quality」ノード。
品質個別設定006
「Value」は「0 = 低、1 = 中、2 = 高、3 = Epic、4 = シネマティック」となります。

となります。
実際の使い方はこんな感じですね。
品質個別設定000

「Set~」とは別に、各項目は「Get~」系ノードで取得することができます。
品質個別設定010

外部からそんなに個別に設定することはあまりないと思いますが
ユーザーに細かく設定して動くようにしてもらう場合は必要かもですね。

| UE4 | 12:05 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 エンジンの拡張設定と同じように品質を段階的に設定する(Set Overall Scalability Level、Get Overall Scalability Level)

動作が重くて動かないときなどが結構あると思いますが
軽くしたりクオリティを上げたりなどを、UE4の設定と同じプリセットで変更する方法です。

こちらを参考にさせていただきました。

・[UE4]ベンチマーク結果に応じて描画品質を変える
http://unwitherer.blogspot.jp/2017/05/ue4.html?spref=tw

UE4には品質を設定する項目があります。
「エンジンの拡張機能設定(Engine Scalability Settings)」というものですね。
「設定」「エンジンの拡張機能設定」で品質ウィンドウが開きます。
品質一括設定001
こんな感じですね。
品質一括設定000
各項目ごとに調整ができるのですが、
今回は一番上にあるボタンの
「低」「中」「高」「Epic」「シネマティック」
というプリセットの段階で一括に設定する方法です

各項目についてはこちらの公式ページに。

・拡張性のリファレンス
https://docs.unrealengine.com/latest/JPN/Engine/Performance/Scalability/ScalabilityReference/index.html#

品質を一括で設定するには
「Set Overall Scalability Level」ノードを使います。
品質一括設定002
「Value」にはプリセットの値を設定します。

SetOverallScalabilityLevelノードは段階的な品質変更を行うノードです。
引数のValueは品質のレベルで、0=Low, 1=Medium, 2=High, 3=Epic, 4=Cinematicに相当します。
図4のようにSetOverallScalabilityLevelノードの引数に0を指定すると、全ての品質がLowになります。

とあるので
「0 = Low, 1 = Medium, 2 = High, 3 = Epic, 4 = Cinematic」ということですね。

こんな感じで実際には設定します。
品質一括設定003
「0 = Low」なのですべての設定がLow設定になるということですね。

セットとは別にゲットするノードも用意されています。
「Get Overall Scalability Level」です。
品質一括設定004
「Return Value」はプリセットの値が返ってきます。ただし

GetOverallScalabilityLevelノードは全ての品質が同じ段階のときに、その段階の値を返します。もし、1つでも違う段階の品質がある場合は、-1を返します。

とあるので、すべてがプリセットの値と一致しない場合は「-1」が返るようです。

使い方はこんな感じに。
品質一括設定005

これらの設定は、製作者側の意図とは違う見え方がしてしまうのでおすすめはできませんが
動かないよりはまし!ということもあるので、そういう時に使えるのかなと。

| UE4 | 15:25 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 リダイレクタ(Redirector)

UE4にはリダイレクタという機能があります。

・リダイレクタ
https://docs.unrealengine.com/latest/JPN/Engine/Basics/Redirectors/index.html

リダイレクタがなにかというと

UE4 でアセットを移動したり名前の変更をすると、元の位置に 'Redirector' が残されます。これは現時点で読み込まれていないものの、このアセットを参照するパッケージが変更先を検出するためのものです。早期に命名システムを選出して、その方法にこだわった命名をすることにより、リダイレクトにまつわる問題を回避することができます。

とあるように、
アセットなどに対して参照があり、
その元のアセット名の変更などが起きた場合にその参照先が記述してあるファイル。
といったもののようです。
これで自動的に参照を解決してくれるみたいですね。

ただ、これは「リダイレクタ」というファイルが新たに生成されてしまいます。

オブジェクトを作成して名前を変更した後に、元のオブジェクト名と同じ名前で新規にオブジェクトを作成するとエラーが発生します。理由は最初のオブジェクトの名前変更時にリダイレクタが作成されたからです。リダイレクタとリソースは同じ名前を持つことができません。問題を解決するには「FixupRedirects」コマンドレットを試してください。

こういったこともあるということですね。
一時的にリネームして同じ名前のアセットをファイルを作ろうとするとおきたります。

ここらへんについてはこちらが参考になります。

・[UE4] リダイレクター ~消えないゴミファイルの謎~
http://historia.co.jp/archives/1028

このリダイレクターは、リネームやファイル移動の際、リンクが切れないように計らってくれるとても大事なファイルです。何かしらの理由でリネームやファイル移動の際に、別ファイルからMT_TESTに張ってあるリンクをMT_TEST2に書き換えられない場合、そのままだとリンクが切れてしまいます。それだと困るので、このMT_TESTが参照された際に「このファイルはMT_TEST2に既にリネームされたよ」とリダイレクトしてくれるのです。

よって、ソースコントロールを使って複数人で開発している時、リダイレクターが出来たらこれも一緒にコミット(SVN)/チェックイン(P4)しなくてはいけません。

こういう問題がでてきたりもします。

リダイレクタは便利な機能なのですが、
Perforceなどでファイル管理をしている場合、リダイレクタを解決せずに
アセットファイルを上げてしまうと
ちゃんと参照できないといったことも多々起きてしまうので注意が必要ぽいですね。

ちなみにリダイレクタファイルが存在するかどうかは
コンテンツブラウザのフィルタの設定で見ることができるようになります。リダイレクタ000
こんな感じで「リダイレクターを表示」にチェックを入れます。

すると、こんな感じでリダイレクターが表示されます。
リダイレクタ001

リダイレクタファイルができてしまった場合に修正する方法は以下のものがあるみたいです。

方法その1: コンテンツブラウザから解消する(フォルダーから一括)
方法その2: コンテンツブラウザから解消する(ファイルごと)
方法その3: コマンドレットから一括で解消する

詳しくはhistoriaさんのブログを見てもらった方がよいのですが
とりあえず方法1の場合はコンテンツブラウザのフォルダを選択して
右クリックのメニューの「フォルダでリダイレクタを修正」を選択します。
リダイレクタ002
これでリダイレクタファイルがなくなり修正されます。

ちなみにリダイレクタファイルが作られるのはこういったときのようです。

参考:リダイレクターが作成される条件(一部未検証)

リダイレクターはいつも作成される訳ではありません。主に次の場合に作成されます。

変更対象のアセットが、Map(Level)から参照されている
変更対象のアセットを参照しているファイルが、読み取り専用になっている
※検証しきれていません※ ソースコントロールを使用している(有効にしている)時。特定のソースコントロールのみかもしれません。


あと、こういったことが書かれているようなので
ある程度の期間ごとにちゃんとリダイレクタを修正したほうがよさそうですね。

Epicのドキュメントによると、2週間に1度くらいきれいにした方が良いと書いてありました。ファイルが荒れる前に解消しましょう。


| UE4 | 12:05 | comments:1 | trackbacks:0 | TOP↑

≫ EDIT

UE4 2Dテクスチャ用の詳細設定・圧縮形式の変更(Texture Group、Compression Settings)

UE4での2Dテクスチャへの利用方法です。
こんなツイートを見かけたのでメモしたものになります。

テクスチャの詳細設定を以下のように変えるとよいみたいですね。
「Texture Group」を「2D Pixels(unfilterd)」に。
「Compression Settings」を「UserInterface2D(RGBA)」に。
※ただし「UserInterface2D(RGBA)」だと非圧縮になり容量が大きくなるので
特に見栄えがひどくない場合は「Default(DX1/5,BC1/3 on DX11)」を推奨

インポート時のデフォルトの状態だとこんな感じの設定になっています。
グラデーション005

これを、上記2Dテクスチャ用の設定にするとこんな感じに。
グラデーション004

デフォルトの状態と、上記設定したものを比べて表示してみるとこんな感じになります。
左側がデフォルト設定で、右側が今回の2D設定をしたものになります。
グラデーション002
今回はわかりやすいようにグラデーションの画像を使いましたが、
ほとんどの画像の場合は「Default(DX1/5,BC1/3 on DX11)」でも気にならないですね。
この画像もまじまじみないとわからないと思います。

というわけで2Dテクスチャ用のメモでした。

| UE4 | 11:50 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 現在のレベルを開きなおす(Restart Game)

前回の方法では「Get Current Level Name」ノードと
「Open Level」ノードを使ってレベルを開きなおしましたが
今回は違うやりかたでレベルを開きなおす方法です。

こちらのサイトを参考にさせていただきました。

・UE4で現在のレベルを取得してリセットする→Restart Gameノードでいいよ!
http://konabe.blog.jp/archives/42737706.html

「Open Level」を使ったやり方は以下の感じに。

・現在のレベルを開きなおす(Get Current Level Name、Open Level)
http://kagring.blog.fc2.com/blog-entry-277.html

レベルを開きなおすために「Restart Game」というノードがあります。
RestartGame001.png
「Target」には「Game Mode」を指定します。

実際に使う場合はこんな感じになります。
RestartGame000.png
「Game Mode」として扱うために
「Cast To Game Mode」を使っていることに注意して下さい。

ここらへんは「Game Mode」「Game Mode Base」というものの関係になります。

・Game Mode と Game Mode Base について(Game Mode、Game Mode Base、Get Game Mode)
http://kagring.blog.fc2.com/blog-entry-291.html

UE4はこういった便利ノードが用意されていていいですね。

| UE4 | 12:25 | comments:2 | trackbacks:0 | TOP↑

≫ EDIT

UE4 カメラを振動させる(Camera Shake、Matinee Camera Shake、Client Play Camera Shake、Client Start Camera Shake)

カメラを振動させる方法です。
UE4には標準でカメラを振動させるための機構が用意されているようです。
こちらを参考にさせていただきました!

・[UE4] カメラの振動
http://historia.co.jp/archives/634

まず「Camera Shakeブループリント」を作成します。
「Camera Shake」クラスを継承して
カメラ振動004
ブループリントをアセットとして作成します。
カメラ振動005
こんな感じでアセットを作成します。

この作成した「Camera Shake BP」のアセットの詳細を開いて
振動に関するパラメータを設定します。
カメラ振動003

デフォルトでは必要なパラメータが全てゼロになっており、何も振動しません。。。

とのことです!
参考サイトの通り、赤枠で囲ったパラメータだけとりあえず設定していきましょう。

「Single Instance」 は、同じ「CameraShake」を複数同時に再生した際、
Trueであれば1つだけ、Falseであれば重ねて振動が再生されるようです。
「Oscillation Duration」は振動時間です。秒単位で設定します。
「Rot Oscillation」は回転による振動。
「Loc Oscillation」は移動による振動。
「FOVOscillation」は画角による振動。
というようです。

「Rot Oscillation」の中のパラメータは「Yaw」「Pitch」「Roll」
「Loc Oscillation」は「X「」Y」「Z」の各軸ごとに、それぞれ分かれています。

だそうです!
「Amplitude」が振動の強さ。
「Frequency」が振動の速さを設定できます。

とりあえず参考サイトの通りのパラメータ(画像の状態)でカメラを振動させてみましょう。

「Camera Shake BP」を使ってカメラを振動させるには
「Client Play Camera Shake」ノードを使います。
カメラ振動001
「Target」には「Player Controller」を指定します。
「Shake」には作成した「Camera Shake BP」を指定します。
「Scale」は振動の倍率です。0.0だと振動しないので注意しましょう。
「Play Space」は振動を制御する空間…なのだと思います。よくわかってないのでそのうち調べてみます。
「User Play Space Rot」も「Play Space」に関わる項目だと思います。

といった感じで、こんな風にBPを作るとカメラ振動させることができます。
カメラ振動000

「Camera Shake BP」のパラメータであったり、
「Play Space」など、詳細を設定する項目がたくさんありますが
今回はこんな感じで普通にカメラを振動させることができました。
細かいパラメータについてもそのうち勉強しないとまずそうですね…。

4.26 追記。
4.26 以降では BP の「Camera Shake」はなくなっているようです。

こういうツイートをみかけました。

「Camera Shake」と同じ動作が4.26 以降は「Matinee Camera Shake」というものに置き換わっているようです。
カメラシェイクBP変更000

BPでの再生方法も「Client Play Camera Shake」から「Client Start Camera Shake」に置き換わっているようです。
カメラ振動426_001

上記の旧式のカメラ振動とは別に新しい方式のカメラ振動が実装されているようです。

・カメラの揺れ
https://docs.unrealengine.com/4.27/ja/AnimatingObjects/Sequencer/Cameras/CameraShakes/

Unreal Engine の Camera Shake ブループリントを使用すると、カメラにカメラの揺れの効果を追加できます。このガイドでは、 CameraShakeBase ブループリントを作成する方法、使用可能な揺れの種類、およびそれらをシーケンサ、ブループリント、カメラの揺れソースで再生する方法の概要について説明します。

まだ詳しくは調べていないので、近いうちに調べてみようと思います。

| UE4 | 15:34 | comments:0 | trackbacks:0 | TOP↑

PREV | PAGE-SELECT |