2010年01月

2010年01月29日

ムービーファイルの読み込みについて考えてみた その2 modo 401 SP2

前回はRAW画像の入出力プラグインをトラップして、連番画像がどう読み込まれるのかを調べた。その結果、最初の読み込みの際はダミーでも作らないとダメっぽいって事がわかった。やっぱり何かのソフトで連番画像にしてやるのが一番なのかなぁ。まあこの辺の事はちょっと置いといて、ムービーから画像を切り出す方はどうしようっていうのが今回のお題だ。

で、ちょっと調べてみたら、DirectShowを使うといろんなビデオ形式に簡単に対応できて、そこからフレームを切り出すのも簡単に出来そうな事がわかった。

そこでまずはAVIファイルから0フレーム目を切り出して、読み込むようにio_image_rawを書き換えてみた。名前はio_image_aviに変えたよ。ioと言っても入力しかないけど。

DirectShwについては、ここを参考にさせて貰った。

DirectShowで1つのフレームを切り出すとRGBのRAWデータが得られるので、まさにRAWデータの読み込みプラグインに組み込むにはもってこいだ。140行目の

pisg->GetCurrentBuffer(&n,(long *)lpBmpData);

で、lpBmpDataに取り込まれて、それを144〜144行目で1スキャンラインずつ書き出している。SetLine( )メソッドは1スキャンラインぶんの画像データをmodoが用意した静止画像を保管するオブジェクトにセットするもののようだ。

        for (y = 0; y < h && LXx_OK (rc); y++) {
           rd = wimg.SetLine (h-y-1, LXiIMP_RGB24, (lpBmpData + w*3*y));

切り出した画像は上下が逆だったので、Y座標をh-y-1として画像全体の高さhから1引いたところから1ずつ減らしながらlpBmpDataをデータが格納されているアドレスのトップから現在のスキャンラインのY座標値であるy、そして1行のピクセル数w、RGB各8ビットで1ピクセルが3バイトをそれぞれかけたものを加えて、現在のスキャンラインのデータトップのアドレスを作り出している。

(lpBmpData + w*3*y)

DirectShowを使えばカメラから直接画像を取り込んだり、いろいろ出来るみたいだな。いろいろなコーデックにも対応出来るみたいだし、いろいろ面白い事が出来そうだな。

アップしたソースをビルドするにはmodoのlxsdk_31886とVisualC++2008とDirectXSDKが必要で、LXSDK_31886¥samples¥VisualC¥BuildSDKSamplesに入ってるBuildSDKSamples.slnをVisualC++で開いて、io_image_rawのiraw.cppをアップしたソースに置き換えて、io_image_rawのプロパティでC/C++の全般の「追加のインクルードディレクトリ」にDirectXSDKのincludeディレクトリを追加して、リンカの全般で「出力ファイル」をio_avi.lxに書き換えて、リンカの入力の「追加の依存ファイル」にstrmiids.libを追加すればOK。これでio_image_rawを右クリックして「ビルド」を選択すればio_avi.lxが生成される。これをmodoのファイル→プラグインの追加で追加する。プラグインは追加されるとMODO401.CFGに

    <hash type="Server" key="73333A41-3C0A-4B0E-A7C5-D76609827A2D:AVI">
      <atom type="Module">C:\LXSDK_31886\samples\VisualC\BuildSDKSamples\io_image_raw\Win32\Debug\io_avi.lx</atom>
      <hash type="Tag" key="loader.classList">image</hash>
      <hash type="Tag" key="loader.dosPattern">*.avi</hash>
      <hash type="Tag" key="server.username">Demo AVI</hash>
    </hash>

というような感じで追加されるだけなので、プラグインを除去したければ、「io_avi.lx」の名前で検索してこの部分を削除すればいい。

さて、以下は実際に試してみたところだ。プラグインが登録されている状態で、画像パネルの画像の読み込みをクリックして、

fig02

aviファイルを指定すると、

fig03

このように読み込まれる。

fig04

ダブルクリックしてビュワーを出すと、こんな感じ。

fig05

もちろんaviファイルを直接アイテムにドラッグ&ドロップしても読み込む事が出来た。

さて、現状ではload->filenameに入ったファイル名を88行目でWCHARに変換してDirectShowで扱うムービーファイルとして設定して、

  WCHAR filename[MAX_PATH];
  MultiByteToWideChar(CP_ACP,0,load->filename,-1,filename,MAX_PATH);
  hr = pigb->RenderFile(filename,NULL);

134行目で変数fnに0を代入し、

 LONGLONG fn = 0;

これを使って、静止画を切り出すフレーム番号にしている。

 pims->SetPositions(&fn,AM_SEEKING_AbsolutePositioning,&fn,AM_SEEKING_AbsolutePositioning);

もし連番画像を読み込むなら、ダミーファイルとして番号が付いたファイル名のファイルを作り、実際に開くファイルはダミーファイルから番号を除去したものにする。そして除去した番号部分を整数に変換してfnに代入してやればいいんじゃないかと思うわけだ。

今回なんとかaviファイルの1フレーム切り出しだけは出来るようになったので、猛一息かな。

参考にさせてもらったサイトのサイト主に多謝。

それではまた来週。

modoカテゴリー別ページ   



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

2010年01月28日

パーティクルシステムのお勉強 その43 3ds max 2010

前回の続きでパーティクルにパス追跡させる話だ。前回はSpeed By Iconのパラメータをあらかた調べたので、今回は鳥を飛ばすアニメーションについてやってみたい。今回使った鳥のモデルはmodoにオマケで付いてくるものなので勝手にアップするわけにもいかないので、シーンファイルはアップしてないからね。

まずmodoのレイアウトでMeshesのAnimalsからEagle01をダブルクリックで読み込んで原点に配置する。そしてカメラとかライトとか余計なアイテムは全部削除してから別名で保存を選んでFBX形式で保存した。この時保存先のディレクトリパスに2バイト文字が含まれていると保存されないから注意してね。

fig01

そしてこれを「読み込み」でmaxのシーンに読み込む。この時ジオメトリの「スムージンググループ」をONにする。これをONにしないで読み込むとNURMSをONにした時にうまくレンダリング出来なくなる。

fig02

読み込んだEagleを選択してモディファイパネルでNURMSサブディビジョンを使用をONにして、表示の反復を「0」にしてビューポートでの表示では分割表示させないようにして、レンダリングの方の反復を1にする。

fig03

次に、ボーンをこのモデルに仕込む。そのための下準備として表示パネルでモデルの表示プロパティの「シースルー」をONにして、モデルを右クリックして「選択をフリーズ」を選ぶ。

fig05

次に右からの平行投影のビューに切り替えて、作成パネルのシステムから「ボーン」を選んで、下のようにイーグルの頭とシッポのところで順にクリックして全身を貫くボーンを作成し、右クリックで終了する。

fig06

次にアニメーションメニューから「ボーンツール」を選択し、ボーンツールパネルを出し、「リファイン」ボタンを押して、先に作成した長いボーンを首やシッポの付け根で分割していく。

fig07

首から先はボーンの親子関係が逆の方がいいので、首の付け根のボーンを選択して、ボーンツールから「ルートを再割り当て」を押す。これでボーンのチェーンが首の付け根から前後方向に流れるようになった。

fig08

今度は正面からのビューで、胸元と羽先で2回クリックして1本のボーンを作成して右ボタンを押す。

fig10

これもリファインで分割して、ボーンツールの「ボーン編集モード」をONにして、移動ツールでボーンが羽に沿うようにする。

fig11

上からのビューでも羽のボーンを調整する。

fig12

翼のボーンのみ選択して、ボーンツールの「ミラー」で左右対称のボーンを作成する。

fig13

翼の付け根のボーンは胸元のボーンにペアレントする。

fig14

一番親のボーンにペアレントするかわりにポイントヘルパを親にして、頭、胴体、左右の羽をまとめてもいい。

次にイーグルのフリーズを解除して選択し、モディファイヤリストからスキンを追加する。そしてエンドボーンを除く全てのボーンをスキンに登録する。

fig15

スキンのパラメータロールアウトで「エンベローブを編集」を押して、片側の翼と胴体のエンベローブを調整する。エンベローブは登録したボーン1本に対して1つ存在して、両端2頂点を持つ直線の中心軸と、その軸を中心とする2重のカプセル状のシェイプからなる。外側のカプセルはボーンウェイトのフォールオフが0になる位置を表わし、内側のカプセルはウェイトが100%の範囲を現している。これらのカプセルと中心軸を移動ツールで動かして、イーグルのメッシュが全てカバーされるように調整する(今回は細かい話は割愛)。

fig16

半分調整が済んだらミラーパラメータロールアウトの「ミラーモード」ボタンをONにして、ミラースレッショルドの値を上げてイーグルのメッシュポイントが綺麗に左右で緑と青の色に色分けされるように調整し、「青から緑のボーンに貼り付け」と「青から緑の頂点に貼り付け」ボタンを押して、ウェイトをミラーコピーする。

fig17

再びイーグルのメッシュをフリーズし、オートキーをONにして、0フレームで翼を振り上げたポーズを作る。

fig18

ボーンを全て選択して、フレーム0でキーを打ち、SHIFTキーを押しながらタイムラインの0フレームに出来たキーを60フレームまでドラッグしてコピーする。ボーンのアニメーションを後からリピートさせるので、全てのボーンのキー範囲をそろえるために、全てのボーンの0と60フレームにキーを作ったわけだ。

fig19

次に20フレームに移動して、翼を振り下ろしたポーズを作る。

fig20

25フレームに移動して、翼を振り上げる時に翼の先の部分がしなって残るような感じの回転を与える。

fig21

同様に5フレームで翼を振り下ろす時の翼のしなりを翼に施す。

fig22

50フレームで振り上げの最終段階でのしなりをつける。

fig23

これで翼部分のはばたきの1サイクルぶんが出来た。ただしまだリピートはしないよ。

fig24


今度は横から見て、0フレーム目で身体を下にしならせる。

fig25

20フレームで体を反らせる。

fig26

これも全ボーンを選択して、0フレームのキーをSHIFTを押しながら60フレームのキーまで持って行ってコピーする。

fig27

これでこんな羽ばたきのアニメーションになる(ただし1回分だけね)。

fig28


この羽ばたきアニメーションを無限にループさせるための処理をする。ボーンを1つ選択してカーブエディタを開く。

fig32

回転のアニメーションしかつけていないので、回転のチャンネルだけ全部選択して、「範囲外のタイプのパラメータ曲線」のボタンを押す。

fig29

範囲外のパラメータ曲線のパネルが出たらループを選ぶ。

fig30

これで同じアニメーションが繰り返されるようになる。

fig31

同じ処理を全てのボーンについて行う。

これで羽ばたきのループアニメーションが出来た。

あとはこの鳥のインスタンスをパーティクルにアタッチして、アニメーションさせればいいわけだけど、長くなったので続きはまた次回。パーティクル出てこなかったw

maxまとめページ 

take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)3ds Max | CG

