シーンからCubemap用テクスチャを作る
Unityで既存のシーンを撮影したcubemapを用意したい場合があります.
今作っているゲームでも遠景用のシーンを作って撮影してskyboxを作ってたりします.
今回はCamera.RenderToCubemapで作ったCubemapを1枚の画像に変換して保存するウィザードを用意しました.
画像に変換しないでもCubamapアセットとして保存もできますが,私の環境だとInspectorを触るとエディタがクラッシュするので使いたくないです.
ソースコード
キューブマップの描画や画像の保存を行うウィザードのC#コードと,Cubemapから通常のテクスチャへの変換を行うシェーダを書きました.
A wizard to render a scene and create a cubemap im ...
Unityのプロジェクトにコードを追加するとメニューにWindow/Render2Cubemapが追加されるはずです.このウィザードのTransformShaderにTransformCube2D.shaderをアサインしてRenderを押せば画像が作られます.
やってること
- RenderToCubemapでCubemap生成
- シェーダでCubemapから通常のテクスチャに変換
- テクスチャを.png画像にして保存
Unityで読み込んだ画像のTexture ShapeをCubeにしてやると,いい感じにテクスチャを丸めて1枚の画像からCubemapを作ってくれます.
この,いい感じに丸める変換の逆変換(多分メルカトル図法と同じ変換)をしてやればCubemapから対応する1枚の画像になるはずです.その変換がシェーダの中身です.
Skyboxに使うだけならCubemapをそのまま6枚の画像にしてもいいのですが,シェーダに手を入れたい場合などはCubemapとして扱えたほうが楽です.