Houdini KineFX 笔记

// space switch 功能

otl下载

让左边输入端(source_skeleton)的某个骨骼,跟随右输入端(parent_skeleton)的某个骨骼。

                     

 spaceswith_wrangle 代码 

#include <kinefx.h>
#include <kinefx_posedifference.h>

// Get joint data
string joint_name = chs("../joint") ;
string split[] = split(joint_name, "=");
if(len(split) > 1)
    joint_name = split[1] ;

int joint_id = findattribval(0, "point", "name", joint_name);
matrix joint_move_M  = pointtransform(0, joint_id) ;
matrix joint_stash_M = pointtransform(1, joint_id) ;


// Get space swtich
int chosen_space = chi("../spaceswitch") ;

// Transformation compoments used for blend
int components = chi("../components") ;

// Prep variables
string parent_parm ;
string parent_name ;
int parent_id ;

if(chosen_space >= 0 && chosen_space < chi("../config"))
{
    int i = chosen_space + 1 ;

    // Get parent data
    parent_parm = sprintf("../parent%d", i);
    parent_name = chs(parent_parm) ;
    split = split(parent_name, "=") ;
    if(len(split) > 1)
        parent_name = split[1] ;

    parent_id = findattribval(2, "point", "name", parent_name);
    matrix parent_stash_M = pointtransform(2, parent_id) ;
    matrix parent_move_M  = pointtransform(3, parent_id) ;

    // Get diference matrix
    matrix diff_M = joint_stash_M * invert(parent_stash_M) ;
    
    // Finall matrix
    matrix end_M =  diff_M * parent_move_M ;

    // Blend with input 0
    matrix blend_M = blendtransforms(joint_move_M, end_M, 1.0, components) ;
    setpointtransform(0, joint_id, blend_M,1);

}
View Code

 

 

 

posted @ 2024-11-30 23:56  鹏_VFX  阅读(62)  评论(0)    收藏  举报