アンビエントオクルージョンちゃん

コンピュータグラフィックスについて書きますっ

SIGGRAPH2015個人的まとめだよ♪

はじめに

こんにちは♪この記事は第三回レイトレ合宿アドベントカレンダー記事だよ。

実はAOちゃんはSIGGRAPHに行っていました!すごい!というわけで適当に感想みたいなまとめみたいな記事を書くよ。ていうかレンダリングばっかです。

パストレーシング大流行

最初はパストレーシングの大流行についてだよ。まず歴史の話だけど、映画業界におけるコンピュータグラフィックスの利用というのは、VFXとフル3DCGアニメーションの二つが主要な利用法でした。そして、これらを実現するために利用されていたレンダラこそPixarが開発しているRenderManと呼ばれるレンダラでした。RenderManのレンダリングアーキテクチャはREYESというものです。REYESは"Renders Everything You Ever Saw"の略です。

REYESアーキテクチャはどちらかというとラスタライズに近いものです(詳しくはインターネットとかで調べてね♪)。長年映画業界ではRenderManを使ってVFXやCGアニメを作っていました。(もちろん内製レンダラを使っている会社もたくさんあった)しかし、REYESアーキテクチャは影や反射が苦手でした。これらはシャドウマップとかを使って頑張って表現していたわけです。シャドウマップというと今ではすっかりリアルタイム系の技法みたいな印象がありますが当初はオフラインレンダリングから生まれた手法です。

んで、ちょっと前からREYESアーキテクチャにレイトレが導入されてハイブリッドな感じになっていきました。それと同時にArnoldのようなパストレーシングベースのVFXレンダラの人気も高まっていき、2015年現在、すっかりレイトレ・パストレベースのレンダラが映画業界では大人気というわけです。

