Monthly Archives: 5月 2014

FBの壁紙更新したよー。

こんにちは、木村です。またFBの壁紙更新したよー、金魚ちゃんバイバイ!これからも2~3ヶ月のペースで更新していければいいなと思ってます。

今回はこれです。

tokei_up

ワイヤーフレームの時計です。なんか下手(左)がスペース空いてますが、これはFBのアカウントの写真を回避してるんです、レイアウトミスではありません。

tokei_001tokei_002tokei_003

最終的にトリミングしてしまったけれど先っちょまで丁寧にモデリングしたつもりです。(メッシュの流れきれいじゃないですか?)

tokei_004tokei_005

ハードウェアのワイヤーフレームはこんな感じ、余談ですがビューメニューのShadingのSmoothWireFrameってやるとワイヤーフレームが少しキレイになるよ、意外とこのへん触らないから知らない人いるかもですね。

ですが今回はもっと立体的で普通のワイヤーフレームとは違う感じにしたかったので、pymelを使ってポリゴンのエッジループにそってナーブスをエクストルードする方法をとりました。日本語でおk?

とりあえず先にスクリプト載せて使い方説明しますね。その後スクリプトの内容説明しますね。

import pymel.core as pm
import maya.cmds as m

def ccv(z):
elen=range(len(list(z.e)))
ptc=[]
while len(elen)>0:
el=pm.polySelect(z,elb=elen[0])
elen=set(elen)-set(el)
elen=list(elen)
pt=pm.polyToCurve(f=0,dg=1)
ptc=ptc+[pt[0]]
return ptc
obj=pm.selected()
cv=[]
for x in obj:
cv=cv+ccv(x)

circ=pm.circle(r=0.01,n=’lineBold’)
d=str(circ[0])
ext=[m.extrude(d,x,ch=1,rn=0,po=0,et=2,ucp=1,fpt=1,upn=1,ro=0,sc=1,rsp=1) for x in cv]
g1=pm.group(ext,n=’extrudedSurface’)
g2=pm.group(cv,n=’extrudCurve’)
pm.group([circ,g1,g2],n=’Wireframes’)

あーーーー!!!コピペしたらインデクシング吹っ飛んだね。はぁはぁ。

wireFrame

↑ここからコピった方がいいかもしれませんよ。ペースト先はpythonコマンド初めての人は気を付けて下さいね。

tokei_006 tokei_007

スクリプトエディターにpythonタブがない方は、スクリプトウィンドウ右くりっくして→NewTab→Python 出てきたタブで実行してね。

tokei_009

使い方は簡単です。オブジェクトを選択して実行。オブジェクトを選択して実行。目標をセンターに入れてスイッチ。

tokei_0092 tokei_009b

超余裕だね。右はMR_SunandSkyでレンダリング、昔公園で遊んだ遊具を思い出して、あの頃に戻りたいと思ってしまうね。普通のワイヤーフレームよりライティングとシェーディングが入ると味あるよね。かわいいね。萌えるね。時計のコンプは更にデプス出してNukeでZDeforcus入れてます。今回はコンプまで説明はしてませんが。機会があったらZDeforcusの設定やフリンジの入れ方説明しますね。けどNukeがチュートリアルビデオ出してたと思うのでそっち見たほうが早いと思いますよー。

今回なんでこんなナメた口調になってしまっているかというと、ニコニコのゆっくり実況を見すぎたせいですね。ゆっくりしていってねーーーーーー。すみません。

tokei_010 tokei_011tokei_012

ちなみに、lineBoldっていうカーブのスケールを変えるとエクストルードのナーブスの太さが変わるよー。

tokei_013 tokei_014

ちなみに、ヒストリーを持ってるので元のオブジェクトの変形に追従するよ。いろいろ出来て楽しそうだねー。

次はスクリプトの説明です。

初心者の人には難しいと思うし、上級者の人にはクソスクリプトと思われそうなんで、説明はあまりしたくないのですが、何か意見や提案や疑問は大歓迎なのでアクセスの方にメール下さいね。出来る限り対応します。

このスクリプトの肝はccv()という関数の設定です。他の

import pymel.core as pm
import maya.cmds as m

はモジュールを読み込んでるだけ、

obj=pm.selected()
cv=[]
for x in obj:
cv=cv+ccv(x)

は設定したccvという関数を実行させてるだけ、

circ=pm.circle(r=0.01,n=’lineBold’)
d=str(circ[0])
ext=[m.extrude(d,x,ch=1,rn=0,po=0,et=2,ucp=1,fpt=1,upn=1,ro=0,sc=1,rsp=1) for x in cv]
g1=pm.group(ext,n=’extrudedSurface’)
g2=pm.group(cv,n=’extrudCurve’)
pm.group([circ,g1,g2],n=’Wireframes’)

は作ったカーブやらナーブスをグループノードにまとめたりしてるだけ。なので説明はしません。

def ccv(z):
elen=range(len(list(z.e)))
ptc=[]
while len(elen)>0:
el=pm.polySelect(z,elb=elen[0])
elen=set(elen)-set(el)
elen=list(elen)
pt=pm.polyToCurve(f=0,dg=1)
ptc=ptc+[pt[0]]
return ptc

の関数内部について説明しようと思いますが、ちょっと今回の記事がながくなってしまいそうなので、次回にまわしたいと思います。

でわでわー!