ゲーム開発備忘録

ゲームプログラマー UE4・5向けの記事を書いておりますので見ていただけるとありがたいです。

【UE5.4】〈Tips〉新プラグインTextureGraphを使ってみた

目次

 

はじめに

個人の備忘録としてまとめています。誤った情報がある場合があります。

コメントにてご指摘のほどお願いいたします。

今回はUE5.4から実装されたプラグインTextureGraphについて触ってみたので解説しています。

TextureGraph は執筆現在、実験段階のプラグインなので、UIや機能が大きく変わる可能性が非常に高いです。
開発のプロジェクトで利用することは推奨されていませんのでご注意ください。

 

環境

UE5.4.0 preview

TPSample

概要

TextureGraphプラグインはテクスチャの加工、生成に特化したエディタ機能です。
これまで、Textureの加工はマテリアルエディタ内で行っていましたが、ノードの煩雑化や再利用性が非常に乏しいものでした。

TextureGraphはテクスチャを加工してアセットとして出力するだけでなく、編集可能な1つのテクスチャグラフアセットとして独立することができます。これによりランタイム上で加工済みのテクスチャを入れ替えたり、テクスチャに特化したフィルタ機能などが利用できるようになりました。

 

解説 -プラグインの有効化-


プラグインウィンドウの表示

編集->プラグインからプラグインウィンドウを開きます。

 

②TextureGraphの有効化

すべてのプラグインからTextureと検索し、TextureGraphというプラグインを有効化します。

エディタの再起動を求められるので、UE5を再起動しましょう。

 

解説 -アセットの作成-

➀テクスチャグラフアセットの作成

プラグインが有効化されている状態で、

コンテンツフォルダ右クリック->テクスチャ->テクスチャグラフを選択します。


アセットはTextureGraphの頭文字をとってTG_Test01としました。

 

解説 -テクスチャグラフの編集-

➀画面構成

作成したアセットを開きます。


構成について囲ってみました。

流れとしては、ノードを左上から選びグラフに配置、詳細を設定後プレビューする形になります。

 

ノードのプレビューでは選択しているノードを確認できます。

それぞれのノードの詳細設定はグラフ上で展開することで詳細ウィンドウと同じ内容がノード内で確認できます。

 

②基礎的な組み方

実際にノードを組んでどのようなことができるか見てみましょう。

 

こちらの例ではShapeノードで正多角形を生成しカラーをかけて色付きの正五角形の画像を作っています。

 

解説 -(気になる)テクスチャグラフのノード機能-

➀Input

inputはその名の通りデータの入力を担当するノードです。

面白いのはMaterialやTextureGraph事態も入力できるという点です。

 

ただし、TextureGraphを扱う際は自身を参照する循環参照に気を付けてください。(エディタがクラッシュします)

 

SettingノードではOutputに相当する機能があります。
そのため、テクスチャの解像度を可変的に変更することがBPからTextureGraphのセット経由で行うこともできそうです。

 

Inputノードはそれぞれがパラメータとして機能します。※

そのため同一の名前を利用することができませんのでご注意ください。

 

※ ノード右クリックから定数にすることもできます。

見た目が同じなのでわかりづらいです。

 

②output

outputはテクスチャの出力についての項目です。

 

それぞれの設定のOutputSettingをAutoにしておくとOutputノードの設定に応じて解像度や形式が自動で決定するので、基本的にはAutoでよいでしょう。


画像の形式や解像度はOutputノードの設定で決定します。

デフォルトのAutoでは1024×1024の画像が生成されるように設定されています。

 

もちろん自分で指定することもできるので、比率を変えることでこのような生成を行うことも可能です。

 

また、Outputノードは複数配置可能です。

 

モバイル向けに解像度を落としたものを用意したり、テクスチャタイプ別に用意するといったこともできます。

 

③Procedural

プロシージャルノードはTextureGraphの目玉機能といってもいいでしょう。

形状の生成やグラデーション、ノイズ、変形など、マテリアルエディタで頑張っていた機能が使いやすくまとまっています。

 

④Filter

現在はぼかししかないですが、将来的にもっと増えることを期待します!

 

解説 -データの利用-

➀テクスチャアセットして利用

