2011年11月26日

【完全無料】「Visual C++ 2010 Express」でMotionBuilderプラグインを作る(64ビット対応)【MotionBuilderは別売】

ブログなんてほったらかしだし面倒くさいし辞めちゃおうかなぁとか思ってたらパスワード思い出したので再開。
ubicast Bloggerってもう開発終わっちゃったんだろうか。ブログ書くの超面倒くせぇな、やっぱり辞めよう。
続きを読む

2011年01月01日

MotionBuilder スクリプトチュートリアル FCurveの編集1

FCurveを弄る前に選択されているモデルをログに出すスクリプトから

from pyfbsdk import *
def getSelectedModels() :
sels = FBModelList()
FBGetSelectedModels(sels)
return sels
def test() :
for s in getSelectedModels() :
print s.Name
test()



FBGetSelectedModelsで選択されているモデルを取得できる。

次はアニメーションノードの取得




from pyfbsdk import *
def getSelectedModels() :
sels = FBModelList()
FBGetSelectedModels(sels)
return sels
def getAnimationNodes(node, animNodes) :
if '' != node.Name :
animNodes.append(node)
for n in node.Nodes :
getAnimationNodes(n, animNodes)

def test() :
for s in getSelectedModels() :
print s.Name
anodes = list()
getAnimationNodes(s.AnimationNode, anodes)
for an in anodes :
print (' '+an.Name)

test()



実行結果

20110101_3


アニメーションノードの正体はコイツら


20110101_1


モデルにはデフォルトでTranslation、Rotation、Scalingのアニメーションノードがついてる。アニメーションノードってのはアニメーション可能なパラメータってことみたい。


試しにVisibilityのアニメーションをONにしてさっきのスクリプトを実行すると


20110101_2


20110101_4


Visibilityが増えてる



FCurveの編集は次回

2010年12月18日

MotionBuilder スクリプトチュートリアル GUI編2

今回ボタンの使い方の例としてスクリプトランチャを作る
ボタンを押したら他のスクリプトを実行するヤツ
MBはスクリプトの実行が面倒くさいのでよく使うと思う

まずはボタンの使い方
ボタンを2つ付けて押すとそれぞれ「Script1」「Script2」とログに出すスクリプト

from pyfbsdk import *
from pyfbsdk_additions import *

class scriptLuncher() :
def __init__(self, name, w, h) :
self.tool = CreateUniqueTool(name)
self.tool.StartSizeX = w
self.tool.StartSizeY = h

x = FBAddRegionParam(0,FBAttachType.kFBAttachLeft, "")
y = FBAddRegionParam(0,FBAttachType.kFBAttachTop, "")
w = FBAddRegionParam(0,FBAttachType.kFBAttachRight, "")
h = FBAddRegionParam(0,FBAttachType.kFBAttachBottom, "")
self.tool.AddRegion('mainLayout','mainLayout', x, y, w, h)

layout = VBoxLayout()
self.tool.SetControl('mainLayout', layout)

btn = FBButton()
btn.Caption = 'Script1'
btn.OnClick.Add(self.onClick1)
layout.Add(btn, 20)

btn = FBButton()
btn.Caption = 'Script2'
btn.OnClick.Add(self.onClick2)
layout.Add(btn, 20)
def show(self) :
ShowTool(self.tool)
def onClick1(self, ctl, event) :
print 'Script1'
def onClick2(self, ctl, event) :
print 'Script2'


scriptLuncher('MBScriptLuncher', 300, 280).show()



ボタンを押すと、OnClick.Add()で指定した関数が呼ばれる

2つ作ったので2つ関数が必要になる


が、2つ3つ程度ならコレでもいいけど10個とかになってくると面倒くさいし、動的にボタンを増やすとか出来ないのでどうにかする




from pyfbsdk import *
from pyfbsdk_additions import *

class CustomButton(FBButton) :
def __init__(self, scriptPath='') :
FBButton.__init__(self)
self.scriptPath = scriptPath


class scriptLuncher() :
def __init__(self, name, w, h) :
self.tool = CreateUniqueTool(name)
self.tool.StartSizeX = w
self.tool.StartSizeY = h

x = FBAddRegionParam(0,FBAttachType.kFBAttachLeft, "")
y = FBAddRegionParam(0,FBAttachType.kFBAttachTop, "")
w = FBAddRegionParam(0,FBAttachType.kFBAttachRight, "")
h = FBAddRegionParam(0,FBAttachType.kFBAttachBottom, "")
self.tool.AddRegion('mainLayout','mainLayout', x, y, w, h)

