UnityはRenderTextureを使用して透明な背景のスクリーンショットを生成します



Unity Uses Rendertexture Generate Transparent Background Screenshots



CubeRoom開発ノート。

CubeRoomの機能は、リスト内の各オブジェクトを表示することです。サムネイルをリアルタイムでレンダリングするコストは高すぎるため、オブジェクトごとに透明な背景のスクリーンショットを生成することを検討してください。



Googleで見つけました Unity3Dの透明な背景でスクリーンショットをレンダリングする この記事では、作成者はゲームウィンドウのスクリーンショットであるMainCameraのビューをTexture2Dテクスチャに書き込んでいましたが、スクリーンショットには背景色が必要です。著者の解決策は、黒い背景と白い背景のスクリーンショットを生成し、次に2つの画像のピクセルの色の違いを計算して、透明な背景画像を生成することです。

このスクリプトを使用した後、エクスポートされた画像とゲームウィンドウの実際の画像との間に特定の色の違いがあり、このメソッドが透明なピクセルを計算するとき、エッジは処理されず、鋸歯が裸眼で見えることがわかります。眼。



ゲームウィンドウ:

サムネイルを生成する:



ドキュメントを見ると、特別なテクスチャが見つかりました Unity-マニュアル:テクスチャをレンダリング カメラのTargetTextureプロパティに接続して、カメラのビューを取得できます。カメラの背景色が透明である場合、結果のテクスチャは透明なチャネルになります。

GitHub: TransparentBackgroundScreenshotRecorder.cs

使用手順

  • 新しいカメラを作成してテクスチャを生成し、ビューを取得し、位置と角度を調整します。目的の画像がゲームウィンドウのビューと同じである場合は、MainCameraをレンダリングカメラとして直接コピーできます。
  • RenderTextureを作成し、カメラのTargetTextureプロパティに設定します。
  • レンダリングカメラのクリアフラグを単色に設定します。透明な背景が必要な場合は、背景の透明チャンネルを0に設定します。
  • 意志 TransparentBackgroundScreenshotRecorder.cs レンダリングカメラにスクリプトが追加されました。フレームレートは1秒あたりのフレームレートを表し、キャプチャするフレームは生成する必要のある画像の数を表します。最初のフレームの画像が空白になる場合があります。キャプチャするフレームは1よりも優れています。
  • ゲームウィンドウの画面解像度を選択します。これは、生成された画像の解像度であるRenderTextureサイズと同じです。
  • [再生]をクリックします。
  • デフォルトでエクスポートされる画像は、プロジェクトのScreenShotsディレクトリにあります。

存在する場合 色差 、RenderTextureの色空間の問題である可能性があります。RenderTextureを確認する必要があります sRGB オプション

サムネイルを生成する:

更新

既存の色収差はガンマ補正によるものです。 Unityで線形空間を選択する場合は、sRGBオプションをチェックする必要があります。


参考文献

Unity3dでのRenderTextureへのレンダリングの原則

参照リンク

Unity3Dの透明な背景でスクリーンショットをレンダリングする

Unity-マニュアル:テクスチャをレンダリング