2017年11月21日火曜日

レンダリング画像上の、あるノードのxy座標を取得する方法

レンダリング画像上の、あるノードのxy座標を取得する方法。
OpenMayaを介して、ワールド空間空間内の座標位置をカメラから計算し、画像上のxy座標を算出します。
レンダリング情報はレンダリング設定のcommon設定のresolutionから取得して計算します。

ソースまるコピ:
http://forums.cgsociety.org/archive/index.php?t-1109300.html
非常に分かりやすい記事でした。
なお、実際は知らせてみると、Photoshop画像上でx座標は正しい位置を取得しましたが、y座標の上下が逆転しました。
うーん、なんだろ。
以上、備忘録メモ

2016年11月16日水曜日

2016年11月14日月曜日

blenderスクリプトメモ:ビューポートのカメラ設定を変える

Blenderスクリプトは、カメラ設定をいじるのにも、どこに情報が格納されているのか、探すのに一苦労でした。。

ひとまず、現在のウインドウの、View_3Dパネルを取得できれば、いろいろいじることができそう。

以下ソース

しかし、ビューにすべてのオブジェクトが入るようにするやり方がわからなかった。
(ショートカットだと、shift+C)
引き続き調査してみます。

blender スクリプトメモ:fileDialogでファイルパスを取得する

Mayaのmelやpythonだと、fileDialogを出すのには全く苦労しませんが、
Blenderはかなり面倒くさかったです。
あちこち調べて、ようやくソースを見つけたので、こちらにメモします。

以下ソース

参考:



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

本当は、fileDialogから、単にパスを返すだけのソースにしたかったのですが、解決方法がわからず、fileDialogを呼び出した処理の中に、本処理を書き込む流れになっています。

うーむ。。気持ち悪い。。

というか、たかだかfileDialogだすだけで相当時間を食ってしまった…南無三。


2016年10月20日木曜日

blender::スクリプトで後からActionにgroupを追加し、fcurveを登録する方法

現在、お仕事でBlenderのスクリプトを触っているのですが、まったくMayaのそれとは異質で四苦八苦。。(汗
同じpythonといっても、Blenderのpythonスクリプティングは、完全にオブジェクト指向なので、コマンドを動かして操作するmaya pythonとはまったくハンドリングが違う。
たかだかジョイントツリーを選択するだけで時間がかかる…!

Blender pythonでの操作方法はいくつかわかってきましたが、そのうち一つをこちらでメモを兼ねて公開します。

通常、Blender上でアニメーションを作成すると、ArmatureにActionを登録し、キーフレームを作成すると、Actionデータの中に骨ごとのグループができて、中にfcurveが登録されます。
が、例えば、FBXなどをインポートすると、(出力やインポート方法によって異なるかもですが)、この骨ごとのグループが作成されず、Armature直下にfcurveが登録されます。

これを骨ごとのグループに登録しなおすには、ActionEditor上から手作業でグループを作成…してもよいのですが、面倒。

スクリプトでやると、以下の通りです。

※あらかじめ編集したいArmatureを選択してアクティブにしておくことが前提
※アクティブにするArmatureをスクリプトで指定する方法は、またべつのはなし(笑)

#まず、新規にActionにgroupを追加する。
>>> bpy.context.object.animation_data.action.groups.new('test')
#手動操作時の、infoウインドウにログ表示される「bpy.ops.anim.channels_group(name="testGrp")
」という入力だとなんでか怒られます。おそらく、fcurveがきちんと指定できてないのかも。

#つぎに、アニメーションカーブを取得します。
>>> fcList=bpy.context.object.animation_data.action.fcurves
#カーブごとのグループアトリビュートを指定します。
>>> for fc in fcList:
...     fc.group.name='test'
>>>for fc in fcList:
...     fc.group=bpy.context.object.animation_data.action.groups['test']

※12/1修正:名前指定ではグループに入りませんでした!
※グループオブジェクトを指定する必要があるようです。

…以上!(ジェイソン風味
fcurveごとに登録したいグループを変えるのであれば、fcurveのdata_pathアトリビュートから、UI上に表示されている名前を取得できるので、if文で処理分岐するといいと考えています。

2016年10月13日木曜日

シーン内のすべてのリファレンスノードをインポートする。

メモ代わりに。

リファレンスノードを取得し、ファイルパスを取得、fileコマンドからインポート。

2016年7月23日土曜日

Photoshop JavaScript:レイヤーを別のファイルへ複製する。

業務でPhotoshopのJavaScriptによる自動化を行いました。
その際、「特定レイヤーセットを、別のファイルへ複製する」方法を調べたのですが、なかなかヒットしなかったので、こちらに投稿しておきます。

psObj = open(new File('<コピー先のファイルパス>')); 
refObj = open(new File('<コピー元のファイルパス>')); 
var layObj = refObj.layerSets.getByName("<指定するレイヤーセットの名前>")
layObj.duplicate(psObj)

割と簡単でした。
ちなみに、上記の例では、一番上の階層のレイヤーセットのみを検索します。
その下階層の場合は、指定のlayerSetの中のlayerSetを取得してやる必要があります。

また、この例では、layerSetsのduplicateを行っていますが、通常layerやartLayerからも実行することも可能かも。
(未確認)