layout = VBoxLayout()
self.tool.SetControl('mainLayout', layout)

for i in range(2) :
btn = CustomButton('Script' + str(i+1))
btn.Caption = 'Script' + str(i+1)
btn.OnClick.Add(self.onClick)
layout.Add(btn, 20)
def show(self) :
ShowTool(self.tool)
def onClick(self, ctl, event) :
print ctl.scriptPath



scriptLuncher('MBScriptLuncher', 300, 280).show()



FBButtonクラスを継承してCustomButtonクラスを作ってscriptPathってパラメータを追加した

次はコンフィグファイルを読み込んでボタンを追加していく


↓のようにキャプションとスクリプトのパスをセミコロンで区切ったリストを書いたテキストファイルを作って「MBScriptLuncher.cfg.txt」って名前で「MBのインストールフォルダ\bin\config\」に保存




Script1;Script1.py

Script2;Script2.py


・・・





from pyfbsdk import *
from pyfbsdk_additions import *
import os

class CustomButton(FBButton) :
def __init__(self, scriptPath='') :
FBButton.__init__(self)
self.scriptPath = scriptPath

class scriptLuncher() :
def __init__(self, name, w, h) :
self.cfgpath = os.path.normpath(os.path.join(FBSystem().ApplicationPath, '..\\config\\MBScriptLuncher.cfg.txt'))
self.scriptList = list()


self.tool = CreateUniqueTool(name)
self.tool.StartSizeX = w
self.tool.StartSizeY = h

x = FBAddRegionParam(0,FBAttachType.kFBAttachLeft, "")
y = FBAddRegionParam(0,FBAttachType.kFBAttachTop, "")
w = FBAddRegionParam(0,FBAttachType.kFBAttachRight, "")
h = FBAddRegionParam(0,FBAttachType.kFBAttachBottom, "")
self.tool.AddRegion('mainLayout','mainLayout', x, y, w, h)

layout = VBoxLayout()
self.tool.SetControl('mainLayout', layout)

self.getScriptList()
for sl in self.scriptList :
btn = CustomButton(sl[1])
btn.Caption = sl[0]
btn.OnClick.Add(self.onClick)
layout.Add(btn, 20)

def show(self) :
ShowTool(self.tool)
def onClick(self, ctl, event) :
FBApplication().ExecuteScript(ctl.scriptPath)
def getScriptList(self) :
if not os.path.exists(self.cfgpath) :
return
f = open(self.cfgpath, 'rt')
while 1 :
buf = f.readline()
if '' == buf :
break
if '\n' == buf :
continue
self.scriptList.append(buf.replace('\n','').split(';'))
f.close()



scriptLuncher('MBScriptLuncher', 300, 280).show()



ここまでやると結構使えると思うけど、スクリプトファイルをドロップしてボタンが追加できると便利じゃね?




from pyfbsdk import *
from pyfbsdk_additions import *
import os
import re

class CustomButton(FBButton) :
def __init__(self, scriptPath='') :
FBButton.__init__(self)
self.scriptPath = scriptPath

class scriptLuncher() :
def __init__(self, name, w, h) :
self.cfgpath = os.path.normpath(os.path.join(FBSystem().ApplicationPath, '..\\config\\MBScriptLuncher.cfg.txt'))
self.scriptList = list()

self.tool = CreateUniqueTool(name)
self.tool.StartSizeX = w
self.tool.StartSizeY = h

x = FBAddRegionParam(0,FBAttachType.kFBAttachLeft, "")
y = FBAddRegionParam(0,FBAttachType.kFBAttachTop, "")
w = FBAddRegionParam(0,FBAttachType.kFBAttachRight, "")
h = FBAddRegionParam(0,FBAttachType.kFBAttachBottom, "")
self.tool.AddRegion('mainLayout','mainLayout', x, y, w, h)

self.tool.OnShow.Add(self.onShow)

self.layout = VBoxLayout()
self.tool.SetControl('mainLayout', self.layout)

con = FBContainer()
con.OnDragAndDrop.Add(self.onDragDrop)
self.layout.Add(con, 20)


