物理ベースレンダリング -基礎編-


みなさんこんにちは! 本日Cygamesエンジニアブログを開設しました!

弊社は昨年の夏CEDEC 2014にてPlayStation 4への参入を発表致しました。
ハイエンド据置きゲーム機にもこれまでと変わらず最高のコンテンツをお届けできるよう取り組んで参ります。
大阪の開発拠点  大阪Cygamesも設立され、準備が整えられています。

改めまして大阪Cygamesエンジニアの岩崎です。いままで歴代コンシューマ機を中心にグラフィックエンジンを制作してきました。日々最新のハイエンドグラフィックス技術を追いかけています。

今後グラフィック技術情報を中心にこのブログで定期的に情報をお届けしていきたいと思います。グラフィック分野に限らずその都度良いものがあればご紹介できればと思います
便利なツールや実際にゲーム開発に使えるオープンソースプロジェクトなども紹介していく予定です。

第一弾は…!

今世代のグラフィックストレンドとも言うべき分野「物理ベースレンダリング」の入り口に触れてみたいと思います。

rainbow_image

物理ベースレンダリングとは?

spain

従来のcos θpowで近似した Lambert / Phongシェーディングとは異なり、物理現象として起こっている光学現象(光の反射・散乱・屈折・吸収など)を計測してより厳密に数式でモデル化したレンダリング手法です。
そのため品質はより一層現実世界のそれに近くなり、グラフィックの違和感を低減して写実的リアリティを増すことができます。
「PS4世代になってさらにリアルになった」 と言われる理由はハードウェアの性能向上でこの物理ベースレンダリングがリアルタイムで扱えるようになった恩恵と言えます。

  • 光の色と物体の色はどう計算すればいいのか?光の強さは?
  • 物体の表面はどのようになっている? (ざらざら艶消し / つるつる光沢 )
  • 物体の材質は?塗装はされている?コーティングは?
  • 金属光沢はどう表現される?ガラスは?

シミュレートする上では様々な要素を再現していく必要があります。

扱うパラメーターの変化

「ベースカラー & スペキュラーマップ & スペキュラーパワー」 から「アルベド & メタリック & ラフネス」へ
かつては質感は見た目での調整でおこなってきました。
作品によってはそれでも素晴らしいアートワークを完成させているものもあります。

シーンに説得力を与えるには「知っている質感」「普段の身の回りにある質感」が重要になってきます。
言葉では believability(信憑性) というところで見る人に視覚的に伝える必要が出てきます。
そこで普段の見た目と同じ再現ができる物理ベースレンダリングを導入することが今世代の技術トレンドになっています。

物理ベースレンダリングで再現する材質は沢山あります。そのうち次の3要素が重要な役割を果たします。

アルベド(Albedo)

アルベド (Wikipedia)
https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%AB%E3%83%99%E3%83%89

アルベド (albedo) とは、天体の外部からの入射光に対する、反射光の比である。反射能(はんしゃのう)ともいう。
0以上、1前後以下(1を超えることもある)の無次元量であり、0 – 1の数値そのままか、0 % – 100 %の百分率で表す。

アルベドとは今までのカラーとは似て異なる要素です。
受けた光をどれだけ反射するか」という係数になりますので、反射する光(見た目の色や明るさ)は受ける光の強さに比例します。
物体そのものに明るさという概念はありません。あるとすればLED・蛍光灯・炎・太陽のような「自発光」の物体です。
見た目の明るさは自発光を除き、「周囲から受けた光」で決定します。

albedo【例】Albedo = 0.5 の場合は受けた光の50%を反射する。

つまりアルベドは物体の明るさを表すものではなく、外部の光に対するものです。
結果的に色味にもっとも影響を及ぼす係数ですのでカラーマップと見た目は似ていることにもなります。

反射率 (Reflectivity / Metallic / Metalness )

