夜風のMixedReality

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

MRTK HandTrianglesShaderの中身を読み解く その② SubShaderを読み解く

本日はShader枠です。

前回に引き続きHandTrianglesShaderの中身を読み解いています。

〇HandTrianglesShaderを大雑把にみる

HandTrianglesShaderは800行に及ぶ非常に長いコードです。

f:id:Holomoto-Sumire:20200504132019j:plain

例えばProperties部分だけで60行近くプロパティが記述されています。

f:id:Holomoto-Sumire:20200504132528j:plain

このままではHandTrianglesShader全体がわかりにくいのでプロパティや処理を大雑把に省略すると以下のようになります。

Shader "Mixed Reality Toolkit/HandTriangles" {
    Properties
    {
    }
    SubShader
    {
            Tags { "RenderType" = "Transparent" "Queue" = "Transparent" }
    Blend One One
    ZWrite Off
    Tags {"DisableBatching" = "True"}

    LOD 100
        Pass{
        CGPROGRAM
        ENDCG
        }
    }

        FallBack "Mixed Reality Toolkit/Standard"
}

今回大雑把にCGPROGRAM~ENDCG内を省略したSubShader内を読み解きます。

●Tags
Tags{"RenderType"="Transparent","Queue"="Transparent"}

 RenderTypeとQueueタグにTransparentが指定されています。これは透過を扱えるshaderを指します。

 QueueタグにTransparentを指定することでシェーダのレンダリング順を後回しにしています。

 このQueueはレンダリング順(描画順)を指定します。

●Blending
    Blend One One

 Blendingは透明なオブジェクトの作成に使用されるもので透過率の合成を設定します。

f:id:Holomoto-Sumire:20200503133902p:plain
透明なオブジェクトの描画処理(Unityレファレンスより)

docs.unity3d.com

 透過率の合成にかかわるためここをコメントアウトするとパルスの透過率を維持できなくなります。

 f:id:Holomoto-Sumire:20200503134935g:plain    Blend One One は透過率の加算を意味します。

● ZWrite Off
    ZWrite Off
ZWriteはオブジェクトのピクセルをデプスバッファに書き込むかどうかを制御しています(デフォルトでは On)。

 透明の効果を描画する場合は ZWrite Off にします。

● DisableBatching
 Tags {"DisableBatching" = "True"}

この記述があることでバッチングされずに描画されます。

 バッチング処理とは同じマテリアルの複数のオブジェクトが存在する場合あらかじめ一つにそれらをまとめ扱う処理のことを指します。

docs.unity3d.com

●LOD
LOD 100

LOD(Level of Detail)はshaderの詳細レベルを指します。これは状況に応じて描画クオリティを変更する仕組みを指します。

負荷軽減のために用いられ、デバイスや状況によってそのshader処理が実行されるか使い分けられます。

docs.unity3d.com

●FallBack
       FallBack "Mixed Reality Toolkit/Standard"

このShaderが実行できない場合MixedRealityToolkitのStandardShaderが実行されます。

以上がSubShaderをざっくりと読み解いた内容です。