Unity3d Shader
Unity3d Shader 预览
Surface Shader
主要用来实现光照相关处理,可能更简洁。
Vertex and Fragment Shader
如果不与光照交互, 则可以用这个shader,更录活
fixed function shaders
固定shader主要用于老旧卡
ShaderLab
不管写哪种shader,最终通过shaderLab实现,其组织结构如下:
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 fragment shader or
// -fixed function shader
}
SubShader{
// here goes a simpler version of the subshader above that can run older graphic cards
}
}
开始以下学习前,先简单了解一下shaderlab指南
======================================================================
ShaderLab 语法: Shader
语法:
Shader "名字" {[Properties] Subshaders [Fallback]}
[]--可选项目
Properties
Shader可以有多个属性(properties),每一个属性都显示在Unity的inspector. 如颜色,贴图,或者任意值
Subshaders & Fallback
每个shader包含多个子shader, 至少包含有一个。当加载shader时, Unity会遍历所有子shader.从上往下选择第一个可以支持的。 如果没有可以支持的, Unity会试着用Fallback shader.
如下就是一个最简单的shader
// colored vertex lighting
Shader "Simple colored lighting" {
// a signle color property
Properties {
_Color ("Main Color", Color) = (1,.5,.5,1)
}
// define one subshader
SubShader{
Pass {
Material{
Diffuse [_Color]
}
Lighting On
}
}
}
subshader中包含了一个通道(Pass), 它开启了顶点光,并设置基本材质。
ShaderLab 语法:Properties
语法:
Properties {Property [Property ...] }
定义 属性块,位于括号中的定义如下:
Float Range
name ("diplay name", Range(min, max)) = number
Color
name ("diplay name", Color) = (number, number, number, number)
Texture 2D
name ("diplay name", 2D) = "name" { options }
Rectangle
name ("diplay name", Rect) = "name" { options }
Cubemap
name ("display name", Cube) = "name" {options}
Float
name ("display name", Float) = number
Vector
name ("display name", Vector) = (number, number, number, number)
例子如下:
Properties {
// properties for water shader
_WaveScale ("Wave scale", Range (0.02,0.15)) = 0.07 // sliders
_ReflDistort ("Reflection distort", Range (0,1.5)) = 0.5
_RefrDistort ("Refraction distort", Range (0,1.5)) = 0.4
_RefrColor ("Refraction color", Color) = (.34, .85, .92, 1) // color
_ReflectionTex ("Environment Reflection", 2D) = "" {} // textures
_RefractionTex ("Environment Refraction", 2D) = "" {}
_Fresnel ("Fresnel (A) ", 2D) = "" {}
_BumpMap ("Bumpmap (RGB) ", 2D) = "" {}
}
贴图选项
贴图属性的选项位花括号中,是可选的,可选项目如下:
1.TexGen 模式,自动贴图坐标生成模式。可以为ObjectLnear, EyeLinear,Shperemap, CubeReflect,CubeNormal之一。这些对应于OpenGL中相应的texgen模式。
ShaderLab 语法:SubShader
语法:
SubShader { [Tags] [CommonState] Passdef [Passdef ...] }
一个SubShader可以定义一组渲染通道,可选设置共同状态针对所有通道,也可以指定标签
当Unity确实使用那个SubShader时,它会用该Subshader每个通道一一给对象进行渲染,每一次渲染是一个比较昂贵的操作。尽可能的少用通道。
例子如下:
// ...
SubShader {
Pass {
Lighting Off
SetTexture [_MainTex] {}
}
}
// ...
ShaderLab 语法:Pass
语法:
Pass {[Name and Tasgs\] [RenderSetup\] [TextureSetup]}
基本通道命名包含一个可能的渲染设置命令。 以及接着一个可选的一组使用贴图
Name and Tags
一个通道可能定义它的名字 和 任意个数标签(key/value队,用于进行通道与引擎间交互)。
Rander Setup
通道设置多个图形硬件状态,如打开alpha混合, 使用雾。等等, 命令如下:
Material
Material { Material Block}
定义一个用在顶点光照管线的材质。 见【Material page】
Lighting
Lighting On | Off
打开|关闭顶点光照. 见【Material page】
Culling
Cull Back | Front | Off
设置多边形拣选模式.见【 Cull and Depth page 】
ZTest
ZTest (Less | Greater | LEqual | GEqual | Equal | NotEqual)
设置深度检测模式.见【 Cull and Depth page 】
ZWrite
ZWrite On | Off
设置深度写模式.见【 Cull and Depth page 】
Fog
Fog {Fog Block}
设置雾参数。见【Fog page 】
AlphaTest
AlphaTest (Less | Greater | LEqual | GEqual | Equal | NotEqual)
打开Alpha测试。见【Alpha Testing page】
Blend
Blend SourceBlendmMode DestBlendMode
设置混合模式。见【 Blending page】
Color
Color Color-value
在顶点光照打开时,选用的顶点颜色.见【Material page】
ColorMask
ColorMask RGB | A | 0 | any combinaion of R,G,B,A
设置颜色写入mask, 0,表示关闭所有颜色通道写入.见【Material page】
Offset
Offset OffsetFacotr, OffsetUnits
设置Z深度缓冲偏移.见【 Cull and Depth page 】
SeperateSpecular
SeperateSpecular On | Off
打开|关闭顶点光照的分隔高光.见【Material page】
ColorMaterail
ColoerMaterial AmbientAndDiffuse | Emission
使用每一个顶点光,当在计算顶点光照时。见【Material page】
Texture Setup
在渲染状态设置后,你可能指定一定数量的贴图和它们的组合模式,通过SetTexture进行应用
ShaderLab 语法:Color,Material,Lighting
材质与光照参数用来控件内建顶点光照。顶点光照是标准的D3D/OPENGL光照模式,它为每个顶点逐一计算。Lighting On 打开顶点光照,光照受到Material block,ColorMaterail,SeperateSpecular命令影响。
像素光照通常用自定义vertex/fragment程序实例,而不是用顶点光照。 下诉命令在像素光照中无效。
Unity3d Shader的更多相关文章
- 【译】Unity3D Shader 新手教程(1/6)
本文为翻译,附上原文链接. 转载请注明出处--polobymulberry-博客园. 刚开始接触Unity3D Shader编程时,你会发现有关shader的文档相当散,这也造成初学者对Unity3D ...
- Unity3D shader简介
Unity3D shader简介 可以肯定的说Unity3D使得很多开发者开发游戏更容易.毫无疑问,shader(着色器)编码,仍有很长的路要走.shader是一个专门运行在GPU的程序,经常被神秘包 ...
- 【浅墨Unity3D Shader编程】之一 夏威夷篇:游戏场景的创建 & 第一个Shader的书写
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...
- 转 猫都能学会的Unity3D Shader入门指南(二)
猫都能学会的Unity3D Shader入门指南(二) 关于本系列 这是Unity3D Shader入门指南系列的第二篇,本系列面向的对象是新接触Shader开发的Unity3D使用者,因为我本身自己 ...
- Unity3D Shader入门指南(二)
关于本系列 这是Unity3D Shader入门指南系列的第二篇,本系列面向的对象是新接触Shader开发的Unity3D使用者,因为我本身自己也是Shader初学者,因此可能会存在错误或者疏漏,如果 ...
- 【浅墨Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法&颜色、光照与材质
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40955607 作者:毛星云(浅墨) ...
- 【淡墨Unity3D Shader计划】四 热带雨林的文章: 排除、深度测试、Alpha测试和基本雾编译
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://hpw123.net/a/C__/kongzhitaichengxu/2014/1222/163.html 作者:毛星云 ...
- 【淡墨Unity3D Shader计划】五 圣诞用品: Unity在Shader三种形式的控制&混合操作编译
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/42060963 作者:毛星云(浅墨) ...
- 猫都能学会的Unity3D Shader入门指南(二)
关于本系列 这是Unity3D Shader入门指南系列的第二篇,本系列面向的对象是新接触Shader开发的Unity3D使用者,因为我本身自己也是Shader初学者,因此可能会存在错误或者疏漏,如果 ...
随机推荐
- SQL Server数据库(高级查询)
高级查询 1.连接查询 有外键关系的两张表,通过关系一次查询两张表 (1)select * from 表名,表名 --- 直接使用出现笛卡尔积,两个表数据一一对应,查询出的结果数目是两个表的行的乘积, ...
- enum使用总结
enum的一般使用方法是它会占用最大的成员长度 然后我忘记的是enum还可以这样使用 enum ExctState { START, SUCCEED, FAILURE=6, REJECT, }; 这样 ...
- Android基础之项目结构分析
创建了第一个Android项目,用工具开发Android项目,我们有必要熟悉项目的目录结构,清楚各个项目下面放置的是什么东西.展开整个项目,其根目录结构(选用不同版本的SDK文件目录结构会有一些不同, ...
- 关于for循环条件性能问题
昨天看一博客写到一条 尽量使用 for(int i=0,ct=list.Count();i<ct;i++){} 这样的格式,因为我平时一般都是用for(int i=0;i<list.Cou ...
- ZZC语言代码风格
程序员之路--关于代码风格 优秀的代码风格如同一身得体的打扮,能够给人以良好的印象.初学程序设计,首先必须建立良好的编程习惯,这其中就包括代码风格.本文就代码风格中的几个重点问题进行了讨论,并在文后给 ...
- xampp搭建服务器环境、html5新的input类型
怎么让别人看见你写的 先把你的文档放入htdocs里面 再输入网址: http://你的IP地址/文件名 就ok了例如我的 HTML5中的input类型: <input>标签规定用户可输入 ...
- [Js]面向对象的选项卡实例
中间过渡环节:把面向过程的程序,改写成面向对象的形式 <html xmlns="http://www.w3.org/1999/xhtml"><head>&l ...
- 二模 (12) day1
第一题: 题目大意: 求由N个1,M个0组成的排列的个数,要求在排列的任意一个前缀中,1的个数不少于0的个数.N,M<=5000. 解题过程: 1.看到N,M的范围就明确肯定不会是dp,因为起码 ...
- 常州培训 day2 解题报告
第一题: 题目大意: 给出一个M面的骰子,投N次,求最大期望值. 最大期望值的定义: 比如M=2,N=2, 那么 2次可以是 1,1,最大值为1: 1,2最大值为2: 2,1最大值为2: 2,2 最大 ...
- HDOJ 1754 I Hate It 线段树 第二题
I Hate It Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就 ...