2012年05月

2012年05月31日

modo601が来た! その24 modo601SP1

今回もパーティクル関係のお話。

広い面積にテクスチャを貼り付ける時に貼り付ける画像の都合で下のようなタイリングをする事がある。これは便利ではあるけど例えば自然の景観の岩などに同じパターンが規則的に並んでしまうと不自然な感じは否めない。

fig01

そんな時に役立つのが601から導入されたパーティクルを利用したテクスチャのタイリング手法であるTexture Replcatorだ。シェーダーツリーのイメージマップアイテムのプロパティパネルのテクスチャーロケーターサブタブからアクセスできる。

fig02

例えば4枚のポリゴンで構成された板を1枚用意して、アイテム名を「Plane」にして、これにアイテムマスクを作成(アイテムリストでPlaneアイテムを右クリックしてアイテムマスクの作成を選択)する。

fig03

するとシェーダーツリーにPlaneという名前のマテリアルグループが出来る。

次にビューポートの一番上に並んでいるタブの「レンダリング」タブを選んで、ビューポートの左側にあるマテリアルのパネルの上にあるプルダウンからImagesを選んで、出てきたフォルダの中からTilingTexturesを開いて、TexInk_Bark_01.pngを見つけ出して、ビューポートのPlaneアイテムにドラッグ&ドロップする。

fig06

これでシェーダーツリーのPlaneマテリアルグループにTexInk_Bark_01.pngが入るので、グループを開いてこのイメージアイテムを選択する。すると、プロパティパネルが切り替わるので、「テクスチャロケータ」サブタブタブを選んで、テクスチャリプリケータのパーティクルソースをPlaneに、パーティクルサイズを0.5にしてみる。

fig04

そしてビューポートの表示をRayGL:ONにしてみたのが下の画像だ。

fig05

見ての通り、Planeの頂点の位置に周りが薄くなったテクスチャが貼り付けられているのがわかる。これがテクスチャリプリケータの動作で、パーティクルの位置にイメージマップを貼り付けていく機能になっている。

わかりやすいうちにパラメータの説明をしておくと、

パーティクルサイズ」は貼り付けるイメージのサイズ。下の画像は1m×1mのポリゴンに貼り付けて、パーティクルサイズを0.2〜1の間で変化させてみたもの。イメージのエッジが薄くなっているからわかり辛いけど、1の時に1m×1mのサイズのイメージになって、Planeを覆っている。  

fig07

フォールオフバイアス」と「フォールオフ増幅」はイメージが周辺へ向けて透けていく具合を決めるパラメータ。「フォールオフバイアス」はイメージがフォールオフして透明になっていく位置をイメージの周辺からどのあたりにするかを指定するパラメータ。「フォールオフ増幅」はフォールオフの変化量を決めるパラメータで、イメージの減衰していく幅となって現れる。数値が大きいほど急激に減衰し、フォールオフの幅が狭くなる。

fig10

これらのパラメータの様子をディスプレースメントマップの高さであらわしてみたのが以下のGIFアニメだ。

下のGIFアニメはフォールオフ増幅を90%にして、フォールオフバイアスを0〜100%まで変化させてみたもの。フォールオフバイアスの値が低いほど、フォールオフが起こる位置が外側になり、高いほど内側から始まることがわかる。

fig08

下のGIFアニメはフォールオフバイアスを50%にしてフォールオフ増幅を0〜100%まで変化させてみたもの。数値が小さいほど斜面がなだらかになり、大きくなるほど急峻になっているのがわかる。

fig09

ランダムサイズ」はパーティクルサイズに乱雑さを加えるパラメータ。指定したパーセンテージを上限としてパーティクルサイズをランダムに縮小する。

例えば下のようにパーティクルのサイズを隣接するパーティクルと接するくらいにしておいて、

fig11

ランダムサイズを100%にすると、このように大きさがほぼ0〜100%近いものまで生成された。100%を超えるものは出ない。パラメータの数値をマイナスにすると100%より大きな範囲でランダムにサイズが変わる。

fig12

回転」は指定角度でイメージを回転させ、

fig13

