シン・人柱系モデラーのTipsブログ

元軍人のモデラー。デジタル人形師、バーチャル探検家。Youtubeでメイキング配信をしたり自作アバターでVR世界を旅しています。MD、ZBrush、3DCoat、Blender、Unity、UE4等。

PBR(物理ベースレンダリング)

目次

はじめに

最近の海外のゲーム作品は映画並みですよね。

最近ではUnreal Engneで作られたPS5用のマトリックスのデモゲームが、まるで実写さながらだと話題になりました。

実写さながらのCGを実現している技術が、PBR(物理ベースレンダリング)と呼ばれる技術です。

PBRについて旧ブログの方で2016年初頭に解説した私の過去記事が非常に大変なヒット記事となりまして、長らくネットでPBRと調べると私の記事が出てくるような事態になっていました。

そのようなこともあり、CGWORLD Entry 019でもPBRについての解説記事を書かせていただいたりと、PBRについて人に解説する機会が多かったため、今回は再掲載及び、アップデート記事とさせていただければと思います。

追記)CGWORLD Entryは無料で閲覧できるので、ぜひバックナンバーを読んでみて下さい。

https://cgworld.jp/news/book/entry19-e.html

PBRとは

PBRtとはPhysically Based Renderingの略称で、光学的に正しい振る舞いを目指す描画方法の総称です。

BlinやPhoneシェーダーが主流だった古の時代はPBRの技術が確立しておらず、物体の質感や光量バランスはアーティストの直感で調整するしかありませんでした。

PBRでない方法では、ライティングの変化で全体のライティングのバランスが崩れてしまう事が多く、例えば、朝昼夜と時間経過が起こるようなシーンではマテリアルの設定から詰め直さないといけませんでした。

そこで、現実世界を模した様々なライティング環境でも、現実世界に近いレンダリング結果を返してくれるPBRの概念が誕生しました。

現在リアルタイムレンダリングで主流のGGXシェーダーは、エネルギー保存の物理法則をベースに作られており、短時間で写実的なレンダリング結果を得ることができます。

PBR向けの質感を設定する際に、人が直感的に理解しやすいように物体の質感を金属度と粗さの2つの指標が用いられることが多く、この質感設定技法はDisney社が発表した論文に基づき【Disney原則BRDF】と呼ばれています。

金属と粗さで表現する方法とは別に、GGXシェーダーではスペキュラーとグロシネスの2つの指標をで制御する方法もありますが、こちらは人間が設定するのは難しいです。

作例

著者がデモ用に作成し海外のCG投稿サイト【Sketchfab】にて運営公認(StaffPick)に選んで頂いた作例があるので、今回はこちらを作例に解説したいと思います。

IBUKI SUIKAby kazukisakamotoon Sketchfab

※)表示に違和感がある場合は右下の設定よりテクスチャ解像度がをLD→HDに上げて頂けると正確に表示されます。

PBRのライティングについて

上記したビューをPCの場合はAltキーを押しながらドラッグ、タブレットの場合は3本指スワイプで背景を動かすことができます。

背景を動かすとキャラクターのライティングも瞬時に変化することがわかると思います。キャラクターのパーツはそれぞれに質感がペイントされています。これがリアルタイムかつ物理ベースの3Dモデルになります。

昨今では、PBRがリアルタイムでも簡単に利用できる世の中になりました。Unity、Unreal Engne、WebGLから、Blenderの作業中のビューポートまで。様々な環境でリアルタイムのPBRを見ることができます。

マテリアルも大事ですが、まずはライティング環境も現実的なものにしてやる必要があるため、ここではPBRの基本的なライティング技法について解説していきます。

・IBL(イメージベースドライティング)

IBLは360度の画像を背景に設定し、光源として使用するライティング技法です。

光源に使用する画像は通常の画像より多くの光の情報が必要なため、HDR(ハイダイナミックレンジ)画像=HDRIが用いられます。

古くからある手法ですが、これをリアルタイムに反映することができるのが、現在のハイエンドゲームにおけるPBR(フィジカルベースドレンダリング)の特徴です。

・HDRI (ハイダイナミックレンジイメージ)

IBLで用いられるHDRI(ハイダイナミックレンジイメージ)は360度の写真素材で、露出設定の異なる写真を何枚も重ねて、光の条件が変わった時にどう映るかを合成して1枚にして使用します。拡張子は.exrなどが有名で、フォトショップなどで合成することができます。

PolyHavenというサイトで無料ダウンロードできるので、ぜひ試してみて下さい。

PBRのマテリアルについて

冒頭で説明したとおり、ディズニーが提唱した現実世界の一般的な物体の質感は、粗さ(Roughness)、金属っぽさ(Metalness)の2つ尺度で数値化出来るという考え方がPBRの根底にある基礎理論です。

その他にも、透明、半透明な物質や、特殊な反射をする物質など、条件によってはケースバイケースで他の尺度が必要になってきます。

