一段落したと思ったらすぐに次のお仕事。大忙しっ!

さて、欲しいな〜と思ったけど$250もするんですね、MAX2AE。高すぎってことで、自分で作る準備です。探せばどなたかが公開されてるんでしょうけどね。

まずは基本的なところから位置の取得、例えば15フレーム目のpoint01の位置を知りたければ、

at time 15 in coordsys world $point01.pos

これをスタートからエンドまでループさせれば、ノードのワールド座標は簡単に取得できますね。

for i=animationRange.start to (animationRange.end - animationRange.start) do (
	print ("frame " + (i as string)+ ":" + (at time i in coordsys world $point01.pos) as string)
)

カメラの書き出しですが、AfterEffectsのカメラはターゲット付きなので、maxのフリーカメラを書き出したい場合、カメラのZ方向と「ターゲットまでの距離」を使って適当なターゲット位置を計算します。

if superClassOf selection[1] == camera do
(
	case classOf selection[1] of
	(
		Freecamera:
			(
				td = selection[1].baseObject.targetDistance
				tartgetPos = [selection[1].dir.x * -1 * td + selection[1].pos.x , selection[1].dir.y* -1 * td + selection[1].pos.y, selection[1].dir.z * -1 * td + selection[1].pos.z ]
			)

		Targetcamera:
			(
				tartgetPos = selection[1].target.pos
			)
	)
)

あとはカメラのFOVやロール角を書き出せばOKかな。

ちなみに、レンズフレアエフェクト等の位置参照用に、スクリーン座標を知りたい場合は、

p = selection[1].pos * viewport.getTM()
screen_topLeft = mapScreenToView [0,0] (p.z) [RenderWidth,RenderHeight]
screen_bottomRight = mapScreenToView [RenderWidth,RenderHeight] (p.z) [RenderWidth,RenderHeight]
world_size = screen_topLeft - screen_bottomRight
x_aspect = RenderWidth/(abs world_size.x)
y_aspect = RenderHeight/(abs world_size.y)
screenPos = point2 (x_aspect*(p.x - screen_topLeft.x)) (-(y_aspect*(p.y - screen_topLeft.y)))

です。アクティブビューポートとレンダリングサイズを元にピクセルで結果(screenPos)を取得できます。

MAX2AE” への2件のフィードバック

  1. 記事とは関係ありませんが・・・

    ★お誕生日おめでとうございます★
    お仕事大変そうですが、風邪など引かないよう気をつけて下さい。

    そして、これからもよろしくお願いします!!

  2. ありがとうございます!
    また一つ歳とりました。

    >そして、これからもよろしくお願いします!!
    DOさんのお正月のスケジュールを聞いておられるメールが昨日ありましたよ、お客さんから、、、マジで。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です