Dither ノード
説明
ディザは、量子化誤差をランダム化するために使用される意図的なノイズです。これは、画像内のカラーバンディングなどの、大規模なパターン (反復的模様) を防止するために使用されます。Dither ノードは、このパターンが均一に分布されるように、スクリーンスペースでディザリングを適用します。これは、Screen Position 入力に別のノードを接続することによって調節可能です。
この ノード は一般的に、Master ノード 上で、不透明なオブジェクトに透明性を与えるために Alpha Clip Threshold への入力として使用されます。これは、見た目は透明でありながら、不透明なオブジェクトのレンダリングの利点 (深度の書き込みやディファードでのレンダリングなど) を備えたオブジェクトを作成するのに便利です。
ポート
Name | Direction | タイプ | バインディング | 説明 |
---|---|---|---|---|
In | 入力 | 任意のベクトル型 | なし | 入力値 |
Screen Position | 入力 | Vector 4 | Screen Position | ディザパターンの適用に使用される座標 |
Out | 出力 | 任意のベクトル型 | なし | 出力値 |
生成されるコードの例
以下のサンプルコードは、このノードの出力の一例を示したものです。
void Unity_Dither_float4(float4 In, float4 ScreenPosition, out float4 Out)
{
float2 uv = ScreenPosition.xy * _ScreenParams.xy;
float DITHER_THRESHOLDS[16] =
{
1.0 / 17.0, 9.0 / 17.0, 3.0 / 17.0, 11.0 / 17.0,
13.0 / 17.0, 5.0 / 17.0, 15.0 / 17.0, 7.0 / 17.0,
4.0 / 17.0, 12.0 / 17.0, 2.0 / 17.0, 10.0 / 17.0,
16.0 / 17.0, 8.0 / 17.0, 14.0 / 17.0, 6.0 / 17.0
};
uint index = (uint(uv.x) % 4) * 4 + uint(uv.y) % 4;
Out = In - DITHER_THRESHOLDS[index];
}