Vellum Constraints SOP

Table Of Content

Common

Constraint Type

Distance Along Edges

doument表示ジオメトリ内の各エッジを、そのエッジ長を維持するDistance拘束に変換します。
typedistance
restlengthだけ離れるようにポイントを拘束します。distanceは、三角形のエッジまたはヘアーのような本来の距離拘束に使用します。stitchはdistanceのエイリアスです。これはdistanceと同じ挙動をしますが、意味的にはシミュレーションに追加する非トポロジーな弾性に使用します。branchstitchは、自動的な分岐の接合に使用します。
functioncreateDistanceConstraint
// point grp: __stretchsrc
// run over: points

#include "pbd_constraints.h"

// createDistanceConstraint(const int prim_geo; const int ptnum; const string srcgrp; 
//												 const int outgeo; const string outgrp)
createDistanceConstraint(1, @ptnum, "__constraintsrc",
                        geoself(), "__stretchconstraints");

Bend Across Triangles

doument三角形の各ペア(入力が四角形以上であれば、暗黙的な三角形のペア)がその2つの三角形間の初期の二面角を維持する拘束を生成します。
typebend
4点拘束。これらのポイントは、エッジを共有した2つの三角形の4ポイントを意味します。その共有エッジに沿った角度を維持するように拘束が適用されます。
functioncreateDihedralConstraint
// point grp: __bendsrc
// run over: points

#include "pbd_constraints.h"

// createDihedralConstraint(const int prim_geo; const int ptnum; const string srcgrp; const int outgeo; const string outgrp)
createDihedralConstraint(1, @ptnum, "__constraintsrc", geoself(), "__bendconstraints");

Cloth

descriptionDistance Along Edges拘束とBend Across Triangles拘束の両方で構成された拘束を生成します。
typedistance
restlengthだけ離れるようにポイントを拘束します。distanceは、三角形のエッジまたはヘアーのような本来の距離拘束に使用します。stitchはdistanceのエイリアスです。これはdistanceと同じ挙動をしますが、意味的にはシミュレーションに追加する非トポロジーな弾性に使用します。branchstitchは、自動的な分岐の接合に使用します。
bend
4点拘束。これらのポイントは、エッジを共有した2つの三角形の4ポイントを意味します。その共有エッジに沿った角度を維持するように拘束が適用されます。
functioncreateDistanceConstraint / createDihedralConstraint

Hair

doumentエッジ上の距離とエッジ間の屈曲で構成された拘束を生成します。 この屈曲には、エッジの捻じれも含まれるので、Torsion(ねじり力)効果を出すことができます。
typestretchshear
2点拘束。エッジに対して距離拘束と曲げ拘束を組み合わせたものです。これは、ヘアーで使用します。
bendtwist
2点拘束。エッジ上のポイントの向きが同じになるように拘束するため、ヘアーに沿った捻じれの効果が生成されます。
functioncreateStretchShearConstraint / createBendTwistConstraint / createBranchWeldConstraints
// point grp: __stretchsrc
// run over: points

#include "pbd_constraints.h"
int prims[] = pointprims(1, @ptnum);
// We can't handle branching lines.
if (len(prims) > 2)
    return;
// Only handle open polylines.
foreach(int prim; prims)
{
    if (primintrinsic(1, "typename", prim) != "Poly" ||
        primintrinsic(1, "closed", prim) == 1)
        return;
}
createStretchShearConstraint(1, @ptnum, "__constraintsrc",
                            geoself(), "__stretchconstraints");
// point grp: __bendsrc
// run over: points

#include "pbd_constraints.h"
createBendTwistConstraint(1, @ptnum, "__constraintsrc",
                          geoself(), "__bendconstraints");

// Create constraints for any branches.
float maxbranchangle = 360;
if (chi("domaxbranchangle"))
    maxbranchangle = chf("maxbranchangle");
if (haspointattrib(1, "branchweld"))
    createBranchWeldConstraints(1, @ptnum, "__constraintsrc", maxbranchangle,
                                geoself(), "__bendconstraints");

String

description処理の軽いヘアー拘束を生成します。 この拘束は、エッジ上の距離とエッジ間の角度を維持します。 しかし、捻じれ拘束がないので、エッジが自由にスピンしてしまいます。
typedistance
restlengthだけ離れるようにポイントを拘束します。distanceは、三角形のエッジまたはヘアーのような本来の距離拘束に使用します。stitchはdistanceのエイリアスです。これはdistanceと同じ挙動をしますが、意味的にはシミュレーションに追加する非トポロジーな弾性に使用します。branchstitchは、自動的な分岐の接合に使用します。
angle
3点拘束。中点で測定されたニ面角を維持します。これは、紐の拘束タイプで使用します。
functioncreateTriangleBendConstraints
// point grp: __bendsrc
// run over: points

#include "pbd_constraints.h"

float maxbranchangle = 360;
if (chi("domaxbranchangle"))
    maxbranchangle = chf("maxbranchangle");
createTriangleBendConstraints(1, @ptnum, "angle", "__constraintsrc", maxbranchangle,
                              ageoself(), "__bendconstraints");

Pin to Target

description指定したポイントが、ターゲットジオメトリ内の呼応するポイントにピン留めされます。 Vellum Solverのターゲットジオメトリは、通常では1番目の入力なので、そのアニメーションに一致しますが、これを上書きすることができます。
typepin type: soft → pin
特定のワールド空間位置にポイントをピン留めします。attachは、サブステップ毎にターゲットアトリビュートからターゲット位置を更新します。 それに対してpinは、matchanimationアトリビュートに応じて更新されます。
pin type: soft → pinorient
静止向きに合うようにポイントの向きをピン留めします。
functionpin type: soft + velocity blend is ON → accumScaleValues
// prim grp: __pinstretchconstraints
// run over: primitives

#include "pbd_constraints.h"
@velblend = ch("velblend_base");
string velattrib = chs("velblend_attrib");

if (velattrib != "")
{
    @velblend *= accumScaleValues(s@type, 1, array(@ptnum), s@target_path, i@target_prim, v@target_uv,
                                  velattrib, /*val*/1.0, /*mode*/"attrib",
                                  chs("attribpromote"));
}

Attach to Geometry

description指定したポイントが3番目の入力のジオメトリに取り付けられます。 これらのポイントには、Attach Frameでの最近接ポイント番号が格納され、それらを結び付けるDistance拘束を作成します。
typeattach
特定のワールド空間位置にポイントをピン留めします。attachは、サブステップ毎にターゲットアトリビュートからターゲット位置を更新します。 それに対してpinは、matchanimationアトリビュートに応じて更新されます。
attachnormal
Tangent Stiffness が有効な時にAttach to Geometry拘束用に生成される追加拘束。 この拘束は、拘束されるポイントがrestdirアトリビュートで指定されたターゲットオブジェクト法線に整列するように維持します。
functioncreateAttachConstraint / accumScaleValues / createAttachNormalConstraint
// point grp: __stretchsrc
// run over: points

#include <pbd_constraints.h>

int useclosestpt = chi("useclosestpt");
int useclosestprim = chi("useclosestprim");
int maxdistcheck = chi("maxdistcheck");
float maxdist = chf("masdist");

createAttachConstraint(1, 2, @ptnum, i@__srcidx, "__attachsrc",
                      useclosestpt, useclosestprim, maxdistcheck, maxdist,
                      geoself(), "__stretchconstraints");
// prim grp: __pinstretchconstraints
// run over: primitives

#include "pbd_constraints.h"
@velblend = ch("velblend_base");
string velattrib = chs("velblend_attrib");

if (velattrib != "")
{
    @velblend *= accumScaleValues(s@type, 1, array(@ptnum), s@target_path, i@target_prim, v@target_uv,
                                  velattrib, /*val*/1.0, /*mode*/"attrib",
                                  chs("attribpromote"));
}
// prim grp: __stretchconstraints
// run over: primitives

