凛(kagring)のUE4とUnityとQt勉強中ブログ

2016 年から UE4 を触り始めました。勉強したもののメモ用のブログです。C++ での Qt、Unity も少しあります。

≫ EDIT

UE4 マテリアルノードのドキュメントなど参考いろいろ

マテリアルノードに関する参考になるものいろいろメモ。

公式ドキュメントはこちら。

・マテリアル
http://api.unrealengine.com/JPN/Engine/Rendering/Materials/index.html

・Material 入力
http://api.unrealengine.com/JPN/Engine/Rendering/Materials/MaterialInputs/index.html

・マテリアル式リファレンス
http://api.unrealengine.com/JPN/Engine/Rendering/Materials/ExpressionReference/index.html

・Math 表現式
http://api.unrealengine.com/JPN/Engine/Rendering/Materials/ExpressionReference/Math/

・マテリアル関数
http://api.unrealengine.com/JPN/Engine/Rendering/Materials/Functions/

随時更新中。
スポンサーサイト

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

≫ EDIT

UE4 入力されたカラーを指定した RGBA チャンネルでマスクして出力する(Component Mask)

マテリアル関数について勉強中ですメモ。
今回は入力で受け取ったカラー値のRGBAを指定してマスクして出力する方法です。

マテリアル関数の公式ドキュメントはこちら。

・マテリアル関数
http://api.unrealengine.com/JPN/Engine/Rendering/Materials/Functions/index.html

RGBA チャンネルを指定してマスクするには
「Component Mask」ノードを使います。
ComponentMask000.png
「Mask」としか表示されないため探すのに手間取りました(´;ω;`)
入力のカラーを指定したRGBチャンネルでマスクして出力します。

「Component Mask」の公式ドキュメントはこちら。

・ComponentMask
http://api.unrealengine.com/JPN/Engine/Rendering/Materials/ExpressionReference/Math/#componentmask

ComponentMask 表現式は、入力値から出力へ渡すためのチャンネル (R、G、B および / もしくは A) の特定サブセットの選択を有効にします。入力に存在しないチャンネルを通過しようとすると、入力値が単一の定数値でない限りエラーが生じます。その場合、単一値が各チャンネルを通過します。値が通過するチャンネルとして現在選択されたチャンネルは、表現式のタイトルバーに表示されます。


「Component Mask」ノードの詳細にあるチェックボックスで指定できます。
ポストプロセス007
上記だとRGBだけにするようにマスクしたといった感じですね。

使ってみるとこんな感じに。
ポストプロセス008
入力されたカラーのRGBだけを抜き出して違うカラーと掛け合わせています。

結構使いそうなノードですねこれ。

| UE4 | 14:43 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 ポストプロセスマテリアル(Post Process Material)でカメラ位置から周囲の色を変化させる(Sphere Mask、Linear Interpolate、Constant)

ポストプロセスマテリアル(Post Process Material)を使って
カメラから周囲の色を変化させる方法です。

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

とりあえずなんやかんやでポストプロセスボリュームを配置して
ポストプロセスマテリアルを設定します。

ポストプロセスマテリアルの基本はこちらに。

・UE4 ポストプロセスエフェクト(Post Process Effects)にマテリアルを作成して適用する(ポストプロセスマテリアル(Post Process Material))
http://kagring.blog.fc2.com/blog-entry-404.html

参考記事にあるとおりマテリアルを組んでみました。
SphereMask004.png
「そのピクセルのワールド座標」と「カメラの位置」を取ってきて
「Sphere Mask」を使って「0-1000」までの距離」で色を変化させる
という処理ですね。
個別のノードに対しては別個記事を書こうと思います。

結果はこんな感じに。
SphereMask000.png
参考記事にある通り近くのものは白く。遠くのものは黒くなりました。
現在の画面を入力に使っていないため、白と黒だけの画面になりました。

これを現在の画面に適用してあげます。
ノードを組むとこんな感じに。
SphereMask002.png
「現在の画面」を取ってきて「RGB」要素を
先程の「Sphere Mask」の値と「Linear Interpolate(Lerp)」で補完
してあげます。

するとこんな感じに。
SphereMask001.png
ばっちりですね!

今回はただの黒にしているだけなのでフォグとあまり変わりませんが、
色の変化を工夫すれば距離に応じていろいろできそうです。
カメラに近づいた時に黒くするとかもできそうですね。

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

≫ EDIT

UE4 ビヘイビアツリー(Behavior Trees)の停止と再開(Stop Logic、Restart Logic)

ビヘイビアツリー(Behavior Trees)実行中に停止する方法と、
停止状態から再開する方法です。

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

・UE4 AIで使う移動と停止のまとめ
http://unrealengine.hatenablog.com/entry/2017/06/14/005914

ビヘイビアツリー(Behavior Trees)を停止させるには
「Stop Logic」ノードを使います。
AIの停止と再開001
「Target」には「Brain Component」を指定します。
「Reason」は…謎ですね…。誰か教えてください…(´;ω;`)

