LightWave3D - Modeler 用 プラグイン
Ver 2.10
Manual

(C)1999 Hiro Otsuka


目次

PointFitについて

更新履歴

動作条件

各パラメータの概要

各パラメータの詳細

Mode
Magnet
Axis
CenterX,CenterY,CenterZ
Direction
Thickness
NotBack
ZoomPolygon
ForeGround
OverMove
ForceMove
ForcePlus
FallOff


チュートリアル

Flat 指定
Fit 指定
注意事項その他
 

・PointFitについて

このプラグインは、 バックグラウンドレイヤーに表示された 物体に
フォアグランドレイヤーのポイントをフィットさせるものです。
元々は、細分化された板ポリゴンを人体のオブジェクトにフィットさせ、衣服の
雛形を作成する目的で作った Plug-In です。しかし、ポイント単位でポリゴンに
フィットさせるため、様々な用途が考えられます。


・更新履歴

1999/09/03 Ver.1.00 リリース
1999/11/02 Ver.1.10 リリース ・ZoomTarget機能を追加
1999/11/16 Ver.2.00 リリース
・Fit 指定 および Magnet を追加
これにより内部構造が大きく変わり、メモリの消費が大きくなる
・OverMove 機能を追加
・ForceMove 機能を追加
1999/11/21 Ver.2.10 リリース
・ForcePlus 機能を追加
・FallOff の仕様を変更
・NotBack 機能を追加
・ForeGround 機能を追加
これにより、ZoomTarget を ZoomPolygon と名称変更


・動作条件

  LightWave3D intel版 のみ対応しています。
  LightWave3D のバージョン条件については、当方の知識不足により確認できません。


・各パラメータの概要

Mode:
 フォアグラウンドのポイントをバックグラウンドにフィットさせる方法を、四つのモードから選択します。
Magnet:
 Modeが Fit の場合にのみ指定可能です。ポイントの移動方向に、バックグラウンドのポリゴンの位置を足します。
Axis:
 Modeが Flat, Pipe の時に指定可能です。移動の基本となる軸を決定します。
CenterX,CenterY,CenterZ:
 Modeが Pipe, Ball の時に指定可能です。ポイントの移動先を決定します。Pipe の時は、Axis によって2箇所、Ball の場合は3箇所を指定します。
Direction:
 全ての Mode で指定可能です。ポイントの移動方向を決定します。
Thickness:
 バックグラウンドのオブジェクトの仮想的な「厚さ」を指定します。これにより、フォアグラウンドのオブジェクトが、バックグラウンドのオブジェクトにめり込んでしまう現象を回避できます。
NotBack:
 このチェックボックスをONにすると、Thickness によって、フォアグラウンドのポイントが「後戻り」する事を禁止します。
ZoomPolygon:
 ここに値を指定すると、バックグラウンドオブジェクトのポリゴンを、「平面的」に拡大し、当たり判定を大きくすることが出来ます。
ForeGround:
 このチェックボックスによって、ZoomPolygon の意味が変わります。これをONにすると、「フォアグラウンドのポリゴン」を、「立体的」に拡大します。ZoomPolygon にマイナスの値を指定すると、縮小する事もできます。
OverMove:
 Fit 指定などの場合に発生する、あさっての方向に飛んでいって しまったポイントを引き戻す機能です。
ForceMove:
 あたり判定が発生せず、移動できなかったポイントを、ポリゴンを共有する他のポイントの移動量から計算された分だけ、強引に移動させる機能です。
ForcePlus:
 この値は ForceMove の値に加算されます。しかし、FallOff が 1.0 の場合には、最初から ForceMove に加算されている場合と変わりません。
FallOff:
 ForceMove の値を、「移動したポイント」からの距離によって変化させる機能です。


・各パラメータの詳細

・Mode

ここで指定した Mode により、ポイントをフィットさせる方法が変化します。

Flat 指定は、フォアグラウンドのオブジェクトを平面的に移動させます。移動方向は、Axis, Direction によって決定されます。
Axis に指定された軸を移動方向とし、Direction が "+" の場合は、マイナスからプラスの方向に向かい、"-" の場合は、プラスからマイナスの方向に移動します。全てのポイントで、移動方向が同じになります。


