欢迎光临散文网 会员登陆 & 注册

几何节点编织-图文版

2023-07-09 20:53 作者:Wrongre  | 我要投稿

昨天的编织视频,有同学问能不能出个教程,但我懒得再剪视频了,就用图文做个讲解吧,如果这里有没说清楚地方,可以随时留言给我。

首先说明一下,这个节点组的通用性比较差,不能直接套在任意的对象上,如何提高它的通用性,目前已经不是我能解决的问题了,所以我们只能具体对象具体分析。


首先说说这个编织节点的基本实现原理。

  1. 把对象的经纬线拆分开,这是所有操作的基础

  2. 沿着对象的原始形状对经纬线做波浪化处理(形成编织效果)

下面是实现的过程,图文里我们换一个新的对象,这次使用参数化形状的双曲面(Hyperboloid)做例子。

至于怎么绘制参数化形状,在以前的视频中我做过好几个例子,这里就不赘述了。

Hyperboloid

双曲面的分辨率这次做的是128*128,请注意,分辨率会直接影响到最终的编织效果,但究竟应该怎样选,我现在也不知道规律,针对不同的对象,请多做尝试,找到最合适的分辨率。

将对象的经纬线拆开(就是线框的横线和竖线拆成两部分,分别处理)。

最先想到的方法是直接将曲面转为曲线,这样同时就得到了经纬线

Mesh to Curve

但这样做得到不是经纬线,而是一段一段的短线(使用Trim Curve会发现这个问题,而道怎样连接多条曲线成为一条长曲线,所以这样做是行不通的)

Trim Curve

所以,这里采取的方法是通过分离边,实现经纬线的拆分。这个方法也不是通用的,我能确定的是利用uv计算的参数化形状肯定适用,但预设的几何对象因为索引不同,这个方法是不好用的。

经纬线的拆分节点

这里我们看到,经线(竖着的)没问题,纬线(横线)看起来却多出了一根没用经线连接(x轴的负方向上),这是原始Gird的一条边,而且在边的状态并不容易删除这根线,所以直接把纬线转换成曲线,然后利用索引关系,把纬线最上、最下和这根多余的经线删除了(操作省事,实际上少了两条线,但问题不大)

删除多余的线(为了看的清楚,将曲线转成了曲面,下同)

然后是沿着原始形状,对经纬线做波浪化处理。这个实际上比较简单,针对一条线,每隔一点(索引模2)沿着法线方向向内偏移,另一点向外偏移,就形成波浪了。

下面是实现要求的最简单节点组,需要注意的是,这里点没有像内偏移,这样会出现编织时无法穿插的情况,所以要做下调整,把选区变为方向指引

矢量的输入节点是从原始曲面继承的点法线

将模2的结果(0,1)映射到(-1,1)指定法线的偏移方向,再设置偏移的缩放,就可以实现双向偏移效果

双向偏移的节点组

然后要针对曲线,每隔一条曲线翻转一下向内向外的偏移,这样就形成了编织的扣子。做法就是将曲线的索引模2,然后将法向缩放翻转。

效果图截取了顶视图,更容易看清效果(下图是曲线未偏移时的状态)

注意,上面的节点组虽然只用了一个index,但它有两重含义,连接到set position的,指的是每条线上“点”的索引,连接到map range的,指的是每条曲线自身的索引。(几何节点的逆推形的结构,从右到左决定属性,而不是从左到右)

到这一步后,后面的过程就是组合经纬线,实现最终的效果了。

还有一点要说的就是,如果发现经纬线的偏移恰好重叠了,就再翻转一下其中一方的法线缩放即可。最终的全部节点组如下

注意上面法线缩放前的乘法,乘数是负数,相当于翻转了缩放方向
选择个角度渲染一下

可以看到x轴的负方向还是有穿帮,但是——真正的编织物也有起头和收尾的地方吧,所以就不要求那么高了(笑)

那么,这个图文就到这里了,有任何问题欢迎留言。

几何节点编织-图文版的评论 (共 条)

分享到微博请遵守国家法律