//# //#

2015/04/26

【Max】パーティクルペイントの不具合

Maxのパーティクルペイントが思ったようにいかず苦戦したので、対処法をメモ。

①ブラシの表示が崩れて、うまくパーティクルがペイント出来ない時


 

上記の画像ようにブラシでペイントしようとするとビューポートがバグる。
見た目だけでなく、ペイントも思うように出来ない。
ちなみにパーティクルペイントは正投影でないとペイントできません。

そんなときはビューポートをクリッピングして、表示範囲を狭めてやればおk。
手順は下記の画像の通り。



 ビューポート設定>ビジュアルスタイル外観>ビューポートのクリッピングにチェック



すると上記の画像上手にある三角形のものが出てきます。
これを掴んでビューポートの表示範囲を必要な箇所のみに設定します。



ブラシが先ほどのような変なガビガビのものではなく、キチンとした円になりました。
パーティクルもキチンと塗れます。


②パーティクルペイントがオブジェクトから外れてしまう時。



キチンと正投影でペイントできていると思って、ふとカメラを動かすとパーティクルがとんでもない場所に……。

そんなときは以下の方法で対処!



パーティクルペイントのレイアウトのリストしたオブジェクトをペイントにチェック
そしてパーティクルをペイントしたいオブジェクトをピックすればおk

他にも何か対処法があるとはありますが、自分は上記のように対処しました。
何か他にいい方法があれば教えていただけると助かります!

この辺のビューポート周りのバグ?はMaxではご愛嬌なんですかね……。


-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
使い方等は以下の記事をご参考に

■Zで行こう!  パーティクルシステムのお勉強 その20 3ds max 2010

■Autodesk オンラインヘルプ パーティクル ペイント


2015/03/07

【Maya】自作ツールrendLayerManager

案件によりますが、大量のレンダーレイヤがあるシーンに遭遇した時、
一々一つずつrenderableを切り替えるのが面倒だったので自作しました。

※ご使用は自己責任でお願い致します。


任意のscriptパスにいれて、【rendLayerManager】とMelで打ち込めば起動します。
簡単に使い方をご説明すると、

relode
レンダーレイヤの情報をリストに反映させます。新規でレンダーレイヤを追加、削除した際に実行してください。
sort select
ここに打ち込んだものをリストで選択します。正規表現も可能です。
list of renderLayer
シーンのレンダーレイヤのリストです。ダブルクリックするとカレントレイヤーが切り替わります。
on/off
上記のリストで選択したもののrenderableを切り替えます。リスト上で右クリックからもアクセス可能です。
all on/all off
すべてのレンダーレイヤのrenderableを切り替えます。masterLayerには影響しません。


※ご使用は自由ですが、著作権は放棄していないので二次配布等はご遠慮願います。
また何らかの損害等が発生しても責任はとれませんので、自己責任でお願いします。
バグ、要望等ありましたら、ご連絡よろしくお願いします。m(_ _)m

rendLayerManager.mel
https://www.dropbox.com/s/7aywcz80pociz7y/rendLayerManager.mel?dl=0


-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
参考サイト
チュートリアル / 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ
第37回:ポリゴン数をリストアップしよう!
http://area.autodesk.jp/column/tutorial/maya_atoz/listup_number_polygon_1/

2015/01/24

【Maya】Melメモ書き

最近知った便利な文字列周りのMel(コマンドじゃないです)をメモ代わりに。


stringArrayContains
文字配列に項目が含まれる場合は true を返します。 この配列には、複数の項目が含まれる場合もあります。 このプロシージャは、最初の項目が見つかった時点で true を返します。
string $arraySample[] = {"a","b","c"};   

if(stringArrayContains ("a",$arraySample) == 1){      //もし”a”が含まれるなら実行
print "ok";
}

stringArrayRemove
第 1 文字配列に属する文字列項目を、第 2 文字配列から除去します。戻り値は、除去した項目の新しい文字配列です。第 2 引数は変更されずに返されます。
文字配列から除去されるのは、指定された文字列項目の最初の出現だけではなく、全出現であることに注意してください。文字配列に文字列項目がない場合、返される文字配列は、引数文字配列と同じになります。
string $list[]  = { "a", "b", "c", "d", "b", "e", "f", "a", "g" };
string $items[] = { "a", "c", "e", "g" };

string $diff[] = stringArrayRemove($items, $list);          //$list - $items

