Poser覚書> Poser操作 > スクリプト

フィギュアの目の焦点をカンタンに合わせるスクリプト

 フィギュアの目の向きを調整するの、めんどくさくないだろうか?

 私は超めんどくさい。デフォルトの「顔の真正面、はるかかなたを見つめる遠い目」はイヤなので、ちょいちょいと調整していると、上を向かせたいのに下にぐるんと目が向いたり、ちょっと引いた絵だとどっちを見つめてんのかわかんなかったりしてキーッとなることがあるのだ。

 そこで楽するために作ったスクリプトがこれだ。


▲白い立方体を見つめる FREAK


▲立方体を動かすと、それを目で追う FREAK

 まずフィギュアを選択状態にし、スクリプトを実行すると、小さな白い立方体が現れる。フィギュアはその立方体をじーっと見つめているので、立方体を好きな場所に移動させることでいい感じの目線がカンタンに作れるのだ。

 さらに、この立方体はレンダリング時には表示されないようになっている。ちょっとだけ便利だ。

 スクリプトはこんな感じ。適当なフォルダに、MakeEyeTarget.pyとでもファイル名をつけて保存し、File→Run Python Scriptから実行すればOK。頻繁に使う人は、Pythonスクリプトでキーボードショートカットもどきを参照して、メニューから呼び出せるようにするなりすればいいと思う。

import poser

scene = poser.Scene()

scene.LoadLibraryProp( "/Runtime/Libraries/Props/Primitives/box.ppz")

act = scene.CurrentActor()
fig = scene.CurrentFigure()

act.SetName(fig.Name()+" EyeTarget")
act.SetParameter("Scale" ,0.2)

act.SetParameter("Ytran",0.8)
act.SetParameter("Ztran",0.4)

act.SetVisibleInRender(0)


eyes = fig.Actor("head").Children()

for target in eyes:
# print target.Name()
 if "Brow" not in target.InternalName() and ("Eye" in target.InternalName() or "eye" in target.InternalName()) :
  target.PointAt(scene.Actor(fig.Name()+" EyeTarget"))

scene.DrawAll()



 立方体はライブラリから呼び出しているので、ライブラリの「Primitives」をどっかに移動していたりするとエラーになると思う。

 いちおうスクリプトの流れをざっと説明しておこう。

  1. ライブラリから立方体を呼び出し
  2. 立方体の名前を「フィギュア名+Eye Target」にリネーム
  3. 立方体のScaleを20%に変更
  4. 立方体の位置(Ytran、Ztran)を変更。0.8とか0.4とかの値は、試行錯誤してだいたいフィギュアの目の前にあたりにくるようにした値。
  5. レンダリング時に非表示になるように設定
  6. 「head」の子のうち、名前に「Brow」がついてなくて、「Eye」か「eye」がついている子を目とする。顔の子に「EyeBrow」があるVictoria4.2対策。
  7. 目その1,目その2の「Point at」を先ほど呼び出した立方体に設定
  8. 再描画(よくわかんないけど念のため)

 一応複数のフィギュアごとに目線あわせの立方体が出せるようになっている、と思う。日本語版で動くかどうかは試してないが、まあいいか。

(追記)日本語版で一部動作しない、とメールで教えていただいたので一部改良。

  • 頭部のパーツ名「Head」は、日本語版では、「頭部」になってしまい「そんなパーツねえよ」というエラーが出てしまうので、内部名の「head」に変更。
  • Victoria4.2では、顔に「Eye Brow」(まゆげ?)というパーツがあるので、顔の子パーツのうち目玉だけをなんとか抜き出す処理を追加。
関連:
定番女性Poserフィギュア Victoria4.2紹介

次のなんでもPointAtスクリプトへ


Poser覚書> Poser操作 > スクリプト もくじ