庄懂shader入门系列-代码Lambert模版

 基础的shader中的Lambert全部展示,拿走不谢。

Shader "Unlit/l 03/Shader/moban Lambert"
{
    Properties{
		_Diffuse("Diffuse Color",Color) = (1,0,1,1)
        _SpecularPow("高光次幂",Range(1,90))=30
        _MainCol("颜色",Color)=(1.0,1.0,1.0,1.0)
	}
		SubShader{
			Pass{
				Tags{"LightMode" = "ForwardBase"}
				CGPROGRAM
	#include "Lighting.cginc"
	#pragma vertex vert
	#pragma fragment frag
    #pragma target 3.0
			fixed4 _Diffuse;
            float3 _MainCol;
            float _SpecularPow;
            
			struct a2v {
				float4 vertex:POSITION;
				float3 normal:NORMAL;
			};
			//输入结构
            struct VertexInput{
                float4 vertex :POSITION;//获取 顶点信息
                float4 normal : NORMAL; //获取 法线信息
            };
            // 输出结构
            struct VertexOutput{
                float4 posCS:SV_POSITION;   //裁剪空间顶点位置
                float4 posWS:TEXCOORD0;     //世界空间顶点位置
                float3 nDirWS:TEXCOORD1;    //世界空间法线位置
            };
             // 输入结构》》顶点Shader》》输出结构
            VertexOutput vert (VertexInput v){
                VertexOutput o=(VertexOutput)0;             //新建输出结构体
                o.posCS=UnityObjectToClipPos(v.vertex);     //变化顶点位置 OS》CS
                o.posWS=mul(unity_ObjectToWorld,v.vertex);  //变化顶点位置 OS》WS
                o.nDirWS=UnityObjectToWorldNormal(v.vertex);//变换法线方向 OS》WS
                return o;                                   //返回结构
            }
            //输出结构》》像素
            float4 frag(VertexOutput i): COLOR{
                //准备向量
                float3 nDir = i.nDirWS;
                float3 lDir = _WorldSpaceLightPos0.xyz;
                float3 vDir = normalize(_WorldSpaceCameraPos.xyz - i.posWS.xyz);
                float3 hDir = normalize(vDir + lDir);
                //准备点积结果
                float ndot1=dot(nDir,lDir);
                float ndoth=dot(nDir,hDir);
                //光照模型
                float lambert=max(0.0,ndot1);
                //返回结果
                return  float4(lambert,lambert,lambert,1.0);
            }
			ENDCG
		}
	}
}

来自庄懂课程。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值