// Result : { b, d, b, f } //

stringArrayCatenate
指定した 2 つの文字配列を連結する結果となる、新しい文字配列を返します。
string $string1[] = {"light1", "light2"};
string $string2[] = {"light3","light4","light5"};

stringArrayCatenate($string1, $string2);       //$string1 + $string2

 // Result: light1 light2 light3 light4 light5 //

stringArrayToString
substituteAllString
stituteAllString
上から順に文字配列を文字列に指定の文字列(,)をいれて文字列へ変換。
いわゆるメモ帳の検索&置換。
文字列を指定の文字列(,)を区切りで文字配列へ変換。
For文とかでやってもいい気もするし、もっとスマートな方法がある気がする……。
string $old_Array[] = {"old_red","old_blue","old_green"};
string $searchStr = "old_";                                       //検索する文字列
string $replaceStr = "new_";                                    //置き換える文字列

string $toStr = stringArrayToString($old_Array , "," );          //文字配列から文字列へ
string $new_Str = substituteAllString($toStr,$searchStr,$replaceStr);   //文字列の置換
string $new_Array[] = stringToStringArray($new_Str , "," );          //文字列から配列へ

print $new_Array;

コマンドリファレンス(Helpメニュからも行けます)
■Mel
http://download.autodesk.com/global/docs/maya2014/ja_jp/Commands/index.html
■python
http://download.autodesk.com/global/docs/maya2014/ja_jp/CommandsPython/index.html


-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
参考サイト
http://download.autodesk.com/global/docs/maya2014/ja_jp/Commands/stringArrayContains.html
http://download.autodesk.com/global/docs/maya2014/ja_jp/Commands/stringArrayRemove.html
http://download.autodesk.com/global/docs/maya2014/ja_jp/Commands/stringArrayCatenate.html
http://download.autodesk.com/global/docs/maya2014/ja_jp/Commands/stringArrayToString.html
http://download.autodesk.com/global/docs/maya2014/ja_jp/Commands/substituteAllString.html
http://download.autodesk.com/global/docs/maya2014/ja_jp/Commands/stringToStringArray.html

2014/11/24

【Maya】フリープラグインSOUP

フリープラグインのSOUP(スップ?スープ?ソップ?ソー○?)というのがあります。
フリープラグインにしては機能も充実しており、チュートリアルや情報も結構あります。
(ボーンさんのサポートページにいくつか情報がありますね)

ダウンロードは以下のリンクから
http://www.soup-dev.com/tools.htm

※Maya2013だと古いバージョン、Maya2013Exからだと最新のものが使えます。
使えるノードの数やattributeが違っていたりします。
バージョンの互換性はありますが、最新のバージョンにしかないノード、attributeは
古いバージョンで開くと認識されません。


とりあえずどんなことが出来るのかというと適当にペタリ




他にもFluidのシミュレーションの形状をあまり変えることなく、解像度をあげるノードや
Particleの情報をわたしてくれるノードなど様々なものがあります。
Houdiniほど深くノードなかに入ったり、コネクションが柔軟ではないですが、
なかなか使いやすくて、軽いのでオススメです。何よりフリー(無料)です!!

Soupは基本的に単体で使用するというよりは用意された、たくさんのSoupノードをMaya標準のノードと組み合わせてノードを繋げていって様々なことシンプルに行えるプラグインです。
Soupを使わなくてもExpressionやMel、標準機能で実現できることも多いですが、
煩わしい長いスクリプトはほぼ書く必要もなく、簡単で動作も軽いのでとても便利です。

他の事例は公式サイトのサンプルを見てみて下さい。
http://www.soup-dev.com/examples2_1.htm


あと自分の簡単な作例をペタリ。





上記の画像は参照元の板ポリからコーンのポリゴンを生やすposition,normal,tangentを
mesh2Arrayノードで各Vertexから取り出し、その情報をcopierを使って、Instancerに渡しています。
positionだけでなく、normalとtangentをaim,upにつないでいるので、しっかりポリゴンの面に沿ってくれます。(今回の場合はNormalだけでもいいですが、参照元の板ポリの接線方向(今回の場合RotateY)を制御したい場合は必要です。)
※Copier,mesh2Array共に古いバージョンにはありません。

