twaki’s blog

ゲーム開発に関する事を書くと思います。

SG SERIESを読む #0

MJPさんの「SG SERIES」をちょこちょこ読んでいるので、メモをまとめてみます。
最後までまとめるかは微妙です・・・

SG SERIES

Part 1 – A Brief (and Incomplete) History of Baked Lighting Representations
Part 2 – Spherical Gaussians 101
Part 3 – Diffuse Lighting From an SG Light Source
Part 4 – Specular Lighting From an SG Light Source
Part 5 – Approximating Radiance and Irradiance With SG’s
Part 6 – Step Into The Baking Lab

関連記事

※工事中※

Mitsuba(レンダラ)を触ってみる

Mitsubaを触ってみたので、メモ程度ですがまとめておきます。

はじめに

今回の内容はこちらを参考に試した時のメモですので、
上記ページが読めるなら、そちらを読むことをお勧めします。

Mitsubaとは

オープンソースGPLライセンス)の物理ベースレンダラで、PBRTからインスピレーションを受けて作成されているそうです。
また、Frostbiteの資料でも紹介されており、FrostbiteではPBRを実装する際のリファレンスとして使用されています。

Mitsubaの入手

こちらから入手可能です。
私はWindows版なので、「Optimized build (64 bit, Vista+)」をダウンロードしました。
(落ちてくるファイルはzipです。)
また、上記ページの下の方にサンプルもありますので、Mitsubaで表示してみるのも面白いかと思います。

Mitsubaのドキュメント

こちらから入手可能です。

Mitsubaの実行

解凍してできたフォルダの中に実行ファイルが存在していますので、そちらを実行しましょう。
mtsgui.exeがGUIバージョン、mitsuba.exeがコマンドラインバージョンです。
今回はGUIバージョンのみ試しましたので、そちらのメモとなります。

Mitsubaのシーンファイル

xmlで定義していくようになっています。
記述方法はドキュメントに記載されていますので、そちらを参照して下さい。

シーンの構築

「File > Import」からモデルファイルをインポートする事が一番簡単な構築方法のように思います。
インポート可能なフォーマットは.obj、.dae、*.zaeとなっています。
また、Mitsubaにはsphere、boxなどの形状も存在しており、 シーンファイルとなるxmlを編集する事で任意のシーンを組む事が可能です。

描画設定

歯車アイコンを押すと描画設定のウィンドウが立ち上がります。
インテグレータ、解像度、サンプル数など、様々な描画設定をここで行えます。

レンダリング

再生アイコンを押すとレンダリングを開始します。
レンダリングが終わったら、「File > Export Image ..」からレンダリング画像を保存する事も可能です。

終わりに

簡単ではありますが、今回はこれで終了です。
PBR実装時などのいいリファレンスになるとは思いますので、もう少し使い方を調べて活用できたらなと思います。
最近はDXRなどのリアルタイムレイトレが話題ですが、そちらでパストレを実装し、リファレンスとして使用するのも手かもしれませんね。

PBRについて #3

引き続き、Frostbiteの資料を見ながら進めていきます。
関連する記事は PBRについて #0 にまとめています。

今回は Moving Frostbite to Physically Based Rendering 3.0 の 「3 Material」を見てみます。
この章は量が多めなので、何回かに分けて書こうと思います。

※メモみたいなものなので、言葉遣いは雑です。
※個人的な解釈なので間違ってる可能性はあります。
※間違っている箇所がありましたら、ご指摘頂けると助かります。


3.1 マテリアルモデル

3.1.1 外観

表面外観は、入射光と表面のマテリアル特性との間の相互作用に起因する。
現実の世界で観察可能なさまざまな外観は、単純な均一マテリアルから複雑な層状および異種マテリアルに至るまでかなり広い。(図4参照)

f:id:twaki:20180724220057j:plain:w400
図4:光と物質の相互作用の多様性を示す様々な表面様相

これらの異なる外観は、導電率、平均自由行程および吸収などの特定の固有の物理的特性によって分類することができる。
これらのマテリアル特性に基づいて、文献は、フルスペクトルの中で特定の範囲の外観を表すことができる様々なマテリアルモデルを公開している。
マテリアルモデルの文献は幅広く、様々なトレードオフと精度を備えた多くの異なるモデルが存在する。
BSDF(Bidirectional Scattering Distribution Function:双方向散乱分布関数)と呼ばれるマテリアルモデルは、反射部分(BRDF)と透過部分(BTDF)の2つの部分に分解することができる。
Frostbiteの資料では、反射部分、特に"標準(standard)"外観、すなわち私たちが日々の生活の中で遭遇する表面の大部分を表すことができるマテリアルモデルに焦点を当てている。
したがって、Frostbiteでは短い平均自由行程を持つ反射性、等方性、誘電体/導体表面に限定する。