2010年01月27日

ムービーファイルの読み込みについて考えてみた その1 modo 401 SP2

modoは連番画像を用意すれば、テクスチャとしてムービーを貼りこむ事が出来るけど、ムービーファイル自体を読み込むインポーターは付いていない感じだ。
そこで何とかならないものかとあいなったわけだ。インポーターと言えばSDKなわけで、久しぶりにSDKをいじってみる事にした。

modoでムービーを扱う場合、自分が調べた限りでは連番画像の仕組みを使う以外に無さそうなので、インポーターとしてはムービーファイルを読み込んで内部で連番画像になればOKだ。

そこでとりあえずmodoがどうやって連番ファイルを読み込んでるかをSDK付属のRAW画像のインポータを使って調べてみる事にした。

SDKを展開したディレクトリからLXSDK_31886¥samples¥VisualC¥BuildSDKSamplesに入ってるBuildSDKSamples.slnをVisualC++で開いてソリューションメニューから「ソリューションのビルド」を選んで実行ファイルを作成した。中には他にライブラリが必要なものとかあってリンクできなかったりいろいろあるけどio_image_rawがビルドできればOK。

うまくビルド出来ていればLXSDK_31886¥samples¥VisualC¥BuildSDKSamples¥io_image_raw¥Win32¥Debugディレクトリにio_image_raw.lxが出来ているはずだよ。

