見出し画像

物理ベースレンダリングの初歩 : 阿蘇山がギラギラ

 今回は、物理ベースレンダリング(PBR)についての話です。ゲーム機の技術では、PS4世代に該当します。

 記事は、CG制作者ではなく、プログラマの目線から書いたものです。なので、noteではあまり見かけない切り口になったと思います。
 ただし、プログラミングの経験が浅く、またPBR自体も難解、複雑なので、初歩的な内容に留まっています。


レンダリングと反射

 はじめは、レンダリングについてのおさらいです。
 3DCGのレンダリングとは、光学的な模擬の一種です。模擬するのは、光源から放射された光が物体反射して視点に到達する様子です。これにより目に見えた物体(つまり、反射光が視点に到達した物体)を描画します。

 一般に、模擬では、現象を単純化して扱うために模型を立てます。3DCGでは、扱う現象が物体での光の反射なので、反射模型を立てることになります。
 この模型化の際に、物理ベースをベースにしたのがPBRです(物理ベースが何なのかは、記事の最後に「おまけ」として書きました)。

 PBRでも、従来のレンダリングと同様に、反射を鏡面反射拡散反射とに分けて、別々に模型化します。
 それらの反射模型の説明の前に、まずは、鏡面反射と拡散反射についておさらいします。

鏡面反射

 3DCGでは、光沢(艶、ハイライト)の形状や強さを決める要素を鏡面反射と言います。
 現象としては、光が物質の表面で反射する現象を想定しています。鏡面反射では、表面に対する入射角と反射角とが等しくなります。

 詳しくは後述しますが、ここでは、表面の凹凸に起因する乱反射も鏡面反射として扱います。ただし、その際の多重反射は無視します。

 また、金属の色は、鏡面反射により決まることにします。つまり、理科で習ったように、金属では、電子の海のプラズマ振動により光が反射し、その際、バンドギャップの違いにより色が決まると想定します。

拡散反射

 3DCGでは、光沢以外の反射を決める要素を拡散反射と言います。
 現象としては、光が物質の内部に入り、内部で散乱した後に再び(入射側の)表面から外に出てくる現象を想定しています。

 非金属の色は、拡散反射により決まることにします。具体的には、非金属の色は、物質内部での色素による散乱または吸収により決まると想定します。

 おさらいは以上です、次からは本題のPBRの説明です。

鏡面反射模型

 従来のレンダリングとPBRとの一番の違いは、鏡面反射模型にあります。
 従来のPhongの鏡面反射模型では、光沢の形状等を係数により直接に制御していました。
 これに対し、PBRの模型では、物質の表面粗さを定義し、その粗さにより光沢の形状等を間接的に制御します。

小素面と3つの反射特性要素

 具体的には、PBRでは、以下の二つの特徴を有する反射模型を用います。ちなみに、この模型はPBRに固有のものではなく、照明などの分野でも同様のものが古くから提案されています(例えば、Barkas[1939])。

 ・粗い表面を、無作為に配置された小素面(微小面)の集まりとして模型化する。より簡単に言えば、表面の凸凹を、小さな鏡の集まりとして考える。
 ・この小素面による鏡面反射を、分布減衰、およびフレネル効果の三つの要素に分けて考える。
 各要素を以下に説明します。

分布(小素面の傾きの分布)

 分布とは、小素面の傾き(法線)の分布のことです。
 分布は、光沢(鏡面反射の特性)を決める上で最も重要な要素になります。対象とする物質に合わせて、様々な分布の模型(計算方法)が提案されています。

 私の3DCGにおける対象は地表/地形なのですが、地形がどのような光沢を持つべきなのかさっぱり分かりません。
 そこで、一般的な光沢の性質を持つ分布を選ぶことにしました。

 まずは、直感的に、表面粗さと光沢の関係を考えてみます。その関係は、表面がツヤツヤしているほど、光沢は狭く濃くクッキリし、ザラザラしているほど広く薄くボンヤリする、となるはずです。
 そこで、実装では、この直感にそれなりに合い、計算が簡単そうなTrowbridge Reitzの分布を用いました。

Trowbridge-Reitzの分布関数

減衰(幾何減衰)

 ここでの減衰は、光を光線として扱ったときの幾何光学的な減衰です(簡単なので得意になって長々と説明していますが、あまり重要な要素ではありません)。
 具体的には、表面に凸凹(障害)が存することにより、鏡(小素面)の反射光が視点に届かない場合に、減衰が生じると考えます。減衰の原因には、以下の二つがあります。

掩蔽
 視点と鏡の間に障害物がある。障害物に邪魔されて、鏡からの反射光が視点に届かない場合です。
陰影
 光源と鏡の間に障害物がある。そもそも鏡に光が届かない場合は、当然、視点にも光は届きません。

 なお、障害物と表現しましたが、本来はそれ自体も鏡(小素面)です。そのため、障害物(鏡)で反射した光が、さらに他の鏡で反射して視点に届く可能性もあるのですが、上述したように、ここでは、多重反射を無視して考えます。

 減衰についても幾つかの模型(計算方法)が提案されています。
 正直なところ、違いがよくわからなかったので、実装では、最も一般的なSmithの幾何減衰を用いました。

