夜風のMixedReality

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

ゼロから始めるUnityShader開発 第四章 Fallback

本日はShader学習枠です。

第四章ではShaderLabに関しての基礎的な部分を紹介しています。

今回はFallbackの紹介が漏れていたので紹介します。

〇Fallbackとは?

ShaderはGPU上で実行されますが、GPUのスペックによってはそもそもそのシェーダーが実行できない場合などが発生します。

例えばDirectXではDirectX9以降でジオメトリシェーダーが使用できます。

逆に言うとDirectX9以前の古いハードウェアやDirectX以外のグラフィックスAPIで実行されている環境ではジオメトリシェーダーを使用しているシェーダーが描画できないという場合があります。

 こういったときにFallbackを使用することで「そのシェーダーが実行できない場合代替として別の一般的なシェーダーを使用する」ということができます。

FallbackはShaderLabの末尾に記述することが一般的です。

Shader "Unlit/NewUnlitShader"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100
       ・・・
    }
    Fallback "Universal Render Pipeline/Lit"//追加
}

Fallbackは次のような形で使用します。 

    Fallback " Shader名 "

例えば筆者も開発にかかわっているMixedRealityGraphicsTools(MRGT)の前形となるMixedRealityToolkit(MRTK) StandardShaderでは次のようになっています。

    Fallback "Hidden/InternalErrorShader"

github.com

この場合は紫のエラー表示になるように設定されていますが、通常は標準シェーダーなどが指定されます。

Fallbackは通常は滑り止めのような保険的な形で実装、使用されますが、これを記述しない場合は記述したシェーダーが実行されない場合何も描画されないといった現象が発生します。

 Shaderのデバッグを行う上でも実機で初めて確認できることになりますが、その際に非常に強力な機能になります。