2011年12月31日土曜日

FBX形式


FBXは、Autodesk社の3DCGシーンデータを交換するための中間ファイルフォーマットです。元々はKaydara社が自社のアニメーションツールFilmBox(現在のMotionBuilder)が他社のCGツールとデータ交換を行う目的で開発された中間ファイル形式(FilmBoxExchange)でしたが、現在はAutodesk社の3DCGアプリケーション間のデータ交換およびユーザーがシーンファイルをアクセスする目的で利用されています。先日、Autodesk社の3Decemberというイベントに参加してきましたが、今後もFBXが同社のCGアプリケーションのデータ交換形式としてバージョンアップされていくということです。

FBXは、バイナリー形式(もしくはテキスト形式)でシーングラフで記述するファイルフォーマットで、通常はAutodesk社が提供しているFBX SDKを利用してAPIベースでアクセスします。FBXのバージョンは使用しているSDKのバージョンと密接にリンクしています。基本的には上位互換ですが、新しいSDKでサポートされなくなったAPIなどがありますので、古い形式で出力されたFBXでも新しいバージョンをサポートしているプラグインで読めない場合もあるようです。Autodesk社から異なるバージョンを変換するFBXConverterがダウンロードできますので、バージョンの違いが起因するエラーが発生した場合は、このユーティリティツールを利用する方法があります。

http://usa.autodesk.com/adsk/servlet/pc/index?id=6837478&siteID=123112

modo 501で使用しているSDKは、FBX SDK 2010.2です。デフォルトでの保存形式はテキスト形式ですが、初期設定パネルのシーン入出力>FBX書き出しのオプションでバイナリ形式出力に変更することも可能です。初期設定パネルで指定できるオプションは、下記の通りです。”エッジスムージング付きで保存”は、ポリゴン頂点の法線ベクトルをFBXのエッジスムースとして出力するオプションです。

  • テキストフォーマットで保存
  • エッジスムージング付きで保存
  • カメラを保存
  • ライトを保存
  • ロケータを保存


下記は、modoがサポートするFBXの詳細です。

頂点座標値
頂点座標値は、modoの内部で使用されている座標値に100を掛けた値で入出力されます。modoは、1メートルを1.0で内部的に保存していますのでセンチメートルとして出力していることになります。ちなみにmodoの座標系は右手座標系で、Y軸が上方向です。

モーフデータ
modoのモーフマップは、FBXのシェープデータとして出力されます。出力されるモーフは、相対モーフのみで絶対モーフマップは出力されませんので注意が必要です。また、FBXのシェープデータは相対モーフマップとしてmodoに読み込まれます。

法線ベクトル
modoの面法線ベクトルは動的に計算されます。FBXにはこの計算された法線ベクトルの値がLayerElementとして出力されます。また、FBXに保存されているLayerElementのベクトルはmodoの法線ベクトルマップに読み込まれます。

テクスチャUV座標値
modoでは、テクスチャUV座標値は頂点マップとしてメッシュレイヤーごとに保存されています。FBXでは複数のUVマップを取り扱うことができますので、modoで作成した複数のUVマップは全てFBXに書き出すことができます。FBXではLayerElementとして保存されます。

頂点カラーマップ
modoでは、頂点カラーデータもテクスチャUVと同様に非連続頂点マップとして保存されます。頂点カラーマップは、RGBおよびRGBAの2種類があり、どちらもFBXのLayerElementとして保存されます。

ポリゴングループ
modoでは、ポリゴンを任意の目的でグループ化する際にパートという文字列をポリゴンに付けることができます。同一のパート名称を持ったポリゴンをポリゴングループとして取り扱うことが可能です。modoで付けられたパート情報は、FBXのLayerElementPolygonGroupに変換されます。

スタティックメッシュ
スタティックメッシュは、通常のメッシュを編集不可の圧縮した三角形の集合として保存するmodoのもう一つのメッシュアイテム形式です。このスタティックメッシュには、頂点マップの情報も保存されていますので、FBXにも通常のメッシュと同様に頂点座標やテクスチャ座標値が出力されます。ただし、メッシュと同じフォーマットで出力されますのでFBX読み込み時にはメッシュアイテムとして読み込まれます。

サブディビジョンサーフェイス
modoには、オリジナルのサブディビジョンサーフェイスとCatmull-Clarkサブディビジョンサーフェイスがありますが、FBXにはサブディジョンサーフェイスのSmoothness、PreviewDivisionLevels、RenderDivisionLevels、DisplaySubdivisionsが出力されます。modoではサブディビジョンサーフェイスはポリゴン単位の情報ですが、FBXではメッシュレイヤー全体に対してスムースレベルやサブディビジョンレベルが適用されますのでサブディビジョンサーフェイスを持つメッシュのポリゴンは全てサブディビジョンサーフェイスとして認識されます。また、エッジウェイトの情報はEdgeCreaseのデータとして出力されます。スムースレベルが設定されたFBXのメッシュポリゴンはCatmull-Clarkサブディビジョンサーフェイスとしてmodoに読み込まれます。

カーブ、ベジェカーブ
カーブおよびベジェカーブは、通常の面ポリゴンとして出力されますので、modoに再度読み込むと面ポリゴンになってしまいます。

インスタンスメッシュ
インスタンスメッシュは、元となるメッシュアイテムがFBXに出力されます。

マテリアル
マテリアル情報は、modoとFBXに共通の項目が入出力されます。

modoFBX
Diffuse ColorDiffuseColor
Specular AmountSpecularFactor
Specular ColorSpecularColor
RadianceEmmisiveFactor
Luminance ColorEmissiveColor
Reflective AmountReflectionFactor
Reflection ColorReflectionColor
Transparency AmountTransparencyFactor
RoughnessShininess(Shininess = exp ((10 * (1 - Roughtness) + 2) * log (2)))

カメラ情報
カメラに関しては、modoのカメラアイテムのチャンネルデータがFBXに出力されます。一部のチャンネルはアニメーションのFCurveとして出力されます。

modoFBX
Focal Length(Envelope)FocalLength(FCurve)
SqueezeSqueezeRatio
Film WidthApertureWidth
Film HeightApertureHeight
Projection TypeProjectionType(eORTHOGONALもしくはePERSPECTIVE)
Focus DistanceFocusDistance
Film OffsetXOpticalCenterX
Film OffsetYOpticalCenterY

ライト情報
ライトは、Radiant Exitanceが光源の輝度情報としてFBXのIntensityに出力される(FBX Intensity = Radiant Exitance * 40)他、スポットライトのコーン角度、指向性光源がeDIRECTIONAL、点光源がePOINTとして出力されます。ライトマテリアルの色もLightColorとして出力されます。

ロケータ情報
メッシュ、カメラ、ライトは、ロケータアイテムの派生アイテムで、共通のトランスフォーム情報(移動、スケール、回転、回転順序、ピボット位置)を持っています。これらのロケータアイテムの情報は、アニメーションデータとして、アイテムの階層構造と共に出力されます。FBXは元々モーションデータを受け渡すのが主な目的でしたのでアニメーション情報に関しては多くの情報が出力されています。ただし、modoのエンベロープカーブは、複合的なカーブを混在して使用することが可能な柔軟かつユニークな形式ですので、このエンベロープをFBXのFCurveに内部的に変換しています。




2011年11月6日日曜日

OBJ形式


