FireAlpaca用ブラシスクリプト「ハニカムブラシ」を作成しました
タイルブラシを改良して正六角形を平面充填できる「ハニカムブラシ」を作成しました。
実はタイルブラシよりも先に作成をし始めたのですが、粒子の描画中心を決定するアルゴリズムに苦戦し中断していて、タイルブラシのアルゴリズムを書いた後に閃いたので、ようやく完成に漕ぎ着けました。現在のところ横向き(HcS_a08.bs)と縦向き(HxS_a09.bs)でブラシが分かれていますが、今後は一つのブラシに統合していく方針です。
ブラシのDownloadは記事下部のリンク先から行ってください。
パラメータ
筆圧透明度
省略。
大きさ
HcS_a08.bsの方では粒子の縦幅、HcS_a09.bsの方では粒子の横幅がブラシ幅に対する大きさ(%)で指定できます。具体的には下図のようなこともできたりする。
スクリプト
function param1()
return "筆圧透明度", 0, 1, 1
endfunction param2()
return "大きさ", 10, 100, 95
end
function po( x0 , y0 , d , rs )
return x0 + math.cos( d * math.pi /180 ) * rs , y0 + math.sin( d * math.pi /180 ) * rs
end
function main( x, y, p )
local w = bs_width_max()
local wh = w * 0.5 * math.sqrt(3)
local y0 = ( math.floor( y / ( 0.75 * w ) ) + 0.5 ) * 0.75 * w
local k = 0
if math.floor( y / ( 0.75 * w ) ) % 2 == 0 then
k = 0.5
end
local x0 = ( math.floor( x / wh ) + k ) * wh
local rs = w * bs_param2() * 0.01 * 0.5
local r , g , b = bs_fore()
local a = 255 * bs_opaque()
if bs_param1() == 1 then
a = p * a
endbs_polygon( po( x0 , y0 , 30 , rs ) )
bs_polygon( po( x0 , y0 , 90 , rs ) )
bs_polygon( po( x0 , y0 , 150 , rs ) )
bs_polygon( po( x0 , y0 , 210 , rs ) )
bs_polygon( po( x0 , y0 , 270 , rs ) )
bs_polygon( po( x0 , y0 , 330 , rs ) )
bs_fill( r , g , b , a )
return 1
endbs_setmode( 1 )
HcS_a08.bs
スクリプト解説
スクリプト全体の流れはタイルブラシの時と同じで、ただ粒子の描画を判定するのに下図に赤色で示されたような格子を仮定しているだけである。
Download
Downloadは以下のリンク先から行ってください。