2011年04月

2011年04月28日

modo501がキタ! その29 modo501

4月にしてすでに部屋が蒸し暑い・・・。今年も去年みたいに暑くなるんだろうか。何はともあれいよいよゴールデンウィーク。今年も夏の収穫に向けていろんな苗を買って来て植えないと。

さて、前回のスケマティックビューの続きだ。

前回作った歯車のシーンに時間モディファイヤを導入して歯車が時間経過に従って回転するようにしてみたい。

スケマティックビューの右上にある「モディファイヤの追加」メニューから「時間」→「時間」を選んで時間モディファイヤを追加し、下の画像のように繋ぐ。

fig02

時間モディファイヤの時間コネクタからは秒単位の数値が出力され、歯車の回転角は度単位なので、そのまま繋げば360秒で1回転することになる。下の画像はタイムスライダを360秒のところに持って行った時のGear1の回転Zの値をチャンネルリストで確認したところ。角度が360度になっているのが確認できる。

fig03

これじゃあ遅すぎるので、時間を何倍かして回転角度に入力することにする。前回と同じように基本演算:乗算モディファイヤを1つ追加して、以下のようにつなぐ。

fig04

そして基本演算:乗算の値Bに固定値として6を入れると60秒で360度回転するようになり、これはちょうど1RPM(1分間1回転)の回転になる。

fig05

という事はRPM単位で回転数を与えたい時はその数値に6倍した数値を値Bに入れてやればいいわけで、さらに基本演算:乗算を追加して下のように繋ぎ、値AにRPM値を、値Bに6を入れておけば歯車は値Aに入れたRPM値で回転する事になるわけだ。  

fig01

このようにして作った仕組みは「アセンブリ」という形にまとめて部品化できる。

追加した3つのモディファイヤを「モーター」と言う名で部品化してみる。まず3つのモディファイヤを選択してスケマティックビューの何も無い場所で右クリックをして「アセンブリの作成」を選択する。

fig06

するとアセンブリの作成ダイアログボックスが出てくるので名称を入力して、2つのオプションにもチェックを入れる。

fig07

「サブアセンブリとして作成」はアセンブリの階層が現在のアセンブリの子になるだけなのでグループタブのアセンブリグループリストで後から変える事が出来る。「外部リンクを表示」も後から出力コネクタを右クリックして「出力としてチャンネルを表示」とか「チャンネルを入力として表示」を選べばコネクタは表示されるようになるけど、アセンブリの外に出来たコネクタから外部のコネクタにつなぎ直してやら無いとアセンブリの中からリンクが出てくるおかしな表示になるので、最初からONにしておいた方が無難だ。両方ともOFFにしてアセンブリを作成しちゃうと、作業平面にアセンブリを出すのにアセンブリグループリストで階層を変えたり色々しなくちゃならなくなるので下のようにモディファイヤの一部分を部品化する時にはオススメしない。

fig08

アセンブリはダブルクリックするとその中身を展開する事ができる。左上の「作業平面」をクリックするか、左から4番目の上矢印のボタンを押して階層を戻ることも出来る。

fig09

また、アセンブリの左右には「+」マークのボタンがあって、これを押すとアセンブリに入力と出力のチャンネルを追加する事が出来る。でもちょっと問題がある。それはアセンブリを生成する時に「外部リンクを表示」をONにした時に起きるバグのようだ(日本語版特有のかも知れないけどね)。

fig10

例えばアセンブリの右側の「+」ボタンを押すと下のようなダイアログボックスが出る。

fig11

ここでそのままOKを押すと以下のエラーが出てチャンネルが作成されない。

fig12

何が原因か調べた結果、どうやらプログラムがアセンブリの新規チャンネル生成時に名前を付け忘れているのが原因のようだ。アセンブリグループリストで生成したアセンブリを選んでチャンネルリストを見ると下のようにチャンネル名が無いチャンネルが見つかる。

fig13

エラーの原因はこれなので、右クリックして「名称変更」を選び、

fig14

適当な名前を付ける。チャンネル名は日本語や頭に数字が付くものは使えないみたいだ。

fig15

これでチャンネルに名前がついた。

fig16

改めて「+」ボタンを押してチャンネルを追加してみると、今度はエラーにならずに追加できる。そこで左側の「+」を押してRPMという名前のチャンネルを作った。ここにRPM単位の数値が入力されるとその回転数でモーターが回る仕組みだ。

