レイトレ的観点でみる2Dイラストテクニック

この記事はレイトレアドベントカレンダー2020の記事です。 qiita.com

レイトレと言いつつほぼ物理ベースシェーディングの記事であって特にレイは飛ばしていませんが、 物理ベースシェーディングはレイトレなのでこの記事もレイトレです。 レイトレってなに?

前置き

人や物、風景などを描いた2Dイラストは、スタイライズド表現の程度に差はあれど基本的には現実の物体や現象をベースとしています。 そのため、"よい表現"をするには現実の事象に対する"よい観察"が必要となりますが、 その"よい観察"のためには事象の裏側にある"仕組み"を知っておくことがしばしば有効です。 例えば、人を描くならば美術解剖学を学んでおくとよいし、風景などを描くならばパースの知識があったほうがよいとされます。 しかし何故か、2Dイラストにおける物体のシェーディング・ライティング(色塗り)の文脈において3DCG向けの物理ベースレンダリングレイトレーシングが引き合いに出されることはあまり多くありません。

そこで本記事では、2Dのイラストの制作において経験的に知られている種々のテクニックについて、 物理ベースレンダリングやレイトレの観点から何らかの意味付けを与えるような考察を行っていきます。 ある種の思考実験であって何かしらの一般的結論や方法論を与えるような試みではありませんが、 3DCGの知見を2Dイラストに活かしたり、またその逆を行ったりするような、 何らかの面白い表現のヒントになればと思います。

なお、 神絵師でもなければ Wenzel Jakob でもない私が経験則的なイラストテクニックに対し想像で理屈を付けていくという企画の趣旨上、 実は事象の一部の説明にしかなっていなかったり、また全く違うことを言っているという可能性もあるという点はご了承ください。 (識者の意見は Twitter とかで受け付けています。)

ハイライトとはなにか

2Dイラストの色塗りの手順としてよく使われるもののひとつが、 下地となる色を付けてグラデーションを塗った上で、ハイライトを加算合成などで加える方法です。 しかし、この方法自体の一般性に反してハイライトとは何であるかについての定義というのは意外と見つかりません。

レイトレーシング・物理ベースシェーディングの文脈でいうと、 グラデーションで塗られている部分は反射光のうちのディフューズ成分、ハイライトはスペキュラ成分であると考えられます。 このうちディフューズとは入射した光のうち一旦物体の内部に入ってから散乱して出てくる成分(下図青色の反射成分)を指し、 反対にスペキュラは内部には入らず表面で反射されるもの(下図黄色の反射成分)を指します。

f:id:mizuooon:20201219021432p:plain
(SIGGRAPH 2015 Course : Physics and Math of Shading より引用)
SIGGRAPH 2015 Course: Physically Based Shading in Theory and Practice - Self Shadow

ハイライトがスペキュラであると考えると、 イラストの文脈では非自明だったハイライトの様々な性質について一般的な答えを得ることが可能です。 以下ではそのいくつかの例を上げていきます。 ただし、材質が金属の場合には単純にハイライト=スペキュラとは言えず、話が多少ややこしくなるのでこれについては後述します。

ハイライトの強さ・広さ

物体の表面が荒いほど、スペキュラの範囲は広がります(ボケていく)。 しかし、入射光を広い範囲に散らすことになるのでその場合ハイライトの強さは逆に弱くなります。

f:id:mizuooon:20201219023823p:plain
(SIGGRAPH 2015 Course : Physics and Math of Shading より引用)

ハイライトの位置

スペキュラは、光源方向と視線方向の中心となる方向に現れます。 ディフューズの最も明るい部分は光源方向を向くので、 ディフューズの一番明るい部分にハイライトが現れる訳ではないことは注目に値するかもしれません。 f:id:mizuooon:20201219030051p:plain

ハイライトの色

非金属の場合スペキュラの色は白になります。 ただし、やや非直感的ですがこれは常にハイライト部分を白く塗ればいいという意味ではない事に注意してください。 白い紙も赤いライトで照らせば赤く見えるように、スペキュラの色はライトの色に見える、ということです。

(ただし、構造色や色付きのコーディングなど色々と例外はあります)

金属のハイライト?

以上では非金属の話をしていたのですが、実は金属の場合には話が違っています。 非金属では反射成分をディフューズ+スペキュラの2つに分解できましたが、 金属にはディフューズ成分は存在せず、スペキュラ成分しかありません。 見た目全体がスペキュラということです。

