T.TAO
ブログへ戻る
/3 min read/Technical Art

Unity Shader #2.1 基本コマンド

#Unity#Shader#TechnicalArt

Unity Shader #1-1 シンプルシェーダー

レンダーパイプラインの過程では、いくつかのオプション用のコマンドがあります。

フェースカリング Face Culling

サーフェスの裏側はデフォルトで処理中にカリングされます。

CGPROGRAMの前にCull Offを追加すると、裏面のフェースカリングをオフにできます。

Plain TextPass
{
    Cull Off
    CGPROGRAM
    //...
    ENDCG
}

その他のオプション:

  • Cull Off: 裏面のフェースカリングをオフにする
  • Cull Back: [デフォルト] 面の裏側をカリングする
  • Cull Front: 面の表側をカリングする

Inspectorでカリングモードを設定したい場合は、Properties部分に1行追加し、Cull[_CullMode]を使用します。

Plain TextProperties
{
    [Enum(UnityEngine.Rendering.CullMode)]_CullMode("CullMode", float) = 2
}

Pass
{
    Cull [_CullMode]
    CGPROGRAM
    //...
    ENDCG
}

CullMode:

  • 0: Off
  • 1: Front
  • 2: Back

時間 Time

_Timeパラメータで時間値を使用できます。

_Time.x/y/z/w: t/20, t, 2t, 3t

_SinTime.w: 時間のcos値

_CosTime.w: 時間のcos値

アルファテスト Alpha Test

フラグメントシェーダーでは、clip(n)関数は以下の動作をします:

n < 0: フラグメントを非表示にする

n >= 0: フラグメントを表示する

clip()関数で解像度/ブレンド/波エフェクトを実現でき、今後のノートで扱います。

ブレンド/半透明の場合は、CGPROGRAMの前に上記のCullと同様にBlendコマンドを追加する必要があります。

Plain TextPass
{
    Blend SrcAlpha OneMinusSrcAlpha
    CGPROGRAM
    //...
    ENDCG
}

OneMinusSrcAlpha以外にも、他のブレンドモードがあります。よく使われるもう1つのモードはBlend SrcAlpha Oneです。

また、ZWriteをオフにすることを忘れないでください。そうしないと、ソート/レンダリング順序に明らかで深刻な問題が発生する可能性があります。

Plain TextPass
{
    ZWrite Off
    Blend SrcAlpha OneMinusSrcAlpha
    CGPROGRAM
    //...
    ENDCG
}

場合によってはZWriteをオンにする必要があり、これらのケースは今後のノートで扱います。

半透明オブジェクトはRender Queueで2500より後(デフォルトは3000)にする必要があることを思い出してください。そのため、Passの前にSubShader部分にTags{}を追加します。

Plain TextSubShader
{
    Tags{"Queue" = "Transparent"}
    Pass
    {
        ZWrite Off
        Blend SrcAlpha OneMinusSrcAlpha
        CGPROGRAM
        //...
        ENDCG
    }
}

もう1点、色(またはfloat)のアルファ値を手動で設定する場合は、アルファ値が(0,1)の範囲内にあることを常に確認してください。saturate()関数を安全装置として使用できます。saturate()は(0,1)の範囲外の値を返さないようにします。

Plain Texthalf alpha = saturate(tex2D(_MainTex, i.uv).r * _Color.a * _Emiss);

このシリーズの記事

Unity Shader
  1. 01Unity Shader #0 数学の基礎
  2. 02Unity Shader #1 レンダーパイプライン
  3. 03Unity Shader #2 コードの基礎
  4. 04Unity Shader #2.1 基本コマンド
  5. 05Unity Shader #3 URP へのアップグレード
  6. 06Unity Shader #4 UV 上での図形描画
  7. 07Unity Shader #5 リムライト
  8. 08Unity Shader #6 スキャンとホログラム
  9. 09Unity Shader #7 アニメトゥーンシェーダー
  10. 10Unity Shader #8 ディゾルブ
  11. 11Unity Shader #9 レンズの雨滴
  12. 12Unity Shader #13 ポストプロセス
  13. 13URP #1 Universal Lit と URP ShaderLab