2011年1月15日土曜日

modo 501: プロシージャルジオメトリ

modo 501で新しく追加されたアイテムにプロシージャルジオメトリがあります。プロシージャルジオメトリは、直訳すると手続き型ジオメトリで、あるパラメータに基づいてプログラムが自動生成する形状です。modo 501のデフォルトで用意されているのはギアとガスケットです。どちらもSDKを使ってプラグインとして製作されており、ソースコードがSDKにサンプルとして用意されています。


ギアアイテムのパラメータ

プロシージャルジオメトリの利点は、ジオメトリを作成した後でパラメータを変更することによって形状を容易に変更することが可能な点があります。また、これらのパラメータは時系列で変更可能ですのでアニメーションで形態が移り変わる形状を作成することも可能です。下記はギアアイテムとガスケットのアニメーションをレンダリングしたサンプルです。


video

video

プロシージャルジオメトリは、通常のメッシュではありませんので頂点単位、ポリゴン単位で編集することはできません。編集したい場合は、アイテムのタイプをメッシュに変更することでコンポーネントの編集を行う事ができます。メッシュへの変換はフリーズコマンドではなく、アイテムリストのコンテキストメニューから実行する「タイプの変更」ですの注意してください。また、アイテム単位の移動、回転、スケールは行う事ができます。

ギアアイテム〔左)とメッシュに変換したギア(右)

また、マテリアルの設定ですが、アイテムマスクを作成してアイテム単位にマテリアルを設定することができます。そのプロシージャルジオメトリの仕様にも依存しますが、形状の部品をマテリアルやパートで分けているプロシージャルジオメトリであればマテリアルやパート単位にマテリアルを設定することも可能です。

ギアアイテムのポリゴンタグタイプ

プロシージャルジオメトリは、SDKを使ってプラグインで作成することを前提として新しく追加されたアイテムです。これからいろいろなアイディアで作成されたプロシージャルジオメトリが作成されていくことが期待されます。

2011年1月12日水曜日

modo 501: レンダリングチャンネル

modo 501には、レンダリングの機能拡張としてレンダリングチャンネルが幾つか追加されています。プロパティシートに追加されていないチャンネルもあります。一部はまだ実験的機能(experimental feature)のようです。このブログで追加されたレンダリングアイテムのチャンネルを整理しておきます。

レンダリングチャンネルの一覧



間接バンプマッピング (Indirect Bump Mapping)
間接バンプマッピングは、間接レイでバンプマッピングの評価を行う機能を有効にします。もちろんグローバルイルミネーションの計算のために使用される機能です。この機能は、通常無効となっていますが、例えば、デコボコした表面にコースティクスを表現するなど、特定のグローバルイルミネーションを使う場合に利用することができます。


開始プリパス空間 (First Pre-pass Spacing)
終了プリパス空間 (Last Pre-pass Spacing)
開始プリパス空間と終了プリパス空間は、グローバルイルミネーションの品質をより細かく制御するために用意されたチャンネルで、ICのプリパスをピクセル数のプリセットで指定します。これは実験的機能のようでベータテスターのYazan氏がフォーラムで解説しています。デフォルトのプリパスは、開始32ピクセルと終了4ピクセルです。最初のプリパスは32ピクセルで行われ、領域がに2分割されていき、最終的に4ピクセルになります。


間接LOD (Indirect LOD)
間接LOD(Level of Detail)は、メモリーの消費とレンダリング速度を向上させるためのオプションです。この機能を有効にすると間接照明のレイがヒットしたときにレベルオブディテールのコピーがディスプレースメントサーフェイスで作られます。高解像度のサーフェイスをメモリーから解放してLODに応じた低レベルのコピーが使われるためメモリーの節約とレンダリングの高速化につながるというオプションです。高解像度のテクスチャを多く使用するGIレンダリングで効果がでる場合があります。


ディスプレースメント・バンプ (Displacement as Bump)
このオプションはディスプレースメントの計算をバンプとして計算する事によって、メモリー消費とレンダリング速度の向上をはかる機能です。ディスプレースメントマップはマップの解像度に応じて低解像度のポリゴンを細かいマイクロポリゴンに分割し、ディーテイルを表現する機能ですが多くのメモリーを消費します。これはサーフェイスのディーテールの品質をできるだけ落とさずにバンプの計算でディスプレースメントに近いレンダリングを実現するためメモリー消費とレンダリング速度の向上が期待できます。ディスプレースメント・バンプ に関しては以前のブログでも少し紹介しています。

