LightWave3D

2009年01月08日

ロードローラーをLightWave3Dへ書き出してみたら・・・ modo 302

やってみるまで気付かないってのはいろいろあるモンだよな。今やっているショートムービーは殆どの部分をmodoでレンダリングしようと思ってるんだけど、最後のシーンはLightWave3Dでやろうかなと思っていた。そろそろロードローラーも形になって来たので、modoからLightWave3Dに書き出したらどうなるだろうと思ってmodoがサポートしているLightWave3Dのネイティブなファイル形式であるLWOで出力してLightWave3Dのレイアウトで読み込んでみたのが下の画像だ。

fig01

見事なまでにば〜らばらだ。考えてみれば至極当たり前で、modoから書き出せるファイルはLightWave3Dのモデルデータであってシーンデータじゃない。モデルデータを単純に読み込んだLightWave3Dのレイアウトは、当然読み込んだモデルを原点に並べるわけだ。まあ改めてレイアウトで並べ直せばいいわけだけど、バカバカしい話になっちゃったわけで・・・orz

で、これをある程度解消するのがピボットの存在で、ピボットの位置データ自体はモデルデータにくっついているし、LightWave3Dでもサポートされているパラメータなので、中心点の替わりにピボットを使えば、LWO形式で書き出してLightWave3Dのレイアウトで読み込んでも、ちゃんとシーンが組み立てられる。

そうか・・・LightWave3Dにペアレントしたデータを持って行く時は、アイテムの中心点を動かすんじゃなくてピボットを使ってやればいいのかと思ったんだけど、よーく考えてみると、アイテムは位置だけじゃなくて回転やスケールもあるわけで、さすがのピボットもそこまでは対応してくれない。で、よーく考えてみたら配置データと言うのはアニメーションデータでもあるわけで、となればFBXがあるじゃんって事に気が付いた。って言うか忘れてた・・・orz
FBXはもはやデータ交換のデファクトスタンダード的なファイル形式なのにね。

そこでmodoからFBX形式で書き出してLightWave3DのMotionBuilderに付属してきたfbxpluginでレイアウトにインポートしてみたのが下の画像だ。今度はちゃんとした配置になっているし、各アイテムの中心点もそのままなので、ローラーを回転させたりタイヤを回転させたりといったアニメーションが付けられる。
あーちなみにFBXで書き出す時はパス名前に日本語とかが混ざらないようにね。そういうパスになっていると、FBXはうまく書き出せないよ。これはFBXのSDKに原因があるそうで、マイクロソフトのXNAのSDKでも同じ症状が出ていたよ。例えば日本語windowsではデスクトップにフォルダを作ったりするとパス名に「デスクトップ」って入っちゃうから、そこにはFBXファイルは書き出せないからね。

fig02

ただ、モデルデータ自体は下の画像のようにパーツごとのファイルに分割されてこんな感じになった。カメラやライトまでファイルに書き出してるのはご愛嬌かな。

fig03

ところでLightWave3DのFBXだけど、9.5からは正式にサポートされるみたいだな。MotionBuilderがAutodesk社に買収されちゃったためなのか、メーカーサイトからダウンロード出来なくなって、どうなるんだろうと危ぶんでいたけど、よかったよかった。一応探してみたら外国のサイトで公開されているようで、9用のものもダウンロード出来るみたいだな。ちなみに7.5用のプラグインはPluginフォルダーの中のutilityフォルダの中にkaydara.zipという圧縮ファイルで提供されている。9でも提供され続けているところを見ると、まだ使えるのかな?

それではまた次回

カテゴリー別ページ

take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)

2008年06月09日

LWにデータを持って行ってみた その3 modo 302 LW9

なんとなくサブディビジョンサーフェスにしてそのままLWに持って行っていたけど、SDSもいろいろあるので、modoから持っていった場合にどうなるかを調べてみたよ。

まずは下のような円柱をSDS化したオブジェクトをLWOで書き出してLWに読み込ませてみた。

SDS化した円柱

これがその結果。

LWに読み込ませたところ

円柱の側面はSDS化されたが、端面は見えなくなっている。これはLWの従来のサブパッチが4角形までしか対応出来ないためで、V9ではキャットマルクラークサブディビジョンにも対応したので、どうなるのかと思ったら、デフォルトの読み込みはどうやら従来のSDSだったようだ。そこでModelerに送ってTABを押してSDSを一回解除して、SubD種をキャットマルにしてTABを押してキャットマルSDSにしたのが下の画像だ。

ModelerでSDSを切り替える

