2008/11/26

Multi/Sub-Object Material Script

Maxで、一つのオブジェクトに複数のマテリアルを割り当てる場合、
フェースごとにIDを割り振って、マテリアルを当てる必要があります。

このときに使用するのがMulti/Sub-Objectというマテリアル。
しかし、こいつがなかなか使いづらい。

使用していないマテリアルの削除や、IDの整理ができなかったり、
複数オブジェクトのマテリアルを一つにしたい場合に、IDを振り直さなければならないなど、
なかなか手でやるにはめんどくさいことがあります。

私自身もVrayMeshを使う際、IDの振り直しをしてマテリアルを1つにする、ということをやってて、
常々めんどくさいな、と思っていました。
そこでスクリプトでやってみようと思い、勉強がてら組んでみました。

スクリプトはコチラ


機能

・複数オブジェクトのマテリアルを一つのマルチサブマテリアルにする
・インスタンスマテリアルの整理
・使用していないマテリアルの削除
・使用していないID、重複するIDの整理


使用法

まず、一つのマテリアルにしたいオブジェクトを選択。
WS000081.jpg



WS000082.jpg
現在、赤、青、緑、白、グレーの5種類のマテリアルが使われています。同色はインスタンスされたもので、
マテリアルエディターにはオブジェクトごとに4つのマテリアルが作成されています。
参考に一番右のマルチサブに使用しない黒いマテリアルを入れておきました。

空いているスロットをアクティブスロットに設定し、スクリプトを実行。
WS000083.jpg
すると、アクティブスロットにまとめられたマテリアルが作成され、オブジェクトに割り当てられます。
インスタンスも一つにまとめられ、不要なマテリアルは削除されます。

WS000084.jpg
IDも自動で割り振られます。



現在の欠点

・EditableMeshに変換される
・スプライン等には適応されない
・モディファイアがスタックされる
・閉じたグループは無視される
・オブジェクトのインスタンスが解除される







つくってみれば案外簡単な構造でした。
まず、全部のフェースのID、マテリアルを取得し、その配列を整理、
整理したものをもとにIDを変更、マテリアルを作成し、割り当てています。

100万ポリ程度でも遅いですが動くと思います。
もっと多いとメモリ不足で落ちるかもしれません。

まだ、荒削りですのでバグが出るかもしれません。使う際は自己責任でお願いします。

2008/11/19

MaxScript Toggle MEMO

Maxスクリプトで切り替えをやるときの記述。忘れないうちにメモ。


macroscript PV_PickPaintToggle category:"VertexPaint"

(
  global VPset

 if VPset == 1 then
 (
  (macros.run "VertexPaint" "VertexPaint_PaintMode")
  VPset = 0
 )
 else
 (
  (macros.run "VertexPaint" "VertexPaint_PickMode")
  VPset = 1
 )
)



この例文はVertexPaintでのピッカーとペイントの切り替えを行うスクリプト。
uid000012_20081118171231141928bf.gif
ショートカットに登録すれば楽にペイント、スポイトを切り替えれる。


こういう切り替え系のスクリプトはちょっとした作業のときにあると便利だったりする。
例えば、オブジェクトの表示非表示、フロントピュー、バックビューの切り替え...などなど。

基本的な構造は同じなのでコピペでいろいろ作れると思う。
今回妙なとこでつまずいたのでメモしとく。

まず、

macroscript PV_PickPaintToggle category:"VertexPaint"


で、スクリプトの名前、カテゴリを決定しておく。
これが無いと、Run Scripts...でしか実行できない。
ショートカット等に登録するにはこの記述は必要。

次に、変数指定。

global VPset


変数指定って聞くと何だそれ?と疑問に思っていましたが、結構重要。
ここで、VPsetは変数ですよって宣言しないと、どうやら初期起動などで認識しない。

はじめ、この変数指定をやっていなかったせいか、
Maxを起動後実行しても、結果がよろしくないということが起こりました。
MaxScript Editor上で一度実行すれば正常に動作するのですが、Maxを再起動すると駄目でした。


最後にif文。

if VPset == 1 then
(
 (macros.run "VertexPaint" "VertexPaint_PaintMode")
 VPset = 0
)
else
(
 (macros.run "VertexPaint" "VertexPaint_PickMode")
 VPset = 1
)


ここで条件分岐させ、
VPsetが1のときはAを実行し、VPsetに0を代入。
VPsetが0のときはBを実行し、VPsetに1を代入させます。
こうすることで実行するたびにAとBが交互に入れ替わるようになる。

また、Case of~文にすれば、3段階~の切り替えもできるようになります。


case VPset of
(
 1:print A
  VPset = 2
 2:print B
  VPset = 3
 3:print C
  VPset = 1
 default:print A
      VPset =2
)


というように、順繰りになるように変数に代入してやればいい。
defaultは初期起動時になにも代入されていない時に使います。

