ボリュームシェーダー パフォーマンスを理解する:ディープダイブ
ボリュームシェーダー ベンチマークとは、GPU が 3D フィールドをレイマーチングするときの実際の描画負荷を測定するものです。本稿では、WebGL ボリュームシェーダー ベンチマークがマンデルバルブをどのように描画しているか、FPS とフレーム時間が何を示すのか、そしてプリセットやパラメーター、共有リンクが公平で再現性のある結果を生む理由を解説します。
ボリュームシェーダー ベンチマークとは?
ボリュームシェーダー ベンチマークは、画面上のすべてのピクセルについてボリューム関数を評価することで GPU を限界まで引き上げます。三角形をラスタライズする代わりに、シェーダーはレイマーチング を行い、視線方向にステップを進めて関数を評価し、表面と交差するかを判断します。私たちのベンチマークでは マンデルバルブと呼ばれるフラクタルを採用しており、超越関数・反復ループ・分岐が組み合わさった理想的なストレステストです。これにより GPU の計算能力とメモリ挙動の両方を観察できます。
実装は WebGL のフラグメントシェーダー内で完結しているため、パイプラインがシンプルでデバイス間の比較が容易です。各フレームで同じカメラ軌道を描くので、フレームレートの違いは GPU 性能・ドライバー・選択したパラメーターの差を反映します。
アーキテクチャとコンパイラの影響
ボリュームシェーダー ベンチマークはアーキテクチャの違いを浮き彫りにします。FP32 演算性能が高い GPU や超越関数の処理が得意な GPU はマンデルバルブで優位に立ちます。ワープ(または wavefront)が広い GPU では、分岐が少なければレイテンシを隠蔽しやすい一方、カーネル内の分岐が多いと占有率が下がります。同じプリセットでもモバイル GPU とデスクトップ GPU の差は顕著で、後者は計算・メモリ帯域ともに余裕があり、高いクロックを持続できます。
ドライバーのコンパイラも重要です。GLSL をわずかに変更しただけでレジスタ圧や命令選択が変化します。私たちのシェーダーは移植性を重視して安定させていますが、ブラウザーによって JIT の挙動が異なる場合があります。そのため、A/B 比較では同じブラウザーを使い、単一の絶対 FPS の値よりもプリセット間の相対差に注目することをおすすめします。
シンプルで再現性の高い手法
信頼できるデータセットを作るには、デバイスのクラスごとにプリセットを決めておくと便利です。タブレットなら Ultra Low、ゲーミングノートなら Balanced、デスクトップなら High を基準にする、といった具合です。ウォームアップを 1 分行い、その後 1 分間の計測で平均値を取りましょう。各ランのあとに結果をエクスポートし、デバイス・ブラウザー・ドライバー・日付を CSV に記録しておけば、後で比較するときに役立ちます。
共有リンクには反復回数(iter)、ステップサイズ(step)、解像度スケール(res)、ズーム(zoom)が含まれるため、実行した内容をそのまま再現できます。チーム内で比較する際やコミュニティで共有する際にも、条件が揃っているかを簡単に確認できます。
プリセットとパラメーターを理解する
ボリュームシェーダーベンチマーク には複数のプリセットが用意されています。Ultra Low は 3〜5 ms 程度の軽いワークロードを想定し、Balanced は 10〜16 ms の領域を目指しています。これらは、通常のインタラクティブ体験でよく使うフレーム時間帯です。
- Kernel Iterations: フラクタルのディテールを増減させるパラメーターです。値を上げるほど計算量も増え、複雑な形状が現れます。
- Step Size: レイマーチングの歩幅です。大きくすると高速になりますが表面の精度が落ち、小さくすると滑らかになる代わりに負荷が高まります。
- Resolution Scale: レンダリング解像度のスケール。1.0 でネイティブ解像度、1.3 など高めると負荷が急増します。
- Zoom: カメラ距離を変えてモデルの表示サイズを調整します。プリセットでは 0.75〜1.50 の範囲に制限しており、視認性を確保しています。
これらの組み合わせで、デバイスにとって「ちょうど良い」ワークロードを探ることができます。
結果を解釈する:FPS とフレーム時間
ベンチマークでは平均 FPS だけでなく、フレーム時間(ms)と最小・最大値にも注目します。フレーム時間は描画にかかった実時間を示し、値が安定していればある程度揺らいでも滑らかさを保てます。逆に数値の幅が広い場合は、GPU が負荷に追いついていない、もしくはドライバーやバックグラウンド処理が影響している可能性があります。
CSV にエクスポートすればこれらの指標を時系列で追跡でき、プリセット変更やハードウェアアップグレードの効果を客観的に把握できます。
WebGL による広範な互換性
ボリュームシェーダーベンチマーク は WebGL 1 をターゲットにしており、主要なデスクトップ・モバイルブラウザーで利用できます。旧世代デバイスでも動作させるため、シェーダーコードは慎重に書かれています。WebGL 1 は古い API ではありますが、適切な最適化を施せば依然として高い負荷をかけられ、GPU の計算能力やコンパイラ品質の差を明確に示します。
モダン GPU では、解像度や反復数の変更に比例してスコアが変化する様子を確認できます。このスケーリングを活用して、日常的な操作で体感しやすい 10〜15 ms 付近のフレーム時間を狙うなど、実際のワークロードに近い設定を探りましょう。
まとめ:押さえておきたいポイント
- プリセットで基準を作り、反復回数・ステップサイズ・解像度を調整して有意義なフレーム時間に合わせる。
- CSV にエクスポートして履歴を残し、アップデートやチューニングの効果を追跡する。
- 共有リンクで同じ設定を再現し、公平な比較を実現する。
- FPS だけでなくフレーム時間にも注目し、安定性を重視する。
再現性のあるワークロードと透明性の高いパラメーターを組み合わせれば、ボリュームシェーダー ベンチマークは GPU が数学的に重いフラグメントシェーディングをどう処理するか鮮明に示します。具体的な手順については、再現性の高いベンチマークガイドも参考にしてください。