开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2203

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

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

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

[lxqiang87] UI上显示模型时残留轮廓问题

[复制链接]  [移动端链接]
排名
3388
昨日变化
21

8

主题

50

帖子

778

积分

Rank: 9Rank: 9Rank: 9

UID
69950
好友
2
蛮牛币
1257
威望
0
注册时间
2015-1-20
在线时间
220 小时
最后登录
2018-5-17

专栏作家

跳转到指定楼层
楼主
发表于 昨天 16:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 lxqiang87 于 2018-5-17 10:43 编辑

在UI上显示模型大致两种方法,一是直接把模型放在UI上渲染,二是另启一个相机(或者commandbuffer)将模型渲染到rendertexture上,然后把rendertexture在UI上当做图片来渲染。

第一种方式由于不利于UI层级管理,大部分项目用的第二种方式。大体方案是指定一个分辨率的rendertexture,赋给渲染模型的camera,相机clearcolor的a设置成0,这样模型存在的像素上a是大于0的。后续混合到UI背景上时使用One OneMinusSrcalpha的blend就能保证保留实体模型,丢弃原背景。


如上图所示,大体上达到要求,但是细心观察能看到模型的周围有一个轮廓边。轮廓边的产生是由于纹理采样的误差导致的。


在填充一个像素的时候,通过uv坐标去采样纹理,但是uv坐标不一定正好指定在一个像素上,还可能(很可能)指定在四个像素之间,这时候硬件会根据周围四个像素插值出这个坐标的颜色。如下图所示,图中的0和1表示纹理的alpha值,我们把它想象成rendertexture中模型实体和背景的边界,红点表示当前要渲染的像素,此时红点的值应该是0到1之间,blend之后是会渲染出背景颜色的,这个漏出的背景颜色就是我们看到的轮廓边。(比如在渲染模型时用的ClearColor是红色,则轮廓边就是红色的)

想要去掉轮廓边,就需要uv坐标正好取在纹理的像素之上,而不是像素之间。要达到这个要求,需要满足两点:1.渲染像素和输入的纹理像素是一一对应的,也就是渲染的quad的分辨率和输入的rendertexture的分辨率必须一致。2.渲染的每个像素要和输入的纹理像素一一对齐,由于分辨率是一致的,所以只要起始像素对齐,也就都对齐了。

分辨率一致的要求比较简单,需要换算一下渲染的UI上的quad的实际分辨率是多少,然后根据这个分辨率去设置rendertexture的分辨率。
像素对齐的要求可以用一个取巧的方法,把纹理采样的方式从Bilinear改为Point,也就是即使没有对齐,但是会找最近的像素,而不是去相邻四个像素去插值。
欢迎来我的github看其他blog:https://github.com/liuxq/blog




回复

使用道具 举报

6蛮牛粉丝
1331/1500
排名
6590
昨日变化
54

0

主题

993

帖子

1331

积分

Rank: 6Rank: 6Rank: 6

UID
267381
好友
2
蛮牛币
2139
威望
0
注册时间
2018-2-1
在线时间
162 小时
最后登录
2018-5-17

迈向小康

沙发
发表于 4 小时前 | 只看该作者
谢谢分享

回复

使用道具 举报

6蛮牛粉丝
1432/1500
排名
3326
昨日变化
23

36

主题

648

帖子

1432

积分

Rank: 6Rank: 6Rank: 6

UID
219600
好友
7
蛮牛币
2091
威望
0
注册时间
2017-4-27
在线时间
362 小时
最后登录
2018-5-17
板凳
发表于 3 小时前 | 只看该作者

回复

使用道具 举报

排名
18068
昨日变化
593

0

主题

32

帖子

90

积分

Rank: 2Rank: 2

UID
279508
好友
0
蛮牛币
155
威望
0
注册时间
2018-5-2
在线时间
26 小时
最后登录
2018-5-17
地板
发表于 3 小时前 | 只看该作者
谢谢分享

回复

使用道具 举报

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

本版积分规则

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