2013年09月

2013年09月30日

2014の新機能を調べてみた その37 3dsmax 2014

急に涼しくなって風邪をひく人が増えてるみたいだな。

今回は再びパーティクルフローのデータオペレータに戻ってサンプルファイル「EventCounter.max」を調べてみたい。

このサンプルファイルはパーティクルがいくつイベントを通過して来たかをモニタリングする方法を示したものらしい。

シーンにはパーティクルフローソースが2つ重なるように配置されているだけのシンプルな構成だ。

fig01

そしてこれがパーティクルビュー。PFSourceが2系統ある。

fig02

「PF Source 01」の系統は「Birth 01」で0〜30フレームで200個のパーティクルを発生させて「Position Icon 01」でアイコン内にパーティクルを散らせて「Speed 01」で矢印方向に300の速度を与えて「Rotation 01」でランダムな向きを与えて「Shape 01」でパーティクルに四面体のシェイプを割り当てて、「Age Test 01」でパーティクルエイジが15フレームに変動2フレームの範囲で次のイベントに送り込む。それを受けて「Event 04」でも「Age Test 01」のインスタンスの「Age Test 02」がパーティクルエイジをテストして次のイベントへ、その次の「Event 05」も同様の処理を行っている。

これによって「PF Source 01」の系統のパーティクルは生成されてからほぼ15フレームごとに次のイベントに移って行く動作になっている。

そしてパーティクルが何番目のイベントに来ているかをカウントするのが「Data Operatoe 01」、「Data Operator 02」の役割だ。

面白いのは「Data Operator 02」がローカルイベントではなくてグローバルイベントにあることで、これによって「PF Source 01」の系統の全てのローカルイベントに対してこのデータオペレータが作用するようになっている。

まず「Data Operatoe 01」から見て行くと、データビューはこうなっている。

fig03

「入力スタンダード:イベント中新規」がフィルターになって、スカラー値0が「新たに出力:Event Counter」に出力されている。

fig04

これで「Data Operator 01」がある「Event 01」で「Birth 01」によって発生したパーティクルに対して発生した時の1度だけ「Event Counter」チャンネルが新規に追加され、0で初期化される。

これがイベントを数える出発点で、イベントの通過数は各パーティクルに追加されたカスタムチャンネルの「Event Counter」に格納される。

そして「Data Operatoe 02」のデータビューはこうなっている。

fig05

これも「入力スタンダード:イベント中新規」でフィルタリングされて、処理対象のパーティクルが新たに発生したか、イベントに入って来た時だけ「From EventCounter」から下のフローが実行される。

「カスタム入力:From EventCounter」は「Data Operator 01」で追加され初期化されたカスタムチャンネル「Event Counter」を読み込んで、スカラー値1を加算して「カスタム出力:To EventCounter」でカスタムチャンネル「Event Counter」に書き戻される。これでパーティクルが他のイベントに移動すると「Event Counter」が1増加する事になる。

これでそのパーティクルがいくつのイベントを通って来たのかを知ることが出来るわけだ。

そして「PF Source 02」のフローはそのイベント回数を他のフローから参照する方法を示している。

これがそのデータビュー。

fig06

カスタム入力からカスタムチャンネル「Event Counter」を読み出すために読み出し先として「PF Source 01」を指定するために「プロキシパーティクルはO1」オプションをONにし、

fig07

O1コネクタに「オブジェクト選択」サブオペレータを繋いで、そこで隣のPFlowシステムである「PF Source 01」を指定することでこのフローの中のパーティクルのカスタムチャンネルにアクセスできるようにしている。

fig08

読み取った値は新規に「Proxy Counter」という名前のカスタムチャンネルを作って格納し、それを「データ表示」オペレータでパーティクルの横に表示させている。

ちなみに「Event Counter」はグローバル設定なのでオブジェクトを選択しなくともカスタム入力の入力元としては表示されるし設定も出来る。

fig09

でも実際に動かしてみると値は常に0のまま変らなかった。