modoはネイティブのシーンフォーマットであるLXO形式以外に幾つかの外部フォーマットをサポートしています。OBJ形式は、モデルデータを入出力するためのファイル形式でさまざまな3DCGソフトウェアでサポートされています。このフォーマットは、Wavefront社のThe Advanced Visualizerでモデルデータを定義するファイルフォーマットで、そのほかにもバイナリー形式の(.mod)やシーンデータを記述する(.pv)などがありましたが、モデルデータをテキスト形式で記述する(.obj)だけがモデルデータの中間フォーマットとして現在でも幅広く使用されています。ちなみにWavefront社は、1995年にシリコングラフィクス社にカナダのAlias Research社と共に買収され、当時次世代ソフトウェアとして開発中だったサイクロンプロジェクトは現在のAutodesk社のMayaの開発に引き継がれていったのを記憶しています。



OBJ形式が現在でも広く中間フォーマットとして利用されている理由を考察してみました。

  • テキスト形式であり簡単に読み書きするためのパーサーが作れる。
  • 多角形を取り扱うことができる。
  • テクスチャのUV座標値、頂点法線ベクトルが記述できる。
  • その他、グループ、マテリアルの指定などが可能。


実は、OBJ形式はThe Advanced Visualizer 3.0から、シンタックスが拡張されBezierやB-Splineカーブ、Nurbsパッチまでも記述できるようになっていますが、拡張されたシンタックスをサポートしているソフトウェアは多くないため、あまり使用されていないようです。

下記は、立方体を記述しているOBJファイルの例です。OBJの詳しい仕様に関してはwikiなどのサイトで公開されています。
o Mesh
v -0.5 -0.5 -0.5
v 0.5 -0.5 -0.5
v 0.5 -0.5 0.5
v -0.5 -0.5 0.5
v -0.5 0.5 -0.5
v 0.5 0.5 -0.5
v 0.5 0.5 0.5
v -0.5 0.5 0.5
vn 0 -1 0
vn 0 0 -1
vn 1 0 0
vn 0 0 1
vn -1 0 0
vn 0 1 0
vt 0.25 0
vt 0.5 0
vt 0.5 0.333333
vt 0.25 0.333333
vt 1 0.666667
vt 0.75 0.666667
vt 0.75 0.333333
vt 1 0.333333
vt 0.5 0.666667
vt 0.25 0.666667
vt 0 0.666667
vt 0 0.333333
vt 0.25 1
vt 0.5 1
mtllib cube.mtl
usemtl Default
g Default
f 1/1/1 2/2/1 3/3/1 4/4/1
f 5/5/2 6/6/2 2/7/2 1/8/2
f 6/6/3 7/9/3 3/3/3 2/7/3
f 7/9/4 8/10/4 4/4/4 3/3/4
f 8/10/5 5/11/5 1/12/5 4/4/5
f 5/13/6 8/10/6 7/9/6 6/14/6


"o Mesh"は、オブジェクトの名称を定義する行です。この行は省略されている場合もありますが、定義しておくとモデル名称を指定することができます。

"v -0.5 -0.5 -0.5"は、頂点の座標値を表しています。ソフトウェアによってデフォルトの単位系は異なりますので、読み込み時に変換されるか、読み込んだ後にスケールなどで調整する事になります。vで指定された頂点は、出現順に連番が付けられます。

"vn 0 -1 0"は、頂点の法線ベクトルを記述しています。法線ベクトルは長さ1.0に正規化されていることが前提になっています。法線ベクトルの指定はオプションであり、省略可能です。

"vt 0.25 0"は、テクスチャのUV座標値を指定しています。テクスチャ座標値もオプションであり、省略可能です。

"mtllib cube.mtl"は、マテリアルライブラリのファイル名称を記述しています。OBJではマテリアルは外部ファイル(.mtl)で別に記述し、そのファイルに記述されているマテリアルをOBJの中で参照します。本家のThe Advanced Visualizerでは、マテリアルライブラリのファイルの場所は、WF_MTL_DIR環境変数で指定されていましたが、ファイル名称のみを記述し、(.obj)ファイルと同じフォルダに置いておくのが一般的なようです。下記は、cube.mtlファイルの一例です。newmtl指定子でマテリアルの名称を指定し、その後にディフューズなどマテリアル属性を記述しています。

newmtl Default
Kd 0.8 0.8 0.8
Ns 256
d 1
illum 2
Ka 0 0 0
Ks 0.2 0.2 0.2

"usemtl Default"で、以下に定義するポリゴンでどのマテリアルを使用するかを記述しています。以下に出現するポリゴンは、Defaultというcube.mtlに記述されているマテリアルが適応されます。

"g Default"は、グループを指定しています。これはちょうどmodoのパート名称のポリゴンタグと一致します。

"f 1/1/1 2/2/1 3/3/1 4/4/1"は、四角形の面ポリゴンを記述しています。前述した頂点、法線ベクトル、テクスチャ座標値は出現順に1から番号が付けられ、3つのインデックスの対としてポリゴン頂点が記述されています。2/2/1は、第2頂点、第2法線ベクトル、第1テクスチャ座標を指定していることを意味しています。法線ベクトルを省略する場合は"2//1"、テクスチャ座標を省略する場合は"2/2"、両方を省略する場合は"2"のように記述します。テクスチャ座標値は、1つしか記述することができません。

次にmodoがOBJフォーマットをどのようにサポートしているかを解説したいと思います。modoのOBJ入出力は、SDKを使用したプラグインとして実装されており、LXSDKにはobjioフォルダにサンプルコードとして全ソースコードが公開されています。入出力に関する詳細や仕様のカスタマイズが必要な場合はこのSDKのサンプルコードが役に立ちます。

下記はmodoのobjioでサポートされているOBJファイルの命令です。

v   頂点座標値
vt   テクスチャ座標値
vn   法線ベクトル
o   オブジェクト名称
g   グループ
f   面ポリゴン
usemtl マテリアル名称
mtllib マテリアルライブラリ

頂点座標値は、メッシュアイテムの頂点座標が出力されます。もし、モーフマップが頂点マップリストで選択されていた場合は、基本の頂点座標にモーフマップの値が適用された座標値が出力されます。座標系はアイテムの座標系が付加されたグローバル座標系です。

modoでは、複数のUVテクスチャを頂点マップとして持つことができますが、OBJでは一組のUVマップだけしか持つことができません。OBJで出力するUVマップは現在頂点マップリストで選択されているマップのテクスチャ座標値が出力されます。

modoでは、法線ベクトルは面法線ベクトルとスムージング角度を元に頂点の法線ベクトルが計算されます。OBJにはこの計算された法線ベクトルが出力されます。また、OBJファイルに記述されている法線ベクトルは法線ベクトルマップとしてmodoには読み込まれます。この法線マップは読み込んだメッシュを後で編集する場合には事前に削除しておくことをおすすめします。modoは法線ベクトルが存在する場合は、動的に法線ベクトルを計算せずに法線マップのベクトルを優先して使用します。

オブジェクトの名称を指定する"o"は、modoではメッシュアイテムの名称として使用されます。シーン上に複数のメッシュアイテムが存在する場合は、現在選択されているメッシュアイテムが一つのファイルにまとめて出力され、"o"命令によって新しいメッシュが分離されて出力されます。modoにこのOBJファイルを読み込んだ場合は、メッシュアイテムはこの"o"命令を元に復元されますが、アイテムの座標値はリセットされてしまいます。

