シェーディングネットワーク 2 (爆発アニメーション)

爆発のアニメーション

Displacement マッピングされた球をアニメーションさせることによって、 爆発のエフェクトを作成してみましょう。
Fractal と Ramp を使用して色を決め、 Displacement マッピングによって凹凸をつけます。
アニメーションにはエクスプレッションとキーフレームを併用します。

爆発のアニメーションの作り方

ここでは、240 フレームのアニメーションを作成します。

  1. NURBS の球を作成します。
    NURBS 球
  2. NURBS の球にキーフレームを設定します。
    最初の 20 〜 30 フレームくらいでスケールが 1.0 になるくらいのスピードで大きくします。
    フレーム ScaleX, Y, Z
    1 0.0
    4 0.5
    25 0.9
    240 1.3
  3. Surface Shader を作成します。
  4. Ramp を作成し、Surface Shader にコネクトします。
    Ramp の outColor を Surface Shader の outColor にコネクトします。
    Surface Shader
    Ramp の outColor を Surface Shader の outGlowColor にコネクトすれば、 グローの効果も与えることができますが、 全体が明るくなりすぎるかもしれません。
  5. Fractal を作成し、Ramp にコネクトします。
    Fractal の outColorR を Ramp の vCoord にコネクトします。
    Hypershade
  6. Fractal のアトリビュートを適当に設定します。
    Fractal の Attribute Editor
    Fractal の Attribute Editor
    Color Gain は RGB を (5.0, 5.0, 5.0) にします。
  7. Fractal の time アトリビュートにエクスプレッションを定義します。
    time = 0.1 * sind(frame/2.6);
  8. Fractal にコネクトされている place2dTexture のアトリビュートを適当に設定します。
    Fractal の Attribute Editor
  9. Fractal にコネクトされている place2dTexture の offsetU アトリビュートにエクスプレッションを定義します。
    offsetU = 0.02 * time;
  10. Ramp の colorGainR にキーフレームを打ちます。
    フレーム colorGainR
    1 0.0
    2 3
    5 0.5
    7 2.0
    10 1.2
    240 1.0

    colorGainR の Graph Editor
  11. colorGainR にコネクトされた animCurveTU の output を Ramp の colorGainG と colorGainB にコネクトします。
    先に作成されていた colorGainG と colorGainB の animCurveTU は消しておきます。
    Fractal の Attribute Editor
  12. Ramp の alphaGain にキーフレームを打ちます。
    この alphaGain と、以下にでてくる alphaOffset は Displacement マッピングの凹凸を逆向きにするために使用します。
    フレーム alphaGain
    1 0.0
    6 -0.2
    240 -0.425

    colorGainR の Graph Editor
  13. Multiple Divide を作成します。
  14. Ramp の alphaGain にコネクトされた animCurveTU の output を Multiple Divide の input1X にコネクトします。
    Hypershade
  15. Multiple Divide の Operation を Multiply にし、input2 の X を -1 にします。
    Multipe Divide の Attribute Editor
  16. Multiple Divide の outputX を Ramp の alphaOffset にコネクトします。
    Hypershade
  17. Ramp の色を適当に決定し、各位置で Selected Position にキーを打ちます。
    これが、1 フレーム目の色になります。
    Ramp の Attribute Editor(1 フレーム目)
  18. カレントフレームを 240 に移動して、Ramp の色の位置を変更し、各位置で Selected Position にキーを打ちます。
    アニメーションの最後に全体の色を暗くするためです。
    Ramp の Attribute Editor(240 フレーム目)
  19. ディスプレースメントマップをかけます。
    Displacement を作成し、Ramp の outAlpha を Displacement の displacement にコネクトし、 Displacement の displacement を surfaceShader1SG の displacementShader にコネクトします。
    Displacement
  20. ここまでで、全体のシェーディングネットワークは以下のようになります。
    Hypershade
  21. アニメーションをレンダリングします。

MEL スクリプトの例

