【Unity】バグ?Tex2DArray型RenderTextureにVRTextureUsage.TwoEyesが指定されている場合にGraphics.Blitが機能しないパターンがある (2021/06/05 追記)
概要
タイトル通りです。
単なる共有なので簡素に書きます。
※一応UnityにBug Report投げてます。
環境
- Unity 2019.4.1f1 (発生)
- Unity 2020.3.11f1 (発生)
- Unity 2021.1.10f1 (解消済み)
- Unity 2021.2.0a19 (解消済み)
詳細はブログの末尾に追記
機能しないパターン
RenderTextureDescriptor.vrUsage = VRTextureUsage.TwoEyes
が指定されたTex2DArray型RenderTextureTwoEyes
以外の場合は問題なし
- 上記RenderTextureを
public static void Blit(Texture source, RenderTexture dest, int sourceDepthSlice, int destDepthSlice);
のdestに使い、destDepthSlice: 0
で使うpublic static void Blit(Texture source, RenderTexture dest);
であれば、source, destともにTex2DArray型では問題なく機能する
関連
機能しないときにRenderTextureDescriptor
var desc = new RenderTextureDescriptor(1024, 1024); desc.dimension = UnityEngine.Rendering.TextureDimension.Tex2DArray; desc.volumeDepth = 2; // TwoEyesの場合に発生 desc.vrUsage = VRTextureUsage.TwoEyes;
機能しないときのGraphics.Blit
- destDepthSliceが0の場合に、コピーが正しく実施されない
Graphics.Blit( source: srcTex, dest: arrayTex, sourceDepthSlice: 0, destDepthSlice: 0);
- ちなみにdestDepthSliceが1以上の場合は問題なし
どうなるのか
- 左側がTex2DArrayのIndex0のテクスチャで正しくコピーされていない
- 右側がIndex1で問題なくコピーされている
- 特にエラーログも出ない
期待する結果(TwoEyes以外の場合)
雑感
前回の記事でTex2DArray型RenderTextureを作成する場合は注意してください。
仕様なのかどうか分らなかったのでBug Reportに上げました。
最近Bug Report出しすぎて、無視されないか不安になってます。。。
それでは~。
追記
Unityより「再現しました~」メール来ました。
ただ、IssueTrackerは作成されなかったようです。
今回のBug Reportに対する返信がやたら早かったです。
これより前に送った4つぐらいはまだ返信ないのが気になりますけどw。
追記(2021/06/05)
こちらのバグは 2021.1.10f1では解消されています。
ただし、2021/06/05時点のLTS最新の 2020.3.11f1 では解消されていません。
理由は定かではありませんが、Unity 2020では対応されないのかもしれませんね。
ついでに検証可能なようにサンプルコードを更新しています。
StereoTextureGenerator
コンポーネントのCopyType
を変更することで確認可能です。
Unity 2020でも GenerateStereoTextureAsTwoEyes メソッドを参考に別のTexture2DArrayにコピーしてから、改めて Graphics.Blit
を使うことでVRTextureUsage.TwoEyes
のRenderTextureに対してもGraphics.Blit
が可能になります。
ただし、コードのとおり余計にメモリを使用するのでご注意ください。