游戏中的图片处理参数

来源:互联网 发布:linux发送udp包命令 编辑:程序博客网 时间:2024/05/08 14:42

转载自:http://www.cppblog.com/sunicdavy/archive/2016/04/28/213380.html


一个手游的图形技术关键性指标是: 内存占用, DrawCall和包大小.  

这三个参数是训练有素的程序和UI美术都需要关注的重要问题 

接下来我们来讲解下UI美术怎么对待这三个问题 

内存占用

手机的内存不会明显区分内存和显存, 大部分都是共享访问的. 这里说的内存, 一般可以通过一些工具直接看到 

, 比如说XCode等 

图形上对内存影响最大的就是纹理, 而纹理上最关键的问题就是纹理的大小, 也就是纹理面积 

我曾经见过一些训练不是那么有素的UI美术, 用鼠标选中几个png文件, 点击属性告诉我: 诺, 你都看到了, 我这边的图片 

才占几kb, 为啥你总是说内存占用大 

纹理的内存占用, 只决定于纹理的面积以及发色数, 纹理面积就是长乘宽(像素), 发色数就是一般常说的: 16位色, 32位色 

之所以把内存占用放在首位, 是因为, 大多数的手机一旦超过限定内存就会开始清理后台挂起的程序, 实在清理不了只有杀掉最占内存的程序 

这就肯定杀到了你写的游戏之上 

转载请注明http://www.cppblog.com/sunicdavy,战魂小筑, 否则木有小JJ

DrawCall(DC)

美术来理解这个概念可以这么说:  绘制一张图片需要耗费1次DC, 假设界面上有10个图标, 那就需要耗费10个DC 

而一般手游的DC需要限定在150个之内, 如何降低DC呢, 就需要通过Atlas技术来合并图片 

将多张图片打到一张纹理上的技术被叫做Atlas, 俗称大图或者图集, 被打之前的图也就叫小图 

大图上的每个图元素叫做精灵 

每个精灵被绘制无数次最终也只会耗费1个DC 

但我们不能把所有游戏用到的图片都打成图集, 这并不划算 

我们会根据图的使用频率, 用途来按需打图集 

比如说: 

1. 进游戏只看一次的宣传图, 为了方便制作和加载迅速, 做一张整图动态加载会比较好 

2. 反复查看的图标, 因为数量相对固定,数量不会膨胀, 我们就做成图集 

3. 但是类似于刀塔传奇中50+英雄, 普通玩家看不到那么多英雄但又被打成图集是不划算的, 所以损失一点DC按小图绘制及加载是正确方法 

4. 一般时候, 我们将尺寸小的图片打成图集, 配合大尺寸图片同时加载 

转载请注明http://www.cppblog.com/sunicdavy,战魂小筑, 否则木有小JJ

包大小

包大小对于游戏来说, 会影响的是玩家首次下载的时间, 如果连游戏都不下载, 做的再漂亮的游戏也是没用的 

降低包大小的方法很多, 例如: 

1. 分包机制. 先玩小包, 根据需要下载大包, 多见于MMORPG 

2. 良好的资源管理方法及习惯 

3. 剔除冗余资源 

4. 尽量使用3D渲染代替2D纹理图片 

以上3个概念是游戏美术, 程序必须了解的重要概念 

但一个合格的美术, 除了事后优化, 还需要做的是事前优化 

事前优化包括: 在游戏立项后, UI美术需要了解基本的游戏功能设计方案 

出一套基本的对话框, 提示框, 图标装饰等的图素, 这些资源往往只有不到512见方的资源 

利用这些图片可以拼凑出70%的界面及美化效果 

在这之后的UI内容, 只是特效,动画的设计. 

转载请注明http://www.cppblog.com/sunicdavy,战魂小筑, 否则木有小JJ

  

一些道理: 

1. 进游戏因为内存超标就崩溃, 再漂亮的图片也是没用的. 

2. 游戏是多门艺术的综合, 游戏美术的不仅要画的好, 还要能做出优化的好的资源 

3. 手游和端游的美术资源标准有本质区别, 资源做出来是给人看的, 不是屏幕. 因此高低分辨率的搭配, 尤为重要. 

4. 还是那句话, 多看看别人做的游戏, 多问问别人怎么做的

0 0
原创粉丝点击