ついでに書いておくと、上の例は他のフローのカスタムチャンネルへのアクセスだったけど、位置や速度などの標準のチャンネルに対しては「入力プロキシ」サブオペレータからアクセス可能だ。

仕組みはわかってきたけどこれをどう使ったらいいのかな。

それではまた次回。

maxまとめページ



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

2013年09月27日

ACSを使ってみた その12 modo701 SP2

背骨の上側の丸からアクセスできる設定パネルは背骨の曲がり具合などを調整するのが主な役割のようだ。

fig01

これがそのパネル。5つのパートに分かれている。

fig02

「Display_Options」は背骨のコントローラの表示設定を変更する。

fig08

「Torso_Controls_Display_Size」はコントローラのサイズを調整する。

fig06

「Show_Auto_Bend_Controls」は上下のボックス状のコントローラの表示非表示を切り替える。この時設定パネルへアクセスするための丸も消えちゃうんだけどその場合はどうやってパネルにアクセスしたらいいのかな?

fig03

「Show_FK_Controls」は背骨のチェーンの各関節にFKのコントローラを表示するかどうかのスイッチ。

fig04

FKコントローラが表示されたらこのように個別に関節を回すことが可能になる。

fig07

「Show_Spine_Shape」は背骨のチェーンの表示非表示を切り替えるスイッチ。

fig05

「Bending」は「Upper_Spine_Bend」と「Lower_Spine_Bend」の上下のコントローラの回転にあわせて背骨のチェーンがどのように曲がるか、その回転量を配分するパラメータ群。

fig09

「UpBend_Factor__〜」の部分は「Upper_Spine_Bend」の回転に対して背骨のチェーンがその回転に応じて曲がる割合。これらは3つの数値の比によって曲がり具合の配分が決まる。だから0.35:0.35:0.3の設定と35:35:30は同じ結果になる。

fig10

「UpBend_Factor__Chest」のみ1にして他は0にしてみると、

fig12

このように背骨のチェーンの一番上のセグメントのみ曲がるようになる。

fig11

「LowBend_Factor__〜」の部分は「Lower_Spine_Bend」の回転に対して背骨のチェーンがその回転に応じて曲がる割合。

fig14

fig13

「Controls_Move_Strength」は「Lower_Spine_Reverse_Bend」の水平の動きに対する「Upper_Spine_Bend」の水平方向のズレに関する調整。

fig17

この値が大きい場合は「Upper_Spine_Bend」を水平に動かすとそれに連れて背骨が曲がり、「Lower_Spine_Reverse_Bend」を動かすと「Upper_Spine_Bend」がその場に残るよう反対方向に背骨が曲がる。

fig15

この値を0にすると「Upper_Spine_Bend」が移動できなくなり、「Lower_Spine_Reverse_Bend」の水平の動きにはそのまま「Upper_Spine_Bend」が追従するようになる。

fig16

1.7くらいまで大きくすると、「Lower_Spine_Reverse_Bend」の動きに対して「Upper_Spine_Bend」が完全に残る感じになる。

fig20

前後も同様だ。「Forward_Back_Move_Strength」が1の時はこのように動き、

fig18

0の時は「Upper_Spine_Bend」は動かせず、「Lower_Spine_Reverse_Bend」の動きに追従する。

fig19

続きはまた来週。

modo701ブログ目次



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

2013年09月26日

2014の新機能を調べてみた その36 3dsmax 2014

今回は「パースマッチ」ツールについて調べてみたい。

「パースマッチ」ツールは写真などの背景素材をもとにフリーカメラの視野角と視線方向を制御して背景画像とカメラのパースを合わせるツールだ。

fig01

カメラから立方体を見ると、カメラの位置や方向、焦点距離などによって立方体が歪んでカメラから遠い部分は縮み、近い部分は広がる感じになる。そしてカメラから無限に遠くなればどんな形状も点になる。だから立方体を1方向に無限に伸ばして行けば、カメラから遠い方の面は点になる。これを3方向やってみたのが下の図で、無限遠で点になった面を消失点と呼ぶ。そして立方体から消失点へ伸びる線を消失線と呼ぶ。

