[Unity Shader] Shader学习笔记2 - 概述2

 

Unity 有三种编写shader的方式:
surface shaders,
vertex and fragment shaders,
fixed function shaders.编程

  • fixed function shader (固定功能着色器):
    对应于固定管线硬件的操做,最简单的着色器类型,只能使用Unity3D自带的固定语法和提供的方法,适用于任何硬件,使用难度最小。
  • vertex and fragment shader (顶点片断程序着色器):
    顶点和片断着色器,如前所述,是可编程图形管线主要支持的方式。是效果最为丰富的着色器类型,使用Cg/HLSL语言规范,着色器由顶点程序和片断程序组成。全部效果都须要本身编写,使用难度相对较大。
  • surface shader (表面着色器):
    Unity推荐的shader类型。一样使用Cg/HLSL语言规范的着色器类型,不过把光照模型提取出来,可使用Unity3D自带的一些光照模型,也能够本身编写光照模型,着色器一样由顶点程序和片断程序组成,不过自己有默认的程序方法,使用者能够只针对本身关系的效果部分进行编写。因为选择性比较大,因此能够编写出较为丰富的效果,使用难度相对vertex and fragment shader小。
    能够理解其是对Vertex 和 Fragment shader的一种包装。
    (surface shader有一个问题,它不支持SubShader内部的多pass,因此某些须要多pass的效果要实现起来会比较困难。)

Unity建议从ShaderLab语法开始学习shader。Fixed function shader 只能被ShaderLab编写。(可是 vertex and fragment shader 和surface shader 是不限于shaderlab的,可使用Cg/HLSL/GLSL)。编辑器

Shaderlab基本结构
Shader "MyShader" { 
  Properties { 
    _MyTexture ("My Texture", 2D) = "white" { } 
    //其余属性
  } 
  SubShader { 
    // - surface shader or
    // - vertex and program shader or
    // - fixed function shader 
  } 
  SubShader { 
    // 一个更简单的shader,能够运行在更弱的硬件上
  }
  Fallback "Legacy Shaders/VertexLit"
  [CustomEditor]
}

首先是一些属性定义,属性名是前面带下划线的,显示在编辑器的名字是后面字符串中的。
接下来是一个或者多个的子着色器,只有一个能被执行,哪个子着色器被使用是由运行的平台所决定的。子着色器是代码的主体,每个子着色器中包含一个或者多个的Pass。
最后指定一个回滚,用来处理全部Subshader都不能运行的状况(好比目标设备实在太老,全部Subshader中都有其不支持的特性)。
CustomEditor是定制编辑器。学习

须要提早说明的是,在实际进行 surface shader 的开发时,咱们将直接在Subshader这个层次上写代码,系统将把咱们的代码编译成若干个合适的Pass。spa

相关文章
相关标签/搜索