・ラフネス/メタルネス

著者の作成したモデルの土台に用いたヒョウタンでラフネス、メタルネスの変化を図にしてみました。

Unityだとラフネスがスムーズネスと呼ばれていて、0-1の値=画像の白黒が逆転する運用がなされるので要注意です。

・スペキュラ/グロシネス

冒頭で述べたとおり、【スペキュラ/グロシネス・ワークフロー】と呼ばれている運用法もございます。

ここで使われるスペキュラは、昔から使われていた見せかけだけの強い反射を表すスペキュラマップとは完全に異なるもので、古い3DのシェーディングになれていてこれからPBRに取り組む方には一番注意していただきたいところです。

ラフネスメタルネスワークフローと同様に、反射の強さ(specular)、艶さ(glossiness)の二軸で表現する方法です。

ラフネスメタルネスワークフローと、スペキュラグロシネスワークフローで得られる結果、見た目は完全に一致します。

どちらのフローを使っても再現できる質感は同じということを覚えておいて下さい。使用する環境や、レンダラーや、エクスポート設定により、どちらを使うかを選択すれば良いです。

PBRのテクスチャについて(基本)

一昔前のテクスチャワークフローでは、色、法線、スペキュラを、それぞれのマテリアルに割り当てて使用していました。

しかし、ラフネス/メタルネス・ワークフローが確立した現在、必要なテクスチャ類は以下のとおりです。

一つのグループにつき、4種類のテクスチャにまとめられていることが分かると思います。

①色(ディフューズ)マップ

色の付いているものはディフューズマップ(カラーマップ、アルベドマップ)で、ライティングを無視した物質本来の固有色を表します。

PBRは表現では固有色のみで良いのですが、影色を強調するためにAO(アンビエントオクリュージョン)マップを焼き込むと効果的です。

②法線マップ

青っぽいマップが法線マップです。

ゲームでは表示できるポリゴン数が限られているためローポリゴンに擬似的な凹凸情報をペイント/ベイクして使用します。RGチャンネルで深度を表現しているので関係のないBチャンネルがベースカラーになっていることが多いです。

③ラフネス/メタルネス or  グロシネス/スペキュラ

黒白で0~100%を表しています。1チャンネルの情報なので、ラフネス/メタルネスをRBG等の3チャンネルテクスチャ一枚にまとめて保存、運用することも多いです。

しかし、ノーマルマップのようにオーソドックスなスタイルが確立していないため、スタジオやチームでどのように運用するのかは異なります。

今回は人間の目で確認できるように分割して保存しました。一枚のテクスチャにまとめるメリットは大量データを運用する際、セットアップしやすいということです。容量的には分けたほうが1チャンネル情報が2枚なので軽量になりますが、読み込みを分けるのでシェーダーによっては若干遅くなる可能性があります。。

以上の3項目をマテリアルIDがの割り振られたモデルにアサイン(割当て)します。

PBRの質感設定は3Dペイントでほぼ決まってしまうのでセットアップで悩むのはポスプロだけです。色、法線、ラフネス、メタルネス、それぞれの出力項目にテクスチャを割り当てれば良いだけです。

PBRでは、ラフネス、メタルネス質感の物体はマテリアルを分ける必要がありません。

テクスチャを運用しやすいようにマテリアルを分けましょう。

PBRのテクスチャについて(応用編)

今まで解説してきたのはPBRの基本的なワークフローです。

ラフネス/メタルネスで物体の表面は数値化出来るという大法則は変わりません、しかし発光、透過という別の要素が存在しますのでこの点に触れていきたいと思います。

④透過

透過は主に二種類の使用方法があります。

瞳や水を表現する場合、半透明にてメタルネスやラフネスで反射質感を設定します。

もう一つはマスクで抜く場合です。まつ毛や葉などの細かい表現はポリゴンで作成すると非常に重いデータになってしまいます。そのため透過PNG等をマスクに割て完全に透過してしまう手法を用いることが多いです。

透過PNGは重いので、WebGLの際はテクスチャ類はJPEG推奨です。透過PNGを用いなくてもマスク画像を用意すれば透過Mapとして用いることも可能です。

リソースを取るか、作業時間を取るか、二者択一だと思います…。

⑤発光

発光も質感とは異なる部分の問題です。発光には2つの定義があります。

一つ目は、ライティングの影響を受けず一定の輝度、彩度、明度を保ち続けるということ、

二つ目は、発行するオブジェクト自身が光源になり、他者に影響するということ。

こちらの定義はリアルタイム描画では非常に難しいです。

しかし、ポストエフェクトという手法で、レンダリング後の描画した画像自体にグロー処理を施すことで擬似的に発光のエフェクトをかけることが可能です。

ポスプロは描画エンジンによって異なりますが、見た目が大きく変わるので最大限に活用すべきですね。

画像は、目とリボン等を発光させた状態です。実はこのモデルも虹彩が瞳の反射に負けないように1%だけ発光する設定にしてあります。

