1. 程式人生 > >UE4材質初探(轉載)

UE4材質初探(轉載)

原文連結

UE4的材質表面上看起來很簡單,可是到了用的時候卻總是沒有辦法實現好的效果。所以特意對文件進行閱讀,初步瞭解了一下主要知識點。

當前使用的UE4版本:4.8.0。

UE4中的材質有很多用途,可以用於光照、延遲渲染、粒子系統等等。由於暫時不會用到,目前只做了最基礎的材質使用的研究,也就是說是Materia Type為Surface的情況。材質的最終輸出節點上的可用項會隨著功能選擇的不同而有所不同。即便使用Materia Function使所有的引腳都是可用的也會在實際使用時根據選擇而被禁用。

材質輸入引腳

材質中最為關鍵的是作為最終輸出結果的引腳,根據情況的不同有的會使用,有的並不會被使用。

基礎顏色(Base Color)

定義材質的顏色,接受引數為Vector3(RGB)。顏色採用float形式,任何超出範圍的輸入數值都將被clamp到0~1的範圍內。

相當於在攝影中使用偏光鏡濾除由反射引起的雜光之後的物體的顏色。偏光鏡的效果可參照以下對比圖。

這裡寫圖片描述

右邊為加了偏光鏡後的效果。

金屬(Metallic)

定義材質接近金屬的程度。0~1的範圍由低到高的接近金屬材質。從個人感官上,金屬性決定的是類似於高光反射強度的引數。

高光(Specular)

在大多數情況下保留預設的0.5即可的引數。調整的是非金屬材質的高光反射強度,對金屬材質無效。

經實際測試,在金屬性為0.5時,這個引數幾乎沒有可視覺識別的影響。在金屬性為0時可以為增加一定程度的高光反射。

粗糙度(Roughness)

定義材質的粗糙程度。基本和現實生活中一樣,數值越低的材質鏡面反射的程度就越高,數值越高就傾向於漫反射。

自發光顏色(Emissive Color)

定義材質自主發出光線的引數。超過1的數值將會被視為HDR引數,產生泛光的效果。

高動態範圍成像(簡稱HDRI或HDR)是用來實現比普通影象技術更大曝光動態範圍(即更大的明暗差別)的一組技術。高動態範圍成像的目的就是要正確地表示真實世界中從太陽光直射到最暗的陰影這樣大的範圍亮度。

不透明度(Opacity)

定義材質的不透明度。

不透明蒙板(Opacity Mask)

只在Masked Blend模式可用的引數,與半透明度不同的是。不透明蒙板的輸出結果只有可見和完全不可見兩種。通常用於實現鏤空之類的效果。

普通(Normal)

其實是法線引數,通常用於連線法線貼圖。UE4中文一直使用『普通』這個翻譯,不知是否有什麼深意……

世界位置偏移(World Position Offset)

世界位置偏移引數使得材質可以控制網格在世界空間中的頂點位置。

使用時如果遇到剔除投影之類的錯誤,則需要放大網格的Scale Bounds,雖然這樣做會導致效率下降。

世界位移(World Displacement)

與上面的屬性相似,不過世界位移只能在Tessellation屬性有設定時才起作用的。

多邊形細分乘數(Tessellation Multiplier)

同樣只有在設定了Tessellation屬性時才可以使用,決定的是瓷磚貼片的個數。

DisplacementNetwork.png

次表面顏色(Subsurface Color)

只有Shading Model為Subsurface時才有效的引腳,用於模擬類似於人類面板這樣在光線透過表面之後會有第二種表面顏色反射的情況。

透明塗層(Clear Coat)

透明塗層通常用於模擬在材質的表面有一層薄的透明塗層的情況,如鋼琴烤漆之類的效果。

透明塗層粗糙度(Clear Coat Roughness)

決定透明塗層的粗糙度。

環境遮擋(Ambient Occlusion)

用於連線AO貼圖的引腳。

折射(Refraction)

用於調整透明材質的折射率的。

畫素深度偏移(Pixel Depth Offset)

當前官方文件沒有說明。

常用節點

引擎提供了很多非常使用的節點,不過數目有點多,只能在實際使用中熟悉才能漸漸的掌握。下面列出的是可能會經常被用到的節點:

Panner

對UV座標進行平移,用於UV動畫的實現。

PannerExample.png

Rotater

對UV座標進行旋轉,同樣用於UV動畫的實現。

RotatorExample.png

BlackBody

這個節點可以對貼圖應用一個黑體輻射效果,實際效果就像是過了一遍熱成像掃描。

BlackBody.png

BumpOffset

這個節點用於實現視差貼圖,使得貼圖更具有真實感。

BumpOffsetExample.png

ConstantBiasScale

這個節點將輸入值加上一個值之後再乘上一個值。例如將正弦函式的結果由[-1~1]壓制到[0~1]就可以使用1,0.5的引數來操作。

Fresnel

這個節點將攝像機向量與網格法線向量進行點乘並應用到0~1的範圍中。

當攝像機方向與網格的法線垂直時返回1,當方向一致時則返回0。Fresnel的計算在設定了法線貼圖時則會使用法線貼圖進行運算。這個節點可以用於區分邊緣,例如玻璃材質就會使用到。

詳細的用法可參照官方教程:Material – How To Use Fresnel in your Materials。

DepthFade

這個節點的作用是使得兩個透明物體在疊加時顯得更加自然。

DepthFade1.png

DepthOfFieldFunction

這個節點的作用如其名稱,提供景深的運算結果。0~1的範圍代表從聚焦到模糊。

DepthOfFieldFunction_Texture.png

Desaturation

這個節點的作用是去色,會生成一個單調柔和的灰度圖。

Distance

這個節點的作用是計算兩個輸入值的距離。輸入值可以是兩個點、顏色、位置或者向量。

FeatureLevelSwitch

這個節點允許對不同的裝置使用不同的材質以保證材質在低運算率的裝置上能夠有平滑的切換。

QualitySwitch

這個節點可以讓材質在不同的視訊設定下使用不同的數值。

GIReplace

這個節點為材質提供在全域照明下產生不同間接光效果的方法。

LPV_gi_replace.pngLPV_bounce_color_override.png
這裡寫圖片描述
LightmassReplace

這個節點可以使得材質在被到處為光照用時使用一個不同的值。

LinearInterpolate

就是Lerp,線性插值,基本上覆雜的材質都會用到。

Noise

這個節點的作用是生成噪波圖。

RotateAboutAxis

對給定的向量進行旋轉,通常用於獲得選擇WorldPosition之後傳遞給WorldPositionOffset。

SphereMask

這個節點在指定的位置生成一個球形並進行距離計算,圓心處為1,外圍為0。

AntialiasedTextureMask

對輸入進行抗鋸齒運算。
這裡寫圖片描述