Shader之学习笔记七

//获取Unity引擎源代码:加群580392083


Shader "Unity Shaders Book/Chapter 6/DiffuseVertexLevel"{


Properties{
_Diffuse("Diffuse",Color)=(1,1,1,1)
}


SubShader{
Pass{
Tags{"LightMode"= "ForwardBase"} //LightMode:用于定义该pass在Unity光照流水线中的角色,只有定义了正确的LightMode,我们才能够得到一些Uniytn内置的光照
CGPROGRAM
#pragma vertex vert//vert:顶点着色器的名字
#pragma  fragment frag//frag:片元着色器的名字
#include "Lighting.cginc"

//为了使用Properties中定义的_Diffuse变量 需要定义一个和该属性类型相匹配的变量
fixed4 _Diffuse;

//顶点着色器的输出或者说是片元着色器的输入
struct a2v
{
float4 vertex:POSITION;
float3 normal:NORMAL;//NORMAL:告诉Unity要把模型顶点的法线信息存储到normal变量中
};
//定义一个片元着色器的输入
struct v2f
{
float4 pos:SV_POSITION;
fixed3 color:Color;
};


//顶点着色器
v2f vert(a2v v){


v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex); //顶点模型坐标转换为裁剪坐标
fixed3 ambients = UNITY_LIGHTMODEL_AMBIENT.xyz; //获取环境光 
fixed3 wroldNormal = normalize(mul(v.normal,(float3x3)_World2Object));//Page129  把模型的法线转换为世界坐标的法线  最后进行归一化
fixed3 worldLight = normalize(_WorldSpaceLightPos0.xyz); //获取世界坐标中光的方向
fixed3 diffuses = _LightColor0.rgb*_Diffuse.rgb*saturate(dot(wroldNormal,worldLight));//计算漫反射光
o.color = ambients + diffuses;


return o;
}


//片元着色器
fixed4 frag(v2f i):SV_TARGET{
return fixed4(i.color,1.0);
}


ENDCG

}


}
FallBack "DIFFUSE"
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值