ランダム回転」はその回転角度に乱雑さを与える。

fig14

こっから先はちょっとおいといて、今度はこの仕組みとパーティクルの仕組みを組み合わせる話だ。今までの部分を見て来てこれが何の役に立つのかって感じだったけど、これに指定したサーフェス上にパーティクルをばらまくSurfaceParticleGeneratorを組み合わせると話は変わってくる。

例えばランダムな回転を入れてこんなパラメータで

fig15

16分割したPlaneの頂点にこのようにイメージが並んでいる場合、

fig16

アイテムリストでSurfaceParticleGeneratorを追加して、ソースサーフェスとしてPlaneを指定して、平均間隔を適当に決めてやると、

fig17

Planeの表面にパーティクルが散布される。下の画像はわかりやすいようにBlobアイテムを使って散布されたパーティクルを表示してみたところ。

fig20

ここでイメージアイテムのテクスチャリプリケーターのパーティクルソースをSurfece Particle Generatorに変えると、これらの散布されたパーティクルにイメージマップがランダムに回転しながら貼り付けられるので、

fig18

このように繰り返しパターンが消えた形でイメージがタイリングされた状態になる。

fig19

おーこれはいい!

でもってパラメータの続き。

ローカル投影」はマニュアルには

これを 有効 にすると、パーティクルソースの形状に合わせて画像のクローンが変形します。面白い効果が作れるのと同時に、特定の形状とテクスチャの関係では、より自然な結果が期待できます。

と書いてある。これの意味がよくわからなかったんだけど、要するに、これを無効にした時はパーティクルから来る情報を基にしてテクスチャを貼り付けて、これが有効な時は貼り付けるサーフェスの方の情報を基にテクスチャを貼り付けるスイッチのようだ。

例えば上の例で行くと、わかりやすいようにサーフェスジェネレータの最小間隔を広げてパーティクルの数をまばらにし、パーティクルサイズも大きくしてみた。

fig21

この状態でParticle Modifierアイテムを追加し、ポイントソースとしてSurfaceParticleGeneratorを指定し、

fig22

イメージマップのパーティクルソースをparticle Modifierに設定した。

fig23

イメージマップの「ローカル投影」は無効のままだ。ここでParticle Modifierの回転をZ軸に0.1を入れて(これが0度だとY軸回転が反応しない)からY軸の方を0〜30°で変化させてみると

fig25

このようにイメージがY軸まわりに回転した。

fig24

そして同様のことを「ローカル投影」を有効にして行ったらパーティクル側を変化させてもイメージの方は変化しなかった。

じゃあどんな効用があるかを今度は見てみたい。

下の画像は立方体にエッジを加えたもの。上の面は1枚のポリゴンで、横は4枚のポリゴンで1面になっている。

fig26

こういう状態だと、エッジの中央の頂点の法線ベクトルは下の画像のように側面と同じ方向を向いちゃって上の面の方向とブレンドされない。

fig27

この状態でこれらのポイントをパーティクルとしてテクスチャリプリケータを使うと下の画像のように投影方向が側面に沿ってるから上の面では平行投影になっちゃって縞模様になってしまっている。

fig28

ここで「ローカル投影」をONにするとあら不思議。面に垂直方向からちゃんと貼り付けられているのがわかる。

fig29

このようにローカル投影は貼り付けられるポリゴンに対して投影方向が決められるもののようだ。

ローカル法線減衰」はイメージが貼り付けられる面と投影に使うベクトルとの角度の内積をとってイメージの不透明度を決めるスイッチのようだ。だから先の上面に平行な方向に投影しているようなパターンはこのスイッチをONにすると透明になって見えなくなる。

fig30

ただ、角の頂点も各面方向のベクトルがブレンドされた方向なので、どの面とも垂直じゃないからここにも減衰が作用して薄くなっているのがわかる。

あーそれからマニュアルのTipsに書いてあったグループを使って複数のイメージをばら撒く奴もなかなか面白いんだけど時間がなくなったので続きはまた次回。

カテゴリー別ページ



take_z_ultima at 13:20|この記事のURLComments(0)TrackBack(0)modo | CG

