Blender學(xué)習(xí)日記(七)——Bevel倒角節(jié)點(diǎn)的運(yùn)用及模型曲率計(jì)算、曲率節(jié)點(diǎn)
1、前言
編寫:舟午YueMoon
關(guān)鍵詞:法線、倒角、向量、空間向量、三角函數(shù)、點(diǎn)積、曲率節(jié)點(diǎn)、倒角節(jié)點(diǎn)
?在Blender中制作材質(zhì)時我們可能需要計(jì)算模型的曲率,達(dá)到給模型邊角進(jìn)行破損處理的目的。
但在Blender的材質(zhì)節(jié)點(diǎn)環(huán)境中并沒有OC和Redshift那樣的曲率節(jié)點(diǎn),所以我們需要手動創(chuàng)建一個節(jié)點(diǎn)組,用來計(jì)算模型邊角的曲率,將有棱角的地方和平滑的地方分離出來。
如果你不想了解原理,只想知道這個節(jié)點(diǎn)應(yīng)該怎么連的話,你可以直接跳轉(zhuǎn)到文末的最后一張圖。
以正方體和棱角球?yàn)槔?/span>

最終結(jié)果演示:

注意:本方案中使用到了Bevel(倒角)節(jié)點(diǎn),該節(jié)點(diǎn)僅在Cycles渲染器中生效,故本方案不適用于Eevee渲染器。
2、倒角節(jié)點(diǎn)原理
官方文檔關(guān)于Bevel節(jié)點(diǎn)的說明:倒角節(jié)點(diǎn) — Blender Manual
簡而言之,Bevel節(jié)點(diǎn)就是通過對法線圖進(jìn)行模糊處理而對模型表面產(chǎn)生倒角的效果。(下圖來自官方文檔)

在材質(zhì)節(jié)點(diǎn)中新建一個Bevel節(jié)點(diǎn),先將Radius(半徑)屬性歸零,直連輸出,得到下圖效果。對于正方體而言,它正常的法線圖應(yīng)該是邊角分明:

而Bevel節(jié)點(diǎn)可將法線圖進(jìn)行高斯模糊處理進(jìn)而產(chǎn)生倒角,用Radius屬性控制模糊半徑(即倒角半徑):

此時,模型表面被Bevel節(jié)點(diǎn)模擬出了倒角。(注意,這個效果只是Bevel節(jié)點(diǎn)影響法線貼圖而模擬出的倒角,模型本身并沒有任何變化,畢竟這里只是材質(zhì)節(jié)點(diǎn)空間,不是幾何節(jié)點(diǎn)空間……)
法線夾角圖解:

3、Blender中的法線和空間向量
在Blender節(jié)點(diǎn)中,紫色的點(diǎn)輸出的并不是單純的一個數(shù)字,而是一個由三個數(shù)字組成的數(shù)組,它代表一個空間向量(或空間矢量,英文為Vector),這個向量代表模型上某個表面的法線朝向。

RGB三色分別代表XYZ三個方向,但由于XYZ方向有正有負(fù)而顏色卻不能為負(fù),所以當(dāng)方向?yàn)樨?fù)時該位置顯示為黑色,但這并不代表該位置的法向量為零向量,這里的數(shù)據(jù)依然可以被Blender計(jì)算,在圖中可以看到綠色面的對面為黑色,表示該向量的方向?yàn)?0,-1,0)。嘗試在此時旋轉(zhuǎn)正方體,理解為什么會出現(xiàn)顏色變化。(本文中默認(rèn)向量長度為1)。


4、通過點(diǎn)積計(jì)算達(dá)到目的效果
回到本文目的,當(dāng)我們使用Bevel節(jié)點(diǎn)對模型表面的法線圖產(chǎn)生模糊時,Bevel法線與模型本身的法線在模型棱角處產(chǎn)生了區(qū)別,我們需要做的是通過操作將這些法線不相同的地方計(jì)算出來,在模型表面讓法線方向相同的地方表現(xiàn)為黑色,法線方向不同的地方表現(xiàn)為白色。即可達(dá)到本文中圖二的效果。
空間中兩向量必然存在一夾角,我們用θ表示,則0°≤θ≤180°(0≤θ≤π)。
在本文的情況下,Bevel法線與本體法線的夾角應(yīng)該低于90°,即0≤θ<π/2。
我們使用Blender材質(zhì)節(jié)點(diǎn)中Vector Math(矢量運(yùn)算)節(jié)點(diǎn)中Dot Product(點(diǎn)積)運(yùn)算:

點(diǎn)積為兩向量長度的乘積乘以夾角的余弦值(狂補(bǔ)高中數(shù)學(xué)):

不難看出點(diǎn)積可以直接表達(dá)出兩向量的余弦值,從而將向量夾角輸出。
此時,當(dāng)物體的棱角越尖,θ角越大,點(diǎn)積值越小,并且θ會在Bevel(倒角)節(jié)點(diǎn)中設(shè)定的半徑范圍內(nèi)柔和過渡至0。
但由于當(dāng)0≤θ≤π/2時,θ角的余弦值隨θ角的增大而減小,所以如果直接計(jì)算兩向量點(diǎn)積得出的結(jié)果應(yīng)該是物體平滑的地方白,有棱角的地方黑,所以我們還需要用Color Ramp(顏色漸變)節(jié)點(diǎn)對點(diǎn)積計(jì)算結(jié)果進(jìn)行反向,順便調(diào)整。附一張來自網(wǎng)絡(luò)的余弦函數(shù)圖:

于是可以得出節(jié)點(diǎn)連接方式如下:
也可以用Geometry(幾何數(shù)據(jù))節(jié)點(diǎn)中的Normal(法線)屬性替代Bevel節(jié)點(diǎn),沒啥區(qū)別
