Lighting & surfaces

Fresnel / Schlick Approximation

フレネル・シュリック近似

視線角度で反射を変え水やガラスの縁を強調する。

3 / 10

Interactive demo

Preparing the demo…

Fresnel / Schlick Approximation

Drag to orbit, Ctrl/⌘ + scroll to zoom. Use two fingers on touch screens.

This explanation is currently available in Japanese.

ひとことで

物体の表面での光の反射率は、見る角度によって変わります。正面から見るとほとんど反射せず、かすめるような浅い角度で見るほど強く反射します。湖を足元から見下ろすと水底が透けて見え、遠くの湖面は空を鏡のように映す、という日常の光景がフレネル効果です。シュリック近似は、この角度による変化を、正面の反射率 F0F_0 だけから安く計算する近似式です。

F(θ)≈F0+(1−F0)(1−cos⁡θ)5F(\theta) \approx F_0 + (1 - F_0)(1 - \cos\theta)^5

ゲームでの使いどころ

  • 水面:足元は透けて、遠くは空や景色を映す。海・川・水たまりの表現に必須です。
  • ガラス・宝石・シールド:正面は透けて、縁ほど周囲を映して光る。エネルギーシールドや氷の縁の輝きにも使われます。
  • あらゆる PBR マテリアル:PBR の鏡面反射の FF 項。布や木でも、浅い角度では光沢が強くなります(逆光の路面が光るなど)。
  • リムの表現:視線に対して横を向いた縁を強調するリムライトは、フレネル項を効果として流用したものです。

しくみ

θ\theta は視線と表面の法線のなす角です(正面が 0°、かすめる角度が 90°)。F0F_0 は正面から見たときの反射率で、素材ごとにほぼ決まっています。

素材F0F_0(正面の反射率)
水約 2%
ガラス・プラスチック約 4%
ダイヤモンド約 17%
金属(銀・アルミなど)90% 以上(色付き)

非金属は正面ではわずか数 % しか反射しませんが、90° に近づくとどの素材も反射率が 100% に近づきます。

本来のフレネルの式は、屈折率と偏光を使ったもっと複雑な式ですが、シュリック近似は 5 乗の項 1 つで形をよく再現でき、シェーダーで毎画素計算しても安いため、ゲームでは標準的に使われます。

反射と屈折の配分:反射されなかった 1−F1 - F の光は、表面の内側へ屈折して進みます。水面なら、反射した空の色を FF、屈折して見える水底の色を 1−F1 - F の割合で混ぜます。

色=F⋅反射した景色+(1−F)⋅屈折して見える景色\text{色} = F \cdot \text{反射した景色} + (1 - F) \cdot \text{屈折して見える景色}

実装のポイント

  • マイクロファセットでは h を使う:PBR の鏡面反射では、表面の法線 n\mathbf{n} ではなく、ハーフベクトル h\mathbf{h} と視線の角度 v⋅h\mathbf{v}\cdot\mathbf{h} を使います。
  • 粗い面の環境反射:粗い面では、縁の反射が強くなりすぎないよう、粗さを考慮したフレネル(事前計算した表を使う Split-Sum など)を使います。
  • 金属の F0 は色:金属の反射は色付きなので、F0F_0 を RGB で持ちます(金なら黄色)。

つまずきやすい点

  • 縁が明るくなりすぎる:環境マップが明るい場合、フレネルで縁が真っ白に光って、物体が浮いて見えることがあります。周囲の遮蔽(AO)で縁の反射を抑えます。
  • 法線マップと組み合わせたときのちらつき:細かい波の法線で cos⁡θ\cos\theta が大きく変わると、遠景の水面が白くちらつきます。遠くでは法線を平らにならします。
  • フレネルを切ると不自然:反射率を一定にすると、遠くの水面が空を映さず、手前の水面が不自然に鏡のようになります。デモで確かめてください。

デモで試すこと

  1. 視点を上下にドラッグして、水面を見下ろす角度を変えてください。真上から見ると水底のタイルが透け、低い角度で見ると空と山並みが映り込みます。右下のグラフの点が、今の視線の角度での反射率です。
  2. 「フレネル効果」をオフにすると、角度に関係なく反射率が一定(水なら 2%)になり、遠くの水面も空を映さなくなります。
  3. 素材をダイヤや金属に変えると、正面の反射率 F0F_0 が上がり、グラフの左端が持ち上がります。どの素材でも 90° では 100% に近づきます。
  4. 右の球は、正面ではほとんど反射せず、縁ほど周囲の景色を強く映しています。

References

Filament Material System ↗

A general reference for this subcategory.