三、 繪圖演算法
3.1 水墨畫模組
3.1.1 毛筆模組與移動控制機制
本節將介紹以 Weng 為主的二維毛筆模組, Weng 的毛筆模組是二維圓形的架構來 模擬毛筆與畫布接觸區域,並著重在中鋒的筆觸模擬上,然而我們可以藉由將二維圓形 改變成二維橢圓的架構,去模擬毛筆與畫布接觸區域的墨水量多寡,以達到模擬側鋒的 效果,圖 8 顯示毛筆中鋒與側鋒的模擬範例。我們以同心橢圓的分布方式來表示毛筆與 畫布的接觸區域,如圖 9 所示,以 O 為中心點的同心橢圓來表示,並以最外圈(FI)作 為基準,內圈的橢圓則以比例方式分佈,我們定義 Y 軸的方向為主軸(Q),作為軸長
參數式如 3-2 式。
其中:
。 為內部所屬的橢圓編號 為橢圓的個數,
, 的主軸與副軸 與
分別為
i I
F F Q
, P , q ,
pi i i I
圖 9 毛筆與畫布接觸區域之定義
我們定義筆毛與畫布接觸的線段,稱作區域 Rj,橢圓以等角度方式切割成數個小區 域,如圖 10 所示,因此線段與 X 軸的夾角可由 3-3 式求得。
Y 軸
X 軸 Q
P
O (毛筆移動方向)
q 1 y p
F x
2i 2 2 i 2
i
⇒ + =
為區域的編號。
圖 10 以等角切割成數個區域
毛筆模組中的P 、Q 參數可以控制整個毛筆與畫布接觸的形狀與面積,在我們的 系統中副軸P 是以主副軸的比例R 來代替(P = R x Q),我們可以改變Q 的大小決 定毛筆與畫布接觸的範圍,及改變R 的大小來決定毛筆與畫布接觸面的外型。筆毛的分 布情形,則由I 橢圓的個數與J 分割的區域的總數來控制。由此我們藉由改變Q、R、I 與 J 四個參數以模擬出中鋒與側鋒的不同筆觸。
我們根據控制點以Cardinal Spline 建立毛筆移動軌跡,移動軌跡曲線的控制點則以 內插方式計算獲得,其移動過程包含毛筆位置、毛筆壓力及毛筆軸向,說明如下。
Y 軸
X 軸 Q
O P
(毛筆移動方向)
θj Rj
交點為筆毛與畫 布的接觸點至原 點距離為 di,j Si,j
Fi
3. 毛筆軸向:
圖 11 毛筆的移動軌跡與旋轉
3.1.2 水墨筆觸模擬機制 3.1.2.1 墨色變化
在Weng[35]的毛筆模組中,是將墨水量與墨色視為相同,使得無法模擬在墨色濃水 量少的情形,因此我們將墨色值與墨水量分開。我們將Weng毛筆模組中的Decreasing 參 數模擬墨水量減少產生的墨色變化,更改成以水與墨的濃度不同產生的墨色變化,如圖 12所示。為了模擬毛筆所畫的墨色深淺濃淡變化,我們加入了墨色控制參數,將筆觸的 起始墨色與終止墨色作一限制,以線性內插的方式模擬筆觸的墨色變化情形。
' j
S
i,j
S
i,橢圓 P 軸旋轉對齊 Tk
圖 12 墨色變化效果
我們參考了Weng毛筆模組中的Concentration、Difference及Discontinuity三個參數,
利用前兩個參數來控制墨色及墨水量的分布,第三個參數則用於模擬墨水量不足時產生 斷水效果,說明如下:
1. 水墨集中效果(Concentration)
Weng在此效果上提供了四種墨色分布,他的墨色分布效果是在毛筆與畫布的接 觸面Y方向上做出線性的灰階變化,如圖13所示,此效果可與其他參數配合產生不同 的筆觸風格。
圖 13 墨色在Y方向作線性灰階變化產生的效果
2. 筆毛水墨相異值(Difference)
在這個效果上Weng以一個亂數陣列(difference[]),存放著由從正負相同區間內取 出的亂數值,再以筆毛的y值對亂數陣列索引,以取得不同的亂數值,如此根據不同 的筆毛y值就可以模擬出不同的墨色擾亂程度,其效果如圖14所示。
圖 14 不同的墨色擾亂程度產生的效果
3. 筆毛斷水效果(Discontinuity)
在繪圖的時候,毛筆所沾上的墨水量會隨著筆毛與畫布的接觸移動逐漸減少,
為模擬該項效果,定義了不連續陣列(discontinuity[]),與亂數陣列(difference[])
作法相同,其索引出來的數值就作為筆毛發生斷水的長度上限(Max_Gap)。當筆 毛的墨水量不足時,亂數產生小於等於Max_Gap的斷水長度gap-size,讓筆毛於該區 段距離內不留下墨跡,其效果如圖15所示。
圖 15 筆毛斷水效果
3.1.2.2 中鋒與側鋒模擬
圖 16 毛筆壓力與接觸面積成正比