2012年05月30日

スキンラップモディファイヤについて調べて見た その2 3dsmax 2012 SP2

今回はスキンラップモディファイヤのパラメータを調べてみたい。

まず前提となる用語から。スキンラップモディファイヤは他のオブジェクトの移動や変形を使ってオブジェクトを変形させるためのモディファイヤで、変形される側でありモディファイヤをモディファイヤスタックに追加されるオブジェクトを「基本オブジェクト」と呼ぶ。それに対して変形のために参照するオブジェクトを「コントロールオブジェクト」、その頂点を「コントロール頂点」と呼ぶ。前回の腕の例で行くと腕のメッシュが基本オブジェクトでこれを変形させるために腕を取り囲んでいるメッシュがコントロールオブジェクトにあたる。

fig08

これだけはとりあえずおさえておいて表示ロールアウトから見て行くと、

fig03

ループを表示」はコントロール頂点サブオブジェクトレベルで

fig05

コントロールオブジェクトの頂点を選択した時に赤い円で影響範囲が表示されるかどうかのチェック。  

fig04

軸を表示」は選択したコントロール頂点に座標軸を表示するかどうかのチェック。影響範囲はこの軸に沿って伸縮できるので、方向は重要だ。

fig06

面制限を表示」は選択したコントロール頂点の影響を受ける可能性がある基本オブジェクトの全てのポイントを表示するかどうかのチェック。後から出てくる面制限によって範囲が変わってくる。下のGIFアニメは矢印のコントロール頂点に対して、面制限を0〜3の範囲で変更してみたもの。色が変わって表示された頂点に対してのみ、この頂点は影響する事ができる。

fig08

割り当てられていないポイントを表示」はどこからも影響を受けていないポイントを赤い丸で囲って表示するかのチェック。下のGIFアニメは水色のコントロールオブジェクトを動かしてピンク色の基本オブジェクトの変化をみたもの。基本オブジェクトで赤い丸が付いた頂点はどこからも影響を受けないので変形されていないのがわかる。

fig07

 「コントロール頂点を表示」は文字通りコントロールオブジェクト上の頂点を表示する。

fig09

以上の表示パラメータによって表示される情報をもとに各パラメータを見ていきたい。

fig01一番上の枠がコントロールオブジェクトを登録するためのリストパネルで、「追加」ボタンを押してからオブジェクトを選択すると、ここにコントロールオブジェクトが追加され、このリストからオブジェクトを選択して「リムーブ」ボタンを押せばコントロールオブジェクトから除外される。

コントロールオブジェクトは追加された瞬間から基本オブジェクトに関連付けられ、現在の位置を基準に変化量が基本オブジェクトに適用される。この割り当てを変えたい場合は、コントロールオブジェクトをニュートラルにしたい状態にしてから「リセット」ボタンを押せばいい。その場合コントロール頂点に設定したローカルパラメータなども一緒にリセットされるので注意が必要だ。

変形方法は「頂点変形」と「面変形」の2つの値が選択できて、コントロールオブジェクトの「頂点」を使って基本オブジェクトを変形させるのか、それとも「面」を使って変形させるのかを決めるパラメータ。

「面変形」の場合は基本オブジェクトの頂点から一番近いコントロールオブジェクトの面によって変形される。例えば下のGIFアニメは中央の2つの面をコントロールオブジェクトにしてある。この場合、基本オブジェクトの頂点はスレッショルドの範囲で一番近い面に従って変形される。

fig11

さらに左側のBOXをコントロールオブジェクトとして追加すると左側のBOXの面に近い頂点はBOXの面に従うようになる。

fig12

この距離の測り方なんだけど、どうやら計測の方法は綿からの直線距離じゃなくて基本オブジェクトのローカル軸に沿ってのもののようだ。下の画像は基本オブジェクトのポリゴンをローカル座標内で回転させたもので、外側に見える白いバウンディングボックスの枠がこのオブジェクトのローカル軸の方向だ。中央のコントロール平面と割り当てられていない赤いポイントとの関係を見ると、その範囲はコントロール平面に沿っていないことがわかる。