#include <pbd_constraints.h>'
// Make an attachnormal constraint with the same target.
if (s@type != "attach")
    return;
int pt = primpoints(0, @primnum)[0];
string @target_path = "";
int @target_prim = -1;
vector @target_uv = 0;

int prim = createAttachNormalConstraint(1, pt, @target_path,
                                        @target_prim, @target_uv,
                                        geoself(), "__stretchconstraints");

// Might fail if not attached to polygon.
if (prim < 0)
    return;
setprimattrib(geoself(), "type", prim, "attachnormal");
setprimattrib(geoself(), "stiffness", prim, chf("stiffness") * pow(10, chf("stiffnessexp")));
// Restlength is always zero so we don't worry about compress stiffness.
setprimattrib(geoself(), "dampingratio", prim, chf("dampingratio"))

Stitch Points

descriptionDistance拘束を使って同じジオメトリ内のポイントを縫合します。 これらのポイントは、実際には幾何学的に繋がっている必要はありません。 これは、ジャケットを閉じた状態に維持したり、ポケットがひらひらしないようにするのに役立ちます。
typeptprim
ポイントとプリミティブ上の位置の間の拘束は、通常ではVellum Constraints SOPのUse Closest Location on Primitiveオプションを使って作成します。 その場合、restvectorには、そのプリミティブ上の位置のUV座標が格納されます。 このプリミティブは線分、三角形、四角形のどれかに該当します。つまり、この拘束にはそれぞれ3,4,5個のポイントが含まれることになります。
functioncreateStitchConstraint
// point grp: __stretchsrc
// run over: points

#include <pbd_constraints.h>

int useclosestpt = chi("useclosestpt");
int useclosestprim = chi("useclosestprim");
int usemaxdist = chi("usemaxdist");
float maxdist = chf("maxdist");

createStitchConstraint(1, @ptnum, i@__srcidx, "__targetsrc",
                      useclosestpt, useclosestprim, usemaxdist, maxdist,
                      geoself(), "__stretchconstraints");

Pressure

descriptionDefine Piecesパラメータによって決定された各ピースに元々の体積を記録し、その体積を維持する(多くのポイントで定義された)拘束を構築します。 この拘束は全体的に適用されるので、風船のように1箇所を圧搾すると他の箇所が膨張します。pressurescalePointアトリビュートを使用することで、ポイント毎に圧力拘束の効果をスケールさせることができます。 このアトリビュートを使用すれば面白い膨張効果を表現することができますが、例えばピン留めされていない風船のpressurescaleが片側だけほぼゼロになっていた場合だと不均衡なフォースを発生してしまうので注意して使用してください。
typepressure
多点拘束。すべてのポイントがメッシュの表面を表現します。そのメッシュから体積を計算して、それをポイントに格納してから、その体積が維持されるようにすべてのポイントを膨張または収縮させます。
functioncreatePressureConstraint
// run over: numbers

#include "pbd_constraints.h"
string attrname = chs("attrname");
// We want a group of the current attribute value, but only
// those that are also in __constraintsrc.
string attrfilter = chs("attrfilter");
string srcgrp;
if (pointattribtype(1, attrname) == 2) // string
{
    string attrval = uniqueval(1, "point", attrname, @elemnum);
    srcgrp = sprintf("%s=%s ^!__constraintsrc", attrfilter, attrval);
}
else
{
    int attrval = uniqueval(1, "point", attrname, @elemnum);
    srcgrp = sprintf("%s=%d ^!__constraintsrc", attrfilter, attrval);
}
createPressureConstraint(1, srcgrp, geoself(), "__stretchconstraints");

Tetrahedral Volume

description各四面体を、その四面体の体積を維持する拘束に変換します。
これは、シアー(傾斜)またはストレッチ(伸縮)の拘束を含んでいません。 適切なソフトボディを作成するには、さらにDistance拘束を追加する必要があります。
typetetarap*
四面体のRest形状との歪を最小限に抑えるその四面体に対するAs-Rigid-As-Possibleストレッチ拘束。 この歪はrestmatrixに格納されます。 この拘束タイプには、線形と非線形のどちらにするのか、体積を維持するかどうかといったバリエーションがあります。
functioncreateTetStretchConstraint
// point grp: __stretchsrc
// run over: points

#include <pbd_constraints.h>
string type = "tetarapnl";
if (chi("linear") == 1)
    type = "tetarap";
if (chi("linear") == 2)
    type = "tetarapnorm";
if (chi("preservevol"))
    type += "vol";
createTetStretchConstraint(1, @ptnum, "__constraintsrc", type, chf("restscale"),
                            geoself(), "__stretchconstraints");

Weld Points

descriptionこれ自体は拘束ではありませんが、weldアトリビュートを編集して、計算用にポイントを論理的に単一ポイントに結合します。 しかし、それらのポイントは独立したポイントの状態のままです。 さらに、これは、論理的に結合されたエッジの箇所にBend拘束を構築して、その結果を一枚の平坦なピースのように作用させることができます。Vellum Post Process SOPは、シミュレーション後のそれらのWeld頂点を、レンダリングでジオメトリが繋がっているように見えるように繋ぎ直すことができます。
typebend
4点拘束。これらのポイントは、エッジを共有した2つの三角形の4ポイントを意味します。その共有エッジに沿った角度を維持するように拘束が適用されます。
functioncreateDihedralConstraintFromNewlyWeldedPrimitives
// run over: numbers

#include "pbd_constraints.h"

createDihedralConstraintFromNewlyWeldedPrimitives(1, 2, @elemnum, geoself(), "__bendconstraints");

Glue

description各ポイントが、自身のピースのメンバーでない隣接ポイントを検索します。 これは、各ポイントをその隣接に維持させるDistance拘束を構築します。 これは、プロキシミティ(近接度)で自動的にポイント間を接着させるシステムを構築する時、特に分離を結合させる時に役立ちます。
typestitch
restlengthだけ離れるようにポイントを拘束します。distanceは、三角形のエッジまたはヘアーのような本来の距離拘束に使用します。stitchはdistanceのエイリアスです。これはdistanceと同じ挙動をしますが、意味的にはシミュレーションに追加する非トポロジーな弾性に使用します。branchstitchは、自動的な分岐の接合に使用します。
functioncreateGlueConstraints
// point grp: __stretchsrc
// run over: points

#include <pbd_constraints.h>
string classname = '__class__';
if (!chi("useconnectivity"))
    classname = chs("compare_class");
string outgrp = "__stretchconstraints";
string srcgrp = chs("group");
string dstgrp = "__targetsrc";
string primgrp = chs("stretchgrp");
int nconstraints = chi('constraint_per_point');
nconstraints -= point(2, "nconstraints", @ptnum);
if (nconstraints > 0)
    createGlueConstraints(1, 0, @ptnum, srcgrp, dstgrp, primgrp,
                          classname, chi('useclump'), chs('clumpattrib'),
                          nconstraints, chf('min_rad'), chf('max_rad'), chi('max_pt'), chi('pref'),
                          chf('seed'), chf('detach_chance'), chf('point_chance'),
                          geoself(), outgrp);

Struts

description各ポイントが、自身のピースのメンバーで真っ直ぐな見通し線の方向にある反対側のポイントを検索します。 Struts(支柱)は、各ポイントとそのポイントの間にDistance拘束を構築します。 これは、完全にFEMによる解法を使わずに、オブジェクトの剛性と体積を表現した内部支柱のような、たくさんの楊枝を構築します。
typedistance
restlengthだけ離れるようにポイントを拘束します。distanceは、三角形のエッジまたはヘアーのような本来の距離拘束に使用します。stitchはdistanceのエイリアスです。これはdistanceと同じ挙動をしますが、意味的にはシミュレーションに追加する非トポロジーな弾性に使用します。branchstitchは、自動的な分岐の接合に使用します。
functioncreateStrutConstraints
// point grp: __stretchsrc
// run over: points

