2012年11月
2012年11月25日
そろそろ年賀状作り始めるぜぇ〜 その2
年賀状用のCGの進捗状況はこんな感じだぜぇ〜。ようやく顔の形がハッキリしてきたぜぇ〜。まだこれを使ったワイルドネタが思い浮かばないぜぇ〜。
このCGはmodo601SP4で作成中だ。頭の原型はmodoのサンプルデータとして提供されているWoman Head 02のマーガレット嬢だ。口が閉じているモデルなので開けられるように加工して、それをメッシュスカルプト出来るようにポリゴンの再分割でちょっとだけ細かくして、スカルプトツールで加工した。人間の顔の構造なんてそんなに違いは無いから1から作るよりアリモノを加工する方が手っ取り早いもんね。それと使い勝手はディスプレースメントマップを使うよりメッシュスカルプトの方が快適だね。だいたいの形が出来たらプレビューをスクリーンキャプチャしてPhotoshopで写真とレイヤーを重ねて比較して、バランスを調整した。頭は基本的に左右対称で作っておいて最後に対称を崩して形状を調整する。この時モーフマップとか使っておくとデータ的な対称を崩さないで形状の対称を崩せるからいいかも。
まだマテリアルはデフォルトで601の新機能のスキンシェーダーをかけただけなんだけど、それだけでこんな感じにレンダリング出来ちゃってる。これでどんな事が出来るかまだちゃんと調べてないんだけど、かなり使えそうだな。あとはこれにシワとか色とかのせていかないとね。
毛は頭のモデルから部分的にポリゴンをコピーして、そのポリゴンにヘアガイドを付けて「範囲」モードで処理している。ヘアガイドは一回選択してカット&ペーストして生やしたポリゴンから切り離して一本ずつ整えている。テクスチャマッピングでファーマップの範囲を絞ったりはしていない。ガイド範囲はあまり広くとらずに穴が開いた部分はガイドをコピペして配置する事で植毛している。まだサイドの部分がちょっと残っている。
これがアイテムを切り替えてみたもの。眉毛なんか描いちゃった方が早そうではあるな。おでこにかかっている毛だけ別のファーにしてある。
2012年11月22日
Windows7でタブレット使ったら丸が出た
久しぶりにペンタブレットを使おうと思って導入したWindows7のパソコンに繋いでみた。ドライバのインストールまでは問題無かったんだけど、いざ使おうと思ったらドラッグを始めようとするとこんな丸が出て邪魔をする。さらにダブルクリックすると変な波紋のアニメーションまで出てくる。
どうやらこれはWindows7のTabletPC機能なのだそうだ。はっきり言って邪魔過ぎる。
解決策としてはこのサービスを停止すればいいわけだな。
手順としてはコントロールパネル(またはそのシステムとセキュリティ内)から「管理ツール」をクリックして
リストから「サービス」をダブルクリック。
サービスから「Tablet PC Input Service」を探してダブルクリック。
プロパティで「スタートアップの種類」を「無効」にして「サービスの状態」で「停止」のボタンを押す。
これでOKすると、サービスのTabletPCInputServiceの状態がこのように変わる。
あとは再起動すれば設定完了だ。
もちろんこの設定をすればタブレットPCのサービスは無効になるので支障がある場合(Officeの手書き入力とかができなくなるらしい)は戻す必要があるよ。
2012年11月21日
2013の新機能を探る その51 3dsmax 2013 SP2
今回はMassFX Toolsパネルについて調べてみたい。
MassFX Toolsパネルには「World Parameters(ワールドパラメータ)」 「Simulation Tools(シミュレーションツール)」 「Multi-Object Editor(マルチオブジェクトエディタ)」 「Display Options(表示オプション)」の4つのタブがあり、MassFX Toolbarのフライアウトボタンから直接アクセスする事が出来る。
それぞれの役割は以下の通り。
- 「World Parameters(ワールドパラメータ)」には物理シミュレーションのための全体に共通する設定やコントロールが提供されている。
- 「Simulation Tools(シミュレーションツール)」には、シミュレーションのコントロールやベイク、MassFXエクスプローラなどのユーティリティへのアクセスボタンが提供されている。
- 「Multi-Object Editor(マルチオブジェクトエディタ)」には、リジッドボディとコンストレイントヘルパーのローカル設定のロールアウトと同じものが提供され、選択オブジェクトに対して一括設定が出来るようになっている。
- 「Display Options(表示オプション)」には、物理メッシュのビューポート表示を切り替えるためのコントロール、およびシミュレーションをデバッグするための MassFX ビジュアライザーが提供されている。
まず「World Parameters(ワールドパラメータ)」から見て行くと、
この中には「Scene Settings(シーン設定)」「Advanced Settings(拡張設定)」「Engine(エンジン)」の3つのロールアウトがある。
左の画像が「Scene Settings(シーン設定)」ロールアウトを展開したところ。
「Use Ground Collisions(グラウンド衝突を使用)」オプションはONにするとシミュレーションにホームグリッドのXY平面に平行な無限平面の静止リジッドボディを組み込む。だからこのオプションがONの時は見えない床が存在するような感じだ。
その高さは「Ground Height(グランド高さ)」パラメータで決まり、この平面とZ軸との交点のZ座標値になっている。
この床のことをうっかり忘れて床にめり込んだ状態でリジッドボディを配置してしまうと、シミュレーションの最初でこのようにはじき出されるような事になってしまう。
これはダイナミックラグドールを設定した時も同じで、シミュレーション開始でいきなりラグドールが跳ね飛んだら、
それは脚に設定されたリジッドボディが床と干渉しているせいだ。
そんな場合はGround Heightを調整して床自体を下に下げて干渉をなくす方法もある。
また、この床の摩擦と弾力性は固定値で変更出来ないので、ちゃんとバウンドさせたい時などはこのオプションをOFFにしてリジッドボディの平面を作成した方がいい。
例えば下のシミュレーションは球体のBounciness(弾力性)を1.0にしたものだ。Ground Collision(グラウンド衝突)の弾力性が固定値で変更出来ないので、最大でもこのバウンドしかできない。
今度はこのオプションをOFFにして平面のリジッドボディを追加して、そのBounciness(弾力性)も1.0にしたもの。今度は落ち始めとほぼ同じ高さまで跳ね返った。
「GlobalGravity(グローバル重力)」はシミュレーション中の重力を設定するもので、3つのタイプから選択出来る。
「Directional Gravity(指向性重力)」は重力加速度の方向をXYZの軸方向で設定し、重力加速度も数値で設定する。地球上の重力なら-9.81m/s2でOKだ。もし単位がインチ設定になっているなら、-386.221in/s2だ。月の表面ならこの1/6に設定すればいいわけだね。重力加速度の値が小さくなれば物体はゆっくり落ちるようになる。
「Gravity by Force Object(フォースオブジェクトによる重力)」は重力スペースワープを使って重力を指定するもの。この設定は2013からの新機能で、いちいち個別にリジッドボディとGravity(重力)スペースワープをリジッドボディ側の「Force(フォース)」ロールアウトで接続しなくても、ここで一括して接続する事が出来る。
ただし、何故かGravityスペースワープのSpherivca(球状)モードを使うことが出来ない。
下のシミュレーションはGravityスペースワープをグローバル重力として使ってみたものだ。Gravityスペースワープの方向に重力が働いて球体が運動しているのがわかる。
ここでGravityスペースワープをSphericalに切り替えてみた。
でも球体の運動は変わらずPlanarモードの重力を受けて動いている。
ここでリジッドボディ側のフォース設定をワールド重力を使わない設定にして、Gravityスペースワープを直接フォースとして設定してみた。
これがそのシミュレーション結果。今度はGravityスペースワープがSphericalモードで機能して、球体がGravityに引き寄せられる運動をしている。
せっかくの新機能だけど、今のところPlanarモードでしか機能しないようだ。Sphericalモードを使いたい場合はマルチオブジェクトエディタを使ってリジッドボディを全部選択して一括してフォースの設定をするしかなさそうだ。
それではまた次回。
2012年11月20日
modo601が来た! その70 modo601SP3
以前から気になっていたマニュアルには載っているのにチャンネルリストには出てこないreVolumeなどのチャンネルについてちょっと調べてみた。
まず次のスクリプトを書いて物理演算アイテムのチャンネルリストを取得してみた。このスクリプトは選択したメッシュアイテムのチャンネル数を調べて全チャンネルの名前をイベントログパネルに出力するものだ。
#python import sys
import lxid = lx.eval('query sceneservice selection ? mesh')
lx.eval('query sceneservice item.name ? %s' % id)
n = lx.eval('query sceneservice channel.N ?')
for i in range(n):
lx.out(lx.eval('query sceneservice channel.name ? %s' % i))
スクリプトの実行結果と物理演算アイテムのチャンネルリストを比較したら以下のチャンネルがチャンネルリストに表示されていないのがわかった。
reCenterOfMass.X
reCenterOfMass.Y
reCenterOfMass.Z
rePosition.X
rePosition.Y
rePosition.Z
reRotation.X
reRotation.Y
reRotation.Z
reVolume
reVelocity.X
reVelocity.Y
reVelocity.Z
reAngularVelocity.X
reAngularVelocity.Y
reAngularVelocity.Z
reHitCount
reJustHit
reLastHitTime
reLastHitForce
reLastHitPos.X
reLastHitPos.Y
reLastHitPos.Z
reLastHitNormal.X
reLastHitNormal.Y
reLastHitNormal.Z
これを見ると確かにマニュアルに記されているreVolumeやreVelocityが存在している事がわかる。
そこで今度はこれらのパラメータが機能しているかを調べてみた。
一番簡単なのはコマンド入力でチャンネルを表示させる方法だ。例えばreVolumeチャンネルの値が知りたければ物理演算アイテムを選択しておいて、メニューバーからレイアウト→パレット→コマンド履歴を選んでコマンド履歴パネルを出しておいて
item.channel reVolume ?
と入力すれば「結果」パネルに値が表示される。
reVolumeチャンネルはマニュアルには
reVolume:アイテムの計算上の体積。
と書いてある。そこで大きさが異なる2つのBOXを作って物理演算アイテムにして、reVolumeチャンネルを調べたらどちらも1.0だった。チャンネルでも表示されないだけあって、どうやら機能していないようだ。
ちなみにチャンネルリストに無いチャンネルは当然リンクパネルにも出てこないし、スケマティックビューにドラッグ&ドロップも出来ない。だからリギングにも使えないわけだけど、手動でコマンド入力して行けば他のチャンネルにリンクを張ったりは出来る。だから例えば物理演算アイテムにユーザーチャンネルを作成してそこに見えないチャンネルからリンクを張れば、見えるチャンネルにすることも可能だ。まあ機能していないチャンネルが役に立つかは不明だけど・・・。
まあ他の用途にも使えるので手順を書いておくと、まず物理演算アイテムのチャンネルリストを出して、その一番下にある(ユーザーチャンネルの追加)をクリックする。
出てきた作成パネルにチャンネル名とチャンネルの属性を設定してOKを押し、受け皿となる新規チャンネルを作成する。
チャンネルリストには作ったチャンネルが表示される。
ここでこのチャンネルを右クリックして「チャンネルリンク」を選び、
チャンネルリンクパネルを出す。右側のドリブンチャンネルリストをスクロールして行くと、一番下に新しく作ったチャンネルが見つかる。
この状態でコマンド履歴パネルを「履歴」モードに切り替える(パネルの上に並んだボタンの「履歴」を選択する)と、下のようにチャンネルリンクパネルを表示する時に新規に作ったチャンネルを選択しているので、その履歴が残っているのが確認できる。ここでは、
select.channel {mesh063:myVolume} set
となっている。この「mesh063」が物理演算アイテムのIDで、myVolumeがそのチャンネル名だ。この行をクリックすると、コマンド入力にこの行がコピーされる。
ここでチャンネルの名前を「reVolume」に書き換えて
select.channel {mesh063:reVolume} set
Enterキーを押すと、この物理演算アイテムのreVolumeチャンネルが選択状態になる(と言っても目には見えないけど)。
次にチャンネルリンクパネルに戻って「myVolume」をクリックすると、選択状態になる。このドリブン側が選択状態になるのは、ドライバ側のチャンネルが選択されている時だけなので、左側のリストに何も出ていなくてもチャンネルはちゃんと選択されているようだ。後は「リンク追加」ボタンを押せば、リンク完了だ。
リンクされるとこのような状態になる。
リンクを解除したい場合も、まずドライバ側のチャンネルをコマンド入力で選択状態にしてから
select.channel {mesh063:reVolume} set
ドリブン側を選択して「リンク解除」ボタンを押せばいい。
これでチャンネルの選択を解除するなりして更新させると、このようにreVolumeチャンネルの内容がmyVolumeに表示されるようになる。
もちろんスケマティックビューにドラッグ&ドロップすれば、このようにチャンネルが表示される。
ところで体積が計算されていないから大きさが変わってもアイテムの重量が変わらないかと言えばそうでもないようで、下のシーンはヒンジコンストレイントで天秤を作り、その両端に大きさの異なるBOXをポイントコンストレイントでぶら下げたものだ。
ぶら下げたBOXを質量ソース「localMass」にしてシミュレーションした場合、アイテムの質量は「質量」パラメータで決まるので、両方のBOXともに1.0にしておくとバランスが取れて天秤は動かなかった。
次に両方のBOXの質量ソースを「localDensity」に切り替えてみると、質量は密度と体積を掛け合わせたものになるので、大きいBOXの方が質量が大きくなり、
天秤はこのように傾いた。
ちなみにこの時reVolumeを調べてみたけどやっぱり変化は無かった。でもどっかで体積は計算しているみたいだね。
それではまた次回。
2012年11月19日
2013の新機能を探る その50 3dsmax 2013 SP2
MassFXをいろいろ調べて来たけどどうにも腑に落ちない事がある。それはキネマティックとダイナミックの切り替えについてだ。これが許されるのは唯一リジッドボディがキネマティックモードの時に「Until Frame(制御フレーム)」を設定した時だけで、出来るのは特定のフレームでキネマティックからダイナミックにモードを切り替えるだけだ。だからキーフレームアニメーションの途中で衝突が起きてダイナミックモードに切り替わって物理運動するみたいな事は出来ない。しかもせっかく切り替えが出来る唯一の方法もラグドールに適用する事はマニュアルで以下のように警告されている。
注:最良の結果を得るには、Biped のラグドールを[ダイナミック](Dynamic)に設定する際、Biped に既存のアニメーションが含まれないようにしてください。 特に、ダイナミック ラグドールに[ウォーク](Walk)ツールを使用してアニメートした Biped を使用すると、予期しない結果が発生する場合があります。 同様に、ラグドール オブジェクトの個々のリジッド ボディを、シミュレーション中に[有効フレーム](Until Frame)オプションを使用して[キネマティック](Kinematic)から[ダイナミック](Dynamic)に切り替えないでください。 通常は、ラグドールのアニメーション タイプを混ぜないでください。MassFX でラグドールの動きを完全にコントロールできるようにする(ダイナミック)か、標準のアニメーション方法を使用する(キネマティック)かのどちらかにしてください。
だからBipedが歩いている途中で車に撥ねられるみたいな事が無理って事になる。
これじゃちょっと面白くないので簡単な解決方法を考えてみた。ラグドールはまだ登場してないのでそれは後日と言う事で、今回は単純なモデルでやったみたのが以下の手順だ。
まずこんなシーンを用意した。この円錐はキーフレームアニメーションをしている(最初パスコンストレイントで作ったんだけどあとでキーをベイクした)。
この円錐をキネマティックリジッドボディに設定する。
次にここに適当な大きさのBOXを作ってこれをダイナミックリジッドボディに設定した。
そしてBOXから円錐にリジッドコンストレイントを設定した。
これで円錐の動きにあわせてBOXが動くようになった。ここでBOXを選択し、「Bake Selectedl(選択をベイク処理)」ボタンを押してBOXの動きを焼き付ける。
次に円錐の方をダイナミックリジッドボディに切り替える。BOXの方はベイクをしたのですでにキネマティックに切り替わっている。これでシミュレーションをすると円錐の動きはそのままでダイナミックリジッドボディとして動くようになった。
次にリジッドコンストレイントの「Breakable(分裂)」をONにして、シミュレーション時にコンストレイントが切れないギリギリの大きさの「MAXForce(最大フォース)」と「MaxTorque(最大トルク)」の設定を探す。
これで元の動きのまま、ちょっとの衝撃でコンストレイントが外れるダイナミックリジッドボディの円錐が出来上がった。
あとはこの円錐の他のリジッドボディをぶつければ、コンストレイントが外れて物理運動する事になる。
とまあ少ない頭(毛じゃないよ)を使って考えてみた。
それではまた次回。