忘れちゃうCOMP達 [TouchDesigner]
随時更新されます
最終更新 : 2023/02/25
UI周りを更新しました。
何もない所を右クリック
open parent parametersより、
親Compのparameterを開くことができる。
Comp 共通 Common tab
Parent ShortcutでそのComp内のnodeからのexpressionやpathとかでこのCompを呼ぶ場合のショートカットとしてのネームを好きに指定できる。
同様に、 Global OP ShortcutではこのCompへのパスをどこでも参照できるGlobalの名前を決めれる。
ex : Global OP Shortcut = TDBasicWidgetsになっていたら
op.TDBasicWidgetsでアクセスできる。
ex:
op.TDBasicWidgets.op('buttonMomentary') if hasattr(op, 'TDBasicWidgets') else ''
ちなみに、複数のcompで同じ名前のglobal OP Shortcutがついているとエラーになる。
Internal OP Shortcut 1 に好きなShortcutNameと
Internal OP にそのComp内にあるノードのpathを指定することで
iop.ShortcutNameでアクセスできるようになる。
なので頻繁にアクセスするOPがあった場合、その親CompのInternal OPのところに指定してあげることで簡単にアクセスできるようになる。
Node Viewでは
そのCompがビューアーに表示するものを選べる。
Default Viewerの場合は勝手に初期状態として選べて、
Operator Viewerにすること子ノードのどれをビューアーに指定するかを選べる。
だいたい初期は./out1などになっている。
Enable Cloning でCloneできるようにするかどうかを選べて、
Clone MasterでmasterとなるClone元を選べる
Clone については以下の記事が分かりやすい。
Replicatorみたいに元の何かを参照しながらコピーしたい場合にCloneが使えれる。
CloneしているCOMPは黒くなる
この間は常にcloneされているので、任意のタイミングでclone offにすれば、そこまでのものが全てcopyされているcompが出来上がるため便利。
Load on Demand をオンにすると
常にこのComponentをメモリにロードするわけではなくて、必要に応じてロードされる。
External .toxにtoxファイルを指定することで
そのコンポーネントはその.toxを参照している形となる。
中に入ると黄色い字で左上にExternal Toxという名前で存在していることがわかる。
このexternal .toxを指定した後に内部のコンポーネントに変更を加えたとして、Common tabの一番下のRe-Init Networkを押すとExternal .toxが再参照されて初期状態に戻すことができる。
実際の挙動はここの動画が分かりやすい。
ただし、Save Backup of Externalをonにしていると、External .toxのバックアップが.toeに保存される形になって.toxが見つからんかった場合にバックアップで保存してあったものが参照される形になる。
色々複雑になるのでoffにしておくのもあり。
Reload .tox on Startでは.toeが起動時にExternal .toxで指定した.toxファイルがロードされるようになって、そのCompは.toxと同じ内容に強制的になる。
このExternal toxが独立して動くのを防ぐためにつくっているtoxもある。
panel系 COMP
左下にButtonが出力されている。
Replicator
opをreplicator_callback DATに書いたルールに従って、複製することができる。
3Dの画的な沢山の複製はInstancingで複製できるが、
TOP的なものの複製に便利replicator
Operetor Prefixではコピーを作っていくOPの接頭辞
その後ろにindex番号が付く
Master Operatorには基となるOPを選ぶ
Callbacks DATで生成規則を書くことができる
Layout Originでノード複製場所の座標を指定できる。
Replication MethodをBy Numberにすると、生成する個数を指定できる。
Number of Replicantsで数を指定する。
Replicant Suffix Startで生成するOPの名前のインデックスを何から始めるかを指定できる。
Recreate All Operators / Recreate Missing Operatorsでリセットできる。
text DATとかでFrameごとに更新する場合、pulseで押すようにすればリセットできるのでよし。
Replication Methodを By Tableにすると
Template DAT TableにTable DATを指定できる。
Name from TableがRow Indexの場合
行のindexの数だけ生成される。
Ignore First RowをONにすると、最初の行を無視できる。
その際の生成されるOPの名前は指定したOperator Prefix + Row indexとなる。
Name from TableがColumn by Indexの場合
Column Indexに指定した、列の行数だけ生成される。
その際の生成されるOPの名前は指定したOperator Prefix + Table cellとなる。
Name from TableがColumn by Nameの場合
Column Nameに指定した、列名の名前の列の行数だけ生成される
その際の生成されるOPの名前は指定したOperator Prefix +Table cellとなる。
callbacks
確認した範囲では、onReplicateよりも、onRemoveReplicantの方が先に処理される。
onRemoveReplicant(comp, replicant):
compはreplicator Comp自体を指すOP
replicantは削除されるOPを指す
onReplicate(comp, allOps, newOps, template, master):
関数内に初期生成時から定義されているcは生成されるOPを表している。
こいつに対して、c.par.****とか指示していく。
compはreplicator Comp自体を指すOP
もし自分でOPを生成して、nodeX/Yを指定する場合は
Yに関しては95ぐらいずつ移動させれば、大体ちょうどいいかも
def onRemoveReplicant(comp, replicant):
replicant.destroy()
# print(comp)
# print(replicant)
# debug()
digit = replicant.digits
# print(digit)
DeathMulti = op('multi' + str(digit))
DeathMulti.destroy()
return
def onReplicate(comp, allOps, newOps, template, master):
......
for c in newOps:
....
....
if bool(op('multi' + str(i))) == False:
parent().create(multiplyTOP, 'multi' + str(i))
multi = op('multi' + str(i))
multi.nodeX = 3500
multi.nodeY = 0 + i * 95
c.outputConnectors[0].connect(multi.inputConnectors[0])
movie_null.outputConnectors[0].connect(multi.inputConnectors[1])
common page
Timeline
メインのタイムライン以外に、CompごとにTimelineを持つことができる。
COMPを右クリックして、 Add Component Time
COMPの中に入ると、localという名前が付いたBase COMPが出来上がっている。
さらにTimelineの上に新たなLocal TimelineのUIが表示される。
メインのタイムラインとは別時間軸で動くタイムラインとなっている。
I = Run Independently
これにチェック入っているとタイムラインUIとは別軸で勝手に再生がスタートする。
外すと、再生ボタンを押すとLocal TImelineも動き始める。
S = Scope Timeline : path
Timeline UIの時間軸をこのLocal Timelineにすることができる。
Timeline UIが青く光っていない色になる
ここで設定したStart や End, FPSなどはLocal TImelineの設定が変更されることになる。
「/」を押すことでTimeline UIの時間軸をrootのタイムラインに戻すことができる。
Timeline CHOPを使えば、ローカルタイムラインのFrame数など設定を取得することができる。
Time
Local Timelineを上記の方法で作成した時に、LocalというBaseCompの中にTime COMPが入っている。
先ほど設定していたPlayやRun IndependentlyなどはこのTimeCOMPと紐づいている(Bindされている)。
ここに何かしらExpressionなどを仕込めば、
動画の長さに自動でTimelineを合わせてくれるものなどを作れる。
timeCOMP Class
このTIme CompからはTimelineのfpsなどの変更はできないがする方法がある。
project全体のfpsを変えるならproject.cookRateからpython等々で変更することができる。
time comp周りのlocal Timelineとかについてはこっち
こっちのlocal timelineのfpsも変更する方法があるはず。
Animation
outがCHOPになっていて、設定したキーフレームアニメーションが出力される。
右クリックして Edit Animationを選ぶと
キーフレームエディターが出現する。
左側のPathに今設定したいAnimation COMPを選んで、
NamesにChannnel名を設定して、
Add Channelsを押すと下のタイムラインにセットされる。
消したいときはバツマーク
×と名前の間にあるピンクの四角を押すとLockすることができる。
Alt + Clickをするとキーフレームを設定できる。
上のFunctionの方からカーブの種類を選べる
Snapのタブから X or Yにチェックを入れると指定した単位でキーフレームがスナップ(指定単位ごとに綺麗に整えてくれる)してくれるようになる。
レイヤーで選択しているチャンネルは同時に表示することができる。
Extend Left / RightでRange範囲外の扱いを決めれる
Hold / Slope / Cycle / Mirror / Default Value
Time ReferenceではどのTimeline軸で設定するかを選べる。
path指定
Play Mode設定を変えれる。
output Full Rangeに設定すると、sample(波形)でoutputすることができうr。
Rangeタブの TypeをCustomに変えると、
Start と Endの時間を決めれる
Object系 COMP
XformのPivotはAdobeでいうアンカーポイント
Xform tab
基本的なトランスフォームが行える。
Unit Scaleは全体に乗算されるようなScaleのイメージ
用には3つの軸に対して均一にスケールされる。
回転行列などの順序を気にしなきゃいけない場合はRotate Orderを変えれる。
Rx Ry Rz / xyz
R = Rz * Ry * Rx
Rx Rz Ry / xzy
R = Ry * Rz * Rx
Ry Rx Rz / yxz
R = Rz * Rx * Ry
Ry Rz Rx / yzx
R = Rx * Rz * Ry
Rz Rx Ry / zxy
R = Ry * Rx * Rz
Rz Ry Rx / zyx
R = Rx * Ry * Rz
Constrain To
は、
Look At
このコンポーネントが指定したComp方向に向くようになる。
指定すると
Forward Direction / Look At Up Vectorなど出現する
Forward Direction
にてどの軸が真正面方向かを決めれる。
Look At Up Vector
その際、Look Atで指定したコンポーネントのY軸を通過するときにアニメーションがフリップする可能性があるので、Up Vectorを指定することができる。自分がどの方向を上だと思っているかをVectorでしていできる。
Use Roll
Use Up Vector
Use Quaternions
が選べる。
RollとUp Vectorはなんかマニュアルで指定できる。
Quartenionsはどこで何かを指定できるのかよくわからない。
もしかしたらクウォータニオンを勝手に使ってくれていい感じにしてくれるのかもしれない。
Path SOPは指定したSOPのパスに沿って移動することができる。
スプライン系のSOPを指定してあげるのが良い。
Pre-Xform tab
Xformより先に適用されるトランスフォームで、Null Compを親ノードとして上に接続するのと同じこととなる。
行列的に順序が重要になってくるときにはpre-xformが生きてくる。
Reset Transfromでpre-xformのリセット
Commit to Main Transformで現在のpre-xformに設定している。Transform設定を今のX-formの方に一元管理するようにパラメータを調整してくれる。
自分のテスト環境ではTransformとRotationは適用されたが、Scaleが適用されなていないように感じた。
Xform Matrix /CHOP /DAT
で4x4 matrixを使って、transformを定義することができる。
ただ、preX-formよりも変換の後に適用される。積の順序の以下になる。
そのマトリックスの定義は以下のリンク。
Render tab
material にはMATを指定できる。
Geometryでよくやるやつ
Renderをonにしてあると、Render TOPを介した際に表示されるかどうかを決めれる。
Draw Prioirtyでは
描画される順序を決定できる大きな値のコンプの上に小さな値のやつが描画されるシステム。
つまり0だと最上段に描画されるようになる。
Wireframe colorでワイヤーフレームの際の色を決めれる。
Geometry
Instane 2の
Rotate to Vectorに3次元ベクトルを入力すると
そちらのベクトル方向に向くように回転する
Instance Textures
ここにTOPを指定すると、Geometryのinstanceのテクスチャとして貼り付けられる。MAT からではなくGeometry COMPからつける方法。
いくつかのTOPを指定してあげると、複数の色が使える。
その際Texture Indexに
インスタンス数と同じのlengthのsampleを作って、その値を0/1/2整数の値が入っているような物を作る
例として、math CHOPでIntegerをfloorとかにして、rangeで調整してあげれば作れる。
Texture Cord は Texture のどの位置を参照するかの指定
3D モデルのテクスチャを貼る時にどこの部分を使うか指定するようなやつ
Rotate up は up で指定した軸を中心とした回転?
Camera
ViewタブのProjectionが
Perspectiveだと、パースがついたカメラ的映りで
Orthographicだと、パースがつかない大きさをそのままに映る。
Perspective to Ortho Blendはわからん
Custom Projection Matrixは自分でProjection Matrixを作りたい人がCHOP , DAT , GLSL DATで指定できる。
ViewタブのViewing Angle Methodが
Horizontal / Vertical FOVだと、FOV Angleで視野角度を決めて画角を決める。
Focal Length and Apertureだと、実際のカメラに慣れている人だと考えやすい、Focal Length(焦点距離)とApertureを指定できるが、Apertureの意味は絞りの意味ではなくて、フィルムアパーチャー・フィルムゲート(Apeture size)の事を言っている。実質のセンサーサイズ。
ちょっと感覚・意味が違う。下記リンクから詳細を知れる。
View タブの Near / Far
描画範囲のDepthを指定できる。
例えば、Rectangle SOPのsizeXが16/9, sizeYが1だとして、
(16:9を想定している)
Cameraと対象の距離とFocal Lengthを同じにして、
Apertureを16/9にすると画面とぴったりに表示される。
ここのCamera Compでいう Apertureは 的な絞りのことを言っているわけではなくて、film gate的なapertureの事を言っている。
Film Gateは画像を映すエリアの大きさのこと。大体はそれがイメージセンサーやフィルムの大きさに対応する。
Apertureという英単語自体が開口部みたいな意味を持つために、レンズの絞り機構にもApertureという言葉が使われることが多くある。
レンズの絞り機構がいくら締まってようが、設計上センサーの大きさまでは光が当たるように大体設計されているため実質のCG上気にしたいApertureはFilmGateの大きさととらえられる。
ViewタブのWindow X/Y / Size / Roll
Look At に COMPを入れると、そのCOMP方向に向かって、カメラの視点がそっちに向く
Cameraを任意の軌道でのカメラワークをつける方法
Path SOPにSOPを入れると、そのSOPのPointの順番に移動していくようなカメラを作れる。
Positionを0 - 1まで変えることで、SOPのPointを移動することができる。
SettingsタブのBackground Color
初期設定だとalphaが0になっていて、背景は透過されているが、
Backgroundを設定することもできる。
SettingsタブのFog
Linear / Exponential / Squared Exponential
フォグの生成ができる。
Camera Light MaskにはLight COMPが指定される。
カメラの画角にオブジェクトが無く透明で表示されている部分はSettings tabよりBackground Colorを設定すると何もない所が塗りつぶされる。
Camera Blend
inputがマルチになっていて、Camera COMPを複数入力することができる。
Render TOPのCamera(s)のところをCamera Blendに設定する。
Camera Blend COMPのBlendタブの
TypeがBlnedの場合
Weight1がinput1, Weight2がinput2の重みを表しており、
1 : 1だと、Camera1と2の間のT[xyz]・R[xyz]・S[xyz]・BG・FOGになる。
0 : 1にすれば、Camera2と同じになる。
Maskのボタンを押すと、その部分が無効になる。
TypeがSequenceの場合、
入力順にindexが振られて、0の時はinput0 , 1の時はinput1....
へとカメラのパラメーターが補完されていく。
Sequenceの値をイーズなどのアニメーションを掛けた変化にすればカメラモーションもつけれる。
カメラのスイッチングにも使える。
カメラのスイッチングに関しては、こっちの方が自由度が高くて便利
Null
3D object系COMPのNullとして機能する。
Window
好きなOPを別ウィンドウに表示することができる。
別モニターなどにフルスクリーンで表示して出力することとかもできる。
Window Operatorに出力したいOPを入れる。
Justify and Offset Toでどのモニターに出力するかを選択できる。
Specify Monitorの時はMonitorの値を変更してどのモニターにするかを選ぶ
Opening Sizeでどのくらいの解像度でウィンドウを作るかを選べる
Automatic from Pnel COMP / TOPではそのOPで設定されている解像度に合わせて表示されて、FillではFULL画面で出てくる。Customではその下のWidth/Heightで自分で設定できる。
Cursor Visibleでマウスカーソルの表示設定を変更できる。
Constrain CursorでWindowでは表示した際にそのWindow領域の中にマウスが制限されて、Monitorでは表示しているモニターに制限される。
V-sync Modeで垂直同期の設定を選べる。
諸々の設定が完了したらOpen As Separate Window の Openを押すと以下のようにwindowが出現する
Closeを押すと閉じる。同様にESCキーorウィンドウの終了ボタンを押しても戻る。
BordersをOFFにすると縁がなくなる
TouchDesigner左上のPerformモードもWindow COMPから出力できる。
Open as Perform WindowからPerformを押すと起動できる。
PerformモードではESCキーで戻る。
Set as Perform Windowを押すと、
Window Placement DialogというところのPerform Windowにチェックが入る。
開き方はメニューのDialogs > Window Placement or Window COMP > Window Placement Dialogから開ける。
Include in Placement DialogをON / OFFにすることでWindow Placement Dialogに表示するかしないかを選べる。
Window Placement Dialog
Perform Windowというところにチェックの入っているWindow COMPは
Performモードで表示される対象となる。
Designer Mode(Esc) / Perform Mode(F1)のボタンからでもPerformモードとDesignerモードを切り替えられる。
ParのPという項目をクリックすると、そのWindow COMPのParametersを別ウィンドウで表示することができる。
Netのところにあるマークを押すとそのwindow COMPがあるネットワークを別ウィンドウで表示することができる。
Open CloseのOpenを押すとOpen as Separate Windowを押したときと同じように別ウィンドウで表示できる。
Parameter
OperatorにOPを設定して、
Viwer Activeモード(OP右下 +マーク) もしくは右クリック View..でOPのParameterをいじることができる。
HeaderをONにするとParameterのヘッダーもいじることができて、
Page NamesをONにするとParameterのページタブもいじることができる。
Page Scope / Parameter Scopeで表示させたいページ・パラメーターを絞ることもできる。
Panels系 COMP
基本的には、Parent Compの中に入っている、Child Compとして扱われる。
という親子関係の他に
Compの上下のポートに接続する親子関係も存在する。
Compの内部に入れる形の親子関係は、Panels系のCOMPに至ってはレイヤーのような概念になる。
上下のポートの親子関係はAEでいうピッグウィップによる親子関係みたいなイメージ。
中ボタンクリック等でinfoを見るとpanel boundsにそのcompがどの大きさでどのxyにいるかを確認できる
child数も見ることができる。
Layout tab
Depth Layer は同じ階層にいる子compに対してレイヤー順を決めるもの。
数値が高い方が上に表示される。
Horizontal Mode / Vertical Mode
Fixed Width, Fill, Anchorsから選べる。
デフォルトで、Fixed Widthになっていて、これだと
Width, Heightの数値に合わせて、そのcompの大きさが決まる。
Left Anchor / Bottom Anchorがさわれて
0-1に正規化されていて、親の左端
(上)が0、右端(上)が1になるようになっている。
Horizontal Origin / Vertical Originで、パネルの原点の位置を設定できる。デフォルトの原点(0,0)はパネルの左下隅
Fillにすると、親のCOMPに合わせて、horizontal / verticalに幅をfillして埋める。
Horizontal Fill Weight
Anchorsを選ぶと、一見Fillと同じような挙動をするが
Left(Right) Anchor, Left(Right) Offsetが出てきて、
anchorを0-1で正規化された数値で設定できて左端が0、右端が1にして選べる。そのoffsetをそれぞれ設定できる。
Top Bottomでも同じ。
AnchorのRight/Left、Bottom/Topをそれぞれこれから配置しようとする中央になるポイントの座標で同じ値にして、
offsetを128x32の画像ならL-64,R64,B-18,T18にすればいい感じに配置することもできる。
Parent Alignment
defaultでAllowになっている。これは親CompのChildren tabでalignが設定されていた時に、それに適用されるかされないかを選べる。
Ignoreにしていると無視されて、Ingnore and Ignore Marginsを選ぶと親のマージンも無視される。
Allowの時に、Align orderが選べて、親のAlignに従うときに並ぶ順番をどうするかを設定できる。Align Orderが小さい方が先に並ぶ。
Size from Windowをonにすると、
viewerを出していた時に、マウスでウィンドウの大きさを変えると、Layout tabの Width/Heightもバインドされて更新される。
ONにしていると、bindされているから大きさを変更しても解像度が保たれているが、
offにしていると、無理やりストレッチした感じに解像度が下がる。
Panel tab
Floating Viewer Aspect
Propotionalにすると、OPを右クリックして、Viewerを表示した時にウィンドウを同じアスペクト比率で拡大できるようにするか、
Unconstrainedにすると、左右のみ、上下のみなどアス比に関わらない大きさ変更ができる。
Look tab
Background Color / Background Alpha
Background Alphaがデフォルトで0になっている。alpha > 0の時にBackground Colorが効いてくる。
Children tab
例えば、Container comp(A)の中にあるContainer Comp(B)はAがparentとなり、Bがchildということになる。
Parent(A)のcompの中にあるChildren tabをいじれば、中にあるBなどのChildに対しての設定ができる。
Align
Left to Righなどを選べば、同じChild compを左から右へ並べることができる。
Spacingを増やすと、子comp同士の間にスペースを空ける。
Max per Lineの数値を2にすると、1 line(行)に入れれる子compの数が指定できる。
デフォルトの0にしていると、全部が1行に並ぶ。
Marginをいれると、親コンプの四辺に対してマージンを入れれる。
表示される順番は、child compの名前に依存される。
layout1,2,3の順に表示されているが、例えば、緑の1を4とかにすると、順番が変わる
異なるCompに対して、順番を変更したい場合
button , button , sliderになっているが、button , slider ,buttonにしたいとき
それぞれのcompに対して、Layout tabにある、Align orderを設定してあげると任意の順番にできる。数字が少ない順に並ぶ。
Justify Horizontal / Justify Vertical
off / left / center / horizontalが選べて、
水平方向の左揃え、右揃え、センター揃えなどが選べる。
Crop
子Compがこの親コンプを超えて配置されているときにどのように表示するかを選べる。
off(Use Parent), Neverの違いはよくわからない。
onにするとクロップされる。
UIの作り方手順
参考 :
例えば、以下のようなUIを作りたいとしたとする。
とりあえず、Container COMP でHorizontal / Vertical ModeをFillにして、階層で分けていく。
そのとき、一番上のContainer COMP > Layout > Size from Window > OnにしておくとViewでみやすい。
要素の大きさは気にせずにとりあえず、区分けだけを階層的に行っていく。
最下層では、widget COMPを使って配置しておく。
Widgetの上の階層等で次はsectionごとの具体的な大きさを決めていく。
任意のHorizontal / Vertical ModeをFixed Wdith / Heightにして、幅を決めていく。
Size from Window > onにしていたため、固定にしたくない部分以外はFillにしておくと、windowサイズを変えたときにレスポンシブデザインにできる。
もし最終的に全体の固定のウィンドウサイズが決まった場合は、
一番上のContainerでサイズを打って、 Size from windowをoffにすることで固定のデザインに。
決まったら、最下層のWdiget Compが置かれているところにいって、そのWidgetの中にUIを作っていくか、置き換えてしまえばおk
便利な方法として、
この設定したUIからパラメーターのreferenceをとってくるときに、このViwerからControl + 右クリック(win)でNetwork, Parameterなどにアクセスできるショートカットが出てくる。
これでいちいち最下層にあるUIのパラメーターを探しに潜らなくてもいい。
一番上のすべてをまとめているContainerにたいしてCustom Componentでページを作って
そこを各UIとbindさせると便利。
UI側でbindさせる方が綺麗。
っていう作業をしなくても、customize componentで、parameterのところに好きなparameterをドラッグ&ドロップすることで、そこにbindするようにできる。
Bind New Par as Masterの方だと、元のparameter(master)の方にbindが書かれる。
Bind New Par as Referenceの方だと、このcustomしているcomp側にbindが書かれる。
UI Widgetsの場合、valueの下のnameのところに好きなparameterネームを書くことで、それがcustom先のparameterの名前になる。
Container
Panel系のCOMPの複数のUIをまとめれるCOMP
注意で、上下の接続ポートにContainerをContainerに接続した時にUIをclick、入力等々ができなくなってしまう。そうしたい時はWidgetを使う。
あえて、使うならContainerは最終端でまとめたい時に使う。
Children > Align > Top to Bottomにしたとき
Slider
0-1のCHOPとしての値をoutputすることができる。
Button
一般的にクリックしたらという反応はMomentaryをしたらいい。
Table
テーブル上のUIを作れる。
DATからのinputとボタンを紐づけることができる。
Widget
Panel系COMP
階層上にUIをまとめてくれるUIのNull的な扱いで使える。
Containerでこれをやろうとすると、中のUIがクリックしたり中の、UXが使えなくなる。
Field
テキストを打ち込めるUI
Field TypeでString / Float / Integerを選べる
Select
Panel系COMP