Adobe After Effects (アニメーション/合成アプリ) には、JavaScript に基づくスクリプト言語 (式) があり、JS の上に構築された一連の After Effects 固有の関数が付属しています。関数linear()
はこれらの 1 つです。1 つのオブジェクトのプロパティ (スライダーの X 位置など) のアニメーション化された変化を考慮し、それを別のプロパティ (シーン内の他のオブジェクトの回転など) にリンクして、最初のアニメーション化されたプロパティが 2 番目のプロパティを制御/アニメーション化するようにします。財産。
その説明がわかりにくい場合は、このビデオの 11:33 を参照してください: https://www.youtube.com/watch?v=gK1Ejt7qND0&t=693s
関数呼び出しは次のlinear()
ようになります。
linear(ref, refStart, refEnd, outStart, outEnd);
実際の内部引数名が何であるかはわかりませんが、これは彼らがすることです:
ref
== 「コントローラー」プロパティ (前の例では、オブジェクトの X 位置)。通常はアニメーションで、時間とともに変化します。
refStart
/ refEnd
== ref プロパティの下限と上限
outStart
/ outEnd
== 宛先プロパティの下限と上限 (前の例では、別のオブジェクトの回転)
この関数の機能を表す一般的なプログラミング用語はありますか? それとも数学用語?私が知る限り、それは「補間」、おそらく線形補間に関係するものですが、よくわかりません。
この関数に相当する一般的なプログラミング/数学ライブラリはありますか? After Effects には、 、、 とlinear()
呼ばれるの簡易バージョンもあります。私が知る限り、それらはプログラミングでは「イージング関数」と呼ばれるかもしれませんが、よくわかりません。ease()
easeIn()
easeOut()
おまけ: AE の linear() をゼロからリバース エンジニアリングしてみました。かなりベアボーンであり、型チェックやエラーは行いませんが、それ以外は AE での私のテストでは同じように動作するようです:
function fauxLinear( ref, refStart, refEnd, outStart, outEnd ) {
// constrain refTemp to range of refStart to refEnd
let refTemp = 0;
const refMin = Math.min( refStart, refEnd );
const refMax = Math.max( refStart, refEnd );
refTemp = (ref < refMin) ? refMin :
(ref > refMax) ? refMax : ref;
// calculate input range and ref proportion
const refRange = Math.abs( refStart - refEnd ) || .001; // avoid dbz
const refRangeTarget = Math.abs( refMin - refTemp );
const refProportion = refRangeTarget / refRange;
// calculations for final output
let outRange = [], outSlope = [], finalVal = [];
const loopLen = ( Array.isArray( outStart ) ) ? outStart.length : 1;
if (loopLen == 1) { outStart = [outStart], outEnd = [outEnd]; }
for (let i = 0; i < loopLen; i++) {
outRange[i] = Math.abs( outStart[i] - outEnd[i] );
outSlope[i] = ( outStart[i] <= outEnd[i] ) ? 1 : -1;
finalVal[i] = ( outSlope[i] * (outRange[i] * refProportion) + outStart[i] );
}
return ( loopLen == 1 ) ? finalVal[0] : finalVal;
}