TextureGraphで生成した画像をテクスチャとしてエクスポートします。

 

outputに接続した画像について不可逆的なuassetとしてかき出します。

 

タブのエクスポートを押してかき出します。


成功すると、Outputノードで指定したPathと名前でアセットが出力されます。

 

この状態では通常のテクスチャアセットですので、これまで通りの利用ができます。

 

また、このエクスポートの操作はBPからも行うことが可能なため、エディタユーティリティ系のツールとの親和性も高そうです。

 

余談ですがuassetのテクスチャはUEの機能でPNGBMPといった形式で画像出力も可能なので、外部のペイントツールで加工もできます。(本末転倒)

注意してほしいのはこのエクスポートはアセットのエクスポートであり、
TextureGraphのエクスポートとは全く関係ないのでご注意ください。

 

 

②TextureGraphアセットして利用

執筆時点では、TextureGraphを事前にマテリアルに導入する方法はありません。

TextureGraphが実行時に同期してロードする必要があるからです。
そのため、動的にマテリアルのテクスチャに対して反映する必要があります。

 

DynamicMaterialInstanceについては以前記事で触れているので今回は省略して解説します。

namiton.hatenablog.jp

 

マテリアルの作成と編集

マテリアルを作成します。

 

名前はM_TestMatとしました。

 

DynamicMaterialInstanceで反映できるようにテクスチャのパラメータを作成します。

 

名前をTGInputとして適当なテクスチャをアサインしておきます。

 

適応対象のBPアセットを作成

ブループリントの作成からアクタを作成します。

 

名前はB_TestActorとしました。

 

コンポーネントからキューブを追加します。

 

先ほどのマテリアルをアサインしておきます。

 

TG_Sampleという名前のTextureGraph変数を作成します。

 

インスタンス編集可能にしておきます。

デフォルト値に作成したアセットを反映します。


ノードを開き以下のように組みます。

DMI_TestMatはダイナミックマテリアルインスタンス変数です。

TextureGraphのアセットを非同期でロードし、ロードできたものをマテリアルのTextureパラメータに反映しています。

そのため、ParameterNameを誤字しないように注意しましょう。

 

ロードした値が配列で帰ってくるのは、TextureGraphのOutputが複数持てるからです。

Indexの順番はOutputノードのIndexと一致しています。



配置と実行

この状態でアクタをレベルに配置し実行してみましょう。


TGSampleに登録したTextureGraphがロードさせると上書きできました!

TextureGraphを新規で作ってTG_Sampleに設定することで自由に切り替えることができます。

 

TextureGraphへの値の変更

TextureGraph内のInputパラメータの値についてもBPから変更することが可能です。

 

反映されるタイミングはRenderを行ったタイミングなので、注意が必要です。
また、TG_Sampleに登録されたTG_Test01のアセットを書き換えているので、
参照しているすべてのアセットがRedner時にこの影響を受けるのでご注意ください。


更新タイミングを手動で制御できるマテリアルパラメータコレクションといってもよいでしょう。

 

 

最後に

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。

投げ銭を投げる

 

【UE4・UE5・UEFN】〈Tips〉ボス戦で使える、FF風 攻撃予測機能の作り方

目次

 

はじめに

個人の備忘録としてまとめています。誤った情報がある場合があります。

コメントにてご指摘のほどお願いいたします。

今回はF〇14風の攻撃予測機能の実装方法について簡単にまとめました。

UEFNの厳しい制約下でも動作するようマテリアルの機能を利用しています。

 

環境

UE5.4.0 UEFN

 

解説 (共通)

⓪共通 マテリアルをデカール対応にする設定

地形を無視して貼り付けられるようにデカール対応の設定にします。

コンテンツ右クリックでマテリアルを作成

 

名前はM_VisualizeDamageにしました。

 

マテリアルの詳細からドメインDeferred Decal

ブレンドモードをTranslucentにします。

 

これでデカールの準備は完了です。

BaseColorに任意のカラーを入れてレベルに配置すると、地形に沿って色が塗られることが分かります。


これをベースに機能を作っていきます。

①共通 マテリアルパラメータコレクションの準備

