游戏蛮牛学习群(纯技术交流,不闲聊):159852603
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2287

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 2293|回复: 22

[枸杞忧天] [初级]认识ClearFlags 与 OnRenderImage

[复制链接]  [移动端链接]
3偶尔光临
199/300
排名
32743
昨日变化
5

8

主题

14

帖子

199

积分

Rank: 3Rank: 3Rank: 3

UID
73054
好友
3
蛮牛币
252
威望
0
注册时间
2015-2-4
在线时间
27 小时
最后登录
2018-8-18

专栏作家

发表于 2018-1-19 10:17:03 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 elsong 于 2018-1-19 10:28 编辑

无论多基础、简单的知识,只要不会,就是难。

这些天在工作中遇到了小的问题,忽然发现很多自以为了解了的东西其实都是一知半解,所以还是多看看基础吧。这次的总结主要与相机上的Clear Flags及OnImageRender函数有关。嗯。

Clear Flags
对于这个选项,我是这么理解的:每一个相机在开始绘制时,都需要对当前RenderBuffer中的颜色缓冲区(ColorBuffer)深度缓冲区(Z-Buffer)进行是否清除的操作,这个选项控制了清除及清除后的内容。

下面将展示一下不同Clear Flags设置下的区别:
clipboard(14).png
(相机绘制一个蓝色的立方体)


Sky box:清除颜色缓冲区和深度缓冲区,并将颜色缓冲区设置为天空盒的颜色。
clipboard(9).png
(立方体以外部分的"ColorBuffer"都被天空盒填满)


Solid Color:清除颜色缓冲区和深度缓冲区,并将颜色缓冲区设置为一个固定的颜色。
clipboard(10).png
(立方体以外部分的"ColorBuffer"都被选定的颜色填满)


上述两种选项是最容易理解的,只是直接清除了缓冲区内的颜色深度数据,因此如果场景中存在多个相机,且最后一个相机被设置为上述两种ClearFlags,那么,呵呵,之前的相机绘制结果将无法直接显示(因为都被清掉了)。

Depth Only:保留颜色缓冲区,仅清除深度缓冲区。
clipboard(3).png
(两部相机先后绘制)



clipboard(8).png
仅清除了深度缓冲区的绘制)


很容易发现,由于拍蓝色立方体的蓝色相机后绘制,且不清除颜色缓冲区,因此蓝色相机在绘制之前,颜色缓冲区已经被红色相机所拍的结果:SolidColor + 红色立方体所填充,因此蓝色立方体只是在这基础之上进行的绘制。
并且,由于清除了深度缓冲区,蓝色立方体无论空间是否被红色立法体遮挡,总会任性的全部绘制,因此产生了错误的遮挡效果。

Don't Clear:毛都不清除。
clipboard.png
(毛都不清除的绘制-保留了深度缓冲区)


同上,颜色缓冲区在保留的同时,也保留了深度缓冲区,这样蓝色相机在绘制时,就会被红色立方体的深度值所影响,因此获得了正确的遮挡效果。

对了,如果只有一个相机,并且这个相机还设置了“DepthOnly”或者“Don'tClear“的选项,也就是不清除颜色缓冲区,那么当你拖动一个物体时,就会产生这种撸多了的效果:
bluemovvvve.gif
(无影脚应该就是这么拍的吧)




OnRenderImage
那么OnRenderImage跟这个相机的ClearFlags有什么关系呢?
其实没有什么太大关系。

这个函数通常是用来做什么的?
重写这个函数是为了达到屏幕后处理特效的目的,比如全屏虚化等。

这个函数如何使用及调用时机?
首先,包含这个函数的脚本必须附着在一个相机上;
其次,一旦重写这个函数,这个函数所发生的时机,就是在这个相机完成与自己有关的全部渲染后,将把这次渲染结果更新给当前RenderBuffer时的那一夜(刻)。
大概的触发时机如下图:
clipboard(17).png

