首页 Unity的shader帮助手册(一)

Unity的shader帮助手册(一)

举报
开通vip

Unity的shader帮助手册(一) 此教程将指引你如何建立自己的Shaders,让你的游戏场景看起来更好。Unity配备了强大 的阴影和材料的语言工具称为ShaderLab,以程式语言来看,它类似于CgFX和Direct3D的语法, 它不只纪录基本的端点或者映像点(vertex/pixel)资讯,也描述了材质所必要的一切资讯。 在unity材质检视器中可以看到Shaders的性质及多重shader(SubShaders)的描述,针对不同图 形硬件,每个描述也都完整的说明了图形硬件的彩现状态,fixed function pipeline...

Unity的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产生 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 的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为例,预设值应该由 四个值组成。 现在我们已经定义了四个性质,可以开始撰写实际的shader了 在开始以前,先了解shader的结构是如何定义的。 不同的绘图卡有不同的能力,例如:有的绘图卡支援fragment programs但有些没有,有些可以 一次处理四个贴图?(four textures)其他的可能只能处理两个或一个,为了要符合所有用户的硬体需 求,一个shader可以包涵多个SubShaders,当unity在运算shader时,它将详细察看所有的 subshaders而且使用硬体可支持的第一个。 5 Shader "Structure Example" { Properties { /* ...shader properties... } SubShader { // ...subshader that uses vertex/fragment programs... } SubShader { // ...subshader that uses four textures per pass... } SubShader { // ...subshader that uses two textures per pass... } SubShader { // ...subshader that might look ugly but runs on anything : ) } } Shader "Structure Example" { Properties { /* ...shader properties... } SubShader { // ...subshader that uses vertex/fragment programs... } SubShader { // ...subshader that uses four textures per pass... } SubShader { // ...subshader that uses two textures per pass... } SubShader { // ...subshader that might look ugly but runs on anything : ) 6 } } 此系统提供unity可以支援现有所有的硬体并取得最佳的品质。它作到了,然而,结果是必须撰写 很长的shaders语法 在每一个SubShader block,你可以设定彩现途径的状态;并定义彩现途径本身。完整的 SubShader语法请参照SubShader Reference章节 每个subshader等于是一个途径集。要对几何物件进行彩现,至少一定要有一个途径,内定的 VertexLit shader里面仅有一个途径: view plaincopy to clipboardprint? // ...snip... 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 } } // ...snip... // ...snip... 7 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 } } // ...snip... 通过指令可以定义一个特殊的方法,用来驱动绘图硬体彩现指定的几何物件 例如:上方语法中有一个Material block,定义了照明时所需要几项固定 参数 转速和进给参数表a氧化沟运行参数高温蒸汽处理医疗废物pid参数自整定算法口腔医院集中消毒供应 。而指令Lighting On用来开启该照明设备,而SeperateSpecular On则是启用Seperate作为特殊镜射效果。 到目前为止的所有命令,皆属于支援OpenGL/Direct3D技术硬体本身可使用的固定功能,您可以 参考OpenGL红皮书,可以找到更多相关资料。 下一个命令是SetTexture,这是个非常重要的命令,这个命令可以定义影像纹理如何混合、组合 以及如何运用于我们的彩现环境里,SetTexture通常跟随于纹理的属性名称之后(我们在这里使用 _MainTex ),接下来的combiner block也是定义纹理的应用方式,这个combiner block的命令会 在萤幕显示每一个被执行的动作。 在这个block内我们设定了一个颜色值,并命名为_Color,我们会在后面使用这个颜色 8 在下个命令,我们指定如何混合纹理以及颜色值。我们用Combine命令来混合其他纹理或颜色, 看起来像下面这样: Combine ColorPart, AlphaPart 在这里ColorPart与AlphaPart定义了混合的颜色(RGB)以及alpha值(A)个别的资料,假如 AlphaPart被省略了,那它将与ColorPart的资料作混合 在我们的VertexLit范例中: Combine texture * primary DOUBLE, texture * constant 这里的texture来源是当前的纹理(_MainTex),它将与主要的颜色互相搭配(*),主色为照明设备 的颜色,它是由Material计算出来的结果。最终是这两个倍增后的结果会增加照明强度. aplha值(在逗号以后)是由constantColor倍增而得的结果。另一个常用的混合模式称为previous (在这个shader未使用),这是所有previous SetTexture的结果,并且可以用来混合多种纹理和颜 色。 9
本文档为【Unity的shader帮助手册(一)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_069838
暂无简介~
格式:pdf
大小:226KB
软件:PDF阅读器
页数:9
分类:互联网
上传时间:2011-12-20
浏览量:39