strange items(楽天)


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


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

2010年01月17日

shade用スクリプトその35(内包面選択)

新)内方面選択20130123.txt

旧)内方面選択120330.txt

旧)内方面選択110412.txt

旧)内方面選択20100130.txt

旧)内方面選択.txt


shade13.22にあわせて修正(2013.01.23)
shade13.01に対応(2012.03.30)
shade12.02に対応(2011.04.12)
処理を高速化しました。(2010.01.30)


内包面バグ009.png

上記ポリゴンメッシュは、各断面に意図的に内包面(ポリゴンメッシュの中に埋もれた面)を作っています。
内包面バグ010.png
ワイヤーフレーム表示にして内包面だけを選択状態にすると上記の通りです。

shade標準のメッシュツールでは内包面を検出して選択状態にするツール(「detect>内包面」)があるのですが、このツールは時々意図しない面までも選択状態となってしまいます。
先ほどの例でshade標準の内包面選択ツールを使うと…
内包面バグ011.png
のように、ポリゴンメッシュの中に埋もれた面だけでなく何故か側面の面まで選択状態になってしまう場合があります。

この「内包面選択」スクリプトは、shade標準の内包面選択ツールとは違ったアルゴリズムで、ポリゴンメッシュの中に埋もれた不正な内包面だけを選択状態にします。
内包面バグ010.png
スクリプトで 内包面が選択状態になった後は、キーボードの「del」キーを押すだけで 内包面は削除できます。

四つの内包面がぐるりと一周するようにポリゴン内部に埋まっている場合(上から見ると四角形上に並んでいる)や、三つの内包面が同じくぐるりと一周するようにポリゴン内部に埋まっている場合(上から見ると三角形上に並んでいる)は、ポリゴンの外側の面も間違って選択してしまう場合があります。その場合はdelキーを押す前に余計な面の選択は手動で解除してください。


そもそもこのスクリプトを作った動機としては、「選択辺を分割」「指定数で分割」「指定位置で分割」「極周辺で分割」スクリプトにおいて、特定の条件で不正な内包面や三面稜線が生成されてしまうバグが最近になって見つかったからです。

内包面バグ001.png
例えば上記のように辺を四つ選択状態で「選択辺の分割」を行うと、

内包面バグ002.png
という風に、選択辺の中点に新しい頂点を追加し、さらに同じ隣接面を共有していた辺の中点同士にはエッジが張られます。

内包面バグ003.png
「シェーディング+ワイヤーフレーム」モードで表示するとこのようになるのですが、中点間にエッジを張った際に、中点同士を結ぶエッジで四角形ポリゴンが構成できてしまったためshadeはそこにも面を張ってしまい、そのため不正な内包面ができてしまうようです。

内包面バグ004.png
面編集モードにするとその不正な内包面が確認できます。
(赤くなっているのは中点四つを頂点とする四角形ポリゴンです。)

選択辺が5つ以上の場合は、中点が5つになりますので、中点同士にエッジを張っても5角形ポリゴンとなるので、shadeはそこにはポリゴンを張りませんが、選択辺が4つや3つの状態で中点同士にエッジを張ってしまうと、上記のように中点を頂点とした不正な内包面ができてしまうようです。

同じ問題は「指定数で分割」「指定位置で分割」でも発生するようで、例えば断面が四角や三角の場合は、やはり追加した頂点同士にエッジを張った際に、四角形や三角形の面ができてしまうとshadeはそこにも面を張ってしまいます。

内包面バグ005.png
辺を一つ選択して「指定数で分割」スクリプトで分割数を「3」にして実行すると
内包面バグ006.png
となるのですが、この際に
内包面バグ007.png
内包面バグ008.png
と二つの不正な内包面ができてしまっています。

「極周辺で分割」スクリプトでも、極に集まっている辺の数が三本か四本の場合は、分割後に四角形や三角形部分に不正な内包面ができてしまいます。


「選択辺を分割」「指定数で分割」「指定位置で分割」「極周辺で分割」スクリプトでは、以下のように特定の条件で処理を行った場合は、不正な内包面ができてないか、この「内包面選択」スクリプトでチェックしてみてください。

「選択辺を分割」・・・・選択している辺の数が3本か4本で、かつその選択辺がパラレル(リング)状に一周して配置されている場合
(選択辺の数が3本か4本でも一周してない場合や、一周してるけど選択辺の数が5本以上の場合は不正な内包面はできません。)

「指定数を分割」「指定位置で分割」・・・・・この二つのスクリプトでは、まず最初に選択した辺からパラレル(リング)選択処理を行って選択辺を拡張するのですが、拡張後の選択辺の数が4本以下で、かつ一周している場合。
(拡張後の選択辺の数が5本以上の場合や、4本以下でも一周してない場合は問題なし。)

「極周辺で分割」・・・・極に集まっている辺の数が4本以下の場合。



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