本日はシェーダー枠です。
Shaderには頂点シェーダー、フラグメントシェーダーのほかジオメトリシェーダーを使用することができ、Shaderアニメーションなど非常に複雑な処理を可能としています。
しかしOculus Quest 2で描画が行われないため、ずっとOculus Quest 2では使用が不可能と思い込んでいましたが、改めてOculus Quest 2のGPUに関して調べてみると使用できることがわかり、今回無事にジオメトリシェーダーを使用することができましたので記事としてまとめます。
〇Oculus Quest 2のSoc
[Soc](System-on Chip)はPCのパーツの中でCPUやGPU、メモリなどのデバイスの運用上で主として必要となるパーツを一つの半導体チップにまとめたものを指します。
Oculus Quest 2の場合[Qualcomm Snapdragon XR2]のSoCが搭載されています。
このSocには[Qualcomm Adreno 650]のGPUが搭載されています。
つまりOculus Quest 2は[Adreno 650]のGPUで動作しているということになります。
余談になりますが、Microsoft HoloLens 2の場合[Snapdragon 850]を搭載しており、GPUは[Adreno 630]を搭載しています。
純粋なGPU性能ではOculus Quest 2のほうがHoloLens 2よりも高性能といえます。(発売時期もQuest 2のほうが新しいです。)
〇Qualcomm Adreno 650
[Qualcomm Adreno 650]では以下のグラフィックAPIを使用可能です。
・DirectX 12
・OpenGL ES 3.2
・OpenCL 2.0
・DirectX 12
・Vulkan 1.1
ここでOculus Questでは[OpenGL ES]および[Vulkan]のAPIを使用します。
ジオメトリシェーダーの対応しているグラフィックスAPIは[OpenGL ES 3.2]意向で対応しており、このことでOculus Quest 2でジオメトリシェーダーは使用することができるということになります。
HoloLens 2の場合DirectX 12に対応しており、DirectX 9.0以降で対応しているジオメトリシェーダーを使用することができます。
〇Unity側でグラフィックスAPIを設定する。
Unityの[ProjectSettings]→[PlayerSettings]でグラフィックスAPIの確認と設定が可能です。
[AutoGraphicsAPI]のチェックを外し、[Require ES3.2]にチェックを入れます。
これによってOculus Quest2でジオメトリシェーダーが使用できるようになります。
一年ぐらいOculus Quest2 を触っていますが、ずっと使用できないものと思い込んでいたためとても良い気付きでした。