リファレンス / 3ds Max / MaxScript チートシート

シーン・レンダリング

  • 3dsMax
  • MaxScript
  • チートシート
MaxScript チートシート の章一覧

シーン全体の設定とレンダリング実行です。解像度などのグローバル設定は render() の既定値になりますが、ファイル出力は render() の outputfile: で指定 します。[レンダリング設定]ダイアログの設定どおりに実行したいときは max quick render を使います。

レンダリング設定(共通)

renderSceneDialog.close()    -- ダイアログが開いていると設定が反映されない
renderWidth  = 1920          -- 出力幅
renderHeight = 1080          -- 出力高さ
renderPixelAspect = 1.0      -- ピクセルアスペクト
rendTimeType = 1             -- 1=単一フレーム 2=アクティブ タイム セグメント 3=範囲指定 4=フレーム指定(rendPickupFrames = "1,3,5-12" とセットで使う)
rendStart = 0f               -- 範囲指定時の開始(0f = 0 フレーム目)
rendEnd   = 100f             -- 範囲指定時の終了

レンダリングを実行する

bmp = render()                               -- 現在設定でレンダリング。ビットマップ値を返し、レンダリング フレーム ウィンドウを開く
close bmp                                    -- 使い終わったら閉じる(開いたままだとメモリを保持し続ける)
render outputfile:"c:/out/frame.png" vfb:false   -- ファイル出力・レンダリング フレーム ウィンドウを開かない(バッチ向け)
cam = freeCamera pos:[0,-200,50]             -- カメラがあるとき(例: camera:$Camera001)
render camera:cam outputwidth:1920 outputheight:1080
render fromframe:0 toframe:100 outputfile:"c:/out/frame.png"   -- 連番出力
  • ⚠️ render() の引数は その回だけの上書き。恒久的に変えたいなら renderWidth 等のグローバルを設定します。
  • 連番出力時のファイル名は frame0000.png のように 自動で番号が付与 されます。
  • ⚠️ render() は [レンダリング設定]ダイアログの出力先(rendOutputFilename / rendSaveFile)を 見ません。ファイルとして保存するには outputfile: を使います。

出力先(レンダリング設定ダイアログ相当)

rendOutputFilename = "c:/out/frame.png"   -- 出力ファイルパス
rendSaveFile = true                        -- ファイル保存を有効化
  • これらは UI からのレンダリング(F9 / max quick render / バッチ レンダリング)に効く設定です。render() から保存するときは outputfile: を使います。

レンダラーを切り替える

renderers.current                          -- 現在のレンダラー(通常はプロダクション レンダラーと同じ)
renderers.current = Default_Scanline_Renderer()   -- 2022 の既定は Arnold。試しに軽いスキャンラインへ切り替える例
classof renderers.current                  -- レンダラーのクラスを確認

環境(背景・環境マップ)

backgroundColor = color 0 0 0              -- 背景色
environmentMap = bitmapTexture filename:"c:/hdr/sky.exr"
useEnvironmentMap = true                   -- 環境マップを有効化
ambientColor = color 30 30 30             -- 周囲光カラー

単位

units.SystemType = #centimeters            -- システム単位(シーンの内部スケール。既存シーンで変えると混乱の元)
units.DisplayType = #metric                -- 表示単位(見た目だけ)。#metric にしたら units.MetricType = #centimeters で表示単位を選ぶ

シーン情報

maxFilePath                                -- 現在のシーンのフォルダ(未保存なら "")
maxFileName                                -- シーンファイル名(未保存なら "")
sceneMaterials.count                       -- シーン内マテリアル数

よく使う形(ビューポートのプレビュー保存)

-- アクティブビューポートを画像として保存
redrawViews()                              -- キャプチャ前に確実に描画しておく
img = gw.getViewportDib()                  -- captureAlpha:true でアルファ付きも取得できる
img.filename = "c:/out/viewport.png"       -- 拡張子で保存形式が決まる
save img
close img                                  -- 出力ファイルは close が呼ばれるまで開いたまま

ビューポート操作 / ダイアログ設定どおりに実行する

viewport.activeViewport = 1                -- アクティブビューポートを切り替え
viewport.setCamera $Camera001              -- カメラがあるとき、そのビューに切り替え
max quick render                           -- [レンダリング設定]ダイアログの設定どおりに実行

落とし穴まとめ

  • render() の引数は一時的な上書き。恒久設定はグローバル変数で。
  • render() は [レンダリング設定]ダイアログの出力先(rendOutputFilename / rendSaveFile)を見ない。ファイル保存には outputfile: を使う。
  • 連番出力はファイル名に番号が自動付与される。
  • レンダラーごとに固有プロパティが異なる。showProperties renderers.current で確認する。
  • 環境マップは useEnvironmentMap = true にしないと反映されない。
  • [レンダリング設定]ダイアログが開いていると設定が保持されない。renderSceneDialog.close() を先に呼ぶ。
  • render() が返すビットマップは使い終わったら close する。

関連

← MaxScript チートシート へ