[Houdini 程序化生成] 基于UV的生成工具



前言

开新坑喽(ow2真的好玩)
记得有点点乱,因为是跟着课和hda文件往下捋的


一、目标

在UE中拉的白盒,作为变量放入houdini 插件后,生成填满该白盒内部的自由堆叠的木箱。
教程指路:here第二章堆叠工具
使用软件:UE5 和 Houdini19

二、前置准备工作

Session Sync

首先是导出hda,可以参考这一篇,说的还蛮全的。

接下来是这个,困扰我非常非常久的问题,关于UE和Houdini的session sync。当时翻找了很久很久。下面记录一下我是怎么成功连上的。

我的问题是,它没有报错,ue甚至显示的是已经连接成功了,但是houdini做的调整没有实时反馈到ue上,也就是根本就没有同步成功。

首先是几个注意点
ue的连接端口
在这里插入图片描述
和houdini的连接端口
在这里插入图片描述
一定要是一样的。
并且,要找到自己的安装目录
在这里插入图片描述
我在外网上也有看到有人因为防火墙阻扰通话链接的,也可以试试。

其次,如果说自己直接打开houdini的时候一直用不了session,在ue里面打开houdini进行编写在这里插入图片描述打开之后只会有一个GlobalNotes节点,先去把houdini的通信点开了。在这里插入图片描述
如果连接成功,重建或者拖入新的HDA到ue的视图面板后,此时houdini会自动建成globalnotes1这种节点
在这里插入图片描述
或者几何体这种节点
在这里插入图片描述
这两种都会是新建出来的,才可以实现实时通话。
这两种的区别我也找了好久,这个DA的盒子图标,是子网套子网,最外层的子网就变成了这个图标,如图:
在这里插入图片描述
这个几何体的就是单层子网
在这里插入图片描述

点选
在这里插入图片描述
进入节点编辑,此后完成通信。

Ue的数据库

先创建一个结构,添加变量,如图所示
在这里插入图片描述在这里插入图片描述

再创建一个数据表
在这里插入图片描述
使用前面声明的结构
在这里插入图片描述
添加数据,并且让width、length、height,等于如下所示的数字(根据你自己添加的资产更改)
在这里插入图片描述
这样,前置准备工作算是完成了。

但是大悲,ue只支持商业版houdini打开并且编辑hda文件
他给的hda源文件用是OK的,但是要实时调试的话就寄了罢。

三、Houdini编写

第一小节:处理点

在这里插入图片描述
在这里插入图片描述
connective 做的就是把点编号,有相同数字的点连在一起。有点抽象,如下图:
对sphere单个连接connective:
在这里插入图片描述
全是0

对它和Cube的merge节点做connective
在这里插入图片描述
可以看到cube的都是0,sphere的都是1,这样就可以区分开两个物体来,在unpack节点中不会出现混合乱连的问题

接下来是attribpromote,就是变换属性节点
在这里插入图片描述
promotion方法
在这里插入图片描述
对于常见的四种属性:Point、Vertex、Primitive、Detail,前三者可以看这篇文章
detail是类似于全局变量的东西,比如对于刚刚那个例子,max = max(class)=1在这里插入图片描述
接下来
在这里插入图片描述

第二小节:制作放置平面

首先是scatter and Align节点,主要功能就是生成散点,但是功能强大,看链接吧(这个这个
在这里插入图片描述
这里有个我之前没怎么见过的用法 spare input
spare input 也是属于替代变量名,点击这里就可以添加了
在这里插入图片描述
添加后鼠标悬停,可以展示这个的代号,有了这个代号就可以在前文引用
在这里插入图片描述
接下来是把资产复制到散点图上
在这里插入图片描述
完成后长这样
在这里插入图片描述
接下来是调整大小,毕竟目前看起来每个相同种类的盒子都看起来一样大。
在这里插入图片描述
这里就有使用到 UV来完成大小缩放:UVlayout:
在这里插入图片描述
在这里插入图片描述
现在问题是,在打包过程中,我们一直使用的是max的,但是实际上,这样很浪费资源,所以我们把max变成fixed。但是这样造成了数据溢出,所以我们打开nonpacked属性,并且用blast节点把它删掉。
在这里插入图片描述
这样就算完成了基本的平面效果
在这里插入图片描述

第三小节:堆叠效果制作

在这里插入图片描述
在这里插入图片描述

  • partition节点:按照输入的规则将每个点放在以其自己为名的组中
  • 如果说自己需要一些更多的最大尺寸(Blast后有比较多的面),在前面更改尺寸步长
    在这里插入图片描述
  • clusterpoint 为了设定的聚簇点永远比pack后的点要多(即一个面一个聚簇),设置了一个没有实际物理含义的式子(ch(“npoints(-2)”)*1.5)。
  • 他这里有讲到由于UVlayout的一些bug,有时候会出现网格重叠的问题,这个时候用remesh调整一下就可以正常(这一块说实在的没有很懂,好像是uv布线导致了它会想把每一个分隔开的空间包装成一个独立的方形空间。)
    在这里插入图片描述
    到这一步,垂直叠加基本算是完成了
    但是还有一些活需要处理
    在这里插入图片描述

第四小节:真实效果制作

你可以选择让这些木箱子呈现出被打乱的效果。
有了上面的基础,看懂这一串应该不算难
在这里插入图片描述

总结

当时看的时候觉得有点难,捋完之后觉得,很精妙,学到了不少。
没有太管函数什么的真实用法习惯,复刻的时候遇到哪里有问题可以照着原工程试试。

猜你喜欢

转载自blog.csdn.net/woshi_wst/article/details/127332697