fig02

この遠近感の構造は現実の風景でも当然起こる現象で、風景をカメラで撮影した場合、レンズの特性によって多少歪みが生じるものの、遠くのものは小さく、近くのものは大きくなり、風景の中に立方体を配置出来るなら、立方体の辺の延長線上に消失点が生じるわけだ。

fig03

そしてその立方体がどう写るかは、立方体の大きさやカメラの位置や向き、レンズの焦点距離などで決まってくる。逆にこの立方体の大きさと写った形状がわかれば、カメラの向きや焦点距離などが特定できる。

残念ながら現実には風景に大きさがわかっている立方体が写りこむ事はほぼ無いけれど、柱や梁など地面に対して水平や垂直になっている部分を立方体の辺に見たててそのパースのかかり方を測ることでカメラの向きや焦点距離を決めることができる。

これがパースマッチの仕組みで、「消失線を表示」ボタンを押すと、

fig04

このように各軸方向をあらわす消失線ギズモが現れる。これらのセットが何本現れるかはボタンの下のオプションスイッチで決まり、赤いギズモがX軸方向、緑がY軸、青がZ軸にあたる。

fig05

あらかじめフリーカメラを1つ作っておいてビューポートをそのカメラビューに切り替えておき、ビューポートの背景にパースマッチさせたい画像を表示しておいて、背景画像の中で3Dのワールド座標の各軸と平行であろう線を見出してこれらのギズモをそこにあわせてやると、カメラの焦点距離や向きが自動的に決まる。

各ギズモは端点を動かす事で角度が変り、対になる2本のギズモの消失点が変化し、それによってパースが変化する。

fig06

ギズモの線の部分を動かす場合は消失点が固定されるので、このようにギズモの位置によってギズモの方向が変化する。

fig07

パースマッチを使う手順は以下の通りだ。

まずマッチさせたいシーンを用意し、フリーカメラを追加する。

fig08

ビューポートの左上の「+」ボタンをクリックして「ビューポート設定」を選択し、

fig12

バックグラウンドタブで画像ファイルを背景として読み込む。この時画像のアスペクト比をレンダリング出力に一致させる。

fig13

これでビューポートの背景に画像が表示される。

fig15

次にレンダリング設定パネルを開いて出力サイズを画像とあわせる。

fig14

今度はレンダリング時の背景画像を設定する。レンダリングメニューから「環境」を選んで環境と効果パネルを出して、環境マップとしてビットマップマテリアルを選択し、そのビットマップファイルとして画像ファイルを指定して割り当てる。

fig09

次にマテリアルエディタを出してスケマティックビューのエリアにこのマテリアルを環境パネルからドロップし、インスタンスをエディタに出して編集する。

fig10

このマテリアルのマッピング方法として「画面」を選ぶ。

fig11

これでカメラをどう向けても常に画像ファイルが画面いっぱいにフィットした形で現れるようになる。

次にビューポートをカメラビューに切り替えて、ユーティリティーパネルから「パースマッチ」ボタンを押してパースマッチを開始する。

シーン内のオブジェクトはバウンディングボックスにするか非表示にしてとりあえず作業の邪魔にならないようにしておく。

XYZのオプションスイッチを選んで「消失線を表示」ボタンを押すと6本のギズモが出てくるので、

fig16

地面に対して水平の面、垂直の面を意識しながら背景画像の中でサンプリングできそうな線を探してギズモを配置する。

fig17

これでパースがマッチしたのでシーン内のオブジェクトを表示する。

fig18

写真からでは写っているものの大きさはわからないのでカメラは向きと焦点距離は確定するけど、写真に写っているものからカメラまでの距離は確定しない。そして一緒に写るシーン内のオブジェクトと写真との位置関係も定まらない。

そこでここからは目分量であわせて行くことになるんだけど、パースが狂ってしまわないように、カメラは「カメラ調整」パネルで操作する。

