強火で進め

このブログではプログラム関連の記事を中心に書いてます。

Terragen 2でSkybox用のテクスチャを作成 → Unityで使う

昨日、iOS向けのOpenGL ES 2.0プログラムについてのUstを観ているとSkybox用のテクスチャの作り方の解説が有りました。「このテクスチャってUnityでも使えるよね?」と思い、試してみたところ問題無く利用出来ましたので作業手順をメモしておきます。

観ていたUstはこちら。Terragen 2という地形(厳密には風景全般)生成を行うアプリによるSkybox用のテクスチャの作り方の解説がされています。Ustでは45:10の辺りから開始。

Ustream.tv: ユーザー sazameki: GLES2.0 Skybox Effect, Recorded on 12/02/26. コンピュータ
http://www.ustream.tv/recorded/20710504

Skyboxとは「球」「半球」「立方体」などのポリゴンの内側にゲーム中の風景のテクスチャを貼ったものです。

遠くの風景などはちゃんとポリゴンで描画せずにこの様に画像で済ましても極端な違和感は発生しません(流石に気をつけて見ると分かるけどw)。この手法を使う事で見た目の品質をそんなに落とす事無く描画時のパフォーマンスを稼ぐ事が出来ます。

Terragen 2

Terragen 2のフリー版はこちらからダウンロード出来ます。

Planetside - Download Terragen 2
http://www.planetside.co.uk/content/view/21/36/

フリー版には非商用のみに使用可能、レンダリングサイズは 800x600 までなどの制限は有りますが自分のテストプログラムに使う分には問題に成ることは無いでしょう。

Terragen 2でのSkybox用のテクスチャ作成手順

地形作成

Terragen 2の使い方についてはこちらのサイトがお勧めみたいです。確かに初心者でも分かり易かったです。

いますぐ始めるTerragen 2
http://www7a.biglobe.ne.jp/~cgw_mk/

Terragen 2での地形の作成についてはこちらのサイトや最初に紹介したUstを参考に作成して下さい。

地形の作成が終わったらSkybox特有の設定を行います。以下の設定を行なって下さい。

  • カメラの「Cameras」タブを選択→「/Render Camera」を選択、「Use horizontal fov」の値を 90 にする。

  • 「Renders」タブを選択→「/Full Render」を選択、「Image width」、「Image height」の値を 512 にする


レンダリング

次にレンダリングを行なってテクスチャファイルを作成します。

Skyboxに必要な「正面」「背面」「左側」「右側」「上」「下」の6つの方向にカメラを向けた状態でレンダリングを行います。

カメラの向きは「Rotation」の項目で変更します。左側から「X軸の回転」「Y軸の回転」「Z軸の回転」の量を設定する欄になっています。

これを以下の様に設定した状態でそれぞれレンダリングします。

ファイル名 X軸の回転 Y軸の回転 Z軸の回転
Front.bmp 0 0 0
Back.bmp 0 180 0
Left.bmp 0 90 0
Right.bmp 0 270 0
Up.bmp 90 0 0
Down.bmp 270 0 0

まずは Front.bmp の時の設定を行い、「Renders」タブを選択→「/Full Render」を選択、「Render Image」ボタンします。
※取り敢えず、確認などという場合には /Quick Render の方がレンダリング時間が短くてお勧め。

するとこの様なウィンドウが開かれるので「Render」ボタンを押してレンダリングを実行します。レンダリングが完了すると右隣のボタンが「Save」という表示に切り替わりますので Front.bmp というファイル名で保存して下さい。同様にカメラの向きを変更し、全てのファイルを作成して下さい。

Unityで使う

次にUnityでの作業に入ります。

Materialの作成

Terragen 2で作成したテクスチャはMaterialを作成し、そこに割り当てます。

Materialを新規に作成し、「Shader」を「RenderFX/Skybox」に変更します。

テクスチャの設定

Inspectorに記載されている Front や Back の項目にそれぞれ、該当するテクスチャファイルを設定します。

UnityでSkyboxを使う場合には全カメラ共通で指定する方法とそれぞれのカメラ個別に設定する2つの方法が有ります。

全カメラで同じSkyboxを使用して問題無い場合はメニューの「Project Settings」→「Render Settings」で表示されるビューの「Skybox Material」の項目で設定します。この場合はSceneビューに表示されるので編集中でも実際のゲーム中と同じ様なイメージで確認出来ます。

カメラ毎に異なるSkyboxを使いたい場合にはカメラにSkyboxを設定します。Skyboxを設定したいカメラを選択した状態でメニューから「Component」→「Rendering」→「Skybox」でSkyboxを追加します。

全カメラ向けならココ、

カメラ別の設定ならココにSkybox用のMaterialをドラッグすればOKです。

注意点

これで完成。と言いたい所ですがこの状態ではこの様に立方体の境界部分にラインが見えてしまっています。

これはテクスチャの設定を変更する事で改善出来ます。

テクスチャのInspectorで「Texture Type」を「Advanced」、「Wrap Mode」を「Clamp」に変更後、「Apply」ボタンを押して確定します。

この変更作業を全てのテクスチャに対して行います。なお、Unityのバージョンが3.5であれば全てのテクスチャを選択した状態でこの変更を行う事で一括で変更可能です。

変更を完了した後に確認するとこの様に描画が改善されているはずです。