//# //#

2018/04/15

【Maya】versionUP保存

MayaにはAEやNukeのように現在のファイル名の数字をあげて保存という機能が用意されていません。
(test_v01_01→test_v01_02みたいな)
前に作ったはずなのですがどこかに消えてしまい、
良さそうなサンプルもあったのでPythonで作ってみました。

import os,re
from maya import cmds,OpenMaya

def iterativeSave(filename):
 sPN = os.path.split(filename)
 oldnum = re.findall(r'[0-9]+', sPN[1]).pop()
 pad = len(oldnum)
 num = str(int(oldnum)+1).zfill(pad)
 name,ext = os.path.splitext(sPN[1])
 name = name.rsplit('_',1)
 newNum = name[-1].replace(oldnum,num)
 NewFullPath = sPN[0] + '/' + name[0] + '_' +newNum + ext

 return NewFullPath

def main():
 filename = cmds.file(query=True,sceneName=True)
 if not filename:
  OpenMaya.MGlobal.displayError('ファイルが保存されていません')
  return
 newfilename = iterativeSave(filename)
 cmds.file(rename=newfilename)
 cmds.file(f=True, save=True)
 OpenMaya.MGlobal.displayInfo('//Result: '+newfilename)

main()

上記のコードをホットキーエディタにアサインすれば完了です。
ファイル名を _ で区切り、一番最後の数字のみ一つ上がる仕組みです。
その際「v01」など文字が含まれていても数字のみ変更されます。
最後にイニシャル付ける方などはちょっと書き換えが必要です。

ではではバグ、要望等ありましたら、ご連絡よろしくお願いします。m(_ _)m

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
参考サイト
https://sdm.scad.edu/faculty/mkesson/vsfx705/wip/best/spring12/nestor_prado/scripts_iterativesave.html

2016/12/23

【Max】別名保存の初期ディレクトリを開いているMaxのディレクトリにする。

この前の記事のMax版です。

以下のScriptをMaxScriptエディタなどにコピペして「Ctrl+E」で実行
macroScript saveAsMax category:"tm_tool" 
tooltip:"saveAsMax"
(
maxfile = maxFilePath + maxFileName
try (
 savename = getMAXSaveFileName filename:maxfile ()
 saveMaxFile savename 
 )
catch()

)

「カスタマイズ」→「ユーザーインターフェースをカスタマイズ」で、
カテゴリを「tm_tool」にして「saveAsMax」のホットキーを設定して完了。


デフォだと何故か「Shift+Ctrl+s」の割り当てないのでそれを割り当てるのが、
丁度いいじゃないでしょうか。
ちなみに同名のファイルがあっても警告なしで上書きします。
正確には現在のシーンと同名のときのみ出るみたいです。

※161230追記
下記のものを使えば現在のシーンと同名でも警告が出ます。
macroScript saveAsMax category:"tm_tool" 
tooltip:"saveAsMax"
(
local saveFilePath 
local maxfile = maxFilePath + maxFileName
do
(
 saveFilePath = getMAXSaveFileName filename:maxfile ()
 if (saveFilePath != undefined) do
 (
   if (not (doesfileexist saveFilePath)) or
   saveFilePath != maxfile or
   querybox ( saveFilePath + "\nは現在のシーンファイルです。\n上書きしますか?") title:"名前をつけて保存" then
   (
    saveMaxFile saveFilePath
    exit 
   )
 )
)
while (saveFilePath != undefined)
)


既に以前のものを登録した方でもmacroの記述を変えてなければ、上記のものを実行すれば更新されます。

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
参考サイト
http://help.autodesk.com/view/3DSMAX/2016/JPN/?guid=__files_GUID_624D3D05_B15D_4A97_9F15_DA35CDB0DDD2_htm

2016/10/10

【Max】PFを別シーンにもっていく




上記の画像のようなMaxのPFを別シーンにもっていきたいとします。









PFを普通に[名前をつけて保存]>[選択を保存]して、別シーンにて合成しても、
上記の画像のようにコネクションがはずれてうまくいきません。(アクション修復って何……?)









