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拍手

2010年7月17日土曜日

Stochastic Progressive Photon Mappingについて調べてみた

SmallLuxGPUで利用できるインテグレータはLuxRenderでお馴染みのdirect、pathに
加えて、Stochastic Progressive Photon Mapping(SPPM)というのがあります。
blender.jpでSmallLuxGPUが取り上げられた際の記事では”新しいレンダリング技術”
として紹介されています。

現在のLuxRenderでは名称こそexphotonという妙な名前になっていますがPhoton Mapping
が利用可能です。(ちなみにexphotonはexperimental photon mappingの略らしい)


となると、気になるのが普通のPhoton MappingとSPPM、何が違うのか?というところ。
"stochastic"の意味を調べてみると"確率的、確率論的"という意味らしい。
となるとSPPMは"確率論に基づく漸進的Photon Mapping"という感じでしょうか。

LuxRenderのフォーラム等ではSPPMと記載されている場合も多く見受けられるので
こんな感じでググってみたところ、どうやらこの論文(pdf)が出典らしい。
さらにこんなもの(pdf)も発見。

最初の論文は英語だけど、後のは日本語で昨年2009年末のシーグラフアジアに関する
記事の抜粋ぽい。詳しくは分からないが通常のPhoton Mappingとdistributed pathを
組み合わせたような手法のような・・・?

論文の図や記事の写真を適当に眺めた限りでは、従来の手法よりも効率がよく、品質や
処理速度が改善されているという印象。で論文の著者をみるとToshiya Hachisukaさんと
言うかたらしい。

名前でさらにググってみると検索結果にこんなサイトが。

なにかどこかで覚えのあるサイト名だなぁと思ってみてみると・・・

HachisukaさんてParthenonレンダラの中の人だったのか!

昔ビデオカードにプログラマブルシェーダが実装され、GLSLやnVidiaのCgなどが
出始めた頃に、上記のサイトからParthenonレンダラをはじめとするいろんなサンプルを
ダウンロードさせていただいてました。そりゃ見覚えがあるわけだ。
GPGPUにより、いままで見たことの無いスピードでシミュレーションやレンダリングが
すすんでいく様はとても強く印象に残っています。

現在もちょこちょこと更新されているようで、PPMやSPPM開発の過程や128行のソース
のProgressive Photon Mappingが公開されていたりと非常に興味深いものになっています。
直接LuxRenderの開発に関わっているわけではない(はず)ですが、これはSPPMには
期待せざるを得ない感じです。


次期LuxRenderのv0.8では、現在SmallLuxGPUでテスト中のLuxRaysライブラリによる
GPGPU対応が一つの大きな案件になっています。GPGPUと合わせてSPPMの導入も
予定に含まれているようです。またネットワークレンダリングのフレームワークである
LuxFireの統合に向けた試みもすでに始まっています

GPGPU対応ということでハイエンドのビデオカードが必須になるのではないか、と心配
な方もいるかもしれませんが、従来のLuxRenderと同様にCPUのみによるレンダリング
モードも用意されるようですので一安心といったところでしょうか。

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

2010年7月16日金曜日

luxblend25でポータルを使う。が、その前にGUIが表示されず。

luxblend25の更新によりポータルが使えるようになったとのこと。
早速試してみようとしたもののblenderでluxblend25関連のGUIが表示されない状況が発生。

ログを見てみるとef/ui.pyがエラーを起こしているらしい。となるとluxblend25でなく
Exporter Frameworkの問題の可能性大。

で、それっぽいものを調べていたら公式フォーラムにこんなポストが
This is the EF patch for no_bg --> emboss, for fixing not shown gui-elements.
Important: it is inverted now !!
とのことで、たしかにエラーメッセージにもno_bgがどうたらとかあった気がする。
早速ファイルにコピペしてパッチを当てようとしたけどうまく当たらず。

パッチの中身を見てみるとscripts/io/ef/ui.pyの2ヶ所とscripts/io/ef/util/util.pyの
1ヶ所だけの修正。大した手間でないので手動で修正してちゃんとUIが表示されることを確認。
luxblend25向けのパッチも上記のポストにあったけどこちらは最新の開発版には適用済みでした。

ついでに修正済みのui.pyとutil.pyをこちらにアップ。めんどくさがりな人はどうぞ。

