メモ、fbx開発してるみたい
Void Ability
2013年12月5日木曜日
2013年11月30日土曜日
Unity Editor : カスタムウィンドウをマウス位置に表示(PRO)
UnityEditor上で、
マウスの位置にパレットを表示したい
Unity PROなら以下の作業で可能でした
のなかにある"System.Windows.Forms.dll"ファイルを
Assets/Pluginsの中に放り込む
2.以下のコードでマウスの位置を取得する
int x = System.Windows.Forms.Cursor.Position.X;
int y = System.Windows.Forms.Cursor.Position.Y;
おそらく、WindowsAPIを利用してますので、
Windows限定でないかと思います。
Macの方はわかりません
これと、ショートカットを組み合わせると、
マウスの位置にwindowを出現する事が可能になります。
PRO限定ですが orz
■余談
開発の話か、開発ツールの開発の話かわかりにくいw
開発しにくいですw
マウスの位置にパレットを表示したい
Unity PROなら以下の作業で可能でした
手順
1.C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0のなかにある"System.Windows.Forms.dll"ファイルを
Assets/Pluginsの中に放り込む
2.以下のコードでマウスの位置を取得する
int x = System.Windows.Forms.Cursor.Position.X;
int y = System.Windows.Forms.Cursor.Position.Y;
おそらく、WindowsAPIを利用してますので、
Windows限定でないかと思います。
Macの方はわかりません
これと、ショートカットを組み合わせると、
マウスの位置にwindowを出現する事が可能になります。
PRO限定ですが orz
サンプル
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
using System.Collections;
public class ttCustomTools : EditorWindow
{
[MenuItem("TERA Tools/ ttCustomTools %t")]
public static void Open()
{
ttCustomTools window = EditorWindow.GetWindow();
//Windows System
int x = System.Windows.Forms.Cursor.Position.X;
int y = System.Windows.Forms.Cursor.Position.Y;
window.position = new Rect( x - 100, y - 20, 250, 50);
window.Show();
}
void OnGUI()
{
//ボタンと他のスクリプトの起動
if( GUILayout.Button ("Create SimplePlane") )
{
Debug.Log("CreateSimplePlane");
CreateSimplePlane sp = new CreateSimplePlane();
sp.Create();
Debug.Log("CreateSimplePlane Finish");
}
if( GUILayout.Button("Create Particle") ){
Debug.Log ("Create Particle system");
CreateShurikenParticle sp = new CreateShurikenParticle();
sp.Create();
}
}
参考
how to enable System.Windows.Forms for drag and drop functionality with outside applications■余談
開発の話か、開発ツールの開発の話かわかりにくいw
開発しにくいですw
2013年11月25日月曜日
Panorama : Nex-c3 + Madoka + TomShot360
巷ではリコーの全周囲撮影がはやってますが、
それを横目で見ながら、独自路線を orz
なるべく低コストかつ、
軽量のHDRパノラマです
TomShot360がついたので試写してみました
・Madoka
・TomShot360
・三脚
・PTGUI(合成ソフト)
2ショット

画像の補正はしてません、
うーん、2ショットはちょっと厳しいかな~
3ショット

いけてますね。まったく問題ないようです。
PTGUIまかせで、画質の補正などもしてみました。
7度の角度がついてますので、
足元も撮影しないと全周囲は無理なのですが、
CGライティング用途では、
地面は個別で作るので、そのままで :p
しかし、軽い!
機動性はバッチリですね
解像度も横サイズは 5696ありますし、
必要十分かもしれません。

MADOKAで撮影したものを,LightRoomで加工してみました。
空だけならNEX+Madokaで十分よ :p
■余談
Photoshop + Lightroom CCが
月額1,000だったので入った :p
それを横目で見ながら、独自路線を orz
なるべく低コストかつ、
軽量のHDRパノラマです
TomShot360がついたので試写してみました
構成
・NEX-C3(型落ちのピンクw)・Madoka
・TomShot360
・三脚
・PTGUI(合成ソフト)
2ショット
2ショット

画像の補正はしてません、
うーん、2ショットはちょっと厳しいかな~
3ショット
3ショット

いけてますね。まったく問題ないようです。
PTGUIまかせで、画質の補正などもしてみました。
7度の角度がついてますので、
足元も撮影しないと全周囲は無理なのですが、
CGライティング用途では、
地面は個別で作るので、そのままで :p
しかし、軽い!
機動性はバッチリですね
解像度も横サイズは 5696ありますし、
必要十分かもしれません。
おまけ
おまけ
MADOKAで撮影したものを,LightRoomで加工してみました。
空だけならNEX+Madokaで十分よ :p
■余談
Photoshop + Lightroom CCが
月額1,000だったので入った :p
2013年11月21日木曜日
Mari Tips : UV ミラー 超限定的
チラシの裏程度のTip
MARIでのUVミラーの仕方(限定的
1.DCCツールで鏡面のUVを +1しておく
2.Mariで作業。右半分をメインとする。
3.Mariで書き出し。Patchの 最初だけつかう :p ウマー
以上です :p
Softimageさんです:p
こんな感じのオブジェクト
いつも愛想無しでスミマセン
UVはこんな感じで 左のUVを U +1をしてあります
手作業ではめんどくさいのでスクリプト化してあります。
1.-xのポリを削除
2.+xのポリを鏡面化
3.-xのUVのUを+1
という簡単スクリプトです
ウエイトなどには対応しておりません
メニューにボタンを作って登録してます
2.Mariで作業。右半分をメインとする。
mariでの作業に入ります
右半分で作業して
左を捨てればいいだけです
MariのUV状態
このまま、作業できればすごいんですが、
経過状態を確認したいかと思います
そのときは Patchのコピーを使います
こんな感じで1001のUVを1002にコピーすれば左右対称になります :p
これもめんどくさいのでスクリプト化します
1.現在のチャンネル
2.すべてのレイヤー
Udim1001 > Udim1002 にコピペ
ほとんど人が他人のコードです :p
メニュー登録などは組み入れてません :p
3.Mariで書き出し。Patchの 最初だけつかう :p ウマー
以上です :p
起きたあらゆる事象の責をおいません。
copy = mari.actions.get('/Mari/Project/Project Explorer/Quick Copy')
発動は
copy.trigger()
MARIでのUVミラーの仕方(限定的
1.DCCツールで鏡面のUVを +1しておく
2.Mariで作業。右半分をメインとする。
3.Mariで書き出し。Patchの 最初だけつかう :p ウマー
以上です :p
1.DCCツールで鏡面のUVを +1しておく
DCCなんてカッコいいことをいってますがSoftimageさんです:p
こんな感じのオブジェクト
いつも愛想無しでスミマセン
UVはこんな感じで 左のUVを U +1をしてあります
手作業ではめんどくさいのでスクリプト化してあります。
1.-xのポリを削除
2.+xのポリを鏡面化
3.-xのUVのUを+1
という簡単スクリプトです
ウエイトなどには対応しておりません
#QuickLocalSymmetry
app = Application; log = app.LogMessage
def isPolyXCenterThanZERO(in_Polygon,inPntPositionArray):
oPoints = in_Polygon.Points
xMin = xMax = inPntPositionArray[0][oPoints[0].Index]
for i in oPoints:
if xMin < inPntPositionArray[0][i.Index]:
xMin = inPntPositionArray[0][i.Index]
if xMax > inPntPositionArray[0][i.Index]:
xMax = inPntPositionArray[0][i.Index]
if ( xMax - xMin ) / 2 + xMin <= 0:
return True
return False
def getRessPolyIDs(oObj,in_LessThan):
oGeo = oObj.ActivePrimitive.Geometry
oPoints =oGeo.Points
oPositionArray = oPoints.PositionArray
oPolys = oGeo.Polygons
oSub = oPolys.SubComponent
ressPolyIDs = []
if in_LessThan:
for i,oPoly in enumerate(oPolys):
if isPolyXCenterThanZERO(oPoly,oPositionArray):
ressPolyIDs.append(i)
else :
for i,oPoly in enumerate(oPolys):
if not isPolyXCenterThanZERO(oPoly,oPositionArray):
ressPolyIDs.append(i)
#-X側のみ選択
return ressPolyIDs
def moveUV(oSub,uS,vS,uT,vT):
oObj = oSub.Parent3DObject
oGeo = oObj.ActivePrimitive.Geometry
oPolys = oSub.ComponentCollection
oSampleIDs = []
for oPoly in oPolys:
for sample in oPoly.Samples:
oSampleIDs.append(sample.Index)
oSampleClusters = oGeo.Clusters.Filter("sample")
for oCls in oSampleClusters:
for oProp in oCls.Properties:
if oProp.Type == "uvspace":
aUV = oProp.Elements.Array
aUV = [list( aUV[0] ) ,list(aUV[1]), list(aUV[2])]
for sID in oSampleIDs:
aUV[0][sID] = aUV[0][sID] * uS + uT
aUV[1][sID] = aUV[1][sID] * vS + vT
#log(str(aUV))
oProp.Elements.Array = aUV
#log(oProp.Type)
#log(oCls)
def main():
#選択オブジェクト
oSels = app.Selection
for oObj in oSels:
#log(oObj.Type)
if oObj.Type == "polymsh":
#-X側のみ
lessThan = True
ressPolyIDs = getRessPolyIDs(oObj,lessThan)
#log(len(ressPolyIDs))
oGeo = oObj.ActivePrimitive.Geometry
oPolys = oGeo.Polygons
oSub = oPolys.SubComponent
if len(ressPolyIDs) > 0:
oSub.ElementArray = ressPolyIDs
#削除
app.ApplyTopoOp("DeleteComponent", oSub, "siUnspecified", "siPersistentOperation", "")
#シンメトリー
#oPolys = oObj.ActivePrimitive.Geometry.Polygons
op = app.ApplyTopoOp("SymmetrizePolygon", oObj, "siUnspecified", "siPersistentOperation", "")
op(0).symmetryreference = 1
op(0).weldtolerance = 0.001
#-X側のUVを選択
ressPolyIDs = getRessPolyIDs(oObj,lessThan)
oGeo = oObj.ActivePrimitive.Geometry
oPolys = oGeo.Polygons
oSub = oPolys.SubComponent
oSub.ElementArray = ressPolyIDs
#UVを移動
uScale = 1
vScale = 1
uOffset = 1
vOffset = 0
moveUV(oSub,uScale,vScale, uOffset,vOffset)
main()
メニューにボタンを作って登録してます
2.Mariで作業。右半分をメインとする。
mariでの作業に入ります右半分で作業して
左を捨てればいいだけです
MariのUV状態
このまま、作業できればすごいんですが、
経過状態を確認したいかと思います
そのときは Patchのコピーを使います
こんな感じで1001のUVを1002にコピーすれば左右対称になります :p
これもめんどくさいのでスクリプト化します
1.現在のチャンネル
2.すべてのレイヤー
Udim1001 > Udim1002 にコピペ
import mari
print("mirrorPaint")
ver = 0.01
baseUDIM = 0
targetUDIM = 1
def copyUdimToUdim(baseUDIM,targetUDIM,layer_list):
copy = mari.actions.get('/Mari/Project/Project Explorer/Quick Copy')
paste = mari.actions.get('/Mari/Project/Project Explorer/Quick Paste')
for layer in layer_list:
# un-select layers
layer.makeCurrent()
layer.setSelected(False)
layer.makeCurrent()
mari.geo.current().patch(baseUDIM).setSelected(True)
copy.trigger()
mari.geo.current().patch(baseUDIM).setSelected(False)
mari.geo.current().patch(targetUDIM).setSelected(True)
paste.trigger()
mari.geo.current().patch(targetUDIM).setSelected(False)
layer.setSelected(False)
def main():
#startUp
if mari.projects.current() is None:
mari.utils.message("Please open a project before running.")
return False
geo = mari.geo.current()
if geo is None:
mari.utils.message("Please select an object to copy from.")
return False
chan = geo.currentChannel()
if chan is None:
mari.utils.message("Please select a channel to copy from.")
return False
if len(chan.layerList()) == 0:
mari.utils.message("No layers to copy from!")
return False
layer_list = mari.geo.current().currentChannel().layerList()
copyUdimToUdim(baseUDIM,targetUDIM,layer_list)
main()
ほとんど人が他人のコードです :p
メニュー登録などは組み入れてません :p
3.Mariで書き出し。Patchの 最初だけつかう :p ウマー
以上です :pめんせき
このサイトで拾ったスクリプトなどで起きたあらゆる事象の責をおいません。
メモ
Mariのコマンドの取得はcopy = mari.actions.get('/Mari/Project/Project Explorer/Quick Copy')
発動は
copy.trigger()
2013年11月19日火曜日
Mari Script : Selection Group
MariのSelectionGroup、
便利なんだけど、選択以外を、
ロック、アンロック、表示、非表示を
トグル出来ないかと調査・・・。
Selection Groupは取得出来ないらしい
(2013 / 11現在
Selection Groups - adding and removing objects.
orz
便利なんだけど、選択以外を、
ロック、アンロック、表示、非表示を
トグル出来ないかと調査・・・。
Selection Groupは取得出来ないらしい
(2013 / 11現在
Selection Groups - adding and removing objects.
orz
2013年11月15日金曜日
Tools : moma : Mari <> Modo or Maya
moma
なんてツールがあるらしい。
一瞬Foundryの新しいコネクト機能かと思った。
Mariなどの3DPaintToolの難点が、
最終レンダリングに持って行けない事。
これはいくらShaderをカスタマイズしても
最終結果とは異なる。
その垣根を一気に飛び越えた感じ Modoのレンダリング早い :p
まあ、プロダクションがModoや、
Mayaのそのままでレンダリングする事は無いだろうけど
とりあえず驚いた。
Modo も Mayaも持ってないけど、とりあえずベータ参加
Fondryが作るのも間もないかとは思うが・・・。
コードはほぼPython
解析すればSI用も作れない事は無い!?
ちなみにペイントツールと
レンダーがセットになってるのは
・CINEMA4D
・3DsMAX やね。
2013年11月5日火曜日
Blog : Unity : Oculus : プログラミング不要。Unityを使えば誰でも2時間で作れちゃう。OculusRiftでLiveを体感するLukalive!!
プログラミング不要。Unityを使えば誰でも2時間で作れちゃう。OculusRiftでLiveを体感するLukalive!!
だそうです。Oculus早く欲しいね :p
一方Unityでのエフェクト制作は難易度が高いっす。
■余談
まだまだ、製作中に不足物が出てくる状態。
Shurikenは使いづらいし、
EffectEditerとしては最低かも orz
いや、そもそもEffectEditerではないですよね orz
ばしばしアセットを購入して、
調べるのもありだけど、
現在のアセットWFXでも、
得る所が大きい
WFXの仕様を見てみると、
カスタムシェーダを使いUVScrollを実装していた。
このShaderが、ちょっと特殊でShurikenのパラメータを参照してる。
という事は、色の変異はShurikenで行う事が可能ということ。
ようはShurikenのUVScrollの拡張ですな。
とりあえず、改造程度でお茶を濁してるけど。
ちょっと、Shader周りも本気でとりかからないとヤバいかも
しかし、同じようにUVを移動する、
Texture Tile Anime のスクリプトサンプルは、
Shaderではなく、オブジェクトのUVを直接変更させる
スクリプトが多い。
いったいどっちなのだ( * _ *);;;
お絵描きツールの開発はいったん止めて、
コッチに全力でとりかかるるる orz
だそうです。Oculus早く欲しいね :p
一方Unityでのエフェクト制作は難易度が高いっす。
■余談
まだまだ、製作中に不足物が出てくる状態。
Shurikenは使いづらいし、
EffectEditerとしては最低かも orz
いや、そもそもEffectEditerではないですよね orz
ばしばしアセットを購入して、
調べるのもありだけど、
現在のアセットWFXでも、
得る所が大きい
WFXの仕様を見てみると、
カスタムシェーダを使いUVScrollを実装していた。
このShaderが、ちょっと特殊でShurikenのパラメータを参照してる。
という事は、色の変異はShurikenで行う事が可能ということ。
ようはShurikenのUVScrollの拡張ですな。
とりあえず、改造程度でお茶を濁してるけど。
ちょっと、Shader周りも本気でとりかからないとヤバいかも
しかし、同じようにUVを移動する、
Texture Tile Anime のスクリプトサンプルは、
Shaderではなく、オブジェクトのUVを直接変更させる
スクリプトが多い。
いったいどっちなのだ( * _ *);;;
お絵描きツールの開発はいったん止めて、
コッチに全力でとりかかるるる orz
登録:
投稿 (Atom)