o Cube1
v -0.5 -0.5 -0.5
v 0.5 -0.5 -0.5
  :
f 1/1/1 2/2/1 3/3/1 4/4/1
f 5/5/2 6/6/2 2/7/2 1/8/2
o Cube2
v 1.5 -0.5 -0.5
v 2.5 -0.5 -0.5
  :
f 1/1/1 2/2/1 3/3/1 4/4/1
f 5/5/2 6/6/2 2/7/2 1/8/2

modoには、ポリゴンタグというポリゴンをグループ化するためのデータがあります。modoのパート、マテリアルは、それぞれOBJの"g"、"usemtl"に対応します。

modoの面ポリゴン、サブディビジョンサーフェイス、Catmull-Clarkサーフェイスは全て"f"命令で面ポリゴンとして出力されます。

マテリアルに関しては下記の属性がサポートされています。括弧の名称はmodoでの対応するマテリアル属性です。

Ka   アンビエント(ルミナンスの色)
Kd   ディフューズ(ディフューズの色)
Ks   スペキュラー(スペキュラーの色)
d   ディゾルブ(1.0 - 透過量)
Ns   スペキュラー係数(スペキュラー量)
map_Kd ディフューズマップ(ディフューズの画像マップ)
map_refl   リフレクションマップ(リフレクションの画像マップ)
map_Bump バンプマップ(バンプの画像マップ)
map_D ディゾルブテクスチャ(透過の画像マップ)
map_Ks スペキュラーテクスチャ(スペキュラーの画像マップ)
map_Ka アンビエントテクスチャ(ルミナンスの画像マップ)

その他、modoの初期設定には、OBJファイル入出力に関するオプションが幾つか用意されています。”メッシュをグループとして出力”を指定した場合は、メッシュアイテムは"o"命令を使って別々にオブジェクトとして出力されずに"g"命令を使ってグループとして指定しれます。また、”スタティックメッシュとして入力”を指定すると読み込まれたポリゴンはメッシュアイテムではなくスタティックメッシュとして読み込まれます。



2011年11月2日水曜日

グラフ編集とバッチレンダリング

第4回勉強会での日比さんのセッションの後で、マテリアルなどの設定値をテスト的に設定したレンダリング結果をまとめて作成し、後で比較したいという質問があったと記憶しています。このブログでこの件に関して少し補足させていただきます。

modoではマテリアルなどさまざまな属性を時系列的に変更させるための機能が搭載されています。この機能を使ってアニメーションでレンダリングを行えばフレームごとに別々のレンダリング結果を得ることが可能です。アニメーション機能は静止画のレンダリングには関係ないと思われている方がいらっしゃるようですが、静止画の制作においてもmodoのアニメーションは有効な手法です。

シェーダツリーの各属性の値のフィールドには丸いボタンのようなアイコンが付加されています。このボタンの上で右マウスボタンを押すとコンテキストメニューが表示されますので、ここからグラフ編集を選択すると各アニメーションフレームでその属性の値をどのように設定するかを設定するグラフ編集画面が表示されます。この画面でフレームにキーフレームを作成し、各フレームでの値を変化させることが可能です。時系列で変化させることができる属性はディフューズなどのマテリアル属性だけでなく、大域照明の様々な設定値もありますので、いろいろな値をフレームごとに変えてアニメーションレンダリングすれば、連番ごとに異なるレンダリング結果を得ることが可能になります。




また、それでも別々のシーンを作成してまとめてレンダリングを行い、後から結果を比較したい場合には、バッチレンダリングという選択肢もあります。Fredrik Stenson氏のサイトには、複数のシーンをまとめてmodoに読み込んだ後で、まとめてレンダリングを行うためのスクリプトBatchRenderが公開されています。まず、BatchRenderをダウンロードし、圧縮ファイルを解凍すると、fs_BatchRender_scriptというフォルダが現れますので、これを付属のhow_to_use.rtfのドキュメントにしたがい、modoのユーザーフォルダにコピーします。fs_BatchRender_scriptはScriptsフォルダに、Form_ScriptsContainer.CFGは、Configsフォルダにそれぞれコピーします。ユーザーごとのフォルダの場所は下記の通りです。

OS X:
<user name>/Library/Application Support/Luxology/Configs
<user name>/Library/Application Support/Luxology/Scripts

Win XP:
C:\Documents and Settings\<user name>\Application Data\Luxology\Configs
C:\Documents and Settings\<user name>\Application Data\Luxology\Scripts

Win Vista:
C:\Users\<user name>\AppData\Roaming\Luxology\Configs
C:\Users\<user name>\AppData\Roaming\Luxology\Scripts

Win 7:
C:\Users\<user name>\AppData\Roaming\Luxology\Configs
C:\Users\<user name>\AppData\Roaming\Luxology\Scripts

上記をインストールした後、modoを起動するとシステムメニューにScriptsメニューが表示されます。




使い方は非常に簡単です。まず、レンダリングしたいシーンを片っ端からmodoに読み込み、上記のメニューからBatch Renderを起動します。すると、各シーンごとにレンダリングで保存する画像ファイルの名称と形式をしていするダイアログが表示されますので、全てのシーンに対して保存画像の指定を行うとレンダリングが開始されます。


また、Fredrik Stenson氏のサイトには、その他にも便利なツールが沢山用意されています。AfterFxIOは、AfterEffectにキーフレーム情報を入出力するためのツールで、modo 501のカメラ情報をAfterEffectに取り込むことが可能になります。modoは、Render OutputでZバッファの値や様々なレンダリングレイヤーを個別に出力することももちろん可能です。


AfterFxIO from Fredrik Stenson on Vimeo.

2011年8月15日月曜日

円弧を作るスクリプト

Takumiさんが開発した円弧を作るスクリプト”Arc.pl”がアップデートされましたので、このブログで紹介させていただきます(Takumiさん、ありがとう)。Arc.plは、頂点で指定したエッジを円弧に変換するためのスクリプトで、アップデートされたバージョンでは、ポイント数を指定して選択したエッジを自動的に分割する機能が追加されています。


まず、最初に円弧に変換するエッジの始点(1)と終点(2)を選択します。次に円弧を作る平面を指定するためにもう一つ頂点(3)を選択します。この3つの頂点で円弧の始点終点と平面が定義されます。



次にCount of Pointsでエッジのポイント数を指定します。これは円弧の解像度になります。続けて、Radiusで円弧の半径、Curveで円弧の方向を指定します。Convexを指定すると凸型に、Concaveを指定すると凹型になります。



スクリプトは、下記のURLからダウンロードできます。スクリプト、SystemメニューからRun Script...からArc.plを選択することによって実行できます。ユーザー定義のScriptsフォルダに置くことによって、ファイル名だけでショートカットなどに割り付けて実行することも可能です。

http://bit.ly/nJveKn


スクリプトとは関係ないですが、modo User Group Tokyoの第三回勉強会に参加させていただくことになりました。今回の勉強会では日比さんがモデリングやレンダリングのテクニックをデモしていただける予定となっています。私の方からはモデリングのトラブルシューティングに関するチップスをKeynoteを使って説明することを考えています。modoの開発サイトから受け取るバグレポートの中には、イレギュラーなメッシュが原因で発生する不具合によるものが多数あります。これらのイレギュラーデータは、モデリングの作業中やインポートしてきたデータが原因で発生するもので原因を見つけるのに結構な時間を費やしてしまう事があります。今回の勉強会では、ちょっと地味ですがモデリングでトラブったときに解決のヒントになるチップスを紹介しようと思います。勉強会のスケジュールは、modo User Group Tokyoのサイトでご確認ください。