ディスプレースメント(modo 401)とディスプレースメント・バンプ(modo 501)の比較



下記のチャンネルはまだ調べていません(すみません)。詳細がわかりましたら後のブログで紹介いたします。

レイトレース加速度 (Ray Trace Acceleration)
レイバッチサイズ (Ray Batch Size)
サンプル統合半径 (Sample Merging Radius)

2011年1月9日日曜日

modo 501: スナッピング

modo 501では、スナッピングのワークフローに見直しが行われました。


  • スナップトグルキー
  • スナッピングパレット
  • デフォルトスナップツール
  • 1Dスナッピング
  • 固定スナップ


スナップトグルキーは、スナッピングのオンとオフを切り替えるためのキーです。modo 401では、スナッピングのプルダウンメニューにあった有効ボタンと同じ機能ですが、使う状況によって動作が異なります。このトグルキーはグローバルなXキーに割り付けられていますので、modo 401までデフォルトであった押し出しツールは、SHIFT-Xに変更されました。Xキーを普通に押すとスナッピングの状態のオン・オフが切り替わります。グリッドスナップやジオメトリスナップなどを起動して、マウスボタンを押しながらXキーを押すとXキーを押している間だけスナッピング状態が切り替わります。modo 501では、スナッピングのデフォルト値はオフですので、必要なときにXキーを押すとスナッピングが効くようになります。


ペンツール、グリッドスナップはオフ

マウスをドラッグ中にXキーを押した時だけスナップが有効になる



modo 401までは、スナッピングに関する設定が初期設定パネルなどいろいろな場所に分散されていましたので少し分かりにくい場合がありました。modo 501では、F11キーもしくはツールプロパティのスナッピングボタンを押すとスナッピングに関係するアトリビュートを並べたポップオーバーが表示されます。グリッドやジオメトリスナッピングなどもここから呼び出せます。

スナッピングパレット


このスナッピングパレットに、デフォルトスナップツールという項目があります。これは移動ツールやペンツールなどメインツールを起動したときに自動的にツールパイプにスナップツールを追加する機能です。例えば、グリッドスナップを頻繁に使う作業があったとき、通常はグリッドスナップツールとメインツールを別々に起動したり、ツールプリセットを作って使う必要がありました。modo 501では、Xキーを押したときだけスナップが働くのでよく使うスナップツールをここに登録しておけば、必要な時にいつでもスナップが使えるようになります。デフォルトのデフォルトスナップは、最後に使用したスナップツールです。もし、modo 401と同じフローで使いたい場合はここを「なし」設定して置くことができます。


1Dスナッピングは、ジオメトリスナッピングの一機能でツールの軸ハンドルを使用した時にのみ働く機能です。通常、ジオメトリスナッピングはマウスボタンを押しながらエレメントが置かれているマウスの位置を他のエレメントの位置に吸着させる機能です。これはツールハンドルを使っているときは全く機能していませんでした。1Dスナッピングは移動ツールなどの軸ハンドルをドラッグしたときにその軸方向の延長線上と他のエレメントが置かれている平面が交差するポイントに吸着が行われます。ちょうどガイドをつかってエレメントを整列させるような作業を自動的に行う事ができます。

軸ハンドルをドラッグすると破線上にハンドルがスナップ


modo 501のジオメトリスナッピングは、二段階のスナッピング範囲を持っています。初期設定の入力>作業平面に定義されている外側範囲と内側範囲です。移動中のマウス位置があるスナッピング対象エレメントの外側範囲に入ると候補位置がハイライト表示され、内側範囲に入ると実際にスナッピングが行われます。これは非常に便利でスマートな機能なのですが、他のツールのスナップのように移動中のマウス位置が必ず最も近いスナップ位置に吸着して欲しいというリクエストもありました。これを有効にするとスナッピングは近傍の頂点に強力にスナップします。

2011年1月4日火曜日

modo 501: キット


modo 501では、キットのコンセプトがワンランク上の存在としての取り扱われるようになりました。キットはコンフィグファイル、リソース画像、スクリプト、プラグイン、コンテントで構成されるパッケージでmodoに特定の機能を追加する物です。代表的なキットには、HDRESplashSLIKなどがあります。













