pdg快速转换pdf源码_PDG 是什么,能构建 C/C++ 项目吗?

先说结论,能,但是 …… 别~ ¯_(ツ)_/¯

// 至少对于 17.5 版本,别~

前言

先说 PDG 是什么,这家伙全名 Procedural Dependency Graph,是 Houdini 自己捣腾出来的一个流程管理工具,神通广大,常听说的用法有批量处理 3D 资产以及批量生成 3D 资产,得益于它强大的流程控制能力、分布式调度能力以及 Houdini 自带的流程化 3D 建模、简化、烘焙、导出、渲染等能力,这货对大规模模型和场景的处理真的是一绝。

然而,我怎么会拿他做正事呢,早在 Houdini 宣传 PDG 概念的时候,我就觉得这货和 C/C++ 的构建系统挺像:处理依赖关系,并行编译生成中间结果,完了再汇总链接生成最终结果,这些操作在 PDG 中似乎都有对应概念。

折腾

试试看吧:拿来 Lua 做测试,先列举源码,然后添加 srcobj 属性,然后编译:

f7dc8ed584dfb305c0ab4a35e86d51bd.png

其中属性是这样的:

2c8efcede0ef57a4f3b667c4f3d805f1.png

编译是这样的:

7ea2109bc6b370237e2dd7c684ba3432.png

得到:

31c9d25547a2d01a521522327f664e8c.gif

与此同时:

607c4fd451f76f2de96e38e5599a82dd.gif

so far so good

然而链接的时候麻烦来了,Lua 源码里面带了两份 main,一个用于解释器 lua,一个用于编译器 luac,那么如何分开链接这两个可执行文件呢

—— 祭出 wedge 吧

wedge 一个排除项:

b2ecdeb815b95203870b9993def4ca93.png

然后根据这个排除项选择对应的可执行文件名:

2ad902a9a9f482fb12206f38d5b71dce.png

把该排除的文件排除掉:

87ab973a78476431fcab70e7d7ba04cb.png

然后再根据 exe 名称做个 partition:

b307b0243ac4679377ecd5c6b9e03dd2.gif

问题又来了,我拿到了这一堆 obj 文件列表:

00089e8552e680f2b8acfb89ae537b72.png

怎么把它们转换成一段空格分隔的字符串用于传给命令行呢,答案居然是写一段 python ...

work_item.data.setString('objlist',' '.join(resultData(parent_item, 'file', True, True)), 0)

当然到最后链接的时候倒是没啥事了:

5b556fcc43cfe1d8ad6a5ca2773e1707.png

cook -> 得到两个宝贝 exe:

2f7e65a20e7825f740553c8f8664acdc.png

随手测一下,应该没啥问题

全部流程如下:

0058cab7e4687413f27507b3be28ae2c.png

感受

  • PDG 的任务流程的描述的确是很直观 +1
  • PDG 的任务调度很厉害 +1
  • touch lua.c,再重新 cook,能够自动检测出 lua.c 有变化,只处理 lua.o 的编译流程以及 lua.exe 的链接流程 +1
  • 用 wedge 调节编译参数或者做自动测试似乎很合适 +1
  • Houdini 关掉重开,所有节点都是 dirty 状态了,不合适啊 -1
  • Houdini 别的地方都可以用 == 做字符串比较,唯独这儿得要用 strcmp,这什么毛病 -1
  • 输入文件之间的依赖关系难以表达 -1
    —— 用小零件拼大模型的时候也会面临这样的依赖关系吧!
  • 节点功能不够完善,离不开 python -1

总分: 0

所以总的来说,PDG 距离一个合格的 C/C++ 构建工具还是有点距离的

加油啊

// 滑稽保命

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值