modoユーザーグループTOKYO


2011年8月3日水曜日

ショートカットキー

先日、あるユーザーの方から、ポリゴンベベルのGroupオプションをショートカットキーで切り替えができないかという質問を受けました。頻繁に切り替えて使用する機能は、ショートカットに登録して使うと作業効率が向上するのでしょう。

modoのショートカットは、システムメニューにあるInput Remapping(入力編集)でカスタマイズすることが可能です。modoの入力編集がユニークなのは、同じキーでも条件に応じて実行させるコマンドを別に設定できる点にあります。

たとえばContext(コンテキスト)には、Item(アイテム)モードとComponent(コンポーネント)モードがあり、Itemモードで設定したショートカットは選択がアイテムの時にだけ実行され、Componentモードで設定したキーは、頂点、エッジ、ポリゴン、マテリアルの選択モードでのみ実行されます。デフォルトの状態で設定されているショートカットはグローバルなショートカットキーです。

ポリゴンベベルを実行しているときにだけ有効なショートカットを設定するには、Edit(編集)モードをTool(ツール)に設定します。そして、Tool(ツール)のポップアップをPolygon Bevel(ポリゴンベベル)に指定します。ここでは、Gキーに下記のコマンドを設定します。

tool.attr poly.bevel group value:?

上記のコマンドは、ポリゴンベベルを実行中にGroup(グループ化)ボタンを押すと、Command History(コマンド履歴)に表示されますので、それをコピペして使います。最後の?の文字は、Command Historyではtrueもしくfalseで表示されています。これを?にすることによって、trueの時はfalseに、falseの時はtrueに切り替えるトグルコマンドを設定することが可能です。トグルが使えるのはアトリビュートの種類が論理値の場合だけです。

これでポリゴンベベルを実行中にGキーを押すとGroupのオンオフを切り替えることができるようになりました。ポリゴンベベルを起動していないときは、グローバルキーに設定されているビューポートのGoToコマンドが実行されます。

2011年7月30日土曜日

便利なスクリプト

先週、ユーザーミーティングに参加したときに、よく使われているスクリプトの話がでてきましたので、ここで紹介しておきます。

UNBEVELPERFECT CIRCLEは、Seneca Menadさんが作られたスクリプトです。Senecaさんは、DOOMで有名なid Softwareで働く、ゲーム開発系のCGアーティストで初期の頃からmodoの便利なスクリプトを提供してくれています。Senecaさんのスクリプトは、http://www.indigosm.com/で公開されていますが、modo 501に対応した最新版は直接下記のリンクからダウンロードします。ホームページを更新する暇がないぐらい忙しいらしいです。UNBEVELPERFECT CIRCLEにも、便利なスクリプトがたくさん公開されています。

indigosm scripts 3-25-11

Topic - Seneca's latest modo scripts (12-18-10)

UNBEVELは、エッジベベルなどで丸めたエッジを元のシャープのエッジに戻すスクリプトです。下図のようにベベルしたエッジの上部と下部のエッジを選択した後にUNBEVELを実行します。



PERFECT CIRCLEは、選択したポリゴン群の輪郭、エッジのループ、頂点ループを選択し、実行すると選択したループの頂点が正しく計算された円の輪郭に再配置されます。




スクリプトを実行する方法は幾つかあります。1番簡単な方法は、modoのシステムメニューのSystem > Run Script... (システム > スクリプトの実行...)から、直接スクリプトファイルを選択して実行する方法です。

良く使用するスクリプトは、Input Remapping (入力編集)でスクリプトの実行をscript.runコマンドを使って登録する事ができます。script.runコマンドは、@というエリアスを使ってアクセスできますので、@C:\Scripts\perfectCircle.plのようなシンタックスで登録する事ができます。

また、スクリプトの検索パス上にスクリプトを置くことによって、スクリプトのファイル名称だけで@perfectCircle.plのようにスクリプトを実行することも可能です。通常、ユーザーごとのデフォルトのスクリプトのパスは、OSごとに下記のように決められています。(XXXXはログイン名称)

Mac OS X
/Users/XXXX/Library/Application Support/Luxology/Scripts

Windows 7
C:\Users\XXXX\AppData\Roaming\Luxology\Scripts

更に、独自のフォルダを検索パスに含めたい場合は、下記のようなコンフィグを使って、フォルダをmodoに追加することができます。この記述は、mypath.cfgのように適当な名称をつけて上記のパスのScriptsをConfigsに置き換えたデフォルトコンフィグフォルダに置いておく必要があります。


<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <import>Z:\modo\config</import>
    <import>Z:\modo\config\scripts</import>
</configuration>

2011年7月25日月曜日

StartupCommands

昨日は、modoユーザーグループTokyoのミーティングに参加させていただきました。楽しかったです。みなさんありがとうございました。ミーティングの中で幾つか返答できなかった質問などがありましたので、このブログで解説していこうと思います。気がつけば前回のブログから2ヶ月も経過していました。

質問があったのは、レンダリングの設定値のデフォルトの値を変更してmodoの起動時に読み込ますことはできないかというものでした。レンダリングの設定には、レンダリングフレームの解像度だったり、さまざまなレンダリングアトリビュートの値などがあります。

さまざまなレンダリング設定もmodoの中ではアイテム(ロケータでないアイテム)として、扱われており、デフォルト値はプログラムにハードコードされています。

デフォルトの値は、それほど頻繁に変更するものでなければ、レンダリング設定のみを変更した空のシーンを作成し、それをmodo起動時に自動的に読み込ませることによって、オリジナルの設定を作ることができます。デフォルトシーンの作成は簡単です。modoを起動し、レンダリング設定など好きなように変更した後で、それをどこかのフォルダに名前をつけて保存するだけです。デフォルトの値を編集したいときは、そのシーンを呼び出して、書き換えるだけですので簡単ですね。

次にこのシーンを自動的にmodoを起動したときに読み込ませる方法ですが、コンフィグの設定にStartupCommandsという項目があります。この項目に起動時に実行したいコマンドを記述することが可能です。下記は、私が作成したデフォルトシーンをMyDefault.lxoとして保存し、scene.openでmodo起動時に呼び出す命令を設定しています。



<?xml version="1.0" encoding="UTF-8"?>
<configuration>


<atom type="StartupCommands">
    <list type="Command">scene.open "/Users/taz/Library/Application Support/Luxology/Configs/MyDefault.lxo" normal</list>
</atom>


</configuration>

これを適当な名称をつけて、ユーザーごとのコンフィグフォルダに保存しておきます。Mac OS X では、~/Libraray/Application Support/Luxology/Confingsがユーザーごとのコンフィグフォルダの場所ですので、Startup.cfgという名称で保存しておきます。名称は関係ありません。Mac OS X Lionになってから、ライブラリフォルダがデフォルトで非表示になっています。Optionキーを押しながら、システムメニューの”移動”メニューをクリックすると、ライブラリに移動するメニューが選択できます。Windows 7の場合は、~\AppData\Roaming\Luxology\Configsにあります。

