关于ShaderLab,从我个人的理解上来看应该是分为三种类型。

  1、Fixed function shader

    固定渲染管线Shader,基于用于高级Shader在老显卡无法显示时的Fallback,使用的是ShaderLab语言,属于真正的ShaderLab语言,和我们平时看到的shader的区别后面细说。

  2、Vertex and Fragment Shader

    可编程渲染管线,这种Shader包含Vertex Shader和Fragment Shader,也就是顶点着色器和片段着色器。顶点着色器会根据你自己的定义自动获取顶点一些相关信息。使用CG/HLSL语法,小伙伴们平时应该都注意到了有时候在Shader中会出现#include "UnityCG.cginc"这类声明,这里面就是Unity给我们做好的一个库,你可以想像成C语言程序中的include,C#程序员可以想象成代码文件开头的Using引用,Android程序员可以将其想象成代码开头的import引用。

  3、Surface Shader

    unity自己最为推崇的Shader类型,使用Unity预制的光照模型来进行光照运算。也是使用CG/HLSL。

  

  Unity的三种Shader对比相同点:

  1、都必须从唯一一个根的Shader开始,也就是本系列资料1中解释的调用函数。

  2、Properties参数部分,作用和语法完全相同,没有任何区别,没有万一。

  3、具体的功能都在SubShader里去实现,如果有多个Subshader,那么机器不会全部执行,而是最多只执行一个,执行方式是从上自下开始运行硬件能够支持的第一个SubShader,这样做的目的主要是为了兼容不同类型的显卡。

  4、都可以贴上标签,也就是Tags块,例如Tags { "RenderType" = "Opaque" }    LOD 200     以及Lighting On等,这些的具体用法咱们后面细说。

  5、结束的时候都可以用Fallback来进行对备胎Shader的使用,备胎的意思也就是如果所有的SubShader都不被硬件支持,就会去使用Fallback所指定的Shader。

  6、都可以处理基本的功能,例如光照反射镜面反射等。但是顶点片段着色器和表面着色器都可以实现固定管线实现不了的高级功能,例如基于UV计算的效果等。

  

  Unity的三种Shader对比不同点:

  1、固定管线和顶点片段着色器的SubShader下面还有pass{}通道,但是表面着色器已经将具体内容打包在光照模型里面了,所以不能加上pass{}通道。

  2、固定管线每句代码之后没有分号,但是V&F着色器Sur着色器的每句代码之后都必须加上分号,这种设计也许更符号码农们的期望吧。

  3、核心结构不同,

  固定管线的核心:

    Material{} 以及 SetTexture[_MainTex]{}

  V&F着色的核心:

    CGPROGRAM    //声明使用CG语言

    #pragma vertex vert  //声明顶点函数vert

    #pragma frament frag  //声明片段函数frag

    #include "UnityCG.cginc"  //导入unity的CG库

    ENDCG

  Surface Shader的核心:

    CGPROGRAM  //声明使用CG语言

    #pragma surface surf Lambert  //声明一个表面着色器函数surf,并使用Unity自己的光照模型和顶点函数

    //Lambert为Unity自带的光照模型函数,我们也可以使用自己写的光照模型函数,并且使用自己写的顶点函数

    //        surface 表面处理函数   光照模型函数      顶点处理:函数
    //#pragma surface  surf         lsyLightModel      vertex:vert
    //执行顺序   顶点处理函数 -> 表面处理函数 -> 光照模型函数 ->颜色值

    ENDCG

    