ただ、この方法も万能ではなく、blenderのバージョンへの依存がある様です。
手元の環境ではr30288あたりでは問題なく動いていたのですが、開発版を更新していったところ
r30407あたりでGUIは表示されるもののLuxRenderが起動されなくなってしまいました。


というわけで無事にUIが正しく表示されるようになったのでポータルを使ってみます。

blender2.5を起動して、2.4系のluxblendと同様にマテリアルを探してみるけどportal
もしくはexit portal的なものがどこにもない・・・



で、ふと隣のオブジェクトデータのタブを見てみると一番下にExit Portalのチェックを発見。



分かりづらいw
ポータルとは関係ないけどUse Subdivisionもここか。こっちは前からあったのかもしれないけど。


というわけでポータルの設定の場所がわかったのでテスト。
まずは屋外のシーン。レンダ設定はluxblend25のデフォルトのまま、レンダ時間は6分。
ポータルはピラミッド状に配置と説明してみるが、実はblenderのシーンの画面キャプチャを
忘れただけだったりorz。上がポータル無し、下がポータル有り。
リンク先の原寸サイズで見ないと違いが分かりづらいかも。





ポータルありの方がfireflyノイズが少ない気もするけど、屋外だとあまり差はでないのかも。
もしくはlux本体でのfireflyノイズ対策が効いているというのもありそう。

つぎは屋内。レンダ設定は同じくデフォルトのまま。差が出るかもしれないのでレンダ時間は
長めに10分に変更。blenderのシーンはこんな感じ。



窓の部分にあるのがポータル。定番のパターン。
で、結果はこんな感じ。同じく上がポータル無し、下が有り。





こちらもよく見比べないとわからない程度だけど、ポータルありの方がレンダの進捗が早く
ノイズが少なめ。球体への映り込みをくらべるとわかりやすいかも。


他にもいくつか試した際の雰囲気としては、レンダ時間が長くなるほどじわじわとポータルの
有無の差が大きくなってくる感じ。lux本体の各種ノイズ対策や効率改善のおかげでv0.6の頃の
ようにぱっと見て分かるほどの大きな差というのは出にくくなっているのかもしれませんが、
動作の原理を考えるとポータルの効果がゼロということはないはずです。

少しでもノイズを減らしたい時やクオリティ重視で比較的長時間のレンダを想定している場合、
それほど手間はかからないので、おまじない程度にポータルを設置しておくと意外なご利益が
あるかもしれません。

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

2010年7月15日木曜日

SmallLuxGPUをblender2.5で使う方法

SmallLuxGPUはengine_render_smallluxgpu.pyというエクスポータスクリプトを追加すると
blender2.5系から外部レンダラとして利用できるらしいのでやってみました。

が、いつものお約束ですがいろいろと分かりづらいところもあったのでインストールから
シーンの設定、レンダリングするまでをまとめてみました。


・準備する物

今回は下記のバージョンのもので試しています。
SmallLuxGPUおよびエクスポータは公式フォーラムのDevelopment->Core Engineの
カテゴリで配布されていますがフォーラムのメンバー登録が必要。
エクスポータの対応はBlender2.5 rev.29905より新しいもの、とのことなので要確認。

1. SmallLuxGPU v1.6beta1
2. engine_render_smallluxgpu.py (v0.62test plugin for SLG) v1.6beta2
3. blender2.52.5 rev.30288

OSは64bit版Ubuntu10.04を使用しています。Mac OSXでも以下と同様の手順でOKかと。
Windowsは設定するパスを適宜読み替えてもられば多分そんなに手順自体は相違ないはず。


・SmallLuxGPUのインストール

まずはSmallLuxGPU単体で適切に動作するようにインストールします。
が、その辺は以前の記事を参照で省略。


・エクスポータスクリプトのインストール

最近スクリプトをインストールするフォルダ構成に変更があったようですが、とりあえず
blenderのインストール先の./2.52/scripts/ioにengine_render_smallluxgpu.pyをコピー。
以前のフォルダ構成では./.blender/scripts/ioに相当する感じです。


・blenderの起動と設定

SmallLuxGPUをblender2.5から使用するには端末エミュレータからコマンドラインでblenderを
起動する必要があります。

アプリケーションメニューや実行ファイルのクリックでblenderを起動した場合は選択可能な
レンダラのリストにSmallLuxGPUは表示されるものの起動できずレンダができません。
なんとなくSmallLuxGPUに必要な環境変数が渡ってないのが原因ぽい感じなので
適当なバッチファイルを作っておけば対応できそうな気もします。

