Shader, VRChat, 備忘録, WIP

Shader理解したい。ShaderSetting編

実際に書いてみたけれどやっぱり基礎的な部分がまだ抜けているのでしっかりしようと思う。 Propertiesについてはマテリアルのインスペクターに表示するものだと理解した。 今回はSubShaderの中にあるShaderSettingについてお勉強しようと思う。

SubShader
{
    Tags { "RenderType"="Opaque" }
    LOD 200

    Cull Back
    ZWrite On
    ZTest LEqual
    Blend Off

    CGPROGRAM
    // HLSL / Cg code
    ENDCG
}

ShaderSettingとは簡単に言うとSubShaderやPassの描画設定のことでCGPROGRAMから外側に書く描画ルールと考えるとわかりやすいかもしれない。 ここから具体的な記述について調べていく。

Tag

Unityにこのシェーダーはどのような種類で扱うかを伝えるためのものである。 Depth TextureやUnity標準Shaderとの互換性を保つために記述する必要がある。 例は

Tags { "RenderType"="Opaque" }

これは不透明なオブジェクトで使われる。 例えば床や壁などで使われるであろう。

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

不透明オブジェクト用 ガラスや傷、フェードなどで使用する。 QueueとはUnityにどのタイミングで描画を行うか指定するためのTagである。 Transparentだと透明オブジェクトの描画タイミングで描画するように指定している。 逆に不透明オブジェクトの場合はGeometryとなる。

LOD
LOD 200

LODである。なんだそれ。 Level of Detailの略らしくどうやら閾値ということらしい。 例えばPCでは200, モバイルでは50と設定すれば、50以下のSubShaderを読み込み、PCでは200のSubShaderを読み込むことが可能になる。 easyQuestSwitcherみたいな感じだね。

https://docs.unity3d.com/ja/2018.4/Manual/SL-ShaderLOD.html

Cull
Cull Back

裏面は描画しない、デフォルトの設定である。

Cull Front

表面を描画せず、裏面だけ描画します。

Cull Off

最強です。 両面を描画します。

いい子なのでWIPをつけて寝ます。続きは明日。

https://rin0700.com/blog/3f997003-3670-4259-8923-780a6fadab20