jit.gl.gridshape の matrixoutput についてのメモ #max8

このような音に反応するPatchをつくる際に、jit.gl.gridshape のアトリビュートに対して @matrixoutput 1 として、3Dデータを行列に分解して出力するのですが、その時に出力される matrix が 12 plane あります(多い)。planeにはvertexやnormalなどの行列が入ってるはずですが、それぞれの意味する所・種類がわからないと適切な処理ができません。

Reference や Help などを読んでもイマイチ何を指しているかわからなかったので調べました

matrixoutput

上の画像の通りです。11番目のplaneは謎でした。とりあえず触って楽しいのはvertexかcolorくらいでしょうか。

おまけ:音に反応させるpatch

動作デモ

上で調べた結果から、vertexに対して波形を掛ける事で動かしています。CPU上で擬似的に行うvertex shaderといった感じです。

追記

サンプリングした波形の値が両端で揃っていないので、円形にマッピングした場合にアーティファクト(ずれ)が出てしまいます。

右下がアーティファクト

そこを良い感じに補完というか誤魔化す処理をgenで書いてみました。

波形を反転して、x = 1 付近では反転した波形を利用し繋げる
変なアーティファクトは無くなりました

Max Patch


----------begin_max5_patcher----------
2793.3oc6c0riiiaD9r6mBAebSuMDIEojBPR5ja4bNNXggZa01Zhrjfjb28r
K1AY2q6sEHmxsMGywbNOMC1.j2hPQRYKYqennMksFLXlo+gTVrpupXwhjUUy
2c2r4OE+le1bieqw6LlM66ta1LVSEMLS76ylu06skgdYrGa9x3sa8ixmeOuu
b+2xYs+mix8SShC8xChiJ6MXEqu3md+WCgkMl3kubSPz5Eo9Ky4CM1x8Ay6M
rA1EeCfMK9Fj9UiuQ7gh1sMHJzOmQDfCMFuKurUyhF+96tq3K2KI2D4+Jk3N
gYBi8V8jWz5xN3iR9GR74z6bVm6ItJrIvoC1z1zhyXL9C6v9E3v3RvkiKeeP
9Cq8iZkIo8uXqWdZvayu2XdyrKnC1kf.UjpV.UXWX0WuepfIEb4r4OGD5+he
ZVgN2g2wr4dIIUZdVkORAz79X1Kx498MEDwaBsuoT+WBN90ReuoTlLmxg6RY
nz72HVyO7ZhW4mFsKXubhIjDjDSbD4s0OKwaoeCBfhwbOzQXpH.S17B.fP3+
J19.7Qk5qCiW9W8YhCyxFiS7iBhRR8ynSS4yFq18J+m81Elu343n7rfukQH.
pPoo9eVPnM1YAqv3h+XZfW3ddXcZvp3nBhnl.on4xg6czY3744UYF1SD4kzv
GlpoQQlV5Lixj6xdxKsPd8TneEsFptdbbX8t1+4B8eNWzcRPTzQnXdbR6clF
rdSGe1mhoctsq2MqmrE6h38tfpZjuHy6k5nctWXnXpa8W+adQAzIl94AbQ.0
fRYm9QdTFcS1xz3vvZ7KumWZnmUTU8k9uFrJeCafppLPe7fjRkn46kxqBV6m
kWusbu0Y0aIK+CbPuRS6dRLUdQt+1D5xEG8.zIIAY4YaheMS7fkJZUAfCqYU
cpcU6f0ZuK6g0sItsvX2g1Owl3dqfmXIzs5mqo03L4VAYlAsLO1X3oFDQ063
30.lUtNfvLykGKRhe0.oHZ3zCZ.sXl.Pb6bV18CGfqMb7UFeMPQzvrGz.A39
BH7OXJfFYuF7sFePM7nuoJHwxcHTyNNbqBGJZ5voWsCvTCNntSsUMvvVNvvV
X9nerv7ZiEu3uzvzvTM3fzGbv8PDZQj0NJ7pqa36kV37fR3AtG7.3xTOP.95
JtS.7HHxP00UjxkC9TEnyDXpBcDqiEUXVK47uhKxQ3ywHoYCb6gMpDFD0l6m
Lxpn+lggr3coKKkpBK+F0oPpG24AQ62116N3N0QOXb5J91gkSzLTJCHMoQWL
2.Z7M5gJbkjJr3OmdHhgfDipPBODJCbkgGb6nioVHLx.HLsANlRRDDMp.K8T
YywVD4N.zQWhHaIoA2wFbjkvF3ZCBXj2x.OH41N7e1AYF9.6H713k3a7oe7m
+u+6e4W+O+xm9g+0+6u8O+0e5u+oef92+wm9wepg6F.r+tApdpjVNkGDUiN5
Yxbnwg42qCjs0HhUkCWt9YT9Dcs83Hi+hWTlweJNb0b8duBOGFSeIGNa7TJg
j6mtfeHbU70hRloa8X7Dosygu3z2a8BGr63.3cfhCahARXSkN.9K3spDrM3i
sdaCYAqi7BajGQt8eoJXt9.xZrtTkBc9mSxVuKnpx6QGYdyBylYRmllDb3n4
aj2sYRVW9l.cLKc8skIAUNndcI5kCUJtnjJGw4PPI6giRN1L3gXadqfRLiAs
OUfZ8nvjPSrOoqYBbkeLoBeBP2JyDJk4VCWlaovLCW7MlLuEihoF6RVUbKHs
BKMBInNu2Ul9NluweLpaKhl59ZlyLVk58ZCK6i5Jj.rgLp2w1husdULqadIY
h5hoprQW2AtsqaE1.iGK1nXNYxqAQqhe8bteeHo+UdsK3GpkFB7ALk4.UXtr
ODs7H9ZDmZUfAKKH6OdVPPyq3f5z5CGYHPqR2Ro.C5ZZ8wKOOsa6yc4jpbFk
1qqTLXb2fKdkLHavPnCBxgPP0PB5LvvUAYIgdenbYnK2xeiAz5bBzx3CUQUr
K5BgpmO7oruPPq48t9OxAMt9Bs1KH5iyUQtK1+SqlgP8aIFYxsDyitfhqDpa
1c6tv7fka7hh7CewiJqixa2i.Ur5jGudcnuRvQPTKRcfDAXmXWf6+5UJ.67V
sr286dem67Ez8Ne4tSPZ4JOtM1i2v82GPFt+9.De6+t12396eIB5R77dOWLD
VpftD9kftrRLIg3ygvrSdjZFUD2ElDyuD0keIpK+RTWddQcY8KOntUw+vb0B
MJaWQD06V4nNLub25uFhwgeihABDruHeQ3LuMGDbYaF+1NxW9JEgBTePA2.N
D3NYfBE0Jv8EtbtbkBhym6JE39hTNGgNg0zAITNfi6Sq.XZIxuD6IS.G+6+c
pFCk8YtvkXyuq.liynoQzFS4B0Pi9VGw0gmyQH9FHfSjDU.9fhKlXI4bEt5w
oWDwMn5QRwynlUz9huVWwIGR.Mea62fnQPjATMzvpWKGN3RONukhv1t7ztHx
7Orww1hAg1yLC98ohtsb2tKFl9CKiiSW0FKa2alJIbbfowKbj5FmmWFGFm1F
C22B.XwsTZwioJ7TfgewOk9ysvwPGoBcbfHsrmBahjktQ.E8ND12RdhvoSrq
ZKmoR9WATzAQXe14INtUlRHSVkba.HtJhG8YhfvS2nR7.NUvCGEwi9RzFB+h
2lb3gsh3Qe4yJluXoCbZAGDMk52V78NL0fCrlx8aK94xM0fCKEgCa47otb01
ICdnZoAn+TZ0ZRhGJtISP+ozJrh6oSG7P0jZ0RtK5XxgGZJCvEW3+TBNDYDe
S+QSYEdYPQP36gWhpuB3y37BGTKWY9bOwvEbqUoNvjHyvkNois5H6+Lut4Cc
GY7q60kxHsSYNWWJytcJy95RYcjloja17tGeUoLXGITs00kx.sSYnqKkAamx
fWWJCM5EgCYoLqwN2zACqrFzHjoILCOfx9f1paICo1SfzEQXO.hvRWDgy.HB
70tLxTPDDMQDPyAPD15hHFR0ZwQWDAb.DgqtHBzPJOL5pzrzfk6NnBcUBTrj
EKHi9BM3afB.kzvyn6ffrDFTinCwZ.DAXLQGooL6a0R6CTi9nHsQXrNUdj1x
iNUgwR6tlsNoBYs0w.MvnZEVZmpIi9djrFBpMpjFYHfF3ljxrGaMM4Emvwlz
HvafBJH1dXkawKbAfS6o9qoJo9KnRxueqm5ugOrwKZUnuwid6xiWjFm6k6u+
tMF.T0UR.C4EFaQR.Cv3qbkeSv4a8y1H3aVDploBei5O4msrEUjldJ8QtiAe
+ZbZ3JiG4IBJ0tvirJZAktK94BMbCL.V7OISIb9+uD0VUhnyxE.O1s4+2wCD
6phRA5hqTbnnQ9HmIoiVRw08Y73pfsT5jT7uyJe46WiARNGP47KHOmeEhw8j
JDCCTkf04I5CruIK5pf4b9rN.0Y0wo85lnHt7.pUYLuIXc6SX8MAgA49KplB
.csDA7RAArOW8q.miHG6hi.W54nh64hqZD6kcjpe1escXN0Nz3i7HW4gt9gx
2uuaJOPXYXwKv3.FBVddiDPhQBTw4a00OjQHcD4T+5SUmIkYjMadjM0+Hi0x
bBYzUqekZWLld.SStvLsqLV6tDyPqsQ41XQfNPWoFYXyiLT+iriNjqPolG4N
VqhU+BltXBVYLPBIZQxJyPirzhnUpg1VG.NRJYs8EPqB4NfQ5xhuRMzHsrN.
YrfWmwZfjAKO0WZtS7GUH2JFhiJfaGU71Nsvs0dQa63B1FqXs0TgZqXmT288
28+gE.Z1C
-----------end_max5_patcher-----------