そんなときはパーティクルビューで別保存したいPFツリーをすべて選択して、
[選択]>[選択を保存]でMaxFileで保存します。










あとはいつも通り先程保存したMaxファイルを合成で読み込みます。
するとあら不思議、普通にコネクション込み、エミッタのObj、インスタンスのObjもきてくれます。
また追加で読み込んでもまとめて名前変更すれば問題なくきてくれます。









ただ、PFのエミッタやインスタンスのObjが外部参照だったりするとコネクションはきてくれますが、
Objは削除された状態で読み込まれます。



気づきづらい場所にあるせいで、知らなかった方も結構ちらほら。(自分もですが……^^;)
PFを別シーンにもっていくときイライラしていた方は是非お試しを!

2016/07/09

【Max】Vrayのクアッドメニューが消えたとき

①普通にカスタマイズから追加する方法。


「ユーザーインターフェースをカスタマイズ...」から
クアッドメニュータブに



カテゴリをVrayに変更
名前が変わってて微妙にわかりづらいですが、よく使う2つで
V-Ray properties→Displays the Vray objects or light propaties
V-Ray VFB→Displays the last rendered V-ray VFB, if is exists
上の2つを規定値のビューポートクアッドメニューの「コンテキスト変換」の下にドラッグ

インストール時の状態に戻したければ、上の画像の通りすれば元通り。


②設定ファイルに書き込む


Maxをおとしてから、
使用しているMaxのバージョン、言語のUI設定のファイルをメモ帳などのテキストエディタで開く
例えばMax2015の日本語の場合
C:\Users\%USERPROFILE%\AppData\Local\Autodesk\3dsMax\2015 - 64bit\JPN\ja-JP\UI\Workspaces\usersave\
Workspace1__usersave__.mnux
<Item mode="2" modeName="AM_ITEM" actionTableID="647394" actionID="LaunchDopeSheetEditor`Track View" customTitle="ドープ シート..." />
<Item mode="2" modeName="AM_ITEM" actionTableID="647394" actionID="paramWire`Parameter Wire" />
<Item mode="1" modeName="AM_SEPARATOR" />
<Item mode="4" modeName="AM_SUBMENU" subMenuID="12" flat="0" customTitle="変換:" />

//上の文の下に下記の様にいくつか書き込む

<Item mode="2" modeName="AM_ITEM" actionTableID="647394" actionID="LaunchDopeSheetEditor`Track View" customTitle="ドープ シート..." />
<Item mode="2" modeName="AM_ITEM" actionTableID="647394" actionID="paramWire`Parameter Wire" />
<Item mode="1" modeName="AM_SEPARATOR" />
<Item mode="4" modeName="AM_SUBMENU" subMenuID="12" flat="0" customTitle="変換:" />
<Item mode="2" modeName="AM_ITEM" actionTableID="647394" actionID="VRayProperties`VRay" />
<Item mode="2" modeName="AM_ITEM" actionTableID="647394" actionID="VRayShowVFB`VRay" />
<Item mode="2" modeName="AM_ITEM" actionTableID="647394" actionID="VRaySceneConverter`VRay" />
<Item mode="2" modeName="AM_ITEM" actionTableID="647394" actionID="VRayBitmap2VRayHDRITexmapConverter`VRay" />
<Item mode="2" modeName="AM_ITEM" actionTableID="647394" actionID="vrayMeshExport`VRay" />
<Item mode="2" modeName="AM_ITEM" actionTableID="647394" actionID="vrsceneExport`VRay" />


 ファイルを開いたら「ドープ シート」を検索するなどして 上記の部分を見つけて
(人によるとおもいますが自分は180行らへんでした) 
上記のようにいくつか書き込んで、Maxを起動すれば完了。

2016/03/27

【Max】Maya使いの私が愛用しているMaxツール

別のソフト使うと必ずあれがない、これがないといった問題が起こると思うのですが、
私もMaya→Maxを使う上で、え!この機能ないの!?出来ないの!?
となった時何かフリーのツールでないかなーと探して、巡りあったツールをご紹介します。



①Outliner

