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初学者,因此可能会存在错误或者疏漏,如果 ...
随机推荐
- 【堆栈应用一】一个数divided=几个最小质因数的乘积
/******************************************堆栈:一个数divided几个质因数(质因数的乘积为N)***************************** ...
- WPF RichTextBox读取存储文本的方法和常用属性
1. 取得已被选中的内容: (1)使用 RichTextBox.Document.Selection属性(2)访问RichTextBox.Document.Blocks属性的“blocks”中的Tex ...
- 两段超简单jquery代码解决iframe自适应高度问题(不用判断浏览器高度)
这里介绍两个超级简单的方法,不用写什么判断浏览器高度.宽度啥的.下面的两种方法自选其一就行了.一个是放在和iframe同页面的,一个是放在test.html页面的.注意别放错了地方.iframe的代码 ...
- jQuery的bind()与live()
前言 最近一个项目的前端有这样的一个需求:页面中有某按钮,点击按钮之后通过服务器的返回信息更改这个按钮的点击事件执行函数. 方案1 之前小猪使用的方法是给按钮增加class.在jquery中通过cla ...
- Mongodb Management Studio
1.服务器管理功能添加服务器,删除服务器 2.服务器,数据库,表,列,索引,树形显示和状态信息查看 3.查询分析器功能.支持select,insert,Delete,update支持自定义分页函数 $ ...
- 警卫安排(dp好题)
警卫安排(guard)[题目描述]一个重要的基地被分为 n 个连通的区域.出于某种神秘的原因,这些区域以一个区域为核心,呈一颗树形分布.在每个区域安排警卫所需要的费用是不同的,而每个区域的警卫都可以望 ...
- dos.orm学习地址
os.ORM(原Hxj.Data)于2009年发布.2015年正式开源,该组件已在数百个成熟项目中应用,是目前国内.Net用户量最多.最活跃.最完善的国产ORM.初期开发过程参考了NBear与MySo ...
- Ubuntu14.10+cuda7.0+caffe配置
转自:http://blog.csdn.net/lu597203933/article/details/46742199 Ubuntu14.10+cuda7.0+caffe配置 一:linux安装 L ...
- 数据结构-bubble sort
#gcc version 4.5.3 (GCC) #include <iostream> #include <algorithm> template <typename ...
- 赋值运算符、拷贝初始化和this指针
一.赋值运算符和拷贝构造函数(重载技术) 赋值运算符和拷贝构造函数有编译器默认提供,但如果想做更复杂的事,需要重载. 1.下面用一个简单的例子先区分一下赋值运算符和拷贝构造函数: #include&l ...