下麵給出節點網。
點擊放大
這個節點網的關鍵就是要詳細理解這個節點:lightInfo。
打開節點屬性,僅有一個選項:Light Direction Only。
[page]
這個節點平時使用的並不是很多,它的作用是提供燈光信息,以及提供燈光相對於紋理的位置信息。但如果將其它物體(如A物體)的World Matrix與該節點的World Matrix連接,則可以返回物體(如A物體)與有lightInfo節點的材質的物體上的點的距離。
例如將上麵的節點網的lambert1賦予物體B,然後將物體A的World Matrix與上麵節點網中的lightInfo節點的World Matrix相連,那麼將會得到物體A(中心)到物體B上每個點的距離。
而當Light Direction Only被勾選時,則隻會返回物體A到物體B上每個點的垂線距離。
下麵這張圖就是這個材質的關鍵,也就是這個節點網的根。
上圖中的那個Locator是怎麼來的先不用管,等一下會介紹,先講一下那兩個lightInfo節點,上麵那個勾選了Light Direction Only,那麼它得到的信息就是物體到點的距離垂線,下麵那個沒有勾選,那麼得到的就是距離。
然後再將這兩個信息相除:距離垂線/距離=cos夾角。為什麼要這麼做呢,大家可以想一下,所謂3S,也就是次表麵反射,那麼也就是越到邊緣越薄的地方通透感越強,而這種通透感並不是線形遞減的,是一種非常微秒而柔和過渡,那麼在這裏我用一個cos波形曲線來模擬。
但這樣出來的效果並不是十分滿意,還需要進行調整,所以在後麵在加一個平方節點和一個乘法節點(其實是同一個節點,隻是選項不同),修改裏麵的數值可以調整材質效果。
再連接一個節點網作為材質的顏色,並與剛剛得到的信息進行相乘。
[page]
將得到的信息連接到材質球的color後,再把這個信息進行一係列的處理,再連接到物體的ambientColor(環境光),最終得到想要的結果。
下麵講一下locator
這個locator非常重要,大家仔細想一下就可以知道,要完成以上的節點必須要一個永遠處在攝像機與物體連線上的locator,如果不是這樣,而是一個固定的locator,那麼物體也不會隨著攝像機的變化而改變通透感,我們需要的是隨著攝像機的變化,物體上的微妙的通透感也隨著變化。
這個純粹是通過數學計算得到的,如果數學不好的話,我一下也講不清楚,所以大家可以看看節點網,之後再看看源文件,應該很容易明白。
另外這裏用到了一個功能節點distanceBtween,它的作用是計算兩個物體間的距離。
另外我還在其中一個節點(surfaceShader4)中添加了幾個屬性來更方便的控製,例如其中的Sss_ds就是控製locator與物體間的距離的。