self.getScriptList()
for sl in self.scriptList :
btn = CustomButton(sl[1])
btn.Caption = sl[0]
btn.OnClick.Add(self.onClick)
self.layout.Add(btn, 20)
def show(self) :
ShowTool(self.tool)
def onClick(self, ctl, event) :
FBApplication().ExecuteScript(ctl.scriptPath)
def getScriptList(self) :
if not os.path.exists(self.cfgpath) :
return
f = open(self.cfgpath, 'rt')
while 1 :
buf = f.readline()
if '' == buf :
break
if '\n' == buf :
continue
self.scriptList.append(buf.replace('\n','').split(';'))
f.close()
def onShow(self, ctl, event) :
if False == event.Shown :
self.saveScriptList()
def saveScriptList(self) :
f = open(self.cfgpath, 'wt')
for sl in self.scriptList :
f.write('%s;%s\n'%(sl[0], sl[1]))
f.close()
def onDragDrop(self, ctl, event) :
if FBDragAndDropState.kFBDragAndDropDrop == event.State :
for c in event.Components :
path = c.LongName
if 'py' != path.split('.')[-1] :
continue
p = re.compile('Drive ([A-Z])(.*)')
m = p.match(path)
if None == m :
continue
path = m.group(1) + ':' + m.group(2)
name = path.split('\\')[-1].split('.')[0]
self.scriptList.append([name, path])
btn = CustomButton(path)
btn.Caption = name
btn.OnClick.Add(self.onClick)
self.layout.Add(btn, 20)



scriptLuncher('MBScriptLuncher', 300, 280).show()



ファイルのドロップを受け付けるコントロールが限られているのでFBContainerを使った

レイアウトにOnDragAndDropを付けてくれればいいのに


あと、折角追加したボタンがコンフィグファイルに保存されないのはアレなのでウインドウを閉じる時に保存するようにした



次回は選択されているオブジェクトを取得してFCurveをいじる

2010年12月11日

MotionBuilder スクリプトチュートリアル GUI編1

MBのスクリプトを書く機会があったのでチュートリアルっぽいのを書いてみる。
一応書く予定は
ウインドウとかボタンやリストみたいなコントロールなどGUI
選択されているオブジェクトの取得
FCurveへのアクセスと修正
Relationコンストレインの追加
Storyのトラック、クリップの取得、修正、追加
Storyのショットトラックを参照してプレイブラストを作る


今回はウインドウの表示から基本的なレイアウトまで
続きを読む
posted by ika at 15:05 | Comment(8) | TrackBack(0) | MotionBuilder | このブログの読者になる | 更新情報をチェックする

2010年08月01日

[XSI ICE] ICEで布シム

XSIには紐シムが無いのでICEで出来ねぇものかと色々調べてたら布シムが出来た。

SimulateParticlesノードを使ったもの

ベレ法で計算したもの

 

続きを読む
posted by ika at 22:30 | Comment(0) | TrackBack(0) | XSI ICE | このブログの読者になる | 更新情報をチェックする

2010年05月19日

デジハリの公開講座に行ってきた

「人の心を動かす配色術」 っていうセミナーに行ってきた。

デザインの仕事を5年くらいやってたんだが、平面構成とか色彩心理は独学というか周りの人やディレクターに教わりながら覚えたので、 ちゃんとした先生に教わるのもいいかなと思って申し込んでみた。無料だし。
多分ウェブデザイナー向けのセミナーだと思うけど、 こういうのはウェブに限らず映像制作やゲーム制作などビジュアルに関するものなら何でも有効だと思うので覚えておいて損はないかと。
こういうのを知ってると絵コンテを見て演出意図がなんとなくわかるので、リテイクは減るし、 上手くいけば監督に名前を覚えてもらえるしで良いこと尽くめですよ。

で、セミナーの内容は色紙を使った心理テストだった・・・。

無料セミナーなのでこんなもんかとは思ったものの凄ぇ損した気になったので、 勉強してきたって気分になれるように今まで覚えたものをまとめてみた。

20100518

単色だとこんな感じ。色相とトーン(彩度+明度)を分けるといちいち色の名前とか覚えなくていいのでわかりやすい。
単色ってことは滅多にないので他の色と組み合わせた時に目的の色が引き立つような配色をする。

実は、組み合わせや大きさの割合とかでイメージが変わってくるのでこんなに単純じゃないけどね。

posted by ika at 01:49 | Comment(0) | TrackBack(0) | 雑記 | このブログの読者になる | 更新情報をチェックする

2010年04月29日