これでLayoutに戻すとちゃんと前面にサブパッチがかかった状態になった。大雑把な事を言えば、通常のサブパッチでもキャットマルでも、メッシュがある程度分割されていれば輪郭がそれほど変わるわけじゃない。だから多角形さえ処理しておけば、この辺は気にしなくてもいいかも知れない。でも、他のものと組み合わさったりして精密に接触しているような場合はそうも言ってられないな。

下の画像は立方体をSDS化し、それを複写してSDSレベル8でフリーズしてスケールを100.01%にしたものを色違いにして重ねたものだ。フリーズしたものはLWに読み込んでも形状が変わらないのでこのメッシュと比較することでLWに読み込まれたSDSの形状がどうなるかを比較できるって寸法だ。

SDSとそれをフリーズしたもの

これをLWに読み込んでキャットマルクラークSDSにしてサブパッチレベルを8にしたら、フリーズしたものよりだいぶ大きなメッシュになった。modoのSDSとLWのSDSはやはり多少違いがあるようだ。SDSのサイズを徐々に小さくしてみたのが以下の画像で、94%あたりからフリーズしたメッシュが見え始める。

LWで重ねてサイズ変更したもの

この画像を上の画像と見比べて貰いたいんだけど、modo上では2つのメッシュがかなり綺麗に重なるサイズがあったんだけど、LWでは完全に重なるサイズは無い。要するにこのSDSサーフェスはmodoのものとは形が多少違うわけだ。

それからサブパッチウェイトについても調べてみた。

下の画像は立方体をSDS化して上のエッジのみサブディビウェイトを100%にしたものだ。

subdiv weightでエッジを立てた状態

これをLWに読み込んだのが下の画像。残念ながらエッジウェイトはLWに持っていけないようだ。

LWで読み込んでキャットマルSDSに切り替えたもの

ちなみにこれをMODELERに読み込んでエッジウェイトを設定したのが下の画像。LWでも同じ事が出来るわけだけど、データとしては持ち込めないようだ。

MODELERでエッジウェイトを設定した場合

ためしにFBX(MB7添付のバージョン)を使って受け渡してみたら、SDS自体が外れてしまった。MODELERに読み込んで調べたけどこちらの方法でもエッジウェイトは渡されないようだ。さらにFBX経由だとUVマップも無くなってしまった。うーむ。FBXはモーションの受け渡しだけにして、モデル自体はLWOで受け渡したほうが良さそうだな。

ちなみに通常のウェイトマップはちゃんと受け渡されたよ。

それからUVマップをLWOで受け渡した場合、サブディビジョンの形式によって表示がおかしくなった。どちらの場合もマッピング自体は正常に行われてレンダリングするとちゃんとテクスチャが出るんだけど、謎の現象だ。

これが通常のサブパッチ時のUVの状態。

通常のサビディビジョン時のUVマップ

こっちがキャットマルに切り替えた時のUVマップ。

キャットマル時のUVマップ

LW側のみで同様のUVマップを作成した場合はこんな事にはならないので、データの互換性の問題なんだと思う。実用上支障は無いけどね。

LWOファイルについては初期設定に項目があるけど、今回はこの設定で試した結果ね。

初期設定

それではまた次回

スクリプトまとめページ( Down Load はこちらから)  

カテゴリー別ページ



take_z_ultima at 12:01|この記事のURLComments(0)TrackBack(0)

2008年06月08日

LWにデータを持って行ってみた その2 modo 302

さて、ディスプレイスメントマップはなんとかLWにもって行けたけど、ベクターディスプレイスメントマップはどうだろう?

ベクターディスプレースメント

LWにはベクターディスプレイスメントマップなんて無いからね(たぶん・・・)。試しにベクターディスプレイスメントマップ画像を持って行ってディスプレイスメントと同じようにシェーダーツリーを組むとLWが落ちたwww。まあ想定外の事をされても困るよな。仕組み的にはベクターディスプレイスメントマップを法線マップとディスプレイスメントマップに分離して、シェーダーツリーを組んでやれば動きそうなもんだけど、ノーマルマップを繋いだ途端に落ちるんだよね。一応こんな感じで想定してみた。動かなかったけどね。もしかしたら何か方法あるのかな?

シェーダーツリー

とまあ無駄な時間を費やしてしまったわけだ。仕方が無いのでもうちょっと知恵を絞ってみる事にした。

ぶっちゃけた話、最終的に必要とされる画像のクオリティや元となっているmodo上のベクターディスプレイスメントマップの状態によっては、法線マップをベイクして張り込んでやるだけでもほぼOKな場合もあるわけで、ベクターディスプレイスメントマップじゃなきゃどうにもならない部分を作らないように注意しながら作成すれば、OKな感じだな。

