こんにちは、株式会社Leon Gameworksの遠藤です。

今回は、指定したテクスチャをピクセル化するツールを作成します。

記事の目次

    完成ツール

    0:動作環境

    本記事はUE5.7.2を基に執筆しており、画面のスクリーンショットはエディタの言語設定を「英語」として撮影しています。

    なお、本記事で作成するプロジェクト一式は、以下よりダウンロード可能です。

    今回のプロジェクトデータ

    1:ツールの見た目を作成

    まずはツールの見た目を整えていくため、Editor Utility Widgetアセットを作成します。

    ▲EUW_PixelConverter

    Widgetの階層は画像のように組み立てていきます。

    上から順に設定用のDetails View、変換用のボタン、プレビュー用のイメージを配置しました。

    ▲Widgetの階層

    「Texture」と「Pixel」という変数を追加し、さらに「Pixel Converter」というカテゴリを追加します。

    ▲変数を追加

    [Pre Construct]イベントでDetails ViewのSet Object]ノードを呼んで自身(Self)を指定し、Details Viewでプロパティを表示します。

    ▲[Set Object]ノード

    2:ピクセル化マテリアルを作成

    次に、テクスチャをピクセル化するマテリアルを作成していきます。

    新規マテリアルアセットを作成し、[Material Domain]を「User Interface」に、[Blend Mode]を「TranslucentGreyTransmittance」に変更します。

    ▲[Material Domain]と[Blend Mode]の変更

    ノードは画像のように繋げます。

    UVを指定のピクセル値で分割してテクスチャに渡しています。ここでは、ピクセル値とテクスチャだけパラメータ化しておきます。

    ▲マテリアルのノード

    3:ツール上でのプレビュー

    ツール上でピクセル化した結果をプレビューできるように組んでいきます。

    ツールの下部で変換前(Before)と変換後(After)を表示できるようにします。

    ▲変換前(Before)と変換後(After)の表示

    プレビューを更新する「UpdatePreview」という関数を作成し、画像のように変換前、変換後のImageを更新する処理を組みます。

    ▲UpdatePreview関数

    Details Viewの詳細から「On Property Changed」イベントを作成します。

    ▲「On Property Changed」イベントを作成

    「Pre Construct」と「On Property Changed」の末尾に「Update Preview」を追加します。

    ▲Update Previewの呼び出し

    値を変更するとプレビューされるようになりました。

    ▲プレビュー

    4:テクスチャの出力

    最後に、ピクセル化したテクスチャをアセットとして出力する処理を作成します。

    まずは、ピクセル化した結果を貼り付けるレンダーターゲットを作成します。コンテンツブラウザでレンダーターゲットのアセットを作成します。

    ▲レンダーターゲットアセット

    レンダーターゲットについては公式ドキュメントを参照ください。
    https://dev.epicgames.com/documentation/ja-jp/unreal-engine/creating-textures-using-blueprints-and-render-targets?application_version=4.27

    Texture Render Target型の変数を作成し、デフォルト値として作成したアセットを割り当てます。

    ▲レンダーターゲットの変数を作成

    「SetupRenderTarget」という関数を作成して、まずは画像のようにPixelConverter用マテリアルのDynamic Material Instanceを生成し、パラメータを渡します。

    ▲「SetupRenderTarget」の作成

    その後の処理で変数のレンダーターゲットを初期化し、関数の戻り値として生成したDynamic Material Instanceを返します。

    ▲「SetupRenderTarget」の完成

    Convertボタンの「On Clicked」イベントを追加し、作成した「SetupRenderTarget」関数に繋ぎます。

    ▲「On Clicked」イベントの追加

    レンダーターゲットの更新を待つため、1フレーム挟んだ後、生成したDynamic Material Instanceを使ってレンダーターゲットに描画します。

    ▲レンダーターゲットに描画

    最後に、レンダーターゲットを基にテクスチャアセットを生成します。

    ▲レンダーターゲットを基にテクスチャアセットを生成

    「On Clicked」イベントの全体図はこのようになりました。

    ▲「On Clicked」イベントの全体図

    これでツールの完成です。実行してみましょう。

    ▲ツールの実行動画

    5:まとめ

    今回はピクセル化する処理にしましたが、マテリアル部分を変更すればテクスチャを様々なかたちで加工するツールとして応用できるので、ぜひ活用していただけたらと思います。

    本記事で作成したプロジェクト一式は、以下よりダウンロード可能です。

    今回のプロジェクトデータ

    株式会社Leon Gameworks

    ●公式サイト
    www.leon-game.co.jp

    ●X(Twitter)
    @Leon_Gameworks

    トンコツ(遠藤俊太)

    ●トンコツ開発ブログ
    shuntaendo.hatenablog.com

    ●X(Twitter)
    @tonkotsu3656

    TEXT_トンコツ(Leon Gameworks)
    EDIT_小村仁美 / Hitomi Komura(CGWORLD)、オムライス駆