Gen Subpatcher & Subparam 使い方

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

jit.pixの中身

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

gen subpatcherの中身

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


jit.gen vs jit.gl.pix Vetex Array 生成対決:#max6 #maxmsp #jitter #cycling74

スクリーンショット 2014-07-16 0.43.34

フォーラムに似たようなスレッドがありますがMaxにおけるGPUとCPUの対決です!球体のVertex Arrayをjit.gen / jit.gl.pix の両方で生成できるパッチをつくりました。それをjit.gl.meshへ入力し上記のような画像を生成します。

実装

スクリーンショット 2014-07-16 1.02.34
jit.gl.pixはGPU上の処理でVertexの配置を保持したテクスチャを生成しますが、そのままjit.gl.meshへの入力へは使えません。まずはjit.gl.pixの出力をjit.matrixに入力する事で、CPU側のメモリにGPU側のテクスチャを呼び戻します。jit.gl.pixはplane数が4に固定されています、ARGBですね。なので次にjit.genを使ってplane数を3に削減してjit.gl.meshに入力できるplane数に変更しています。ちなみにこのplane削減処理は、jit.unpackでも出来ますが、jit.genのswizを利用した方が多少早かったです。こうして、GPU計算したVertexをjit.gl.meshの描画に利用できます。

それではMaxにおけるCPU vs GPUの対決やいかに・・・!

結果

fps(@sync 0) : jit.gen 100fps / jit.gl.pix 70fps
CPU使用率 : jit.gen 140% / jit.gl.pix 60%
※アクティビティモニタで目測

jit.gl.pix(GPU)はfpsが伸びなかったです。代わりに、CPU使用率が下がっていますね。これはMSPと共存させるような方には良いかもしれません。ただ描画速度やパーティクル数を稼ぎたい場合は、jit.gen(CPU)を使う方が良いみたいです。というかjit.genは、シェーダーのように並列演算しやすい形で記述するので、裏でCPUの並列計算をするようになっているそうです。

TIPS

スクリーンショット 2014-07-16 0.45.17

  • jit.gl.pix dimの最大値 16384 か?それ以上の値になると表示がバグる
  • jit.gen / jit.gl.pix 内部で使えるプリミティブ(circle,sphere,torus等)楽しい

Sample Patch