Pipe 指定は、フォアグラウンドのオブジェクトを筒状に移動させます。移動方向は、Axis, [ CenterX, CenterY CenterZ ] の内の二つ, Direction によって決定されます。
Axis に指定された軸に向かう方向を移動方向とし、CenterX,CenterY,CenterZ のうちの二つで指定された座標に向かいます。Direction が "+" の場合は、その方向に向かい、"-" の場合には、逆の方向に向かいます。Axis で指定された軸以外の2つの座標が同じポイントは、移動方向が同じになります。


Ball 指定は、フォアグラウンドオブジェクトを球状に移動させます。移動方向は、CenterX,CenterY,CenterZ, Direction  によって決定されます。
CenterX, CenterY, CenterZ に向かって、Direction が "+" の場合は、その方向に向かい、 "-" の場合には、逆の方向に向かいます。座標が異なるポイントは、すべて移動方向が異なります。


Fit 指定は、フォアグラウンドオブジェクトの構造を縮小する方向に移動させます。移動方向は、Direction によってのみ決定されます。
Direction が "+" の場合は、各ポリゴンを縮小する向きに向かい、 "-" の場合には、拡大する方向に向かいます。各ポイントは、自動的に移動方向が算出されます。そのため、Fit 指定を行うためには、フォアグラウンドのオブジェクトをある程度整形しておく必要があります。

・Magnet

Magnet は、Mode が Fit の時に指定可能です。これは、縮小しようとする方向に、バックグラウンドのオブジェクトを構成するポリゴンのうち、移動しようとしているポイントにもっとも近いポリゴンの方向を足し (=引き付け) ます。 1.0が標準で、元の方向と同じだけの力で、近接ポリゴンの方向へ引き付けます。これにより、「型」オブジェクトと「元」オブジェクトの形が違う場合でも、正しくフィットさせられる場合がありますが、逆に、結果が悪くなることもあります。
 
左の例のうち、青い線が、内部で算出された元々の移動方向です。黒い線で表されたフォアグラウンドオブジェクトを、そのまま縮小する方向になっています。これでは、上のポイントは、茶色の線で表されたバックグラウンドオブジェクトのどこにもフィットしない可能性があります。
ここで、Magnet に値を指定したとします。すると、緑の線で表された、近接ポリゴンに向かう力が、青い線に足されます。その結果、ポイントの移動方向は、赤い線で表された方向に変化します。Magnet の値は、この緑の線の力を、青い線の力の何倍にするか、という事になります。
極端に大きな値を指定することで、完全に近接ポリゴンの方向に移動させることも出来ます。その場合、近くのポイントは、全て同じ場所にフィットしてしまう危険があります。

・Axis

Axis は、Mode が Flat または Pipe の時に指定可能です。Axis で指定された軸によって移動方向が決定されますが、Flat と Pipe では、その扱いが異なります。Flat 指定の場合は、その軸そのものが移動方向になります。Pipe 指定 の場合には、その軸に向かう方向が移動方向になります。
 
Axis に "Y" を指定した場合
Flat 指定の場合
Pipe 指定の場合

・CenterX,CenterY,CenterZ

CenterX,CenterY,CenterZ は、Mode が Pipe,Ball の時に指定可能です。この3つのフィールドには、ポイントの移動先を設定します。Pipe 指定の場合は、Axis で指定された軸以外の座標を入力します。ポイントは、設定された2つの座標で表される直線に向かう事になります。Ball 指定の場合は、3つの全座標を入力します。ポイントは、CenterX,CenterY,CenterZ で表される一点に向かい、移動します。

・Direction

Direction は、全ての Mode で指定可能です。Direction が "+" の場合が通常の移動になります。Direction に "-" を指定すると、"+" を指定した場合とは逆の方向にポイントが移動します。Direction の意味については、Mode の説明を参照して下さい。

・Thickness