が、面倒なので今回はおとなしく端末エミュレータから起動します。
起動したら使用するレンダラを変更。メニューのリストからSmallLuxGPUを選択しておきます。




・シーンの準備

使用するレンダラがSmallLuxGPUになっていることを確認したらシーンの準備をしていきます。

デフォルトではblenderを起動するとシーンに存在するオブジェクトはメッシュキューブと
ライト、カメラだけの下図のような状態になっているはずです。




まずはデフォルトのライトを削除して、新規にSunライトを追加します。
普段ならばライトのプロパティでライトの種類を変更できますがSmallLuxGPUが選択されて
いると種類の変更ができないようなので削除&新規追加で。
で、新規に追加したSunライトのプロパティでSkyのチェックボックスを選択しておきます。
こんな感じになってればOK。




・レンダの設定

シーンの準備が終わったらレンダの設定です。
Renderプロパティの中にSmallLuxGPU Optionsという項目があるかと思います。
そこの上2ヶ所、SmallLuxGPUの実行ファイルのパスとエクスポートしたシーンを保存する
場所を指定する必要があります。




で、ここが注意が必要なんですが、いつもの様にフォルダ選択の画面からそれぞれのパスを
選択すると相対パスとして値が設定されます。

が、実際には絶対パスでないと正しくSmallLuxGPUが起動しないという罠だったりします。
なので
実行ファイルパス://bin/SmallLuxGPU/slg
エクスポート先://Desktop
という感じになっているのを
実行ファイルパス:/home/taro/bin/SmallLuxGPU/slg
エクスポート先:/home/taro/Desktop
という具合に手作業で修正します。
エクスポートされたファイルは指定したパスの場所にScene Name:で設定した名称のフォルダが
作成されその中に一式が保存されます。Scene Name:のデフォルトはtestsceneです。

これで設定は終了。


・レンダしてみる

ここまで終われば後はいつも通りImageのボタンを押すなりF12キーを叩くなりしてレンダ開始。
設定に問題が無ければ下図のようにSmallLuxGPUが起動するはずです。




hキーでヘルプ表示切り替え、マウスのドラッグでカメラの移動とズームができます。
これでblender2.5からSmallLuxGPUが使えるようになりました。

上のだけだとあまりにさみしいので適当にオブジェクト追加してレンダしてみた。
レンダ時間は約1分。



各種オプションの設定がまだよくわからん・・・。

SmallLuxGPUは開発者向けのサンプルやテストという位置づけなので、今のところ利用可能な
マテリアルが少なかったり、どんな環境でも安定して動作するというわけではありません。
が、今回の結果を見るかぎりではSmallLuxGPUでの成果を元に、今後開発がすすむであろう
LuxRender v0.8には期待せざるを得ないという感じです。

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

2010年7月12日月曜日

LuxRender v0.7 Finalの変更点詳細リスト

前回のv0.7 Finalのリリースに関する記事でもふれましたが、変更点の詳細リストを訳して
みました。オリジナルのリストの記載順でなく、内容やカテゴリ毎に並べ替えています。

量が多いので途中適当な部分もありますがこんな感じ。

仕様や挙動の変更

 ・数値的な不正確さを改善するためluxconsoleとluxrenderのコマンドラインオプションに
   -eと-Eが追加されました。自動的に設定されるイプシロン値の最小値と最大値の指定が
   可能になりました。またluxSetEpsilonのAPIコールを利用することも可能です。

 ・inifiniteライトの強さが変更され、設定の仕方も新しくなりました。
   望ましい結果を得るために環境マップを使う場合に関してはさらに改善が必要かと
   思いますがv0.7 Finalのリリースまでには変更される予定です。

 ・mixマテリアルのオプションでamountの値が0の時に最初のマテリアルが選択されるように
   変更されました。以前は同じ設定の状態で2番目のマテリアルが選択されていましたが、
   これは意図していない間違った動作でした。

 ・球面マッピングにおけるUV座標の向きが入れ替わりました。
   Uが緯度、Vが経度になります。マップのサイズと位置を調整するためのuscale/vscale、
   udelta/vdeltaといったオプションも追加されました。

 ・円柱マッピングの挙動が多くの3DCGアプリケーションに合わせたものに変更になりました。
   マップのサイズと位置を調整するためのuscale/udeltaといったオプションも追加されました。

 ・glossyマテリアルのroughnessとexponentのオプションの値の換算式が新しくなりました。
   roughness = sqrt(2/(exponent+2)) または exponent=2/(roughness^2)-2 となります。

 ・metalマテリアルのstring nameパラメータは、外部ファイルを読み込んでマテリアルとして
   利用している場合には、パラメータの値を複製しstring filenameとして継承されるように
   なりました。これによりネットワークレンダを行っている場合にファイルのやりとりが確実に
   行われるようになりました。


