【Houdini】Copy to Points时Orient无效,原因是参数存在优先级

问题阐述

在复制模型到点集时,想控制模型的旋转值,但通过Attribute Randomize为点随机添加了orient值后,并没有效果。

用Grid当作点集测试却有效果,在大头的帮助下才知道在Copy to Points时,参数具有优先级,所以会出现一些参数无效的效果,这里就是由于本来存在transform,优先级高于orient。

复制参数优先级

http://127.0.0.1:48626/copy/instanceattrs.html

  • If pivot exists, use it as the local transformation of the copy/instance.

  • If the transform attribute exists:

    • Use it as a 3×3 or 4×4 matrix to transform the copy/instance.

  • If the transform attribute does not exist:

    • If the orient attribute exists:

      • Use it to orient the copy/instance.

    • If the orient attributes does not exist:

      • Orient the copy/instance using N as the +Z axis and up as +Y axis.

      • If N does not exist, use v (velocity) if it exists.

    • If the rot attribute exists, apply it after the above.

    • If pscale exists, use it to scale the to scale the copy/instance (multiplied by scale if it exists).

    • If scale exists, use it to scale the copy/instance (multiplied by pscale if it exists).

  • If trans exists, use it and P to move the copy/instance.

Or, put another way:

Key: 
X = pivot matrix (translate by -pivot)
O = orient matrix 
S = scale matrix (scale * pscale) 
L = alignment matrix (*) 
R = rot matrix 
T = trans matrix (trans + P) 
M = transform matrix

(*) The alignment matrix (L) is defined by N or v and up. 

IF N exists AND up exists and isn't {0,0,0}: 
   L = mlookatup(N,0,up) 
ELSE IF N exists: 
   L = dihedral({0,0,1},N) 
ELSE IF v exists AND up exists and isn't {0,0,0}: 
   L = mlookatup(v,0,up) 
ELSE IF v exists: 
   L = dihedral({0,0,1},v) 

IF transform exists:
   Transform = X*M*T
ELSE IF orient exists: 
   Transform = X*S*(O*R)*T
ELSE: 
   Transform = X*S*L*R*T

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值