クリエイター手抜きプロジェクト[634]Adobe Illustrator CS6〜2020編 漫画の効果線(集中線)を自動生成する
── 古籏一浩 ──

投稿:  著者:



今回は、漫画で使われる背景の効果線を自動生成します。効果線はいろいろありますが、ここで生成するのは集中線です。例えば、以下のページにある集中線素材パターンです。

・マンガパーツSTOCK
https://mangasozai.com/


他人が作った効果線、集中線を使おうとすると、利用規約や制限があって面倒です。かと言って、集中線を手書きするのも今は流行らないでしょう。多くはデジタルによって描かれていると思われますし。

〈漫画界はよく知らないのですが、ほとんどデジタル作画・納品っぽいのでしょうか。地元に漫画編集者が来た時(昨年)に聞いたら、まだアナログな人は、それなりにいるようでした〉

なんにせよ権利を気にせず使うなら、自前で描く必要があります。ところが、手作業は面倒です。プログラムを使って描かせれば1秒程度で終わります。自分でパラメーター調整して自動生成だから、権利問題もクリア。

ということで、いくつか作成しました。少し長めなので、説明はこのくらいにしておきます。Adobe Illustrator CS6でスクリプトを実行するだけです。集中線の色は前景色が反映されます。描画範囲は最初のアートボードサイズになります。アートボードはひとつしか対応していません。ですから、生成したいサイズのドキュメントを生成してから、スクリプトを実行し利用する、という感じになります。





以下のスクリプトは、等間隔で集中線を描画します。間隔を変更するには、上から9行目のvar step=10;の10の数値を変えてください。

// 漫画効果線その1(等間隔版)
var doc=app.activeDocument;
var dw=doc.width;
var dh=doc.height;
var cx=doc.width/2;
var cy=doc.height/2;
// 横方向を描画
var step=10;
for(var x=0; x<dw; x=x+step){
triangle(cx,-cy, x,0, x+step,0);
triangle(cx,-cy, x,-dh, x+step,-dh);
x=x+step;
}
// 縦方向を描画
var step=10;
for(var y=0; y<dh; y=y+step){
triangle(cx,-cy, 0,-y, 0, -y+step);
triangle(cx,-cy, dw,-y, dw, -y+step);
y=y+step;
}
// 三角形を描画
function triangle(x1,y1,x2,y2,x3,y3){
var tp=app.activeDocument.pathItems.add();
tp.stroked=false;
tp.filled=true;
tp.fillColor=app.activeDocument.defaultFillColor;
tp.setEntirePath([[x1,y1],[x2,y2],[x3,y3],[x1,y1]]);
tp.closed=true;
}

等間隔だとイマイチということもあります。集中線は割とランダムなことが多いからです。そこで、以下のスクリプトはランダムな間隔で描画します。乱雑さはvar range=20;の20の数値で変更できます。

// 漫画効果線その2(ランダム間隔版)
var doc=app.activeDocument;
var dw=doc.width;
var dh=doc.height;
var cx=doc.width/2;
var cy=doc.height/2;
var range=20; // 幅の範囲
// 横方向を描画
var step=10;
for(var x=0; x<dw; x=x+step){
triangle(cx,-cy, x,0, x+step,0);
triangle(cx,-cy, x,-dh, x+step,-dh);
step=2+Math.random()*range;
x=x+step;
}
// 縦方向を描画
var step=10;
for(var y=0; y<dh; y=y+step){
triangle(cx,-cy, 0,-y, 0, -y+step);
triangle(cx,-cy, dw,-y, dw, -y+step);
step=2+Math.random()*range;
y=y+step;
}
// 三角形を描画
function triangle(x1,y1,x2,y2,x3,y3){
var tp=app.activeDocument.pathItems.add();
tp.stroked=false;
tp.filled=true;
tp.fillColor=app.activeDocument.defaultFillColor;
tp.setEntirePath([[x1,y1],[x2,y2],[x3,y3],[x1,y1]]);
tp.closed=true;
}

「あ〜でも、この集中線じゃないんだよなあ」という人も多いかもしれません。中心が円になっていることがほとんどだからです。一点集中型は少ないでしょう。ということで、以下のスクリプトは円形で集中線を生成します。中心円のサイズはvar r=50;ので50で調整できます。

// 漫画効果線その3(中心円形版)
var doc=app.activeDocument;
var dw=doc.width;
var dh=doc.height;
var cx=doc.width/2;
var cy=doc.height/2;
var r=50; // 円の半径
// 横方向を描画
var step=10;
var rStep=(360-180)/(dw/step);
var deg=45;
for(var x=0; x<dw; x=x+step){
var ccx=cx-r*Math.cos(deg*Math.PI/180);
var ccy=cy-r*Math.sin(deg*Math.PI/180);
triangle(ccx,-ccy, x,0, x+step,0);
var ccx=cx-r*Math.cos(deg*Math.PI/180);
var ccy=cy-r*Math.sin(deg*Math.PI/180);
triangle(ccx,ccy-dh, x,-dh, x+step,-dh);
x=x+step;
deg=deg+rStep;
}
// 縦方向を描画
var step=10;
var rStep=(360-180)/(dh/step);
var deg=90+45;
for(var y=0; y<dh; y=y+step){
var ccx=cx-r*Math.cos((180-deg)*Math.PI/180);
var ccy=cy-r*Math.sin((180-deg)*Math.PI/180);
triangle(ccx,-ccy, 0,-y, 0, -y+step);
var ccx=cx-r*Math.cos(deg*Math.PI/180);
var ccy=cy-r*Math.sin(deg*Math.PI/180);
triangle(ccx,-ccy, dw,-y, dw, -y+step);
y=y+step;
deg=deg+rStep;
}
// 三角形を描画
function triangle(x1,y1,x2,y2,x3,y3){
var tp=app.activeDocument.pathItems.add();
tp.stroked=false;
tp.filled=true;
tp.fillColor=app.activeDocument.defaultFillColor;
tp.setEntirePath([[x1,y1],[x2,y2],[x3,y3],[x1,y1]]);
tp.closed=true;
}

