【Unity】2Dでシンプルな鏡面反射を作りたい

  • URLをコピーしました!
目次

はじめに

2Dのゲームでアートスタイルを検討しているときに、地面に鏡面反射を入れたくて、いろいろサンプルを探したのですが、うまくいかなかったり、リッチすぎたりで、ちょうど良いものが無かったので自前でシンプルなシェーダーを作って調整しました。その時のまとめです。

  • Unity 2021.3.4
  • Universal RP 12.1.7

経緯

基本的にはこの動画にならう感じで、Mirror用のカメラとRenderTextureを作成して、それを投影するスプライトを配置します。ただ、自分の環境では「Sprite-Lit-Default」では鏡面反射ができなかったので、ShaderGraphで新たにシェーダーを作成しました。

シェーダーグラフ

作成するシェーダーはシンプルです。やってることは「Main Texture」と「Render Texture」をプロパティで持ち、Multiplyで合わせて、Base ColorとAlphaに繋いでいます。反転処理や透過などは「Sprite Renderer」側で行います。

また、「Main Texture」のReferenceを「_MainTex」としてください。こうすることで「Sprite Renderer」にマテリアルをアサインしたときに「Sprite」が自動で反映されるようになります。

Inspectorに表示されるマテリアルはシンプルで、「MainTexture」と「RenderTexture」の2項目が並んでいます。

実際には「RenderTexture」はまだ空欄になっています。

設定

シェーダー以外は、紹介した動画とやることは一緒なのですが、設定やポイントを記載しておきます。

Render Texture 作成

Project右クリック>Create>Render Textureで任意のフォルダに「Render Texture」を作成します。

設定は、今回ドット絵なので「Size」は256×256。「Filter Mode」はPointにしました。

Mirror用カメラ作成

Hierarchyでカメラを作成して、Outputの「Output Texture」へ先に作成した「RenderTexture」を登録します。設定は画像を参考にしてください。

  • Position: 任意の値に調整します。
  • Projection: Orthographicにします。
  • Size: 任意の値に調整します。
  • Culling Mask: カメラに写すオブジェクトを絞れば負荷も軽減されるので設定することをおすすします。
  • Output Texture: 先に作成した「Render Texture」をこちらへ登録します。
  • Audio Listener: メインカメラ側でオンになっていると思うので、こちらはオフにしておきます。

投影用スプライト作成

Hierarchy右クリック>2D Object>Sprite>Squareからミラー投影用のスプライトオブジェクトを作成します。

こちらに先のシェーダーのマテリアルをアサインして、InspectorからマテリアルのRenderTextureに「Render Texture」を登録します。

  • Position: 任意の値に調整します。
  • Flip: 今回、地面の鏡面反射なの[Y]をオンして縦に反転させます。
  • Material: 先に作ったシェーダーのマテリアルを登録します。
  • RenderTexture: 先に作った「Render Texture」を登録します。

カメラとスプライトの配置

カメラと投影用スプライトの位置関係は画像を参考にしてください。「カメラの画角の端」と「スプライトの端」が鏡面の境に来るようにしています。

カメラ
投影用スプライト

問題なければ、下の画像のようになるはずです。

あわせて読みたい
【Unity】URPで 2D Light を使う はじめに Universal Render Pipeline(URP)で2D Lightを使用する手順です。 Unity 2021.3.4Universal RP 12.1.7 手順 「2DのURP Asset」を作成します 任意のフォルダで右...
あわせて読みたい
【Unity】URPで標準のポストエフェクトを使う はじめに Universal Render Pipeline(URP)でUnity標準のポストエフェクトを導入する手順です。 Unity 2021.3.4Universal RP 12.1.7 導入方法 Post Processingをインスト...

参考

STYLY - 空間レイヤープラットフォ...
【Unity / Render Texture】カメラの映像をオブジェクトに反映する方法 | STYLY この記事では、UnityのRender Textureを使ってシーン内にあるカメラの映像をオブジェクトに反映する方法と、オブジェクトを円運動させる方法を紹介します。
Unityを使った3Dゲームの作り方(...
Unityのレンダーテクスチャを使って鏡を作成する Unityのレンダーテクスチャを使って鏡の機能を作成していきます。
GitHub
GitHub - ruccho/WaterRW: WaterRW is 2D interactive water system for Unity. WaterRW is 2D interactive water system for Unity. Contribute to ruccho/WaterRW development by creating an account on GitHub.
武0武/blog
【Unity】ShaderGraphで画像の向きを反転させるシェーダーを作成する - 武0武/blog はじめに 今回は画像の向きを反転させるシェーダーを作成していきます。 環境は Unity 2019.3.0f3 Universal Render Pipeline(テンプレートのプロジェクトです) UnlitGraph...

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次