推荐!!

Unity技术人员的博客:

http://aras-p.info/blog/

Unity 中的 Shader 按照使用方式来分的话,分为3种:

  • Surface Shader

受光照影响 Cg/HLSL。如果不受光照  不要使用这种类型。最后这种shader也会自动转化成 vertex/fragment。

这种 Shader 的存在是由于编写跟光照交互的代码不太好写,Unity专门用这种方式来简化光照Shader的编写。会自动生成代码。

关于 Surface Shader 推荐阅读:

http://www.cnblogs.com/flappy/archive/2012/08/10/2631348.html

http://aras-p.info/blog/2010/07/16/surface-shaders-one-year-later/

  • Vertex/Fragment

如果不需要受光照的话 就使用这种类型。这种方式最灵活。灵活也就意味着比较麻烦。 Cg/HLSL。

使用方法:直接在 Pass 中插入 Cg 代码。CGPROGRAM...ENDCG

  • Fixed Function

老显卡。固定渲染管线。如果你编写过 Direct3D 或者 OpenGL 的固定管线的程序,会发现很像。

ShaderLab 是什么东西

Unity自定义的一套shader语法。类似与 CgFX 以及 Direct3D 的 FX 文件,描述了材质。

不管你选择使用哪一种 Shader (就是上面列出的3种),你都是用 ShaderLab 的语法来写的。

shader定义属性,可以在Inspector中显示。

SubShader

表示适用于某个显卡的 shader。可以写多个,以匹配多种显卡。编写的顺序是 高端->中端->低端。Unity会自动选择第一个可以用的 SubShader。

Pass

在一个 SubShader中 可以包含多个 Pass,这些 Pass 会从上到下一个一个执行下去。

Fallback

如果你的SHADER中任何一个SubShader都不被当前机器支持。那么你可以使用这个命令让他使用另一个Shader里面的 SubShader。就好像把他的内容拷贝进来了似的。

引用其他文件的Pass

如果你的 Pass 别人已经写了跟你一模一样的。可以使用 UsePass 命令去引用另一个文件中的 Pass。

如何判断是使用固定管线还是编程管线

如果在 Pass  使用了 vertex或者fragment。固定管线中的相应功能就会被关闭。vertex->3d变换(x).光照(x).纹理坐标自动生成(x)  fragment->SetTexture(x)

Shader文件的基本组成

// 定义 Shader 的名字
Shader "Custom/BasicDiffuse" {
// 1个 Property 部分
Properties {
} // 若干个 SubShader(至少1个)
SubShader {
// 每个 SubShader 中包含若干个 Pass(至少1个)
Pass {
}
} SubShader {
}
}

Surface Shader的编写

这几篇文档需要一起看:

http://docs.unity3d.com/Manual/SL-SurfaceShaders.html

http://docs.unity3d.com/Manual/SL-SurfaceShaderExamples.html

http://docs.unity3d.com/Manual/SL-SurfaceShaderLightingExamples.html

1. vertex/fragment的 CGPROGRAM...ENDCG 是在 Pass 段中的  而 Surface 是在 SubShader 中的。

2. 使用 #pragma surface ... 来标识这是一个 Surface Shader

