jit.gl.pix で簡易モーションブラー #max8 #jitter

おなじみバスケットボール

単に1フレーム前の画像と今の画像をブレンディングしてるだけです。

なぜかjit.gl.textureとzl regを通すと1フレーム前の映像がjit.gl.pixに戻るので簡易ブラーが実現できます。流れている線をみても特にtexture番号が変わっている訳でも無いのに不思議・・・内部処理に何か依存してるんでしょう。

ディレイは?

ディレイをしたい場合は、jit.gl.texturesetでやりましょう。

jit.gl.texturesetのhelp

jit.gl.pix で Gold Noise #max8 #jitter

リアルタイムグラフィックスの数学を1日1サンプルずつ進めているのですが、ノイズ生成の章でGenには無いビット演算を使っていて困りました。

別のアルゴリズムを探してみようと思い、出会ったのがGold Noiseです。少数の精度が低くても使えると書いてありました。名前がカッコイイ・・・

Gif

Blog容量の問題でフレームレート解像度は下がってますが、辺なパターンもなく良い感じでした

code


----------begin_max5_patcher----------
705.3ocwW10aZCCEF95vuBKeYGE4ORBI6evtaec2TUUJ3QCJwA43vXpp+2m+
HzMlnkyvQdHAV1wgW+jWe74jmlkfen6fnGidO5anjjmlkj3FxNPxX+Dba0gU
MU8togkhez8vV7b+kzhCZ2verRU0h5Eh0Hdd1wKKGZ6FzMBs6doiiVu1cKl+
la4uLU+7z+bmvuZvXzciWZWkd0i0xM2qDqz9qxWxVPliXjbaS4RWGyPubOFk
qkGElXG64Yyr+LOLNuAQIlOvAL85.jxRsLkwntFxaCHc5.b2GfyF+JYqvwFa
oiJZYDMOxBJb7XggWYgsgyil0cCXzXEWGZ4NjxR8VV4hr2hL1zQ1W9zm+JCN
cKCJlKsf6ah19xuqpLqAv3kGj4U5LONKZaK0UR3rkEBaoK8dVVzXqQH2neDN
doAgmGrTZzv6V3jwCgLdAIxmnrWrBQPvyiynW4YJYtJT3o9iVtPgJr+KICHA
YczkQ15dGXxnkWooQ7LkmFYz7UQuoqYsPppz0c1BVxoEDNblyCZi5XE0zbRz
x94gVI56ZFLHKQYTl8KXjSCCYpu5ZZZdzP1rNQuRgnjyvG9RAg4YtLC73k3y
aZC2qqaEvqnNnW1azmJ3QyljcpVvvETI0irw+G1B5lAtoV92u+tSD63mBbe2
fZ0wkzw28F8agVK500R6gNx+XR1iPQTzcm8gJXkRAnj8cRBVIao+WToiKmfT
xdN6kYhdxj5TqEpWeOJXHoPjlOEFGCJjAqDGhwwhkw411eFiiFlwU.4wY9D.
IKCZDWvJA4w4TDvw.cHR1TnDj8hrIgIBzH4f20WBQIxDDIW.UnSQxmNqZ2t8
BU+3rcZXxTusyE7UL20sV56xccUh80GmuKqLtRYxwpMIXGTt0E9PtuBJbamI
LVNTOFIanyHoqJ.YUqneWkGD71Z8hMBId1yy9EPHVci9
-----------end_max5_patcher-----------

jit.gl.pixのコードなので注意

余談

記事を書き終わって、そういえば・・・大昔に自分でjit.gl.pixで使うnoise調べてましたわ。今回とアルゴリズム違うのでこちらもご参照

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で指定。

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