2010年7月31日土曜日

SmallLuxGPUをビルドしてみる

ちょこちょことフォーラムにバイナリがアップされることはあるもののwindows向けが
ほとんどでOSXやLinuxむけのものはあまり目にかかれないSmallLuxGPU。
また開発状況もいよいよLuxRender v.0.8に向けて本調子になってきたのか、ほぼ毎日
何かしらの変更が加わっているような感じです。
ここはぜひ開発版を試したり、手元の環境に最適化したビルドを作っていきたい感じ。

というわけでソースから自分でビルドできるような環境を整えてみたのでメモ。


0. まず始めに

環境を整えるといっても、結果として手元の環境が
・LuxRenderをビルドできる状態になっている
・公式フォーラムからダウンロードしてきたSmallLuxGPUのバイナリが動作する
という2つの条件が整っていればそれほど手間ではないかと。
このあたりは以下の過去記事が参考になるかもしれません。
『Ubuntu10.04でLuxRenderをビルドしてみる』
『XcodeでLuxRenderをビルドしてみた』
『SmallLuxGPUを使ってみた。』
大抵のパッケージはMac OSXではMac Ports、Linuxではaptなどのパッケージ管理
システムから簡単に導入できるのでそちらを利用してみるのが良さげ。

1. ソースファイルの入手

まずはSmallLuxGPUのソースをもらってきます。
LuxRender関連のプロジェクトはMercurialによるバージョン管理が行われています。
なので手元の環境がMercurialが使えるといろいろと便利だったりします。

Mercurialが使えるなら適当な作業フォルダ、例えば /home/taro/src を作成し、そこで
$ hg clone http://src.luxrender.net/luxrays/ luxrays
として、しばらくすると必要なファイルのダウンロードが完了して/home/taro/src/luxrays以下に
ソースファイル一式が保存されています。
開発版が更新された場合は上記のluxraysフォルダ内で
$ hg pull
$ hg update
とすれば手元のソースファイルも差分が自動的に更新され最新の状態なります。

Mercurialが使えないのであれば上のURLをブラウザで開いて、ページの上の方にある
bz2 | zip | gz のリンクから都合のいい圧縮形式をえらんでダウンロード。
ソース一式が書庫ファイルに圧縮されているので展開しておきます。
開発版が更新された場合は、同じようにファイル一式をダウンロードして展開という
手順を踏まなければならないのでhgのコマンドを使う場合と比べるとちょっと面倒かも。

で、ソースファイルの入手と展開が終わったら次へ


2. CMakeLists.txtの編集

ビルドを実施するための必要な設定をCMakeLists.txtに記述しておきます。
が、ほとんどの(LinuxとMac OSXの)場合は修正は2ヶ所だけで済むはずです。

ひとつは71行目にある
/home/david/src/ati-stream-sdk-v2.1-lnx64/include
の部分。ここでOpenCL SDKのインクルードファイルの場所を指定します。
デフォルトはどうやら開発者自身が使用している環境に合わせた記述になっているようです。
なので自分の環境に合わせて、OpenCL SDKのインクルードファイルの場所を指定します。

もうひとつはすぐ下の72行目にある
/home/david/src/ati-stream-sdk-v2.1-lnx64/lib/x86_64
の部分。こちらはOpenCL SDKのライブラリの場所を指定しています。
こちらも自分の環境に合った場所に変更します。

以上の2点でCMakeLists.txtの編集は終了です。


3. cmakeの実行

とりあえず2までの作業が完了したらCMakeLists.txtのあるフォルダで
cmakeを実行してmakeでのビルドに必要なMakefileを出力します。
こんな感じ。
$ cmake -G "Unix Makefiles"
問題なく完了すれば、最後に
Build files have been written to: /home/taro/src/luxrays
みたいなメッセージが出力され、作業しているフォルダにMakefileができてるはず。

問題がある場合はメッセージ中にnot foundやらerrorといった単語があるはずなので
足りないパッケージを適宜追加。ちなみに自分の環境で最初cmakeしたときはdoxygenと
libXmuが無いと言われました。

不足していたパッケージを追加して再度cmakeする場合には
$ rm -rf CMakeFiles CMakeCache.txt
として以前のcmake実行時に出力されたファイルやキャッシュを削除してからcmakeを
実行したほうが良さげ。

無事にMakefileの出力が完了したら次へ


4. ビルドする

先ほど出力したMakefileがあるフォルダで
$ make
すればOK。CPUがマルチコアの場合はコア数に応じてmake -j2とかmake -j4とかすると
ビルドが早く済みます。

問題なくビルドが完了すれば、最後に
[100%] Built target slg
とメッセージが表示され作業フォルダ(ここでは/home/src/luxrays)にいくつかのフォルダや
ファイルができているはずです。それらフォルダの中で特に大切なのは
・slgをはじめとする実行ファイル ・・・ ./bin
・各種サンプルシーン ・・・ ./scenes
・blender用エクスポータ ・・・  ./samples/smallluxgpu/blender
とこんな感じです。

ビルドが正しく終了しなかった場合はエラーを確認してください。
必要なファイルがないとかライブラリが見つからないといった問題が多いかと思います。
CMakeLists.txtの記述を自分の環境と照らし合わせて確認してみたり、要求されている
パッケージが正しくインストールされているか等をチェックすると解決の手助けになるかと。

ビルドが完了したらテストしてみます。


5. テスト

ソースを展開した作業ディレクトリで
$ ./bin/slg -f ./scenes/luxball/luxball.scn
としてSmallLuxGPUにサンプルシーンのluxball.scnをレンダリングさせてみます。
問題なければこんな感じのウインドウが表示されるかと。



以前アップしたサンプル動画もこのシーンファイルだったりします。
ここまできたら後はblender用のエクスポータをインストールするだけです。


6. エクスポータのインストール

blender向けのエクスポータは下記のファイルになります。
./samples/smallluxgpu/blender/engine_render_smallluxgpu.py
いつも通りblenderのscripts/ioにコピーすれば完了。エクスポータの使い方やblenderの
設定は『SmallLuxGPUをblender2.5で使う方法』あたりを参考に。


7. おまけ

自前でビルドする環境ができたので、手元の環境に合わせて最適化ビルドを作ることも可能です。
CMakeLists.txtのコンパイラ関連オプションをいじったり、cmake -G "Unix Makefiles"の代わりに
CC=llvm-gcc CXX=llvm-g++ cmake -G "Unix Makefiles"とかやってみると楽しげ。

この辺の話はまたそのうちに。

---------------------------------------------------------------
コメントなどありましたらこちらへ->web拍手