前言
今天要给大家分享的内容是游戏开发正式开发完成后,在准备打包时的打包贴图格式选择问题
如果商业游戏项目在打包时没有选择好打包格式,那么对于游戏包体的大小、加载运行速度是会有比较大的影响的
所以商业游戏开发中必须要考虑到的贴图打包优化问题,本文要带给大家的就是贴图打包优化的方方面面
版权声明
本文为“优梦创客”原创文章,您可以自由转载,但必须加入完整的版权声明
更多学习资源请加QQ:1517069595或WX:alice17173获取(企业级性能优化/热更新/Shader特效/服务器/商业项目实战/每周直播/一对一指导)
点赞、关注、分享可免费获得配套学习资源
主题
![]()
模型贴图包括哪些?
UI贴图包括哪些?
贴图打包/加载流程
各种贴图格式的应用场景
相关面试问题
贴图格式如何优化
关于贴图格式更深层次的思考
什么是模型贴图?
![]()
上图中最下面的图片是场景中的一个锈迹斑斑的小球,它在次世代游戏中是如何被表现出来的呢?
除了需要一个小球模型以外,还需要五张贴图才能够实现完整的小球材质表现
这五张贴图分别是
1,ALBEDO贴图
ALBEDO可以翻译为漫反射贴图,它是小球表面的基本颜色,但它跟普通的漫反射贴图又有一些区别,ALBEDO贴图是不包含局部阴影信息的,只包含纯颜色信息
2,AO贴图
AO贴图翻译成中文叫做环境遮蔽贴图,用于存放阴影信息
基本的颜色贴图是由RGB三种颜色构成的,不能进行优化,而AO贴图是由黑白灰三种颜色构成的,这种贴图在进行打包时就能进行优化
3,NORMAL贴图(法线贴图)
4,METALLC贴图(金属度贴图)
5,ROUGHNESS贴图(粗糙度贴图)
UI贴图
![]()
右边的这些图片是从剑网三端游里截取到的背包面板贴图,可以看出下面背包面板实际上就是由上面哪些贴图构成的
左边的游戏场景里也是无不充斥着UI界面,所以贴图优化的第二个目标就是优化UI界面的贴图
贴图打包流程
![]()
Unity引擎层面里的PNG图片打包流程
由于PNG图片在Unity引擎里是不能被直接使用的,所以PNG图片在Unity引擎载入时会被转换成2D纹理的通用格式
2D纹理格式在安卓平台打包时会被打包成ETC2格式,中间会经过两个过程
1,图像格式转换
2,图像压缩过程
ECT2格式里可能不存在压缩过程,但其他图形格式存在压缩过程,这个压缩好不好呢?
压缩是需要消耗压缩时间的,但从性能角度上说,压缩过的图片肯定比没有压缩过的图片要好,这取决于不同的图片格式
在打包时不可能把一张张图片散放在磁盘上面,所以会把这些图片打包到一个AB包里,以便于将来做远程热更新
游戏里会有很多AB包,比如模型的AB包、贴图的AB包、文本剧情的AB包等等,这些AB包最终会打包形成一个APK文件,APK文件在安卓上就是一个安装文件,用户从游戏市场去下载的都是这种APK包
贴图加载流程
![]()
用户从游戏市场上下载了APK包,安装并启动游戏后,Unity引擎会加载所需图片所在的AB包,并对AB包进行解包,以得到在前面步骤中打包的ETC2格式图片,然后将这张图片进一步解压到内存里来,它会形成一个二维数组,这个数组里的每一个元素就是这张图片的RGB颜色值
由于图片是通过显卡显示的,所以内存里的图片不能直接用于渲染,需要把它加载到显存里面,最终再通过显存和GPU来将显存里的图片渲染到帧缓存里
帧缓存是存储将来要显示的屏幕画面的地方,它是显卡里的最后一个部件
注意点:
ETC2格式图片在安卓平台里并不会先加载到内存,然后从内存加载到显存里去,因为这样需要消耗很多时间
安卓平台能够将ETC2格式图片直接送到显卡里,不需要做任何解压,这一点安卓平台的显卡大多都能支持
贴图压缩的时机
![]()
贴图压缩的四个时机对应了游戏项目研发的四个阶段
1,预研阶段
预研阶段里要确定项目的预算、确定项目的玩法、确定项目的性能指标
如果游戏的玩法达不到能够流畅游玩的性能指标,或者性能指标能达到但是项目预算会很高,那这个项目在预研阶段就会被PASS掉
2,原型阶段
在预研阶段确定了项目可以开发后,就要准备开发原型了,但是在一开始不会直接招很多人来做大规模开发,原型开发阶段主要是测试游戏玩法好不好玩,是否具有开发下去的价值
在这个阶段里还会完成具体架构的实现、开发项目所需要的工具,这是程序部分,还有美术和策划部分也会在此阶段提前做好准备
3,大规模开发阶段
大规模的开发阶段里需要完成各个功能系统的实现
4,测试阶段
贴图打包的格式究竟是放在哪个时间点考虑呢?
业余开发可以晚点考虑,甚至是不考虑,因为业余开发主要是爱好
但如果是一个商业项目,还是建议尽早考虑,肯定不能在测试阶段再去考虑,因为测试阶段再考虑这件事情太晚了,返工的工作量非常大
具体的贴图压缩时间点本文不给出答案,读者可以自己考虑放在什么阶段最合适,也可以在文末扫爱丽丝老师的二维码与老师交流
为什么要做贴图压缩
![]()
为什么商业项目一定要考虑贴图压缩问题?
从GPU的角度来说,贴图经过压缩以后所占用的渲染带宽会更低
比如上面说的ETC2格式如果不是用在安卓平台,而是Windows平台,那么由于Windows平台不支持ECT2格式的硬件解压,那么它就需要先解压到内存,这个解压过程是消耗内存的,并且由于它是从ETC2的压缩格式转换到非压缩格式,中间会产生很多解压带来的开销
由于压缩包里的资源解压出来时会比压缩包里的资源要大,所以它在加载到到显存时所占用的内存也会更大,如果贴图不压缩或者选择了一种当前平台不支持的贴图压缩格式,那么它的渲染带宽占用就会很高
这就是贴图压缩的理由,贴图送到显卡以后,从显卡到渲染这个步骤中,它中间的每一次渲染都需要传输图片的每一个像素点,这都是有开销的,这个开销就是通过压缩图片格式来解决的
![]()
贴图压缩以后,游戏包体就会更小,包体小带来的好处就是下载速度会更快、内存占用会更低
而且图片格式是支持显卡加速的,它甚至可以不经过内存,直接将数据存到显存里去
写在最后
更多学习资源请加QQ:1517069595或WX:alice17173获取(企业级性能优化/热更新/Shader特效/服务器/商业项目实战/每周直播/一对一指导)
点赞、关注、分享可免费获得配套学习资源
今天要给大家分享的内容是游戏开发正式开发完成后,在准备打包时的打包贴图格式选择问题
如果商业游戏项目在打包时没有选择好打包格式,那么对于游戏包体的大小、加载运行速度是会有比较大的影响的
所以商业游戏开发中必须要考虑到的贴图打包优化问题,本文要带给大家的就是贴图打包优化的方方面面
版权声明
本文为“优梦创客”原创文章,您可以自由转载,但必须加入完整的版权声明
更多学习资源请加QQ:1517069595或WX:alice17173获取(企业级性能优化/热更新/Shader特效/服务器/商业项目实战/每周直播/一对一指导)
点赞、关注、分享可免费获得配套学习资源
主题
模型贴图包括哪些?
UI贴图包括哪些?
贴图打包/加载流程
各种贴图格式的应用场景
相关面试问题
贴图格式如何优化
关于贴图格式更深层次的思考
什么是模型贴图?
上图中最下面的图片是场景中的一个锈迹斑斑的小球,它在次世代游戏中是如何被表现出来的呢?
除了需要一个小球模型以外,还需要五张贴图才能够实现完整的小球材质表现
这五张贴图分别是
1,ALBEDO贴图
ALBEDO可以翻译为漫反射贴图,它是小球表面的基本颜色,但它跟普通的漫反射贴图又有一些区别,ALBEDO贴图是不包含局部阴影信息的,只包含纯颜色信息
2,AO贴图
AO贴图翻译成中文叫做环境遮蔽贴图,用于存放阴影信息
基本的颜色贴图是由RGB三种颜色构成的,不能进行优化,而AO贴图是由黑白灰三种颜色构成的,这种贴图在进行打包时就能进行优化
3,NORMAL贴图(法线贴图)
4,METALLC贴图(金属度贴图)
5,ROUGHNESS贴图(粗糙度贴图)
UI贴图
右边的这些图片是从剑网三端游里截取到的背包面板贴图,可以看出下面背包面板实际上就是由上面哪些贴图构成的
左边的游戏场景里也是无不充斥着UI界面,所以贴图优化的第二个目标就是优化UI界面的贴图
贴图打包流程
Unity引擎层面里的PNG图片打包流程
由于PNG图片在Unity引擎里是不能被直接使用的,所以PNG图片在Unity引擎载入时会被转换成2D纹理的通用格式
2D纹理格式在安卓平台打包时会被打包成ETC2格式,中间会经过两个过程
1,图像格式转换
2,图像压缩过程
ECT2格式里可能不存在压缩过程,但其他图形格式存在压缩过程,这个压缩好不好呢?
压缩是需要消耗压缩时间的,但从性能角度上说,压缩过的图片肯定比没有压缩过的图片要好,这取决于不同的图片格式
在打包时不可能把一张张图片散放在磁盘上面,所以会把这些图片打包到一个AB包里,以便于将来做远程热更新
游戏里会有很多AB包,比如模型的AB包、贴图的AB包、文本剧情的AB包等等,这些AB包最终会打包形成一个APK文件,APK文件在安卓上就是一个安装文件,用户从游戏市场去下载的都是这种APK包
贴图加载流程
用户从游戏市场上下载了APK包,安装并启动游戏后,Unity引擎会加载所需图片所在的AB包,并对AB包进行解包,以得到在前面步骤中打包的ETC2格式图片,然后将这张图片进一步解压到内存里来,它会形成一个二维数组,这个数组里的每一个元素就是这张图片的RGB颜色值
由于图片是通过显卡显示的,所以内存里的图片不能直接用于渲染,需要把它加载到显存里面,最终再通过显存和GPU来将显存里的图片渲染到帧缓存里
帧缓存是存储将来要显示的屏幕画面的地方,它是显卡里的最后一个部件
注意点:
ETC2格式图片在安卓平台里并不会先加载到内存,然后从内存加载到显存里去,因为这样需要消耗很多时间
安卓平台能够将ETC2格式图片直接送到显卡里,不需要做任何解压,这一点安卓平台的显卡大多都能支持
贴图压缩的时机
贴图压缩的四个时机对应了游戏项目研发的四个阶段
1,预研阶段
预研阶段里要确定项目的预算、确定项目的玩法、确定项目的性能指标
如果游戏的玩法达不到能够流畅游玩的性能指标,或者性能指标能达到但是项目预算会很高,那这个项目在预研阶段就会被PASS掉
2,原型阶段
在预研阶段确定了项目可以开发后,就要准备开发原型了,但是在一开始不会直接招很多人来做大规模开发,原型开发阶段主要是测试游戏玩法好不好玩,是否具有开发下去的价值
在这个阶段里还会完成具体架构的实现、开发项目所需要的工具,这是程序部分,还有美术和策划部分也会在此阶段提前做好准备
3,大规模开发阶段
大规模的开发阶段里需要完成各个功能系统的实现
4,测试阶段
贴图打包的格式究竟是放在哪个时间点考虑呢?
业余开发可以晚点考虑,甚至是不考虑,因为业余开发主要是爱好
但如果是一个商业项目,还是建议尽早考虑,肯定不能在测试阶段再去考虑,因为测试阶段再考虑这件事情太晚了,返工的工作量非常大
具体的贴图压缩时间点本文不给出答案,读者可以自己考虑放在什么阶段最合适,也可以在文末扫爱丽丝老师的二维码与老师交流
为什么要做贴图压缩
为什么商业项目一定要考虑贴图压缩问题?
从GPU的角度来说,贴图经过压缩以后所占用的渲染带宽会更低
比如上面说的ETC2格式如果不是用在安卓平台,而是Windows平台,那么由于Windows平台不支持ECT2格式的硬件解压,那么它就需要先解压到内存,这个解压过程是消耗内存的,并且由于它是从ETC2的压缩格式转换到非压缩格式,中间会产生很多解压带来的开销
由于压缩包里的资源解压出来时会比压缩包里的资源要大,所以它在加载到到显存时所占用的内存也会更大,如果贴图不压缩或者选择了一种当前平台不支持的贴图压缩格式,那么它的渲染带宽占用就会很高
这就是贴图压缩的理由,贴图送到显卡以后,从显卡到渲染这个步骤中,它中间的每一次渲染都需要传输图片的每一个像素点,这都是有开销的,这个开销就是通过压缩图片格式来解决的
贴图压缩以后,游戏包体就会更小,包体小带来的好处就是下载速度会更快、内存占用会更低
而且图片格式是支持显卡加速的,它甚至可以不经过内存,直接将数据存到显存里去
写在最后
更多学习资源请加QQ:1517069595或WX:alice17173获取(企业级性能优化/热更新/Shader特效/服务器/商业项目实战/每周直播/一对一指导)
点赞、关注、分享可免费获得配套学习资源