在上期《网格优化:溃堤之穴,一个也不能放过》中,我们对网格相关的优化知识点做了讲解。无论是大家在开发时的疏忽,还是对相关知识点的理解不足,这些问题的积累最终都会反映到项目的性能表现上。为此,我们将这些规则列出,并且以一个个知识点的形式逐一解读。

本期我们聚焦纹理相关的优化,以UWA本地资源检测中“包含无效透明通道的纹理”“过滤模式为Trilinear的纹理”“开启Read/Write选项的纹理”这三条规则,来为大家简单说明相关的优化要点。我们将力图以浅显易懂的表达,让职场萌新或优化萌新深入理解。


1、包含无效透明通道的纹理

首先,Alpha通道是个计算机图形学术语,常常被理解为图像的“透明度”。 其实Alpha本身没有透明度的意思,Alpha通道指的是除R(Red)、G(Green)、B(Blue)以外的一个通道,取值为0到1。一个像素的Alpha值常用来表示像素是否对图片有“贡献”,经过运算之后,其外在表现是“透明度”。我们在纹理格式中见到的“RGBA”指的就是纹理的四个通道R、G、B和Alpha。

简单来讲,像素的(R,G,B)值与Alpha值通常是相乘的关系,当某个像素的Alpha值为1时,则表现为完全不透明状态。如果一张纹理上所有像素的Alpha值都为1,那么在渲染的计算过程中,关于该纹理Alpha值的计算就是无意义的,这就会导致了内存上和计算上不必要的开销。

所以本条检测规则筛选出Alpha值全为1的纹理后,建议开发团队去除相应纹理的Alpha通道。


2、过滤模式为Trilinear的纹理

对于纹理,大部分情况下,我们都是要把它作为“一层皮肤”去贴到图形表面。在渲染管线的逐片元着色阶段,会对利用屏幕上像素对应的UV坐标对纹理进行采样,采样过程可以笼统地理解为“贴皮肤”的过程。在这个过程中,纹理常常会被“放大”、“缩小”、“变形”。纹理在图形表面就会出现模糊或者锯齿化的现象,从而降低整体的表现效果。为了降低放大或缩小对纹理表现带来的“失真”影响,过滤模式应运而生。

过滤模式会提供多种方案来使得纹理投影到物体表面的过程变得更为顺滑自然。一般来讲,Unity提供了三种模式:

Point(no filter)——Point模式为不过滤的采样方式,使用最近点采样的方法,当UV坐标没有刚好对应Texture上的一个采样点时,它会选择最近的一个采样点作为该坐标的采样值。当纹理没有拉伸变形时,这样速度是最快的,且效果理想。但如果拉伸变形了,会出现马赛克现象。

Bilinear——双线性过滤模式。简单来讲,它会对相邻的像素进行模糊化处理,使得像素之间的变化更为圆润平滑,不会有明显的锯齿感或者马赛克化。但这只涉及单个“平面”的操作,所以一旦涉及mipmap层级间的处理,双线性过滤就会有些“力不从心”,某些表现效果会大打折扣。

Trilinear——三线性过滤模式。和Bilinear模式类似,但是额外优化了mipmap层级间的转换效果,它会在mip层级间进行模糊处理,弥补了Bilinear模式的不足。

这里我们延伸讲一下关于“mipmap”的概念。简单来讲为了更好地应对纹理贴图在不同距离和大小情况下的表现效果,以提升渲染的速度和降低图像锯齿化的影响,Unity会以纹理原尺寸为基础,预设几个等比例缩放的“复制品”,在实际使用中会根据情况加载对应的mipmap贴图,从而提升渲染性能,放大缩小的过程也因为mipmap层级的选择而更为快捷。

回到规则本身,Trilinear模式对表现效果的提升,是以GPU的额外开销为代价的。同等条件下,三线性过滤的GPU占用是最高的。所以如果对纹理的细致程度不那么敏感(比如像素类游戏),或者不涉及mipmapping的应用(比如2D游戏),那么就没有必要去选择Trilinear模式。

所以建议开发团队对本条规则检测下的纹理资源,依据项目实际需求进行相关的过滤模式的修改。


3、开启Read/Write选项的纹理

有时项目的实际运用中,会对纹理进行读写操作。

开启纹理的Read/Write选项后,就可以从脚本来访问纹理数据。内存中会产生一份纹理数据的副本,以便于对纹理进行实施的编辑和修改,以此来达成某些动态的纹理效果。所以如果相关纹理不涉及读写的操作,Read/Write选项的开启就会导致内存上额外的占用。

大家可以参看上期《网格优化:溃堤之穴,一个也不能放过》中关于网格的读写权限,两者在Read/Write选项的开启关闭上很类似。所以开发团队可以对照着去理解纹理读写权限开关的实际运用环境,从而对本规则下选出的纹理进行对应的权限修改,以减少不必要的内存开销。

需要说明的是,每一项检测规则的阈值都可以由开发团队依据自身项目的实际需求去设置合适的阈值范围,这也是本地资源检测的一大特点。同时,也欢迎大家来使用UWA推出的本地资源检测服务,可帮助大家尽早对项目建立科学的美术规范。