fig13

fig10面変形モードにすると、パラメータの一部は無効になり、「フォールオフ」「基本メッシュにブレンド」「ブレンド距離」「スレッショルド」などが使えるパラメータになる。

「基本メッシュにブレンド」は、変形前のニュートラルな状態と、コントロールオブジェクトによる影響をブレンドして変形させる。下のGIFアニメはON/OFFを切り替えて比較したもので、ONの状態ではコントロールオブジェクトから離れるほど変形の影響が減って変形が滑らかにつながっているのがわかる。

fig15

また、この距離の影響を制御するのが「ブレンド距離」で、値が大きいほどコントロールオブジェクトが影響を与えるエリアが広がる。下のGIFアニメは「基本メッシュにブレンド」をONにしてからブレンド距離を変化させてみたものだ。数値が大きくなるほど基本オブジェクトが変形される範囲が広がっているのがわかる。

fig14

「フォールオフ」の値は面変形モードでは、値を「0.001」にするかどうかで変形をリジッド(1つの面から影響を100%受けるか受けないかのみ)にするかどうかの切り替えになる。

値が「0.001」以外の時は、面がストレッチされる場合のみ影響が出て、ストレッチ方向の変形の影響が頂点からの距離によって変化する。例えば下のようにコントロールポリゴンを縮めた場合、

fig16

フォールオフの影響は下のGIFアニメのようになり、0.001の時はリジッドなので影響を受ける頂点全てが均一な変形になり、フォールの値を0.001より大きくすると途端に「基本メッシュにブレンド」の影響が復活し、さらにフォールオフの値を大きくしていくと、ストレッチのかかり方が大きくなって、メッシュがストレッチ中央へより集められていく感じだ。

fig17

これは伸ばした時も同じだ。そしてコントロールポリゴンにストレッチが発生しないような移動、回転では、フォールオフは影響が出ないようだ。

いろいろ試してたら時間がなくなったので続きはまた次回。

maxまとめページ



take_z_ultima at 14:04|この記事のURLComments(0)TrackBack(0)3ds Max | CG

2012年05月29日

パーティクルをポイントに変換 modo601SP1

前回やったParticle Cloudとか、サーフェス表面にパーティクルを散布するSurface Particle Generatorなどで生成するパーティクルは一括して扱えるから便利なんだけど、パーティクル1つ1つを個別に扱う事ができないという欠点も持っている。

そこでこれらパーティクルジェネレータで生成したパーティクルをポイントに変換するスクリプトを作ってみたよ。

使い方はパーティクルを生成するアイテム(Particle Generator 、Particle Cloud、Surface Particle Generator、Realflow Particles)またはパーティクルモディファイヤ(Particle Modifier、Particle Step Modifier)を選択してスクリプトを実行するだけだ。

例えば下の画像はSurface Particle Generatorを使って円筒上に円錐を貼り付けたシーンで、

fig01

このシーンのアイテムの構成は下のようになっていて、

fig02

Surface Particle Generatorのソースサーフェスを円筒のアイテム(Mesh)にし、マテリアルタグをパーティクルを貼り付けたいマテリアル(Default)に指定し、

fig03

Replicatorの原型となるアイテムにConeを、ポイントソースにSurface Particle Generatorが指定してある。

fig04

このシーンのSurface Particle Generatorをポイントに置き換えるには、Surface Particle Generatorを選択して、システム→スクリプトの実行でfreeze_particle.pyを選択してしばらく待つだけだ。

実行が終わると「particle」という名前のアイテムが出来上がる。

fig05

このメッシュアイテムにサーフェスジェネレータが出力していたパーティクルがポイントになって配置されている。

fig06

ここでReplicatorのポイントソースをこのparticleアイテムにすると、

fig07

同じ状態で円錐がばら撒かれているのが確認できる。

fig01

これらのポイントにはパーティクルの回転とスケールがTransformマップで割り当てられる。ただ、今のところ回転とスケールを一緒に使ってもうまくいかない。横着してTransformマップのみで両方やらせてみたら演算の順番の問題が出てしまったようだ。やっぱりパーティクルスケール用の頂点マップも追加した方がいいみたいだな。

