图片边缘出现黑点的问题分析和解决(纹理过滤)

最近在项目中遇到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 ,即使用 最近点采样 。再看效果

黑点消失了,但是边缘变得不整齐了。这也是最近点采样的缺点。

问题解决

很简单,美术作图的时候尽量避免使用橡皮擦。保证一个透明过度关系应该为:

绿色不透明 -> 绿色半透明 -> 绿色透明 -> 黑色透明

这样插值就不会插出灰色半透明之类的情况。

图片边缘出现黑点的问题分析和解决(纹理过滤)相关推荐

  1. vue项目图片插入不清晰,原因分析及解决办法

    问题: vue项目图片插入不清晰,原因分析及解决办法 原因分析: 引起图片不清晰的原因可能有以下三个:被压缩.被放大.受到父盒子的影响. 解决办法: 方法一: 1.从属性 fit="none ...

  2. 全球与中国边缘人工智能平台市场深度研究分析报告

    2021年全球边缘人工智能平台市场销售额达到了 亿美元,预计2028年将达到 亿美元,年复合增长率(CAGR)为 %(2022-2028).地区层面来看,中国市场在过去几年变化较快,2021年市场规模 ...

  3. word图片靠右_如何设置word图片边缘透明

    我们在用WORD写文档的时候也通常会想法设法把文档做的漂漂亮亮的,比如说好好的排个版面,插入个图片什么的,可是插入的图片边缘颜色太明显,该怎么办呢?下面学习啦给大家分享word设置图片边缘透明的技巧, ...

  4. php 图片处理羽化,PS羽化图片边缘方法

    为了让处理的图片更美观,我们抠图之后都会进行边缘的羽化,这样能让图片更好的嵌入另一张图片.那么用PS如何羽化图片边缘?下面小编就为大家详细介绍一下,来看看吧! 步骤 1.打开PS 2.打开准备好的图片 ...

  5. html图片边缘阴影效果,CSS3实现图片照片边缘模糊效果

    某些时候你可能需要让图片四周带有边缘模糊效果,那么除了PS之外有没有简单的代码实现方法呢?今天我们就使用CSS3的新特性实现图片边缘的模糊效果,首先你需要在图片标签外部套一层DIV标签,其次再为外层D ...

  6. 网络时空大数据爬取与分析DAS系统(街景图片采集与绿视率分析)

    手把手教 | 网络时空大数据爬取与分析DAS系统(街景图片采集与绿视率分析) 原创 DAS Team 双评价DAS 7月2日 地理计算语言,为大众赋能地理智慧. --DAS Team 爬取分析DAS系 ...

  7. SDL2源代码分析4:纹理(SDL_Texture)

    ===================================================== SDL源代码分析系列文章列表: SDL2源代码分析1:初始化(SDL_Init()) SDL ...

  8. 浏览器打开服务器上的图片无法显示,网页中的图片打不开怎么办?原因与解决办法...

    最近有网友问小编这样一个很泛的问题:网页中的图片打不开怎么办?对于这个问题,其实导致的原因有很多,但也很好排除原因,主要从网络,网页,平台等当面综合去分析,就很容易可以找到答案.以下是小编对网页中的图 ...

  9. onload js函数不执行的原因分析及解决方法

    今天打开网站的时候,发现很多页面的信息都没有显示出来,仔细观察了之后,发现都是onload的js函数没有执行的原因.其实之前曾发现过这个情况,我以为是网站出了问题,然后采用多种方法试图让onload的 ...

  10. Ajax页面缓存问题分析与解决办法

    Ajax页面缓存是ajax处理数据时对一些重复相同数据进行一个缓存操作,这样从另一个层面对于我们来讲是非常的不错了,但有时我们并不希望它缓存要如何处理呢?下面我们一起来看看关于页面缓存问题分析与解决, ...

最新文章

  1. 每日一淘完成1.3亿美元融资,元生资本、DCM领投,SIG联合投资
  2. 去重仅保留一条_清水出芙蓉,天然去雕饰,牛仔背带裤配针织上衣的清纯温柔穿搭...
  3. 2-2 LU crout 分解
  4. linux sdk 窗口句柄,Venus: 针对Linux平台上,对常用的系统API进行面向对象的封装SDK。...
  5. js的hasOwnProperty
  6. 面板x轴模式包括哪些_虎扑轻跃 | 体验一汽大众探岳X
  7. JAVA根据word模板动态生成word(SpringBoot项目)
  8. oc实时渲染的图如何导出_C4D的几大主流渲染器
  9. Markdown表情关键字大全
  10. java输入身高体重计算体脂率_追求健康的体脂率,比追求体重数更有意义:一个公式教你计算...
  11. 原生PHP调用科大讯飞语音合成(流式版)WebAPI
  12. 我的测试入门——需求分析与用例编写
  13. 蓝牙室内定位技术,蓝牙定位信标应用场景及分析
  14. DAY3:尚学堂高琪JAVA(33~40)
  15. Webstorm里面创建XMl文件
  16. 程序员的自我修养阅读笔记
  17. python怎么输出百分数_Python 如何输出百分比
  18. 凡人修c传(四)翻牌子(POJ - 3279 - Fliptile每日一水)
  19. 30岁前,你应该知道的九大潜规则
  20. 不写代码也能实现android应用

热门文章

  1. 黑马程序员——递归与枚举
  2. 在windows应用程序上输出透明字体
  3. linux b类地址设24位掩码,CIDR,子网掩码以及划分子网超网
  4. 用PS将照片背景变成白色
  5. 【分享实录-猫眼电影】业务纵横捭阖背后的技术拆分与融合
  6. 数据经济时代大数据四大发展趋势
  7. 十进制度分秒lisp函数_十进制经纬度与度分秒格式相互转换 Excel
  8. 以云服务器产品为例,深度分析比对华为云、阿里云、腾讯云
  9. Kubernetes24--弹性伸缩2
  10. 计算百分比的分析函数