グレースケール(モノクロ)シェーダー

ℹ️ 留意事項

この記事は Godot 3から Godot 4 へ内容の書き換え中です。 Godot4では存在しない変数、関数が含まれている場合があります。もしその場合はリポジトリのIssuesまでご報告ください。

課題

画像のグレースケール変換に使用するシェーダーが必要です。

解決策

まずは canvas_item(2D)用シェーダーから始めてください。グレースケールに変換しつつピクセルのコントラストを維持するには、画素値を平均化が必要です。カラーチャンネルをすべて加算し、3で割ることで実現できます。

shader_type canvas_item;

void fragment() {
    COLOR = texture(TEXTURE, UV);
    float avg = (COLOR.r + COLOR.g + COLOR.b) / 3.0;
    COLOR.rgb = vec3(avg);
}

alt alt

この機能を画面全体に適用するには、ColorRect コンポーネント(カメラの動きを無視するため CanvasLayer 内に配置)を追加し、画面全体を覆うようにスケールを調整してください。

texture() 関数を修正し、オブジェクトのピクセルではなく画面を直接サンプリングするようにしてください。

COLOR = texture(SCREEN_TEXTURE, SCREEN_UV);

alt alt

関連するレシピ