[XSI ネットビュー] ネットビューでローカルwikiを使ってみる

今までネットビューなんて使ったことが無かったんだけど、 今の職場ではみんな好き勝手にデータを管理してるから何かトラブった時に原因究明が困難なので、 ネットビューを使ってルールを強制しちまおうと思って使い始めてみた。

続きを読む
posted by ika at 02:01 | Comment(0) | TrackBack(0) | 制作環境 | このブログの読者になる | 更新情報をチェックする

2010年01月05日

XSIスクリプト] 小物スクリプト

ここに追加。
「トラックバック受け付けるようにすれば詳しい使用法書かなくて済むじゃん」と、わざわざ実装したのにスパムまみれで挫けそうです。

・Constraint.js
ここにあるのを修正したヤツ
プログレスバーを追加して、CnsCompボタンを反映させるようにした。

・CopyNullShape.js
ヌルのサイズとアイコン?シェイプ?見た目?をコピーする。
ヌルを選択→実行→他のヌルをピック

・CopyWireColor.js
junkiさんのはいカラさんから自分の使う所だけ抜き出した。
色が微妙に変わってしまう所は直した。のでver6以降でないと使えない。
オブジェクトを選択→実行→他のオブジェクトをピック

・DuplicatePlus.js
ここにあるヤツの修正
複製の代わりにヌルに置き換える機能を追加

・LockMotion.js
移動と回転の制限を0に固定する。
書いたはいいけど使い勝手が悪すぎてあまり使ってない。
オブジェクトを選択→実行

・ MatchEnvWeight.js
同ポジにある他のメッシュのウエイト値をコピーする。 デフォーマが足らなかったら追加する。
普通ならあまり使わない類のものだけど、稀にボーンを動かすと隙間が出来るモデルを受け取った時に使う。
こういうモデルを受け取った場合は他のモデルもこんな感じなので備えあれば憂いなしって感じ。
頂点を選択→実行→メッシュオブジェクトをピック

・RemoveUnusedDeformer.js
使ってないデフォーマをエンベロープから外す。
3つくらいしかデフォーマを使ってないのに60個くらいデフォーマが付いてるメッシュがあったので。
こういうモデルを受け取った場(ry
エンベロープのついたオブジェクトを選択→実行

・RenameSequence.js
選択順に連番をつける。 Shiftを押しながら実行した場合、ベース名は最初に選択したオブジェクトの名前になる。
オブジェクトを選択→実行→パネルが開く
オブジェクトを選択→Shiftキー+スクリプトを登録したボタンを押す→最初に選択したオブジェクトを元にリネーム

・ReplaceImage.js
イメージのパスを変更する。
命名規約が変わった時に使うと便利。
イメージソースを選択→実行

・SelectIslandFromComponent.js
頂点、 エッジからポリゴンアイランドを選択する。
インストール型なので Application>Pluginsフォルダにコピーしてから使う。
一応コンポーネントモードの時の右クリックメニューで実行できるようにしてある。
頂点またはエッジを選択→実行→選択された頂点、エッジを含むポリゴンアイランドが選択される

 

2009年11月14日

自主制作アニメ「たいせつなじかん」を観た(2回)

「たいせつなじかん」演出ノートその1

コイツコイツがちゃんと観て感想をブログに書くべきだなどと煽るもんだからつい。
本当はね、おれの15分を無駄にしやがってクルァ!とか言ってたんだけどね。少しマイルドになってます。

ネタバレ有り

続きを読む
posted by ika at 22:16 | Comment(1) | TrackBack(0) | 雑記 | このブログの読者になる | 更新情報をチェックする

Unityが無料で使えるようになったので

Unityというミドルウェアが無料になったので試してみた。

20091114
Unityのプロジェクトファイル
ビルドしたexeファイル

↑はDQ9みたいに先頭のキャラを動かすと後ろのキャラがついてくるだけのもの。
作業時間は6時間くらい。キャラを制御するスクリプトはチュートリアル付属のスクリプトを参考に必要最低限のものに作り直した。
マニュアルとかチュートリアルとか情報が多いので取っつき易かった。

3DオブジェクトはFBXが対応してるので3DCGソフトは選ばなそう。
FBXのテイクに対応しているのでモーション作成はMBを使うと管理が楽かも。

UnrealEngineの無料版も試してみたけど、マニュアルがライセンス契約しないと見れないっぽいので挫折。

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。