/**/

チュートリアル 14:
マトリックスのポジショニング

マトリックスのデータのポジショニング

このチュートリアルでは、あるマトリックスの一部を取り出し、別のマトリックスの中の様々な場所に置く方法について検討してみたいと思います。データの場所を移動したいと思う理由はいろいろあるでしょう。ここでは特にビジュアルエフェクト(視覚効果)に焦点をあてていますが、紹介するテクニックはマトリックスのデータをあちこちに動かすことを含むあらゆる種類のタスクに役立ちます。

マトリックスのある範囲を分離する方法、それを他のマトリックスの特定の位置に置く方法、およびそのサイズを変更して(これは拡大・縮小、ピクセレーション(画素化)、ブラーといったビジュアルエフェクトに役立ちます)動的に移動を行う方法について見ていくことにします。

・Jitter Tutorialフォルダの14jMatrixPositioningというチュートリアルパッチを開いて下さい。

jit.window オブジェクト

パッチの左下隅には jit.window オブジェクトがあります。このオブジェクトは、チュートリアル1で紹介したように、マトリックスの内容を表示するために別のウィンドウを生成するものです。チュートリアルの他のほとんどの章では、代りに jit.pwindow オブジェクトを使っています。

jit.windowjit.pwindowは「一方が別のウィンドウを開くのに対してもう一方はパッチャーウィンドウの中の矩形の領域を利用する」という明らかな違いを除けば、非常によく似ています。そしてこの2つは、多くの同じアトリビュートやメッセージを共有しています。しかし若干の違いもあります。そのため、ここでは jit.window を使ってそのユニークな特徴を2つほど紹介します。

この時点では、おそらく jit.window によってオープンされた Display ウィンドウは見えないと思います。実は、このウィンドウはパッチャーウィンドウの後ろに隠されています。しかし、必要であれば Display ウィンドウをフローティングウィンドウにすることができます。フローティングウィンドウとは、たとえ最前面にある(フォアグラウンドの)パッチャーウィンドウを操作している間であっても、絶えずMaxの他のウィンドウのいちばん上に「浮かんで」いるウィンドウのことです。これを行うためには、floating 1 というメッセージによって jit.windowfloating アトリビュートを変更する必要があります(デフォルトの floating アトリビュートは0です)。

・Display as floating windowと表示された toggle ボックスをクリックして jit.windowfloating 1 メッセージを送って下さい。


ウィンドウを他のすべてのウィンドウの前面に「浮かばせ」ます

jit.window オブジェクトに書き込まれた表示領域を示すスクリーン座標 "450 60 770 300" に注意して下さい。これは320ピクセルの幅で240ピクセルの高さの領域を指定しています(jit.windowに対するスクリーン座標の指定の仕方についてはチュートリアル1、およびこの章のこの後の記述を見てください)。

1つの jit.matrix から他へ

画像を読み込んで、いくつかの加工を施してみましょう。

importmovie sunset.jpg というメッセージボックスをクリックして、パッチの上部にある jit.matrix オブジェクトに画像を読み込んで下さい。Display ON/OFF と表示された metroオブジェクトをスタートさせて、jit.matrixbang メッセージを送っている状態にして下さい。

jit.window にイメージが表示される前に、bang によってマトリックスが(jit.hueを通って)2番目の jit.matrix オブジェクトに送られます。この2番目の jit.matrix オブジェクトでマトリックスの表示部分を変化させるためのアトリビュートを変更することができます。


マトリックスは(jit.hueオブジェクトを通って)他のjit.matrixへ送られ、jit.window に表示されます

パッチの中央にある preset オブジェクトには、ウィンドウのユーザインターフェイスオブジェクトのためのプリセット設定がいくつか保存されています。

preset オブジェクトのプリセット1をクリックして下さい。

これは、dim 16 12 というメッセージを下側の jit.matrix オブジェクトに送り、大きさを16×12に変更します。


dim メッセージは jit.matrix の持つマトリックスの大きさを変更します。

