2015年01月

2015年01月30日

modo801の新機能を調べてみた その68 modo801

今回もmodo801の新機能に書いてある新機能について調べてみたい。

今回は「Stepped Timeline Playback: New timeline control 'Play Keys' allows the stepped playback for easier visualization of key poses.」についてだ。

701のアニメーションレイアウトにある「再生」ボタンのフライアウトは今まで2つだったけど、

fig01

801になって「キーを再生」、「シミュレーション」が加わって4つになった。

fig02

この「キーを再生」が追加されたものだ。

「キーを再生」は選択されているアクターのアクションのキーだけを繰り返して再生する機能だ。

下のGIFアニメはアクターにつけたアクションを通常の「再生」で再生しているところ。

fig04

これを「キーを再生」で行うと、0フレームと、アクションに設定されたキーの位置のフレームのみ繰り返し再生されるようになる。

fig05

また、マーカーでフレーム制限をかけると、キーが無くてもマーカーの左端の位置のフレームと、マーカーのフレーム制限範囲内にあるキーのフレームを再生する。

fig03

fig06

それではまた来週。

modo801ブログ目次



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

2015年01月29日

2015の新機能を調べてみた その73 3dsmax 2015

「Light View Projection」変換マトリクスが出来たので、引き続き「ShadowMap」ノードについて調べてみたい。

fig01

前回は「For Loop」ノードの「Calculate before scope」ソケットに接続された2つのグラフについて調べた。これらはForループの前に行われる初期化のための仕組みを提供している。

今回はループの中で繰り返し呼び出される「Calculations」ソケットに接続されたグラフについて調べたい。

このソケットに接続されたグラフの出力は「Operators」ソケットに接続された演算子で「variables」ソケットに接続された変数と演算されるようだ。この「ForOp」ノードは変数「i」を0〜9まで1ずつ増加させながら10回繰り返し、「Calculations」の値を「Variables」に加算して、その合計を「Output」から出力するようになっている。

fig02

「Calculations」ソケットには下のような「IfElse」ノードが接続されている。

fig03

「A」ソケットに接続されているグラフの値が0以上なら0、それ以外なら0.1が出力される。この値は10回加算されるから全部0.1なら合計1になり、影が無いって事になるね。

要するに「A」ソケットに接続されているグラフの値が0以上ならそこは影って事だ。

その「A」ソケットに接続されているのは「Subtract」ノードで、「引き算」だ。引かれる側は前回出てきたライト照射エリアを射影変換して出来たサンプルポイントのZ値から「ShadowMapBias」を引いた値だ。ライト照射エリアの遠い方のクリッピング面でZが1になり、手前のクリッピング面でZが0になる。「ShadowMapBias」はこれにちょこっとオフセットを与える感じかな。

fig04

この値から引かれる値はシャドーマップの「TextureComponent」を「Sampler」でサンプリングしたものだ。これはCGソフト側からセマンティクスでライトビューのデプスマップを取得する仕組みのようだ。残念ながらこのセマンティクスもMaxは出力してくれないので機能しない。

fig04

でもこれによってライトを照射しているエリア内に何かオブジェクトがあればそのオブジェクトまでの距離が0〜1の値に正規化されて得られる。この値とライトの照度を計算するポイントの射影空間のZ値が引き算された場合、サンプルポイントのZ値の方が障害物よりライト寄りにあれば、

サンプルポイントのZ値 - Depth値 < 0

引き算の値は0より小さくなり、

障害物の方がサンプルポイントよりライト寄りにあれば、

サンプルポイントのZ値 - Depth値 > 0

引き算の値は0より大きくなる。

この引き算の値が0より大きい時が影として処理されるんだからこれでライトとサンプルポイントの間に障害物があれば影になるってわけだ。

残念ながらMAXでは今のところこのへんの仕組みは利用できないんだよねぇ。

この記事の最初に載せた画像はこのライトのデプスマップのかわりに普通のテクスチャマップを割り当ててみたものだ。

fig05

オブジェクトのほかのオブジェクトの影を落すことは出来ないけど、影を描くことは出来るようになった。

それではまた次回。

maxまとめページ



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

2015年01月28日

modo801の新機能を調べてみた その67 modo801

今回もmodo801の新機能に書いてある新機能について調べてみたい。

今回は「Channel Behaviors: Channel behaviors have been updated with new options and enhancements to existing functions.」についてだ。

グラフ編集パネルにあるチャンネルのキー範囲外の波形を設定する「動作」オプションがリニューアルされたようだ。

fig03

701のものがこれで、

fig02

801がこれ。既存のオプションに「(スムーズ)」の付いたバリエーションが増えた感じだ。

