取得 その1。
最近俺の身の周りで、スクリプトの話がすごくよく出てくるんです。 スクリプト書けるようになりたいとか、そういう本が出たら買うぞとか、どこから手を付けていいかわからないとか。
俺自身は、7年くらい前に、全部のビューポート上でシェーディングの上にワイヤフレームをイッキに表示させたくて、そんなスクリプトを書いたのが最初だった気がします。 まず GUI 上で操作をして、スクリプトエディタにログされた履歴をコピペして、一部だけ書き換えて。 最初はやはりこれから始めなければいけません。 記憶が曖昧だけど、そんな簡単なスクリプトですら、いつもお世話になっているエアコン屋さんに質問して助けてもらった気がします。
そんな感じで、ログをコピペして書き換える、わからなければサポートに質問する(有償のサポート契約が必要ですが)ということを繰り返していたと思います。 1行か2行のスクリプトばっかりだったと思います。 スクリプトのことをちゃんと理解しているわけではなく、なんとなく出来ちゃってるからまあいいか、くらいの状態です。実は今でもそんな感じです。
2005年だったと思うんだけど、仕事をしていくうちにあまりにも面倒な繰り返し作業とかがいっぱい出てきて、それを簡略化するために、やはりサポートに「こんな機能はないか?」というような質問をした気がします。 「スクリプト書くしかないですねえ」という答えだったと思います。 なのでその頃からスクリプトをもう少し深く研究し始めました。 VBScript で書いてました。
最近 studioNEST で活躍中の Helge Mathee さん著作による、Getting Start with Scripting というチュートリアルビデオとの出会いが大きかったですね。 たしか 60ドルかそこらだったと思うんですが、得るものはとてつもなく大きかったです。 for loop とか、if else とか、基本的なスクリプトの制御の話も出てきていたし、スクリプトでよくある「ユーザがこのタイプのものを選んでいたらこうしろ。 そうじゃなければエラーを出せ」とか、「シーンにこのプロパティがあればPPGを表示し、なければ新たに作る」みたいな王道パターンをここで覚えた感じがします。 また、SDK ガイド(スクリプトのマニュアル)の読み方もここで覚えたと思います。
そう言えばこのビデオは JScript でした。ちょうどVBS のロジックファンクションの書きにくさに辟易していたので、思い切って JScript に切り替えたのでした。このビデオに出会ってなかったら、JScript はいじってなかったはずです。 いやあ、ほんとにいいビデオだった。今はたぶん郵便受けさんからダウンロードできるんじゃないかな? どうかな。
ま、ともかく、最初にスクリプトエディタのログをコピペして、一部を書き換えていくという手順は基本ですので、これからスクリプティングをやろうと思っている人はやっぱりそこからやればいいんじゃないですかね。 基本的には、オブジェクトの名前の部分や、セットする数字を書き換えればいいだけですからね。
そんなことをダラダラと解説したビデオを昔作りました。
http://vimeo.com/2518061
しかし、Vimeo が高解像度版を削除しやがったので非常に低解像度で画質の悪いものしか残っておらず、マトモに字が読めず、役に立たないビデオになっています。 元データを見つけられたら、再度アップロードしてみます。
そんでもって、この「ログをコピペして一部書き換えて実行」というのは、いわゆる「コマンドモデル」というものを使った作業になりますね。 XSI で GUI 上の操作をするというのは、XSI にコマンドを送っているということです。例えば Get > Primitive > Polygon Mesh > Cube という操作をした場合、CreatePrim("Cube", "MeshSurface", null, null); というコマンドを XSI に送っていることになります。 このコマンドを使ったスクリプトの書き方がコマンドモデルです。 もしかして「コマンドモデル」とは言わないかもしれません。ただの「コマンド」かな。よくわからんな。まあいいや。 で、コマンドだけでもかなりのことはできますが、それよりは「オブジェクトモデル」というものに親しんだ方がいいと思います。少し書き方が違いますが、別に面倒ではありません。っていうかむしろ簡単だと思っています。 オブジェクトモデルとコマンドモデルの違いの解説は別にしません。俺もよくわかってないし。 ともかくオブジェクトモデルでやった方がいいことがいっぱいあるんです。 より細かく制御できるし、実行速度が速いし、他のスクリプトへの流用も簡単になるとかそんな感じ。
で、オブジェクトモデルで書くスクリプティングって、一度端緒をつかんでしまえば、あとは芋づる式なんですね。 全般に渡って深い知識が必要なんてことはなく、はじっこの方だけつかめれば、あとは SDK ガイド上で連鎖的につながっていく感じ。
例えば var oGroup = ActiveSceneRoot.Groups( "hogeGroup" ); とかいう書き方を、あまり深く考えずに丸暗記してしまいます。 こう書けば、「シーンルート直下にある hogeGroup という名の Group が、oGroup という名前の入れ物の中に入るんだ」 と覚えてしまいます。これを 「hogeGroup を Group オブジェクトとして取得できた」 という言い方をします。
次に SDK ガイドで Group オブジェクトのページを見てみます。キーワード検索で簡単にそのページにたどり着けます。すると、Group オブジェクトに対する Methods や Properties というものがずらりと並んでいます。
Group オブジェクトが取得できていれば、これだけの色んなことができるというのがわかります。 ま、ここに載っている全てが実行可能ではないんですが、あまり深く考えないことにしましょう。
例えば Methods の中に AddMember というものがあるじゃないですか。 名前から想像できますよね。 Group に対して AddMember なんだから、Group に所属するメンバーを追加する、つまりあるオブジェクトを Group に入れるということができそうだぞ、という予想がつきます。
そこで AddMember をクリックします。AddMember の解説ページに飛びます。
AddMember に続いて何をどう書けば Group にオブジェクトを入れられるのかが、そこに載っています。
こうやって、なんでもかんでもリンクをたどって調べます。これが芋づるです。
ま、もっと連鎖する例を挙げられればいいんだけど、パッと上手い説明が思いつかないので終了。 ともかくですね、この例では 「Group オブジェクトを取得できた」という端緒がつかめたので、以後、Group に対して実行できる操作は全部できるようになりました、ということなのです。ここが重要なんです。Groupさえ取得できれば、以降は何でもできるぜ、になるんです。あるいは、Group に対してはこういう操作はできないのかー ならば Group を取得することはやめて、別のものを取得してそこから芋づるをたどろう、という判断もできます。 なので、まずは「○○オブジェクトを取得する」というのが全ての始まりです。そこができれば、スクリプトの半分は書けたようなもんです。
ただし、最初のうちは何をやるにもこの「取得」の方法がわからなくて困るんですよね。 上の例では、ActiveSceneRoot.Groups( "hogeGroup" ); という書き方を知っていることが前提になっちゃってます。 お前は知ってるからいいけど、知らない俺はどうするんだよ どこ調べれば載っているんだよゴルァ ということになります。 まあ SDK ガイドのサンプルスクリプトを見るのが一番なんだけど、スクリプティングそのものに慣れていない状態でサンプルを見ても、まずわかりません。 だんだん慣れてくると、そのタイプのオブジェクトは初めて取得するという場合でもだいたいどう書けばいいのか想像が付くんでさほど苦労しないのですが、慣れないうちは手がかりすらつかめずに途方に暮れてしまいます。 俺はだいぶ慣れたつもりですが、しょせんテクニカル野郎ではない素人スクリプターなので、未だに取得したいものが取得できなくて困ることが多々あります。っていうか毎日です。
なので、よくある取得のパターンを少し紹介してみようかな、などという気になったのです。取得さえできれば以降は芋づる方式なんだから、最初の取得のところだけカンニングして丸暗記してしまおうという感じですかね。 俺も基本的には SDK ガイドに乗っているサンプルスクリプトをカンニングして覚えてきました。
ってことで、次回以降、まず何かを取得して、取得したものに対して何かをする、という簡単な例を挙げていこうと思います。 そういうものを積み上げていくと、いつの間にか普通にスクリプトが書けるようになると、俺は思います。
ちなみにですが、「さあスクリプト覚えるぞ」 「スクリプト覚えたら何をしようかなあ」 という人は、まず無駄だと思うのでやめた方がいいと正直思います。 そういう人は、根本的にスクリプトを必要としてない人です。こんな呪文の羅列を勉強するのに時間を使うくらいなら、モデリングを鍛えるとかアニメーションに熱中するとかビールで泥酔するとか中国に出張するとかに時間を使ったほうがよっぽど有意義です。要りもしないものに労力をさく意味はありません。 そうではなく、普通のCG作業中で、「 うっ。 これめんどくせえ。 手でやりたくねえ。 イッキにできねえのかよゴルァ 」 とか思った瞬間に、スクリプティングの扉は開きます。この瞬間こそが、スクリプトを必要とし始める瞬間です。
俺の場合、時間のあるときに「さあスクリプト書くぞー 何書こうかなー」 などということはまずありません。普通に仕事していて、急にこの瞬間が来るので、大抵の場合はすぐにスクリプト書き始めます。時間がなければメモっておいて、なるべく早くごく簡単なスクリプトを書いてとっておきます。ブラッシュアップは後ですればよい。ブラッシュアップすらする必要がなく、その場で使い捨てられるスクリプトもたくさんあります。
これからスクリプティングを始めるという人も、その瞬間が来たら、何をどうしたいのかメモっておけばいいと思います。 この瞬間がないのにスクリプティングをいじる意味は全くありません。 いやほんとだってば。
あれっ 友愛の話も未完だった気がするっ
まあいいや
今回も未完になるだろうなあ。
っていうかそもそも完結しようにないしな。
第1回のこの記事で完結する可能性もあるな。
まあいいや。俺のブログだし。
けけけけけけ。
あ、最近スクリプティングに目覚めたという、あるヤローから来たメールを無断でコピペしておきます。
今日初めてスクリプトを自分で書きました。
GUIで一度やってスクリプトをコピペする感じですけど…。
パス作り、パス分けをするやつなんですが
出来てみてビックリです。
スクリプトが走った瞬間、
30歳にして初SEXの絶頂を迎えたような
大好きな女の子に告白してOKをもらえたような
なんとも言い難い快感が体を走りましたよ!
あの快感には本当にビックリです。
一人でPCの前でニンマリしてました。
スクリプトを書いた先にあんな快感が待っているなんて思ってもいませんでした。
だそうですよ。
けけけけけけけけけ。
.
| 固定リンク
コメント
「スクリプト勉強しはじめます!」って良く言われますが、そういって勉強した人を見たことがありません。
そうかー。SEXだったのか。道理で気持ちいいわけですね。
脳内麻薬に溺れてます。
そいや、こういうスクリプト話出来るのって、junkiさんくらいしかいないなぁ。
貴重な存在なんですね。
投稿: garu | 2010年10月 9日 (土) 22時47分
garu さん、こちらこそ、周りにそういう話をできる人があまりいなくて、garu さんは貴重な存在です。 というか、根本的な部分ではるかに俺より深い理解を持っている人なので、テキトーなこと書いて garu さんに怒られないかとビクビクもんですよ。
でも最近は G さんなんかとそんな話ができて、少し幸せです。
F さんにも微妙にお世話になっています。
スクリプトは、本当に「勉強」したつもりがないです。未だにそれ系の書籍も1冊も持ってないですし。 ゴルァとブチ切れて、その怒りを収めるためにごちゃごちゃやった結果が、スクリプティングになっている感じが本当にします。
気持ちいいですか。気持ちいいですね。征服欲が満たされるような感じがありますかね。 オラー 俺のいうことを聞けーピシッピシッ
投稿: junki | 2010年10月 9日 (土) 23時52分
こんばんは、モチオです。
頭の中でロジックを考え、スクリプトをガリガリ書いて思い通りになった時とか
1時間の作業が10秒になっ時とか、『アドレナリン出まくり!!』なあの快感はスクリプトやってる人しかわかんないですね。
実のところ自分はjunkiさんが公開されてるプラグインやブログの内容からスクリプトについて多くのことを勉強させていただきました。
何度もブログを読み直しては、自分の成長と共に段々内容が理解できるようになり
(モーダルPPGと非モーダルPPGの話とか何度も読み返してた覚えがあります)
今ではスクリプトで(Sotimageに限らず)やりたいこはなんでもできるどー!!な状況です。
なので勝手にすご~~~~~~~~~~~~く感謝しております。
会社で同じような事やってる人に『junkiさん』と名前を出せば話が通ります。
以前のUIの話や、今回の内容なんかも貪欲に学んでいる人たちの助けになってるなー、すごいわー!と関心しっぱなしです。
ちなみに自分も周りから「スクリプト勉強したい、教えて」とよく言われますが、
その後自ら勉強してる人には出会っておりません。
投稿: モチオ | 2010年10月10日 (日) 01時42分
モチオさん、いやいやそんな、感謝だなんて、そんな、
ビール出せウルァ
投稿: junki | 2010年10月10日 (日) 10時20分
お久しぶりですこんにちは。
以前の動画持っていますがどちらかに上げたほうがよろしいですか?
スクリプト諦めないつもりですが
見ててなるほどーそうだよねーとおもっても
いざ書くとむむむ・・・てなってしまいます。
未だにコピペレベルに毛が生えたレベル…とほ。
投稿: ちょ | 2010年11月 9日 (火) 04時25分
どうも久しぶりです。
以前の動画、それ、フルレゾ? たしかヨコ 960 ピクセルくらいの?
左右に黒入れて ヨコ 1280 x 720 の mp4 にしてくれたら嬉しいです。
え? めんどくさい?
ううむ・・・・。
投稿: junki | 2010年11月11日 (木) 02時01分