物理ベースレンダリング

最終更新日22 Apr 2017 22:07

Physically Based Renderingという言葉から、
物理学的に正しくないといけないみたいな感じがしますが、そんなことはありません。
物理現象をベースとして、近似してそれっぽく見せるレンダリング手法のことなのです。
最近になってPhysically Based Renderingという言葉が流行しだしましたが、
古い手法だと1980年代から存在します。

反対語はempirical 経験則に基づくモデル

  • 流体シミュレーション fluid simulation
  • 柔体、弾性体、Soft Body
  • 衝突判定

PBRの良いところ

物理的に正しいことを目指すことにより、パラメータに制限がかかる。
マテリアルを作るときに、パラメータの自由度に制限がかかることにより、
迷わなくて済む!絶妙な匠の技でパラメータを配合せずともリアルで自然な見た目が簡単に作れること。
なので、だれが作ってもビジュアル的にある程度のクオリティ&一貫性が保てる。

今までは同じマテリアルでもライトが変わると見た目が変になってしまったりしたが、
物理的な法則にのっとってレンダリングすれば、ライトが変わっても自然な見た目になります。
つまり、ライトが変わったからといってパラメータを再調整しなくてもよい。

PBRのものとそうでないもの

どのモデルがPBRでどのモデルがPBRじゃないんでしょう。。??
どのモデルも一応物理現象をベースとしてるのですべてPBRと言えますが、

empirical(経験則に基づく) BRDF モデル

これらはPBRではありません。

  • ランバートモデルによる拡散反射
  • constant BRDF..単純に定数を使って色を塗るだけということ。
  • フォンによる鏡面反射のモデル

PBR変わったのはパラメータの扱いやすさ

ざっくり、今までとこれからにわけます。
特に変わったのはマテリアルを作る時に使うパラメータです。

今までのパラメータ

ここで入力するパラメータは

  • specular color…鏡面反射率 RGB値
  • shininess…1~100ぐらいの曖昧な値。

です。
shininessが1~100という整数値なのは、内部計算でshininessを使ってべき乗してるからです。
直感的にわかりにくいパラメータです。
リアルな絵を目指すにはパラメータを扱う匠の技が必要でした。

PBRのパラメータ

  • アルベド,ベースカラー…素材本来の色味
  • shininess or glossiness(光沢度)⇔Roughness(ザラザラ度)…つるつるか、ざらざらか0.0-1.0の値。
  • metalness….金属度 0.0-1.0の値

パラメータが0.0-1.0とパーセンテージになったのでわかりやすく、
さらに内部計算への知識がなくても理解できそうなわかりやすい直感的なパラメータになりました。
Three.jsのMeshStandardMaterialのページ[9]でこれらのパラメータをいじるとどんな見た目になるのか、
デモが見れます。

PBRのパラメータ 今まではどう代用してたのか?

PBRのパラメータ 今までの代替手段
metalness 金属度 specular の色調整,specularの強さ調整
shininess⇔roughness 表面のざらざら度合 ハイライトのボケ具合、環境マップのボケ具合を調整
albedo ベースカラー 今まではdiffuseと呼ばれていた。

metalness workflowとspecular workflow

PBRにはmetalness workflowとspecular workflowがあって、
テクスチャの使い方、金属の作り方において用意するテクスチャが微妙に違う。

metalness workflow specular workflow
[[[albedo]S] 色あり
map metalness map 白黒 specular map 色あり

[((label CGCookie))]

PBRが使用されているエンジン

Unreal Engine、Unity,3D Studio Max,Three.js

Three.jsでのPBR

MeshStandardMaterial[9]が物理ベースレンダリングしている。
物理ベースレンダリングじゃないマテリアルは

  • MeshLambertMaterial
  • MeshPhongMaterial
  • MeshBasicMaterial

など


files

サポートサイト Wikidot.com