影晨文化:卡通材質(zhì)原理
Cel Shading(Toon Shading,Cartoon Shading)叫卡通渲染(著色),它是一種NPR(非真實(shí)感渲染)的技術(shù),Cel的全稱是Celluloid(音譯賽璐璐或賽璐珞)
賽璐璐風(fēng)格是指顏色陰影都是硬性邊的上色方法的一種風(fēng)格
下面我們就開始把我們的卡通效果進(jìn)行分解
1
光照強(qiáng)度
首先是光照強(qiáng)度,將Blin-Phong的光照模型簡化后得到光照強(qiáng)度x顏色信息=最后的圖像顏色(當(dāng)然肯定不合邏輯,但是主要看效果)。所以關(guān)照強(qiáng)度就=最后的圖像顏色/顏色信息。但是由于最后的圖像顏色信息不是個(gè)單通道的,所以我們把最后的圖像顏色和顏色信息都去飽和再進(jìn)行計(jì)算。
這里開始進(jìn)引擎實(shí)現(xiàn)效果。
這個(gè)效果我們在后處
理postprocess里面去實(shí)現(xiàn),所以首先給一個(gè)無邊界(unbound)
的
post process volume,并為其創(chuàng)建后處理材質(zhì)。
按照上面的用最后的圖像顏色和顏色信息去飽和后相除就可以獲得光照強(qiáng)度。所以在場景中就可以看到場景中的明暗變化
然后來取消掉中間過度的灰色,即大于0.5取1成為亮面,小于0.5取0成為暗面.并為亮面和暗面分別添加強(qiáng)度控制和顏色控制。
再把場景顏色加進(jìn)來
2
高光
高光的提取主要就是先把specular從場景中提取出來,然后和去了飽和度的最終圖像相乘再進(jìn)行power計(jì)算
材質(zhì)里面實(shí)現(xiàn)效果如圖
給了個(gè)藍(lán)色的高光并把高光的效果和之前的亮暗面效果加在一起
3
加入天光等其他顏色光
影響
天光的提取主要是從最終的顏色里面把basecolor摳掉,再摳掉光照強(qiáng)度,這會(huì)得到包含天光在內(nèi)的其他顏色光。
我們往場景中加入一個(gè)綠色pointlight,然后用最終的顏色除以basecolor再除以光照強(qiáng)度,得到如下效果。
把最后結(jié)果乘到之前的結(jié)果中。
4
外描邊
通過Sobel算子基于深度進(jìn)行邊緣檢測,即計(jì)算9個(gè)像素在水平方向和豎直方向的深度變化。
比如說p5周圍有8個(gè)點(diǎn),要計(jì)算豎直方向的變化的話,公式就是;2表示上下所占的權(quán)重比較大。
水平方向的變化計(jì)算,同樣左右占的比例比較大。
P表示點(diǎn)的深度值。所以最后總得變化值就是Gx和Gy斜邊的值,即根號(hào)下Gx的平方+Gy的平方。但是由于引擎在計(jì)算根號(hào)這種效率比較低,所以可以直接簡化為|Gx|+|Gy|。
由于只是對(duì)特定物體進(jìn)行描邊,所以在場景里面要把需要進(jìn)行描邊的物體勾上自定義深度。具體引擎里面的節(jié)點(diǎn)如下。
用lerp把外描邊效果加到場景顏色中。
5
內(nèi)部描邊
內(nèi)部描邊主要是基于法線進(jìn)行的,
求
一個(gè)像素周圍上下左右四個(gè)點(diǎn)的法線變化。
P3是當(dāng)前像素點(diǎn)的法線。P=(p3-p2)+(p3-p4)+(p3-p1)+(p3-p5)
所以只需要判斷P這個(gè)法線是否有變化就可以了,簡單的辦法就是把p的三個(gè)分量相加,如果三個(gè)分量相加等0就是沒有邊界。但是由于法線可以是負(fù)數(shù),所以我們要取絕對(duì)值abs(Px)+abs(Py)+abs(Pz)。
引擎中實(shí)現(xiàn)效果
將內(nèi)描邊也疊加到場景中
6
邊緣光
提取思路還是先提取光照強(qiáng)度,然后power,摳出不夠亮的光和不需要著色的哪部分,然后用sobel進(jìn)行邊緣檢測,最后乘上basecolor
詳細(xì)節(jié)點(diǎn)
最后把所有的顏色合到一起
最后把背景天空給弄出來,將場景深度和自定義深度進(jìn)行比較,相等的話代表需要進(jìn)行卡通處理的部分,除此以外渲染場景本身的顏色。
最終效果如圖
以上就是影晨文化對(duì)卡通材質(zhì)原理簡單介紹,如果有廣州三維動(dòng)畫制作的需求,可以隨時(shí)找到影晨文化哦!
標(biāo)簽為: