Shader学习笔记

Shader "hennysky/SurfaceShader001"  
{  
	Properties
	{
		_MainColor("主颜色",Color) = (1,1,1,1)
		_MainTex("主纹理",2D) = ""{}
		_NormalTex("法线纹理",2D) = ""{}
		_RimColor("边缘高光",Color) = (1,1,1,1)  
        _RimPower("边缘高光可调节强度",Range(0.1,9.0))=3.0     

	}
    //--------------------------------【子着色器】----------------------------------  
    SubShader   
    {  
        //-----------子着色器标签----------  
        Tags { "RenderType" = "Opaque" }  //标签:渲染非透明物体  
        //-------------------开始CG着色器编程语言段-----------------    
        CGPROGRAM   //表面着色器的代码段必须放在CGPROGRAM ENDCG中
          
        //【1】光照模式声明:使用兰伯特光照模式  
		//shader入口  surf入口函数   Lambert光照模式
        #pragma surface surf Lambert   
        //【2】输入结构   可以通过Input输入结构 把模型的一些数据传送shader语言中
		//C# 声明struct  new 
		//input就这一个改变结构体会改变输入
        struct Input   
        {  
            //四元素的颜色值(RGBA)  
            float4 color : COLOR;  
			float2 uv_MainTex;
			float2 uv_NormalTex;
            float3 viewDir;
        };  
		
		float4 _MainColor;
		float4 _RimColor;
		float _RimPower;

		sampler2D _MainTex;//主纹理
		sampler2D _NormalTex;//法线纹理
        //【3】表面着色函数的编写  
		//IN 是输入的模型的数据     inout (C#中out) SurfaceOutput系统内置的结构体 
        void surf (Input IN, inout SurfaceOutput o)   
        {  
            //反射率  
           	// o.Albedo = float3(0.5,0.8,0.3);//(0.5,0.8,0.3)分别对应于RGB分量  
            //o.Albedo = _MainColor.rgb;//(0.5,0.8,0.3)分别对应于RGB分量  
            //而o.Albedo = 0.6;等效于写o.Albedo = float3(0.6,0.6,0.6);  

			//贴图
			o.Albedo = tex2D(_MainTex,IN.uv_MainTex).rgb*_MainColor.rgb;
			//法线
			o.Normal = UnpackNormal(tex2D(_NormalTex,IN.uv_NormalTex));
            //自发光  边缘高光(描边)
            float rim = 1-saturate(dot(normalize(IN.viewDir),o.Normal));
            o.Emission = _RimColor*pow(rim,_RimPower);
        }  
        //-------------------结束CG着色器编程语言段------------------    
        ENDCG  

        
    }  
    //“备胎”为普通漫反射    
    Fallback "Diffuse"  
}

效果
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值