StartupCommandsは、scene.open以外のコマンドも呼び出せますので、レンダリング設定などを変更するマクロやスクリプトを作成し、@コマンドで呼び出すことも可能です。他にも応用できる機能ですので、試してみてください。

2011年5月14日土曜日

Luxology.comの歩き方

今回の投稿では、www.luxology.comの活用の仕方を解説したいと思います。www.luxology.comは、オープンフォーラムやアセットシェアなどmodoユーザーにとって貴重なリソースの宝庫です。共通言語が英語なので敬遠されてしまう方もいるかもしれませんが、このサイトを上手に活用することをお勧めします。

アカウントを作ろう
www.luxology.comは、Luxology社のホームページですので、特別な設定がなくてもアクセスすることは可能ですが、アカウントを作成してログインすると幾つかのサービスが利用可能になります。アカウントはmodoのライセンスの所有の有無に関係なく作成することができます。アカウントの作成方法は、Luxology.jpFAQを参照してください。

製品を登録しよう
modoを購入するとライセンスごとにシリアル番号が割り振られます。このシリアル番号を上記のアカウントに登録することで、Registered Productsページから最新のソフトウェア、コンテンツおよびライセンスキーがいつでもダウンロードすることが可能になります。日本でmodoを購入したユーザーの方はイーフロンティアさんのスキームで日本語版の製品登録を行うことになりますが、日本語版として購入したmodoのシリアルをLuxology.comに同時に登録しておくことができます。日本語版としてmodoを購入し、両方に登録しておけば、英語版のすべてのサービス+日本語版のサービスが得られるのでお得です。サーバーがトラブルでダウンしてもどちらかのサーバーからライセンスキーなどがダウンロードできますので安心ですね。製品登録の方法は、こちらのFAQを参考にしてください。

アセットシェアを活用しよう
アセットシェアは、modoのユーザー間でアイテム、メッシュ、マテリアルなどコンテンツを制作するための素材を共有するためのシステムで、利用するためにはmodoの製品登録が必要です。このシステムのコンセプトは仕事もしくは趣味でmodoを使う人が制作の過程で作った部品をギブアンドテイクで再利用しましょうというものです。従って、ダウンロードしたもは仕事の制作で使用することができます。また、自分が作ったもので提供可能なものはここにアップロードしてみんなに使ってもらうように公開することができます。アセットシェアの利用規約に関してはLuxology.jpのサイトに日本語のページがあります。アセットシェアのプリセットシステムは、非常に良くできていてマテリアルなどは使用しているテクスチャの表示やシェーダツリーの構成まで参照することができます。このサイトを散策するだけでもシェーダツリーの勉強になります。



オープンフォーラムを利用しよう
オープンフォーラムは、ユーザー間の情報交換、製品のサポート、Luxologyからの最新情報などさまざまな情報が発信されているコミュニティサイトです。News & AnnouncementsにはLuxology社から製品やイベントなどがアナウンスされています。金曜日にはLuxology社の社長であるBrad PeeblerがFriday Updateで今週コミュニティで起きた出来事をmodocastと一緒に教えてくれます。Direct Connectは、modoの製品を登録しているユーザー限定のページでリリース前の製品のプレビューのビデオなどをたまに公開します。先日は、リリース前にrecoilの技術プレビュービデオを公開していました。Gallery & Work In Progressは、ユーザーが制作した作品もしくは制作中の作品をお披露目する場所です。ここに作品を公開すると世界中のmodoユーザーからコメントが貰えたり、技術的なアドバイスが貰えることがあります。Community Projectsは、コミュニティ上でコンテストを開催したり、さまざまなプロジェクトを開催したりする時に使われるトピックがあります。現在はちょうどインターネットアバターコンテストを開催中です。年末にはホリデーイメージコンテストが毎年開催されています。modoカテゴリーには、製品サポートやMac版、Windows版など特化した技術ごとのトピックスがたくさんあります。また、SDK, Scripting & Macrosのトピックスもありますので、SDKを使ってプラグインを開発中の方やスクリプト制作中の方は要チェックです。オープンフォーラムには、優れた検索エンジンがありますので、調べたいことがあれば検索をかけると関連したトピックがヒットされます。

ギャラリーに投稿しよ
オープンフォーラムにもギャラリーや制作中のトッピックがありますが、ギャラリーのページに自分の作品を投稿することができます。画像の投稿はImage Uploadからタイトルと簡単な説明をつけて投稿します。ギャラリーの新しい機能としてFacebookの"like"(いいね)ボタンがつきました。作品を観た人が"like"ボタンを押すと作品がFacebookのウォールに表示されます。

Luxology.comのサイトには、世界中のmodoユーザーからの膨大な情報が毎日のように更新されています。上手に活用することによってmodoの利用価値を高める事ができますので、ぜひアクセスしてみてください。

2011年5月12日木曜日

recoil v1.05

先日、発売されたリジッドボディダイナミクスプラグイン recoilのバージョン1.05が早くもリリースされています。luxology.comRegisterd Productから最新版をダウンロードすることができます。

最近、luxology.jpブログの更新もお手伝いしているので、どちらに書こうか迷ったのですが、recoilはこのブログで最初に紹介したので、今回はここに更新情報を載せることにしました。ちなみに、luxology.jpイーフロンティアさんのサイトで、Luxology LLCの日本法人があるわけではないのでお間違いなく(ちょっと紛らわしいですね)。今後は技術的な内容は自分のブログで、Luxology.comの最新ニュースはLuxology.jpのブログに書いていこうと思っています。




更新内容は、オープンフォーラムのrecoil v1.05 now availableに載っております。下記は日本語にしたものです。

v1.05 修正項目:

ベイキング:
- recoil.bakeCache. ダイナミックアイテムの追加トランスフォームの有効を参照するようにし、ベイキングの際に考慮されるように修正しました。ベイク時にゼロオフセットのアイテムがある際の問題を解決しました。

- ベイキするアイテムが複数のトランスフォームを持つことを考慮するように変更しました。これは既存の回転と移動のトランスフォームを削除し、独自のトランスフォームと置き換える処理を行います。スケールとシアーのトランスフォームは従来のままです。

- 親アイテムのアニメーションを考慮するように修正しました。以前は対応していませんでした。

- 新しく"keepEnvelopes"を追加しました。このフラグを有効にすると新しいキーフレームを書き込む前に既存のキーフレームのチャンネルをクリアしません。無効がデフォルト値です。

- recoil.bakeTransformを追加しました。回転と移動を別々にベイクすることで反転の問題を解決します。

その他:
- "set rest length"ボタンをスプリングアイテムボタンの後に追加しました。

- ドキュメントの修正を若干行いました。

- 名前のないグループアイテムを取り扱えるように修正しました。

- ヘルプメニューをホームページにリンクしました。

- メッシュスキャナーは長さゼロの法線ベクトルを正しく処理するようになりました。

- モーターボタンが正しく動作するように修正されました。

既知の問題:

-"recoil.runSim"コマンドは、キーに割り付けて使用するとクラッシュする場合があります。

- applied impulses は、スケールされたシーン対して正しくスケールされません。

- ダイナミックフォームのインスタンスアイテムのプロパティにはDeactivationの幾つかの項目が抜けています。フォーム上のこれらの項目はメッシュアイテムを想定しています。


FMX 2011では、Andy Brown氏によってrecoilのデモが行われたようです。


Recoil FMX 2011 Demos from andy probst on Vimeo.