----------begin_max5_patcher----------
2043.3oc6bssjahCD8Y6uBJp8wYmEIw08or09YLaJWXirsR3hWPdtjT40848
ab+RVcAvfMfkIXMdRlIULwR.p6S2p0oUqIec9LykYOiKLM9ciGLlM6qymMSz
DugYkeelYR3yqhCKD2l4prjDbJ07NYeT7yTQ6ehPueCN03wBCw+L99cjmM9q
zkuX7gDRddV9xrWpdpXRJdU19TwiBKajDIdQYK+zuhPU245rT55vUXdWnx1R
2mPRiwTg.AZbiEjuHtQn88VUMmuYIuIq5V1ERWskjtYQNdEUp4PeVuFPG9mH
fG+hK6AL93gALaOsZDsZLhogIhQz7OxIgwl7N91747OtSQ7jlsYSL1rCL.T0
nbrourCKEWSBG393PnQGJIJ.cuSkVBfA0W5QMO7pxYJIEmu.mFtLVHCViPQ6
yw4+9m+8O2FltAaT4B8aM7f5.Xf1lp5H.fWli.xCJvHaj.cbrD9E5xUX4dJM
KsKMF1qqvRFxc49BPeg4GU53eN0DLoJi0TqLHv0VYRwOwD89h40gRBb5UIYO
zhjPZN221v7LpaONyc45xPAlqKxVfBRG3APAX+dtMGCbdIpTBKrGfDieDmWP
XF2CB5Lyvc6Zz7rFOBGK+Tl3E4dWcSjTYSf5lxwORpddu5VCyYZJkol6ykB4
y9tlxNY1u4UOZsyfvw1U9okvWv1oALvrzaVkEKG6GXQCBtqwGf12Xb1pOiiZ
LQmYN2gSIo6xwErXYgzRwst6H75v8wzEca2Z2e0xZc1Ym1jYlaxIQYobgn0S
xatZ3dfE2RF8poxHtizvcc7vEL8XewxvbN7WFfGV0IMKKtcW0Vb1TlvTByUF
SIRgEZU+RII6xIx02qaSt9w1hU4YwwsdUxddridhXNEqvOQhnaaE8l2C61I6
pLAl0XTDYCtf1tMZ3lh1szh3SSu0lwBZ09PwDZGWn3IxWL3q2znyFAGbZ19I
wGpiHzaTgAhLzWzAGQHRG4zBmiiMz+p+Cs51rp3nkyEmdbjjZ.5ACAiECsFO
FJhl.rEK1X8VACYxSufns4UvSShRVRxzdJ.SVWLLcHrFOQhdlEKjMd+cieEY
6yWU4uTNqznsXxhvPIo0A4enFzN591RhhZGSUFFpfGTKplu7Ys0WpDCTThcl
HI13iyOzxzwfphLzojnPuVjnjjHcbFOIpIkwbvjS+Wleis80iw79jkLxicXT
cGLs16TRmt.KpU.2hVFO5rIzAGJo2I0Z2yDhcgelMW0pq8CnWbqGvBNZvR5W
bVvBLo.xFFqIlDA6ZBP+aER6o+kLNACAGco2.wzdnb4JTYtwiyIYhytruMAA
.GL13l3E72COmoqP7QXfUiMQ5mvrLAPWnH0R+2Sz78DMeESzbGatCdboHc2U
JUSnHHpmbanTg+O7FOUSG8mpoDCQtBLz98TMGBk.xB17iXplf2boZZeCjpYB
tnHbC9D9Tq2GGyhjiwoF+BnKVlNSBCaz4qznsmy8PGTfk6cF9Rm3.Mwxt2xM
Bcm1xMVponCZJT07Itx7p2YvVPuKDvaLoYacw9.LVhNsQFaAYRHXL9.usqVi
Sip0XKIQ6a8N2324FqHaD4bjd3b3qDmiNicI4bAsObtPfNJyrn5jNHTU8P8p
.GaTG+5j.aCRfUDaa3jAfimhlDIAR1YmVU5a0zA9L9kQkUU4VXd5kqRVBkfK
vpr3dNmEbsuMH.CUjNo+aNBvvol.b456EgOhiVvFAl0eQHklSVtmJMGMWu+6
cosyuz4EDuuSgXfAuuAkQAXYXbICm5msikUtJkm5IRZT1SFkW9v5BVr88rUi
Yl4OvkVNwEVp5rusLKOBma.32TXHu+127Koq5bm8A9CS7bJ2AWIsbGKuZxmN
.jVKyE24cOoCXv18Ry+5xUe.nLArC5OP45bvkbYk5DFZyIEV3tZq2UroSnAp
X8OlDmCjkvgvW.KHGM4VLbQPX4zusdJX3dZFiwKYEepFMOLsXcVdxBd5.TdS
EIYYzsKJ1FFwzO9TO9SrPra7E06PU6CgLpiok1eekeN3xweawwOE4KYb5Aq1
C0WaKPZFo.afLVGmERQPlKhE+ucEKCn8Z1aUR7Q37Bbc0ZzrK9jgFna7ozop
rlc9veRKYW.BJKtqy6Ur68ck31rhcAuNUrq7H6I8M9gnjcduVmNTuxvJuWxt
Ac0bQu0JYWvatSGpmhRbvs8oCkQ9OGmxyqth9eu4Qq8zngtxh24ZeKv4jZrT
7GbdXQWU3y6rvywWkuoIFyjaptm2YfLac.Y+cBllmYzU0fsGSw.giDT.xcx0
0Qqm3xdqEry0nTv.anZm1X8TEXVlrQR+748sE+i53VewldKmpeei0nou2MgS
C6AmmeiM4XD69VTd3SKRxhvl5ARf9WeLo5jWKO1bvytkrmBJjD0fCwKrMyHI
5bL+hRLZXlP8UEDqV2zIDJNkLwIFqoTb.1ZSb7UAczlz3ofz3qUoA8cJMIjn
cYrUgJcdCbj+eZP0usYUe4vnLoRO7bV1fKS78buG3x9wlK1vJl.H1O1c2D.I
oZFH1SOw2tBpp6s0bJGEDG8IM1JgN5aVksBhim1jFDPk.f.8IOpHN5yXAUZ4
J8AOP+aL4QkUrft5SdTYxNzQexiysUvGnJS2Czq3.NG7nO9W.UbeP2dhC31Q
bf5y6AnxjKH71RdzHOLfJKlBzWvvilH2i7nwoWJy8QSyuTPbFq0RtMBGUaet
fbTM8Opd9mVK+9piOab917+GE2s8X
-----------end_max5_patcher-----------

