Thursday, June 12, 2014

第9回GEMで映像と画像を扱う

今回から音以外の側面に、Pdでアプローチしていきます。
Pd-extendedにはPdのプログラミング環境で画像や映像を扱うためのGEM(Graphic Environment for Multimedia)というライブラリがあります。静止画の表示やカメラの映像入力、OpenGLの2Dや3DのGeometry(ジオメトリー:平面や立体のモデル)を扱うことができます。
このGEMはミラーパケットが制作しているPure Data Vanillaにはありません。
今回は基本的なGEMの使い方を学んでいきます。

授業資料のpd_lesson09.zipをダウンロードしてください。

解凍すると、パッチとJPG画像があります。

GEMウィンドウとレンダリング

pd_lesson09_GEM1.pdを開いてください。



GEMでは、画像処理の結果を表示するためのGEMウィンドウをPdのパッチウィンドウの外に開いて表示する必要があります。


[gemwin]に[create( のメッセージを送るとGEMウィンドウが開きます。
[gemwin]は「ゲムウィン」また「ジェムウィン」と呼びます。(この辺りの呼び方はGEMの呼び方が統一されていません)
GEMウィンドウを開いた後にToggleボタンをONにすると、[gemwin]に「1」が送られてレンダリングが動作し始めます。
レンダリングというのはGEMの処理が動作してグラフィックを描画することです。DSPをONにしないと音の処理が始まらないのと同様に、レンダリングをONにしないとグラフィックの処理が始まりません。
[destroy( をクリックするとGEMウィンドウが閉じます。しかし、実はレンダリング機能はまだ裏側で動いています。
Toggleボタンのチェックをはずすと、レンダリングがOFFになります。

これらの一連の命令をまとめたのがこれです。


[create, 1( をクリックすると、createが送られてから1が[gemwin]に送られて処理が始まります。

また、以下のようにヘルプブラウザのチュートリアルパッチからサブパッチになっているものをコピー&ペーストするのでもOKです。

いろいろなパターンを紹介しましたが、以上のどれかひとつがあればGEMのウィンドウを開くのはOKです。

※パッチを閉じる前に、必ずGEMウィンドウを閉じるようにしてください。GEMウィンドウを閉じないままパッチを閉じると、GEMウィンドウの処理が裏で動いていてPdの動作が不安定になる場合があります。


GEMチェーン

GEMのオブジェクトで処理をするためには、GEMチェーンという描画のためのユニットを作ります。
GEMチェーンは以下のような構成になっています。

[gemhead]→もろもろの処理やコントロールのオブジェクト→GeometryのGeosオブジェクト

[gemhead]はGEMチェーンの出発点です。
レンダリングが動作していると、GEMチェーンのラインを画像や映像のデータが流れます。これらのデータを「GEMリスト」と呼びます。
Geometryとは英語で「幾何学」という意味ですが、3DCG(3次元コンピュータグラフィックス)であるGEMの世界では「立体」や「平面」を描画する方法だととらえてください。ここでは立体や平面のことをGEMではShapeと呼びます。そのGeometryを使ってShapeを描画するオブジェクトが「Geos」(ジオス)です。
GeosはGEMチェーンにつなげます。多くの場合、GeosはGEMチェーンの一番最後につなぎます。
GEMチェーンの途中に挟まるいろいろな命令や処理の結果は、最終的にはGeosオブジェクトで作られる立体や平面のShapeに反映します。



GEMウィンドウの中は、実は奥行きのある3Dの空間になっています。そこにShapeを配置しています。
例えば、[rotateXYZ](回転)、[translateXYZ](移動)をコントロールすると、3D空間の中でのShapeの配置が変化します。
[rotateXYZ]や[translateXYZ]のナンバーボックスを操作してみて、平面の長方形である[rectangle]がどのように動くかを確認してください。

さまざまなGeos

Geosにはいろいろ種類があります。



[rectangle]の代わりにいろいろつないでみて、確認しましょう。
また、右インレットにナンバーボックスをつないで変更すると、Shapeのサイズが変化します。

画像を貼り付ける

Geosで作られるShapeに静止画(JPEG画像)を貼付けてみます。
pd_lesson09_GEM1.pdを閉じてから、pd_lesson09_GEM2.pdを開いてください。


Bangボタンをクリックしてファイル選択画面が表示されたら、pict/puredatajapan_choco2.jpgを選択し、開いてください。
GEMウィンドウの中の[rectangle]の画像が貼付けて表示されます。
[pix_image]は静止画像のデータをGEMチェーンの中に呼び出すオブジェクトです。
[pix_texture]は、GEMチェーンの最後のGeos、この場合は長方形のShape[rectangle]に画像を貼付けるオブジェクトです。
[rectangle 4 3]の引数を変更すると、縦と横の長さが変わります。
[rotateXYZ]や[translateXYZ]のナンバーボックスを操作してみてください。平面の長方形が裏返しになると、表示が反転するのがわかると思います。

pictフォルダの中にある画像を直接指定したい場合は、右側のメッセージボックスのように「./フォルダ名/ファイル名.jpg」というように記述します。

映像を貼付ける

pd_lesson09_GEM2.pdを閉じて、pd_lesson09_GEM3.pdを開いてください。


[pix_image]の代わりに[pix_video]にオブジェクトを変わっています。
[pix_video]はWebカメラの映像の入力データをGEMチェーンに呼び出します。

チャレンジ

これもいろいろなShapeにつなぎ直して、カメラの映像を貼付けてみましょう。

声に反応させて動かす

pd_lesson09_GEM4.pdを開いてください。



マイクから入力される声の音量に反応して動きます。
[env~]を使うと音量の数値に変換できます。
声の音量の検知からの[rotateXYZ]や[translateXYZ]へのつなぎ先を変更してみて遊んでみてください。

映像を増やしてみる

pd_lesson09_GEM5.pdを開いてください。




これは[t a a](trigger anything anything)と[separate]でGEMリストのデータを分けて、webカメラの映像を増殖したものです。
[scale]は映像を表示スケールを変更するオブジェクトです。
X、Yの数値を変更すると、増殖された映像が伸びる方向が変わります。
同時に変更するためには右上の[grid]オブジェクトが便利です。XとYの数値は変換しています。

チャレンジ

中央にあるWebカメラの元画像の位置を変更できるように改造してみましょう。
また、[square]の他のShapeに変えてみましょう。

手軽に映像を増やしてみる

pd_lesson09_GEM6.pdを開いてください。




これは[repeat 20]というオブジェクトで映像の貼付けを20回繰り返しています。

チャレンジ

[fiddle~]というピッチを検出するオブジェクトで音の高さに反応して上下や左右に動くように改造してみましょう。


複数の画像を呼び出す

[pix_buffer]オブジェクトを使うと複数の画像を格納して呼び出すことができます。
pd_lesson09_GEM7.pdを開いてください。



[pix_buffer バッファの名前 箱の数]で画像用のバッファを作ります。
[pix_buffer]に[open 画像ファイルのパス bufferのインデックス番号( のメッセージを送ると、指定したbufferの指定番号の箱(コマ)に画像データを格納します。
[pix_buffer_read バッファの名前]の右インレットに数字を送ると、そのコマに格納されている画像データを出力します。

アニメーションにする

pd_lesson09_GEM8.pdを開いてください。


[metro]と[mod]を使って0-3をくり返し出力してアニメーションにしています。

pd_lesson09_GEM9.pdを開いてください。


右上のBangボタンをクリックすると、A.jpg〜Z.jpgの画像を一気にバッファに格納することができます。

チャレンジ

27枚分のjpgファイルをアニメーション用に用意して読み込み、アニメーションしてみましょう。MacアプリケーションのPhotoboothを使うと、MacのWebカメラで自分撮りをできます。

チャレンジ

音量に反応してコマが進んだり戻ったりするような仕掛けを作ってみましょう。

チャレンジ

増殖するShapeに貼付けた画像をアニメーションさせてみましょう。
その大きさが音量に反応するようにしてみましょう。

No comments:

Post a Comment