チュートリアル37

フードの下のジオメトリ
(訳注:ジオメトリの下位レベル操作を意味します)


このチュートリアルでは、マトリクスとしてジオメトリデータを指定し、それをjit.gl.renderオブジェクトでレンダリングするための、Jitterにおける下位レベルサポートを紹介します。そのデータは、普通のJitterマトリクスに含まれるので、任意のマトリクス演算子をジオメトリマトリクスの生成や処理に使うことができるという世界の可能性を広げます。このチュートリアルでは、GLグループのmatrixoutputアトリビュート、ジオメトリマトリクス内のデータの構成、どうやってジオメトリマトリクスをマトリクス演算子を用いて処理するかの一例、jit.gl.renderオブジェクトでサポートされる様々な描画プリミティブの紹介を取り上げます。

・Jitter Tutorialフォルダにある37jGeometryUnderTheHood.patというチュートリアルパッチを開いてください。そして、Start Renderingというラベルの付いたtoggleボックスをクリックしてください。


マトリクス出力

・Turn matrixoutput on/offというラベルの付いたtoggleボックスをクリックしてください。

ちょっと待ってください。さっきまであった球体が消えてしまいました。何が起きたのでしょう?

GLグループのいくつかのオブジェクトは、matrixoutputアトリビュートをサポートしていて、 jit.gl.gridshapeはそのうちの一つです。このアトリビュートは、そのオブジェクトのジオメトリがオブジェクトが関連する描画コンテキストに直接レンダリングされるのか、オブジェクトがその左アウトレットにジオメトリデータを含んだマトリクスを送るのかを決めます。そのジオメトリは見えません。なぜなら、それは閉じたゲートに送られているからです。

・“Matrix Destination”というラベルの付いたubumenuオブジェクトのメニューで、printという項目を選んでください。

Maxウィンドウには、print: jit_matrix u26300000007 quad_gridというようなメッセージが繰り返し表示されていくのが見えるはずです。これは、これまでに無かった付加要素があるという異なった部分もありますが、マトリクスデータを渡すオブジェクトの出力として、これまでのチュートリアルで見てきたものと似ています。お馴染みのメッセージのjit_matrix [matrix-name]を送るのではなく、 jit.gl.gridshapeオブジェクトは、jit_matrix [matrix-name] [drawing-primitive]というメッセージを送ります。この場合には、描画プリミティブはquad_gridで、マトリクスは四角形の格子として解釈されることを意味します。


Maxウィンドウにおけるjit.gl.gridshapeオブジェクトの出力

このチュートリアルを書いたときには、matrixoutputアトリビュートをサポートするオブジェクトは、jit.gl.gridshape、jit.gl.nurbs、jit.gl.platoオブジェクトだけです。しかし、あなたがこのチュートリアルを読むときには、他のオブジェクトでもこのモードでの処理をサポートしているかもしれません。


まだ私達のウィンドウには何の反応もありませんが、この状況を変えるのは簡単です。

・Matrix Destinationというラベルの付いたubumenuオブジェクトのメニューで、directという項目を選んでください。

これで、また球体が見えるようになりました。なぜなら、jit_matrix [matrix-name] [drawing-primitive]というメッセージが、jit.gl.renderオブジェクトに送られたからです。このメッセージに対する反応として、jit.gl.renderオブジェクトは、指定された描画プリミティブを使い、入力されたマトリクスを描画します。もし、描画プリミティブの指定がない場合、jit.gl.renderオブジェクトの現在の描画プリミティブが使われます。有効な描画プリミティブは、points、lines、line_strip、line_loop、triangles、tri_strip、tri_fan、quads、quad_strip、polygon、tri_grid、quad_gridです。

jit.gl.renderオブジェクトの現在の描画プリミティブは、[drawing-primitive]というメッセージを送ることによって設定できます。[drawing-primitive]は、上記の有効な描画プリミティブの中の任意のものです。

ビデオデータの大きさを変えるのと同じ方法で、jit.gl.gridshapeオブジェクトにdimメッセージを送ることによって、マトリクス出力の大きさを変えることもできます。jit.gl.gridshapeでのデフォルトのマトリクス出力は、20×20の大きさです。

・Wireframeというラベルが付いたtoggleボックスをクリックしてください。

・Matrix Dimensionsというラベルの付いたナンバーボックスを変えてみてください。

・マウスでワイヤーフレームの球体を回転させてみてください。


“The Death Star plans are not in the main computer.”
(訳注:スターウォーズでの台詞。映画内でデススターというものがワイヤーフレームで描かれていたようです)

あなたはこのパッチで、jit.gl.handleオブジェクトが、jit.gl.gridshapeオブジェクトではなく、jit.gl.renderオブジェクトと通信していることに気付くかもしれません。これには、シーン全体を回転させたり、動かしたりする効果があります。その@inherit_transform 1アーギュメントは、これを正しく動作させるために必要なもので、それがなければ、その回転は、シーンの回転とともに再構成されて、大きな混乱の原因になるでしょう。

 

ジオメトリマトリクスの詳細


Jitterでのビデオは、4プレーンのcharデートによって一般的に表されますが、ジオメトリデータはどう表されるのでしょうか?

ジオメトリの各頂点は、3、5、8、12、13プレーンでfloat32のデータとして、よく表されます。プレーンの0から2は、その頂点のx、y、zの位置を指定します。プレーンの3と4は、テクスチャ座標のsとtを指定します。プレーンの5から7は、ジオメトリでのライティングの影響を計算するのに使われる法線ベクトルのnx、ny、nzを指定します。プレーンの8から11は、頂点の色の赤、緑、青、アルファを指定します。プレーンの12は、エッジのフラグeを指定します。

jit.gl.gridshapeオブジェクトの出力マトリクスには、12個のプレーンがありますが、私達は、ジオメトリにテクスチャを適用しておらず、ライティングは無効になっているので、テクスチャ座標と法線ベクトルは無視されます。


ジオメトリマトリクスの処理

これまでやってきたようなジオメトリをそのまま単純にレンダリングするということはしないで、マトリクス演算子でこのジオメトリを処理することができるのです。

・Matrix Destinationというラベルの付いたubumenuオブジェクトのメニューで、xfadeという項目を選んでください。

これで、そのマトリクスは、ノイズのマトリクスのジオメトリマトリクスとクロスフェードするために、jit.xfadeオブジェクトを通るようになります。jit.xfadeオブジェクトは、2つのビデオマトリクスのクロスフェードに使うことができるように、ジオメトリマトリクスでもクロスフェードすることができます。

・“Generate Noise”というラベルの付いたbuttonオブジェクトをクリックしてください。

・“Crossfade Value”というラベルの付いたナンバーボックスを、徐々に0.1まで変えていってください。

・Wireframeというラベルの付いたtoggleボックスをクリックすることによって、ワイヤーフレームでのレンダリングをオンやオフに切り替えてください。ノイズが、その物体のジオメトリと色の両方を、どう変えてしまうのかに注意してください。

これによって、ランダムな色が加わったのと同時に、ノイズで球体が微妙に変化するでしょう。そのテクスチャ座標と法線ベクトルにも影響しますが、テクスチャが適用されておらず、ライティングも無効になっているので、この影響は見えません。


わずかに歪んだ球体(ワイヤーフレームと塗り潰されたもの)

・“Generate Noise”というラベルの付いたbuttonオブジェクトをさらに数回クリックするか、ジオメトリが描画される毎に新しいノイズのマトリクスを生成するために、“Rapid Noise”というラベルの付いた toggleボックスオブジェクトをオンにしてください。

・“Crossfade Value”というラベルの付いたナンバーボックスを徐々に1.0まで変化させてください。そして、もう一度、ノイズがどう視覚化されるのかを見るために、ワイヤーフレームのレンダリングをオンやオフに切り替えてください。

これで、描かれるジオメトリは純粋なノイズになりました。


ジオメトリとして表現されるホワイトノイズ(ワイヤーフレームと塗り潰されたもの)


・“Crossfade Value”というラベルの付いたナンバーボックスを0に戻してください。


描画プリミティブ

jit.gl.gridshapeがjit_matrix [matrixname] quad_gridというメッセージを出力しているという事実にも関わらず、私達がjit.xfadeの出力にquod_gridを追加していることに、あなたは気付くでしょう。これは、多くのマトリクス演算子は描画プリミティブアーギュメントを無視し、単純にmessage jit_matrix [matrix-name]というメッセージを出力するからです。そのため、メッセージに描画プリミティブの名前を追加する必要があるのです。これは、様々な描画プリミティブを試すための良い機会を提供します。

・Drawing Primitiveというラベルの付いたubumenuで選択可能な、様々なメニュー項目を選んでみてください。


様々な描画プリミティブの使用:points(左)、 line_strip(中央)、triangles(右)


まとめ

GLグループのいくつかのオブジェクトは、関連した描画コンテキストに直接描画することに加えて、matrixoutputアトリビュートをサポートします。それが有効なとき、ジオメトリマトリクスは、jit_matrix [matrix-name] [drawing-primitive]というメッセージで、オブジェクトの左アウトレットから出力されます。

ジオメトリマトリクスは、一般的に3、5、8、12、13のプレーン数のfloat32データで、ビデオマトリクス処理と同じようなやり方で任意のマトリクス演算子を使った処理ができます。

jit.gl.renderオブジェクトは、これらのジオメトリマトリクスをレンダリングするために、次の様々な描画プリミティブをサポートします:points、lines、line_strip、line_loop、triangles、tri_strip、tri_fan、quads、quad_strip、polygon、tri_grid、quad_grid