爆発をシュミレートするシェーダーの作成を MEL スクリプトで自動化してみましょう。

  1. 以下の MEL スクリプトを makeBomb1.mel という名前で作ります。
    proc string [] makeSurfaceShader(string $obj)
    {
    	string $sname[];
    
    	$sname[0] = `shadingNode -asShader surfaceShader`;
    	$sname[1] = `sets -renderable true -noSurfaceShader true -empty`;
    	connectAttr -f ($sname[0] + ".outColor") ($sname[1] + ".surfaceShader");
    	select $obj;
    	sets -e -forceElement $sname[1];
    	return $sname;
    }
    
    proc makeDisplacementShader(string $dest, string $src)
    {
    	string $dsname = `shadingNode -asShader displacementShader`;
    	string $dname = `sets -renderable true -noSurfaceShader true -empty`;
    	connectAttr -f ($dsname + ".displacement") ($dname + ".displacementShader");
    	connectAttr -f ($dest + ".outAlpha") ($dsname + ".displacement");
    	connectAttr -f ($dsname + ".displacement") ($src + ".displacementShader");
    }
    
    proc string [] make2dTexture(string $name)
    {
    	string $sname[];
    
    	$sname[0] = `shadingNode -asTexture $name`;
    	$sname[1] = `shadingNode -asUtility place2dTexture`;
    	connectAttr ($sname[1] + ".outUV") ($sname[0] + ".uv");
    	connectAttr ($sname[1] + ".outUvFilterSize") ($sname[0] + ".uvFilterSize");
    	return $sname; 
    }
    
    proc makeKeyframe(int $keys[], float $vals[], string $obj, string $attr)
    {
    	int $i = 0;
    	for($k in $keys)
    	{
    		currentTime $k;
    		setAttr ($obj + "." + $attr) $vals[$i];
    		setKeyframe -at $attr $obj;
    		$i++;
    	}
    }
    
    proc makeKeyframe3(int $keys[], float $vals[], string $obj, string $attr)
    {
    	int $i = 0;
    	for($k in $keys)
    	{
    		currentTime $k;
    		setAttr ($obj + "." + $attr) -type double3 $vals[$i] $vals[$i] $vals[$i];
    		setKeyframe -at $attr $obj;
    		$i++;
    	}
    }
    
    global proc makeBomb1()
    {
    	string $sname[] = `sphere`;
    
    	int $keys[] = {1, 4, 25, 240};
    	float $vals[] = {0.0, 0.5, 0.9, 1.3};
    	makeKeyframe3($keys, $vals, $sname[0], "scale");
    
    	string $shname[] = makeSurfaceShader($sname[0]);
    
    	string $ramp[] = make2dTexture("ramp");
    	connectAttr -f ($ramp[0] + ".outColor") ($shname[0] + ".outColor");
    
    	string $fractal[] = make2dTexture("fractal");
    
    	connectAttr -f ($fractal[0] + ".outColorR") ($ramp[0] + ".vCoord");
    	setAttr ($fractal[0] + ".amplitude") 0.058;
    	setAttr ($fractal[0] + ".ratio") 0.699;
    	setAttr ($fractal[0] + ".frequencyRatio") 2.398;
    	setAttr ($fractal[0] + ".levelMax") 6.553;
    	setAttr ($fractal[0] + ".bias") 0.476;
    	setAttr ($fractal[0] + ".inflection") 1;
    	setAttr ($fractal[0] + ".animated") 1;
    	setAttr ($fractal[0] + ".timeRatio") 1.55;
    	setAttr ($fractal[0] + ".alphaGain") 0.097;
    	setAttr ($fractal[0] + ".colorGain") -type double3 5 5 5 ;
    
    	expression -s ($fractal[0] + ".time = 0.1*sind(frame/2.6);");
    	expression -o $fractal[1] -s "offsetU = 0.02*time;";
    
    	$keys = {1, 2, 5, 7, 10, 240};
    	$vals = {0.0, 3.0, 0.5, 2.0, 1.2, 1.0};
    	makeKeyframe3($keys, $vals, $ramp[0], "colorGain");
    
    	$keys = {1, 6, 240};
    	$vals = {0.0, -0.2, -0.425};
    	makeKeyframe($keys, $vals, $ramp[0], "alphaGain");
    
    	string $mname = `shadingNode -asUtility multiplyDivide`;
    	string $obj[] = `listConnections ($ramp[0] + ".alphaGain")`;
    	connectAttr -f ($obj[0] + ".output") ($mname + ".input1X");
    	setAttr ($mname + ".input2X") -1;
    	connectAttr -f ($mname + ".outputX") ($ramp[0] + ".alphaOffset");
    
    	setAttr ($ramp[0] + ".colorEntryList[0].color") -type double3 0.2 0.0 0 ;
    	setAttr ($ramp[0] + ".colorEntryList[1].color") -type double3 0.36 0.14 0.02 ;
    	setAttr ($ramp[0] + ".colorEntryList[2].color") -type double3 1.0 0.3 0.0 ;
    	setAttr ($ramp[0] + ".colorEntryList[3].color") -type double3 1 0.45 0 ;
    	setAttr ($ramp[0] + ".colorEntryList[4].color") -type double3 1 0.78 0 ;
    	setAttr ($ramp[0] + ".colorEntryList[5].color") -type double3 1 1 1 ;
    
    	$keys = {1, 240};
    	$vals = {0.93, 0.38};
    	makeKeyframe($keys, $vals, $ramp[0], "colorEntryList[0].position");
    	$vals = {0.62, 0.28};
    	makeKeyframe($keys, $vals, $ramp[0], "colorEntryList[1].position");
    	$vals = {0.47, 0.20};
    	makeKeyframe($keys, $vals, $ramp[0], "colorEntryList[2].position");
    	$vals = {0.38, 0.19};
    	makeKeyframe($keys, $vals, $ramp[0], "colorEntryList[3].position");
    	$vals = {0.31, 0.15};
    	makeKeyframe($keys, $vals, $ramp[0], "colorEntryList[4].position");
    	$vals = {0.21, 0.09};
    	makeKeyframe($keys, $vals, $ramp[0], "colorEntryList[5].position");
    
    	makeDisplacementShader($ramp[0], $shname[1]);
    }
    
  2. スクリプトエディタファイル → ソーススクリプト によって makeBomb1.mel を読み込みます。
  3. スクリプトエディタ のインプットウインドウで、makeBomb1() を実行します。
    (makeBomb1() 実行後の図)
    [makeBomb1() 実行後の図]
    [HyperShade の図]

