我有一个资产包我正在使用一些高质量的tga纹理,在2048x2048。其中有250个,这意味着我的Asset文件夹很大。我知道对于某些渲染案例,.tga优于.png,但对于我的用例,可移植性比纹理质量更重要。
我想将所有这些.tga转换为.png,然后更新所有Material引用以使用新的.pngs。删除旧的.tga是完全没问题的 - 我不需要保留它们。我知道如何轻松地批量转换图像;我只想更新.mat文件中的引用以使用新纹理。
纹理全部用于使用标准着色器的材质,用于Albedo,Metallic,Normal Map或Occlusion等字段。没有奇怪的自定义着色器我需要更新参考资料。
有自动方式吗?
答案 0 :(得分:3)
IMO最简单的方法就是替换原位文件,保留.meta文件,这样guid就不会改变。这样你甚至不需要更新材料引用,这在Unity中总是很痛苦。
程序:
您可以使用简单的批处理或shell脚本自动重命名(步骤3)。如果您的项目受源代码控制,请使用CVS的命令行重命名界面来保留纹理'历史。如果不是,那么显然你制作了项目的备份副本。
作为旁注:
我知道对于某些渲染案例,.tga优于.png
事实并非如此。当Unity导入纹理时,它会将它们转换为GPU /平台特定的格式(这在库中),并且纹理的原始格式没有区别。
对于我的用例,可移植性比纹理质量更重要。
PNG具有无损压缩选项,因此您可以同时拥有更小的尺寸和像素完美的质量,与TGA相比没有任何缺点(除了可能由于解压缩导入时间会略长)
从@escapecharacter编辑: 这非常有效。这是我所做的文件的记录。仅供参考,我在Windows上使用bash。我的项目是在版本控制中跟踪的,所以我对打破更改并不小心。从我的纹理目录:
转换.meta文件:
for i in *.tga.meta; do git mv $i ${i/.tga.meta/.png.meta}; done
要将.tga转换为.png,我使用了通过choco安装的ImageMagick:
for f in *.tga; do magick ./"$f" ./"${f%.tga}.png"; done;
清理.tga:
rm *.tga