Lighting & surfaces

Rim Lighting

リムライト

輪郭近くを明るくして形を際立たせる。

10 / 10

Interactive demo

Preparing the demo…

Rim Lighting

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

This explanation is currently available in Japanese.

ひとことで

物体の輪郭付近だけを明るく光らせて、形を背景から浮かび上がらせる表現です。映画や写真の照明で、被写体の後ろから当てて縁を光らせる「リムライト(逆光)」をまねたもので、ゲームでは視線と表面の角度から計算する安価な効果として広く使われています。暗い場面でもシルエットが読めるようになり、キャラクターを目立たせたり、敵を強調したりできます。

ゲームでの使いどころ

  • キャラクターを背景から分離する:暗い背景や、キャラクターと背景の色が近い場面で、輪郭を光らせて見分けやすくする。
  • 敵や注目すべき物体の強調:狙える敵、拾えるアイテム、壁の向こうの味方(X 線表示)の輪郭を光らせる。
  • ヒットフラッシュ:攻撃が当たった瞬間、敵の縁から白く光らせてヒットを伝える。
  • スタイライズした表現:アニメ調のキャラクターの逆光表現、SF のホログラムやエネルギー体。

しくみ

面が視線に対して横を向いている(輪郭に近い)ほど、法線 n\mathbf{n} と視線 v\mathbf{v} の内積は 0 に近づきます。そこで次の値を明るさに足します。

rim=(1−max⁡(n⋅v, 0))p×強さ\text{rim} = \big(1 - \max(\mathbf{n}\cdot\mathbf{v},\ 0)\big)^{p} \times \text{強さ}
  • 指数 pp を大きくすると、縁のごく細い部分だけが光ります。
  • pp を小さくすると、光る範囲が内側まで広がります。

形はフレネルの式とよく似ています(どちらも浅い角度で強くなる)が、リムライトは物理的な反射ではなく、見せたいものを見せるための演出です。

光源側に限定する:どの縁も一様に光ると、全体が発光しているように見えます。本物の逆光のように見せたい場合は、光源の方向を向いた縁だけに限定します。

rim′=rim×smoothstep(a, b, n⋅lrim)\text{rim}' = \text{rim} \times \text{smoothstep}(a,\ b,\ \mathbf{n}\cdot\mathbf{l}_{\text{rim}})

実装のポイント

  • 発光として足す:リムを発光として加えると、暗い場所でも見え、ブルームでにじんで印象が強まります。
  • ヒットフラッシュは短く:被弾の瞬間に最大にして、0.1〜0.3 秒で素早く戻すと、手応えのある演出になります。
  • 平らな面では効かない:床や壁のような平面は、面全体が同じ角度なので縁だけを光らせられません。曲面のキャラクターや丸みのある物体向きの手法です。

つまずきやすい点

  • 全体が光ってしまう:指数が小さすぎる、強さが大きすぎると、物体全体がぼんやり発光して見えます。
  • 法線マップの影響:細かい法線マップを使うと、縁以外の凹凸の側面まで光ってノイズっぽくなります。リムの計算には法線マップ適用前の法線を使うこともあります。
  • カメラに近いとき:画面いっぱいのキャラクターでは、縁の光が太く見えすぎることがあります。距離に応じて強さを調整します。

デモで試すこと

  1. 「リムの強さ」を 0 にすると、暗い色の敵は背景の闇に溶けて、どこにいるのか分かりにくくなります。強さを戻すと、輪郭が浮かび上がります。
  2. 「縁の細さ(指数)」を上げると細い縁取りに、下げると内側まで広く光ります。
  3. 「光源側の縁だけ」をオンにすると、片側の縁だけが光り、後ろから照らされているように見えます。
  4. 「攻撃を当てる」を押すと、敵の 1 体が縁から白く光るヒットフラッシュを見せます。

References

Filament Material System ↗

A general reference for this subcategory.