本日はShader学習枠です。
先日までMRTKやMRGTでグラフィックを担当されているMicrosoftのCameronさんによるMR向けのShader解説セッションを読み解いていました。
今回はセッション全体をまとめていきます。
〇セクションの目的と内容
動画では
初心者に開発の強力な基礎的なShaderの知識を提供すること
また熟練者にもおさらいという形で学ぶことができるようにする
という目的で公開されているようです。
筆者自身は初心者ではないとはいえ、まだまだ知識が足りない点も多いので読み解いていきます。
UnityのShaderLabを前提にしてMixedRealityアプリでのShaderに関しての注意事項などもないように盛り込まれています。
§1Shaderとは何か?
§ 2 Shaderの実行
§3 マテリアルとレンダーモード
§4 MixedReality における注意点
§5 パフォーマンスと最適化ツール
§6 デバッグ
§7 その他のリファレンス
§8 Q&A
〇Shaderとは何か?
ShaderはGPU上で動くグラフィックスパイプラインでの処理に使用されるプログラムです。
GPU上ではデータを画面に描画する際に次の画像のような処理を行っています。
この中でプログラムによりカスタマイズ可能な処理をカスタマイズするプログラム言語がシェーダーになります。
有名なものに3Dモデルの座標を変換し、頂点を配置する頂点シェーダー、ディスプレイの1ピクセルごとに色を指定するフラグメントシェーダーがあります。
〇Untiyのシェーダー
UnityのシェーダーはShaderLabという言語で記述されています。
実際は独自形式の中にcg/hlsl言語で記述する形となっています。
形式としては3Dデータから取得するデータを定義する構造体、頂点シェーダー、頂点シェーダーで計算した値をフラグメントシェーダーに渡すために格納する構造体、フラグメントシェーダーというブロックで構成されています。
〇レンダリング状態
Shaderでは描画する際にすでに描画した画像を使用して透明度を再現することなどができます。
このようにShaderによる描画(レンダリング)の制御をレンダリング状態(RenderingState)と呼びます。
〇パフォーマンスと最適化ツール デバッグ
シェーダーはGPU上で実行されているため、デバッグが非常に行い難いです。
まずはパフォーマンスを知ることとしてUnityのプロファイルツールを使用することができます。
またMRTKでは実機でも動く独自のプロファイラーが提供されています。
高度なツールとしてRenderDocというものもあります。
〇まとめ
以上がMR Speaker Series: Shader Foundationsのまとめになります。
筆者はShaderに関してはそれなりに知識があるつもりでしたが、グラフィックスパイプラインでの処理を念頭に置いてShaderを構築することやRenderDocで描画処理を追う方法など学ぶことが多かったです。
今回英語のセッションを読み解きましたが、非常に素晴らしいセッションでした。