天天看點

Unityshader第一課筆記

應用階段 – 幾何運算 – 光栅化 – 像素運算

應用階段

CPU進行,一般包括使用者輸入,碰撞檢測,實體模拟,動畫,全局加速,調用Draw Call
渲染向優化-各種剔除算法 Cull Off,Back,Front
結束後傳遞下階段資料:
           

幾何元素:POSITION

紋理:uv-TEXCOORD0

參數

POSITION 和TEXCOORD0是unityshadr 内置代碼變量

struct appdata_base {
    float4 vertex : POSITION;//頂點位置
    float3 normal : NORMAL;//法線
    float4 texcoord : TEXCOORD0;//紋理坐标
    UNITY_VERTEX_INPUT_INSTANCE_ID
};

struct appdata_tan {
    	float4 vertex : POSITION;
    	float4 tangent : TANGENT;//切線
    	float3 normal : NORMAL;
    	float4 texcoord : TEXCOORD0;
    	UNITY_VERTEX_INPUT_INSTANCE_ID
};

struct appdata_full {
    	float4 vertex : POSITION;
    	float4 tangent : TANGENT;
    	float3 normal : NORMAL;
    	float4 texcoord : TEXCOORD0;
    	float4 texcoord1 : TEXCOORD1;//第二紋理坐标
    	float4 texcoord2 : TEXCOORD2;//第三紋理坐标
    	float4 texcoord3 : TEXCOORD3;//第四紋理坐标
    	fixed4 color : COLOR;//頂點顔色
    	UNITY_VERTEX_INPUT_INSTANCE_ID
};
           

幾何階段

1. 頂點Shading階段
	該階段為必須含有的階段
	多用于各種頂點相關資料運算---依靠頂點位置運動産生動畫,修改發現防線
	頂點必須經過運算:UnityObjectToClipPos(v.vertex)
		該運算把頂點坐标從 模型空間-世界空間-相機空間-裁剪空間
2. 投影階段
	細分曲面、幾何Shading和流輸出
	一般手機不支援幾何Shadering
3. 剪裁階段
	隻有部分或者全部在視覺空間的圖素才能傳遞後面階段。完全在視覺空間的會直接傳遞,部分在視覺空間的會和
	視覺空間邊界産生新頂點,在内的保留在外得裁剪掉
4. 螢幕映射階段
	裁剪後的坐标會以三維坐标得形式傳入此階段,稱為視窗坐标。視窗坐标的xy值會縮放到和螢幕始末像素一直,
	被稱為螢幕坐标,z軸會被映射到0到1之間。
	不同api的y軸原點和方向是不同的。
           

光栅化

光栅化一般使用三個頂點形成的三角面作為輸入,然後找到這個三角面内所有像素(圖像元素),再傳入下一階段。
光栅化的作用就是将螢幕空間的二維頂點及其深度等資料轉化到螢幕像素内。
           

像素運算階段

通過前面所有階段後,圖素内的像素被傳遞到此階段。在此階段的計算都是逐像素的,

每個圖素内的像素(而不是螢幕内的像素)都會使用一段程式來确定是否可見(如深度測試)和其顔色。