レイヤーでの式の使用
式を設定するには、Layer エディターで制御したいプロパティを右クリックします。
これにより、min/max/step を表示する Metafield が開き、プロパティの限界値と、アニメーション中に使う値のステップを編集できます。
min/max/step プロパティの下には Expression というフィールドがあり、最初は self という 1 つの単語が含まれています。これが編集する式です。

デフォルトの式: self
Section titled “デフォルトの式: self”self は、レイヤー式のコンテキストで定義される特別な変数です。式を受け付ける他の場所では無効、または異なる意味を持つ場合があります。self は、式が制御しているプロパティの通常のアニメーション値を指します。デフォルトの式が self であることは、デフォルトではレイヤープロパティに設定された値がそのまま、変更なしで使われることを意味します。
self は、数値プロパティでは数値、テキストプロパティではテキストです。
値を完全に削除すると、disguise は式の値として self を自動入力します。そのため、Expression フィールドのテキストを削除するだけで、レイヤープロパティをそのまま使うデフォルトの動作にすばやくリセットできます。
式での self の使用
Section titled “式での self の使用”self は、他の多くの変数と同様に、より複雑な式に組み込めます。シンプルな式の例は self * 2 で、これはプロパティのアニメーション値を 2 倍にします。
レイヤー式のその他の変数
Section titled “レイヤー式のその他の変数”一部の 変数 は、便宜のためにシステムによって定義されます。式がレイヤーによって評価される場合、次の変数が利用できます:
time- トラックの開始からの秒単位のトラック時間。self- 上記で説明したキーフレーム値。self.min- このフィールドの最小値。self.max- このフィールドの最大値。
例: 緊急時のレイヤーフェードダウン
Section titled “例: 緊急時のレイヤーフェードダウン”一般的な使用例は、レイヤーの brightness プロパティに式を使うことです。たとえば、フェーダーやその他のライブコントロールに、ライブビデオの緊急カットアウトオプションを持たせる必要があるかもしれません。この例では、このコントロールが OSC を使って実装されているとしますが、disguise がサポートする任意のライブ入力プロトコルで行えます。
self * (1 - osc:video.emergency_cut_out)
この例では、プロパティの通常のアニメーション値(self)を取り、OSC アドレス /video/emergency_cut_out で送られた値を 1 から引いたものを掛けます。通常、その OSC 値は 0 なので、1 - 0 は 1、self * 1 は単に self となり、通常のアニメーション値が尊重されます。
ただし、/video/emergency_cut_out が 1 に設定されると、式は self * 0 に評価され、どんな数値も 0 を掛けると 0 になるため、レイヤーの brightness が 0 になり、表示されなくなります。
式を使ったレイヤーの制御
Section titled “式を使ったレイヤーの制御”disguise に簡単なリンク式を自動的に書かせることができます。方法は、Alt キーを押しながら、disguise GUI の目的の値から制御したいレイヤーフィールドへマウスをドラッグすることです。これは、他のレイヤーを含む GUI のほとんどの場所から行えます。(複数のレイヤーを同時に開くには、Ctrl を押しながら開きたいレイヤーをクリックします。)詳しくは マウスドラッグで接続を作成する をご覧ください。
例: 複数のレイヤー間で brightness をリンクする
Section titled “例: 複数のレイヤー間で brightness をリンクする”リンクしたい 2 つのレイヤーのエディターを開き、一方のレイヤーの brightness プロパティから他方へ Alt+ドラッグします。Designer は、最初のレイヤーの brightness を参照する式を 2 番目(出力先)のレイヤーに書き込みます。
その時点から、ドラッグ元のレイヤーのアニメーションと編集が両方のレイヤーを制御します。このプロセスを繰り返して(チェーン状ではなく、毎回同じ最初のレイヤーからドラッグすることを推奨します)、好きなだけ多くのレイヤーを制御できます。
なお、レイヤー参照は、そのレイヤーがタイムライン上でアクティブな期間のみ有効です。現在再生ヘッドの下にないレイヤーのプロパティにアクセスしようとすると失敗します。これは、レイヤープロパティには、タイムラインの範囲外で一貫した値がないためです。
式でのビデオレイヤー時間の使用
Section titled “式でのビデオレイヤー時間の使用”ビデオレイヤーは、式でアクセスできる時間ベースのプロパティを公開します。video という名前のビデオレイヤーの場合、モジュールで次のプロパティが利用できます:
module:video.tSecElapsed— 現在のクリップの再生開始からの秒数module:video.tSecRemaining— 現在のクリップが終了するまでの秒数
これらは秒単位の値を返し、計算に直接使うか、formatTimecode および formatTimecodeDF 関数を使ってタイムコードとして整形できます。
たとえば、ビデオクリップの経過時間をテキスト式でタイムコード文字列として表示するには:
format::Elapsed: {formatTimecode(module:video.tSecElapsed, module:video.video.fps)}
または、残り 5 秒未満になったときにアクションをトリガーするには:
if(module:video.tSecRemaining < 5, 1, 0)
例: ビデオレイヤーのフレーム番号を使って brightness をアニメーション化する
Section titled “例: ビデオレイヤーのフレーム番号を使って brightness をアニメーション化する”ビデオレイヤーの frameNumberDisplay は、ビデオレイヤー上部に現在のフレーム読み取り値を提供します。これはユーザーが覚えておく必要はなく、代わりに video という名前のビデオモジュールの Layer エディターを開きます。レイヤー上部のフレーム読み取り値から Alt + ドラッグし、別のレイヤー(chevron レイヤーなど)の brightness プロパティにドロップします。
これにより、次の式が Chevron レイヤーの brightness プロパティに書き込まれます: module:video.frameNumberDisplay。
そのプロパティは式で変数として使えます。たとえば、ビデオがフレーム 50 に達するまで brightness を 0 にし、その後 1 にスナップするには: if(module:video.frameNumberDisplay < 50, 0, 1)
または、最初の 50 フレームで滑らかにフェードアップするには: min(1, lerp(0, 1, module:video.frameNumberDisplay / 50.0))
式の有効化と無効化
Section titled “式の有効化と無効化”すべての式フィールドには、テキストボックスの横に = ボタンがあります。これをクリックすると式を一時的に無効にできます。ラベルが // に変わり、評価が一時停止され、フィールドは基になるキーフレーム値にフォールバックします。数式自体は保持されるので、ボタンを再度クリックすればいつでも再びオンにできます。式が無効の間、フィールドは落ち着いた緑に色付けされ、アクティブに評価されている式と区別されます。
これは、数式のクリアや式のベイクに代わる非破壊的な方法です(どちらも元の式を失うか、その外部制御を取り除きます)。
レイヤー上のすべての式を一度に切り替えるには、レイヤーのタイトルバーを右クリックします。各グループ(All fields、Opened fields、Visible fields)の下に単一の Enable expressions / Disable expressions ボタンが表示され、そのラベルはそのグループの式の現在の状態を反映します。
無効状態はプロジェクトとともに保存されるので、保存と再読み込みをまたいで保持されます。
レイヤープレフィックス
Section titled “レイヤープレフィックス”レイヤープレフィックスは、特定のフィールドが期待する未知の値の範囲をターゲットにする作業を容易にします。これらは、DMX や MIDI 入力などの一般的なコンポーネントから読みやすい式を構築する、組み込みの alt+ドラッグ機能で使われます。
フィールド範囲は、self.min から self.max の変数として利用できます。
limit::- 結果をフィールド範囲に制限します。これはclamp(expr, self.min, self.max)と同等です。scale::- 0〜1 の値を、限界を無視してフィールド範囲にスケーリングします。これはlerp(self.min, self.max, expr)と同等です。