fig17

作業平面に階層を戻すとこのようにモーターに入力と出力のコネクタが出来ている。

fig18

アセンブリはAssemblesパネルを表示させればプリセットがいろいろ入っているので、それを展開して使い方を研究するといいかもね。

それではみなさんよいゴールデンウィークを。自分もGW中は定期更新はお休みします。

カテゴリー別ページ



take_z_ultima at 12:03|この記事のURLComments(0)TrackBack(0)modo | CG

2011年04月27日

MAXの基点について調べてみた その4 3dsmax 2011

前回調べた作業基点だけどマニュアルに

3ds Max のインタフェースのどこからでもアクセスできるようなコントロールセットを作成しておくことを強くお勧めします

とあるので、これらの機能をボタンにしてみた。

まずは下のようなボタンのイメージを作った。MAXのボタンサイズは横24、縦24のものと、横16、縦15のものの2パターンがあるので、24X24のものを作ってそれを16X15にリサイズすることにした。

fig01

ただしボタンイメージはボタン1個1個をファイル化するのではなくて、1セットをまとめて作る。今回は8つのボタンを作ったので横のサイズが24X8=192ピクセルになった。

ボタンはRGB各8ビットのカラー画像+RGB各8ビットのマスク画像か、RGBA各8ビットのカラー&アルファーレイヤー画像のどちらかの構成にしなければならない。

ファイル形式はBMPで、ファイル名は

〜_24i.bmp
〜_24a.bmp
〜_16i.bmp
〜_16a.bmp

のように名前の後ろにサイズとイメージなのかアルファマスクなのかを示す「i」か「a」をつける事になっている。

今回はRGBAの4プレーンの32ビットのBMP形式で作成した。ただしアルファーレイヤーは真っ白で何も透明にならない形になっている。

MAXは作業タイプを変えるとボタンのパレットも変わっちゃうので、パレットによっては見え辛い絵柄になってしまう事もあるので、その時はそれにあわせて絵を描きなおすしか無いね。

さて、アイコンの画像ファイルWorking_Pivot_24i.bmpとWorking_Pivot_16i.bmpを作ったらそれをMAXがインストールされているフォルダ内の「ui/icon」フォルダにコピーする。そしてMAXを起動すると画像ファイルが読み込まれる。アイコンのリソース画像は起動時にしか読み込まれないそうなので画像ファイルを更新した時はMAXを再起動する必要がある。

次にメニューバーから「カスタマイズ」→「ユーザーインターフェースをカスタマイズ」を選択してユーザーインターフェースカスタマイズパネルを出す。

ツールバータブをクリックし、グループ「メインU.I」、カテゴリ「Working Pivot」を選択し、「新規」ボタンを押して

fig02

ツールバー名として「作業基点」と入力して「OK」を押す。

fig03

これで空のツールバーが出来たのでツールバーの角をドラッグして広げてそこにボタンをドラッグ&ドロップして挿入して行く。順番は以下のようにした。これはアイコンで作成したボタンのイメージ順だ。

  • 作業基点を編集
  • 作業基点を使用
  • 作業基点をビューに位置合わせ
  • 作業基点をリセット
  • 基点ビューを配置
  • 基点サーフェスを配置
  • 基点ビューを配置して位置合わせ
  • 基点サーフェスを配置して位置合わせ

fig04

ルールが並んだらアイコンを割り当てたいボタンを右クリックして「ボタンの外観を編集」を選ぶ。

fig05

マクロボタンを編集ダイアログが出たら「イメージボタン」オプションボタンを選び、グループから「Working_Pivot」を選ぶ。この名前が先に作った画像ファイルの名前だ。そして表示されたアイコンからボタンに割り当てたい画像を選んでOKを押す。

fig06

これを繰り返して全てのボタンを割り当てる。

fig07

出来たツールバーはこんな感じでレイアウトの適当な場所にドロップしてFIXしておけば、いつでも利用できるわけだ。

fig08

画像ファイルはアップしておいたよ。

それではまた次回。

maxまとめページ



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

2011年04月26日

modo501がキタ! その28 modo501

久しぶりに鍬で土を耕したら全身が・・・orz

今回は501で新たに加わったスケマティックビューについて調べてみた。

fig21

スケマティックビューはmodoに存在するオブジェクトが持つ様々なプロパティチャンネルを視覚的に操作するためのビューだ。

