Unity Shaders
推荐!!
Unity技术人员的博客:
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的更多相关文章
- Unity Shaders 第一个默认程序分析
Unity Shaders 第一个默认程序 Shader "Custom/Shader" { Properties { _MainTex ("Base (RGB)&quo ...
- Unity Shaders and Effets Cookbook
Unity Shaders and Effects Cookbook 最近在读 <Unity Shaders and Effects Cookbook> 中文名称:<Unity 着色 ...
- 【Unity Shaders】学习笔记——SurfaceShader(十一)光照模型
[Unity Shaders]学习笔记——SurfaceShader(十一)光照模型 转载请注明出处:http://www.cnblogs.com/-867259206/p/5664792.html ...
- 【Unity Shaders】学习笔记——SurfaceShader(十)镜面反射
[Unity Shaders]学习笔记——SurfaceShader(十)镜面反射 如果你想从零开始学习Unity Shader,那么你可以看看本系列的文章入门,你只需要稍微有点编程的概念就可以. 水 ...
- 【Unity Shaders】学习笔记——SurfaceShader(九)Cubemap
[Unity Shaders]学习笔记——SurfaceShader(九)Cubemap 如果你想从零开始学习Unity Shader,那么你可以看看本系列的文章入门,你只需要稍微有点编程的概念就可以 ...
- 【Unity Shaders】学习笔记——SurfaceShader(八)生成立方图
[Unity Shaders]学习笔记——SurfaceShader(八)生成立方图 转载请注明出处:http://www.cnblogs.com/-867259206/p/5630261.html ...
- 【Unity Shaders】学习笔记——SurfaceShader(七)法线贴图
[Unity Shaders]学习笔记——SurfaceShader(七)法线贴图 转载请注明出处:http://www.cnblogs.com/-867259206/p/5627565.html 写 ...
- 【Unity Shaders】学习笔记——SurfaceShader(六)混合纹理
[Unity Shaders]学习笔记——SurfaceShader(六)混合纹理 转载请注明出处:http://www.cnblogs.com/-867259206/p/5619810.html 写 ...
- 【Unity Shaders】学习笔记——SurfaceShader(五)让纹理动起来
[Unity Shaders]学习笔记——SurfaceShader(五)让纹理动起来 转载请注明出处:http://www.cnblogs.com/-867259206/p/5611222.html ...
- 【Unity Shaders】学习笔记——SurfaceShader(四)用纹理改善漫反射
[Unity Shaders]学习笔记——SurfaceShader(四)用纹理改善漫反射 转载请注明出处:http://www.cnblogs.com/-867259206/p/5603368.ht ...
随机推荐
- Canopy v. 1.5.5 ubuntu安装流程
官网的下载超级慢,还总是断,一断就失败了 我花费了7个小时终于在尝试了5次以后下载成功了,现在将网盘链接分享出来 https://yunpan.cn/cxt28gM26mxQU 访问密码 301d ...
- DDOS攻击原理及防护方法论
从 07年的爱沙尼亚DDOS信息战,到今年广西南宁30个网吧遭受到DDOS勒索,再到新浪网遭受DDOS攻击无法提供对外服务500多分钟. DDOS愈演愈烈,攻击事件明显增多,攻击流量也明显增大,形 ...
- Android 对 properties文件的读写操作
-. 放在res中的properties文件的读取,例如对放在assets目录中的setting.properties的读取:PS:之所以这里只是有读取操作,而没有写的操作,是因为我发现不能对res下 ...
- (转)经典收藏 50个jQuery Mobile开发技巧集萃
(原)http://www.cnblogs.com/chu888chu888/archive/2011/11/10/2244181.html 经典收藏 50个jQuery Mobile开发技巧集萃 ...
- (转)Document对象内容集合
原文:http://webcenter.hit.edu.cn/articles/2009/06-10/06144703.htm document 文挡对象 - JavaScript脚本语言描述 ——— ...
- LeetCode----3 Sum
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...
- C++之创建对象时的new与不new
C++在创建对象的时候可以采用两种方式:(例如类名为Test) Test test 或者 Test* pTest = new Test(). 这两种方法都可以实例化一个对象,但是这两种方法有很大的区 ...
- Swift:函数和闭包
函数 函数是一个完成独立任务的代码块,Swift中的函数不仅可以像C语言中的函数一样有函数的参数和返回值,而且还支持嵌套,并且有函数参数默认值.可变参数等. //定义一个函数,注意参数和返回值,如果没 ...
- iOS:死锁
死锁:指多个进程因竞争共享资源而造成的一种僵局,若无外力作用,这些进程都将永远不能再向前推进. 安全状态与不安全状态:安全状态指系统能按某个进程顺序来为每个进程分配其所需资源,直至最大需求,使每个进程 ...
- # 20145210 《Java程序设计》第05周学习总结
教材学习内容总结 第八章 异常处理 8.1语法与继承架构 •使用 try.catch •Java中所有信息都会被打包为对象,如果愿意,可以尝试(try)捕捉(catch)代表错误的对象后做一些处理 • ...