houdini帮助文档_edge wrangle在houdini的vex优化与应用

1dee81bddb0cbe47d807c250728783f7.png

开源于:

五行精灵:开源1000+HDA;FeELib for Houdini使用指北​zhuanlan.zhihu.com
3242cd22f39e0579e94ee91f27600d1d.png

首先是原理

案例在后面

众所周知houdini的polygon内有三个calss:prim,point,vertex,没有edge class

但我们很常用的一个SOP

convent line SOP

理想上应该是用run over edge的思路去制作

当然官方不是,而是run over points,那就会造成效率浪费,有没有办法呢?

用FeE Convert Line SOP()

——如果你装了fee lib,输入ew就能看到,下面会介绍用法和原理

90bbb759cb7251b67a065cf41a927dc7.png

首先我们来看half edge(以下简称hedge)

此处需要有houdini官方帮助文档搜索half edge的基础,再看后面的

http://127.0.0.1:48626/vex/halfedges

以下是官方文档没有的:

我们得出了性质:

每一个hedge,都和一个vertex一一对应

hedge == vertex

2308a29a67168349aa17aa7e6b7f6510.png

当然,不是每一个edge都和1个,或2个vertex(hedge)一一对应

如上图所示,egf三条he,分别属于三个prim,共同属于一个edge

因此,我们写edge wrangle(run over edge)

只需要先run over vertex (注:等同于run over hedge)

加上两行代码即可

int hedge_nextequiv = hedge_nextequiv(0, @elemnum);

if ( @elemnum < hedge_nextequiv ) return;

863cf14cf8895a33da9edb96a6098253.png

hedge_nextequiv()的意思就是

上图中egf三个hedge分别是上一位hedge的hedge_nextequiv,如下

hedge_nextequiv(e) == g

hedge_nextequiv(g) == f

hedge_nextequiv(f) == e

@elemnum < hedge_nextequiv表示:

拿到egf三条hedge中编号最小的,这样就防止了重复计算

但这时候又出了新问题:

对于unshared edge

hedge没有hedge_nextequiv(),或者说,hedge_nextequiv(e) == e(他自己)

8d95336388fe3eb150f726bed047b8c4.png

因此我们要区别对待

int hedge_nextequiv = hedge_nextequiv(0, @elemnum);

if ( @elemnum < hedge_nextequiv ) return;//includeunshared

if ( @elemnum <= hedge_nextequiv(0, @elemnum) ) return;//excludeunshared

c49397e01ccc55aff40ca2784a41deb5.png

但这时候又出了新问题:

对于一条线,他是有两个vetex,一个edge

21dba82a341a6da1bbb88fa670a1b171.png

精灵的个人约定:最后一个vertex也算是有hedge,虽然,它不存在

同时,对于0号hedge,如上文所述,其hedge_nextequiv()是自己

对于1号hedge,hedge_nextequiv() == -1

e6b8ef8dde207cbc207dde7691d8a067.png

所以我们的edge wrangle最终版本:

int hedge_nextequiv = hedge_nextequiv(0, @elemnum);

if ( @elemnum < hedge_nextequiv || hedge_nextequiv == -1 ) return;//includeunshared

if ( @elemnum <= hedge_nextequiv(0, @elemnum) || hedge_nextequiv == -1 ) return;//excludeunshared

fc1c33a92003a6275f24762053d90dd2.png

案例:FeE Convert Line(开源,具体可以看fee lib)

核心代码非常简单,剩下的都是属性传递

5b3f8d21fc305fe728a01d09b70447cc.png

35f1ea7a5a288743fcc09e99e02bdeef.png

FeE Flat Edge

根据边的角度,给边打组,有阈值的设定

9cce0708d23782f0519602d02306efe9.png

dccf4a8c672478358bd8ac477e133432.png

这个SOP就需要run over edge进行处理效率最高,算法很简单,只要理解了上面说的

8f2a1182dd328bd83d482b5d4f4da798.png

FeE Group Edge by Direction

顾名思义,对每一个面判断其朝向,为其打组

065c5d386ce2b62793864a8ab3bc6d02.png

FeE Group Edge by Length

更多案例精灵一下想不到,先写到这了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值