码迷,mamicode.com
首页 > 其他好文 > 详细

Shader Overview

时间:2015-06-02 15:09:13      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

Unity有三种形式的Shader:
  (1)Surface Shaders:对光照管线的高层抽象,受光照和影子效果影响的shader,使用Cg/HLSL语言编写;不进行light相关操作的shader别使用Surface Shader,因为它会进行一堆光照计算;Surface Shader会自动转换为Vertex and Fragment Shaders。
  (2)Vertex and Fragment Shaders:最灵活的方式,不处理light相关操作的shader推荐使用该方式,使用Cg/HLSL语言编写。
  (3)Fixed Function Shaders:使用ShaderLab编写,用来给不支持可编程shader的旧设备写渲染。
  无论选择哪种Shader,都需要使用ShaderLab框架来对Shader代码进行组织。

Surface Shader:
  (1)必须放在SubShdader块,不能放在Pass内部;
  (2)#pragma sufrace surfaceFunction lightModel [optionalparams]
  (3)格式
  CG规定了声明为表面着色器的方法(就是我们这里的surf)的参数类型和名字,因此我们没有权利决定surf的输入输出参数的类型,只能按照规定写。这个规定就是第一个参数是一个Input结构,第二个参数是一个inout的SurfaceOutput结构。
  struct SurfaceOutput {
    half3 Albedo; //像素的颜色
    half3 Normal; //像素的法向值
    half3 Emission; //像素的发散颜色
    half Specular; //像素的镜面高光
    half Gloss; //像素的发光强度
    half Alpha; //像素的透明度
  };
  sampler2D就是GLSL中的2D贴图的类型,相应的,还有sampler1D,sampler3d,samplerCube等等格式。而具体地想知道像素与坐标的对应关系,以及获取这些数据,我们总不能一次一次去自己计算内存地址或者偏移,因此可以通过sampler2D来对贴图进 行操作。
  在CG程序中,我们有这样的约定,在一个贴图变量(在我们例子中是_MainTex)之前加上uv两个字母,就代表提取它的uv值(其实就是两个代表贴图上点的二维坐标 )。

Shader Overview

标签:

原文地址:http://www.cnblogs.com/sifenkesi/p/4546374.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!