- 接上篇笔记中的逐顶点光照继续整理
- 逐顶点的计算量发生在光与模型的顶点之间,
- 逐像素(逐片元)最终的颜色其实来自像素周围几个顶点插值结果
-顶点函数:
将上一篇中 vert(a2v f)函数中除 顶点位置 与 法线计算 之外的光方向、归一化的法线方向及漫反射光照以及最后的漫反射与环境光叠加全部移动到逐像素(逐片元)frag(v2f f)里来计算,如下:
//将光照计算过程移出顶点函数,放在片元函数中
v2f vert(a2v v) {
v2f f;
//顶点位置从模型空间转换到裁减空间也叫投影空间
f.position = mul(UNITY_MATRIX_MVP,v.vertex);
//法线计算
f.WorldNormalDir = mul(v.normal, (float3x3)_World2Object);
return f;
}
-片元函数:
//将计算过程放在片元中:逐像素光照
fixed4 frag(v2f f):SV_Target {
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.rgb;
//光方向(_WorldSpaceLightPos0.xyz 世界空间中灯光位置就等于灯光方向)
fixed3 lightDir = normalize(_WorldSpaceLightPos0.xyz);