Gen で配列をつくる検討 #Max8

リアルタイムグラフィックスの数学勉強中

リアルタイムグラフィックスの数学

シェーダーの勉強がてら、こちらの書籍をMax8上のGenに移植しています。

このような画像作成の学習を通して、数学やシェーダーの理解が向上できそうです。しかし、Max8で実装していく上では直接的に配列が使えないようで少し困っていました。

解決案(とりあえず)

かなり無理矢理ですが、整数の入力に対して変数を返せば良いと考えてSubpatchを作ってみました。と言ってもselector objectなんですが、0はじまりにしてあります。

Length3の配列

配列の長さを3以上に増やしたければ、根性でinletの数を増やさなければなりません。genにおける配列実装に良い解決案をご存知の方いたらコメント/Twitter等で教えて頂けますとありがたいです。

使用例

色の配列を扱う例(arr3に繋いだ三つ目のベクトルが出力されます)

Gen Subpatcher & Subparam 使い方

jit.pix内部のfaderという変数をイジれるようになってる。

jit.pixの中身

gen subpatcherはgen @gen *** で指定。またパラメーターをイジる場合は、setparamを使用する。ちなみにparamは外部公開する変数。

gen subpatcherの中身

外部からイジるパラメーターはparamで指定。

Maya LTでモデリングした3DデータをMax7で使うぞい #max7 #MayaLT #Jitter