さらに集中線に乱雑さが必要な場合は、以下のスクリプトになります。ただ、パラメーター調整が難しいので、微妙なところです。Illustratorのパスで生成されるので、後から自由に調整できます。これはこれでOKということで。

// 漫画効果線その4(中心円形ランダム版)
var doc=app.activeDocument;
var dw=doc.width;
var dh=doc.height;
var cx=doc.width/2;
var cy=doc.height/2;
var range=60; // 幅の範囲
var r=200; // 円の半径
// 横方向を描画
var step=10;
var rStep=(360-180)/(dw/step);
var deg=45;
for(var x=0; x<dw; x=x+step){
var rr=r+Math.random()*range;
var ccx=cx-rr*Math.cos(deg*Math.PI/180);
var ccy=cy-rr*Math.sin(deg*Math.PI/180);
triangle(ccx,-ccy, x,0, x+step,0);
var ccx=cx-rr*Math.cos(deg*Math.PI/180);
var ccy=cy-rr*Math.sin(deg*Math.PI/180);
triangle(ccx,ccy-dh, x,-dh, x+step,-dh);
x=x+step;
deg=deg+rStep;
}
// 縦方向を描画
var step=10;
var rStep=(360-180)/(dh/step);
var deg=90+45;
for(var y=0; y<dh; y=y+step){
var rr=r+Math.random()*range;
var ccx=cx-rr*Math.cos((180-deg)*Math.PI/180);
var ccy=cy-rr*Math.sin((180-deg)*Math.PI/180);
triangle(ccx,-ccy, 0,-y, 0, -y+step);
var ccx=cx-rr*Math.cos(deg*Math.PI/180);
var ccy=cy-rr*Math.sin(deg*Math.PI/180);
triangle(ccx,-ccy, dw,-y, dw, -y+step);
y=y+step;
deg=deg+rStep;
}
// 三角形を描画
function triangle(x1,y1,x2,y2,x3,y3){
var tp=app.activeDocument.pathItems.add();
tp.stroked=false;
tp.filled=true;
tp.fillColor=app.activeDocument.defaultFillColor;
tp.setEntirePath([[x1,y1],[x2,y2],[x3,y3],[x1,y1]]);
tp.closed=true;
}

漫画だと人物やセリフに合わせて集中線が描かれるため、正円では困ることもあります。ということで、楕円形版も用意しました。楕円の横の半径はvar rx=80;の数値を、縦の半径はvar ry=280;の数値で変更できます。

// 漫画効果線その5(中心楕円形版)
var doc=app.activeDocument;
var dw=doc.width;
var dh=doc.height;
var cx=doc.width/2;
var cy=doc.height/2;
var rx=80; // 円の横半径
var ry=280; // 円の縦半径
// 横方向を描画
var step=10;
var rStep=(360-180)/(dw/step);
var deg=45;
for(var x=0; x<dw; x=x+step){
var ccx=cx-rx*Math.cos(deg*Math.PI/180);
var ccy=cy-ry*Math.sin(deg*Math.PI/180);
triangle(ccx,-ccy, x,0, x+step,0);
var ccx=cx-rx*Math.cos(deg*Math.PI/180);
var ccy=cy-ry*Math.sin(deg*Math.PI/180);
triangle(ccx,ccy-dh, x,-dh, x+step,-dh);
x=x+step;
deg=deg+rStep;
}
// 縦方向を描画
var step=10;
var rStep=(360-180)/(dh/step);
var deg=90+45;
for(var y=0; y<dh; y=y+step){
var ccx=cx-rx*Math.cos((180-deg)*Math.PI/180);
var ccy=cy-ry*Math.sin((180-deg)*Math.PI/180);
triangle(ccx,-ccy, 0,-y, 0, -y+step);
var ccx=cx-rx*Math.cos(deg*Math.PI/180);
var ccy=cy-ry*Math.sin(deg*Math.PI/180);
triangle(ccx,-ccy, dw,-y, dw, -y+step);
y=y+step;
deg=deg+rStep;
}
// 三角形を描画
function triangle(x1,y1,x2,y2,x3,y3){
var tp=app.activeDocument.pathItems.add();
tp.stroked=false;
tp.filled=true;
tp.fillColor=app.activeDocument.defaultFillColor;
tp.setEntirePath([[x1,y1],[x2,y2],[x3,y3],[x1,y1]]);
tp.closed=true;
}


【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/


イラストレーターでパスとして生成されるので、後で自由に処理できます。

・創って学ぼうプログラミング
https://news.mynavi.jp/series/makeprogram


・8K/4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/


・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/