当前位置:   article > 正文

unity技美27——优化项目内美术3D,2D等资源,详解unity打包体的潜规则与案例_unity美术资源优化

unity美术资源优化

很多朋友美术朋友在面试中经常会被问到一类问题,就是怎么优化你的美术资源。
当我们不熟练使用unity,以级不懂得unity的潜规则时,美术能做到的仅仅是:
1优化模型面数、或者用次世代的方式制作法线贴图等。
2优化动画文件,导出时祛除骨骼只导出点信息.
3unity中运用灯光烘焙。
但是这些,在一个APP游戏上线并且转为小程序游戏的时候,这些都是远远不够的。并且已经起不了决定性的作用了。
字节跳动现在推出了新技术,可以直接用unity转小程序,并且兼容粒子特效、动作混合融,等unity自带的功能,这个技术很强大,但是同时却给我们的限制就是首包15MB。
那么,如果你是个普通的美术,你光靠你之前的知识做不到优化首包。但是有些东西技术又没法给你处理。这个时候怎么办呢?
那就跟我一起向着技美迈步吧,熟练了解各种市面上的插件,了解unity对文件的压缩规则。你就能做到。

下面上干货。

优化美术资源,应分为三个维度

维度1:图片压缩插件时代,现在市面上的很多插件都能把你的图片包体压缩10-100倍,(tinyPNG,快图压缩等)
维度2:了解unity的潜规则

A:描边shader会增加模型面数(Tris)
B:unity自带了一些压缩方式,熟练使用这些压缩方式(压缩方式不等于你插件压缩的图片,比如你一个图片125K,但是到了unity中由于你设置压缩参数的设置失误,会导致你打包出来的包体2MB,同一图片扩大了10倍)
C:unity自带的压缩,对方形图片,也就是128、256、1024等这样的位数压缩处理才会生效,并且效果极佳(稍后详细解释)

维度3:用unity自带渲染工具将所有可见元素3转2化并且删除原预制模型灯光烘焙图等(这里的3转2不是模型层面上的、也不是传统的unity烘焙灯光。而是所有可见层面上的,这种方法甚至比你的灯光烘焙,模型削面等更优,基本一个工程能把所有场景人物等减少三分之二的耗损)

如果你按照我的三个维度去做,你会发现,你工程里的FBX,灯光图,prefab预制体。所有的一切都不再存在,最后打包出来的只有一张图,或者一个图集。并且跟你原来的3D效果完全一样。

现在我对上述三个维度,细致整理一下怎么操作。以级举例说明,方便理解。

维度1详解:

以tinyPNG为例,这张图片原大小3.01
在这里插入图片描述
压缩后的大小
在这里插入图片描述
在这里插入图片描述
并且图片无损耗。这个软件有网页批量付费版,也有破解版本,还有PS插件版本。
若在此之上还想继续压缩,可以试试“图好快”工具,可以设置输出大小,并且不管你是否有透贴通道,都可以保留。

维度2详解:

在讲解之前,先插入一个知识点。经过我们三四款游戏的实际测试,高端手机排除(苹果8以上)。以低端机为例(6S,华为老款等),要在出包前,保证游戏运行时这两个地方的数据。Batches:不超过100
Tris不超过70K。那么你的游戏在低端机下就不会发生卡顿,掉帧等问题。
其中batches美术理解为你场景中出现的图片个数(美术可以这么理解,程序就是占cpu,gpu等这些)
其中Tris代表场景面数(美术可以这么理解,程序就是占cpu,gpu等这些)
这两个数据不仅对手机性能有影响,对最后的包体大小也是有影响的。美术人员无法参与打包,但是可以用这两个数值甄别自己的scence中哪些东西需要优化。
在这里插入图片描述
A。为什么说一些shader会增加三角面的计算,从而影响模型面数增大。
上图中我们看到了脚下的小猪与人物都用了卡通描边shaer。在这里插入图片描述

当我把这个shader取消掉描边数值的时候三角面的计算会下降到47.相当于减少了一万模型面
在这里插入图片描述
因此当你的模型面数本来就不高,但是到unity中变高了,不妨来看看自己的shader的计算方式吧。
如果你不是程序也不爬,后面我会写一个用插件在unity里制作shader的教程,并且这个插件能自动把你的配置生成C#脚本,这种脚本程序可以直接使用。
(其实模型削面,烘焙灯光这些,现在可以忽略,因为到第三步整体3转2后,模型不存在了,灯光,灯光图等都不存在了)