Schlickの減衰関数を用いたSmithの幾何減衰

フレネル効果

 フレネル効果とは、光が斜めに入射する場合に反射の態様が変化する現象のことです。ここでは、各小素面ごとにフレネル効果が生じると考えます。

 本来、フレネル効果の影響は、入射角と物質の屈折率(および吸収係数)から求めるのですが、地形の屈折率など調べようがないので、実装ではSchlickの近似式を用いました(適用の正当性については全く検討していません)。

 以上の要素を組み合わせることで鏡面反射の反射模型が構成されます。下の例は、その鏡面反射模型により金属球と阿蘇山を描画したものです。

鏡面反射

 次に、拡散反射の反射模型について説明します。

拡散反射模型

 従来のレンダリングとの違いは、PBRでは、鏡面反射の残りが拡散反射になると考える点にあります。
 具体的には、上述のフレネル効果における透過光(屈折光)が、物質の内部に入り、拡散反射に寄与すると考えます(これは非金属に限ると思います。金属の場合はおそらく可視光だと表皮効果により急激に減衰してしまうはずです)。
 また、拡散反射でも、小素面による幾何減衰を考慮します。

 下の例は、拡散反射模型により金属球と阿蘇山を描画したものです。

Oren-Nayar模型による拡散反射(微妙に変化しています)

PBRによる効果

 残念ながら、今回のPBRは全く意味がありませんでした。理由は以下の通りです。

 まず、PBRには、全ての物質に適用できる万能の模型は存在しません。各物質ごとに、模型(反射特性関数)を考えなければなりません(正確には、賢い人達が考えた模型を探さなければ、ですね)。
 しかし、地形/地表面に適用できそうな模型は見つかりませんでした。当然ながら自力で考えることもできません。

 次に、PBRの効果は、鏡面反射でこそ大きいのですが、地形では鏡面反射がほとんどありません。

 最後に、PBR(Oren Nayarの場合)を拡散反射に取り入れると、全体的な傾向としてメリハリがなくなります(不自然さがなくなるとも言えますが…)。
 私のCGは元々ぼんやりしているのに、よりぼんやりする結果になりました。

実例

その1 阿蘇山

 嘆いてばかりでは、何も進歩しません。ときには不本意な結果であろうとも受け入れる鷹揚さが必要です。
 そこで、出来上がったのが、こちらのギラギラ阿蘇山です。とても自然ですね!本物と見分けがつきません!

レジ袋有料化大臣が推進したソーラーパネルにより輝く阿蘇くじゅう'セクシー'国立公園 

その2 小豆島

 さすがに、グレアアソザンだけだと悲しくなってきたので、もう一つ追加しました。この例では、水域の表面粗さを小さく設定すると共に、乱数で散らすことで、水面をキラキラさせています(個人的には、最後のほうで旧渕崎小学校のプール跡がキラッと輝くのがお気に入りです)。

土庄港

おまけ 〜物理ベースとは何か〜

 物理ベースには、二つの解釈があります。

物理光学

 一つは、光学の分類による解釈です。
 光学は、光の扱い方により三つに分類されます。すなわち、光を光線として扱う幾何光学、波動として扱う波動光学、光子として扱う(物質との相互作用を量子論的に扱う)量子光学です。
 これらのうち、波動光学は、物理光学とも呼ばれます。物理光学に基づく模型を物理模型、この模型による解析を物理ベース解析(例えば、物理ベースビジョン)と言います。
 この解釈では、光を波動としても扱う(つまり、反射などを考慮した)レンダリングが物理ベースレンダリングになるでしょう。

物理教

 もう一つは、ブログ等で人気の宗教的な解釈です。
 この解釈では、物理ベースは、絶対神「物理(もののことわり)さま」の御心に適う正しき行いの意味で使われます。
 物理教の教えでは、BRDFと呼ばれる神秘的な数式を写経し、マントラ「物理的(もののことわりはあきらか)に正しい」を繰り返すことで、「まるで実写のような」境地に至ることができるそうです。このようなレンダリングが、物理ベースレンダリングと呼ばれるらしいです。

エネルギー保存則

 物理教にはエネルギー保存則を最重視する宗派もあります。
 その教えでは、例えば、「入射の1.0に対して、反射分が0.7、透過分が0.1、吸収分が0.1、妖精さんの取り分が0.1で合計1.0だからエネルギー保存則が成り立っている」となるらしいです。

 物理教は大変に高尚で私如き未熟者には到底理解の及ぶところでありませんが、なんだかとてもすごいなあとおもいました。

以上

地理院タイルを加工して作成

 

古往今来得ざれば即ち書き得れば即ち飽くは筆の常也。と云うわけで御座います、この浅ましき乞食めに何卒皆々様のご慈悲をお願い致します。