2013年05月08日

[Mayaスクリプト]野良スクリプトランチャー

2m級の巨人が作ったコレのMaya版です。
Mayaを使うことを強いられ一年強。スクリプトが増えてきたので作ってみた。
本当に使えねぇよMaya、Mayaなんて無くなればいいのに。と呪いの言葉を吐いている毎日です。
いつものように「Mayaなんか使わないでsoftimage使おうぜ」とか言ってたら、新しく入った若いのが

「softimageって何ですか?」

と抜かしやがった。今までは

「softimage使ってる人を見たこと無いです」

だったのに。

続きを読む

2012年06月23日

[Mayaスクリプト]小物スクリプト

まぁアレだよ。フリーのMaya使いが作ったデータって凄い汚いよね。

半年振りの更新ですよ。納品終わってちょっと暇になったので。
「仮納品お疲れ様でした」なんていうメールが来たので油断できないけど!
もうね、MotionBuilderでアニメーションつけますよって話だったのによくわからないリグが組んであるキャラモデルが来たりしてね。
コントロールリグとバウンティングリグが同じ階層にあったり、分かれてるって思ってコントロールリグを削除したら一部のメッシュも削除されちゃったり、十分の一のサイズで寄越しやがったからGlobalScaleってノードがあったので10倍の大きさにしたらキャラが長細くなったりで、大変笑わせて頂きました。
続きを読む

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年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日

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

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

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

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

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

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

2009年07月05日

[XSIスクリプト] 小物スクリプト色々

小物スクリプトをいくつかアップ。ついでにスクリプト置場を整理した。
スクリプト置場を暫く放置してたらトラックバックスパムが3000くらいあってちょっと引いた。
いままではSkyDriveにスクリプトをアップしてあったけどダウンロードするのが面倒くさいので場所を移動した。

・AlignAxis.py
選択した頂点を軸や頂点、ポリゴンに揃えて整列させる。

・Bone2Null.js
ボーンからヌルを作る。

・ConstraintAssist.js
junkiさんの果てしなきコンストレインのパクリ。 探すのが面倒だったので自作した。
オリジナルとの違いは、こっちはPositionとPoseの二つだけ。補正モードは自分で指定しなくちゃいけない。 いちいちPPGが開かれる。
果てしなきコンストレインの方が使いやすいよ。

・DuplicatePlus.js
他のモデルに名前を変えずに複製したり、 プリフィクスを追加して複製したり、文字を入れ替えて複製したりする。
ブランチ選択に対応してる。

・NullBone.js
ヌルをボーン風な見た目に変える(ボックス表示だけど)。 実はX軸にしか対応してない。

・SaveEnvWeight.js
エンベロープのウエイトをファイルに保存する。カレントプロジェクトフォルダの直下に保存される。
ボーン変形後の形状を保ちつつ再度エンベロープを適用したい時に使ってる。

・ SelectionToClipboard.py
選択されているオブジェクトの名前をクリップボードに送る。
その後にテキストエディタに貼り付けて正規表現で成形すると、シノプティックを作る時に便利。

・ SetEnvlopeFromPreset.js
SaveEnvWeightで保存したファイルを使ってエンベロープを復元する。

・Uninstantinate.py
インスタンスを実体化させる。

・ OpenFolderMenuPlugin.py
これもjunkiさんのGo!Go!フォルダのパクリ。
違いはXPOPを使わない、ファイルメニューに追加される。カレントプロジェクトとワークグループのみ。
ショートカットの割り振りがもう無かったり、そんなに開きたいフォルダなんて無ぇよゴルァ!って人向け。

 

2009年01月04日

[XSIスクリプト] 小物スクリプト追加

Pythonで書いたスクリプトがたまってきたのでスクリプト置き場に追加しました。

BoneRenamer.py
チェインルートの名前を元にボーンをリネームします。
↓こんなの
root_○○
 -bone
  -bone1
 -eff

root_○○
 -○○1
  -○○2
 -eff_○○
↑こんな感じにリネームします
ボーンが一つの場合はケツに連番をつけません。

CloneSymmetry.py
選択したメッシュをクローンまたは複製して、SymmetrizePolygonsを適用するかXスケールを-1にします。
他のモデルに移したいときはモデルも選択しておきます。選択してない無い場合はピックします。

