Houdini学习笔记032_金属掺杂石墨烯


不要问我金属掺杂石墨烯是啥,画这玩意儿也是我工作的一部分,它的结构一般长下面这样。

一般多边形建模时,我会选择一些边,坍塌为点,形成一个四配位的中心,周围是配位原子。典型的比如FeN4。更细节地,连接不同原子的化学键会参照所连的原子进行分段着色。

个别这种结构还好说,如果一次让你画二三十个甚至上百个,脾气再好都会有摔电脑的冲动。于是乎,我干脆用Houdini做了个自动在石墨烯面上生成金属掺杂结构的文件,画100个结构也就一秒钟的事。

制作流程较长,就不讲细节了,只介绍思路。
控制参数有以下这些,比如石墨烯(蜂窝面)的行列数、金属杂化原子的数目、位置随机种子、原子和化学键半径等。有些参数是在制作过程中添加的,Houdini最大的优势是可以随时随地对操作进行修改。

最开始是从蜂窝面出发,给所有点设置了三个组,分别是“carbon”、“hybrid”和“metal”。初始的点都是碳原子,所以carbon组的值为1,另外两组值为0。

然后随机选择一个面,再随机选它的一条边进行坍塌。随机选面我本来是用手动设置组的方式,但是数量多了之后还是麻烦,所以就用scatter的方式。找到距离点最近的那个面,放到一个组(prim)中。

寻找的方式用的是VEX,代码如下——

接下来是重头戏,我需要对prim组内的primitive进行如下操作:
(1)随机选一条边,获取两个端点的编号及坐标;
(2)找到和这两个端点相连的点,作为配位原子;
(3)所选边的中点处创建新的点,作为金属原子;
(4)对应的点进行连线,并根据类型分别设置组。

代码略长,如下所示(刚发现b站投稿提供插入代码块的方式,开心~~~)——
注意上述代码只对prim组内的面执行,所以Group一栏要选择prim。这一个节点过后,所有点和线的组就都设置好了。
而后用copytopoints节点创建球体作为原子:

用split节点根据组名把对应的线分离出来。

其中,连接碳原子的线是在网格面的基础上得到的。根据新的点组重新生成代表碳原子的点,即carbon_atoms。

然后用距离判定(nearpoints函数)来选择性连线,空出的部分就是掺杂原子所在的位置。

最后,将Atoms(原子)和Bonds(键)用merge节点合并。

后面没了。