スクリプトの解説

proc string [] makeSurfaceShader(string $obj)
surfaceShader ノードを作成するプロシージャです。
引数の文字列 $obj は作成された surfaceShader がアサインされるオブジェクトの名前です。
返り値として、surfaceShader の名前とシェーディンググループ(set ノード)の名前を返します。
string $sname[];
返り値を代入するための文字列配列です。
$sname[0] = `shadingNode -asShader surfaceShader`;
surfaceShader ノードを作成し、その名前を $sname[0] に代入します。
$sname[1] = `sets -renderable true -noSurfaceShader true -empty`;
シェーディンググループ(set ノード)を作成し、その名前を $sname[1] に代入します。
-renderable true
作られたセットはシェーディンググループになって、 renderPartition ノードにコネクトされます。
-noSurfaceShader true
デフォールトのシェーダーにコネクトしません。
上で作った surfaceShader $sname[0] にコネクトするためです。
-empty
空のセットを作ります。
セレクトされているオブジェクトがあっても、 このセットに加えません。
connectAttr -f ($sname[0] + ".outColor") ($sname[1] + ".surfaceShader");
マテリアル $sname[0] が出力する色情報を表す outColor アトリビュートを、 セット $sname[1] の surfaceShader アトリビュートにコネクトします。
これで、surfaceShader $sname[0] がレンダリング可能になります。
select $obj;
$obj を選択します。
sets -e -forceElement $sname[1];
選択された $obj をシェーディングループであるセット $sname[1] に追加します。
-e
編集モードにします。
-forceElement
選択されているオブジェクトを強制的にセットに追加します。
選択されているオブジェクト別のセットのメンバーである場合は、 別のセットから削除されます。
return $sname;
プロシージャの終わりに SurfaceShader ノードの名前と、 シェーディングループ(set) を返します。
proc makeDisplacementShader(string $dest, string $src)
displacementShader を作成するプロシージャです。
引数の $dest は displacementShader に入力されるオブジェクト名、 $src は displacementShader からの出力をコネクトするオブジェクト名です。
string $dsname = `shadingNode -asShader displacementShader`;
displacementShader ノードを作成し、その名前を $dsname に代入します。
string $dname = `sets -renderable true -noSurfaceShader true -empty`;
シェーディンググループ(set ノード)を作成し、その名前を $dname に代入します。
-renderable true
作られたセットはシェーディンググループになって、 renderPartition ノードにコネクトされます。
-noSurfaceShader true
デフォールトのシェーダーにコネクトしません。
上で作った displacementShader $dsname にコネクトするためです。
-empty
空のセットを作ります。
セレクトされているオブジェクトがあっても、 このセットに加えません。
connectAttr -f ($dsname + ".displacement") ($dname + ".displacementShader");
displacementShader の displacement アトリビュートと シェーディンググループ(set ノード)の displacementShader アトリビュートをコネクトします。
connectAttr -f ($dest + ".outAlpha") ($dsname + ".displacement");
入力オブジェクトのアトリビュート outAlpha と、 displacementShader の displacement アトリビュートをコネクトします。
connectAttr -f ($dsname + ".displacement") ($src + ".displacementShader");
displacementShader の displacement アトリビュートと 出力オブジェクトの displacementShader アトリビュートをコネクトします。
proc string [] make2dTexture(string $name)
2Dテクスチャを作成するプロシージャです。
引数の $name は作成する 2Dテクスチャの種類をあらわします。
返り値は、作成された 2Dテクスチャ名と place2dTexture 名です。
string $sname[];
2Dテクスチャ名と place2dTexture 名を代入するための文字列配列です。
$sname[0] = `shadingNode -asTexture $name`;
$name という種類の 2Dテクスチャ名を作成します。
$sname[1] = `shadingNode -asUtility place2dTexture`;
place2dTexture を作成します。
connectAttr ($sname[1] + ".outUV") ($sname[0] + ".uv");
place2dTexture のアトリビュート outUV と、 2Dテクスチャのアトリビュート uv をコネクトします。
connectAttr ($sname[1] + ".outUvFilterSize") ($sname[0] + ".uvFilterSize");
place2dTexture のアトリビュート outUvFilterSize と、 2Dテクスチャのアトリビュート uvFilterSize をコネクトします。
return $sname;
作成された 2Dテクスチャ名と place2dTexture 名の代入された文字列配列 $sname を返します。
proc makeKeyframe(int $keys[], float $vals[], string $obj, string $attr)
オブジェクト $obj にキーフレームを設定するプロシージャです。
各引数の意味は以下のとおりです。
$keys
キーフレームを設定するフレームを並べた int の配列です。
$vals
各キーフレームに対するアトリビュートの値を並べた float の配列です。
$obj
キーフレームを設定するオブジェクト名です。
$attr
キーフレームを設定するアトリビュート名です。
int $i = 0;
変数 $i を 0 に初期化しておきます。
この変数はキーフレームをカウントするために使用します。
for($k in $keys)
各キーフレームをひとつづつ取り出して $k に代入し、 以下のコマンドでキーフレームを設定してゆきます。
currentTime $k;
現在のキーフレームを $k に設定します。
setAttr ($obj + "." + $attr) $vals[$i];
オブジェクト $obj のアトリビュート $attr$vals[$i] を設定します。
setKeyframe -at $attr $obj;
オブジェクト $obj のアトリビュート $attr にキーフレームを設定します。
$i++;
$i を 1 増加します。
proc makeKeyframe3(int $keys[], float $vals[], string $obj, string $attr)
オブジェクト $obj のアトリビュート $attr$vals であらわされる値を 3 つの値として キーフレームを設定するプロシージャです。
各引数の意味は以下のとおりです。
$keys
キーフレームを設定するフレームを並べた int の配列です。
$vals
各キーフレームに対するアトリビュートの値を並べた float の配列です。
$obj
キーフレームを設定するオブジェクト名です。
$attr
キーフレームを設定するアトリビュート名です。
このアトリビュートは 3 つの float の値であらわされるものです。
int $i = 0;
変数 $i を 0 に初期化しておきます。
この変数はキーフレームをカウントするために使用します。
for($k in $keys)
各キーフレームをひとつづつ取り出して $k に代入し、 以下のコマンドでキーフレームを設定してゆきます。
currentTime $k;
現在のキーフレームを $k に設定します。
setAttr ($obj + "." + $attr) -type double3 $vals[$i] $vals[$i] $vals[$i];
オブジェクト $obj のアトリビュート $attr に 3 つの実数値 $vals[$i] $vals[$i] $vals[$i] を設定します。
setKeyframe -at $attr $obj;
オブジェクト $obj のアトリビュート $attr にキーフレームを設定します。
$i++;
$i を 1 増加します。
global proc makeBomb1()
爆発シェーダを作成するプロシージャです。
string $sname[] = `sphere`;
NURBS の球を作成して、その名前を $sname に代入します。
$sname[0] に transform ノード名、$sname[1] に makeNurbSphere ノード名が代入されます。
int $keys[] = {1, 4, 25, 240};
NURBS の球のアトリビュート scale にキーフレームを作成するために、 キーになるフレーム番号を int の配列 $keys に代入します。
float $vals[] = {0.0, 0.5, 0.9, 1.3};
NURBS の球のアトリビュート scale にキーフレームを作成するために、 各キーの値を float の配列 $vals1 に代入します。
makeKeyframe3($keys, $vals, $sname[0], "scale");
上で定義したプロシージャ makeKeyframe3() によって、 NURBS の球のアトリビュート scale にキーフレームを設定します。
string $shname[] = makeSurfaceShader($sname[0]);
プロシージャ makeSurfaceShader を使って SurfaceShader を作成します。 $shname には surfaceShader 名とシェーディンググループ(set)名が代入されます。
string $ramp[] = make2dTexture("ramp");
プロシージャ make2dTexture を使って ramp を作成します。 $ramp には作成された rampテクスチャ名と place2dTexture 名が代入されます。
connectAttr -f ($ramp[0] + ".outColor") ($shname[0] + ".outColor");
ramp のアトリビュート outColor と SurfaceShader のアトリビュート outColor をコネクトします。
string $fractal[] = make2dTexture("fractal");
プロシージャ make2dTexture を使って fractal を作成します。 $fractal には作成された fractalテクスチャ名と place2dTexture 名が代入されます。
connectAttr -f ($fractal[0] + ".outColorR") ($ramp[0] + ".vCoord");
fractal のアトリビュート outColorR と ramp のアトリビュート vCoord をコネクトします。
setAttr ($fractal[0] + ".amplitude") 0.058;
fractal のアトリビュート amplitude を 0.058 に設定します。
setAttr ($fractal[0] + ".ratio") 0.699;
fractal のアトリビュート ratio を 0.699 に設定します。
setAttr ($fractal[0] + ".frequencyRatio") 2.398;
fractal のアトリビュート frequencyRatio を 2.398 に設定します。
setAttr ($fractal[0] + ".levelMax") 6.553;
fractal のアトリビュート levelMax を 6.553 に設定します。
setAttr ($fractal[0] + ".bias") 0.476;
fractal のアトリビュート bias を 0.476 に設定します。
setAttr ($fractal[0] + ".inflection") 1;
fractal のアトリビュート inflection を 1 に設定します。
setAttr ($fractal[0] + ".animated") 1;
fractal のアトリビュート animated を 1 に設定します。
setAttr ($fractal[0] + ".timeRatio") 1.55;
fractal のアトリビュート timeRatio を 1.55 に設定します。
setAttr ($fractal[0] + ".alphaGain") 0.097;
fractal のアトリビュート alphaGain を 0.097 に設定します。
setAttr ($fractal[0] + ".colorGain") -type double3 5 5 5 ;
fractal のアトリビュート colorGain を 5 5 5 に設定します。
expression -s ($fractal[0] + ".time = 0.1*sind(frame/2.6);");
fractal のアトリビュート time にエクスプレッションを作成します。
time アトリビュートにエクスプレッションを設定する場合には、 -o フラグを使用するとエラーになります。
expression -o $fractal[1] -s "offsetU = 0.02*time;";
fractal の place2dTexture のアトリビュート offsetU にエクスプレッションを作成します。
$keys = {1, 2, 5, 7, 10, 240};
ramp のアトリビュート colorGain にキーフレームを作成するために、 キーになるフレーム番号を int の配列 $keys に代入します。
$vals = {0.0, 3.0, 0.5, 2.0, 1.2, 1.0};
ramp のアトリビュート colorGain にキーフレームを作成するために、 各キーの値を float の配列 $vals1 に代入します。
makeKeyframe3($keys, $vals, $ramp[0], "colorGain");
上で定義したプロシージャ makeKeyframe3() によって、 ramp のアトリビュート colorGain にキーフレームを設定します。
$keys = {1, 6, 240};
ramp のアトリビュート alphaGain にキーフレームを作成するために、 キーになるフレーム番号を int の配列 $keys に代入します。
$vals = {0.0, -0.2, -0.245};
ramp のアトリビュート alphaGain にキーフレームを作成するために、 各キーの値を float の配列 $vals1 に代入します。
makeKeyframe($keys, $vals, $ramp[0], "alphaGain");
上で定義したプロシージャ makeKeyframe() によって、 ramp のアトリビュート alphaGain にキーフレームを設定します。
string $mname = `shadingNode -asUtility multiplyDivide`;
multiplyDivide ノードを作成します。
string $obj[] = `listConnections ($ramp[0] + ".alphaGain")`;
ramp のアトリビュート alphaGain にコネクトされているアニメーションカーブを表す animCurveTU ノードの名前を調べて、$obj に代入します。
connectAttr -f ($obj[0] + ".output") ($mname + ".input1X");
animCurveTU のアトリビュート output を multiplyDivide のアトリビュート input1X にコネクトします。
setAttr ($mname + ".input2X") -1;
multiplyDivide のアトリビュート input2X を -1 に設定します。
connectAttr -f ($mname + ".outputX") ($ramp[0] + ".alphaOffset");
multiplyDivide のアトリビュート outputX を ramp のアトリビュート alphaOffset にコネクトします。
setAttr ($ramp[0] + ".colorEntryList[0].color") -type double3 0.2 0 0 ;
ramp の colorEntryList の 0 番目の色を 0.2 0 0 に設定します。
setAttr ($ramp[0] + ".colorEntryList[1].color") -type double3 0.36 0.14 0.02 ;
ramp の colorEntryList の 1 番目の色を 0.36 0.14 0.02 に設定します。
setAttr ($ramp[0] + ".colorEntryList[2].color") -type double3 1.0 0.3 0.0 ;
ramp の colorEntryList の 2 番目の色を 1.0 0.3 0.0 に設定します。
setAttr ($ramp[0] + ".colorEntryList[3].color") -type double3 1 0.45 0 ;
ramp の colorEntryList の 3 番目の色を 1.0 0.45 0.0 に設定します。
setAttr ($ramp[0] + ".colorEntryList[4].color") -type double3 1 0.78 0 ;
ramp の colorEntryList の 4 番目の色を 1.0 0.78 0.0 に設定します。
setAttr ($ramp[0] + ".colorEntryList[5].color") -type double3 1 1 1 ;
ramp の colorEntryList の 5 番目の色を 1 1 1 に設定します。
$keys = {1, 240};
ramp のアトリビュート colorEntryList[0].position にキーフレームを作成するために、 キーになるフレーム番号を int の配列 $keys に代入します。
$vals = {0.93, 0.38};
ramp のアトリビュート colorEntryList[0].position にキーフレームを作成するために、 各キーの値を float の配列 $vals1 に代入します。
makeKeyframe($keys, $vals, $ramp[0], "colorEntryList[0].position");
上で定義したプロシージャ makeKeyframe() によって、 ramp のアトリビュート colorEntryList[0].position にキーフレームを設定します。
$vals = {0.62, 0.28};
ramp のアトリビュート colorEntryList[1].position にキーフレームを作成するために、 各キーの値を float の配列 $vals1 に代入します。
makeKeyframe($keys, $vals, $ramp[0], "colorEntryList[1].position");
上で定義したプロシージャ makeKeyframe() によって、 ramp のアトリビュート colorEntryList[1].position にキーフレームを設定します。
$vals = {0.47, 0.20};
ramp のアトリビュート colorEntryList[2].position にキーフレームを作成するために、 各キーの値を float の配列 $vals1 に代入します。
makeKeyframe($keys, $vals, $ramp[0], "colorEntryList[2].position");
上で定義したプロシージャ makeKeyframe() によって、 ramp のアトリビュート colorEntryList[2].position にキーフレームを設定します。
$vals = {0.38, 0.19};
ramp のアトリビュート colorEntryList[3].position にキーフレームを作成するために、 各キーの値を float の配列 $vals1 に代入します。
makeKeyframe($keys, $vals, $ramp[0], "colorEntryList[3].position");
上で定義したプロシージャ makeKeyframe() によって、 ramp のアトリビュート colorEntryList[3].position にキーフレームを設定します。
$vals = {0.31, 0.15};
ramp のアトリビュート colorEntryList[4].position にキーフレームを作成するために、 各キーの値を float の配列 $vals1 に代入します。
makeKeyframe($keys, $vals, $ramp[0], "colorEntryList[4].position");
上で定義したプロシージャ makeKeyframe() によって、 ramp のアトリビュート colorEntryList[4].position にキーフレームを設定します。
$vals = {0.21, 0.09};
ramp のアトリビュート colorEntryList[5].position にキーフレームを作成するために、 各キーの値を float の配列 $vals1 に代入します。
makeKeyframe($keys, $vals, $ramp[0], "colorEntryList[5].position");
上で定義したプロシージャ makeKeyframe() によって、 ramp のアトリビュート colorEntryList[5].position にキーフレームを設定します。
makeDisplacementShader($ramp[0], $shname[1]);
上で作成したプロシージャ makeDisplacementShader によって displacementShader を作成します。

参考


Next
Index | Home
Mail