maya,plugin,script,toolこんにちは。開発室のひらく[@horonig]です。ハカイというのは、なんとも淫靡(いんび)な響きですが、人はなぜこうも破壊を繰り返すのでしょうか。それはそこに物体が・・・否(いな)、polygonがあるからですね!これは3年ほど前(2007年夏)のお話です。DFでは『BlastCode』などの破壊ツールを使っていましたが、『BlastCode』はNurbsにしか適用できず、且つDFにはライセンスが一つしかなかったため、多人数で作業出来ませんでした。汎用的な破壊ツールの要望が現場からあがり、僕が開発を担当することになりました。「最低限こういう機能が欲しい」というアイディアはスーパーシニアのT氏から頂いていたのですが、出来れば『BlastCode』のような機能や、更なるアドバンス機能も欲しいという事で、ひとまず調査を開始しました。最初に破壊系の論文などを読み漁ってみたのですが、僕の能力ではそれをコードに落とし込むのは簡単ではなく(と言うより理解できない部分があまりにも多く...orz)、本格的なものを作れる目処が全く立ちませんでした。時間もあまり無かったので、フリー(ここ重要)ツールで似たようなものがないかをググッてみたりもして。どれもパッとしないんですよねー。他人が作ったフリーツールに頼ろうと思ったヤツが偉そうなこと言って申し訳ないのですが(^ω^)で、基本的にはどのフリーツールもmaya既存の『solidShatter』(おそらく1.0から搭載されてるもの)よりちょこっとだけ良いかも?という程度のものでした。要は、mayaのブーリアン機能を使って、割って割って更に割ってーというツールですね。それだったらイチから作った方が早いし、もうちょい高機能なものを作れるなと思ったので、ブーリアンを基本としたツール開発という事に決めちゃいました。mayaの『solidShatter』よりも多少高機能なものを作って、なんとかお茶を濁そう切り抜けよう!という事ですね!!それと、亀裂の入り方などのイメージ資料も必要だったので「crack」や「shatter」をキーワードにgoogleイメージ検索とかもしてたんですが、これちょっとヤバかったです。googleの「セーフサーチ」をオフってるというのもあるかもしれませんが、クスリやボッキボキに折れた骨など、正視に堪えない絵がけっこう出てきちゃったりして(興味のある方は自己責任でググってみてネ)。「なんじゃこりゃーw」とdkdkしながらも、地道に資料を集めていきました。ホントにgoogle大先生さまさまですよね。これなかった昔の人は、資料集めるのも大変だったんだろうなぁ(遠い目)。Files/Autodesk/Maya2010/scripts/others/solidShatter.melにソースがありますが、これを解読するもの面倒なので、フルスクラッチで作ります。この『solidShatter』自体が重すぎるので、参考にするのもどうかという話です。思いつつも、怖いもの見たさで中をのぞいてみたりはしましたけどね!結果、それなりに参考にもしてますけどね!!今回、僕が使おうと考えていたブーリアンは、「閉じたオブジェクト」を「閉じてないplane」でぶった切る形のブーリアンです。試してみると分かりますが、意外と簡単にスパッと切れます。無駄にレイヤースタイルを使ってお送りしております反対側の破片は、planeの法線を逆転(reverse)させてからブーリアンすれば作れます。なんとなくですが、閉じたオブジェクト(立体)同士よりもこっちの方が軽いんじゃないかと思ったので、この方法で実装しています。(コードを見ると分かりますが、『solidShatter』は閉じたオブジェクト同士でやってるみたいです)というわけで、基本的なアルゴリズムはこうです。新規にplaneを作成して、ガクガクにランダマイズ(softbody化したparticleに対し、noiseを含んだdynExpressionを仕込む事で実現)亀裂を入れたい方向と場所にplaneを配置planeとobjectをduplicateしておく([6]で使用)オブジェクトをplaneでぶった斬る!(ブーリアン)片側だけの破片になっちゃうので、[4]でduplicateしておいたplane(法線reverse)とobjectを使って逆側の破片を作る[1]に戻る(破片数が満たされるまでループ)簡単ですねー。考えただけでwkwkしますね。まー、細かい部分ではもっと言及したいことが色々とあるんですが(特に[1]と[3]あたり)、全てを書くのも大変なのでこんなもんで。出来上がったツールがあるので、一度映像でご覧下さい。コントローラの赤い円弧は「亀裂の入る角度範囲」をあらわしています。≪亀裂の指向性(日本語間違ってるかも?)≫を持たせたツールになってるわけです。これは最初から要望されていた機能で、それを軸としたツール仕様となっています。この≪亀裂の指向性≫というのが結構やっかいでして...。見てお分かりのとおり、方向を二次元的に指定することになるため、薄っぺらい破片が量産される副作用があります。それを解消する手段として【normalizeCrack】という機能を提供しています。これは、”薄っぺらい破片や細長い破片を極力球体に近づけるようなアルゴリズム”で分割する機能です。説明するのもなかなか難しいので、ムービーからそのイメージを感じ取って下さい!更に、mayaユーザーには周知の事実ですが、mayaのブーリアンは不安定極まりないです。ver1.0の頃から全く改善されてないですよね。上のムービーのように簡単なオブジェクトであればほぼ問題は出ませんが、実際に破壊する複雑なオブジェクトだと、エラーを吐いて止まることも良くあります。その辺も、ある程度のエラーは無視してブーリアンが掛けれるものだけ分割する、という仕組みにはしていますが、これ以上分割出来ないオブジェクトに落ち込んでしまうことはちょくちょくあるみたいです。5割くらいの破壊には使えてるみたいなので、思ったよりは優秀でしたwもはやAutodeskさんもmayaのブーリアンを修正するつもりはないようなので、ちょっと前に流行した【voronoiShatter】も付けてみました。ボロノイダイアグラムを使った単純なshatterですが、これだとブーリアンを使った場合よりも圧倒的に安定性があります。ボロノイだけだと断面がスパッと平面的になっちゃったりするので、そこは改良したいですね。それと、現状のアルゴリズムだと結構処理が重いので、そこも改善したいところ。開発する時間が取れず、未だβ版という状態で放置しております...。(※必須):Website:Comment:コメントは承認制ですので、即時に反映されません。上に表示された文字を入力してください。月別アーカイブ2018年5月2017年1月2月3月4月6月10月11月2016年1月2月3月4月5月6月7月8月10月11月12月2015年1月2月3月4月5月6月7月8月9月10月11月12月2014年1月2月3月4月5月6月7月8月9月10月11月12月2013年1月2月3月4月5月6月7月8月9月10月11月12月2012年2月3月4月5月6月7月8月9月10月11月12月2011年1月2月3月4月5月6月7月8月9月10月11月12月2010年12月Footer。