#include <pbd_constraints.h>

string classname = "__class__";
if (!chi("useconnectivity"))
    classname = chs("compare_class");

string dirattrib = "N";
if (chi("usedirattrib"))
    dirattrib = chs("dirattrib");

createStrutConstraints(1, @ptnum, "__targetsrc",
                      classname, dirattrib,
                      chi("invertnormal"), chi("checknormal"),
                      chi("constraint_per_point"),
                      chf("max_rad"), chf("jitter"), chf("rayoff"),
                      chf("seed"), chf("point_chance"),
                      geoself(), "__stretchconstraints");

Tetrahedral Fiber

description各四面体が、ポイント上のmaterialWで指定された方向(このアトリビュートがなければ1)に沿って平坦化を試みる拘束に変換されます。 これらの拘束をVellum Constraint Propertyを使って、シミュレーション中にそれがアニメーションされるほどに弱い剛性を設定することで、ボリュームの収縮効果をシミュレーションすることができます。
typetetfiber / tetfibernorm
ポイントのmaterialWアトリビュートで指定されたローカル空間方向に沿って四面体を圧縮することができる四面体拘束。
functioncreateTetFiberConstraint
// point grp: __stretchsrc
// run over: points

#include <pbd_constraints.h>

createTetFiberConstraint(1, @ptnum, "__constraintsrc", geoself(), "__stretchconstraints");

Triangle Stretch

description各三角形は、指定した剛性に応じて伸びや捻じれを除去することで三角形をAs-Rigid-As-Possible(ARAP:可能な限り硬く)に維持する拘束に変換されます。
typetriarap*
三角形のRest形状との歪を最小限に抑えるその三角形に対するAs-Rigid-As-Possibleストレッチ拘束。 この歪はrestvectorに格納されます。
functioncreateTriStretchConstraint
// point grp: __stretchsrc
// run over: points

#include <pbd_constraints.h>

string type = "triarapnl";
if (chi("linear") == 1)
    type = "triarap";
if (chi("linear") == 2)
    type = "triarapnorm";
createTriStretchConstraint(1, @ptnum, "__constraintsrc", type, chf("restscale"),
                            geoself(), "__stretchconstraints");

Tetrahedral Stretch

description各四面体は、指定した剛性に応じて伸びや捻じれを除去することで四面体をAs-Rigid-As-Possible(ARAP:可能な限り硬く)に維持する拘束に変換されます。Preserve Volumeが有効になっている場合、Tetrahedral Volume拘束の動作方法と同様に、この拘束は、さらに非常に強い内部剛性を使いつつ、指定したDamping Ratioを使って体積の維持を試みます。
typetetarap*
四面体のRest形状との歪を最小限に抑えるその四面体に対するAs-Rigid-As-Possibleストレッチ拘束。 この歪はrestmatrixに格納されます。 この拘束タイプには、線形と非線形のどちらにするのか、体積を維持するかどうかといったバリエーションがあります。
functioncreateTetStretchConstraint
// point grp: __stretchsrc
// run over: points

#include <pbd_constraints.h>
string type = "tetarapnl";
if (chi("linear") == 1)
    type = "tetarap";
if (chi("linear") == 2)
    type = "tetarapnorm";
if (chi("preservevol"))
    type += "vol";
createTetStretchConstraint(1, @ptnum, "__constraintsrc", type, chf("restscale"),
                            geoself(), "__stretchconstraints");

Shape Match

descriptionDefine Pieces パラメータによって決定された各ピースに対して、ポイントを元々の(静止)形状まで引っ張り戻す拘束を作成します。 この拘束を使用することで、例えばCloth拘束などの既存拘束に剛性を足したり、この拘束自体で他のVellumジオメトリと相互作用できるほぼ剛体のオブジェクトを作成することができます。

TIP
Shape Match拘束は、通常ではMassをCalculate Uniform に設定し、整合性の取れたサイズのジオメトリで非常に上手く動作します。 この類のジオメトリを生成したいのであれば、Remesh SOPを使用すると良いでしょう。

TIP
この拘束タイプを使用した効果的なワークフローは、シミュレーション出力に対してExtract Transform SOPを使用してピース毎に向きを持ったポイントを生成してから、Transform Pieces SOPを使用してオリジナルのレンダージオメトリをそれらのポイントまでトランスフォームさせることです。 このワークフローだと、拘束がコリジョンポイントまたはピンにおいて剛性の維持に失敗した際の何かしらの小さな変形が起きるのを回避することもできます。
typeshapematch
拘束されるポイントの(拘束ジオメトリのrestPointアトリビュートに格納されている)元の形状の維持を試みる拘束。
functioncreateShapeMatchConstraint
// run over: numbers

#include "pbd_constraints.h"
string attrname = chs("attrname");
// We want a group of the current attribute value, but only
// those that are also in __constraintsrc.
string attrfilter = chs("attrfilter");
string srcgrp;
if (pointattribtype(1, attrname) == 2) // string
{
    string attrval = uniqueval(1, "point", attrname, @elemnum);
    srcgrp = sprintf("%s=%s ^!__constraintsrc", attrfilter, attrval);
}
else
{
    int attrval = uniqueval(1, "point", attrname, @elemnum);
    srcgrp = sprintf("%s=%d ^!__constraintsrc", attrfilter, attrval);
}
createShapeMatchConstraint(1, srcgrp, geoself(), "__stretchconstraints");

Stretch Type

Constraint TypeがClothのときのみ設定可能で、Stretchの拘束タイプを指定できる。
Distance Along Edgesがデフォルトで設定されている。
Triangle Stretchは、Distance Along Edgesよりも滑らかな結果を得ることができ、拘束タイプはtriarap* / bendに設定される。

Constraint TypeCloth に設定されている時に使用するStretch拘束のタイプを選択します。 線形の Triangle Stretch拘束は、布の解像度が高いほどDistance Along Edgesよりも速く適切な剛性に収束しますが、Enable Warp/Weft パラメータによる異方性には対応していません。 Document: Vellum Constraint SOP

Triangle Stretch 拘束も三角形を元の形状に戻そうとします。 この拘束は、布用途のオプションで、より滑らかなルックが得られます。 シェルフツールを使用する時はDistance Along Edges がまだデフォルトになっていますが、Vellum ConstraintsノードのConstraint Type ドロップダウンメニューからTriangle Stretch に変更することができます。
Document: Triangle Stretch拘束とTetrahedral Stretch拘束


Preserve Volume

Constraint TypeがTetrahedral Stretchのとき設定可能。
有効にすると、拘束タイプにvolが追加され体積が維持されるようになる。(tetarapnorm → tetarapnormvol)
Tetrahedral Volumeでも同様の効果が得られる。

Constraint TypeTetrahedral Stretchに設定されている時、Tetrahedral Volume拘束の動作方法と同様に、非常に強い内部剛性と指定したDamping Ratioを使って体積を維持する拘束も適用します。 もっと細かく制御したい場合、または、非常に強い剛性が原因で不安定になった場合には、 このオプションを無効にして、後で同様にTetrahedral Volumeに設定したVellum Constraint SOPを追加することで、計算のパフォーマンスが若干悪くなるものの、もっと細かく制御ができる体積維持の効果を得ることができます。
Document: Vellum Constraint SOP

Preserve Volumesチェックボックスを有効にすると、ARAP拘束にさらに追加で拘束が適用され、Tetrahedral Volume拘束の動作と同様に、非常に強い内部剛性と指定されたDamping Ratioを使って体積が維持されます。
Document: Triangle Stretch拘束とTetrahedral Stretch拘束