入力されるマトリックスは320×240の大きさですが、入力を受ける jit.matrix は16×12の大きさしか持っていません。このため、jit.matrixは受け取ったマトリックス全体を表示しようと努めますが、必然的に多くの情報を捨てざるを得ません。結果は、非常にピクセレート(画素化)された画像になります。(ピクセレーション(pixelation)という語は、イメージを正しく表示するためには不十分な画像解像度(不十分なピクセル数)を使用した結果生じるモザイク効果のことを指します。) jit.window オブジェクトは320×240のイメージを完全な解像度で表示できることができる(ウィンドウの大きさはアーギュメントによって初期設定されています)にもかかわらず、この状態では、受け取るマトリックスはたった16×12の大きさになります。jit.window は16×12のマトリックスを表示するために320×240に「拡大」し、そのために必要なだけピクセルを複製します。

・Change actual matrix dimennsions と表示されたナンバーボックスをドラッグして、違ったピクセレーション効果を見て下さい。

補間

・ナンバーボックスオブジェクトを16と12に戻し、パッチの下部にある青い領域のInterpolate to smooth pixelation と表示された toggle をクリックして、interp 1 というメッセージを jit.window に送って下さい。


jit.window の補間をオンに切り替えます

この場合、jit.window オブジェクトは、単に16×12のマトリックスのピクセルを複製して一連の20×20ピクセルブロックを作るのではなく、入力されたマトリックスを320×240に拡大する際にその値の間の補間を行います。これは、イメージを拡大する際に入力されたマトリックスの各セル値と隣り合うセル値の間に色の滑らかなグラデーションを作るもので、そのため表示される320×240のマトリックスのセルからセルへの変化はできる限り滑らかなものとなります。入力されるマトリックスのサイズと表示サイズの差が非常に大きいので、補間によって極端なブラー効果が生じています。

toggle を再びクリックして、補間をオフにして下さい。これによって interp 0 というメッセージが jit.window に送られ、interp アトリビュートを0(オフ)に設定します。Change actual matrix dimensions と 表示されたナンバーボックスに新しいマトリックスのサイズ 80 と 60を入力して、イメージがあまりピクセレートされないようにしてください(この場合にはピクセレートされるブロックが4×4にしかならないのがわかるはずです)。 toggle をクリックして補間をオンに戻して下さい。この場合、補間が4ピクセル間でしか起らないため、ブラー効果があまり極端ではない点に注意して下さい。再度 toggle をクリックして補間をオフにして下さい。

jit.matrix オブジェクトのすぐ上にある、同じ表示を持ったの別の toggle を見つけてクリックし、 jit.matrix 上(jit.window上ではありません)での補間をオンにして下さい。


マトリックスの大きさを小さくしてもほとんど補間は行われません

これによって、ほとんど効果が生じない点に注意して下さい。その理由は jit.matrix が依然として80×60 のマトリックスを出力しているだけであるためです。この場合の補間は(マトリックスのサイズを増やすのではなく、 減らしている場合)全く無駄なものになります。

・再び toggleをクリックして、jit.matrix上での補間をオフにして下さい。

マトリックスの一部の分離

それでは、マトリックスの一部に注目する方法について見ていきましょう。

preset オブジェクトのプリセット2をクリックして下さい。画像の小さな一部分だけが見えます。

このプリセットではjit.matrixの大きさを320×240に戻していますが、srcdimstart srcdimendusesrcdimという、また違ったアトリビュートを使用することによって、マトリックス全体の実際の大きさを変更せずにマトリックスの特定の部分を分離することができます。これらのアトリビュートを設定するために、dimstart 40 150dimend 119 209 usesrcdim 1 という新しい3つのメッセージが送信されていることに注目して下さい。これらのメッセージによって、インレットで受け取ったマトリックス全体のサブセットを指定し、これらの値をフルサイズ(このケースでは320×240)のマトリックスとして送信することができます。この、入力マトリックスのより小さなサブセットは、jit.matrix 自身の中で「拡大」(必要に応じてセルが複製)され、出力マトリックスサイズに合わせられます。 usesrcdim 1 というメッセージは、「入力マトリックス全体の代りに、指定した入力マトリックスのサブセットを使う」ということを意味しています(デフォルトでは、usesrcdim アトリビュートは0に設定されているので、srcdimstart および srcdimend アトリビュートは無視されます)。srcdimstartsrcdimend アトリビュートを設定するメッセージでは、srcdimstartsrcdimsend という語の後に各ディメンションの始まりと終わりの点のセルインデックスが続けられます。dimstart 40 150 および dimend 119 209 というメッセージによって、水平方向はセル40からセル119まで(指定のセルは含まれます)、垂直方向はセル150からセル209までの、指定した80×60の領域を使用するようにjit.matrixに伝えています。

注:この章では、矩形の領域を指定するための3つの異なった方法について説明してきました。個々のケースで「何を指定しているか」について明確にしておくことは重要です。

jit.window オブジェクトボックスにはウィンドウの表示領域を「スクリーン座標」で書き込みました。コンピュータのオペレーティングシステムでは、スクリーン座標は左上隅の点を原点として指定されます。スクリーン全体の左上隅は0,0になります。右へ2ピクセル進んだ点(左上すみの左から3つめのピクセル)は2,0になります。さらに、この点から5ピクセル下(左上隅から下へ6つめ)の点は2,5になります。スクリーン上の矩形の領域を記述するためには、矩形の左、上、右、下の境界の座標を初期設定アーギュメントとして書き込みます。

jit.matrixdim アトリビュートの中では、オブジェクトのマトリックス用に各々のディメンションの大きさを与えました。これは、各ディメンションの「セル数」です。

srcdimstart および srcdimend アトリビュートの中では、マトリックスの中の、始まりの「セルのインデックス」(それ自身も含まれます)を指定しました。セルには、0から始まりそのディメンションのセル数より1少ない数までのインデックスナンバが与えられていたことを思い出して下さい。(ちなみに、複数のプレーンは同様にインデックス付けされます。)このため、320×240のマトリックスの場合、最初のディメンションのセルのインデックスは0から319まで、2番目のディメンションのセルのインデックスは0から239までとなります。 jit.matrix オブジェクトのソースの大きさをセットするためには、srcdimstart の後に範囲の始まりのセルインデックスをマトリックスのディメンションごとに続けたもの、および srcdimend の後に範囲の終わりのセルインデックスをディメンションごとに続けたものを使って、セル範囲を指定する必要があります

これらの、領域を記述する違った方法は混乱を招く可能性もありますが、注意深く何を指定しているのかを正確に考えれば、必要な事柄を記述するのに適した方法を導き出すことができるでしょう。

ソースとして使用したいのは入力されるマトリックスの内の80×60ピクセルの範囲だけですが、送り先のマトリックスは320×240の大きさを持っています。この小さなマトリックスから大きなマトリックスへの拡大によってもまた、ピクセレーション効果が発生します。しかし、この場合の拡大は、jit.matrixjit.window の間(これまでの所で、jit.matrixの実際の大きさを減じた際に行ったもの)でではなく、 jit.matrix 内部(すなわち、「ソース」の領域と「デスティネーション」のサイズの間)で行われます。したがって、補間によってピクセレーションを滑らかにしたい場合、これを jit.matrix 内部で行わなければなりません。このとき jit.window では補間をオンにする必要はありません。それは、 jit.windowjit.matrixから320×240のマトリックスを受け取るようになっているためです。

・このことを確かめたい場合には、toggle をオンにして interp 1メッセージをjit.windowに送ってみて下さい。全く何の効果も現れません。320×240のマトリックスを320×240の表示領域に対して補間しようとしているため、何の変化も起らないのです。同じ toggle をオフにして jit.window interp アトリビュートを0に戻して下さい。今度は別の toggle を使って、jit.matrix に interp 1 メッセージを送って下さい。今度は期待したようなスムージング効果を得ることができます。

・ナンバーボックスオブジェクトに新しい値を入力して srcdimstartsrcdimend アトリビュートのアーギュメントを変更して下さい。これにより、画像の中のどのような特定な部分でも「ソース」領域として分離することができます。当然ながら、ソース領域として選んだ部分によって、画像が320×240の出力マトリックスに当てはめられる際の拡大によって生じる画像の歪み方が決定されます。

イメージの反転

srcdimend アトリビュートのアーギュメント(ソース領域の最後のセルのインデックス)はsrcdimstart アトリビュートのインデックスナンバより大きくなければならないと考えるかもしれませんが、必ずしもその必要はありません。

preset オブジェクトのプリセット3をクリックして下さい。画像は垂直方向に反転されています。


2番目のディメンションではtopとbottomが入れ替えられています

この例は、垂直方向の次元の終点のセルインデックスに開始点のインデックスより小さい値を指定した場合を示しています。この場合 jit.matrix は、依然としてそれらのインデックスを送り先のマトリックスの垂直方向の次元の始まりと終わりの点と関係付けていて、効果的に値の上下の順序を逆にします。(ここで述べたことは、送り先のマトリックスの方向付けに対して同じような反転が行われていないことを前提としています)

イメージを水平方向に反転させるために、水平方向(1番目)のディメンションに対して同様な入れ替えを行うこともできます。ソース領域の両方のディメンションで入れ替えを行った場合、イメージを180度回転したのと同じ視覚効果を得ることができます。

preset オブジェクトのプリセット4をクリックして下さい。

この例では、ソース領域を両方のディメンションで反転させています。ソース領域は160×120に縮められ、interp アトリビュートをオンにしてピクセレーションを滑らかなものにしています。

出力マトリックスのサイズ変更

マトリックスの「ソース」領域を指定した場合と全く同様に、そのソースのデスティネーション(送り先)を指定することができます。この場合でも、出力マトリックスのサイズの変更は行われず、dim アトリビュートで指定された通りの320×240のままです。しかし、指定された「ソース」領域をおくための領域の変更を行います。入力マトリックスのソース領域は、出力マトリックスのデスティネーション領域に(必要に応じて拡大/縮小が行われて)置かれます。出力マトリックスのデスティネーション領域の外にあるセルは変更されないままです。

preset オブジェクトのプリセット5をクリックして下さい。マトリックス全体は、出力マトリックスの中央に置かれた80×60の矩形領域に押し込められています。

最初に注意すべき点は、usesrcdim アトリビュートがオフにされていることです。これによって、入力マトリックス全体をソースとして使用するように設定が戻されています。(この場合、srcdimstartsrcdimend アトリビュートは無視されます。)usedstdim アトリビュートはオンにされています。これによって入力マトリックスは出力マトリックスの指定した部分に置かれます。dstdimstart dstdimend アトリビュート( dstdimstart 120 90dstdimend 199 149 )はデスティネーションとしてマトリックスの中央部分のセルを指定しています。ここではイメージを拡大するのではなく、縮小しているので、interp アトリビュートはオフにしてあります。

Erase previous image と表示された toggle がオンになっている点にも注意して下さい。これによって if $i2 then clear オブジェクトに数1を送っています。この時、ステートメント(文)の if 部分は真になるため、オブジェクトが左インレットでメッセージを受け取るごとに、メッセージ clear が出力されます。このメッセージは、イメージが表示された直後に jit.matrix オブジェクトの中身をクリアし、jit.matrix が次のマトリックスを受け取るための準備をします。これによってデスティネーション領域の外にある全てのセルの値は確実に0になり、出力マトリックス中の使用されない部分は黒く表示されます。

デスティネーションの大きさを指定するナンバーボックスオブジェクトの値を変えて、Display ウィンドウの中にある画像を移動させて(そしてサイズ変更を行って)下さい。

Erase previous image と表示された toggle をオフにして、clear メッセージが送信されるのを止めて下さい。dstdimstart dstdimend のアーギュメントを更に変更し、先程とどのような違いがあるか注意して下さい。変更前のデスティネーション領域は、依然としてDisplay ウィンドウに描画されたままになっています。その理由は、マトリックスのこれらのセルはクリアされず、新しいデスティネーション領域の外側にある場合、そのセルは変更されずに、そのまま残っているためです。これを使って、前のイメージの「軌跡」を背面に残す効果を得ることができます。この結果は特定の視覚効果として使用できる可能性を秘めています。


マトリックスがクリアされないと、それまでのデスティネーション領域が新しい
デスティネーション領域の外にある場合には背後に残されたままになります。こ
れにより、連続 して変更を行った場合、過去のイメージの「軌跡」が残されます 

