1.1:Get Started with Unity Shaders
文章著作权归作者所有。转载请联系作者,并在文中注明出处,给出原文链接。
本系列原更新于作者的github博客,这里给出链接。
第1章开始正式进入Unity Shader的学习。
什么是Shader
本系列约定,如无特殊说明,文中出现的Shader均基于Unity Shaderlab
每一门编程语言的诞生都是为了方便人们和计算机进行更好地交互。Shader是一门着色器语言,它作用于计算机Rendering(绘制,通常译为渲染)流程的一部分。GPU从CPU获取到顶点信息后,会进入顶点着色器,随后进入片元着色器(在其他shader语言中,着色器名称可能不尽相同),经过一系列变换运算,最终呈现在屏幕上(渲染管线部分可以参考冯乐乐的《Unity Shader入门精要》第二章)。而本系列介绍的Shader是以Unity的shaderlab为基础的,shaderlab除了定制着色器以外,还提供了和Unity交互的途径,自带了Unity的优化,如批处理等。话不多说,直接进入正题。
第一个Shader
我们首先来看下面这个Shader例子:
Shader "MyShader" {
Properties {
_MyTexture ("My Texture", 2D) = "white" { }
// other properties like colors or vectors go here as well
}
SubShader {
// here goes the 'meat' of your
// - surface shader or
// - vertex and program shader or
// - fixed function shader
}
SubShader {
// here goes a simpler version of the SubShader
// above than can run on older graphics cards
}
FallBack "Diffuse"
}
有编程基础的可以看出一点端倪。
首先,整个Shader是包含在一个大括号里,其中“MyShader”是这个Shader在Unity工程中的标签名(注意与文件名区分开),语法是“[SubTagName/]ShaderName”。
接着,可以看到Shader下有两种代码块——Properties以及SubShader。
Properties:用于存放各个Shader的各个属性以及初始值,声明的属性用于暴露shader(着色器)实现过程中相关的参数值(如:材质的整体颜色等),暴露出来的属性参数可供Shader使用者进行调整、和脚本交互,以得到更多样的效果。
SubShader:SubShader是Shader代码的核心部分。由于运行终端的不同,其所能支持的渲染等级也是不同的,所以我们在必要时可以编写多个SubShader,Unity会为我们从上到下寻找并使用终端所能支持的第一个SubShader。在SubShader中,可以设置细节层级,渲染方式等,也可以插入Cg/HLSL代码块,这也是Shader核心中的核心。
最后则是FallBack, 顾名思义,这是我们唯一的退路,这是在上面所有SubShader都失效的情况下所使用的Shader。当然,我们可以通过FallBack Off禁用FallBack功能。
最后
通过上面的例子,我们就揭开了Shader的神秘面纱,在后续的分享中,会进一步讲述Shader中的各个细节。
1.1:Get Started with 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(八)生成立方图
[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 ...
随机推荐
- puppet(5)-master/agent模式
master/agent模式的工作流程 agent每隔固定时长会向master端发送nodename(自己的节点名,节点名至关重要)和 facts ,并且向服务器端请求自己的catalog. mast ...
- linux telnet检测与某个端口是否开通
转自:http://blog.51cto.com/meiling/1982402 一:telnet此法常被用来检测是个远端端口是否通畅. 测试域名: # telnet baidu.com 80 Try ...
- int和Integer有什么区别
Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper cl ...
- iOS - 国内注册境外 Apple id 账号
注册前准备工作 需要手头MAC一台 AppStore下载VPN Plus FQ到美国(ipip.net 查看当前ip 是否是在境外 当前ip 在境外才可以哦) 动手搞起来 https://applei ...
- sklearn中的模型评估-构建评估函数
1.介绍 有三种不同的方法来评估一个模型的预测质量: estimator的score方法:sklearn中的estimator都具有一个score方法,它提供了一个缺省的评估法则来解决问题. Scor ...
- python数据分析及展示(三)
一.Pandas库入门 1. Pandas库的介绍 http://pandas.pydata.org Pandas是Python第三方库,提供高性能易用数据类型和分析工具 import pandas ...
- cc攻击和ddos攻击
DoS攻击.CC攻击的攻击方式和防御方法 DDoS介绍 DDoS是英文Distributed Denial of Service的缩写,意即“分布式拒绝服务”,那么什么又是拒绝服务(Denial of ...
- 在项目目录初始化composer
1.创建一个仓库 2.进入项目目录,然后输入composer init命令开始为该项目初始化composer 3.初始化完成
- 使用stylus
1. 首先确保 node + npm 环境一切正常. 2. 全局安装 stylus: 在命令行中: npm i stylus@latest -g 3. 此时可以创建 .s ...
- 6.2 Pandora 实操 - 数据展示
具体每个图可以到蛋蛋团仪表盘里,查看配置即可.过程中没有截图记下来. 配置方法,建议参考已存在的图表参数,照样配,会比较快. 配置网站访问量 配图结果 参考 报表说明