次にこのプラグインをmodoに組み込む。modoを起動して、ファイル→プラグインの追加を選んでio_image_raw.lxを開く。ここでmodoを一度終了して再起動する。これでConfigに反映される。

次にVisualC++でデバッグ→「プロセスにアタッチ」を選んで出てきたパネルでmodo.exeを選んでアタッチする。これでプラグインが呼び出された時にVisualC++でトラップしてデバッグ出来るようになった。

次にVisualC++のソリューションエクスプローラでio_image_rawを展開して、iraw.cppをダブルクリックして開き、CRawLoader::load_Recognizeの

open_file = fopen (load->filename, "rb");

の行のにブレークポイントをセットする。

fig02

fig06次にmodo側でテスト用に新規画像を作成し、RAWフォーマットで1つ保存し、それに連番で名前を付ける。今回は左のようにimg001〜005の5つのファイルを用意してみた。
次に画像パネルで(連番の読み込み)を選んで、上で作った連番のRAWファイルの1つを選択する。

fig03

これでRAWファイルを読み込むために制御がプラグインに移り、ブレークポイントのところで実行が止まる。

fig04

この時、自動変数のload->filenameのところに入ってるのがmodo側から渡されたファイル名だ。上にある「続行」のボタンまたはF5キーを押してやると、ブレークポイントで止まっていたプログラムが再び動き出す。程なく再び同じブレークポイントで止まる。これを何度か繰り返して、modoに制御が戻るまでファイル名をチェックしてみた。

