DeadWind UnityShader学习笔记(一)

20
回复
1399
查看
打印 上一主题 下一主题
[ 复制链接 ]
排名
39862
昨日变化

4

主题

12

帖子

83

积分

Rank: 9Rank: 9Rank: 9

UID
306031
好友
9
蛮牛币
79
威望
0
注册时间
2018-11-26
在线时间
41 小时
最后登录
2019-8-26

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 DeadWind 于 2019-7-24 14:11 编辑

一、什么是Shader?

shader中文名叫着色器,顾名思义就是给物体着色。那给什么物体着色呢?显而易见就是给屏幕上的物品着色。



二、为什么要学习shader?

相信大家都玩过游戏,游戏中的各种技能特效、河上的水波纹、以及游戏场景中仿真的一草一木那全都是由shader渲染而来的。

许多公司美术在需要某个效果的shader时,他们使用工具拖动来完成shader编写以达到他们想要的效果,但是通常这种shader如果不优化的话就会很消耗游戏性能。而我们学会shader后,在优化游戏时就可以对shader进行优化,以及编写美术需要的shader。

最最最重要的是:加薪工具,加薪工具,加薪工具!!!




三、UnityShader种类

通常来说unity分为三种:

1. Surface Shader(表面着色器)

2. Vertex/Fragment Shader(顶点/片元着色器)

3. Fixed Function Shader(固定函数着色器)


四、三种Shader的区别以及相同点区别:

1. Surface Shader(表面着色器)是unity自己创造的一种着色器代码类型。它需要的代码量很少, 但渲染的代价比较大。本质上与顶点/片元着色器是一样的。


2. Vertex/Fragment Shader(顶点/片元着色器)当unity提供一个表面着色器时,它在背后仍然把 它转换成顶点/片元着色器。顶点/片元着色器与表面着色器的不同之处在于前者的代码是写在Pass 语义块内而非CGPROGRAM和ENDCG之间。

3. Fixed Function Shader(固定函数着色器)为固定功能渲染管线的具体表现。通常作用于功能较 简单兼容比较老的机器。޳.2后,所有固定函数着色器都会被unity编译成对应的顶点/片元着 色器,因此真正意义上的固定函数着色器已经不存在了。



相同点:

1. 都必须从唯一一个根Shader开始。

2. Prooerties参数部分,作用以及语法完全相同。

3. 具体功能都在SubShader里。

4. 都可以打标签和Fallback。

5. 表面着色器与顶点/片元着色器中CGPROGRAM和ENDCG之间的代码都是用CG/HLSL编写

6. .......


五、代码示例
1、Surface Shader示例代码