シェーダーツリー元となるオブジェクトを複製して別のマテリアルを設定して、そこにブランク画像をエフェクト法線でUVマップに貼って、右クリックで「オブジェクトからテクスチャへベイク」で法線マップをベイクしたものをLWの質感設定のノードツリーで以下のように設定して読み込めば、

ノードエディタ

レンダリング結果は以下のようになる。

render_normal2

法線マップだけだから突起とかは陰影だけになっちゃうので、輪郭部分はかなり辛いものがあるけど、中のほうはだいたい再現できちゃうんだな。だから輪郭とか突起とかは法線マップに頼らないようにメッシュで作成すればいいわけだ。

輪郭まで変化させるとなれば前回やったディスプレイスメントマップを使う方法も考えられるわけで、上の法線をベイクしたシェーダーツリーで、エフェクトを法線からディスプレースメントに変えて、距離200mmでベイクしたものを前回同様の方法でLWに持ち込んでレンダリングしたのが以下の画像だ。

ディスプレイスメントのみ

そしてこれがノードエディターね。

シェーダーツリー

今回は画像範囲を−1.0〜+1.0にするためにsubtractで画像の値から0.5を引いてmultiplyでベイクの時に使った距離の2倍をかけている。

結果はそこそこいい感じだけど、触覚の部分のくびれが無くなったりしている。

こういう途中がくびれたり、曲がったりした突起物が作れるのがベクターディスプレイスメントマップの利点でもあるわけだけど、それをそのままディスプレイスメントマップにベイクすると、こうなっちゃうわけだ。そんな事にならないようにするには、触覚とかはベベルとかでメッシュをちゃんと作っちゃえばいいわけだ。

そういう事に気をつけてモデリングとスカルプティングをして行けば、まあまあLWでも同じように再現できるわけだ。

それでもどうしてもベクターでくびれたものを作りたいって場合は以下の方法でやってみる価値はあると思うよ。

まずは対象となるオブジェクトを複写して、形状メニューからフリーズを選択して「ディスプレースメントをフリーズ」にチェックを入れてフリーズさせる。この時アイテムのサブディビジョンレベルは2程度にしておく。

これで下の画像のようにうすぼんやりと形状が写し取られたメッシュが出来上がる。SDSが外れているのでTABキーを押してSDSに切り替える。

複写したものをフリーズする

そしてMキーを押してこのメッシュに新しくマテリアルを設定する。

シェーダーツリー

新しく作ったマテリアルグループの中にブランク画像でディスプレイスメントマップを仕込んで転写元のベクターディスプレイスメントマップの入っているマテリアルグループの上に配置して、先に挿入したブランク画像を右クリックして「オブジェクトからテクスチャへベイク」を実行する。距離を尋ねて来るので、フリーズして作成したメッシュと、転写元のメッシュとの探索距離を適当に入力する。今回は50mmにしてみた。数値が小さすぎると、その高さより上の部分がすっぱり切り落とされたみたいになるので、そうなったら数値を増加させてまたベイクすればいい。

あとはフリーズした方のメッシュをLWO形式で書き出して、LWで読み込み、シェーダーツリーを前回と同じように組み立てる。ただし今回はマイナスがあるようなので、Subtractを追加してBに0.5を入れて、数値の範囲を−0.5〜+0.5にしてからMultiplyに入力して50mm×2=100mmをかけて画像の距離を−50mm〜+50mmにする。

シェーダーツリー

こうしてレンダリングしたのが下の画像だ。ちゃんと触覚が再現できてるでしょ?

LWでレンダリングしたもの

要するにベクターディスプレイスメントのように方向を持っているマップを、ポリゴンの法線に方向が拘束されているディスプレイスメントマップに置き換えるには、ポリゴンの方をいじって、ベクターディスプレイスメントの方向を表現出来るような法線を持ったポリゴンをフリーズで作成してやればいいって事だ。まあ多少ポリゴンは増えちゃうけどね。今回の場合触覚以外はそのままディスプレースメントマップで持って来ても大差無かったので、全部をフリーズするよりは、触覚の部分だけフリーズするような方法を取ればポリゴン数の増加も抑えられるかも。

それではまた次回。

スクリプトまとめページ( Down Load はこちらから)  

カテゴリー別ページ



take_z_ultima at 12:51|この記事のURLComments(0)TrackBack(0)

2008年06月07日

LWにデータを持って行ってみた その1 modo 302

最近ご無沙汰だったけど、久しぶりにLightWave3Dをいじってみた。LW→modoの移行はあまりストレスを感じなかったけど、久しぶりにいじってみて、こんなに違ってたのかとちょっ面食らった。自分がいじらない間も着々と進化を続けていて、ノードエディタなんてのも追加されたみたいだな。