fig08

ちなみにパーティクルが頂点になったので、トポツールのトポロジツイークを使って円柱表面上で頂点を移動させたりなんて事も出来るようになるし、パーティクル操作用のブラシセットも使えるようになるね。

fig09
 

それではまた次回。

カテゴリー別ページ



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

2012年05月28日

スキンラップモディファイヤについて調べて見た その1 3dsmax 2012 SP2

スキンモディファイヤを調べたついでにスキンラップモディファイヤも調べてみた。

スキンモディファイヤがボーンとなるオブジェクトのノード変換をメッシュ変形に割り当てるのに対して、スキンラップモディファイヤはボーンにあたるコントロールオブジェクトの変形をメッシュ変形に割り当てる。

要するに低解像度のモデル変形によって高解像度のモデルを変形するのが目的のモディファイヤのようだ。

例えばセグメント数10のティーポットを1つ作って、

fig01

それを編集メニューのクローン作成でコピーを1つ作り、ビューポートを右クリックして「選択以外を非表示」を選択してオリジナルのメッシュを見えないようにしておいて、コピーしたティーポットのセグメント数を3にする。

fig02

出来た低解像度のメッシュを右クリックして、変換→編集可能ポリゴンに変換を選んで編集可能ポリゴンにする。

そして頂点サブオブジェクトモードに切り替えて、オートキーをONにし、頂点に下のようなアニメーションをつけた。

fig03

次に表示パネルでこのティーポットをシースルー設定にして、ビューポートを右クリックして「すべて表示」を選んで2つのティーポットを表示する。

メッシュの細かい方のティーポットを選択してモディファイヤリストから「スキンラップ」を選択してモディファイヤスタックにスキンラップを追加する。

fig04

次にパラメータロールアウトで「追加」ボタンを押し、低解像度の方のティーポットを選択する。これでリストに低解像度のティーポットが追加された。

fig05

この状態でタイムスライダを動かしてみると、低解像度のメッシュが変形するのに連れて高解像度のメッシュが変形するのがわかる。

fig06

この例では頂点アニメーションで変形してみたけど、そのかわりにボーン+スキンモディファイヤを使えば、高解像度メッシュを間接的にボーン変形させる事ができる。メリットはウェイト調整やアングルデフォーマーで調整する頂点の数が減らせる事と、エンベロープよりも微調整がし易い(かも知れない)こと、スキンウェイトの調整が済んでからでも変形対象のメッシュを変更可能な(増えたポイントのウェイトを設定したりする必要がない)ところだ。

ちょっとやってみると、こんな腕とそれを囲むメッシュを作って、ボーンとスキンメッシュを設定する。そしてこんなボーンアニメーションを付けて、折れ曲がり部分はモーフアングルデフォーマで補正した。ここまでは低解像度のメッシュなので作業がとても簡単に済む。

fig07

次に腕のメッシュを選択してスキンラップモディファイヤを追加して、パラメータロールアウトの「追加」ボタンを押して、低解像度のメッシュをコントロールオブジェクトとして追加する。

もうそれだけでこのように腕がボーン変形に沿って曲がるようになる。

fig08

ボーンと低解像度メッシュを非表示にするとこんな感じ。

fig09

スキンラップモディファイヤについての詳しい話はまた次回。

maxまとめページ



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

2012年05月25日

modo601が来た! その23 modo601SP1

ペンギン捕獲成功オメ!

今回はParticle Cloudについて調べてみたい。

前回まで調べていたParticle Generatorが規則的にパーティクルを並べるアイテムなのに対して、Particle Cloudはパーティクルを特定エリアにランダムに散布するためのアイテムだ。

fig01

このアイテムには「GL表示」オプションがあって、Particle Generatorと違って単独でパーティクルをビューポートに表示できる。上の画像はGL表示をONにした時のビューポートでの姿で、パーティクルが散布されるエリアと散布状態がわかる表示になっている。ついでにプロパティパネルにトランスフォームプロパティが表示されている。Particle Generatorもこの仕様にあわせて欲しいね。