Unity Shaders的更多相关文章

  1. Unity Shaders 第一个默认程序分析

    Unity Shaders 第一个默认程序 Shader "Custom/Shader" { Properties { _MainTex ("Base (RGB)&quo ...

  2. Unity Shaders and Effets Cookbook

    Unity Shaders and Effects Cookbook 最近在读 <Unity Shaders and Effects Cookbook> 中文名称:<Unity 着色 ...

  3. 【Unity Shaders】学习笔记——SurfaceShader(十一)光照模型

    [Unity Shaders]学习笔记——SurfaceShader(十一)光照模型 转载请注明出处:http://www.cnblogs.com/-867259206/p/5664792.html ...

  4. 【Unity Shaders】学习笔记——SurfaceShader(十)镜面反射

    [Unity Shaders]学习笔记——SurfaceShader(十)镜面反射 如果你想从零开始学习Unity Shader,那么你可以看看本系列的文章入门,你只需要稍微有点编程的概念就可以. 水 ...

  5. 【Unity Shaders】学习笔记——SurfaceShader(九)Cubemap

    [Unity Shaders]学习笔记——SurfaceShader(九)Cubemap 如果你想从零开始学习Unity Shader,那么你可以看看本系列的文章入门,你只需要稍微有点编程的概念就可以 ...

  6. 【Unity Shaders】学习笔记——SurfaceShader(八)生成立方图

    [Unity Shaders]学习笔记——SurfaceShader(八)生成立方图 转载请注明出处:http://www.cnblogs.com/-867259206/p/5630261.html ...

  7. 【Unity Shaders】学习笔记——SurfaceShader(七)法线贴图

    [Unity Shaders]学习笔记——SurfaceShader(七)法线贴图 转载请注明出处:http://www.cnblogs.com/-867259206/p/5627565.html 写 ...

  8. 【Unity Shaders】学习笔记——SurfaceShader(六)混合纹理

    [Unity Shaders]学习笔记——SurfaceShader(六)混合纹理 转载请注明出处:http://www.cnblogs.com/-867259206/p/5619810.html 写 ...

  9. 【Unity Shaders】学习笔记——SurfaceShader(五)让纹理动起来

    [Unity Shaders]学习笔记——SurfaceShader(五)让纹理动起来 转载请注明出处:http://www.cnblogs.com/-867259206/p/5611222.html ...

  10. 【Unity Shaders】学习笔记——SurfaceShader(四)用纹理改善漫反射

    [Unity Shaders]学习笔记——SurfaceShader(四)用纹理改善漫反射 转载请注明出处:http://www.cnblogs.com/-867259206/p/5603368.ht ...

随机推荐

  1. 2013年8月份第4周51Aspx源码发布详情

    迷你桌面闹钟源码  2013-8-27 [VS2010]功能介绍:实现了定时闹钟的功能,可以设置闹钟最前端显示.感兴趣的可以下载学习. BR个人博客系统(课程设计)源码  2013-8-27 [VS2 ...

  2. Chapter 3: Connector(连接器)

    一.概述 Tomcat或者称之为Catalina(开发名称),可以简化为两个主要的模块,如下图: 多个Connector关联一个Container.之所以需要多个Connector,是为了处理多种协议 ...

  3. SQL实现字段内容查找和替换

  4. Python入门(一,Ubuntu环境搭建)

    一,Python下载 下载地址:http://www.python.org/download/ 二,安装 在Ubuntu平台上安装Python步骤: 1.解压缩下载的源码压缩包 2.在解压缩的目录下执 ...

  5. iOS-appDelegate 生命周期

    - (void)applicationWillResignActive:(UIApplication *)application 说明:当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事 ...

  6. iOS-申请开发证书流程

    1.开发者证书(分为开发和发布两种,类型为ios Development,ios Distribution),这个是最基础的,不论是真机调试,还是上传到appstore都是需要的,是一个基证书,用来证 ...

  7. matlab 相同函数名解决

    http://jingyan.baidu.com/article/1612d500a23a8ce20e1eee07.html

  8. VundleVim的安装与使用

    git:https://github.com/VundleVim/Vundle.vim vundle是一款vim编辑器的插件管理软,用起来很方便的原因有几点: 1)只要知道插件名称,就能搜索到并下载安 ...

  9. 什么是JavaScript闭包终极全解之一——基础概念

    本文转自:http://www.cnblogs.com/richaaaard/p/4755021.html 什么是JavaScript闭包终极全解之一——基础概念 “闭包是JavaScript的一大谜 ...

  10. linux监控nmon和analyser的使用

    测试压力的时候使用linux一个简单的监控工具nmon,不仅可以实时监测,也可以生成文件以图标样式展现,小巧实用 安装nmon nmon实际上是个tarball直接解压到所要放置的目录,然后直接运行就 ...