myara CG blog

CG Design Blog. Thoughts, experiments and experiences.

SI | MirrorUV

最近またSoftimageのUVツールを作っています。

今更ですねw

もうSoftimageツールなんか作らないと思っていたが、まだ仕事でSoftimageを使っていて、今のプロジェクトも再来年末の発売予定なので、しばらくSoftimageは使い続けます。もっとSoftimageの仕事を増やしましょう!!

で、今日は手が空いていたので実験的にUVのミラーツールを作ってみました。
UVなので、コンポーネントのループはめっちゃ多くなると予測して、久しぶりにPythonではなく、JScriptで書くことにしました。

選択されたUVのポリゴンを探して、そして反対側のポリゴンを探して、サンプルの位置を反対にするというアイデアから書き始めました。 ま、難しくはないと思いますが、ここにたどり着くにはそこそこ時間が掛かっちゃいました。

ループはたくさん使うので、出きるだけ処理を軽くする為に、オブジェクトコレクションを直接にループするのではなく、出きるだけ配列化してからループすることにしました。

例えば、XSI男の頭のサンプルを選択して、選択したサンプルをフェイスに変換したい。
2つの方法は思いつきます。

①コンポーネントのコレクションのループ。
オブジェクトのポリゴンを全てループして、ポリゴンのサンプルをループして、選択したサンプルと同じIDでしたら、そのポリゴンをポリゴンクラスターに入れておく

var oSample2Poly = oObj.ActivePrimitive.Geometry.CreateSubComponent(siPolygonCluster)
it = 0
var oFacets = oObj.ActivePrimitive.Geometry.Facets
for ( var i=0; i < oFacets.Count; i++ ) {
var oFacetSamples = oFacets(i).Samples
var oFacetIdx = oFacets(i).index
theloop:
for ( var j=0; j < oFacetSamples.Count ; j++ ) {
oFacetSampleIdx = oFacetSamples(j).index
for ( var k=0; k < oSampCol.Count ; k++ ) {
if (oSampCol(k).index == oFacetSampleIdx){
oSample2Poly.AddElement( oFacetIdx )
it++
break theloop
}
}
}
}

LogMessage ( it + 'iterations' )

ループの回数: 294
処理時間: 883 ミリ秒

数年前に書いた記事のループの最適化と同じやり方にすると