その結果、modoからプラグインに要求してくるファイル名は、最初はファイルリクエスタで指定したファイル名だけど、次は連番の一番数値の小さいもの(今回はimg001.RAW)になり、結局読み込む処理までしたのはその一番小さい数値のファイルのみだった。これは画像パネルにサムネイルを表示するために必要だったからだと思われる。

そして、画像パネルの画像シーケンスタブには連番画像のフレーム範囲とかフレームの割りあて方法とか、範囲外の設定とかが自動的に設定される。

fig05

どうやらmodoはファイルリクエスタで指定したファイル名を解析し、同名で番号が異なるファイルを検索してシーケンスの設定を自動的に決めている。

次に平面をひとつ作って、それに連番画像を画像パネルからドラッグ&ドロップして貼り付けた。そしてアニメーションレイアウトに切り替えて、タイムスライダを動かしてみた。すると、そのフレームに割り当てられて、いまだに読み込まれていない連番ファイル名が次々とプラグインに渡されて、画像が読み込まれた。

次に画像シーケンスタブで「最終フレーム」の番号を1つ増やして6にしてからタイムスライダを動かしてみた。ここで自分が期待したのはimg006.RAWという名前のファイルの読み込みリクエストがプラグインに来る事だった。しかし実際modoからプラグインにリクエストは来なかった。

そのまま今度は画像ファイルの方を1つコピーで増やして名前をimg006.RAWにして、タイムスライダを動かしてみた。今度はimg006.RAWを読み込むようにmodoから要求が来た。

次にシーンをクリアして再び連番画像を読み込んで、平面を一つ作ってその画像を貼り付けた。そして今度はそれらの画像が読み込まれる前に、画像ファイルを他に移動してみた。そしてアニメーションレイアウトでタイムスライダを動かしてみると、連番ファイルを登録した時にフォルダーに存在していたファイルを読み込む要求がプラグインに来た。