modo 501は、起動時に任意のディレクトリにキットがないか検索します。この検索ディレクトリにはuser:Configsとリソースディレクトリが含まれます。キットはindex.cfgというファイルを含むサブディレクトリです。これは一般的なコンフィグファイルですが、キットの名称を持つ宣言文があります。
<?xml version="1.0" encoding="UTF-8"?>
<configuration kit="kitName">
  [...]
</configuration>
キット名は内部名称でありグローバルかつユニークでなければなりません。このコンフィグファイルは自動的にキットを認識させるためだけのファイルです。その他の必要なファイルはこの場所から必要に応じて参照されます。キットは自動的にkit_<name>と呼ばれるキットのディレクトリを示すパスのエリアスを得ることができます。
<?xml version="1.0" encoding="UTF-8"?>
<configuration kit="kitName">
  <import>resrc</import>
  [...]
</configuration>
もしくは個々のリソースを名称を指定してインポートします。
キットにはプラグインを使うこともできますので、サブディレクトリにプラグインを配置し、32ビットと64ビットのプラグインを自動識別させて読み込ませることも可能です。
<?xml version="1.0" encoding="UTF-8"?>
<configuration kit="kitName">
 <atom type="Extensions32">
  <list type="AutoScan">extra</list>
 </atom>
 <atom type="Extensions64">
  <list type="AutoScan">extra</list>
 </atom>
 [...]
</configuration>
上記の例はキットが32ビット版と64ビット版のプラグインを持ち、正しいバージョンを"extra"フォルダにインストールされるように設定しています。もしくは、単一のキットが異なるディレクトリに入れた両方のバージョンのプラグインを同時に持つこともできます。
<?xml version="1.0" encoding="UTF-8"?>
<configuration kit="kitName">
  <atom type="Extensions32">
    <list type="AutoScan">x32</list>
  </atom>
  <atom type="Extensions64">
    <list type="AutoScan">x64</list>
  </atom>
  [...]
</configuration>
キットにアイコンやその他の目的の為に使用する画像を定義することもできます。アイコン画像は使用するコンフィグ自身のファイルパスからの相対位置が検索されます。この例では"icon.tga"ファイルは、コンフィグファイルと同じディレクトリに置かれます。画像リソースのキーはグローバルでユニークでなければなりません。
 <atom type="UIElements">
  <hash type="Image" key="testKit_icons">icon.tga</hash>
  <hash type="Icon" key="item.val.test.texture">
    <atom type="Source">testKit_icons</atom>
    <atom type="Location">0 0 13 13</atom>
  </hash>
 </atom>

スクリプトもキットから参照可能です。これはスクリプトへのエリアスを定義することで実現されています。画像の場合のように、スクリプトがキットディレクトリの中にある場合は、スクリプト名称以外なにも必要ありません。
 <atom type="ScriptSystem">
  <hash type="ScriptAlias" key="myScript">doit.pl"</hash>
  <hash type="ScriptAlias" key="myScript2">dir/doi2t.pl"</hash>
 </atom>
上記のように定義するとエリアスはスクリプトのある場所を参照するために使用されます。例えば、"@myScript"は上記の"doit.pl"を実行し、自動的にエリアスとキットの置かれている場所を認識します。これによってスクリプトを直接ユーザーが呼び出したり、キット自身から呼び出せるようになります。
キットだけでなく任意のスクリプトにエリアスを設定することが可能です。エリアスのパスは絶対パス、参照、エリアスパスもしくはユーザースクリプトフォルダのスクリプト名称でなければなりません。
 <atom type="ScriptSystem">
  <hash type="ScriptAlias" key="myScript">pathAlias:dir/doit.pl"</hash>
 </atom>
ユーザーがキーカスタマイズを確実に行えるように、キットで使用する全てのスクリプトにスクリプトエリアスを使用することをお勧めします。もしくはスクリプトをキットのパスエリアスの相対位置として直接実行する方法もあります。
キットを特定のシステムに対してのみに有効にしたり、逆に無効することができます。例えば、このキットはPCにだけにロードされます。
<?xml version="1.0" encoding="UTF-8"?>
<configuration kit="kitName" and="nt">
  [...]