jit.gl.pix を使ったテクスチャパーティクルの描画:#jitter #max6 #cycling74

jit.gl.multiple が重いのでは?という仮定の元、jit.gl.pixを使ったパーティクルの描画を前回試してみました。今回は、その続きでテクスチャ付きの画像をjit.gl.pixで描画してみました。jit.genで生成したパーティクルの位置をテクスチャとしてjit.gl.pixに入力。ピクセルシェーダーが位置テクスチャを全捜査して、自分が描画対象だったら画像テクスチャからその色を取得し出力。位置テクスチャを全捜査しないで描画する方法があれば良いけど思いつかなかったです。 スクリーンショット 2014-07-15 1.35.50 パフォーマンス的には、解像度720×360 / パーティクル数500 / 20fps 程度という事で大した事無い気もします。アクティビティモニタでMaxを見るとCPU使用率が20%だったのですが、jit.gl.multipleとの比較はしてないので、そのうちやってみたいです。

Continue reading


jit.gl.pix を使ったパーティクルシステム: #max6 #jitter #cycling74

スクリーンショット 2014-07-12 17.53.52

先日、jit.p.shiva や jit.p.vishunを使ったパーティクルシステムを紹介しました。パーティクルの数が1000程度で30fpsと、あまり性能が振るわなかったので、改善点を検討しました。例えばGPUなんかを駆使して・・・

そこで今回は、jit.p.shiva パーティクル生成システムをjit.gl.pixで代用してみます。

スクリーンショット 2014-07-12 18.01.12

パッチでは、jit.gl.pixに超簡略化したjit.p.shivaの代わりをさせています。たんにjit.gl.pixで生成したRGBの値を、XYZに見立ててパーティクルを描画してみようというだけですね。これでGPU上でパーティクルを生成する事ができます。ただし、jit.gl.multipleを用いて描画する関係で、GPU上で計算したパーティクルの位置を保存しているテクスチャ(jit_gl_texture)を一旦CPU側(jit_matrix)に変換かける必要があります。

描画した結果は、1000パーティクルで20fps程度とこちらも結果がふるいませんでした。jit.p.shivaやjit.p.vishnuを使った時よりもパフォーマンスがでてないですね。どうやら、GPU→CPUへテクスチャを戻す処理が重たいようです。CPU処理ですがjit.genでパーティクルを生成した方が良さそうです。

もう1つ以前からの問題ですが、Maxのテクスチャ付きパーティクルを使う際に必須であるjit.gl.multipleがボトルネックになってるようです。jit.gen + jit.gl.render によるOpenGLプリミティブの描画(LineやPoint)では10万パーティクルの描画できるので、jit.gl.multipleを改善しなければ・・・

改善案として、例えばjit.gl.pixでjit.gl.multipleに相当する処理を書ければ、大幅なパフォーマンスアップするのでは?と思いました。テクスチャとパーティクルのポジションだけ貰って、そんなに上手くシェーダーをかけるのか・・・?今後の課題として取り組もうと思います。

おまけ