以上の事から、フレームに該当する連番ファイルがあるかどうかのチェックはmodoがやって、そのファイルが無いかどうかのチェックはプラグインでやる構造になっているようだ。

となれば、ムービーのファイルを取り込んで連番画像にするにしても、modo側であらかじめ読み込むべきファイルのリストを生成する際に、ダミーでもいいから番号が付いたファイルが無いとダメっぽいな。一度modoにそのリストさえ出来てしまえば番号が付いたファイルが無くても読み込みプラグインの方でmodo側から来たファイル名をファイル名+番号に分解して、番号をフレームとしてムービーファイル内部にアクセスして画像を一枚取り出してきてmodoに返すような事が出来そうな気がする。

結局ムービーファイルを連番画像としてmodoに取り込むには、ムービーに含まれるフレーム数ぶんだけ番号付きのダミーファイルを作ってmodoをだまし、インポートのプラグインにはダミーの替わりにムービーファイルにアクセスしてもらうようにするか、プラグインで画像を読み込む前段階として、ムービーに含まれるフレーム数に相当するファイル名リストが登録された連番画像オブジェクトを生成する方法を見つけるかのどっちかって事になるね。ダミーファイルでやる場合は、最初の登録の時だけダミーがあればいいので、裏で密かにダミーファイルを大量生成して、読み込みが終わる時に削除しちゃう手もあるね。

いずれもあんまりスマートな方法じゃあ無いな。素直にムービー内のフレームをフォルダーに連番で切り出すプログラム書いた方がいいのかな。

まあ毎度のことながらとんでもない勘違いって場合もあるので、もうちょっと調べてみたい。

それではまた次回。

modoカテゴリー別ページ   

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

2010年01月26日

パーティクルシステムのお勉強 その42 3ds max 2010

今年はアドビ製品のCS5が出るみたいだな。バージョンアップ制限にひっかかるのがいくつかあったから、今から準備しておかないとなぁ。プレミアとかAEとかは64ビット版のみになるらしいし、OSの入れ替えもしなくちゃならなくなるなぁ。

さて、フォースもようやく終盤にかかってきた。今回はパス追跡スペースワープをやろうと思ったら、これは非イベント駆動型パーティクルのみに対応している事がわかった。マニュアルをよく読んでみると、パーティクルフローでパス追跡をさせるには別の方法が用意されているらしい。そこで今回はフォースから離れてそっちの方をやってみる事にした。下のGIFアニメはその結果。あんまり粒ばっかりじゃ面白くないのでmodoのプリセットモデルからEagleをFBXで書き出してmaxに読み込ませてボーンを仕込んでアニメーションさせてみた。ちょっと面白いなw

fig01

さて、まずは基本から。作成パネルのシェイプでラインを選択して下の画像のようにスプラインを1本作成し、まいどおなじみのPFSourceも一つ作った。

fig02

パーティクルビューを表示してDisplayの設定をジオメトリに切り替えて、ビューポートでシェイプが表示されるようにして、パーティクルの発生期間も0〜100まで広げておく。そして下のコンテナからSpeed By Iconを選んでEvent01のSpeedの上にドラッグ&ドロップして置き換える。

fig03

これでビューポートにSpeedByIconのアイコンが現れる。

fig05

このアイコンを選択してアニメーションメニューから、アニメーション→コンストレイント→パスコンストレイントを選んで、スプラインをクリックする。

fig06

これでSpeedByIconがスプラインに沿ってアニメーションするようになり、それに追従するようにパーティクルが動くようになる。

fig07

fig04左の画像はSpeed By Iconのロールアウトだ。次にこのパラメータを見ていこう。

デフォルトの設定ではパーティクルの動きはパーティクルの発生源からパスに平行に進む。これはパーティクルがアイコンとの相対的な位置関係を保っているってことだ。だからパーティクルの発生位置を調整する事で、パスに対してどのような位置関係でパーティクルが動くかを簡単に制御できる。

fig08

例えば、パーティクルエミッタをパスの始点に持って行って横に広げてみると、パーティクルはその幅を保ちながらパスに沿って移動する事になる。