MayaのOutlinerみたいなツールです。最近のMaxではシーンエクスプローラが強化されて、
別にこっちを使わないでもいい気もしますが、なんだかんだで慣れてしまったのこっちを使っていますw



Outliner scriptspot
http://www.scriptspot.com/3ds-max/scripts/outliner

※16/07/09 追記
Max2015にてシーンエクスプローラとうまく同期してないときがあるので、
使わなくなりました。
シーンエクスプローラにも慣れてきましたし……。

②Prism(旧 LPM2.0)

Mayaのレンダーレイヤーのような機能のツールです。
レンダリングするObjの指定はもちろん、Obj、レイヤープロパティ、Vrayプロパティ、別マテリアルのアサイン、レンダラーの切り替え、エレメントの切り替えなどなど大抵やりたいことが出来ます。
ネットワークレンダリングするときも、Jobを投げた時に変換して投げるのでレンダーサーバーに別途インストールする必要はありません。

ダミーに各Objとかの情報(MayaでいうとここにOverRide情報が入る感じ)を入れて管理するシンプルな感じなので、シーンファイルが壊れることはないです。
ただ、オブジェクトの数が多いともっさりしたり、たまにバグったり、動作が怪しいこともありますが、
それはまぁMayaも一緒ですし……w



使い方をざっくり説明すると、まずPrismを起動したらUIのSettingからデフォの設定をします。
基本的にはいじらなくてもいいですが、
NetworkTypeに使っているディスパッチャーを設定(Backburner, Deadline,enFuzion)します。
ここをMaxFileにするとPrismで設定した各Passを反映したMaxFileを書き出せます。
また、pass default hide modeはHide All Objects/Lightに設定しておくことをおすすめします。
ちなみにここの設定はMaxシーンデータではなく、Maxのプリファレンスに設定が記録されます。

あとはポチポチやって各Passを設定して、ObjSetにObjかレイヤーを設定、
Networkボタンを押すとスクリプトのUIが起動してレンダリングをまとめて書き出せます。

ここでHide Pass modeを何にしてるかで挙動が変わるのですが、Hide Allにしてるとシーン内すべてのObj、Lightをオフってから、Pass内の設定を反映してレンダリングされます。
上記の画像の例だと、
カメラのc001はmasterとshadow,c002はmasterのみ、
master pass…他にObjがあっても、シーンにはふなっしーとくまモンとライトのみでレンダー
shadow pass…上記と違ってObjプロパティとVrayプロパティを設定、地面の影のみアルファ付きで書きだされます。

また、Passの設定を書き出して、別のシーンで流用なんてことも可能です。

Backburnerを使用していて、マネージャーに接続しようするとMaxごと落ちる場合は、サーバーグループが悪さしている可能性があります。
スクリプト内のサーバーグループを呼んでいる箇所をコメントアウトするなりする必要があります
ちなみにこの問題はこのツールではなく、MaxScriptの問題くさいです。

Prism
http://www.grovergol.com/?page_id=338

ちょっとわかりづらい場所にありますがHelpはここです。右の項目で各機能の説明が見れます。
http://www.grovergol.com/?page_id=481




③imageplane

Mayaでいうimageplane。通常だとビューポートに貼っつけることしか出来ないので、シーンのObjの手前に半透明で表示したいときとかに便利です。
ただ、普通に板ポリをカメラの画角に合わせて配置しているだけなので、一々マテリアル作ってアサインしないとダメです。
このツールをインストールしていないマシンでimageplaneを作成したシーンを開くと当然エラーが出ますが、
当方の環境では特にレンダーサーバーには影響出ませんでした。















インストール方法はスクリプトを以下の場所とかに配置
C:\Program Files\Autodesk\<Max version>\scripts\Startup
Maxを再起動すると標準オブジェクトに【MB Objects】→【imageplane】が追加されます。

使い方は簡単で、
imageplaneを貼りたいカメラをピック
テクスチャをはったマテリアルをアサイン
カメラからの距離を調整して完了。
あとは少しだけですがオプションの機能がいくつかあります。

