文章结构
因为对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好