shader中创建漫反射和高光

Shader"practice/diffuse and specular"{

Properties{

_Diffuse("diffuseColor",color)=(1,1,1,1)

_Specular("SpecularSize",Range(0,1))=0.01

}

SubShader{

Pass{

Tags{"LightMode"="ForwardBase"}

CGPROGRAM

#pragma vertex vert //取得一个直射光的颜色

#pragma fragment frag

#include"Lighting.cginc"

fixed4 _Diffuse;

float _Specular;


struct a2v{

float4 vertex:POSITION;

float3 normal:NORMAL;

};

struct v2f{

float4 position:SV_POSITION:

fixed3 color:COLOR;

};

v2f vert(a2v v){

v2f;

f,position=mul(UNITY_MATRIX_MVP,v.vertex);

fixed3 ambient =UNITY_LIGHTMODER_AMBIENT;//环境光

//计算漫反射和颜色应用

fixed3 normalDir=normalize(mul(v.normal,unity_WorldToObject));

fixed3 lightDir=normalize(_WorldSpaceLightPos0.xyz);

fixed diffuse =_LightColor0.rgb*max(dot(normalDir,lightDir),0)*_Diffuse;//色彩=光的rgb*cos(法线和光线的夹角)*物体的颜色


//计算高光的颜色(实则在所有的点再重新计算一遍)

fixed3 reflectDir=normalize( reflect(-lightDir,normalDir) );

fixed3 viewDir=normalize(_WorldSpaceCameraPos.xyz-mul(v.vertex,unity_WorldToObject));

fixed3 specular=_LightColor0*pow(max(dot(reflectDir,viewDir),0),1/specular);   //Specular=直射光  * pow( max(cosθ,0),10)  θ:是反射光方向和视野方向的夹角

f.color=diffuse+ambient+specular;

return f;

}

fixer4 frag(v2f f):SV_Target{

return fixed(f.color,1);

}

ENDCG

}

]

Fallback"Mobile/VertexLit"

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值