Unity3D培训
美国上市Unity3D培训机构

400-111-8989

VR培训

培训机构解读Unity3d中的图形优化

  • 发布:Unity3D培训
  • 来源:Unity3D教程
  • 时间:2016-12-05 13:34

为什么游戏发布文件很大?

为什么手机严重发热?

为什么游戏装载时间很长?

为什么尽管游戏图形都是最基本的,却依然落后很多?

如何减小游戏文件大小?

这只是在启动游戏时,遇到的常见问题中的一部分。

想象一下,当与最大的竞争者同时发布一个项目。你的游戏文件大小为50MB,而竞争对手文件大小为20MB。一周后,APP商店中竞争对手游戏的下载量成千上万,而你的游戏下载量只有几百。(尽管你认为你的游戏更有可玩性、更有特色)

手机市场是疯狂的,并且充满竞争。不控制游戏文件大小,很快就会被淘汰!没有用户喜欢等待并在数据上花费过多!(这种情况下,我们宁可RIP我们的游戏。)

不用失望,RIP不只是意味着(REST IN PEACE)终结,有时也意味着(RETURN IF POSSIBLE)尽可能改变。

下面是修改计划!

如何才能减小游戏发布文件大小?

有许多问题值得关注,首先,关注占据大部分资源的文件。要检查文件,需要打开编辑日志。

正如Unity的官方文档,“日志提供了一个按类型划分的资源文件的概括,列出了所有资源文件的大小。通常纹理、音乐、视频会占据较多存储资源,而脚本、关卡、着色器通常可以忽略不计。”

从下面的图片中,可以明显看出:

【unity3d中的图形优化】

这些数据实际上是从我们开发的2D游戏中所获得的。如上所示,在一个游戏中,纹理、图形占据了大部分的内存。

因此,图像压缩应该首先被考虑。这很明显,但是我应该做些什么呢?

幸运的是,有一个概念叫纹理压缩。那么,什么是纹理压缩呢?

正如在维基百科中所定义的,“在三维计算机图形渲染系统中,图像压缩中的纹理压缩是一个特殊的形式被设计用于储存纹理地图。不像传统的图像压缩算法,纹理压缩算法的优化是为了随机存取。”

想必大部分人已经看晕了(我也晕了)。下面是更通俗易懂的定义:

流行的压缩格式如PNG、JPG(通常我们在游戏中使用),但这些格式不能通过GPU直接被解码的。因此,压缩格式首先需要在它们赋值到GPU内存之前被解压。解压纹理会花时间以及会导致加载时间增加。

使用硬盘加速的格式是一个更好的选择。这些格式是损坏的但是它们也有被设计用于GPU的优势。

这就意味者它们在被复制之前是不需要被解压的,并且对于玩家来说减少了加载时间,甚至可能由于硬盘的优化而提高性能。

有许多压缩的类型如ETC1, ASTC,DXT1, DXT5, PVRTC,ATC 以及更多。将普通的压缩格式转换为硬件加速格式的过程被称为纹理压缩。现在很容易理解吧?

我发现一个很好的链接(下面给出)可能帮助你们详细的理解纹理压缩以及它的重要性。这些硬件加速格式帮助提高了性能,电池寿命以及减少了设备的热量,占用更少的带宽同时也减少了能量的消耗。

很明显,这点是非常重要的!我希望你的竞争对手已经准备好了被你超越。http://renderingpipeline.com/2012/07/texture-compression/

我们需要采用纹理压缩。但是我应该使用哪种压缩呢?

这取决于你准备把哪些设备作为目标。并不是所有的硬件加速格式都能被全部设备所支持。

首先让我们来看看这个展示了被不同设备所支持的硬件加速格式的表格。

有两种类别的硬件加速格式,它们分别是标准的和专有的

以下是标准格式:

ETC1Supported on all android devices with OpenGL ES 2.0 and above. Does not support alpha channel.

支持在所有的Andriod设备上使用OpenGL ES 2.0以及以上版本。不支持alpha同道。

ETC2Requires OpenGL ES 3.0 and above.

要求OpenGL ES 3.0以及以上版本。

