URPでプロジェクターを作成してみよう!

Unity

ゲームにおいて「影」はオブジェクトの位置や存在感をプレイヤーに伝える重要な要素です。

しかし、リアルタイムで影を描画すると処理負荷が高くなってしまいます。

従来の Unity では Projector コンポーネントを使って簡易的な影(いわゆる「Blob Shadow」)を表現していましたが、Unity 6 以降ではこの仕組みが廃止され、代わりに Decal Projector を利用するのが標準となりました。

今回は、この新しい Decal を用いた影の作成方法と表示手順について解説します。

環境

Unity6000.0.57f1
Universal3D テンプレート

作成

  • Unity6環境においてUniversal3Dテンプレートよりプロジェクトを作成する(DecalTest)
  • 新規にCubeを作成し以下のように調整する
    • 名前をFloor
    • Scaleを(25,1,25)
    • MeshRendererのMaterialをWhite(影を見やすくする)
  • 新規にSphereを作成し、以下のように調整
  • Directional LightをNo shadowにする

Decalのインポート

  • Package ManagerからUniversal Render Pipeline > Samples > URP Pcakage Samplesをインポート

Rendererの設定

デフォルトのままだとDecalによる影が描画できない。まずはこれを描画できるようにする

  • Settings > PC_Renderer > Add Renderer Feature
  • 選択肢が開くのでDecalを選択
Screenshot
  • Decalを描画できるようになった!
  • モバイル環境を想定している人はMobile_Rendererにも同様の処理をしておく

参考

このRendererファイルは
Project Settings > Quality
で読み込まれるようになっている

Decalの作成

  • Sphereの子要素にCreate EmptyをしてBlobShadowにリネーム
  • TransformのRotationXに90をいれる
  • AddComponent > URP Decal Projector
  • Projection Depth(どのくらいの範囲で影を描画するか)を5
  • MaterialをBlobShadow_Mat
  • ここまで設定してSphereの下に影が表示されれば成功だ

Sphereをジャンプさせてみる

  • SphereにRigidbodyを付与
  • ShhereController.csを以下のように作成し、Sphereにアタッチ
using UnityEngine;

public class SphereController : MonoBehaviour
{
    Rigidbody rb;
    public float jumpPower=300f;
    
    void Awake()
    {
        rb = GetComponent<Rigidbody>();
        
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rb.AddForce(Vector3.up * jumpPower);
        }
        
    }
}

完成

実行しスペースを押してみよう。以下のようにいい感じに影が描画されれば成功だ。

Unity
スポンサーリンク
シェアする
mjpurinをフォローする

コメント

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