一、Main Maps
1.Metallic(金屬光澤)
(1)Metallic參數值存儲在RGBA紋理文件的紅色通道內, 紅色通道的值越高,則金屬光澤越明顯. 其他通道沒有使用.
①注意:將紋理添加到材質的Metallic槽中後, 原來檢閱面板上的平滑度(smoothness)滑動條將變爲不可用狀態.
②平滑度由金屬紋理貼圖的alpha通道數據指定.如果紋理文件沒有alpha通道, 平滑度則默認爲最大值.
2.Normal Map(法線貼圖)
(1)取代模型表面的法線, 重新定義表面反射光線的方向.
(2)這種技術常用於在精度較低的模型表面上模擬產生高精度的模型細節.
(3)使用RGB貼圖, 貼圖中的三個彩色通道被用於定義法線方向向量.
3.Ambient Occlusion(環境光遮擋)
(1)是一種作用於模型凹陷處的光照效果.
(2)在模型上有時會出現腔孔或者布料褶皺等通常難以接收到足夠光照的凹陷部分, 環境光遮擋效果是模型的這種特殊部分顯得比其他正常部分更暗些.
(3)這種效果與法線貼圖和金屬光澤效果結合在一起,可以是複雜模型顯得非常真實.
(4)在標準着色器裏,遮擋使用獲取RGB貼圖.
4.Emission(自發光)
(1)標準着色器裏,自發光特性使用RGB貼圖.該貼圖可以制定一個顏色,以便對自發光的顏色進行修改.
5.Specular(高光)
(1)減小平滑度(Smoothness)值,將使物體表面對環境的反射程度降低, 高光區域的尺寸增加,從而使表面顯得更加粗糙.
** 將多個材質放到一個模型上時,一個材質會覆蓋在另一個材質的上面.只有將上層材質的渲染模式設置爲透明,剪裁或者混合時,下層材質纔可見.
警告: 將多個材質設置到同一個模型上回影響運行效率, 考慮使用多遍着色.
6.UV縮放倍數(Tiling)和UV起始位置(Offset)
(1)設置材質的UV縮放倍數的X值爲-7, Y值爲7, 會將爲例的顯示尺寸縮小爲原來的1/7.
二、自定義着色器
Shader "PACKT/Moon"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Color ("Color", Color) = (1, 1, 1, 1)
}
SubShader
{
/** CG語言來實現具體的着色工作
Pass
{
Color [_Color]
setTexture [_MainTex]
{
Combine Primary * Texture
}
}
*/
CGPROGRAM
#pragma surface surf Lambert //着色器編譯指令,使用支持明暗效果的蘭伯特光照模型.
//Input結構體定義了CG代碼塊的輸入數據有哪些內容,這裏的數據包含了紋理和座標(UV)數據,
//這是在物體表面進行貼圖的基礎
/// =======================爲着色器添加光照支持Start==========================
struct Input {
float2 uv_MainTex;
};
sampler2D _MainTex; //紋理屬性處理爲二維採樣器對象
float4 _Color; //顏色屬性處理爲包含四個浮點數的值,分別代表RGBA四個通道
//定義了着色器的輸入數據IN,與輸出數據o.
void surf (Input IN, inout SurfaceOutput o) {
//着色器需要將紋理貼圖的顏色值與但顏色值相乘, 並作爲反光值輸出
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb * _Color.rgb;
}
/// =======================爲着色器添加光照支持Start============================
ENDCG
}
}
– ”Color” 中的Color將顯示在材質屬性的檢閱面板上
– _MainTex屬性, 通常被用於定義基礎紋理貼圖的屬性名稱.基礎紋理貼圖一般指着色器的反光(Abledo)屬性, 屬性類型2D指定該屬性是一個二維貼圖.
– 藍色代碼片段 表示通過屬性名稱爲着色過程設置紋理貼圖, 紋理顏色將與當前顏色相乘.
1.Properties(屬性)
(1)屬性區爲着色器定義了原始材質屬性, 例如: 定義一個顏色值, 一個漫反射紋理, 或者一個可以由使用者調用的滑動條控件等.
(2)屬性類似於C#或者UnityScript中的公有變量.
(3)雙引號內的名稱將顯示在材質屬性的檢閱面板上, 顏色屬性被定義爲一組由四個實數組成的值, 分別代表R,G,B,A.
2.SubShader(子着色器)
(1)包含這色漆的主體部分, 負責處理輸入的顏色,紋理以及其他數據.
(2)所有着色器必須包含一個子着色器.
(3)子着色器下有一個Pass, 代表該着色器中包含一遍渲染, 這是對子着色器的最低要求.