UEFNでマテリアルを制御するには現状MPCとシーケンサーを利用する必要があるため、このためのMPCを作成します。

名前はMPC_VisualizeDamageにしました。

 

制御用のパラメータ、Box,Circle, Sector を用意しました。

 

M_VisualizeDamageを開きコンテンツブラウザからMPCアセットをドラッグアンドドロップすることで利用できるようになります。

 

いよいよこれを利用して実装を作成していきます。

 

解説 ボックス型

共通①で作成したマテリアルを複製し、M_VisualizeDamage_Boxという名前にします。

以下のようにノードを組みます。
元々デカールの形状が四角なので、Step関数とグラデーションを利用することで実現できます。

 

このMPCのBoxに対して0~1を入力することで動かすことができます。

UEFNの場合、任意のシーケンサーなどで0~1, 終了したら定数の0を入れてあげて完了です。

 

解説 円型

共通①で作成したマテリアルを複製し、M_VisualizeDamage_Circleという名前にします。

 

以下のようにノードを組みます。
RadialGradientExoponentialというノードで半径を変更できる円のノードが、あるのでそちらを利用しました。

 

このMPCのCircleに対して0~1を入力することで動かすことができます。

UEFNの場合、任意のシーケンサーなどで0~1, 終了したら定数の0を入れてあげて完了です。

 

解説 扇型

共通①で作成したマテリアルを複製し、M_VisualizeDamage_Sectorという名前にします。

以下のようにノードを組みます。

VectorToRadialValueを利用することでレーダーのようなふるまいをすることができます。これを円形でマスクすることで扇形を実現しています。

 

大きくなってしまったので拡大しているスクショも上げています。

拡大

 

このMPCのSectorに対してRに0~1、Gに0~360度を入力することで動かすことができます。

UEFNの場合、任意のシーケンサーなどでRに0~1, 終了したら定数の0を入れてあげて、Gに度数を入れて完了です。

最後に

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。

投げ銭を投げる

 

【UEFN】〈Tips〉実行時に不正なアセット リファレンス /ACLPlugin/ACLAnimBoneCompressionSettings.で失敗する。

目次

 

はじめに

UEからアセットをUEFNに入れた時以下のようなエラーが出ていたので修正できたことを共有します。

▼怒ったログ
[AssetLog] / ~ : 不正なアセット リファレンス /ACLPlugin/ACLAnimBoneCompressionSettings. 。(FortValidator_IllegalReferences)

 

個人の備忘録としてまとめています。誤った情報がある場合があります。

コメントにてご指摘のほどお願いいたします。

 

環境

Windows10,11 
UEFN5.4.0

問題と改善

UE側で入る圧縮設定がUEFNでは認知できずエラーとなってしまうようです。

手元の環境では、アニメーションアセットで発生しました。

 

UEFNへの初めて移植したときに出てくるアセットステートをプライベートアセットに変更して更新することで不正な参照が切れ解決できました。

 

最後に

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

投げ銭を投げる

 

【UE5】〈Tips〉ビルド時にFHazardPointerCollection::FHazardRecord で失敗する。

目次

 

はじめに

UE5.3.2かつVisualStudio2022 17.9時点で以下のようなエラーがエンジンで発生しビルドが失敗することがあります。その解決方法について詰まったのでまとめました。

▼怒ったRider君のログ

 

個人の備忘録としてまとめています。誤った情報がある場合があります。

コメントにてご指摘のほどお願いいたします。

 

環境

Windows10,11 
UE5.3.2
VisualStudio2022 17.9

改善

同様の問題がVisualStudioのDevelop Communityで共有されていました。

developercommunity.visualstudio.com

 

こちらのスレッドの通りVisualStudio2022 17.9近辺の問題のようです。
VSInstallerから17.10.0Preview 1.0を入れて再度ビルドしたところ解決しました。

 

最後に

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

投げ銭を投げる

 

【Chrome】〈Tips〉特定のサイトをタスクバーにピン止めする方法

目次

 

はじめに

Chromeブラウザでサイトのショートカットをタスクバーに追加する方法について解説します。

個人の備忘録としてまとめています。誤った情報がある場合があります。

コメントにてご指摘のほどお願いいたします。

 

環境

Windows10,11

やり方

