myara CG blog

CG Design Blog. Thoughts, experiments and experiences.

Maya | mHide 表示・非表示の切り替え

モデリングしている時にオブジェクトの一部のフェースだけを非表示にしたい時が多々あります。

Mayaにはこのような機能がないですね。

選択されたフェースの非表示機能がないですが、逆の機能があります。Isolationで選択されたフェースだけが表示するようには出来ます。この機能を利用して、フェースの非表示スクリプトを書いてみました。

Softimage と同じように1ボタンに纏めたくて書いたスクリプトにこの機能を加えて公開します。

http://skymill.co.jp/wordpress/?p=876

ハードサーフェースとノーマルマップ実験

ハードサーフェースのノーマルマップが綺麗に出るようなちょっとした実験をして、分かったところは記事にまとめてみました。

今回は会社のブログで書いてみたので、良かったら見てみてください。

http://skymill.co.jp/wordpress/?p=861

Maya | mCamera : FOV 変換 : Maya SI ZBrush 3DCoat のカメラを合わせる

Maya バージョンも作ってみました。
PySideで色々やってはいたんですが、ちょっと難しかったからとりあえず昔ながらのMaya UIコマンドで作ってみました。

以下の動画を見れば分かるかと思いますが、ZBrushの画角はピッタリ合っていません。画角が近いところまで行っているようですが、カメラ移動(ズーム)の調整が必要です。

ZBrushのカメラの細かい情報はどこにも見当たらない為、これ以上修正するのは難しいです。

ないよりマシということで、


mCameraFOV : Maya from myara on Vimeo.



DOWNLOAD

インストール方法
MayaのScriptsフォルダに入れる

実行方法
Python で:

import mCameraFOV



それでは、また来年になっちゃうかもしれない^^;

FOV 変換 : Maya SI 3DCoat ZBrush のカメラを合わせる

作業している時に、SoftimageからMayaに変換したり、Zbrushでスカルプトして、3DCoatでペインティングなどのワークフローを使っています。3Dソフトによってカメラの設定が異なる為見栄えが変わってしまい混乱することもあります。

それで、全部同じ設定にしてみよう!と思っても、3Dソフトによって3DソフトによってFOVの設定方法も異なります。

FOVはこんな感じになります

------------------------------
■Maya : Focal Length
35

■Softimage :
Field of View Angle Horizontal
perspective : 28.072
camera : 53.638
※ Vertical(垂直) も可能

■ZBrush : Field of View Angle Diagonal
50

■3DCoat : Field of View Vertical
50
※ 3DCoatの情報は見つからなかったので、色々試してみたら垂直かなって感じです。
------------------------------

これじゃ、どう合わせれば良いのか分からない !

今までは合わせられれば良いなと思いながら全く何もせずになんとなーく作業していた。
たまになんとなーく合わせていました。見た目で。

最近Mayaのツールばっかりを書いているから、ついでにこれもやってみようと思って、
FOVを変換してくれる関数を書いてみました。

これは単なるPythonでの計算だからSoftimageでもMayaでも実行が出来る。

スクリプトとかは分からない人へ:このコードを全部コピーして、SoftimageかMayaのスクリプトエディターにペーストしてから
実行コマンドを足してください。実行コマンドについては最後に書いておきます。

そそ、最近はMaya用ツールばっかり書いてるからもう Python しか使っていません。
とは言ってもまだ慣れていないなーPythonらしい書き方に。 あれだね、かっこよくて色々省略する書き方。
無駄にコードが長くても、とりあえず動けば良いって感じで色々書いてる。

因みにMayaは使いにくいけど、Mayaのスクリプトも書きにくい・・・。便利なところもあるけど、だいたいは書きにくい。
Pymelに少し助かってるけど、Softimageみたいにオブジェクトの上手い使い方はまだ良く分かってない。
ミスった時もどこが悪いかMayaのエディターは教えてくれないし。

ま、その話は置いといて


from __future__ import division
import math

def convertFOV(in_value=35, in_type=0, out_type=3, aspect=16/9):
#type:
#0 = Focal Length
#1 = FOV_H
#2 = FOV_V
#3 = FOV_D

film_width_35 = 36
film_height_35 = film_width_35 / aspect
film_diag_35 = (math.sqrt((film_width_35 * film_width_35) + (film_height_35 * film_height_35)))

flen_mult = 1

film_height_35 = math.sqrt( (film_diag_35*film_diag_35)/((aspect*aspect) + 1) )
film_width_35 = aspect * film_height_35

sensor_width = film_width_35 / flen_mult
sensor_height = film_height_35 / flen_mult
sensor_diag = math.sqrt((sensor_width * sensor_width) + (sensor_height * sensor_height))

#From Focus Length (Maya)
#-----------------------------------
if in_type == 0:
if out_type ==0:
result = in_value
#To FOV Horizontal
elif out_type ==1:
result = 2 * math.atan(sensor_width / (2 * in_value)) * 180 / math.pi
#To FOV Vertical
elif out_type ==2:
result = 2 * math.atan(sensor_height / (2 * in_value)) * 180 / math.pi
#To FOV Diagonal
elif out_type ==3:
result = 2 * math.atan(sensor_diag / (2 * in_value)) * 180 / math.pi

