こんにちは。WINDOWS版MAX/MSP(2003/09現在)が発売されたこの今日この頃、皆さんいかがお過ごしでしょうか?
PD?シラネ。なんて言わないで欲しい、KOYAMAで御座います。
・・・というわけで(謎)、PDのエクスターナル(プラグイン)、Gemの解説を書いてみようかと思う。
動機は、日本語文献でのGem解説が殆ど無いこと(要するに今書いたら注目されちゃうかも!)、そして、PDにはPDなりの利点がある事を、MAXとやらに不意打ちアッパー食らう前に、自分なりに理解しておきたい、といった、かなり自己満かつ不順なものであり、また著者は初学者のようなもんで、ひょっとしたら適当な事を書くかもしれない。お叱り、ご意見、そしてご感想などがあれば、メールもしくは掲示板の方にコメントして頂けると有難や。
本ドキュメントは幾つかの構成からなる。
Gemの基本から始まり、最終的には、Gemを利用した作品製作の過程を披露する。
作品製作、と歌っておるが、普通にモデリングして物体作るような作品は製作しない。本ドキュメントでは、作品としての「Gemを利用したインターフェイス製作」に焦点を当てる。Gemの使い道としては、OpenGLを使用したモデリング、マウスイベントと同期したシステム製作、アニメーションが挙げられるが、ただ単純にポリゴンを使ってアニメーションさせるだけでは面白いとは思わないし、第一、PDでやる必要性があるのかと?(こういう作品が作りたいのであれば、PDでやるよりもLightwaveや3DStudioMAXを使った方が楽ですよ、念のため)
せっかくやるならPDならではの事を、という事で、音と同期するアニメーション、さらにはマウスイベントも使って、、、と考えた結果、インターフェイス上で音と映像が同期できるシステムの開発が著者的には面白いかなぁ、と思ったが故、このような方針を採ることにした。
前置きはここまでにして、早速、Gemの話に移ろう。
とりあえずGemをDLしてみよう。ここから先はWIN版の解説となる。また、PDについては最低限の知識を持っていることを前提に書いてあるので、PDもまだ良くわからないという人は、先にそちらを勉強した方が良い。K2氏著のドキュメントが大変わかりやすく書いてあり、学ぶのには最適であると思う。
Gemを理解するための便利なリンク集を、先にあげておく。
・総本山:このしとが作ってます。
・Gem.shot.gallery
:Gemで製作された画像集。とりあえずこんなことが出来ます。
・GemPlus:Gemのエクスターナル。
・平#のページ:Mac版Gem移植者。MAXのエクスターナルもあり。
・Gem for Macintosh :Mac版Gem (このサイトにPD、Gem周辺の有名どころリンク集がある)
Gemのインストールはとても簡単で、取りあえずPDフォルダにDLしてきたファイルを解凍すれば良い。次に展開ファイルの中にあるInstall.batをダブルクリック。ExampleとドキュメントがPD側が「必要とする位置」に展開される。要するにヘルプファイルがPDのヘルプフォルダにインストールされる。これだけではPD側がGem.lib(Gemの本体)の場所を認識できないので、Gemを起動できない。認識させるには-libオプションを使う。コマンドオプションラインに-lib (pdフォルダ)/gem/Gemを入れればOK。
たったこれだけでインストール完了。じゃあ早速何かやってみよう。次からGemのExsampleを一つ一つ解読していく。
といっても、一般的なプログラム言語で誰もが最初に作るプログラム「Hello,World!」に相当するExsampleパッチは無いんです。残念。というわけでExsampleの一番最初にある、examples\01.basic\01.redSquare.pdを開いてみる。
このパッチは単純なsquare(四角形)を表示するためのものだ。単純だからといって侮る事なかれ、このパッチは最初にして、最も大切な文法を含んでいる。取りあえずパッチの左側を見て欲しい。画像は見やすいように編集したものである。

まず、Gemはこれが無いとなにも始まらない。GemはOpenGLで絵画するための、特別なWINDOW(グラフィック・ウィンドウと呼ぶ)を表示する必要がある。それを表示させたり、消したり、レンダリングを開始/停止するメッセージを送り、絵画をさせるための最重要オブジェクトがgemwinオブジェクトである。どんなパッチも、とりあえずこいつは必ず用意する必要がある。
知っての通りメッセージは手動で(もしくはloadbang、metro等を利用。Gemと言えど、基本はPDの文法に沿って記述すれば良い)送るしかない為、取りあえずメッセージをクリックしてみよう。createをクリックするとGem窓が現れ、1をクリックすると図形が出てきたはずだ。右側の数字や、ナンバーを色々弄ってみると図形の色や形状も変わる。