フレネルテクスチャ関連

 ・テクスチャタイプにfresnelが追加されました。(今のところまだマテリアルには設定できません。)

 ・constantフレネルテクスチャが新規に追加さました。
   オプションのfloat valueの値で可視領域の屈折率を指定できます。

 ・cauchyフレネルテクスチャが新規に追加されました。
   オプションのfloat cauchybの値でコーシー方程式における係数Bの値を指定します。
   係数Bが設定済みであればfloat cauthyaの値を同方程式における係数Aの値として設定するか、
   またはfloat indexの値で可視領域における屈折率の平均値を定義しておき、それを元に係数Aの
   値を推測させることができます。(係数Aの値よりもindexの値の方が広く用いられています。)
   (訳注:おそらくこの辺の話だと思います。)

 ・sopraフレネルテクスチャが新規に追加されました。
   string filenameの値に読み込むsopra形式のファイルのパスを指定します。

 ・luxpopフレネルテクスチャが新規に追加されました。
   string filenameの値に読み込むluxpop形式のファイルのパスを指定します。

 ・presetフレネルテクスチャが新規に追加されました。
   string nameの値に使用したいプリセットの名称を指定します。利用可能なプリセットの名称は
   metalマテリアルのプリセットと同じです。

 ・sellmeierフレネルテクスチャが新規に追加されました。
   オプションのfloat Aの値には定数部(多くの場合は1)を指定します。float Bおよびfloat Cには
   係数B、Cのリストを指定します(リストの長さは同一でなければなりません)。これらの設定を
   おこなうことでsellmeir方程式における屈折率を定義することができます。多くのガラス材料で
   この値を利用することができます。
   (訳注:おそらくこの辺が参考になるかと)


その他のテクスチャ・マテリアル関連

 ・blender互換テクスチャのオプションのturbulanceパラメータはturbulenceに名称変更されました。

 ・blender互換テクスチャは浮動小数点形式のみサポートするように変更されました。
   古い形式で色を取得するためには複数のテクスチャの合計として扱う必要があります。
   (以前より早いです。)

 ・brickテクスチャはよりリアルなパターンを表現するため大幅に拡張されました。

 ・タブ区切り形式のcolorテクスチャを指定した場合にスペクトルデータを外部ファイルから
   読み込むことが可能になりました。PBRT2形式のファイルが利用できます。

 ・浮動小数点形式のuvmaskテクスチャが追加されました。
   UV座標をもとにテクスチャの一部の領域を選択することができます。

 ・浮動小数点形式のimagemapテクスチャにstring channelパラメータが追加されました。
   レッド、グリーン、ブルー、アルファ、平均、色の平均といった画像のチャンネルを選択できるように
   なったため従来のように個別のアルファマップを用意する必要は無くなりました。

 ・chckerboard, dots, fbm, windy, wrinkledの各テクスチャは浮動小数点形式のみの対応に変更。

 ・イメージマップのクランピングのためにwhiteオプションが追加されました。
   0以上1未満の範囲外の部分は白色になります。

 ・glass2マテリアルが追加されました。
   bool dispersiveオプションで光線が伝達の過程で分光を起こすかどうかを指定できます。
   bool architecturalオプションで光がこのマテリアルを適用したオブジェクトを通過する際に屈折を
   起こすかどうかを指定できます。この2つ以外にオプションは持たないためマテリアルの色を
   指定したい場合には新しく追加されたボリュームプロパティを利用してください。


