これから Python の応用として、岩石を自動生成するスクリプトを作ってみましょう。
最初は簡単なスクリプトから始めて、すこしづつ違うバリエーションのものを作ってみます。
岩石のようなものを Python によって自動生成するためには様々な方法が考えられますが、
ここでは、なるべくシンプルな方法で作ってみます。
適当なプリミティブを作って、それをスケール・頂点の移動などで変形して、 岩石らしく見せる方法を試してみましょう。
ここでは以下の方法で作ってみます。
上の説明にでている乱数とは、ある範囲内のでたらめな数値のことです。
Python では random.uniform() 関数を使用して乱数を得ることができます。
random.uniform() コマンドは下の使用例のように、
実行するたびにランダムで、違う数値を返してくれるので、
岩石を作るときのように不規則な形を作ったりする場合によく使用されます。
まず、1 個だけ岩石を作るスクリプトを作ってみましょう。
import maya.cmds
import random
def makeRock1():
val = random.uniform(0.5, 2.0)
poly = maya.cmds.polySphere(r=val)
x = random.uniform(0.8, 1.5)
y = random.uniform(0.8, 1.5)
z = random.uniform(0.8, 1.5)
maya.cmds.scale(x, y, z)
ver = maya.cmds.polyListComponentConversion(poly[0], toVertex=True)
verE = maya.cmds.filterExpand(ver, selectionMask=31)
for obj in verE:
x = random.uniform(-0.1, 0.1)
y = random.uniform(-0.1, 0.1)
z = random.uniform(-0.1, 0.1)
maya.cmds.select(obj, r=True)
maya.cmds.move(x, y, z, r=True)
import maya.cmds
import random
def makeRock1():
val = random.uniform(0.5, 2.0)
poly = maya.cmds.polySphere(r=val)
x = random.uniform(0.8, 1.5)
y = random.uniform(0.8, 1.5)
z = random.uniform(0.8, 1.5)
maya.cmds.scale(x, y, z)
ver = maya.cmds.polyListComponentConversion(poly[0], toVertex=True)
verE = maya.cmds.filterExpand(ver, selectionMask=31)
verE[0] = 'pSphere1.vtx[0]' verE[1] = 'pSphere1.vtx[1]' verE[2] = 'pSphere1.vtx[2]' . . .selectionMask の数字(31)はコンポーネントの種類によって以下のものが使用できます。
for obj in verE:
x = random.uniform(-0.1, 0.1)
y = random.uniform(-0.1, 0.1)
z = random.uniform(-0.1, 0.1)
maya.cmds.select(obj, r=True)
maya.cmds.move(x, y, z, r=True)