[C#] 纯文本查看 复制代码
Shader "Example/Surface Shader" {
        SubShader {
          Tags { "RenderType" = "Opaque" }
          CGPROGRAM
          #pragma surface surf Lambert
          
          struct Input {
              float4 color : COLOR;
          };
          void surf (Input IN, inout SurfaceOutput o) {
              o.Albedo = 1; 
          }
          ENDCG
        }
        Fallback "Diffuse"
}



2、Vertex/Fragment Shader示例代码
[C#] 纯文本查看 复制代码
Shader "Example/Vertex Fragment Shader"
{
    SubShader{
        Pass{
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            float4 vert(float4 v : POSITION) :SV_POSITION{
                return mul(UNITY_MATRIX_MVP,v);
            }
            float4 frag() : SV_TARGET{
                return fixed4(1.0,0.0,0.0,1.0);
            }
            ENDCG
        }
    }
}


3、Fixed Function Shader示例代码
[C#] 纯文本查看 复制代码
Shader "Example/Fixed Function Shader"{
    Properties
    {
        _MainColor("Main Color", Color) = (1,1,1,1)
    }
    SubShader
    {
         Pass
            {
                Color[_MainColor]
            }
        }
        Fallback "Diffuse"
}




参与人数 1鲜花 +2 收起 理由
dog!egg + 2 赞一个!

查看全部评分总评分 : 鲜花 +2

3偶尔光临
247/300
排名
8487
昨日变化

2

主题

34

帖子

247

积分

Rank: 3Rank: 3Rank: 3

UID
301048
好友
1
蛮牛币
9914
威望
0
注册时间
2018-10-23
在线时间
70 小时
最后登录
2019-8-9
沙发
2019-7-24 14:33:04 只看该作者
路过~~楼主加油
3偶尔光临
209/300
排名
9304
昨日变化

0

主题

27

帖子

209

积分

Rank: 3Rank: 3Rank: 3

UID
132312
好友
0
蛮牛币
295
威望
0
注册时间
2015-12-22
在线时间
58 小时
最后登录
2019-8-2
板凳
2019-7-24 15:05:47 只看该作者
nfzzdgnetnetnetnet
5熟悉之中
596/1000
排名
5143
昨日变化

4

主题

98

帖子

596

积分

Rank: 5Rank: 5

UID
130665
好友
5
蛮牛币
74
威望
0
注册时间
2015-12-3
在线时间
214 小时
最后登录
2019-8-26
地板
2019-7-24 20:01:48 只看该作者
为什么不能收藏?
4四处流浪
309/500
排名
7737
昨日变化

0

主题

55

帖子

309

积分

Rank: 4

UID
178647
好友
0
蛮牛币
255
威望
0
注册时间
2016-10-28
在线时间
92 小时
最后登录
2019-8-14
QQ
5#
2019-7-24 20:34:58 只看该作者
shader真的会把人磨练的不像人很痛苦的,大家一起加油
5熟悉之中
676/1000
排名
5900
昨日变化

0

主题

322

帖子

676

积分

Rank: 5Rank: 5

UID
11484
好友
0
蛮牛币
41
威望
0
注册时间
2013-12-31
在线时间
118 小时
最后登录
2019-8-26
6#
2019-7-25 08:53:17 只看该作者
謝謝樓主分享
7日久生情
2210/5000
排名
971
昨日变化

19

主题

233

帖子

2210

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
172976
好友
5
蛮牛币
1174
威望
0
注册时间
2016-9-30
在线时间
870 小时
最后登录
2019-8-7
7#
2019-7-25 10:13:50 只看该作者
好东西,顶一个
2初来乍到
102/150
排名
17816
昨日变化

1

主题

10

帖子

102

积分

Rank: 2Rank: 2

UID
258652
好友
0
蛮牛币
330
威望
0
注册时间
2017-12-8
在线时间
55 小时
最后登录
2019-8-23
QQ
8#
2019-7-25 11:25:49 只看该作者
很棒,很精辟。。。
7日久生情
2309/5000
排名
2612
昨日变化

2

主题

1135

帖子

2309

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
209046
好友
0
蛮牛币
3282
威望
0
注册时间
2017-3-30
在线时间
618 小时
最后登录
2019-8-26
9#
2019-7-25 11:36:25 只看该作者
Shader 从入门到放弃。。
7日久生情
2615/5000
排名
474
昨日变化

6

主题

182

帖子

2615

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
84820
好友
17
蛮牛币
2720
威望
0
注册时间
2015-3-26
在线时间
875 小时
最后登录
2019-8-15
10#
2019-7-25 14:07:19 只看该作者
应该有专门写shader的吧,反正我从来就没用上
排名
23064
昨日变化

0

主题

10

帖子

62

积分

Rank: 2Rank: 2

UID
298571
好友
1
蛮牛币
93
威望
0
注册时间
2018-9-29
在线时间
32 小时
最后登录
2019-8-26
11#
2019-7-25 15:45:11 只看该作者
谢谢死风作家分享
排名
39862
昨日变化

4

主题

12

帖子

83

积分

Rank: 9Rank: 9Rank: 9

UID
306031
好友
9
蛮牛币
79
威望
0
注册时间
2018-11-26
在线时间
41 小时
最后登录
2019-8-26
12#
楼主 2019-7-25 16:05:41 只看该作者
killerLi 发表于 2019-7-25 15:45
谢谢死风作家分享

是“逆风”

0

主题

43

帖子

65

积分

Rank: 2Rank: 2

UID
327286
好友
0
蛮牛币
38
威望
0
注册时间
2019-7-16
在线时间
22 小时
最后登录
2019-8-21
13#
2019-7-25 17:27:07 只看该作者
感谢分享~
4四处流浪
410/500
排名
14230
昨日变化

0

主题

200

帖子

410

积分

Rank: 4

UID
209003
好友
0
蛮牛币
397
威望
0
注册时间
2017-2-28
在线时间
152 小时
最后登录
2019-8-26
14#
2019-7-26 09:42:36 只看该作者
66666666666
5熟悉之中
881/1000
排名
48136
昨日变化

0

主题

634

帖子

881

积分

Rank: 5Rank: 5

UID
9367
好友
0
蛮牛币
14
威望
0
注册时间
2013-12-2
在线时间
243 小时
最后登录
2019-8-26
15#
2019-7-26 10:19:07 只看该作者
希望写通俗易懂的系列教程出来!!!!!!!!
您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则