Maya

【maya:python】サッカーボールを一発作成

shamimatsu

maya2022を使用
ミラーボールを作りたかったのですが、まずは面数の少ないサッカーボールの作り方を学んでからにしようと思い色々な動画をみて勉強しました。
工程のメモと合わせて一発でサッカーボールが作れるスクリプトを作成しました。

コードはpython3のため過去バージョンのmayaでは動作しない可能性があります

コード

上手くいけばこのようなサッカーボールが作成されます。
五角形を黒くしたい場合は手動でマテリアルを割り当ててください。
スムーズ メッシュ プレビューで三角形:69120ポリゴン

1# -*- coding: utf-8 -*-
2import maya.cmds as cmds
3
4cmds.polyPrimitive(pt=0, r=10, l=0.4036)
5sl_nodes = cmds.ls(sl=True)
6cmds.select(sl_nodes)
7cmds.ConvertSelectionToEdges()
8cmds.DetachComponent()
9cmds.polySmooth(sl_nodes, dv=2)
10cmds.sculpt(sl_nodes)
11cmds.setAttr("sculptor1.scaleZ", 10)
12cmds.setAttr("sculptor1.scaleX", 10)
13cmds.setAttr("sculptor1.scaleY", 10)
14cmds.select(sl_nodes)
15cmds.DeleteHistory()
16cmds.polyExtrudeFacet(thickness=0, localTranslateZ=-1, offset=-1)
17cmds.polyNormal()
18cmds.displaySmoothness(polygonObject=3)

pythonの説明

どのような手順でサッカーボールが作られるのか簡単に解説します。
ボールの半径は10cmに設定、直径が20cmになるようにしています。
押し出しの値を変更することで溝の深さや幅を調整できます。

  1. 作成 > ポリゴンプリミティブ > サッカーボール
  2. すべてのエッジを選択
  3. メッシュの編集 > デタッチ
  4. メッシュ > スムーズ(サブディビジョン:2)
  5. デフォーム > スカルプト
  6. スカルプトのサイズ拡大
  7. ヒストリー削除
  8. メッシュの編集 > 押し出し(ローカル移動Z:-1、オフセット:-1)
  9. メッシュの表示 >反転
  10. スムーズ メッシュ プレビュー(ホットキー:3)

カラーも自動でアサインしたい

五角形を選んでアサインもちょっと面倒くさいと感じたのでマテリアルも自動で設定できないか試してみましたが上手くいきました。

1# -*- coding: utf-8 -*-
2import maya.cmds as cmds
3
4# 白色マテリアル作成
5cmds.shadingNode('phong', asShader=1, name='color_white')
6cmds.sets(renderable=True, empty=1, noSurfaceShader=True, name='color_whiteSG')
7cmds.connectAttr('color_white.outColor', 'color_whiteSG.surfaceShader', f=1)
8cmds.setAttr('color_white.color', 1, 1, 1, type="double3")
9# 黒色マテリアル作成
10cmds.shadingNode('phong', asShader=1, name='color_black')
11cmds.sets(renderable=True, empty=1, noSurfaceShader=True, name='color_blackSG')
12cmds.connectAttr('color_black.outColor', 'color_blackSG.surfaceShader', f=1)
13cmds.setAttr('color_black.color', 0.05, 0.05, 0.05, type="double3")
14
15cmds.polyPrimitive(pt=0, r=10, l=0.4036)
16sl_nodes = cmds.ls(sl=True)
17cmds.select(sl_nodes)
18cmds.ConvertSelectionToEdges()
19cmds.DetachComponent()
20cmds.polySmooth(sl_nodes, dv=2)
21cmds.sculpt(sl_nodes)
22cmds.setAttr("sculptor1.scaleZ", 10)
23cmds.setAttr("sculptor1.scaleX", 10)
24cmds.setAttr("sculptor1.scaleY", 10)
25cmds.select(sl_nodes)
26cmds.DeleteHistory()
27cmds.polyExtrudeFacet(thickness=0, localTranslateZ=-1, offset=-1)
28cmds.polyNormal()
29
30# 白色マテリアルアサイン
31cmds.sets(forceElement='color_whiteSG', e=1)
32
33# 分離追加
34cmds.polySeparate(sl_nodes)
35cmds.displaySmoothness(polygonObject=3)
36
37sl_nodes2 = cmds.ls(sl=True)
38
39for sl_node2 in sl_nodes2:
40    cmds.select(sl_node2)
41    t_cnt = cmds.polyEvaluate(t=1)
42    if t_cnt == 120:
43        # 黒色マテリアルアサイン
44        cmds.sets(forceElement='color_blackSG', e=1)

pythonの説明

先ほどの工程以外の追加処理の解説です。
まず白・黒マテリアル作成(phong)。
白色マテリアルをアサインした後、メッシュを分離しています。
五角形のポリゴン数は120だったため、if文でポリゴン数120のメッシュ黒色マテリアルをアサインしています。

ABOUT ME
shamimatsu
shamimatsu
3DCGデザイナー
ながらくゲーム業界で2D、3DCGデザイナーとして働いてきましたが、新しい業界に挑戦中です。 ブログのデザインをリニューアル中のため、見づらい箇所もあるかもしれませんが少しづつ修正していきます。
記事URLをコピーしました