【Maya:Python】ピボットを原点 (0, 0, 0) に移動
shamimatsu
三味松ブログ
maya2022を使用
ミラーボールを作りたかったのですが、まずは面数の少ないサッカーボールの作り方を学んでからにしようと思い色々な動画をみて勉強しました。
工程のメモと合わせて一発でサッカーボールが作れるスクリプトを作成しました。
コードはpython3のため過去バージョンのmayaでは動作しない可能性があります
上手くいけばこのようなサッカーボールが作成されます。
五角形を黒くしたい場合は手動でマテリアルを割り当ててください。
スムーズ メッシュ プレビューで三角形:69120ポリゴン
# -*- coding: utf-8 -*-
import maya.cmds as cmds
cmds.polyPrimitive(pt=0, r=10, l=0.4036)
sl_nodes = cmds.ls(sl=True)
cmds.select(sl_nodes)
cmds.ConvertSelectionToEdges()
cmds.DetachComponent()
cmds.polySmooth(sl_nodes, dv=2)
cmds.sculpt(sl_nodes)
cmds.setAttr("sculptor1.scaleZ", 10)
cmds.setAttr("sculptor1.scaleX", 10)
cmds.setAttr("sculptor1.scaleY", 10)
cmds.select(sl_nodes)
cmds.DeleteHistory()
cmds.polyExtrudeFacet(thickness=0, localTranslateZ=-1, offset=-1)
cmds.polyNormal()
cmds.displaySmoothness(polygonObject=3)
どのような手順でサッカーボールが作られるのか簡単に解説します。
ボールの半径は10cmに設定、直径が20cmになるようにしています。
押し出しの値を変更することで溝の深さや幅を調整できます。
五角形を選んでアサインもちょっと面倒くさいと感じたのでマテリアルも自動で設定できないか試してみましたが上手くいきました。
# -*- coding: utf-8 -*-
import maya.cmds as cmds
# 白色マテリアル作成
cmds.shadingNode('phong', asShader=1, name='color_white')
cmds.sets(renderable=True, empty=1, noSurfaceShader=True, name='color_whiteSG')
cmds.connectAttr('color_white.outColor', 'color_whiteSG.surfaceShader', f=1)
cmds.setAttr('color_white.color', 1, 1, 1, type="double3")
# 黒色マテリアル作成
cmds.shadingNode('phong', asShader=1, name='color_black')
cmds.sets(renderable=True, empty=1, noSurfaceShader=True, name='color_blackSG')
cmds.connectAttr('color_black.outColor', 'color_blackSG.surfaceShader', f=1)
cmds.setAttr('color_black.color', 0.05, 0.05, 0.05, type="double3")
cmds.polyPrimitive(pt=0, r=10, l=0.4036)
sl_nodes = cmds.ls(sl=True)
cmds.select(sl_nodes)
cmds.ConvertSelectionToEdges()
cmds.DetachComponent()
cmds.polySmooth(sl_nodes, dv=2)
cmds.sculpt(sl_nodes)
cmds.setAttr("sculptor1.scaleZ", 10)
cmds.setAttr("sculptor1.scaleX", 10)
cmds.setAttr("sculptor1.scaleY", 10)
cmds.select(sl_nodes)
cmds.DeleteHistory()
cmds.polyExtrudeFacet(thickness=0, localTranslateZ=-1, offset=-1)
cmds.polyNormal()
# 白色マテリアルアサイン
cmds.sets(forceElement='color_whiteSG', e=1)
# 分離追加
cmds.polySeparate(sl_nodes)
cmds.displaySmoothness(polygonObject=3)
sl_nodes2 = cmds.ls(sl=True)
for sl_node2 in sl_nodes2:
cmds.select(sl_node2)
t_cnt = cmds.polyEvaluate(t=1)
if t_cnt == 120:
# 黒色マテリアルアサイン
cmds.sets(forceElement='color_blackSG', e=1)
先ほどの工程以外の追加処理の解説です。
まず白・黒マテリアル作成(phong)。
白色マテリアルをアサインした後、メッシュを分離しています。
五角形のポリゴン数は120だったため、if文でポリゴン数120のメッシュに黒色マテリアルをアサインしています。