B讲解一下unity自带的压缩方式,上面我们已经用压缩软件压缩过图片文件大小了,但是这并不是最终打包的大小,还要调整unity中的参数。以下图为例子。
在这里插入图片描述
上图中这张car2的贴图已经压缩到了400K,但是当我们拖入到unity中时。在这里插入图片描述
如上图,我们会看到我们压缩过得文件,到unity里输出大小变成0.7MB,整整大了一倍,这是为什么呢?
因为unity自己会对图片进行处理。并且输出打包有自己的压缩规则。如下如图
在这里插入图片描述
上图中红色箭头代表压缩到PC,还是安卓,或者ios,不同的平台有不同的参数
蓝色箭头为我们对图片压缩的处理选项
max size 代表你的像素大小,有些人图片导入进来不清晰了,就是这里参数设置的比原图片低。
这里数值越小,图片压缩越小,但是会变得模糊。
comperssion为纹理渲染品质,这里调整会对压缩大小产生影响
use这行要勾选。勾选后可以调整压缩数值
在这里插入图片描述
上图为我们调整好之后,图片的最终输出打包大小189.5K,比原来的700K是不是小了好几倍呢?
特别注意这里的压缩还有一个潜规则
那就是unity的压缩方式必须是2的次幂。也就是说你必须把图片都变成128128、256256、1024*1024等这类的方形图。
如果出现非正方形比例,比如下图这样的压缩反而不会生效,图片最后会变得很大。所以一定要到PS里补齐图片,哪怕是透贴也可以。
在这里插入图片描述

维度3详解:

在以前,我们美术常用的优化资源的方法,就是给模型进行削面、并且给所有场景灯,烘焙在模型贴图上。或者在unity中烘焙光子图。灯光探针等。这种方法的弊端是仍有模型存在于场景中,并且打包时这个场景里的模型依然引用了贴图,并且多了很多烘焙好的灯光贴图。而这些,哪怕运用了插件压缩,都是不能避免的占资源,占包体,如下图
在这里插入图片描述
可以看到上图中我们用老方法,删除了模型多余面数,并且烘焙了场景灯。这样会生成很多灯光文件,减少的只是三角面,依然引用贴图文件,预制体,材质球,sahder。并且还+了灯光图。这样虽然能少三角面,但是对包体却很不友好。
那么我们怎么办呢?
unity自带了一个插件GenericFrameRecorder(2019有内至下载,早期版本需要网上自行下载安装包)
使用方法参照我的unity24
这个插件能直接把你的摄像机所照射到物体,输出视频,或者是png图片。并且还可以输出动态帧。如果你是个有动作的,你就输出动态帧
如果你是静态场景,那么好,他就能生成一个扣好通道的png。
这样你再执行我们的第一第二维度操作。那么你的场景是不是就变成一张,或者两张图片插出的场景了呢。类似我们VR开发中的全景场景天空盒子。下面看图在这里插入图片描述
此场景是一个3D场景,做完削面跟场景灯光烘焙之后,极限是两万多三角面。
那么我们经过第三维度的方法优化一下,看看会有什么不同(见下图)
在这里插入图片描述
我们可以看到上图
优化后效果还是原来的效果,但是所有3D都变成了2D图片,并且只有一张图片,现在我们再重复维度一。维度二的操作我们会发现什么?是否两万面都消失了呢?在这里插入图片描述

在这里插入图片描述
如上图,这个场景里所有的模型,以级资源都变成了这样一张或者几张图片,并且是UI图片。此图片不需要shader。是不是避免了描边shader所占的性能,那么是不是也就没有材质球了。
最根本的是如下图,现在的项目文件夹内,只有一张图,没有prefabs文件,也不需要FBX等模型文件。所有的三维相关的一切占包体资源的东西都变成了一张图。
在这里插入图片描述
那么现在我们打包,朋友们去试试吧,你惊喜的发现游戏包体的惊人改变。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/118523
推荐阅读
相关标签
  

闽ICP备14008679号