神临的Unity shader学习之漫反射(一)

写Shader程序有三种方式,一是固定管线(由于过于古老且无法发挥现代显卡的效果几乎被弃用了),二是经典的vertex,fragment算法,三是Unity自带的 surface shader(同时也是我推荐使用的一种方法,简单,易复用).
想学好unity shader 对于固定管线的理解可以说是所有的基础,其次就是基础的编写语言CG/LSGL了,然后依靠时间去慢慢的理解各种应用方案以及光学知识,数学基础等.不过个人感觉需要的数学知识并不难,真正难得是它的各种效果体系的复杂.
好了,我就不多说了,现在开始写我的第一篇复习,关于漫反射可以说是在生活中无处不在的效果了,所以想要有一个好的渲染效果,漫反射是离不开的.先上代码.

Shader"myDiffuse"
{
  Properties//(1)
  { 
  _MainTex("Base(RGB)",2D)="white"{}
  }

  SubShader//(2)
  {
    Tags{"RenderType"="Opaque"}//(3)
    Lod 200//(4)

    CGPROGRAM
    #pragma Surface surf Lambert//(5)

    sampler2D _MainTex;//(6)

    struct Input//(7)
    {
      float2 uv_MainTex//(8)
    };

    void surf(Input IN,inout SurfaceOutput o)//(9)
    {
      half4 c = tex2D(_MainTex,IN.uv_MainTex);//(10)
      o.Albedo = c.rgb;
      o.Alpha = c.a;
    }
    ENDCG
    }
  FallBack"Diffuse"//(11)
}

按照我程序里标好的序号,come on.
(1)这里是属性块,在这里建立程序和外部的连接,可以和轻松的调整渲染属性,如下图(随意找了一张图,懒得再截取了,请原谅神临的懒惰,嘿嘿):
这里写图片描述

(2)一个shader中至少有一个SubShader,其实就是专门针对某个设备进行编程的存在,本人向来只写一个,两个的时候很少,嗯….我承认自己很懒的…

(3)这个是标签,可以定义许多属性,至于有什么,很麻烦的,这里要记许多,感觉自己都没记清楚,至于是什么,可爱的你网上查吧.

(4)这个应该都很熟悉就对了,只不过我感觉这里的LOD和unity的LOD是两个东西,一个是在应用程序阶段进行改变,另一个是在图像编程的时候进行改变,对节省消耗有很大的意义,据说还可以利用这个完成一些奇奇怪怪的效果.

(5)这里是引用内建的Lembert光照模型(漫反射),想看看具体是啥可以去内置CG中去看看,这个是基础一定要看的哦.下面是内建光照模型,这里贴出来,Lighting是人家的格式要求,必须要写的,神临真想说,要是我设计的shader,一定要把这个Lighting去掉,好麻烦的.不过现在还是扎扎实实的学吧,任重而道远!!
这里写图片描述
至于这里的计算其实就是利用了dot函数里 cos 的角度越大值越小的效果计算出来的,具体的可以在网上找找哦.

(6)建立变量,要和属性的命名一致哦,否则没办法引用窗口上的属性.

(7)输入输出结构体,能够将程序中得到的参数传递到着色器上,从而参与计算,里面的参数是有规定的,同样的,记得去看内置CG中的具体内容.

(8)映射贴图的UV坐标,只有这样,在后续才能采样后准确的赋予某个物体贴图颜色.

(9)表面函数,从INPUT中接收到的数据,要经过这里的计算转入光照模型中才能得到效果.

(10)贴图采样计算,这里unity已经帮我们建立好了函数,只要大胆的用tex2D方法就行了,省去了很大写重复代码的时间

(11)这里是一个回调同时也是一个补充,当写的所有shader都不能执行,或者缺少比如阴影之类的东西时,它会起到保护和补充的作用.

好了,就先到这里了,下次再继续,本人要下班了,虽说上班时间写这个被老板发现的后果很严重,但是手痒痒就写了,吾辈中人,应当敢于面对惨淡的人生!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值