例えばProcedualオブジェクトで作った下の画面のような2つの歯車を同期させて回転させる場合、

fig01

歯車はアイテムリストからアイテム追加→Procedual→Gearと選択すれば生成される。そこでそれぞれ名前をGear1、Gear2に変更して、プロパティも下のように変更する。

これはGear1の設定ね。

fig02

そしてこっちがGear2の方。2つの歯車がかみ合うためには2つの歯車間で「歯の間隔」「接触角度」が一緒である必要があるよ。この歯車はGear1とかみ合わせるためにX方向に−2.63m移動させた(下の位置Xが−2.63mになっている)

fig03

小さい歯車の歯の数は32で大きい歯車の歯の数は74にしたので、小さい歯車が1回転した時に大きい歯車は−32÷74回転する必要がある(マイナスが付けてあるのは回転方向が逆になるから)。

そこでこれらの歯車の回転軸の角度がそういう比になるように設定してやればいいわけだけど、生成したばかりのアイテムには下の画像のように回転のチャンネルが無い。

fig04

そこでまず、回転角度のチャンネルを各アイテムに作ってやる。それにはそれぞれ歯車をアイテム選択して、プロパティパネルのトランスフォームのところで回転:Zの数値を適当に変えて戻してやるだけでOKだ。

fig05

改めてチャンネルパネルを開けてみると回転チャンネルが追加されているのが確認できる。

fig06

Gear2の方は移動もしているので位置チャンネルも出来ている。

fig07

これで準備できたので「セットアップ」タブをクリックしてセットアップレイアウトに切り替える。

fig08

アイテムリストでGear1を選んでチャンネルタブを押し、回転Zをスケマティックビューにドラッグ&ドロップする。

fig09

これでチャンネルノードが1つスケマティックビューに追加された。ノードには他のノードと接続するためのコネクタと呼ばれる丸いボタンが付いていて、他からの入力を受け付け、右側は他の入力へ出力する。

fig10

同様にしてGear2の回転Zチャンネルもスケマティックビューに追加する。

fig11

ここで2つのチャンネルを繋いで見たい。それにはGear1の回転Z出力コネクタをドラッグしてGear2の回転Zの入力コネクタにドロップするだけだ。これで2つのチャンネルがリンクする。

fig12

下のGIFアニメはGear1をZ軸回転させてみたところ。Gear2が同じ方向に同じ角度で回転するのが確認できる。

fig13

でも2つとも同じ回転しても意味無が無い。リンクを切るには入力コネクト側をドラッグして外してやるか、リンクを選択してBackSpaceキーを押せばいい。

fig14

さて、Gear2の回転角度はGear1と同じじゃなくて、Gear1が1回転した時にGear2は32÷74回転反対方向に回転する必要がある。そこでGear1の回転角度をそのままGear2に流すのではなくて、その値を−32÷74倍してやる必要があるわけだ。

ここで新たに演算のモディファイヤを追加する。スケマティックビューの「モディファイヤの追加」ボタンを押して、「演算」→「基本演算:乗算」を選ぶ。

fig15

これで乗算のモディファイヤが追加される。このモディファイヤは2つの入力コネクタを持ち、それらに入力された値を掛け合わせた値を出力コネクタに出す。まずは下のように接続する。

fig16

次に乗算モディファイヤのをスケマティックビューで選択すると、プロパティパネルに値A,値Bのプロパティが出てくる。この乗算モディファイヤはアイテムリストからも選択出来る。アイテムリストのシーン名の横の+ボタンを押して展開すると出てくる「基本演算」がそれだ。

乗算モディファイヤの入力コネクタは上が値Aで下が値Bという名前のチャンネルで、値Aの方はGear1に接続してある。ここで値Bの方に「−32/74」と入力する。modoは値を入力するところに式を入力すると計算結果が入力できる。

これで値Aから入ったGear1の回転角度と-32/74の値が掛け合わされた値が出力コネクタから出る事になる。  

fig17

それはGear2の回転角度に入力されているので、このようにGear1を回転させると2つの歯車がうまくかみ合って回転するようになる。

fig18

このようにコネクタは何か他のコネクタを接続する代わりに値を設定したり、その値をキーフレームアニメーションさせることも出来る(チャンネルなんだから当たり前だけどね)。

