【Unity】URPのDecal Shaderを使ってみる

Unity

はじめに

今回はURP・HDRPで使用できる「Decal」 の機能についての記事です。
筆者自身、主にURPでゲーム制作してきたんですが、Decalの存在を知ったのはつい最近です。

Decalの機能について調べていくと、とても便利そうな機能だったので、今回はDecalの導入や基本的な使い方を私の備忘録も兼ねてまとめていこうと思います。

Decalとは

Decalとは一言でいうと、3Dゲームオブジェクトの任意の場所にテクスチャを張り付ける機能です。

Decal機能を使用することで、FPSゲームなら銃弾の弾痕表現ができたり、壁の汚れや、ホラーゲームとかなら血痕の表現ができたりと、Decal機能でできる表現は多岐にわたります。

導入方法・使い方

それでは早速、Decal機能の導入から使用までを紹介していきます。

使用環境

今回のUnityのバージョン等は以下の通り。

・Unity2022.3.31f1
・URP

1.Decal機能の有効化

まず、URPまたは、HDRPのプロジェクトを作成しましょう。(上述しましたが、記事ではURPを使用)

作成しプロジェクトを開いたら、Decal機能を有効化します。これを有効にしないとDecal機能を使用できないので忘れずに設定を行いましょう。

Project内の[Assets]⇒[Settings]の中に、「URP-HighFidelity-Renderer.asset」というファイルがあるので、選択してインスペクターを開きます。

一番下の「Add Renderer Feature」ボタンをクリックし、その中にある「Decal」を選択すれば、有効化完了です。

2.Decal用のマテリアル作成

Decal機能の有効化が終わったら、次にDecal用のマテリアルを作成します。

メニューの[Assets]、またはProjectウィンドウにカーソルを合わせ右クリックから[Create]⇒[Material]を選択しマテリアルを新規作成します。(記事ではマテリアル名を「DecalMat_1」としました)

マテリアルのインスペクターを開いて「Shader」の項目を変更します。プルダウンを開いて[Shader Graphs]⇒[Decal]を選択しましょう。

変更すると、マテリアルのインスペクター画面が以下のように変わるはずです。

↑設定変更後のマテリアルのインスペクター画面

上述の手順が終了したら、テクスチャを用意します。お好みのテクスチャをプロジェクトにインポートしてください。なお記事ではペンギンのアイコンを用意しました。

テクスチャの用意ができたら、マテリアルのインスペクター画面にある「Base Map」にテクスチャを設定します。

3.Decalを投影するためのオブジェクトを用意する

Decal用マテリアルの準備ができたら、今度はDecalを投影するためのオブジェクトを用意します。
まず空のゲームオブジェクトを作成してください。作成したら任意の名前を付けましょう。(記事では「Decal_1」とつけました)

作成したらDecalを投影するためのコンポーネントを追加します。インスペクターの「Add Component」から「URP Decal Projector」コンポーネントを追加します。

追加出来たら、「URP Decal Projector」コンポーネントの「Material」に、手順2.で作成したマテリアルを設定します。

あとはこの投影用オブジェクトを投影したい場所まで移動させ、投影用オブジェクトのTransformや「URP Decal Projector」内のWidthHeightなど各種数値を適宜調整すればOK。

↑壁に見立てたPlaneに投影した例
↑Cylinderに投影した例。
曲面でもきちんと投影される
↑Planeを組み合わせ、角に投影した例。

おまけ:Shader Graphで「Decal Shader」を作ってみる

Decal機能を有効化すると、Shader Graphで「Decal Shader」を作成することができます。メニューの[Assets]または、Projectウィンドウで右クリックから[Create]⇒[Shader Graph]⇒[URP]⇒[Decal Shader Graph]を選択すると、Decal用のShaderを作成できます。

試しに、以下のようなDecal用のShader Graphを作成しました。(今回はあくまで、Shader GraphでもDecal用のShaderが作れるということを伝えるだけなので、作成したShaderは適当です)

マテリアルを新規作成し、マテリアル内にあるShaderのプルダウンを開き、上記のDecal Shader Graphを設定します。

あとは、導入・使い方の項で説明したのと同じ手順で投影用のオブジェクトを作成して完了です。

↑作成したDecal用Shader Graphを投影した例

駆け足になりましたが、Shader GraphでもDecal用のマテリアルを作成できることが、ご理解いただけたかと思います。

おわりに

Decal機能の導入や基本的な使い方を説明してきました。Decalはかなり汎用性の高い機能で、ゲームにおける表現の幅がグッと広がると思うので、是非ともいろいろと試していきたいところです。皆さんもこの機会にDecal機能に触れてみてはいかがでしょうか?

コメント

タイトルとURLをコピーしました