Model

Triangle Stretch / Tetrahedral Stretch / Tetrahedral Fiberで使用されるAs-Rigid-As-Possibleモデルの設定。

Triangle Stretch, Tetrahedral Stretch, Tetrahedral Fiberの拘束で使用されるエネルギーモデル。
Non-Linear ARAP - 弱い剛性で高い伸縮性の構造に対して良い挙動をするAs-Rigid-As-Possibleモデル。
Linear ARAP - 一般的には硬い固体や布のように強い剛性で低い伸縮性の構造ほどパフォーマンスが良くなるAs-Rigid-As-Possibleモデル。
Scale-Invariant ARAP - 解を求める時に三角形の面積や四面体の体積を考慮することで複数のスケールでも剛性値が同じような挙動になるAs-Rigid-As-Possibleモデル。 通常では、このオプションがたいていの材質(皮膚や筋肉など有機的な材質を含む)に対して最善の選択肢となります。
Document: Vellum Constraint SOP


Geometry

Group Type

拘束のソースポイントに使用するグループタイプの設定。


Group

拘束のソースポイントとして使用するグループの指定。


Triangulation

メッシュの三角形化する方法。
Noneでは、三角形化せず入力ジオメトリをそのまま使用する。
Regularでは、Divide SOPを使用したのと同じ効果になる。
Alternatingでは、Divide SOPを2回使用してジグザグ状にメッシュの分割をする。グループに0-nprims(-1):21-nprims(-1):2が設定されている。

通常ではDistance拘束とBend拘束は三角形メッシュに対して構築します。 入力を強引に三角形化しなくても、暗黙的に三角形化することができます。

None
暗黙的に入力を三角形化しません。

Regular
一貫して三角形に分割します。

Alternating
三角形の分割を逆にするように試みるので、一連の四角形が規則的な構造にならなくなります。

Document: Vellum Constraint SOP


Mass

質量の設定。単位はkgkg
Calculate Uniformでは、(density * measure) / nptsという値が質量として各ポイントに与えられる。
Calculate Varyingでは、与えられた点に関連するプリミティブを分類し、それらのプリミティブの寄与に基づいて各ポイントの質量を計算する。密集した領域のポイントほど軽く、疎らな領域のポイントほど重くなるように質量が与えられる。

VEX Code: compute_uniform_mass
float measure = 0;
int npts = point(1, "npts", @ptnum);
// Priority is tets, polys, lines.
measure = point(1, "volume", @ptnum);
if (measure == 0.0)
    measure = point(1, "area", @ptnum);
if (measure == 0.0)
    measure = point(1, "perimeter", @ptnum);

// 面積をポイント総数で割る
measure /= npts;

float @mass = -1;
float density = chf("density");
// Hold onto computedmass value for later possible inertia computation.
@__computedmass = density * measure;
// Only update mass if not pinned.
if (@mass != 0.0)
    @mass = @__computedmass;
VEX Code: compute_varying_mass
// 非常に密集した領域のポイントほど軽く、疎らな領域のポイントほど重くなる
// 布のデフォルトの Density は0.1で、四面体ソフトボディは100で、ヘアーは0.001

int tets[], polys[], lines[];
int prims[] = pointprims(0, @ptnum);

// Classify primitives
foreach(int prim; prims)
{
    int type = primintrinsic(0, "typeid", prim);
    if (type == 21) // tets
        append(tets, prim);
    if (type == 1) // polys
    {
        if (primintrinsic(0, "closed", prim))  // polygons
            append(polys, prim);
        else
            append(lines, prim);
    }
}
float measure = 0;
// Priority is tets, polys, lines.
// Sum partial contribution from each incident primitive,
// but only of the primary type.
if (len(tets))
{
    foreach(int t; tets)
    {
        float volume = prim(1, "volume", t);
        measure += volume / 4;
    }
}
else if (len(polys))
{
    foreach(int p; polys)
    {
        int npts = len(primpoints(0, p));
        float area = prim(1, "area", p);
        measure += area / npts;
    }
}
else if (len(lines))
{
    // Point is only part of line primitives, so just use neighbours.
    int nbrs[] = neighbours(0, @ptnum);
    foreach(int n; nbrs)
    {
        vector npos = point(0, "P", n);
        measure += distance(@P, npos);
    }
}

float @mass = -1;
float density = chf("density");
int scalebyattrib = chi("scalebyattrib");
string attrib = chs("scaleattrib");
if (scalebyattrib && haspointattrib(0, attrib))
    density *= point(0, attrib, @ptnum);
// Hold onto computedmass value for later possible inertia computation.
@__computedmass = density * measure;
// Only update mass if not pinned.
if (@mass != 0.0)
    @mass = @__computedmass;

ポイントのmass値。 このmassは、POPフォースや他のVellumジオメトリのピースによるポイントの挙動と拘束の強度に影響します。

Unchanged
massアトリビュートを設定しません。

Set Uniform
指定した値をmassアトリビュートに設定します。

Calculate Uniform
Define Pieces
設定で決められた通りに、ピース単位でポイントのmassアトリビュートの均一値を計算します。 四面体ジオメトリに関しては、各ピースの総体積を計算してから、それをDensityパラメータで乗算して、各ピースの質量を求めます。 この質量は、そのピース内の各ポイントに対して均等に分配されます。 ポリゴンジオメトリに関しては、各ピースの総面積が使用され、ポリラインに関しては、全長が使用されます。

Calculate Varying
ポイントのmassアトリビュートの可変値を計算します。 四面体ジオメトリに関しては、各ポイントには、そこに繋がった四面体の体積の1/4を累積させて総体積を求めて、 それをDensityパラメータで乗算して、各ピースの質量を求めます。 ポリゴンジオメトリに関しては、各ポイントには、そこに繋がったポリゴンの面積の“シェア:共有”に対して測定量を累積させて、 ポリラインに関しては、そこに繋がったエッジ長の“シェア:共有”に対して測定量を累積させます。 一般的には、この手法が一番物理的に妥当な結果を得ることができ、特にジオメトリの解像度が変わる時がそうです。

Document: Vellum Constraint SOP


Density

密度の設定。単位はkg/m3kg/m^3

測定単位
Mass(質量)kgkg
Distance(距離)mm (1 Houdini unit = 1m1m)
Velocity(速度)m/sm/s
Angular Velocity(角速度)degree/sdegree/s
Density(密度)kg/m3kg/m^3
Force(力)NN (ニュートン)
Document: Houdiniのダイナミクスを理解する

MassがCalculate UniformまたはCalculate Varyingに設定されている時、質量計算に使用される体積がこの値でスケールされます。MassがCalculate Varyingに設定されている時は、Scale By Attributeを設定することで、指定したPointアトリビュートでこの値をさらにスケールさせることができます。 Document: Vellum Constraint SOP


Density Attribute

密度をスケールするポイントアトリビュートの設定。


Thickness

pscaleとして与えられるポイントの厚み。
Calculate Uniformでは、ジオメトリ全体におけるエッジの平均長をEdge Length Scaleでスケールした値をpscaleとする。
Calculate Varyingでは、各ポイントに繋がったエッジの平均長をEdge Length Scaleでスケールした値をpscaleとする。

VEX Code: compute_edgelength_and_num
// grp: __constraintsrc
// run over: points

float @pscale = 0;
@pscale = chf("scale") * 0.5f * @__edgelen / i@__edgenum;  // __edgelenと__edgenumは合計値
VEX Code: avgedgelength_pscale
// point grp: __constraintsrc
// run over: points

