2007年11月

2007年11月30日

足を作る その13 modo 203

屈伸今回はこのために作ったカーブデフォーマーを使って足のももとすねを接続するチューブを作って行くよ。今回下のスクリプトを使うので持っていなかったらダウンロードしてね。カーブデフォーマーはバグフィクスしたのでv2を使ってね。

ArrayBridge

CurveDeformer

fig01チューブは最初から作るのもなんなので、以前に頭や胴体で作ったチューブの一部をコピペで持ってきた。これを新しいレイヤに貼り付けて不必要なポリゴンは削除してArrayBrdigeが使えるように選択セットA1・B1を付け直した。そして座標原点にセンタリングして長手方向をZ軸に沿うようにセットした。

fig02このブロックを複製して適当に間隔を空けて10個並べた。次にArrayBrdgeパネルを出して範囲を調整して隣どうしのブロックを繋いだ。maxの値はブロックの間隔より大きく、ブロックの長さより小さくとってね。そして両端はベベルで伸ばした。

fig03次に新たなレイヤを作ってそこにカーブでチューブをどう繋げるかを描いた。この時気をつけなくちゃならないのは、ポイントの間隔をなるべく等間隔にとること。そしてカーブとチューブはどちらも同じ階層のレイヤにして位置回転スケールを同じにしておくことだ。次に再びチューブのレイヤを選択して、頂点リストパネルでMorphマップを新規に割り当てる。チューブをモーフ変形で加工しておけば、後から足の角度が変わったりしても、カーブを調整しなおしてカーブデフォーマーをかけるだけで簡単に修正が出来るけど、オリジナルを直しちゃうと、どうにもならなくなるので、修正することがあるならモーフで変形させたほうがいい。301の人はモーフ変形はそのままではレンダリングされないので、アイテムを右クリックしてモーフデフォーマーを追加して、デフォーマーのプロパティで該当するモーフマップを選択してフ透明度を100%にしてね。203の人は保存するとモーフ選択がOFFになっちゃうから開くたびにいちいち選択しないとならないから面倒だったらモーフしたチューブを複製して、頂点マップメニューからモーフの適用をしてやってもいいと思うよ。オリジナルは残しておかないと、修正が利かなくなるから気をつけてね。
準備が出来たら他のレイヤは全部非表示にしてカーブを背景レイヤ、チューブを前景レイヤにしてチューブをポリゴン選択してカーブデフォーマーを起動する。

チューブに模様が刻んである部分があるんだけど、せっかく作った模様が内側に回ってしまって見えなくなっている場合は、モーフをOFFにして、オリジナルのチューブを回転させてから再びカーブデフォーマをかければいいよ。

今回カーブでフォーマを使ってみて、修正するたびに全レイヤのOFFとかやるのはめんどくさかったので、この辺はワークフローを見直さないといけないな。それと等間隔って仕様はやっぱりメンドクサイな。

それではまた次回。

スクリプトまとめページ( Down Load はこちらから)  

カテゴリー別ページ

modo操作メモ 



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

2007年11月29日

CurveDeformerバグフィックスしました modo 301

カーブデフォーマーを使ってたら計算できない場合が出てきたので調べてみたら、ものっ凄く小さな数値誤差でエラーが起きていた。エラーが起きていたのはmath.acos()で、これに1以上の数値が与えられていたのでエラーになっていた。lx.out()で与えた数値見ても1.0なんだけど、ものっ凄く小さくはみ出してたみたいだな。とりあえずif文でこれをカットしてエラーが起きないようにしたよ。

sample185_v2.lzh

それではまた次回。

スクリプトまとめページ( Down Load はこちらから)  

カテゴリー別ページ

modo操作メモ 



take_z_ultima at 18:26|この記事のURLComments(0)TrackBack(0)modo | CG

ワールド<=>ローカル座標変換 modo 301

日本語正式版

キタ━━━━━━(゚∀゚)━━━━━━ !!

さて、sceneserviceスクリプトクエリーインターフェースのitemアートリビュートを

query sceneservice item ?

とやって調べていたら、

  • item.worldMatrix
  • item.worldMatrixInvrs

