【Unity】RenderTextureとは?カメラ映像をテクスチャとして使用できる機能

RenderTextureとは? Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「RenderTextureってなに?」

「RenderTextureでどんなことができるの?」

というお悩みの方に向けた内容となっています。

Unityでは、カメラで映した映像を他のオブジェクトなどに表示させる場合に、RenderTexture(レンダーテクスチャ)という仕組みを使用できます。

このRenderTextureは、カメラの映像を書き込むことができるテクスチャで、オブジェクトのマテリアルに設定することで、カメラ映像をそのオブジェクトに表示させるということができるようになります。

映像をリアルタイムで表示させることができるので、例えば監視カメラや車のミラーなど別のカメラで撮影した映像を表示させるといった場合に活用できます。

そこで、このページでは、Unityで使うことができるRenderTextureについて、どんな仕組みや機能なのか、またRenderTextureの使い方までをまとめていきます。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

RenderTexture(レンダーテクスチャ)とは?

まずは、RenderTextureがどういうものなのかを紹介していきます。

RenderTexture(レンダーテクスチャ)とは、冒頭でも解説した通り、カメラの映像を書き込んで使用することができるテクスチャです。

そもそもテクスチャというのは、3Dオブジェクトの表面に貼り付ける2Dの画像データのことで、オブジェクトの表面の質感などを表現するために使われるものです。

RenderTextureも同じテクスチャの一種ですが、この画像データ部分にカメラの映像を書き込むことができる特殊なテクスチャになります。

そして、このRenderTextureをオブジェクトに設定することで、カメラの映像をオブジェクトの表面に表示させるということができるようになります。

また、このRenderTextureの特徴として、リアルタイムにカメラで撮影した映像に更新し表示されるようになります。

そのため、例えば、監視カメラによるゲーム内での別視点での映像を表示させたり、移動している車のミラーに映像を表示させるといった使い方ができます。

RenderTexture(レンダーテクスチャ)の基本的な使い方

ここからは、RenderTextureの基本的な使い方について紹介していきます。

RenderTextureを使う際は、

  • RenderTextureで表示したいカメラを準備する
  • RenderTextureを作成する
  • カメラの出力先をRenderTextureに設定する
  • オブジェクトのマテリアルにRenderTextureを設定する

という流れで設定していきます。

RenderTextureで表示したいカメラを準備する

まず、メインのカメラとは別に、RenderTextureで表示させたい映像を撮影するカメラを準備していきます。

メインのカメラは、以下のようにシーン内に配置したキューブオブジェクトを、後ろから追従させて撮影するように配置しています。

今回、RenderTextureを使って表示させる映像は、キューブオブジェクトの前方からの映像を撮影して、いわゆる鏡となる映像を作っていきます。

そのため、新しくカメラオブジェクトを作成して、キューブオブジェクトの前方から後ろに向かう形でカメラを固定で配置しています。

なお、Cameraコンポーネントで撮影を開始する距離を設定する「Clipping Planes」にある「Near」の数値を今回引き上げています。

このNearを引き上げることで、撮影の開始地点がカメラの一点からではなく、面による撮影ができるようになるので、鏡のような映像を撮影することができます。

RenderTextureを作成する

次に、RenderTextureのファイルを作成していきます。

RenderTextureを作成する際は、プロジェクトウィンドウの「+」ボタンを押して、「Rendering」の中にある「RenderTexture」を選択します。

すると、RenderTextureのファイルが新しく作成されるので、ここでは「MirrorRenderTexture」という名前に変更しています。

このRenderTextureのファイルを選択すると、インスペクターウィンドウに設定項目が表示されます。

様々な設定項目がありますが、この中にあるSizeの項目は、RenderTextureの解像度の設定となっています。

解像度は上げれば上げるほど、より画質が良くなりますが、その分メモリを使うことになるので、表示させたい大きさに合わせて設定するようにしましょう。

今回は、特に解像度を上げる必要はないので、変更を行わずそのまま使用していきます。

カメラの出力先をRenderTextureに設定する

RenderTextureを作成できたら、今度はカメラの出力先にRenderTextureを設定していきます。

カメラオブジェクトを選択して、インスペクターウィンドウのCameraコンポーネントから、「Output」の中にある「Output Texture」の項目を探します。

そして、アセットフォルダから先ほど作成したRenderTextureを、この項目に向かってドラッグ&ドロップで設定してあげます。

これにより、このカメラの映像は、RenderTextureに出力されるようになりました。

実際にRenderTextureのファイルを選択してみると、

カメラの映像が表示されているのが分かります。

オブジェクトのマテリアルにRenderTextureを設定する

RenderTextureにカメラの映像を書き込むことができたら、あとは、映像を表示させたいオブジェクトにRenderTextureを設定していきます。

ここでは、Quadのオブジェクトを作成して、この表面にカメラの映像を表示させていきます。

なお、以下のように、映像を表示させたいオブジェクトと、カメラの撮影開始距離を合わせておくと、より鏡らしくなると思います。

オブジェクトにRenderTextureを設定する場合は、いくつか方法がありますが、マテリアルを新しく作成して、そこにRenderTextureを設定していきます。

マテリアルを作成する際は、プロジェクトウィンドウの+ボタンから「Material」を選択します。

作成されたマテリアルを選択して、インスペクターウィンドウの「Surface Inputs」にある「Base Map」の左側の四角い欄に、RenderTextureをドラッグ&ドロップしてあげます。

すると、以下のようになり、カメラの映像がマテリアルに反映されているのが分かります。

このマテリアルをカメラの映像を表示させるシーン内のオブジェクトに向かって、ドラッグ&ドロップすることで、オブジェクトにマテリアルを設定できます。

これでカメラの映像がオブジェクトに表示されるようになりますが、そのままだと左右逆の映像が流れてしまうため、最後にオブジェクトのScaleのX軸の値をマイナスにしてあげます。

これでゲームを実行してみると、

カメラでの映像がオブジェクトに表示されるようになり、鏡と同じ仕組みを作ることができました。

まとめ

このページでは、Unityで使えるRenderTextureについて、どんな仕組みなのか、また使い方までをまとめていきましたが、いかがでしたでしょうか?

RenderTexture(レンダーテクスチャ)とは、カメラの映像を書き込むことができるテクスチャで、オブジェクトに映像を表示させることができます。

RenderTextureを使うことで、監視カメラの映像や車のミラー表示などを簡単に実装することができます。

ただし、RenderTextureはメモリも多く使う仕組みとなっているので、解像度の設定やメモリの管理も考えておく必要があります。

最後までお読みいただきまして、ありがとうございました!

コメント