反射率が高い材質で身近なものはみなさんご存知の「鏡」です。鏡面反射という言葉がある通り、光をそのまま反射します。
では「粘土」と「鏡」は何が違うのか?
見たからも明らかですが光をそのままはね返す反射率が異なります。

ここでの「反射」はスペキュラーと呼ばれ、マットな材質とは異なる特性を持ちます。
反射率が高くなると金属になっていきます。金属は反射率が他の物質と比較すると非常に高いです。
では0%(プラスチック) と 100%(鏡) の中間の50%ではどんな見た目?
「陶器のような質感」になります。
ゲームエンジンなどでは、より直感的な言い回しで「 Metallic(金属性) 」というパラメーターでリフレクタンスを制御します

reflcompare10MARMOSET TOOLBAG 2 Tutorial: PBR In Practiceより引用

ラフネス (Roughness / Glossiness / Shininess )

Roughness (粗さ)という言葉からもわかる通り「物質表面の粗さ」を0%~100%で表現するパラメーターです。
0%がつるつる、 100%がざらざら です。

表面がつるつるだと艶が出ます。ざらざらすると艶が消え、マットな材質になります。
もともとツルツルの物体表面でもサンディングと呼ばれる加工をすることで艶消しになったりもします。
擦れて部分的に艶が消えているような表現にもラフネス表現が有効です。

comparison_raw“REALLIFEPUDDING : Correcting Blenders Roughness Value” より引用

微細表面 (マイクロファセット)

microfacet
ラフネスのときに説明した「粗さ」は、大きなキズのような凹凸よりもさらに微細な凹凸のことを指します。
電子顕微鏡で見た時のようなものです。一見つるつるに見える表面でもわずかにでこぼこしています。
小さな凹凸は光をあらゆる方向へ跳ね返します。完全平面であれば鏡のように同じ方向へ揃って反射されるために像がくっきりと映り込みますが
粗い場合は像が散らばるために鮮鋭感が弱くなります。
このミクロな世界の表面を微細表面(Microfacet)と呼び、物理ベースレンダリングではその反射特性を計測したものを一括りにして数式で近似表現を行います。

万物にスペキュラー反射は存在する

一見つや消し加工をするとテカり(スペキュラー)が無くなったように感じられますが、実際は無くなってはいません。
ジーンズなど普段着ている服もスペキュラーが無いように見えて実は存在しています。
布の質感を出すときにはその僅かなスペキュラーが実は重要な要素だったりもします。特にシルクは光沢が命ですよね。

全ての物体にスペキュラー反射は存在します。これも再現しなければなりません。

昨年、世界で最も黒い物質「Vantablack(ヴァンタブラック)」が発表され話題になりました。

vantablack
黒色を超越した「世界で最も黒い物質」が誕生、コーティングされたものの凹凸は目視では判別不能に
http://gigazine.net/news/20140803-blackest-material/

Vantablackが世界で最も黒い、と言われるのはその圧倒的な可視光吸収率にあります。通常、黒色の可視光吸収率は95~98%程度とのことですが、Vantablackの吸収率は99.965%で、ほとんどの光を吸収してしまいます。

スペキュラーさえも抑え込んでしまうこの物質。技術的にも今後の活用範囲もとても興味深い話でした。

スペキュラー反射とディフューズ反射

物質には「光の反射」という現象があり、原子物理のレベルで考えるとシンプルな現象です。
視覚的には反射を観察すると特性が異なる現象があらわれます。反射特性がそれぞれ違いすぎるため、物理ベースレンダリングではそれを分けて別々に計算して後から光の加算で合成して扱います。

2つの概念があります。

拡散反射 (Diffuse)

拡散反射 (Wikipedia)
https://ja.wikipedia.org/wiki/%E6%8B%A1%E6%95%A3%E5%8F%8D%E5%B0%84

>拡散反射(かくさんはんしゃ;diffuse reflection)とは、平坦でないかざらざらした表面からの光の反射のことで、入射光が様々な角度で反射しているかのように見える。