UnityShader之Shader分类篇【Shader资料2】的更多相关文章

  1. [Unity Shader]Shader分类

    Shader的分类: Shader按管线分类一般分为固定渲染管线与可编程渲染管线 (1)固定渲染管线 ——这是标准的几何&光照(Transforming&Lighting)管线,功能是 ...

  2. 「游戏引擎 浅入浅出」4.1 Unity Shader和OpenGL Shader

    「游戏引擎 浅入浅出」从零编写游戏引擎教程,是一本开源电子书,PDF/随书代码/资源下载: https://github.com/ThisisGame/cpp-game-engine-book 4.1 ...

  3. UnityShader之Shader格式篇【Shader资料1】

    关于Shader,在Unity里面我们一般叫做ShaderLab,只要你的职业是与渲染搭边,Unity就与ShaderLab有着直接的关联,你都应该试着去学会它,其实我们在新手未有入门的时候,我们总是 ...

  4. [Unity Shader]ShaderForge制作Shader

    什么是ShaderForge ShaderForge的目标是推动统一的视觉质量提升到了新的高度, 给你自由的材质创建在一个视觉和直观的方式——不需要代码! ShaderForge的特性 •实时着色器预 ...

  5. GLSL写vertex shader和fragment shader

    0.一般来说vertex shader处理顶点坐标,然后向后传输,经过光栅化之后,传给fragment shader,其负责颜色.纹理.光照等等. 前者处理之后变成裁剪坐标系(三维),光栅化之后一般认 ...

  6. Stage3d 由浅到深理解AGAL的管线vertex shader和fragment shader || 简易教程 学习心得 AGAL 非常非常好的入门文章

    Everyday Stage3D (一) Everyday Stage3D (二) Triangle Everyday Stage3D (三) AGAL的基本概念 Everyday Stage3D ( ...

  7. Game shader or System shader is busy ::VS CSG

    this error means The GPU is freezen Phyre::PSemaphoreOrbis::wait()//callstack something illegal in c ...

  8. 【浅墨Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法&颜色、光照与材质

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40955607 作者:毛星云(浅墨)  ...

  9. 【浅墨Unity3D Shader编程】之一 夏威夷篇:游戏场景的创建 & 第一个Shader的书写

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨)  ...

随机推荐

  1. 封装系统自带的Debug

    Unity3d的Debug.Log函数用于打印日志,一般项目中都会对其作如下两件事情: (1)希望有一个总的开关来控制整个游戏中日志的打印与否: (2)有的系统会将Log封一层并添加统一的标记,比如S ...

  2. 比较HTML元素和Native组件的区别

    我们开发web应用,会使用到各种Html基本元素,比较<div>,<span>,<img>等. 当我们在开发React Native时,我们不能使用HTML元素,但 ...

  3. AutoMapper用法一瞥

    前段时候做个小项目用到了autoMapper(参考了NOP里的用法),感觉还行,用起来挺方便的.首先复杂的东西我就不说了,至于详细的教程我也就不写了,比较园子里有很多这样的文章,我就分享下,在项目中实 ...

  4. django 快速实现登录

    前言 对于web开来说,用户登陆.注册.文件上传等是最基础的功能,针对不同的web框架,相关的文章非常多,但搜索之后发现大多都不具有完整性,对于想学习web开发的新手来说不具有很强的操作性:对于web ...

  5. Eclipse魔法堂:修改主题

    一.前言 习惯黑色主题,而Eclipse默认的白底主题显然不是我的菜,下面一起来修改主题吧! 二.主题资源 Eclipse Color Themes(http://eclipsecolorthemes ...

  6. SQL Server 诊断查询-(1)

    Query #1 is Version Info. SQL and OS Version information for current instance SELECT @@SERVERNAME AS ...

  7. [ASP.NET]谈谈REST与ASP.NET Web API

    13天的假期结束,赶紧回来充电了 本节目录 Web API简介 自我寄宿 IIS寄宿 调用Web API Web API原理 Web API简介 REST REST是“REpresentational ...

  8. 团队项目SCRUM项目6.0 7.0

    6.0----------------------------------------------------- sprint演示 1.坚持所有的sprint都结束于演示. 团队的成果得到认可,会感觉 ...

  9. 1215 spring 3 项目更新

    列志华 (组长) http://www.cnblogs.com/liezhihua/ 团队guihub https://github.com/LWHTF/OrderingFood 黄柏堂 http:/ ...

  10. MIME(Multipurpose Internet Mail Extensions)的简介

    多用途互联网邮件扩展类型(MIME) 作用:用于标识Web资源类型(Multipurpose Internet Mail Extensions,MIME) 效果:Web上MIME为每种类型的资源提供一 ...