fig19

このパネルで操作する限りパースは狂わないので、希望の位置に収まるように「水平方向」「垂直方向」「距離」をうまく調整する。

fig20

これで写真とシーンのマッチングは終了だ。

あとは例えば背景に対してオブジェクトから影を落したいなんて場合は、背景の影が落ちる部分の形状にあわせて影を落すだけのオブジェクトを配置し、そのオブジェクトにマテリアルエディタから「マット/シャドー」をドラッグ&ドロップして割り当ててやれば、

fig21

影だけがレンダリングされて背景と合成されるようになる。

fig22

それではまた次回。

maxまとめページ



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

2013年09月25日

ACSを使ってみた その11 modo701 SP2

今回は背骨から腰にかけての部分を見て行きたい。と、その前にリグを操作してポーズをつける場合、各コントローラを渡り歩いて作業する事が多いので、操作アイテムを切り替えるたびにコマンドを終了しなくてもいいようにトランスフォームツールの「セレクトスルー」オプションをONにしておくといいようだ。

fig14

そうすればこのようにツールを終了しなくてもアイテムをクリックすれば操作対象が切り替わるようになる。

fig13

さて、腰から背骨までのコントローラは下の画像のような構成になっている。

fig01

この部分はコントローラがかなり集中しているみたいだ。人間の複雑な動きを表現するにはこんなに必要なんだな。

「Root」アイテムは6自由度を持つコントローラでこれは足元のMasterアイテムを除けばリグ全体の最上位になるコントローラだ。足のIKを外せばボディー全体がこのコントローラの変位にそのまま従う。キャラクタを空中回転とかさせたい場合はこれを回転させればいいわけだ。足のIKを残すと足だけIKターゲットに引っ張られて股関節から下が残ってそこから上の部分がこのコントローラに従う。

fig02

「Hips」アイテムは3軸の回転が出来るコントローラで、腰の回転を調整するものだ。

fig03

「Lower_Spine_FK_Bend」と「Upper_Spine_Bend」は背骨のチェーンをコントロールするアイテム。背骨の根元の「Lower_Spine_FK_Bend」はX軸Y軸の2軸回転が出来る。その際2つのアイテムを繋ぐ背骨のチェーンは設定によって滑らかに曲がるようになっている。

fig05

「Upper_Spine_Bend」は背骨の上側のコントローラで、こちらは3軸回転に加えてX、Z軸の平行移動が可能になっている。こちらも設定によって背骨のチェーンが滑らかに曲がるようになっている。

fig06

「Lower_Spine_Reverse_Bend」は「Hips」と「Lower_Spine_FK_Bend」のペアレントのルートになっていて、これを動かすとペアレントされた2つのコントローラも同時に動く。XYZ軸回転とXZ移動が可能だ。

fig04

これらのコントローラにも設定パネルへのアクセスポイントがあって、腰側の丸の方をクリックすると、

fig07

このような項目の設定パネルが表示される。

fig08

「Root_Forward_Then_Side」はRootアイテムの回転軸の優先順位を変更するオプション。

これがOFFの時はRootをZ軸回転させるとX軸が一緒に回転してしまいY軸のリングとジンバルロックを起こしてしまう。

fig09

ONの場合はX軸のリングは回転しなくなる。

fig10

しかし今度はX軸回転するとY軸とZ軸が重なるようになる。

fig11

どっちを使うかはアニメーションする時の腰回転の軌道次第だ。

「Hips_Controls_Display_Size」は「Root」と「Hips」アイテムのサイズを調整する。

fig12

背骨側の設定パネルについてはまた次回。

modo701ブログ目次



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

2013年09月24日

2014の新機能を調べてみた その35 3dsmax 2014

今回も引き続きPopulateを調べてみたい。

最後に残ったのは停滞領域だ。この領域の中の群集は一人、または2〜3人のグループで立ち止まって様々な動作をし続ける。

fig01

