在Unity中,我想将一些纹理从.tga批量转换为.png并更新引用

时间:2018-03-02 15:04:18

标签: unity3d

我有一个资产包我正在使用一些高质量的tga纹理,在2048x2048。其中有250个,这意味着我的Asset文件夹很大。我知道对于某些渲染案例,.tga优于.png,但对于我的用例,可移植性比纹理质量更重要。

我想将所有这些.tga转换为.png,然后更新所有Material引用以使用新的.pngs。删除旧的.tga是完全没问题的 - 我不需要保留它们。我知道如何轻松地批量转换图像;我只想更新.mat文件中的引用以使用新纹理。

纹理全部用于使用标准着色器的材质,用于Albedo,Metallic,Normal Map或Occlusion等字段。没有奇怪的自定义着色器我需要更新参考资料。

有自动方式吗?

1 个答案:

答案 0 :(得分:3)

IMO最简单的方法就是替换原位文件,保留.meta文件,这样guid就不会改变。这样你甚至不需要更新材料引用,这在Unity中总是很痛苦。

程序:

  1. 将TGA批量转换为PNG(Unity关闭或至少未聚焦)
  2. 删除所有TGA,但不删除关联的.tga.meta文件
  3. 将所有.tga.meta文件重命名为.png.meta
  4. 然后重新打开/重新聚焦Unity,让它重新导入:你应该全力以赴。 Unity认为纹理是相同的,只需要重新导入。它甚至会保留导入设置。
  5. 您可以使用简单的批处理或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
    
相关问题