int nbrs[] = neighbours(0, @ptnum);
float totedge = 0;
foreach(int n; nbrs)
{
    vector npos = point(0, "P", n);
    totedge += distance(npos, @P);
}
float scale = chf("scale");
int scalebyattrib = chi("scalebyattrib");
string attrib = chs("scaleattrib");
if (scalebyattrib && haspointattrib(0, attrib))
    scale *= point(0, attrib, @ptnum);
@pscale = scale * 0.5f * totedge / len(nbrs);

pscaleに記録されるポイントの厚み。これは、三角形の厚みとカーブの厚みにも使用されます。

Unchanged
pscaleアトリビュートを設定しません。

Set Uniform
指定した値をpscaleアトリビュートに設定します。

Calculate Uniform
Define Pieces設定で決められた通りに、ピース単位でポイントのpscaleアトリビュートの均一値を計算します。 この厚みの値は、各ピースのエッジの平均長をEdge Length Scaleパラメータでスケールさせた値に基づいています。 一般的には、この設定によって、均一な厚みを維持しつつ過剰な自己干渉を回避することができます。

Calculate Varying
ポイントのpscaleアトリビュートの可変値を計算します。 この厚みの値は、各ポイントに繋がったエッジの平均長をEdge Length Scaleパラメータでスケールさせた値に基づいています。 この設定は、解像度が可変するジオメトリに適していますが、一般的には、不均一な厚みの値になります。
Document: Vellum Constraint SOP

Calculate Uniform は、各ピースのエッジの平均の長さをEdge Length Scale パラメータでスケールした値に基づいて厚みを決定します。 この設定であれば、通常では、均一な厚みを維持しつつ、過剰な自己干渉が回避されます。 オブジェクト全体にわたって厚みが同じ時は、そのオブジェクトが平坦になっているわけで、それは布に対して期待した処理なので、これがデフォルトになっています。 密集した領域ほど薄くなるように布の厚みを可変させると、その布は平坦にはならないですよね。 さらに、Calculate Varyingを選択することができます。 このオプションは、自動的に三角形の密度が濃い領域のpscaleを縮小させ、疎らな領域ではpscaleを拡大します。 これは、pscaleが重複するような非常に可変的な解像度を持つようなキャラクタで役に立ちます。 例えば、目の周辺の領域がそうです。Visualize Thicknessというチェックボックスが用意されています。 これは、pscaleをソルバに送信することなくpscaleを可視化することができます。

Document: 質量と厚みの計算


Edge Length Scale

各エッジ長のスケール値。Thicknessの計算に使用される。


Visualize Thickness

pscaleの視覚化。


Define Pieces

入力ジオメトリを同じ個として定義する手法。
デフォルトはConnectivityだが、classなどのAttributeを使うこともできる。
Constraint Type が Pressure / Glue / Struts / Shapematch または Calculate Uniformが有効なときに設定可能。

Pressure拘束は、オブジェクトをばらばらのピースに分割して、その体積を計算して定義します。 MassとThicknessの計算、Glue拘束、Strut拘束にも別々のピースを定義する方法が必要です。

From Attribute
この整数アトリビュートの固有な値が各ピースの定義に使用されます。

From Connectivity
入力ジオメトリの接続性が各ピースの定義に使用されます。

Document: Vellum Constraint SOP


Piece Attrib

ClassなどのPieceアトリビュートの指定。

この整数アトリビュートの値別に異なるピースが定義されます。 ここには、PointアトリビュートまたはPrimitiveアトリビュートを指定することができます。
Document: Vellum Constraint SOP


Layer

Layer Shockで使用するlayerアトリビュートが設定できる。事前にWrangleで与えておいても良い。

この番号がlayerアトリビュートの値としてポイントに設定され、布シミュレーションでLayer Shockのスタック(積み上げ)順序を定義するのに役立ちます。
Document: Vellum Constraint SOP


Compute Missing Orientation

このパラメータが有効かつorientが見つからなかった場合に、
Rest Orientation Frame で指定したフレームの orientを extracttransform で計算し、各ポイントにコピーする。
Constraint Type が Hair のとき設定可能。

Compute Missing Orientation

ヘアージオメトリを入力として変形させる場合、時間軸で安定した回転基準を示したorientアトリビュートがVellum Solverで必要になります。 このアトリビュートは、静止状態のスキンとアニメーションさせたスキンを使用したGuide Deform SOPによって作成することができます。 このパラメータが有効な時にorientが見つからなかった場合、Vellum Constraintsは、指定したRest Orientation Frameを基準に各ヘアーのトランスフォームからそれを計算します。
Document: Vellum Constraint SOP


Rest Orientation Frame

orientを計算する参照フレーム。

Compute Missing Orientationが有効な場合、そのヘアーの向きを計算する時に使用する参照フレーム。 通常では、これをシミュレーションの開始フレームに設定します。
Document: Vellum Constraint SOP


Show Guide Geometry

作成されたConstraintをガイドジオメトリとして表示。

新しく生成された拘束をガイドジオメトリとして表示します。 このガイドは、期待した順番でポイントが接続されていることを確認するのに役立ちます。 しかし、拘束をたくさん作成した時、特にビューポート内で下流ノードのVellumジオメトリを選択しようとした時に、そのガイド表示は非常に複雑になってしまいます。 このパラメータは、必要に応じて、そのガイドジオメトリを非表示にすることができます。
Document: Vellum Constraint SOP


Target Geometry

Constraint Type が Attach / Stitch / Weld / Glue / Struts の場合に設定可能。


Target Group Type

ターゲットとして指定するグループタイプの種類。


Target Group

Attach to GeometryやStitchのターゲット先として使用するグループの指定。


Target Path

ターゲットジオメトリにおけるアニメーションの上書き設定。
Constraint作成時のみ有効であり、シミュレーションにおいては使用されない。

Attach to Geometry拘束では、計算時に現行アニメーションデータが3番目の入力のSOPから読み込まれます。 ここにパスを指定するとそれが上書きされます。これは、キャプチャ時ではなく計算時に別のアニメーションが必要になった場合に役立ちます。

Note - これは、アニメーションを上書きするパスであり、実際のキャプチャには何も影響を与えません。 キャプチャは常に3番目の入力を使って行なわれます。 Document: Vellum Constraint SOP


Attach Frame

3番目に入力されたジオメトリのどのフレームを取り付けに使用するのかを制御。


Drag

(GIF)

Constraint Type が Cloth/ Hair/ String の場合に設定可能。


Normal Drag

dragnormalアトリビュートを作成して、この値を設定します。
これは、風のフォースを適用した時に、サーフェスの法線方向またはカーブの法線方向にポイントの抵抗をスケールします。

旗をパタパタさせるは、Normal DragとTangent Dragを別々の値にする必要があります。 Document: Vellum Constraint SOP


Tangent Drag

dragtangentアトリビュートを作成して、この値を設定します。
これは、風のフォースを適用した時に、サーフェスの接線方向またはカーブの接線方向にポイントの抵抗をスケールします。
Document: Vellum Constraint SOP


Pin to Animation

Constraint Type が Cloth/ Hair/ String/ Pin の場合に設定可能。


Pin Points

ターゲットアニメーションにピン留めさせるポイント。 通常では、このターゲットアニメーションはVellum Solverの1番目の入力ですが、そのVellum SolverSOP上で上書きしたり、Vellum SourceDOPを使って上書きすることができます。
Document: Vellum Constraint SOP


Pin Type

ポイント位置をターゲットアニメーションにピン留めさせる方法。

Permanent
massアトリビュートを0に設定して、そのポイントをハード拘束にします。 しかし、元々massに値が入っていなかった場合、後でこの拘束を開放することはできません。

Stopped
stoppedアトリビュートを1に設定して、そのポイントをハード拘束にします。massは影響を受けないので、後でstopped0にリセットすることで、POP操作がポイントのダイナミクスを復元することができます。

