myara CG blog

CG Design Blog. Thoughts, experiments and experiences.

SI | ハードエッジを選択

今回のプロジェクトは結構ローポリで解像度が低い為、UVで上手く節約しながらなるべく真っ直ぐなUVにしなきゃ綺麗に出来ません。

なので、UVの展開を考えながらモデリングしています。

出来た後の達成感が気持ち良いです。
こんな低い解像度でこんなに綺麗に見えるよ!と誰かに自慢したくなるぐらい気持ちいけど、
かなり面倒くさい作業ですよ、これ。

そして、イメージをつかみやすくするために、UVの切れ目の代わりにハードエッジを入れています。

もちろんこの自作ツールを使っています^0^

よし、モデリングが出来ました!

このハードエッジをUVの切れ目にして、とりあえずUnfold。

そして、切り目のエッジを選択して・・・


あっ・・・


しまった!


ハードエッジってどうやって選択するんだよ?!!


出来る?出来ない?・・・出来ないよね・・・orz



良いアイデアだと思っていたのに。


しょうがない。書いてみるか。

ちゃちゃっと書いて・・・でけたー!

スクリプトはちょっとぐらい出来るようになって良かった~。



と昨日の作業の流れでした。

そして、出来上がったスクリプトを複数のオブジェクトにも対応するように編集して、公開します:



mSelect Hard Edges

DOWNLOAD

使い方:
スクリプトです。
このコードをスクリプトエディターにコピペーして実行してください。

または、ファイルをダウンロードして、ツールバーとかにドラッグ&ドロップでボタンを作って、実行。




エッジをループして、ハードエッジだったら選択。
全然難しいことはやっていないけど、一応今日のコードのポイント:




① 選択されたオブジェクトからPolymesh だけを取得したい時に、最近この方法を使っています
var oSel = SIFilter(selection, siPolyMeshFilter);



② 空っぽのアレイにサブコンポネントを入れて、最後にSelectObjで選択する

var oObj = selection(0), totalarray = []
var HardEdges = oObj.ActivePrimitive.Geometry.CreateSubComponent(siEdgeCluster)
var edgs = oObj.activeprimitive.geometry.edges
for ( var i=0, a = edgs.Count; i < a; i++ ) {
if(edgs(i).ishard) HardEdges.Addelement(edgs(i).index)
}
if (HardEdges.ComponentCollection.Count >0) totalarray.push(HardEdges)
if (totalarray.length !=0) SelectObj(totalarray)

アレイにすることによって複数のオブジェクトも対応します。
これを使ってmCleanerをちょっといじっています。そのうちに更新します。



③ コンパクトな書き方。
例:
var a=1, b=2;
if (a==0) b=3;
else b=2 ; logmessage (b)

みたいな。別にコンパクトに書く必要がないけど、打つ文字の数を減らすとなんか得した気分ですね。
やりすぎると読みにくくなって逆効果ですけど。

ま、参考まで。


コード↓:
Read more