游戏开发 - 图片加载,图片格式与图片压缩

图片加载

图片加载流程 

 在游戏开发中,图片加载的过程涉及CPU, GPU,和内存之间的交互。

请求加载:当游戏需要显示某张图片时,CPU会发出加载请求,并根据当前的游戏状态决定哪些资源需要被加载。

读取资源:CPU会从设备的闪存或内部存储中,读取图片资源,这些图片数据会被加载到设备的RAM中,以便CPU进行后续处理。

解码和处理:如果图片是压缩格式,比如PNG或JPEG,CPU会对其进行解码,并转换为个用于渲染的像素数据。

传输至GPU: 通过图形API(OpenGL或Vulkan),CPU发送指令,将图片数据从RAM复制到GPU的显存中。

GPU处理:GPU会将图片(纹理)映射到场景中的物体上,准备在渲染过程中使用。

渲染过程:GPU会根据当前场景和摄像机视角,将已加载的图片(纹理)渲染到屏幕上。

 

图片加载时的性能消耗

 

内存消耗:加载大量图片会占用主内存(RAM)和显存(GPU内存),如果内存消耗过高,可能会导致设备性能下降。同时,频繁的加载和卸载图片可能会导致内存碎片化,使内存使用率降低。

CPU消耗:在图像加载时,CPU需要解码压缩的图片格式(如PNG和JPEG), 这一过程会消耗CPU资源。同时,CPU将数据从存储读取到内存,以及从内存传输到GPU,过多的 I/O 操作也会导致CPU性能瓶颈。

GPU消耗:GPU在渲染时需要加载纹理,频繁的加载会导致GPU负担加重,影响渲染效率。同事,如果一次性加载大量高分辨率纹理,可能导致GPU渲染时出现延迟或卡顿。

存储I/O和带宽限制:从存储中读取图片数据可能受到存储设备速度的限制。

加载时间:在场景切换时,如果需要大量加载新的图片资源,如果这些加载和渲染过程都在主线程中进行,可能会导致游戏卡顿。

 

因图片加载可能出现的潜在风险和建议

风险:

使用过高分辨率的纹理:使用过多高分辨率纹理会增加内存和显存消耗,影响加载速度和渲染性能

频繁的资源切换:频繁的加载和卸载资源会导致性能下降

不合理的资源管理:缺乏有效的资源管理策略可能导致内存泄漏和性能下降

 改进建议:

纹理压缩:使用纹理压缩格式(如ETC2,PVRTC)来减少内存的占用和加载时间

异步加载:在后台异步加载图片资源,避免主线程阻塞

资源预加载:在需要之前,提前加载常用资源,以减少加载延迟

动态资源管理:实现合理的资源管理策略,根据需要动态加载和卸载资源

使用LOD :根据视距选择合适分辨率的纹理,减少不必要的内存消耗


 图片格式

什么是压缩纹理

压缩纹理是将图像数据通过特定算法进行压缩,以减少存储占用和提高加载速度的纹理格式。在手机游戏中,压缩纹理格式如ETC2, PVRTC和ASTC能在GPU中直接解压,这些压缩格式在设计时考虑了硬件加速的需求,通过特定的算法和数据布局,使得GPU能够快速解码,而不需要CPU进行额外的解压处理。

 

使用压缩纹理的优势

节省存储空间:压缩纹理占用的内存较小,能有效减少游戏资源的存储需求,尤其是在移动设备内存有限的情况下

加载速度快:由于数据量减少,加载压缩为例所需的时间通常短于非压缩纹理,能提高游戏的加载效率

性能提升:在GPU处理中,压缩纹理格式可以直接在GPU中解压,减小了CPU解码的负担,提升渲染性能

 

使用压缩纹理的缺点

图像质量损失:压缩过程中可能会丢失一些图像细节,尤其是在低比特率压缩式,图像可能出现明显失真

解压复杂性:某些压缩纹理格式的解压算法较为复杂,可能需要额外的计算资源

支持问题:并非所有的设备都支持所有类型的压缩纹理格式,可能需要根据目标平台选择合适的格式

 

常见的压缩纹理格式及算法

ETC2 (Ericsson Texture Compression)

  • 原理:ETC2 是基于前一代 ETC 的改进版本,专为 OpenGL ES 3.0 及以上版本设计。它支持 RGB 和 RGBA 格式的纹理压缩。
  • 算法:ETC2 使用块压缩的方式,每个 4x4 像素块被编码为 64 位数据。这些数据包括:
    • 色彩信息(色调和亮度)。
    • 纹理的不同模式(如 RGB、RGBA),允许透明度的支持。
  • GPU 解压:GPU 内置的解码器可以直接处理这些 64 位数据,利用硬件进行快速解压和采样。

PVRTC (PowerVR Texture Compression)

  • 原理:PVRTC 是 Imagination Technologies 开发的纹理压缩技术,广泛应用于 iOS 设备。它设计用于低带宽场景,尤其适合移动设备。
  • 算法:PVRTC 将图像分为块(通常是 2x2 或 4x4 像素),通过预测模型来减少需要存储的信息。编码后的数据包含颜色和透明度信息,允许进行逐像素解码。
  • GPU 解压:GPU 在渲染时能够快速访问 PVRTC 格式的纹理块,利用硬件解码器直接解压,减少了 CPU 的负担。

ASTC (Adaptive Scalable Texture Compression)

  • 原理:ASTC 是一种灵活的纹理压缩格式,支持多种压缩比和纹理大小,旨在提高压缩效率和图像质量。
  • 算法:ASTC 采用块状编码,可以处理多种像素格式(RGB、RGBA、HDR),并允许开发者选择不同的压缩比。每个块包含颜色和透明度信息,使用不同的压缩策略以适应内容类型。
  • GPU 解压:ASTC 设计了高效的硬件解码算法,使得 GPU 可以在采样时快速解压缩这些块,极大地提升了性能。

 

压缩纹理格式的转换

 

压缩纹理的资源管理方式

 

后续的问题

反走样与在游戏中的影响

采样方式与游戏中的影响

 Gamma Correction 线性与非线性图片

posted on   JackCloud  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示