网格合并之后物体的位置改变了_Houdini基础(一)使用点控制物体变换

0d19648dd097c68736a06dd63377a69b.png

在图形中变换是最基础的一种操作,大多数的操作都是从中演变而出,做为一个萌新一定要学会。

首先变换,Transform可以分为最基础的三种类型,Translate、Rotate、Scale,我们一点 点的分开讲解。

一、Translate

从二维的坐标系统中来看如何将A(红点)移动到B(绿点)的位置

d8a8e0c649901172ceb3a94f9cf5eb7c.png

在已知B的坐标下:用终点减去起点的坐标则可得到物体需要移动的向量。

B-A = (1,2) – (0,0) = (1,2)

A + (1,2) = B

在Hou中我们可以分解为这样的逻辑关系,我们想用一个点来控制物体的变换。所以我们需要一个点”Point_Pos”当做我们的点B,”Rest_PointPos”当作点A,这样就可以求出来物体跟随点位移的向量,之后让“Geometry_Input”加上这个向量就完成了效果。

91ec98f986dcbc16e559964df9a4b7ef.png

添加一个猪头,一个点{0,0,0}。

102feb6142aaa5c060f0433fab436e1a.png

baaf1c21dc16427f9935c0cc1ec771e1.png
用B-A得到的位移信息加在物体上

1d1cb9f50bbb067272cb0318e547c5a2.gif
位移效果完成

二、Rotate

制作旋转时我们先要给我们的点添加三个属性来标记一下他的空间信息。

68bbc4e3b1367ff41ce9b94244c90a82.png
赋予向量信息“类型”
addattrib

Note:在默认创建的v@xxx,或者声明的vector xxx,这些都是完全单纯的向量信息,对物体进行操作几何(移动旋转缩放...)的时候他们都是完全不会改变的,如果想要创建的vvector会随着transform节点旋转而像法线一样跟着变换方向就需要使用setattribtypeinfo来设置向量的类型为“vecotr”,“normal”。

现在进行旋转时点上的vector也会跟着动起来。

e667da157f08c86e1efdb95340dc9f2c.gif

这个时候我们就可以用这三个向量创建一个旋转矩阵了。

将B点的xyz三个属性调入组成一个3*3的矩阵。之后和物体的P先相乘,在把这个rotate过的P去和Translate向量相加。

a2566e02bf76da7bdc653ac66bee68ef.png
旋转矩阵的获取和应用

现在就完成了用点控制物体的位移与旋转。

9d5a4932d5e78274cdc99a7f6945c349.gif
最终效果

三、实际应用

自定义一个网格变形器。

eed71b00d1c84fa835b14a001769892f.gif
自定义的网格变形器效果

需要用到的技术

(一)点云读取网格附件最近的控制点信息。

(二)向量和矩阵操作。

da6366802a7ebec645616e39b54eda61.png

创建一个简化的网格(或者做max变形器拿着空间内n * n的晶格也可以)为现在的网格添加xyz坐标空间属性来为后续旋转做准备。

caead4dad7016cb6ab756d4a947303c6.png

将物体分开,一边做为静止模型一边做为变形网格。之后合并xyz三个属性变成tor矩阵。

Note:最后的合并xyz三个属性的操作一定要放在edit/transform这种变换了网格的节点最后,不然xyz三个属性是不会跟着物体的变形而改变的。

3f71a3cd71a6308924ada6c5112ef87c.png
matrix3 rot = set(v@x.x, v@x.y, v@x.z,
                  v@y.x, v@y.y, v@y.z,
                  v@z.x, v@z.y, v@z.z);
                  
3@rotate = rot;

添加一个pointvop,用之前的方法用要移动到的终点位置减去起点得到translate,之后在获取旋转矩阵。

26808f73cd8d6ae27aecbe60e24832fd.png
使用前文描述的方法得到变形需求的信息

035d395e172e0879f8559765860f8708.png
最终效果

最终我们就让静止的网格得到了实际上变形后会产生的信息,translate,rot。

下面开始最后的变形操作,这里将会涉及到之前单点变换物体没有使用到的“模型相对于点的局部位置”的保留。

新建一个pointvop,导入之前rest模型上面的三个信息。

3aa700823d780a5ce02dc52b68364a2b.png

5828ac244f91c8721b7d4f4ca9befc94.png
pcopen节点,还有三个pcfilter节点的设置

按照之前的思路,我们直接先P * rot + translate。

c8e1c4f708127c3b1460c5ee12ab1892.png

看起来好像是没什么问题,但是我会喜欢在这个的基础上加一次计算。

e9a3e8e74f6e713a3a4deb6dcd8b6837.png

计算出Geo相对于rest模型位置的vector,之后用rest的Pos加上这个vector,最后才进行之前的操作。

相对于。

3ec3c8907ae1dc6066d4bb251bd28abd.png

最后可能会感觉rot矩阵在这个效果中没有太大的效果,但是我还是写了进去,因为一些其他情况总是会用到的。

Reference:

https://user.qzone.qq.com/935588727/infocenter 基础的数学在hou中的使用。

[图文]旋转矩阵三维清华课件 - 百度文库​wenku.baidu.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值