スネークスケールの動きの解決策を探しているとき、私は 'リベットスクリプト'を見つけました。剛体のオブジェクト(尺度)を一貫した点で変形する必要があります。スクリプトはすごくうまくいっていますが、今度はさらにtdプロセスに移行するために、私が解決する必要があるいくつかの側面があります。子供がどのように動くかを指示するために、親ポリゴンから得られた頂点の法線ベクトルに加えて、追加の制約方向が必要です。 2次方向がオブジェクトのフロントエンドに向かうエッジの流れに従うように、スクリプトを試して変更する計画です。私は、このベクトル方向をエッジ自体から簡単に取ることができると期待していますが、それはそれほど単純ではないかもしれないと感じています。 hoodiniのドットプロダクトとクロスプロダクトを使用して、この種の制約に基づいたリレーションシップを行う経験は限られていますが、Mayaではそれが私にはもう少し挑戦的です。私はもう一つの方向性しか必要としないと確信しています。これを解決する方法に関する提案はありますか?私はあなたに良いアイデアを与えるために、低ポリテストオブジェクトにいくつかの画像を添付しました。最初の部分は休息位置にある曲線を示し、2つの2番目の画像は2次曲線が「ヘビ」の体表面に沿った理想的なベクトル位置からどのように逸脱しているかを示しています。ここでMayaの親オブジェクトに二次的なコントロールの方向を追加
は、参照ピクチャ https://drive.google.com/file/d/0B1O6s3CJ1wwlN1lOS1E1ZXVuOVk/view?usp=sharing
へのリンクとともにスクリプト https://www.creativecrash.com/maya/script/rivet-button/description#tabs
へのリンクであり、ここでのスクリプトで、
// Copyright (C) 2000-2001 Michael Bazhutkin - Copyright (C) 2000 studio Klassika
// www.geocites.com/bazhutkin
// [email protected]
//
// Rivet (button) 1.0
// Script File
// MODIFY THIS AT YOUR OWN RISK
//
// Creation Date: April 13, 2001
//
//
// Description:
// Use "Rivet" to constrain locator to polygon or NURBS surfaces
// Select two edges on polygon object
// or select one point on NURBS surface and call rivet
// Parent your rivets and buttons to this locator
global proc string rivet ()
{
string $nameObject;
string $namePOSI;
string $parts[];
string $list[] = `filterExpand -sm 32`;
int $size = size($list);
if ($size > 0)
{
if ($size != 2)
{ error("No two edges selected");
return "";
}
tokenize($list[0],".",$parts);
$nameObject = $parts[0];
tokenize($list[0],"[]",$parts);
float $e1 = $parts[1];
tokenize($list[1],"[]",$parts);
float $e2 = $parts[1];
string $nameCFME1 = `createNode curveFromMeshEdge -n "rivetCurveFromMeshEdge1"`;
setAttr ".ihi" 1;
setAttr ".ei[0]" $e1;
string $nameCFME2 = `createNode curveFromMeshEdge -n "rivetCurveFromMeshEdge2"`;
setAttr ".ihi" 1;
setAttr ".ei[0]" $e2;
string $nameLoft = `createNode loft -n "rivetLoft1"`;
setAttr -s 2 ".ic";
setAttr ".u" yes;
setAttr ".rsn" yes;
$namePOSI = `createNode pointOnSurfaceInfo -n "rivetPointOnSurfaceInfo1"`;
setAttr ".turnOnPercentage" 1;
setAttr ".parameterU" 0.5;
setAttr ".parameterV" 0.5;
connectAttr -f ($nameLoft + ".os") ($namePOSI + ".is");
connectAttr ($nameCFME1 + ".oc") ($nameLoft + ".ic[0]");
connectAttr ($nameCFME2 + ".oc") ($nameLoft + ".ic[1]");
connectAttr ($nameObject + ".w") ($nameCFME1 + ".im");
connectAttr ($nameObject + ".w") ($nameCFME2 + ".im");
}
else
{ $list = `filterExpand -sm 41`;
$size = size($list);
if ($size > 0)
{
if ($size != 1)
{ error("No one point selected");
return "";
}
tokenize($list[0],".",$parts);
$nameObject = $parts[0];
tokenize($list[0],"[]",$parts);
float $u = $parts[1];
float $v = $parts[2];
$namePOSI = `createNode pointOnSurfaceInfo -n "rivetPointOnSurfaceInfo1"`;
setAttr ".turnOnPercentage" 0;
setAttr ".parameterU" $u;
setAttr ".parameterV" $v;
connectAttr -f ($nameObject + ".ws") ($namePOSI + ".is");
}
else
{ error("No edges or point selected");
return "";
}
}
string $nameLocator = `createNode transform -n "rivet1"`;
createNode locator -n ($nameLocator + "Shape") -p $nameLocator;
string $nameAC = `createNode aimConstraint -p $nameLocator -n ($nameLocator + "_rivetAimConstraint1")`;
setAttr ".tg[0].tw" 1;
setAttr ".a" -type "double3" 0 1 0;
setAttr ".u" -type "double3" 0 0 1;
setAttr -k off ".v";
setAttr -k off ".tx";
setAttr -k off ".ty";
setAttr -k off ".tz";
setAttr -k off ".rx";
setAttr -k off ".ry";
setAttr -k off ".rz";
setAttr -k off ".sx";
setAttr -k off ".sy";
setAttr -k off ".sz";
connectAttr ($namePOSI + ".position") ($nameLocator + ".translate");
connectAttr ($namePOSI + ".n") ($nameAC + ".tg[0].tt");
connectAttr ($namePOSI + ".tv") ($nameAC + ".wu");
connectAttr ($nameAC + ".crx") ($nameLocator + ".rx");
connectAttr ($nameAC + ".cry") ($nameLocator + ".ry");
connectAttr ($nameAC + ".crz") ($nameLocator + ".rz");
select -r $nameLocator;
return ($nameLocator);
}
rivet;
おそらくxgenを試しますか? – SAF
提案していただきありがとうございます。 x genを見ています。私は次の日かそれを使用して2つの問題を解決できるかどうか私は投稿することが確実になります – JKeil