ShadeにはHyperNURBSという機能は無いのですが、またまたネットで情報を収集したところでは、細分化や曲面化をインタラクティブに行えるとありますね。
ケージ構造を有理曲面のウェイト編集インタフェースとしているのでしょうか。
また、NURBS曲面と幾つかの種類の細分化曲面と表面を一致させている?のはすごい便利ですね。
各メーカーで呼び名が違うだけでOpenSubdiv等と同じく曲面化したポリゴンの事を指しています。
現状でshadeの曲面化した方のポリゴンを直接触る事が出来ずに格子状の頂点(isoライン)
を動かす事しか出来ず、現在どこのメーカーもほぼこの方法は使っていないので
曲面化したポリゴンを編集できる様にして欲しのです。最初に出した例はN-gonまで全て表示されて
しまっていますが実際は格子状の頂点と曲面化したポリゴンの編集頂点が一致していて
曲面化したポリゴンの頂点を編集するとそれに合わせて実際の isoラインの頂点も移動します。
なんでisoラインではダメなのかと言えば複雑な形状を作成する時に格子状ではめり込み等が発生するので
それを回避する様にポイントを増やして形状を作ったりと無駄が発生するからです。
ちょっと質問ですが、この原点って何のことでしょうか。
モーフターゲットとどういう関連があるのかちょっと理解出来ません。
一応、加重平均でいいのなら、不要な気がしますが。
>>masaさんへ
ft-labさんの方で今年の2月辺りの記事でモーフターゲットの実装を
色々と検討なさっていた記事があり、その中での話で実際の実装の
作業をなさっているかは解らないのですが、そのような話が出ていた
と言うだけの内容です、また実際に実装なさる段階で何か問題が
出なければ良いなと思い、念のために書いておいただけですので。
※追記、文章直し。
透視図等のシェーディング表示の高速化オプション。
モーションブラウザやジョイント関連操作による作業を行う際に、サブディビを使っていたり、オブジェクトが多い場合、表示が遅すぎるのでサブディビオブジェクトを透視図等の表示上分割なしにしたり、オブジェクトが小さいorポリゴン数が少ないオブジェクトをボックスに差し替える等の「簡易表示」機能を充実させてほしい。
この辺は、アニメーション操作にも通じると思う。
ハイスピードで、高解像度のレンダリングができるようになって欲しいのと、
MMOとかで作ったモデルを使えるようにならないかなとか妄想してしまいます。
情報について、追加してみます。
Shade 3Dのポリゴンの中心はその都度計算される単純平均になっており、回転すればその原点はずれてしまいます。
モーフの場合は、配置時に横一列に笑いやウインクなどの顔(頂点数は同じ)を並べるようにして、それらの合成で表現します。
その際に、いわゆる「Pivot」がないとダメなんです。
その代わりが、ボールジョイントやボーンなどの中心があるジョイントに入れる、となります。
別のコメントに顔を並べている例がありましたね。あれを行うために原点が必要になります。
モーフターゲットの作成(頂点移動での表情づけ)の作業においては、「ベース形状と同じ場所にターゲット形状がある」方式以外にも、「ベース形状とは少しずれた位置にターゲット形状をおいて編集できる」方式もあるんですかね?
私がアニメに使っているlightwaveの場合、前者の方式だと思います。
(モーフマップなので、厳密にはちょっと違うのかもしれませんが)
確かにターゲット形状を横に並べて一覧できる機能があれば使い勝手がいいのかもしれませんが、個人的にはターゲット形状もベース形状と同じ位置のままで、表示・非表示を切り替えつつ頂点の移動をして各ターゲットを編集、でもいいと思います。
その方式ならば、「ポリゴンメッシュの中心」みたいな情報は特に必要は無いのではないでしょうか。
私は以前スクリプトでモーフミキサーもどきを作った事があります。
http://strangedays2008.seesaa.net/article/168851816.html
この「ブレンドターゲットの作成」というスクリプトですが、やってる事はモーフミキサー(ただしアニメーションには対応していない)と同じだと思います。
ベース形状を作り、それを複製していくつかのターゲット形状を作り、各ターゲット形状では頂点を移動して表情づけをします。
あとはスクリプトを実行して各ターゲットごとに適用率を入れると、表情が合成されたポリゴンメッシュが出力されます。
たとえば、目を開いたもの(ターゲットA)、口を「ア」の形にしたもの(ターゲットB)、口を「イ」の形にしたもの(ターゲットC)・・・みたいに複数のターゲット形状をベースターゲットと同じパート内に入れ、スクリプトを実行して「ターゲットA(目を開いたもの)」の適用率を50%、「ターゲットB(口を「ア」の形にしたもの)」の適用率を100%にすると、目を半開きにして口を「ア」の形にした表情の形状が出力されるわけです。
一般に考えられているモーフミキサーと同じ要領で、各表情(モーフターゲット)を色々な割合で合成した表情が作りだせます。
このスクリプトでやった事はものすごく単純で、ベース形状と各ターゲット形状でそれぞれの頂点座標の違い(vector3)を求めてからターゲット毎に設定された適用率をかけて、ベースターゲットの頂点座標にその値を加算して頂点を移動させただけです。
私のスクリプトはアニメに対応していませんが、ボーンを適用してアニメーションさせた形状のモーフミキシングについても、ベース形状と各ターゲット形状は同じようにボーンで変形した状態になるわけで、結局はベース形状とターゲット形状の各頂点の座標値の違いに適用率をかけて、頂点をその方向へ移動させるだけでいいのではないでしょうか?
>>dadada66さん
素人考えなのでアレですがボーンとウェイトを適応されたポリゴンだとモーション等で
位置が変わってしまうのでポリゴンオブジェクトにピボット(中心点?)を付けて
オリジナルのポリゴンオブジェクトの位置が解るようにしてやる必要がある・・・
と言う事なのかもしれません、本当に素人考えなのですが。
追記
よく読み直して見たらモーフターゲットの形状を元のポリゴンに重ねてバインドすると
ボーンの移動等の影響を受けずにモーフミキサーできるんじゃないと言うアイディア
を提案なさってたのですね斜め読みしてました。
ただオブジェクトの編集が大変そうなのとトライ&エラーのやり易さ、外部のフォーマットとの
互換の取り易さ(shadeの連携を広げる意味で)など知恵をしぼる必要出てくるかもしれませんね。
それから編集後のモーフターゲットになったポリゴンをゴースト化(見えない・触れない)
する機能も要りますね。
私はスクリプトで色々なモデリングツールを作ってきたのでスクリプトの開発経験は結構あるものの、プラグインは開発した事は無いので間違った事を言ってるかもしれませんが、以下のような感じでプラグインとしてshadeの基本機能をうまく使いつつリアルタイムモーフミキサーを実装する、というのはできないのでしょうかね?
1.プラグインで「モーフミキサーパートの制作」を選択すると、名前が「モーフミキサーパート」というパートが作られ、そのパートにはカスタム情報(ここに各モーフターゲットごとの適用率情報などを入れる)が付与されるようにします。
2.ユーザーは、その「モーフミキサーパート」にポリゴンメッシュを入れ、そのポリゴンメッシュをモーフターゲットの数だけ複製します。(モーフターゲットは名前の変更は自由にしてもよい)
3.プラグイン側では、「モーフミキサーパート」に入れているポリゴンメッシュについては、後述の「モーフターゲットの編集」時以外では、図形ウインドウでは強制的に非表示にし、さらにレンダリングも強制的に対象外にします(ブラウザ横の「表示」や「レンダリング対象」のチェックは無視するか、プラグイン側が強制的に常にOFFにする)
4.「モーフミキサーパート」に入れてある形状は、一番上にあるポリゴンメッシュをベース形状、その下にある複数の形状(ベース形状と同一の頂点数のポリゴンメッシュ)をターゲット形状とプラグインが認識し、モーフミキサーパートのカスタム情報(モーフターゲット毎の適用率)に応じて、頂点を移動させた形状を、「モーフミキサーパート」の外側の弟階層(つまりブラウザで一つ下)に、リアルタイムで自動で生成するようにします。(こっちは、図形ウインドウやレンダリングでは表示のチェックボックスがON)
で、「モーフミキサーパート」をブラウザで選択した時に専用のフローティングウインドウが表示され、そこには現在選択中のモーフミキサーパート内にあるターゲット形状の形状名(ユーザーが自由に名前を変えられる)と適用率のスライダがターゲットの数だけ並んでいて、そのスライダを操作すると、モーフミキサーパートの一つ下にリアルタイムで生成される形状の表情なども変わる、と。
・・・・・こういう仕様にすると、今のshadeの内部機能をうまく使った状態でわりとお手軽にモーフミキサーが実装できるのではないでしょうか。
シーン内に複数のモーフミキサーパートを作る(つまり各ポリゴンメッシュごとに別々のモーフターゲットや適用率が設定できる)事も可能です。
「モーフミキサーパート内にある形状は、いずれも図形ウインドウで強制的に非表示にされる」と書きましたが、それだとターゲット形状の編集(表情づけ)ができません。
そのため、ブラウザでいずれかのターゲット形状を選択した時は、その選択している形状だけは図形ウインドウでの表示が自動でONになる(ついでに、リアルタイムで生成されるモーフミキサーパートの弟階層にあるミキシング結果形状の方は邪魔なので一時的に図形ウインドウで非表示になる)・・・・みたいにプラグイン側でやると、現在ブラウザで選択しているターゲットだけが図形ウインドウで表示されるようになり、その編集(表情づけなど)ができるようになります。
また、「ベース形状や他のターゲット形状と比較しながら表情の編集をしたいな」とユーザーが思ったら、モーフミキサーパートの中のベース形状やターゲット形状を複製してパートから外に出し、三次元的に少しずれた位置に置けば、それができるわけです。
アニメーションに対応させる場合は、ミキシングのフローティングウインドウ内に「フレーム」の数値入力ボックスやスライダなどを入れ、そのフレーム数を変更させるとshade本体側のモーションのカレントフレーム数も変わるようにすると、アニメーションに対応できるようになるのではないでしょうか。
プラグイン側では、各キーフレーム毎に、各ターゲット形状の適用率情報をモーフターゲットパートのカスタム情報に記憶しておくようにします。
(アニメーションのレンダリングをする時は、このキーフレーム毎に設定された各ターゲットの適用率値をレンダリング直前に読み取って、フレーム補完をしてミキシング結果形状を更新します)
他ソフトへエクスポートする時の互換性の取り方とかの課題はあるでしょうが、今回の方式なら、プラグイン開発に慣れた方なら二週間かからずにshadeにモーフミキサーを実装できるのではないでしょうか?
この方式はベース形状もターゲット形状もボーン変形はshade側が勝手に計算してくれるため、プラグイン側はその点については特に考える必要は無いと思います。
(もし「図形ウインドウで非表示にしている形状については、shade内部ではボーン変形処理はスキップしている」場合は、「モーフミキサーパート」内の形状を一瞬だけ全て表示にさせてshadeにボーン変形結果を計算させ、それからミキシング結果形状を生成する・・・・みたいなトリックを使うといいでしょう)
ただ、この方式ではターゲット形状が増えるに従って負荷が増えていきますし、複数形状でそれぞれモーフターゲットパートを作った場合も、やはりその数に比例して処理が重くなってしまうでしょう。
各モーフターゲットパートでは、右クリックすると「ミキシング結果を更新しない」みたいなオプションを設定できるようにすると、一部のモーフターゲットパートについてはミキシング結果の自動生成をストップさせて負荷を軽減できるかと思います。
いいアイデアかと思います!
Shade 3DのMMD Exporter(私が作ってShade 3Dマーケットプレイスに上げたものです)では、同一位置に形状を複製することでモーフでの表情出力ができるようにしているのですが、手動であるので面倒というのがありました。
編集時以外は図形ウィンドウでは強制的に非表示、が重要になりそうですね。
「モーフミキサーパートの中のベース形状やターゲット形状を複製してパートから外に出し、三次元的に少しずれた位置に置く」ですが、ポリゴンメッシュの場合はこれをすると全体がずれるのか一部が変形するのかという判断が難しいです。
輪郭が大きくモーフする場合もありますので。
ですので、一度ボールジョイントにポリゴンメッシュを格納して、位置移動はボールジョイントの移動でとするのがよいかもしれません。
dadada66さんの発想とはちょっと違った実装法を考えてます。
モーフミキサーパートなどというパートや、ターゲットを実際の形状で用意する等の
発想を止めて、
1.形状を元形状として登録、
元形状は、それ以後どんな変形をさせようが、元に戻せる機能を内包してます。
2.元形状を変形させて、モーフ登録を実行
すると弟部分にカスタムジョイントが現れ、そのジョイントを0にすれば、元形状の登録時の形状、1.にすれば、その時点のモーフされた形状になります。ジョイントには勝手にモーフ名を付けられます。
こうして、どんどんモーフを作っては、登録で、
どんどんカスタムジョイントが作られます。
カスタムジョイントは、Shade自体でジョイントとして管理されてますので、
モーションウインドウ内で、自由に操作出来ます。
今8割型出来上がってますので、動作出来るようになったら、まずは、公開して、ご意見を頂きたいと思います。
後、モーフ自体の実装より、インポート、エキスポートまでサポートしないと完全実装になりませんよね。
FBX、MMD等でモーフをどう実装しているか、FBXのドキュメントを前に途方にくれてます。
ということで、このフォーラムには、データをアップする切り口は、あるんでしょうか?
vertices_morph.zip (92.2 KB)
アップロード出来るようですね。
何とか一発目が出来ました。最大2個までのモーフは確認しました。
ご感想を。
y_yutakaさん、こんにちは。shadeの機能を向上させてくれる数々のプラグインや、ためになる記事でお世話になっています。
「モーフミキサーパートの中のベース形状やターゲット形状を複製してパートから外に出し、三次元的に少しずれた位置に置いて参考にする」ですが、外に出したのはあくまでもベース形状やターゲット形状の「複製品」で、これら自体は別にモーフミキサーの計算対象にはしないでいいと思います。
「ベース形状や別のターゲット形状はどんな感じだったのか?」というのを確認するために、不恰好ですがユーザーさん自身がその複製をモーフミキサーパートの外に置いて、ベース形状や別のターゲット形状の表情を図形上でずらした位置において確認しながらターゲット形状の表情づけを行った後は、その外に出した参考形状はユーザー自身が削除してしまう・・・・みたいな感じです。
masaさんの方式もいいですね。
プラグイン公開すごい楽しみです!!
なるほど、理解が及ばず失礼いたしました。
確認のための複製だと問題なさそうですね。
masaさんがモーフミキサーをお作りになっているのですね、凄いです
自分は追従ジョイントとエイム拡張を入れさせて貰ってます、特に追従ジョイントは
色々使い道が多くて助かってます。
カスタムジョイントがちょっと気になり、みんな大好きインターネットで調べてみましたw
http://developer.shade-online.jp/reference/python/index.php/custom_joint
数値だけをもった下位層に影響を与えない特殊なジョイントなんですね
知らない事がいっぱい^^
shade側の機能強化としては、そろそろ他の3DCGソフトと同じように、「光源ごとに特定の形状だけを照らせる」というセレクティブライト機能を実装して欲しいですね。
今現在のshadeの仕様としては、無限遠光源や点光源、スポットライト、面光源、その他の光源は、全ての形状を照らすようになっています。
でも、「絵作り」という点では、時々特定の形状だけを光源を追加して照らして見映えをもっと良くしたい・・・みたいに思う事はあるかと思います。
「この形状については、輪郭部分を浮かびあがらせるリムライト風の光源を追加して見映えを良くしたい」みたいに思っても、現在のshadeの仕様では追加した光源は他の形状までも不要に照らしてしまい、その部分が希望しない過度な明るさになってしまう・・・みたいな事があるでしょう。
「人物の見映えをよくするためにリムライト風の光源を追加したら、床や壁の一部が明るくなりすぎた・・・」みたいに。
セレクティブライト機能が追加されれば、特定の形状だけに見映えをもっと良くする照明や光沢を付与する事ができるようになります。
趣味はもちろん、業務用途でshadeで静止画を作っている方(プロダクトデザインやインテリア、エクステリアパース制作など)にとっては結構うれしい機能ではないでしょうか?
他の多くの3DCGソフトでセレクティブライト機能が実装されているのは、やはりあると便利だからだと思います。
shadeへの実装方法としては、無限遠光源や点光源、スポットライト、面光源、線光源などでは、形状情報パネル内に「特定の形状だけを照らす」というチェックボックスと、「記憶形状を登録」「記憶形状以外を登録」「登録形状を選択」「クリア」の四つのボタンを追加します。
また、メニューバーなどに「選択形状を記憶」のボタンを追加します。
・ブラウザでその光源で照らしたい形状を一つか複数選択して、メニューバーコマンドで「選択形状を記憶」を実行し、その状態でブラウザで光源を選択し、形状情報パネルの「記憶形状を登録」ボタンを押すと、「特定の形状だけを照らす」のチェックが自動で入った上で、照明対象形状が登録され、その光源は登録された形状だけを照らすようになる・・・・みたいにします。
・「記憶形状以外を登録」のボタンを押した場合は、「選択形状を記憶」で記憶している形状以外が一気に登録されます。(「床だけ照明対象から除外したいな」みたいな場合は、ブラウザで床形状だけ選択して記憶し、ライトを選択してからこのボタンを押すといい)
・「登録形状を選択」ボタンを押すと、その光源の照明対象として現在登録されている形状がブラウザで一気に選択され、「その光源は現在どの形状を照明対象としているか?」が、手軽に確認できます。(形状情報パネル内に照明対象形状の名前をずらっと並べる方式は、視認性がかなり悪いため、こっちの方がいいでしょう。)
・「クリア」を押すと、照明対象形状の登録情報がクリア(全消去)されます。
・・・・みたいな感じで。
あとはレンダラー側で光源ごとに照明計算する形状を限定する、という風にすれば、shadeにセレクティブライト機能を実装できるかと。
大域照明計算がONの場合は、セレクティブライト機能をONにした光源については「(そのライトだけは)光が形状の表面で反射されない」みたいにすると良いでしょう。
セレクティブライトは前述の通り「特定の形状の見映えをもっと良くする」ために使われる事が多く、その光が反射して間接光となって他の形状を照らすと困る場合が多いからです。
一つ前の私の記事の方にプラグインをアップしました。
今のところ、簡易版ですが、改善点は以下のような感じかなと思います。
1.モーフ対象を、ポリゴン以外に、拡張する。自由曲面や、ジョイント等
2.一つのモーフジョイントで、複数の形状のモーフを可能にする
3.モーフ形状とモーフジョイントの配置の制限を外す
4.他のプラグインからアクセスの切り口を用意する
な、感じです。
ただ、他のツールや、ファイル形式との間の互換性も考えないといけないですね。
モーフミキサープラグインをインストールして軽くテストしてみました。
テストしたのはボーンは仕込んでいない簡単な形状ですが、複数のモーフターゲットを作って、各モーフターゲットのスライダ値に応じてリアルタイムに頂点が変形していく様子は感動ですね。
他ソフトでモーフミキサー自体はすでに体験していたものの、「やっとshadeにも搭載されたか・・・」という気持ちです。shadeでモーフミキサーの搭載を長年心待ちにしていた人にとってはたまらないものがあるのでは?
できれば追加して欲しい機能ですが、左右で同じような表情をつけやすいよう、X軸を対称軸としてモーフ情報の反転コピーみたいな機能は追加できないでしょうか?
例えばキャラクターに表情をつける時、図形ウインドウの正面図で向かって右側の左目の頂点を移動して目に表情をつけた後は、ブラウザで「情報>モーフターゲット作成」の時に、モーフターゲット名入力ボックスと一緒に「モーフ情報のX軸対称コピーを行う」みたいなチェックボックスも追加し、それがONの場合は、ベース形状の頂点情報を参考にして、X軸より右側につけた表情(モーフ情報)をX軸より左側にある対称位置にある頂点に反転してコピーする、という感じです。
この機能があれば、キャラクターの顔や手足などの筋肉の表情づけ(左右対称的な表情の場合)は、片側だけつければいいようになり、作業効率がアップします。
もし「片目だけウインクする」みたいな左右非対称の表情の場合は、ユーザーは「モーフ情報のX軸対称コピーを行う」はOFFでモーフターゲットを作成する、という風にもできますし。
よろしくご検討ください。
不具合報告です。
モーフミキサープラグインをpluginフォルダにインストールした状態で、何らかのポリゴンメッシュ(モーフのベース形状でない普通のポリゴンメッシュ)にスキンをバインドしようとすると、「No base polygon!」みたいなエラーが表示されるようです。(スキン自体はバインドされます)
また、スキンをバインドした後にボーンなどを動かして変形する際にも「No base polygon!」というエラーが何度も表示されます。
shade本体のバグかと思ったのですが、一時的にこのモーフミキサープラグインをpluginフォルダから削除して同じ作業をやると、エラーは出ません。
プラグインにエラー箇所が無いか、ご確認お願いします。
こちらの環境は、windows版shade15.1と13(どちらもstandard版)で、どちらでも同じようにプラグインインストール時にのみこのエラー表示が出るのを確認しています。