ボリューム関連

 ・MakeNameVolumeキーワードが追加されました。
   識別子の後に設定し、ボリュームオブジェクトの名前と関連するパラメータのリストが続きます。
   これによりボリュームのプロパティの定義と、識別子によるプロパティの参照が可能になります。

 ・Exteriorキーワードが追加されました。
   名付け済みのボリューム識別子があとに続きます。これによりオブジェクトの形状に基づく外部
   ボリュームのプロパティが定義されます。(外部とは面のノーマルが向いている側になります。)

 ・Interiorキーワードが追加されました。
   名付け済みのボリューム識別子があとに続きます。これによりオブジェクトの形状に基づく内部
   ボリュームのプロパティが定義されます。(内部とは面のノーマルの向きの反対側になります。)

 ・ボリュームプロパティにclearが追加されました。
   texture fresnelのパラメータでそのボリュームの屈折率を定義します。
   同様にcolor absorptionかtexture absorptionのパラメータでそのボリュームのスペクトルを設定します。
   屈折率に虚数を設定した場合にはabsorptionの設定はfresnel absorptionに加算されます。

 ・ExteriorとInteriorに対して""を利用することでボリュームプロパティを無効にすることができます。
   これはインスタンスオブジェクトのプロパティを再定義する際に便利です。


その他の追加や変更

 ・Dade氏によるレンダリングヒントのフレームワーク導入により大半のインテグレータで光源の
   サンプリングに関して、より多くのオプションがサポートされました。

 ・mitchellフィルタにsupersampleのON/OFFを切り替えるオプションが追加されました。
   擬似的に高解像度でサンプリングを行った後に画像を縮小する処理を行います。
   UIはv0.7Finalのリリースまでに変更の予定ですが、フィルタサイズの値は自動的に5/3倍されます。

 ・古いquadシェイプは削除されました。代わりにmeshシェイプを使用してください。
   quadはmeshシェイプと同じ形状でありv0.6まででサポートされていました。
   (訳注:LuxRenderネイティブ形式のファイルでデータのエントリとして用いられているキーワードに
   関しての変更かと。blenderからエクスポータ経由でレンダしている限りは影響ないはずです。)


 ・浮動小数点形式の以下のテクスチャタイプは実用的でないため削除されました。
   blackbody, equalenergy, frequency, gaussian, irregulardata, lampspectrum, regulardata
   (訳注:こちらもLuxRenderネイティブ形式のマテリアルファイルでの変更かと思われます。
   同じくblenderからエクスポータ経由でレンダしている限りは影響ないはずです。)



と、いろいろありますがLuxRenderのネイティブファイル形式に関する変更や、luxblendを利用して
レンダリングをしている限りでは影響の無い部分に関しての内容も多い感じです。
知っておいて損はしないけど得もしないというか、誰得?と言われれば俺得wとしか答えようが
無いというか・・・

ざっと見たところでは、ボリュームの扱いやフレネル反射が存在するマテリアルにいろいろ手が
加えられている点、mixマテリアルのamountの扱いやUVマップの座標の変更などが知らずに
いるとはまってしまうかもという感じ。以前に作成したマテリアルやファイルを使いまわすときは
注意した方が良さげです。

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

LuxRender v0.7Finalがリリースされた模様

予想よりも早かったけれど、開発が順調そうなのはうれしいかぎり。
今回のリリースに関するアナウンスやダウンロードは公式フォーラムのこちらから。


ざっとアナウンスの内容をみてみると

LuxRender本体の動作について変更があったり、古いバージョンと互換がない部分も
あるためエクスポータも更新する必要がありますとのこと。いつものお約束ですが
luxblendも更新しておくのが良さげです。残念ながらblender2.5対応のluxblend25は
更新されなかったようです。

Dade氏によるGPGPUサポートをLuxRenderに取り込むための作業が進行中。
ただし、GPGPUサポート版の前に今回のv0.7正式版のマイナーアップデートがある
可能性もあり、時期は夏の終り頃、内容はバグ修正が主なものになるはずとのこと。

v0.7RC3からの変更点としては

・バグフィックス(主にfireflyノイズ対策)
・フォトンマッピングの改善(内部的な安定性の改善。オプションや機能の追加、変更は無し)

となっています。

FireFlyノイズ対策はいろいろテストして対応を試行錯誤していただけに、本当に大歓迎。
フォトンマップの安定性向上はメモリが少ない環境下でのマップ作成時の動作を改善と
いう内容だったと記憶しています。
どちらも目立つ新機能というわけではありませんが実用面で恩恵が大きそうです。

前回の正式版であるv0.6.1からの変更としては

