夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

MRTG Standard シェーダーの負荷をURP/Litシェーダーと比較する

本日はシェーダー調査枠です。

 MixedRealityGrahpicsTools(以下MTGT)ではxRに特化したシェーダーシステムとしてGraphicsTools /Standardシェーダーが提供されています。(以下MRGT Standard)

 ドキュメントによるとライティングの近似化などによりUnityでDefaultで提供されているシェーダーよりも軽量であるということが明記されています。

 今回は実際にRenderDocを使用してベンチマークを取りながらどの程度軽量なのかを調査していきます。

〇MRGT Standardシェーダー

docs.microsoft.com

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を含めた複数のシェーダーで再現する場面と比較してよりよいパフォーマンスが出せると呼ぶことができるでしょう。

redhologerbera.hatenablog.com

本日は以上です。