タスクバーに追加したいページを開きます。

※プライベートブラウザでは不可

 

右上の三つの点のアイコンを押します。

 

保存して共有からショートカットを作成をクリックします。

 

ショートカットの名前とオプションを設定して作成を押します。

※ チェックを入れた場合、このショートカットは独立したウィンドウとして開きます。

 

無事デスクトップにショートカットが追加されました。


追加されたアイコンを左クリックした状態でタスクバーにドラッグアンドドロップします。

 

無事に追加できました。
これでいつでもタスクバーからページを開けますね!

 

最後に

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

投げ銭を投げる

 

【UE4・UE5・UEFN】〈Tips〉便利 Material 組み方ツアー

目次

 

はじめに

今回はUnrealEngine関係のマテリアルツアーとして、

よく利用されるマテリアルの計算について紹介しています。

 

個人的に忘れたころに見に来るために書いたので随時更新予定です。

マテリアルのみで図形を作ったりすることで、テクスチャを利用するよりも、加工が容易で拡大や縮小をしても劣化がないメリットや容量を小さくすることにも貢献できます。


計算では様々な手法があります。もっと簡単、パフォーマンスが良いといったケースもあると思いますので、コメント欄で共有いただければ嬉しいです。

 

記事の中ではプレビュー結果が分かるように最後に Multiply で1をかけているものがあります。

 

環境

UE5.3.2

 

序章

マテリアルの作り方と設定

コンテンツフォルダ右クリックでマテリアルの作成

 

開いてからリアルタイムにチェックしておくとアニメーションの更新が常に行われる。

 

記事では分かりやすいように平面プリミティブで紹介します。

 

アニメーション

1 : 移動&スケール

2 : 移動アニメーション


3 : 回転・アニメーション

4: ディゾルブアニメーション

5: 点滅

6: カメラに被らない半透明orディザ



図形

1 : 円

2 : 棒/四角

応用- 斜め

応用-開閉ロジック

3 : しましま模様

4 : 正多角形 【UEFN不可】


こちらの記事で詳しく説明されていますのでぜひ見に行ってみてください。

heyyocg.link

その他

1 : 乱数生成

今回紹介したノードは以下のページでまとめています。
コピペ等にどうぞ

最後に

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。

投げ銭を投げる

 

【UE4・UE5】〈Tips〉UnrealEngineで学ぶ色空間基礎知識

目次

 

はじめに

個人の備忘録としてまとめています。誤った情報がある場合があります。

コメントにてご指摘のほどお願いいたします。

 

今回はUnrealEngineのカラーの指定で何となく使っているRGBやHSVや、LinearColorとColorの違いなど基礎的な知識をベースに触れていきたいと思います。

 

環境

UE5.3.0

解説

代表的な色空間の種類

➀RGB(Red, Green, Blue)

RGB加法混色に基づいています。これは、赤(Red)・緑(Green)・青(Blue)の光を異なる強さで組み合わせることによって様々な色を作り出す方法です。(光の三原色)

すべての色を最大にすると白になります。

画像引用: https://optica.cocolog-nifty.com/blog/2012/04/post-ab6f.html

 

これはデジタルデバイスの表示に多く用いられる手法です。
多くのモニターの場合を拡大すると、赤(R)緑(G)青(B)の3色のセルの混合によって表現されていることが分かります。

画像引用: https://article.photo-cafeteria.com/PixMonitor.html

 

RGBはそれぞれ 0~255 までの値の範囲をとります。

255というあいまいな数字は一色に8bit(256通り)を割り当てているので
最大値が255となっています。

 

CMYK(Cyan, Magenta, Yellow, Key/Black)

CMYK減法混色に基づいています。これはシアン(Cyan)・マゼンタ(Magenta,)・イエロー(Yellow)・黒(Black)で構成されています。(色の三原色)

すべての色を最大にすると黒になります。

 

画像引用: https://optica.cocolog-nifty.com/blog/2012/04/post-ab6f.html

 

これはパンフレットやポスターなど印刷物に多く用いられる手法です。

モニターなどの発光体とは異なりインクは混ぜると黒に近づいていくためです。

 

