制作诚宵宫开始碰到面数较高的几何体udim多项线烘培遮罩的问题,bakemaster目前无法channel packing udim贴图,后来我找了ue的channel pack插件诡异的是效果不对,而且要批量处理也是个问题。
再然后我考虑拆分packedATexture把打包的遮罩拆分,但又发现udim烘焙只有1001 1002两个uv单元输出正常其余都丢失了,然而在blender internal中遮罩贴图显示正常,在uvEditor中的image菜单save all images,输出丢失的那些uv单元会被替换从而正常。
目前还有两个问题一个是udim贴图通道打包不成功。另一个问题是bakemaster中Uv Map Type无法保存预设,一直是默认的single。
2024-5-19更新:
Uv Map Type无法保存预设的问题我把bakemaster插件的utils.py默认的排序改了,经测试没有问题。
更新了MaterialConvertInstance实测成功。
通过这段代码可以把选中物体批量做smart uv unwrap。
在smart uv unwrap之后选中物体所有面进入uv editor,uvpackmaster在groups independent模式下可以批量做uv 打包。
一个项目中30多个复杂高面数需要udim unwrap的物体blender应该没有压力。
2024-5-20更新:
经过大半天盘问chatgpt,udim贴图的通道打包通过外部python程序解决了
今天换了个思路折腾了一天,我看在photoshop中通过图层混合选项分组打包通道没有损失于是想如何利用photoshop控制自动批量打包通道,上来先是想python,不过ps并没有自带支持python的脚本编辑器,github上的外部插件没啥社区支持,太难了放弃。ps中文件菜单下有自动批处理、脚本,首先批处理我也想过,但这涉及要操控多个源文件夹,ps的批处理最多设定一个源文件夹,我的应用场景是对多个子文件夹的贴图各自创建文档加载贴图到不同图层然后设置通道显示。要把多个图片加载到同一个ps文档里用批处理是做不到的,这看起来很基本的操作网上也没多少帖子有操作说明,直接让chatgpt写ps的js脚本那是一团糟的不懂装懂,而且ps的js都不好调试,出错了也不知道啥情况。在ps官网讨论上看到,拿了下面的代码试了下,里面有个链接正好包含了打开一个文件夹将所有子文件夹中包含的3个图片加载到一个ps文档且为独立图层。
接着是对图层通道显示设置,我原以为这很容易解决了。没想到这里面设计很复杂的ps内部逻辑api。在这个贴子最下面的代码演示了如何用ps的scriptlistener相关api控制通道显示。我试着让chatgpt在这个基础上修改实现了对当前打开文档的指定图层控制通道显示。
最后就是将两段代码合起来并输出,这里还涉及到一个难点,输出格式要.exr不是简单的在文件名加个.exr后缀就解决了。我发现psd导入ue居然打不开,本来是想偷懒直接用psd完事的,psd打不开我也没想转换tiff、png啥的就咬牙去搜exr的保存方式。
最后就是把bakemaster输出的贴图文件归类子文件夹,这个想想也不算难度太大就是一个正则表达判断文件名,python两下搞定了。
ue实测三通道重复的单一贴图和打包合并的贴图质量一样且资源大小一样,意味着节省了多余的两份贴图。
我把bakemaster 通道打包需要的两个脚本放在这个文件夹下,使用方法是先用blender python脚本对选中的物体smart unwrap,进入面模式用uvpackmaster在group indepentent模式下可以对物体各自做uv packing,确保x顶个设置,uv texel density统一设置100差不多。
2024-12-23修改版:
原先的版本smart unwrap是把所有物体在一个tile中unwrap,新版本则是逐个对每个物体unwrap。另外对于bakemaster的autounwrap 面数多的物体texture density急剧下降的问题,我发现可以在bakemaster中调节unwrap的margin,调为0即可实现手动smart unwrap的效果保证最大texture density.
1 | |
bakemaster批量烘焙好贴图后,运行“把物体对应的3个贴图分类子文件夹.py”创建子文件夹归类,打开ps>文件菜单>脚本>浏览,选择”对子文件夹中包含的exr添加到独立图层并保存psd文件.js“在弹出的对话框选择bakemaster输出的贴图目录,js脚本会将贴图打包通道并保存修改文件名至指定文件夹,大功告成。
1 | |
1 | |
评论