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

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

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

関連トピック:

Macro Script の定義

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

ビットマップ値

DIB (デバイスに依存しないビットマップ) メソッド

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 システム グローバル

sliderTime = t

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

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

dib = gw.getViewportDib()

各フレームで、ビューポートのビットマップ (デバイスに依存しないビットマップ、DIB) を一時変数内に捕捉します。

DIB (デバイスに依存しないビットマップ) メソッド

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 プレイヤーによってプレビュー アニメーションが開かれます。

戻る

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