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

shader基础教程上-着色器:开始(二)

[复制链接]

5552

主题

2

听众

8万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
11

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

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




           现在我们已经定义了四个性质,可以开始撰写实际的shader了
           

           在开始以前,先了解shader的结构是如何定义的。
           

           不同的绘图卡有不同的能力,例如:有的绘图卡支援fragment programs但有些没有,有些可以
           

           一次处理四个贴图?(four textures)其他的可能只能处理两个或一个,为了要符合所有用户的硬体需
           

           求,一个shader可以包涵多个SubShaders,当unity在运算shader时,它将详细察看所有的
           

           subshaders而且使用硬体可支持的第一个。
           

           5
           

           Shader "S***cture 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***ns on anything : )
           

           }
           

           }
           

           Shader "S***cture 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***ns 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,定义了照明时所需要几项固定参数。而指令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的结果,并且可以用来混合多种纹理和颜
           

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

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

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

沙发
发表于 2012-2-6 23:21:23 |只看该作者
好铁多多发,感激分享
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

板凳
发表于 2012-2-10 23:24:08 |只看该作者
爱咋咋地!
回复

使用道具 举报

tc    

5089

主题

1

听众

33万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

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

地板
发表于 2012-2-16 23:30:04 |只看该作者
人过留名!
回复

使用道具 举报

   

671

主题

1

听众

3247

积分

中级设计师

Rank: 5Rank: 5

纳金币
324742
精华
0

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

5#
发表于 2012-3-13 23:18:32 |只看该作者
呵呵,真得不错哦!!
回复

使用道具 举报

797

主题

1

听众

1万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
5568
精华
0

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

6#
发表于 2012-3-16 19:43:46 |只看该作者

   
回复

使用道具 举报

   

671

主题

1

听众

3247

积分

中级设计师

Rank: 5Rank: 5

纳金币
324742
精华
0

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

7#
发表于 2012-4-2 23:30:20 |只看该作者
不错哦,顶一下......
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

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

8#
发表于 2012-5-17 23:21:36 |只看该作者
凡系斑竹滴话要听;凡系朋友滴帖要顶
回复

使用道具 举报

5969

主题

1

听众

39万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

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

9#
发表于 2012-7-31 23:21:34 |只看该作者
你们都躲开,我来顶
回复

使用道具 举报

tc    

5089

主题

1

听众

33万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

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

10#
发表于 2012-8-28 00:18:50 |只看该作者
不错 非常经典  实用
回复

使用道具 举报

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

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-30 19:00 , Processed in 0.099311 second(s), 29 queries .

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

© 2008-2019 Narkii Inc.

回顶部