f:id:twaki:20180724233435j:plain
図5:"標準"物質のスラブ(厚く平たい板)との光の相互作用。 左:軽い相互作用。 右:拡散反射項fdと鏡面反射項frとの相互作用のBSDFモデル

3.1.2 マテリアルモデル

この標準的なマテリアルモデルでは、表面応答(surface responce)fは、「拡散反射(diffuse)」(fd)と呼ばれる低周波数信号と「鏡面反射(specular)」(fr)と呼ばれる低周波から高周波数部分の2つの異なる項に分解されることがよくある。(図5参照)
境界面は、空気と物質の2つの媒質を分離する:
フラットな境界面からなる表面は、誘電体表面と導体表面の両方に対して フレネル法則 によって容易に表すことができる。
境界面が不規則である場合、図6を参照すると、これらのタイプの表面の光相互作用を特徴づけるために マイクロファセットベースのモデル がよく適合していることが文献に示されている。
マイクロファセットモデルは式1によって記述され、導出の詳細は こちら を参照する。

f:id:twaki:20180725000751j:plain

D項は、マイクロファセット分布(すなわち、NDF:正規分布関数)をモデル化する。
G項は、マイクロファセットのオクルージョン(シャドウマスキング)をモデル化する。
この定式化は拡散反射項fdと鏡面反射項frの両方に有効。
これらの2つの用語間の違いは、マイクロファセットBRDF fmにある。
鏡面反射項の場合、fmは完璧な鏡であり、従って、フレネル F 法則を用いてモデル化され、周知の次の式で導かれる。

f:id:twaki:20180725001636j:plain

D項は、図6に示すように、表面の外観において重要な役割を果たす。
文献[Wal+ ; Bur12]は、GGX分布のような「長いテール」のNDFが現実世界の表面を捕捉するのに優れていることを指摘している。
G項もまた、高いラフネス値にとって重要な役割を果たす。
Heitz [Hei14] は最近、スミスの可視性関数(visibility function)が正確なG項であることを示している。
Heitzはまた、文献ではスミスの可視性関数の近似バージョンを使用する傾向があり、マスキングシャドーイング関数より正確な形式は、ミクロ表面の高さに起因するマスキングとシャドーイングの間の相関をモデル化することを指摘している。(図3参照)
図7は、シンプルなスミス関数と高さ相関スミス関数の違いを示している。

f:id:twaki:20180725002919j:plain

f:id:twaki:20180725001301j:plain
図6:D項によってモデル化された異なる粗さの表面を示した図。 上:マイクロファセットとの軽い相互作用。 中:結果のBRDF frローブ。 下:球体の外観。

f:id:twaki:20180725003808j:plain
図7:黒い誘電体(上)とクロム金属(下)の球体におけるの無相関と相関のスミス可視性関数の比較。 高さ相関バージョンでは、高いラフネス値に対してわずかに多くのエネルギーが戻ってくることに注意する。

拡散反射項については、fmはランバートモデルに従い、式1は次のように単純化することができる。

f:id:twaki:20180725004934j:plain

最近まで、拡散反射項fdは単純なランバートモデルであると仮定されていた。
しかし、層状物質を除いて、拡散部分は鏡面反射項とコヒーレントである必要があり、表面の粗さ[Burley12] を考慮する必要がある(鏡面反射と拡散反射項は同じラフネス項を使用する必要がある)。(図8参照)
式4には分析解がない。
Orenら[ON94] は、この式の経験的近似を、ガウスNDF分布と、Oren-Nayarモデルとして知られているV-cavity G項を使用して見いだした。
モデルを正しくサポートするには、Gotanda[Got14] で説明されているように、式4をGGX NDFで等価近似する必要がある。
付録Bには、このような拡散モデルに関する分析の一部が詳述されているが、さらなる研究が必要である。

f:id:twaki:20180725010217j:plain
図8は、鏡面反射BRDF fm(左)と拡散反射BRDF fm(右)を有する拡散反射項fdの両方についての鏡面反射fr項のマイクロスケールでの相互作用の図を示す。