2011年4月28日木曜日

recoil登場!

Luxology.com登録ユーザーの方には、Direct Connectでチラ見せしていたリジッドボディダイナミクスプラグインrecoilが本日発売になりました。recoilは、オープンソースのBullet Physicsライブラリを使用した剛体シミュレーションプラグインで、サードパーティからの初の本格的なプラグインになります。開発はElic Soulvieです。Ericは初期の頃にLuxologyで一緒にmodoの開発をしていたプログラマで、その後、Blizzard Entertainmentやweta digitalに移籍して、さまざまなプロジェクトに参加してきた売れっ子プログラマです。Luxologyを抜けた後もLXO2Mayaプラグインなどmodo関連のツールを提供してくれていました。


recoilが提供するリジッドボディダイナミクスは、堅い物体がものに当たって跳ね返ったり、ボールが当たって煉瓦の壁が崩れたり、床に落としたビー玉が跳ね返りながら散らばったりするような、剛体のシミュレーションをmodoに提供します。

recoilはプラグインとして作られていますが、キットと同じようにカスタマイズされたユーザーインターフェイスやメニューパレットがインストール時に組み込まれますので、ネイティブのツールのように使うことができます。インストールするとシステムメニューにrecoilのメニューがでてくるのでプラグインの機能を呼び出すのに戸惑うことはありません。また、オンライン形式のドキュメントとチュートリアルビデオが充実しているのも嬉しいですね。



recoilは現在、発売記念キャンペーンプライスで$175でオンラインストから購入できます。modo 501では、SDKを大幅に強化しましたので、今後も強力なプラグインが発売されることが期待されます。

2011年4月16日土曜日

modo for SolidWorks Kit

Luxologyでは、modo for SolidWorksキットという新しいキットのリリースを予定しています。SolidWorksは世界中で大きなシェアを持つ三次元CADシステムで、LuxologyはPhotoView360とういうSolidWorksのモデルデータをレンダリングするためのOEM製品を提供しています。PhotoView360は、Nexusツールキットをベースにした製品で主にmodoのプレビューとレンダリングの機能を組み込んだ製品です。PhotoView360用に開発した機能をmodoにフィードバックすることもありました。

modo for SolidWorksキットは、主にPhotoView360を利用していたSolidWorksのユーザーがmodoにステップアップするときに便利な機能を搭載したキットで、下記のような構成になっています。

Enhanced SolidWorks geometry importer
SolidWorks familiar User Interface
Bundle Kits
Training Videos

Windows版のmodo 501にもSolidWorksファイルの入力プラグインは搭載されていますが、Solid Worksキットのプラグインは、専用のファイルブラウザや名称の自動変換、マテリアル変換などmodo 501のプラグインにはない機能が搭載されています。

modo for SolidWorksキットのユーザーインターフェイスは、PhotoView360に近いインターフェイスになっていて、既存のSolidWorksユーザーが直ぐに使い始められるように設計されています。

このmodo for SolidWorksキットには、既にLuxologyからリリースされているPADキット(Product and Automotive Desig)とSES1キット(Studio Environment Set1)がバンドルされています。

更にこのキットを使いこなすためのチュートリアルビデオ(英語)が付いてきます。modo for SolidWorksキットは、基本的にこれからmodoを始めようとするSolidWorksユーザーがターゲットですが、仕事でSolidWorksデータをベースにレンダリングを行う既存のmodoユーザーの方にもお勧めです。特にキットが2つバンドルされていますので、これからPADキットとSES1キットの購入を検討されていた方にはお得かもしれませんね。1つ残念なのは、このキットはWindows版のみです。SolidWorks本体がWindowsのアプリケーションですので、SolidWorksデータを読み込むプラグインもWindows版のみ提供されています。





また、Luxologyではmodo Webinarという新しく事前登録タイプのウェブベースのセミナーを開始する予定です。今回はこのmodo for SolidWorksキットのトレーニングを4月19日と28日にPaul McCrorey氏が行う予定になっています。このmodo Webinarに参加するためには登録サイトに事前に申し込みをする必要があります。費用は無料です。19日はPDTの9:00開始ですので、日本時間だと夜中の2時になってしまいますので、夜型でない方は28日の方がお勧めです。最近、GoToMeegingなどのPCの操作画面をクライアントと共有してみることが可能なサービスが増えてきました。今後もウェブベースでの遠隔セミナーが開催される予定です。ご興味のある方は是非登録してみてください。

2011年4月8日金曜日

modo 501 SP2 r2

本日、Luxologyからmodo 501 SP2 r2がリリースされました。これはSP2リリースの後のマイナーアップデートで、リリース後に修正されたクラッシュバグが幾つか修正されています。ビルド番号は41483です。www.luxology.comのRegistered Productsのページからダウンロードすることができます。日本語版に関しましてはイーフロンティアさんが準備されていると思います。このアップデートは、安定性を向上させるための限られた修正のみが加えられていますので、SP2を使用されている方にはおすすめいたします。

Luxologyでは、今後もサービスパックを定期的にリリースすることを予定しています。サービスパックは、modoの安定動作のための修正を盛り込んだアップデートで、基本的に機能追加はありません。特にソフトウェアがクラッシュするような致命的なバグは優先的に修正して、サービスパックに盛り込んでいます。

内部でのテスティングも積極的に行っていますが、ランダムにクラッシュに関する情報は、crash-l@luxology.comに送られてきた情報が品質向上にとても役立っています。特にMac OS X版のクラッシュログが有益です。modoがクラッシュすると下記のようなダイアログが表示されます。




上のダイアログの「レポート...」もしくは下のダイアログの「詳細情報を表示」というボタンを押すと下記のようなこのクラッシュに関する詳細情報がテキストで表示されます。


このダイアログの「問題の詳細およびシステム構成」のテキストをすべてコピー&ペーストで、crash-l@luxology.comに送っていただけると直接開発者の元に届きます。この情報はクラッシュしたときの状態を教えてくれる情報ですので、何をしているときにこのクラッシュが起こったのかを教えていただけるとさらなる助けになります。この情報はバグの原因を突き止めるためのパズルのヒントになります。このクラッシュログをメールで送っていただく際の題目もしくは本文に一言ヒントとなる情報を書いていただけると助かります。たとえばポリゴンベベルの最中にクラッシュした場合は、「Polygon Bevel Crash」と書いていただくだけでOKです。基本的には英語が望ましいのですが、日本語、ドイツ語、フランス語でも大丈夫です。開発者は日本、ヨーロッパにもいますので対応できます。

もちろんソフトウェアの品質向上はメーカーの責任で行う仕事ですが、modoの品質向上のため、modoがクラッシュしたときに上記のことを思い出して送信していただけると嬉しいです。よろしくお願いします。

2011年3月6日日曜日

新しいMacBook Proのベンチマーク

3年ぶりに仕事で使うMacBook Proを買い換えました。このMacBook Proで三代目となります。今回購入したMacBook Proの目玉はインテルのモバイル向けSandy Bridgeの搭載ですね。modoはまだIntel AVXの拡張命令セットに対応しているわけではありませんが、マルチスレッドに最適化されたmodoのレンダリングは第二世代の新しいCore i7マイクロアーキテクチャの恩恵を十分得られているようです。modoのインテルCPUに対するアプローチはIntel White Paperに解説されています。また、前モデル(Core i7 M620,M640)を搭載したMacBook Proでは発熱の問題がだいぶ出ていたようですが、新しいモデル(Core i7-2720QM 2.20GHz)では顕著な発熱はないように思われます。


