Version: 2022.1
言語: 日本語
ShaderLab コマンド: GrabPass
ShaderLab コマンド: ZTest

ShaderLab コマンド: ZClip

GPU の深度クリップモードを設定します。これは、GPU がニアクリップ面とファークリップ面の外側にあるフラグメントをどのように処理するかを決定します。

GPU の深度クリップモードを固定に設定すると、ステンシルシャドウのレンダリングに役立ちます。つまり、ジオメトリがファークリップ面を越えたときの特殊なケース処理が不要になり、結果的にレンダリング操作が少なくて済みます。ただし、Z の順序が正しくない場合があります。

レンダーパイプラインの互換性

機能名 ビルトインレンダーパイプライン ユニバーサルレンダーパイプライン (URP) HD レンダーパイプライン (HDRP) カスタム SRP
ZClip はい はい はい はい

使用法

このコマンドは、レンダー状態の変更を行います。Pass ブロックで使用すると、そのパスのレンダー状態を設定することができます。また、SubShader ブロックで使用すると、そのサブシェーダー内のすべてのパスのレンダー状態を設定することができます。

シグネチャ 構文例 機能
ZClip [enabled] ZClip True 深度クリップモードを設定します。

有効なパラメーター値

パラメーター Value 機能
enabled True 深度クリップモードをクリップに設定します。

デフォルトではこの設定になっています。
False

深度クリップモードを固定に設定します。ニアクリップ面よりも近いフラグメントは、正確にアクリップ面に配置され、ファークリップ面よりも遠いフラグメントは正確にファークリップ面に配置されます。

このコードサンプルでは、Pass ブロックでこのコマンドを使用するための構文を示しています。

Shader "Examples/CommandExample"
{
    SubShader
    {
         // SubShader を定義する残りのコードをここに記述。

        Pass
        {    
              // GPU の深度クリップモードをこの Pass に対して固定に設定します。
              // ステンシルシャドウをレンダリングする場合は、通常、これを行います。
              ZClip False
            
              // パスを定義する残りのコードをここに記述。
        }
    }
}

このサンプルコードでは、SubShader ブロックでこのコマンドを使用するための構文を示しています。

Shader "Examples/CommandExample"
{
    SubShader
    {
         //GPU の深度クリップモードをこの Subshader に対して固定に設定します。
         // ステンシルシャドウをレンダリングする場合は、通常、これを行います。
         ZClip False

         // SubShader を定義する残りのコードをここに記述。

        Pass
        {    
              // パスを定義する残りのコードをここに記述。
        }
    }
}
ShaderLab コマンド: GrabPass
ShaderLab コマンド: ZTest