・Qtによる新たなGUI
・QBVHアクセラレータのバージョンアップ
・mitchellフィルターのスーパーサンプリングオプションの更新(デフォルトで有効)
  これによりリング状のアーチファクトの発生を抑制しつつ、シャープな画像が得られます。
・metropolisサンプラーの大幅な改善
・bidirectionalインテグレータの改良
・pathインテグレータでダイレクトライティングサンプリングのオプションを追加
・従来のglossyマテリアルをglossy_lossyマテリアルに名称変更。
  新しく実装されたglossyマテリアルはエネルギーロスが少なく、よりよい結果を得ることができます。
・レンダリングの効率改善のため環境光のオプションとしてimportanceサンプリングを追加
・ボリューメトリックオブジェクトに光の吸収に関するオプションを追加。
  glass2マテリアルやボリュームプロパティを持ったオブジェクトなど透光性のある物体で利用できます。
  (今後のバージョンアップでさらにオプションが追加される予定です。)
・brickテクスチャに関する大規模な機能拡張
・タブ区切り形式のスペクトルデータをファイルから読み込み、テクスチャに利用可能になりました。
  PBRT2形式のスペクトルファイルも利用可能です。
・画像ファイルの読み込みにFreeImageライブラリを利用するようになりました。
  これにより、より多くの画像フォーマットがサポートされるようになりました。
・nullやarchitectural glassといった透明なマテリアルもインテグレータの光路計算において
  バウンスのカウント対象になりました。
・レンダスピード向上のためのさまざまな拡張
・多くのバグフィックス
・LuxBlendでのインスタンスオブジェクトのサポート改善
・LuxBlendでのパーティクルヘアーのサポート改善

と非常にたくさんの機能追加や改善、バグフィクスが行われています。
v0.6.1からv0.7へ更新した場合、レンダスピードの向上と品質の改善はかなり大きそうです。

上記の変更点は冒頭のリンク先の概要をまとめたリストを元にしているのですが
更なる詳細を記載したものが公式フォーラムのこちらにあったりします。
いろいろと使えそうな機能や内容が多くありそうなので、こちらも後日訳す予定。


全体的に見ると、それなりに機能追加はあるもののv0.7Finalは既存の機能のバグフィックスや
ボトルネックの解消を重視した安定版といった印象を受けます。
v0.8以降はLuxraysライブラリによるGPGPU対応やluxblend25でのblender2.5サポートと
新機能が山積みの予定なので、今回のv0.7はそれに向けた一区切りといった感じでしょうか。

そういった点ではv0.8 Finalがでるまでの安定版として落ち着いて使っていくのに良さそうです。

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

2010年7月11日日曜日

SmallLuxGPUを使ってみた。

現在使用しているPCにOpenCL対応のビデオカードを追加してSmallLuxGPUが
利用できる環境を構築してみました

手元のPCはこんな感じ。グラフィックはチップセット内蔵GPUを利用していましたが、
内蔵GPUのHD4200はOpenCLに非対応。これにビデオカードを追加してOpenCLを
利用できる環境にしようという試みです。

インストールや設定が難しいんじゃないかと思っていましたが、やってみると特に複雑な
手順もなくあっさり動き、パフォーマンスもよさげとある意味うれしい予想外れな結果に。


というわけで今回の手順のまとめはこんな感じ。


1. OpenCL対応のビデオカードを選ぶ。

公式フォーラムなどの動作例を見てみると何となくAMDが多いような感じ。
HD4000以降ならひとまず問題なさそうです。ただ、HD5000系でOpenCLを含む
GPGPU用途での性能が向上している様子。発熱や消費電力と性能のバランス等を
考慮しいろいろ迷った末にHD5750搭載のこのカードを購入。
約一万円というお手頃価格が決め手だったのは内緒w

nvidiaはリネームもあり世代がよく分からないのですがGTX280、8800GT、GT240など
8000系?以降のものであれば良さそうです。


2. ビデオカードの取り付けと設定

Ubuntu10.04ではドライバの更新や設定ファイルの書き換えなどは必要ありませんでした。
カードを取り付けて起動後、デスクトップが表示されたらATI Catalyst Control Centerで
正しくカードが認識されているか確認しておくと良いでしょう。


3. ATI Stream SDKのインストールと設定