#From FOV Horizontal
#-----------------------------------
elif in_type == 1:
#To Focus Length (Maya)
if out_type == 0:
result = sensor_width / (2 * math.tan( in_value * ( math.pi / 180 ) / 2))
#To FOV Horizontal
elif out_type == 1:
result = in_value
#To FOV Vertical
elif out_type ==2:
result = 2 * math.atan(math.tan(in_value * ( math.pi / 180 ) / 2) / aspect)* 180 / math.pi
#To FOV Diagonal
elif out_type ==3:
result = 2 * math.atan(sensor_diag / (2 * ( sensor_width / (2 * math.tan( in_value * ( math.pi / 180 ) / 2)) ))) * 180 / math.pi

#From FOV Vertical
#-----------------------------------
elif in_type == 2:
#To Focus Length (Maya)
if out_type == 0:
result = sensor_height / (2 * math.tan( in_value * ( math.pi / 180 ) / 2))
#To FOV Horizontal
elif out_type == 1:
result = 2 * math.atan( aspect * math.tan( in_value * ( math.pi / 180 ) / 2))* 180 / math.pi
#To FOV Vertical
elif out_type ==2:
result = in_value
#To FOV Diagonal
elif out_type ==3:
result = 2 * math.atan(sensor_diag / (2 * ( sensor_height / (2 * math.tan( in_value * ( math.pi / 180 ) / 2)) ))) * 180 / math.pi

#From FOV Diagonal
#-----------------------------------
elif in_type == 3:
#To Focus Length (Maya)
if out_type == 0:
result = ( sensor_diag / (2 * math.tan( in_value * ( math.pi / 180 ) / 2)) )
#To FOV Horizontal
elif out_type == 1:
result = 2 * math.atan(sensor_width / (2 * ( sensor_diag / (2 * math.tan( in_value * ( math.pi / 180 ) / 2)) ))) * 180 / math.pi
#To FOV Vertical
elif out_type ==2:
result = 2 * math.atan(sensor_height / (2 * ( sensor_diag / (2 * math.tan( in_value * ( math.pi / 180 ) / 2)) ))) * 180 / math.pi
#To FOV Diagonal
elif out_type ==3:
result = in_value

return result


僕的には少し難しい三角法レベルになる為、100%自信があるというわけではありませんが、
大体は上手く行っているようです^^;
fov.gif
↑の画像では3DCoatとZbrushのカメラの移動値などを設定ができるところが分からなくてカメラアングルは手動で合わせてみました。移動値とかありますか?

この関数の使い方は:

convertFOV ( 変換したい数, 数値のタイプ, 変換したいタイプ)
0 = Focal Length ( Maya )
1 = FOV Horizontal ( Softimage )
2 = FOV Vertical ( 3D Coat, Softimage )
3 = FOV Diagonal ( ZBrush )

例:
Maya のデフォルトカメラ(35) を ZBrush に設定したいケース。

Focal Length (0) から FOV Diagonal(3) になるので:

print convertFOV ( 35, 0, 3 )

# 61.0866854386

Pythonが分からない人へ:print は関数の結果をログに残す為のコマンドです。

ZBrush のカメラ設定を 61.09 にすればMayaと同じ見栄えになるはずです。

逆にZBrushのデフォルトのカメラ設定をMayaにしたい場合は:

print convertFOV ( 50, 3, 0 )

# 44.2889031701

Maya のカメラを44.29にすればOK。

PySideとかも良く分からないからGUIとかはまだ作ってないので、
とりあえずこんな感じです。

では、また。

参考にしたページ:
http://sortadone.blogspot.jp/p/zbrush-focal-angle-tutorial.html Read more

SI | mSI2Maya (SoftimageデータをMaya ASCII に)

ある案件でSoftimageの大量のデータをMayaに変換する必要がありまして、
まずは出来るだけ問題なくデータを持っていけるようなワークフローを作りました。

・SI下準備:仕様を確認して修正
・FBXでエクスポート
・FBXの設定を確認して、特にFBXバージョン
・Mayaを立ち上げて
・Mayaのプロジェクトフォルダ作成
・SIで使用されているテクスチャファイルをMayaプロジェクトフォルダにコピー
・MayaでFBXをインポート
・UVマージ、ネームスペースなどのクリーンアップ
・.maとして保存

全く難しくはないですが、これを何十体でやると結構面倒くさいですね。
手間が掛かるし、ヒューマンエラーで何か忘れたりします。

ミスを避けるようにとりあえずFBXの決まった設定と決まったバージョンで書き出せるようにFBXエクスポートスクリプトを作りました。
こんな感じです:


//JScript
//-------------------------------
var fbxVersion = "2011"
//-------------------------------

var r = ActiveSceneRoot
var AP = ActiveProject
var fbxPath = AP.fullname + "\\" + AP.ActiveScene.name + ".fbx"
var fbxProp = r.properties("ExportFBXOptions")

