strange items(楽天)


shade10.5〜15用スクリプト(WINDOWS&MAC用)一覧はこちらです。


bannerst.jpg
リンク用のバナーです。
リンクはご自由にどうぞ。

2009年11月11日

shade用スクリプトその20(選択辺を線形状に沿って押し出し)

新)選択辺を線形状に沿って押し出し20130123.txt

旧)選択辺を線形状に沿って押し出し120330.txt

旧)選択辺を線形状に沿って押し出し20110412.txt

旧)選択辺を線形状に沿って押し出し101229.txt

旧)選択辺を線形状に沿って押し出し20101011.txt

旧)選択辺を線形状に沿って押し出し20100303.txt

旧)選択辺を線形状に沿って押し出し20100210.txt

旧・選択辺を線形状に沿って押し出し.txt


<重要>上位パートに変換がかかっている状態で、かつ一時ローカル座標モードかろくろモードONの状態でスクリプトを実行すると、「スクリプトの処理結果をキャンセルした際」に形状が破壊されてしまう不具合を修正しました。(2010.03.03)
修正前の旧版をお使いの方は不具合を修正した新版をダウンロードしなおしてください。
(メッシュツールプラスウィジェットでスクリプトを利用していた方はメッシュツールプラスの最新版をダウンロードしなおしてください。)

shade13.22にあわせて修正(2013.01.23)
shade13.01に対応(2012.03.30)
shade12.02に対応(2011.04.12)
shade12で使用すると不具合が発生するため、shade10,12両方で正常に動作するよう修正しました。(2010.12.29)

選択辺がループ状につながっていない状態でスケーリングオプションを使用すると結果が不正になってしまう不具合を修正しました。(2010.10.11)
スケーリングオプションを追加しました。(2010.02.10)
不正な内包面ができてしまう場合があるバグを修正しました。(2009.12.26)
表面材質情報とUV情報がクリアされないように改良しました。(2009.12.10)
不正な選択状態(ループ状の線1本と、それとは離れた箇所で線1本の計2本の線を選択状態)でスクリプトを実行すると、プログラムが無限ループしてしまうバグを修正しました。(2009.11.12)



とりあえず、ここを読む前にひとつ前の「shade用スクリプトその19(選択辺を線形状に変換)」のエントリもお読みください。
すでに読んでる場合は、このまま説明をどうぞ。

前回では、
「選択辺を線形状に変換」スクリプトでポリゴンメッシュの稜線(穴の縁の辺)を線形状化

開いた線形状ツールで掃引パスを書いて「記憶」し、先ほどの線形状を選択して「掃引」を実行

「掃引」でできた自由曲面をポリゴンメッシュ化した後、元のポリゴンメッシュとマージすると稜線を掃引パスにそって押し出しできます。

といった感じでした。

で、今回のスクリプトはそのいくつかの手順もスクリプトで処理してしまって、いきなり結果だけいただいてしまおうと。


選択辺を押し出し001.png
このような半球状のポリゴンメッシュがあったとします。
選択辺を押し出し002.png
「開いた線形状」ツールで、ポリゴンメッシュのすぐ下(弟階層)に線形状を描きます。
(ポリゴンメッシュ選択状態で「開いた線形状」ツールを起動すると自動で真下に作られます。)
前回も明記したように、掃引パスのルールは、「断面にできるだけ垂直で描画を開始」「断面の中央あたりの座標から描画を開始」が望ましいです。
なお、今回はその開いた線形状を描いた後にいちいち「記憶」をする必要はありません。ポリゴンメッシュの真下にあればいいだけです。
選択辺を押し出し003.png 
ポリゴンメッシュを選択し、編集モード「辺編集モード」に入って、線形状に沿って掃引したい稜線(今回はこんな感じ)をエッジバウンダリー選択スクリプトなどで選択してから、この「選択辺を線形状に沿って押し出し」を実行します。
分割数を聞かれるので、好きなように設定してください。結果を確認してからキャンセルして、簡単に分割数の入れ直しもできます。
デフォルトとして表示・入力されている分割数は、掃引パスとなる開いた線形状のコントロールポイントの数-1となっています。
(今回の例の掃引パスのCP数は3なので、デフォルトの分割数は2となってます。)
今回は分割数はデフォルトの4倍の8としました。
選択辺を押し出し004.png
分割数の入力を終えてokを選択するとスクリプトの処理が実行され、一瞬でパスに沿って稜線が掃引されました。
根元の方もきっちりと接続されています。
*前回と同じく、スクリプトの途中でポリゴンメッシュ同士のマージ処理が行われるため、表面材質情報がクリア(消去)されてしまう点にはご注意ください。
(新バージョンでは表面材質情報およびUV情報はクリアされずに保持されたままとなります。)

元のポリゴンの構成によっては、面の向きが全て逆転してしまう場合がありますが、その場合は全ての面を選択してshade標準のメッシュツールの「flip」で反転してください。
(面の方向は統一処理されています。)


