自制简单的Lambert光照

Shader "浅墨Shader编程/Volume7/35.自制简单的Lambert光照" 
{
	//--------------------------------【属性】----------------------------------------  
	Properties 
	{
      _MainTex ("【主纹理】Texture", 2D) = "white" {}
    }

	//--------------------------------【子着色器】----------------------------------  
    SubShader 
	{
		//-----------子着色器标签----------  
		Tags { "RenderType" = "Opaque" }
		//-------------------开始CG着色器编程语言段-----------------   
		CGPROGRAM

		//【1】光照模式声明:使用自制的兰伯特光照模式
		#pragma surface surf QianMoLambert

		//【2】实现自定义的兰伯特光照模式
		half4 LightingQianMoLambert (SurfaceOutput s, half3 lightDir, half atten) 
		{
			half NdotL =max(0, dot (s.Normal, lightDir));
			half4 color;
			color.rgb = s.Albedo * _LightColor0.rgb * (NdotL * atten * 2);
			color.a = s.Alpha;
			return color;
		}

		//【3】输入结构  
		struct Input 
		{
			float2 uv_MainTex;
		};

		//变量声明
		sampler2D _MainTex;

		//【4】表面着色函数的编写
		void surf (Input IN, inout SurfaceOutput o) 
		{
			//从主纹理获取rgb颜色值 
			o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
		}

		//-------------------结束CG着色器编程语言段------------------
		ENDCG
    }
    Fallback "Diffuse"
  }

_LightColor0 存储了该逐像素光的颜色

还有个_WorldSpaceLightPos0,里面存储的其实就是平行光的方向,_WorldSpaceLightPos0.w可以表明该光源的类型,如果为0表示是平行光,为1表示是点光源或者聚光灯光源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值