首页 > Unity3D频道 > 【Unity3D研究院之游戏开发】 > Unity3D研究院之运行时合并ETC1、ETC2、ASTC、DXT1、DXT5、PVRTC贴图(一百)
2018
10-24

Unity3D研究院之运行时合并ETC1、ETC2、ASTC、DXT1、DXT5、PVRTC贴图(一百)

今天是2018年10月24日,祝大家程序员节快乐。

游戏中一旦有换装功能,角色可能就会是多个DrawCall了,所以我们可以将部件的贴图动态合并在一张中。如果想合并PVRTC2或者PVRTC4可以参考我上一篇文章。Unity3D研究院之IOS运行时合并PVRTC贴图(九十九) https://www.xuanyusong.com/archives/4531

这篇文章讨论合并ETC1 ETC2 ASTC4X4 DXT1 DXT5运行时合并方式,为什么把它们放在一起讨论,只是因为它们的合并算法都是一样的。DXT1和DXT5一般可用于PC包或者编辑器,ETC1 ETC2用于安卓手机,ASTC4X4用于IOS手机,如下图所示,像素排列算法。

Unity3D研究院之运行时合并ETC1、ETC2、ASTC、DXT1、DXT5、PVRTC贴图(一百) - 雨松MOMO程序研究院 - 1

核心方式是Texture2D.GetRawTextureData()获取贴图的原始数据,运行时使用需要开启贴图的Read/Write,如果出于节省内存的考虑,可以在编辑模式下提前提取贴图的原始数据,运行期在合并。

我们将256和128的贴图合并在一张512的PVRTC贴图中,排列的位置如下。(图片我就不再截取了,和上篇一致,只是换了个压缩格式)

Unity3D研究院之运行时合并ETC1、ETC2、ASTC、DXT1、DXT5、PVRTC贴图(一百) - 雨松MOMO程序研究院 - 2

代码中同时支持PVRTC2bit和PVRTC4bit,注意Apply()的第二个参数是true,表示合并贴图后立即删除内存拷贝,也就是Read/Write了。

ok!如果有建议或者意见欢迎在下面给我留言.

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

Unity3D研究院之运行时合并ETC1、ETC2、ASTC、DXT1、DXT5、PVRTC贴图(一百)》有 4 条评论

  1. CJ 说:

    请问,block , bytes 变量是什么意思,什么确定它们的数字啊

  2. Eureka 说:

    TextureFormat.ASTC_RGB_6x6 和 TextureFormat.ASTC_RGB_5x5 如何处理?

  3. lll 说:

    合并的时候GetRawTextureData ,JIT产生的GC怎么优化

  4. rico 说:

    材质参数不同有合并思路么

留下一个回复

你的email不会被公开。