Rendering学習日記

日々、3DCGの世界は進歩しています。勉強して理解したことをまとめていきます。RenderMan互換レンダラーやグローバル・イルミネーション。いろんなことに好奇心を持って、面白くなる。目指せShader書き!!
ありがとうございます。

AreaLightを使う

Ayamのレンダラーを3Delightに設定して,サンプルのArealight.ayを試してみたが,うまくいかない。
出力されたRIBをいじってみる。
まず,レイトレーシングを行うので,WorldBeginの前に追加。

Attribute "visibility" "transmission" [ "opaque" ]

AreaLightSourceの次の行の,
Interior "arealight" "intensity" [ 150.000000 ] "lightcolor" [ 1.000000 1.000000 1.000000 ] を行削除。

Attribute "light" "nsamples" [ 16 ]を追加しておく。

すると,こんな感じになる。
Attribute "visibility" "transmission" [ "opaque" ]

WorldBegin
#Lights!
TransformBegin
ConcatTransform [ 1.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000 1.000000 ]

AttributeBegin
Attribute "light"
Declare "intensity" "float"
Declare "lightcolor" "color"
Attribute "light" "nsamples" [ 16 ]
AreaLightSource "arealight" 0 "intensity" [ 150.000000 ] "lightcolor" [ 1.000000 1.000000 1.000000 ]


AttributeBegin
TransformBegin
Translate 0.000000 12.634600 0.249141
Scale 10.000000 1.000000 10.000000
Patch "bilinear" "P" [ -0.500000 -0.000000 -0.500000 0.500000 -0.000000 -0.500000 -0.500000 0.000000 0.500000 0.500000 0.000000 0.500000 ]
TransformEnd
AttributeEnd

AttributeEnd

Illuminate 0 1
TransformEnd

これらの設定をAyamのTag部分に記述したりと設定ができると有り難いが
うまくいかない。

またBMRTに対応している以下の行は全て削除した。
Exposure 1.000000 1.000000
Quantize "rgba" 255 0 255 0.500000
Declare "minsamples" "integer"
Option "render" "minsamples" [ 4 ]
Declare "maxsamples" "integer"
Option "render" "maxsamples" [ 64 ]
Declare "max_raylevel" "integer"
Option "render" "max_raylevel" [ 8 ]
Declare "minshadowbias" "float"
Option "render" "minshadowbias" [ 0.010000 ]
Declare "prmanspecular" "integer"
Option "render" "prmanspecular" [ 1 ]
Declare "steps" "integer"
Option "radiosity" "steps" [ 64 ]
Declare "minpatchsamples" "integer"
Option "radiosity" "minpatchsamples" [ 4 ]
Declare "texturememory" "integer"
Option "limits" "texturememory" [ 10000 ]
Declare "geommemory" "integer"
Option "limits" "geommemory" [ 40000 ]

いろいろと試行錯誤ですね。


arealight_3dl_perfect.PNG
  • -
  • -

OBJをAyamに読み込む。

メタセコイア(シェアウェア版)では,OBJの出力ができる。これを使ってAyamへインポートし,3Delightでレンダリングしてみた。

注意点としては,スケールに要注意だ。Ayamに読み込んでから,TransformのScaleを0.01にし,その後texmapでマップを割り当てたがうまくいかない。モデルが持っているUV情報がずれてしまうようだ。

だから,やり方としては,
1.メタセコイアでOBJ出力する際にスケールは0.01にしておく。
2.AyamのOBJプラグインで読み込む際ScaleFactorを0.01にしておく。
いずれかを使うと良い。

・またメタセコイア側できちんとオブジェクト分けを行っておくことも大切だ。その際,名称は英数字がよいかな。そしてマテリアル設定でマッピングをしておくこと。きちんとUV情報を保持しておくことが大切。

・3Delight用にマップファイルをTiff形式に変換しておく。
続いて,レンダリングが早くなるtdl形式に変換。

C:\ayam13\meka>tdlmake -mode periodic 00tex_master.tif 00tex_master.tdl

-mode periodicはテクスチャを繰り返すモード。
・作成したtdlファイルは同じディレクトリに置いておく。

1. Ayamを起動。Load pluginでobjio.dllを読み込む。
2. File>importでobjを選択。
3. 読み込んだ後,モデルが大きい場合は,モデルを削除し,もう一度読み込み,ダイアログのScaleFactorを0.01に調整する。OKする。
4. PolyMeshを選択し,新規でMaterialをmat1という名前にして,Paintedplastic,texmap,supertexmapなどのシェーダを指定する。
5. Lightを設定しShadowMapを設定し出力する。
6. Renderでレンダリングする。

■AyamはRIBのインポートもできるSiloで出力したRIBも調整できる。ただし,Siloで出力したMaterialがわからない。再度Ayamで設定しなおす必要がある。メタセコイアでもOBJで出してMaterialは再設定ということだから,どちらも同じかな。

meka.jpg
  • -
  • -

メタセコイアからRenderMan形式へ

だいたいAyamを使ってOBJを読み込み,設定してレンダリングができるようになつた。メタセコイアがシェアウェアでないとできないが,PoserRayからPOVをOBJに変換する方法もできるかもしれない。この場合マップ情報がすんなりいくかどうか試していないのでわからないところ。

メタセコイアのサンプルの麒麟(あらかじめフリーズしておく)は,14MBのObjになり,Ayamでインポートするが,54%まで読み込んだところで,ゆっくりになる。15分待っても63%。あきらめてCancelした。キャンセル後,PCが重くなる。Ayamを開いたまま,メタセコイアでファイルを見ていたら,35分くらいたったところで,一部のポリゴンが画面に表示された。
地道に読み込んでがんばっているAyamに感動する。
kirin.jpg

メタセコイアのサンプルモデルを読み込む。ライトを3つ設定してみた。
witch.jpg
  • -
  • -
<< 2/4 >>