ASTCHigher quality than ETC1 and ETC2. Supported with the Android Extension Pack.

性能高宇ETC1和ETC2,支持Android扩展包。

以下是专有格式:

ATCAvailable with Adreno GPU.

可用高通GPU.

PVRTCAvailable with a PowerVR GPU.

可用PowerVR GPU设备。

DXT1S3 DXT1 texture compression. Supported on devices running NvidiaTegra platform.

S3 DXT1 纹理压缩。支持在设备上运行NvidiaTegra平台。

S3TCS3 texture compression, nonspecific to DXT variant. Supported on devices running NvidiaTegra platform.

S3纹理压缩。对于DXT多样性是非特殊的。支持在设备上运行NvidiaTegra平台。

我们首先举一个例子来更好的理解压缩,以及它世界上是如何运行的。以UI为例:

我的UI如下图:

【unity3d中的图形优化】

我将只关注背景图像,在选择背景图像时我能看到类似于下面的图像(inspector视图)。

这是默认的尺寸(没有压缩设置为真彩色):

【unity3d中的图形优化】

这张图像的内存大小是8.0MB。

监测视图设置显示如下图:

【unity3d中的图形优化】

纹理类型设置为高级,取消选中的Generate Mip Maps Check复选框。勾选Overridefor Android复选框(这将允许自定义压缩),选择格式为RGBA Compressed DXT5。

现在再看看下面图像:

【unity3d中的图形优化】

这张图像内存大小从8.0MB下降到了 2.0MB。

效果很好,现在尝试下ETC压缩。选择格式为RGBCompressed ETC 4 bits。

【unity3d中的图形优化】

文件大小下降到 1.0MB!

注意:压缩大小不仅取决于格式也取决于图像的类型。

内存尺寸小的并不意味着优化了(后面将渲染一些灯光)

如果使用mipmaps,那么存储将大约比单一的图像大三分之一。(我建议不要使用mipmaps为UI图像)

大多数据压缩格式要求文件分辨率为2的幂次方(就像例子中使用的是2048 x 1024)为高效压缩。

完整的图像存储内存大小的公式是宽*高*bpp,其中bpp涉及每像素的字节。所以选择的压缩格式取决于目标设备。

但我们不会把一个特别的设备作为目标。我们希望游戏在所有的设备上都是被支持的!!!

很明显,为什么要放弃甚至百分之一的市场份额呢?对吧?

幸运的是,我们不必太多担心关于iOS 设备,因为PVRTC是压缩纹理格式用于iPhone, iPod Touch, and iPad的每一代产品,

因此,只是压缩 PVRTC格式就可以完成了。

但是Android 设备呢?在不同的Android 设备上有不同的GPU。在它的文档中规定了一个关于Unity的问题。

尽管UnityAndroid支持DXT/PVRTC/ATC纹理,如果那些压缩方法没有被正在使用中的特殊设备所支持,在运行时,Unity将纹理解压成RGB(A)格式。

现在举一个例子,如果你压缩到DXT5格式,并在一个不支持该格式的设备上运行,纹理将不会被压缩到RGBA 32 ,也不会随着压缩存储在内存中。

因此在这种情况下,你浪费了解压材质的时间,并且材质不会被储存,这对渲染性能有非常大的负面影响。

因此解决的方案是使用ETC1 格式代替(标准格式),并且所有的GPU都是支持的。

ETC并不是完美的,因为ETC1不支持alpha通道。但是大多数游戏使用的材质或者2D精灵是使用alpha 通道的,那该怎么解决呢?

根据Unity我们有两个选择:

1)为DXT、PVRTC、ATC每一个格式创建独立的APK,并且使用 Android 应用商店的过滤系统为不同的设备选择合适的档案。

2)在必须使用alpha 通道时,转换成16位RGBA格式是权衡内存大小、质量和渲染速度的最佳选择。无需使用alpha 通道时,则选择ETC1格式。

就我个人而言,我更喜欢第二种选择,但是正如我之前说的视情况而定。

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:unity3d培训机构:如何用U3D显示截图
下一篇:蝙蝠飞行动漫制作教程-unity3d教程
选择城市和中心
贵州省

广西省

海南省