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 200LODである。なんだそれ。 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