前回の「選択辺を線形状に変換」スクリプトの応用みたいなものですが、今回は、「選択している辺(押し出す稜線)」の選択状況については、さらにルールが厳しくなっています。
分岐してる線が不可なのはもちろんなのですが、それに加えて選択している辺が全て「縁にある辺」か、「ポリライン上の辺」でないといけません。つまり、選択している辺に隣接している面の数が1個か0個でないといけないと。
なんでこんなルールを追加したかといいますと、ポリゴンの縁の辺やポリライン上の辺でない辺(つまりすでに二つの面と隣接している辺)を掃引パスに沿って押し出して元のポリゴンメッシュにマージしてしまうと、三面稜線や内包面ができてしまうからです。
そのため、このスクリプトが実行される条件には「選択してるのが全て縁の辺」か「隣接面を持たないポリライン上の辺」でないといけないという風にしました。

選択辺を押し出し005.png

それを守っていれば、こういう風に掃引パスを書いて一部の縁の辺を選択してこのスクリプトを実行すれば
選択辺を押し出し006.png
と押し出しもできますし、

選択辺を押し出し007.png

このようなポリライン上の辺も
選択辺を押し出し008.png
このスクリプトで一瞬でパスに沿って掃引できます。


選択辺を押し出し009.png
また、このスクリプトがあれば、前回の「選択辺を線形状に変換」スクリプトが必要ないかというと、例えば上記のような形状があったとします。

選択辺を押し出し010.png
図のように辺を選択した後、「選択辺を線形状に変換」スクリプトを実行すると、
選択辺を押し出し011.png
このような線形状が得られます。
今回は線形状の始点があちらの端になってしまっているので、リターンキーを押して編集モードを一度出てから、「形状編集>逆転」で始点をこちらの端に変更しておきます。
選択辺を押し出し012.png
ポリゴンメッシュを選択し、「辺編集モード」にしてからこのように辺を選択した後、「選択辺を線形状に沿って押し出し」スクリプトを起動し、分割数はデフォルトの数値のままにして実行します。
選択辺を押し出し013.png
するとこんな感じで稜線を掃引できるわけです。
中央部あたりの線が太くなってますが、これは単に開いた線形状が同位置にあり、しかもそれが「記憶」を実行された線形状であるため太く描画されてるだけです。
中央部あたりのポイントもきちんとマージされています。

こういう風に「選択辺を線形状に変換」と「選択辺を線形状に沿って押し出し」を併用すれば、例えば人物のモデリングなどでは頭頂部や後頭部の作成が多少楽になると思います。


なお、ポリゴンメッシュに角の丸めの「カトマル」か「ドゥサビン」を設定してた場合は、スクリプト実行後は角の丸めがOFFになってしまいますので、その際には形状情報パネルで角の丸めをONにしなおしてください。
(現在のバージョンは角の丸めONのまま掃引できるようになっています。)

また、「スクリプトが何故か起動しない…」という場合は、余計な辺が選択されてないか、ポリゴンメッシュを回転させて確認してみてください。


<スケーリングオプションについて>
面張り015.png

「区間ごとにスケーリングする」チェックをONにする事によって、縮小させつつ掃引(拡大しつつ掃引)できるようになりました。

掃引a001.png
わかりやすいように直線上に掃引する例でパラメーターの違いによる変化をご紹介します。
分割数はいずれも10です。
掃引a002.png
まずは「区間ごとにスケーリングする」がOFFの状態での掃引です。


掃引a003.png
上記は「区間ごとにスケーリングする」をONにし、「縮小する」、係数は「1.0」、変化値は「0.1」で実行した場合

掃引a004.png
係数と変化値は同じで「拡大する」にした場合

掃引a005.png
「縮小する」、係数は「2」、変化値は「0.1」の場合。なだらかに縮小していきます。

掃引a006.png
「縮小する」、係数は「0.5」、変化値は「0.1」の場合


「係数」と「変化値」についてですが、区間毎の倍率は以下の式で出しています。
倍率=1+pow(変化値*何区間目か,係数)*muki

mukiは「縮小する」の場合は-1、「拡大する」の場合は1となります。

pow(a,b)という式は、aをb乗した値を返します。
pow(3,2)だと3の二乗を返し、pow(3,0.5)だと3の平方根を返します。

「何区間目か」は、根元(最初に選択していた辺)を0とし、その次の区間を1、その次は2……という風になっていきます。

例えば「縮小する」で係数を1、変化値を0.1、分割数を10とすると、
区間毎の倍率=1-pow(0.1*何区間目か,1)
となり、区間毎の倍率は1→0.9→0.8→0.7・・・・となっていきます。
ちょうど10区間目で倍率は0となるので、分割数が「10」、係数が「1」の場合は変化値を「0.1(1/10)」にするとちょうど一番端の部分が一点に収束します。
分割数が「20」、係数が「1」の場合は、変化値を「0.05(1/20)」にすると、ちょうど一番端の区間が一点に収束します。

なお、倍率が0以下になった場合は0に補正されます。
掃引a007.png
係数と変化値によっては、このように途中で倍率が0になってしまう場合があります。


上記の例では直線状に掃引していますが、
面張り017.png
スケーリングオプションを使って曲線状に掃引すると、こういう角形状が簡単に作れます。


posted by stxsi at 17:05| shadeスクリプト | このブログの読者になる | 更新情報をチェックする