fig10

この場合、アイコンの方向はパーティクルの運動に無関係だ。例えばSpeedByIconのパスコンストレイントのパスオプションで、「フォロー」をONにすると、アイコンはパスに沿って回転するようになるけど、それによってパーティクルの動きが変化する事はない。

fig11


それに対して「アイコン方向を使用」をONにすると、アイコンの回転もパーティクルの動きに影響を与えるようになって、アイコンから離れたパーティクルは回転によって大きく振られることになる。

fig12

「モーションパスの方に向かう」オプションはパーティクルが指定した距離よりパスから離れている場合、パーティクルはパスに向かって進む方を優先するようになり、指定した距離に近付くに従ってパスに沿って進む方が優先的になり、指定した距離内に入ったらパスに沿って進むようになるオプションだ。

下のGIFアニメはパーティクルの発生源が指定距離より離れているのでパーティクルがパスに向かって進み、指定距離に達したところからパスに沿って移動している。パーティクルがパスに沿って進んでいる時のパスとパーティクルの距離がSpeedByIconのロールアウトで指定した距離だ。もし距離を0にすればパーティクルは全てパス上を進む事になるし、距離が現在のエミッタとパスの距離より大きければ、今まで通りエミッタからパスと平行にパーティクルは進むことになる。

fig09

例えば先のパーティクルエミッタをパスの始点にもって行った場合で、「モーションパスの方に向かう」の「距離」を0にした場合、このようにパーティクルがパスに集まる。

fig13

距離を増やして0.3にした場合、パーティクルは0.3までしか収束しないので、このように太さを持った流れになる。

fig14

「加速制限」はパーティクルの加速度の上限を決めるパラメータで、値が大きいほどパーティクルはアイコンに迅速に追従するようになり、値が小さいと、アイコンの動きに追従しきれなくなり、動きは直線に近付く。0にするとSpeedByIconによってパーティクルに影響を与えられなくなる。

下のGIFアニメはかなり急峻に変化するパスに沿ってパーティクルを動かしている例だ。加速制限を10mにしてあるのでこんなに速度が変化してもパーティクルが追従している。

fig15

加速制限を1.5mにすると、追従しきれなくなってしまった。

fig16


「影響」パラメータはパーティクルの慣性力とSpeedByIconによる牽引力を調整するものだ。0%にすると慣性力だけになって、パーティクルはSpeedByIconの影響を受けなくなる。逆に100%にすると直前の速度の影響を全く受けなくなり、慣性でパーティクルがオーバーシュートしなくなる(加速度制限の影響を除く)。

下のGIFアニメは「加速制限」10mのまま、「影響」を10にしたものだ。静止しているところから加速されて行くので、パーティクルがアイコンに追従なくなっている。

fig17

パスを円にして、「アイコン方向を使用」をONにした場合、円周の外側ではかなり進行方向が急峻に変化するので、慣性の影響を受けやすい。下のGIFアニメは「加速制限」10、「影響」100にしてある。

fig18

これは上記の設定のまま、「影響」パラメータだけ15にしたもの。慣性力が大きくなってパーティクルが円に収束せずに外に飛び出している。

fig19


影響パラメータはこういう慣性によるオーバーシュートを表現する時に使うモンなんだろうね。

スピード変動パラメータはアイコンに追従する速度にバラツキをつけるためのパラメータだ。通常は下のGIFアニメのように、軌道の違いによる経路長の差やパーティクルの発生時刻の差による位相差はあっても、同じ経路を通るパーティクルの速度は全て同じだ。

fig20

この状態で「スピード変動」パラメータにチェックを入れて、「最小」を20、「最大」を180にしたのが下のGIFアニメだ。アイコンを追い越して行くパーティクルや、他のパーティクルに追い越されて行くパーティクルなど、速度にバラツキが出ているのがわかる。

fig21


以上、ざっとSpeed By Iconのパラメータを調べたけど、使ってるのがパスコンストレイントなので、軌道はもちろん途中のスピードも細かくコントロール出来るし、これはなかなか重宝しそうなアイテムだな。