マトリックスの中でのイメージの移動

dstdimstart dstdimend アトリビュートの変更を行う自動的なMaxの処理を設定することによって、データをマトリックスの中で移動させ、イメージがディスプレイの中を動き回るように見せることができます。

preset オブジェクトのプリセット6をクリックして下さい。

これによって、patcher move_around サブパッチの中にある、dstdimset dstdimend アトリビュートに新しいアーギュメントの連続したストリームを提供する自動処理がスタートします。patcher の上にある toggle がこのプロセスをオンにし、ナンバーボックスは新しいデスティネーションへ移動する時間をミリ秒単位で指定します。

patcher move_around オブジェクトをダブルクリックして、サブパッチの内容を見て下さい。これまでのところでは、パッチの右半分しか使用していません。


サブパッチ[move_around]にあるデスティネーション移動処理

右インレットに入力される "rate" の値は、metro オブジェクトのインターバル時間です。このオブジェクトは、4つの random オブジェクトに対して定期的に bang を送り、4つの random オブジェクトは新しい左、上、右、下のセルインデックスをランダムに選びます。このデスティネーションの4つの点は時間の値とともに line オブジェクトに送られます。lineオブジェクトは、デスティネーション領域をこの新規のランダムな点に徐々に移動させるために、50ミリ秒(イメージを表示する速さ)ごとに新しい値を送信します。サブパッチの外部では、これらの値は jit.matrix オブジェクトの dstdimstart および dstdimend アトリビュートのアーギュメントとして使用されます。

このサブパッチには、ぜひ覚えておきたい2つのトリックがあります。第1のトリックは、このサブパッチが、dstdimend のアーギュメントがマトリックスの 320×240 の範囲を超える可能性を含めて作られているということです。例えば、水平方向の大きさを指定するために random 640オブジェクトを使っていますが、この結果から160を引いた値は、終点のセルインデックスとして -160〜479 をもたらします。このようにしたのは、より大きなデスティネーション領域の可能性を高めるためですが、これによって、イメージが動き回る際により大きなイメージの表示を見ることができ、さらにイメージがウィンドウの端までのすべての範囲を頻繁に動き回るようになります。マトリックスの実際のセルの範囲を超えてデスティネーションの境界を指定することが可能で、jit.matrix はできる限りその領域にイメージを置こうとする(マトリックスの大きさの限界を超えた場合にはクリッピングされます)ということは覚えておくとよいでしょう。2番目のトリックは、平凡ですが役に立ちます。詳しくは次のようなものです。ここでは、sel 0 オブジェクトを使って metro オブジェクトがオフになったことを検出し、これをトリガとして各 line オブジェクトに stop メッセージを送信します。これによって、ユーザがプロセスをオフにした後に line オブジェクトが値を送り続けないようにしています。

・[move_around]サブパッチウィンドウを閉じて下さい。

ソースイメージの変更、リサイズ、移動

同様に、ソースイメージの変更を自動化してみましょう。

preset オブジェクトのプリセット7をクリックして下さい。

デスティネーション領域に対して行った場合と全く同じような方法で、今度はイメージのソース領域を連続して変化させてみましょう。実際にソースマトリックスのサブセットの矩形領域が(srcdimstartsrcdimendによって)絶えず変化しているようす、さらにこの領域が(dstdimstartとdstdimendによって)絶えずサイズを変え、ウインドウ内を動き回っているようすがわかると思います。ソースおよびデスティネーションの矩形領域は[move_around] サブパッチによってランダムに選ばれるため、イメージは時として反転することもあります。ここでは、jit.matrix interp アトリビュートをオンにして、ソースイメージが引き延ばされた場合に生じるピクセレーションを滑らかにしています。

・どんなことが起っているかを少しでも明白にするために、Erase previous imageと示された toggle をオンにしてみて下さい。

ディメンションに関する追加