Burley[Bur12] は、実世界の表面観測で構築された別の拡散モデルを提示した。(式5参照)
このモデルは実証的なものだが、MERLデータベースのマテリアルの主な特徴を再現できる。 この理由から、またその単純さのために、Frostbiteでこのモデルを使用することを選択した。
この拡散反射項は、マテリアルのラフネスを考慮に入れ、グレージングアングル(斜面角)である程度の逆反射を生成する。

f:id:twaki:20180725010728j:plain

3.1.3 エネルギー保存

エネルギー保存は、受け取ったエネルギーより多くのエネルギーを加えないために考慮する必要がある。
さらに、光が拡散反射項よりも鏡面反射項によって散乱される傾向があるグレージングアングル(斜面角)での挙動を正しく処理することができる。
Frostbiteでは、計算を単純に保ち、半球上の一定の照明のために一定の方向の全反射率を与える半球方向の反射率がFrostbiteのBRDF(拡散反射+鏡面反射 項)全体に対して1未満であることを保証することによって、エネルギーの保存のみを保証することを選択した。

f:id:twaki:20180726003640j:plain

Frostbiteの鏡面反射モデルと拡散反射モデルとの間の直接的でない関係のために適切な誘導を行うことは容易ではない(鏡面反射と拡散反射の両方の用語がマイクロファセットモデルに基づく場合については付録Cを参照)。
ディズニー拡散反射モデルの1つの重要な注意点は、エネルギー保存の欠如。
図9の(a)は、ディズニー拡散反射モデルの半球方向の反射率を示す。
結果として得られる反射率の値が1を超えているため、このBRDFがエネルギー保存ではないことが明確に分かる。

f:id:twaki:20180726005949j:plain
図9:様々なビューアングルとラフネスに対するディズニー拡散BRDFの半球反射率のプロット。 左:元の反射率。これは1を超えることがある。 中:新しい再正規化反射率の値。 右:鏡面反射と拡散反射の組み合わせ。

Frostbiteでは、再帰反射特性を維持しながら、エネルギーの利得を補うために少し修正した。
リスト1は、再正規化係数を使ったディズニー評価関数を示している。
図9の(c)は、frの鏡面反射マイクロファセットモデルとfdのディズニー拡散反射モデルとからなる、完全なfの半球方向の反射率を示す。
1に完全には等しくないが、それは十分に近い。
図10はオリジナルのディズニー拡散反射項とその正規化バージョンを比較している。

f:id:twaki:20180729133120j:plain
リスト1:エネルギーの再正規化を伴うディズニーの拡散反射BRDFコード。linearRoughnessは、知覚的な線形の粗さ。(3.2.1項参照)

3.1.4 形状特性

鏡面反射マイクロファセットベースのBRDFは、しばしば無視されるが、最終的な外観に強い影響を及ぼす特定の特性を有する。
特に2つの現象が重要。
Half-angle parameterization
このパラメータ化は、垂直入射角で等方性から斜め角に異方性に向かうBRDF形状の非線形変換を意味する。 (この部分の詳細については、4.9節を参照。)
Off-specular
BRDFローブは、反射されたビュー方向(ミラー方向とも呼ばれる)の周囲に中心が置かれていることが多いと考えられる。
しかし、<n・l>とシャドウマスキング項Gのため、BRDFローブはラフネスが増加すると法線方向にシフトする。(図11を参照)
このシフトは"Off-specular peak"と呼ばれ、表面の粗い外観で重要な役割を果たす。

f:id:twaki:20180729164146j:plain
図10:上:ディズニー拡散反射項とランバート拡散反射項との比較。 下:オリジナルのディズニー拡散反射項とFrostbiteが導入した再正規化バージョンの比較。

f:id:twaki:20180729144651j:plain
図11:様々なビューアングルに対するBRDFローブ形状の例。支配的なローブ方向( dominant lobe direction)は、グレージングビューアングルではミラー方向Rと一直線でないが、その代わりに方向Mとなる。上段:α = 0.4。下段:α= 0.8。

"Off-specular peak"は、高いラフネス値に対して大きな差異をもたらす可能性がある。
この重要な特徴を考慮するために、Frostbiteは、エリアライトおよびイメージベースドライティング評価中に使用されるこの支配的な方向(dominant direction)をモデル化しようとした。
(エリアライトおよびイメージベースドライティングはセクション4.7、4.9を参照。)

3.1.5 Frostbiteの標準モデル

