2014年12月4日木曜日

PBRの種類

先日TwitterでPBRの話題が出ていましたので、
ちょっとまとめてみました。


PBRの基礎的な考え方は2012年のSQEXオープカンファレンスの内容が
個人的にはすごくわかりやすかったのでまだ見てない方は参考までにどうぞ。

insideGamesの記事



(補足)
この資料は物理ベースをわかりやすく解説している資料になるので、
厳密には金属もフレネル反射はしているのですが、ほぼ視認できないので、
フレネル”しない”という言い方になっています。

また、非金属も鏡面反射に色がつかないと書いてますが、
色がついてるものもあると考えられます。


今回はわかりやすく理解してもらいたいのでこの表の言い方で進めますが、
正確に言うと金属もフレネル反射はするし、非金属でも色付きの反射をするものもあります。





この話の中で重要なのは以下2点

  • 金属の場合、 鏡面反射に色がつく。拡散反射に色はない。フレネルはしない。
  • 非金属の場合、   鏡面反射に色がつかない。拡散反射に色が必要。フレネルする。

馴染みのある言葉でいうと鏡面反射とはSpecular、拡散反射はDiffuse
というとわかりやすいと思います。




PBRの基礎理論については以下のサイトにも詳しく書いてあります。

Marmoset Basic Theory of Physically-Based Rendering(英語)
Marmoset Toolbat2の「Basic Theory of Physically-Based Rendering」を訳してみた(上記の日本語訳)

Naughty DogのテクニカルアーティストによるアーティストのためのPBR解説
(日本語字幕もあるよ)
Physically Based Rendering for Artists(動画)





PBRの種類

今よく使われているPBRには2種類のパラメーターがあります。


  • Albedo, Glossiness, Specular, Normal   (Marmoset Toolbag2)
  • BaseColor, Roughness, Metallic, Normal (UE4)


Marmoset ToolBag2(以下TB2), Substance Designer, PainterやQuixelのddoはどちらの形式もサポートしているので、
今回はこの2つをメインに解説します。
(TB2でもUE4の形式で表示することもできますが、
今回はデフォルトのマテリアルについてはなします。)


それぞれのサイトで自分たちのPBRについての解説もありますので、
こちらも目を通しておくとより理解も深まると思います。

UE4 物理ベースマテリアル

Marmoset Tutorial: Physically Based Rendering, And You Can Too!(英語)
龍の苦悩4~TAのための技術メモと実践ログ(上記の日本語訳)


この2つのPBRで混乱の原因となっているのはパラメーター名の違いだと思います。
それぞれ言葉は違うのですが、PBRとして行っている処理は同じです。


ひとつずつ確認していきましょう。



Albedo と BaseColor

この2つは同じものを意味しています。
今までのPS3、XBOX360世代の作り方で言えばDiffuseに当たるものです。

Diffuseと異なる点としては
ライティング情報やAOを持たない素材の色であるということだと思います。


MarmosetのLeanのページによいサンプルがあるのでそこから少しデータを拝借しますと、
一番左側が今まで作ってきたDiffuseのテクスチャです。
そこからライティング情報、AOの情報を取ったものが一番右のAlbedoのテクスチャになります。

こうして見てみると素材の色だけになっているのがわかると思います。



BaseColorも同じデータを扱いますので、UE4でも同様なテクスチャを作成する必要があります。


画像を拝借したページは旧世代機の作り方のテクスチャを
今世代のPBRに変換するための方法について記述してありますので、
参考までに見ておくとよりよいかもしれません。

ここで注意しなければならないのはTB2のPBRの場合、
金属のAlbedoは黒になるということです。

下図のようにMarmoset PBRの場合、金属の部分には黒が入ります。
反対にUE4のPBRはAlbedo(BaseColor)にSpecularの色が入っているのが確認できると思います。

左側がTB2のPBR,右側がUE4のPBRだと思って見てください。



Glossiness と Roughness

Microsurfaceという言葉もありますが、これは表面のがどのくらい粗いか滑らかなのかを意味します。
で、GlossinessとRoughnessは同じように表面の粗さ滑らかさを示すパラメーターです。


SQEXのオープンカンファレンスのスライドがわかりやすいですが、
Normalmapで表現できない細かい表面のざらつきについて解説しています。

このようにざらつきが変わることで映りこみ具合が変わります。


GlossinessとRoughnessは言葉の意味を見るとわかりますが、

Glossiness(滑らかさ)
Roughness(粗さ)

というように真逆の事を言っています。
なので、この2つのパラメーターも逆になります。

Glossiness = 1 (ツルツル)
Roughness = 0 (ツルツル)


この2つは、数値が反転してるだけなのでわかりやすですねw



Specular と Metallic(Metalness)

この2つは少しややこしいですが、理解すれば難しくありません。

Specularはその名前の通り鏡面反射を意味します。
Metallicは金属かどうかの判定です。


最初にアップしたSQEXオープンカンファレンスの画像を再び。