Maya LT を使ってモデリングしたい。

3Dプリンター持っていたり、VJで3Dモデル使ってみようと思って、Blenderを勉強してみようと思ったんですが、操作が難しすぎて挫折していました。そんな中、最近UnityやUnreal Engineのようなゲーム開発環境向けにMaya LTというソフトが比較的お手頃な価格で出ておました。ポリゴン書き出し数やレンダリングの制限があるようなのですが、Blenderよりは分かりやすい操作で、Maxで使うオブジェクトを作るにも丁度良さそうだったので使ってみる事に。

モデルを用意

 

スクリーンショット 2015-03-22 21.34.56 モデルを用意して、FBXで書き出し。

FBXをDAEに変換したい

Maya LTでつくったモデルは、FBX / OBJ / Maya LTフォーマットで書き出せます。一方、Maxのjit.gl.modelが対応しているフォーマットは、DAEとOBJです。それならOBJで書き出し読込すれば良さそうですが、頂点カラーの設定がどうにも読み込まれ無かったりで、使えませんでした。続いて、プランBとしてFBXをDAEに変換を試してみました。 スクリーンショット 2015-03-22 21.22.22 FBX→DAE変換は、AutoDesk公式でFBX Converterというアプリケーションがでております。これにMaya LTで書きだしたFBXをドラッグ&ドロップで読み込ませ、”Destination format”で”DAE Collada”を選択しエクスポートで変換完了。