ということで、あくまでハイライト=スペキュラとするならば全体がハイライトと言うことができます。 ただしそれではハイライトを加算合成して光沢感を出す、という方法が適用しづらいので、 厳密に言うならばスペキュラが映し出す反射のうち特に明るい部分(例えば室内なら電灯だったり、屋外なら太陽だったり)のことをハイライトと呼ぶのがよいのかもしれません。 まあこの辺は物理的な根拠はない部分なので最終的には自分の使いやすいように捉えてしまっていいのではないでしょうか。 (なお非金属だとスペキュラは特に明るい光源についての反射しか描かれない場合が多いと思うので、どちみちハイライト=スペキュラと言える場合が多いかと思います。)

ちなみに、金属は全体がスペキュラということからも分かりますが、 非金属と違って金属のスペキュラにはその種類ごとの色が乗ります。 そのため金属のハイライトは基本的には白くないということは知っておくといいかもしれません。 (反射が明るすぎて飽和したり表面にコーティングが掛かってたりするとその限りではない) f:id:mizuooon:20201219040651p:plain

髪の毛って難しいよね

2Dイラストの髪の表現には様々な流儀があります。 ハイライトの付け方であったり色であったり、一般的な物体と比較して様々な表現がありますが、 それは光学現象としての髪の毛の難しさを反映していると思います。

そんなときでも物理ベースシェーディングはひとつの答えを与えてくれます。 物理ベースシェーディングで最も有名な髪の毛のモデルは Marschner モデル (Light Scattering from Human Hair Fibers) ですが、 それは下図のように人間の髪の毛を段差の付いたシリンダー状の形状としてモデル化することで、複雑な人間の髪の見た目をよく再現します。

f:id:mizuooon:20201219203730p:plain
(Light Scattering from Human Hair Fibers より引用)

このモデルからわかる特にイラスト制作に反映できそうな知見は、髪の毛のハイライトは 2 種類あることです。

ひとつめは毛の表面で反射した光の成分で(上図 R)、これは白い色をしています。 もうひとつは毛の内部に入ってから反射して出てきた成分(上図 TRT)で、これは髪の毛の色素の色をしています。 実際の髪の毛の見た目には、このふたつのハイライトが組み合わさって現れます。

f:id:mizuooon:20201219205326p:plain
(Light Scattering from Human Hair Fibers より引用)

ただし、どちらのハイライトがどのへんに表れるかについては結構複雑なので観察や勘に頼ってしまうのが実際的だと思います。 (上の写真はカメラと光源が同じ方向にあってあまり一般的なセッティングではないので注意)

ちなみに余談ですが 動物の毛と人間の毛ではやや構造が違っているために見た目が違っていたりします。 また染めた髪の毛と地毛では色素の分布位置が違うのでハイライトの具合が違っていたりとかもあったと思います(うろ覚え)。 興味がある場合は調べてみると面白いかもしれません。

陰影の境界で色が濃くなるなる意味

物体の陰影を描く際、明部と暗部の境界線で色を濃くしてやるとなんかかっこよくなるということが知られています。 f:id:mizuooon:20201219043826p:plain このテクニックは陰(シェード)と明部の境界に使われるほか、ドロップシャドウと明部の境界でも使われます。

このテクニックは、基本的には光の表面化散乱の効果を再現しているものと考えられます。 ハイライトの項でも述べましたが、非金属では光の一部の成分は物体の表面下に入り散乱したあとディフューズ成分(表面下散乱成分)として外に出てきます。 明部と暗部の境界部でギリギリ直接光が当たらない部分だと、周囲から表面下散乱を経て出てきた成分のみが表れることになります。

f:id:mizuooon:20201219154001p:plain:w400

この境界領域では白いスペキュラが無く色付きのディフューズ成分しか見えないことから、結果としては彩度が高く見え、またその領域では色相もズレます。 特に、人体などの場合では表面化散乱は皮膚下の血や筋肉といった赤色の影響を受けることになるのでこの色変化の現象は顕著になります。

ちなみに表面化散乱の距離は密度によって変化するので、 材質によってこの彩度の高い境界領域の幅を変えると密度の表現が可能です。

f:id:mizuooon:20201219161912p:plain
それぞれ密度の異なる 3 つの謎の黄色い直方体がドロップシャドウを受けている図

また、表面化散乱以外にも明暗境界で色が付くことには他の要因も考えられて、 例えば光源やカメラで光の回折が起きている場合にもそのような現象が起きます。 例えばカメラ上で回折が起きていて、点光源を見た際に下図左のようなグレアが見えていたとすると、 そのカメラで明部暗部の境界を見た際には下図右のように色が付いて見えたりします(カメラは色々複雑なので、あくまで一例)。 f:id:mizuooon:20201219180957p:plain

暗部で色相をズラす意味