と言うのが出てきた。worldが付いているのでこれはアイテム座標をワールド座標に変換したり、ワールド座標をアイテムのローカル座標に変換するマトリクスっぽい感じだ。そこでさっそく適当にアイテムをペアレントしてそのアイテムに対してクエリーしてこれらのアートリビュートの値を取得して検証してみた。その結果、どちらも3×3のマトリクスを取得出来て、これらはそれぞれスケールと回転の変換を行ってローカルとワールド座標系の相互変換をするマトリクスだと確認出来た。Invrsが付いている方がローカルからワールドへ変換するもので、付いてない方がワールドからローカル座標へ変換するマトリクスだ。
ただ、残念なことに4×4じゃないと移動の変換が出来ないので、移動の変換が含まれていない。使えるか使えないか微妙なところだな。これに何らかの加工をちょっとすれば全ての変換をカバーできるようになるのかは不明だ。何かからくりがあるのかな?

ポイント座標はvert.wposとvert.posでワールドとローカルの座標値を取得出来ることがわかったけどアイテムはやっぱり簡単に行かないようだ。そこで汎用的に使えるスクリプトのルーチンを整理してみた。前に作って組み込んだものがいくつかあったんだけど、いつの間にかスケール変換が抜け落ちていたり Σ(゚д゚) していたので、改めて形にしておこうと言う事だ。

def getWM(item):
    rtm=[1.0,0.0,0.0,0.0,
            0.0,1.0,0.0,0.0,
            0.0,0.0,1.0,0.0,
            0.0,0.0,0.0,1.0]
    while item!=None:
        item=lx.eval("query sceneservice item.parent ? %s" % item)
        if item==None: break
        pos=lx.eval("query sceneservice item.pos ? %s" % item)
        scl=lx.eval("query sceneservice item.scale ? %s" % item)
        matrix=lx.eval("query sceneservice item.matrixInvrs ? %s" % item)
        rtm=mulm4(rtm,cnvMInv(scl,matrix,pos))
    return rtm

def getLM(item):
    rtm=[1.0,0.0,0.0,0.0,
            0.0,1.0,0.0,0.0,
            0.0,0.0,1.0,0.0,
            0.0,0.0,0.0,1.0]
    while item!=None:
        item=lx.eval("query sceneservice item.parent ? %s" % item)
        if item==None: break
        pos=lx.eval("query sceneservice item.pos ? %s" % item)
        scl=lx.eval("query sceneservice item.scale ? %s" % item)
        matrix=lx.eval("query sceneservice item.matrix ? %s" % item)
        rtm=mulm4(cnvM(scl,matrix,pos),rtm)
    return rtm

def cnvMInv(s,r,t):
    return [s[0]*r[0],s[0]*r[3],s[0]*r[6],0,
            s[1]*r[1],s[1]*r[4],s[1]*r[7],0,
            s[2]*r[2],s[2]*r[5],s[2]*r[8],0,
            t[0],t[1],t[2],1]

def cnvM(s,r,t):
    return [r[0]/s[0],r[3]/s[1],r[6]/s[2],0,
            r[1]/s[0],r[4]/s[1],r[7]/s[2],0,
            r[2]/s[0],r[5]/s[1],r[8]/s[2],0,
            -(t[0]*r[0]+t[1]*r[1]+t[2]*r[2])/s[0],
            -(t[0]*r[3]+t[1]*r[4]+t[2]*r[5])/s[1],
            -(t[0]*r[6]+t[1]*r[7]+t[2]*r[8])/s[2],1]

def mulm4(a,b):
    m=[]
    for i in range(4):
        for j in range(4):
            sum=0.0
            for k in range(4):
                sum=sum+a[i*4+k]*b[k*4+j]
            m.append(sum)
    return m

def trans(M,v):
    return [v[0]*M[0]+v[1]*M[4]+v[2]*M[8]+M[12],
            v[0]*M[1]+v[1]*M[5]+v[2]*M[9]+M[13],
            v[0]*M[2]+v[1]*M[6]+v[2]*M[10]+M[14]]

ソースをアップしておいたので使うときはそっちをダウンロードしてね。使い方は変換対象のitemIDを取得してgetWM(item)とgetLM(item)に渡して呼び出すと、それぞれワールド座標変換とローカル座標変換の4×4のマトリクスが得られる(item.worldMatrixで取得できるマトリクスの転置行列の配置になっているから注意してね)。これを使って座標変換するにはtrans(M,v)ファンクションを使って、Mに取得したマトリクスを、vに変換したい座標(x,y,z)を入れて呼び出せば変換された座標が返って来るよ。