我们已支持Luacheck功能啦~我们已支持粒子特效检测~这么多实用贴心的功能你们还没用起来吗?

万行代码屹立不倒,全靠基础掌握得好!

性能黑榜相关阅读

《那些年给性能埋过的坑,你跳了吗?》
《那些年给性能埋过的坑,你跳了吗?(第二弹)》
《掌握了这些规则,你已经战胜了80%的对手!》

前端怎样让图片缩小像素值不失真_纹理优化:不仅仅是一张图片那么简单相关推荐

  1. nodejs将图片的像素值提取出来将RGBA转换成16位彩色

    nodejs将图片的像素值提取出来将RGBA转换成16位彩色 RGBA转16位彩色的原理 RGBA由4*8bit组成(255, 255, 255,255),16位彩色为2*8bit组成.16位彩色需要 ...

  2. Java读取并修改图片的像素值

    Java程序读取图片像素的值类, package work;import java.awt.AWTException; import java.awt.Dimension; import java.a ...

  3. android图片分辨率改变,Android实现改变一个图片的像素值

    如果你有一张图片,想实现把图片中某一类的像素点修改一下,例如:把一个图片中的全白的像素点改成你想要的颜色,可以通过如下方法实现 第一步:创建一个布局 android:orientation=" ...

  4. 把ct图像像素值转化为_数字图像概论与基础

    数字图像处理概述 1. 引言 机器能看到各个波段的信号,(结合视觉定位,与不同波段的"图像"定位) 机器视觉很难发现人眼的理解和识别(狗狗,静态图动态化) 2. 图像处理的目的 便 ...

  5. 为什么使用累积分布函数处理后像素值会均匀分布_亿万级数据处理的高效解决方案

    简介 全文行文是基于面试题的分析基础之上的,具体实践过程中,还是得具体情况具体分析,且各个场景下需要考虑的细节也远比本文所描述的任何一种解决方法复杂得多. 何谓海量数据处理 基于海量数据上的存储.处理 ...

  6. kdj值应用口诀_最强短线KDJ操作精髓,简单高效,看懂受益一辈子

    每一个成熟的操作者都有一套自己的交易系统,而对于大部分操作者来说,指标是一个完善的操作系统中必不可少的组成要素.很多人一提到指标就比较不屑,认为那是骗人的东西:有一些态度相对客观的人说,指标只是个参考 ...

  7. 【Unity】刮刮乐效果(擦除图片像素值)

    实现类似刮刮乐效果,擦除图片指定像素值(修改图片Alfa通道) 参考Unity刮刮乐工程源码的实现原理,对实现方式有一些调整 这里RawImage需要保持原图大小,不能缩放,不然坐标计算会有偏差 us ...

  8. OpenCV 数组存储图片像素值,便于后期图像处理

    刚开始接触到OpenCV,本身是想学借助OpenCV的库来进行图像处理学习的,后来发现OpenCV将所有的东西都集成起来了,对于打算学习图像处理来说这样反而不是什么好事: 在我看来,图像处理基本基于对 ...

  9. 2021-07-27查看图像像素值类别

    看图片的像素值,在语义分割标签时候数据集会用到. import numpy as np from PIL import Image img = Image.open("mask1.png&q ...

最新文章

  1. ICCV 2021 | 最新开源!多视角几何和注意力机制实现新视角合成
  2. python两个乘号_Python小白入门:第一讲||变量和简单数据类型
  3. 微信公众号基本信息配置
  4. Windows 操作系统的安全设置
  5. response的运行过程
  6. OS- -I/O之I/O软件原理及层次结构
  7. 平行空间怎么设置32位_高低床怎么设置不占空间
  8. 《HFSS电磁仿真设计从入门到精通》一2.3 T形波导的优化分析
  9. 你了解HTTPS,但你可能不了解X.509
  10. 汉语诗词 LaTeX 排版样式
  11. java运行库下载_Java运行库下载-jdk1.7 64位下载1.8.0.20 官方最新版-东坡下载
  12. Smart3D倾斜摄影建模教程
  13. 无需服务端的多平台同步利器(btsync)
  14. linux 中文显示乱码解决办法
  15. word中插入公式2010和2016两个版本)
  16. elasticsearch安装插件
  17. linux程序图形关不了怎么办,ubuntu下卸载软件 linux关闭图形化界面
  18. coc机器人苹果_警察机器人绳索英雄
  19. 微信小程序的分享链接
  20. 示波器基础知识100问

热门文章

  1. 在 Centos6/RHEL6 上恢复 ext4 文件系统下误删除的文件
  2. Ubuntu卸载图形界面
  3. Shell实现MySQL分库备份
  4. Vxscan:一款实用综合扫描工具
  5. Eclipse中的Git使用之Branch创建,Merge
  6. Excel 中 添加 复选框。
  7. 【PHP】安装wampserver3.1.19后apache无法启动问题
  8. 【PL/SQL】匿名块、存储过程、函数、触发器
  9. 利用nginx 反向代理解决跨域问题
  10. musicstore edit方法出错的原因和解决方法