Soft
ゼロ長のDistance拘束がポイントとそのターゲット位置の間に作成されます。 この拘束では、StretchStiffnessDamping Ratioの値が使用されます。
Document: Vellum Constraint SOP


Orientation Pin Type

ヘアーでは、ポイントの位置を維持させるだけでなく、その向きも拘束したいことがよくあります。

Note - これは、ヘアーの出力ラインセグメントの向きを拘束します。 そのため、ヘアーの先端の向きを固定しても、入力ヘアーの角度には影響を与えません。

None

向きをターゲットアニメーションに拘束しません。

Same as Position

位置拘束のルールを使用します。Stoppedの場合、stoppedアトリビュートが3に設定され、どちらのタイプの更新も抑制されるようにします。

Soft

ピン留めしたポイントの向きを維持するBend/Twist拘束をターゲットアニメーションの向きに追加します。 この拘束では、BendStiffnessDamping Ratioの値が使用されます。
Document: Vellum Constraint SOP


Match Animation

計算中にアニメーションからターゲットを更新するのか、初期値のみを使用するのか制御します。
Document: Vellum Constraint SOP


Closest Point

Constraint Type が Attach / Stitch / Weld の場合に設定可能。


Constrain to Closest Point

ソースポイントに合致したポイントを検索する時、ターゲットポイントを順々に走査するのではなく、まず最初に一番近いポイントを取得します。
Document: Vellum Constraint SOP


Use Closest Location on Primitive

Attach to GeometryStitch Pointsの拘束では、単に最近接ポイントを選択するのではなくて、プリミティブ上の一番近い位置を選択します。 そして、そのプリミティブ番号と重心座標が格納されます。Stitch Points拘束では、このオプションが有効な時に拘束を生成するためのTarget Geometryとして対応しているのは、ポリライン、三角形、四角形のみです。
Document: Vellum Constraint SOP


Max Distance

ポイントの縫合を考慮する最大距離。
Document: Vellum Constraint SOP


Sliding Rate

Attach to Geometry拘束とStitch Points拘束に関しては、その拘束の取り付けポイントは、このレートでターゲットサーフェス上を滑ります。 1の値は、その拘束されたポイントのVelocityに一致します。 このオプションは、プリミティブ上を滑らせる場合にのみ機能するので、必ずUse Closest Location on Primitiveを有効にして、必ずTarget Group TypePrimitivesに設定してください。 次に一番近いスライディングターゲットを見つける際に使用されるメソッドは、Vellum SolverSliding Methodパラメータを使って設定することができます。
Document: Vellum Constraint SOP


Sliding Attribute

Sliding RateScale by Attributeに設定した時に、そのSliding RateにスケールさせるPointアトリビュート。 このアトリビュートは、AttributesセクションのPromotion Methodパラメータに応じて適用され、その値がシミュレーション時に適用される拘束に格納されます。 この方法によって、ペイントしたサーフェス上で取り付けポイントを滑らせることができます。 そこでペイントしたアトリビュート値がSliding Rateを制御します。
Document: Vellum Constraint SOP


Glue Search

Cluster Attrib

異なるピースのポイント間にGlue拘束を作成します。 この拘束は、同じクラスタのポイント間でのみ作成されます。 クラスタの値が-1なら、接着は行なわれません。
Document: Vellum Constraint SOP


Min Search Dist

該当する接着ポイントを検索する最小距離。
Document: Vellum Constraint SOP


Max Search Dist

該当する接着ポイントを検索する最大距離。
Document: Vellum Constraint SOP


Max Search Points

該当する接着ポイントを考慮する最大ポイント数。
Document: Vellum Constraint SOP


Search Preference

該当する接着ポイントを考慮するポイントの並び。

Note - 内部の検索関数は常に一番近くにあるポイントを返すので、このパラメータをFarthestに設定した場合は、おそらくMax Search Pointsパラメータの値を上げる必要があります。 検索照会では、Max Search Distパラメータで指定された通りに一番遠くにあるポイントに到達するのに十分なポイント数が必要になります。
Document: Vellum Constraint SOP


Constraints Per Point

ポイント毎に作成するGlue拘束の数。
Document: Vellum Constraint SOP


Detach Object Chance

各ピースは、この確率に基づいて、接着なしとマークされ、何も接着拘束を受け取ることも生成することもしません。 これによって、ほつれ毛を表現することができます。
Document: Vellum Constraint SOP


Detach Point Chance

各ポイントのペアは、この確率に基づいて、接着なしとマークされます。
Document: Vellum Constraint SOP


Seed

Detach Chanceの生成に使用するランダムシード。
Document: Vellum Constraint SOP


Strut Search

Max Strut Length

Struts(支柱)を作成する最大距離。 この距離は、オブジェクトの直径を覆うほど十分な長さにしなければなりませんが、極端に長い支柱を回避することで、不具合を回避することができます。
Document: Vellum Constraint SOP


Direction Attribute

Struts(支柱)は、ピースを検索するDirection Attributeの方向に光線を送信することで作成されます。 デフォルトの方向は、サーフェスの法線が使用されます。
Document: Vellum Constraint SOP


Invert Normals

光線を送信する時のオブジェクト法線の意味を逆にします。 これは、入力ジオメトリの法線が逆になっている時に役立ちます。
Document: Vellum Constraint SOP


Test Normals

Struts(支柱)のゴールでの法線を検証し、支柱が内側から適切に作成されているかどうかを示します。
Document: Vellum Constraint SOP


Direction Jitter

Strut(支柱)が作成される方向をずらすことで、複数の支柱内での対称性を崩します。
Document: Vellum Constraint SOP


Constraints Per Point

各ポイントに追加するStruts(支柱)の最大数。
Document: Vellum Constraint SOP


Detach Point Chance

Struts(支柱)なしとマークされるポイントの確率。
Document: Vellum Constraint SOP


Seed

JitterとDetach Chanceを制御するランダムシード。
Document: Vellum Constraint SOP


Ray Offset

光線の送信元であるサーフェスに当たらないようにするために、Strut(支柱)の初期光線をオフセットさせる必要があります。
Document: Vellum Constraint SOP


Stretch

Stiffness

(GIF)

拘束の剛性。これは、拘束がパーティクルを初期の静止状態の方に戻そうとする強さを制御します。 初期値を決める際は、10倍で値を変更してみると良いでしょう。
Document: Vellum Constraint SOP


Stiffness Attribute

StiffnessをスケールさせるPointアトリビュート。

Stiffnessを効果的に変化させるには、桁違いの大きさでペイントする必要がありますが、これは対数的な効果があります。
Document: Vellum Constraint SOP


Scale

Stiffnessに対する単一スライダコントロール。

Stiffnessを効果的に変化させるには、桁違いの大きさでペイントする必要がありますが、これは対数的な効果があります。
Document: Vellum Constraint SOP


Damping Ratio

(GIF)

Stiffness拘束は、許容できないほどに振動または微震する傾向があります。 Damping Ratioは、この拘束を評価した時にエネルギーを放出することでそれを軽減します。 しかし、Damping(減衰)を大きくしすぎると、満足した拘束にならなくなってしまいます。1未満の値を使用してください。
Document: Vellum Constraint SOP


Damping Attribute

Damping(減衰)を調整するアトリビュートです。これがDamping Ratioと乗算されます。
Document: Vellum Constraint SOP


Scale

Damping(減衰)を制御する単一スライダコントロール。これがDamping Ratioと乗算されます。
Document: Vellum Constraint SOP


Rest Length Scale

Distance拘束のRest Length(自然長)は、ポイント間の元々の距離になっています。 このスケールを使用することで、この距離を長くしたり短くすることができます。0に設定すると、それらのポイントが引っ付くようになります。
Document: Vellum Constraint SOP


