unity shader学习总结一

     学习unity shader有两个月了,最近的两个月总是有一些工程项目,占用我大量的学习时间,因此总是停停学学。今天虚拟校园工程开好完成了,就有时间吧自己学到的shader,总结一下。

这是两个_jianbian纹理图片:

实现的效果如下:

                        

 

                     

                      

代码如下

Shader "Custom/katongMyLihModel" {
 properties{
      _MainTex("主要纹理",2D)="white"{}
      _Detial("细节纹理",2D)="white"{}
      _Bump("法线贴图",2D)="white"{}
      _jianbian("渐变纹理",2D)="white"{}
      _RimColor("边缘颜色",Color)=(0.1,0.3,0.5,1)
      _RimPower("发光强度",Range(0.1,3))=0.5
 }
 SubShader{
      Tags{"RenderType"="Opaque"}
      CGPROGRAM
      #pragma surface surf MyLightModel
      sampler2D _jianbian;
      inline fixed4 LightingMyLightModel(SurfaceOutput s,fixed3 lightDir,fixed atten){

            //简单的漫反射 法线和灯光点积
             fixed diff=dot(s.Normal,lightDir);

                  //增强光强
                   diff=diff*0.5+0.5;

            //获得渐变颜色条
             half3 ramp=tex2D(_jianbian,float2(diff,diff)).rgb;

            //定义变量 
             half4 yanse;

            //_LightColor0内置的灯光颜色变量
             yanse.rgb=s.Albedo*_LightColor0.rgb*ramp*atten*2;
             yanse.a=s.Albedo;
             return yanse;
      }
      struct Input{
            float2 uv_MainTex;
            float2 uv_Bump;
            float2 uv_Detial;
           
            float3 viewDir;
      };
      sampler2D _MainTex;
      sampler2D _Bump;
      sampler2D _Detial;
     
      float4 _RimColor;
      float  _RimPower;
     
      void surf(Input IN,inout SurfaceOutput o){
            o.Albedo=tex2D(_MainTex,IN.uv_MainTex).rgb;

            //细节纹理
            o.Albedo*=tex2D(_Detial,IN.uv_Detial).rgb*2;

           //法线贴图
            o.Normal=UnpackNormal(tex2D(_Bump,IN.uv_Bump));

             //normalize()单位向量,视角方向和法线求点积,返回【0,1】一个数值,用1减去。是为了角度越大,rim值越大,光线越多。
            fixed rim=1-saturate(dot(normalize(IN.viewDir),o.Normal));

             //幂运算
                  rim=pow(rim,_RimPower);

             //发光
            o.Emission=_RimColor.rgb*rim;
      }
      ENDCG
 }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值