ハードウェアの準備が終わったら、次はソフトウェアです。
OpenCLを利用するには標準のドライバ以外に追加で実行環境を整える必要があります。

というわけでここからATI Stream SDKをもらってきます。Linuxに関しては32、64bitともにopenSUSE11.2、Ubuntu9.10、RedHat Enterprise 5.4がサポート対象に記載されています。
Ubuntu10.04は載ってなかったので少し心配でしたが、今のところ問題なく動いているので
たぶん大丈夫かと。

インストールの詳細はATI Stream SDK Installation Notesに説明されているので、以降は
自分がやったことだけ書いてきます。

もらってきた書庫ファイルを適当な都合のいい場所に展開
$ tar -xvzf ati-stream-sdk-v2.1-lnx64.tgz.

環境変数ATISTREAMSDKROOTを設定
$ export ATISTREAMSDKROOT=展開したフォルダのパス
(例えば/home/taro/bin/ati-stream-sdk-v2.1-lnx64)

環境変数LD_LIBRARY_PATHにSDKの中のライブラリのあるフォルダを追加
$ export LD_LIBRARY_PATH=$ATISTREAMSDKROOT/lib/x86_64:$LD_LIBRARY_PATH

ここまででSDKはとりあえず一段落。
最後にOpenCLの実行にはOpenCL ICD registration configuration filesというものが必要らしいので
おなじく上記のリンクからもらってくる

とりあえず適当な場所に展開
$ tar -xvzf icd-registration.tgz

でOpenCLというフォルダが出てくるはずなのでそれを/etc/に移動する。
$ sudo mv ./OpenCL /etc/

環境変数の設定は~/.bashrcにも追記しておく。


4. SmallLuxGPUを実行してみる

環境変数の設定を反映させるため新規の端末エミュレータを開きます。
SmallLuxGPUを保存してあるディレクトリで
$ slg
で起動します。こんな感じのウインドウが開けばOK。



hキーで画面のヘルプが消えます。マウスドラッグでカメラのズームと移動ができます。
動かすとこんな感じ。リアルタイムに画面が更新されレンダが進んでいきます。




blender.jpで紹介されているデモ動画を見てSmallLuxGPUを試したくなったわけですが
心配だったのはデモ環境がi7 860にHD5870&HD5850と、かなりハイエンドだったところ。

それにくらべて手元の環境はだいぶ劣ります。
ビデオカード一枚追加したくらいじゃSmallLuxGPUは実用的な速度にならないかも、
とか、OpenCL対応の環境がとりあえず整えばいいかな?とあまり期待していない部分も
ありましたが、結果は上の動画のようになかなかの性能でした。


一応簡単にベンチマークをとってみるとこんな感じ。

1. 従来の内蔵GPUだけの環境
a) CPUのみ  計測不能(※1)
b) CPUとGPU 170K samples/sec、1400K rays/sec(※2)
※1 Segmentation faultで落ちる
※2 内蔵GPUはOpenCL非対応。実質CPUのみ

2. 今回ビデオカードを追加した環境
a) CPUのみ 177K samples/sec、1440K rays/sec
b) CPUとCPU 447K samples/sec、3500K rays/sec

2-aとbの比較からGPUによる性能向上はsample/secで約2.5倍、rays/secで約2.4倍という結果に。

また1-bは内蔵GPUはOpenCL非対応なので実質CPUのみの処理です。
そこで同じCPUのみの処理であるはずの1-bと2-aを比較するとビデオカードがある方が
数%ですが大きな値がでています。誤差の可能性もありますが、独立のGPUとVRAMが
あることで共有メモリの使用がなくなり性能の改善につながった可能性もあります。


現状ではSmallLuxGPUはLuxRaysライブラリの評価とLuxRender本体のOpenCL対応
に向けたテストという扱いですが、エクスポータを利用してblender2.5の外部レンダラとして
利用することもできるようです。

またLuxRenderも次のv0.8からはOpenCL対応に向けた動きが本格化してくる予定なので
今のうちにOpenCLが利用できる環境を整えておくというのもいいかもしれません。

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

2010年7月10日土曜日

luxrenderとFreestyleの開発版追っかけメモ

しばらく手元の環境の更新をしてなかったらLuxRender、FreeStyle統合版ともに
いろいろ開発版の進捗があった模様。これまでどおりに使ってるとあれ?っとか
思いそうな点もいくつかありそうなんでメモ。