今年もパストレーシングのセッションがSIGGRAPHでは数多く行われました。その中心となったのがThe Path-Tracing Revolution in the Movie Industry(http://s2015.siggraph.org/attendees/courses/events/path-tracing-revolution-movie-industry

https://sites.google.com/site/pathtracingrevolution/)でしょう。
まず、RenderManは全面的にレイトレ中心のレンダラに移行したようです。パストレーシングを中心として、フォトンマップやVCM/UPSなどが実装されていると言います。また、10年以上前から開発が続けられているArnoldも今ではすっかり標準的な地位を確立したようです。
Disneyが2012年より開発を開始し、Big Hero 6(ベイマックス)で全面的に利用されたパストレーシングレンダラ、Hyperionは今後もDisneyの映画において中心的なレンダラになるそうです。(DisneyはHyperionアーキテクチャの説明のための動画まで作成・公開しました http://www.disneyanimation.com/technology/innovations/hyperionHyperionは、レイの反射やシェーディングの順番を各フェーズでソートすることでデータに対する一貫性を高め大規模なシーン(数十万個のユニークオブジェクトが存在する巨大都市など)を高速にレンダリングすることを可能にしたものです。
WETAはManukaという内製レンダラを使っているらしく、これもかなり意欲的なVFXレンダラに見えました。とくに、彼らは従来のRGBレンダリングを超えたフルスペクトルレンダリングにフォーカスを当てているらしく関連研究も多く発表しています。

というわけで、猫も杓子もレイトレ・パストレといった雰囲気です。その他のMLTやフォトンマップ系の手法はまだあんまり流行っていないらしく、というのもパストレと違ってこれらの手法はチューニングすべきパラメータが多かったり事前計算が必要だったりとワークフローの複雑化を招くために敬遠される傾向があるようです。(Pixarは導入してますが)
現代のCG業界はとにかく大規模が著しく、ワークフローを限界まで単純化して個々のアセットに対する時間を増やす、というのが定石のようです。こういった傾向はレンダリングしたいシーン自体の高度化によってパストレの限界を突破したいという需要によってまた変わってくるとは思いますが、しばらくは続くかもしれません。いずれにしても、今後のCG業界はレイトレーシングによるレンダリングの流行がますます強化されていくと思いました。

リアルタイムレンダリング

リアルタイムレンダリングはすっかり物理ベースレンダリングが定着して、使っていないスタジオは無い、みたいな勢いでした。物理一色ですね。というか、最早物理ベースの基礎の話なんてどこもしてなくて従来のモデルは近似が不十分だったから新しいモデルを導入しましたーとか、新しいマテリアルモデルを導入しましたー、とか実際のワークフロー(素材撮影とか)はこうこうでしたー、みたいな話ばかりです。もう完全に使いこなしてますね。

その他の、一般的なレンダリング技術についても去年に比べて今年はレベルが高く内容の濃いものだったように思えます。いよいよPS4/XBoxOneに対する知見が各社深まってきているように見えます。
また、海外では今でも各ゲーム会社がみんな頑張って内製ゲームエンジンをこぞって開発していました。EAやUbisoftみたいな大手は当然としても、100~300人程度の中小ゲームスタジオも少なくともAAA開発をしているような会社について言えば、幾つかのミドルウェア+内製レンダリングエンジン+内製のその他機能みたいな構成が多いように見えました。UEやUnityを使ってますみたいな話はほぼありませんでしたね。日本にいるとUE最強みたいなこと言ってる人もいますけど海外の有力会社はどこもUEレベルの技術開発は当然のように行っており、見習うべきところがたくさんあるように思えます。

さて、そんなリアルタイムレンダリング系セッションの中でも一番はAdvances in Real-Time Rendering in Games(http://advances.realtimerendering.com/s2015/index.html)です。GDCではリアルタイムレンダリング系の話がろくになく、ビミョーだったのですがきっとみんなSIGGRAPHまで貯めてたのでしょう。非常に充実したものでした。特に目をひくのは、ボリュームレンダリング技法の多さです。いよいよリアルタイムでも真面目なボリュームレンダリングを各社導入しはじめたというのはすごいですね!まあともかく公開される資料を見てみるといいんじゃないでしょうか。

そんな中、日本勢の発表もありました。Real-time Rendering of Physically Based Optical Effect in Theory and Practice(http://research.tri-ace.com/s2015.html)です。これは、YEBISで有名な川瀬氏と各種物理ベースレンダリングの発表で有名な五反田氏、東京工科大の柿本氏によるコースで、光学やレンズの基礎から、それらのエフェクトをリアルタイムレンダリングに落とし込むための各種手法の解説まで取り扱った充実した内容になっています。ポストエフェクトに興味のある人はぜひ読んでみましょう。

テクニカルペーパーとか

幾つかのテクニカルペーパーも見に行きましたが、Sampling & Filtering(http://s2015.siggraph.org/attendees/technical-papers/sessions/sampling-filtering)がかなり良かったです。パストレ大流行のとこでも書きましたが、最近の映画業界ではパストレばっか使うようになったわけですけど、同時にパストレ由来のノイズに苦しめられるようにもなりました。というわけで、デノイジング技術に対する需要が高まっているようで、かなり活発に研究がおこなわれているようです。
すでにDisneyやPixarのレンダラには近年の研究成果がフィードバックされたデノイザが実装されているそうです。今後もますます研究が進んでいき民生レンダラにも実装されていくことでしょう。

おわり

今年はSIGGRAPH ASIAを神戸でやります。なかなかSIGGRAPHは参加費とかのハードルが高くて…という人もこの機会に是非参加してみましょう。そしてパストレの流行を見てわかるとおり、今後ますますレイトレ技術は重要になっていきます。レイトレ合宿に参加してレイトレしましょう。

 

 

 

 

 

 

 

 

より進んだレイトレーシングのために

こんにちは、アンビエントオクルージョンちゃんです。このポストはレイトレ合宿2アドベントカレンダーの11回目だよ♪

私はレイトレーシングはあんまり詳しくないし、合宿にも参加できないんだけど、みんなのために頑張って記事を書くね。

 

いよいよレイトレ合宿も直前に迫ってきたけど、みんなちゃんとレイ飛ばしてるかな?レンダラは出来たかな?満足のいく仕上がりになっている人も、そうでない人も、今まで何度もレイを飛ばしことがある人も、今回が初めてのレイトレーシングって人も、今回の経験を忘れないでほしいんだ。

そこで、今回はより進んだレイトレーシングを作るために知っておいた方がいい知識、単語を簡単に説明していくよ。

 

基礎知識編

Radiometry

物理ベースのレイトレではRadiometryの用語を頻繁に使います。日本語だと放射測定とか呼ぶよ。

Radiance

Radiometryの用語で、放射輝度と呼びます。単位はW・sr^-1・m^-2・nm^-1だよ。一般に、レイトレーシングにおいて一本一本のレイが運ぶ物理量はこれだよ。

Irradiance

やはり、Radiometry用語で放射照度のことです。単位はW・m^−2・nm^-1。単位波長、単位面積あたりの光のエネルギーだね。なお、同じ単位でRadiosityという用語もありますが、Irradianceは入射、Radiosityは出射について指すようです。

レンダリング方程式

レンダリングのための全てを司る方程式です。あの手この手で様々な定式化が存在します。また、ボリュームレンダリングのための拡張版などもあります。Kajiyaによる1986年の論文"The Rendering Equation"が有名ですね。

 BRDF

Bidirectional Radiance Distribution Functionの略だよ。物体表面における光の入射と出射に関する振る舞いを記述する関数です。BRDF如何で、マットな見ためや金属っぽい見た目、いろんな材質が表現できます。非常に様々なモデルが提案されています。拡張も、BSSRDFなど、いろいろなものがあります。

モンテカルロ法

物理ベースにレンダリングを行うために、モンテカルロ法を用いてレンダリング方程式を解きます。これは確率的な手法なので、レンダリング結果にはノイズがのったりしますが、高次元で一般には解くのが難しい積分も扱うことが出来ます。

確率・統計論

モンテカルロ法をはじめ、レンダリングには確率を扱う状況が頻出します。確率の勉強は必須でしょう。また、それに伴い統計に関する知識も必要になることがあります。

Variance

統計の分散と同じです。レンダリング結果の高周波ノイズは分散が大きいために発生することが多いです。レンダリング技術の進歩とは、一つにはこの分散の減少との戦いであったと言えます。

Bias

こちらは少しわかりにくいのですが、解いている問題の「真値」と「推定値の期待値」の差ということになります。

Unbiasedなアルゴリズム

よくUnbiasedを標榜しているレンダリングアルゴリズムがあります。Unbiasedというのは、Biasが常に0ということです。例えば、パストレーシングはUnbiasedで、フォトンマップはBiased、ということになります。

一般にBiasとVarianceの間にはトレードオフがあり、パストレはVarianceは大きくなりノイズが発生します。フォトンマップはVarianceが小さくなりノイズの少ない、あるいは目立たない画を比較的容易に得ることが出来ます。

Consistentなアルゴリズム

また、レンダリングに関わるパラメータ、例えばサンプル数やフォトンの収集半径といったものを限界まで多くしたり、あるいは小さくしていき、極限を取った際にBiasが0になるとき、そのアルゴリズムをConsistentなアルゴリズムと呼びます。

UnbiasやConsistentといった用語は割と濫用される傾向にありますが、大事なことはアルゴリズムの性質を見極め、シーンに適合した手法を状況に応じて選択することです。Unbiasだから最強!とか、そういうことは一切ありません。

Sampling

モンテカルロ積分においては確率的に発生させたサンプルを使って結果を得ます。この過程、サンプリングはレンダリングにおいて欠かせない要素です。与えらえた確率密度関数からサンプルを効率的に得るための方法が様々に考案されています。

Importance Sampling

モンテカルロ積分において分散を減らすための最重要分野です。非常に奥が深い分野ですが、簡単に言うと、「積分対象の関数の形状になるべく近い確率密度関数から生成されたサンプルを使うことで分散を減らす」ためのテクニックです。

Diffuse面においてcosΘに比例してレイを飛ばすのもImportance Samplingの一種です。

Multiple Importance Sampling

積分対象の関数の形状に近い密度関数をうまく作れればいいのですが、現実にはそううまくいきません。そこで、複数の密度関数を使って部分ごとに良い密度関数をつかってサンプリングを行い、その結果を最後に統合する、という手法があります。これがMultiple Importance Samplingです。

たとえば、BRDFに基づいたImporance Samplingを行いつつ、光源に基づいたImportance Samplingを行い、結果をMISで統合する、といった例があります。

モンテカルロ法(Quasi-Monte Caro)

疑似乱数ではなく、低違い量列と呼ばれる数列を使ってサンプリングを行うことでモンテカルロ積分を行う、という手法があります。高次元な積分にはなかなか適用しにくいのですが、例えばピクセルサンプリングやアンビエントオクルージョンなどは比較的低次元の積分になるのでQMCを使うと効率的にノイズを減らすことが出来ます。

レンダラ開発編

シーンやメッシュ

レンダリングする対象であるシーンやメッシュの読み込みは結構大変です。しかし個人用レンダラなら何でもいいので、自分の好きな形式を使うのが良いでしょう。

広く使われている形式ならライブラリも充実しています(FBXとか)し、objとかは世の中に無限にローダーが存在します。

空間分割構造

実際にレンダラを作るうえで大事なのは高速なレイトレーシングです。このために、レンダリングするためのシーンを何らかの方法で空間的に分割する、ということが行われます。分割のためのデータ構造は、たとえばKD-TreeやOctreeなど様々なものがありますが、人気なのはやはりBounding Volume Hierarchyでしょう。

Raytracing.jp - material

にもいくつか情報があります。

アーキテクチャ

レンダラ全体の構造を考えるのは大変なものです。とりあえず、出発点としてはRay Tracing from the Ground UpやPhysically Based Renderingを参考にするのが良いと思います。

画像入出力(HDR

LDRな普通の画像の入出力については世の中に無数に方法があるので問題ないでしょう。問題はHDR画像の入出力です。物理ベースなレイトレの結果は物理的な値であり、非常にレンジの広いものになるためHDR画像を取り扱えたほうが良いでしょう。

といっても、HDR画像のフォーマットはそんなに多くなく、.hdrか.exr形式を使うことになるでしょう。前者はフォーマットの解説が日本語でも英語でも多々あるので自分で簡単に実装できます。後者はOpenEXRを使うのが良いでしょう。

Depth of Field

被写界深度のことです。レンズのボケを再現でき、これを入れると一気にレンダリング結果が写真っぽくなるのでお勧めのエフェクトです。実装はそんなに難しくないので調べてみると良いでしょう。

Motion Blur

モーションブラーのことです。ダイナミックな絵を作ることが出来、これを入れると一気にレンダリング結果が良くなります。実装も、ただ絵を出すだけなら簡単です。

Post Process

あとは、その他CG分野におけるあらゆるポストプロセスを使えばどんどんリッチな絵になるでしょう。

レンダリングアルゴリズム

基本的にサーフェスレンダリングのための有名手法を挙げました。ボリュームレンダリングはまた今度。

パストレーシング

具体的なレンダリングアルゴリズムの一つです。レンダリング方程式に対して直接的にモンテカルロ積分を適用することで導出されます。映画業界では広く使われており、ArnoldやCorona Rendererはこのアルゴリズムを使っています。

パストレーシングはカメラ側からレイを飛ばし、各点での反射方向をサンプリングしていくことでカメラから光源までのパスをサンプリングします。また、各点からExplicitに光源をサンプリングすることで効率的にノイズを減らす、といった拡張が一般に知られています。

ライトトレーシング

ライトトレーシングでは光源側からレイを飛ばしてカメラまでのパスをサンプリングします。

双方向パストレーシング

カメラ側と光源側の両方からレイを飛ばし、その結果を組み合わせることで単一のアルゴリズムではサンプリングしにくいパスも効率的にサンプリングする、というアルゴリズムです。組み合わせる際にMultple Importance Samplingを使います。

Metropolis Light Transport

Metrpolis-Hastings法という、任意の関数を確率密度関数としてサンプルを生成する手法があります。これを応用したレンダリングアルゴリズムです。Markov Chaing Monte Carloという領域に属する手法で、あるサンプルを元に次々にサンプルを生成することで任意関数に対する効率的なサンプリングを実現します。

フォトンマッピング

光源から発射したフォトンをシーン内に保存、カメラ側からレイを飛ばしてフォトン収集してレンダリング、という2パスのアルゴリズムです。ピクセル間でフォトン情報を共有することでノイズが目立たない画像を比較的容易に得ることができます。

また、スペキュラが関係するシーンに強いのも特徴で、SDS("スペキュラ"ー"ディフューズ"-"スペキュラ")と呼ばれるパスも効率的に扱うことが出来ます。

プログレッシブフォトンマッピング

従来のフォトンマッピングフォトンを保存しておくためのメモリがしばしば大きくなるという問題がありました。そこで、逐次的にフォトンマッピングを行い結果を改善することで固定のメモリ量で大量のフォトンレンダリングに使用することができるようになりました。それがこのプログレッシブフォトンマッピングです。東大の蜂須賀先生が開発しました。

ラジオシティ

レンダリング対象のシーンをパッチに分割し、パッチ間の光輸送をフォームファクタマトリックスとして計算、さらに光源を与えることで各パッチにおけるラジオシティを求める方法です。一度ラジオシティを計算してしまえば、カメラ位置が変わっても高速に結果を変更できるため建築分野では昔からよく使われているようです。

ただし、アルゴリズムの性質上Diffuse(Lambertian BRDF)なパッチ以外を扱うのが大変という欠点もあります。

インスタントラジオシティ

フォトンマッピングに近い方法です。光源からフォトンを発射し、シーンに保存します。このフォトンをVirtual Point Lightという点光源とみなし、レンダリング時にはこの点光源からの影響を求めます。Reflective Shadow Mapsのようなリアルタイム手法への拡張も盛んです。この手法は大量の点光源からの影響を効率的に計算する必要がありり、そのための手法がライトカットです。これは、VPLを木構造にして一定数のVPLからの影響をまとめて計算することで計算の効率化を図るものです。

Energy Redistribution Path Tracing

基本的にはMetropolis Light Transportなのですが、この手法は短めのMCMCチェインを大量に発生させることでパストレーシングっぽい要素もとりいれています。

Population Monte Carlo Rendering

Population Monte Carloと呼ばれるモンテカルロ積分のための方法をレンダリングに応用したものです。

 Vertex Connection and Merging (Unified Pathspace Sampling)

最近はやりの手法です。これは、双方向パストレーシングによってサンプリングされたパスとフォトンマッピングによってサンプリングされたパスを統合してレンダリングするという手法です。これらのパスは、物理的に同じ(とみなしていい)パスでも数学的には別の測度による確率密度関数からサンプリングされるため、従来のMultiple Imporntace Samplingフレームワークを直接適用できませんでした。そこで、今回の新しい手法では頂点を増やしたりマージしたりしてMISします。

基本的に、両者のいいとこどりを出来るため効率が良いです。

アルゴリズムごとの比較

一般に、双方向パストレーシングのようなパストレーシング系の手法はBRDFに基づいた効率的なImportance Samplingを行えるため、Glossyな物体に対して効率が良いと知られています。一方、スペキュラの絡むSDSパスのような、複雑なコースティクスに対しては弱いです。

それに対し、純粋なフォトンマッピング系はコースティクスの描画には強いのですが、カメラ側のレイについてBRDFの知識を使えないためHighly Glossyな物体に対しては弱いといわれています。

また、Metropolis Light Transport系の、MCMCレンダリングアルゴリズムは上二つでは扱いにくい遮蔽の多い難しいシーンもかなりうまく対処できる一方、全体的に癖がありサンプルのスタックなどの問題やパラメータチューニングが直感的でないといった問題もあります。

新しく提案される手法は、大抵上記のアルゴリズムをうまく組み合わせる、といったものが多く、たとえばGlossyにも強いフォトンマッピングを作るためにカメラ側からパストレーシングして各点でフォトンを収集する、といった手法もあります。(VCMとは違う)

 

いずれにせよVCM(UPS)の登場により、双方向パストレーシングとフォトンマッピングは統一されました。また、Multiplex Metropolis Light Transportという新しい手法によってMLTと双方向パストレーシングも統合されました。今後はますますアルゴリズム同士が統合されていき、よりロバストな手法が生まれることでしょう。

まとめ♪

みんなレイトレがんばってね♪

スクリーンスペースアンビエントオクルージョンまとめ

はじめに

こんにちは!アンビエントオクルージョンちゃんです。

前回の記事ではアンビエントオクルージョンの原理について解説しました。そこで、今回は主にゲーム等のリアルタイムアプリケーションにおけるアンビエントオクルージョンのアルゴリズムについて解説していきたいと思います。モダンなゲーム開発におけるグラフィックスの歴史とはオフラインレンダリングによるフォトリアルなグラフィックスをいかに30~60FPSで実現するかの歴史でした。アンビエントオクルージョンをリアルタイムで実現しようという流れも当然のものだったと言えるのかもしれません。

続きを読む

アンビエントオクルージョン・はじめの一歩

はじめに

こんにちは!アンビエントオクルージョンちゃんです。

アンビエントオクルージョンを実現する技法は数多くあれど、そもそもアンビエントオクルージョンが一体何を意味するのか、という点については意外と見過ごされているような気がします。そこで、アンビエントオクルージョンについて基礎、原理から解説してみたいと思います。

元々、アドホックで場当たり的な要素の強いアンビエントオクルージョンですが、今回はあくまで物理ベースな大域照明技術の一つとして解釈・説明していきたいと思います。

 

続きを読む