在遊戲中,布料的渲染也是一個比較重要,並且也不算小的一個模組,畢竟角色和人形怪物都是要穿衣服的。像魔獸世界這種風格的遊戲,身上的裝備是布、皮、鎖、板甲,布類的佔比比較小,而且我依稀記得(AFK很久了)布料雖然也有亞麻和絲綢,但是感覺穿在身上沒什麼區別。國內的劍三、天刀這類古風武俠風的遊戲,基本都是布類的服裝,金屬最多就是裝備上的配件,所以布料的渲染佔比就大的多了。而且為了高畫質和華麗的風格,不管是裝備還是時裝,都有各種布料材質和效果。

最近把布料的渲染加到之前寫好的PBR Shader的程式碼中,在網上查詢這方面的資料發現布料、絲綢渲染的文章確實不多,而且沒有深入的講過物理的原理。所以我就自己去了解了布料的編織方法,不同的編織方法會產生什麼樣的視覺效果。雖然都是粗淺的瞭解,但是也足夠讓我明白為什麼絲綢類的布料比較特殊,為什麼高光需要各項異性來渲染。

布類渲染的文章打算寫兩篇,第一篇講布料的編織方法和視覺表現,第二篇講具體的渲染程式碼實現。

這篇文章的內容主要參考自知乎的兩篇回答和百度到的一些資料,文章裡用到的一些圖文也來自這兩個回答:

織布的原料-線

線是布的基本單位,由經緯兩個方向的線以某種編織方式編織成一塊布料。線可以分為三大類:植物類、人造類、動物類。

但是在大部分遊戲中基本沒有人造類的布料出現,所以這裡就不介紹了。植物類常用的就是亞麻線、棉線,動物類的就是蠶絲、動物毛線。

線也分為無捻線和捻線兩種,捻線就是將原纖維像擰麻繩一樣擰起來,無捻線就是不處理直接編織。

Unity Shader 布料渲染(一)布料的理論知識

無捻線(左),捻線(右)

編織方式

布的編織方式分為4大類,不同的編織方式是為了不同的生活需求,而且不同的編織方式也產生了綾羅綢緞的這些概念。

1、平紋組織

Unity Shader 布料渲染(一)布料的理論知識

平紋組織是最基本的也是最好理解的,就是經紗、緯紗每隔一根就相交一次。由於沙線交織點最多,每一根紗線都被旁邊的壓住,所以平紋組織的織物比較耐磨,光澤度最差,彈性也是最小的。第一張圖的左圖就是平紋組織。

2、斜紋組織

Unity Shader 布料渲染(一)布料的理論知識

斜紋組織就是有規律的經紗或者緯紗在壓過另一條線後,在下方過經過一條以上後在穿到上方。這種編織方式會在布料的表面形成明顯的斜線紋路。對比平紋組織交織點少,所以耐磨度稍低,光澤和彈性要稍微好一點。同時斜紋組織也出現了浮長線的概念,浮長線指的是一根經紗浮在相鄰的幾根緯紗的上(或者緯紗浮在連續的經紗上面)。

Unity Shader 布料渲染(一)布料的理論知識

3、緞紋組織

Unity Shader 布料渲染(一)布料的理論知識

緞紋組織的浮長線是最長的,所以看起來柔光水滑非常有光澤。也因為浮長線最長,沒有相鄰線的保護,所以很容易被勾絲,耐用度是最低的。

Unity Shader 布料渲染(一)布料的理論知識

遊戲中渲染的絲綢其實主要就是緞紋組織的絲織品,因為浮長線的走向都是同一個方向,所以緞子表面的高光就是一絲一絲的,類似金屬拉絲的感覺,所以才要用各項異性來表現線性高光。

4、沙羅組織

Unity Shader 布料渲染(一)布料的理論知識

以上三種組織在編制時經紗和緯紗是不會左右挪動位置的,只會經緯交織。但是羅不同,在織造時,牽引經紗的綜線是會不停地抬升,再發生相對位移,再下沉,導致了織物中經紗不是相互平行而是相絞的,緯線再從相絞的經線中穿過,這種組織叫做【紗羅組織】。經線的相絞,導致了羅上的經緯較為稀疏,有肉眼可見的孔眼,織物也變得輕薄,適合在炎熱的天氣裡穿著(上圖為杭羅,杭羅中有五梭羅、七梭羅、十三梭羅,即經紗與緯線平織5次、7次、13次後扭絞一次形成紗孔),這樣就使得杭羅的羅紋(誤)變得寬窄有別。

Unity Shader 布料渲染(一)布料的理論知識

基本介紹這些也就夠大家理解絲綢渲染的原理了,這篇文章裡的都是照搬的,詳細的內容有興趣的同學可以進入上面提到的兩個答案看看,其中還列舉了每種組織結果都有什麼樣的織物,不同織物都有什麼樣的作用和特點。