background

アウトライン。

2017年10月18日(Wed)

ここにGR-700があるじゃろ?

171018-01

これがこうなって

171018-02

あとこうして

171018-03

こうじゃ。

171018-04

って、ちょうど一年ぐらい前にも同じネタやってるし。ファンアートだから載せないとか言ってた舌の根も乾かないうちにこれだし。まあ、枡久田マスクさんのR-707に合わせる絵がやっとできたから、自分で自分を大目に見ることにする。

足元に置くものの絵を作ろうと思ったら、どうしても俯瞰にならざるを得ないというか。すると今度は人物の頭しか見えないし、ギターも見せようと思ったら構図もありそうなシチュエーションも限られてくるし。案外楽器絵って厳しい。というか、無知だけに何か間違えてそうで怖い(笑)。

人物とケーブルは手描き、右の椅子に載ってるマニュアルは公式のものを貼り込んじゃった。

で、一枚の絵を作るのにSuperflyとFireflyとプレビューと手描きを合成したわけだけども。Fireflyとプレビューは輪郭線だけを描画するためにレンダリングしたわけで、このFIreflyの輪郭線がちょっとめんどくさかった。

171018-05

Fireflyレンダリングオプションのトゥーンの輪郭(Toon outline)はマテリアルのToon IDごとに、ノイズは入るけれどもなかなかいい感じで輪郭線を引いてくれる機能だ。たとえば頭と胴体でマテリアルが分かれているけれど、境界線を区切りたくないという場合には、同じIDを振っておけば線が描画されない。

ところがまあ、Superfly用にマテリアルを調整したり、色々やっているとこのToon IDがどうなっているかなんてまったく把握できないわけだ。同じ材質っぽいところは同じマテリアルファイルを適用してるけど、そうすると逆に線を引きたい箇所なのに描画されない、なんてことが起こる。そもそも物理サーフェイスノードを使っていたらIDそのものが定義されてない。万全を期すなら、すべてのマテリアルグループごとにPoserサーフェイスノードを作成して、個別のIDを振っておきたい。

そこでシーンに並べたアイテムを眺めて暗澹とするわけだ。なにせ自分で作ったターナーだけでも20近いマテリアルグループがある。

171018-06

誰か、そういうPythonスクリプト作ってー!><

と絶叫しながら、とりあえずその場は手作業で乗り切った。だってモデリング脳からようやく絵作り脳になって、次はお絵描き脳にならないといけないのに、プログラミング脳に切り替える余裕なんてないしー。

でも次は手作業ではやりたくない。じゃあ絵が完成した今やるしかないよね。

細かく書くとややこしくなるから省略するけど、とりあえずPoserサーフェイスノードは新しく作成された時、必ず重複しないToon IDを持っている。ということは、全部のマテリアルグループに新しくルートノードを作成する、というスクリプトがあればいい。全部のマテリアルグループにアクセスするのは難しそうだから、WacroのShiftキーを押したら全部に適用される機能、あれを使おう。

というような感じでマニュアルと既存のスクリプトをコピーしながらPythonスクリプトを書く。リファレンスマニュアル、引数の記述が間違ってたんだけど……勘弁して。

171018-07

でもって作ったスクリプトをアプリケーションフォルダのRuntime>Python>poserScripts>Wacros>UserDefinedフォルダに放り込む。

171018-08

Poserを再起動すると、マテリアルルームのWacroの下にスクリプトが表示される。ところが、これはShiftキーを押下しながら起動しても、残念ながら全部のマテリアルグループに適用されることはないみたい。

仕方ないので、元からあるWacroボタンを書き換えることにする。どうせ元からあるやつ、古いものばかりでRemove Detached Node(未接続のノードを消すやつ)しか使ってないし。

171018-09

WacrosフォルダにあるmainWacors.pyというファイルがWacroボタンを定義していて、毎回起動時に実行されている。これの適当な行を自分の作ったスクリプトを参照するように書き換える。

171018-10

するとこうなる。

171018-11

ついでにレンダラやレンダリングオプションを書き換えるように記述を追加して、とりあえず適当なフィギュアを選択してShift+クリック。で、そのままレンダリング。

171018-12

これが

171018-13

こうなる。らくちーん。

Python、書いているうちにちょっと思い出してきて、別にWacro機能使わなくても作れるような気がしてきたんだけど。まあいいかな、需要もなさそうな気がするし……。

スポンサーサイト





これでふんぎり。

2010年08月09日(Mon)

ぱいそん飽きてきたと言いつつ、やっぱり消化不良というか、そもそも自分で使う用途で作り始めたんだから配付用途に難があろうが実用のカタチにするべきじゃないか、みたいな葛藤が少しあったりなんかして。

モーフを対称コピーするスクリプトの話。

やっぱり既存の値が入ってる(=移動量がゼロでない)モーフ値に別の値を入れようとするのが上手くいかないみたいで。空のモーフを作成して上書きすれば入れ替えもコピーも問題なくできることがわかった。

100809-1

ただ、この方法だと現在の移動量を取得するのにもう一つ余分にモーフターゲットを作ることになる。ワールド座標からパーツにかかっているワールド変換の影響を省いて、ジオメトリの座標との差分を取って……というのも考えたんだけど、面倒くさいし上手くいくと思えなかったし、自分で使う分には毎回ダミーモーフを削除するぐらいなんてことないんで、簡単な方法でいくことに。

スクリプトを実行すると、メニューリストが表示される。普通はX軸のコピーか入れ替えしか使わないと思う。敷居値(Threshold)は対称地点にある頂点を探すときに、どれだけ誤差を許容するか、の値。一応初期値はPoser単位で0.00001(約0.026ミリ)。上げすぎると誤判定が増えてヘンな結果になってしまう。テストに使ったM3RRなら、とりあえず初期値で問題ない。

100809-2

対象は小道具でもフィギュアのパートでも可。マグネットが選択されているときは、自動的に適用先のアクターを選択状態にする。実行後は新しいモーフが二つ作成されている。処理時間は自分の環境でM3RRの頭部(約一万頂点)で30秒ぐらい。

100809-3

Dummyと名前のついたモーフはさっくり削除。

実行対象がフィギュアで左右のパートがある場合、X軸のコピーは選択した反対側のパートに作成される。入れ替えは意味がないのでメニューからは省略。

100809-4

そんなわけで一応ちゃんと動くものができたんだけど、ダミーモーフができてしまうという欠陥があるので、正式な配付はしないことに。β版だけ転がしておくので、既存のMorph Mirrorなどのスクリプトが動作しない人や、専用ソフトを使えない人で需要のある人は試してみて頂けるといいんじゃないかなと思う。

100809-5

で、今は気分転換に小物製作。



飽きてきた。

2010年08月02日(Mon)

モーフターゲットを鏡面コピーするスクリプトを作りかけていたんだけど、どうもうまくいかない。

こういう感じにマグネットを適用しておいて、

100802-1

X軸方向にコピー。

100802-2

Y軸方向にコピー。

100802-3

-X側から+X側へコピー。

100802-4100802-5

あたりはまあなんとか動くんだけど、Swap(反転)をやろうとすると途端におかしくなる。

100802-6

やってることは、メニューで選んだ軸に沿って対称の頂点番号リストを作って、差分データを入れ替えたリストを作って順番にセットしていく、というもの。なので、コピーだろうと左右入れ替えだろうとやってることに違いはないはずなんだけど……。どうも、コピーされる側の頂点の差分データが0でないとおかしくなるっぽい。 ヘンだなあと思って試しに入れ替え処理後SetMorphTargetDeltaでもう一度全頂点に対して差分0を上書きしていったら、やっぱりランダムなモーフが入ってた。なのにMorphTargetDeltaをループさせて差分を参照したら、中身は0.0になっているという。

Pythonそのものを触り始めたばかりだから、これがPythonのお約束に違反した何かをやってしまっているせいなのか、SetMorphTargetDeltaあたりに制約があるからなのかもわからない。っていうか、そもそもPython上でモーフが削除できたらもっと簡単に処理回せるのになー。

