ラティスデフォーマを利用した岩石を自動生成するスクリプトを作成してみましょう。
ポリゴンにデフォーマをかけて全体がゆがんだ形になるようにしてみます。
今回の作り方は以下の通りです。
まず、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
import random
def makeRock4():
pname = pymel.core.polySphere()
lname = pymel.core.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)
pymel.core.scale(x, y, z)
points = pymel.core.filterExpand((lname[1] + '.pt[0:1][0:4][0:1]'), selectionMask=46)
for obj in points:
x = random.uniform(-0.6, 0.6)
y = random.uniform(-0.6, 0.6)
z = random.uniform(-0.6, 0.6)
pymel.core.select(obj, r=True)
pymel.core.move(x, y, z, r=True)
import pymel.core
import random
def makeRock4():
pname = pymel.core.polySphere()
lname = pymel.core.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)
pymel.core.scale(x, y, z)
points = pymel.core.filterExpand((lname[1] + '.pt[0:1][0:4][0:1]'), selectionMask=46)
for obj in points:
x = random.uniform(-0.6, 0.6)
y = random.uniform(-0.6, 0.6)
z = random.uniform(-0.6, 0.6)
pymel.core.select(obj, r=True)
pymel.core.move(x, y, z, r=True)
random.uniform() 関数を使用すると、実行するたびに違う数値がかえってきますが、 常に同じ数値を返すようにしたい場合があります。 そのようなときには、以下のように random.seed() 関数を使用します。
スライダーを、以下の図の値にして 作成 ボタンを押した結果です。