Constraint.py
コンストレインを命名規約にそって適用します。
最初はjunkiさんのスクリプトを使っていたのですが、 シャドウリグの指のコンストレインを設定してたのですが同ポジでピックし辛い上に本数が多いので
ゴルァ! (ノ`皿´)ノ┻━┻・..。;・'
一括で出来るヤツを書きました。
コンストレインされる人を選択して実行します。
・Constraint コンストレインの種類です。デフォルトはPoseです。リスト化しようとしたけど面倒なのでやめました。 直接書き込んでください。
・Constrained コンストレインされる人のプリフィクスです。
・Constraining コンストレインする人のプリフィクスです。
選択されているオブジェクトのプリフィクスをConstrainingに入力した文字に置き換えた人が居るとソイツにコンストレインします。
私の場合は、コントロールリグのボーンはプリフィクス無しで、シャドウリグのボーンには「sdw_」というプリフィクスをつけているので、 シャドウリグのボーンを選択してConstrained=sdw_、Constraining=空白、 と入力して実行すると一発でコンストレインできます。
Left、Rightと入力してSymmetryコンストレインを適用とかも出来ます。

MatchRot.py
MatchTfm.py
リグが複雑化するとMatchTransformの挙動が怪しくなるので書いたスクリプトです。
MatchRotation、MatchAllTransformsと同じ動きをします。

MoveCenterToObject.py
メッシュの形状を保ちつつ原点の位置を他のオブジェクトの位置に合わせます。
メッシュオブジェクトを選択して実行します。
複数選択不可。複数選択している場合は2番目に選択したオブジェクトに位置合わせします。 一つしか選択してない場合は位置合わせしたいオブジェクトをピックします。

RemoveShape.py
選択した頂点のシェイプのオフセットを0にします。
左右対称でシェイプを作って後で片方を削除する時に使ってます。
頂点とShapeクラスターの中から0にしたいシェイプを選択して実行します。

RenameReplace.py
RenameSequence.py

RenameSequenceHierarchy.py
リネームスクリプトです。うっかりメインシェルフのデータを消してしまったのでPythonで書き直しました。
特定の文字列を他の文字列に置換します。DuplicateSymmetry等でケツについた数字を消したりも出来ます。
選択順にケツに連番で数字を追加します。名前は最初に選択したオブジェクトの名前を使います。
選択したオブジェクトの子供たちのケツに連番で数字を追加します。名前は選択したオブジェクトの名前を使います。

ResetScaling.py
子供たちの位置がずれないようにスケールを1にします。メッシュオブジェクトの場合は形状と原点の位置がずれないようになってます。

 

2008年09月06日

[Python][MotionBuilder スクリプト][Maya] MotionBuilderやMayaでwxPythonを使ってみるテスト

スクリプト置き場にサンプルスクリプトをいくつかアップした。

MayaPipe.py
Mayaに外部プログラムからMELコマンドを送るクラス
あらかじめMayaで「commandPort -name ":6666"」を実行しておく必要がある。 6666の所はポート番号で任意の数字を入れる。デフォルトは6666。

test_MayaPipe.py
上のMyaPipeのテスト用スクリプト
エディットボックスに入力したMELコマンドをMayaに送る。

MBPipe.py
MotionBuilderにPythonコマンドを送るクラス

RandomKey.rar
選択されているオブジェクトにランダムな値のキーを打つスクリプト
「RandomKey_GUI.pys」でウインドウが開く
「RandomKey.py」が実行部分。MBからpyファイルを実行する方法がわからなかったのでモジュール化した。 MBPythonのパスが通っているところにコピーしておく。

test_wxListCtrl_FileZip.pys
wxPythonのテスト
zipファイルをドロップすると格納されているファイルの一覧を表示する

参考にしたサイト
http://www.not-enough.org/abe/manual/openmaya-au03/rmc.html
http://chrisevans3d.com/tutorials/mbui.htm
http://www.harukaze.net/~haruka/wxpython/index.html

 

2008年07月31日

[MotionBuilderスクリプト] リネーム

もうね、命名規約とか最初に決めておいて欲しいんですよ。
他の人の作業を引き継いだんですが、ネームスペースを付けずに何体もキャラを読み込んだもんだからボーンの名前のケツに数字がついちゃってます。
MBで名前を変えちゃうと元のソフトにマージバック出来なくなってしまうのでかなり困ったことになります。実際、一部しかマージバック出来なくて、原因を探るのに1時間ほど時間を潰しました。さらにチマチマとリネームすること30分。面倒臭くなってスクリプトを書くこと1時間半。3時間ほど無駄にしてしまいました。
MBで作業する時はネームスペースつけてからエクスポートしましょう。約束だ。
そんなわけで簡易リネームスクリプトを書きました。

Rename.py

2008年07月05日

[Python][MotionBuilderスクリプト] Pythonはじめました

MBのオイラーフィルタが余りにもクソなんでスクリプトで何とかできねぇかなと思いつつも、 オイラーフィルターってどういう仕組みなんだよ?

という訳で、いつもの履歴保存のスクリプトを書いてみた。他はテスト用。

続きを読む

2008年06月25日

[Mayaスクリプト] MELはじめました

職場で使うソフトがMayaとMotionBuilderに変わったので、 XSIでよく使っていたスクリプトをいくつかMayaに移植しました。

http://ika.fool.jp/script/mayascript.php

SaveHistory
履歴保存スクリプト。XSIのはコレ
試しにPythonでも書いてみた。

toggleXRay
XRay表示のオン・オフ

isolateViewSelected
選択オブジェクトのみ表示。
XSIのモデルビューっぽいのをMayaで使いたかったので。

matchSkinWeight
選択した頂点のウェイトを指定した頂点のウェイトに一致させる。

selectSkinDeformer
スキンに割り当てられているボーンを選択。
スキンのデフォーマーを選択するのにハイパーグラフをいちいち開くのが面倒なので作った。

 

2008年04月20日

Python用キーワード定義ファイル

 PeggyのPython用キーワード定義ファイルを作りました。
まだ基本的なキーワードとごく一部のピルトイン関数しか登録していないので、Pythonを使い始めたら更新していく予定です。

Peggy
 高機能なテキストエディタ
 フリーのPeggyPadがお奨めです

ac_python.kwd
 Python用キーワード定義ファイル

 

2008年03月16日

[XSIスクリプト] スクリプト置き場作りました

http://ika.fool.jp/script/xsiscript.php

 

2008年03月09日

[XSIスクリプト] RigTool更新

RigToolのバグフィックスと幾つかスクリプトを追加しました。

ダウンロード

 

続きを読む

2008年03月07日

[XSIスクリプト] ExtrudeByCurveの使い方

コイツの中にあるExtrudeByCurveの簡単な使い方です。
公開して3ヶ月以上経っていますが、今更使い方です。しかも簡単にです。このスクリプトを使うと簡単に何か出来るというわけではなくて、 簡単に説明してるだけです。
まぁあれですよ、こういうのは使ってみて体で覚えるもんです。
但し、このスクリプトでは動作保証外のことをやっているので、余り無茶はしないようにしてください。 UVやクラスタの設定が出来ない程度なので大丈夫だとは思いますが。たぶん。

スクリプトオペレータでメッシュの追加や削除は動作保証外らしいので、C++で書き直す予定ではあります。優先順位は低いですけど。
で、少し使ってみて改善しなきゃなぁと思うところが幾つかあるので、それもついでに対応する予定です。
 ・プロファイルカーブの操作性の向上
 ・ガイドのカーブの形状によってフリップするところがあるのを回避
 ・複数ポリゴンの押し出しが出来るようにする
他に要望があればコメントください。出来る範囲で対応します。

前置きが長くなりましたが、以下使い方です。

 

続きを読む

2008年02月27日

[XSIスクリプト] 小物スクリプトいろいろ

SkyDriveというオンラインストレージサービスを試しに使ってみました。
アップしてあるスクリプトは自由に改変、再配布しても構いません。
スクリプトの改良や使用例などがありましたら、是非トラックバックをして下さい。使い方を書く手間が省けるので(;´∀`)