Thickness は、全ての Mode で指定可能です。ここには、バックグラウンドのオブジェクトの、仮想的な「厚さ」を設定します。しかし、実際には、フィットした位置からポイントを引き戻す値であることに注意して下さい。これは、バックグラウンドオブジェクトのポリゴンに、斜めからポイントにフィットした場合に、実際より小さい「厚さ」にしかならないことを意味します。
 
例えば、Thickness に 5cm と指定したとします。
茶色の線で表されたバックグラウンドオブジェクトが、実際に 5cm の厚さを持っていたとすると、紫の線が、正しいフィット位置になります。
ここで、赤い点が、緑の矢印に沿って移動し、青い点の位置にフィットしたとします。PointFit では、Thickness に値(ここでは 5cm)が指定されると、そこから、緑の矢印の反対の方向に 5cm 移動し、黒い点の部分にフィットします。ですので、実際には、紫の線で表された厚さを持ったオブジェクトの内側に入ってしまっています。
これは、極端に斜めの角度からポリゴンにフィットした場合に、遙か後方までポイントがとばされてしまうのを回避するためです。

・NotBack

NotBack は、全ての Mode で指定可能ですが、Thickness が 0 の場合には意味がありません。このチェックボックスを ON にすると、Thickness によって移動されたポイントが、元のポイントより後方にあたる場合には、ポイントを移動しません。NotBack が OFF の場合、Thickness によって、バックグラウンドオブジェクトに近すぎるポイントを離れさせる事が可能ですが、場合によっては不都合があります。そのような場合には、このチェックボックスを ON にして下さい。
 
左のような場合。例えば、ズボンの股の部分です。
二つの赤い点が、茶色い線で表されるバックグラウンドオブジェクトに、青い点の位置にフィットしたとします。Thickness の値によっては、それぞれ元の赤い点の位置から見て後方にあたる、黒い点の位置にフィットしてしまう場合があります。これは、点の位置が左右で反転しており、フォアグラウンドのポリゴンを見た場合、赤い点の属するポリゴンが交差してしまいます。NotBack を ON にすると、左の例の場合、ポイントは、赤い点の位置(つまり元の位置)にとどまります。
このような例は、Mode が Fit 指定の場合によく発生します。

・ZoomPolygon

ZoomPolygon は、全ての Mode で指定可能です。ZoomPolygon に値を指定すると、PointFit は、当たり判定の対象となるバックグラウンドオブジェクトを、ポリゴン単位で平面的に拡大します。PointFit では、バックグラウンドのオブジェクトが3角ポリゴンではない場合、内部で3角ポリゴンに分割しています。平面的な拡大は、3角ポリゴン化する前に行われます。拡大処理は、バックグラウンドオブジェクトを構成するポイントを、ポリゴンの中心から、ZoomPolygon で指定された距離の分だけ遠ざけることによって実現されています。
 
左の例が、ポリゴンを平面的に拡大した場合の図です。
立体的に拡大した場合とは違い、ポリゴン同士の角度が鋭い場合には、「飛び出ている」部分が大きくなってしまいます。
そのため、ZoomPolygon を指定すると、フォアグラウンドのポイントが何もない場所にフィットしているように見える場合があります。
その結果が不自然に見える場合には、場合には、ZoomPolygon は 0 にして下さい。
ZoomPolygon は、Mode が Flat 指定の場合で、幾何学的なオブジェクトにフィットさせる場合に有効です。
非平面ポリゴンが含まれている場合には注意が必要です。
ZoomPolygonを適用しない場合 ZoomPolygonを適用した場合

・ForeGround

ForeGround は、全ての Mode で指定可能ですが、ZoomPolygon が 0 の場合には何も処理されません。このチェックボックスは、ZoomPolygon の処理を全く違ったものにします。ForeGround を ON にすると、フォアグラウンドオブジェクトを ZoomPolygon で指定された距離だけ、立体的に拡大します。ですので、このチェックボックスを ON にした場合には、バックグラウンドにオブジェクトを指定する必要がありません。
なお、プラグインの性質上、Direction に "+" を指定した場合が縮小、"-" を指定した場合に拡大となることにご注意下さい。また、Fit指定以外での ForeGround は、通常の拡大・縮小と変わりません
この機能は、Fit 指定でバックグラウンドオブジェクトにフィットさせる場合の、各ポイントのだいたいの移動方向を調べる目的で追加されています。
 