要約すると、Frostbiteの"標準"マテリアルモデルは、他のゲームエンジンで使用されているものに近い[Kar13; NP13; Bur12]。
これは、

鏡面反射項 fr
スミス相関可視性関数(Smith correlated visibility function)およびGGX NDFを用いた鏡面反射マイクロファセットモデル。(式2を参照)
拡散反射項 fd
エネルギー再正規化されたディズニー拡散反射項

である。

両方の要素について、照明を統合する際に、支配的な方向の補正(off-specular peak handling)を適用する。
これらのモデルを操作するためのパラメータについては、次のセクションで説明する。 Frostbiteはまた、クリアコートや表面化散乱(サブサーフェイス・スキャタリング)を伴うマテリアルなど、他のタイプのマテリアルもサポートしているが、本書では標準マテリアルモデルのみに焦点を当てる。

f:id:twaki:20180729163244j:plain
リスト2:BSDF評価コード


参考資料

Moving Frostbite to Physically Based Rendering 3.0

Moving Frostbite to Physically Based Rendering

 超雑訳 Moving Frostbite to Physically Based Rendering 2.0

PBRについて #2

引き続き、Frostbiteの資料を見ながら進めていきます。
関連する記事は PBRについて #0 にまとめています。

今回は Moving Frostbite to Physically Based Rendering 3.0 の 「2 Reference」を見てみます。

※メモみたいなものなので、言葉遣いは雑です。
※個人的な解釈なので間違ってる可能性はあります。
※間違っている箇所がありましたら、ご指摘頂けると助かります。


モデルと仮設の検証

フォトリアリズムは、フォトリアリスティックなイメージを作成するために使用されたデータと方法については何も言及していない。
実際の動作や特性をシミュレートしようとする物理的なレンダリングとは異なり、結果は定量的に判断される。
これにより、"ground truth"データに対する追加要件が課せられる。
適切なモデルと正しい仮説、つまり良い参考文献を慎重に選択することが重要。
実際の世界を観察して比較することは、適切な選択肢を作り、技術や方法がどれほど適切であるかを判断する最良の方法。
実際の世界を観察する粗いレベルでは、ハイライトの形状、濡れた表面の挙動、光の強さの違い、その他多くの視覚的特徴を素早く把握できる。 各スケールで示される異なる照明動作をキャプチャするには、複数のスケールで写真を撮ることが重要。(図1参照)

f:id:twaki:20180723230700j:plain
図1:実世界の照明(左)とエンジン内の照明(右)の比較

しかし、実際のデータを正確に測定するには、しばしばかなり複雑で時間がかかる。 MERL のような特定のデータベースは、そのようなデータへのアクセスを提供し、モデルを迅速に評価することができる。
Frostbiteのアプローチでは、光の強さや減衰、空の明るさ、カメラの効果など、実際のデータを測定し、検証しようとした。
しかし、これらすべてのステップは時間がかかり、セットアップが必ずしも容易ではない。

エンジン内での近似の検証

Mitsuba のような現代のPBRパストレーサは最先端のレンダリング技術を実装しており、信じられないほどリアルなイメージを作り出すことができる。
このようなソフトウェアを使用することは、モデルの精度を評価するためのより簡単な方法。
Frostbiteでは、Mitsubaのシンプルなエクスポーターを書いている。
これにより、近似の有効性を迅速に評価することができる。
エクスポータは、ジオメトリおよびコンスタントなマテリアル情報(つまり、テクスチャなし)およびすべての光源をエクスポートすることができる。
この設定により、マテリアルモデル、ライトの統合、ライトの強度を簡単に確認できる。
さらに、このエクスポーターにより、グローバルイルミネーション、アンビエントオクルージョン、リフレクションなどのより複雑な現象の精度を検証することができる。
図2は、エクスポート後に自動的にトリガーされるウィジェットを示している。
エンジン内の結果とオフラインリファレンスの間でピクセル値をすばやくスワイプして比較することができる。
レンダラによる輝度出力のレンジが広いため、
このレンジを保つために、両方のレンダラは最終的なイメージを線形HDRフォーマット(OpenEXR)にエクスポートする。(この点は重要)

f:id:twaki:20180723231935j:plain:w500
図2:エンジン内の結果とオフラインのパストレース結果を比較し、実装の妥当性を評価するツール

エンジン内のリファレンスモードの検証