fig01

この「(スムーズ)」は言葉通り曲線のつながりを滑らかにする機能だ。グラフのチャンネル値の曲線を滑らかにするために「チャンネルキー」には「スロープ」と「ウェイト」があるけど、

fig05

「(スムーズ)」はこれらの値をコントロールして、曲線を滑らかに繋ぐので、この機能が有効に働くためには「スロープ」や「ウェイト」値の設定が「手動」ではなく「自動」になっている必要がある。

fig04

「一定(スムーズ)」はキーフレームの範囲外でチャンネルの値が一定になる。その際にグラフが滑らかに接続するように「スロープ」や「ウェイト」を調整する。下のGIFアニメは終端側の「動作」オプションで「一定」と「一定(スムーズ)」を切り替えてみたもの。キーの左側でチャンネルの値が一定になり、グラフが水平になっているけど、「一定(スムーズ)」の時はキーの左右でグラフが滑らかに接続するのがわかる。これは701の「一定」にあたるもので、701の「停止」が801の「一定」になっている。

fig06

「振幅(スムーズ)」「振幅オフセット(スムーズ)」も同様だ。

fig07

fig08

それではまた次回。

modo801ブログ目次



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

2015年01月27日

2015の新機能を調べてみた その72 3dsmax 2015

前回に引き続き「LightViewPrj」変換マトリクスを組み立ててみたい。

今回は最後に残った「Prj」グループノードの中身だ。

fig03

このノードはライトのローカル座標系に変換したポイントをライトの視野にあわせて射影座標系に変換するものだ。射影変換はライトの照射範囲をクリップ面で区切った範囲(下の図の黄色い部分)を直方体の空間に変換するものだ。

fig02

スポットライトは円錐形なのでX−Y方向で広がりに違いは無いので射影変換行列は下のようになる。fig03

これに同次形の座標値(x,y,z,1)をかけて、得られた座標値の4つめの値で他の3つの値を割れば、上の図の黄色いクリップ空間が−1≦X≦1、−1≦Y≦1、0≦Z≦1の範囲の直方体のクリップ空間に変換される。

下のグラフはスポットライトの照射角と近クリップ面までの距離、遠クリップ面までの距離から上記射影変換行列を生成するものだ。

fig01

どうやら「LightConeAngle」ノードから出力される角度は最初からθ/2のようなのでそのままその角度(A)の1/tanAをとってcot(θ/2)とした。これを「Vector Construct」ノードの「X」と「Y」ソケットに入力し、その他のチャンネルは全部プロパティで0に設定して、(cot(θ/2),0,0,0)、(0,cot(θ/2),0,0)を生成した。

fig04

近クリップと遠クリップはとりあえず定数として20と500を適当に設定して、「Vector Construct」ノードで(0,0,f/(f-n),1)と(0,0,-f*n/(f-n),0)ベクトルを組み立てた。

fig05

そしてこれらを「Matrix4X4Construct」ノードで組み立てて4X4の行列にして出力している。

fig06

以上の3つのノードを順番に掛け合わせることで「LightViewPrj」行列が得られる。

これを使うには、「DirectXシェーダー」のプロパティでライトのタイプを2にしてポジションにシーンに追加したライトを設定してやる必要がある。

fig07

クリッピング面の距離は適当に決めただけなのでパラメータ化してプロパティパネルにイクスポーズしてもいいかもね。

それではまた次回。

maxまとめページ



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

2015年01月26日

modo801の新機能を調べてみた その66 modo801

今回もmodo801の新機能に書いてある新機能について調べてみたい。

今回は「Onion Skinning: A new OpenGL stepped drawing method that allows users to see incoming and outgoing motions on Actors.」についてだ。

「オニオンスキン」はカレントフレーム前後のポーズをオーバーラップして表示する機能で、動きを把握しやすくするのが目的の機能だ。

fig01

この機能は前回出てきた「Actor」メニューの中にあったよね。

fig02

つまりこの機能を使うにはまず「オニオンスキン」させたいアイテムをアクターに登録する必要があるって事だ。

さらにそのアクターで「オニオンスキン」が表示されるためにはアニメーションを「アクション」を作ってそこに登録する必要がある。

要するに「オニオンスキン」は「アクション」をもとに生成される機能のようだ。

「オニオンスキン」を表示させるにはまず、「アクター」を作成してアニメーションさせるアイテムを登録し、その「アクター」に「アクション」を作成して、「アクション」を選択した状態にする。

fig02

この状態で「アクター」ボタンを押してポップアップするメニューから「オニオンスキンを適用」を選ぶ。

fig03