ビヘイビアツリー(Behavior Trees)停止状態から再開するには
「Restart Logic」ノードを使います。
AIの停止と再開000
「Target」には「Brain Component」を指定します。

両方ともつかってみるとこんな感じになります。
AIの停止と再開002
「AI Controller」から「Brain Component」が取得できるので
それを入力につなげてみてください。

以下補足引用。

"Stop Logic"ノードはビヘイビアツリーの実行を完全に止めます。停止後に再スタートしたい場合には"Restart Logic"を呼び出してください。結果的にこれでMoveToも止めておくことができます。

ビヘイビアツリー自体が停止するので、外部のブループリントから呼び出す必要があります(AIControllerあたりでやるのがベスト)。


だそうです!

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

≫ EDIT

UE4 AIでの移動停止系ノードまとめ(Stop Movement Immediately、Stop Active Movement、Stop Movement Keep Pathing、Stop Movement)

AIでの移動停止系ノードまとめです。

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

・UE4 AIで使う移動と停止のまとめ
http://unrealengine.hatenablog.com/entry/2017/06/14/005914

「Stop Movement Immediately」ノード。
移動停止003
「Target」には「Movement Component」を指定します。

"Stop Movement Immediately"は移動を即座に停止させるノードです。厳密に言えば、速度をゼロに設定してしまうので、移動ができなくなります。このノードだけ、ナビゲーション情報がないコンポーネントにも適用可能なので、例えば"Projectile Movement"や"Interp to Movement"コンポーネントにも適用が可能です。

組んでみるとこんな感じに。
移動停止006

「Stop Active Movement」ノード。
移動停止004
「Target」には「CharacterMovement」か「FloatingPawnMovement」を指定します。

次に"Stop Active Movement"です。これも上記とほぼ同じで、速度をゼロに設定します。違いはCharacterMovementかFloatingPawnMovementが必要というところくらいしかないようです。基本的にはこれでも止まります。


「Stop Movement Keep Pathing」ノード。
移動停止002
「Target」には「CharacterMovement」か「FloatingPawnMovement」を指定します。

最後に"Stop Movement Keep Pathing"です。こいつがトラップです。止まりません。いや、厳密には速度が0になるので、一時的にストップしますが、MoveToを使っている場合は一瞬だけ止まった後に再度加速を始めて移動を開始します。一番使い道がなさそうな気がします。

上記2つは組んでみるとこんな感じですね。
移動停止007
「Character Movement」を指定したり
移動停止006
「Movement Component」を指定したりします。

最後に「Stop Movement」ノード。
移動停止001
「Target」には「Controller」を指定します。

最後に"Stop Movement"です。これはターゲットがControllerになっているくらいでほとんど上記と同じですが、速度をゼロにするわけではなさそうです。とは言えやっていることはほぼ同じなのでもうこれでいいような気がします。

組んでみるとこんな感じに。
移動停止000

とりあえずは「Stop Movement」ノードを使っておけばいい気がしますが
他のノードを使う場面が気になるところではありますね。

| UE4 | 14:10 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 入力されたオブジェクトが有効かどうかチェックするノードとフローノード(Is Valid、?Is Valid)

入力されたオブジェクトが有効かどうかチェックするためのノードと、
それのフローノードについてです。

入力されたオブジェクトが有効かどうかチェックする場合、
通常は「Is Valid」ノードを使います。
IsValid003.png
入力されたオブジェクトが有効ならtrueが返ります

使ってみるとこんな感じですね。
IsValid002.png

さて、これのフローノード版です。

こちらを参考に。

・?Is Valid - Help!
https://answers.unrealengine.com/questions/434960/is-valid-help.html

「?Is Valid」というノードがあるようです。
IsValid001.png
「Is Valid」と「Branch」ノードを合体させたようなものみたいですね。
「Input Object」が有効なら「Is Valid」フローへ。無効なら「Is Not Valid」フローが実行されます。

使ってみるとこんな感じに。
IsValid000.png

どちらを使っても良さそうな気はします。
どう使い分けるのがよいのかはちょっとわからないですね…。

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

≫ EDIT

UE4 AIでの移動系ノードまとめ(Simple Move To Actor、Simple Move To Location、Move To Location or Actor、Move To Location、Move To Actor、AI MoveTo)

AIでの移動系ノードまとめです。

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

・UE4 AIで使う移動と停止のまとめ
http://unrealengine.hatenablog.com/entry/2017/06/14/005914

まずは「Simple Move To Actor」と「Simple Move To Location」ノード。

