« ICE デフォーム。 | トップページ | Paul さんの ICE ビデオ増殖。 »

2011年1月21日 (金)

平面 Knight。

すいませんちょっと疲れちゃってるので、ひとまず投げやりに書きます。


昨日の夜に、平面ナイトが勃発しました。


平面じゃない、よじれたポリゴンを、平面にするという作業をやっていたんですが、意外とアクロバティックな形状だったりして、難儀してましてね。 スケールゼロで平面にしちゃうと、そのポリゴンはいいけど、となりのポリゴンが平面でなくなったりするわけでね。 なので、あるエッジの傾きはキープしたまま、こっちのポリゴンは平面になってくれ、ということがやりたくて。 


そしたら、身長272センチのあのお方が、スライスツールを使ったワークフローを教えてくれました。 手順はちょっとめんどくさいけど、ひとまずやりたいことはできたように見える。


その手順をスクリプトにしたというだけのものです。


ダウンロード HeimenKnight_alpha1.js (2.0K)

Heimenknight
生まれて初めて GIF アニメーションを作った気がする



書きたてほやほやです。エラーチェックもしてないし、検証なんてマトモにしてないし、このスクリプトを使っても結局手作業多いし、出すのが恥ずかしいくらいのスクリプトなんですが、まあ、誰か興味のある方がいたら揉んでくれないかなーなんて思いましてね。

スクリプトは、もちろんプラグインになんてなってません。スクリプトエディタで走らせる必要があります。JScript です。

オブジェクト1個にしか効きません。コンポーネント選んで実行しないと止まります。 GIFアニメーションを見るとわかりますが、窪んだ形= concave の時はまだいいけど、convex 状態の時は手で concave にしてから実行しないとダメです。

とかいう実にベアなスクリプト。



やってることは、スライスツールでぶった切る平面を、選択したポリゴンから自動で取ってくるというだけですね。 ある平面を基準に、その延長面上でスライスすればぜってー平面になるはずだ、というアイデアなわけで、そういった平面を構成するためのしくみなどを思いも付かずにただ作業している阿呆な俺にはとてもありがたかったのですが、手順がめんどくさかったんです。だから自動化しただけ。手作業のログを書き換えた程度のものです。

しかも平面の計算だかベクターだかノーマルだか、そういうの俺にはさっぱりなので、ダミーのヌルに Object to Cluster + Tangency & UpVector オンをかまして平面の傾きと位置を取ってきています。退廃的です。 そして値が取れたら気付かれないようにこっそりヌルもクラスタも消しておくなどという、実に姑息な手段をとっています。 なんとも俺らしい、難しい計算は XSI 様の何かの機能を使ってやってもらおう、結果が同じならいいじゃん的な、自暴自棄なスクリプトです。


複数のポリゴンを基準面にすると、その平均化された傾きの平面でスライスされますね。当たり前ですが。 エッジやポイントを選んで実行してもOKですが、まあ使い物にはならない。ポリゴン選んで実行するのがほぼ前提です。 しかも、完全な平面を目指すなら、三角形の平面を選んでおくべきですね。 基準面が平面じゃないと、結局平均化された平面でスライスされるわけですからね。



まあそんだけです。




平面ナイトに参加してくれたあのお方は、スクリプトで法線のベクトルを出す方法を教えてくれました。しくみは理解できていませんが Orz

あのお方たちなんかは、俺に丁寧にスライスツールの使い方を教えてくれました。スライスってあんまりやったことなかったので、初めて知ることばかりでした。

あのお方は、スライスツールを使ってエッジ同士の交点に頂点を打つ方法を教えてくれました。なるほどなあ。俺頭カタいなあ。

あのお方は、シュリンクラップ風に平面にする ICE コンパウンドなんか作っちゃって、さすが手が早い。嫉妬しました。 今回俺がやろうとしていたこととはちょっと違う方向のものですがそれはそれとして、ICE デフォーメーションの参考にさせて頂きます。 でも、しくみを理解しようとしてコンパウンド開いてみましたら、俺にはサパーリでした Orz

あのお方は、Python で平面化スクリプトを書いてくれました。 さすがわかっている人は違う。 でもすいません、まだ試してません。 明日やってみます。



ええと、他にも協力して頂いた方いましたっけ。



ということで平面な夜を過ごしたみなさん、ありがとうございました。
まだ俺の平面ナイトは終わっていません。
またアイデアを下さい。
俺の代わりに頭を使ってください。
よろしくお願い致します。




.

|

« ICE デフォーム。 | トップページ | Paul さんの ICE ビデオ増殖。 »

コメント

以前書いた平面化スクリプトを少し改良してみました。
スクリプトを実行するとポイントを3点ピックさせられて、その3点をリファレンスにして平面化します。
使ってみて思った以上に使える範囲が少なかったのでコメントするのためらったんですがせっかく書いたので一応報告します。
http://kissiy.blogspot.com/2011/01/2.html

投稿: kissiy | 2011年1月27日 (木) 00時44分

わあ、ありがとうございます。 できました。 

仰るように、4つ以上の面に接しているとダメという現象なのか、単純な形状なら行くけど、少し複雑になると効かない(面が壊れる)感じがありますね。でも十分使えると思います。

ただし、ブログの記事からそのまんまコピペだとエラーで止まりました。109行目、

oAllPnts.PositionArray = lPosArr

これですが、頭に余分なスペースがひとつ入っているようです。ぱいそんはインデントやスペースに意味があるんですよね? これを削除したら動きました。


それと、kissiy さんのブログのように、記事の中に書くコードをワクで囲うってどうやってるんですかね? そちらのブログシステムにそういう機能があるのかな? これ、すんげえ欲しい機能です。 できれば行番号付きで。


平面の騎士よ、更に改良を続けてください!

投稿: junki | 2011年1月28日 (金) 14時15分

>十分使える
ありがとうございます。
そういってもらえると助かりますw

>間違い
ご指摘ありがとうございます。
またやっちまいましたか。。。
ちゃんと動くものをのせたつもりだったんですが。
修正しておきます。

>コード囲うやつ
コードを枠で囲うのは自分のblogのちょっと前の投稿に書いたんですが、実はよくわかってません。
「blogger コード ハイライト」
とかで検索したら出てきた方法をそのままやっただけなんです。
本当は行番号出したいんですができてません。
blogger専用なのかな?

なにせblog はじめたばかりなので知識がなくて。。。

投稿: kissiy | 2011年1月29日 (土) 22時54分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/217974/50642186

この記事へのトラックバック一覧です: 平面 Knight。:

« ICE デフォーム。 | トップページ | Paul さんの ICE ビデオ増殖。 »