小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

【原創(chuàng)】Unity3d 表面著色器學(xué)習(xí)筆記

 雪柳花明 2016-05-31
本文永久地址:http://www./article/25.aspx,【文章轉(zhuǎn)載請(qǐng)注明出處!】

一、Unity 中三種著色器書寫格式:

1、surface shaders, 表面著色器
2、vertex and fragment shaders and 頂點(diǎn)和片段著色器 3、fixed function shaders. 固定功能著色器

二、頂點(diǎn)著色器與片段著色器

三維空間中任何復(fù)雜的模型都是由若干個(gè)三角形組成的,頂點(diǎn)(Vertex)就是指這些三角形的頂點(diǎn),而片段(fragment)就是指三角形的填充區(qū)域。

三、表面著色器(Surface Shader)的標(biāo)準(zhǔn)輸出結(jié)構(gòu):

struct SurfaceOutput 
{
half3 Albedo; //反射率
half3 Normal; //法線
half3 Emission; //自發(fā)光,用于增強(qiáng)物體自身的亮度,使之看起來(lái)好像可以自己發(fā)光
half Specular; //鏡面
half Gloss; //光澤
half Alpha; //透明
};

四、表面著色器使用 #pragma surface surfaceFunction lightModel [optionalparams] 指令,以聲明它是一個(gè)表面著色器。

1、surfaceFunction:表示Cg函數(shù)中有表面著色器(surface shader)代碼。這個(gè)函數(shù)的格式應(yīng)該是這樣:void surf (Input IN,inout SurfaceOutput o), Input是你自己定義的結(jié)構(gòu)。Input結(jié)構(gòu)中應(yīng)該包含所有紋理坐標(biāo)(texture coordinates)和和表面函數(shù)(surfaceFunction)所需要的額外的必需變量。
2、lightModel:在光照模式中使用。內(nèi)置的是Lambert(diffuse)和 BlinnPhong(specular)。

五、表面著色器附加輸入結(jié)構(gòu):

1、float3 viewDir:視圖方向(view direction) 值。為了計(jì)算視差效果(Parallax effects),邊緣光照(rim lighting)等,需要包含視圖方向(view direction)值。
2、float4 COLOR:每個(gè)頂點(diǎn)(per-vertex)顏色的插值。
3、float4 screenPos:屏幕空間中的位置。 為了反射效果,需要包含屏幕空間中的位置信息。
4、float3 worldPos:世界空間中的位置。
5、float3 worldRefl:世界空間中的反射向量。如果表面著色器(surface shader)不寫入法線(o.Normal)參數(shù),將包含這個(gè)參數(shù)。 
6、float3 worldNormal:世界空間中的法線向量(normal vector)。如果表面著色器(surface shader)不寫入法線(o.Normal)參數(shù),將包含這個(gè)參數(shù)。
7、float3 worldRefl(INTERNAL_DATA):世界空間中的反射向量。如果表面著色器(surface shader)不寫入法線(o.Normal)參數(shù),將包含這個(gè)參數(shù)。為了獲得基于每個(gè)頂點(diǎn)法線貼圖( per-pixel normal map)的反射向量(reflection vector)需要使用世界反射向量(WorldReflectionVector (IN, o.Normal))。
8、float3 worldNormal(INTERNAL_DATA):世界空間中的法線向量(normal vector)。如果表面著色器(surface shader)不寫入法線(o.Normal)參數(shù),將包含這個(gè)參數(shù)。為了獲得基于每個(gè)頂點(diǎn)法線貼圖( per-pixel normal map)的法線向量(normal vector)需要使用世界法線向量(WorldNormalVector (IN, o.Normal))。

六、光照模式聲明

光照模式是一個(gè)以Lighting開(kāi)頭與名字組合在一起的合乎規(guī)范的函數(shù)。你可以在你的著色器文件(shader file)或?qū)胛募?included files)中的任何一個(gè)地方聲明它。這個(gè)函數(shù)是:
1、half4 LightingName(SurfaceOutput s, half3 lightDir, half atten):這是在正向渲染路徑(forward rendering path)中使用的光照模式。它不是取決于視圖方向的(view direction)。
2、half4 LightingName(SurfaceOutput s, half3 lightDir, half3 viewDir, half atten):這是在正向渲染路徑(forward rendering path)中使用的光照模式。它取決于視圖的方向(view direction)。
3、half4 LightingName_PrePass(SurfaceOutput s, half4 light):這是在延時(shí)光照路徑(deferred lighting path)中使用的。

當(dāng)定向解碼光照貼圖用于向前/延遲光照中的光照函數(shù),或類似的函數(shù)中時(shí),需要進(jìn)行定制。
1、half4 LightingName_DirLightmap (SurfaceOutput s, fixed4 color, fixed4 scale, bool surfFuncWritesNormal):這是使用的不依賴于視圖方向(view direction)的光照模式(light model)。
2、half4 LightingName_DirLightmap (SurfaceOutput s, fixed4 color, fixed4 scale, half3 viewDir, bool surfFuncWritesNormal, out half3 specColor):這是使用的依賴于視圖方向(view direction)的光照模式(light model)。 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多