substancepainter怎么导出贴图

substancepainter怎么导出贴图【程序化工作流的优化】打通Unity,Houdini,Substance Painter之间的墙效果演示演示视频:【【Unity+Houdini+Substance Painter】PCG建模自动化流程演示】 【Unity+Houdini+Substance Painter】PCG建模自动化流

【程序化工作流的优化】打通Unity,Houdini,Substance Painter之间的墙   效果演示   演示视频:【【Unity+Houdini+Substance Painter】PCG建模自动化流程演示】 【Unity+Houdini+Substance Painter】PCG建模自动化流程演示_哔哩哔哩_bilibili   前言   本文简单聊聊基于unity,houdini,substance painter的程序化工作流,然后再聊聊贯穿三者的工作流优化。   我自己的建模PCG流程   看到标题有houdini和substance的朋友应该知道要优化的这个工作流肯定是PCG。   建模流程顺序是Houdini制作HDA后,输出模型,法线图,材质ID图。然后全部导入substance painter里,依据材质ID图,布置好各个材质。确定好材质遮罩都正确无误之后,保存材质合成用的spp项目文件,并且输出各纹理,一般是PBR的那套输出。当然输出的纹理颜色通道合成格式,根据unity内的材质需求而定,颜色通道合成格式的设置这一步也在spp制作中完成。最后一步,就是把模型文件(fbx)和纹理贴图(png)导入unity工程,设置好材质就完成了。
substancepainter怎么导出贴图
substancepainter怎么导出贴图   这个工作流很繁琐,因为要在三个软件之间来回切换。houdini做好hda,导出模型,遮罩纹理。再打开SubPainter,导入模型纹理,根据材质ID的遮罩把对应的材质赋上去,如果有颜色需求还要对应改颜色。弄好之后,再导出最终的贴图纹理。然后再打开unity把hda,模型,纹理贴图导进unity,创建正确的材质再添加给预制体或者mesh。到这一步还只是第一次的预览完成,后续调整HDA时uv展开一改变就又要跑一遍上述过程。   整个过程过于繁琐,而且houdini和subPainter在第一次工程创建配置好之后,要做的修改都非常少,基本只有点几个按钮,然后导入导出资源的操作。   那么作为一个程序员,就非常有义务优化这个工作流程。我希望达到的效果是,在制作好HDA,SPP项目文件和prefab预制体之后,在unity环境下调整HDA参数,然后只要一个按钮就自动跑通流程,不需要切换软件界面,直接在unity的scene窗口看到模型更新且材质,纹理,UV都正确。   了解完需求,那么只需要按步骤实现功能即可。   各软件的自动化   Houdni: 导出fbx模型,材质id映射贴图,法线贴图。   通过hda的scripting,使用python编写需求:主动触发烘焙模型的rop_fbx节点的save to disc按钮,烘焙法线和材质id映射的rop_render节点的bake按钮。   我的做法是把3个导出资源用的节点在HDA的scripting的python module中,执行触发按钮的操作:   SubPainter: 更新fbx模型和材质id映射贴图,然后烘焙导出新贴图   SubPainter官方提供了Python API和Remote Scripting模式,这两个工具可以帮助用户实现自动化。如果要从外部通信SubPainter调用他的PythonAPI,必须使用Remote Scripting选项启动SubPainter。官方文档给出了启动用的shell指令。我的做法是把指令编写成ps1,然后unity内c#脚本运行这个ps1文件。   启动完成后,便可以在外部用Python操作了。特别提醒,有些旧版本SubPainter的Python API不全,关于模型Mesh的操作等一些接口是没有的。我直接买了steam版本的Sub3DPainter2023.虽然更贵,但是方便。存steam库里随用随下,不用记序列码。如果是想跟着本文搭建工作流,建议使用最新版本,或者2022大版本的SubPainter   为了方便大家看代码,我就不拿remote模式下的python代码讲解,先用常规用法(SubPainter内的python指令)介绍每一步操作。   1.准备工作:打开spp工程文件   2.导入需要更新的模型   3.导入新纹理:材质ID映射图,高模烘焙过的法线贴图   这里是可以自行选择在Houdini里烘焙高模法线,还是subPainter里烘焙。我用的是houdini的烘焙,原因是不会产生高模这个中间产物。而且一般高模的文件大小都动辄十几,甚至几百mb。   4.更换工程id映射,法线纹理为导入的新纹理   5.烘焙最终的PBR(不一定是PBR,根据实际情况而定)材质贴图   Unity: 搜刮之前的生产出来资源,进行组装   这一步是最简单的(对于我这个写了很多Unity编辑器的人而言,python和powershell不熟,写的真的很辛苦)。创建场景内GameObject的,添加mesh相关的组件,然后生成材质(设置shader,设置纹理贴图)放到模型上。大功告成。   软件之间的通信   每个软件各自的通信是实现整个流程自动化的重要一环。只有通信建立了,才能让整个工作流无缝衔接。打通Unity,Houdini,Substance Painter之间的墙,最关键的就是建立通信。   一般比较重视开发向用户的公司,他们的产品都会提供远程操作(或者,供命令行调用的参数配置)的接口。houdini和substance系列的产品都有官方提供的remote scripting手段。那么根据需求,我要实现unity与houdini的双向通信,unity和subPainter的双向通信。   建立unity本地服务器   unity使用socket建立tcp服务,接受客户端(houdini,subPainter)的命令。   Houdini的本地远程操作   我使用了houdini官方提供的Python Scripting中的RPC方案,用来实现参数同步和资源生产的启动。   可能有人会问,参数同步为什么不用houdini engine自带的session sync呢?我也想用啊,官方演示的效果也很好,我拿了unity新手包里的hda测试session sync用下来感觉也很好。但是,session sync只要加载我自己制作的某些hda,Houdini就直接卡死,然后Unity也跟着卡死,最后我也卡死。我去sidefx的houdini社区里找解决方案,发现有跟我一样遇到这个问题的几位兄弟,但是那个帖子都两年了也没有相关人员或者社区好兄弟sigusoft个解决方案。我也没辙,我唯一能确定的就是这个bug是hda里的某些节点或者参数导致的。但是我不可能削足适履,反过来改我的hda啊。官方对houdini engine 的态度又一直处于摆烂的状态(Unreal那边还算好的,毕竟都成兄弟,Houdini Engine for Unreal还在持续维护和更新,unity这边真的和弃婴一样)。   所以我干脆直接放弃session sync,自己手动做参数同步。原本我打算在houdini里自己写tcp客户端接受指令,还好houdini有最后一丝的怜悯有个官方封装好的RPC方案。省了一大堆工作量。houdini官方RPC方案文档:RPC (sidefx.com)   rpc干两件事:同步参数到houdini(包括生成hda实例)   2. 启动资源生产   Substance Painter的远程操作   Adobe官方文档给出了SubPainter的远程使用说明,还给了案例,非常清楚。官方文档:Remote control with scripting | Substance 3D Painter (adobe.com)   总共3步:   1.Remote Scripting模式启动Substance Painter   可以使用power shell或者System.Diagnostics来执行启动指令。   2. 建立remote服务器   非常简单,复制官方文档提供的lib_remote 作为模块保存即可
substancepainter怎么导出贴图
substancepainter怎么导出贴图port端口显示连接的是60041   这里提一下,官方没有明说port自选,默认了60041。就是说Unity Server的port需要避开60041。当然,最好的方式是lib_remote的port也由我们自己控制。   3.使用远程指令调用SubPainter的python api   上文SubPainter自动化的部分中提到了“我没拿remote下的python代码做介绍”,现在介绍把自动化代码remote执行的手段。下面拿打开spp工程文件为例子:   小结   到这里整个自动化流程的所有要素就都完成了。那现在我简单聊一下我想到这个自动化工作流的契机。   我在使用Substance Painter的时候发现他的mesh map中的ID Map(也就是材质映射用的颜色遮罩),在更新id纹理后,原本项目通道里的基于id map的mask都对应自动更新了。于是我就想,这么方便不做材质纹理的自动化生成太可惜了。原本以为整个自动化的搭建过程中,Substance Painter部分最难处理,结果,Houdini成功的用Houdini Engine For Unity告诉了——没事儿的话,少碰这几把玩意儿。   整个过程我断断续续的搞了一周,上班摸鱼也搞,结果subPainter和Unity的部分加在一块儿也就两晚上调通,剩下五天我都在被这弱智session sync折磨,想破头的给他找替代方案。到最后真被气笑了。   工作流的缺陷与不足   这个自动化工作流是针对程序化建模师的,所以不考虑材质的生产,但是要考虑材质的分布和使用。这一点Substance Painter已经帮助解决大半了。但是有一个问题我在搭建时没有想到比较好的处理方案:贴花。   用过Substance Painter的兄弟应该都知道他提供了贴花的功能。贴花能够丰富模型的细节,特别是一些机甲,喜欢贴一些工业标签增加机械美感。   但这个贴花是在Substance Painter里做的,意味着我无法编辑和自适应。因为整个自动化工作流,只有启动前的参数控制,而参数只影响hda的部分,整个sub painter在工作流的第一次搭建完成之后都是黑箱状态,无法干预。   对于这个问题,我尝试了在houdini中创建针对贴花的mask纹理,然后和id map合并,再在substance painter中识别使用。这个方法确实在houdini中完成了贴花,但我的手段有限,导致贴花的mask很糊,有明显锯齿。整体效果还是没法和subpainter里的贴花比。   另一个缺陷是我本人目前对houdini engine的session sync参数同步还没有完全解析完。像curve,多维参数(Vector3,Vector2),等等这些类型的参数,我还不知道怎么规范参数的传入。所以如果hda的参数包含Curve等类型,就不会被同步到houdini的hda节点中。这个缺陷还算容易弥补,之后慢慢自己琢磨就行了。   后续   这个工作流之后我会整理到我之前的开源插件里(【Unity + Houdini 插件】HDA助手 – 知乎 (zhihu.com))。现在的版本还有不少中间变量和参数没有做到通用兼容,还需要整理和规范。应该过几天会更新插件。   最后说明一点 ,这个自动化工作流是我臆想的程序化建模师的工作流,我不清楚现在一些实际应用和生产里是不是这样的逻辑。所以本文只能作为参考。如果你对这个自动化工作流的搭建感兴趣,欢迎一起讨论。
substancepainter怎么导出贴图
substancepainter怎么导出贴图   PCG交流群:

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/84201.html

(0)
上一篇 2024年 7月 27日
下一篇 2024年 7月 27日

相关推荐

关注微信