カメラをピックした後にカメラのレンズを変更した時は、DistanceかOffsetなどを適当に少し触ればきちんと変更した画角に合います。

scripts.breidt.net
http://scripts.breidt.net/#imagePlane

2015/12/06

【AE】別名保存の初期ディレクトリを開いているAepのディレクトリにする。

AEを使っているとき別名保存時にレンダーキュで設定したディレクトリとかが出てきたりして、ちょっと面倒なので自作しました。

saveProjectAs_fromAepPath.jsx
https://www.dropbox.com/s/c80nx0vv4fy7c0d/saveProjectAs_fromAepPath.jsx?dl=0
※AECS5.5,CS6のみ確認。
ご使用は自己責任でお願いします。また、バグ、要望等ありましたらご連絡くださいー。

また、このスクリプトをショートカットに設定すれば利便性が上がるかと。
ショートカットを変更するにはKeyEd Upを使うか、
ショートカットのテキストファイルを書き換える必要があります。
やり方については以下のサイトを参考にしてみてください。
http://cubelic3.jp/aftereffects_shortcut01/
https://helpx.adobe.com/jp/after-effects/using/modify-keyboard-shortcuts.html

ダウンロードした先ほどのファイルをAEがインストールされているディレクトリのScriptsフォルダの中にぶっこみます。
C:\Program Files\Adobe\(AEのバージョン)\Support Files\Scripts

中に入れたらそのファイルが名前順番で何番目にあるか覚えておきます。
その後先ほどの番号のRun Script(ExecuteScriptMenuItem)に設定すれば完了です。
自分の場合、静止画で書き出しと被ってましたがそんなに使わないので、Ctrl+Alt+sに上書きしました。
また、恥ずかしながら最近知ったのですが、
単純にバージョンアップ等番号を上げたい場合はデフォでCtrl+Alt+Shift+sで出来ます。(当たり前?^^;)

直接スクリプトのパスを指定して実行みたいなの出来ないものでしょうかね……?
何かありそうな気もするのですが……。

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
参考サイト

AfterEffectsの使い方|ショートカットキーのカスタマイズ
http://cubelic3.jp/aftereffects_shortcut01/

After Effects script Reference
http://aejsx.hiroshisaito.net/

After Effects CS6 Scripting Guide
http://blogs.adobe.com/aftereffects/files/2012/06/After-Effects-CS6-Scripting-Guide.pdf?file=2012/06/After-Effects-CS6-Scripting-Guide.pdf


2015/09/20

【Max】coolPickerにカラーセレクタを変更する

Maxの標準のカラーセレクタだと256段階ものしかなく、いまいち使いづらかったのでフリーのなんかないかと思ったらありました。


通常だと↑の画像みたいやつなのですが、
プラグインを入れると↓みたいな高機能なものに。


ただ、数値変換をしているだけなのでレンダーサーバーや、別のマシンにこのプラグインをいれてなくてもなんの問題もないのですが、
0-100で入力してもあくまで256段階の数値変換になるので、変換時小数点以下は切り捨てで表示されます。
例えば18と入力しても、17.6と変換され開きなおすと表示が17となってしまいます。
18といれたければ0-255で46と打てばOKです。
ちなみにレンダリングではバッチリ小数点も考慮されるのでレンダリングの画像には17.6が入ります。

浮動小数点型(0-1.0)はMax標準同様対応しているもののみ使えます。


インストールの仕方は以下の通り。

  ↓すでに開発は止まっていますが、有志の方が最新のMaxに対応しているものを公開しているのでダウンロード。 http://www.maxplugins.de/max2016.php?search=Coolpicker&sort=Author

ダウンロードしたものをプラグインのパスが通っている箇所に配置。
 例) C:\Program Files\Autodesk\3ds Max 20xx\plugins


Maxの基本設定のカラーセレクタを【CoolPicker】に変更すれば完了です。

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
参考サイト

CoolPicker Color Selector
http://area.autodesk.com/blogs/shane/coolpicker_color_selector

2015/07/20

【Max】MaxScriptメモ(その1)ファイル、パス周り

