以下の macroScript では、3ds Max のプレビュー アニメーション機能の高度に単純化されたバージョンを実装します。ビューポートのコンテンツに直接的にアクセスし、RAM プレイヤー内に自動的にロードされる AVI ファイルを作成します。
関連トピック:
アクティブ ビューポート情報、タイプ、および変換へのアクセス
Device_Independent_Bitmap_access
全体の流れ
ボタン、メニュー項目またはショートカットとして使用できる macroScript としてコードをパッケージ化します。
Previews システム ディレクトリ内に AVI 出力パス名を定義します。
現在のビューポートのサイズを取得します。
ビューポートのサイズに合わせてビットマップを作成し、そのファイル名を出力パスに設定します。
現在のセグメント内のすべてのアニメーション フレームを巡回します。
スライダを「ループ」から「タイム」に設定します。
ビューポートの DIB を捕捉します。
DIB を事前に定義されたビットマップにコピーします。
現在のフレームをディスクに保存します。
すべてのフレームの準備ができたら、ビットマップを閉じます。
手動でガベージ コレクションを実行して、使用されたメモリをクリアします。
準備できたアニメーションを RAM プレイヤーにロードします。
MAXSCRIPT
macroScript QuickPreview category: "HowTo"
(
preview_name = (getDir #preview)+"/quickpreview.avi"
view_size = getViewSize()
anim_bmp = bitmap view_size.x view_size.y filename:preview_name
for t = animationrange.start to animationrange.end do
(
sliderTime = t
dib = gw.getViewportDib()
copy dib anim_bmp
save anim_bmp
)
close anim_bmp
gc()
ramplayer preview_name ""
)
macroScript QuickPreview category:"HowTo"
(
macroScript は QuickPreview
と呼ばれます。スクリプトを使用する場合は、[カスタマイズ...] (Customize...)に移動してスクリプトを[HowTo]カテゴリからツールバー、メニュー、またはクアッド メニューにドラッグするか、キーボード ショートカットを割り当てることができます。
preview_name = (getDir #preview)+"/quickpreview.avi"
ここで、プレビューする AVI ファイルの出力パスを定義します。getDir
関数を使用して、3ds Max の[カスタマイズ] (Customize) > [パスを設定](Configure Paths)で指定された現在のプレビューのパスにアクセスします。ファイル名を円記号で区切られたパスに追加します(ディレクトリの区切り記号として、二重の円記号「\\」を使うこともできます)。結果のパスは、ユーザ変数の preview_name に格納されます。
view_size = getViewSize()
次に、現在のアクティブなビューポートのサイズを検査します。getViewSize
関数の実行結果は、ビューポートの幅と高さをピクセル数で示した値を含む Point2 の値です。この値を、別のユーザ変数の view_size
に格納します。
アクティブ ビューポート情報、タイプ、および変換へのアクセス
anim_bmp = bitmap view_size.x view_size.y filename:preview_name
この 2 つのユーザ変数を使用して、プレビューを格納するビットマップを定義することができます。ビットマップ コンストラクタの幅と高さのパラメータとしてビューポート サイズの x および y コンポーネントを指定し、ファイル名を既に定義したプレビュー パスに設定します。
for t = animationrange.start to animationrange.end do
(
for ループで、現在のアニメーション セグメント内のすべてのフレームを巡回します。変数 t には各フレームのフレーム番号が含まれます。 この値は、アニメーション範囲の開始値で始まり、終了値で終わります。
sliderTime = t
t 変数を使用して、タイム スライダをフレーム間で動かします。
dib = gw.getViewportDib()
各フレームで、ビューポートのビットマップ (デバイスに依存しないビットマップ、DIB) を一時変数内に捕捉します。
Device_Independent_Bitmap_access
copy dib anim_bmp
次に、dib 変数の内容 (ビューポートの内容を示すビットマップ) を、ここで作成したプレビュー ビットマップにコピーします。これで、新しいフレームが AVI プレビュー アニメーションに追加されます。
save anim_bmp
次のフレームで同じ操作を繰り返す前に、現在のビットマップの内容をディスクに保存します。
)--end t loop
close anim_bmp
gc()
すべてのフレームが格納されたら、アニメーション ファイルを閉じ、手動でガベージ コレクションを実行して、ビットマップのコピー中に使用されたメモリを確実に解放することができます。
3ds Max 5 では、メモリを解放するために gc light:true
を使用できます。
ramplayer preview_name ""
最後に、RAM プレイヤーを呼び出して、最初のパラメータとしてプレビュー アニメーションのパスを、2 番目のパラメータとして空の文字列を指定します。この 2 つのパラメータで、ロードする 2 つのファイルを RAM プレイヤーに指示します。空の文字列は存在していないアニメーションのためのプレース ホルダであり、ここではただ 1 つのファイルをプレビューします。
)
スクリプトを評価します。スクリプトを使用する場合は、[カスタマイズ...] (Customize...)を使用して、スクリプトを[HowTo]カテゴリからツールバー、メニュー、またはクアッド メニューにドラッグするか、キーボード ショートカットを割り当てることができます。
プレビューするビューポートを選択し、スクリプトを起動します。 結果がすばやく表示されるように、ドラッグしてビューポートを小さくすることができます。アニメーションが 1 回再生され、次に RAM プレイヤーによってプレビュー アニメーションが開かれます。
戻る