これからMELの応用として、岩・石を自動生成するスクリプトを作ってみよう。
最初は簡単なスクリプトから始めて徐々に複雑で実用的なものに書き直してゆく。
岩・石のようなものをMELによって自動生成するためには様々な方法が考えられる。
ここでは、まずなるべくシンプルな方法で作ってみる。
まず、1個岩石を作るスクリプトを作ってみる。
適当なプリミティブを作って、それをスケール・頂点の移動などで変形して岩石らしく見せる方法を試してみよう。
global proc makeRock1()
{
float $val = rand (0.5, 2.0);
string $poly[] = `polySphere -r $val`;
$x = rand(0.8, 1.5);
$y = rand(0.8, 1.5);
$z = rand(0.8, 1.5);
scale $x $y $z;
string $ver[] = `polyListComponentConversion -toVertex $poly[0]`;
string $verE[] = `filterExpand -selectionMask 31 $ver`;
for($obj in $verE)
{
select -r $obj;
$x = rand(-0.1, 0.1);
$y = rand(-0.1, 0.1);
$z = rand(-0.1, 0.1);
move -r $x $y $z;
}
}
float $val = rand (0.5, 2.0);
乱数を作るrand(0.5, 2.0)
によって0.5から2.0までの間の値を$valに代入する。
string $poly[] = `polySphere -r $val`;
ポリゴンの球を作る。
$x = rand(0.8, 1.5);
乱数の値(0.8から1.5)を$xに代入。
$y = rand(0.8, 1.5);
乱数の値(0.8から1.5)を$yに代入。
$z = rand(0.8, 1.5);
乱数の値(0.8から1.5)を$zに代入。
scale $x $y $z;
ポリゴンの球にスケールをかける。
string $ver[] = `polyListComponentConversion -toVertex $poly[0]`;
ポリゴンの球から頂点を取り出して$ver[]に代入。
string $verE[] = `filterExpand -selectionMask 31 $ver`;
$verの中から頂点(31で表される)を配列に展開して$verE[]に代入。
for($obj in $verE)
$verE[]から、ひとつづつ頂点を取り出して$objに代入してループの中の処理を行なう。
select -r $obj;
$objだけをセレクトする。
$x = rand(-0.1, 0.1);
乱数の値(-0.1から0.1)を$xに代入。
$y = rand(-0.1, 0.1);
乱数の値(-0.1から0.1)を$yに代入。
$z = rand(-0.1, 0.1);
乱数の値(-0.1から0.1)を$zに代入。
move -r $x $y $z;
セレクトされている頂点を、その位置から$x, $y, $zだけ移動する。