This explanation is currently available in Japanese.
ひとことで
木々の葉の隙間、窓、雲の切れ間から差し込む光の筋(薄明光線)を描く表現です。ゲームでは、描画後の画面上で「太陽からの光が途中でさえぎられるかどうか」を、太陽の位置へ向かって放射状にぼかすことで安く近似する方法(画面空間のゴッドレイ、ライトシャフト)がよく使われます。逆光の森や廃墟、ステンドグラスの教会の演出に効果的です。
ゲームでの使いどころ
- 逆光の風景:森の中の木漏れ日、朝日が昇る丘、ビルの間から差す夕日。
- 神々しい演出:祭壇に差し込む光、ボスの登場、宝物が見つかる瞬間。
- 屋内の雰囲気:窓から差し込む光の筋、ほこりっぽい倉庫、水中で水面から差し込む光。
しくみ
画面空間の方法(GPU Gems 3 で紹介された方法)は、次の 3 ステップです。
- 遮蔽マスクを描く:太陽(明るい部分)だけを白く、それをさえぎる物体を黒く描いた画像を作る。低解像度で十分。
- 太陽へ向かって放射状にぼかす:各画素から画面上の太陽の位置へ向かって、一定の間隔でマスクを 回読み、少しずつ減衰させながら足し合わせる。
- 元の画面に加算する。
太陽と画素を結ぶ線の途中に物体(黒)があれば暗く、隙間(白)ばかりなら明るくなるので、隙間から放射状に伸びる光の筋が現れます。
ボリューメトリックとの違い:ボリューメトリックフォグは 3D 空間で光と影を計算するので、横から見た光の筋や、太陽が画面外にある場合も正しく描けます。画面空間のゴッドレイは、太陽が画面内(またはその近く)にあるときにしか使えませんが、非常に安く、見た目の効果が大きいのが利点です。
実装のポイント
- マスクは低解像度で:マスクと放射状のぼかしは画面の半分〜4 分の 1 の解像度で十分です。
- 太陽が画面外に出たら弱める:太陽が画面の外や後ろにあるときは、効果をフェードアウトさせないと、おかしな方向に筋が出ます。
- 深度でマスクを作る:専用のマスクを描く代わりに、深度バッファで「空(最も遠い)か」を判定してマスクにする方法もあります。
- 縞対策:サンプル数が少ないと、同心円状の縞が出ます。開始位置を画素ごとにずらす(ジッター)と細かいノイズに変わります。
つまずきやすい点
- やりすぎ:強すぎる光の筋は画面全体を白っぽくし、他の情報を見えにくくします。演出の要所だけに使うのが効果的です。
- 太陽が隠れると消える:画面空間の方法では、太陽が完全に物の陰に入ると筋も消えます。これは現実とほぼ同じ振る舞いですが、急に消えると不自然なので、変化をなめらかにします。
- 横からの筋は描けない:光の筋を横から眺めるような構図には、ボリューメトリックな方法が必要です。
デモで試すこと
- 太陽がゆっくり動き、柱や木の隙間から光の筋が伸びます。太陽が柱の後ろに入ると、その柱の影が暗い筋として伸びます。
- 「遮蔽マスクを表示」をオンにすると、太陽だけが白く、その手前の物体が黒い、元になる画像が見えます。
- 「減衰」を下げると筋が短く、上げると長く伸びます。「サンプル数」を下げると、筋がざらついたり縞が出たりします。
- 「光の筋」をオフにすると、逆光の景色がのっぺりして見えることが分かります。