これらのノードは"Controller"と位置、もしくはActorを与えてあげるだけで簡単に移動させることが可能です。移動後はゴールに辿りつけるか関係なく、その後にコールバックイベントが発生するといったこともありません。

単純に移動したいという目的のみで利用します。

とのことです。

「Simple Move To Actor」。ノード。
SimpleMoveActor001.png
「Controller」には「Controller」を指定します。
「Goal」にはアクターを指定します。

「Simple Move To Location」ノード。
SimpleMoveActor003.png
「Controller」には「Controller」を指定します。
「Goal」には位置を指定します。

使うとこんな感じですね。
「Simple Move To Actor」ノード。
SimpleMoveActor000.png

「Simple Move To Location」ノード。
SimpleMoveActor002.png

次に「Move To Location or Actor」
「Move To Location」「Move To Actor」ノードです。

基本的には"Simple Move to"系の強化版と考えてもらって問題ありません。AIControllerを渡して、位置もしくは対象Actorを渡すと移動します。

到達半径の設定や他にも色々と設定可能ですが、最大の特徴は"Use Pathfinding"のチェックを外すと、なんとナビゲーションメッシュがなくても移動を開始します。

とのことです。

「Move To Actor」ノード。
MoveToLocation004.png
「Target」には「AI Controller」を指定します。
「Goal」には目標となるアクターを指定します。
「Acceptance Radius」は到達チェック用の半径距離のようです。
「Use Pathfinding」はナビメッシュを使うかどうかを指定します。
他の入力については調べ中です。

「Move To Location」ノード。
MoveToLocation005.png
「Move To Actor」ノードとほぼ入力は同じになります。
「Dest」には目標となる位置を指定します。
他の入力については調べ中です。

上記2つは

ただしこれらのノードはコールバックイベントはなく、実行後に移動が開始できたかのReturn値のみを返すというところが"AI MoveTo"との違いです。

ということみたいですね。

「Move To Location or Actor」ノード。
MoveToLocation002.png

Move To系でありながら、これまで紹介してきた全てのMove Toノードの機能を内包しているのがこの"Move To Location or Actor"です。
AIControllerを渡して、位置か対象Actorを渡すと移動を開始します。
"Use Pathfinding"を外すとナビメッシュなしで移動でき、"AI MoveTo"のようにコールバックイベントが返ってきます。

基本的にこのノードさえあれば全てやりたいことが可能なはずです。というくらいにかなり万能なノードです。

といった便利ノードみたいですね。
「Move To Actor」ノードとほぼ入力は同じみたいですね。
他の入力については調べ中です。

組んでみるとこんな感じに。
MoveToLocation001.png

最後に「AI MoveTo」ノードです。
AIMoveTo000.png

AI MoveToの特徴はControllerを必要とせず(ただ内部的に引数であるPawnがAIControllerを持っていることが必須)、到達半径等ある程度細かい設定を行うことが可能です。

位置、もしくは対象Actorを渡すだけで移動します。
移動開始後すぐに一番上のピンが実行され、目的地に到達すると"On Success"、到達できないことが確定すると"On Fail"がそれぞれ返ってきます。
"Movement Result"にはそれぞれコールバックイベントが来た時点での移動状況が返ってきます。

とのことです。

遅延(Latent)ノードなのが特徴みたいですね。

結構ノードが多いのでどれを使ったらと悩みますね…。
とりあえずは「Move To Location or Actor」を使っとけば。みたいな感じでしょうか。

| UE4 | 16:23 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

Unity Unite Tokyo 2018

Unite Tokyo 2018 が開催されたので制作メモ。

Unite Tokyo 2018
http://events.unity3d.jp/unitetokyo2018/index.html








アニメ系とかキャラクター表現についてはツール関係なく参考になりそうです!

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

≫ EDIT

UE4 ナビゲーションメッシュ(Nav Mesh)を使わない簡単な直線移動を実装する(Move To Location or Actor、Move To Location、Move To Actor)

AIでの簡単な直線移動を実装する方法です。
今回の方法ではナビゲーションメッシュ(Nav Mesh)を使わないで移動しています。

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

・[UE4] ランダムに移動するキャラクターを簡単に実装する方法
http://historia.co.jp/archives/7101/

直線で移動させるために今回は
「Move To Location or Actor」ノードを使いました。
MoveToLocation002.png
「Goal Location」に目標位置を指定します(アクターの場合はGoal Actorに指定します)
ナビメッシュを使わないので「Use Pathfinding」のチェックを外します(後述)
他の細かいパラメータの部分はちょっと割愛します。

公式ドキュメントはこちら。

・Move To Location or Actor
https://api.unrealengine.com/INT/BlueprintAPI/AI/Tasks/MoveToLocationorActor/index.html

ノードの細かい説明はこちらが参考になると思います。