発光させる部分が少ない場合は割当のマテリアルグループを分けてマテリアル全体を発光させれば済みますが、ロボット等で発光する部分が多い場合は発光する部分だけ特別に発光マップを作成するのが良いです。

ローポリゴンとノーマルマップ

Sketchfabのシェーダー上でも左下の設定からワイヤーフレーム表示ができるので試していただきたいのですが、こちらのモデルは約1万5千ポリゴン程度しかありません。

最近のゲームアバターはVRChatでは7万ポリゴン以下という制限があり、だいたいそのくらいでキャラをつくるのが基準になってきています。

リアルタイムで動かすためには少ないポリゴンで精密なハイポリゴンと同等のディティールを再現する必要があるため、実際に動かすためのローポリと、造形を作り込んだハイポリゴンの2つの状態のモデルを作り、

ローポリゴンとハイポリゴンの差分形状からハイトマップ(ディスプレイスメントマップ/ノーマルマップ)を取得する技法が取られます。

これを、テクスチャーベイクと呼ばれる、テクスチャの生成作業の一環として行います。

最近ではZBrushやBlenderの優れたスカルプト機能でハイポリのディティールを作る方法や、

海外の予算が多い大手プロダクションでは実物の粘土造形を3Dスキャンし、そこからローポリゴンを作り直すといった手法が取られたりもします。

以下の資料は例題モデルのヒョウタンに巻かれた縄です。

縄は実際にモデリングしていますが、単純なポリゴンメッシュに質感をベイクしています。

PBRペイント

■データ作成方法(3Dペイントについて)

PBRモデリングの難しさはテクスチャ作成の難易度だと思います。

テクスチャは3Dビュー上で行われるのがハイエンドの手法で、3D-CoatやSubstance、Mari等のソフトで3Dペイントを行います。

尚、3dsMaxやMayaはHubとして用いるのが最近の通例です。マテリアルを割り当てたり、アニメーションを付ける場合はAutodesk製品をHubにしてFBX形式で書き出しましょう。

この辺の細かい話はLong storyになってしまうので今後機会があれば記事にしたいと思います。

今回は3Dペイントに共通する幾つかのテクニック項目に触れたいと思います。以下の概念を理解しなければ3Dペイントを使いこなすことはできません。

①ベイク

まず、ハイエンドCGの特徴として、ローポリと対になるハイポリが必要となることが挙げられます。

ローポリをハイポリにする手法は非常に昔からある方法ですが、ハイポリからローポリに落とし込んだほうが効率が良いです。

ZBrushでは「マルチレゾリューションエメッシュディティング」といってポリゴンをカトマルクラーク方に従い4の倍数で細分化させるハイポリ、ローポリの差分作成に有用なモデリング手法が取られています。

ハイポリを更に極限まで肉抜きしたい場合は3D-Coatでのリトポロジーが一般的な手法です。その際、UV展開やUVセットの編集も3D-Coatで済ませておくと楽です。

かつて、古い方法ではベイクフローにXNormalが用いられることが多かったですが、

3D-CoatやSubstanceDesignerでより効率的にベイクすることができ、可視化してベイク範囲を見ることができるので非常に多くの利点があります。

②AO、曲率マップの活用

3Dペイントでは、墨入れや影入れ、形状に即したウェザリングが非常に有用です。

そのために用いるのがノーマルから生成するカバチャーマップ(曲率)、AOマップ(アンビエントオクリュージョン)、そして、これは必要ない時もありますが、上下左右や影の判定に用いるワールドノーマルです。

これらはMari、Substance、3D-Coatでペイントを始める際に共通して必要となるベースの情報(マップ)です。

そしてこれらのマップは最初はハイポリ、ローポリの差分ノーマルから作られます。

ペイントを進めるにあたって、ノーマルペイントをして質感を追加した場合は随時更新しないと反映されないので注意が必要です。

これらのマップにより墨入れや、凹凸判定を活かしたリアルなペイント、ウェザリングが可能になります。

例えば、曲率マップを参照元にすることで、ロボットの角の塗装が剥げて中の金属が露出するようなペイントが簡単にできます。

③UV、マテリアルグループ、スムージンググループの設定

■最終出力は…

Unity、UE4、Cryengine、Stingray、最近話題のAmazonEngine(仮)等のDirectXベースのレンダリングエンジンです。その他にもToolbagや今回私が用いたSketchfabのようなHTML5、WebGLといった手法もあり、最終出力形態によってク消費メモリが変わるので、オリティラインを調整する必要があります。

ゲームエンジンでコンテンツを作成し、それぞれのデバイスに向けた携帯に書き出すことをコンパイルと呼びます。

コンパイルすることで、Web上で閲覧できる3Dコンテンツや、PS4、XBoxONE向けのコンテンツ、スマホアプリまで幅広く出力することが可能です。

Return Top