This explanation is currently available in Japanese.
ひとことで
物体の表面での光の反射率は、見る角度によって変わります。正面から見るとほとんど反射せず、かすめるような浅い角度で見るほど強く反射します。湖を足元から見下ろすと水底が透けて見え、遠くの湖面は空を鏡のように映す、という日常の光景がフレネル効果です。シュリック近似は、この角度による変化を、正面の反射率 だけから安く計算する近似式です。
ゲームでの使いどころ
- 水面:足元は透けて、遠くは空や景色を映す。海・川・水たまりの表現に必須です。
- ガラス・宝石・シールド:正面は透けて、縁ほど周囲を映して光る。エネルギーシールドや氷の縁の輝きにも使われます。
- あらゆる PBR マテリアル:PBR の鏡面反射の 項。布や木でも、浅い角度では光沢が強くなります(逆光の路面が光るなど)。
- リムの表現:視線に対して横を向いた縁を強調するリムライトは、フレネル項を効果として流用したものです。
しくみ
は視線と表面の法線のなす角です(正面が 0°、かすめる角度が 90°)。 は正面から見たときの反射率で、素材ごとにほぼ決まっています。
| 素材 | (正面の反射率) |
|---|---|
| 水 | 約 2% |
| ガラス・プラスチック | 約 4% |
| ダイヤモンド | 約 17% |
| 金属(銀・アルミなど) | 90% 以上(色付き) |
非金属は正面ではわずか数 % しか反射しませんが、90° に近づくとどの素材も反射率が 100% に近づきます。
本来のフレネルの式は、屈折率と偏光を使ったもっと複雑な式ですが、シュリック近似は 5 乗の項 1 つで形をよく再現でき、シェーダーで毎画素計算しても安いため、ゲームでは標準的に使われます。
反射と屈折の配分:反射されなかった の光は、表面の内側へ屈折して進みます。水面なら、反射した空の色を 、屈折して見える水底の色を の割合で混ぜます。
実装のポイント
- マイクロファセットでは h を使う:PBR の鏡面反射では、表面の法線 ではなく、ハーフベクトル と視線の角度 を使います。
- 粗い面の環境反射:粗い面では、縁の反射が強くなりすぎないよう、粗さを考慮したフレネル(事前計算した表を使う Split-Sum など)を使います。
- 金属の F0 は色:金属の反射は色付きなので、 を RGB で持ちます(金なら黄色)。
つまずきやすい点
- 縁が明るくなりすぎる:環境マップが明るい場合、フレネルで縁が真っ白に光って、物体が浮いて見えることがあります。周囲の遮蔽(AO)で縁の反射を抑えます。
- 法線マップと組み合わせたときのちらつき:細かい波の法線で が大きく変わると、遠景の水面が白くちらつきます。遠くでは法線を平らにならします。
- フレネルを切ると不自然:反射率を一定にすると、遠くの水面が空を映さず、手前の水面が不自然に鏡のようになります。デモで確かめてください。
デモで試すこと
- 視点を上下にドラッグして、水面を見下ろす角度を変えてください。真上から見ると水底のタイルが透け、低い角度で見ると空と山並みが映り込みます。右下のグラフの点が、今の視線の角度での反射率です。
- 「フレネル効果」をオフにすると、角度に関係なく反射率が一定(水なら 2%)になり、遠くの水面も空を映さなくなります。
- 素材をダイヤや金属に変えると、正面の反射率 が上がり、グラフの左端が持ち上がります。どの素材でも 90° では 100% に近づきます。
- 右の球は、正面ではほとんど反射せず、縁ほど周囲の景色を強く映しています。