美文网首页
shader 入门

shader 入门

作者: 老急急 | 来源:发表于2017-11-18 17:02 被阅读0次

    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; //该像素的透明度
    

    相关文章

      网友评论

          本文标题:shader 入门

          本文链接:https://www.haomeiwen.com/subject/qgwevxtx.html