下記はこれまで使っていたMacBook Pro (15 inch,Early 2008)とのmodo 501 SP1 64 bit (40846)とのレンダリングの比較です。MacBook Pro (15 inch,Early 2008)のCPUは、Intel Core 2 Duo (T9300) 2.5GHzですので、新モデルと比較してコア数も半分の2つなので比べものにはなりませんが、一応比較してみました。控えめに比較しても3倍ぐらい速くなっています。


MacBook Pro (15 inch,Early 2008)、Intel Core 2 Duo-T9300 2.5GHz、メモリ4GBytes
9Sphere.lxo  49.1s
CausticFlower_01.lxo  1m 44.8s
CausticWater_01.lxo 58.1s
ProductShot_01.lxo 2m 44.9s
modoLogoMany.lxo  3m 59.1s
WhiteRoom_01.lxo 1m 19.1s


MacBook Pro (15 inch,Early 2011)、Intel Core i7-2720QM 2.20GHz、メモリ4GBytes
9Sphere.lxo  14.1s   (x3.48)
CausticFlower_01.lxo  33.0s  (x3.17)
CausticWater_01.lxo 14.2s (x4.09)
ProductShot_01.lxo 50.6s (x3.25)
modoLogoMany.lxo 1m 8.9s (x3.47)
WhiteRoom_01.lxo 22.8s (x3.46)

2011年2月13日日曜日

modo 501: Telnetサーバー

今週はもう一つ記事を書きました。modo 501には、簡易Telnetサーバーが実装されています。Telnetはネットワークの機能で外部のアプリケーションがTCP接続を介して、modoを遠隔操作することを可能にします。この機能はヘッドレスモードでもGUI付きでmodoを起動しているときにも使用することが可能です。modoに接続できるのは1つのリモートホストだけです。TelnetはTCPベースですのでLAN経由でもインターネット経由でも接続することが可能です。リモートホストはOSに付属するTelnetクライアントはもちろんスクリプトやサードアプリケーションからTelnetで接続する事も可能です。

modo の telnet サーバーでは、二つのモードをサポートしています。デフォルトで は RFC854 で記述された基本的な telnet プロトコルをサポートしています。Raw モードは、アプリケーションやスクリプトを通して、modo をコントロールする 際に有用です。ヘッドレスおよび GUI どちらの modo であっても、telnet を通してコントロールが 可能です。

ヘッドレスモードでTelnetを起動するには、下記のようなコマンドをターミナルもしくはDOSプロンプトで実行します。-telnet:12357の末尾の数字はソケット通信のポート番号です。

Windowsの場合
modo_cl.exe -telnet:12357
Mac OS Xの場合
modo.app/Contents/MacOS/modo_cl -telnet:12357

GUI付きのmodoからTelnet接続を開始するには、telnet.listenコマンドを実行します。下記のようにコマンド履歴からtelnet.listenコマンドを実行します。

telnet.listen 12357

telnet.listコマンドは、下記のようなシンタックスを持っています。

telnet.listen <port:integer> <raw:boolean> ?<open:boolean>

それでは実際にTelnetを使ってmodoにコマンドを送ってみましょう。

  1. まず、modoを起動し、ティーポットなどのオブジェクトを作るか、適当なシーンを読み込んで見てください。次にコマンド履歴にtelnet.listen 12357と打ち込んでください。
  2. 次にOSに付属するTelnetクライアントを接続ポート12357で開きます。Mac OS Xの場合はターミナルコマンド、Windowsの場合はDOSプロンプトを起動し、telnet localhost 12357と入力して実行します。今回は同じコンピュータ上で実行しますのでホスト名称をlocalhostにします。接続するとプロンプト">"が表示されます。
  3. プロンプトが表示されたらmodoのコマンドであるrenderを入力し実行します。modo上のシーンがレンダリングされ、レンダーウィンドウが表示されたら成功です。
  4. telnet.closeコマンドを実行すると接続が解除されます。



このTelnetの機能の用途は、レンダリングノードして起動しているmodoのコントロールやmodoを外部アプリケーションに組み込んでコントロールするなどいろいろな可能性がありそうです。Telnetに関する詳細は、Scripting and CommandsというPDFドキュメントに解説されています。

イギリスにいるGwynne氏は、modonizeというサイトでたくさんのmodoのPhythonスクリプトを公開しています。また、OEM製品であるPhotoViewのシステムもスクリプトでGwynne氏が作成しています。Gwynne氏がオープンフォーラムでPhytonスクリプトからTelnetの機能を使ってmodoをコントロールしているビデオを公開しています。

http://www.modonize.co.uk/Modo/miscbeta/501/PythonTelnetShell.mov
http://www.modonize.co.uk/Modo/miscbeta/501/TelnetPythonUtil2.mov

modo 501には、この他にもmodoの機能を外部のアプリケーションに接続する機能が用意されています。この機能に関しましては、また次の機会に紹介したいと思います。

2011年2月12日土曜日

modo 501: モデリングツール その1

今回はmodo 501で新しく追加された機能からモデリングツールを一つ説明します。先日modo 501の機能を説明している時に、実例をあげて解説しないと分かりにくいオプションがあることに気がつきましたので、今回はAdd Loopのオプションを詳しく解説しようと思います。毎回テーマがばらばらですみません。

Add Loopは、Loop Sliceツールのインタラクティブバージョンでクリックしたエッジ上にループを追加するツールです。このポリゴンループをスライスする機能はBandSawの頃から作っていますが機能追加や操作性に関するリクエストがいまだにあります。

Add LoopにあってLoop Sliceにないオプションに、Absolute Distanceがあります。通常、ループの各エッジ上の位置は各エッジの2つの端点上をパーセントで指定します。このAbsolute Distanceをオンにするとどちらかのエッジの端点を通るループをスライドしたループを作成することができます。これはスライドツールのAbsolute Distanceと同じ機能です。

Absolute Distance


このオプションを有効にした場合、スライドされるループが自分が意図した側と異なるループの形状になってしまう場合があります。その場合はOffset From Endをオンにすることによってもう一方の端点を通るループが選び直されます。

Absolute Distance + Offset From End


Both Sidesは、modoのスクリプトツールで有名なSeneca氏からのリクエストで追加したオプションです。スライドするサイドを両方ともスライドさせてしまうオプションです。

Absolute Distance + Both Sides


Preserve Curvatureは、エッジ上の位置をスムースなカーブ上の位置に補正するためのオプションです。通常はエッジの2つの端点の直線上にポイントを配置しますが、Preserve Curvatureをオンにするとエッジに連結された前後のエッジ端点から三次曲線を計算し、その曲線上にポイントを配置します。この機能はあくまでもエッジの前後のポイントから求めた三次曲線からスムースな位置を求めるもので、SphereツールやCylinderツールで作成した円などの正確な二次曲線を復元し、正確な曲率を推測して計算する物ではありません。
Preserve Curvature - OFF

Preserve Curvature - ON



Tensionは、Bridgeツールにもあるオプションで、補間に使用する三次曲線の接線ベクトルにスケールを掛けることによってポイントの高さを調整する物です。このPreserve Curvatureは、Add Loopツール以外にLoop SliceSlideツールにも追加されています。
Tension 100 %

