「画面の四隅をふわっと暗くしたい」「レトロなCRT風の走査線をのせたい」「被弾した瞬間、画面全体を赤く点滅させたい」——こうした ゲーム画面まるごと にかかる演出は、個別オブジェクトのシェーダー では作れません。使うのは ポストプロセスシェーダー です。
ポストプロセスは、 一度描き終えた画面全体を読み込んで、その上から加工 をかける手法です。この記事では、その構成(CanvasLayer+全画面ColorRect)から、画面を読む鍵 hint_screen_texture 、ビネットや色収差などの定番レシピ、被弾フラッシュの実践までを解説します。
この記事でわかること
- ポストプロセスの構成(CanvasLayer+全画面ColorRect)
hint_screen_textureとSCREEN_UVで 描画済み画面を読む- 定番レシピ (ビネット・色収差・CRT走査線など)
- 被 弾フラッシュ の実践と、SubViewport方式との使い分け
動作確認環境: Godot 4.7
ポストプロセスの仕組み
ポストプロセスの考え方は、 「ゲーム画面を1枚の絵として描いてから、その絵に加工をかける」 です。写真を撮ってからフィルタをかけるのに似ています。

Godotでこれを実現する構成はシンプルです。
CanvasLayer:常にゲーム画面より手前に描かれるレイヤー。ここに載せたものが最前面になります- 全画面
ColorRect:画面いっぱいに広げた四角形。これが「加工をかけるキャンバス」になります ShaderMaterial:そのColorRectに割り当てる、加工の中身(シェーダー)
つまり、 画面全体を覆うColorRectにシェーダーをかけて、その下のゲーム画面を加工する わけです。ColorRectのアンカーを「Full Rect」にして画面全体に広げ、Mouse Filter を Ignore にすれば準備完了です(既定の Stop のままだと、画面全体のクリックをこの板が受け止めて、後ろのUIやゲームに届きません)。HUDまで加工したくないときは、HUDを載せた CanvasLayer の Layer を、この板の CanvasLayer より大きい数字にします(数字の大きいほうが手前に描かれ、板の加工を受けません)。
画面全体を読む:hint_screen_texture
ポストプロセスの心臓部が hint_screen_texture です。これは、シェーダーに 「今まさに描き終えた画面」 を渡してくれる仕組みです。

シェーダー側では 、こう宣言して読みます。
shader_type canvas_item;
// hint_screen_texture で「描画済みの画面」を受け取る
uniform sampler2D screen_tex : hint_screen_texture, filter_linear;
void fragment() {
// SCREEN_UV は画面上の座標。そこの色を読む
vec3 screen_color = texture(screen_tex, SCREEN_UV).rgb;
// ここで screen_color を加工する(例:そのまま出す)
COLOR = vec4(screen_color, 1.0);
}
ポイントは2つです。 hint_screen_texture が「加工前の画面」を screen_tex に流し込み、 SCREEN_UV がその画面上の位置(左上が (0, 0)、右下が (1, 1))を表します。この2つで画面の各ピクセルの色を読み、COLOR に加工結果を書けば、画面全体が変化します。あとは「読んだ色をどういじるか」がレシピごとの腕の見せどころです。
定番レシピ
読んだ画面をどう加工するかで、色々な画面効果が作れます。代表的なものを見てみましょう。
