本日はシェーダー調査枠です。
MixedRealityGrahpicsTools(以下MTGT)ではxRに特化したシェーダーシステムとしてGraphicsTools /Standardシェーダーが提供されています。(以下MRGT Standard)
ドキュメントによるとライティングの近似化などによりUnityでDefaultで提供されているシェーダーよりも軽量であるということが明記されています。
今回は実際にRenderDocを使用してベンチマークを取りながらどの程度軽量なのかを調査していきます。
〇MRGT Standardシェーダー
MRGT StandardシェーダーはMRGTのコア機能の一つです。
特徴としてUnityのスタンダードシェーダーを模倣しながらもより軽量化し、MixedRealityアプリ開発に使用するための数多くの機能を提供しています。
これらの機能は、UverShaderを採用しており、使用する機能のみコンパイルがされ描画コストを支払う形になります。
〇環境
・Unity 2021.3.5f1(LTS)(URP)
・MixedRealityGrapihcsTools 0.4.0
・Windows 10PC
・NVIDIA RTX A6000(GPU)
〇比較
今回はRenderDocを使用しベンチマークを取る方法としてUnityプリミティブなキューブを100個配置し、MRGT Standardシェーダー、UnityStandardシェーダーを割り当て、処理にかかった時間を比較していきます。
RenderDocはあくまでその瞬間のGPU上での処理にかかった時間のため、ほかのアプリケーションの稼働状況などにより毎回誤差は生まれてしまいます。
そのため今回は10回計測を行い平均値で比較することにしました。
この際にスクリーンキャプチャのうち実際にレンダリングを行っているUniversalRenderPipeline.Rendering.SingleCamera:MainCameraのイベントにかかる時間を計測値としています。
回数 | MRGT Standard(μSec) | URP Lit(μSec) |
---|---|---|
1 | 578.44 | 784.424 |
2 | 580.608 | 786.368 |
3 | 586.752 | 795.645 |
4 | 610.304 | 792.576 |
5 | 589.824 | 790.528 |
6 | 574.464 | 780.224 |
7 | 573.344 | 789.504 |
8 | 634.88 | 793.06 |
9 | 579.584 | 834.584 |
10 | 572.416 | 800.768 |
--- | --- | --- |
平均値 | 588.016 | 794.768 |
差分 | 206.752 | ---- |
結果としてテクスチャもα値も使わずにただシェーダーを適応したデフォルトの状態での比較でMRGT Standardの方が軽量であることが検証できました。
1フレームで206μ秒のというのは例えばHoloLens 2の最大FPSである60フレームで考えた場合12360μ秒=0.01秒差が生まれるということになります。(当然ながら実行環境によって異なるのであくまで秒数は参考程度です。)
前述のとおりMRGT Standardシェーダーには多くの機能が提供されており、使用するもののみコストを支払う仕組み上、多くの機能を使用することでURP/Litよりも負荷が上回ることが想定されます。
しかしその場合はURPの場合SRPBatcherによって従来マテリアル単位で行われていたバッチングとは異なりシェーダー単位でバッチングが使用できるため、MRTGシェーダーでまとめて処理を行うことができ、URP/Litを含めた複数のシェーダーで再現する場面と比較してよりよいパフォーマンスが出せると呼ぶことができるでしょう。
本日は以上です。