图片边缘出现黑点的问题分析和解决(纹理过滤)
图片边缘出现黑点的问题分析和解决(纹理过滤)
最近在项目中遇到UI图片非透明区域边缘出现黑色杂点的问题,经过分析和纹理过滤有关,并提出解决方案,需要美术制图时特别注意。本文是此问题的分析与解决方案。
问题
- 我的项目使用的FairyGUI,然而此问题与UI框架无关。
上图为出现问题的图片,一个绿色的环形图片,周围为透明。
通过修改渲染所用shader,并在片源着色中修改out颜色的alpha = 1,可以获得排除透明通道的颜色图。
对比两张图片可以看到,有一些#00000000的色块在和绿色部分相交的地方产生这些黑块。
那么可以想见就是这些相交的区域产生了这些黑色杂点。为什么会产生这些杂点呢?下面将会分析
纹理过滤(texture filter)
我们的纹理是要贴到三维图形表面的,而三维图形上的pixel中心和纹理上的texel中心并不一至(pixel不一定对应texture上的采样中心texel),大小也不一定一至。当纹理大于三维图形表面时,导至一个像素被映射到许多纹理像素上;当维理小于三维图形表面时,许多个像素都映射到同一纹理。
纹理过滤一般常见的有四种:
1. Nearest Point Sampling(最近点采样)
最近点采样取最接近的图片上的像素点进行采样。
2. Bilinear(双线性过滤)
双线性过滤以pixel对应的纹理坐标为中心,采该纹理坐标周围4个texel的像素,再取平均,以平均值作为采样值。
3. Trilinear(三线性过滤)
三线性过滤以双线性过滤为基础。会对pixel大小与图片像素大小最接近的两层Mipmap level分别进行双线性过滤,然后再对两层得到的结果进行线性插值。
4. Anisotropic Filtering(各向异性过滤)
各向同性的过滤在采样的时候,是对正方形区域里行采样。各向异性过滤把纹理与屏幕空间的角度这个因素考虑时去。简单地说,它会考滤一个pixel(x:y=1:1)对应到纹理空间中在u和v方向上u和v的比例关系,当u:v不是1:1时,将会按比例在各方向上采样不同数量的点来计算最终的结果(这时采样就有可能是长方形区域)。
问题分析
通过了解纹理过滤的定义,我们可以很清楚的意识到,几种过滤方式中后三种都使用了插值运算。也就是说插值出的像素点都会是一个新的颜色。只要使用过插值运算,就有可能会产生图片上本来不存在的颜色。
如过存在插值,那么下面2*2的图片被渲染为2倍大小的话就会出现类似这种情况(实际上并不是完全相同,具体结果间上面不通纹理过滤的算法)
a | b |
---|---|
白色不透明 | 红色透明 |
白色不透明 | 红色透明 |
==变为===>>>>>>
a | b | c | d |
---|---|---|---|
白色不透明 | 粉色半透明 | 粉色半透明 | 红色透明 |
白色不透明 | 粉色半透明 | 粉色半透明 | 红色透明 |
白色不透明 | 粉色半透明 | 粉色半透明 | 红色透明 |
白色不透明 | 粉色半透明 | 粉色半透明 | 红色透明 |
其中粉色半透明就是新产生的颜色。
也就是说黑色透明色 #00000000 和绿色不透明色#00ff00ff之间在插值过程中产生了灰色半透明,就是这些边缘的杂点。
问题确认
看一下图片的导入设置中,Filter Mode中的选项,选择了Bilinear 即在纹理过滤是使用的模式是 双线性过滤 ,使用了插值。
改成Point ,即使用 最近点采样 。再看效果
黑点消失了,但是边缘变得不整齐了。这也是最近点采样的缺点。
问题解决
很简单,美术作图的时候尽量避免使用橡皮擦。保证一个透明过度关系应该为:
绿色不透明 -> 绿色半透明 -> 绿色透明 -> 黑色透明
这样插值就不会插出灰色半透明之类的情况。
图片边缘出现黑点的问题分析和解决(纹理过滤)相关推荐
- vue项目图片插入不清晰,原因分析及解决办法
问题: vue项目图片插入不清晰,原因分析及解决办法 原因分析: 引起图片不清晰的原因可能有以下三个:被压缩.被放大.受到父盒子的影响. 解决办法: 方法一: 1.从属性 fit="none ...
- 全球与中国边缘人工智能平台市场深度研究分析报告
2021年全球边缘人工智能平台市场销售额达到了 亿美元,预计2028年将达到 亿美元,年复合增长率(CAGR)为 %(2022-2028).地区层面来看,中国市场在过去几年变化较快,2021年市场规模 ...
- word图片靠右_如何设置word图片边缘透明
我们在用WORD写文档的时候也通常会想法设法把文档做的漂漂亮亮的,比如说好好的排个版面,插入个图片什么的,可是插入的图片边缘颜色太明显,该怎么办呢?下面学习啦给大家分享word设置图片边缘透明的技巧, ...
- php 图片处理羽化,PS羽化图片边缘方法
为了让处理的图片更美观,我们抠图之后都会进行边缘的羽化,这样能让图片更好的嵌入另一张图片.那么用PS如何羽化图片边缘?下面小编就为大家详细介绍一下,来看看吧! 步骤 1.打开PS 2.打开准备好的图片 ...
- html图片边缘阴影效果,CSS3实现图片照片边缘模糊效果
某些时候你可能需要让图片四周带有边缘模糊效果,那么除了PS之外有没有简单的代码实现方法呢?今天我们就使用CSS3的新特性实现图片边缘的模糊效果,首先你需要在图片标签外部套一层DIV标签,其次再为外层D ...
- 网络时空大数据爬取与分析DAS系统(街景图片采集与绿视率分析)
手把手教 | 网络时空大数据爬取与分析DAS系统(街景图片采集与绿视率分析) 原创 DAS Team 双评价DAS 7月2日 地理计算语言,为大众赋能地理智慧. --DAS Team 爬取分析DAS系 ...
- SDL2源代码分析4:纹理(SDL_Texture)
===================================================== SDL源代码分析系列文章列表: SDL2源代码分析1:初始化(SDL_Init()) SDL ...
- 浏览器打开服务器上的图片无法显示,网页中的图片打不开怎么办?原因与解决办法...
最近有网友问小编这样一个很泛的问题:网页中的图片打不开怎么办?对于这个问题,其实导致的原因有很多,但也很好排除原因,主要从网络,网页,平台等当面综合去分析,就很容易可以找到答案.以下是小编对网页中的图 ...
- onload js函数不执行的原因分析及解决方法
今天打开网站的时候,发现很多页面的信息都没有显示出来,仔细观察了之后,发现都是onload的js函数没有执行的原因.其实之前曾发现过这个情况,我以为是网站出了问题,然后采用多种方法试图让onload的 ...
- Ajax页面缓存问题分析与解决办法
Ajax页面缓存是ajax处理数据时对一些重复相同数据进行一个缓存操作,这样从另一个层面对于我们来讲是非常的不错了,但有时我们并不希望它缓存要如何处理呢?下面我们一起来看看关于页面缓存问题分析与解决, ...
最新文章
- 每日一淘完成1.3亿美元融资,元生资本、DCM领投,SIG联合投资
- 去重仅保留一条_清水出芙蓉,天然去雕饰,牛仔背带裤配针织上衣的清纯温柔穿搭...
- 2-2 LU crout 分解
- linux sdk 窗口句柄,Venus: 针对Linux平台上,对常用的系统API进行面向对象的封装SDK。...
- js的hasOwnProperty
- 面板x轴模式包括哪些_虎扑轻跃 | 体验一汽大众探岳X
- JAVA根据word模板动态生成word(SpringBoot项目)
- oc实时渲染的图如何导出_C4D的几大主流渲染器
- Markdown表情关键字大全
- java输入身高体重计算体脂率_追求健康的体脂率,比追求体重数更有意义:一个公式教你计算...
- 原生PHP调用科大讯飞语音合成(流式版)WebAPI
- 我的测试入门——需求分析与用例编写
- 蓝牙室内定位技术,蓝牙定位信标应用场景及分析
- DAY3:尚学堂高琪JAVA(33~40)
- Webstorm里面创建XMl文件
- 程序员的自我修养阅读笔记
- python怎么输出百分数_Python 如何输出百分比
- 凡人修c传(四)翻牌子(POJ - 3279 - Fliptile每日一水)
- 30岁前,你应该知道的九大潜规则
- 不写代码也能实现android应用