チュートリアル - クイック プレビューの作成

以下の macroScript では、3ds Max のプレビュー アニメーション機能の高度に単純化されたバージョンを実装します。ビューポートのコンテンツに直接的にアクセスし、RAM プレイヤー内に自動的にロードされる AVI ファイルを作成します。

関連トピック:

macroScript の定義

アクティブ ビューポート情報、タイプ、および変換へのアクセス

ビットマップ値

Device_Independent_Bitmap_access

RAM プレイヤー

全体の流れ

ボタン、メニュー項目またはショートカットとして使用できる 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 に格納されます。

3ds Max システム ディレクトリ

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 には各フレームのフレーム番号が含まれます。 この値は、アニメーション範囲の開始値で始まり、終了値で終わります。

For ループ

animationRange_System_Global

sliderTime = t

t 変数を使用して、タイム スライダをフレーム間で動かします。

3ds Max システム グローバル

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 つのファイルをプレビューします。

RAM プレイヤー

)

スクリプトの使い方

スクリプトを評価します。スクリプトを使用する場合は、[カスタマイズ...] (Customize...)を使用して、スクリプトを[HowTo]カテゴリからツールバー、メニュー、またはクアッド メニューにドラッグするか、キーボード ショートカットを割り当てることができます。

プレビューするビューポートを選択し、スクリプトを起動します。 結果がすばやく表示されるように、ドラッグしてビューポートを小さくすることができます。アニメーションが 1 回再生され、次に RAM プレイヤーによってプレビュー アニメーションが開かれます。

戻る

「チュートリアル」のインデックス ページ