Cz_wang 发表于 2019-11-22 18:28:32

美术资源量控制及优化——特效向

Cz_wang的特效学习群338763172,在这里只有学习特效,分享资源,什么开车的撩妹
子的统统踢掉,打造良好的学习环境,为爱学习的宝宝们留下一片净土。
因为最近项目要求比较严格,在工作同时一边整理一些关于特效资源量控制的一些知识点,角度比较个人,不一定大家都适用,如有不对之处还望谅解。1.    粒子贴图压缩,将过大的贴图通过PS尽量减少尺寸,比如一张512*512,压缩到256*256的话,可以将单张贴图资源量缩小至四分之一左右,如果项目内贴图量过大时,压缩贴图时很必要的。2.    当贴图导入到unity内时一般会勾选一些默认参数,其中有些参数实在特效中,一般使用不到的,这时可以把不用的参数关掉,来减少资源量。这里举个例子:Generate Mip Map:生成Mip地图这个参数大概意思为,当摄像机足够近的时候会较清楚,当摄像机较远时,变得模糊。通过实际测试,该张纹理图由42.7KB(勾选参数)减少到32.0KB(取消参数),减少了10.7KB,也减少了大约四分之一的资源量。3.    一般使用add的粒子,我们可以使用黑底不带通道的贴图,去掉通道无疑可以一定程度上减少不小的开销。这里我们用128*128,一个很小的贴图测试一下。4.    大面积下的粒子或者模型,尽量使用add的渲染模式,因为alpha模式会渲染通道,会消耗比较大的内存。5.    当粒子发射模型时,尽量使用填充率较高的模型,这将大大降低的渲染压力。6.    同理如果在后期优化时,摄像机下粒子特效重叠面积过多或过大,这时也要尽量减少粒子数,删除一些不太影响整体效果的多余粒子及发射器。官方点的话就是减少视窗内单个像素多次渲染从而减少渲染压力。7.    有关着色器(shader)的使用方面,一般没有特殊要求时尽量使用,mobile模式下的shader,如果有特殊的效果需求,有使用shader forge连接的shader,这时需要程序优化。因为shader forge中会自带一些框架代码(个人理解),其中有些并不是我们需要的,但是他们已经准备好了。这时要是将代码精简到只使用的代码时,就会减少不少CPU的计算量(读取量)。如果使用开关的话可以,让一个开关对应一个宏或者通过if句式来读取利用率。8.    自己编译的shader,需要尽量少的使用开关,比如我们自己编写了一个材质球,可以识别两张贴图加或乘纹理时,代码会把两个都读取,通过开关来判定你选择的是那个。在一定程度上会比较浪费,需要注意一下。9.    在粒子系统(粒子发射器)使用方面,一般使用多少个粒子,最大粒子数就写多少,我个人开始以为,默认一千,我瞬时发射十个,没有触及到上限,就不需要修改。后来通过学习和观看资料时,发现其实这个参数的准确含义还包括粒子缓冲池(个人理解),大概意思就是系统提前给你准备了一千个粒子的位置。这就像你去食堂打饭,你打一碗饭,你不拿一个碗,你拿了个大水缸,说我最多能放一千碗饭,你给我盛就完了。这样是不对的(很浪费)。10.一般的特效粒子,都不需要加入接受光影或产生光影效果,所以可以把这个参数去掉,减少计算量。11.大部分特效当中不要加入灯光参数,如果需要表现灯光效果,可以使用glow来模拟光照效果。12.特效中模型资源的合并,在unity中采用一个模型会计算一个draw calls,如果把一些一起使用的模型整合到一起,这样会减少draw calls。这个方面在我以前帖子3分钟制作纸屑特效中有过使用,大家可以去简单看一下。(3dmax中使用附加参数将多个体合到一起)13.特效中用到的模型只使用一个skinned mesh render.14.特效中如果使用到骨骼动画,骨骼数量尽量不要超过30.15.特效中的模型,不要使用mesh collider(模型碰撞包围盒),16.从3dmax中导出的FBX文件,如果在不使用动画的情况下,把一些参数关掉,17.在叠加光晕时,尽量使用瞬时发射一个,透明度给满的,减少使用瞬时两个,透明度给80%的使用情况。(原理同第六条)18.特效中使用动画,可以在父级上使用一个动画,将子级下多个动画都制作在一起。当然这很麻烦,如果资源控制足够严重时,需要注意。19.贴图压缩格式:IOS尽量使用PVRTC,Android中尽量使用ETC。20.在制作图集时(或普通贴图)最好不要高与1024*1024,否则游戏安装后,低端机会出现游戏崩溃的问题,因为手机系统版本低于2.2时,无法读取超过1000的图集导致的。21.贴图尺寸尽量保持1:1,2的幂次方的标准。22.特效中用到的模型要避免高面数的模型。23.单个特效预制体(prefab)最好保持在1.2MB以下。24.贴图带通道的贴图,最好使用256*256及以下尺寸。25.贴图使用上,尽量统一使用png格式贴图。现在dds好像项目里都不怎么用了,tga部分项目还是可以使用的,如果项目要求严格,还是养成多用png格式的。26.单个界面内或预制体内使用的特效材质,尽量使用单张图集(序列除外),通过发射器的Texture Sheet Animation参数来找到对应贴图位置。原因是在加载一个界面时,系统会有预加载(预读)机制,如果你16个粒子发射器使用16个材质,这时就会预读16个材质,如果合成一个材质就会减少为预读一个,另外每加载一个材质(shader)就会多调用一个draw calls(openGL图形绘制接口)。这在一定程度上会减少很多压力。27.特效中尽量减少音频数量和AudioClip的引用。28.添加shader预加载,防止游戏内卡顿的问题,关闭不使用或淘汰的shader来减小包体大小。29.特效制作时,尽量将粒子发射器里的缩放模式(Scaling Mode),这样有时不同界面的特效或者预制体交到程序那边时可以自行缩放,这样可以减少一样特效不同大小预制体个数。(个人理解)不得不说制作的时候改了缩放模式这个好用,比如根据效果图对特效时,可以通过缩放父级直接来修改特效大小,避免重做(跑题警告!)
30.关于线性颜色空间下的项目,合理使用Post Process(后处理),来提升效果,不要改完颜色空间后变暗,直接就多发射一直叠加,不仅不出效果还非常的浪费(同第六条)。31.导入的贴图根据是否涉及到Alpha通道给不同的压缩模式。
下载文件中有带图版的。
借鉴了历届大佬的经验,如有不足敬请谅解。