ForeGround による拡大処理(Fit指定)
元オブジェクト
通常の拡大
ForeGround による拡大

・OverMove

OverMove は、全ての Mode で指定可能です。この機能は、Fit 指定の場合に発生する、あさっての方向に飛んでいってしまったポイントを引き戻す事が出来ます。
OverMove に 1.00 を指定した場合、あるポイントが、ポリゴンを共有する他のポイントよりも 2倍 以上移動していた場合、このポイントは「行き過ぎ」であると判定され、元の場所に引き戻されます。値に 1.50 を指定した場合は、2.5倍以上移動した場合に「行き過ぎ」と判定されます。

・ForceMove

  ForceMove は、全ての Mode で指定可能です。この機能は、あたり判定が発生せず、移動できなかったポイントを、ポリゴンを共有する他のポイントの移動量から計算された分だけ、強引に移動させる機能です。面ポリゴンに属さないポイントの移動先は保証されません。
これは OverMove 機能で引き戻されたポイントも対象となります。
値に 1.00 を指定した場合、ポリゴンを共有する他のポイントのうち、もっとも小さい移動量を持つポイントの移動量だけ、移動します。値に 0.5 を指定した場合、その半分だけ移動します。この場合、移動できたポイントから離れるほど、移動量が小さくなっていきます。逆に 1.5 を指定すると、移動できたポイントから離れるほど、移動量が大きくなっていきます。
 
左の例は、OverMove と ForceMove の併用例です。
真ん中のポイントが間違った方向に移動し、かなりの距離を移動してしまっています。Fit 指定の場合には、フォアグラウンドポリゴンの構造によって、こういった事象が発生する場合があります。
ここで、OverMove に適当な値を設定すると、真ん中のポイントは周りのポイントの移動量から見て「行き過ぎ」であると判断され、元の場所に戻ります。その後、そのポイントは ForceMove の移動の対象になります。Fit 指定の場合、ForceMove での移動方向は、周りのポイントの移動方向を平均したものでやり直されるため、その結果、黒い点で表される、正しい位置に移動する事になります。
左の例は、ForceMove に 2.0 を指定した場合の例です。一番左にあるポイントが フィットによって移動できたポイントです。その右にあるポイントは、一番左にあるポイントの2倍移動しています。さらにその右側のポイントは、その左にあるポイントの2倍移動しています。このように、ForceMove に 1.0 以外の値を指定した場合、移動できたポイントから離れるほど、大きく(または小さく)移動することになります。この例では2次元ですが、実際には3次元ですので、移動距離は周りのポイントの平均値に ForceMove の値をかけたものとなります。

・ForcePlus

ForcePlus 機能は、全ての Mode で指定可能です。この機能は、ForceMove の値と関係があります。ForcePlus に指定された値が、ForceMove に加算されます。ForcePlus については、FallOff についての説明を参照して下さい。

・FallOff

FallOff 機能は、全ての Mode で指定可能ですが、ForcePlus の値が 0 の場合には意味がありません。この機能は、ForceMove , ForcePlus の値と関係があります。ForcePlus の値は ForceMove の値に加算されますが、その時、移動できたポイントから離れるたびに、ForcePlus の値に FallOff の値をかけてから加算していきます。つまり、FallOff に 1.0 より小さい値を設定したとすると、移動できたポイントから離れれば離れるほど、ForcePlus の値が 0 に近づいていき、その結果、ForceMove の値に近づいていきます。1.0 より大きい数値を指定すると、ForcePlus がどんどん大きくなっていきます。通常の場合、FallOff には、0 以下の値を指定する事はありません。
 
