質問: 【aviutl】について質問です。
回答: ■■■ 原因 ■■■ X, Y の移動方法に使っているスクリプト「ベジェ曲線T」は、 設定ダイアログで「軌道番号」と曲線の形を指定すると、 そのスクリプト内では、 各「軌道番号」ごとにベジェ曲線の方程式がセットされる。 今回の例のように、 いっぽうの「ベジェ曲線T」では「軌道番号:1」に、 もういっぽうでは「起動番号:2」 に、 それぞれ曲線を指定している場合は、 ──────────────── 【 ベジェ曲線T(1) 】 . . └─ F[1] = ~ ベジェ曲線の式(1)~ 【 ベジェ曲線T(2) 】 . . └─ F[2] = ~ ベジェ曲線の式(2)~ ──────────────── という感じになっている。 質問の添付画像のように配置している場合 このプロジェクトファイルを開いた段階では、 カーソル(現在位置を示す縦線)が 移動して1つ目の「ベジェ曲線T」の位置にくると、 1つめのベジェ曲線 F[1] は定義されているが、 2つ目の「ベジェ曲線T」がまだ登場していないから、 2つめのベジェ曲線 F[2] は未定義となりエラーが起きる。 移動方法に使っている「ベジェ曲線」の内部でエラーが起きるから、 その移動方法が適用されない状態になる。 (※参照:添付画像の図1) カーソルが移動して2つ目の「ベジェ曲線T」の位置にくると、 すでに「ベジェ曲線T」は1度登場しているから、 1つ目のベジェ曲線 F[1] は定義済み、 1つめのベジェ曲線 F[2] も登場して定義されるんで、 この段階でようやく「移動方法」が正しく動作することになる。 たとえば、 カーソルを F[2] の段階の位置に置いた状態で保存して、 プロジェクトファイルを開くと、 こんどは逆に F[2] は登場しているけど F[1] は飛ばされてまだ登場していないから未定義になってしまい、 この場合も「移動方法」が正しく動かない。 ちなみに、 質問に添付されているリンク先の動画では、 「ベジェ曲線T」が画面に映らないようにレイヤーをオフにしているが、 このやり方だと、 作業中はオフにする前に1度読み込んでいるんで正常に動作するけど、 保存して開いたときは、 1度もベジェ曲線が読み込まれないんで正しく動かない。 「ベジェ曲線T」の曲線が表示されないようにするときは、 レイヤーやオブジェクト本体をオフにするのではなく、 「ベジェ曲線T」の設定ダイアログで、 「曲線を表示」の ✔ チェックを外して非表示にする。 ■■■ 解決策 ■■■ 簡単。 軌道 F[1], F[2] を利用している「カメラ制御」がある時間範囲に、 ちゃんと F[1] と F[2] が存在するようにするだけ。 (※参照:添付画像の図2) ■■■ あてにならない ■■■ 質問に添付されているリンク先の動画、 その制作者はたぶん Aviutl の仕様をちゃんと理解しておらず、 使いこなせていない。 だから、あまり当てにしないほうがいい。 まず、 X 軸と Y 軸に違う移動方法を割り当てるために、 わざわざフィルタ効果「基本効果 > 座標」を追加したり、 ティム氏の「位置補正」を導入したりしているが、 そんなことをしなくても、 Aviutl 拡張編集の基本操作で、 ふつうに X 軸と Y 軸に別々の移動方法を割り当てることができるんで、 そんな用途のためにティム氏のスクリプトを導入する必要はない。 また、 カメラを水平移動させるために、 わざわざ Aodaruma 氏の「ParallelCamera」を導入しているが、 そんなことをしなくても、 Aviutl 拡張編集の基本操作で、 ふつうにカメラを水平移動させられるんで、 そんな用途のために ParallelCamera を導入する必要はない。 無駄な外部スクリプトが増えて、 設定ダイアログに無駄な追加項目が増えると、 その分トラブルが起きる確率も高くなるんで、 実装はできるだけシンプルにしたほうがイイい。 【 X 軸と Y 軸に別々の移動方法 】 X 軸と Y 軸に別々の移動方法を指定するには、 キーボードの [Shift] キーを押しっぱなしにした状態のままで、 ──────────────── ・トラックバー [ X ] や [ Y ] のボタンをクリック ・移動方法の選択 ──────────────── を行なえばいい。 今回の場合は、 [ X ] も [ Y ] も「ベジェ曲線T」で移動させ、 その設定パラメータだけかえればいいから、 まず、 [Shift] キーは押さずに、 ふつうにトラックバーの [ X ] に「ベジェ曲線T」を割り当てる。 これで、 [ X ], [ Y ], [ Z ] のすべてに、 「ベジェ曲線T」が適用されて その設定パラメータは初期値 1 になっている。 あとは、 [ Y ] と [ Z ] だけ設定値を 2 に変えればいいから、 [Shift] キーを押しっぱなしにしたままの状態で、 ──────────────── ・トラックバー [ Y ] をクリック ・設定をクリック ──────────────── パラメータ設定のパネルが開いたら [Shift] を放して、 パラメータ 2 を入力して [Enter] キーを押す。 同じ操作を [Z] にも。 これで、 [ X ] には「ベジェ曲線T(パラメータ:1)」が、 [ Y ] と [ X ] には「ベジェ曲線T(パラメータ:2)」が、 それぞれ設定されることになる。 [ 参考 ] なお、 移動方法「ベジェ曲線T」を指定したあと、 その設定パラメータ( 1 とか 2 とか )だけ変えたいときは、 トラックバーをクリック → 「設定」をクリック のようにしてもいいけど、 キーボードの [Alt] キーを押しっぱなしにした状態で トラックバーをクリックすれば、 いきなり「設定」のパネルを開くことができる。 [ X ] だけ個別に ... という場合は、 [Shift]+[Alt] を押っぱにしてトラックバー [ X ] をクリックすれば、 いきなり「設定」のパネルを開いて、 かつ [ X ] だけ設定パラメータを変更できる。 各トラックバーの設定パラメータを確認したい場合は、 [Alt] を押したまま各トラックバーをクリックしたあと、 [Enter] キー押して確定せずに [Esc] でキャンセルすると、 設定値を更新しないで確認だけできる。 【 カメラの平行移動 】 カメラを平行移動させるには、 「カメラ制御」の設定ダイアログで、 「目標レイヤー」を 「カメラ制御」自身が置かれているレイヤー番号にすればいいだけ。 レイヤー3に「カメラ制御」を置いている場合は、 「目標レイヤー」を 3 にする。 1つだけ、 作業中にオブジェクトのレイヤーを移動することはよくあるけど、 そのたびに「目標レイヤー」を変える必要があるので注意。 もし、 レイヤーを移動するたびに「目標レイヤー」の設定を変えるのが面倒なら、 「カメラ制御」の設定ダイアログ右上の [+] ボタンから、 「スクリプト(カメラ制御)」を追加して、 スクリプト入力欄に ──────────────── local cam = obj.getoption( "camera_param" ); cam.tx = cam.x cam.ty = cam.y cam.tz = cam.z obj.setoption( "camera_param", cam ); ──────────────── のように入力(コピペ)すれば、 どこのレイヤーに置いてもへいこういどうするようになる。 いちおう、 ↑このスクリプトの説明をしておくと、 obj.getoption( "camera_param" ) で 変数 cam にカメラのパラメータを取得し、 その cam の目標 X, 目標Y, 目標 Z に当たる obj.tx, obj.ty, obj.tz を、 X, Y, Z にあたり obj.x, obj.y, obj.z に書き換えたうえで、 書き換えたそのパラメータ cam を、 obj.setoption( "camera_param" ) で設定し直している。 カメラの位置座標と目標座標が同じになるから、 これで平行移動になる。