・UE4 AIで使う移動と停止のまとめ
http://unrealengine.hatenablog.com/entry/2017/06/14/005914

到達半径の設定や他にも色々と設定可能ですが、最大の特徴は"Use Pathfinding"のチェックを外すと、なんとナビゲーションメッシュがなくても移動を開始します。

ということで今回は「Use Pathfinding」のチェックを外しました。

あとはこんな感じでヒストリアさんのサイトを参考にBPを組みます。

ランダムな位置を取得するための範囲を配置したり。
MoveToLocation003.png

その範囲内の位置を取得する関数を作成したり。
MoveToLocation000.png

あとは「Move To Location or Actor」ノードを使って
取得したランダムな位置に移動するようにしてみました。
MoveToLocation001.png

これの結果がこんな感じに。

それっぽく動きました!

「Move To Location or Actor」ノード以外にも
「Move To Location」ノードや
MoveToLocation005.png

・Move to Location
http://api.unrealengine.com/INT/BlueprintAPI/AI/Navigation/MovetoLocation/index.html

「Move To Actor」ノードというものもあります。
MoveToLocation004.png

・Move to Actor
http://api.unrealengine.com/INT/BlueprintAPI/AI/Navigation/MovetoActor/index.html

Move To系でありながら、これまで紹介してきた全てのMove Toノードの機能を内包しているのがこの"Move To Location or Actor"です。

ということみたいなので
特に問題がなければ「Move To Location or Actor」ノードを使えばいいみたいですね。

AIの移動系ノードは別途どこかでまとめようと思います。

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

≫ EDIT

UE4 ナビゲーションメッシュ(Nav Mesh)を使った簡単な移動を実装する(Simple Move To Actor、Simple Move To Location)

ナビゲーションメッシュ(Nav Mesh)を使ったAIキャラクターの簡単な移動処理です。

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

・UE4のNavmeshを使ってみる
http://pafuhana1213.hatenablog.com/entry/2014/06/08/190825

簡単なナビメッシュを使った移動には
「Simple Move To Actor」や「Simple Move To Location」ノードを使います。

「Simple Move To Actor」はアクターを終了地点とするノードです。
SimpleMoveActor001.png
「Controller」には「Controller」を指定します。
「Goal」には終了地点となる「Actor」を指定します。

「Simple Move To Location」は位置を終了地点とするノードです。
SimpleMoveActor003.png
「Controller」には「Controller」を指定します。
「Goal」には終了地点となる位置を指定します。

ノードの説明はこちらも参考にさせていただきました!

・UE4 AIで使う移動と停止のまとめ
http://unrealengine.hatenablog.com/entry/2017/06/14/005914

これらのノードは"Controller"と位置、もしくはActorを与えてあげるだけで簡単に移動させることが可能です。移動後はゴールに辿りつけるか関係なく、その後にコールバックイベントが発生するといったこともありません。
単純に移動したいという目的のみで利用します。


というわけで組んで見るとこんな感じに。

「Simple Move To Actor」版。
SimpleMoveActor000.png

「Simple Move To Location」版。
SimpleMoveActor002.png

ちなみにこれは「Get Controller」で「Controller」を渡していますが、
「Get AIController」で取得した「AI Controller」でも問題なさそうです。

実行してみるとこんな感じに。

操作キャラクターに向かって移動するように実装してみました。
とりあえずナビゲーションメッシュを使って単純に移動させるだけならこれで大丈夫そうですね。

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

≫ EDIT

UE4 AI を制御するための AI Controller を取得する(Get AIController)

AI を制御するための「AI Controller」を取得する方法です。

こちらを参考に。

・【UE4】AIについて(その1)
http://meganeo.blog.shinobi.jp/ue4/%E3%80%90ue4%E3%80%91ai%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%EF%BC%88%E3%81%9D%E3%81%AE%EF%BC%91%EF%BC%89

(2)AIController
 AI制御のキモとなるアクターです。
 Actor→Controller→AIControllerのような継承関係であり、
 プレイヤー制御を行うPlayerControllerと同じ継承関係です。
 PlayerControllerはゲーム上で必ず存在する対し、
 AIControllerも同様にAIを使わない場合でも必ず存在します。
 (CharacterやPawnが持っています)

ということだそうです。

AI Controller を取得するには「Get AIController」ノードを使います。
AIController001.png

公式ドキュメントはこちら。

・Get AIController
http://api.unrealengine.com/INT/BlueprintAPI/AI/GetAIController/

ちなみに使ってみるとこんな感じに。
AIController000.png

AIのキャラクターを動かしたり、制御したりするのに頻繁に使うことになりそうです。

| UE4 | 14:32 | comments:0 | trackbacks:0 | TOP↑

| PAGE-SELECT | NEXT