fig02

パーティクル散布エリアの形状は「シェイプ」プロパティから、球、立方体、円柱(Z軸が中心軸)が選べて、球と立方体は大きさプロパティによって、

fig03

fig04

円柱は大きさと高さプロパティによってサイズが設定できる。

fig05

このエリアの中にランダムに散布されるパーティクルは、そのランダムの乱数列を「ランダムシード」で決めるので、同じ値のランダムシードなら乱数の出る順番も同じでパーティクルが生成されるたびに位置が変わらず、アニメーションする時にチラチラしたりしない構造になっている。そしてランダムと言ってもパーティクルどうしがあまり接近してしまうと、それに割り当てるオブジェクトが重なってしまったりして都合が悪いので、「最小距離」プロパティによってパーティクルどうしの間隔を保証している。その結果、パーティクルの数は「最大パーティクル」を上限として、指定間隔を保ってエリアに入りきる数になる。

fig06

例えばシェイプを立方体、大きさを50mm、最大パーティクルを100、最小距離を40mmとして、そのパーティクルをソースに半径200mm、サーフェイスレベル100%のBlobアイテムを適用して見たのが下のGIFアニメだ。中央の1つを除いて球体が重なっていないのがわかる。なんかとても惜しいね。ちなみに枠はカーブで描いてカーブをレンダリングオプションで表示したパーティクルの発生エリアだ。

fig07

パーティクルの分布密度はデフォルトでは一様だけど、「グラディエント編集」を使ってXYZ軸に対しての分布密度を変更できる。

fig10

下の画像は「グラディエント編集」ボタンを押して表示した「グラディエント編集」パネルで、「密度グラディエントX,Y,Z」のグラフを±500mmの範囲で0%〜100%を上下するものにしてみたものだ。

fig09

結果としてパーティクルは中心あたりに固まったものになった(最小距離は20mm、最大パーティクル数は450にしてある)。

fig08

今度はXYZで0mを挟んで2つの山を作ってみた。

fig11

結果として4つのパーティクル密度が高いエリアが出来た。

fig12

このように3次元的に密度分布がコントロールできる。

 また、Particle Cloudには簡単なアニメーションを行う機能もあって、「スキャッタリング」オプションなどのパラメータで実現できる。

例えば先の例で中央にパーティクルが集まっているシーンで、

fig08

スキャッタリングをONにして、グラディエント編集ボタンを押してグラフ編集を出し、

fig13

スキャッタリング距離を0フレームで0m、36フレームで1mのところにキーを打ち、直線のグラフにすると、

fig14

このように0〜36フレームでパーティクルが拡散するアニメーションになる。

fig15

スキャッタリング方向パラメータは1つ1つのパーティクルが動く方向をどのくらいランダムにするかを設定するパラメータで、これが0%の時、パーティクルはParticle Cloudの中心から放射状に移動する。中心にパーティクルが集まっていて、放射状に進めばパーティクルの描く雲は最初の状態のパーティクルの密集半径を厚みとした球体に近くなる。それに対してランダム方向に射出されるとその形状は乱れる。さらにこのパラメータは3次元ベクトルのX,Y,Zの要素自体にランダムに働きかけて変更するようで、パーティクルの速度自体も変化するようだ。

下のGIFアニメは36フレーム目の広がったパーティクルの状態でスキャッタリング方向パラメータを0〜100%に変えてみたもの。広がり方が中身が中空の球体から中身が入った立方体に変わっていくように見える。

fig16

スキャッタリング分散パラメータはパーティクルの移動距離の乱雑さを設定するパラメータで、先の例同様36フレーム目でスキャッタリング方向を0%として比較してみた。

下のGIFアニメはスキャッタリング分散を0%〜100%に上げてみたもの。0%の時は移動量が一様なので球体表面付近に集まっていたパーティクルが、数値が大きくなるに連れて移動量に幅が出てきて、球体内部にも残るようになっていくのがわかる。

fig17

それではまた来週。

カテゴリー別ページ



take_z_ultima at 11:41|この記事のURLComments(0)TrackBack(0)modo | CG
Archives