LoginSignup
8
8

More than 1 year has passed since last update.

Unity URP Renderer Dataを用いて移動可能な穴を描画する

Posted at

概要

URPで作成したシーンに、メッシュに穴を開けずに描画する方法を説明します。
頂点データをいじらなくて済むので、穴自体の移動が簡単に行えます。
画面収録 2022-11-27 1.15.06.mov.gif

プロジェクトのソースコードはこちら
https://github.com/Arihide/unity-hole-stencil

解説

プロジェクト準備

3D(URP)からプロジェクトを作成します。
スクリーンショット 2022-11-27 1.19.07.png

プロジェクト作成後、Project Settings→Quality より Defaultを Performantにします。
最低限の構成から始めたいためです。
スクリーンショット 2022-11-27 0.51.43.png

続いて以下の2種類の穴のモデルを用意します。

  • [Hole]内側の底と側面に面があるメッシュ
  • [HoleMask]Holeと同じ形状の円柱
    スクリーンショット 2022-11-27 1.26.35.png

シーン設定

続いてシーンに上記モデルを配置します。ただの円柱に見えますが、HoleとHoleMaskが同じ位置に存在します。
スクリーンショット 2022-11-27 1.07.27.png

その上に穴を開けたい平面をHoleモデルの置きます。今の所は未設定なので穴は平面に隠れています。
スクリーンショット 2022-11-27 1.07.49.png

レイヤー設定

Holeモデルを再度選択し、インスペクタ右上からレイヤーを追加します。
スクリーンショット 2022-11-27 1.06.05.png

以下の2つを追加します。
スクリーンショット 2022-11-27 1.06.30.png

Hole,HoleMaskに対してそれぞれレイヤーを追加します
スクリーンショット 2022-11-27 1.06.59.png

Renderer Data設定

ProjectタブよりAssets/Settings/URP-Performant-Renderer.assetを選択しインスペクタに表示します。
スクリーンショット 2022-11-27 1.05.36.png

Render Objects(Experimental)を選択します。
スクリーンショット 2022-11-27 1.08.23.png

次のように2つ追加し設定をします。すると穴が無事表示されるようになります。
(正しく表示されない場合、HoleMaskのY座標を上にずらしてみてください)
スクリーンショット 2022-11-27 1.13.52.png

最後にここで設定したRender Objectsの値について簡単に説明します。

  • 最初にHoleMaskレイヤーに対して追加の処理を行う
    • Stencilにチェックを入れ、Value=1,ConpareFunction=Always,Pass=Replaceを設定
      • これにより、「HoleMaskが描画される部分にStencil=1」を書き込む
  • 次にHoleレイヤーに対して処理を行う
    • Depthにチェックを入れAlwaysに変更する
      • HoleはPlaneに隠れているため、Depth Testを通過せず描画されないのを避けるため
    • Stencilにチェックを入れ、Value=1を設定
      • HoleMaskがStencil=1に設定した部分だけHoleを描画したいため

注意点

コライダーには影響しないため、穴に物体を落としたいなどは追加で処理の追加が必要になります。

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8