もちろん参照元のMeshの位置が変わってもそれについていってくれますし、数にもよりますが動作も軽くて、
差し替えも楽でバグることも基本ないです。
また、pointノード等をつかってIDを出力すれば、指定したObjのランダム配置や、
Group等つかって指定した範囲内のみスケールをかけることも結構簡単に出来ます。
コピーして配置したものをポリゴンメッシュとして扱いたい場合は、
CopierにコピーしたいObjを読み込ませて、そのままCopierを別のポリゴンのShapeノードにさしてやればOKです。(Historyを消してしまうとCopierも一緒に消えてベイクされてしまうのでポリゴンは重くなります。)

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
他の事例や詳しいやり方は公式サイトやMayaWiki、各ブログサイトに詳しくのっているので是非見てみて下さい。

■公式サイト

■MayaWiki

■雑記とことこ MAYA SOuP インストール

2014/09/21

【Maya】defaultRenderLayer1のバグ

通常デフォルトのレンダーレイヤーは【masterLayer】という名前になっていますが、
何故かここが【defaultRenderLayer1】なる名前になっている上に、名前が変更できず、サーバーに投げるとエラーでレンダリングが回らない……。

そんなとき以下のようにすれば治ります。

①.ma形式で保存。
②テクストエディタで上記のファイルを開く。
③以下の部分を置換する。

変更前
connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer1.rlid";
変更後
connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid";

④保存して完了。シーン開いてmasterLayerに名前が治っていれば成功です。


まぁ、アニメーションを書きだすなり、alembic、Gcache使って組み直せば良い話ですが……。
ちなみにデフォーマはDeformerSetsを使ってアサインし直せます。(ウエイトかかってたら更に面倒だけど)

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
参考サイト
Batch Render unable to modify overrides to the default layer maya?
https://animationrigs.zendesk.com/entries/22322051-Batch-Render-unable-to-modify-overrides-to-the-default-layer-maya-

2014/08/24

【Maya】VrayでShadowのみをレンダリングする。

VrayDomeLightなど使っているとUseBackGraundがうまく機能してくれないことがあるので、
下記の方法を使えば影のみレンダリングすることが可能です。



Creat>Vray>Object properties>Apply single object properties node to selectionを選択。
Apply multiple~の場合選択しているObjそれぞれ1つずつにObject propertieが設定されます。
Apply single~の場合選択しているObjすべてに一つのObject propertieが設定されます。

Maxをつかったことがある人ならすぐわかると思いますが、MayaでいうRenderStatsのようなもので、要素のON/OFFやIDの設定も出来ます。



設定は上記の画像のようにMatteSurfaceをONにし、AlphaContributionを-1にします。

AlphaContributionが1の場合、通常通りアルファが出力されます。
0の場合、アルファが出力されません。
-1の場合、設定したObjのアルファで他のアルファがくり抜かれます。※BlackHoleを使ったときのような感じです。

ShadowとAffect AlphaをONにすれば、あとは他のObjのPrimary VisibiltyをOffなどすれば完了です。


地味にVray触りたてのとき自分も周りもこの方法知らなくて、困った時があったなー……。


2014/06/29

【Maya】heightFieldをつかってdisplacementをプレビューする。

Maya2015になってOpenSubdivが搭載されdisplacementをプレビューすることが可能になったらしいですが(私は何故か上手く行かず……)、それ以前のバージョンでも、縛りはありますがプレビューすることができます。

CreateNodeのUtilities>heightFieldでノードを作成。
後はheightFieldノードのdisplacementにプレビューしたいものをつなげるだけ。

heightFieldのパラメーター

heightFieldのいいところはかなり軽いということです。Resolutionを800くらいにあげても結構さくさく動いてくれます。
※ただしOceanシェーダーは重い……。

heightFieldはレンダリングが出来ない、形状は板のみという縛りと、
2DテクスチャとOceanシェーダーのOutAlphaのみしかDisplacementにさせません。
なので、なにか他のノードをかまして調整したものを使いたい場合などは注意。

必要に応じてHeightScaleを調整して、レンダリングするものに結果を合わせた後、
テクスチャのAlpha Gainを調整していくのがいいかもしれません。

heightFieldのテスト

Oceanシェーダーは重いのでSoupのpeakとか使ってOceanテクスチャをさしてやった方がレンダリングも出来ますし、
いいのかもしれませんね。

参考サイト
Mayaオンラインヘルプ 高さフィールド(Height Field)

雑記とことこ MAYA SOuP textureToArray_peak