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

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

≫ EDIT

UE4 指定した値が範囲内のどれぐらいの割合なのかを取得する(Normalize to Range)

指定した値が二つの値の範囲のどれぐらいの割合なのかを取得する方法です。

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

・ちょっと変わった形のゲージをメッシュで作る《宿題編》
http://limesode.hatenablog.com/entry/2018/06/17/104137

上記で使っている「Normalize to Range」ノードで
指定した値が二つの値の範囲のどれぐらいの割合なのかを
取得することができます。
NormalizeToRange002.png
「Value」には調べたい値を指定します。
「Range Min」には範囲の最小値を指定します。
「Range Max」には範囲の最大値を指定します。

上記のノードのように値を設定すると結果こんな感じになります。
NormalizeToRange000.png
「0.0」から「200.0」の範囲内で「150.0」がどの割合にいるかということで
「0.75」が返ってきています。

※ふと気づいたのですが、MinとMaxで指定する値逆ですね…。
それでもちゃんと動いてるのは凄いですね。

実際につかってみるとこんな感じに。
NormalizeToRange001.png

いろいろと使えそうですね。

補足ですが4.18までは上記機能のノードはノード名が違うようです。

「Inverse Lerp」というノードだったようです。
スポンサーサイト

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

≫ EDIT

UE4 アセットがどこで参照されて使われているかを調べる(リファレンスビューワー(Reference Viewer (参照ビューア)))

指定したアセットがどこで参照されて使われているかを調べる方法です。
Reference Viewer (参照ビューア)というものを使うことで、
アセットがどこで参照されているかをグラフ化して表示することができます。

こちらで詳しい説明がされています。

・UE4で超便利なリファレンスビューワーを使ってみよう
http://unrealengine.hatenablog.com/entry/2014/05/21/204323

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

・Reference Viewer (参照ビューア)
http://api.unrealengine.com/JPN/Engine/Content/Browser/ReferenceViewer/

まずはこんなアセットがあるとします。
リファレンスビュアー001
テクスチャのアセットですね。

これがどこで使われている(参照されている)かを調べます。
アセットを選択肢て右クリックででるメニューの
「Reference Viewer」を選択します。
リファレンスビュアー002

そうするとこんな感じで参照グラフが表示されます。
リファレンスビュアー003
マテリアルからテクスチャが参照されている感じですね。

実際の実行画面ではこんな感じになっています。
リファレンスビュアー000
マテリアルがテクスチャを参照しているのであっていますね。

