AfterEffectsで指定した複数の色をシェイプの塗りで一色ずつ必ず使うExpression

この記事の発展版として、新しいエクスプレッションを組んでみた。
想定としては「使いたい色がnつあるときに、シェイプをn個複製したときに各色必ず被りがないように色が使われる」ということ。

手順として、まずnulllLayerを2つ作成。
「null 1」に「Slider Control」を適応。「Slider Control」の名前を「RandomSeed」に変更。
「null 2」に「Color Control」を適応。使いたい色数だけ複製をし、各色を使いたい色に設定をする。

塗りを適応したいシェイプレイヤーを1つ作成。名前を「Shape Layer/1」にする。
ここに「Slider Control」「Fill」を適応。(Fillはシェイプレイヤー内の塗り・線に直接エクスプレッションをかけることも可能。)
「Slider Control」の名前を「ColorSelect」に変更し、エクスプレッションを記述する。
「ColorSelect」の記述は以下の通りで。

seedRandom(thisComp.layer("Null 1").effect("RandomSeed")(1)+index,true);
NumColor=thisComp.layer("Null 2").effect("Color Control")(1).propertyGroup(2).numProperties;
ColorSelect=Math.floor(random()*NumColor);
if(ColorSelect>=NumColor)
{ColorSelect=NumColor-1;}
const arr = Array.from(new Array(NumColor), function(x, i) { return i });
arr[ColorSelect];

次に、「Fill」(もしくはシェイプレイヤー内の塗り・線)に以下のエクスプレッションを記述する。

NumColor=thisComp.layer("Null 2").effect("Color Control")(1).propertyGroup(2).numProperties;
ColorSelect=effect("ColorSelect")(1)+1
if (ColorSelect<=1){
thisComp.layer("Null 2").effect("Color Control")(1);}
else if(ColorSelect<=NumColor){
thisComp.layer("Null 2").effect("Color Control "+ColorSelect)(1);}
else{thisComp.layer("Null 2").effect("Color Control "+NumColor)(1);}

「Shape Layer/1」を複製すると「Shape Layer/2」ができる。
「Shape Layer/2」の「ColorSelect」のエクスプレッションを以下のように書き換える。

N=name.split('/')[1]-1;
seedRandom(thisComp.layer("Null 1").effect("RandomSeed")(1)+index,true);
NumColor=thisComp.layer("Null 2").effect("Color Control")(1).propertyGroup(2).numProperties;
const arr = Array.from(new Array(NumColor), function(x, i) { return i });
InLayerNum=NumColor-N
for(i=N;i>0;i--){
a=thisComp.layer(thisLayer,+i).effect("ColorSelect")(1);
arr[a]=NumColor+1;
}
arr.sort(function(a,b){
if( a < b ) return -1;
if( a > b ) return 1;
return 0;
});
ColorSelect=Math.floor(random()*InLayerNum);
if(ColorSelect>=InLayerNum)
{ColorSelect=InLayerNum-1;}
arr[ColorSelect];

「Shape Layer/2」を複製すると末尾が2,3,4….と続くので、この末尾の数が「null 2」の「Color Control」の数と同じになるまで複製して完成。

また、「null 1」の「RendomSeed」の値を変更すると色のパターンも変わる。

この記事が気に入ったらサポートをしてみませんか?