実際にやってみると、ただの四角形から上図のように、図形の形状が変わる。 取りあえずはこのパッチがどういうものか、遊んでみれば理解出来ると思う。
さて、ここからより詳しく各オブジェクトの機能を説明する。
gemwinはインレットが一つのオブジェクトである。CG絵画となるとフレームレート(グラフィックの書き換え回数)が気になるところであるが、これはgemwin xx(xxは数字)と記述することで、フレームレートを決定することが出来る(デフォルトは20 per second)
インレットに送るメッセージとしては、create / destroyメッセージを送ると、グラフィックウィンドウを開いたり閉じたりする事が出来、0/1メッセージを送ることで、レンダリングを開始/停止する事が出来る。他にも様々なメッセージを送ることで、様々な動作をする、最初ながら実に奥深いオブジェクトである。
お節介までに熟練者のためのメッセージ一覧を用意した(bufferの効果についてはまだよく判ってません)
次に、右側の箱どもをみてみよう。

なにやら色々箱が出てきたが、ここで知るべきは、レンダリング列(オブジェクトの設定群)を作るとき、最初に必ずgemheadを置きなさい、という事。残りはささっと説明していこう。
まずgemheadから始まる。アウトレットからcolorオブジェクトに繋がっているが、ここでは何らかのオブジェクトをRGBで着色する、といった設定をしている。1 1 1をクリックすると真っ白に、1 0 0をクリックすると赤になることからわかるように、RGBの最大値は1、最小値は0であると判る。次にrotateで、そのオブジェクトの回転状況を設定。ナンバーをドラッグ&ドロップするとオブジェクトがぐるぐる回る。その先のsquareで、グラフィックウィンドウ上に、今まで設定してきた状態の四角形を表示しますよ、と宣言している。squareにくっついているwidthやdrawは、実際にクリックしてみると、線の太さをwidthで、絵画方法をdrawで決めていると判る。
長々と書いてきたが、これがこのパッチの全てであり、Gemを学ぶための第一歩である。次からはもう少しスピード上げて、Exsampleの説明をしていく。
付録1:gemwinが受けるメッセージ
■基本メッセージ
create : グラフィックウィンドウを表示する
destroy : グラフィックウィンドウを消す
buffer 1/2 : シングル/ダブルバッファの選択(当方の環境だと、シングルバッファにしたら、絵画が停止しました)
1/0 : レンダリングをオン/オフするためのスイッチ
bang : シングルバッファ時:バッファのスワップ、ダブルバッファ時:バッファのクリア
frame (数値) : フレームレートの決定。gemwin (数値)以外でも、この方法でフレームレートを変更可能
cursor 0/1 : マウスカーソルを消去/表示
reset : デフォルト値のグラフィック・マネージャーをリセット(?)
print : consoleに現在のグラフィックシステム状況、レンダリング情報などを表示する。
■エフェクトに関するメッセージ
lighting 1/0 : ライティングオン/オフ
color R G B : グラフィックウィンドウの背景色をRGBで指定
ambient R G B : 自然光の色をRGBで指定
specular R G B : ライト色をRGBで指定
shininess 数値 : 明るさを数値で指定
fogmode 0/1/2/3 : 霧(fog)の処理法を指定(off/linear/exp/exp^2)
fog 数値 : fogの濃さを数値で指定
fogcolor R G B : fogの色をRGBで指定
■立体写真を作るための機能に関するメッセージ
stereo 0/1/2 : ステレオモードをオフ(0)、2−スクリーンモードオン(1)、Red/Greenモードオン(2) デフォルトは0
stereoSep 数値 : ステレオセパレーション設定(デフォルトは-15)
stereoFoc 数値 : ステレオフォーカル設定
stereoLine 0/1 : モード1の時に出てくる、中心線をオン/オフ
カメラの視点に関するメッセージにはperspec,viewがあるが、割愛。
注:createStereoは絶対に使ってはいけない。必ずcreateとstereo 1のメッセージを二つ送ること。 実際にcreateStereoメッセージを送ってみると、コンソールに「createStereo is deprecated and does not work any more.」と表示される。訳して「createStereoはもうだめぽ。二度と使うな( ゚Д゚)ゴルァ!」って事だと思う。昔こういうコマンドがあったのかな?
This document is written by Yoshitaka Koyama @ cidc
This page is valid strict HTML4.01 Transitional.