shader 入门

unity3D Shader 有以下几种

  • 表面着色器(surface shader) ----对象的的表面的处理 适合绝大多数需要shader
  • 片段着色器(fragment shader) ---- 可以让你做更多的效果,但是此shader更难写。你也可以用它做一些底层的工作,比如顶点光照(Vertex lighting,即在每个顶点存储该点的光照信息)。顶点光照对于移动设备很有用 该shader对于一些需要多通道(multiple passes)的高级渲染效果也很有效。
  • 属性值(property)定义的形式:

Properties {
_Name(“Displayed Name”,type) = default value[{options}]
}

_name 属性名称

shader 内部使用的

type 属性值的类型
  • Color - 代表纯色, 使用了RGBA表示法
  • 2D - 代表尺寸为2的幂次的纹理(如 2,4,8,16 ....);
  • Rect - 代表纹理(texture),此处处理的不一定是2的幂次
  • Cube - 用于3d中的cube map ,天空盒
  • Range - 在最大或最小的值,在界面中有一个滑动条
  • Float - 任意浮点型
  • Vector - 4维向量值, 本质就是4个浮点数组成的类型。(x,y,z,w)
bump (说明此纹理是一个凹凸纹理)
  • { options }
    这里注意了,{options} 仅仅用于纹理类型,比如上面提到的2D,Rect,Cube,对于这些类型,如果没有options可填,至少要写一个空的{},否则编译出错。可以使用空格将多个options(选项)分开 ,可用的options(选项)如下:
Tags
  • Tags {“RenderType” = “Opaque”}
    这意味着当程序去渲染不透明的几何体

  • Tags {“RenderType” = “Transparent”}
    意味着我们的shader只会输出半透明或透明的像素

  • Tags {“IgnoreProjector”=“True”}
    意味着你渲染的物体不会受到projectors(投影仪)的影响

  • Tags {“Queue”=“xxxx”}
    当渲染的对象类型是透明物体时,Queue标签能产生一些非常有趣的效果

    • Background 在所有其他物体渲染之前渲染,被用于天空盒或类似的背景效果
    • Geometry(默认tags为geometry) – 适用于大多数物体。非透明物体使用这种渲染顺序。
    • AlphaTest – 进行alpha测试的像素(alpha-test是指当前像素的alpha小于一定的值就舍弃该像素)应该使用该渲染顺序。单独设置该渲染顺序是因为当在渲染完所有实体过后,渲染alpha测试的物体将更有效率。
    • Transparent – 该渲染标签所属的物体将在标签为Geometry和AlphaTest之后的物体渲染,并且这些贴着Transparent的所有物体本身是从后往前依次渲染的。任何经过alpha-blended的物体都应该使用该标签(译者注:alpha-blended是指使用当前像素的alpha作为混合因子,来混合之前写入到缓存中像素值,注意此时shader是不能写入深度缓存的,因为关闭了写入深度缓存的功能,如果不关闭写入深度缓存,那么在进行深度检测的时候,它背后的物体本来我们是可以透过它被我们看到的,但由于深度检测时,小于它的深度就被剔除了,从而我们就看不到它后面的物体了),玻璃和粒子效果比较适合该渲染标签。
    • Overlay – 该渲染标签适合覆盖效果,任何最后渲染的效果都可以使用该标签,比如透镜光晕
    • 有趣的是你可以给这些基本的渲染标签进行加加减减。这些预定义的值本质上是一组定义整数,Background = 1000, Geometry = 2000, AlphaTest = 2450, Transparent = 3000,最后Overlay = 4000。
  • SurfaceOutput

struct SurfaceOutput {

   half3 Albedo; //该像素的颜色值

   half3 Normal; //该像素的法向量

   half3 Emission; //该像素的辐射光,辐射光是最简单的一种光,它直接从物体发出并且不受任何光源影响

   half Specular; //该像素的镜面高光

   half Gloss; //该像素的发光强度

   half Alpha; //该像素的透明度

推荐阅读更多精彩内容