Compression Stiffness

初期の自然長よりも短く圧縮した時の拘束の剛性。 非常に剛性の強い低解像度の布は、Bend拘束が原因というよりも、そのトポロジーが原因で曲げることができなくなる可能性があります。 三角形の網目になっていて、その布が完全に硬くなっていれば、それを曲げる方法はほぼありません。 Compression Stiffnessを下げることで、その布をつぶしたり、流動性を取り戻すことができます。 通常では、高解像度の布に対して、この値を上げます。
Document: Vellum Constraint SOP


Tangent Stiffness

Attach to Geometry拘束のターゲットサーフェスの接線方向の拘束の剛性。Tangent Stiffnessは、例えば、ボディに取り付けられているズボンやベルトを腰の位置で支えるのに役立ちます。

Note - このパラメータをゼロ以外の値に設定すると、Vellumポイントからターゲットサーフェス上の一番近いポイントまでを結んだ拘束が追加されます。 この拘束は、メインのStretch拘束と同じBreaking、Plasticity、Scalingの設定を使用します。
Document: Vellum Constraint SOP


Stiffness Dropoff

静止状態から、拘束の剛性が0に減衰する位置または0から完全剛性に増加する位置までのドロップオフ方向の距離。減少するドロップオフは、剛性が完全強度から始まって、静止状態からDropoffの距離の位置で0まで減少することを意味します。増加するドロップオフは、剛性が0から始まって、静止状態からDropoffの距離の位置で完全剛性まで増加することを意味します。Min Stiffnessを有効にすると、計算時の最小剛性値がゼロの代わりにその値が使用されます。

減少するドロップオフは、拘束を指定した距離だけ引き伸ばした時に0まで減少して剛性が失なわれるような接着拘束を作成する際に役に立ちます。Break TypeStretch DistanceThresholdに同じ距離を使用することで、この拘束はその剛性が0に減少した時に削除されます。
Document: Vellum Constraint SOP


Min Stiffness

このチェックボックスを有効にすると、Stiffness Dropoff計算時の最小剛性値がこの値に設定されます。
Document: Vellum Constraint SOP


Enable Warp/Weft

(GIF)

https://en.wikipedia.org/wiki/Warp_and_weft

Warp and weft - Wikipedia

方向に基づいた剛性の調整を有効にします。これによって、布の網目が縦糸、横糸に対して別々に伸縮させることができます。
Document: Vellum Constraint SOP


Anisotropy

Warp Scale

Warp(縦糸)である材質u軸方向の布のスケール係数。これは、対数乗数です。
Document: Vellum Constraint SOP


Weft Scale

Weft(横糸)である材質v軸方向の布のスケール係数。これは、対数乗数です。
Document: Vellum Constraint SOP


Shear Scale

対角線である材質uv軸方向の布のスケール係数。これは、対数乗数です。
Document: Vellum Constraint SOP


Material UV

Planar Patchを使用してジオメトリを作成するとMaterial UVが自動的に付与される

Warp(縦糸)とWeft(横糸)を計算する座標系を指定するためのPointアトリビュート。
Document: Vellum Constraint SOP


Velocity Blend

ジオメトリに取り付ける拘束またはターゲットにピン留めする拘束は、オプションでターゲットのVelocityをブレンドすることができます。 ブレンドするには、ローカルVelocityを用意できるようにそのターゲットがvPointアトリビュートを持っている必要があります。 ブレンドは、1/24秒毎に行なわれるので、0.5のブレンド係数は、標準フレームだとターゲットVelocityの50%を混ぜます。

Velocityをブレンドすると、シミュレーションが大きく減衰しますが、布が動きを予測できるようになって、急な動きによる鞭打ちを回避するのに役立ちます。 剛性が0の取り付け拘束を使用することで、何もフォースを追加することなくVelocity Blendのみを適用することができます。
Document: Vellum Constraint SOP


Enable Plasticity

Plasticity(可塑性)は、オブジェクトを新しい静止位置に落ち着かせることができます。 十分な圧力を加えると、静座標が現在の動座標にブレンドされるので、オブジェクトが新しい形状を維持するようになります。
Document: Vellum Constraint SOP


Plasticity

(GIF)


Threshold

この閾値以下では、材質が元の形状に戻ります。 この閾値を越えて変形させると、材質が徐々に新しい形状に変形し始めます。
Document: Vellum Constraint SOP


Threshold Attribute

Stretch Thresholdにスケールをかけるアトリビュート。
Document: Vellum Constraint SOP


Scale

Thresholdの単一スケールスライダ。
Document: Vellum Constraint SOP


Ratio of Current Rest Length

閾値には、絶対距離か相対距離を指定することができます。 相対距離としての0.1の値は、110%の伸長または90%の収縮で塑性流動が発動されることを意味します。
Document: Vellum Constraint SOP


Rate

Rateは、rate=ex1FPSrate = e^{-x*\frac{1}{FPS}} のような式で計算されているので、値を増やすほど小さくなっていく。


材質が流動し始めた時に新しい自然長に順応する速度。
Document: Vellum Constraint SOP


Rate Attribute

Plastic Rateにスケールをかけるアトリビュート。
Document: Vellum Constraint SOP


Scale

Plastic Rateの単一スケールスライダ。
Document: Vellum Constraint SOP


Hardening

一部の塑性材質は、変形が加わると剛性が強くなります。そのような材質にはHardeningを1より大きい値に設定します。 他の塑性材質は柔らかくなるので、そのような材質にはHardeningを1未満の値に設定します。 これは、Stiffness(剛性)に対する対数乗数です。
Document: Vellum Constraint SOP


Hardening Attribute

Plastic Hardeningにスケールをかけるアトリビュート。
Document: Vellum Constraint SOP


Scale

Plastic Hardeningの単一スケールスライダ。
Document: Vellum Constraint SOP


Output Group

生成されたStretch拘束すべてが、このプリミティブグループに追加されます。 これは、後でVellum Constraint PropertyDOPを使って、それらの拘束を編集するのに役立ちます。
Document: Vellum Constraint SOP


Keep Unique within Output Group

Output Group内の拘束が、特定のポイントを1度だけ拘束できるようにします。 動的に拘束を生成する時、フレーム毎に同じポイント間で拘束を何度も生成してしまうことがよくあります。 Output Group内のポイントを固有に維持することで、拘束が何度も繰り返されて生成されるのを回避することができます。
Document: Vellum Constraint SOP


Bend

Add Bend across Welds

ポイントを接合した時に、2つの外側エッジが内側エッジなってしまうことがあります。 それらのエッジに何もBend拘束がなければ、そのシーム(継ぎ目)が弱くなり、折り目や捻れが目立ってしまいます。 このオプションは、これを検出した箇所にBend拘束を生成します。
Document: Vellum Constraint SOP


Copy Neighboring Stiffness

生成されるBend拘束の値が周囲の三角形の屈曲からコピーされるので、パラメータをチャンネルリンクすることなく、整合性が保たれた布を構築することができます。
Document: Vellum Constraint SOP


Stiffness

Bend拘束の剛性。 初期値を決める際は、10倍で値を変更してみると良いでしょう。

Note
Bend拘束は角度の差分に基づいているので、布の解像度が高いほど、類似した曲率半径を表現するには剛性を強くする必要があります。

Note
高解像度モデルに対して非常に強い曲げ剛性を設定してしまうと、収束させるのに非常に多くの反復回数が必要になります。

Document: Vellum Constraint SOP


Stiffness Attribute

StiffnessにスケールをかけるPointアトリビュート。

Stiffnessを効果的に変化させるには、桁違いの大きさでペイントする必要がありますが、これは対数的な効果があります。
Document: Vellum Constraint SOP