----------begin_max5_patcher----------
3073.3oc6c0zaiiaF9ryuBUidnXZFuheoOJ5gza8XuOXQfhMsilQVRURNIyt
XOLygh1doKJ588vde+Crsn+WZVzdr+EJ+PxQxVJl1hVCUyLAvZLkkzKe3Ke+
3gTje8ESldSxCz7oV+Jq2XMYxWewjIhh3ELo76SltN3g4QA4he1z4IqWSiKl
do7bEzGJDk+u9Ce6uKHqHbdD8+729t+8e7as9EuMrXV5r7aCuK3wO7C+zO98
O9w+xie7O+e+6+opqNdy5jMEQzBw81trzkYqtQ78YUkDtP7LRt4suFaWcwKS
hKhCVSEm52jEFDUclzfh42FFu55L57BYkC5CY2MKnmq3.fHNvdBVe4SxRXbk
n.p8LxC+Jwy.vtC7R+lKtf+wkJBX2HjFZV604pGjrnh2mRkx6TF3c85fhrP1
89K2GFP3moxRb8mQ3UOGQsDwARl3S5p1VAyaQyEz0I2EtflLiUUXOfomP8Nl
dOSP2SOgqTrhF2NZ.U.MtzZZqHBDeRJFXODGcPtX9AL5zzKpe+YM0RToDVX+
5vH5czr7vj3Z2jISCRSqU7jZWBGKeah3F4b41hBikEA1VTF8tvpq2caoAYrZ
YAqJtISBBO34LUdRV62EUW5S8M3UZG4m1BkELoFDvZoWMOIR9reCqao+k09.
z7GFkL+czE0zpXsloz3v3zLZNyvQPQo3t8zKnKC1DUbc6XZyyuLXNsyKt017
ISWkEtHIlKDMtRdwUOt2XIMH.H0qLheQbPZKWbNqdrI+lfLN7eSDslxKSWOI
Ip4o11hy5xDDGxzjoEgRgEZu8lFtNMKLtnwChFGvtG2lOOKIJpwsRdl6Z4LK
XJEyo2Gtn31FlQ4mg8yCSqZBltEiVDthlWzrrhfU4MKogyh5Zq0sEzn7mylP
S6BLojT+DsZlrciCaMGrqIgF2vt0P5vx.vUX9DgEpFn87XzoczN8bLoxJZYO
Q8ihLrwBzMLZ2NNg0ANgAdRCoGFm.GGN8TOxnv3tT.EBF+7sCf4IaxlWovTp
aX0TDYcNJBi2Ze5Mawlc9c2FtXQSyAxdP479iRKesVIt3oRzmqzMwoAyemEz
5pjkKyorVe1eW81MqSsPVn18xhTyKqB9bANmVvXHnrmkPWA36NXAiwgrko4q
1DdjAfzMDPNMHPZawWDugmckElyN.7LpRUs05NvL.5DURjAlIMqPFt.1et.W
ilIBKNMJHlZcEutXU9+C1Tjv.hv4LqEWkuNIo31qyuMXAqRwKIJb0sE7Jnzs
MuH1g3EUem0ocAMkcMUmu54yMoMOYiLr.r9abfmTiSYFFHWfLCCjL1wAn0YM
MOOXEculm04GYBVsCG18QWEfj8pgbrgq21NZ.O65p7fKYgntNUGXRu59Bbjp
FNCV22tHnnr+aZ3CVO9w+5O8O9mO9gu+wO7c6PZQOXl.B5gm.nqL3IYLTHUv
opbgPsfcP74w6.KnhkQIAEHnEv11darl5LO99ntAI9x737GL8stLHsbSTDKa
KJM15mCzQ+PXehzffsmAIHeaGV3FkgccT1mPmD3TjrZUD8Hq8hbfaC.bNb0z
9opIzVMcfzfLFVVPyJ88tMBd8z4I0hkz8Qh.2DDupcHv8DI4h6QpN3fkzgBN
Dkf6pCLtI5hTinKrjnKO6Oye0m4uRQlWjcTOZ9U7N.CJPOA4yPn7.o5S0XPo
JfGQUcXnYJmFYs0TT29+eFiaW9Lz1A6EcTkfIPRD09D52o+tOgz18N566FLw
OGXx6ucYaG5BbAZAbABimjxgYRibhdV35CnHWePMw02k8VhgJJwd5lcxR+64
A2QWbM6IvZ4uNnfEv9MaJjMG0822WWaG104QXuuUg3Yd3c8PYg.bSPTYDNau
1VbqbVHz89v3EI2aUd3pk4La6aXdiEzJwjVdfKVHGN+QIYKnYbliVlGDHOV+
G+934Gc9Y6YatgoCu9j.hKbavmD.ZvROiq71EauUOF9uQNV8BHc5QkVF9z3.
G.JyK6IXAPrMDRNWy5TFlFQ2pFVDjshVzAemZiJcbeFMArsWM9h6FDgCEHld
RjouJ5Z9MhmPSW3jeuXHQl8OA7BbhN3BpMbKNNBHv2G+4Y5vmyTT2YJ1jE5l
1GhSByopkD4dDNK68USA65co2P5Wwt7iNmZDd8KO.XkRTqts58P9e4HB1Qxo
YmzbxAwc2dg6HaxSCmhIA7OSxsor.HX1O09j6gnCjDSjgggFCHIT6XXOm4Od
BpT8jtUA9igYHU97.wvuCrds8LH+C8qYBzglYIAV.HYLvf0SvJGUOGfpsFbX
45Ohfz6n74RBSAEPrr0Mbh86WOeeYOeOfz.vgwSzmb77WpcLrewPAj4s5Ksa
JmzHltN4qNGcswt5.GcjlMQ3wfm7WwRlT6dy2xD0IZhj4FmLxvweMSeDocbD
qC8QW4zZE4MFvw76CY0CsCjHc.jdxoIL1YL3jgmri96X2yQDU9N83JQP7nHU
Gs6rF4qkN0N3wiyZttH3Kzt1Hpmg8vBB2k6mwUnH5hFEjG8aoAYE8g7n5.nV
h2gTle33fDne1q0tZHQKFEsGQQey7R+UVuW6.IVGgMRjSqtwg2kyhWZjVh1w
AMh7RKTHeP6.ITK1GGSJjuR6XHPCzkgcgiGiiwIYq0NJZqElbskqs.ih2f3k
YAyKzBN14vkI4WPphcnwKCh0xn7HeW.FKbCgQtDuYDrimKY.ZJJmRHGroPKC
3FzS3eymLJ7uEFOD3OwVI72QK3OVNLcNiA7mODHrmlumumkq2LHBYaCOqsHx
gx.HGnnC1hzyAyu5g4U6kGcTjCxCue.5VnZifmV7Q61wqYtI1sXQxP3gFBvJ
g+9ZwrjbNDLNB0bdRttizD1u30wRZI8kA33+Rx2ZcPTGyQfJPzYbDqXw8Iog
5FHA95.HIxzdbGKQZXyLyo+YZA.oiLwkSdaW6wvXfouTHaagJ4DIERNO+7cF
Q4ApcHTGbBAjqljiCG0egkCgfbzNPZqCcQ4j3k.GEDlyWiDrVq8vd.5.HkKM
eN3w.8ZmCVJ0gyZ45AgJSVE6++z+hNdeHPPvKZZFqAmtZ.NeQRUXMLzQGX3m
o6ahNWTX88dYSYWKqKb8JZxWhztouk5D3ni5rOIKPwkSzdh6nZAJV0UnX9P8
aALhksD9jrTsUUYrwrTqzhnzgLiLmkGFUk4VTh9joa.NFbVE840gKRSBiKJ6
vg.bCfdk61ERWJhu07Yd1qnjiRgBZDMNp1uk+V3YJ5S1pJy.iQlIJuRT4YNx
rp3LvbvYfxxr4rjeoppAvb5BhU1cumwDhRKdweFY1PvYuAdypPCVmUcEri+x
eZJvrqpQbaNQBhTNXCGyAmcTEmIlSlMpZ1.YNlMPdGCNaHxrx6KOlimarp15
DoGO1zm8GeYPhviPY1fhDEcLLOYHLhnpuan4zGDppsNn4nOCU02Mzb7o.UMM
En4DiDz6XzmMDYV4TXQFSePfx5FFjsN6iAmMCYVU0Yf4nNqtpg4vHCP4vMLm
HjFcKN+.3wvHJXTsgBXNd.UMPCyg+H2AdSa3xAaSvEpI83yzlf6pnYYzX9lg
P05UuXyOvVma9A8YuOn7ErEr+TTcnWe+KrtQ7GMKHuiskM7gfmcOJuWsgYt8
Ayjqpxttepgre+ZZQVhkmt1B2v8.T.x4LtCYv1hCz5F3G4vUP31tHFvV2WTR
vBoVtdZ56yFDpzDhisYtwo7ztuqh6ytfdsox520BOuYfFKBWebvAxoWaoGku
vm39aqTbgMmEaRzY2HKJwnCLyj5JtXb83I1OVh8iiXuVKUkGfipxi8fHOtMp
4mn3ryDehfm4gX+CxeANjuAGXwbgR7smdXZqRfTATgCJlB6ozrCj5hmw7053
f4XY4DoWN+Z4e6L.oPEPT+ACQQJ0Kd3ZgE8hOT2F3v0KtIwZcgONCl7zjr8t
jGuASdvNlk73oh3PFTCVnCHNdGmAKewhvHb6KDY0WNClpbU.LGtlVUz7GNCC
pX2zcvjFeUT6QCmWEUDGvvYDGXT9bUIJlly8yiKLFTYNSdyDwJ50ZQfRxWjA
6H91YvBxNUCEFghyqhfBRyv4b.pTv0Cn7nh8d3oFqiLgyc1eH4hxN6Kj6rmP
t+9AYW6Ejrmy2bw+CbP7J8C
-----------end_max5_patcher-----------