if (!fbxProp ) fbxProp = r.AddProperty( "ExportFBXOptions" )
fbxProp.ExportSelection = 1
fbxProp.ExportHardEdges = 1
fbxProp.ExportSkins = 1
fbxProp.FBXSDKVersion = "FBX"+ fbxVersion + "00"
FBXExport( fbxPath )

var oClips = ActiveProject.ActiveScene.ImageClips
for ( var i=0; i < oClips.Count; i++ ) {
oClips(i).Xmax=1; oClips(i).Ymin=0;
}


が、もっと自動的にしたい!
もっと速くて楽に仕事したい!

と思い、以上のワークフローを全部1クリックで出来るように色々書いてみました。
ポイントは:MayaBatchです。

これを使ってMayaを立ち上げずにmaに保存する事が出来ました。

ツール名は単純に mSI2Maya にしました。

次は mMaya2SI ですね・・・。


mSI2Maya

DOWNLOAD

mSI2Maya from myara on Vimeo.



■インストール方法

xsiaddon
SI のビューポート上に xsiaddon をドラッグ&ドロップ。もしくは File > Add-on > Install。

ワークグループ使用されている場合はFile > Plug-in Manager > Tree でワークグループを選んで右クリック Install .xsiaddon...

■使い方

File > Export > mSI2Maya

Selection Only
選択のみ

Script(.vbs, .js, .py)
Softimage上でエクスポートする前に実行したいスクリプトのパスをここに設定が出来ます。

FBX Export Folder
FBX ファイル、Mayaのログファイル と mSI2Mayaが使うファイルが書き出されるフォルダ

FBX Version
Maya フォルダから自動的に取得されますが、チェックを入れるとFBXのバージョンは指定できます。
FBX201600
FBX201500
FBX201400
FBX201300
FBX201200
FBX201100
FBX201000
FBX200900

Open in Maya
チェックを入れるとMayaを開いて、変換されます。
チェックを入れないとMayaBatchを使ってma保存されるだけです。

Maya Folder
Maya がインストールされたフォルダ
例:C:\Program Files\Autodesk\Maya2014

Maya Project Folder
新しく作成されるMayaのプロジェクトフォルダのパス。
デフォルトの設定ではSIプロジェクトの中になります。

Mel Script
FBXはMayaで読み込まれてから実行したいmelです。
デフォルトのmSI2Mayaではネームスペースとテクスチャパスだけを直してくれるmelが入っています。

■注意:
・プロジェクト内のPictures フォルダだけを使用されていることを前提として動きますので、
それ以外のフォルダを使っている場合はテクスチャファイルのコピーは機能しません。

・FBXの設定が出来ません。こちらで使っている設定になります。
FBX設定を変更したければ、コードの FBX Settings のところを編集して下さい。

・melファイルを作成する時に、MayaBatchは自動的にプラグインを実行しないので、
プラグインを使う場合は読み込むコマンドを入れてください。(例:loadPlugin "fbxmaya")

・melファイルでエラーが起こった場合はMayaBatchは強制終了になります。ログを確認して下さい。

・シンプルなキャラデータだけを想定されています。リグなどは持っていけません。
リグやもっと複雑なデータの場合はSI スクリプトとmelスクリプトを追加する必要があります。

・バグがまだ残っているかもしれません。弊社のプロジェクトでしか試していない為、違う環境でエラーが発生する可能性もあります。その時に連絡下さい。



■何をするプラグイン(少しテクニカルな説明):
・Softimageでスクリプトを実行します。(オプショナル)

・FBXプロパティを作成して設定します。
FBXのバージョンは指定されていない場合は、指定されたMayaフォルダのパスから"20"から始まるストリングを探して、
FBXのバージョンの形式に変えて設定されます。

・選択されているオブジェクトをFBXとして書き出します。
※デフォルトではmSI2Mayaフォルダに出力されます。

・FSO.CreateFolder などを使って、Mayaのプロジェクトフォルダを作成します。
Mayaのプロジェクトフォルダとして認識されるように
「C:\[ユーザー名]\Documents\maya\projects\default\workspace.mel」
をこのフォルダにコピーします。

・SIプロジェクトのPicturesフォルダ内で使用されているテクスチャをMayaプロジェクトのsourceimagesにコピーします。

・Mayaで実行するFBXインポート用のmelをmSI2MayaフォルダにFSO.CreateTextFileで自動に作ります。
melファイルは指定された場合は、このFBXインポート用のmelで呼びます。

・WScript.Shell を使って MayaBatch.exe もしくは Maya.exe を開いてFBXインポート用のmelを実行します。
MayaのログファイルはmSI2Mayaフォルダに残ります。何かエラーが出た場合はここをご確認下さい。

・指定されたmelファイル(オプショナル)を実行して、Maya ASCII ファイルは保存されます。

・今回使用された設定をプリゼットファイルとしてSIプロジェクトないのmSI2Mayaフォルダに保存されます。
次回はこのプリゼットファイルは自動に読み込まれます。


それでは・・・
Previous page Next page