そんなわけで、飽きてしまったのでPythonはまた気が向くまで放置の方向で。



たとえばHexagonでSoftenツールを使ってなだらかにするとき、面に切れ目が入っているとその部分の切れ目が広がってしまう。

100730-01

また、Soft Selectionを使うと選択範囲は切れ目をまたがないので、パーツの境界付近を選択すると段差が生じてしまうことになる。

100730-02

で、同一位置の頂点融合を行うPythonスクリプトを作ってみた。

100730-03

こんな感じ。

Poser上では面の切れ目に境界線が入るけど、スクリプトを実行すると境界線がなくなる。もちろんポリゴングループを統一したり、普通に頂点融合を行うだけならPoserの操作でできる。けど、一度融合したジオメトリを、元の頂点順序を再現して再分割するのは普通じゃできない。なので、それをスクリプトでやってみようと。

まあ、Windows使ってる人には意味のない話(笑)。

スクリプトを実行すると融合か分割か処理を訊いてくる。

100730-04

頂点融合の場合はファイルを一つ選択。Wavefront OBJ形式しか読み込まないので注意。

100730-05

無事に読み込めると同位置頂点を検索し始める。頂点数によってはものすごく時間がかかる。で、上手いこと処理ができると新しい小道具が作成されて、ついでに書き出すかどうか訊いてくる。いいえを選んで後から出力しても同じ。

100730-06

ちなみに融合は完全に同じ位置に頂点がないと行われない。

で、融合後のジオメトリをモデラか何かで編集する。もう一回元の分割状態に戻すには、融合前のジオメトリと融合後のジオメトリの二つが必要になる。

100730-07

メニューで再分割を選ぶ。

100730-08

最初に分割前のジオメトリを、続けて融合後のジオメトリを選択する。

100730-09

ファイルを読み込むと同位置頂点の検索を始める。やってることは融合時と同じなので、時間も同じ以上にかかる。検索の結果、融合後のジオメトリと頂点数が一致しないとエラーになる。で、再分割ができたら同じようにジオメトリを出力するかどうか尋ねてくる。

100730-10

同位置頂点の判定をものすごく単純な力技で検索しているので、頂点数が増えれば増えるほど処理時間は指数関数的に増えていくことになる。その間Poserは止まってしまうので、うっかり大きなファイルを処理すると怖いことになる。とりあえず同梱のサンプルでテストして、自身の環境でどれぐらいの時間がかかるのか確認した方がいいと思う。ちなみにウチのPoser Mac G5 2.5 dualだと6598頂点のファイルで5秒ぐらい、1万2千頂点の自作シャツのジオメトリだと30秒以上かかる。3万足らずのジオメトリで2分ぐらい。

あと、Poser 7のSR2以前だと、Pythonでの読み込みにコケるので推奨しない。また、Windows版はShift-JISでダイアログを出力するようにしてみたけど、文字化けした場合は自力でUTF-8に直すか無視してもらえたらと思う。動作上は化けてても特に支障はない。

で、イマイチおおっぴらに配るには自信のないシロモノなので、こっそりとこちらに置いておく。
Python_WeldDivideVertices.zip (352kB)



最近、PoserのPythonスクリプトを書いてみたりしている。以前から「これはスクリプトでできるんじゃないかなあ」と思ってたものがあって、その練習というか。

そんなわけで、Forum3Dにマグネットを鏡面コピーするスクリプトをUPしてみた。ダウンロードはフォーラムから。マグネットを左右反対側にコピーするスクリプトは既にあちこちで配付されてるんだけど、とりあえず自分の練習が主目的なので、そのへんは気にしないことにする。

とりあえず、こんな感じ。

100727-1

選択しているフィギュアまたは小道具にひっついているマグネットを反対側にコピーする。右腕についているやつは左腕に、頭や胴など真ん中のパートにひっついているやつは、パート内の反対側に。真ん中のパートの場合、マグネットゾーンが中心にあるものはコピーしない。X移動にちょっとでも数字が入っていたらコピー対象になるので注意。