Maxのパーティクルシステム その2: jit.p.shiva jit.p.vishnu jit.gen jit.gl.multiple #max6 #maxmsp #jitter #cycling74

※編集中 スクリーンショット 2014-07-07 21.25.02

Rotate planeの追加

パーティクルに回転処理を加えたいという事で、前回調べた結果パーティクルを格納するmatrixに対して、rotate の値を管理するplaneを実装する必要がありました。 plane数を6にして、6番目の要素をrotateとする事にします。ただし、受け付けられるplaneがjit.p.shiva は 5か8 jit.p.vishnuが5と限られているため、拡張したmatrixを単純にjit.p.vishnuに突っ込めないです。そのためにはjit.matrixのplane数を調整するために jit.unpack / jit.pack を駆使して、分割したMatrixに対して処理を書く必要があります。

jit.p.shivaの初期化タイミングを取得する

回転の初期化をするのも問題がありました。初めは回転の初期化をするタイミングをLifeの値を見ることで、取得しようとしました。

jit.p.shivaでパーティクルが生まれた瞬間Lifeの値が0以外の数値に埋められるのですが、この値が何故かmatrix row 1 の pre  の要素も初期値が入れられてしまって、preのnowの要素を比較してパーティクルが生まれた瞬間を取得できません。(クソい)

