>   >  スクリプト兵法書 〜MAX Script編〜:Vol.3:スクリプトの具体的な作り方(前編)
Vol.3:スクリプトの具体的な作り方(前編)

Vol.3:スクリプトの具体的な作り方(前編)

MAXScriptの特殊な部分

ところで、注意深い方なら気づいたかもしれませんが、for ループで使用する値が (nx-1) のように1つ少なくなっています。これは、MAXScript だけに見られる非常に特殊な仕様で、for ループが終わる条件が、指定した値を越えたら終了となっているためです。試しにプログラムを走らせてみます。



 for i=0 to 10 do (
 	print i
 )

0 から始まって 10 までが表示されます。つまり、ループの中身が 11 回繰り返されています。普通の言語だと、これは 9 までが繰り返されます。例えば Python の場合は;



 for i in range(10):
 	print i

これは、0 から 9 までが表示されます。これが普通のプログラミング言語の挙動です。MAXScript に慣れてしまった後に他の言語に移ると非常に大きな違和感を感じる(そしてバグの要因になる)大元なので、最初から"これは特殊なんだ"ということを肝に命じて覚えておいてください。敢えて MAXScript で同じことしようとすると、以下のように初期値を 1 にすることになります。



 for i=1 to 10 do (
 	print i
 )

これはこれで悪くはないですが、普通のプログラミングスタイルとは言えないのであまりお薦めできません。これに関連して、MAXScript の配列も普通のプログラミング言語とは違う指定の仕方をします。前回の記事を参考にしてみてください。selection の中身を取り出すのに、selection[1]、selection[2]......とインデックスが 1 から始まっています。これも、普通のプログラミング言語なら 0 から始まります。



(実行例)
--maxScript
arr = #("a",  "b", "c" )
#("a", "b", "c")
print arr[1]
"a"
"a"
print arr[0]
-- ランタイムエラー: array index must be positive number, got: 0

#python
>>> arr = ["a", "b", "c"]
>>> print arr[1]
b
>>> print arr[0]
a
>>>

この違いも、細心の注意を払わないと思わぬバグの要因になります。しかも、一見すると間違っていることに気づきにくいタイプのバグなので、ぜひ覚えておいてください。ここではこれ以上のことは言及しませんが、興味のある方は、"ポインタ" "アドレス" "配列" などのキーワードを元に自分で調べてみるか、Twitter などで私をつかまえて飲みに誘ってください :-)

スクリプトでParticle Flowを操る

ここまでで、簡単なスクリプトの書き方をひと通り学習することができました。そこで応用として、スクリプトを使った特殊な映像表現の一例をご紹介します。
ここでご紹介する例は、今まで学習した内容から更に踏みこんで、CGについての知識を織り混ぜたものです。いきなりこんなことができるようになるのは無理だと思いますが、これまでの経験や知識とプログラミング技術を効果的に組み合わせるとこんなこともできるんだという参考にしてください。

今回作成したのは、オブジェクトの影を Box の並びで表現する仕組みです。言葉では分かりにくいので、実際の映像をご覧になってください。
 

 
このシステムでは、Particle Flow を使用して、パーティクルの生成と影部分の抽出にスクリプトを使用しています。一見複雑そうに見えますが、MAXScript の言語機能としては、ほとんど今回までで説明したものしか使用していません。
次回は、このサンプルにどのように作ったのかを解説していきますね。

TEXT_痴山紘史(JCGS)
映像制作のためのパイプライン構築をはじめ、技術提供を行なっていくエンジニア集団、「JCGS(日本CGサービス)」の代表取締役......というのは表の顔で、実態は飲み会とCG関連の技術が好きなただのCGオタク。
個人サイト「PHILO式」

その他の連載