0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

mayaの環境設定 ~subdivisionMethod~

Last updated at Posted at 2022-02-14

mayaのいつからか忘れましたが、smoothのsubdivisionMethodが導入され
これもまた環境によって変わってしまう面倒なやつ。
image.png

環境ごとに違うと何が問題か?

meshノードのsmoothMesh項目にsubdivisionMethod というのがあり、
useGlobal = True がデフォルトになっている。
useGlobal つまり環境設定に準ずるということ。
これが揃っていないとsmoothMesh使用時にメッシュの形状・UVなどに差異が生まれてきてしまう。
image.png

どこで設定しているか?

先述の通りprefrenceで設定してるのだけれども、どうやって設定しているのかがわからない。
ひとまず preferenceを更新しつつ、更新前・後のuserPref.melを比較してみる。

newPolyDefaultSmoothDrawType

optionVarにてこの値が変動している。
newPolyDefaultSmoothDrawType 0 の状態だったので
試しに optionVar で変えてみる

cmds.optionVar(intValue = ["newPolyDefaultSmoothDrawType",1])

変わらない。ので、savePrefs もしてみる

cmds.optionVar(intValue = ["newPolyDefaultSmoothDrawType",1])
cmds.savePrefs(general =True)

すると savePref後に newPolyDefaultSmoothDrawTypeを問い合わせると元に戻ってしまっていた。
というわけで、mayaのどこかに別途設定を格納してるはず。

global 変数?

global 変数に格納してるのではないかと仮定。
melで global変数名とその値を呼び出す。
これも preferenceの更新前・後で比較してみる・

{
    string $globalList[] = `env`;     
    for($globalName in $globalList)
    {
       print("\n" + $globalName + "\n");    
       eval("print " + $globalName + ";\n");
      }
}

残念ながらそれらしい変数と変化は見られず。

AETemplateから探ってみる

UI上に文字として出てるのだから、何かしら取得してるはず。
なので、AETemplateを探ってみる。
image.png

該当のAETemplate.mel
C:\Program Files\Autodesk\Maya2019\scripts\AETemplates\AEmeshTemplate.mel

なかみを拝見・・・発見。

global proc int GetSmoothDrawType(string $nodeName)
{
	int $subdivisionVal = 0;	// MayaCC
	int $useGlobal = `getAttr ($nodeName + ".useGlobalSmoothDrawType")`;
	if ($useGlobal == 1)
	{
		int $polyOpts[] = `polyOptions -q -smoothDrawType`;
		if ($polyOpts[0] == 1)
			$subdivisionVal = 2;	// Osd-Uniform
		else if ($polyOpts[0] == 2)
			$subdivisionVal = 3;	// Osd-Adaptive			
	}
	else
	{
		$subdivisionVal = `getAttr ($nodeName + ".smoothDrawType")`;
	}

	return $subdivisionVal;
}

このコマンドで確認できるらしい。

polyOptions -q -smoothDrawType

smoothDrawType(sdt)
この設定は、newPolymesh フラグを使用する場合のみ機能します。ポリゴンメッシュ オブジェクト上の smoothDrawType アトリビュートの新しい既定のアトリビュート値を設定します。オプションは、0: Catmull-Clark 1: リニア 2: OpenSubdiv Catmull-Clark 均一 3: OpenSubdiv Catmull-Clark 適応です。

とのこと。

早速やってみる。

cmds.polyOptions(newPolymesh =True,smoothDrawType = 0)
cmds.savePrefs(general =True)

image.png

cmds.polyOptions(newPolymesh =True,smoothDrawType = 1)
cmds.savePrefs(general =True)

image.png

できた!

追記:
0: Catmull-Clark
1: リニア
2: OpenSubdiv Catmull-Clark 均一
3: OpenSubdiv Catmull-Clark

とかいてあるが、手元の環境だと
0: Catmull-Clark
1: OpenSubdiv Catmull-Clark 均一
2: OpenSubdiv Catmull-Clark

となっている。

AEの方が変わらない

が、こっちの表記が変わらない。

image.png

cmds.polyOptions(smoothDrawType = 1)

これを別途実行すると表記は変更されるが、処理内容は反映されていないように見える。
シーンを一旦保存して開きなおすと、ちゃんと反映されていた。

まとめ

反映されるタイミングがちょっと厄介なので、userSetup.pyで

cmds.polyOptions(newPolymesh =True,smoothDrawType = 1)
cmds.polyOptions(smoothDrawType = 1)
cmds.savePrefs(general =True)

を仕込んでおいた方が安全だと思われる。
かつ、preferenceの該当部分は変更禁止。

※別途詳細確認中だが、useGlobalのチェックを外した時に 特定の条件下でmethodのsetAttr内容が消失する現象もあり。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?