2009年11月29日日曜日

LuxRender10%早くなる。

前回に続きLuxRenderの自前ビルドと最適化。

いろいろやった結果、シーンやレンダラのオプションによって効果のばらつきは
当然あるもののllvm-gccの恩恵もあり、約10%ほど早くなった模様。

halt sppを150に設定してレンダしたベンチ(=同じ品質ならどれだけ早く終わるか)で

公式ビルドとの差が一番大きいときはこんな結果がでる。

自前(llvm-gcc4.2) - 7:22 (442sec), 60249 TotS/s, 151.91 S/px
公式(official build) - 8:25 (505sec), 52606 TotS/s, 151.78 S/px
[レンダ時間 12.5%高速化, 秒間平均処理サンプル数 +7643 (14.5%改善)]

上記以外にも十数通りほど最適化オプションの組み合わせをベンチマークした中で
一番良い組み合わせを採用したので、まぁ間違っても遅くはなっていないはず。

当然自分の環境での性能を優先した最適化なので、世の中は64bitに向けて進んでるのに
Core Duo(32bit)でSnow Leopard向けという非常にニッチなビルドが出来上がる結果にw。

需要は少なそうだけど初代MacBookやMac miniにスノレパいれてがんばってる人向けに
とりあえず公開してみる。


lux0.6-opt013_i386_osx10.6.zip


Core2 Duoでも動くかもしれない。
64bit環境で公式ビルドより早いかどうかは、SSE3やその他の最適化による高速化と
非64bitコードによるマイナスの影響どちらが大きいかによる感じ。

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

2009年11月25日水曜日

XcodeでLuxRenderをビルドしてみた

やっとLuxRenderの自前ビルドに成功した。
ちゃんとblenderからレンダリングもできた。


適当すぎるテストシーン。

先週末にwineのビルドをllvm-gccで試してみたら思った以上に効果があった。
で、LuxRenderもllvm-gccでビルドしたらだいぶ早くなるんじゃ?と思いついてから
いろいろ調べ始めて、実質ほぼまる一日くらい?やっとというほどでもないか。

このへんを参考にしてみたけど、アップされてるプロジェクトファイルが古いこともあり
自分の環境(Snow Leopard、Xcode 3.2.1、Core Duo)ではうまくいかず。
結局自分でcmake -g Xcodeしてプロジェクトファイルを作成、Xcodeでビルド実行。

ただソースアーカイブのCMakeLists.txtそのままだとBoostのライブラリが見つからず
ビルドが止まったり、正しくリンクができてないのか実行できなかったり。
Boostのチェックとライブラリの設定箇所を編集すればOKだった。

具体的には
108行目あたりのELSEIF(APPLE)以下のSETで始まってる2行をコメントアウト。
代わりにその直後の行に
SET(Boost_LIBRARIES boost_thread-mt boost_program_options-mt boost_filesystem-mt boost_serialization-mt boost_iostreams-mt boost_regex-mt)
を追加。

もちろんboost以外にも必要なライブラリはインストールされていないといけない。
自分の環境ではすべてMacPortsで入れたものを使用。
ライブラリを自前でconfigure、makeしてインストールした場合はCMakeLists.txtの編集
内容とかも変わってくるのかもしれない。

あとcmakeで作成されるプロジェクトファイルではデフォルトのターゲットがPPCっぽい。
 Intel Macな環境の場合は適宜設定が必要。

というわけでこれから最適化オプションをいじってみる。
少しでも早くなるといいなぁ。

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

2009年11月18日水曜日

LuxRenderのTIPSとFAQ - その3

前回からTIPSのつづき。やっと半分くらい。


夜の風景を作るには?

LuxRenderのレンダリングエンジンでは物理モデルによる夜や夜間の空はサポートされていません。(他のソフトウェアでサポートしているものはいくつかあるようですが。)

夜空や星空のHDRマップを試してみるといいんじゃないかと思います。
メッシュエミッタを設定したエリアライトとして月のモデルを作成して、エミッタの色を実際の月の光に近いもの(詳細は自分で調べてください。)に設定してみるとか・・・。
ちょっとした工夫が必要かもしれませんがどうにかなるんじゃないでしょうか?



ガラスの質感を上手く出せません

上手く質感を表現できなくても異常なことではありません。
みんなガラスの表現には悩んでいます。



