Shader

来源:互联网 发布:软件质量保证计划书 编辑:程序博客网 时间:2024/06/02 09:52

Shader分类

Shader按管线分类一般分为固定渲染管线与可编程渲染管线
1. 固定渲染管线 这是标准的几何&光照(Transforming&Lighting)管线,功能是固定的,它控制着世界,视,投影变换及固定关照和纹理混合.T&L管线可以被渲染状态控制,矩阵,光照和采制参数.功能比较有限,基本所有的显卡都能正常运行.
2. 可编程渲染管线 对渲染管线中的顶点运算和像素运算分别进行编程处理,而无须像固定渲染管线那样套用一些固定函数,取代设置参数来控制管线.

Unity3D三种Shader对比

三种Shader共同点:

  1. 都必须从唯一一个跟Shader开始
  2. Properties参数部分,作用及用法完全相同
  3. 具体功能都在SubShader里(SubShader子shader,Shader会自上而下运行第一个硬件能支持的SubShader,主要作用是对不同硬件的支持.
  4. 都可以打标签,例如Tags{“RenderType”=”Opaque”} LOD 200 以及Lighting On等
  5. 都可以Fallback
  6. 都可以处理基本的功能,例如光照反射(Dissfuse)以及镜面反射(Specular).但是Vertex and Fragment和Surface都能实现Fixed function实现不了的高级功能,例如基于uv计算的效果等等.

三种Shader不同点

  1. Fixed function shader以及Vertex and Fragment Shader在Subshader下面还有Pass{},但是Surface Shader,由于已经将具体内容打包在光照模型了,不能加Pass{},加了会报错.
  2. Fixed function shader每句代码之后没有分号,但是V&F shader以及Surface shader每句代码之后都必须加分号
  3. 核心结构不通
    |Fixed function shader|Vertex and Fragment Shader|Surface Shader|
    |Material{} 以及SetTexutre[MainTex]{}|
    的核心是
CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"ENDCG
Fixed function shader Vertex and Fragment Shader Surface Shader Material{} SetTexutre[MainTex]{} CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" ENDCG 采用unity自带光照模型Lambert,只需要一个表面处理函数surf即可CGPROGRAM #pragma surface surf Lambert ENDCG
0 0