解決方法としては、jit.p.vishnuに指定するアトリビュートであるlifeを、回転処理をするjit.genにも与えて、lifeが最大値の時を初期化タイミングと見なして、回転の初期化をするようにしました。 そうしてめでたくRotateの初期値にバラつきをもった状態ができるようになりました。

Maxのパーティクルシステム面倒くさすぎて、貧弱すぎじゃないかと思ったり・・・。 スクリーンショット 2014-07-07 21.03.03 加えて前回のパッチでは、パーティクルの描画オブジェクトである jit.gl.multiple に matrix row 1 (row 1 には、パーティクルの1フレーム前の状態が含まれている)も与えていたため、2重に描画してしまっていました。今回は、jit.scissors により row 1 を切って row 0 のみ渡しておりパフォーマンスがUPしました。といっても1000パーティクルでフレームレートが30fps程度でした。

NC帝國によるシンリャク君ロゴ

スクリーンショット 2014-07-07 21.11.16

いきいきナードコア感謝祭’14

スクリーンショット 2014-07-07 21.09.59 VJで参加させて頂いた いきいきナードコア感謝祭’14 ナードコアの開祖・神々のプレーを拝めて、非常に興奮しました。コバルト爆弾αΩなんかは、とてもナードコアに影響を受けているので、今後の活動を考える上でも良かった。VJ的には、カッカのアニメVJにアニメ的なエフェクトを載せてみようということで集中線や♡等を散らしました。今後もうちょっと演出を詰めていくとアニメ的な演出を解体・再構築したようなVJが出来そうで、個人的に面白くなりそうでした。