注意,如果你重写了这个函数,必须有一个将缓冲区传递给dest的操作,即调用Graphics.Blit(rt,  dest)。如果没有这个操作,可以想象,经过这个相机后,RenderBuffer中将会是一片漆黑。

但是:一片漆黑仅仅是因为没有把正确的颜色缓冲区设置给当前的RenderBuffer中的ColorBuffer部分,深度缓冲区仍然不受影响

以下将讨论几种情况,希望能把问题说清楚:
测试的环境
clipboard(4).png

clipboard(12).png
1、两个立方体的空间位置关系,红色遮挡了蓝色。
2、蓝色相机只拍蓝色立方体,红色相机只拍红色立方体。3、相机渲染的顺序:红色 → 蓝色。
4、蓝色相机的渲染结果同时填充给屏幕左下角的Image,红色相机的渲染结果同时填充给屏幕左下二号Image。

第一种情况
蓝色相机Depth Only, 红色相机Solid Color = 天蓝色。
clipboard(6).png


分析
clipboard(16).png



第二种情况
蓝色相机Solid Color = 壮汉粉, 红色相机Solid Color = 天空蓝
clipboard(5).png


分析
clipboard(7).png



第三种情况
蓝色相机Solid Color = 壮汉粉,红色相机Depth Only
红色相机第一帧
clipboard(2).png
第一帧后
clipboard(13).png
分析
clipboard(19).png
第四种情况
蓝色相机Don't Clear,红色相机Solid Color + 空OnImageRender函数
clipboard(1).png
红色相机没有做向dst传递颜色缓冲区的动作
clipboard(18).png
红色相机没有生成任何东西
clipboard(11).png
蓝色受到了红色立方体深度值的影响
分析
clipboard(15).png

总结:

只要心心念着颜色缓冲区 和 深度缓冲区,掐指一算就差不多了。






clipboard(6).png

评分

参与人数 1鲜花 +10 收起 理由
wlm001 + 10 赞一个!

查看全部评分


回复

使用道具 举报

7日久生情
3152/5000
排名
2218
昨日变化

0

主题

2101

帖子

3152

积分

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

UID
219676
好友
1
蛮牛币
2429
威望
0
注册时间
2017-7-12
在线时间
467 小时
最后登录
2018-8-20

活力之星

发表于 2018-1-19 15:22:16 | 显示全部楼层
[发帖际遇]: 夜雨微凉 乐于助人,奖励 2 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

7日久生情
1888/5000
排名
2013
昨日变化

0

主题

723

帖子

1888

积分

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

UID
148286
好友
0
蛮牛币
3643
威望
0
注册时间
2016-5-11
在线时间
537 小时
最后登录
2018-8-18
发表于 2018-1-19 16:23:29 | 显示全部楼层
[发帖际遇]: 一个袋子砸在了 tzb1125 头上,tzb1125 赚了 1 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

4四处流浪
440/500
排名
7115
昨日变化

2

主题

161

帖子

440

积分

Rank: 4

UID
17318
好友
0
蛮牛币
0
威望
0
注册时间
2014-3-11
在线时间
131 小时
最后登录
2018-6-13
发表于 2018-1-22 11:28:42 | 显示全部楼层
666不错的文字

回复

使用道具 举报

6蛮牛粉丝
1359/1500
排名
5211
昨日变化
2

6

主题

832

帖子

1359

积分

Rank: 6Rank: 6Rank: 6

UID
236677
好友
0
蛮牛币
2226
威望
0
注册时间
2017-8-9
在线时间
271 小时
最后登录
2018-6-22
发表于 2018-1-22 17:27:32 | 显示全部楼层
感谢分享

回复

使用道具 举报

4四处流浪
399/500
排名
5321
昨日变化
3

0

主题

44

帖子

399

积分

Rank: 4

UID
257079
好友
0
蛮牛币
504
威望
0
注册时间
2017-11-30
在线时间
111 小时
最后登录
2018-8-20
发表于 2018-1-23 08:09:39 | 显示全部楼层
感谢分享,学习了