左の例は、ForceMove に 1.0 を、ForcePlus に 1.0 を、FallOff に 0.5 を指定した場合の例です。
一番左にあるポイントが フィットによって移動できたポイントです。その右にあるポイントは、FallOff の 0 乗 は 1.0 になりますので、ForceMove に ForcePlus の値を足し、一番左にあるポイントの 2( 1.0 + 1.0 * 0.5^0)倍移動しています。その右にあるポイントでは、ForceMove の値である 1.0 に、 ForcePlus に 0.5 をかけたものを足し、左にあるポイントの 1.5 倍移動しています。さらにその右のポイントでは、左にあるポイントの 1.25( 1.0 + 1.0 * 0.5^2) 倍移動しています。
このように、移動できたポイントから離れるほど、ForcePlus にかける FallOff の値が 0 に近づいていき、その結果 ForceMove の値に近づいていくことがわかります。


 

・チュートリアル

・Flat 指定

Flat 指定のチュートリアルでは、文字を使った表現で、PointFit の基本的な機能を解説してみます。
 
1. まず、対象となるオブジェクトを用意します。
ここでは、「日本語入力」プラグインで、アルファベットの"P" を作成しました。
2. PointFit は内部でポリゴンを三角ポリゴンに分割します。しかし、この様な凹型のポリゴンは、うまく分割できないことがあります。
そこで、これを手動で分割します。
このオブジェクトの場合、P の、曲線の付け根部分を手動で分割する事により、「三角ポリゴン化」で処理することが出来ました。
3. 次に、加工するオブジェクトを用意します。
ここでは、細分化された板オブジェクトを「ボックス」で作成し、使用します。
Segment を 30x20 で作成した板オブジェクトをフォアグラウンドオブジェクトとし、バックグラウンドオブジェクトに、2.で作成した文字を指定します。
また、フィットさせるために、加工する板オブジェクトは、バックグラウンドオブジェクトから少し離しておきます。
4. 準備が整ったら、PointFit を実行します。
この例では、Mode に Flat, Axis に Z, Direction に + を指定しました。つまり、全て初期値のままです。
その結果に MetaNURBS をかけたものが、右の写真です。全て初期値ですので、フィット出来なかったポイントは、元の場所にとどまっています。
5. それでは、ForceMove を適用してみましょう。
Undo して、3. の状態に戻します。
そして、PointFit を起動し、ForceMove に 1.2 を指定して実行します。他は全て初期値です。
その結果、右のようになりました。
移動できたポイントから離れているポイントほど、奥に移動しているのがわかります。
このページのロゴは、このようにして作成されました。
6. 上の、5.の結果は、これはこれで良いのですが、今度は ForcePlusFallOff を適用してみます。
Undo して 3. の状態に戻し、ForceMove を 1.0 に、ForcePlus を 0.3 に、FallOff を 0.8 にします。
その結果が右の写真です。
移動できたポイントの隣のポイントは、移動できたポイントの 1.3 倍移動し、その隣のポイントは 1.24 倍移動し、という様に、移動できたポイントから離れるほど、1.0 倍の移動に近づいていっています。
以上で、Flat 指定のチュートリアルは終了です。
ForceMove や ForcePlus, FallOff に指定する数値は、Undo を利用して何度もやり直すことにより、望んだ結果に近づいていくと思います。

・Fit 指定

Fit 指定のチュートリアルでは、袖のある服を作成する過程を解説することによって、Fit 指定で発生しうる特有の問題と、その回避方法を解説してみます。
 