modoを持っていれば改めてLWのモデラでモデリングする必要は無いって言うか、弄りたくない感じだけど、そうするためには、modoで作ったデータをLWに読み込まなくちゃならない。幸いmodoはlwo形式で保存出来るので、そんなに大変な事にはならないんだけど、だからと言って、両者が完全互換であるわけもなく、そのままでは持ち込めないものもいっぱいある。

そこで今回は、modoからLWにデータを渡す事をテーマにいろいろと調べてみようと思った訳だ。

cellularまずはCellularのディスプレイスメントマップをつけたこんな形状のものからやってみようと思う。



setting設定はこれね。

このシーンを単純に保存形式をLWが読み込めるLWO形式にして保存しようとすると以下のような警告ダイアログボックスが出る。



警告

世のソフトが全て同じ構造をしているわけではないので、lxo形式以外で書き出すと、互換性の無い部分は保存されないって警告だ。例えばマテリアルのプロパティにある「エネルギー保存」なんて項目はLWに無かったりするからLWの保存フォーマットのどこにも書き入れることが出来ないわけだ。

そういう互換性が乏しいものの中で最たるものが、セルラーとかノイズとか、プログラムで生成するプロシージャル系のテクスチャだ。

そのまま持っていったもの上のシーンをLWO形式で保存して、LWのLayoutを起動して、「+」キーを押して読み込んでレンダリングしたのがこれだ。見事にツンツルテンになってしまった。これはLWに限らず、どのソフトに持って行ってもおそらく同様の事になるだろう。
そこでこういうソフトで生成するようなパターンを他のソフトで復元したいなら、そのパターンをイメージマップに焼き付けて画像として持って行く事になるわけだ。

ディスプレイスメントマップは綺麗な凹凸が再現できるように、記録する画像フォーマットはRGB8ビットのものじゃなくて、諧調がもっと細かいOpenEXRとか16bitTiffとかHDRとかを使う方がいい。今回は16bitTiffを使ってみた。LWもいつのまにかこういうフォーマットにも対応していたんだな。

新規静止画像の作成

そして、この多諧調表現を使う時は、新規作成の時に浮動小数点のチェックを入れる。こうすることで、記録方式が整数から実数になる。数の1から2の間にも無数の諧調が存在できるようになるわけだ。

ベイク用の画像を追加そしてその画像をベイクしたいCellularマップより上に持ってきて、Cellularと同じディスプレースメントのエフェクトに設定する。貼り付け方はUVマップだ。だからメッシュには当然UVマップが作成されていないとダメだよ。準備が出来たら追加した画像をシェーダーツリー上で右クリックして「テクスチャへベイク」を実行する。



これがベイク結果の画像だ。これを保存してLWに読み込んだメッシュに貼り付けるわけだ。

ベイク結果

ここからはLWのレイアウトでの作業だ。LWではディスプレイスメントマップはちょっと変なところにある。それはオブジェクトのアイテムプロパティの変形の項目だ。まあ確かにディスプレイスメントマップを施せば、オブジェクトの形が変形するから正しくはあるんだけどね。レイアウトで読み込んだオブジェクトを選択してPキーを押すと、下のようなオブジェクトのアイテムプロパティが出る。

オブジェクトのアイテムプロパティ

これの変形タブのノード編集の右横のチックボックスをONにして、その左側のノード編集をクリックすると、ノード編集パネルが出る。先に作ったディスプレイスメントマップの画像はここでメッシュと結合されてディスプレイスメントマップとして機能するようになる。

そのためのシェーダーツリーは以下のように組むらしい。

ノードエディタパネル

まずはエディター左上のノード追加から2DTextures→ImageでImageノードを作り、その中のブランクになっている画像をダブルクリックして、Imageパネルを出して、イメージファイルを読み込み、UVマップを設定する。

Imageノード

続いて、以下のノードを追加する。

  • Spot→Spot Info
  • Math→Vector→Scale
  • Math→Scalar→Multiply

そしてこれらを上のノードエディタの画像のように接続し、MultiplyのBの緑色の点をダブルクリックして、以下のように定数を入力する。

multiply

この数値はmodoのディスプレイスメント距離をm単位に直したものだ。ベイクした時のディスプレイスメント距離は20mmだったので、0.02mってわけだ。さらにマイナス側も使っている場合はSubtract(引き算)で0の位置をずらしたりするそうだ。これで画像の明るさ=ディスプレイスメント距離になるので、それとSpot InfoのNormal(画像が貼り付けられている場所の法線ベクトル)をScaleで掛け合わせてその場所での凹凸の距離と方向を定めてDisplacementに入力するわけだ。

