2019年01月

2019年01月31日

ビットマップペイントツールのチュートリアルをやってみた その198 3dsmax 2019

引き続きMAXScriptマニュアルに載っている「チュートリアル-ビットマップペイントツールを9つの簡単なステップで作成する」 の続きを考えて見たい。

さっそく「UVWアンラップ」モディファイヤを使ってUVWマップの区切ごとにポリゴンをグループにわけて配列に取得するプログラムを作ってみた。下のプログラムは「UVWアンラップ」が設定された選択されているオブジェクトに対してその処理をして、結果は「islands」に格納される。

islands = #()
muw = $.modifiers[#unwrap_uvw]
muw.setTVSubObjectMode 3
n = muw.numberPolygons()
allpolys = #{1..n}
do (
  sseed = (allpolys as array)[1]
  muw.selectFaces #{sseed}
  a = muw.getSelectedFaces()
  do (
    b = a
    muw.expandSelection() 
    a = muw.getSelectedFaces()
  ) while not (a-b).isempty
  append islands (a as array)
  allpolys -= a
) while not allpolys.isempty
muw.selectFaces #{}
print islands

これがテストで使ったUVWマップで、

fig1

これが実行結果。グループごとのポリゴンのインデックスの配列が取得された。

fig2

続きはまた次回。

maxまとめページ



take_z_ultima at 11:30|この記事のURLComments(0)3ds Max | CG

2019年01月30日

メッシュオペレータでいろいろやってみた その11 modo12

今回も「Lace Geometry」について見て行きたい。

今回は両端にキャップを付けてみたい。

fig1

オペレータの構成は下のようになる。

fig2

「Lace Geometry」の上の「Polygon Bevel」は前回の「Selection Operator:Polygon」を使って頂点数で選別する方法で端面を選択して引き出している。

fig4

その際、「Polygon Bevel」オペレータではひき出す時に生成される側面ポリゴンにマテリアルを割り当てることが出来る。下の画像はそのプロパティで、「マテリアル使用」をONにして、「マテリアル名称」を「cap」にした。マテリアル名はあらかじめシーンに作成されていないと使えない。

fig3

次の「Polygon Bevel」オペレータの「Selection」では「Select Polygon Tag」で直前のベベルで割り当てた「cap」マテリアルが適用されている側面ポリゴンだけをベベルで引き出す。

fig7

fig5

最後に前回と同様の処理で「Material Tag」オペレータで残った端面のマテリアルも「cap」に変更して終了だ。

fig6

続きはまた次回。

modo10-12ブログ目次



take_z_ultima at 11:30|この記事のURLComments(0)modo | CG

2019年01月29日

ビットマップペイントツールのチュートリアルをやってみた その197 3dsmax 2019

引き続きMAXScriptマニュアルに載っている「チュートリアル-ビットマップペイントツールを9つの簡単なステップで作成する」 の続きを考えて見たい。

前回の方針でUVマップを接続ごとに分けてその輪郭のエッジを取得する必要が出てきた。

そこで「UVWアンラップ」モディファイヤに使えそうな機能が無いかと調べてみた。

下のメソッドはUVマップの島を区分けしてリストを作るのに使えそうだ。

UVマップの島はUVWアンラップでポリゴンモードでダブルクリックすると選択出来るんだけど、メソッドとしては見つけられなかった。

<integer><Unwrap_UVW>.numberPolygons() 
オブジェクト内のポリゴンの数を返します。 <void><Unwrap_UVW>.selectFaces <bitArray>selection
指定した bitArray を使用してエディタの面選択を設定します。
<void><Unwrap_UVW>.expandSelection()
[テクスチャ選択を拡大](Grow Texture Selection)ボタンを押します。 <bitArray><Unwrap_UVW>.getSelectedPolygonsByNode <node>node
指定されたノードに対応する選択されたポリゴンの数を返します。

最初に「numberPolygons()」でポリゴンの数を取得して、全部が入ったビット配列を作り、そこから1つ取り出して、「selectFaces()」で面を1枚選択する。

次に「getSelectedPolygonsByNode()」で選択ポリゴンを取得してから「expandSelection()」をして選択を広げて再び「getSelectedPolygonsByNode()」で選択ポリゴンを取得する。

「expandSelection()」の前後の選択ポリゴンリストはビット配列なので引き算をすれば増えた選択ポリゴンがわかる。これが「isempty」がtrueになるまで繰り返せば接続されている1つのポリゴンメッシュの島が選択状態になる。

1つの島が選択出来たらそのポリゴンリストを取得して、全部が入ったビット配列から引いて、区分けされていないポリゴンの配列を取得する。その中から1枚ポリゴンを取り出して再びそこから選択を広げて島を取得する。

これを繰り返して全部入ったビット配列が空になったら区分け終了だ。

続きはまた次回。

maxまとめページ



take_z_ultima at 11:30|この記事のURLComments(0)3ds Max | CG

2019年01月28日

メッシュオペレータでいろいろやってみた その10 modo12

今回も「Lace Geometry」について見て行きたい。

「Lace Geometry」で生成した断面が円や楕円などのチューブの両端は頂点数の違いを使って処理対象にする事が出来る。

fig1

例えば側面と違うマテリアルを割り当てたいなら、「Lace Geometry」の上に「Material Tag」オペレータを追加して、「Selection」に「Selection Operator:Polygon」を追加する。

fig3

そして「Selection Operator:Polygon」をスケマティックビューにドロプして、右クリックして「チャンネルの追加」から「頂点カウント」チャンネルを追加する。そして「AはBより大きい」ノードと下のように接続して、

fig4

値Bに4を設定することで4より大きい頂点を持つポリゴンが選択されるようにする。

fig5

これで「Material Tag」オペレータで「マテリアル」を割り当てると、多角形の端面のみにそれが適用されて側面と端面でマテリアルが変更できる。これは断面が四角形の場合は出来ない。

fig6

続きはまた次回。

modo10-12ブログ目次



take_z_ultima at 11:30|この記事のURLComments(0)modo | CG

2019年01月24日

ビットマップペイントツールのチュートリアルをやってみた その196 3dsmax 2019

引き続きMAXScriptマニュアルに載っている「チュートリアル-ビットマップペイントツールを9つの簡単なステップで作成する」 の続きを考えて見たい。

いろいろ検討した結果、こういうのが良さそうかなと思いついた。下の画像はUVマップ上の接続されたポリゴンの1つのかたまりと、そこにかかるブラシ立方体でクリップされたメッシュ。このクリップされたメッシュは「maps」配列に入ってる奴だ。ペイント処理をする時にこの配列に入っているポリゴンを1枚ずつ処理しているため、UVマップメッシュの島の外周を拡張して塗り潰す時にいろいろややこしい事をしていたわけだけど、そんな事をするくらいなら先にUVメッシュの島の外周全部をはみ出し塗り用に広げてやって、それを単純に塗るように処理した方が処理が単純に出来るわけだ。ただし3D上のポリゴンからUVマップ上のポリゴンへの変換については拡張していないポリゴンどうしから変換マトリクスを作ってやって、塗り潰しのエッジとしては拡張した方を使うようにする。そうすればはみ出して塗る部分もちゃんと座標変換されたマップとして塗り潰すことが出来るようになる。

fig1

これを実現するために、まずUVマップを解析して各島の外周を検出する必要があるね。

そしてその外周の頂点を接続順に並べたリストを作って、そこから得られるエッジ列を平行移動して新しい頂点を生成して置き換えて新たなUVマップのデータを生成する必要があるね。

続きはまた次回。

maxまとめページ



take_z_ultima at 11:30|この記事のURLComments(0)3ds Max | CG
Archives