結局exit portalってなんなんですか?

exit portalはシーンに配置して光路を最適化するためのオブジェクトです。
カメラがオブジェクトの内部、たとえば部屋の中などの屋内にあり、メインの光源がそのオブジェクトの外にある場合に有効に使用できます。空や太陽が室内を照らしている場合などです。

exit portalを使用してレンダリングすると、光源からの光がどこを通過してくるのかという情報を追加してレンダリングエンジンに指定することができるようになります。
そのためより効率良く光路の処理を行うことができ、レンダリングのスピードが向上します。



建物の窓ガラスって作っておいたほうがいいんでしょうか?

ガラスに関してのtipsをあげておきます。

・屋外のシーンの場合
窓ガラスがあるほうがいいでしょう。

・屋内のシーンで、光が屋外の光源から入ってくる場合(太陽の光やsunsky、HDRを光源としている場合)
レンダリングのスピードが遅くなる場合があるのでちょっとしたトリックが必要です。
このような状況では普通にレンダリングするとシーンのオブジェクトが外部の光源により照らされるまでのパスの処理において屈折が2回余分に加わることになります。そこでこういった状況での問題を解決するにはAGM(Architectural Glass Material)を利用します。maxwellに同様のものがあります。これは光の屈折を起こさず、透過や反射といった現象だけが有効になっているガラスのマテリアルです。もちろんLuxRenderでも利用できます。

とりあえずカメラの位置やシーンの詳細が決まるまでは窓にガラス板のオブジェクトは入れなくてもいいでしょう。窓ガラスを設置する必要が出てきたら、その時はポータルも同時に設定するといいでしょう。ポータルの設置で注意が必要なのは、決して窓ガラスの内側にポータルを置かないことです。建物の外側の窓枠あたりで、窓ガラスに接するくらいに近づけておけばよいでしょう。

・外が暗かったり、屋内の光源で部屋が照らされているようなシーンの場合
上記のような設定にしておけば窓ガラスで反射はするので、ガラスに部屋の明かりが正しく映り込むようになります。



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

2009年11月12日木曜日

LuxRenderのTIPSとFAQ - その2

昨日のつづき。まだまだある。


環境光のSunSkyのパラメータ

rotationの数値はシーンの周囲の空を回転させるためのものです。普通はあまり使う必要は無いと思います。
gainは空や太陽からの光の強さを変更するためのものです。シーンに他の光源が存在する場合に環境光の明るさを調整するのに使えます。
resizeは太陽の大きさを変更するためのパラメータです。普通はいじらないほうがよいでしょう。



マテリアルのプレビューが表示されない

最近のCVS版ビルドかweeklyのウィンドウズ版ビルドを使用する必要があります。
GUIとコンソール両方のバージョンをダウンロードしてください。
パスの設定はluxconsoleがあるディレクトリを設定してください。コンソール版をダウンロードしている場合はそのパスがluxconsole.exeがある場所です。

LuxBlendのsystemタブでそれらのパスの設定をしてください。



LuxBlendのマテリアルに表示されている内容が変わらない、何かがおかしい

あなたはあるオブジェクトを選択していて、LuxBlendでそのオブジェクトのマテリアルを編集しているのだと思います。おそらくblenderでそのオブジェクトにマテリアルが設定されていないため、LuxBlendでマテリアルを操作しても結果が正しく反映されていないのだと思います。

オブジェクトを作成したらまずはblenderでマテリアルの割り当てをして、マテリアルに適切な名前をつけておいてください。そうしておかないとLuxBlendはマテリアル設定でそのマテリアルを見つけることができません。LuxRenderのレンダリング結果に変更を反映させたいのであればblenderではなくLuxRenderでマテリアルの設定をしなければなりません。ただし、オブジェクトへのマテリアルの割当とマテリアル名の設定だけはblenderで一番始めに行ってください。



レンダリングをあとで再開できる?

手順を簡単に説明するとこんな感じです。
1. LuxBlendで"write/resume FLM"スイッチをONにしてレンダリングを開始する。
こうしておくとLuxRenderは定期的にFLM形式で画像を保存するようになります。
2. LuxRenderを終了する。
3. LuxRenderで続きをレンダリングするときには同じシーンファイルを開いてそのままレンダリングを始める。(※FLMファイルはシーンファイルではありません。)
するとLuxRenderは以前のレンダリング結果の保存されたFLMファイルを見つけて、そのまま続きをレンダリングします。