2008/11/12

MXSky for Maxwell Render

MaxwellRenderにまた新しい素材サイトが立ち上がっている。
MXSkyという空の素材サイトでフィジカルスカイの設定やHDRをダウンロードできる。
20081111.jpg



MXM GalleryTHINK!が充実しているだけに今後の発展に期待したい。
特に、HDR素材はタダで入手することが困難だったり、
なかなか良質な(建物が映ってなく、純粋な雲だけ)HDRを探すのが大変なだけに、
よい素材サイトになるのでは。

また、自らアップロードすることも可能。

Maxwellのメンバーであればタダで入手でき、
HDRデータはHDRとして他のソフトでも使うことができる。


今後もスタジオセットシーンだとか、屋外スタジオだとかの素材サイトもあっていいのでは?とか思ってたり。最終的にモデル配布までいけば、パソコン上のスタジオが完成ですね。
そうなると、照明、カメラの技術を勉強する必要がありそうです。

2008/11/10

Maya for Backburner MEMO

結構Mayaのネットレンダーは面倒くさい。
Maxみたいに便利なBackburnerがありません。

さて、今回はその便利なBackburnerをMayaで使っちゃおうというところから。

まずはこちら
http://gofar2.iobb.net/~htaka/wordpress/archives/1705

スクリプトについてはこちらのサイトで詳しく説明されているので省略します。

今回はこのスクリプトを使ってVrayでネットワークレンダリング。
まず、普通に入れてレンダリングするだけではVrayは使用されません。


スクリプトのExtra Render optionsにVrayを使いますよって宣言しなくてはいけません。
WS000075.jpg
青線部分に、
-renderer vray と記入。
デフォルトでは記入されていません。

他の設定は本家から。
あとはSubmitでジョブが振られます。
monitorで確認すると、test.mbとかいうジョブが回ってます。

簡単ですね。あとは普通にサーバーを立てておけば勝手にレンダリングしてくれます。



また、このスクリプトを少し書き換えれば、常にVrayを使うことも可能です。
例えば、34行めの

string $extraRenderOptions = "";



string $extraRenderOptions = "-renderer vray";


に書き換えておけば、常に-renderer vrayが書き込まれた状態で起動するようになります。

他の項目についても同じです。
毎回同じパスを設定するのは面倒くさいですからね。



しかし、Maxのライセンスがなくても、BackburnerがMayaで使えてしまう、
これってBackburnerをタダ利用してることになるんでしょうか?
いまいち使用していいのか判断に迷いますね。

Vray for Maya DistributeRendering MEMO

最近、MayaのVrayについていろいろと検証していました。
忘れないうちにメモ。


Vray for Maya でディストリビュートレンダリングを行う方法

サーバー側の設定
まず、サーバーにしたいマシンにMaya、Vray、レンダリングに使うプラグイン等をインストール。
Maya等のライセンスは通す必要はない。
そこまでできたら、ネットワークに接続、サーバーが参照できれば問題ないと思う。


そこまで準備ができれば、バッチファイルを作成。
まず、メモ帳から以下のような命令文を入力。

CD C:\Program Files\Autodesk\Maya2008\vray\bin
vray.exe
vray -server -distributed=1



CD ~ でVrayがインストールされている場所の記入
デフォルトならこのままでいけると思う。

vray.exeでまず、Vray側のサーバーアプリを起動。

vray -server -distributed=1 はサーバーに対する命令文。
-serverでサーバーに設定しますよ、
-distributed=1でディストリビュートをオンにしますよという意味。=0にすればオフにできる。


記入したら、メモ帳を保存。
保存したファイルの拡張子を.batに変更し、バッチファイルにする。

あとはそのファイルを実行すればサーバーとして立ち上がってくれる。
終了するときはCtrl+Cで終了。
バッチジョブを終了しますか?と聞かれたらYを押しエンターキー。


レンダリングする側の設定
WS000074.jpg
Vrayのレンダー設定で、
画像のようにUse distributed renderingにチェック。
settings...から、サーバーの名前、もしくはIPアドレスをAdd serverで追加していく。
右側のEnableで有効にするかどうかを設定。Disableになっていると使用されない。

あとは、レンダリングして確認。
VrayFrameBufferをつかうと確認しやすい。



Maxに比べ、設定を手打ちしなくてはいけないのは面倒ですがいろいろと設定できるようです。
V-Ray standalone command promptを普通に立ち上げればコマンドも確認できる。
バッチも自分で変更できるのでいろいろ自分仕様にできるかもしれません。

これは体感ですが、Maxのディストリビュートに比べ、
Mayaのディストリビュートの方が初期起動が早い。機敏に反応してくれます。

それではこの辺で。
次回はネットワークレンダリングに付いて書いてみます。


追記: 2010/3

製品版ではRenderSlaveが追加されているのでバッチを書く方法よりもそっちを使うほうがよいかと思われます。