Unreal Engine 4 —— Kajiya-Kay Shading在UE4中的實現


在我的博客Technical Artist的不歸路 —— Kajiya-Kay Shading 中大致過了一遍Kajiya-Kay Shading的原理,而本篇博客則着重於在虛幻4中進行該着色模型的實現。


在那篇博客中,由於Shader代碼已經有了,那么問題也就僅僅存在於在UE4中材質編輯器的實現。

先上效果圖:

Effect

基本函數

在這篇博客的實現中,光照都在切線空間(Tangent Space)中進行計算。在UE4的材質編輯器中,使用TransformVector節點來進行空間的轉換。

Tangent Vector

由於Kajiya-Kay着色模型主要使用的是切線向量,因此需要計算出對應的切線向量。在切線空間中,將N向量與(1.0, 0.0, 0.0)進行叉乘來計算出切線向量。

TangentVector

ShiftTangent函數

有了Shader代碼,ShiftTangent函數很好構建,我在這里將其封裝為Material Function進行調用:

ShiftTangent

StrandSpecular函數

同樣的,StrandSpec函數也很好構建:
StrandSpecular

光照計算

Light Vector

由於UE4使用的是Defferred Shading,而Kajiya-Kay Shading使用的是Foward Shading,為了在材質編輯器中實現這個效果,需要做一些額外的配置。

首先是LightVector的構建,在UE4中可以使用Material Parameter Collection來進行變量的設置。我在這里建立了一個Material Parameter Collection,並且在其中設置了對應的向量參數:

Material Parameter Collection

此外,我創建了一個Blueprint用於動態設定這個值,通過SetVectorParameterValue函數進行設定。

SetLightVector

通過這樣的設定,需要在將這個Actor拖入Level,並且設定高光對應的光源Actor。那么就可以在材質編輯器中使用如下方式獲得LightVector:
LightVector_Mat

那么這樣子就只需要按照Shader寫的來連即可。


以下是該材質的圖片形式:

Material

<全文完>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM