シーンからCubemap用テクスチャを作る

Unityで既存のシーンを撮影したcubemapを用意したい場合があります.
今作っているゲームでも遠景用のシーンを作って撮影してskyboxを作ってたりします.

f:id:FriendSea:20181107035605p:plain

今回はCamera.RenderToCubemapで作ったCubemapを1枚の画像に変換して保存するウィザードを用意しました.
画像に変換しないでもCubamapアセットとして保存もできますが,私の環境だとInspectorを触るとエディタがクラッシュするので使いたくないです.  

ソースコード

キューブマップの描画や画像の保存を行うウィザードのC#コードと,Cubemapから通常のテクスチャへの変換を行うシェーダを書きました.

A wizard to render a scene and create a cubemap im ...

Unityのプロジェクトにコードを追加するとメニューにWindow/Render2Cubemapが追加されるはずです.このウィザードのTransformShaderTransformCube2D.shaderアサインしてRenderを押せば画像が作られます.

やってること

  1. RenderToCubemapでCubemap生成
  2. シェーダでCubemapから通常のテクスチャに変換
  3. テクスチャを.png画像にして保存

Unityで読み込んだ画像のTexture ShapeをCubeにしてやると,いい感じにテクスチャを丸めて1枚の画像からCubemapを作ってくれます.
この,いい感じに丸める変換の逆変換(多分メルカトル図法と同じ変換)をしてやればCubemapから対応する1枚の画像になるはずです.その変換がシェーダの中身です.
Skyboxに使うだけならCubemapをそのまま6枚の画像にしてもいいのですが,シェーダに手を入れたい場合などはCubemapとして扱えたほうが楽です.