夜風のMixedReality

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

MRGT StandardShaderをカスタマイズしてオリジナルの機能を搭載するときに見るべきこと その①

本日は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の改造を行うときに見るべき点になります。

次回より詳しいせつめいをします。