三日月館【別館】開発・制作Tips集

[3dsMax] MAXScriptのskinOps.GetBoneNameメソッドでノードを取得できない問題の回避

最終更新:

fumiduki1985

- view
管理者のみ編集可
skinOps.GetBoneNameメソッドを使用すると、モーファーモディファイヤにセットされたターゲットノードの名前を取得することができる。
MAXScriptのガイドによると、第3引数の<nameflag_index>に0を渡すことでボーンの変換を持つノードを返すとあるが、(少なくとも3ds Max 2011 32bitでは)ノードの名前しか返さない。

この問題について以下のURLでやりとりがなされており、回避のためのコードが示されている。
http://forums.cgsociety.org/archive/index.php/t-779310.html

以下に回避コードの部分を引用する。(オリジナルはインデントがなく見辛いため、インデントのみ追加した。)
fn getBoneFromSkin theSkin boneID=
(
  local boneArray=for o in objects where (refs.dependencyLoopTest theSkin o) collect o
  local boneName=(skinOps.GetBoneName theSkin boneID 1)
  local notFound=true
  local i=0
  while notFound and i<boneArray.count do
  (
    i+=1
    if boneArray[i].name==boneName then notFound=false
  )
  if notFound then undefined else boneArray[i]
)

基本的には、refs.dependencyLoopTestメソッドによってtheSkin(モーファーモディファイヤ)と関連のあるオブジェクトを列挙した後、skinOps.GetBoneNameメソッドが返すノード名と比較して該当のノードを返しているだけである。


このページのタグ一覧
3dsMax MAXScript プログラミング

記事メニュー
ウィキ募集バナー