こんにちは、コバルト爆弾αΩのΣです。
「jit.gl.pixで映像エフェクタを作ろう」の第2回目ではjit.gl.pixにてsampleオブジェクトを用いたエフェクトを解説していきたいと思います。
第2回目内容
- 「sample」オブジェクトの基本
- サンプル範囲の指定
- boundmodeの指定
- タイルエフェクト
- モザイクエフェクト
1.「sample」オブジェクトの基礎
1-1. サンプル範囲の指定
タイルエフェクトやモザイクエフェクトを作るには「sample」オブジェクトを用います。
そこでまずsampleオブジェクトの使い方について解説していきたいと思います。
sampleオブジェクトは2つのinletと1つのoutletを持ち、以下内容でサンプル対象とサンプル範囲を指定します。
- 第1 inlet:サンプル対象入力(textureデータ)
- 第2 inlet:サンプル範囲を指定(正規座標)
- outlet:サンプリング結果を出力(textureデータ)
(例1)
入力全体をサンプリングする場合、以下の図の様な正規座標を第2 inletに入力します。
jit.gl.pixパッチは以下の様に記述します
ここで第1 inletには「in1」を第2 inletには「norm」を入力しています。
「in1」より入力されたtextureデータは元画像に解像度に依らず(x=0.0~1.0, y=0.0~1.0)の正規座標に変換されます。
「norm」オブジェクトは(x=0.0~1.0, y=0.0~1.0)の正規座標ベクトルを出力するオブジェクトとなります。
そのため、上記jit.gl.pixでは第1 inletと第2 inletの座標が同一となるため入力全体がサンプリングされて出力されます。
(例2)
入力画像の左上半分をサンプリングしたい場合には第2 inletには以下の様な座標を指定します。
jit.gl.pixパッチは以下の様に記述します
swizにて「norm」のx座標とy座標の成分を抽出し、それぞれ0.5倍した後に「vec」オブジェクトにて統合しsampleの第2 inletに入力しています。
(例3)
サンプル範囲指定するパッチを紹介します。
下図パッチではmagX,magYにてsample範囲のサイズを指定。
またorigX,origYにてサンプル範囲の開始点のx座標とy座標を指定しています。
1-2. boundmodeの指定
次にsampleオブジェクトのboundmodeの指定について解説したいと思います。
サンプル範囲指定の項では(x=0.0~1.0, y=0.0~1.0)のサンプル範囲でのサンプリング方法について解説しました。もしサンプル範囲が以下の図のように1.0以上となる場合はどうなるでしょうか。
サンプル範囲が1以上となる場合は「@boundmode」にて境界(bound)での処理を指定することが出来ます。
処理には以下3タイプがあります。
- wrap:元画像を繰り返す
- mirror:元画像を境界で反転して繰り返す
- clamp:境界部分を保持する
それぞれの処理のサンプル画像を示します。
2.タイルエフェクト
VJエフェクト等でよく見かけるTilingエフェクトですが、sampleを用いて再現することが出来ます。
パッチ部
「tile number」でタイルの数をコントロール。「boundmode」にてwrap/mirror/clampよりboundmodeを選択。
jit.gl.pix内部
boundmode毎のsampleオブジェクトをそれぞれ用意し、「selector」にてboundmodeを選択しています。
タイルの細かさは「smaller」により指定。「norm」に対してsmallerを掛け合わせてsample範囲を拡大し、タイル数をコントロールしています。
GENオブジェクト
- selector: 第1 inletに1~の数を入力し使用するinletを選択。また入力の数は第1引数で指定。
3.モザイクエフェクト
次にモザイクエフェクトを作ってみたいと思います。こちらもsampleを用いて再現することができますが、モザイク状にサンプリング範囲を指定するために少し工夫が必要です。
sampleオブジェクトを使ったモザイク処理の考え方
モザイク処理では各モザイクのエリアをエリアの中心色で塗りつぶす必要があります。
例えば2×2のモザイク処理をかけたい場合、以下の様にモザイクのエリアは分割することが出来ます。
各モザイクエリアをそれぞれの中心色にて塗りつぶす処理は第2 inletより指定します。
以下にモザイクエリア1を例にとり、モザイク処理の概念を示します。
上図左はモザイク処理をかけなかった場合です。モザイク処理をかけない場合は各セルに対し各セル自体の画像をサンプリングするように座標を指定します。
上図右はモザイク処理をかける場合です。モザイク処理をかける場合は各セルに対してエリアの中心色(0.25, 0.25)をサンプリングする様に指定しています。
上図右の処理を各モザイクエリアに適用することでモザイク処理を行うことが出来ます。
パッチ部
「arasa」にてモザイクの細かさを変更
jit.gl.pix内部
sampleの第1 inletに「in 1」からのtextureを入力。
第2 inletにモザイク状にサンプリングする座標を入力。以下がモザイク処理用座標の計算手順になります。
- 「norm」を「swiz xy」でxy座標のベクトルに分割
- 「arasa」を掛け合わせ分割したいタイル数と同等のサイズに座標を拡大。(例:64*64のモザイク処理をかけたい場合は64をかけx=0.~64. , y=0.~64.にサイズを拡大)
- 「floor」を用いて小数点以下を切り捨てる。この処理により各モザイクエリア内の値が全て同一の値となる
floor適用前:0.0, 0.1, 0.2・・・0.9, 1.0, 1.1・・・
floor適用後:0.0, 0.0, 0.0・・・0.0, 1.0, 1.0・・・ - 「arasa」で割り座標サイズをx=0.0~1.0, y=0.0~1.0に戻す
- 「expr in1 + (1 / arasa)/2」にて各モザイクエリアの半サイズをxy成分に足し、モザイク中心の座標を参照する様にする
GENオブジェクト
- floor: 小数点以下を切り捨て
- expr: [+, -. *, /]等の計算式を記述可能なGENオブジェクト(詳細説明はここでは省略します)
いかがでしたでしょうか。sampleの基礎とそれを用いたエフェクトを紹介させて頂きました(長文になってしまいましたが。。)
sampleは応用次第でかなり多彩なエフェクトが作れるobjectだと思います。是非今回の講座を参考にして色々いじってみて下さい。
次回はマスクエフェクトについて紹介していきたいと思います。お楽しみに!
掲載パッチダウンロード
https://www.dropbox.com/s/io4d0r5oxb91fgb/jitglpix_02.zip?dl=0
Great!!!
いいねいいね