スケマティックビューに表示されているアイテムは選択してBackSpaceキーを押すことでビューから除去することも出来るし、ビューの何も無いところを右クリックして、「消去」を選ぶ事で全部を一度に除去することも出来る。あくまで「除去」なのでシーンから削除するわけじゃないよ。

fig19

除去したアイテムは再びドラッグ&ドロップでビューに戻せる。ただしノードの接続はどんどん複雑になり、どれをどこに接続したかだんだんわからなくなる。だからノードの接続状態をビューに再現しようにも、どのノードが必要なのかわからなくてドラッグ&ドロップ出来なくなってしまう。そんな時に有効なのがコネクタをマウスの中ボタンでクリックする方法だ。

下のGIFアニメはスケマティックビュー内のアイテムを除去した後で演算モディファイヤをビューにドラッグ&ドロップして、そのコネクタを中ボタンクリックしたものだ。コネクタに接続されたアイテムが自動的にビューに挿入されて接続状態が復元されるのが確認できる。

fig20

これはマニュアルを見ないとなかなか知りようが無い機能だけど覚えておくと便利だよ。

長くなったので続きはまた次回。

カテゴリー別ページ



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

2011年04月25日

Maximaを使ってみた その37

さて、実際の数値で直線近似をしてみたい。

例えば下のようなX−Y対になったデータがあったとして、

X Y
1 5
8 9.5
6 8
3 5.2
12 10

これらの点に対して直線の方程式

ax+by + c = 0

を適用すると、全ての点を通過する直線はありえないので誤差εが出る。

fig05

これらの式を行列の形にまとめると、

fig06

となり、

fig07

と置くと、

||AX+c1||2

が最小になるXを求めると、rank(A)=nの場合はAを特異値分解して

fig02

としたときに

