Rendering学習日記

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

MICROMV

MICROMV端子と書いてあるソニーDCR-IP7からPCのIEEE1394を使ってキャプチャーしようとした。Ulead VideoStudio11の体験版を使ってみた。
機器は認識したが、画面キャプチャのモニタができなくて、うまく動かない。他のネットの記事を読んでみると対応していないとか、iniをいじれとか、VideoStudioのバージョンによって動かないのかと思った。
MediaStudio Proの必須条件にDirect Xをインストールとあった。たぶんデバイスコントロール関連でDirect ShowやMS 1394とか書いてある記事を見かけたので、Direct X9をインストールし、再起動した。
画面にモニタで来たし、キャプチャボタンが表示されるようになった。
しかし、ここでDCR-IP7のバッテリが切れておしまい。

明日はAC-VF50 ACアダプタを買いに行きます。
- | - | -

Wings3D→UVMapper→Ayam→3Delight

■Wings3Dでモデリング後,マテリアルを割り付ける。
1.モデル選択し,画面の中で右クリック,UVMapping→Face Segment
2.別画面にモデルが表示される。右クリック,Segment by Projectionをする。
3.色分けでモデルが表示される。
4.右クリック,Continue > Unfolding またはProjection Normalを選択
5.別画面でAutoUV画面が表示される。
6.右クリックでCreate TerxtureでOKする。
7.Outlinerの画像アイコンを選択右クリックし,Texture Exportする。
8.画像を元にペイントなどでお絵描きする。

Wings3Dからマップ出力Wings3Dからマップ出力

Wings3DでOBJをExportする。これをそのままAyamに持っていってもうまく貼れていない。今まではメタセコイア(シェアウェア)で変換してみたが,
今回,フリーウェアのUVMapperを見つけた。OBJ専用のマップ変換ソフトだ。プロ版($59)もあるが,クラッシック版(フリー)をダウンロードした。
これを使ってWings3Dから出力したOBJを読み込む。マップが表示されるが,次にSave Modelを選ぶと変換の設定画面が出てくる。
デフォルトの設定で
Flip Texture(UV) Coordinates Verticallyのチェックを入れる。

それで出力すると,スムージング2
しかし,裏側を見るとうまく貼れていない。
マップがうまくできない

そこで
Reverse Winding OrderとInvert Normalにチェックを入れる。
スムージング1

さらにスムージングをオフにするには,
Export NormalとInvert Normalのチェックをオフにすると良い。
スムースオフ1
スムースオフ2

ということで,実験をしてみて,いろいろとできることがわかった
これでまた楽しくできそうです。
Metasequoia | - | -

UVマップの読み込み

AyamでのObj importがよくわかったので、昨日失敗したモデルをやり直す。Wings3DはNendoのインポートができるようだけど、Nendo1.0はだめなようだ。持っているのはむかーし中野のまんだらけまで購入に行ったversion1.0。Nendo1.0を使ってモデリングして、へたれなペイントをほどこし、objで出力したんだか。cube0.tifが出た。
そしてメタセコイアで再編集。んでもってAyamで読み込んでみる。
hikou_meta.jpg
Nendoから出力したTIFFがなんだったか忘れた・・・・。
cube_map.jpg
さらにディスプレイスメントを加えてみる。
レンダリングは3Delight。
hiko_dis.jpg
同じobjとtiffをAIR Spaceに読み込んでレンダリングしてみる。
早くて質感が違う。
hikouki_air.jpg

すべて、RenderMan互換レンダラーは、デモ版でまかなってみました。
いろいろできるから楽しい。まだまだ課題は続きます。
RenderMan | - | -

Ayam1.13へのOBJ読み込みの注意点

Wings3DでUV mappingの設定を行ってみる。Tiffでマップをexportしてみた。さらにモデルはobj出力を行ってみた。
diffuse.jpg

Ayamでマップ情報を持つOBJを読み込む際に,Import OBJの設定画面で
STagNameとTTagNameがデフォルトでmys,mytとなっている。このままだとレンダリングしたときにズレてしまいマップが適切ではない。
これをs,tに変更してから,OBJを読み込んだ。
AyamにWings3DからのOBJを読み込んで3Delightでレンダリングができた。
uv_test_after.jpg