このチュートリアルでは、jit.matrix オブジェクトの大きさを変更する方法、そしてオブジェクトの中のソースおよびデスティネーション領域を指定する方法について見てきました。説明を解りやすく、また、視覚化(ビジュアライゼーション)を行なうために、ここでは2次元のマトリックスを使い、マトリックスの中のソースとデスティネーションの矩形領域を指定しました。しかし、この考え方がどんなディメンション数を持つマトリックスにでも適用できるということは指摘しておかなければならないでしょう( srcdimstartsrcdimenddstdimstart、dstdimend のアーギュメントの数は、jit.matrix オブジェクトの持つディメンションの数に対応します)。例えば、3次元のマトリックスを扱う場合、これらのアーギュメントはマトリックスのバーチャルな3D空間における6面体を指定するために使用されます。

注:jit.qt.movie のように、2Dマトリックスだけを扱う特定のオブジェクトでは、ソースとデスティネーションの領域は常に矩形領域になります。このため、これらのオブジェクトではソースおよびデスティネーション領域は srcrect および dstrect という1つのアトリビュートによって定義されます。このアトリビュートは、矩形の境界にあるセル(左上隅と右下隅)を指定するための4つのアーギュメントを取ります。

色相の回転

ちょっとした色の変化を追加するために、2つの jit.matrix オブジェクトの間に jit.hue オブジェクトを挟んであります(jit.hueについてはチュートリアル7で詳しく述べています)。

preset オブジェクトのプリセット8をクリックしてjit.hueの動作を観察して下さい。


色相角を変化させています

このプリセットでは usedstdim はオフにされていますが、usesrcdim はオンのままです。そして、 jit.matrix の補間もオンのままなので拡大されたイメージにはブラー効果が現れます。patcher rotate サブパッチの自動的な処理によって jit.hue の色相は絶えず回転させられています。

patcher rotate をダブルクリックして、サブパッチの内容を見て下さい。


[rotate]サブパッチの内容

右インレットへ送られる値は、色相が360度回転するための時間をミリ秒単位で与えます。左インレットに 1 が送られると、360という数値がその時間値と組にされ、line オブジェクトにその時間をかけて0から360 まで進むように指示します。そして、line オブジェクトは50ミリ秒ごとに新しい角度の値を出力します。 line オブジェクトに書き込まれた最初のアーギュメントが小数点を含んでいることに注意して下さい。これは、より高い精度が得られるように(そして、jit.hue の hue_angleメッセージが float のアーギュメントを前提にしているため)、line に対してintではなくfloatの値を出力するよう指示します。line は360に達すると右アウトレットから bang を出力します。この bang を使って line の内部の値を0に戻し、 packオブジェクトに bang を与えて次のローテーションをスタートさせます。左インレットに0が入力されると、sel 1オブジェクトはそれを直接 line に送り、line を止めて色相角を0にリセットします。

・[rotate]サブパッチウィンドウを閉じて下さい。

preset オブジェクトのプリセット9をクリックして下さい。この例では、実際にこのパッチの全ての自動処理(オートメーション)とイメージ操作テクニックを組み合わせています。ここでは jit.matrix のデスティネーションの大きさの変更は200ミリ秒ごとに設定され、より速いなリズミカルな効果を作り出しています。

フルスクリーン表示

思うような映像を作り出すMaxパッチができたとき、そしてそれをもっと洗練された方法で表示したいと思う場合には、jit.window に指示をしてスクリーン全体に表示させることができます。 jit.windowfullscreen と呼ばれるアトリビュートを持っています。この fullscreen がオンの場合、 jit.window は表示領域としてスクリーン全体を使用します。また、hidemenubar メッセージをMax に送って、メニューバーを非表示にすることができます。(詳しくは、Maxドキュメンテーションのトピックスセクションにある「Max へのメッセージ」を参照して下さい。)

jit.windowのフルスクリーン機能を使うにあたって、覚えておきたいことがいくつかあります。

まず最初に、いったんスクリーン全面にイメージを表示した場合(特にメニューバーをも非表示にした場合)、もはやフルスクリーンをオフにするためにマウスを使用することができないということです。そのため、そのMaxパッチの中に、fullscreen アトリビュートを0に戻す手段をプログラムしておく必要があります。

次に、1つの jit.window だけが1度に1つのスクリーンに対してフルスクリーン表示をできるという点です。フルスクリーンへのアクセスにおいて複数の jit.window オブジェクトが競合した場合、一番最後に fullscreen アトリビュートに1をセットされた jit.window オブジェクトがフルスクリーン表示できます。