</configuration>
こちらはMacの32ビット版のmodoにだけロードされます。
<?xml version="1.0" encoding="UTF-8"?>
<configuration kit="kitName" and="app32" or="mac">
  [...]
</configuration>
この論理値は読み込まれた順番に評価されます。グループ化はできません。"!x86"などの記述は負の論理値を表すために使うことができます。サポートされているキーには、pp32, app64, x86, x64, mac, osx, win, ntがあります。この規則には制限がありますので対応できない組み合わせもあります。
modo 501用には既にLaubwerk Plants(樹木のキット)などサードパーティのキットの開発も進んでいます。
このmodoのキットの仕組みと変幻自在なUIを使うことによってアイディア次第で特定用途向けのCGパッケージを作ることが可能です。キットは、modoを3DCGのツールキットとしてコンテンツパッケージを作る手段を提供しています。http://www.luxology.com/store/hdre02_landscape/

2011年1月2日日曜日

modo 501: レンダリング性能の改善

modo 501では、レンダリングに様々な改善が行われています。中でもレンダリング速度の大幅な改善は501の大きな改善事項の一つです。CPUの性能が幾ら高速化されてもレンダリング速度向上は重要ですね。

基本的にmodoのレンダリングは、GPUを使用せずCPUの機能のみを使ってマルチスレッディングの処理に最適化されています。CPUで必要な命令はSSE2ですので、最近のCPUでしたらほとんど問題なく動作します。レンダリングの単位であるバケットは各スレッドに割り当てられますのでコア数が増えるほど並列化され高速にレンダリングされます。下記はmodo 401とmodo 501のレンダリング速度を比較した結果です。もちろん、レンダリングするシーンの特性によりスピードアップのバラツキはありますが、1.5倍ぐらいは普通に速度アップしています。シーンによっては3倍以上のパフォーマンスを発揮します。
Room, modo 401: 66.3s
Room, modo 501: 44.1s (1.50x speedup)
8Spheres, modo 401: 64.6s
8Spheres, modo 501: 40.1s (1.61x speedup)
TeaTime, modo 401: 55.3s
TeaTime, modo 501: 32.2s (1.72x speedup)
AngerManagement, modo 401: 42.8s
AngerManagement, modo 501: 24.0s (1.78x speedup)
WMD_Full_Scene, modo 401: 111.4s
WMD_Full_Scene, modo 501: 58.1s (1.92x speedup)
TestTubes, modo 401: 44.0s
TestTubes, modo 501: 22.6s (1.95x speedup)

特にレンダリング速度がアップした物にMDDファイルを使ったアニメーションのレンダリングがあります。MDDはモデルデータの頂点座標の時系列情報を保存したファイルでLightWaveを始め、多くの3DCGソフトウェアがMDDファイルをサポートしています(※一部のソフトウェアはPointOvenなどサードパーティのソフトが必要になります)。他のソフトでアニメーションを作成し、modoでレンダリングをするフローで仕事をする方には特に恩恵が大きいのではないでしょうか。


また、ファーを使ったシーンではレンダリング速度の向上に加え、使用メモリーの節約も同時に行っています。レンダリングに不必要な視野外のファーを可能な限り除去することによってレンダリング速度とメモリー節約を同時に行っています。ファーを使用したレンダリングは時間が掛かる処理ですので効果は大きいと思います。リリース版ではありませんがMac OS版も64ビットになり、2Gバイトメモリーの制限からは解放されますが、使用メモリーの効率化もまだまだ重要です。

ファーカリング(オフ)

ファーカリング(オン)
その他、バンプマッピングの改善もレンダリング速度とメモリー節約に貢献しています。ディスプレースメント・バンプ(Displacement as Bump)は、同じ条件でのレンダリング効率がアップした物ではありませんが、ディスプレースメントを使用してレンダリングしたイメージと同じぐらいの品質のイメージをバンプで実現する機能です。条件によっては見た目でわからないディスプレースメントのレンダリングを高速かつ少ないメモリーで行う事が可能です。また、バンプマップそのもののアルゴリズムも改善されましたので、よりリアルな凹凸を表現できるようになりました。
通常のディスプレースメントでのレンダリング

ディスプレースメント・バンプを使ったレンダリング