先程の境界部分の話とも似ていますが、今度は直接光が全く当たっていない部分での話です。 暗部に色を付ける際には、明度の低下は控えめにしてその代わりに輝度を低くするような感じに色相をズラしてやると なんか透明感が出てお洒落になることが知られています。

f:id:mizuooon:20201219183159p:plain

この透明感というのは割と文字通りで、暗部で色がずれる要因のひとつは先程も出てきた表面化散乱と考えられます。 物体の密度が低かったり厚みが薄かったりする場合には内部に侵入した光が裏側まで回り込むため、直接光の当たらない部分には色相のズレた色が出てきます。

また、その他の原因として考えられるのは間接光の効果です。 周囲の物体に当たった光が反射して間接的に暗部を照らしている訳ですが、その際に周囲の物体と色が混じり、色相がズレていきます。

ただし、2Dイラストでこの色変化の効果は現実よりも強めに掛かっている傾向があると思います(いわゆる記憶色・期待色?)。 3DCGで2Dイラスト調の表現をしたいのであれば、 表面化散乱を強めにしてやったり、大域照明を明るめにして色をズラしてやったりするといいのかもしれません。

テクスチャを乗算するって何

イラストに対して、適当なテクスチャ・写真を上から乗算してやるというテクニックがあります。 これはキャンバスや和紙などの質感を合成してアナログ絵っぽいものにする場合などは意味的に自明ですが、 興味深いのは「情報量を増やす」のが目的のケースです。

(特に下記の本参考) www.amazon.co.jp

この「情報量」が指すものについて考えてみます。 試しに、適当な絵に岩の写真を乗算して適当に調整を行ってみました。 f:id:mizuooon:20201219192946p:plain

物体の質感が変わっているのがわかります。 3DCG だとマテリアルに対してノーマルマップなどのテクスチャを適用して質感を変更しますが、 イラストに対してテクスチャを乗算するのはそうした操作に対応する面がまず大きいと思われます。

ただ実際にはそれに加えて、その他の様々な効果も複合的に存在していそうです。 これには例えば、無いジオメトリを足したり、空気の塵がもたらすようなのボリューム表現を行ったり、大域照明のランダムさを近似したり、…などが相当すると思います。

こうした複数の要素が「情報量」として抽象化されるのは理論的には扱いづらい面がありますが、 あくまで抽象的に捉えるならば3DCGでも応用できそうな部分は多いと思います。 例えばそれは「情報量」の足りない部分に対してスクリーンスペースで情報量を足してやるということに相当すると思います。 描画限界距離でオブジェクトが消えてしまうような遠方だったり、 逆にカメラが近すぎてテクスチャやジオメトリが拡大され過ぎてしまうような至近距離だったりに対して 画像を乗算することで情報を足してやる…とかが理屈の上ではできそうです。

注目するとこだけ描き込む話

イラストを描いていく際、 あまり注目されない部分は荒い描き込みで済ませて、 注目されるべき部分には細かい描き込みを行っていくという方法が知られています。 (例えば、人間を描いてる場合は特に顔や手に描き込みを行うなど)

これは描き込み密度のある方へ視線誘導するような効果もあると言われていますが、 最も大きな効果は作業の省エネ化であると考えられます。

いよいよレイトレ関係なくなってきますが、これに関連した話は3DCGの文脈でも存在します。 それは VR で特に用いられる Foveated rendering で、 人間が注視している方向の描画解像度を高め、反対に周辺視野の解像度を低くすることで描画コストを低くします。

Foveated rendering が利用しているのは、周辺視野の解像度が低いという人間の性質ですが、 ここで興味深いのは周辺視野はコントラストの変化には敏感であるということです。 周辺視野に提示する画像の解像度を下げていった場合、 コントラストを保存するように解像度を下げた方がその解像度低下に気づきにくいということが実験的に明らかになっています (Towards Foveated Rendering for Gaze-Tracked Virtual Reality | Research) 。

2Dイラスト制作の手順でも、 最初は全体的なシルエットや陰影などを形作ってから段々細部を描き込んで行くやり方がありますが、 そうした方法は人間の注視点や周辺視野の性質と対応する面があるのではないでしょうか。 その際 Foveated rendering の方法論を意識して、例えば全体のコントラストは保つように作ってみるとよかったりするかもしれません。

しかし実は他にも人間の周辺視野は彩度もあんまり見てないよねとかいうのもあったりしますが、 だからといってイラストの周辺部分はモノクロにしておくとかは通用しない気がするので割と怪しい。

(おまけ)様々な物理ベースシェーディングモデルとか

図を眺めるだけでもなんとなくわかった気持ちになれるかもしれない。

その他無数にあるので今すぐ君もレイトレをはじめよう。