Design Automation API for 3ds Max:MAXScript と 3ds Max Batch の続きです。Design Automation API でコアエンジンにアドイン/プラグインに自動処理をさせる際、多くの Forge アプリが、指定したパラメータによって処理内容を変化させています。Forge アプリはフロント エンドとして Web ページを持っているので、パラメータ渡しに Web で親和性に高い JSON が利用されるのが一般的です。
Web ページから得たパラメータは、Design Automation API の WorkItem 起動時に JSON データとして渡すことで、Activity で定義したファイル名で WorkItem の作業領域に保存されます。
コアエンジンにロードして実行されるアドイン/プラグインは、作業領域の JSON ファイルを読み込んで処理に反映すればいいわけです。
Design Automation API for 3ds Max で MAXScript を実行させる場合、MAXScript が JSON ファイルにアクセスする機能は提供されていないため、この部分がネックになります。幸い、MAXScript は .NET との親和性も持ち合わせているので、.NET から機能を流用することが出来ます。
Forge の学習リソースである Learn Forge では、Design Automation API for 3ds Max 用に .NET プラグイン アプリを用いる方法をご紹介しています。このプラグインでは、JSON ファイルの読み込みに Newtonsoft.Json を使用しています。
MAXScript でも Newtonsoft.Json を使った JSON ファイル読み込みの方法が議論されています。ローカル環境の 3ds Max インストール フォルダに Newtonsoft.Json.dll が配置されていれば、この方法を参考に、次のような MAXScript で JSON ファイルの内容をスクリプトに反映させることが出来ます。
/* Newtonsoft.Json アセンブリ読み込み */json = dotNet.loadAssembly "Newtonsoft.Json.dll"/* JSON 読み込み関数参照:https://forums.cgsociety.org/t/json-and-maxscript/1552038/11*/fn getJsonFileAsString filePath=(local jsonString = ""fs=openFile filePathwhile not eof fs do(jsonString += readchar fs)close fsreturn jsonString)/* シーンリセット & DWG 読み込み */resetMaxFile #nopromptimportFile "C:/<your path>/Table Fan.dwg" #noprompt/* JSON 読み込み */paramsFilePath="C:/<your path>/params.json"jsonString = getJsonFileAsString paramsFilePathmyJObject = dotNetObject "Newtonsoft.Json.Linq.JObject"myJObject = myJObject.parse jsonString/* パラメータ取得 */global col = myJObject.item["color"].value as integerglobal leaf = myJObject.item["leaf"].value as booleanClass/* ColorX 画層オフ */global layfor i = 1 to 6 do(if col != i then (lay = LayerManager.getLayerFromName ( "Color" + i as string )lay.on = false))/* Leaf 画層オン/オフ */lay = LayerManager.getLayerFromName ( "Leaf" )lay.on = leaf/* 既定パース ビューポート */viewport.activeviewport = 4viewport.SetRenderLevel #smoothhighlightsviewport.setLayout #layout_4/* ART レンダラー設定 */global art = ART_Renderer()art.quality_db = 20art.render_method = 1art.anti_aliasing_filter_diameter = 2.0art.enable_noise_filter = trueart.noise_filter_strength = 1renderers.current = art/* レンダリング & 生成画像保存 */undisplay ( render outputfile:"C:/<your path>/result.jpg" )
- 前回のブログ記事 Design Automation API for 3ds MAX:MAXScript と 3ds Max Batch のスクリプトを拡張して、卓上扇風機モデルの「羽根」の色と「葉っぱ」の有無をレンダリング画像に反映するものです。前提とする JSON ファイルはこのような内容です。
{"color": 5,"quantity": 1,"leaf": false
}
もちろん、上記スクリプトを 3ds Max Batch でレンダリング処理を実行することも出来ます。
生成されるレンダリング画像は、先のパラメータ JSON の内容(「羽根」の色を青 - 色番号 5、「葉っぱ」無し)の状態を反映して、次のようになります。
By Toshiaki Isezaki
コメント
コメントフィードを購読すればディスカッションを追いかけることができます。