MaxでDAEの読込表示

スクリーンショット 2015-03-22 22.08.13 jit.world(Max7からjit.gl系のセッティングが楽になりましたね)、jit.gl.model、jit.gl.handleを繋いで書きだしたDAEを読込むと。 

スクリーンショット 2015-03-22 23.04.21

表示できました。jit.gl.modelの@modeがdisplaylistかimmediateにしないと、Maya LTで設定した頂点カラーが描画されないので注意です。

おまけ:Maya LTでフェースに色をつける


頂点カラーでモデルに色を塗った場合、色の境界は自動的に補間されてなだらかに繋がってしまいます。それを防ぐために、フェース単位で色を塗る方法がありました。

続きを読む Maya LTでモデリングした3DデータをMax7で使うぞい #max7 #MayaLT #Jitter

jit.movie @output_texture 1 で取得したGPU上の動画テクスチャを指定した解像度でアスペクト比を保ったまま描画:#max7 #maxmsp #gen

GPU上の動画テクスチャのアスペクト比と解像度を固定したい

スクリーンショット 2015-02-15 18.44.32
あのタグで待ってるをMax7に対応させようと改良しています。Max7化のポイントは、jit.movieから直接GPUに動画テクスチャを送る機能を使ったパフォーマンスアップです。

ただし、問題がありました。jit.gl.pixの解像度が、第一インレットに入力される解像度に固定されてしまうという点です。これの何が問題かと言うと、VJソフトは16:9や4:3等の異なるアスペクト比や、HDやSD画質など異なる解像度を持つ動画を次々に切り替えて再生するので、そのままでは最終出力の解像度やアスペクト比も次々に変わってしまいます。横長の間延びした動画になってしまったり、SD解像度にHD画質の動画がひっぱられて解像度が落ちてしまったり。

そこで今回は、上記の画像のように16:9の画面に4:3の動画を、指定した解像度で出すのが目的となります。

パッチ

スクリーンショット 2015-02-15 18.40.16

ポイントは、jit.gl.pixの第一インレットに解像度を指定するMatrixを入力する所です。これを使ってjit.gl.pixの出力を常に同じ解像度に固定します。また第二インレットに jit.movie @output_texture 1 で取得した動画テクスチャを入れます。この動画テクスチャのアスペクト比を保持するために、解像度を別途jit.gl.pixに入力してあげる必要があります。なぜならjit.gl.pixでは、in2に入力したテクスチャから直接dimを取得できないためです。param dim2 としてパラメーターを与えています。

ちなみに動画テクスチャの解像度をjit.movieから取り出す際に、dimメッセージで取得すると正しい値が取れないので、getmoviedimを使いました。

jit.gl.pixの内部

スクリーンショット 2015-02-25 23.59.09

in1に入れたマトリクスは、全く利用しません。あくまで解像度を固定するために入力しています。テクスチャのアスペクト比の調整は、右側のコードで行って、最終的にin2の動画テクスチャをsampleオブジェクトで取り出します。

結果

スクリーンショット 2015-02-15 18.40.21

指定した解像度とアスペクト比にする事は出来ましたが、まだ問題があります。上記画像を見ると、左右領域にゴミが残ってしまっています。本来ここの領域は真っ黒にしたいのです。この原因はjit.gl.pixの内部でsampleのオプションを@boundmode clampにしているためです。@boundmodeはいくつか指定があるのですが、他のwrapやmirrorでももちろん駄目でした。指定した領域にテクスチャが無い場合に単純に黒くするオプションが欲しい所・・・。自分で黒く塗るプログラムを追加するのが解決策になりそうですが。

スクリーンショット 2015-02-15 18.45.05

動画の縁まで色が付いていると、こんな感じになってしまいます。

続きを読む jit.movie @output_texture 1 で取得したGPU上の動画テクスチャを指定した解像度でアスペクト比を保ったまま描画:#max7 #maxmsp #gen