>   >  Houdini Cook Book:Vol.93 Dive into Mantra
Vol.93 Dive into Mantra

Vol.93 Dive into Mantra

Mantraの詳細を紹介します。

TEXT_秋元純一 / Junichi Akimoto(トランジスタ・スタジオ/ディレクター)
日本でも指折りのHoudini アーティスト。
手がけてきた作品は数々の賞を受賞している。
代表作に、HIDETAKE TAKAYAMA『Express feat. Silla(mum)』など。
www.transistorstudio.co.jp
blog.junichiakimoto.com


EDIT_小村仁美 / Hitomi Komura(CGWORLD)

Houdiniと共に歩んできた歴史あるレンダラ

Houdiniは、Mantraというレンダラと共に歩んできた歴史があります。その長い歴史の中で、Mantraは大きく進化を遂げてきました。近年、GPUパワーを活用した高速なレンダラが徐々に浸透しつつあります。確かにGPUの力は強大で、その高速なレスポンスは日本のCG制作にとって、なくてはならない非常に強力なツールだと思います。また、レンダリングさえもしない、リアルタイム性を求めるながれも大きくなり、将来的にはCPUベースのレンダリングは淘汰される可能性があります。

そんな中、伝統的とも言える設計の下発展を続けるレンダラ、それがMantraです。Houdiniのバージョンも17を数えます。今回は、時代に見合った機能を追加し続けるMantraの世界を紹介します。古き良きアプローチから現代的なアプローチまでを網羅して、シチュエーションに最適解をもたらすための方法論を考えていきたいと思います。今回の内容は、2回に渡ってMantraとMaterialの両方から解説していく予定です。

今回のHoudiniプロジェクトデータはこちら

01 Engine

レンダリングのエンジンを解説します。


Mantraは大きく3つのレンダリングエンジンに分けられます。1つめは、Micropolygon Renderingです。これは、RenderManが使用していたREYESというアルゴリズムを踏襲したもので、いわばScanline Renderingと呼ばれるものです。特徴としては、レンダリング時にカメラ内(スクリーン内)に入ってきたプリミティブを分割してBoundを取ります。その後、スクリーン内に入っているプリミティブはさらに細かくMicropolygonに分割されます。その細かくされたMicropolygonの頂点に対してShadingを行い、Pixel内を指定したSampleで頂点のカラーをサンプリングします。最後にFilterを適用してレンダリングが完了します。

このため、ディスプレイスメントやモーションブラーなどが得意とされてきました。ただ、近年では、クオリティが求められるレンダリングには使用されなくなってきています。設計の古さから、効率を高めるための設定がマニュアルすぎると言うのも欠点のひとつです。また、その仕様により、スクリーンに入ってくるプリミティブはもれなく計算が行われてしまうこともデメリットになります。ただし、シチュエーションによっては、Scanlineの特性を活かした高速なレンダリングを可能とします。ラインやポイントのレンダリングや、トゥーン表現の際にその力を発揮します。

2つめはRay Tracingです。このエンジンは、デフォルトで最も使われるものです。Ray Tracingはカメラからのプライマリレイがジオメトリに衝突した際にシェーディングが行われ、そこからさらにセカンダリレイが放たれ、それらが最終的にサンプリングされてPixelの色となります。Pixel Sampleでプライマリレイの本数を指定し、Ray Samplesでセカンダリレイを指定します。この際、Noise Level以下のノイズになるまで、Max Ray Samplesで指定された数までレイを飛ばします。こうすることで、AdaptiveなSampleが可能になっています。

Micropolygon Renderingと大きくちがうところは、レイを飛ばす点です。このため、反射や屈折などを容易に計算することが可能です。現状では、Houdiniにおけるデフォルトのエンジンになっており、メモリなどの管理は最適化されているため、通常利用の場合は最速のエンジンとなっています。ただ、レイを飛ばすという性質から、どうしてもノイズが発生してしまいます。プライマリレイのみであればノイズは発生しませんが、セカンダリレイをサンプリングする仕様上、避けられない問題です。

最後はPhysically Based Rendering(PBR)です。Ray Tracingに似ていますが、大きく異なる点として、BSDFによって、物理的に正しいセカンダリレイの反射をシミュレーションする点があります。BSDFとは、Bidirectional Scatter Distribution Function(双方向散乱分布関数)を指します。すなわち、物理的に正しい表面の反射を計算するためのシェーディングモデルを使用して、パストレースをします。このエンジンは特にシェーダ側の設定が重要で、BSDFをシミュレーションできるマテリアルを構築することがカギとなります。その他の設定はRay Tracingに準拠しており、導入しやすい設計と言えます。


今回、3つのエンジンを比較するため、それぞれの特性を活かせるマテリアルを用意しました。Micropolygon Renderingでは、Scanlineの特性を活かすために、Illuminance Loop【A】を使用して、サーフェスとライトのベクトルから内積【B】を求めた設定にしています。

Ray Tracingでは、単純なLambert Model【C】を使用しています。Physically Based RenderingはBSDFに対応しているPBR Diffuse【D】を使用して、それぞれレンダリングしています。

シチューションは、Point Light【1】とArea Light【2】の2種で比較しています。それぞれ見比べてみると、Physically Based Renderingは他2つより少し明るい結果となっています。これは、レイが到達した際に計算される反射や光の値が異なるからだと予測されます。

また、Point Lightの場合は影に大きなちがいはありませんが、Area Lightの場合、そのノイズに大きく差が見られます。Ray TracingおよびPBRでは、Max Ray Samplesの数を1に設定しています。これは、セカンダリレイをもたないMicropolygon Renderingに配慮したものです。それでも、結果としてはご覧の通りです。そもそも、Micropolygon Renderingには面積をもったライトの概念がなく、このようなレンダリングに最適化されていません。逆に、PBRでは点のように面積をもたないライトがそもそも物理的にありえないため、アーティファクトの元となってしまいます。これにより、それぞれに特徴をもっていることが確認できました。

次ページ:
02 Setting

その他の連載