3DCGbook

映像プロダクションに所属しています。主に毎日のアウトプットを配信していこうと思います。

ノード名の管理はどうしてる?(Maya編)

仕事になるとどうしても出てくるのがノード名をどう管理するか?
という問題。

リガーとなるとここは徹底して管理したいと思っている。

そもそもノードに名前をつける理由を知ることが重要。
ノードに名前をつけるというのはファイルに名前をつけるということと同じである。

誰かがそのファイルを利用して何かを作り上げる。
そのファイル名がどこにあるかわかりやすくしておく必要がある。
これは最低限の条件である。

失礼ではあるがデザイナーに命名規則とかいうと苦い顔をされる。
※私もデザイナーではあるがプログラムもある程度かじるので…
ただこれは命名規則をつける理由をしっかりと伝えていないのがいけないだけであり、
何故つける必要があるか?というのを明確に伝えれば納得するはず。

そもそもDCCツールにおいて命名管理というのは個人の技術の一つである。

3DCGというのは自由に作れるわけではなくデータである。
なのでモデラーやアニメーター問わずデータ管理能力は技術なのである。

さて話は反れたので命名規則の話に戻ろう。

最初にキャメルケースの話をしよう。

例:モデラーがポリゴンで人間の左手を作って名前をつける

・アッパーキャメルケース
HandMeshLeft,LeftHandMesh ...

・ローワーキャメルケース
handMeshLeft, leftHandMesh ...

とラクダのこぶのように凸凹してるからキャメルという。
但しこれはMayaのノード名の管理には向かないと思う。

理由としてはラクダのこぶの数が想定しにくいのである。
こぶの数を制限したとしても文字列を分割しにくい。

例えば、handNailMeshLeft, handSurfaceLeft があるとする。
これを分割して文字列を変えるとすると非常に面倒くさい。
やるとしたら間の"Mesh"と"Surface"と使って分割することになる。

Mayaにはいろいろな機能のノードがある。
その機能毎に分割しなければならない。条件分岐の嵐は避けたい。

よってキャメルケースはそもそもノード名には適していない。

私が推奨したいのはスネークケース。

実はかなり前から推奨している。

理由は、
1. 仕様としてまとめやすい
2. 分割しやすい
3. 置換しやすい

1、2、3の順で落としこんでいくのを推奨する。
例として、hand_mesh_L としよう。

# 1. 仕様としてまとめやすい について
アンダーバーの数を仕様として制限すること。
むしろ制限しなければスネークケースに価値はないと思っている。
hand_mesh_L の場合は、 名称_ノードのタイプ_識別子と分ける。。
アンダーバーの数を2個に限定させることが大事。

それによってできることは、
・アンダーバーが2個未満のもの、または2個を超えるものを出力することができる
例えば、

import maya.cmds as cmds
allNodes = cmds.ls()
for i in allNodes:
    snakeList = i.split('_')
    snakeLen = len(snakeList)
    if not snakeLen == 2:
        print '%s is not 2'

これによって出力された結果のノードは2未満、2超であることがわかる。
もちろんカメラ等は例外となるのだがモデラーが管理するのは
TransformNodeやMeshノード等モデルに関わる部分くらいなので限定してしまえば良いだろう。

# 2. 分割しやすい について
アンダーバーの仕様が決まるとスネークケースで分割して管理ができる。

nodeName = 'hand_mesh_L'
print nodeName.split('_')
#結果 ['hand', 'mesh', 'L']

これにより、先ほどまとめた仕様に分割することができる。

# 3.置換しやすい について
分割した結果を置換して再度つなげるとよいだろう。

nodeName = 'hand_mesh_L'
snakeList = nodeName.split('_') # ['hand', 'mesh', 'L']
partsName  = snakeList[0] # hand
nodeTypeName = snakeList[1] # mesh
identifier = snakeList[2] # L
newName = '%s_%s_%s' % (partsName, nodeTypeName, 'R')
print newName
# 結果 hand_mesh_R

replaceは使っても使わなくてもいい。
ただ分けて管理することでreplaceも考えやすくなる。
partsNameは変えたいけどnodeTypeNameとidentifierは変えたくないなーとか。


どれも実際に実践で試さないとわからないかもしれないが、
ノード名にキャメルケースはかなりキツイ。

仕様を決める時は何故その命名管理を設定したかから具体的に話し合うことが大事である。



CODE COMPLETE 第2版 上
CODE COMPLETE 第2版 上
posted with amazlet at 14.07.26
スティーブ マコネル
日経BP
売り上げランキング: 53,067