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ツールが登録され、ここからツールを起動する事ができるようになります。