当然、V4やG2シリーズみたいなマグネットフィギュアに適用すると不幸な事になる(笑)。

一回コピーした後に再度スクリプトを実行すると、以前にコピーされたマグネットを削除してからコピーを実行する。

100727-2

マグネットを追加したり編集した場合もそのままコピーできる、と。コピーされたマグネットは頭に「Mrr_」という名前がついていて、コピー実行前にその名前を判別して削除している。

100727-3

なので、スクリプトを実行するとコピー前に確認ダイアログが表示される、という感じ。

100727-4

V4とかの場合は、オリジナルのマグネットが鬼ほどカウントされるわけだ。まあこのテのフィギュアのマグネットはゼロポーズ状態では効いてないはずだから、モーフ作るだけならあんまり問題ないような気もするけど……。一応想定している主な使用用途は、マグネットフィギュアでないフィギュアの顔モーフ作成や、服フィギュアのちょっとした体型補整、FBM作成など。要するに自分にとって一番使うであろうと思われる用途である。

実を言うと、自分がどうしてもスクリプトの類いが好きになれない理由もこのへんにあったりして。要するにスクリプトっていうのは、面倒くさい手作業を省力化するのがおおもとの目的なわけだ。基本的に作者本人が使って便利なように設計されている。その「他人が作った自分仕様」を把握しないといけないのが面倒くさいんである。

スクリプトは便利ツール、喩えるならフードプロセッサーや高枝切り鋏みたいなものだから、初心者が先にフードプロセッサーに慣れると包丁の使い方も身に付かないから、というのとはまた別の話である。どちらかというと、隣の家に高枝切り鋏を借りようとしたら、柄の長さがその隣家の庭木分の長さしかなくて、しかもちょっと生暖かかったりして……みたいな心地の悪さを感じてしまうんである。だから自分が書いた物も、概ね他の人にとっては使い心地がイマイチ良くないものだろうと思っている。とはいえ、中にはそれでも需要がゼロでない可能性があるわけで。作った物を放流するのは「1は0より必ず大きい」というとある軍師様のお言葉によるものである。著作権を放棄してるものとそうでないものの違いは、クレームを受け付けるか知らんぷりするかの違いである。

まあそれはさておき。

100727-5

日本語版で小道具に対して実行したところ。マグネットの取得にマグネットベースであること、マグネットゾーンの検索にマグネットベースと同じ内部名の番号がついていることを条件にしたので、たぶんどんな名前が付いていてもカウントされる……と思う。

Zipの中にはエンコードがUTF-8のものとShift-JISのもの、二つのファイルを同梱している。P6まではShift-JIS、P7からはUTF-8になった……と思ったら、どうもUTF-8になったのはMacだけのようで、テストしてもらったWindows版Poser 7ではダイアログの文字化けが発生してしまったのだ。記憶が定かでないけど、P7が出た当初はMacもShift-JISだったような気がする、ような気がする。そのへんあやふやなので、とりあえずP7以降で日本語版を使ってる人は文字化けしない方を使ってもらえたらと思う。Mac P7EではUTF-8版もShift-JIS版も同じように動作する。

あと、フランス語版やドイツ語版を使ってる人は、自力でスクリプトのメッセージの空白になってる箇所とコメントアウトしてある言語振り分けのところを編集してもらえると、ちゃんと自国のメッセージが表示されて気持ち良いんじゃないかと思う。って、まずないと思うけど(笑)。





Menu

Profile

Kyotaro

確定名:Kyotaro
ネタを探しているらしい。

Categories

Calendar

02 | 2024/03 | 04
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 - - - - - -

Comments

Archives

Track back

RSS feed

Links

Search

※2011年4月6日のサーバ障害の為、エントリのアドレスが以前のものからズレています。当Blogのエントリにリンクを張っておられた方は、お手数ですがアドレスのご確認をお願い致します。

※Internet Explorer非推奨。