Shade3D 公式

頂点モーフプラグインの件

元のトピックテーマから逸脱してますし、元のトピックも肥大化してますので、迷惑にならないように
新トピックを立ち上げました。
dadada66 のご指摘、ジョイント変形時にモーフジョイントかどうかの事前チェックが漏れていて
他のジョイントの変化時にもモーフを起動させてました。
また、対称なモーフの自動生成ですが、まず、その元形状がそもそも対称かどうかを事前チェックして
対称関係頂点リストを予め作る必要があります。不可能ではないですが、結構高負荷です。
で、私としては、本プラグインのモーフジョイント生成時に、「選択頂点のみ対象」のチェックを
ダイアログに加えました。
それで、どうするかというと、片側モーフを作ったら、私の「対称ポリゴンPP」で対称形状にして、
モーフさせます。すると自動的に対称部分も変形します。
そこで、その動いた方を選択して、「選択頂点のみ対象」にチェックを入れて実行すれば、
もう一方のモーフも出来ます。この方法だと、片側のみも両方も、自由につくれます。
ということで、修正版を添付しました。
vertices_morph001.zip (110.9 KB)
今回、まだ試作品ということで、バージョンは、0.01としました。
以降はSDK1510がでましたので、ちょっと時間を戴いて、頂点マップ対応と、モーフジョイントと形状
間の位置関係の制約を外そうと考えてます。

4 Likes

masaさん、さっそくの機能追加ありがとうございます。

スキンを設定した形状でのモーフも確認しました。
期待通りの動きになってて、良いですね。

1 Like

こちらも導入してダミーヘッドを急遽製作しボーン入りポリゴンへ、ターゲットモーフが
正常に動作・追従するか確認しました、dadada66さんと同じくリアルタイムにモーフが動いてる様子を
みて感動しましたw数えてバージョン9の頃からクレクレしてたんですがmasaさんがサックリ実装
なさってビックリしましたw

・上図はボーンでひねりを加えた上で、口を開いて片方の眉毛を吊り上げるターゲットモーフ2つを
使用した状態。

ターゲットモーフのスライダーをリスト化するとカスタムジョイントを行ったり来たりしなくて
済みそうなのでそんな機能の追加を希望します><;b

それって、ジョイントスライダーだけが列になったウインドウみたいなものですか?
となると、別プラグインですね。モーフ用というより汎用な便利ツールになりますね。
まあ、できない事はないですが、納期は保証出来ません。
今ちょっと優先順位の高い方に取り組んでいますので。
一通り終わって、気が向いたらと思ってください。
後、検討していたら、頂点カラーのモーフは、別プラグインとして実装した方がいいですね。
むしろ、頂点モーフには、スキンモーフを付加した方が実用的かも。

1 Like

>>masaさん
>それって、ジョイントスライダーだけが列になったウインドウみたいなものですか?
ですです、全体を見ながら調整するので各スライダーが並んでると調整し易いのです。

>一通り終わって、気が向いたらと思ってください。
はい、作れそうならお願いします。

>頂点モーフには、スキンモーフを付加した方が実用的かも。
これはボーンの曲げに対して反応するモーフの事ですかね?
肘や膝なんかに有効ですね。

ちょっと違いますね。
私の頂点モーフは、対象の頂点毎の位置を保存していますので、頂点毎のアトリビュートの一つの
スキンも一緒に管理すれば、モーフしたとき、頂点のスキンも変化させられると思っただけです。
まあ、殆ど使われないと思いますし、実装は結構面倒そうなので、今のところは、構想のままです。
利用面としては、服を着たときとはだけたときのスキンの違いなどに使えますがね。

Shadeユーザー待望のモーフミキサー、自分も試させてもらいました。感動しました。

本当にプレビューモードでなく作業4画面のワイヤーフレームのままモーフの確認が
出来るのですね。今までありえなかった光景なのですが、すごく自然に受け入れられ
ます。サブディビがかかったままでも問題ないですね。モーフミキサーを作ってしまう
とはホントすごいと思います。Shadeでやれることがまた増えて嬉しいです。

ただ、問題が発生しました。自分のフィギュアを使ってモーフターゲットを作って表情
を付けさせることには成功しました。それで、キーフレームを打ってアニメーション
させることにも成功しました。しかし、それをレンダリング動画で書き出そうとしても
うまくいきません。どのフレームから始めても最初の一枚目の表情しか書き出せない
ようです。また、出来上がる動画は1秒ほどのものとなってしまいます。それでも、
ボールジョイントを使っているところは動いています。

3つのモーフを使った簡単なアニメーションのサンプルを作ってみました。
モーションは仕込んであります。



box-morph-test.shd


これも作業画面では動くのですが、出力した動画では変化していません。
自分の使用ソフトはWindows版のShade3D ver.15 Professionalです。

自分の環境だけでそうなるのか、他の方の報告も聞いてみたいです。

1 Like

あらまレンダリング出来ませんか、自分はレンダリングまで確認してませんでした
帰宅してからテストキャラ作って試してみます、shade3D側の不具合なのか
masaさんのプラグイン側なのかは我々では解らないので確認して貰うしかありませんねー。

ご協力、ありがとうございます。

頂点モーフプラグインを使わないアニメーションは通常に動画は出力できます。

1 Like

