ラティスデフォーマを利用した岩石を自動生成するスクリプトを作成してみましょう。
ポリゴンにデフォーマをかけて全体がゆがんだ形になるようにしてみます。
今回の作り方は以下の通りです。
まず、1 個だけ岩石を作るスクリプトを作ってみましょう。
global proc makeRock4() { polySphere; string $lname[] = `lattice -divisions 2 5 2 -objectCentered true`; float $x = rand(1.0, 3.0); float $y = rand(1.0, 3.0); float $z = rand(1.0, 3.0); scale $x $y $z; string $points[] = `filterExpand -selectionMask 46 ($lname[1] + ".pt[0:1][0:4][0:1]")`; for($obj in $points) { $x = rand(-0.6, 0.6); $y = rand(-0.6, 0.6); $z = rand(-0.6, 0.6); select -r $obj; move -r $x $y $z; } }
import pymel.core as pm import random def makeRock4(): pm.polySphere() lattice = pm.lattice(divisions=(2, 5, 2), objectCentered=True) x = random.uniform(1.0, 3.0) y = random.uniform(1.0, 3.0) z = random.uniform(1.0, 3.0) pm.scale([x, y, z]) for p in lattice[1].pt: x = random.uniform(-0.6, 0.6) y = random.uniform(-0.6, 0.6) z = random.uniform(-0.6, 0.6) pm.select(p, r=True) pm.move([x, y, z], r=True)
import pymel.core as pm
import random
def makeRock4():
pm.polySphere()
lattice = pm.lattice(divisions=(2, 5, 2), objectCentered=True)
x = random.uniform(1.0, 3.0)
y = random.uniform(1.0, 3.0)
z = random.uniform(1.0, 3.0)
pm.scale(x, y, z)
for p in lattice[1].pt:
x = random.uniform(-0.6, 0.6)
y = random.uniform(-0.6, 0.6)
z = random.uniform(-0.6, 0.6)
pm.select(p, r=True)
pm.move([x, y, z], r=True)
import pymel.core as pm import random def makeRock4(): pm.polySphere() lattice = pm.lattice(divisions=(2, 5, 2), objectCentered=True) pm.scale([random.uniform(1.0, 3.0) for i in range(3)]) for p in lattice[1].pt: pm.select(p, r=True) pm.move([random.uniform(-0.6, 0.6) for i in range(3)], r=True)
random.uniform() 関数を使用すると、実行するたびに違う数値がかえってきますが、 常に同じ数値を返すようにしたい場合があります。 そのようなときには、以下のように random.seed() 関数を使用します。
スライダーを、以下の図の値にして 作成 ボタンを押した結果です。