色々な言語が混じってよく分からなくなってきたのでメモ代わりに
ファイル、パスに関するコマンドをいくつか。


fileDir = maxFilePath --シーンファイルのディレクトリ取得
fileName = maxFileName --拡張子付きのファイル名取得
fileFullpath = fileDir + fileName --シーンファイルのフルパス取得
dirArray = filterString fileFullPath @"\" --パスを¥区切りで配列に変換


testFullPath = @"Z:\hoge\fuga.ext" --sample

getFilenamePath testFullPath --stringのディレクトリのみ取得
--//"Z:\hoge\"//
filenameFromPath testFullPath --stringのファイル名と拡張子を取得
--//"fuga.ext"//
getFilenameFile testFullPath --stringのファイル名のみ取得
--//"fuga"//
getFilenameType testFullPath --stringの拡張子のみ取得
--//".ext"//
doesFileExist testFullPath --ファイルの有無の確認


oRootPath = @"Z:\hoge\"
getDirectories (oRootPath + "*") --変数ディレクトリ以下のディレクトリ全てを配列で返す。
getFiles (oRootPath + "*") --変数ディレクトリ以下のファイル全てを配列で返す。


tempDir = oRootPath + @"_old"
makeDir tempDir --ディレクトリの作成
tempFile = filenameFromPath testFullPath
renameFile testFullPath (tempDir + @"\" +  tempFile) --ファイルの移動(パスのリネーム)


str = "move  " + oRootPath+ "aaa" +  " _old\\aaa" --Dosコマンド(ディレクトリをサブディレクトリ、ファイルごと移動)
hiddendoscommand str startpath:oRootPath exitCode:&exitcode --Dosを実行、実行場所をstartpathで指定、exitcodeでエラーを確認
exitcode --成功した場合0を返す。


-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

2015/05/30

【Max】シーンファイルがかなり重い

Maxのシーンファイルがファイルの構造の割に異様に重く、グラフエディタなども開くとフリーズする。
さらにObjをすべて消してみても重い、新規シーンに一部だけ合成しても重いなどの場合、
シーンファイルにリタイムというリタイムツール用のアニメーショントラックが異様にたまっている可能性があります。


本来キーフレームを細かくスケーリングしたりするものに使われているものですが、
使用しているObjを消してもリタイムは残り、合成で読み込むときも読み込んだものだけでなく、
リタイムももれなくすべてついてきます……orz
この機能を使っていない時でも何故かたまるときもあるそうです。

で、肝心の消し方ですが、以下のscriptを打ち込めばOKです。

RetimerMan.numRetimers  --リタイムトラックの数の取得

RetimerMan.BakeAndDeleteLocalRetimers() --リタイムをベイクして削除
--使用していないリタイムトラックの削除

nrt=RetimerMan.numRetimers
for i = 1 to nrt do
(
 j=nrt-i+1
 n=RetimerMan.GetNthRetimer j
 
 if n!=undefined then
 (
  if n.nummarkers==0 then
  (
   RetimerMan.DeleteRetimer j
  )
 )
)


scriptも配布されていますが、バージョンのせいか上手く動作してないものもあるみたいです。
↓以下のものはMax2014で動作確認しています。他にも色々機能がついていますが……。
Cleaner
http://www.scriptspot.com/3ds-max/scripts/cleaner


-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
参考サイト
Autodesk -Technical Q&A- 意図しないリタイムのトラック増加により、ファイルサイズが肥大化してしまう
http://tech.autodesk.jp/faq/faq/adsk_result_dd.asp?QA_ID=8404

MaxScriptヘルプ
http://docs.autodesk.com/3DSMAX/16/JPN/MAXScript-Help/index.html?url=files/GUID-199BB00E-5449-4BCB-A971-4F52553517ED.htm,topicNumber=d30e240940
http://help.autodesk.com/view/3DSMAX/2015/JPN/?guid=__files_GUID_CE344EBA_D3A9_4DC2_8196_BD933941FD0B_htm

Area Removing lots of Retimers in one go with MAXScript
http://area.autodesk.com/blogs/maxstation/n170-filebloat-removing-lots-of-empty-retimers

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


2014/05/30

【Nuke】6.xのtrackerノードを使う

Nukeが7.xになってからtrackerノードがリスト(?)みたいになり、これはこれでいいかもしれませんが、
個人的にはExpressionのリンクがはりづらかったりして使いづらいので旧trackerノードを使いたいときの方法。

【x】キーを押してcommandWindow(?)をだして、【Tracker3】と打ち込むだけ。※大文字と小文字重要。


ちなみに【Tracker4】は現在の
【Tracker1】はもっと前のバージョン(?)みたいなやけに縦に長いのが出てきます(笑)。






2014/05/27

【Nuke】Relighting tutorial

ネタ的には古いかもしれませんが、シーンファイル付きで説明が丁寧だったのでご紹介。
Normal、Worldpositionパスを使ってNuke上でRelightingします。
AeにもそんなPluginがあったような気も……。

  

Tutorial: Relight with nuke, 2/3. Rendering the AOVs with mental ray, v-ray, renderman and arnold - by Nacho Thomas from Nacho Thomas on Vimeo.

Tutorial: Relight with nuke, 3/3. Workflow inside nuke. - by Nacho Thomas.- from Nacho Thomas on Vimeo.


Nukeは標準で色々出来ていいですね!値段もAeの何倍もしますが。

Vray+Mayaの場合Worldpositionパスをそのまま出せないので、
VrayExtraTexにSamplerInfoのPointWorldをコネクションしてやる必要があります。
http://www.disopolis.com/wordpress/wp-content/uploads/2012/11/figure7.png

ちなみに環境マップ映りこみなんかも出来るみたいです。(DomeLightの映り込みと一致しませんでしたが……orz)
EnvRelight
http://www.nukepedia.com/gizmos/other/envrelight

Relighting その2
http://tiraoka.blogspot.jp/2010/06/relighting-2.html



2014/04/19

【Maya】sceneTimeWrapをベイクする

いつからかMayaにはscene上のすべてのアニメーションをタイムリマップをかけることが出来る機能があり、
標準機能ではベイク出来ないというクソ仕様で、以下のscriptを使えばベイクできるそうです。

http://www.toadstorm.com/blog/?p=206

使い方はダウンロードしたscriptをMayaバージョン直下のscriptフォルダなどに保存。
Maya起動後以下のscriptをPythonで実行します。

import hfBakeTimewarp as hfBT
hfBT.bakeTimeWarp(objects=['object1','object2'],start=1,end=10,killWarp=1)

objects=['object1','object2'],start=1,end=10 の部分を自分で書き換えて実行します。
['object1','object2'],にベイクしたいオブジェクト名を
start=1,end=10 にベイクしたいタイムレンジを入力して実行すれば、ベイクされます。

import hfBakeTimewarp as hfBT
objects = cmds.ls(sl=1)
start = cmds.playbackOptions(q=1,min=1)
end = cmds.playbackOptions(q=1,max=1)
hfBT.bakeTimeWarp(objects,start,end,killWarp=1)

リンク先のTESTと同様ですが上記のようにかくと、
選択したオブジェクトを現在のタイムスライダの範囲でベイクします。

ちなみにTransformノードしかベイク出来ないようなので、shapeノードなどのアニメーションをベイクしたい場合、ロケータなどに数値を移動させてベイクする必要があります。


参考サイト
http://d.hatena.ne.jp/J_tashi/20120912/1347468356

2014/03/15

WindowsでQTPlayerの色がおかしい時

QTPlayerで再生した時、圧縮形式云々以上にかなり色が全体的に持ち上がる時があります。
その時にQTPlayerの設定を以下のように変えるとある程度改善されるようです。


編集>設定>QuickTime設定で上記のウィンドウを開き、①のチェックをはずすと色味がある程度正しくなります。

ちなみに②にチェックを入れておくと、After EffectsなどでQuickTime形式で書き出せる
ビデオコーデックの種類が増えます。


参考サイト
Windows環境でiTunesやQuicktimeのムービーの色味がおかしい時