今回はデジタルデバイスでの表現についての内容なのでCMYKについては深く触れません。

 

 Adobe RGBとsRGB

RGBにもAdobe RGBsRGBという代表的な規格があります。AdobeRGBは名の通りアメリカの大手企業Adobeが1998年に決めた標準規格です。対してsRGBはIEC(国際電気標準会議)が1998年に決めた標準規格です。

 

Adobe RGBはsRGBよりも緑から青にかけて高彩度の領域が広くなっています。

ただし、sRGBのほうが広く利用されておりUnrealEngineもsRGBを使用してます。

画像引用:sRGBとAdobe RGB|プリント講座|キヤノン:PRO LINE PRINTER 黒のキヤノン。

RGBとカラーコード

Webページを書く人にはなじみ深い#e68020のような色の表現をカラーコードと呼びます。
カラーコードはRGBの各要素を16進数に変換したものです。

 

実際に変換してみました。


Unreal Engine のカラーピッカーにも搭載されており、
Hex sRGBという名前で表記されます。

 

リニア空間とsRGB空間

UnrealEngineには先ほどのHex 線形や Hex sRGB、Linear Color Color が存在することに気づきます。

 

この違いを理解するにはリニア色空間ガンマ色空間の知識が必要になります。これはブラウン管の時代の影響を強く受けているオモシロイお話ですが、以下のサイトが分かりやすく解説されているので省略します。

物理ベースレンダリング -リニアワークフロー編 (1)- | Cygames Engineers' Blog

 

端的にまとめるとブラウン管の特性の名残で、そのままの出力だと輝度が足りないので、人間がちゃんと見えるように映像作品側で補正しましょう(デガンマ)というのがsRGB色空間です。

薄い直線で入力するとCRTGamma2.2で出力される。⇒本来0.5で出力されるべき映像がブラウン管テレビでは0.218の明るさしかない。
出力時に薄い直線の結果が欲しいのでgammacorrection1/2.2のカーブに変換する。

画像引用:ガンマ値 - Wikipedia

つまり、実世界の光や色をより正確に表す方法がリニア空間で、テレビやコンピューターの画面に適した表示をするときはsRGB空間です。

画像引用: 物理ベースレンダリング -リニアワークフロー編 (1)- | Cygames Engineers' Blog

 

UnrealEnigne で使う上での使い分けについて


・モニター上でUIやテクスチャの色設定を行うときは、FColor(sRGB)を利用。

・光の計算や物理ベースのレンダリングNiagaraHDR(ハイダイナミックレンジ)など広範囲の明るさを扱う場合等はFLinearColor(Linear)を利用するのが良いでしょう。

 

RGBとHSV

RGBは便利なデジタルデバイスにとっては非常に扱いやすい手法ですが、人間にとっては直感的に扱いづらい手法です。

 

そこで、色相(Hue)・彩度(Saturation, Chroma)・明度(Value, Brightness)のHSVという人間の色の知覚に近い方法で表現する手法があります。

画像引用: HSV色空間 - Wikipedia

 

これはペイントツールなど多くのツールで活躍している手法であり、UnrealEnigneのカラーピッカーもこれにあたります。

それぞれ色相は0~360、彩度(0~100)、明度(0~100)の範囲で値をとります。

(UnrealEngineでは彩度と明度が0~1で正規化されている)

画像引用: ClipStudioPaint https://www.clipstudio.net/ja/

 

HSVはUnrealEnigneのノードで制御することもできるので、ユーザーにカラーを設定させたい場合などに活用するのがおすすめです。

 

この記事を書くにあたり参考にしたサイト様

sRGBとAdobe RGB|プリント講座|キヤノン:PRO LINE PRINTER 黒のキヤノン。

リニアのワークフローとガンマのワークフロー - Unity マニュアル

HSV色空間 - Wikipedia

HSL色空間とHSV色空間 - Wikipedia

ガンマ値 - Wikipedia

https://optica.cocolog-nifty.com/blog/2012/04/post-ab6f.html

物理ベースレンダリング -リニアワークフロー編 (1)- | Cygames Engineers' Blog

A Standard Default Color Space for the Internet - sRGB

流転四界ぶろぐ |ガンマのはなし その1

最後に

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。

投げ銭を投げる