本日はMRTK3およびMRGT枠です。
先日久々にMRGTのStandardShaderを改造して独自のシェーダーを開発しました。
ゼロイチでシェーダーを開発することもあるのですが、特に光の影響を受けるLitな表現や、透明度の実装などが入ると、実装がかなり大変になり、このような時にMRGT StandardShaderをたたき台とすることで開発を加速することができます。
〇MRGTとは?
MRGTはMicrosoft社が開発、提供しているMixedRealityデバイス向けの開発ツールMixedRealityToolkit(MRKT)で提供されているグラフィック関連のパッケージを指しています。
正確にはMRTK GTが正しい略だと思いますがプロジェクト内でもMRGTと略されているため本ブログではMRGTの略語を使用していきます。
2024年現在ではUnity向け、UnrealEngine向けの2種類が提供されています。筆者はUEに関して詳しくなれていないので特に明記しない限り記事内ではMRGT=MixedRealityToolkit GraphicsTools for Unityで紹介します。
https://github.com/microsoft/MixedReality-GraphicsTools-Unity
〇MRGTの仕組み
MRGT StandarShader自体の本体はPackages/com.microsoft.mrtk.graphicstools.unity/Runtime/Shaders/GraphicsToolsStandard.shaderにありますが、このファイルはShaderLabの構造全体を表しているにすぎず、パラメータなどはすべて記載されていますが、コア実装は別ファイルに記載されており、コア部分はGraphicsToolsStandardProgram.hlslで行われています。

ここで頂点シェーダーはVertexStage、フラグメントシェーダーはPixelStageで記載されています。
Varyings VertexStage(Attributes input)
{
}
half4 PixelStage(Varyings input, bool facing : SV_IsFrontFace) : SV_Target
{
}
頂点を動かしてアニメーションを行いたい場合はVertexStagに処理を記載します。
一方色関係の処理を記述する場合はPixelStageに記述します。
PixelStageでは冒頭部にテクスチャリング、クリッピング、ライティングというように処理が行われています。
テクスチャリングではUVやテクスチャを使用する処理を一律サンプリングしています。
またライティングに関してはGraphicsToolsLighting.hlslに処理が記述されています。
そしてGraphicsToolsStandardProgram.hlslで使用する入力データ=AppdateはGraphicsToolsStandardInput.hlslに記載されています。

struct Attributes
{
}
struct Varyings
{
}
〇新規機能を開発したい場合
いよいよ本題ですが、新しく、MRGTStandardShaderに処理を追加したい場合は、処理にもよりますが、頂点系の処理であればVertexStage、色関係であればPixelStageに処理を記述します。
そして、その内部で使用した変数はGraphicsToolsLighting.hlslに定義します。
以上が基本的なMRGTStandardShaderの改造を行うときに見るべき点になります。
次回より詳しいせつめいをします。