以前jeanphi氏が書き込んでいたようにv0.5のウィンドウズ版のリリースでは、このレジューム機能が正しく動作しないようです。なので最近のビルドをweekly buildフォーラムから入手してください。



exponent = 面の粗さ

0 = 完全にざらざら。(この設定はしないこと。代わりにmatteマテリアルを使用。)
100 = すごい粗い
250 = やや粗い
500 = 普通
1000 = なめらか
10000 = つやつや
100000 = すごくぴかぴか



アルファマッピングでトラブル

以下のことを試してみてください
1. tgaファイルの代わりにpngファイルを使って、なにか変化があるか確認してください。
2. LuxBlendでアルファマスクに設定したチャンネルのgammaのパラメータを変更してみてください。値を大きくしてみると透過するようになったりしませんか?1.3、1.7もしくは2.2とかの値を試してみてください。

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

2009年11月11日水曜日

LuxRenderのTIPSとFAQ - その1

LuxRenderの公式フォーラムのあちこちのスレッドで質問された内容とその回答を
まとめたスレッドがあるのを発見。TIPSやFAQ集として役立ちそう。
結構量があるので抜粋しつつ、サイトに載せる前にこっちで少しずつ訳してく感じで。



カメラとレンズシフト

いつも私がやっている方法はカメラをおよそ人の目の高さと同じくらいの位置に水平に設置します。この時地平線に向かってまっすぐにして、見上げたり、見下ろしたりするような角度はつけません。そしてShiftYの値を大抵数メートルほど、人間の視界でいうと2階からの眺めと同じくらいになるまで追加します。2階からの眺めであればほとんどのビルが全て視界に収まり、平行投影を使う必要もありません。



効率とワット数

効率(efficacy) = 光量子、つまり光に変換される電気エネルギーの総量。現実のランプのほとんどではわずかな量の電気エネルギーしか光に変換されず、残りは熱になってしまう。
ワット数(watts) = ランプに送る電気エネルギーの総量

詳しくは下記を参照のこと。
http://www.mts.net/~william5/library/sources.htm

LuxRenderでランプを設定するにはそれぞれの強さを設定するだけで済む。
ただし人間の瞳孔が網膜に入る光を調整するように、LuxRenderでも照明による明るさはトーンマッピング処理により調整されることを考慮しておく必要がある。

もし一つのランプしかシーンに存在しないのであれば、wattやefficacyの値を増減させてもトーンマッピング処理により明るさは調整されてしまうため出力画像に何も変化は表れないだろう。
複数のランプがシーンに存在し、それぞれのランプの設定値の大きさが異なるときのみ違いが出てくる。

トーンマッピング処理とそれによる明るさの調整の影響も含めた上で一つかそれ以上の数のランプ全体の明るさを調整したいのであればデフォルトのreinhardトーンマッピングの場合であればpost_scaleとburnのパラメータを調整する必要がある。LuxBlendでこのパラメータを設定するのであれば少し見つけづらいかもしれないが、"film"タブに項目がある。もしくは、こちらの方がお勧めだが、レンダリングの最中にLuxRenderのGUIでリアルタイムに調整をすることもできる。調整のためのスライダーはGUIの左側にある。



光の強さ

ワット数は電球の仕事の大きさであり、効率はlm/Wで定義されている。つまりこれらの結果からランプの光の強さはルーメンで定義されていることになる。



32bit環境でのクラッシュ

win32バージョンでは実際に十分なメモリが確保できないためクラッシュすることがあります。32bit環境ではプロセスが利用可能なメモリはたった1.5GBに制限されています。
そのため、大きな出力サイズでのレンダリングを行う場合には(1チャンネルあたりで32bitしか使えないため)内部的に出力に割り当てることができるメモリはほんのわずかになってしまい、メモリの処理が非常にトリッキーで不安定なものになってしまうのです。



金属のマテリアルでクロムが作りたいんだけど?

好きな金属のマテリアルを自由につくるにはshinymetalのマテリアルが使えます。



ディスプレイスメントマップがうまくいかない

