Cubeの内側にTextureを描画して背景として使う方法

前回の「[Unity] TextureをSkyboxとして適用する方法」に関連した内容です。今回はテクスチャ画像をスカイボックスにするのではなく、プリミティブなCubeオブジェクトに表示してそれっぽくみせる方法です。

オブジェクトの内側は表示されない?

まず前提として、Unityに標準搭載されているおなじみのCubeオブジェクトに限らず、3Dモデルは基本的に内側は描画されません。レンダリングコストはパフォーマンス的にも重い部分になりますし、3Dモデルの内側にカメラが入ることはほぼ無いため、通常は描画する必要性が無いです。

まぁ実際にどのように描画するかはShaderが担っているわけなんですが、テクスチャ画像をシンプルに表示する標準のShaderである「Unlit/Texture」を設定してCubeの中にカメラを持ってくると以下の感じになります。

※マテリアルを新規作成して、Shaderを「Unlit/Texture」に変更してCubeにアタッチした状態
※テクスチャ画像は、こちら(別サイト)からお借りしています

画像からは分からないと思いますが、Sceneビュー側の選択された中心がカメラ位置です。その状態でGameビューを見るとCubeは亡き者にされていることが分かるかと思います。もちろん、カメラやCubeを動かしてあげれば、その存在に気付けますがきっとそんな使い方をすることはないでしょう。

本題:Textureを両面に表示する

本題に戻ります。…けど、実はとても簡単に実装できます。

単純にTextureを両面に表示する設定を入れたShaderを用意してあげればよいです。上記前提で確認した際に使った「Unlit/Texture」のShaderをベースにして修正したのが以下になります。

標準で搭載されている「Unlit/Texture」に対して「Cull Off」の1行を足しただけにはなりますが、これでTextrueを両面に表示することが出来るようになります。詳しくはこちら(別サイト)を確認してもらえればと。

それで、先ほどと同様にマテリアルを作って作成したShaderを適用してCubeに当て込むと以下の画像になります。スカイボックスの時と違って、CubeのTransformをあれこれいじると少しいい感じになるかもです。それに、Cubeはポリゴン数も少ないので、両面に描画したとしてもレンダリングコストはほぼ変わらないと思っても良いかと思います。