Tension 180 %

2011年2月6日日曜日

modo 501: SDK その1

前回の投稿からだいぶ日にちが空いてしまいましたが、今回はmodo 501で拡張されたSDKの機能の概要を解説したいと思います。

SDKの入手方法
modoのSDKは、Luxologyもしくはマーズの製品ダウンロードページから入手することが可能です。SDKの使用にあたっては特別なロイヤリティは発生しませんので、このSDKを使って開発したプラグインは自由に配布・販売することが可能です。modo 501のSDKのファイル名称はLXSDK_40017.zipです。40017はmodoのビルド番号を表しています。基本的にプラグインの上位互換は保持されていますが、新しいビルドで機能が追加される場合があります。


開発環境
SDKを使ってプラグインはC++言語を使って開発することができます。開発にコンパイラツールが必要になります。Windowsでは、Visual Studio、Mac OS Xでは、XCodeを使って開発することが可能です。サンプルコードには、Visual Studio 2008, Visual Studio 2010, XCodeのプロジェクトファイルが含まれています。Visual StudioのバージョンはExpressでOKですので、Windows版もMac OS X版も動作環境があればどちらも費用を掛けずに開発することができます。


SDKのディレクトリ構造
LXSDK_40017.zipを展開するとcommon, docs, include, sampleというディレクトリが現れます。基本的にLXSDK_40017.zipはどこで展開しても大丈夫です。各コンパイラのプロジェクトファイルには、コンパイルに必要なインクルードファイルのパスなどは相対パスで記述されています。

common
このディレクトリには、プラグインが自分のソースコードと一緒にコンパイルリンクするためのmodo SDKのソースコードが含まれています。基本的にプラグインはmodo内部の関数を公開されたAPIを通して起動しますので、ここでは最低限必要なソースコードや幾つかのユーティリティ関数が用意されています。

include
プラグインから呼び出すクラスなどが記述されたインクルードファイルが保存されているディレクトリです。

docs
SDKのHTMLドキュメントが含まれているディレクトリです。index.htmlをブラウザで開くと全てのページにアクセスすることが可能です。

samples
ここにはSDKのサンプルソースコードと開発環境のプロジェクトファイルが含まれています。


modo 501 SDKのインターフェイス
docs/interface.htmを見るとSDKが提供しているさまざまなインターフェイスの一覧を見ることができます。ここではSDKで拡張することが可能なサービスの種類とアクセス可能なインターフェイスが公開されています。

ILxLoader/ILxSaver
このインターフェイスはmodo 501以前から公開されているインターフェイスで画像やシーンファイルの入出力を拡張するための機能を提供しています。modoに含まれているほとんどのファイル入出力機能はこのプラグインで実装されており、ソースコードもサンプルとして公開されています。

ILxMovie
QuickTimeなどのムービーファイルの入出力のためのプラグインインターフェイスです。

ILxTextScriptInterpreter
modoは、Perl, Python, Luaなどのスクリプト言語をサポートしていますが、このスクリプトインタプリタ自身もプラグインとして実装されています。この機能を使えばRubyなど他のスクリプト言語をmodoに組み込むことが可能になります。

ILxColorModel
modo 501では、カラーピッカーの機能が大幅に拡張されています。このインターフェイスを使って独自のカラーモデルをカラーピッカーに追加することができます。

ILxValueTexture
新しく追加されたテクスチャプラグインを開発するためのインターフェイスです。BentleyのテクスチャやEnhance:modoテクスチャも全てプラグインで実装されています。

ILxCommand
コマンドを開発するためのインターフェイスです。モデリングコマンドなどさまざまな種類のコマンドを作ることが可能です。

ILxTool
SDKを使ってツールが作れるようになりました。3Dビュー上にハンドルを表示してインタラクティブなツールを開発することができます。

ILxPackage
アイテムを拡張するためのインターフェイスです。ギアアイテムなどのプロシージャルジオメトリアイテムやチャンネルモディファイヤを開発することが可能です。


サンプルのビルド
XCodeを使って実際に付属するサンプルをビルドしてみましょう。XCodeのプロジェトファイルは、samples/xcode_projectというディレクトリに入っていますので、ここにあるxcode_projext.xcodeprojというファイルをXCodeで開きます。私の使用環境はMac OS X 10.6.6, Xcode 3.2.5です。このプロジェクトファイルは全てのサンプルのプロジェクトファイルが含まれており、Xcodeのビルドメニューからビルドを実行するとサンプルをビルドすることができます。




LXSDK_40017のXcodeのプロジェクトが参照するインクルードファイルが幾つか不足しているようで、ビルドエラーが発生してしまいます。includesフォルダにある全てのヘッダーファイルを下図のようにドラッグアンドドロップしてプロジェクトの”グループとファイル”にあるinclude階層の下に追加してみてください。これでビルドができるようになるはずです。




サンプルの実行
サンプルプラグインがビルドできましたら。実際にmodoにいれて実行してみましょう。今回はArcツールを実行しています。

プラグインをmodoで使うには、まず、拡張子(.lx)がついたプラグインファイル(ダイナミックリンクファイル)とコンフィグファイルをmodoに読みこませます。標準プラグインはmodoアプリケーションのExtraフォルダに、標準コンフィグファイルはResrcフォルダに置かれています。ユーザーが拡張するプラグインやコンフィグは下記のユーザーごとに用意されているユーザーコンフィグフォルダがありますのでこちらにコピーするのが一般的です。素システムメニューのFileメニューにあるAdd Plug-in...から明示的に追加することもできます。

Mac OS X
~/Library/Application Support/Luxology/Configs
Windows 7
~/AppData/Roaming/Luxology/Configs

ビルドが成功するとxcode_project/Build/Debug/フォルダにarc.lxができあがります。このファイルをAdd Pluginで登録するか、ユーザーコンフィグフォルダにコピーするとmodoにプラグインが登録されます。実はarc.lxは、既に標準のExtraフォルダに入っていますのでここではsamples/tool_arc/arc.cfgだけをコピーするだけでOKです。このコンフィグファイルにはArcツールのアトリビュートをUIに表示するためのリソースが含まれています。

次にmodoを起動したらプラグインが登録されていることを確認するためにプラグインビューポートを表示してみましょう。プラグインリストは新規ウィンドウを開いてUtilityタブから選択すると表示されます。Toolカテゴリの下にprim.arcというツールが見つかればOKです。




ツールの起動は、tool.setコマンドで行います。ほとんどのツールはシステムメニューやフォームにボタンとして登録されていますが。ARCツールはまだ登録されていませんので、ここではコマンド履歴から直接tool.setコマンドを実行してARCツールを実行してます。コマンド履歴のテキストフィールドから下記のコマンドを入力して見ください。

tool.set prim.arc on

下記のようにARCツールが起動し、画面をドラッグすると円弧のプリミティブが作成されます。



コマンド履歴で毎回実行するのは面倒ですので、ショートカットに上記のコマンドを割り付けたり、フォーム編集でメニューやツールバーに登録して使用することができます。

下記はフォーム編集(Form Editor)に登録されているシステムメニュー(Menu Bar)に "tool.set prim.arc on"をArcという名称で登録した例です。システムメニューにArcツールが登録され、ここからツールを起動する事ができるようになります。


2011年1月15日土曜日

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

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


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

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




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

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

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

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

プロシージャルジオメトリは、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/