それでレンダリングしたのが以下の画像。殆どディテールが再現されていない。

そのままレンダリングした結果

これはポリゴン分割が粗すぎるのが原因なわけで、細かくして行けば綺麗になる。その時ムダに必要ない部分も分割しすぎるとメモリーばっかり食うので、modoではアダプティブサブディビジョンで、効率化を図っていたわけだけど、LWにもその仕組みがある。オブジェクトのアイテムプロパティパネルにmodoって、ジオメトリタグの「レンダーサブパッチ」がそれだ。

レンダーサブパッチの設定

これをポリゴン毎ピクセルにして、数値を1.0にしてレンダリングしたのが下の画像だ。今度は綺麗にディテールが再現されている。

レンダリング結果

それからサブディビジョンをいつ行うかをLWではコントロール出来るんだけど、順番が異なると出てこないから、おかしいなと思ったら変形のノード変位順位とジオメトリのサブディビジョン手順の設定も確認してみてくれ。

ノード変位順位.jpg

という訳で、ディスプレイスメントマップはなんとか持ち込める事がわかった。

それではまた次回。

スクリプトまとめページ( Down Load はこちらから)  

カテゴリー別ページ



take_z_ultima at 12:55|この記事のURLComments(0)TrackBack(0)

2007年11月12日

ビューポート単位のデフォーマー有効切り替えの可能性 modo 301

表示とコントロールパネルこれまたラウンチイベントで仕入れてきた話なんだけど、301になってビューポート設定パネルに「デフォーマを有効」という項目が出来たそうだ。このチェックボックスによってビューポートごとにデフォーマの効果をON/OFFできる。同じオブジェクトを複数ビューで表示できるわけだから、これを使うとデフォーマがかかってる状態とかかっていない状態を同時に表示でき、さらにデフォーマの元になっているオブジェクトを編集した結果がリアルタイムでデフォーマ表示のビューに反映される。

一見地味目の機能だけど、もう少し細かい設定が可能になれば、将来ボーンがインプリメントされた時にジョイントモーフの調整に効力があるんじゃないだろうか?LWを使っていない人にはなじみの無い名前だろうけど、LWにはボーン変形をモーフマップで修正する機能がある。それがジョイントモーフなんだけど、モーフ変形の座標軸はオブジェクトのローカル座標系に沿っていないとならないので、ジョイントモーフはモーフ変形の後でボーン変形される仕組みになっている。だからボーンで曲がった時に思いどおりの形状にするためにはボーン変形後にそういう形になるであろう形状をモーフ変形で作り出す必要があるわけだ。これはもの凄く難しい。そこでcreate joint morphというプラグインがあって、メッシュをボーン変形させる機能と、その逆変換をしてくれる機能が付いている。これならボーン変形後のメッシュに対してモーフマップで変形を加えて、その後にボーン変形の逆変換をかければボーン変形前の形状のモーフマップが出来上がるってわけだ。

しかしこの逆変換がなんとなく怪しい気がするんだよね。戻す時のスケルゴンの位置とメッシュの位置関係が変だしね(表示だけの問題なのかな?)。それでもボーン変形後の地点で普通にモデルの修正作業が出来るのはとてもありがたい。

で、話は戻るけどmodoのビューポート単位のデフォーマのON/OFF機能がもう少し細かく設定できるようになってモーフやボーン変形とかの種類ごとにON/OFF出来るようになれば、ボーン変形後の形状をリアルタイムで観察しながらオリジナルにモーフ変形を加えて修正するって言う芸当ができるわけだ。こっちのやり方はモーフ変形の座標軸がボーン変形で歪められてしまっているので、操作に慣れるまでかなり難しいかもしれないけど、確実にボーン変形後の形状を追い込める気がする。

それとせっかくMDDが使えるんだからMDDのデフォーマもコントロールが時間軸固定ではなくてリンク先をボーンの角度やスライダに繋ぎ直せると、多段階モーフのように機能して、ボーン変形しながら滑らかに関節が曲がったり、瞼が綺麗に眼球に沿って瞬きしたり出来るようになると思うなぁ。多段階モーフより使い易いと思うんだけどね。

create joint morphについては自分が昔公開していたホームページの記事をこっちに持ってきてリンクしておくので興味があったら見てね。今のLWのマニュアルには使い方が親切に載っているけど、当時はマニュアルにほとんど記述が無い謎の機能だったんだよ。

もう関節は怖くない?JointMorphでパッキパキ

それではまた次回。 



take_z_ultima at 12:11|この記事のURLComments(2)TrackBack(0)
Archives