エクスポータは便利だが、シーンをエクスポートしてレンダリングするには、数秒から数分の間の時間が必要。
さまざまな近似を素早く繰り返し、適切なものを選択するために、GPU上のbrute-force sampling(イメージベースドライティングとエリアライト)によるライトの統合のためのエンジン内リファレンスモードを追加した。
高速ではないが、反復時間は単純なエクスポーターよりも一桁速い。
付録Aには、リファレンスモードでのいくつかのタイプのライトを評価するためのリストが含まれている。

f:id:twaki:20180723230313j:plain
図3:左:エンジン内のいくつかのタイプのエリアライトで構成されるシーンのレンダリング。中:GPU上でエリアライトをインポータンスサンプリングする事によって、同じシーンがエンジンでレンダリングされた。右:検証のためにパストレーサの内部でレンダリングされるシーン。

Note:
正しいリファレンスを使用することが重要。
リファレンスがよくない場合、近似はあまり良くならない。
もし、ヘアシェーディングモデルを近似する場合は、現実世界に最も近いモデルをリファレンスとして使用する。
数式を近似するときは、オリジナルの方程式を使用する。
Oren-NayarやSchlickのフレネル方程式近似などの近似式は、誤差が生じる可能性があるので使用しない。
完全に信頼できる唯一の参考資料は、常に現実の世界。


参考資料

Moving Frostbite to Physically Based Rendering 3.0

Moving Frostbite to Physically Based Rendering

 超雑訳 Moving Frostbite to Physically Based Rendering 2.0

PBRについて #1

引き続き、Frostbiteの資料を見ながら進めていきます。
関連する記事は PBRについて #0 にまとめています。

今回は Moving Frostbite to Physically Based Rendering 3.0 の 「1 Introduction」を見てみます。

※メモみたいなものなので、言葉遣いは雑です。
※個人的な解釈なので間違ってる可能性はあります。
※間違っている箇所がありましたら、ご指摘頂けると助かります。


FrostbiteにおけるPBRの中核となる原理

1つは、シーン内のすべてのオブジェクト間の視覚的一貫性を確保するために重要な、マテリアルとライティングの情報を分離する事。
PBRでは、負のライトや光の寄与の「二重計数(double counting)」などのアーティファクトなしで、すべてのオブジェクトとそのマテリアルレイヤーに同じ照明が適用される。
(これは、PBRの特徴である破綻しにくい堅牢性の事だろう。)
プロダクションの観点から見ると、これによりさまざまな環境で資産と照明リグを透過的に再利用することが容易になる。
同時に、アーティストに公開されるパラメータの数が減り、オーサリングがより直感的になる。
ただし、この分離は、パフォーマンス上の理由から、
ライティングとマテリアルがコード内で緊密に結合されているため、
オーサリングの観点からのみ言えること。

FrostbiteにおけるPBRのリファレンス

"ground truth"のリファレンス(適切に計測あるいは描画された結果)を使用している。
これはソリューションの正確さを評価するためのもの。
しかし、実際には物理的に正しいのは大きな課題であり、
現時点でのリアルタイムの性能上の制約を考慮すれば、 ゲームエンジンは今日それを達成することはできない。
まともな近似が可能な場合は、絶対的な正しさよりも信憑性が高くなる。


参考資料

Moving Frostbite to Physically Based Rendering 3.0

Moving Frostbite to Physically Based Rendering

 超雑訳 Moving Frostbite to Physically Based Rendering 2.0

PBRについて #0

今世代の家庭用ゲーム機(PS4など)などで主流となったPBRに挑戦してみます。
関連する記事は「PBR」のタグをつけています。

とりあえず、Frostbiteの資料を元に進めてみようかと思っています。
しばらくは資料を読む感じになるように思います。

自分のブログはメモとか学んだ内容を整理するためのものでもあるので、
後述の参考資料を読んで理解してもらう方が一番良いと思います。

関連記事

PBRについて #1 - twaki’s blog
PBRについて #2 - twaki’s blog
PBRについて #3 - twaki’s blog

参考資料

Moving Frostbite to Physically Based Rendering 3.0

Moving Frostbite to Physically Based Rendering

 超雑訳 Moving Frostbite to Physically Based Rendering 2.0

検証環境

The Forge を使ってみようかと思っています。(サンプルとか見て検討中)

ブログテスト

ブログテスト。

アウトプット用に日々の学びをブログにまとめてみるのが目的。

 

扱うジャンルは基本ゲームプログラム(主にグラフィックス)。

 

ストレスにならない程度にゆるゆると書いていく。

以上。