lucille グローバルイルミネーションレンダラ ユーザーズ...
TRANSCRIPT
Lucy Model c© Stanford Computer Graphcis Laboratory
lucille|グローバルイルミネーションレンダラユーザーズマニュアル
( version 0.2ドラフト版 : 平成 16年 10月 19日)
Syoyo Fujita
目次
第 1章 注意 1
第 2章 lucilleとは? 22.1 特徴 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.2 インストールと設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2.1 ソフトウェアのダウンロード . . . . . . . . . . . . . . . . . . . . . . . . . . 32.2.2 ソフトウェア構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.2.3 ソースからのコンパイル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3 コンパイルオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
第 3章 チュートリアル 73.1 初めてのレンダリング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.2 カメラを配置する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.2.1 カメラの設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83.3 RenderManについて . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.3.1 RenderMan(RIB)とは? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83.3.2 RenderManの更なる情報について . . . . . . . . . . . . . . . . . . . . . . . 9
第 4章 シーン記述 104.1 レンダリング設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.1.1 出力画像フォーマットの設定 . . . . . . . . . . . . . . . . . . . . . . . . . . 104.1.2 レンダリングサイズの設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.2 グローバルイルミネーション設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114.2.1 フォトンマッピング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114.2.2 メトロポリス光輸送 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124.2.3 準モンテカルロ法 (QMC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
第 5章 シェーダ記述 135.1 シェーダアーキティクチャ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.1.1 シェーダ利用の流れ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145.2 テクスチャマッピング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.2.1 読み込めるテクスチャ画像フォーマット . . . . . . . . . . . . . . . . . . . . 145.3 シェーダ版テクスチャマッピング . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
第 6章 制限 166.1 RIB関連 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166.2 レンダリング関連 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
i
6.3 シェーダ関連 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
第 7章 プログラムリファレンス 177.1 lsh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177.2 sl2c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177.3 rockenfield . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187.4 silvestri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
第 8章 RIBリファレンス 198.1 ジオメトリ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
lucilleユーザーズマニュアル ii
第1章 注意
本書はまだ書きかけです。そのため欠けている部分や間違いのある部分もあるので注意してください。
1
第2章 lucilleとは?
lucille (ルシール)は、グローバルイルミネーション (大域照明)アルゴリズムを実装したレンダラです。
lucilleの開発の一番の目的は、各種グローバルイルミネーションアルゴリズムの実装を通して、(自分を含め)レンダリング研究者やレンダラ書きに最新のレンダリング研究の情報を与えることです。その一方で、一般的なグローバルイルミネーションレンダラとしても使えることも目指しています。
(a) (b)
図 2.1: (a)グローバルイルミネーションなし。 (b)グローバルイルミネーションあり。シーンモデル (Sponza Atrium)の著作権はMarco Davoic氏に帰属します
グローバルイルミネーションとは、光の伝播のシミュレーションを現実世界の物理学の法則になるべく基づいてレンダリング処理を行なう手法です。図 2.1にグローバルイルミネーションを用いてレンダリングした画像と、用いないでレンダリングした画像を示します。グローバルイルミネーションを考慮することにより、直接に光の当たらない建物の隅のほうにも反射した光が行き届いてより写実的な画像となっているのが見て取れます。
2.1 特徴lucilleの特徴は以下の通りです。
• グローバルイルミネーション
– メトロポリス光輸送
2
2.2. インストールと設定 第 2. LUCILLEとは?
– フォトンマッピング
– パストレーシング
– モンテカルロ分散レイトレーシング
• RenderManインターフェイス
– RIB形式のシーンファイルフォーマット
• シェーディング言語 (13ページ)
– RenderManシェーディング言語のサポート
– C言語シェーダによる高速なシェーダ実行
• HDRI
– HDRIによるライティング
– .hdr, OpenEXRフォーマットでのレンダリング画像の保存
• 並列レンダリング
– マルチスレッドレンダリング
– MPIによる複数マシン間での並列レンダリング
• クロスプラットフォーム
– Mac OS X
– Linux
– Windows 2000/XP
• SIMD最適化レイトレーシング (2.5倍程度の高速化)
– Intel SSEの使用
– PowerPC AltiVecの使用
• C言語で記述
2.2 インストールと設定2.2.1 ソフトウェアのダウンロード
lucilleのバイナリパッケージとソースコードは、
http://lucille.sourceforge.net/
から入手することができます。WindowsとMac OS Xにはバイナリパッケージのインストーラが用意されています。
lucilleユーザーズマニュアル 3
2.2. インストールと設定 第 2. LUCILLEとは?
2.2.2 ソフトウェア構成lsh(lucille shell)
レンダラを行なうコマンドラインで動作するレンダラプログラム本体です。レンダラコアライブラリである libribを利用しています。
sl2c(RenderMan Shader Language to lucille C Shader translator)
RenderManシェーディング言語から lucille Cシェーダに変換するプログラムです。
rockenfield
フレームバッファ表示を行なうツールです。また .hdr形式の画像ファイルを読み込んで表示することもできます。
silvestri
lshを呼び出す pythonで記述されたGUIフロントエンドです。silvestriを動作させるにはシステムに python (http://www.python.org/)とwxPython (http://www.wxpython.org/)が別途システムにインストールされている必要があります。
2.2.3 ソースからのコンパイルlucilleをコンパイルするためには、C言語コンパイラが必要になります。gccを用いる場合は、
gcc 3.2以降を使用してください (3.2以前だと SSE, AltiVecのコードをうまくコンパイルできないため)。
Mac OS X lucilleのソースコードを展開したディレクトリで以下のコマンドを実行します。
$ ./configure
$ make
パフォーマンスを重視して最大の最適化 (AltiVec最適化を含む)を行なってコンパイルするには、以下のようにします。
$ ./configure --disable-debug --enable-altivec
$ make
linux(x86) lucilleのソースコードを展開したディレクトリで以下のコマンドを実行します。
$ ./configure
$ make
パフォーマンスを重視して最大の最適化 (SSE最適化を含む)を行なってコンパイルするには、以下のようにします。
$ ./configure --disable-debug --enable-sse
$ make
lucilleユーザーズマニュアル 4
2.3. コンパイルオプション 第 2. LUCILLEとは?
Windows cygwin 環境でコンパイルする場合について解説します。lucille のソースコードを展開したディレクトリで以下のコマンドを実行します。
$ ./configure
$ make
パフォーマンスを重視して最大の最適化 (SSE最適化を含む)を行なってコンパイルするには、以下のようにします。
$ ./configure --disable-debug --enable-sse
$ make
2.3 コンパイルオプション上記のコンパイルでは、最低限の機能しか利用しません (外部ライブラリなしでコンパイルできるようにするため)。以下には lucilleがサポートするコンパイルオプションの一覧です。
• --enable-altivecAltiVec(Velocity Engine)による最適化を有効にしてコードをコンパイルします。PowerPCG4, G5 の CPU で有効です。初期設定では AltiVec による最適化は無効になっています。PowerPC G4以上の CPUの場合、通常はこのオプションを指定してパフォーマンスを向上させてください。
• --enable-sseSSE(Intelストリーミング SIMD拡張命令)による最適化を有効にしてコードをコンパイルします。 Pentium III以上相当の CPUで有効です。初期設定では SSEによる最適化は無効になっています。Pentium III以上の CPUの場合、通常はこのオプションを指定してパフォーマンスを向上させてください。
• --enable-debugデバッグビルドを作成します。初期設定ではデバッグは無効 (リリースビルドを生成)になっています。通常の利用では指定しません。開発、デバッグ目的の時のみ指定してください。
• --enable-threadMac OS Xと Linuxでは pthreadを利用して、WindowsではWin32APIによるスレッド関数を利用して、マルチスレッドによるレンダリング処理を行ないます。デュアル CPU構成のマシンや、ハイパースレッディング機能が有効な Pentium4搭載マシンなどの環境でレンダリング処理の高速化が期待できます。ただし、現在 gccでは、pthreadと SSEを同時に利用するとうまく動きません (対応中)。
• --with-openexrILM 社が読み込み・書き込みライブラリをオープンソースで提供する画像フォーマットOpenEXRによるHDR形式のレンダリング画像の保存を可能にします。あらかじめOpenEXRをシステムがインストールされている必要があります。OpenEXRパッケージはhttp://www.openexr.org/から入手することができます。
• --with-mpiMPI による並列レンダリング機能を組み込むことができます (linux クラスタでのみ動作確
lucilleユーザーズマニュアル 5
2.3. コンパイルオプション 第 2. LUCILLEとは?
認)。MPI(Message Passing Interface)ライブラリがすでにマシンにインストールされている必要があります。
lucilleユーザーズマニュアル 6
第3章 チュートリアル
3.1 初めてのレンダリング最小で単純なRIBファイルを作成します。テキストエディタを開いて以下の内容を書き、tut1.ribという名前で保存します。
##RenderMan RIB-Structure 1.0
version 3.03
WorldBegin
Surface "constant"
Polygon "P" [ 0.500000 0.500000 0.500000
0.500000 -0.500000 0.500000
-0.500000 -0.500000 0.500000
-0.500000 0.500000 0.500000 ]
WorldEnd
この RIBファイルを、コマンドラインから lshでレンダリングします。コマンドラインから、tut1.ribの存在するフォルダに移動し、以下のコマンドを入力します。$はコマンドプロンプトを表します。 lshにはすでに実行パスが通っているものとします。
$ lsh tut1.rb
レンダリングが成功すると、カレントディレクトリに untitled.hdrという名前でレンダリング画像が保存されます。untitled.hdr は lucille のデフォルトのレンダリング画像の保存ファイル名になります。この .hdr形式の画像ファイルは rockenfieldで表示することができます。
$ rockenfield untitled.hdr
lucilleは、RIB(RenderMan Interface Bytestream)をファイルフォーマットとして採用しています。つまり lucilleのシーン記述を習得することは、 RenderMan(RIB)を習得することと同等です。そのため、このチュートリアルでは RenderManの入門も兼ねながら lucilleの使い方を解説していきます。
3.2 カメラを配置するシーンにカメラを配置しましょう。しかし、RenderManでは、”カメラをこの位置に配置して、向きはあっちの向きで...”という風にカメラを配置する概念はありません。その代わり、物体を座標変換 (移動・回転・スケール)させることでカメラの配置を実現します1。 RenderManでは、通常カメラの位置はシーンの位置に対して相対的に配置されます。つまり、
1この方法は直感的ではないので、手作業で自由にカメラ位置を指定するのはなかなか難しいでしょう。なるべくであれば RIB出力をサポートしているモデラを使って、モデラ側でカメラの設定をしたほうが賢明です
7
3.3. RENDERMANについて 第 3. チュートリアル
カメラの位置は固定で、シーンを動かすことでカメラの位置を設定します。 シーンの配置は、座標変換により行われます。今回の RIBファイルは以下のようになります。テキストエディタで以下の内容を書き、 tut2.ribという名前で保存します。
##RenderMan RIB-Structure 1.0
version 3.03
Perspective 90.0
Translate 0.0 0.0 1.0
Rotate 40.0 -1.0 1.0 0.0
WorldBegin
Surface "constant"
Color [ 0.2 0.4 0.6 ]
Polygon "P" [ 0.5 0.5 0.0
0.5 -0.5 0.0
-0.5 -0.5 0.0
-0.5 0.5 0.0 ]
WorldEn
コマンドラインから、以下のようにしてレンダリングを行います。
$ lsh tut2.rib
3.2.1 カメラの設定それでは、 RIBに新しく追加されたしくみを 1行づつ見ていきましょう。
Perspective 90.0
Perspectiveは、カメラを透視投影カメラにすることをレンダラに指示します。つづく 90.0はカメラの視野角です。この値は [0, 180]の間で度数で設定します。0度に近づくほど遠近感が無くなり、0度のとき並行投影カメラと同じ働きをします。 180度に近づくほど遠近感が大きくなります。180度のとき魚眼レンズカメラと同じ働きをします。
Translate 0.0 0.0 1.0
Translateは、この行以降に定義されるシーンを移動させます。x, y,z軸それぞれの移動量を設定します。今回は (0,0,1)分だけシーンを移動させます。RenderManは左手座標系なので、これはシーンを画面奥側 (正の z軸)に 1移動させる操作になります。相対的に考えれば、これはカメラを (0,0,−1)移動する、つまりカメラを画面手前 (負の z軸)に移動させるのと同じことになります。この Translateの設定により、シーンはカメラから遠ざかります。
3.3 RenderManについて3.3.1 RenderMan(RIB)とは?
RenderMan(RIB)は、米 Pixar社により仕様がオープンに策定されたフォーマットです2。Ren-derManは、映画などのプロダクションで用いられている事実上業界標準の商用レンダラ (Photo-Realistic RenderMan, prman)のフォーマットとして用いられています3。
2仕様書は https://renderman.pixar.com/products/rispec/index.htmから自由に入手することができます3しかし最近はMenralRayなどの他の商用レンダラも多く使われてきているようです
lucilleユーザーズマニュアル 8
3.3. RENDERMANについて 第 3. チュートリアル
少し話しが大げさですが、つまり RIBフォーマットをサポートするレンダラでは、理論的にはファインディング・ニモのシーンを寸分違わず同じにレンダリングすることができるのです。ファインディング・ニモは Photo-Realistic RenderManでレンダリングされています。
3.3.2 RenderManの更なる情報について残念ながら、日本語の書籍で RenderMan について解説している書籍はほとんどありません。
「実践CGへの誘い」(構造計画研究所)は RenderManが発表された時期に発行された唯一の書籍でしたが、現在は絶版になっています。今のところ日本語の RenderManの解説書は「AdvancedRenderMan日本語訳」(ボーンデジタル)しかありません。しかし「Advanced RenderMan日本語訳」の内容は、RenderMan中級者から上級者向けをターゲットとしており、入門には適していません。しかしシェーディング言語の章は、読む価値があります。
以上により、現状、RenderManについて習得するは、英語の書籍・Webサイトを参考にすることになります。以下に RenderMan関係の書籍とWebサイトを掲載します。
• 書籍
– The RenderMan CompanionRenderManの古典的な解説書。この邦訳が「実践 CGへの誘い」になっています。入門から中級者向けの内容になっていますが、すべて C言語から RenderManを取り扱う例になっています。
• Webサイト
– RenderMan c©Repositoryhttp://www.renderman.org/RenderMan 関連のWeb サイトや書籍集へのリンクが多くあります。また、サンプルシーンなども掲載されています。
– The RenderMan Academyhttp://rendermanacademy.com/RenderManの入門から上級向けまでの、幅広いチュートリアルが掲載されています。
lucilleユーザーズマニュアル 9
第4章 シーン記述
4.1 レンダリング設定4.1.1 出力画像フォーマットの設定レンダリング結果の出力画像ファイル名とその画像フォーマットの指定は、Display で行ない
ます。
Display name type mode (parameterlist)
name 出力画像のファイル名を指定します。
type 出力画像のフォーマットを指定します。lsh -infoとすることで利用可能なフォーマットの一覧を確認することができます。 "file"とした場合、 nameの拡張子から画像フォーマットを自動で判断します。サポートされていない画像フォーマットが拡張子に指定されていたり拡張子がない場合は、lucilleのデフォルト画像フォーマットである .hdr形式で画像を保存します。このとき拡張子は .hdrに変更になります。
mode 出力画像にどの色要素を出力するかを指定します。現在の lucilleでは "rgb"のみの対応になります。
parameterlist 画像フォーマット typeに対するオプションを指定します。省略可能です。
aa
例 1 .hdr形式で画像を image.hdrという名前で保存する例です。
Display "image.hdr" "hdr" "rgb"
例 2 画像フォーマットを拡張子から判断する (この例ではOpenEXR形式でファイルが保存される)
Display "image.exr" "file" "rgb"
4.1.2 レンダリングサイズの設定レンダリングサイズの指定は、Formatで行ないます。
Format xresolution yresolution pixelaspectratio
xresolution レンダリングサイズの横のピクセル数を整数で指定します。1より小さい値が指定されたときは 1に設定されます。
10
4.2. グローバルイルミネーション設定 第 4. シーン記述
yresolution レンダリングサイズの縦のピクセル数を整数で指定します。1より小さい値が指定されたときは 1に設定されます。
pixelaspectratio ピクセルのアスペクト比を指定します。現在の lucilleではピクセルアスペクト比は実装されていないため、この値は単純に無視されて内部では 1と解釈されます。
aa
例 レンダリングサイズを 512 x 512に指定します。Format 512 512 1
4.2 グローバルイルミネーション設定グローバルイルミネーションの設定は、RIBの拡張可能なオプションを通して設定します (RIB
自体にはグローバルイルミネーションを設定するコマンドはない)。この設定は lucille独自のため、他の RenderManレンダラでは解釈することができません1。
4.2.1 フォトンマッピングlucilleでフォトンマッピングを行なうには、まずフォトンのエミッタ (光源オブジェクト)を配
置する必要があります。lucilleでは、エリアライトを設定することでエミッタを実現します。現在のところ、フォトンのエミッタとして平行光源や点光源などはサポートしていません。エリアライトのみになります。エリアライトには、任意のポリゴンオブジェクトを設定できます。エリアライトの設定は以下のように行ないます。
AttributeBegin
# エリアライトを作成し、ライト番号を 1 にするAreaLightSource "arealight" 1 "lightcolor" [1.0 0.95 0.8]
# シンプルな四角形ポリゴンPolygon "P" [343 548.8 227.0
343.0 548.8 332.0
213.0 548.8 332.0
213.0 548.8 227.0]
AttributeEnd
まずエリアライトを定義するには、どの Polygonコマンドをエリアライトとして解釈させるのかを知らせるために、必ず AttributeBegin/AttributeEndで囲む必要があります。そして、Attribute-Begin/AttributeEndブロックの中でAreaLightSource以降に指定された Polygon関連のジオメトリコマンドが、エリアライトのオブジェクトとして解釈されます。
現在の lucilleの制限により、光源は 1つのみ指定できます。光源が複数定義された場合は、最後の光源が有効になります。
AreaLightSourceの lightcolorパラメータは lucilleが解釈するオプションです。ライトの色をRGB各 [0.0,1.0]の範囲で指定します。
1ただし、prmanではバージョン 11からグローバルイルミネーションが搭載されるようになりました。今後 lucilleのグローバルイルミネーションの設定は、なるべくこの prmanの設定方法と同じにしていこうと考えています。
lucilleユーザーズマニュアル 11
4.2. グローバルイルミネーション設定 第 4. シーン記述
フォトンマップオプション設定
$ Option "photonmap" "nphotons" [N]
放出するフォトンの数を N個に設定します。通常のシーンであれば数十万から数百万程度の値をNに設定します。放出するフォトンの数が多いほど結果のレンダリング品質は高くなりますが、レンダリング時間は増加します。
$ Option "photonmap" "max\_gather\_radius" [N]
放出されたフォトンを用いてシェーディング処理を行なう時に、シェーディング点のまわりのフォトンの探索半径を Nに設定します。この半径はシーンサイズに比例して設定します。小さ過ぎても大き過ぎてもレンダリング品質は低下します。シーンに対する最適な Nを探すのはなかなか困難な作業になります。
$ Option "photonmap" "max\_gather\_photons" [N]
放出されたフォトンを用いてシェーディング処理を行なう時に、考慮するシェーディング点のまわりのフォトンの数の最大数を Nに設定します。この個数が多いほど通常はレンダリング品質が向上します。max gather radius内のフォトンの個数がmax gather photonsで指定した個数より少ない場合は、max gather radius内のフォトンの個数が最大数になります。
$ Option "raytrace" "finalgather\_rays" [N]
ファイナルギャザー (シェーディングを行なうために、サーフェスに全方向から入射する光を集める操作)のために、探索するレイの数をNに設定します。この値が少ないと、結果のレンダリング画像にノイズが出やすくなります。それなりにノイズがあるのを許容する、計算時間も耐えられる程度を望むのであれば、50から百数個程度にNを設定します。ノイズの無い高品質なレンダリング画像を望むのであれば 500から 3000程度を指定します。ただしレンダリング時間はかなりのものになります。
4.2.2 メトロポリス光輸送
4.2.3 準モンテカルロ法 (QMC)
lucilleユーザーズマニュアル 12
第5章 シェーダ記述
RIBをサポートするレンダラの大きな特徴の一つは、シェーダを使うことができることです。
5.1 シェーダアーキティクチャlucilleでは、RenderManシェーディング言語 (サーフェスシェーダのみ)と、C言語によるシェー
ダをサポートします。
lucille では、C 言語でシェーダを記述し、それを C コンパイラでコンパイルして DLL を作成し、レンダラがシェーディング計算時にその DLLを呼び出す仕組みになっています (Mental Rayのシェーダアーキティクチャと同じ)。
C言語でシェーダを書くことにより、通常のシェーディング言語に比べて、複雑な処理を行ったり、C言語のライブラリを利用することができるという利点があります。
しかし、RenderManとの互換性や RenderManシェーディング言語の記述のしやすさを考えて、lucilleでは、RenderManシェーディング言語からこの lucille Cシェーダに変換するトランスレータプログラム ( sl2c )も用意しています。
これにより、通常のシェーダの記述は高抽象レベルの RenderMan シェーディング言語で記述し、RenderManシェーディング言語では難しい処理やより柔軟なシェーディング計算を行いたい場合は低レベルの Cシェーダで記述する、ということができます。
Cシェーダの利点と欠点を挙げると以下のようになります。
• 利点
– Cコンパイラでシェーダをコンパイルするので、 Cコンパイラの最適化機能を利用できる
– ネイティブコードになるので、シェーダの実行が高速に行える
• 欠点
– OSごとに DLLのアーキティクチャが異なるのでコンパイルし直さなくてはならない
– 別途 Cコンパイラが必要 (ただし gcc, mingwなどのフリーソフトウェアのコンパイラを使うことができる)
13
5.2. テクスチャマッピング 第 5. シェーダ記述
5.1.1 シェーダ利用の流れ例として、lucilleで RenderManシェーディング言語 (RSL)によりシェーディング処理を行う時
の流れを説明します。
1. RSLでシェーダを記述する
2. Cシェーダへのトランスレータ sl2cで、 RSLのシェーダを Cシェーダに変換
3. Cコンパイラ (gcc, Visual C++など)で Cシェーダをコンパイルし DLLを作成
4. シェーダパスが通っているディレクトリに DLLをコピーする
5. レンダリング時にレンダラが、対応するシェーダの DLLを呼び出してシェーディング処理を行う
5.2 テクスチャマッピングテクスチャマッピングも、RIBではシェーダを経由して行ないます。つまり RIB自体にはテクス
チャマッピングの設定を行なうコマンドはありません。
ここが他のレンダラや他のシーン記述フォーマットと、 RIBが異なる大きな点です。他のレンダラでは、テクスチャマッピングの指定もシーン記述フォーマットの中で行ないます (多くの場合、シェーダを搭載していないため)。
これは RIBにとっては、テクスチャを張りたいためにシェーダを学習するという良い機会を与えることになります。しかし逆に、ただとりあえずテクスチャを張りたいのにシェーダを書かなければならないというまどろっこしさも感じることもあります。
そこで、lucilleでは、単純なテクスチャマッピングについては RIBで記述することができるように変えてあります (これは RenderMan Interface仕様では定義されていない特徴です)。
5.2.1 読み込めるテクスチャ画像フォーマットlucilleでは、現在以下のフォーマットのテクスチャ画像を読み込むことができます。
• Radiance(.hdr)形式
• OpenEXR(.exr)形式
• jpeg形式
lucilleでは、レンダラ内部ではテクスチャデータを浮動小数点として扱います。そのため jpeg形式のテクスチャ画像は、0は 0.0、 255は 1.0へと変換されます。
lucilleユーザーズマニュアル 14
5.3. シェーダ版テクスチャマッピング 第 5. シェーダ記述
5.3 シェーダ版テクスチャマッピング以下の内容をテキストエディタで書き、texturemapping.slという名前で保存します。
surface
texturemapping(string texturename = "")
{
Ci = Os * ( Cs * color texture(texturename));
Oi = Os;
}
ここでシェーダパラメータの texturemapは RIBファイル内の Surfaceコマンドで指定します。
Surface "texturemapping" "texturename" ["mudah.hdr"]
このように記述すると、texturemappingシェーダが呼び出されたときには、 texturenameには mudah.hdrテクスチャファイル名が代入されます。sl2cで .slから C言語のシェーダソースコードへと変換します。
$ sl2c texturemapping.sl
変換が成功すると、同じディレクトリに texturemapping.cというファイルが作成されます。この C言語のシェーダソースコードをコンパイルします。
$ lsc texturemapping.c
コンパイルが成功すると、同じディレクトリにtexturemapping.so(Windowsの場合はtexturemapping.dll)が作成されます。....
lucilleユーザーズマニュアル 15
第6章 制限
lucilleはまだまだ開発段階であるため、いくつもの制限があります。
6.1 RIB関連• FrameBegin/FrameEndブロックはサポートされません。そのため 1つの RIBファイル中に複数のフレームを記述することはできません。
• MotionBegin/MotionEndブロックはサポートされません。そのためモーションブラーはサポートされません。
• ライトのジオメトリは 1つのみ定義できます。
• ジオメトリはポリゴンのみになります。かつ三角形か四角形のポリゴンのみサポートします。二次曲面やベジエパッチなどの曲面はサポートされません。ただし単純なサブディビジョンサーフェス (SubdivisionMesh)と球体 (Sphere)のみサポートしています。
6.2 レンダリング関連• グロス反射はサポートしていません。
• 適応アンチエイリアシングはサポートしていません。スーパーサンプリングのみになります。
6.3 シェーダ関連• サーフェスシェーダのみサポートします。volume, light, imager などの他のシェーダはサポートしていません。
16
第7章 プログラムリファレンス
7.1 lsh
lsh(lucille shell)は、RIBファイルを読み込んでレンダリングを行なうレンダラプログラムです。lucilleの本体になります。
使い方
$ lsh [option] RIBFILE
RIBFILEには RIB形式のシーンデータのファイル名を指定します。
例: カレントディレクトリにある mudah.ribを読み込んでレンダリング処理を行ないます。
$ lsh mudah.rib
[option]は任意です。省略することが可能です。[option]に指定できる引数は以下の通りです。
• -info|–info|-help|–help|-h|-version以上の引数はいずれも同じ動作をします。lshの情報を表示します。バージョン、ビルドオプション、利用可能なディスプレイリストなどを表示します。例
$ lsh -info
7.2 sl2c
sl2cは、RenderManシェーディング言語 (RSL)のコードを、C言語のコードへと変換します。
使い方
$ sl2c SHADERFILE
SHADERFILEには、RenderManシェーダファイルを指定します。変換が成功すると、引数の拡張子を .slから .cに変えたファイルが作成されます。
例 1: カレントディレクトリにある constant.slを C言語のコードへと変換します。変換後のファイルは constant.cになります。
$ sl2c constant.sl
17
7.3. ROCKENFIELD 第 7. プログラムリファレンス
例 2: 一つ上の階層にある constant.slを C言語のコードへと変換します。変換後のファイルは同じく一つ上の階層の ../constant.cに出力されます (つまりカレントディレクトリに作成されない)。
$ sl2c ../constatnt.sl
7.3 rockenfield
rockenfieldは、フレームバッファ表示を行なう単独のプログラムです。lshとは別のバイナリになっています。lshは、RIBのレンダリング出力設定がフレームバッファのときに、この rockenfieldを内部で呼び出します。rockenfieldは、レンダリング中でも拡大・移動・png形式での保存 (libpngを利用してコンパイルしてある場合のみ)が出来るという特徴があります。
7.4 silvestri
silvestriは、GUIでレンダリングさせたい RIBファイルを指定して lshを呼び出すツールです。silvestriは PythonとwxPythonを利用して書かれているため、 silvestriの実行には別途 PythonとwxPythonがシステムにインストールされている必要があります。
lucilleユーザーズマニュアル 18
第8章 RIBリファレンス
本章では、特に lucilleで利用されることが多い RIBコマンドについて、そのリファレンスを掲載します。基本的に RenderMan Interface仕様 Version 3.1に基づいています。
8.1 ジオメトリlucilleでは、ポリゴンジオメトリを定義するコマンドのみをサポートします。
Polygon (parameterlist)Polygonコマンドは、一つの閉じた平面多角形を定義します。三角形以上の多角形を定義できます。その場合、 lucilleは内部で多角形から三角形への変換を行ないます。この変換はあまり品質のよいものでないので、なるべくであれば三角形もしくは四角形を入力してください。parameterlistはトークンと配列のペアになります。lucilleのサポートするパラメータのトークンは以下になります。
”P” 多角形の頂点座標を指定します。各頂点は (x, y,z) の三要素になります。パラメータ”P”は Polygonコマンドのパラメータとして必ず指定しなければなりません。
”N” 頂点の法線ベクトルを指定します。法線ベクトルは (x, y,z)の三要素になります。”N”が指定されていない場合、lucilleは内部で自動的に法線ベクトルの計算を行ないます。頂点単位で正確な法線ベクトルを与えたいときに ”N”パラメータを指定してください。
”Cs” 頂点のカラーを指定します。カラーは (r, g,b)の三要素になります。頂点毎にカラーを設定したいときに用います。”Cs”がパラメータにある場合は、グラフィックスステートのColorコマンドの設定は用いられずに、この ”Cs”の設定が優先されて用いられます。
”st” 頂点のテクスチャUV座標を指定します。テクスチャUV座標は (s, t)の二要素になります。テクスチャマッピングを行なう場合にはこの ”st”パラメータを必ず設定する必要があります。
19
著作権情報
The RenderMan (R) Interface Procedures and RIB Protocol are:Copyright 1988, 1989, Pixar. All rights reserved.
RenderMan (R) is a registered trademark of Pixar.
20