shader高光反射漫反射学习

高光反射:会受到相机方向的影响  specular=直射光 *pow(max(cosθ,0),10); shader效果 类似于一个亮点

		  //反射光的方向,unity方法reflect() 反射光是平行光的反射 -lightDir  法线是normalDir  得到的是光照的反射方向 reflectDir
		  fixed3 reflectDir = normalize(reflect(-lightDir, normalDir));

		 //相机位置减去对应光照点的坐标,得到viewDir的是视野的方向
		 fixed3 viewDir=normalize(_WorldSpaceCameraPos.xyz - mul(v.vertex, unity_WorldToObject).xyz);

		 // 得到夹角。光照方向的反射方向和视野方向  进行点乘
		 fixed3 speacular = _LightColor0.rgb  * _Specular.rgb * pow(max(dot(reflectDir, viewDir),0),_Gloss);

高光反射中的半兰伯特方式:

               //这个是半兰伯特公式(2个的叉乘)*0.5+0.5 ,用于游戏方面比较多,因为背光的材质不容易发黑 
		float halfLambert = dot(normalDir, lightDir)*0.5 + 0.5;
	       //取得漫反射的颜色
	        fixed3 diffuse = _LightColor0.rgb*halfLambert*_Diffuse.rgb;//dot()用来取得函数的点乘//_LightColor0用来取得平行光的颜色

高光反射的升级版本  BlinnPhong

		 //取到系统内置的环境光线 unity_lightmodel_ambient.rgb
		  fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.rgb;

		  //unity_WorldToObject从世界空间转换到模型空间
		  fixed3 normalDir = normalize(f.worldNormal);
		  //_WorldSpaceLightPos0用来取得平行光的位置
	          //fixed3 lightDir = normalize(_WorldSpaceLightPos0.xyz);//normalize用来把一个向量单位化。		 
		  //下面的是对上面的进行更改,利用CG函数来实现
		  fixed3 lightDir = normalize(WorldSpaceLightDir(f.worldVertex));

		  float halftemp = dot(normalDir, lightDir)*0.5 + 0.5;
		 //取得漫反射的颜色
		  fixed3 diffuse = _LightColor0.rgb*halftemp*_Diffuse.rgb;//dot()用来取得函数的点乘//_LightColor0用来取得平行光的颜色
                 //相机位置减去对应光照点的坐标,得到viewDir的是视野的方向
		 fixed3 viewDir=normalize(_WorldSpaceCameraPos.xyz - f.worldVertex);

         	 //这个是求相机视野方向和光的方向的平分线的值
		 fixed3 halfDir = normalize(viewDir + lightDir);


		 // 得到夹角。      法线跟平分线进行点乘
		 fixed3 speacular = _LightColor0.rgb  * _Specular.rgb * pow(max(dot(normalDir, halfDir),0),_Gloss);


漫反射 :不会受到相机方向的影响 Diffuse=直射光颜色 *max(0,cos夹角(光和法线的夹角)) coso=光方向*法线方向

求叉乘用dot(法线,灯光);

fixed3 diffuse = _LightColor0.rgb*max(dot(normalDir, lightDir), 0)*_Diffuse.rgb;



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值