文章結構
因為對unity內置的函數不是很熟悉,導致寫Shader速度比較慢,影響效率,所以希望通過這篇將要使用的函數方法歸總,方便查閱。
Unity常用的結構體
'#'include "UnityCG.cginc"
P108 頁 Unity入門精要
appdata_base 頂點位置,頂點法線,第一套紋理坐標
appdata_tan 頂點位置,頂點切線,頂點法線,第一組紋理坐標
appdata_full 頂點位置,頂點切線,頂點法線,四組紋理坐標
appdata_img 頂點位置,第一組紋理坐標
不僅如此也提供了許多有用的方法
float3 WorldSpaceViewDir(float4 v)
float3 ObjSpaceViewDir(float4 v)
float3 WorldSpaceLightDir(float4 v)
float3 ObjSpaceLightDir(float4 v)
float3 UnityObjectToWorldNormal(float3 norm)
float3 UnityObjectToWorldDir(float3 dir)
float3 UnityWorldToObjectDir(float3 dir)
'#' include "Lighting.cginc" //帶有一些常量,例如攝像機的位置,可以用上面的函數直接計算
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;
_WorldSpaceLightPos0.xyz
_WorldSpaceCameraPos.xyz
_LightColor0.rgb
語義
POSITION,SV_POSITION, SV_Target float4
NORMAL float3
TANGENT float4 ,(x,y,z,w)w有用
TEXCOORD0, TEXCOORD1 float4
COLOR fixed4
紋理
用法
Properties{
_MainTex{"Main Tex", 2D} = "white"{}
}
pass{
sampler _MainTex;
fixed4 _MainTex_ST; // xy代表縮放值, zw代表平移值
uv = _MainTex_ST.xy * texcoord.xy +_MainTex_ST.zw
//o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
}
凹凸映射
因為貼圖可以不僅可以存儲顏色信息,換種想法也可以儲存其他信息,例如凹凸貼圖,將法線儲存在紋理上,增加凹凸感;
1.模型空間的法線紋理
2.法線空間的法線紋理(x軸為切線,y軸為副法線,z軸為法線)
2 比 1好