第3回: 数値,計算,インタラクションデザイン

目次

名称

Channel

CHOPにはChannelがあり,値が格納されています.
下のCHOPの状態はProcessingでは,
float chan1 = 0.5;
という,変数の宣言と初期化に相当します.


下のCHOPはChannelが2つあるように,CHOP1つの中にChannelは異なる名前であれば,複数存在することができます.

Sample

CHOPにはSampleもあり,そちらにも値が格納できます.
下のCHOPの状態はProcessingでは,
float[] chan1 = {1, 3, 6, 2, 5};
という,配列の宣言と初期化に相当します.


このように

  • Sample数が1つのときはCHOPの背景は棒グラフ
  • Sample数が2つ以上のときは折れ線グラフ

で表されます.

数値を生成する

Constat CHOP

まずは一番基本的なConstant CHOPを使用した定数を生成してみましょう.

LFO CHOP

LFOとはLow Frequency Oscilator(低周波発信器)の略で,耳には聞こえないほどの低い周波数の電気信号を絶えず発している装置のことです.
TouchDesignerでは音以外の目的に使用することも多いです.
また,値の推移を確認する時にTrail CHOPを使用すると血圧記録紙のように見ることができてとても便利です.

入力を扱う

様々な入力を扱えるようになると,インタラクティブな作品を作ることが可能になります.

Mouse In CHOP

その名の通りマウスの入力情報を取得できるCHOPです.
クリック情報もParameter window上でchannel名を入力すれば取得可能になります.

Keyboard In CHOP

その名の通りキーボードの入力情報を取得できるCHOPです.
Parameter windowのKeyboard In > Modifier keysで何か選ぶことによって,そのキーを押しながらでないと入力されないことになります.
制作するアプリ内でショートカットを設定する時などにも役立ちます.

Audio Device In CHOP

PCマイクからの音入力情報を取得します.
より遅延なく反映させたい場合はParameter windowのAudio Device In > Buffer Lengthをより小さい値にするとレスポンスが早まります.
Analyze CHOPはSampleが複数あるChannelに対して指定した手法で解析しSampleを1つにして出力します.
ここではRMS Power(二条平均平方根)で,音量(0 — 1)を取得しています.

インタラクションデザイン

様々な入力を扱えるようになることで,体験者とアプリの相互作用(インタラクションデザイン)を考えられるようになります.

パラメータリンク

ある入力が描画結果に影響を与えるためには,これまで扱ってきたCHOPのパラメータを他のパラメータに反映させる必要があります.それをパラメータリンクといいます.
パラメータリンクをする方法は

  • マウスドラッグ
  • 直接Script入力

があります.

マウスドラッグ

直接Script入力

リンク時のオプション

パラメータをリンクさせるときに,ドラッグ・アンド・ドロップで行おうとするとオプションが数種類出現します.オプションの種類と特徴は以下の表の通りです.

リンクオプション 概要 記述例 box色
Chop Export パラメータを直接読み込む constant1: chan1
Chop Reference Pythonベースのパラメータ参照
・四則演算
・他のパラメータとの組み合わせ
が可能なのでオススメ
op(‘constant1’)[‘chan1’] 水色
Current Chop Value 現時点の値を代入する なし なし

Chop ReferenceはPythonベースの参照であり,op('constant1')['chan1']のように書かれます.そしてリンクした後にop('constant1')['chan1'] + 1のようにPythonの記述形式に従っていれば,四則演算できます.さらにop('constant1')['chan1'] * op('constant2')['chan1']のように他のパラメータと組み合わせたりもできます.その点でChop Referenceが最も自由度が高く,オススメです.
動画でも確認してみましょう.

Sampleが複数のとき

これまでSample数が1つのときのみを扱ってきましたが,Sampleが複数の場合もパラメータリンクは可能です.
op('noise1')['chan1'][0]
のように,Sampleのインデックスを指定することで,値を取得できます.


単純に今までと同じ

op('noise1')['chan1']

のように記述にした場合は,タイムラインのフレームがインデックスとして割り当てられて値が取得されます.チャンネルまでしか指定していませんが,実際はSampleまで勝手に取得されていることに注意しましょう.

Noise CHOP

Pattern CHOP

Pulse CHOP

Null CHOPからリンクさせよう

制作していると,これまでと違うCHOPをリンクさせたいと思うことが多々あります.しかし,これまで通りパラメータリンクしていると,参照先が変わるたびに毎回リンクし直したりする必要があります.それを防ぐことができるのがNull CHOPです.CHOPに限らず,パラメータリンクするときはNull XOPをリンクさせておいてそこに繋ぐXOPを変更するということを習慣づけましょう.現状変更する予定がないパラメータだとしても,後々変更する,あるいは一部を転用してまた制作することがあります.

値を変化させる

Math CHOP

得られた入力の値をグラフィックにリンクしたとき,その変化があまりに小さくor大きく意図した動きを得られないことがよくあります.そんなときにはMath CHOPのParameter window内Range > from Range, to Rangeによって値の範囲を決めることで動きを調整すると便利です.


他にも表のように,様々な計算に関わる処理をすることができるCHOPです.

パラメータ 処理内容
Range > from Range, to Range 数値の範囲を指定する
OP > Combine Channles 複数あるChannelを指定の方法で1つにする
OP > Combine CHOPs 複数繋げられたCHOPのChannelを指定の方法で1つにする
OP > Channel Post OP positive, root, squareなど指定の方法で数を処理する
OP > Integer 指定の方法小数点以下を切り捨てる

Count CHOP

同じ入力(0 — 1)で入力があるたびにそれをカウントしたい場合があります.たとえばNoise CHOPのSampleのインデックスを少しづつカウントアップして参照したい場合などです.

Lag CHOP

値が変化した場合にラグを与えることができます.値が飛び飛びに変化していくのを埋めるアニメーションをさせたいときに便利です.

Count CHOPとLag CHOPを組み合わせたアニメーションを見てみるとわかりやすいです.

一つにする

Select CHOP, Merge CHOP

一つのCHOPに複数のChannelがあるとき,個別に値の変化をつけたいときがあります.そいういうときには,一度Channelを1つだけにしてMath CHOPで処理したいすると良いです.最終的にMerge CHOPに繋ぐことで元通りになります.

Logic CHOP

合わせる方法として,簡単なロジックを組むこともできます.論理積(And,かつ)や論理和(Or,または)を利用してインタラクティビティの詳細を設計できます.

Switch CHOP

Switch TOPと同様に使用できます.

課題

授業内課題

画像のように時計を作りなさい.
要件

  • Clock CHOPを使用して時間を取得する
  • Transform TOPを使用して針を動かす
  • 時針は厳密に少しずつ動かなくて良い
  • 色や形などは厳密に画像通りでなくて良い.


締切: 2023年4月28日16:10
提出先: 情デサーバー 演習/01_Assignment/03_授業内/

来週までの課題

これまで習った内容を使って,インタラクティブな作品を作りなさい.
要件

  • 入力を何にするかは問わない
  • 自身で調べたり,知っていたりするテクニックは使っても構わない
  • Out TOPに最終的につないで,perform modeでウィンドウになるようにすること

締切: 2023年5月11日23:59
提出先: 情デサーバー 演習/01_Assignment/03_週課題/