2022年8月31日水曜日

【GIMP】リアルな虹の描き方

リアルな虹をGIMPで描く手順をまとめた備忘録

1. 再現する虹の種類

主虹と副虹から成り、アレキサンダーの暗帯を含む。

2. 下準備

  1. 土台になる風景写真を開く
  2. 虹用に透明レイヤーを追加する
  3. Gradientsダイアログを開く (Menu > Windows > Dockable Dialogs > Gradients)
  4. 再利用できるように新規グラデーションを追加する (Create a new gradient)
Gradient ダイアログ下部に新規作成ボタンがある

3. グラデーションのカスタム

3.1. 新規グラデーションを4セグメントに分割する

Gradient Editor > スライダ上で右クリック > Split Segment Uniformly... > 4 > Split

これら4つのセグメントをそれぞれ虹の内側、主虹、暗帯、副虹にする。

3.2. セグメント境界の位置を調整する

虹の帯の位置は太陽光からの角度(出典)で決まるのでそれを参考にする。

  • 主虹の内側(紫色)40.7°
  • 主虹の外側(赤色)42.4°
  • 副虹の内側(赤色)50.4°
  • 副虹の外側(紫色)53.5°

副虹を円周とする円形グラデーションを作成するので、これを基準に相対値を求める。

  • 主虹の内側(紫色)0.761
  • 主虹の外側(赤色)0.793
  • 副虹の内側(赤色)0.942
  • 副虹の外側(紫色)1.000

Gradient Editor で各セグメントの▲をドラッグする(Shiftキーを押しながら)。グラデーション上の位置はエディター下部に数値表示されるので、それが上述の相対値に合うようにする。

3.3. 虹のスペクトラム

GIMPのHSV色空間で普通に赤から紫のグラデーションを作ると黄緑から紫までが大部分を占めてしまう。

hue: 0-300 のグラデーション

本物の虹のスペクトラムは黄色がほぼ中央に来る。そこでグラデーションを二等分し、

  • 前半は赤から黄色
  • 後半は黄色から紫

と設定するとリアルになる。(セグメント分割は右クリック・メニュー > Split Segment at Midpoint)

hue: 0-60 と 60-300 の分割グラデーション

黄緑 (#00FF00) やアクア (#00FFFF) が明るすぎるのも不自然だが、これは加工の工程で目立たなくなる。

3.4. 虹色の設定

  1. 対象セグメントを右クリック
  2. Left Color Type、Right Color Type が "Fixed" になっていることを確認
  3. Left/Right Endpoint's Color... をそれぞれ設定
    • 虹の前半は #FF0000 から #FFFF00
    • 後半は #FFFF00 から #FF00FF
    • 主虹と副虹はグラデーションの向きが逆なので注意
    • opacity は主虹を100%、副虹を10%ぐらいにすると良い
  4. 意図しないグラデーションになる場合はオプションを確認
    • 右クリック > Coloring Type for Segment > HSV (clockwise hue または counter-clockwise hue) を適宜選ぶ

3.5. アレキサンダーの暗帯の設定

アレキサンダーの暗帯はそれ以外の部分を明るくすることで再現する。

  • 主虹の内側のセグメント
    • 虹の中心側の端:#FFFFFF (opacity: 5%ぐらい)
    • 主虹側の端:同15%ぐらい
  • 主虹と副虹の間
    • 完全な透明 (opacity: 0%)
調整後のグラデーション

4. 虹の描画

風景全体に占める虹の大きさがリアルな比率になるように、写真の画角と虹の視角から虹の大きさを決定する。

作例では対角180°の魚眼レンズ (7Artisans 7.5mm f/2.8 for FX) で撮影した写真を使った。この魚眼レンズは恐らく等距離射影なので、写真上の距離と視角が比例すると仮定できる。(超広角 rectilinear レンズの場合はもっと複雑)

虹の中心点から副虹の外側までは53.5°なので、写真の対角線に対する虹の半径は約0.297倍になると考えて良さそうだ。

  • 作例写真のサイズ (pixel) は 6000 * 4000 なので対角長は 7211
  • 写真上の虹の半径は 7211 * 0.297 = 2141

4.1. Measure Toolでガイド線を引く

  1. 虹の中心にする位置に水平線と垂直線を追加
    • 位置は撮影時の太陽の角度に応じて決めるともっとリアルになる
  2. 中心点の上方、虹の円周上に当たる位置に水平線を追加
    • 作例では中心点から上に 2141 px の位置

4.2. グラデーションを適用

Gradient Tool の Shape を Radial に設定し、ガイド線に合わせてグラデーションを適用する。Menu > View > Snap to Guides をONにしておくと作業しやすい。

虹の外側の紫色部分はFuzzy Select Toolで選択

Fuzzy Select Tool の設定

  • Antialiasing と Feather edges は OFF
  • Threshold は 0.0
紫色を消去した

その選択範囲を Bucket Fill Tool で #FFFFFF (opacity: 15%) に塗りつぶす

範囲選択を解除して虹レイヤー全体に適度な Gaussian Blur を適用

レイヤー合成モードは Addition が自然に見える。不透明度は20%前後。

5. 地面部分のマスク

  1. 写真のレイヤーを選択
  2. Fuzzy Select Tool で空か地面どちらか選択しやすい方を選択
    • 作例では Threshold: 80で数回の追加選択で空全体をカバーできた
  3. Quick MaskをONにして選択範囲を確認
  4. 虹レイヤーにレイヤーマスクを追加
    • 虹レイヤーを右クリック > Add Layer Mask...
    • Initialize Layer Mask to は Channel
    • Invert mask は OFF(地面を選択した場合は ON)
Quick Mask を ON にした状態でレイヤーマスクの追加ダイアログを開いている

6. 完成

Layer Mask を追加し、Quick Mask を OFF にしたら完成。

これで、実際の虹をこのレンズで撮影した時に写るだろう虹とほぼ同じ大きさになっているはず。