これで「オニオンスキン」が「有効」になり、「アクション」にアニメーションを設定すると、「オニオンスキン」が表示されるようになる。

オニオンスキンはある時点でのアクターの姿がオーバーラップで表示されるわけだけど、それをいつの時点にするかは次のオプションで設定できる。

「モード」は何をオニオンスキンのタイミングに利用するかの設定で、「フレーム」、「キー」、「タイムマーカー」の3通りが選択出来る。

fig04

「フレーム」は「カレントフレーム」を基準に、「フレームステップ」パラメータで指定した間隔でフレームが選ばれてそのフレームの「オニオンスキン」が表示される。

fig05

下のGIFアニメはフレームステップを、2、5、10で切り替えてみたもの。数値を大きくするほど長い時間の範囲がカバーされるようになる反面、フレーム間隔は広くなるので動きの表示は粗くなる。

fig06

「キー」は「アクター」に設定されている「キー」の位置の「オニオンスキン」を表示する。「キー」を打った位置の「オニオンスキン」だけ表示されるからキーの位置の状態を確認しやすい。表示される「キー」は「カレントフレーム」前後の指定の数のものに限定される。

下の画像は赤い矢印の位置に「カレントフレーム」があって、それより前のフレームにキーがある。そのうち「カレントフレーム」に近い2つのキーの位置の「オニオンスキン」が表示されている。

fig07

「タイムマーカー」は「カレントフレーム」前後の近い順に指定数の「アクター」やその「アクション」、「アイテム」につけられた「タイムマーカー」の位置の「オニオンスキン」を表示する。

シーンに設定されている「タイムマーカー」のオニオンスキンは出ないので「タイムマーカー」を追加する時は注意が必要だ。

「タイムマーカー」は「タイムマーカーレーン」を右クリックしてメニューから選んでやればカレントフレームに挿入できる。この時に「シーンに追加」以外を選べば「オニオンスキン」が表示される対象の「タイムマーカー」になる。

fig08

このモードの場合、「オニオンスキン」の位置は「キー」に関係なく好きな位置に設定出来るようになる。下のGIFアニメは2箇所に「タイムラインマーカー」を打ったもの。実際には「オニオンスキン」はアニメーション再生時には表示されないよ。

fig09

「ステップイン」「ステップアウト」は「カレントフレーム」前後にいくつの「オニオンスキン」を表示するかを設定するパラメータ。範囲に対象となるフレームが無ければ当然その数の「オニオンスキン」が表示されない事もある。例えば上の例では「ステップイン」「ステップアウト」両パラメータとも3に設定していたけど、「タイムラインマーカー」が2つしかなかったのでそれ以上の「オニオンスキン」は表示されていない。

fig10

下のGIFアニメは「フレーム」モードで「フレームステップ」を5にして「ステップイン」と「ステップアウト」の数値を変化させてみたものだ。数値が増えるごとに「オニオンスキン」の数が増えるのがわかる。「フレーム」モードの場合は「オニオンスキン」の対象になるフレームが不足する事は無いから設定数値の通りの数だけ表示できるね(最大数5)。

fig11

「状態」オプションはmodo全体の「オニオンスキン」の表示状態を切り替える。「オフ」なら全く表示されなくなり、「アクティブアクター」なら選択されている「アクター」の「オニオンスキン」だけ表示され、「全アクター」なら「オニオンスキン」が設定されている全「アクター」の「オニオンスキン」が表示される。

fig12

「ビューポートモード」は「オニオンスキン」を表示するビューポートを切り替える。「アクティブビューポート」ならアクティブになっているビューポートのみ、「全ビューポート」なら全てのビューポートで「オニオンスキン」が表示される。

また、「アクター」のプロパティからも「オニオンスキン」の設定が出来る。「アクター」のメニューに無かったものだけ見て行くと、

fig13

「前の色」「後の色」はオニオンスキンにつける色で、これが「アルファ」と「アルファステップ」によって「カレントフレーム」から離れるほど透明度が増すようになっている。

「レイジー更新」は「オニオンスキン」の更新をアニメーションが変更された時にのみ行うようにして、更新の頻度を下げることでレスポンスをあげる機能だ。

下のGIFアニメは「レイジー更新」をONにしてアニメーションを変更しているところ。「アイテム」の移動が終わってから「オニオンスキン」が更新されるので、「アイテム」の移動に負担がかからず作業が出来ている。

fig15

下のGIFアニメは「レイジー更新」をOFFにした場合。移動のたびに「オニオンスキン」が更新されるために移動処理に過剰な負荷がかかって思うように動かない。

fig14

このように重たい処理の時には効果が出る。

それではまた次回。

modo801ブログ目次



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