最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
unity 批量处理贴图大小
背景介绍
在 Unity 中,默认情况下,场景烘焙后每张烘焙贴图的大小为 1024。然而,对于一些简单的场景,使用 1024 大小的贴图会造成资源浪费。例如,在我的一个场景的烘焙贴图中,右上角有一大部分区域完全未被使用,但依然占用着空间。
常规修改方法的问题
有时候,我们可能会尝试修改烘焙贴图的大小。之前我曾在 Inspector 视图中直接修改烘焙贴图大小,虽然贴图整体缩小了,但在手机上测试时发现存在问题,尤其是在接缝处理方面。而且,每次场景烘焙完成后都需要手动进行这样的缩放操作,这种方式并不可取,不建议采用这种直接缩图的方法。
解决方案:使用脚本设置烘焙贴图大小
由于 Unity 的烘焙菜单中没有直接设置烘焙贴图大小的选项,我想到了一个巧妙的办法,即使用脚本来烘焙场景并顺便设置烘焙贴图的大小。以下是具体的实现思路和代码:
脚本功能说明
Clear():该方法用于删除当前场景的烘焙贴图。Bake():直接对当前场景进行烘焙操作。我们还可以在烘焙场景之前添加一些额外的代码,实现脚本化的操作流程。maxAtlasHeight和maxAtlasWidth:分别表示每张烘焙贴图的高度和宽度。一般来说,每个场景使用一张 512 大小的贴图就足够了。需要注意的是,烘焙贴图的大小必须是 2 的幂次方,并且为正方形。
示例代码
[MenuItem("Test/Test")]
static void Init()
{
// 设置烘焙贴图的高度为 512
LightmapEditorSettings.maxAtlasHeight = 512;
// 设置烘焙贴图的宽度为 512
LightmapEditorSettings.maxAtlasWidth = 512;
// 清除当前场景的烘焙贴图
Lightmapping.Clear();
// 开始烘焙当前场景
Lightmapping.Bake();
}
使用方法
美术人员只需在 Lightmapping 窗口中设置好当前烘焙场景的参数,然后调用我们编写的拓展菜单方法即可。在上述代码中,我将烘焙贴图的大小设置为 512。
效果验证
通过上述方法,我们成功地将一张 1024 大小的贴图缩小到了 512,在效果几乎没有变化的情况下,贴图占用的空间缩小了 4 倍。以 IOS PVRTC 压缩为例,512 大小的贴图压缩后仅占用 170.8KB 的空间,节省了大量的资源。