Version: 2020.3
言語: 日本語
ShaderLab コマンド: Cull
ShaderLab コマンド: Stencil

ShaderLab コマンド: Offset

GPU の深度バイアスを設定します。

深度バイアス (深度オフセットとも呼ばれます) は、ジオメトリを描画する深度を決定する GPU の設定です。深度バイアスを調整すると、GPU は同じ深さにある他のジオメトリの上にジオメトリを描画するようになります。これにより、Z ファイティングやシャドウアクネなどの好ましくない視覚効果を避けることができます。

特定のジオメトリの深度バイアスを設定するには、このコマンドまたはRenderStateBlock を使用します。すべてのジオメトリに影響を与えるグローバルの深度バイアスを設定するには、CommandBuffer.SetGlobalDepthBias を使用します。GPU は、グローバルの深度バイアスに加えて、特定のジオメトリの深度バイアスを適用します。

シャドウアクネを軽減するには、ライトバイアス を設定すると同様の視覚効果を得ることができます。ただし、この設定は違う方法で動作し、GPU の状態を変更するものではありません。詳細については、影のトラブルシューティング を参照してください。

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

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

使用法

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

シグネチャ 構文例 機能
Offset <factor>, <units> Offset 1, 1 指定された値に基づいて、ジオメトリをカメラの近く、または遠くに描画します。

有効なパラメーター値

パラメーター Value 機能
factor Float (範囲は –1 から 1) 深度勾配とも呼ばれる最大 Z の勾配をスケールして、各ポリゴンの可変深度オフセットを生成します。

ニアクリップ面とファークリップ面に平行でないポリゴンには Z スロープがあります。そのようなポリゴンの視覚的なアーティファクトを避けるために、この値を調整します。
units Float (範囲は –1 から 1) 一定の深度オフセットを生成するために、最小解決可能深度バッファ値をスケールします。解決可能な最小深度バッファ値 (1 unit) は、デバイスによって異なります。

負の値は、GPU がポリゴンをカメラに近づけて描画することを意味します。正の値は、GPU がポリゴンをカメラから遠くに描画することを意味します。

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

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

        Pass
        {    
              // GPU がこのジオメトリをカメラに近くに描画するように、このジオメトリの深度オフセットを設定します
              // 通常、 Z ファイティングを避けるためにこれを行います
              Offset -1, -1

              // パスを定義する残りのコードをここに記述します
        }
    }
}

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

Shader "Examples/CommandExample"
{
    SubShader
    {
         // GPU がこのジオメトリをカメラに近くに描画するように、このジオメトリの深度オフセットを設定します
         // 通常、 Z ファイティングを避けるためにこれを行います
          Offset -1, -1

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

        Pass
        {    
              //  パスを定義する残りのコードをここに記述します
        }
    }
}
ShaderLab コマンド: Cull
ShaderLab コマンド: Stencil