組み込み済みExtraConstructor¶
ここでは予め組み込まれているExtraConstructorについて解説します。
constCollector¶
ctrl_grp内に存在する、 コントローラーをまとめるグループ内にあるコンストレインをすべてrig_grp内に収集します。
インストール後の戻り値である、 このExtraConstructorのインスタンスに対して以下のような設定を行うことができます。
メソッド名/変数名 |
引数の型 |
説明 |
addNodeFilter |
*function |
判別用のフィルタ関数を追加します。 |
removeNodeFilter |
*function |
判別用のフィルタ関数を削除します。 |
useDefault |
bool |
デフォルトのフォルタ(コンストレインだけを取得)を 使用するかどうかを指定します。 |
ConstGroupName(メンバ変数) |
str |
コンストレインを格納するグループ名を指定します。 デフォルトではctrlCst_grpという名前のグループに格納されます。 これはメンバ変数なので、直接=で任意の名前を代入して下さい。 |
addNodeFilter¶
このメソッドはグループ内にあるノードを収集する際にフィルタとなる関数を追加することができます。 デフォルトではコンストレインノードをすべて収集するようになっていますが、 他にも収集するものを追加場合にはこのメソッドを使用して独自のフィルタを追加して下さい。
このメソッドにわたす引数は関数です。 関数は以下のフォーマットで定義して下さい。
def functionName(node_name):
return True
第一引数はフィルタするためのノード名を受け取るようにします。 また戻り値はフィルタの結果の可否をBoolとして返します。
フィルタは複数追加することができます。 このコンストラクタは追加したフィルタすべてでノードのテストを行い、 一つでもTrueになれば収集対象となるようになっています。
useDefault¶
このメソッドはデフォルトで動作するフィルタ機能をOFFにします。 デフォルトで動作するフィルタは、 グループ内のすべてのコンストレインノードを適用対象とするようになっています。
デフォルトフィルタは以下の内容になっています。
from maya import cmds
def defaultFilter(target):
return bool(cmds.ls(target, type='constraint'))
コンストレインすべてを収集対象としたくない場合はこのメソッドでTrueを設定し、 独自の収集関数を追加して下さい。
使用例¶
class Constructor(constructors.currentConstructor()):
def ignoreAimConstraint(self, node_name):
r"""
エイムコンストレインだけを収集の対象から外すフィルタ。
"""
if (
cmds.ls(node_name, type='constraint') and
not cmds.ls(node_name, type='aimConstraint')
):
return True
else:
return False
def init(self):
ext_cst = self.installExtraConstructor('constCollector')
ext_cst.addNodeFilter(self.ignoreAimConstraint)
ext_cst.useDefault(False)
subdivSmoothSetting¶
モデルにsubdiv_setという名前のセットがある場合、 このセットメンバーのジオメトリに対してsmoothMeshPreviewの処理を追加します。
モデルはstandardConstructorが提供するモデルルールに則っている必要があります。
デフォルトではsubdiv_set内のオブジェクトに対して以下の設定を行います。
スムース表示 |
オン |
レンダリング時にプレビューと同じ分割を使用する |
オフ |
プレビューの分割レベル |
0 |
レンダリング時の分割レベル |
2 |
インストール後の戻り値である、 このExtraConstructorのインスタンスに対して以下のような設定を行うことができます。
変数名 |
引数の型 |
説明 |
SetName |
str |
作業対象となるセット名を設定します。 |
PreviewLevel |
int |
プレビュー時の分割数を0~4で設定します。 |
RenderSmoothLevel |
int |
レンダリング時の分割数を0~4で設定します。 |
なお、このExtraConstructorをインストールしていて、 かつsubdiv_setがない場合はすべてのレンダリングジオメトリがサブディビ処理の対象になります。 もしサブディビ処理を入れたくない場合は必ずこのコンストラクタはインストールしないようにして下さい。
cstExtensions¶
コンストラクタに追加・拡張機能を提供するExtraConstructorです。
funcモジュールと違い、 こちらはコンストラクタの仕様に則ったルール内で使用できる機能を提供します。
このExtraConstructorをインストールしてもコンストラクタ自体の挙動に変化はなく、 コンストラクタで以下のメソッドが使用できるようになります。
alignJointOnSurface¶
このメソッドは任意のNurbsSurfaceにジョイントチェーンを追従させる機能を提供します。 またジョイントチェーンにはFKコントローラが追加され、 サーフェースに追従した状態からオフセットでFK制御が可能になります。 メソッドの引数は以下の通りです。
引数名 |
型 |
説明 |
joints |
list |
サーフェースに追従するジョイントの名前のリストを指定します。 このリストにはジョイントチェーンのトップノードの名前のリストを入れます。 各ジョイントチェーンの末端までサーフェースに追従するようになります。 |
surfaceName |
str |
ジョイントを追従させるためのNurbsサーフェース名を指定します。 |
ctrlRoot |
gris3.node.Transform |
ジョイントチェーンをFK制御するためのコントローラを格納するためのルートノードを指定します。 |
setupRoot |
gris3.node.Transform |
ジョイントがサーフェースに追従するための仕組みを格納するためのグループノードを指定します。 |
basename |
str |
animSet等、各必要ノードのベースとなる名前を指定します。 |
blendAttrName |
str |
各FKコントローラがサーフェースに追従するかどうかのブレンド率を設定するためのアトリビュート名を指定します。 |
globalBlendAttr |
str |
全FKコントローラがサーフェースに追従するかどうかのブレンド率を設定するためのアトリビュート名を指定します。 こちらはノード名.アトリビュート名という形で一つのコントローラのアトリビュートを指定します。 |
sc |
gris3.tools.curvePrimitives.PrimitiveCreator |
各FKコントローラに使用するコントローラーのシェイプを定義するオブジェクトを指定します。 |
scModifier |
dict |
各FKコントローラを作成する際に、L/R/Cなど位置に応じた設定を変更するための辞書を指定します。 |
使用例¶
# 予めこのExtraConstructorはインストールされているものとする。
from gris3 import constructors, func, node
mainModule = constructors.mainModule(__name__, True)
class Constructor(mainModule.Constructor):
def setupCollar(self):
base_name = 'collar'
parent_jnt = 'spineC_jnt_C'
setup_root = self.createSetupRoot(
base_name, parentJoint=parent_jnt, isFollow=True
)
ctrl_root = self.createCtrlRoot(base_name, parentJoint=parent_jnt)
sc = self.shapeCreator()
sc.setCurveType('pin')
sc.setTranslation()
sc.setSize(1)
for joint in [
'collarA_jnt_L', 'collarB_jnt_L', 'collarA_jnt_R', 'collarB_jnt_R',
]:
ctrls = self.alignJointOnSurface(
joint, 'collarBase_srfShape', ctrl_root, setup_root,
base_name, 'followCollarToBody',
'spineHip_ctrl_C.followCollarToBody',
sc
)
fkCtrlHelper¶
FKコントローラの作成を補助する機能を提供するExtraConstructorです。 親子付けやFKコントローラの作成などの一連の流れ作業を簡単なコマンドで行います。
使用方法¶
このExtraConstructorをインストールすると、メインのConstructorに
setJointAsFkController
メソッドが追加されます。 ユーザーはこのメソッドを使用して任意のジョイントの親子付と FKコントローラの作成を行うことができます。
引数名 |
型 |
説明 |
joints |
str or list |
FKコントローラにするジョイント名のリストを指定します。 渡す値はジョイント名のリストまたは単体の名前になります。 |
parent |
str |
FKコントローラにするジョイントの親ジョイント名を指定します。 |
setName |
str |
作成されるFKコントローラが帰属するAnimSet名を指定します。 |
side=None |
str |
FKコントローラの位置を表す文字('L'や'R'、'None'など) |
shapeCreator=None |
gris3.tools.curvePrimitives.PrimitiveCreator |
作成されるFKコントローラの形状を指定します。 |
ctrlArgs=None |
dict |
内部で呼ばれるtoControllerメソッドに渡すオプションを辞書形式で指定します。 |
connectArgs=None |
dict |
内部で呼ばれるconnectControllerメソッドに渡すオプションを辞書形式で指定します。 |
expandChildren=False |
bool |
このオプションをTrueにすると、第一引数jointsに渡したノードの子が操作対象になります。 目的のジョイントをグループ分けしている場合などに便利です。 |
使用例¶
# __init__.py
from gris3 import constructors, func, node
cmds = func.cmds
LOD_LIST = ['high', 'low']
class Constructor(constructors.currentConstructor()):
def init(self):
self.installExtraConstructor('fkCtrlHelper')
def createController(self):
# FKコントローラの親ジョイント名
parent_joint = 'spineA_jnt_C'
# コントローラ形状の設定。
sc = self.shapeCreator()
sc.setCurveType('circleArrow')
sc.setRotation((180.0, 0.0, 90.0))
sc.setSize(8.0)
# コントローラの作成オプション。
opt = {'option':self.ChainCtrl|self.IgnoreEndCtrl}
self.setJointAsFkController(
'skirtJoint_grp', parent_joint, 'skirt',
shapeCreator=sc, ctrlArgs=opt, connectArgs=opt,
expandChildren=True
)
unityHumanScaler¶
hand_jnt_L(R)以下で、 handユニットに属するジョイントのインバーススケールの効果をOFFにする機能を提供します。
非常に古いExtraConstructorであり、 拡張性がないため将来的には別のものに置き換わる可能性があります。
なお、名前にUnityとついていますがこれは昔の名前の名残で、 現在は特にUnity専用というわけではありません。