Saturday, July 24, 2010

iray を standalone mental ray で使いたい(5)

これまでは standalone mental ray のための export の話でしたが,ようやくshader conversion の話になります.

iray は mia_material のみのサポートなので,3dsmax シーン中のshader をできるだけ自動で mia_material (Arch&Design) に変換します.おそらく他の shader もサポートしてくるでしょうが,CUDA で動くことを考えれば,divergence の問題のために,いろんな shaderを使うだけでレンダラの性能が落ちることは自然です.それに新しいレンダラですから, mental images が native にサポートしているshader にした方が問題は少ないことも予想できます.ですから変換した方が良いと個人的に思いました.

3dsmax の shader を mia_material にコンバートする max script のコードをここ(https://code.google.com/p/shitohichi-tools/source/browse/#hg/mentalray/max2mia_material)に置きました.これは Zap の blog の VRay shader to mia_material converter (http://mentalraytips.blogspot.com/) を元に作ったものです.Zap さんありがとうございます.2つのファイルを download し,max script として open して run とするとシーン中の shader を convert します.yh_max2mia_material.ms が main のファイルでこちらを評価します.(yh_material_object_map.ms は subroutine 集です.) もちろん,自動で全部コンバートすることは不可能です.とりえあえずレンダリングできるというレベルです.それでも一つのシーンには多数のshader があるので,以前作成したシーンを変換するスタート地点として使えると思います.

来週から SIGGRAPH です.(私は SIGGRAPH には行ったことがありません) 何か iray のデモがあることでしょう.

これで shader conversion for iray 編は一区切りです.

Wednesday, July 21, 2010

iray を standalone mental ray で使いたい(4)

今回は例として 1 つだけ teapot を作成し,それに mia_material (Arch&Design) material を割り当てる.

Export したファイルそのままでは 3dsmax の shader への依存があるので,mental ray standalone で rendering するのには多少都合が悪い.standalone を使う理由は,複数のマシンで一斉にレンダリングをすることができるためである.3dsmax の shader だけ render farm マシンにコピーしてもいいのかというライセンスの関係がよくわからないことと,ここでの目的はiray を使いたいということなので,3dsmax の shader の依存を除く方法をここに書いておく.あるいは,全ての render farm のマシンに 3dsmax をinstall することができれば問題はないが,3dsmax を走らせないマシンに3dsmax を install する意味はあまりない.

3dsdmax から Export した mi file をそのまま ray に渡すと,

---
> ray -x on -v 5 00teapot_ex00.mi
...
LINK 0.0  error  191007: cannot load 3dsmaxhair.dll, The specified module could not be found.
...
LINK 0.0  error  191007: cannot load mayabase.dll, The specified module could not be found.
...
LINK 0.0  error  191007: cannot load adskshaders.dll, The specified module could not be found.
...
---

というエラーが発生する.これが 3dsmax 固有の shader である.利用しているマシンに3dsmax が install されている場合には,rayrc ファイルに以下の3dsmax への shader path を書くことで解決できる.

    3dsmax_installed_directory\3ds Max 2010\mentalray\shaders_standard\shaders

しかし,iray を使うことを考えた場合,base shader と architectual shader のみがあれば良いはずなので,以下の link statement をコメントアウトするか除くことができる.

link "contour.dll"
link "physics.dll"
link "lume.dll"
link "subsurface.dll"
link "3dsmaxshaders.dll"
link "3dsmaxhair.dll"
link "paint.dll"
link "production.dll"
link "mayabase.dll"
link "adskshaders.dll"
link "mr_prebuilt.dll"

---

まずは camera の parameter を変更する.

---
camera "Viewport|Viewport"
    output "+rgba_16" = "ImageCollector|Effect"
    environment = "Environment|Shader"
    lens = "GBuffer_Lens|Shader"
    focal 1.710860
    aperture 1.417323
    aspect 1.333333
    resolution 320 240
    window 0 0 319 239
    offset 0.000000 0.000000
    clip 0.100000 1000000015047466200000000000000.000000
    frame 0 0.000000
end camera
----

Environment shader と lens shader は今は使わないので,コメントアウトし,mental ray 3.6 で推奨されなくなった output statement を推奨のframebuffer に変更する.

---
camera "Viewport|Viewport"
    # output "+rgba_16" = "ImageCollector|Effect"
    # environment = "Environment|Shader"
    # lens = "GBuffer_Lens|Shader"
        framebuffer "main" datatype "rgba" filetype "png" filename "out.png"
    focal 1.710860
    aperture 1.417323
    aspect 1.333333
    resolution 320 240
    window 0 0 319 239
    offset 0.000000 0.000000
    clip 0.100000 1000000015047466200000000000000.000000
    frame 0 0.000000
end camera
----

しかしこれでも以下の error と warnings が出力される.

API  0.0  warn   302004: 00teapot_ex00.mi, line 125: while defining declaration "max_DefaultLight": declaring nonexisting function max_DefaultLight
API  0.0  warn   302004: 00teapot_ex00.mi, line 1926: while defining declaration "max_mia_material_renderelements": declaring nonexisting function max_mia_material_renderelements
API  0.0  warn   302004: 00teapot_ex00.mi, line 2008: while defining declaration "max_NodeVisibility": declaring nonexisting function max_NodeVisibility
API  0.0  warn   302004: 00teapot_ex00.mi, line 2119: while defining declaration "max_base_ImageCollector": declaring nonexisting function max_base_ImageCollector
API  0.0  warn   302004: 00teapot_ex00.mi, line 2133: while defining declaration "max_Environment":declaring nonexisting function max_Environment
API  0.0  warn   302004: 00teapot_ex00.mi, line 2150: while defining declaration "max_base_GBuffer_lens": declaring nonexisting function max_base_GBuffer_lens
PHEN 0.2  error  051011: shader "max_DefaultLight" not found
PHEN 0.2  error  051011: shader "max_NodeVisibility" not found
PHEN 0.2  error  051011: shader "max_mia_material_renderelements" not found
PHEN 0.2  error  051011: shader "max_base_ImageCollector" not found
PHEN 0.2  error  051011: shader "max_Environment" not found
PHEN 0.2  error  051011: shader "max_base_GBuffer_lens" not found
PHEN 0.2  error  051011: shader "max_DefaultLight" not found
PHEN 0.2  error  051011: shader "max_NodeVisibility" not found
PHEN 0.2  error  051011: shader "max_mia_material_renderelements" not found
PHEN 0.2  error  051011: shader "max_base_ImageCollector" not found
PHEN 0.2  error  051011: shader "max_Environment" not found
PHEN 0.2  error  051011: shader "max_base_GBuffer_lens" not found


しかしこれらの shader はほとんど使っていない.そこで以下の変更を mi file に加える.

  • max_DefaultLight は mental ray の mib_light_point に変更する.
  • max_mia_material_renderelements は mia_material  に変更する.
  • 次の 4 つの shader (max_NodeVisibility, max_base_ImageCollector, max_Environment, max_base_GBuffer_lens) は除く.mia_material の Cutout は使っていないので,コメントアウトする.
そうやって出力されたファイルは以下のようになる.
http://code.google.com/p/shitohichi-tools/source/browse/#hg/mentalray/export_mi

以下の図は,3dsmax から rendering した結果(上)と,mental ray standalone で rendering した結果(下)であり,同じ結果になっている.

Thursday, June 10, 2010

iray を standalone mental ray で使いたい(3)

3dsmax のシーンを mi file に export する方法

1. mental ray rederer を選択する.

Figure export_mi_1 にあるように,Render Set Up の Assign Renderer ロールアウトを開いて Production に mental ray Rendere を選択する.


Figure export_mi_1



2. 3dmax から mi file を export する.

Figure export_mi_2 にあるように,Render Set Up の Processing Tab を選択する.Export on Render を選択する前にまずはファイル名を選択する.ファイル名がないと,Export on Render のチェックが enable にならない.これは正直言って最初とまどった.Export したいのに,Export を選択できないのだ.選択してファイル名がないと warning を出してくれるとありがたいのだが.
次に Renderボタンを押すと mi file が export される.

Figure export_mi_2



ところで,
   「Export するには Render ボタンを押す.」
というのも私にはなかなか難しい.
   「Export するには,Export ボタンを押す.」
ならばわかりやすいと思う.

Wednesday, June 9, 2010

iray を standalone mental ray で使いたい(2)

iray では Shader をカスタマイスはできないと言っても iray には shaderはある.アーキテクチャ(mia_material, 3dsmax では Arch & Design) のinterface を持った shader が一つサポートされているのみということであった.ただ,実装はArch&Design ではなく,完全に新しい iray shader という.これは,ユーザが勉強しなおす必要がないようにとの配慮らしい.そのため,物理的に意味のないパラメータは無効になっている.今後,物理的に意味のある BRDF 系の shader はサポートされていく予定ということである.あと,volume のサポートは予定であって,iray の version 1 ではサポートされていないというのは残念だった.

ユーザとしての問題は,iray が次の 3dsmax/Maya でサポートされるのかということである.iray を Maya から使えるかどうかは,Autodesk の決定であって,mental images としてはなんとも言えないという説明であった.ただ,mental ray の 3.8+ の standalone か,NVidia の RealityServer という製品では support される.(mental images のweb www.mentalimages.com を参照)

しかし,どうやら Bunkspeed という選択肢もあるようだ.

Bunkspeed iray demo: http://www.youtube.com/watch?v=t5cn4UNqBfY

私の場合,mental ray の standalone を使うことはできるので,次のバージョンがリリースされたら使ってみたい.ここでは,3dsmax から mi file をexport して,それを mental ray の standalone でレンダリングする方法を説明しよう.

この方法はこれまで render farm を使う人だけに有用だったが,もし,irayが次の 3dsmax/Maya/XSI ではサポートされない場合には有用かもしれない.

Thursday, May 27, 2010

iray を standalone mental ray で使いたい(1)

* 現時点では iray は NVidia のRealityServer でないと入手できない.次の 3dsmax/Maya/XSI でサポートされることを期待してこの blog を書きます.

GDC の Keynote や,SIGGRAPH ASIA 2009 の booth で NVidia の子会社のmental images が iray というレンダラのデモをしていた.

GDC NVidia iray demo (YouTube)
mental image's iray page

間接光をシミュレートするのは mental ray や,他のレンダラでもある程度できるが,final gather とか Photon map とかはちょっと物理的には怪しい近似手法であり,正しい解に収束するとは限らない.それに最適化のパラメータがいろいろあって難しい.

また,これらの手法は時間がかかるので,見えない光源を置いて間接光の影響を手でシミュレートするというようなことをしたりする.このirayは path tracing を brute force で実行する.しかしそれでは現在の計算機ではまだ力不足なので,GPU に実装して GPU クラスタで計算するという方法らしい.上記の YouTube での GDC のデモの画像は interactive でこの質と,かなりすごいと思うが,このデモでは Tesla を15 枚使っているというレベルのようだ.(いったいいくらするんだろう?) SIGGRAPHASIA 2009 では Quadro 5800 FX を 5 枚使っているという計算機でデモをしていた.そう言えば東工大にはテスラやフェルミのクラスタがあるというのだが,iray を走らせたらどうなるのか個人的に知りたい.

iray は物理シミュレーションをするので, SIGGRAPH ASIA のデモでは buildin の shader しか使えないという説明であった.特殊なことをしたい時やカスタマイズした時にはどうするのか,という質問には,

  1. iray でサポートする物理学はこの世界にあるものだけで,それ以外の物理学はサポートする予定がない.

  2. 物理学に沿わないことをしたい場合には,mental ray か,reality server の software renderer を使って欲しい.

ということであった.考えてみれば,物理シミュレーションをするわけで,物理学をカスタマイズするにはどうするのかという質問をしていた.iray はアーキテクチャや車のデザイン関係など物理的な結果が欲しい人をターゲットにしたレンダラということだ.ただ,プロダクションの人やアーティストは物理学よりも欲しい絵ができるかということで,その場合には,今後とも mentalray でのサポートをするということであった.つまり,

   1. 物理シミュレーションをしたい人: iray
   2. カスタマイズしたい人: software renderer(例: mental ray) + MetaSL

ということだ.

Tuesday, January 19, 2010

Intel Core i7 における mental ray のライセンスバグの修正

mental ray 3.7 が Intel の Core i7 で動かないというバグがあり,その修正がでているようだ.

http://forum.mentalimages.com/showthread.php?t=5511

修正されている mental ray (SPM) の version は,(OEM によって version が多少異なる可能性があるが) 以下の通りである.

mental ray 3.7: 3.7.1.31 (2009 September 16) 以降
mental ray 3.7+: 3.7.53.6 (2009 October 22) 以降

この問題は,Core i7 で mental ray を動かそうとすると,

Sorry, no license available

というエラーメッセージが出て,十分なライセンスがあるにもかかわらずmental ray を起動できないというものだ.

最近のIntel の CPU では Core コア数を数える方法がなかなか複雑になっているようで,これに関連してのことだろう.

http://software.intel.com/en-us/articles/intel-64-architecture-processor-topology-enumeration/

個人的には今後ライセンスをコア数で制限するのはあまり嬉しくない.コア数の多いマシンを買っても使えないからだ.一方で GPU では多数のコアがあるのに,もともと制限していない.NVidia/mental images の iray は GPU のコア数でライセンスを制限しているわけではないようなので,CPU と GPU でライセンスの形態が違うというのはあんまりよくわからないことである.歴史的な事情ということであろうか,それとも GPU を promotion しているのであろうか.下手をすると CPU 側から訴えられたりしないのだろうか.しかし,そういう変なライセンス形態が元でソフトウェアが動かないというのは困ったことである.

Core i7 で mental ray が動かないという場合にはサポートに問い合わせてみると修正したバージョンを送ってもらえるはずだ.ただ,サポートの窓口が問題を知らない場合があるので,上記の mental images の forum で修正が mentalimages から出ているといって修正バージョンを請求するのが良いだろう.