Freestyleはエッジのスタイル設定のUIは依然レイアウトのみで機能しないものの
内部的な安定性と品質向上に関していくつか改善された様子。

r30059のpyZDependingThicknessShaderをはじめとするいくつかのシェーダの
バグフィックスとvector.pyの廃止はうれしい。標準添付されてるモジュールや
公式サイトにあるサンプルもvector.pyなしで書き直されるとさらにうれしいけど
それは多くを望みすぎか・・。

さらにr29952の非常に接近している、又はほとんど重なっているような頂点を
含むエッジがある場合の安定性が向上というのもよさげ。

あとFreeStyleでは無いがこんな話もでてるのが興味深い
FreeStyle統合版の存在と、統合に向けてblender側の開発者からゴーサインが
出ている状況であれば今後は標準のエッジの存在意義は薄れていくだろうし。


LuxRenderはUpdate version for releaseということでバージョンタグもRC3から
v0.7に上がったのでそろそろv0.7正式版が出そうな気配。来週中場あたりには
来るかと個人的に予想。

またここ最近のLuxraysがほぼ毎日何かしらの更新があるのをみると、Lux v0.7に
あわせてSmallLuxGPUもなんかあるかも。LuxRender本体のGPGPUサポートは
v0.8以降のはずなんで気長に待つのが良さげなんだろうけど期待してしまう。。

luxblend25はこの辺をみてるとRC3リリース以降にバグやパッチに関してのやりとり
がいくつかあったようなのでv0.7正式リリースに合わせてエクスポータも更新が
ありそう。

最後にWeekly Testing Buildsに関連してこんなやりとりを発見。
Oh my! No wonder why you get fireflies! Your lamp body material is using a
mattetranslucent material with both reflexion and transmission pure white.
If the sum of reflection and tansmission is above 1, the material starts producing
energy by itself when it receives light, and here you're using it in a context
where it's going to receive lots of light.
おかしいなと思ってはいたがそういうことか。


あとは拍手のお返事とか

>freestyleのスタイルモジュールのソースとかも公開してみて欲しいです
まぁ気が向いたら?

というか、実際のところ中身はほぼここのpyVaryingThicknessShaderだったり・・・。
なんで大したことやってないので公開しました(キリッというのはすごく恥ずかしいというか、
なんか申し訳ないというか。


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

2010年7月3日土曜日

ちょっと通りますよ。

最近ちょっと通りますよを目にすることが少なくなってきた気がするので作ってみた。
sculptrisにも慣れるべく使っていきたい感じ。

まずはAAを確認して

/⌒ヽ
/ ´_ゝ`)  ここ通らないと行けないので、ちょっと通りますよ・・・
|    /
| /| |
// | |
U  .U

スケッチを描いてみる。



役に立ちそうもないが・・orz、気にしない。何事も形から入れば万事休すって言うし(違。

いきなりsculptrisで始めようかと思ってちょっと試してみたけど、大まかな形状を
blenderである程度作ってからの方が効率が良さそう。

なので、とりあえずblenderで各面を3等分した立方体から開始。
自分の場合、顔や頭以外の有機的な形状はほとんどここからスタート。



で、手始めに脚をひっぱり出す。



mirrorモディファイヤを追加しつつ形状を作っていく。
といっても使用するツールらしいツールはextrudeとloop cutくらい。
他には頂点や辺の移動、回転、拡大縮小といった基本的な操作しか使わない。
というか使えないorz。

地味な作業を繰り返しつつそれっぽくなってきた。



ここらでsub surfモディファイヤを追加。つるつる。



後ろから。ウホッ!いい尻




この時点でのレンダはあまり意味ないけどモチベーションあがるんでレンダしてみる。



ついでにfreestyleで適当トゥーン。モジュールはケロの奴を使いまわし。



もうちょい線ほそい方がいいかも。まあいいや、後で直す。

というか遊びすぎてsculptrisに持ってくとこまで行かなかった。
続きは次回。


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

2010年7月1日木曜日

FreeStyleとbpyのリファレンス更新

FreeStyle統合版の更新に合わせて、いつものようにリファレンスを出力。
例のごとくアップロードも。
sphinx-out_blender252-FreeStyle_svn29735.pdf.zip

俺、iPad買ったらこのリファレンスをiPadで見ながらblenderのスクリプト書くのが夢なんだ。


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