Amazonで商品を見るセール会場へ

After Effectsでカメラとの距離に応じて変化|ワールド座標とターゲット制御

3Dレイヤーと実際のカメラをワールド座標へ変換し、距離に応じて不透明度や明るさを変えます。

位置の親子関係が違うレイヤー同士でも、同じ座標系で距離を求めます。

最終調査日:2026年10月3日。

数値・参照範囲・構文をローカルで確認しています。

今回AE本体のカメラ描画、色収差合成、音声再生、Undoは確認していません。

目次

距離で不透明度を変える

練習コンポへ明示的なカメラと3Dの平面またはテキストを作ります。

対象レイヤーの不透明度を60%にし、その不透明度へ次の式を貼ります。

式を開く操作はストップウォッチのAltクリック(MacはOptionクリック)です。

位置やソーステキストへは貼りません。

var startDistance = 500;
var endDistance = 1500;
var result = value;
var camera = thisComp.activeCamera;
if (camera && endDistance > startDistance) {
    var d = length(thisLayer.toWorld(anchorPoint), camera.toWorld([0, 0, 0]));
    result = value * linear(d, startDistance, endDistance, 1, 0);
}
result;
入力・条件期待する結果確認点
距離500以下/元の不透明度6060%減衰開始まで元の値
距離100030%開始500と終了1500の中間
距離1500以上0%終了距離で透明
明示的なカメラなし元の不透明度既定カメラを推測しない

距離は対象のアンカーポイントとカメラのワールド位置の間で測ります。

画面上の見かけの距離や、制御ヌルまでの距離ではありません。

数値を照合する場合は、親のないカメラを[0,0,0]、対象を[0,0,500]・[0,0,1000]・[0,0,1500]へ置き、計算された不透明度を見ます。

画面内の構図の確認とは分けて試します。

明るさへ減少量を加える

対象へ「輝度&コントラスト」を追加し、「輝度」を0にして次の式を貼ります。

maxReduction=50では距離1000で−25、1500以上で−50を元の輝度へ加えます。

var startDistance = 500;
var endDistance = 1500;
var maxReduction = 50;
var result = value;
var camera = thisComp.activeCamera;
if (camera && endDistance > startDistance && maxReduction >= 0) {
    var d = length(thisLayer.toWorld(anchorPoint), camera.toWorld([0, 0, 0]));
    result = value - linear(d, startDistance, endDistance, 0, maxReduction);
}
result;

貼付先は「輝度」です。

コントラストの低下は別の変化なので、明るさの式を同じ結果としてコントラストへ流用しません。

元の輝度が低い場合はさらに下がるため、エフェクトの入力範囲と実際の見た目を確認してmaxReductionを調整します。

endDistanceはstartDistanceより大きくします。

4つのターゲットへカメラ制御を移動する

3Dヌルを5枚作り、制御用をcamControl、独立したターゲットをTarget0・Target1・Target2・Target3とします。

camControl自身をターゲットに指定しません。

camControlへレイヤー制御を4つ追加し、エフェクト名をTarget-0〜Target-3にして対応するターゲットを指定します。

スライダー制御をtargetControl、チェックボックス制御をeaseという名前で追加します。

camControlの位置へ次の式を貼ります。

分割次元のX位置へは貼らず、3要素の位置へ貼ります。

var cc = effect("targetControl")(1).value;
var result = value;
if (isFinite(cc)) {
    cc = Math.max(0, Math.min(3, cc));
    var n = Math.min(2, Math.floor(cc));
    var a = effect("Target-" + n)(1);
    var b = effect("Target-" + (n + 1))(1);
    var start = a.toWorld(a.anchorPoint);
    var end = b.toWorld(b.anchorPoint);
    var world = effect("ease")(1).value == 1 ?
        ease(cc, n, n + 1, start, end) : linear(cc, n, n + 1, start, end);
    result = hasParent ? parent.fromWorld(world) : world;
}
result;

targetControlは0〜3で、1.5はTarget1とTarget2の中間です。

範囲外の数値は0か3へ制限し、3でもTarget-4を読みません。

位置はターゲットのアンカーポイントをワールド座標へ変換して補間します。

camControlに親がある場合は、その親の座標系へ戻します。

カメラをcamControlへ親子付けし、カメラのローカル位置を[0,0,−1000]、回転と方向を0にします。

正面向きのターゲットを練習に使い、カメラの自動方向設定とローカルのオフセットで構図が変わる点を確認します。

回転を補間する場合

回転の練習ではcamControlとターゲットに親を付けず、全ターゲットの「方向」を0にします。

以下をX回転へ貼り、Y回転用はaxisをyRotation、Z回転用はzRotationへ変えます。

var axis = "xRotation"; // X: xRotation / Y: yRotation / Z: zRotation
var cc = effect("targetControl")(1).value;
var result = value;
if (isFinite(cc)) {
    cc = Math.max(0, Math.min(3, cc));
    var n = Math.min(2, Math.floor(cc));
    var a = effect("Target-" + n)(1).transform[axis].value;
    var b = effect("Target-" + (n + 1))(1).transform[axis].value;
    result = effect("ease")(1).value == 1 ?
        ease(cc, n, n + 1, a, b) : linear(cc, n, n + 1, a, b);
}
result;

回転は同じ座標系の各Euler角を数値として補間します。

350度から10度を最短の20度で回す計算や、親の回転・方向を含むワールド回転の補間には対応しません。

エラーの切り分けと戻し方

Targetの参照エラーなら4つのレイヤー制御が未選択でないか、名前が一致するか、ターゲットが3Dかを確認します。

距離の結果が違う場合は、カメラと制御ヌルのオフセットを混同していないか確認します。

変更前にコンポを複製し、親、位置、回転、方向、明るさと不透明度のキーを控えます。

戻すときは追加した式を無効にし、今回変更した親子付け・値・カメラ設定を控えた状態へ戻します。

Adobeの距離によるフェード例を参照しています。

Adobeの輝度&コントラスト資料を参照しています。

旧記事の参考チュートリアルはカメラ制御と距離の演出です。

今回の本文は上記の式を使います。

関連する操作

やりたいこと最初に読む記事
画像を規則的に並べる中心間隔と端の間隔
RGBをずらして合成する色収差の基本設定
横長・縦長を切り替える画面サイズと表示切替
再生位置の曲名を出す曲名と対象レイヤー

参照資料

Adobeのエクスプレッション言語資料を参照しています。

旧版の参考コード・関連記事

旧版の参考コードは本文の練習と対象・設定が異なる場合があります。

今回の操作は本文のコードを使います。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

After Effectsのおすすめ書籍

必要なPCスペック

周辺機器の優先度

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次