もう1つ、jit.windowがフルスクリーン表示をしている場合でもその解像度は実際の大きさ(すなわち、rect アトリビュートのアーギュメントによるもの)によって決定されるという点です。このため rect アトリビュートに320×240の長方形が指定されている場合、スクリーンの大きさがこれより大きい場合でもこの値が画像の解像度になります。

パッチの下部には、キーボードのスペースバーを利用して、jit.windowfullscreen アトリビュートのオン/オフ(そしてメニューバーの非表示/表示)を切り替えることのできる機能を用意してあります。


スペースバーを使ってウィンドウをフルスクリーン表示に切り替えます

・スペースバーを利用して、フルスクリーンのオン/オフを切り替えてみて下さい。

・より抽象的なビジュアルイフェクトを得るために、colorswatch.pict という画像をパッチの上部にある jit.matrix に読み込んで、他のプリセットを試してみて下さい。

このチュートリアルでは、提示される効果(イフェクト)が見やすいように、ソースの素材として静止画を使いましたが、基本となる素材としてビデオ(jit.qt.movie または他のビデオソース)を使うことができないわけではありません(このパッチの中身を新しいパッチャーウィンドウにコピーし、パッチの左上の部分を加工していろいろ試してみたいと思うのではないでしょうか)。

まとめ

マトリックスのデータを取り出したり、再配置したりする方法はいくつかあります。jit.matrix の dim アトリビュートはマトリックスの実際のディメンションやサイズを設定します。jit.matrix の usesrcdim と usedstdim アトリビュートをオンにすると、入力および出力マトリックス(これらはマトリックスの「ソース」および「デスティネーション」領域と呼ばれます)の特定の一部分を使用するように jit.matrix に指示することができます。これらの領域のセルの境界は(ソース領域の境界の最初と最後のセルをセットするためには) srcdimstartsrcdimend アトリビュート、(デスティネーション領域の場合には) dstdimstart dstdimend アトリビュートによって指定します。これらのアトリビュートはマトリックスの実際のサイズを変更するものではありませんが、( usesrcdimusedstdim がオンの場合)入力マトリックスのどの部分が、出力マトリックスのどの部分に渡されるかを指定します。ソース領域とデスティネーション領域が異なる形またはサイズである場合、jit.matrix はソース領域を拡大または縮小し、デスティネーション領域にちょうど収まるようにします。この結果、データは複製されたり失われたりしますが、これによって、面白い引き延ばしやピクセレーション効果を与えることができます。ソースおよびデスティネーション領域をMaxパッチの他の箇所から提供される数値によって動的に変化させ、インタラクティブに、あるいはオートメーション(自動処理)によって、イメージのサイズ、形、位置の加工を行うことができます。

interp アトリビュートがオンになっているとき、jit.matrix はデスティネーション領域がソース領域より大きい場合に値と値の間の補間(中間値の生成)を行います。これによってピクセレーション効果は滑らかにされ、隣接したセルの値の変化をぼやけさせます。

jit.window オブジェクトは受け取ったマトリックスのサイズに関わらず、rect アトリビュートで指定されたどのような長方形のディスプレイ領域にでも表示することができます。入力されたマトリックスのサイズが表示領域と異なる場合、イメージは jit.window によって拡大、縮小されたり、歪められたりします。これもまた、引き延ばしやピクセレーション効果として利用できます。jit.window もまた interp アトリビュートを持っていて、これがオンの時にはイメージの拡大や引き延ばしによって生じるピクセレーションの平滑化を行います。

jit.windowfullscreen アトリビュートをオンにしてイメージをスクリーン全体に表示することができ、さらに、;max hidemenubar メッセージによってメニューバーを非表示にできます。(パッチャーウィンドウを再びもとの状態にもどす手段がユーザ自身に任されていることを忘れないようにしてください)。

ここでは、引き延ばし、ディストーション、ブラ?、ピクセレーション(画素化)といったビジュアルイフェクト(視覚効果)を作り出すために、マトリックスデータのサイズ変更、再配置、反転、補間を行うテクニックを紹介しました。