Scale

Stiffnessに対する単一スライダコントロール。

Stiffnessを効果的に変化させるには、桁違いの大きさでペイントする必要がありますが、これは対数的な効果があります。
Document: Vellum Constraint SOP


Damping Ratio

Stiffness拘束は、許容できないほどに振動または微震する傾向があります。 しかし、Damping(減衰)を大きくしすぎると、満足した拘束にならなくなってしまいます。1未満の値を使用してください。
Document: Vellum Constraint SOP


Damping Attribute

Damping(減衰)を調整するアトリビュートです。これがDamping Ratioと乗算されます。
Document: Vellum Constraint SOP


Scale

Damping(減衰)を制御する単一スライダコントロール。これがDamping Ratioと乗算されます。
Document: Vellum Constraint SOP


Rest Angle Scale

Bend拘束のRest Angle(自然角)は、三角形の間の元々の二面角になっています。 このスケールを使用することで、この角度を広げたり狭めることができます。0に設定すると、それらの三角形が平坦な面として扱われます。
Document: Vellum Constraint SOP


Stiffness Dropoff

静止角度から、拘束の剛性が0に減少する角度または0から完全剛性に増加する角度までのドロップオフ方向の度数。減少するドロップオフは、剛性が完全強度から始まって、静止角度からDropoffの角度で0まで減少することを意味します。増加するドロップオフは、剛性が0から始まって、静止角度からDropoffの角度で完全剛性まで増加することを意味します。Min Stiffnessを有効にすると、計算時の最小剛性値がゼロの代わりにその値が使用されます。

小さい量でドロップオフを増加させると、布を平坦な状態から非常に簡単に歪ませることができるので、全体の曲げ剛性を変更することなく皺を追加して、その布の見た目を大きく変更するのに役立ちます。 減少するドロップオフは、切断される直前に反発することなく弱くなる伸縮性のある接着拘束を作成するのに役立ちます。
Document: Vellum Constraint SOP


Min Stiffness

有効にすると、Stiffness Dropoff計算時の最小剛性値がこの値に設定されます。
Document: Vellum Constraint SOP


Max Branch Angle

Torsion(ねじり力)のない糸のBend拘束を追加した時、それらのBend拘束はRest Angle(自然角)がまっすぐに近いほど良く動作します。 Max Branch Angleを設定することで、網状のロープのような糸は、まっすぐなロープに沿ってのみBend拘束が効き、垂直の断面にはBend拘束が効かないようにすることができます。
Document: Vellum Constraint SOP


Enable Plasticity

Plasticity(可塑性)は、オブジェクトを新しい静止位置に落ち着かせることができます。 十分な圧力を加えると、静座標が現在の動座標にブレンドされるので、オブジェクトが新しい形状を維持するようになります。
Document: Vellum Constraint SOP


Plasticity

Threshold

BendにおけるPlasticityの閾値は絶対角度。

この閾値以下では、材質が元の形状に戻ります。 この閾値を越えて変形させると、材質が徐々に新しい形状に変形し始めます。

これは、絶対角度です。Rest Angle(自然角)はまっすぐなことが多いので、Stretch拘束のような相対値の概念はBend拘束には当てはまりません。
Document: Vellum Constraint SOP


Threshold Attribute

Bend Thresholdにスケールをかけるアトリビュート。
Document: Vellum Constraint SOP


Scale

Thresholdの単一スケールスライダ。
Document: Vellum Constraint SOP


Rate

材質が流動し始めた時に新しい自然角に順応する速度。
Document: Vellum Constraint SOP


Rate Attribute

Plastic Rateにスケールをかけるアトリビュート。
Document: Vellum Constraint SOP


Scale

Plastic Rateの単一スケールスライダ。
Document: Vellum Constraint SOP


Hardening

一部の塑性材質は、変形が加わると剛性が強くなります。そのような材質にはHardeningを1より大きい値に設定します。 他の塑性材質は柔らかくなるので、そのような材質にはHardeningを1未満の値に設定します。
Document: Vellum Constraint SOP


Hardening Attribute

Plastic Hardeningにスケールをかけるアトリビュート。
Document: Vellum Constraint SOP


Scale

Plastic Hardeningの単一スケールスライダ。
Document: Vellum Constraint SOP


Output Group

生成されたStretch拘束すべてが、このプリミティブグループに追加されます。 これは、後でVellum Constraint Property DOPを使って、それらの拘束を編集するのに役立ちます。
Document: Vellum Constraint SOP


Keep Unique within Output Group

Output Group内の拘束が、特定のポイントを1度だけ拘束できるようにします。 動的に拘束を生成する時、フレーム毎に同じポイント間で拘束を何度も生成してしまうことがよくあります。 Output Group内のポイントを固有に維持することで、拘束が何度も繰り返されて生成されるのを回避することができます。
Document: Vellum Constraint SOP


Breaking

Enable Breaking

拘束プリミティブは、十分な変形または圧力が加わった時にソルバによって削除することができます。 つまり、実質的にその拘束を切ります。 計算中に拘束プリミティブを削除することで拘束が切れるので、手動でそのタイミングを完全制御することもできます。

まず最初に可視化を有効にしてシミュレーションを実行すると、閾値に対してどのような値が良いのかわかるので便利です。
Document: Vellum Constraint SOP


Threshold

拘束の切断を発動させる圧力または変位の大きさ。
Document: Vellum Constraint SOP


Threshold Attribute

ThresholdにスケールをかけるPointアトリビュート。
Document: Vellum Constraint SOP


Scale

Thresholdにスケールをかける単一スライダ。
Document: Vellum Constraint SOP


Type

これは、ソルバがWeld拘束やHair拘束の切断を決定する方法を制御します。

None
自動化されたテストを実行しません。

Document: Vellum Constraint SOP


Stretch Stress

伸長圧力が閾値を越えなければなりません。
Document: Vellum Constraint SOP


Bend Stress

屈曲圧力が閾値を越えなければなりません。
Document: Vellum Constraint SOP


Stretch Distance

ゴール位置から現行位置までの絶対距離が閾値を越えなければなりません。
Document: Vellum Constraint SOP


Stretch Ratio

現行長と自然長の比率が閾値を越えなければなりません。
Document: Vellum Constraint SOP


Bend Angle

現行角と自然角の差が閾値を越えなければなりません。この値の単位は度です。

Type

これは、ソルバがDistance拘束の切断を決定する方法を制御します。

None
自動化されたテストを実行しません。

Document: Vellum Constraint SOP


Stretch Stress

伸長圧力が閾値を越えなければなりません。
Document: Vellum Constraint SOP


Stretch Distance

ゴール位置から現行位置までの絶対距離が閾値を越えなければなりません。
Document: Vellum Constraint SOP


Stretch Ratio

現行長と自然長の比率が閾値を越えなければなりません。
Document: Vellum Constraint SOP


Attributes

Promotion Method

スケール乗算アトリビュート関数は、拘束で必要なポイント上のスケールアトリビュート値を単一拘束に対して別々の値を適用することができます。これは、それらの値をブレンドする方法を制御します。

Maximum
最大スケール係数が使用されます。

Minimum
最小スケール係数が使用されます。

Average
ポイントスケール係数の平均が使用されます。

Multiply
スケール係数がすべて乗算されます。

Use Source
Stitch拘束などで、ソースポイントスケール係数が使用されます。

Use Target
Stitch拘束などで、ターゲットポイントスケール係数が使用されます。

Document: Vellum Constraint SOP


Tag

このノードで作成されたすべての拘束のconstraint_tagPrimitiveアトリビュートに格納する文字列。 このタグをVellum Constraint Property SOPConstraint Groupパラメータで使用することで、簡単に特定の拘束を変更することができます。
Document: Vellum Constraint SOP