纳金网
标题:
shader基础教程上-着色器:开始 (一)
[打印本页]
作者:
会飞的鱼
时间:
2011-11-22 16:14
标题:
shader基础教程上-着色器:开始 (一)
此教程将指引你如何建立自己的Shaders,让你的游戏场景看起来更好。Unity配备了强大
的阴影和材料的语言工具称为ShaderLab,以程式语言来看,它类似于CgFX和Direct3D的语法,
它不只纪录基本的端点或者映像点(vertex/pixel)资讯,也描述了材质所必要的一切资讯。
在unity材质检视器中可以看到Shaders的性质及多重shader(SubShaders)的描述,针对不同图
形硬件,每个描述也都完整的说明了图形硬件的彩现状态,fixed function pipeline如何设定、
vertex/ fragment programs如何作用。 Vertex and fragment程序可以使用高阶Cg程式语言或
低阶shader组合。
在这个教程中,我们将描述如何使用fixed function与programmable pipelines两种方式于
ShaderLab中撰写shaders,我们假设读者拥有基本的OpenGL或Direct3D彩现概念,并对cg有
fixed function与programmable pipelines的常识,HLSL或GLSL编程语言技术,一些Shader教
程与参考文件可于NVIDIA以及AMD的开发站上取得。
建立一个新的shader有两种方法,可以由菜单Assets->Create->Shader新增,或复制一个既有
的shader再进行编辑,新的shader可以透过双击来启动编辑画面(UniSciTE)
下面开始介绍一个基础的shader范例:
Shader "Tutorial/Basic" {
Properties {
_
Color ("Main Color", Color) = (1,0.5,0.5,1)
}
SubShader {
Pass {
Material {
Diffuse [
_
Color]
}
Lighting On
}
着色器:开始
1
}
}
Shader "Tutorial/Basic" {
Properties {
_
Color ("Main Color", Color) = (1,0.5,0.5,1)
}
SubShader {
Pass {
Material {
Diffuse [
_
Color]
}
Lighting On
}
}
}
这个shader范例只是众多shader中最基本的一个,它定义了一个颜色性质,名称为Main Color,
并指定了玫瑰色的效果(red=100% green=50% blue=50% alpha=100%),在调用时会跳过
Diffuse的材质设定(
_
Color)并开启顶点光源。
要测试这个shader,你可以建立一个新的材质,并于Shader下拉菜单选择(Tutorial->Basic),
再把这个新材质指定到物件上,拖拉材质检视器的颜色表并查看其变化。是时候研究更复杂的事情
了!
假如你开启一个既有的复合shader,刚开始看可能会觉得有点难,在开始以前,我们将详细说明
unity内建的VertexLit shader。这个shader使用fixed function pipeline产生标准的per-vertex
照明。
Shader "VertexLit" {
Properties {
2
_
Color ("Main Color", Color) = (1,1,1,0.5)
_
SpecColor ("Spec Color", Color) = (1,1,1,1)
_
Emission ("Emmisive Color", Color) = (0,0,0,0)
_
Shininess ("Shininess", Range (0.01, 1)) = 0.7
_
MainTex ("Base (RGB)", 2D) = "white" { }
}
SubShader {
Pass {
Material {
Diffuse [
_
Color]
Ambient [
_
Color]
Shininess [
_
Shininess]
Specular [
_
SpecColor]
Emission [
_
Emission]
}
Lighting On
SeperateSpecular On
SetTexture [
_
MainTex] {
constantColor [
_
Color]
Combine texture * primary DOUBLE, texture * constant
}
}
}
}
Shader "VertexLit" {
Properties {
_
Color ("Main Color", Color) = (1,1,1,0.5)
_
SpecColor ("Spec Color", Color) = (1,1,1,1)
3
_
Emission ("Emmisive Color", Color) = (0,0,0,0)
_
Shininess ("Shininess", Range (0.01, 1)) = 0.7
_
MainTex ("Base (RGB)", 2D) = "white" { }
}
SubShader {
Pass {
Material {
Diffuse [
_
Color]
Ambient [
_
Color]
Shininess [
_
Shininess]
Specular [
_
SpecColor]
Emission [
_
Emission]
}
Lighting On
SeperateSpecular On
SetTexture [
_
MainTex] {
constantColor [
_
Color]
Combine texture * primary DOUBLE, texture * constant
}
}
}
}
所有的shaders都必须以Shader作为开始,接着是这个shader的名称(例如:VertexLit),这个名
称将会显示于检视器(Inspector)。所有的语法都必须放在{ }之内。
如果要把shaders放在unity的submenus下面,请使用斜线,例如:MyShaders/Test,你将会
看到有个submenu名为MyShaders,下面有个shader名为Test,或是像这样MyShaders->Test
在Properties block下面接着的是SubShader block,每个描述都在这个段落中
4
Properties
properties位于shader block一开始的位置,你可以定义任何性质,这些性质将可在材质检视器中
编辑,在VertexLit的个范例中,properties block看起来像这样:
properties block内的语法都是单行的,每一个性质描述都由内名称开始(例如:Color,
MainTex),在后方的括弧号中所显示的名字也会显示于inspector检视器上,在此之后,描述的是
该性质的预设值:
可用的性质类型请参考Properties Reference。预设值与性质有关,以color为例,预设值应该由
四个值组成。
作者:
奇
时间:
2012-2-21 23:21
既来之,则看之!
作者:
tc
时间:
2012-4-11 23:33
不错哦,谢谢楼主
作者:
markq
时间:
2012-4-12 22:47
不错 非常经典 实用
作者:
C.R.CAN
时间:
2012-5-4 23:26
好`我顶``顶顶
作者:
菜刀吻电线
时间:
2012-9-6 23:38
水……生命之源……灌……
作者:
C.R.CAN
时间:
2013-1-30 23:32
很有心,部分已收录自用,谢谢
作者:
晃晃
时间:
2013-2-1 23:31
心中有爱,爱咋咋地
作者:
晃晃
时间:
2013-2-21 23:24
凡系斑竹滴话要听;凡系朋友滴帖要顶
作者:
奇
时间:
2013-3-21 23:30
顶!学习了!阅!
作者:
nts
时间:
2013-10-18 18:51
学习了谢谢
欢迎光临 纳金网 (http://wwww.narkii.com/club/)
Powered by Discuz! X2.5