我爱学习!天天向上 发表于 2020-1-2 19:40:24

2.    当贴图导入到unity内时一般会勾选一些默认参数,其中有些参数实在特效中,一般使用不到的,这时可以把不用的参数关掉,来减少资源量。这里举个例子:
Generate Mip Map:生成Mip地图
这个参数大概意思为,当摄像机足够近的时候会较清楚,当摄像机较远时,变得模糊。
通过实际测试,该张纹理图由42.7KB(勾选参数)减少到32.0KB(取消参数),减少了10.7KB,也减少了大约四分之一的资源量。

去选 mipmap 虽然可以减少包体 但是对画面优化并没有不好 因为使用mip map是为了在远距离渲染图片可以让图片大小降低 ;比如原图片是精度为 256*256的图片当相机距离图片1米的位置画这张图就是画了一张精度为256*256的图片而在10米远的地方画这张图时 则会画一张精度为128*128的图片越远就会越小最小到精度为2*2的图片。 如果去选mip map 无论多远都会渲染一张精度为256*256的图片 对性能来说 是一种多余的消耗。
( 萌新的拙见,大佬莫怪。我也是从其他大佬那边听说的,项目里因为去选了被程序大大批了一顿,所以过来补充一下。个人作品或者特殊情况例外。当然还是去选好一些,毕竟美术还是要效果好,如何优化是程序大大们的事情)。{:6_222:}

几点??? 发表于 2020-12-23 11:09:42

好帖必须来学习下

xyxf3213 发表于 2020-11-23 17:29:34

顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶

布拉德皮蛋李 发表于 2020-4-1 20:38:50

看看

我爱学习!天天向上 发表于 2020-1-4 13:40:13

Cz_wang 发表于 2020-1-3 09:45
感谢您的分享,那要是严谨点说,UI图都关掉应该会没有问题吧,UI图应该不会离摄像机太远。

是的而且mip map可以自定义这样就可以做出远处看起来像某东西 到了近处却不一样

Cz_wang 发表于 2020-1-3 09:45:03

我爱学习!天天向上 发表于 2020-1-2 19:40
2.    当贴图导入到unity内时一般会勾选一些默认参数,其中有些参数实在特效中,一般使用不到的,这时可以 ...

感谢您的分享,那要是严谨点说,UI图都关掉应该会没有问题吧,UI图应该不会离摄像机太远。

Cz_wang 发表于 2019-11-29 17:40:59

超级大兰斯 发表于 2019-11-29 11:37
5.    当粒子发射模型时,尽量使用填充率较高的模型,这将大大降低的渲染压力。
啥叫填充率较高

举例:刀光就用刀光形状的模型,而不是用方片。word里有带图片的比较好理解。

超级大兰斯 发表于 2019-11-29 11:37:40


5.    当粒子发射模型时,尽量使用填充率较高的模型,这将大大降低的渲染压力。
啥叫填充率较高

伯狐 发表于 2019-11-29 10:53:35

大佬好好做好大佬,萌新向大佬学习
页: [1] 2 3 4 5
查看完整版本: 美术资源量控制及优化——特效向