12 第1页 | 共2 页下一页
返回列表 发新帖
查看: 4537|回复: 13
打印 上一主题 下一主题

[教程] shader基础教程上-着色器:开始 (一)

[复制链接]

5552

主题

2

听众

8万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
11

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2011-11-22 16:14:00 |只看该作者 |倒序浏览






           此教程将指引你如何建立自己的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为例,预设值应该由
           

           四个值组成。
         
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

   

671

主题

1

听众

3247

积分

中级设计师

Rank: 5Rank: 5

纳金币
324742
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2012-2-21 23:21:42 |只看该作者
既来之,则看之!
回复

使用道具 举报

tc    

5089

主题

1

听众

33万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2012-4-11 23:33:27 |只看该作者
不错哦,谢谢楼主
回复

使用道具 举报

markq    

511

主题

1

听众

1万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
15839
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2012-4-12 22:47:21 |只看该作者
不错 非常经典 实用
回复

使用道具 举报

5#
无效楼层,该帖已经被删除

5969

主题

1

听众

39万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

6#
发表于 2012-5-4 23:26:22 |只看该作者
好`我顶``顶顶
回复

使用道具 举报

7#
无效楼层,该帖已经被删除

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

8#
发表于 2012-9-6 23:38:43 |只看该作者
水……生命之源……灌……
回复

使用道具 举报

9#
无效楼层,该帖已经被删除

5969

主题

1

听众

39万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

10#
发表于 2013-1-30 23:32:21 |只看该作者
很有心,部分已收录自用,谢谢
回复

使用道具 举报

12 第1页 | 共2 页下一页
返回列表 发新帖
您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-5-5 06:31 , Processed in 0.098955 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部