=−cdiag(σ1-1,・・・,σn-1

になるのが前回の結論だった。

そこでAを定義して、

fig01

これを特異値分解していく。まずはAAを計算して

fig05

ここから固有値と固有ベクトルを求める。

fig02

固有値は大きい順に並べる必要があるので、λ=546.0、λ=14.26 とし、それに対する固有ベクトルはv1=[1.0,1.104]T 、v2=[1.0 , -0.91]Tになる。

ここで得られた固有ベクトルの内積をとってみるとほぼ0なのでこの2つのベクトルは直交している。

fig11

右特異行列Vは実直交行列で、VV=Iにならなくちゃならないので、固有ベクトルのノルムがそれぞれ1になるように正規化する。 これらのベクトルを列とする行列Vを組み立てる。

fig03

次に固有値λから特異値σ(ただしσ=√λ)を作り、それを組み立てて行列Σを作る。

fig04

次に、得られたσと右特異行列から左特異行列Uを作る。まずAVを計算して、

fig06

得られた行列の各列をベクトルと見なして対応する特異値で割ると左特異ベクトルu が得られる。それらを列ベクトルとして組み立てて左特異行列Uを得る。

fig07

本来ならUは正規直交化しなくちゃならないんだけど、Xの式では3列目以降のベクトルは必要ないのでそのまま使う。

これでUもΣもVも得られたのでこれらが本当に行列Aの特異値分解になっているか掛け合わせてみると、

fig09

となって確かにこれは行列Aだ。

そこでこれらを前回求めた誤差ベクトルεのノルムを最小化するベクトルXの式に当てはめると、

fig08

となる。これらを直線の式に代入してyの式に直すと、

fig10

となり、与えられた点を最もよく表わしている直線の法的式はy=0.48X+4.753となった。実際にプロットしてみたのが下の画像だ。確かに各ポイントの傾向を表わすような直線になっている。

fig12

それではまた次回。


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

2011年04月22日

MAXの基点について調べてみた その3 3dsmax 2011

前回の続きだ。

fig01基点をギズモ化して直接操作出来るようにする「基点にのみ影響」には位置合わせオプションがある。

「中心オブジェクト」は基点をそのオブジェクトの中心位置に移動させる。基点方向には影響を与えない。

fig03
 

「オブジェクトに位置合わせ」は基点の軸方向を本来のオブジェクトのローカル座標軸(変換行列軸)の方向とあわせる。基点位置には影響を与えない。

fig04
 

「ワールド座標に位置合わせ」は基点の軸方向をワールド座標の軸の方向とあわせる。基点位置には影響を与えない。

fig05
 

「基点をリセット」は基点の位置と方向を本来のオブジェクトのローカル座標軸の位置と方向に戻す。

fig06
 

fig02同様に「オブジェクトにのみ影響」にも専用の位置合わせオプションがある。これらは基点のものと裏表の関係で、「中心オブジェクト」が基点をオブジェクトの中心に移動させるのに対して「中心基点」は基点がオブジェクトの中心にくるようにオブジェクトを移動させるものだし、「オブジェクトに位置合わせ」が基点をオブジェクトの方向に合わせるものに対して「基点に位置合わせ」は基点方向にオブジェクトの方向を回転して合わせるものになっている。「ワールド座標に位置合わせ」は基点バージョンでは基点の方向が、オブジェクトバージョンではオブジェクトの方向がワールド座標の方向にあわせられる。

「中心基点」

fig07

「基点に位置合わせ」

fig08

「ワールド座標に位置合わせ」

fig09

以上のようにオブジェクトの基点は自由に設定できるし、ワンタッチでオブジェクトやワールド座標と合わせたりも出来る。しかし基点を変更すればその後のアニメーションの挙動とかにも影響が出てしまうので、基点をいじっちゃまずい事も多い。

fig10そこで基点とは別にモデリングなどの作業のために別の基点が用意されている。それが作業基点(WP)だ。作業基点はオブジェクトの基点とは違ってシーンに1つしか存在せず、アニメーションにも影響を与えないから使い終わったら放置しておいても何の問題もない。

マニュアルにはこんな事が書いてある。

重要:作業基点ツールのほとんどは、[階層]パネル以外の各種パネルでの作業に役立ちます。たとえば、[修正]パネルでメッシュ サブオブジェクトを編集するときなどに利用できます。したがって、 [ユーザインタフェースをカスタマイズ][メイン UI]グループ[Working Pivot]カテゴリを使用して、3ds Max のインタフェースのどこからでもアクセスできるようなコントロールセットを作成しておくことを強くお勧めします。たとえば、作業基点用のカスタムのツールバーを作成して、メッシュの編集時に作業基点の各種コマンドにアクセスできるようにボタンを割り当てておくとよいでしょう。

これだけ「お勧め」しているにも係わらず、これらの機能にはアイコンが割り当てられて無いのはどうなのよ?と思ったりするわけだが・・・

まあその問題は後回しにするとして、作業基点は隠れたお役立ちツールなわけだ。使い方は「作業基点(WP)を編集」ボタンを押して作業基点をギズモ化して位置や方向を必要な状態に編集し、次に「作業基点(WP)を使用」ボタンを押して、本来の編集作業を開始する。終わったら再び「作業基点(WP)を使用」ボタンを押して、モードから抜ければいい。「作業基点(WP)を使用」ボタンを押すと自動的に「変換中心」は「変換座標の中心を使用」に、「参照座標系」は「作業」に切り替わるので、ただちに作業基点の位置と方向を使った作業が開始できるのも便利なところだ。

下のGIFアニメは作業基点でポリゴンを回転させてみたところだ。参照基点が「作業基点(WP)を編集」ボタンを押すと「ローカル」に、「作業基点を使用」ボタンを押すと「作業」に切り替わっているのが確認できる。

fig11

作業基点(WP)にも位置や方向などを合わせるための便利なオプションがあって、

「ビューに平行」と「リセット」ボタンは「作業基点(WP)を編集」か「作業基点(WP)を使用」がONになっている時に有効で、

「ビューに平行」は作業基点の位置を変えないまま方向をアクティブなビューポートに対して水平垂直をあわせる。

fig13

「リセット」は作業基点の方向を変えないまま現在選択されているオブジェクトの基点に位置をあわせる。オブジェクトが選択されていない場合はワールド座標にあわせて、オブジェクトが複数選択されている場合は最初に選択されたオブジェクトの基点にあわせる。

fig12

「基点を配置」はビューポートをクリックすることで作業基点の位置や方向を設定するためのもので、「ビュー」はビューポート上のクリックした位置に作業基点が移動し、「サーフェス」はクリックした位置にあるオブジェクトのサーフェスに作業基点が移動する。その際に「ビューに平行」がONなら作業基点の方向はアクティブビューポートに平行になり、OFFの時は「サーフェス」の時だけクリックしたサーフェスの法線方向に回転する。

fig14

それではまた来週。

maxまとめページ



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