for ( var i=0, a = oFacets.Count; i < a; i++ ) {
・・・などなど

ループの回数:294
処理時間: 699 ミリ秒

ま、若干早くなりますが、たいした差がない。


で、もう一つの方法は
②オブジェクトの全てのポリゴンをループして、ポリゴンのサンプルをループして、配列にそのIDを入れておく。
選択したサンプルをループして、そのサンプルのIDを使って先ほどの配列でこのサンプルのポリゴンを探して、ポリゴンIDをクラスターに入れる。


it=0
var aSample2Facets = []
var oFacets = oObj.ActivePrimitive.Geometry.Facets
for ( var i=0, a = oFacets.Count; i < a; i++ ) {
var oFacetSamples = oFacets(i).Samples
for ( var j=0, b=oFacetSamples.Count; j < b ; j++ ) {
aSample2Facets[oFacetSamples(j).Index] = oFacets(i).Index
it++
}
}

var oSample2Poly = oObj.ActivePrimitive.Geometry.CreateSubComponent(siPolygonCluster)
for ( var i=0, a = oSampCol.Count; i < a; i++ ) {
oSample2Poly.AddElement( aSample2Facets[oSampCol(i).Index] )
it++
}

LogMessage ( it + 'iterations' )

結果:
ループ回数:2304
処理時間: 30ミリ秒

コードが若干長くて、ループの回数も多いけど、処理は23倍も速い ! 23倍 !
期待以上だな。


えっ? 今更 Softimage  しかも JScript ?
時代は Python だと?

Python は基本的に処理が遅い方なので、MayaでPythonを書く時にもこういう風に工夫して書いたりしています。

例えば、頂点一個ずつの位置を取得するより、オブジェクトの頂点の情報を全部一回配列にとっておくと後の処理はかなり早くなります。


あっ、忘れていた、ツールですね。

今はGUIなどないですけど、スクリプトでよければここにアップしました。
https://www.dropbox.com/s/klutsonp12hp4zs/mirrorUV_script.js?dl=0


Softimage : MirrorUV from myara on Vimeo.



Maya | おちる。ハイパーシェードで落ちる。保存オプションでも落ちる。

うちの従業員にこういう問題がありまして、そのPCを見に行きました。

■ 使用バージョン
Maya 2016 Ext 2 SP 2
Windows 7

■ 現象
ハイパーシェードを開いて、ためしにランバート作成 → クラッシュ!
別名で保存オプションを開く → クラッシュ!
色々やると → クラッシュ!

マヤめ・・・ 


しばらくオートデスクの悪口を言って、怒りが収まってから色々試してみました。

プリファレンスリセット、ドライバー更新、MRay更新、など。
Mayaは相変わらずおちる。

最後に思いついたのはプラグインの確認。

Mayaはバージョンアップするたびにデフォルトで読み込んでいるプラグインが増えて重くなってきた気がするので、自分のPCではプラグインの読み込みはなるべく最低限まで抑えている。

プラグインマネージャーを開くとプラグインのリストが出てきます。
めちゃめちゃ長い。
半分以上は何のためにあるかはさっぱり。

プリファレンスフォルダのバックアップとってから、読み込むプラグインリストをいじりはじめる。

なんとなく知っているやつを残しながら、知らないやつを消していく。
Alembic系とか知ってるけど要らないやつももちろんチェックを外していく。
Mayaを再起動。

わりと立ち上がりが早くなった気がしますが、今はそういう問題ではない。

ハイパーシェードを開いて、ためしにランバート作成  → おちない!
別名で保存オプションを開く → おちない!
Maya が おちない!!!

原因は知らないです。
プラグイン一個ずつ試していく気もないです。
原因が分かる人がいましたら是非教えてください。

そして、似たような問題がありましたら、是非これを試してみてください


Mayaに入っているプラグインについて詳しく知りたい人:
https://knowledge.autodesk.com/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2016/ENU/Maya/files/GUID-DF9366D9-E24B-4A08-88F1-8EE1B78A52F9-htm.html#mtc-japanese

SI | mSkin 1.0.1 バグ修正

「DIV」 ボタンにバグがあった為、ツール更新しました。

リンクは同じです。

http://skymill.co.jp/tools/Softimage/mSkin/Manual/index.html

SI | mSkin SIのウェイトツール

ほぼ半年前から現プロジェクトの為に作成したウェイトツールです。

まだ開発中の部分がありますが、大体使えるツールになっているかと思いますので公開します。
バグなどがありましたら連絡ください。

ご使用は自己責任でおねがいします。

動画の説明は字幕に書いてありますが、今のところは英語のみです。


mSkin : Softimage Weights Tool from myara on Vimeo.



詳細:
http://skymill.co.jp/tools/Softimage/mSkin/Manual/index.html

SI | mStraightUV ピックでUV整列

今やっているSoftimageのプロジェクトで真っ直ぐにしないといけないUVが多くて、もっと自動的に出来るじゃないかなと思ってツールを書き始めました。

PythonはXSIのCollectionを使うとかなり遅くなるからJScriptで書きましたが、
あまりCollectionは使わなかったからPythonでも良かったかも。

色々考えてやってみたけど、左右のUVが重なっている場合(左右対称のモデル)や三角形が多い場合はなかなか難しかったので、全自動を辞めて整列したい部分を自分で選べば良いかと思いこのツールを作ってみました。

ツールを実行するとピックカーソルが出てきます。
ピックカーソルで選択します。
選択されているUVの位置の最大値と最小値で向きを判断します(横Uか横V)
UVサンプルを真っ直ぐにして、そのままピックカーソルが残ります。
ボタンを何も押せずに選択していくだけで整列されます。
繰り返し。

SHIFT押しながら選択していくと整列するUVサンプルに加われます。
右クリックで終了。

結構シンプルな仕組みです。
良かったら使ってみてください。


mStraightUV from myara on Vimeo.



DOWNLOAD
mStraightUV Link

INSTALL
Script式です。
ツールバーやメインシェルフにドラッグ&ドロップでボタンを作る。
もしくは、スクリプトエディターで実行する。
Next page