チュートリアル / 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ
第5回:さらばトラブル!Prefsフォルダの仕組み(2/2)->; userPrefs.melの世界
- Maya
- ゲーム
- コラム
- チュートリアル
- 中級者
- 学生・初心者
- 教育
- 映画・TV
前回はプリファレンスファイルの役割や仕組みを見ていただきました。ここまでの知識で既にMayaが起動しないなどの問題は対処できることでしょう。今回はさらにディープな世界を紹介したいと思います。
トラブルが起きた場合、原因となりがちなのが「userPrefs.mel」です。このMELの名前を変えてMayaを立ち上げることでデフォルトに戻せば大抵の問題は解決します。とはいえ、テクニカルアーティストもしくはテクニカルサポートを目指す方は、ここからさらに一歩先に進む必要があるでしょう。オプションがリセットされることは好ましい状況ではありませんので該当部分のみ修正する必要がありますし、何が問題になっているのかきちんと見つけ出さなければ問題が再発する可能性もあります。
というわけで何が書いてあるか読み解いていきましょう。
keyTangent -global -inTangentType clamped -outTangentType clamped -weightedTangents false;
constructionHistory -tgl on;
optionVar -version 3;
optionVar
-sv "commandLineSourceType" "mel"
-iv "commandLineVisible" 1
-sv "commandportDefaultName" "commandportDefault"
-iv "commandportOpenByDefault" 1
-iv "containerCentricSelection" 0
-iv "containerRootUsesCustomIcon" 1
-sv "create2dTextureType" "normal"
-iv "createMaterialsWithShadingGroup" 1
-iv "createNurbsPrimitiveAsTool" 1;
〜後略〜
keyTangentはキーフレームを作る時のキー設定を行っています。Window > Settings/Preferences > Preferences オプションで、 Settings > Animation > Tangents の設定がこれにあたります。
constructionHistoryはヒストリーを作る作らないのオプションです。GUIではステータスラインのアイコンボタンで設定できます。
optionVar -version 3;
はプリファレンスのバージョン情報です。互換性をとるためにあるようです。
そしてこれ以下はほとんど
optionVar ~
が続きます。このコマンドはツールのオプション設定を保存するためのコマンドです。例の中では、
というのがあります。これは、「コマンドラインの入力タイプはmel」という設定です。なので、「mel」を「python」に置き換えて保存してからMayaを起動すると、コマンドラインの入力タイプがPythonに変わります。
(ちなみに、オプションに多少変な値が入っていてもMayaは何とか動作します。図の様に、Maya2009ではcommandLineSourceTypeに関係ない文字を入れても起動はするようで、オプションの値をボタン名にしてしまいます…いじるのは自己責任で!)
optionVarの中身や位置は保存する度に順序が変わりますので、常に同じオプションが同じ行にあるわけではありません。注意してください。
では残りを見てみましょう。
panelConfiguration -label (localizedPanelLabel("Hypershade/Render/Persp Vertical"))
-defaultImage "hypershadeRenderPerspVerticalLayout.xpm"
-image ""
-sc false
~中略~
autoKeyframe -state false ;
optionVar -fv gridSpacing 5 -fv gridDivisions 5 -fv gridSize 12 -intValue displayGridAxes 1 ~略~;
nurbsToPolygonsPref -f 1 -ucr 0 -chr 0.9 -uch 0 -cht 1 -d 0.1 -es 0 -ft 0.01 -mel 0.001 -pc 200 ~略~;
nurbsCurveRebuildPref -fr 0 -rt 6 -d 3 -s 1 -tol 0.01 -end 1 -kr 1 -kep 1 -kt 0 -kcp 0 -scr 0 ~略~;
nurbsToSubdivPref -mpc 1000 -rn 1 -mp 1 -cp 1 -st 0 -ct 1 -br 0 -o 1 -t00 1 -t01 0 -t02 0 ~略~;
ikSystem -e -sn true -ar false ;
panelConfigurationはPanels > Saved Layouts に保存してあるパネルレイアウトの設定情報です。
autoKeyframeはオートキーフレームの有効無効です。
optionVar -fv gridSpacing 5~はグリッドの設定です。
nurbsToPolygonPref, nurbsCurveRebuildPref, nurbsToSubdivPrefは、NURBSのコンバートに関する設定です。
ikSystemはIKの全般設定です。
例えば図のようなuserPrefs.melがあるとします。(ここでは簡略化したコードを使用しています)
1 userPrefs.melの半分をコメントアウト(/*と*/でくくる)。optionVar~;(セミコロン)間が一単位なので、コメントアウトする時はoptionVarの先頭からコメントアウトする。
2 Mayaを起動。以後以下の手順を繰り返します。
A) Mayaが正しく起動した場合
1 一度Mayaを閉じる。
2 コメントアウトした部分の中に問題点があるはずなので、コメントアウト部分を反対にして(コメントアウトしていなかった部分をコメントアウト)。
3 Mayaを起動。
4 AかBを繰り返す。
B) Mayaが正しく起動しなかった場合
1 一度Mayaを閉じる。
2 コメントアウトしていない部分に問題があるはずなので、残りの半分をコメントアウト。
3 Mayaを起動。
4 AかBを繰り返す。
と地味にやっていくと、最終的に原因部分のみ残ります。原因部分を削除するか、値を変えてみると直ります。
問題の原因を排除するために、オプション値が何のオプション値なのか具体的に知る必要があります。辿る方法はいくつかあります。
A) 値の名前から推測
名前から機能が明らかな場合はこれが手っ取り早い方法です。例えば「"commandLineSourceType" "mel"」と書いてあれば、コマンドラインのソースタイプのオプションだと推測できます…。
1 書いてある値の名前から推測し、Mayaで該当部分のオプションを変える。
2 Mayaを閉じる。
3 予想通り値が変更されているか確認。変わっていればそれが該当のオプションです。
B) 値の名前を検索
optionVarはオプション値を保存したり使用するときに使うMELコマンドなので、値の名前を検索すれば使用箇所が厳密にわかります。
1 インストールしてあるMayaの中にあるscriptsフォルダ内のmelを値の名前で検索。
例えば C:/Program Files/Autodesk/Maya2009/scripts の中の全mel内を検索。(複数のテキストファイルの中身を検索するフリーツールを利用するとよいです。)
2 見つからなければスクリプトエディターで「getenv MAYA_SCRIPT_PATH;」を実行し、表示されたパスのフォルダ内にある全てのmelを検索します。
3 見つかれば、オプション値が実際に使われているところを見つけ出し、MELのヘルプなどを参考にしながら何のオプションなのか判定します。
ちなみに「commandLineSourceType」で検索すると、Maya2009/scripts/startup/initCommandLine.mel内に4か所みつかります。オプションとして使われているのは50行目、
というところです。51行目でラベル名として変数に設定しなおし、52行目にでてくるiconTextButtonでコマンドラインのMEL<->Pythonと切り替わるボタンのラベルとして設定されています。なるほど、それで先ほどオプション値を「めるです」に設定したらボタンに「めるです」と名前が出たのですね!
とまあ、ここまでくれば芋づる式に悪さをしているところ等が見つかることでしょう。
プリファレンスをデフォルトに戻せばスクリプト系の問題も大抵解消します。
ちなみにスクリプト系の問題ですが、環境変数と関わってくるのでまた改めて取り上げてみたいと思っています。
というわけで、今後Mayaをカスタマイズしていく際に問題があればいつでも通常の状態に戻せるようになったことでしょう!後半はスクリプトの知識がないとちょっと大変だったと思いますが、トラブル対処の方法がお分かりいただけたと思います。
次回はMayaでの作業効率アップの要、ホットキー+マーキングメニューを取り上げたいと思います。
トラブルが起きた場合、原因となりがちなのが「userPrefs.mel」です。このMELの名前を変えてMayaを立ち上げることでデフォルトに戻せば大抵の問題は解決します。とはいえ、テクニカルアーティストもしくはテクニカルサポートを目指す方は、ここからさらに一歩先に進む必要があるでしょう。オプションがリセットされることは好ましい状況ではありませんので該当部分のみ修正する必要がありますし、何が問題になっているのかきちんと見つけ出さなければ問題が再発する可能性もあります。
というわけで何が書いてあるか読み解いていきましょう。
userPrefs.melの中身
環境によって中身は変わりますが、とりあえず私の環境でのuserPrefs.melの中身を見ていきましょう。keyTangent -global -inTangentType clamped -outTangentType clamped -weightedTangents false;
constructionHistory -tgl on;
optionVar -version 3;
optionVar
-sv "commandLineSourceType" "mel"
-iv "commandLineVisible" 1
-sv "commandportDefaultName" "commandportDefault"
-iv "commandportOpenByDefault" 1
-iv "containerCentricSelection" 0
-iv "containerRootUsesCustomIcon" 1
-sv "create2dTextureType" "normal"
-iv "createMaterialsWithShadingGroup" 1
-iv "createNurbsPrimitiveAsTool" 1;
〜後略〜
keyTangentはキーフレームを作る時のキー設定を行っています。Window > Settings/Preferences > Preferences オプションで、 Settings > Animation > Tangents の設定がこれにあたります。
constructionHistoryはヒストリーを作る作らないのオプションです。GUIではステータスラインのアイコンボタンで設定できます。
optionVar -version 3;
はプリファレンスのバージョン情報です。互換性をとるためにあるようです。
そしてこれ以下はほとんど
optionVar ~
が続きます。このコマンドはツールのオプション設定を保存するためのコマンドです。例の中では、
-sv "commandLineSourceType" "mel"
というのがあります。これは、「コマンドラインの入力タイプはmel」という設定です。なので、「mel」を「python」に置き換えて保存してからMayaを起動すると、コマンドラインの入力タイプがPythonに変わります。
(ちなみに、オプションに多少変な値が入っていてもMayaは何とか動作します。図の様に、Maya2009ではcommandLineSourceTypeに関係ない文字を入れても起動はするようで、オプションの値をボタン名にしてしまいます…いじるのは自己責任で!)
optionVarの中身や位置は保存する度に順序が変わりますので、常に同じオプションが同じ行にあるわけではありません。注意してください。
では残りを見てみましょう。
panelConfiguration -label (localizedPanelLabel("Hypershade/Render/Persp Vertical"))
-defaultImage "hypershadeRenderPerspVerticalLayout.xpm"
-image ""
-sc false
~中略~
autoKeyframe -state false ;
optionVar -fv gridSpacing 5 -fv gridDivisions 5 -fv gridSize 12 -intValue displayGridAxes 1 ~略~;
nurbsToPolygonsPref -f 1 -ucr 0 -chr 0.9 -uch 0 -cht 1 -d 0.1 -es 0 -ft 0.01 -mel 0.001 -pc 200 ~略~;
nurbsCurveRebuildPref -fr 0 -rt 6 -d 3 -s 1 -tol 0.01 -end 1 -kr 1 -kep 1 -kt 0 -kcp 0 -scr 0 ~略~;
nurbsToSubdivPref -mpc 1000 -rn 1 -mp 1 -cp 1 -st 0 -ct 1 -br 0 -o 1 -t00 1 -t01 0 -t02 0 ~略~;
ikSystem -e -sn true -ar false ;
panelConfigurationはPanels > Saved Layouts に保存してあるパネルレイアウトの設定情報です。
autoKeyframeはオートキーフレームの有効無効です。
optionVar -fv gridSpacing 5~はグリッドの設定です。
nurbsToPolygonPref, nurbsCurveRebuildPref, nurbsToSubdivPrefは、NURBSのコンバートに関する設定です。
ikSystemはIKの全般設定です。
userPrefs.melから問題点を見つけ出す
トラブルが起きた時にどのようにこの中から原因を見つけ出すかですが、やり方は面倒ですけど単純作業です。例えば図のようなuserPrefs.melがあるとします。(ここでは簡略化したコードを使用しています)
1 userPrefs.melの半分をコメントアウト(/*と*/でくくる)。optionVar~;(セミコロン)間が一単位なので、コメントアウトする時はoptionVarの先頭からコメントアウトする。
2 Mayaを起動。以後以下の手順を繰り返します。
A) Mayaが正しく起動した場合
1 一度Mayaを閉じる。
2 コメントアウトした部分の中に問題点があるはずなので、コメントアウト部分を反対にして(コメントアウトしていなかった部分をコメントアウト)。
3 Mayaを起動。
4 AかBを繰り返す。
B) Mayaが正しく起動しなかった場合
1 一度Mayaを閉じる。
2 コメントアウトしていない部分に問題があるはずなので、残りの半分をコメントアウト。
3 Mayaを起動。
4 AかBを繰り返す。
と地味にやっていくと、最終的に原因部分のみ残ります。原因部分を削除するか、値を変えてみると直ります。
問題の原因を排除するために、オプション値が何のオプション値なのか具体的に知る必要があります。辿る方法はいくつかあります。
A) 値の名前から推測
名前から機能が明らかな場合はこれが手っ取り早い方法です。例えば「"commandLineSourceType" "mel"」と書いてあれば、コマンドラインのソースタイプのオプションだと推測できます…。
1 書いてある値の名前から推測し、Mayaで該当部分のオプションを変える。
2 Mayaを閉じる。
3 予想通り値が変更されているか確認。変わっていればそれが該当のオプションです。
B) 値の名前を検索
optionVarはオプション値を保存したり使用するときに使うMELコマンドなので、値の名前を検索すれば使用箇所が厳密にわかります。
1 インストールしてあるMayaの中にあるscriptsフォルダ内のmelを値の名前で検索。
例えば C:/Program Files/Autodesk/Maya2009/scripts の中の全mel内を検索。(複数のテキストファイルの中身を検索するフリーツールを利用するとよいです。)
2 見つからなければスクリプトエディターで「getenv MAYA_SCRIPT_PATH;」を実行し、表示されたパスのフォルダ内にある全てのmelを検索します。
3 見つかれば、オプション値が実際に使われているところを見つけ出し、MELのヘルプなどを参考にしながら何のオプションなのか判定します。
ちなみに「commandLineSourceType」で検索すると、Maya2009/scripts/startup/initCommandLine.mel内に4か所みつかります。オプションとして使われているのは50行目、
49| // load the previous type
50| $commandLineType = `optionVar -q commandLineSourceType`;
51| string $typeLabel = `labelFromCommandSourceType $commandLineType`;
52| $gCommandLineSourceButton = `iconTextButton -style "textOnly" -label $typeLabel ~略;
50| $commandLineType = `optionVar -q commandLineSourceType`;
51| string $typeLabel = `labelFromCommandSourceType $commandLineType`;
52| $gCommandLineSourceButton = `iconTextButton -style "textOnly" -label $typeLabel ~略;
というところです。51行目でラベル名として変数に設定しなおし、52行目にでてくるiconTextButtonでコマンドラインのMEL<->Pythonと切り替わるボタンのラベルとして設定されています。なるほど、それで先ほどオプション値を「めるです」に設定したらボタンに「めるです」と名前が出たのですね!
とまあ、ここまでくれば芋づる式に悪さをしているところ等が見つかることでしょう。
今回のまとめ
Mayaで起動時に落ちたり、動作がおかしい等の問題は、大抵原因不明な問題ではなく何かしら論理的な問題があります。多くはオプションが異常な値になっているとか、何かしらのスクリプトやプラグインが悪さをしているといった類です。オプションに関してはuserPrefs.melを調べれば原因がわかります。(でも、いつ異常な値が設定されたかは結局わかりませんが…)プリファレンスをデフォルトに戻せばスクリプト系の問題も大抵解消します。
ちなみにスクリプト系の問題ですが、環境変数と関わってくるのでまた改めて取り上げてみたいと思っています。
というわけで、今後Mayaをカスタマイズしていく際に問題があればいつでも通常の状態に戻せるようになったことでしょう!後半はスクリプトの知識がないとちょっと大変だったと思いますが、トラブル対処の方法がお分かりいただけたと思います。
次回はMayaでの作業効率アップの要、ホットキー+マーキングメニューを取り上げたいと思います。