設定値が適切でないからです。2.4mの変位をジオメトリに与えたいとします。
このときコントラストや変化の少ない画像をディスプレイスメントマップとして使うと、ジオメトリの面全体がほぼ2.4m変位することになります。

dispmapの値を0.2や0.02といった程度にして、テクスチャの一部が0、他の部分が1になるようなはっきりとしたコントラストがある画像を使用してみてください。


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

2009年11月6日金曜日

カーボンのつづき

昨日に引き続きLuxRenderでカーボンのマテリアルを試行錯誤。
それっぽくなってきた感じなので、適当な形状にマテリアルを設定してレンダリング。



角度を変えてもう一枚。
近くによるとスペキュラのテクスチャがやっつけすぎなのがばれるw



トップコートにクリアを吹いたっぽく、もう少し光沢が欲しいところ。
あと色もっと黒っぽくしたほうがよさげ。

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

2009年11月5日木曜日

カーボンやステンレスなどの異方性マテリアル

ツールマークやヘアラインが入ったステンレスや積層カーボンなどの異方性マテリアルを
作りたくなっていろいろテストしてみた。

結果はこんな具合。



カーボンならもっと黒っぽいほうがよかったかもしれない。
あとパターンがやや大きいのでカーボンというより雲母みたいな感じ。
ソニーのノートPCでこんなテクスチャデザインのがあった気がするw。

とりあえずマテリアルは"metal" -> "amorphous carbon"を選択。
で、異方性を出すためexponentの値をx、yで変えてみたものの狙った結果にならない。
引き抜きや絞り加工したステンレスみたいに方向性が連続してるものならexponentだけ
でもいいのかもしれない。よく目にする、いかにもカーボンっぽい感じを出すにはspecular
にテクスチャ適用というよくあるやり方が一番効果的という結果。

あと、なんとなく選んだ"PHILIPS [ML 160W] Self-Ballasted HPM Vapor Lamp"
が思いのほかいい感じだった。今回のテーマとは関係無いがとりあえずメモ。

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

2009年11月2日月曜日

blenderとUnityでゲーム開発環境を構築?

blender.jpに記事が紹介されていたUnityというゲーム開発環境らしきものが
気になったのでちょっと調べてみた。SIO2みたいなものなんだろか?

ここからダウンロードできるらしい
http://unity3d.com/unity/download/

他のページにビルド時の配布プラットフォームの選択のような説明があったんで
OSX版でwin向けのパッケージをビルドしたり、その逆もできるのかもしれない。
SIO2がiPhone/iPod touch専用なのに対して、Unityはそれ以外にwin、macが
開発環境としても、つくったゲームの配布対象としてもサポートされてるのは良さそう。


なんとなく何ができるのかはおぼろげに想像できるんだが、わからんことだらけ。
具体的な資料とか情報が欲しいので探す。

ドキュメントのページがあった
http://unity3d.com/support/documentation/

ビデオチュートリアルがあるらしいんで、雰囲気をつかむべくひととおりみてみる
http://unity3d.com/support/documentation/video/index.html

操作してる様子とかを見る限りやFlashとかのオーサリングソフトの3DCG版っぽい感じ。
そんなにとっつきは悪くなさそう。一瞬見えたリソース追加のポップアップメニューに
C#とかJavaScriptってあった気がする。
コマンドラインで使うツールチェインというよりeclipseみたいなIDEっぽい感じ。


コードの編集はどうやるんだ?と思いつつ他のページをみてるとチュートリアルを発見。
http://unity3d.com/support/resources/tutorials/

FPS Tutorialっていうのが面白げなので見てみるとドキュメントと
プロジェクトファイル一式がダウンロードできるみたい。
http://unity3d.com/support/resources/tutorials/fpstutorial

他にも「初心者はこれから始めるのがおすすめ」的な解説があった。
http://unity3d.com/support/documentation/Manual/Unity%20Basics.html
 

思ったよりドキュメントやチュートリアルがあるのでそんなに敷居は高くないかも。
まずは最初のドキュメントのページを中心に地道に調べていくのが良さそう。
結局コードの編集とか開発言語は何がどう使えるのかとかは未確認。

ライセンスはフリーになったらしいが、30days trialって書いてあるし使用期限がある?
使用および配布の条件やライセンスの違いなどは要確認といったところ。
利用規定をチェックのうえ自己責任でどうぞ。


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