回复

使用道具 举报

5熟悉之中
957/1000
排名
2998
昨日变化
19

9

主题

151

帖子

957

积分

Rank: 5Rank: 5

UID
252607
好友
3
蛮牛币
2706
威望
0
注册时间
2017-11-5
在线时间
353 小时
最后登录
2018-8-20
发表于 2018-1-23 08:50:10 | 显示全部楼层
感谢分享,学习了

回复

使用道具 举报

3偶尔光临
256/300
排名
10046
昨日变化
1

0

主题

70

帖子

256

积分

Rank: 3Rank: 3Rank: 3

UID
236975
好友
0
蛮牛币
441
威望
0
注册时间
2017-8-11
在线时间
89 小时
最后登录
2018-8-14
发表于 2018-1-23 09:04:24 | 显示全部楼层

回复

使用道具 举报

5熟悉之中
548/1000
排名
7232
昨日变化
2

0

主题

272

帖子

548

积分

Rank: 5Rank: 5

UID
250350
好友
2
蛮牛币
511
威望
0
注册时间
2017-10-23
在线时间
114 小时
最后登录
2018-8-7
发表于 2018-1-23 14:09:51 | 显示全部楼层

感谢分享
[发帖际遇]: 一个袋子砸在了 liuwenjiandm 头上,liuwenjiandm 赚了 1 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

5熟悉之中
681/1000
排名
4538
昨日变化
1

2

主题

126

帖子

681

积分

Rank: 5Rank: 5

UID
209909
好友
0
蛮牛币
681
威望
0
注册时间
2017-3-4
在线时间
260 小时
最后登录
2018-4-2
发表于 2018-1-24 20:13:21 | 显示全部楼层
点大顶顶顶顶顶

回复

使用道具 举报

排名
22677
昨日变化
4

0

主题

27

帖子

77

积分

Rank: 2Rank: 2

UID
214039
好友
0
蛮牛币
88
威望
0
注册时间
2017-3-23
在线时间
34 小时
最后登录
2018-8-14
发表于 2018-1-26 11:03:22 | 显示全部楼层
6666趣味十足的文笔

回复 支持 反对

使用道具 举报

7日久生情
2060/5000
排名
1061
昨日变化

1

主题

614

帖子

2060

积分

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

UID
56496
好友
0
蛮牛币
6097
威望
0
注册时间
2014-11-19
在线时间
465 小时
最后登录
2018-8-20
发表于 2018-1-28 17:57:08 | 显示全部楼层
66666感谢

回复

使用道具 举报

2初来乍到
143/150
排名
20002
昨日变化
5

0

主题

94

帖子

143

积分

Rank: 2Rank: 2

UID
182113
好友
0
蛮牛币
130
威望
0
注册时间
2016-11-8
在线时间
25 小时
最后登录
2018-6-21
发表于 2018-2-2 13:08:12 | 显示全部楼层
6666666666666666666666666666

回复 支持 反对

使用道具 举报

7日久生情
1906/5000
排名
4260
昨日变化

0

主题

1334

帖子

1906

积分

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

UID
267381
好友
5
蛮牛币
3186
威望
0
注册时间
2018-2-1
在线时间
256 小时
最后登录
2018-8-6
发表于 2018-2-6 15:52:40 | 显示全部楼层
[发帖际遇]: 一个袋子砸在了 墨染青天 头上,墨染青天 赚了 1 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

2初来乍到
128/150
排名
15548
昨日变化
1

0

主题

59

帖子

128

积分

Rank: 2Rank: 2

UID
88613
好友
0
蛮牛币
9
威望
0
注册时间
2015-4-2
在线时间
27 小时
最后登录
2018-3-22
QQ
发表于 2018-2-21 21:47:27 | 显示全部楼层
的顶顶顶顶顶的顶顶顶顶顶顶顶顶顶顶

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表