また,メタセコイア2.4以降ではOBJの入出力に「マッピングのV方向を反転」が付いている。Wings3Dのobjを入力するときはこれにチェックを入れてからマッピングを貼りなおす。
さらに,OBJで出力するときは保存の時にUVマッピングの「V方向に反転」にチェックを外して保存するとAyamで読み込んだときに,正しく表示される。メタセコイア2.3で前回操作していたので,気にしていなかったが,ちょっとした変更があると,何が原因かわからなくなってしまうところ。RIB出力したものをのぞいて実験でした。

メタセコイアのサンプルの魚をOBJ出力し3Delightでレンダリング
sakana_a.jpg
RenderMan | - | -

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

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

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

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

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

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
3Delight | - | -

Pointlight ShadowMap生成

Ayam1.13の簡単なテキストがあった。
  • Go to the preferences (section "RIB-Export") and set "ShadowMaps" to "Automatic".

  • Create two boxes.

  • Open the "Transformations" property of the second box.

  • Translate it by X: 0.0, Y: -1.0, Z: 0.0.
    Scale it by X: 4.0, Y:1.0, Z:4.0.
  • Create a light source.

  • Open the "LightAttr" property.

  • Change the type to "Spot". Press "Apply".

  • Now change the parameters of the spot light to "IsOn": Yes, "Intensity": 18.0, "UseSM": Yes, "ConeAngle": 45.0, "BeamDistrib": 3.0, "From": -2, 2, 2, "To": 1, 0, -1; leave all other parameters at their default values.

  • Create a new view and make it perspective (Menu: "Type/Perspective").

  • Export a RIB from that perspective view (Menu: "View/Export RIB").

  • Render the RIB with a RenderMan compliant renderer, that uses shadow maps, e.g. Photorealistic RenderMan (prman) or Aqsis.


  • ライトを作成してShaderでも割り当てて,二重にやってたので,うまく生成されていなかった。
    Shaderは割り当てないで,そのままLightAttrでCustomからPointを選択。
    パースペクティブ画面のメニューから,ShadowMapを生成すれば6つのファイルを出力してくれた。
    後は,レンダリングすると,以下のようになる。
    CSGのブーリアンは,Levelの中にブツをいれ,LevelAttrのTypeで選択(和差積)すればよい。
    dl02.PNG
    RenderMan | - | -

    Ayam1.13と3Delight

    Ayam側では,3DelightのShaderを認識しない。Parserが,3Delight5.0.2対応である。そのため新しい3Delight6.5をインストールした場合は,
    新たにAyamのプラグインをayslo3d.dllをコンパイルして作成しなければならない。

    ■必要なもの
    C:/Program Files/3Delightに3Delightをインストールしておく。
    Visual C++ 2005 Expressをダウンロードしてインストール
    Platform SDKをダウンロードしてインストール
    Visual C++ 2005 Expressで"Tools/Options/Projects and Solutions/VC++ Direcories"のパスを指定。

    続いてayam1.12.VC2005.zipをダウンロードした。
    C:\Ayam-VC2005に解凍。

    ここから大事なのは,Releaseフォルダを新たに作成しておくこと。
    でないと,Buildするとエラーが出ていた。
    C:\Ayam-VC2005\tcl8.2.3\generic\Release
    C:\Ayam-VC2005\tcl8.2.3\win\Release
    C:\Ayam-VC2005\tk8.2.3\generic\Release
    C:\Ayam-VC2005\tk8.2.3\win\Release

    Visual C++ 2005 Expressを起動。Ayam.slnを起動
    プラグインのプロジェクトをayslo3d-plugin.vcprojをbuildする。
    C:\Ayam-VC2005\ayam\bin\pluginsにayslo3d.dllが作成される。
    できたayslo3d.dllをAyam1.13のと入れ替える。

    以上。
    my_first2.PNG
    3Delight | - | -

    Ayam1.13

    Ayamがバージョンアップしていた。
    今回は3Delightでレンダリングしてみる。
    要はライトを選択してShadow Mapの生成。その際,シーンファイルがある場所にcat.exeを置いたら,自動生成してくれた。
    以下はエラー。
    Tcl: Error! couldn't execute ".cat.exe": no such file or directory

    後,タグに以下を追加しておくこと。
    RiHider
    hidden,depthfilter,s,midpoint

    がんばりますよ。

    my_first.PNG
    RenderMan | - | -
    1/1