1. まず、服を着せる身体を用意します。
ここでは、凹凸の多い、女性のオブジェクトを用意しました。決して、女性の身体の方が好きだから、と言う理由では・・・あります。
右の例では、MetaNURBS -> ポリゴン化 をかける前の、ポリゴン数の少ないオブジェクトを使用しています。また、ポリゴン数が多く、計算の対象とはならない「頭」の部分は削除しています。
このように、Fit 指定の場合には、計算に時間がかかる場合が多いので、出来る限り、対象オブジェクトのポリゴン数を押さえるようにします。
2. 次に、服の元になるオブジェクトを用意します。
作り方はどんな方法でも良いのですが、ここでは、「ディスク」で胴の部分をつくり、「スムース押出し」で袖の部分を引き出しています。袖の部分は筒状に加工し、「ナイフ」ツールで、袖の部分のポリゴンを細分化してあります。
また、「ディスク」で生成される、筒のフタ、および底の部分は削除しました。
3. これをそのまま PointFit にかけてみます。
Mode を Fit にする以外は、全て初期値のままです。
その結果が右の写真です。いくつか不具合が発生しています。
股下部分はわかりますが、首の部分に、移動していないポイントがあります。
これは、このような単純な筒状のオブジェクトの場合、Fit 指定であっても、Pipe 指定と同じ様な移動になり、方向があわず、どこにもフィット出来なくなってしまっているためです。まず、これを改善します。
4. Undo を使って 2.の状態に戻し、首の部分のポイントを選択します。そして、「拡大縮小」で、ある程度、形を整えます。
また、3.では脇の部分が広がっているので、この辺りを「ナイフ」ツールで細分化しています。
5. PointFit にかけた結果、右のようになりました。
首の部分、脇の部分が改善されています。また、細分化したことにより、胸の形がくっきり出るようになりました。
6. 次に、股下の部分を改善してみます。
これは、オブジェクトの修正は不要です。
Undo で 2. の状態に戻し、ForceMove に 1.0 を設定してPointFit を実行したところ、右のようになりました。
7. 6.の結果をよく見ると、股下の部分に影が出来ています。
これは Fit 指定 の場合に特有の現象で、この例では、身体のオブジェクトと服のオブジェクトが離れすぎているため、右の図のようにポイントが入れ替わってしまっているためです。黒い点が通常の移動が行われたポイント、青い点が ForceMove で移動したポイントです。
真ん中の2つの点が、交差してしまっています。
8. これを回避する方法は、出来るだけ、服オブジェクトを身体のオブジェクトに近づけることです。Magnet に数値を指定することで回避できることもありますが、Magnet を指定した場合、結果が大きく変わってしまう場合がありますので、このチュートリアルでは説明しません。
6.の写真ではよくわかりませんが、ウエストの部分も、同じ様な状態になっています。
そこで、服オブジェクトの一部を「拡大縮小」し、右のように修正しました。
ある程度形を整え、一部は再度、「ナイフ」ツールでポリゴンの細分化を行っています。
9. その結果、右のようになりました。股の部分、ウエストの部分、また、5.で発生していた、鎖骨の部分のシワも、解消されています。
10. 9.の結果でも良いのですが、ここでは ForcePlusFallOff を使い、股下の部分をもう少し修正します。
何度か試した結果、ForceMove に 1.0, ForcePlus に 0.5, FallOff に 0.7 を指定する事で、右のような結果が得られました。ただ、移動できなかったポイントが少ない場合には、手動で修正した方が速い場合もあります。
11. 最後に、Thickness を設定し、服を身体から浮かせます。
ここでは、Thickness に 1.5cm を指定した結果、右のようになりました。
ここで、身体が凸になっている部分で服が身体にめり込んでしまったりする場合には、Undo し、その部分を「ナイフ」ツールで細分化する事により、この問題を回避できます。
以上で Fit 指定の場合のチュートリアルは終了です。
この例の様に、Fit 指定では、移動させるオブジェクトを、対象となるオブジェクトに出来るだけ近づけることにより、良い結果が得られるようになります。トライ&エラーの繰り返しによって、だんだんと望んだ形に近づいていくと思います。
頑張って下さい!!

・注意事項その他

  このソフトを使用した事で生じた損害などに対して、いっさい責任は持てません。
  なにぶん LightWave3D を購入してから日が浅く、中身がよくわからないままに
 作ったものなので、規定外の使い方をされた場合の動作は保証できません。

  本ソフトおよびこのマニュアルの著作権は、私 [大塚ヒロ] が持ちます。
 また、本ソフトは、フリーウェアの扱いに準じます。
  バグレポート、機能のリクエスト等につきましては、
下記の連絡先までお送りいただければ幸いです。


 
-- 大塚ヒロ 連絡先
E-Mail: otsuk@purple.plala.or.jp
URL:    http://www1.plala.or.jp/Otsuka/
--



このマニュアルに誤字・脱字、事実誤認などがありましたら、大塚ヒロまでお知らせいただければ幸いです。