位置:gimppaintcore.c,gimp_paint_core_smooth_coords()
把目前游標(biāo)位置跟過(guò)去的點(diǎn)平均,算出要把筆刷點(diǎn)上去的位置。
有Quality和Weight兩個(gè)參數(shù),初次看到應(yīng)該會(huì)不知道該調(diào)哪一個(gè)。
簡(jiǎn)單用法:
Weight固定在500,只調(diào)Quality控制強(qiáng)度,要設(shè)多少就畫(huà)畫(huà)看感覺(jué)一下。
詳細(xì):
Weight是常態(tài)分布的標(biāo)準(zhǔn)差,代入常態(tài)分布的公式?jīng)Q定各點(diǎn)的權(quán)重。
Quality代表取幾個(gè)過(guò)去的點(diǎn)做計(jì)算。
計(jì)算式大致是
(第1個(gè)點(diǎn)*權(quán)重1 + 第2個(gè)點(diǎn)*權(quán)重2 + …… + 第n個(gè)點(diǎn)*權(quán)重n) / 權(quán)重的總合
n=Quality
Weight小的話(huà)權(quán)重遞減得很快,幾乎由前面的點(diǎn)決定,Weight越大會(huì)越平均。
雖然MyPaint也有手抖修正,但是GIMP的MyPaint筆刷也會(huì)套用GIMP本身的手抖修正,所以我都直接調(diào)GIMP的,沒(méi)有用MyPaint的。
位置:gimpdynamicsoutput.c,gimp_dynamics_output_get_linear_value()
先求平均值再用乘法計(jì)算
上面1是工具選項(xiàng),2,3是筆刷動(dòng)態(tài)編輯器。
看圖2,Opacity(不透明度)有壓力、速度、漸變(Fade)三個(gè)因素影響,F(xiàn)ade是跟圖1裡的Fade Options有關(guān)。
然後再看圖3有壓力、速度、漸變的曲線(xiàn),橫軸是影響因素的原值,縱軸是輸出,求出三個(gè)0~1的倍率,算三個(gè)倍率的平均。
圖1的不透明度基本值是70,把70乘以平均倍率就是實(shí)際的不透明度。
是把基本值乘上0~1之間的數(shù),所以最終結(jié)果會(huì)在0~基本值之間。
位置:gimpairbrush.c,gimp_airbrush_paint()
筆刷間隔在gimpbrushcore.c,gimp_brush_core_interpolate()
有三個(gè)特有參數(shù):Rate、Flow、Motion only,特徵是時(shí)間也會(huì)影響它的表現(xiàn)。如果點(diǎn)滑鼠或筆按下去之後不動(dòng)游標(biāo),也會(huì)慢慢畫(huà)東西上去,間隔時(shí)間由Rate控制,其他筆刷要游標(biāo)有移動(dòng)才會(huì)畫(huà)出東西。
筆刷工具的基本是,筆刷形狀是一張記憶體裡的點(diǎn)陣圖,游標(biāo)每移動(dòng)一段距離就把點(diǎn)陣圖貼到畫(huà)布上,貼的時(shí)候套用混色模式。
噴槍有兩個(gè)條件會(huì)觸發(fā)這個(gè)動(dòng)作
1.游標(biāo)移動(dòng)一段距離,跟其他筆刷相同。
2.經(jīng)過(guò)一段時(shí)間沒(méi)有觸發(fā)1,因?yàn)橥耆珱](méi)移動(dòng)或移動(dòng)距離不夠。如果觸發(fā)了1會(huì)重新計(jì)時(shí)。
1的「一段距離」,筆刷參數(shù)的Spacing代表筆刷直徑的幾倍,單位%,即px數(shù)是Size*Spacing/100,設(shè)成100就會(huì)看到筆觸剛好一個(gè)挨著一個(gè)。
有動(dòng)態(tài)的話(huà)變成「2*(1-Spacint動(dòng)態(tài)) + Spacing*Spacint動(dòng)態(tài)」,筆刷動(dòng)態(tài)是0.0~1.0的數(shù)字,完全沒(méi)開(kāi)動(dòng)態(tài)就是1,算法見(jiàn)上面的筆刷動(dòng)態(tài)。
簡(jiǎn)單說(shuō)就是
動(dòng)態(tài)=0 → 200%
動(dòng)態(tài)=1 → Spacing
中間的值內(nèi)插算出
Spacing>200則完全固定在Spacing,不受動(dòng)態(tài)影響。
2的timeout是「10秒/(Rate*Rate動(dòng)態(tài))」,即Rate=每10秒筆觸數(shù),Rate=0則不觸發(fā)2。
Flow的話(huà),如果把不透明度範(fàn)圍定在0~1,噴槍不透明度算法是「(Flow/100)*Flow動(dòng)態(tài)*(Opacity/100)*Opacity動(dòng)態(tài)」,簡(jiǎn)單講是Flow*Opacity,其他筆刷只有「(Opacity/100)*Opacity動(dòng)態(tài)」。(不太懂為何要把不透明度分成兩個(gè)數(shù)值)
如果Motion only開(kāi)啟則不觸發(fā)2的條件,Rate沒(méi)作用,變成追加Flow參數(shù)的普通筆刷。
附帶一提MyPaint是用「每秒筆觸數(shù)」做出噴槍工具,不同的是游標(biāo)完全不動(dòng)不會(huì)畫(huà)出東西,有微小的移動(dòng)才有反應(yīng)。
位置:gimpsmudge.c,gimp_smudge_motion(),以及gimp-gegl-loops.c,gimp_gegl_smudge_blend()
跟噴槍一樣有Rate參數(shù)但意義不一樣。
如下圖,每做一次「把筆刷點(diǎn)上去」就跑一輪詳細(xì)裡的步驟。
記憶體裡有accum buffer和paint buffer兩個(gè)點(diǎn)陣圖,accum buffer初始會(huì)從畫(huà)布上複製一塊區(qū)域,然後每跑一輪更新一次。
rate是個(gè)比例,會(huì)先經(jīng)過(guò)筆刷動(dòng)態(tài)計(jì)算再用在這裡,越大則塗抹效果越強(qiáng)。
位置:mypaint-brush.c,prepare_and_draw_dab(),此函式是主要的筆刷動(dòng)態(tài)計(jì)算。
不是直接設(shè)定幾px,而是「e的x次方」,e是自然對(duì)數(shù)的底,2.71828……。
小於0也不會(huì)變成負(fù)數(shù),而是0~1 (因此這個(gè)值可以設(shè)成負(fù)數(shù))
如果設(shè)為0,半徑是e^0=1px
0.7 → 2px
1.0 → 2.71828……px
2.3 → 10px
3.0 → 20px
MyPaint有不少參數(shù)是用指數(shù)計(jì)算,像下面提到的塗抹半徑也是。
用過(guò)MyPaint筆刷以後發(fā)現(xiàn)用指數(shù)有它的好處,用小筆刷的時(shí)候調(diào)整半徑需要1px增減,但畫(huà)大區(qū)域的時(shí)候想要一次3~10px增減,指數(shù)有數(shù)字越大一次增減越多的特性。
GIMP原有的筆刷按快速鍵都是一次加1px,畫(huà)大區(qū)域的時(shí)候比較麻煩。找了一下發(fā)現(xiàn)GIMP也有increase-percent和decrease-percent的快速鍵,不過(guò)按一次就是變成兩倍,而且變化量還不能改,沒(méi)辦法用。
位置:mypaint-mapping.c,mypaint_mapping_calculate()
跟GIMP不同,用加法計(jì)算。
根據(jù)曲線(xiàn)圖求出變化量,可能是正或負(fù),再把變化量跟基礎(chǔ)值相加。
如果壓力是0.35,如上圖變化量大約是-0.62,這一階段就是1.00-0.62=0.38。
繼續(xù)把精細(xì)速度、粗略速度、隨機(jī)……算出的變化量加上去,就是實(shí)際用的值。
位置:mypaint-brush.c,prepare_and_draw_dab()
跟GIMP的塗抹不同,類(lèi)似其他軟體的水彩工具。
採(cǎi)取畫(huà)布顏色時(shí)會(huì)計(jì)算平均,像把顏料溶解的效果,且多了塗上筆刷顏色的能力。
用3個(gè)參數(shù)控制:塗抹(smudge)、塗抹長(zhǎng)度(smudge length)、塗抹半徑(smudge radius)
暫存顏色和混合色只是一個(gè)RGBA值,不用記錄點(diǎn)陣圖buffer。
塗抹半徑也是e為底的指數(shù),如果值是x,則採(cǎi)取半徑是「目前筆刷半徑*e^x」
塗抹長(zhǎng)度實(shí)際上不是長(zhǎng)度而是混合比例,跟GIMP塗抹的rate類(lèi)似。
塗抹是與筆刷顏色的混合比例。
同標(biāo)籤作品搜尋:繪圖心得|GIMP|MyPaint|演算法
留言共 1 篇留言
前一篇:從愚人節(jié)企劃誕生的歌姬:... 後一篇:新發(fā)明,改造GIMP的塗...
活動(dòng)與參展 (0)
└活動(dòng)與參展資訊 (1)
└活動(dòng)與製作後記 (11)
└販?zhǔn)蹠?huì)遊戲團(tuán)調(diào)查 (14)
遊戲團(tuán)隊(duì)「電子妖精實(shí)驗(yàn)室」 (0)
└重要消息 (4)
└Cyber Sprite遊戲秘密 (2)
└製作進(jìn)度 (26)
創(chuàng)作 (0)
└繪圖 (24)
└程式 (51)
└故事、劇本 (3)
aaa1357932 給 大家:
各位有空可以來(lái)我家看看畫(huà)作或聽(tīng)聽(tīng)我的全創(chuàng)作專(zhuān)輯!看更多6小時(shí)前