XSIスクリプト
アドオンにするまでも無いようなスクリプトをアップしてあります。

XSIアドオン
用途別にスクリプトをまとめてアドオンにパッケージしたものをアップしていきます。

XSIスクリプト(インストール版)
用途別に纏まっていないけどコマンド登録した方が便利なものをアップしてあります。

 

2008年01月20日

[XSIスクリプト] 履歴保存スクリプト

SaveHistory.xsiaddon - 6.3 KB

最近仕事が忙しくてブログに書くネタが無いので、自分がよく使うスクリプトをアップしてみた。
今の職場では自分の担当分のほかに、人の作ったシーンの修正やらクオリティアップやらをやることが多いのですが (なので締め切り前に仕事が急増するTT)、もうね、ファイル管理の仕方が人それぞれ違うので大変なんですよ。 _newと_ver3ってどっちが最新なんだよ!、と問い詰めたい。外注に出してたシーンだと問い合わせもままならない。で、 このスクリプトですよ。
そして、さっきの人がこれを使うとコメントが全部「最新」ですよ。orz もういいです。

履歴ファイルはカレントプロジェクトのフォルダに「History」フォルダを作って
 シーン名[年月日][時分秒][コメント].scn
というファイル名で保存してあります。
Sceneフォルダのファイル数が増えないので、カット数が多い日でも安心です。

 

続きを読む

2008年01月13日

[XSIスクリプト] VC++2005 ExpressEdition でプラグイン作るときの覚書

ExtrudeByCurveをC++で書き直そうと思ったんだけど、ビルドで躓いたので忘れないようにメモ。

・bufferoverflowU.libが見つからないというエラーが出てビルド出来ない。

「Microsoft Platform SDK」が必要。 ExpressEditionには含まれていないので別途インストールする必要がある。
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/

・対象コンピュータの種類 'x64' と競合していますというエラーが出てビルド出来ない。

.vcprojファイルを開いて
AdditionalOptions="/MACHINE:AMD64" を
AdditionalOptions="/MACHINE:I386" に書き換えたらビルドできた。
http://ml.tietew.jp/cppll/cppll_novice/thread_articles/1275

テスト用のプラグインのビルドが通ったら満足しちゃって、C++に移植とかもうどうでもよくなってきちゃったよ。

広告


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

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

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


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。