Skip to main content

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 した結果(下)であり,同じ結果になっている.

Comments

Popular posts from this blog

メンタルレイの構成

図 1 にメンタルレイの通常の構成を示します. 図 1 メンタルレイの構成 F1: Application scene file: アプリケーション固有のファイルで .max (3dsmax), .ma または .mb (Maya),.scn (XSI) などです. F2: .mi file: mental ray の scene description ファイルフォーマットです.多くの mental ray をサポートしている DCC ソフトウェアは .mi ファイルをエクスポート(export)する機能があります.(A2) 1. Application: DCC (Digital contents creation)ソフトウェア (Maya, 3DSMax, XSI, ...) や CAD プログラムです. 2. mental ray core: メンタルレイのコアプログラムです.メンタルレイにはライブラリ版とstand alone 版があります.ライブラリバージョンのメンタルレイは,アプリケーションからトランスレータ(translator) というモジュールを通じて命令やデータを受けとり,レンダリングを実行します.トランスレータというのは DCC アプリケーションの内部データを mental ray のデータに翻訳(translation)するプログラムです.スタンドアロンバージョンのメンタルレイは.mi ファイルを読み込み,レンダリングを実行します.メンタルレイはコア自体だけでは動作せず,シェーダが常に必要なことに注意して下さい.シェーダがプラグインであることを考えれば,理解しやすいと思います. 3. mental ray base shader: メンタルレイがデフォルトでサポートしているシェーダです.基本的な光源(lihgt),基本的なマテリアル(material),たとえば 最も簡単なシェーダとしては Lambert シェーダなどがあります. 4. Application shaders: 各 DCC ソフトウェアや,CAD ソフトが独自に持っているシェーダです.3DSMax は 3dsmaxshaders, Maya は mayabase などというシェーダパッケージを持っています. 5. Custom shaders: ユーザ独自のシェーダや,メン...

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 には行ったことがありません) 何か ira...

iray blog unofficial translation: はじめまして, iray ユーザの皆さん!

以下は iray dev blog の個人的な翻訳です. この翻訳は iray 開発者あるいはNVIDIA とはまったく関係がありません. 原文:  http://blog.irayrender.com/post/12196196279/welcome はじめまして, iray ユーザの皆さん! 私達はここで iray に関係するマテリアルの知識,新たな機能のデモ,そしてワークフローの例,などについて直接あなたがたに語りかける機会を得ることができ,とても嬉しく思っています.このブログではirayを使う上で役に立ちそうなヒントやトリック,そしてユーザの皆さんからの興味深い利用例をポストできればと思っています.そして,たぶん我々が iray を設計した際に考えたことからビジョンや哲学めいたものまでご覧に入れられるかもしれません.どうかご期待下さい. iray 開発チーム