どうも、プラグインを作った側からの判断だと、その可能性はありますね。
私のプラグインは、current_joint_changed と current_joint_changing
というエントリーをオーバーライドして、モーフ処理を行ってます。
このエントリーは、ジョイントの値が変わった毎にShadeから呼ばれるのですが、
多分、アニメーションレンダリングの途中で、このエントリーがフレーム毎に呼ばれてない
可能性があります(私は、勝手に呼ばれるものと思い込みしてました)。
フレームのレンダリング毎に最初に呼ばれるエントリーと、その時のジョイントの値を
取得出来さえすれば、問題なくアニメーションレンダリングに対応できると思います。
と、ここまでは良いのですが、こういう場合に、スマートに対処する方法が、今のところ
思いつきません(ちょっと調べ直してみます)。
もしよければ、Shadeの開発側でいいアイデアを提示して頂けると嬉しいのですが。

2 Likes

ご返答、ありがとうございます。

取り敢えず、頂点モーフプラグインを使ったレンダリング動画の問題は解決策があるという
ことが確認出来て安堵しました。

こういうプラグインを個人で作れるなんて凄いですね。この頂点モーフプラグインの誕生は
Shade史に残る偉業といっても過言ではないと思います。Shade3D本社側も乗ってくれると
嬉しいですね。

色々やったら、一応動くようです。実の所、結構ごり押しなので、今一性能面で気になる点がありますが、
まずは、ご確認を。
vertices_morph002.zip (112.4 KB)
これから先は、実現方法を述べますが、これは、Shade開発者の方に対する確認ですので、
他の方は読む必要有りません。
今回の実現方法は、
まず、pre_rendering()をオーバーライドして、その中で、rendering_context_interfaceの
update_joint_values()
実行した後、シーン内の全ての形状をサーチして、モーフターゲットだったら、プラグインの
モーフ処理をするというものです。
この中で、update_joint_values()の必要性と
ジョイントは、シーン全体をスキャンするしかないのかどうかです。
rendering_context_interfaceを使ったのは始めてなので、よく分かりません。

2 Likes

早速、vertices_morph002を試させてもらいました。確かに、レンダリング動画も動いてます!
レイトレーシング、パストレーシング、トゥーンレンダラでも確認できました。こんなに早く
解決していただけるとは感激です。ありがとうございました。

1 Like

まささん

アニメーション対応方法についての開発部からの回答です。

アニメーションレンダリング中にフレームごとのジョイントの変更を反映するときは、
sequence_changed を使います。
sequence_changed の引数にて、シーン内でモーションが設定されているジョイントの
配列が渡されますので、この中からプラグインで使用するジョイントをチェックしてください。

注意点として、Shade 3Dはアニメーションレンダリング中にもシーンの編集操作が行えるので、モーションウインドウの操作と、アニメーションレンダリングの両方から
sequence_changed が呼ばれることがあります。

レンダリングからの呼び出しかどうかをsxsdk::scene_interface::is_rendering_thread()で判定して
プラグイン内部の状態を編集操作とレンダリングで個別に管理する必要があります。

pre_rendering()は立体視などで用いますので、アニメーションレンダリングにはsequence_changedをお使いくださいとのことです。

1 Like

分かりました。フレーム単位は、sequence_changedで行うのですね。
ただ、そこでジョイントは取得出来ますが、その変化量は、motion_interfaceのget_current_joint_value()
で、取得して問題ないのでしょうか?
rendering_context_interface内にupdata_joint_valuesなどという関数があったりするので、
ちょっと気になりました。

1 Like

色々もたもたしている間に解決されてしまっていた・・・w
MASAさん修正版作ってくれたのですねありがとうございます、早速新しいプラグインと入れ替えてテストしてみます。

開発に確認しますが、少し時間いただくかもです。

1 Like

ご指摘に添って修正してみたところ、ちゃんと動いているようですので、dettaさんへのリクエストは撤回します。
今後必要に応じ依頼するかも知れませんので、よろしく願います。
ということで、再々修正版003をアップします。
vertices_morph003.zip (111.5 KB)
とここで、私提供の、「追従ジョイント」、「エイムコンストレインツ拡張版」にもアニメーションレンダリング
対応が必要だと分かりました。
そこで、それらを修正し、この頂点モーフ、それに今開発注のジョイント操作用のツールを纏めた製品として
「マーケットプレイス」に登録しようと思います。時期は、今秋位を考えてます。物自体より、ドキュメント整備
の方がよほど大変なので。

リクエスト撤回、了解しました。
今後のリクエストについては本フォーラムの「プラグインSDK」でお待ちしたいと思います。
よろしくお願いします。

トピが下がって居たので上げてしまいますが、MASAさんのターゲットモーフプラグインの進捗状況はその後
いかがな状況でしょうか?催促してる感じがして気が引けていたのですが年も明けましたので
モーフトピ活性化と言う意味でもちょっと上げさせてもらいました。

完成したプラグインをshade3D社が本体へ吸収してくれれば最高なんですがどうでしょうかね?
でったさんのスクリプトみたいに本体標準化されれば買う側もshadeの新バージョンの度に
ヤキモキしないで精神衛生上良いと思うんですが、まぁただの妄想ですw

またft-labさんがGPUを利用したエフェクトプラグインをマケプレ登録予定とtwitterで知りましたが
こう言った有用なプラグイン群をshade3D本体へコンポーネントしてくれれば
確実にshade3Dのレベルの引き上げに繋がると思います、実際ライトウェブや他社の
3DCGソフトは有効な他者が開発したプラグインを本体へ吸収して売りにしてますので
shade3Dも同じ流れに乗ったらいいんじゃないかと思いました。