ちなみにmodoのアイテムはローカルからワールド座標に変換される時はスケール→回転→移動の順で変換されるようだよ。

さっそくこれを使ってExpressionのdistance()ファンクションをペアレントに対応させたよ。

それではまた次回。

スクリプトまとめページ( Down Load はこちらから)  

カテゴリー別ページ

modo操作メモ 



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

2007年11月28日

足を作る その12 modo 203

footさて、久々に続きをば。そろそろ年賀状の準備もしないとなぁ。

fig01前回の最後で慌ててジョイントの円柱を切断しちゃったんだけど、今回はそれをブリッジでもう一度繋ぎなおしてからスタート。ループスライスで溝を作ってベベルで押し込み、ジョイントの内側と外側を分離して、エッジベベルで面取りする。

fig02次に内側の部分をカット&ペーストで新しく作ったレイヤーにペーストして足の内側の支柱部分をベベルで延ばして作成する。ジョイントの内側は放置しておいても問題ないけどとりあえずブリッジで繋いでおく。

fig03レイヤーに名前を付けてピボット位置を調整して回転の中心位置をジョイントの中心に持ってくる。膝の側面の多角形ポリゴンがスムージングの影響で変な影が出ているので、ベベルで面取りの面からワンクッション入れて影を解消する。
必要の無くなったレイヤーは削除してパーツをペアレントする。

他に作ったパーツのファイルをドラッグ&ドロップでmodoに読み込んで、さらにこのシーンにドラッグ&ドロップで組み込んで、上から順にペアレントして一番下の部品が一番下の子になるようにして、大きさや配置をアイテム選択モード以外のモードで調整して、ピボットを各パーツの回転中心に移動させれば、関節がちゃんと動くようになるよ。他のアイテムを持ち込む時にシェーダーの類もうっかり持って来ちゃうことがあるから注意してね。 シェーダーツリーを開けた時にimportedshadersっていうレイヤーが出来ていたら削除しておいてね。

それではまた次回。

スクリプトまとめページ( Down Load はこちらから)  

カテゴリー別ページ

modo操作メモ 



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

2007年11月27日

コレガ、宅内アンテナ用同軸ケーブルでネットワーク接続できるアダプ

無線LANは遅いし、洩れるし、ちと怖い。でも配線が邪魔くさいって人は結構いるんじゃないだろうか。そういう需要にPLCっていう100Vのコンセントを使ったネットワークのシステムが開発されて、いろんなメーカーから発売されて久しいけど使ってるって話はあまり聞かないな。100Vのコンセントなら家じゅう繋がっているだろうから、コンセントがあるところならどこでもネットに繋ぐ事が出来るけど普通の線に高周波がのれば電波になって飛んで行きそうだし、それこそいろんな電化製品がぶら下がっているネットワークじゃ、まともに使えるの?って疑問に思ったりもするよな。

そこで家庭内にある電話線、電灯線の2つのネットワーク以外に残された最後の電線ネットワークのTVのアンテナ線を使ってLANを組もうってのがここで紹介するコレガの製品だ。メリットはなんと言っても同軸ケーブルが使えるって事。これなら電波も洩れにくくノイズにも強いはず。おまけにぶら下がっているものも強烈で怪しげなノイズを発生するようなものはいそうに無いのでFTP測定で最大69Mbpsのスループットが出たりするそうだ。設定不要でアンテナ線に接続するだけでお接続出来て、最大8台まで接続可能。ただしマンションみたいな共聴や同じ周波数帯を使っているCATVと一緒には使えないようだ。2階建ての家とかにいいかもね。最近はTVやビデオデッキまでネットに繋ぐようになって来てるから、アンテナ線で繋げるならいいかもね。将来的に規格化されてAV製品全部に内臓されるようになれば家庭内AVネットワークも気が付かないうちに構築されちゃうし、ホームサーバーの設置もお手軽ポンになると思うなぁ。

coregaニュースリリース



take_z_ultima at 15:47|この記事のURLComments(0)TrackBack(1)Goods 
Archives