テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

カメラの撮影結果をテクスチャに描画する

Unityげゲームを作っている時「画面に描画してないけど描画したい」と思うことがある。そんな時はRenderTextureを使う。

[Unity] RenderTexture(Pro専用)を使って、別カメラの映像をテクスチャに描画する

これは例えば、水面に反射している自分を表示したり、テレビ画面に画面を埋め込んだり、背景を一度キャプチャした後にリソースを全破棄したり、そういった用途で使える。

しかし、RenderTextureはRGBA32もしくはRGBA16を使う関係上(ランタイムで圧縮とか無理ゲー)、アホみたいにメモリを喰うので注意。だから背景を一度レンダリングし以降はそれを使うといった場合、いっそ背景描画後に背景リソース全破棄…みたいなテクニックを使う事になるかも。

ちなみに、【インタビュー】第7回テックヒルズ後日談…クルーズ浦田氏に聞くゲームエンジンの未来、話題のエンジン比較の真相とは? で話してるオフスクリーンレンダリングはコレと同じ技術っぽい。

検証用ソースソースコードを見る限り、InitでRenderTextureに大量のスプライトを描画したテクスチャを作り、それを表示する場合は60FPS出るって事らしい。

なおRenderTextureはカメラのレンダリング結果をバッファじゃなくてテクスチャに書いてるだけだと思うので、これでレンダリングパフォーマンスが上がるって事は無いと思う。(RenderTextureのアップデート頻度を下げればパフォーマンスアップにつながる…みたいな使い方はアリかもしれない)


それと、本来はUnity Proの機能だが、Unity Basicでも一応似たようなことが出来る。ただ負荷が高めなのでリアルタイムに動かす画面には不向き。


Unityのオフスクリーンレンダリング

オフスクリーン
デモ