これはかなり使えると思うのでばしばし使っていきたいですね!(最近知りました

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

≫ EDIT

UE4 ビヘイビアツリー(Behavior Tree)を実行する(Run Behavior Tree)

ビヘイビアツリー(Behavior Tree)を実行する方法です。
ビヘイビアツリー自体の作り方や制御の仕方についてはまた別途ということで。

こちらを参考にしました。

・ビヘイビアツリーのクイックスタート ガイド
http://api.unrealengine.com/JPN/Engine/AI/BehaviorTrees/QuickStart/index.html

・8. Controller ブループリント:ビヘイビアツリーを実行する
http://api.unrealengine.com/JPN/Engine/AI/BehaviorTrees/QuickStart/8/index.html

ビヘイビアツリーを実行するには「Run Behavior Tree」ノードを使います。
RunBehaviorTree000.png
「Target」には「AI Controller」を指定します。
「BT Asset」にはビヘイビアツリーを指定します。

このノードの詳細についてはこちらの資料が参考になります。

UBehaviorTreeComponent がなければ AAIController に追加する  RunBehaviorTree() を何度も呼び出しても UBehaviorTreeComponent は 1 つだけしか付加されない

引数 BTAsset に Blackboard Asset が指定されていて、 かつ UBlacokboardComponent が存在しないか 存在していても互換性がない場合、 UseBlackboard() が実行される  UseBlackboard() Node を実行しなくても UBlackboardComponent が追加されていたのはこのため  既存の Blackboard の Asset が BTAsset が指定する Blackboard Asset の親である場合、 または両者の Key がすべて同一であれば、 互換性があると見なされる  要するに、これから実行する BehaviorTree 内で使われる可能性のある Key が 既に存在する UBlackboardComponent 内に無いのは困るので、 その場合は UBlackboardComponent を作り直してしまえ、ということ

引数 BTAsset が NULL のときのみ false を返す

ここらへんは内部処理として覚えておきたいですね。

実際に使ってみるとこんな感じになります。
RunBehaviorTree001.png

あとはビヘイビアツリーの中身次第ですね。

| UE4 | 00:57 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 プレイヤーのスポーン(Spawn)位置を設定する(Player Start)

テンプレートでレベルを作成した際などに、
レベルにプレイヤーを置いて、そのプレイヤーの位置からプレイするとはじまりますが
それとは別に、プレイヤーがスポーン(Spawn)する位置を設定する方法です。

普通はこんな感じでプレイヤーが配置されていると思います。
PlayerStart005.png

プレイヤーがスポーン(Spawn)する位置を設定するには
「Player Start」というアクターを使います。

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

・Player Start
http://api.unrealengine.com/JPN/Engine/Actors/PlayerStart/index.html

プレイヤーをワールドの任意の場所にスポーンする機能は、
あらゆるゲームで非常に役立つ機能です。
UE4 には、これを行う Player Start という特殊なアクタがあります。
Player Start は、ゲーム ワールド内のプレイヤーの開始位置です。


とりあえず「Player Start」アクターを配置してみましょう。

Player Start アクタは、[Modes (モード)] パネルの [Basic (基本)] カテゴリにあります。


「Player Start(プレイヤースタート)」アクターをワールドに配置します。
PlayerStart000.png
こんな感じになりました。
PlayerStart001.png
コントローラーみたいなアイコンが表示されているはずです。

あとは「プレイ」項目の「プレイヤーを特別な位置にスポーンする」の項目を
「Player Start」に指定することで、「Player Start」の位置から始めることができます。
PlayerStart002.png

これで一応設定は終了です。

ですが、ちゃんと設定したのにプレイヤーの位置変わらないんだけど!
という状況が発生すると思います。

ずばりこれですね!

・Player Start位置で開始されない
https://answers.unrealengine.com/questions/591958/player-start%E4%BD%8D%E7%BD%AE%E3%81%A6%E9%96%8B%E5%A7%8B%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84.html

既にプレイヤーキャラクターをレベルに配置している場合。
設定によってはそちらが優先されてしまい「Player Start」が無視されしまうようです。

プレイヤーキャラクターを選択して詳細を開き
PlayerStart005.png

「Auto Possess」が「Player N」になっていると思うので
PlayerStart003.png
「Disable」に設定してあげましょう。
PlayerStart004.png
こんな感じですね。

これで無事スポーン位置が変わったと思います!

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

≫ EDIT

UE4 第6回UE4勉強会 in 大阪

第6回UE4勉強会 in 大阪 という大阪でのイベントがあったようなのでまとめです。
ツイッターでお気に入りにしていたのに忘れていたのでいまさらですが…。

・第6回UE4勉強会 in 大阪
https://ue4study-osaka.connpass.com/event/86875/




とりあえず自分用メモとして。

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

≫ EDIT

UE4 ポストプロセスエフェクト(Post Process Effects)の既存機能(レンズフレア(Lens Flare))

ポストプロセスエフェクト(Post Process Effects)の既存機能を実装する方法です。
今回はレンズフレア(Lens Flare)についてです。

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

・ポストプロセス エフェクト
http://api.unrealengine.com/JPN/Engine/Rendering/PostProcessEffects/

・レンズフレア
http://api.unrealengine.com/JPN/Engine/Rendering/PostProcessEffects/LensFlare/index.html

レンズフレア 効果は、カメラレンズのマイナスの特性が原因で、明るいオブジェクトが表示されると光源の散乱をシミュレートする画像ベースの技術です。


といったもののようです。

とりあえずやってみましょう。
まずは「Post Process Volume」を配置します。
ポストプロセス010

「Post Process Volume」の詳細にある「Lens」の「Image Effects」の
「Lens Flares」をいじってみましょう。
レンズフレア001

こんな感じになりました。
レンズフレア000

パラメータの詳細についてはドキュメントを見るのが早そうです。

「Tint」
レンズフレア効果全体の色調を弱めます。
「Threshold」
レンズフレア効果を出すためのピクセルの最低輝度を定義します。閾値が高ければ高いほど、閾値を通過するピクセル量に加フィルレート コストが直線的に増加するためパフォーマンスが向上します。
「Bokeh Size」
ボケ形状の半径をスケーリングします。活用例:画像ベースのレンズフレアの見た目とパフォーマンスの微調整 (半径を 2 倍 -> 描画速度が 4 倍増)。
「Bokeh Shape」
レンズフレアの形状を定義する際に利用するテクスチャ。
「Lens Flare Tints」(1/2/3/4/5/6/7/8)
個々のレンズフレアの色調を弱めます。
「Intensity」
画像ベースのレンズフレアの輝度スケール (リニア)。

となるようです。

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

≫ EDIT

UE4 アーティスト向け勉強会 in 大阪 メモ

UE4 アーティスト向け勉強会 in 大阪 というのがあったらしいのでメモです。

・UE4 アーティスト向け勉強会 in 大阪
https://connpass.com/event/87365/

記事が上がっているものをぺたり。





こういう資料はとても助かりますね。

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

≫ EDIT

UE4 Output Log にタイムスタンプを表示するようにエディタで設定する(Log Timestamp Mode)

Output Log に時間が表示されるようにする方法です。
発端はおかずさんのこちら。

というわけでやってみましょう。

まずログ自体はこんな感じで表示されます。
ログにタイムスタンプ003
この各行の頭に時間を表示してみます。

「エディタの環境設定」を選択します。
ログにタイムスタンプ000

「外観」の項目を選びます。
ログにタイムスタンプ001

「Log Timestamp Mode」を「None」以外に設定します。
ログにタイムスタンプ002

結構種類がありますね。
ログにタイムスタンプ004

試しに「Local time」に設定してみるとこんな感じに。
ログにタイムスタンプ005

個人的にはいつのやつかわかったほうがいいので表示を推奨したいですが
ログがごちゃごちゃするかもなので好みかもしれませんね。

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

≫ EDIT

UE4 フローノードを関数の中で呼び出したときの罠(Multi Gate、Flip Flop、Do Once)

「Multi Gate」「Flip Flop」「Do Once」ノードを使ったノード郡を
関数化したときにハマったのでメモです。

詳しくはこちらの記事でも書かれています。

・A と B を交互に切り替える処理でハマった話
http://limesode.hatenablog.com/entry/2016/11/20/014817

簡単に言うと
「Multi Gate」「Flip Flop」「Do Once」などの次回に処理を持ち越すノードを関数の中で使うと機能しなくなる。
といったもののようです。

自分はノードをべた書きした後、見やすいように関数化したりまとめたりしていたので
関数化したら動かなかった!という風にハマったので自戒としてのメモです。

みつまめ杏仁さんが書かれている

あくまでも推測ですが、
切り替えるには、状態を保持しておく値が必要で、関数内からはその値が参照できなくなるんじゃないかと思ってみたり。

こういう内部処理が原因なんじゃないかなーと。

というわけでどんな事が起きるかというのと解決方法です。

まずはこんな処理を組みます。
フローノードの関数化バグ000
ランダムな順番でHello1とHello2が表示されるような処理です。

これを「Event Tick」移行を関数化してみます。
フローノードの関数化バグ001
こんな感じですね。

その関数を呼んでみます。
フローノードの関数化バグ002
何故かこの関数を呼ぶたびに「Hello1」が表示され続けます(Hello2表示され続ける場合もあり)
※本来は交互に表示されてほしい
なんでやねん…!ということではまりました。

解決方法としてはまとめるだけなら「マクロ」を使ってまとめる(関数にはしない)
マクロならレイテントノードも使えるのでよさそうです。

もしも関数のように複数の箇所から呼びたい場合は
カスタムイベントを作るのがよさそうです。

こんな感じにカスタムイベントを作って呼んであげると良さそうです。
フローノードの関数化バグ003

「関数」「マクロ」「カスタムイベント」はかなり気を使って使い分けないとまずそうですね。

よくよく考えてみると確かにそうなりますよねって感じなのですが
公式ドキュメントにはそんなことさっぱり書いてないので小一時間悩みました(´;ω;`)ウッ…

・MultiGate
http://api.unrealengine.com/JPN/Engine/Blueprints/UserGuide/FlowControl/#multigate

というバッドノウハウでした!

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

≫ EDIT

UE4 固定値を使う(Constant)

マテリアルノードについて勉強中ですメモ。
固定値を使う方法です。

固定値を使うには「Constant」系ノードを使います。
Constant000.png
「Constant」系ノードはfloatだったりVectorだったり様々あります。

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

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

使うとこんな感じに表示されます。
Constant001.png
これもまたノード名がでない…!
「Value」なのか「Literal」なのかとかすごい悩みました…なのでメモです!

実際にノードを組むとこんな感じです。
SphereMask002.png
これはフォグみたいなことをやっている処理なのですが
ワールド座標をカメラからの距離で計算して色を変更しています。

結果はこんな感じになっています。
SphereMask001.png

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

≫ EDIT

UE4 alwei さん作のポストプロセス セルシェーダー(PPCelShader)を使ってセルシェーディングを実装する

alwei さんがポストプロセスによるセルシェーディング(PPCelShader)を公開されたので実装してみました。
セルシェーディングバンザイ!(^Q^)

UE4では標準で自分が作っているようなアニメ調のモデルに適用するセルシェーディング系が
用意されていないのでとても助かります!(公式で用意されるといいな!)

ポストプロセス セルシェーダー(PPCelShader)はツイートにもある通り
こちらで公開されています。

・Unreal Engine 4 ポストプロセス セルシェーダー
https://github.com/alwei/PPCelShader

まずは一式ダウンロードしましょう。

※GitHub にも書かれている通り 4.19 で作成されているので注意しましょう。

対応Ver UE 4.19.2


自分のプロジェクトに適用する場合、
Contents 内の PPCelShader にあるアセットを移行しましょう。
UE420180528_03.png
エクスプローラーだとこのフォルダの中にあるものですね。

移行方法はこちら。

・開いているプロジェクトで使っているアセットをほかのプロジェクトに持っていく
http://kagring.blog.fc2.com/blog-entry-311.html

無事自分のプロジェクトにアセットを移動できたら早速適用してみましょう。
まずはポストプロセスボリュームを配置してポストプロセスマテリアルに設定しましょう。
UE420180528_04.png
こんな感じですね。
「PPI_CelShader」と「PPI_Deffusion」をポストプロセスマテリアルに設定します。

ポストプロセスボリュームとポストプロセスマテリアルについてはこちらに。

・ポストプロセスエフェクト(Post Process Effects)を実装する(Post Process Volume)
http://kagring.blog.fc2.com/blog-entry-402.html

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

このポストエフェクトを適用してみるとすぐにこんな感じに!
UE420180528_00.png
なんて簡単なのでしょう…すばら!

Gray ちゃんでテストしてみるとこんな感じです。
UE420180528_01.png
適用前はこんな感じに普通のシェーディングなのですが
UE420180528_02.png
PPCelShader を適用するとこんな感じのセルシェーディングに!

UE4では標準で自分が作っているようなアニメ系のモデルに適用するセルシェーディング系が
用意されていないのでとても助かりますね!(大事なことなので二回)

適用自体はこんな感じで簡単にできるので、UE4でもアニメ系のゲームだったりが増えるといいなーと。
アニメ調の見た目が好きなので!

それと、補足として alwei さんがこんなことを書かれているのでぺたり。


公開直後にダウンロードした人は最新版をもう一度とったほうがよいかもです。

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

| PAGE-SELECT | NEXT