2011年5月21日土曜日

スクリプトについて その2

こんにちは、柳村です。

modo UserGroup Osakaメンバーの桐生さんに、
サンプルコードがあれば勉強の補助になるような気がしました。というアドバイスと
スクリプトを公開されているサイトをお教え頂いたので、ご紹介させて頂きます。

下記リンクはmodoのスクリプトを公開されているサイトです。
1段目はmodo以外のスクリプトも混在していますが、
modoのアイコンのところが、modoのスクリプトです。

http://www.svartberg.com/tutorials/resources.html
http://www.indigosm.com/modoscripts.htm

また、Luxologyのサイトでも、スクリプトが公開されていますが、
メンバー登録していないと、ダウンロードができません。

他の方の作成されたスクリプトを眺めて、どのような処理をしているのか。
また、コードの書き方などをご参考にさせて頂くのも非常に勉強になります。

これはスクリプトだけではなくてモデリングやライティングなど、
CG全般にも言えることです。

2011年5月19日木曜日

第5回勉強会のスクリプトについて

こんばんは、柳村です。
先日の勉強会でのスクリプトの解説での補足をさせていただきます。



上記画像はPerl(スクリプト言語)で書いた、
以前このブログでご紹介させて頂きましたテクスチャのリニア化(逆補正)スクリプトの
ソース(左)と解説(右)です。

青文字が変数。
緑文字が関数
橙文字がコマンドです。

コマンドについては、スクリプト&コマンドというPDFヘルプに詳しく書かれていますので
そちらをご参考ください。
ここでは、P.324のsceneserviceのコマンドを使用しています。

modoはすべての機能に対してコマンドが発行されていますので、
ユーティリティのコマンドヒストリーですべての操作のコマンドを調べることができます。
(人間が操作したときに発行されたコマンドが履歴に残ります。)

しかしスクリプトを書く際にシーン内にアイテムが何個存在するかや、
選択されているアイテムは一体何なのか?など、
問い合わせたい場合があります。
その場合はLXQ関数を使用して問い合わせることになるのですが、
こういうスクリプト用のコマンドは、スクリプト&コマンドというPDFに記載されています。

スクリプト用のコマンドと申しましたが、このコマンドもmodoのコマンドへ直接入力して
実行させることもできます。
たとへば、4行目の"query sceneservice item.N ? All"はシーン内のアイテム数を取得するコマンドですが、modo内で実行させた結果が以下です。



modo起動後、まっさらのシーンで実行した結果です。
ご覧のとおり、初期状態ですでに16個のアイテムがシーンには存在しています。(=16 value)
これは、全タイプの数(メッシュもマテリアルもライトもカメラも全部含めて)ということになります。

また、これらのアイテムには、0から順番にIDが与えられています。
6行目の"query sceneservice item.type ? [$i]"は
IDが[$i]番のアイテムのタイプを問い合わせています。

※コマンドの中にスクリプトの変数を使用する際は変数を[ ]で囲む必要があります。

5行目のfor文で繰り返し処理を行う際に変数$iに0をセットして
4行目で変数$iaに代入したシーン内の全アイテム数回($i < $ia)繰り返し処理を行わせていますが、
(6行目から16行目までか繰り返しの内容です。)
1回繰り返すごとに$iを1増やすという指定をしていますので($i++)
この$iは0からアイテム数の数値まで増えていくことになります。

ですので、6行目の"query sceneservice item.type ? [$i]"の$iというのは
アイテムのIDを指定していることになります。

modoのコマンドヒストリーで試しに query sceneservice item.type ? 0 と入力して実行してみてください。
これは、ID 0番のアイテムのタイプを取得して来なさいというコマンドになります。
おそらく、答えはmeshと返ってくるはずです。

このように、問い合わせて、判定して、もし・・・だったらどうする。と言う分岐をして
スクリプトを組み立てていきます。

Perlの書式(ルール)については、あちらこちらに解説サイトがありますが、
変数とfor文とif文を知っていると、色々スクリプトを書くことができると思います。

また、変数への数値の代入には = でいいのですが、
if文の評価をする場合は = ではなくて eq もしくは == とする必要があります。
勉強会で解説するのを忘れておりました・・・。

手作業ではメンドクサイ作業もスクリプトをチョコチョコっと書く事で作業の簡略化につながります。
皆さんも一度トライされてみてはいかがでしょうか。

2011年5月7日土曜日

Apple store seminar

みなさま。いつもお世話になります。頼本と申します。
5月12日(木曜日)19:00~20:30で日比さんのセミナーがアップルストア心斎橋で行われます。

以下告知内容です。

 Macで3DCG
「Macを使った3DCGの作り方が学べるセミナーイベントです。今回は、modo501を使ってSDS(サブディビジョンサーフェイス)の解説とSDSを使ったプロダクトモデリングを実演します。講師は3DCGクリエイターの日比隆志氏です。」

hibiさんのSDSの簡単な解説とSDSを使ったプロダクトモデリングの実演を見て頂けます。
最近はモデリングのデモはあまりやっていなかったとの事ですが、今回は解説よりデモに重点を置いたセミナー内容にして下さる予定です。

今月15日にも勉強会が行われます。そちらも是非!ご参加お願いいたしますね!