金属であれば、フレネルはしないで、鏡面反射に色が付く。拡散反射は不要ということでした。

TB2のPBRはこの流れに沿ってパラメーターを入れる事ができます。

自分で作成しているアセットが金属であるかどうかを判断し、
金属であれば、鏡面反射であるSpecularのテクスチャに色を入れる。
そして、拡散反射は不要となっていますので、
Albedoには黒を入れればいいわけです。



UE4のPBRは親切なことに、Metallicの値に1(金属)を入れると
自動的にフレネルをなくし、拡散反射に色をつけてくれています。

拡散反射に付く色はBaseColorの色が自動的に割り当てられます。


金属かどうかの判断だけでフレネルや拡散反射の処理を勝手に切り替えてくれるので
非常に楽ちんです。



Metalnessという言葉が時々出てきたりしますが、
これはMetallicと全く同じ意味で、金属かどうかのパラメーターです。




2つの結果を比較してみる

では、パラメーターの意味がわかったところで実際にどうなっているか確認してみましょう。
この2つのツールで同じ質感を作成したものが下の画像です。



少し反射の明るさの違いはありますが、両方とも同じGoldの質感です。
物理ベースはどの環境でも同じ質感に見えるとは言っても、
計算の仕方に違いはあるので、このように多少の差はでるものかなと…。

とは言っても全く異なる質感に見えることはないですよね?
鉄に見えるとか、銅にみえるとか…。



それぞれの設定はどうなっているのかというと、

○Marmoset Toolbag2



Albedo … 黒0
Glossiness … 0.9
Specular … (255, 219, 147)


○UE4



UE4の場合カラーの値が0-1になっているのでPhotoshopでも念のため同じ値になってるか確認。
マテリアルエディタのスクショをフォトショップで確認してみたところ同じ数値が出てますね。


ということで、UE4の設定は以下の様な感じです。

BaseColor … (255, 219, 147)
Roughness … 0.1
Metallic … 1



ちょっとわかりやすいような…わかりにくいような…ですね。
どうやったらもう少しわかりやすくなるか…ですが、
それぞれのパラメーターとかを見比べたり、実際に触ってもらうとわかるかと思います(^_^;)


一応これらを踏まえてまとめるとこのような感じかな?




フレネルの設定

では、TB2のフレネルってどこで設定するの?
という話になりますが、

TB2の場合はここにあります。


Intensityを1にすると金属のようにフレネルがなくなります。
私自身あまりこのPBR(Albedo, Glossiness, Speclar)を使っていないので、
他のツールの場合どこでフレネルをコントロールするのかあまり把握していません。

Substanceとかどうなってるんでしょうね…
(すみません、UE4ユーザーなのでココらへんは適当です)


Specular Intensityの値を0~1に変化させたものですが、
一見するとMetallicの値を動かしているようにも見えますね。

TB2の場合デフォルトで0.2が入っていますが、
非金属であれば0.2、 金属であれば1を入力するのような感じで使われているのでしょうか…。
細かい値はテクスチャで調整ということなのかしら…?


ココらへんあまり触っていないのでふんわりして申し訳ないのですが、
ご存知の方いらっしゃればご意見頂けますと助かります。





PBRの種類によるメリット・デメリット

じゃあ、どっちのPBRがいいの?
という話になると思いますが、どちらがいいということはありません。


UE4のPBRはMetallicがあることでアーティストが設定する内容が非常に簡単になっています。
また、テクスチャもSpecularであればRGBのカラーで持つ必要がありますが、
Metallicは0~1の1チャンネルで済むのでテクスチャの節約にもなります。


じゃあ、UE4のPBRが簡単でいいじゃんとなりますが、
TB2のPBRはSpecularをアーティストが作成することで、
複雑な質感に対しても柔軟にコントロールすることができます。
しかし、アーティストには深い知識の理解は求められるということでしょうか。



どちらにしても物理ベースがこれだけ急速に普及してきているので、
正しい知識を身につける必要はあると言えます。





(追記)Marmoset Toolbag2について補足

ここまでの話を見ていくとTB2はSpecularのPBRしか使えないように見えますが、
ちゃんと両方のPBRをサポートしています。


残念ながらGlossinessはそのままになるので、
UE4と同じパラメーターで使用したい場合は、
GlossinessのInvertにチェックを入れると値が反転します。

(ちゃんと揃えてほしいよね…)






ここからもう少し話を広げていくこともできますが、
(UE4のSpecularって何なの?とか…)

今回はとりあえずここまで…。


PBRは理解するのは難しくないのですが、
説明するとなるのがちょっとむずかしいですね…(´・ω・`)
いい勉強になりました。


もし、記述に誤りやニュアンスが違うなどありましたらご指摘よろしくお願いいたしますm(_ _)m


1 件のコメント:

  1. ありがとう。あなたのすばらしい分析や解説でまた一つ賢くなったよ。

    返信削除