diffuse微細表面での表面の乱反射を表し、一様に広がる反射光を指します。
アルベドによって反射率が変わりますので色味が反映される要素です。

従来のリアルタイムCGでは完全一様と見做しcosθで大胆な近似を行うランバート反射モデルが一般的でした。

diffuse2

Wikipediaより引用

物理ベースレンダリングではさらに厳密になったオーレン・ネイヤー反射モデル(Oren–Nayar reflectance model)が利用されたりします。

鏡面反射 (Specular)

鏡面反射 (Wikipedia)
https://ja.wikipedia.org/wiki/%E9%8F%A1%E9%9D%A2%E5%8F%8D%E5%B0%84

鏡面反射(きょうめんはんしゃ、英: Specular reflection)または正反射(せいはんしゃ)は、鏡などによる完全な光(あるいはその他の波動)の反射であり、一方向からの光が別の一方向に反射されて出て行くこと。反射の法則により、光の入射角と反射角は反射面に対して同じ角度となる。

specular
「鏡」という言葉が表す通りそのまま跳ね返る光です。この光はアルベドの影響を受けません。
たとえば蛍光灯下では赤い物体も黒い物体も白いスペキュラーがのります。

ただし、影響を受けないというのは全ての物質にあてはまるものではありません。金属はアルベドによって反射光に色が付きます。
金(Gold)の光沢は白ではなく全体的に黄色がかった光沢になります。青空が写り込むと、青ではなく黄色に着色されるため緑色のような映り込みになります。

物理ベースレンダリング実装

上記の要素を反映するために物理ベースのCook-Torranceモデルで鏡面反射の計算を行ってみた結果が次のスクリーンショットです。

Cook-Torranceモデルは次のような式で表されます。


$$\Large f(l,v)=\frac{ D(h)F(v,h)G(l,v,h) } {4(n \cdot l)(n \cdot v)}$$

今回はこの式のうちマイクロファセットの分布関数D(m)の部分に物理ベース Blinn-Phongと Trowbridge-Reitz(GGX)を適用したもので比較用に並べてみました。
BlinnとGGXの各計算式は次のようになっています。(今後詳しくシェーダー上で実装解説する予定です)

$$\Large D_{Blinn}(m)=\frac{ \alpha + 2 } {2 \pi} (n \cdot m)^{\alpha}$$

$$\Large D_{GGX}(m)=\frac{ \alpha^2 } {\pi( (n \cdot m)^2(\alpha^2-1)+1)^2}$$

$${\alpha=ラフネスの2乗}$$

Cook-Torranceの式の DFG それぞれに多様な計算モデルがありこれが材質の質感 (BRDF:双方向反射率分布関数)となります。

ラフネスを0から1に変化させながら並べてみました。
pbr※上:GGX NDF 下:Blinn Phong NDF

両者見比べると大体似た結果にみえますが、ハイライトが鋭い部分の自然さがGGXのほうが良い結果です。
これは単一の直接光のみの計算ですのでまだこの見た目だけでは実感が得にくいとは思いますが、今後環境光を扱うように拡張していけば急激に品質が向上していくようになります。


物理ベースレンダリングの概要いかがだったでしょうか?

camera全てをシミュレーションで完結するとリアルで違和感なさ過ぎて平凡な見た目になってしまうこともあるでしょう。

もちろんハリウッド映画でもカラー補正など大胆に行っているように、アーティスティックな表現調整はあってもよいと思います。
シミュレートで一定のリアリティを保ったうえでアーティストが調整することで、少しでも高い品質を目指せたらより良いですよね。


今回挙げた要素はほんの一部にすぎません。これからの連載で技術的な部分を解説できればと思います。

新しく設立された大阪CygamesPlayStation 4開発に携わってみませんか?

ただ今大阪で積極的にPlayStation 4開発希望者を募集中です
(もちろん東京本社もさまざまな職種を募集していますのでよろしくお願いします!)