以下內容不需要入門的時候立刻閱讀和理解,建議逐漸深入學習後,不時回來看看即可。
什麼是GPU?
針對DX11. 該技術需要消耗大量硬件資源,因此開發人員不會在場景中的每個地方都使用它,一般只考慮玩家視角近景和輪廓邊緣。利用GPU硬件加速,將現有3D模型的三角形拆分得更細小、更細緻,也就是大大增加三角形數量,使得渲染對象的表面和邊緣更平滑、更精細。
座標系
計算機3D中,3D座標系採用的主要是,笛卡兒座標系(Cartesian座標系),也稱直角座標系。
當x軸朝右,y朝上,z朝屏幕裏的時候,爲左手座標系。
當x軸朝右,y朝上,z朝屏幕外即面朝你的時候,爲右手座標系。
所以,Unity使用的是左手座標系。
D3D左手 即 裁剪空間裏(x,y,z,w) z= z/w 即[0,1]
OpenGL使用右手 ,即 裁剪空間裏(x,y,z,w) z= (z/w + 1)/2 即[-1,1]
#pragma target 3.0 :定義Shader模型爲Shader Model 3.0,
2.0, Direct3D 9 (默認缺省值)。支持32張貼圖 + 64個計算
3.0, Direct3D 9。支持512張貼圖 + 512個計算
4.0, 只支持DirectX 11。
5.0, 只支持DirectX 11。
【Unity Shader內置矩陣】
UNITY_MATRIX_MVP 當前模型視圖投影矩陣
UNITY_MATRIX_MV 當前模型視圖矩陣
UNITY_MATRIX_V 當前視圖矩陣。
UNITY_MATRIX_P 目前的投影矩陣
UNITY_MATRIX_VP 當前視圖*投影矩陣
UNITY_MATRIX_T_MV 移調模型視圖矩陣
UNITY_MATRIX_IT_MV 模型視圖矩陣的逆轉
UNITY_MATRIX_TEXTURE0 UNITY_MATRIX_TEXTURE3 紋理變換矩陣
注意:View矩陣並不是相機的matrix(xy一致,z是反的,也就是相機下的子物體(1,1,1)在UNITY_MATRIX_MV實際是(1,1,-1))
【Unity Vertex Data】
Unity頂點函數的輸入數據 appdata 在UnityCG.cginc中定義,有以下三種
【1 appdata_base】
位置vertex,法線normal,貼圖uv texcoord
struct appdata_base {
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
};
【2 appdata_tan】
位置vertex,法線normal,切線tangent 貼圖uv texcoord
struct appdata_tan {
float4 vertex : POSITION;
float4 tangent : TANGENT;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
};
【3 appdata_full】
位置vertex,法線normal,切線tangent 貼圖uv texcoord 頂點顏色color
struct appdata_full {
float4 vertex : POSITION;
float4 tangent : TANGENT;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
float4 texcoord1 : TEXCOORD1;
float4 texcoord2 : TEXCOORD2;
float4 texcoord3 : TEXCOORD3;
#if defined(SHADER_API_XBOX360)
half4 texcoord4 : TEXCOORD4;
half4 texcoord5 : TEXCOORD5;
#endif
fixed4 color : COLOR;
};
【自定義struct】
:後面加semantics即可
POSITION
NORMAL
TEXCOORD0-6
TANGENT
COLOR