Unityで3Dゲームを作っていると、ときどき
- 壁に銃弾の跡を描画したい
- 敵キャラクターを斬ったときに、壁や床に血しぶきを描画したい
といったことをやりたくなる場合があります。要するに壁や床などの一部にテクスチャを貼りつけたいだけなのですが、従来はアセットを使わないとこういったことはなかなか実現できませんでした。
しかし最近のUnityでは、URPに「デカール(Decal)」という機能が標準搭載されてテクスチャを3Dモデルに簡単に投影できるようになりました。ただしまだまだマイナーな機能なので使い方の情報が乏しく、「そんな機能あったの?」とか「なんか聞いたことはあるけど使い方がよく分からないなぁ」という方がほとんどなのではないでしょうか。
そこで今回はデカール機能について
- セットアップ方法
- 具体的な使い方
といった点について説明していきますね。
デカール機能について
まずはじめに、デカールとはどんな機能なのかを簡単に説明しておきます。デカールは簡単に言えばテクスチャを3Dモデルの任意の場所に貼り付ける機能です。具体的には次の画像のような表現が可能です。
画像をご覧いただければ分かるとおり水色のペンキが壁や床に飛び散っていますね。このペンキの部分がデカールです。壁にテクスチャを投影するやり方は他にもあると思うのですが、URP標準のデカール機能を使うと
- 3Dオブジェクトの任意の場所に、任意のスケール・回転でテクスチャを貼りつけることができる
- 他のゲームオブジェクトにまたがった場所にもテクスチャをきれいに貼り付けることができる
といったメリットがあります。
ちなみにデカールはURPだけでなくHDRPでも使うことができます(※HDRPのデカールのほうが高性能です)。
URPのデカールのセットアップ方法と使い方
ではここからが本題で、URPのデカールのセットアップ方法と基本的な使い方について説明していきます。セットアップ手順は次のとおりです。
- デカール機能の有効化
- デカール用のマテリアルの作成
- Decal Projectorコンポーネントの追加・設定
それぞれ詳しく見ていきましょう。
手順1:デカール機能の有効化
まずはデカール機能を有効化する必要があります。URPの設定ファイルの中に「Universal Renderer Data」という種類のファイルがあると思うのですが、それを開いて「Add Renderer Feature」→「Decal」を選択しましょう(下図)。
これでデカールが有効化されます。
手順2:デカール用のマテリアルの作成
次にデカール用のマテリアルを作ります。新しいマテリアルを作り、「Decal」シェーダー(Shader Graphs→Decal)を選択してください。
そうしたらBase Map欄に好きなテクスチャを登録しましょう。
ここまでの作業で下準備は完了です。
手順3:Decal Projectorコンポーネントの追加・設定
最後に、適当なゲームオブジェクトに「URP Decal Projector」というコンポーネントを登録してデカールの投影を行います。
「マテリアル」に先ほど作ったデカール用マテリアルを登録し、このゲームオブジェクトを適当な場所に移動させるとテクスチャが投影される様子を確認できます。
URPのデカールの活用例
さて、ここまでの内容で基本的な使い方をご理解いただけたと思いますので、ここからデカールの具体的な活用例を3つご紹介します。
- 3Dモデルに銃弾の跡や血などのテクスチャを投影する
- 丸い影(Blob Shadow)を描画する
- リアルタイムライトの代わりとして利用する
それぞれ詳しく見ていきましょう。
例1:3Dモデルに銃弾の跡や血などのテクスチャを投影する
一つ目の活用例は、最も基本的な使い道で3Dモデルに銃弾の跡や血しぶきなどを投影することです。この場合の手順としては
- Rigidbodyの衝突判定、Raycast等を使って壁や床を検知する
- 検知した座標にデカールのプレハブを生成する
といったやり方がメインになると思われます。ここでは実際のスクリプト等は省略しますが、デカールを使えば簡単に実現できて便利です。
例2:丸い影(Blob Shadow)を描画する
次に二つ目の活用例はマンガ的な丸い影を描画することです。
普通の影はリアル志向かつ負荷が高いのですが、もしマンガ的な影で十分なのであればデカールを使うことで負荷を抑えつつ影を表現することが可能です。URPのサンプル(※パッケージマネージャからインストールできます)の中に影用のシェーダーグラフが同梱されているので、興味があればぜひ使ってみてください。
例3:リアルタイムライトの代わりとして利用する
最後に三つ目はリアルタイムライトの代わりとして利用することです。
デカールをスポットライトの代わりに使うことでリアルタイムライトのような表現を実現しつつ、描画負荷を抑えることができます。こちらもURPのサンプルファイルに含まれているので、興味のある方は実際にサンプルシーンをご覧いただければと思います。
おわりに
以上、簡単ではありますがURPのデカールの使い方を一通り説明しました。デカールを使いこなせるようになればゲームの表現力が一段と高まると思いますので、ぜひ上記の内容を参考にしていただき、使い方をマスターしていただければと思います。
この記事がUnityでのゲーム開発のお役に立てば幸いです。