神临的Shader学习之漫反射贴图(二)

上一篇介绍了最基本的漫反射代码和原理,那么关于漫反射在使用的时候肯定会遇到反射的力度,以及光彩等的控制问题,于是聪明的人类再次发挥了他的作死能力,想到了用贴图去控制这些东西,也是因为这个原因我们开始了痛苦挣扎的贴图渲染之旅(这些都是神临瞎想出来的逻辑发展过程,姑且听听就行了,哈哈).
老样子,先上代码,然后挑选几点说明.

Shader"myDiffuse"
{
  properties
  {
    _mainTex("Maintex",2d)="white"{}
    _EmissiveColor("Emissive Color",color)= (1,1,1,1)
    _AmibientColor("Amibient Color",color)=(1,1,1,1)
    _SomeValue("Coefficient",Range(0,10))=2.5
    _RampTex("Ramp texture",2D)="white"{}//(1)
  }

  SubShader
  {
    Tags{"RanderType"="Opaque"}
    LOD 200

    CGPROGRAM
    #pragma surface surf BasicDiffuse//(2)

    sampler2D _mainTex;
    float4 _EmissiveColor;
    float4 _AmibientColor;
    float _SomeValue;
    sampler2D _RampTex;

    inline float4 LightingBasicDiffuse(SurfaceOutput s,fixed3 lightDir,fixed atten)//(3)
    {
      float difLight = dot(s.Normal,lightDir);//(4)
      float hLambert = difLight*0.5+0.5;//(5)
      float3 ramp = tex2D(_RampTex,float2(hLambert,hLambert)).rgb;//(6)

      float4 col;
      col.rgb = s.Albedo*_LightColor0.rgb*(ramp);
      col.a = s.Alpha;
      return col;
    }

    struct Input {
            float2 uv_MainTex;
        };

    void surf (Input IN,inout SurfaceOutput o)
    {
    float3 i = tex2D(_mainTex,IN.uv_MainTex).rbg;
    float4 c = pow((_EmissiveColor+_AmibientColor),_SomeValue);//(7)
    o.Albedo = c.rgb*i.rbg;
    o.Alpha = c.a;
    }
    ENDCG
  }
  FallBack"Diffuse"
}

(1)在这里引用漫反射贴图,什么是漫反射贴图呢?,就像下面这样,有渐变效果的贴图就是,当然要想有好的效果需要专门的定制才行.
这里写图片描述
然后通过控制uv的坐标索引就能得的相对应的漫反射颜色了,很神奇,需要自己去琢磨.

(2)调用我们自定义的光照模型

(3)是我们自定义的光照模型,这里引用了lightDir和atten(光的方向和距离)参与了计算之中.

(4)基本的lambert漫反射计算,原理在前面点到过了.

(5)half lambert 漫反射计算,其实就是一种加强光照效果的计算,像下面这张图,就是很好的列子
这里写图片描述

(6)对漫反射贴图的坐标索引计算,自己推导一下应该就能得出结果.

(7)对外部光照的一种控制方式,这里也仅仅是参与到光照计算中而已,没有进行特殊的处理,pow是指数的意思,慢慢推导一下,没有问题.

嗯,关于漫反射贴图的东西就先到这里了,回头想想自己一年前的大学生活真是糜烂额,往事不堪回首!!!
下次继续,谢谢.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值