停滞領域作成と修正はリボンにこのようなツールが用意されている。

fig02

fig07「フリー停滞領域を作成」はビューポートをドラッグする事で不定形な形状を描き停滞領域を作成するルール。このツールと「停滞領域に追加」「停滞領域から除去」を組み合わせると、停滞領域に領域を追加したり削ったりする事も出来る。

fig03

fig08「矩形停滞領域を作成」は停滞領域を矩形で描くツール。このツールと「停滞領域に追加」「停滞領域から除去」を組み合わせると、停滞領域に領域を追加したり削ったりする事も出来る。

fig13

fig09「円形停滞領域を作成」は停滞領域を楕円で描くツール。このツールと「停滞領域に追加」「停滞領域から除去」を組み合わせると、停滞領域に領域を追加したり削ったりする事も出来る。

fig14

「均一のシェイプを作成」をONにする事で真円を描く事もできる。

fig15

fig15

また円は多角形で近似的に描かれていて、その頂点の数を「円の側面」パラメータで調整することが出来る。下の画像は「円の側面」を3、5、6にしてみたもの。

fig16

fig10「停滞領域に追加」は停滞領域に領域を追加するもの。追加するために領域を描くツールとして「フリー停滞領域を作成」「矩形停滞領域を作成」「円形停滞領域を作成」からツールを選択できる。

fig04

fig11「停滞領域から除去」は停滞領域を削るもの。これも削るためのツールとして「フリー停滞領域を作成」「矩形停滞領域を作成」「円形停滞領域を作成」からツールを選択できる。

fig05

fig12「修正停滞領域」は停滞領域の輪郭を修正するもの。ポイントの移動はフォールオフされた範囲でカーソルの中心から滑らかに影響が減衰され、その影響範囲はブラシサイズで調整できる。

fig06

停滞領域のパラメータロールアウトは以下の通り。これらのパラメータを変えても停滞領域にあるマーカーは変化しても、生成された群集は変化しない。影響を反映させるためには「シミュレート」ボタンを押して再シミュレートする必要がある。

fig17

「密度」は停滞領域の中の群集の密度を決めるためのもので、スライダを右に動かすほど単位面積あたりのキャラクタの数が増える。

停滞領域ではキャラクタは単独または2〜3人のグループとして生成される。

fig18

「単独またはグループ」パラメータはこの単独とグループの発生割合を調整するもので、「3人グループ2人グループ」はそのグループの中で2人グループと3人グループの発生割合を調整するもの。「男性または女性」は発生する群集の男女比を調整するもの。

fig20「単独の方向」は単独で生成されたキャラクタの向きを調整するもの。グループで生成されたものは常に互いに向き合うようになっていて調整は出来ない。

fig19

単独キャラクタの向く方向は「方向」パラメータか「面」とその指定オブジェクトの位置で決められ、その方向に対してのランダムな振り幅を「広がり」パラメータで設定できる。

「方向」パラメータのスライダーは左端から右端までが0〜360度に割り当てられていて、このスライダによって群集の向きを360度変える事が出来る。

「広がり」はその方向に対するランダムさで、スライダが左端にある時はランダムの影響が無くなりキャラクタは全員同じ方向を向き、右端にある時は群集の向きが完全にランダムになり方向性が無くなる。

「方向」と「広がり」のスライダを一番左に持って行って「面」をONにして「なし」ボタンを押して下の画像の球体を選択した場合、このように単独のキャラクタは全員球体の方向を向く。

fig21

ここで「方向」のスライダを真ん中に持って行くと「方向」パラメータは「面」方向に対してオフセットとして働いて全員が180度向きを変え、球体に背を向ける形になる。

fig22

「面」はフレーム0の時のオブジェクトの位置で向きが決まるようで、その後にターゲットを動かしても追従はしないようだ。

fig23サンプルは各パラメータで使われる乱数列の乱数シードだ。この値を変更すれば乱数の発生の仕方が変り、シミュレーション結果を変更出来る。

それではまた次回。

maxまとめページ



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