ロジスティクス写像を使ったジェネレ−ティブVJ : #max6 #jitter #cycling74

ジェネレ−ティブなVJの方々って、どうやってノイズと関数の中間みたいな画像を次々につくりだしてるのか。時々疑問に思っていました。ふと、ロジスティクス写像なんかの変数をちょっといじると値の収束する場所が次々に変わるような、カオス理論の本などで出てくる数式を使ってるのかなと思い、簡単そうだったので実装してみました。

結果、単なるrandom乱数だと難しそうな値を取得できていると思います。割りと似たような画像が良くでてきちゃったり、あまり音との連動性が良くないので、もう少し工夫が必要そうですが。

jit.gen コード
スクリーンショット 2014-07-05 8.53.01

ロジスティクス写像の数式は、Wikiのカオス理論に載って要る通り、とても簡単です。

再帰呼び出しをして実装しようとしたのですが、jit.genではコンパイルが通らなかったのでfor文にしています。jit.gen のエラーコードは、glslとluaのエラー(っぽいの)が生で出てくるので原因が全然分からない。Param aの値に音量をぶち込んで音との連動を試みています。実装間違っていたら教えて下さい(笑)

カオス理論で使われる数式は、他にも色々式があるみたいです。次はローレンツ方程式を試してみたいです。


Maxのパーティクルシステム その1: jit.p.shiva jit.p.vishnu jit.gen jit.gl.multiple #max6 #maxmsp #jitter #cycling74

スクリーンショット 2014-07-02 17.59.38

アニメのオープニング、特に芳文社系を見ているとタイトルが出現する辺りの画面遷移エフェクトとして、桜のパーティクルが多用されている事に気が付きました。さっそく桜パーティクルVJを行うべくjitterのパーティクルシステムを調査しました。

Jitter パーティクルシステム × jit.gl.multiple TIPS

  • jitter のデフォルトで付いてるパーティクルシステム jit.p.shiva / jit.p.vishnuでは、オブジェクトの回転処理が入っていないため、全部同じ向きに表示される。(トップの桜パーティクルは、全部同じ向きで残念な感じ。)
  • jit.gl.multiple に Rotate Array を指定できるので、jit.genなどで回転を考慮した処理を書けば、パーティクルを回転させら模様。
  • デフォルトのパーティクルシステムは、レファレンスを見る限り機能が少ない。ただしjit.p.shiva / jit.p.vishnu 自体は、32個までプレーンまで対応しているので、6プレーン以降に回転 / スケール / カラー などを保存してイジる処理を入れれば多機能なパーティクルシステムを実装できそう。
  • jit.gl.multiple を使って描画する場合には、寿命が無くなったパーティクルの描画をしないよう注意。
  • jit.gl.multiple & アルファチャンネル描画する場合は、オブジェクトの @depth_enable 0 @blend_enable 1 を設定。しないと、四角形の枠がでて酷い描画になる。

上記パッチを作るに辺り、ニコニ・コモンズのの素材を利用させて頂きました。今後、回転も考慮した桜パーティクルシステムを実装してみたいと思います。

パーティクルシステム テストパッチ

スクリーンショット 2014-07-02 18.30.10

jit.gen のコード (jit.p.vishnuに接続)

スクリーンショット 2014-07-02 18.26.11

jit.gl.multiple + アルファチャンネル無しのテクスチャ パーティクル

スクリーンショット 2014-07-02 16.59.29

透過を使わない場合は、depth_enable 1 で立体的なパーティクルが利用できる。画像は、NC帝國によるハンバーガーアイコン。1000個くらいが限界っぽい。

jit.gl.render によるプリミティブなパーティクル

スクリーンショット 2014-07-02 16.04.08

jit.gl.render のプリミティブな描画(Lines / strip) であれば、1万パーティクルで60fps近くで動作。