エミッシブ
Emission別名:発光、自己発光、エミッション
概要
マテリアルが自分で光を放つように見せる値。光の当たり方に関係なく、設定した色と強さで明るく描かれる。ただし、それだけでは周りの物を照らさない。
デモ
使われる場面
画面、ランプ、看板
モニターの画面、電球、ネオンサイン、計器の表示など、光源そのものを描く。
SF やファンタジーの演出
光る目、魔法陣、エネルギーの筋のように、暗い場面で目を引く部分に使う。
ブルームとの組み合わせ
発光の強さを 1 より大きくしておくと、ブルームのしきい値を超えて光のにじみが付き、まぶしさが伝わる。
夜景の窓明かり
建物の窓を発光させて、遠くの夜景を軽い計算で作る。窓ごとに光源を置かずに済む。
判断基準
| こういうとき | こうする |
|---|---|
| 光源そのもの(画面、電球、ネオン)を描きたい | 発光を設定する。光の当たり方に関係なく、常に明るく見える。 |
| 発光した物の光で、周りの床や壁も照らしたい | 発光だけでは照らされない。近くに同じ色の光源を置くか、照り返しを計算する仕組み(グローバルイルミネーション、ライトマップ)を使う。 |
| 光っているのに、まぶしく見えない | 発光の強さを 1 より大きくして、ブルームを組み合わせる。周りを暗くしておくと、強さを上げすぎなくても光って見える。 |
| 発光部分が白く飛んで、何色に光っているか分からない | 発光の強さを下げる。色は発光の芯ではなく、周りのにじみや照り返しで見せる。 |
| 部品の一部だけを光らせたい | 発光マップ(光らせる部分だけを明るく塗ったテクスチャ)を使う。 |
こう見えたら
指示の例
モニターの画面が光って見えない。画面部分のマテリアルに発光を設定して、強さを 2 くらいにして
ネオンは光っているのに、壁や床が照らされていない。ネオンの近くに同じピンク色の点光源を置いて、壁に色が落ちるようにして
光る目がまぶしく見えない。発光の強さを 1 より大きくして、ブルームを弱めにかけて
看板の文字の部分だけを光らせたい。発光マップを使って、文字の部分だけを発光させて
詳細
光を受けずに、光を放つ
通常のマテリアルの明るさは、当たった光の量で決まり、光がなければ黒くなる。エミッシブ(発光)は、光の計算の結果に、決まった色と強さの光をそのまま足す設定である。光源の位置や向きに関係なく明るく描かれるので、画面や電球のような光源そのものを表せる。
は当たった光を反射した分、 は発光の色、 は発光の強さである。
vec3 color = diffuse * lighting + specular; // 光を受けて返す分
color += emissiveColor * emissiveIntensity; // 自分で放つ分を足す
発光は周りを照らさない
リアルタイムの描画では、発光は「その物体をどう描くか」だけの設定である。床や壁の明るさは光源から計算するので、発光する物体が近くにあっても照らされない。デモで「周りも照らす」をオンにすると、発光する物の位置に同じ色の点光源を置くので、ようやく床や壁、手前の箱に光が落ちる。
光の経路を追いかけて計算する方式(パストレーシング)のレンダリングでは、発光面そのものが光源として働き、周りを照らす。リアルタイムでも、照り返しを事前に計算して焼き込むライトマップや、グローバルイルミネーションの仕組みを使えば、発光を周りの明るさに反映できる。
まぶしさの出し方と落とし穴
画面が表示できる明るさは 1 が上限なので、発光の強さを上げても、白い紙と同じ明るさまでしか出ない。まぶしさは、発光の強さを 1 より大きくしてブルームのしきい値を超えさせ、周りににじみを付けることで伝える。このとき発光の値は、トーンマッピングの前の HDR の値として扱う。
強さを上げすぎると、トーンマッピングで色の成分の差が縮まり、発光の芯が白に寄って、何色に光っているのか分からなくなる。色を見せたいときは、芯の明るさを上げるより、にじみや周りへの照り返しに色を持たせるほうが伝わりやすい。