長くなったので続きはまた次回。

maxまとめページ 



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)3ds Max | CG

2010年01月25日

SONY bloggie 360ビデオレンズで撮影した画像を使いたい modo 401

デジカメもビデオカメラもかなり年季が入ってきたので、そろそろ新しい機械を買いたいと思い始めて早2年w 新しいフォーマットが出たり記録メディアもどんどん変わり、値段も恐ろしい勢いで下降するわで、物色しているうちにどんどん状況が変わって未だに買えないでいる(考えすぎだろw)。

そんなもんで新製品が出るたびにそこはかとなくチェックしていたわけだけど、来月SONYから発売されるbloggieにちょっと面白い機能が付いるのに気が付いた。

それはレンズにアダプタを取り付ける事で360度のパノラマが撮影出来る機能だ。

fig01こんな感じでレンズを上に向けてパノラマ撮影用のミラーを装着して撮影する。

以下の内容についてbloggieに付いているのはミラー構造のものではなく、レンズ構造のものであるとのご指摘を戴きました。こういうものらしいです。

見た感じからすると、下の画像のように上に平らなミラー、下に円錐台形状のミラーが付いていて、

fig02


円錐表面に映った風景を上のミラーに映し、それをレンズで撮影する方式のようだ。

fig03

これで撮影すると、回りの風景がこんな感じのドーナツ状になって映る(下の画像はmodoで適当に作ったもの)。

fig04


製品ではこの画像からパノラマ画像を生成するソフトが付いてくるようなんだけど、今回はmodoを使ってそれをやったみようってのがお題だ。

まずは円柱をひとつ作る。円柱のUVマップを自動生成すると下の画像のようになる。

fig05

これに新規でUVマップを追加して、ビューを上面に切り替えて、UVツールの「ビュー投影ツール」でUVマップを作る。

fig06

これで上面投影図と同じ形状のUVマップが出来るので、パースビューに切り替えて円柱の上下のフタを削除して、側面だけ残す。

fig07

次にパノラマ撮影した画像を円柱にドラッグ&ドロップする。ただしこのままでは画像は表示されない。

fig08

ここで3Dビューの方で円筒の上側のエッジをダブルクリックして選択し、UVビューでスケーリングして、円形のループエッジを張り付けた画像の内側の円にあわせる。

fig09

同様に下側のエッジは画像の外側の円にあわせてスケーリングすると、円柱の側面に画像が現れる。

fig10

ただ、気をつけなくちゃならないのは、ポリゴン数が少ないと、画像が歪んでしまうことで、それを防ぐためにTABキーを押してSDSサーフェスに切り替える。下のGIFアニメはSDSがONの時とOFFの時の比較だ。OFFの時は画像が歪んでいるのがわかる。

fig11

この状態でポリゴンを反転して円柱を広げてやれば、背景として使う事も出来るわけだ。

また、UVマップ「Texture」を残しておいたので、これを選んでUVフィットなどでテクスチャマップを範囲いっぱいまで広げて、

fig14


これに新規の画像を割り当てて、

fig15

その画像をシェーダーツリーで右クリックして「テクスチャへベイク」を選べば、

fig12

ドーナツ状の画像から四角い画像に変換した画像を得る事も出来る。

fig13

面白そうな商品を見つけてテンションが上がって記事を作っちゃったけど、実際bloggieにはパノラマムービーを処理するための専用ソフトが付属するのでこんな事をしなくてもいいんだよね(出力とかがどうなってるかは未確認)。オモシロそうだから自分のカメラ用にちょっと自作してみようとかいう場合には、専用ソフト代わりに使えるかも。さらに応用で、例えば下の鏡を半球にしたりしたら、上下方向の視野が広がって、ちょっとしたIBL用の画像に出来るかも。

ムービーファイルがシーケンスファイルとして読み込めるといいのにね。SDKいじれば何とかなるのかな?

それではまた次回。

modoカテゴリー別ページ   



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