Metasequoia 4 Ver4.8.3では最新のglTFの仕様に準拠した物理ベースのシェーダパラメータに対応しました。Metasequoiaでは物理ベースレンダリングに関する改良項目を以前のバージョンから順次取り入れてきましたが、今回の新バージョンでだいぶ整備が進んだことを踏まえて、物理ベースレンダリングとglTFについて複数回にわたって紹介していきます。
目次
- 物理ベースレンダリング(1) 概要とglTF
- 物理ベースレンダリング(2) glTFシェーダの基礎
- 物理ベースレンダリング(3) 透過
- 物理ベースレンダリング(4) ボリューム・屈折
- 物理ベースレンダリング(5) クリア塗装
- 物理ベースレンダリング(6) 光沢・反射光・非照明
物理ベースレンダリングの登場
物理ベースレンダリング(Physically Based Rendering; PBR)が登場する以前は、フォン(Phong)シェーディングモデルまたはその派生形が広く使用されていました。
Phongシェーディングは1970年代に提唱され、主に
- ディフューズ(Diffuse; 拡散反射、拡散光) : ざらつきのある表面に光が照らされて明るく見える
- スペキュラー(Specular; 鏡面反射、反射光) : 表面に反射して光源がハイライトとして写り込む
- アンビエント(Ambient; 環境光) : シーン全体が照らされる
の3つの成分によってシェーディングを定義します。
この考え方はわかりやすく、また現代よりも遥かに性能の低い計算機環境でも扱いやすいシンプルな計算式でライティングを表現できたため、現在に至るまで長く使用されてきました。
しかし、この計算モデルは実際の物理法則に基づくものではないため、いかにもCGな感じの見栄えになりやすく、特に実写との合成には違和感をなくすために多大な編集の労力を要することもしばしばでした。
そこで、特に2000年代以降、拡散反射・鏡面反射それぞれについて実際の物理法則に基づいた計算式を導入して、よりリアルに見える計算モデルが活発に提唱されていきます。
特に2012年にDisneyから発表された論文“Physically Based Shading at Disney”ではデザイナーが直感的に理解しやすいパラメータ群で質感を定義できたため、広い支持を集めてRenderManなど様々な商用レンダラーに搭載されていきます。またこの後は、この計算モデルをベースにさらに改良を進めたモデルが提案され発展していくことになります。
このモデルやその派生形の計算モデルが一般に物理ベースシェーディング(Physically Based Shading; PBS)と呼ばれ、PBSを導入したレンダリングを物理ベースレンダリングと呼びます。
物理ベースシェーディング・レンダリング
Phongシェーディングモデルでは拡散反射・鏡面反射の成分を直接指定しましたが、物理ベースシェーディングでは拡散反射・鏡面反射の成分には
- 金属感 (Metallic)
- 粗さ (Roughness)
の2つのパラメータが大きく寄与します。
光源1つだけのライティングではPhongとの違いはわかりづらいですが、鏡面反射の計算の改良によりハイライトの形が歪みにくくなっているのが確認できます。
環境マップを光源として用いるときは、違いがよりはっきりとしたものになります。「粗さ」を設定可能なPBRでは表面のざらつきによって背景全体がぼんやりと写り、また明るい箇所については鋭いハイライトとして反映されます。
さらにSpecular, Sheen, Clearcoatなどのパラメータ効果が付与されて、より多様な質感が表現できます。
ただし、現実世界の物質にこのようなパラメータがあるわけではありません。物理ベースレンダリングも厳密に物理法則に基づくものではなく、あくまで以前よりもリアルっぽく見えるようになった計算手法でしかありませんが、パラメータの意味を理解して値を設定しやすい点において優れたものと言えると思います。
細かい理論や計算式などはここでは解説しませんので、興味のある方はDisneyの論文などを参照してください。
glTFの登場
Web上で3Dモデル・シーンを表現するフォーマットとして、古くはVRML、その後X3DやCOLLADA(※これはWeb用に限らず)なども提案されましたが、どれも広く普及するには至りませんでした。
そこでOpenGLやWebGLなどの規格を策定しているKhronos Groupが中心になって、新たに標準を目指すフォーマットとしてglTFが提案され、初版が2015年に策定されました。その後すぐに仕様の見直しが行われ、2017年にglTF 2.0として発表されます。現在glTFと呼んでいるものは、ほぼ2.0のことを指していると考えて構いません。
glTF 1.0では質感の定義にはPhongシェーディングが採用されていましたが、潮流の変化を見定めたということでしょうか、glTF 2.0では互換性のない形でPhongシェーディングを廃止し、代わりにMetallic/Roughnessパラメータを主とした物理ベースレンダリングが導入されることになります。
glTFによる物理ベースレンダリング
glTF 2.0の策定当初は少ないパラメータしかありませんでしたが、glTF自体は拡張によるパラメータ追加が可能な構造になっており、いくつかのベンダーが独自拡張を行っています。Khronosもまたその拡張をベースに検討を進め、Disneyの論文以降に発表された最新の計算手法も取り入れながら順次新しい拡張仕様を定義し、2021年7月時点で
- クリア塗装;クリアコート (Clearcoat)
- 光沢;シーン (Sheen)
- 屈折率 (Index of refraction; IOR)
- 反射光;スぺキュラー (Specular)
- 透過;トランスミッション (Transmission)
- ボリューム (Volume)
- 照光なし (Unlit)
さらに2022年の追加項目
- 虹ムラ (Iridescence) Ver4.8.4で対応
が質感表現のためのKhronos拡張仕様として定義されています。(日本語名は公式にはないため、弊社が独自に訳したものです)
各拡張は慎重に仕様検討が進められた甲斐もあってか、(Unlit以外の)各拡張は任意に組み合わせることができ、表現の自由度が高くなっています。また現在も議論中の項目もあり、今後さらに定義が追加される可能性があります。
(上記以外にもglTF2.0策定当初からSpecular-Glossiness拡張がありますが、現在ではArchivedとして仕様が凍結され、他の拡張との組み合わせもできない腫物扱いのような状況ですので、こちらは紹介しません)
glTFにおけるリアルタイム表示は、時間をかけて処理するパストレーシングレンダリングと理論的にはほぼ等価です。ただ、リアルタイムに処理できることを主眼としているため、パストレーシングでは使用しないリアルタイム表示専用パラメータも若干存在し、仕様自体がリアルタイムで表現可能な項目に絞られて定義されています。しかしながら、透過・屈折の表現など以前では考えられないような高度な表現がリアルタイムでもできるようになりました。
ツールレベルではglTF自体には対応していても拡張仕様についてはまだこれからのものが多いですが、three.jsやbalylon.jsなどWeb3D用フレームワークのレベルではおおむね対応が済んでいるので、拡張仕様による表現がデファクトスタンダードとなる日も近いかもしれません。
Metasequoia 4 Ver4.8.3では上記の拡張仕様すべてに対応しています。各パラメータの設定方法について次回以降で解説していきます。