Metasequoia BBS

| New message | Normal | Tree |
Status
Tag
Keyword
[2355] VertexUserDataについて / Jama
[SDK] Response
SDK 310_beta1で対応して頂いたVertexUserDataについて質問です。
機能的にはまさに望んでいたものなのでどちらかというとコンセプト寄りな
確認なのですが・・・。

・CreateVertexUserDataの引数について
プロダクトID、プラグインIDを与える形になっていますが複数プラグインが
1つのユーザデータを扱う場合何か一つのプラグインがユーザデータ管理を
一任する事になります。例えばボーンプラグインで、ボーンプラグイン本体、
ボーンウエイトペイントプラグイン、多数フォーマットへのボーンデータ
インポーター/エクスポータのように複数の方がボーン編集に関わるプラグインを
作る事が考えられます。。
この時、ユーザデータアクセスが最初のボーンプラグインに依存してしまうと
作者さんが開発凍結された場合に困った事になりそうです。

こういった複数プラグインからの同一ユーザデータアクセスではどういった
使われ方を想定されていますか?

・保存について
VertexUserDataの保存は各プラグインがOnSaveDocumentでXMLElementに
書き込む形になるのでしょうか?ほぼ全てのプラグインが保存に関するコードを

Show more...
2012-05-31 01:26
[2373] Re: VertexUserDataについて / O.Mizno
>・CreateVertexUserDataの引数について

ユーザーデータは単なるバイナリデータの塊にすぎないので、
プラグイン間でやりとりすることはできないことはないという程度で
基本的には考慮していません。
もしやるならそのプラグインがユーザーデータのフォーマットを公開して、
変更も行わない前提が必要になりますし、
実際問題としてそこまで行われるのかどうか・・・
それに、いつ凍結するかわからないようなクローズドな外部リソースに依存するのもどうかと・・・
ただ、それが可能なくらいの柔軟性をSDKの仕様に持たせておくのは、
今後のことを考えても重要かもしれませんが。


>・保存について

これはユーザーデータを管理するプラグインが行うものなので、
バッティングが起こること自体がないと思いますが。
というか、なぜ他のプラグインで保存しようとするのかよくわかりません???
また、OnSaveDocument内からmqxに保存される際にはXML要素名にプラグインIDが付加されるので、
要素名が重複することはなく、XMLツリーはプラグインごとに別々になります。

Show more...
2012-06-03 19:19
[2381] Re: Re: VertexUserDataについて / Jama
回答ありがとうございます。
確かにプラグイン間でのユーザデータのプラグイン間共有はどこまで需要が
あるのかを考えると難しいところですね。個人的には同一目的のユーザデータを
扱うのにプラグイン間で依存関係が生まれてしまうのは避けたいかな、と思います。
その辺りは他の方の意見も聞けると良いのですが・・・。
 
保存については少し説明不足でした。プラグインとユーザデータの関係が対に
ならないのなら各々のプラグインが保存/読み込みを行うと問題があるのではないかと思った次第です。
現在の仕様なら問題はないと思います。
 
頂点の追加/挿入についてはプラグイン側でどこまでできるか実験コードを書いてみたのですが
ちょっと難しいかな、と感じました。特にモーフデータのように頂点データを扱うものは局面化の
フリーズにまで対応させようとするとプラグインレベルではお手上げですね。
解決方法として思い浮かぶのはDirect3DのVertexDeclaration(D3DVERTEXELEMENT9)やFVFのように
データの型、利用用途、補完方法等のバイナリフォーマットを初期化時に与えデータの補完は
メタセコイア側に一任するという方法ですがこれはMiznoさんの負担が大きそうで・・・
 
また、マルチUV、マルチ頂点カラーも扱おうと思ったのですがこれはFaceDataの方にもユーザデータを
持てるようにする必要がありますね・・・。実装するまでメタセコイアの仕様が頭から抜けていて
どうしたものかなぁと言った所です。

Show more...
2012-06-07 00:39
[2382] Re: Re: Re: VertexUserDataについて / O.Mizno
フィードバックは一人でも多くの方にいただけるといいのですが、
プラグイン開発者自体が多くないのと、あとお忙しい方もいらっしゃるでしょうから、
なかなか難しいところです。
ユーザーデータ周りは焦って中途半端な仕様にしたくないので、
実際にどなたかが最初のプラグインのリリース準備ができた段階で仕様fixにしたいですね。
そういう意味ではVer3.1でなくてもタイミングが合った時点でいいかなと思います。
2012-06-07 23:13
[2386] Re: Re: Re: Re: VertexUserDataについて / sio29
VertexUserData便利に使わせて頂いてます。
ところでVertexUserDataと同じようにオブジェクトやマテリアルにもユーザーデータを付加させるAPIがあるとうれしいのですが、
どうでしょうか?
2012-06-08 16:24
[2387] 頓珍漢な事言ってたらサクっと無視しちゃってください / ASDF-0774
>頂点の追加/挿入についてはプラグイン側でどこまでできるか実験コードを書いてみたのですが
>ちょっと難しいかな、と感じました。特にモーフデータのように頂点データを扱うものは局面化の
>フリーズにまで対応させようとするとプラグインレベルではお手上げですね。
>解決方法として思い浮かぶのはDirect3DのVertexDeclaration(D3DVERTEXELEMENT9)やFVFのように
>データの型、利用用途、補完方法等のバイナリフォーマットを初期化時に与えデータの補完は
>メタセコイア側に一任するという方法ですがこれはMiznoさんの負担が大きそうで・・・

全然試せていない状況で推測で言ってしまい申し訳ないのですが…
フリーズやナイフにより追加された頂点への、ユーザーデータの補完割り当てを行いたいという認識で合ってるでしょうか。

メタセコ側に一任しない方法であれば、たとえばナイフの場合、既存の辺の途中に新しい点が追加されることになりますが、その際に、その辺を構成する二つの頂点と、追加された頂点のユニークIDのペア(オブジェクトIDと頂点ID、以降単にユニークIDとします)をプラグインに通知する仕組み(プラグイン定義のコールバック関数を呼び出す形になるのでしょうか)にして、プラグイン側で補完の処理を記述するしかないのかな、と思えます。
フリーズに関しても同様です。
(こちらはフリーズの際に、新規頂点作成に使われた頂点郡のユニークIDやら、フリーズ前の曲面生成方式やらが必要になるでしょうか。)

とりあえずナイフに関しては膨大な数の頂点が追加される状況は考えにくいのと、フリーズの場合は逆にそうなる可能性が高いですが、何度も実行するものでもないと思うので、パフォーマンスへの影響的に妥協できるかな、と考えております。
2012-06-08 17:56
[2388] Re: VertexUserDataについて / YoshidaK
横から失礼します
 
 私も手始めにマルチ頂点カラーに対応したColladaエクスポータ/インポータを作ってみようと思ったのですがJamaさんが上げられた問題点で詰まっています。まだテスト実装という事でこれからに期待しています
 
 気になったのはインポート時に追加したVertexUserDataをセーブ→終了→ロードでユーザデータを保持しようとすると別に常駐プラグインを作る必要がある事でしょうか。今後他の開発者さんがインポータプラグインを作られるとユーザデータ管理常駐プラグインが乱立して混乱が起こりそうな気がします。MQImportPluginにOnSaveDocumentコールバックを追加して頂けるとシンプルになるかと思いました。
 
 私も何かアウトプットを出せるといいのですが携わるのは大半業務上で使うプラグインな為公開が難しいという事もあり申し訳ない限りです
2012-06-08 18:24
[2389] すいません追加です / ASDF-0774
私の認識が間違っていないとすれば、厄介なのは、頂点を追加するようなユーザー作成のプラグインでしょうか。
補完用情報をつけようがない(ユーザー情報を空のままにするしかない)処理かもしれないし、補完用情報をつけられるような処理かもしれない。補完用情報をつけられるような処理とは言っても、処理内容によって補完情報は大きく異なることも容易に想像できます。

この場合、AddVertex()の引数にユーザーデータへのポインタを設けるなどの統一的な規格が必要と考えられます。
頂点追加プラグインごとに通知の方法がバラバラであっては、ユーザーデータ操作用プラグインでの対応は困難でしょう。 

#そういえばブーリアンなんかも頂点の追加があり得ますね。こちらは作者さんのご好意でバイナリを提供していただいているので、細かい対応は不可能ということをSDK BBSか不具合・要望BBSのどちらかで見た記憶があります。
2012-06-08 19:48
[2394] Re: Re: Re: Re: Re: VertexUserDataについて / O.Mizno
>ところでVertexUserDataと同じようにオブジェクトやマテリアルにもユーザーデータを付加させるAPIがあるとうれしいのですが、
>どうでしょうか?

要望にはないですが面も併せて、Beta2で対応しました。

とりあえず現状で挙っている問題点は
・頂点の追加/分割
・インポート/エクスポート
ですね。さらに面も追加になると余計に問題点が増えそうですが。

いずれにせよ、ブーリアンのような既存の(修正ができない)プラグインについては対応のしようがないので、情報が欠落しないようユーザーが気をつけるしかないです。
2012-06-09 17:44
[2398] Re: Re: Re: Re: Re: Re: VertexUserDataについて / sio29
オブジェクトとマテリアルのユーザーデータ付加APIの追加ありがとうございます。

頂点が追加された場合の処理ですが、とりあえず新しく追加された頂点であること検出できるとありがたいですね。
またはプラグイン側のユーザーデータの初期化ルーチンへ飛ばすような仕組みを作るなどあるかと思います。

あと別な話ですいませんが、
OnNewDocumentはファイルが読まれたあとに飛んでくるメッセージだと思うのですが、
OnNewDocumentのタイミングでプラグインのデータを初期化する作りにすると
インポートプラグインからSendUserMessageなどで他のプラグインにデータを送る場合、初期化されていない状態になってしまいます。
できれば読み込み処理前に飛んでくるOnPreNewDocumentみたいなメッセージがあると便利だと思うのですが、どうでしょうか?
2012-06-09 21:11
[2401] Re: Re: Re: Re: Re: Re: Re: VertexUserDataについて / Jama
面とマテリアル&オブジェクトへのユーザデータ追加ありがとうございました。
素早い対応ありがとうございます。一気にできる事が広がりました。

>sio29さん
>頂点が追加された場合の処理ですが、とりあえず新しく追加された頂点であること検出できるとありがたいですね。

私は今の所ユーザデータに1byteのダーティチェック領域を余分に確保して0なら新規頂点として認識させています。
チェック済みは+1すればとりあえずお手軽&低コストで新規追加分をチェックできますよ。
無駄にメモリは食いますが^^

新規追加頂点が判ればプラグイン側でかなりのオペレーションに対応できますがやはり限界はあるので
もう少し根本的な仕組みが必要かな、と思います。
2012-06-10 12:17
[2402] Re: Re: Re: Re: Re: Re: Re: Re: VertexUserDataについて / sio29
なるほど0クリアされているのですね。
アロケータ後なので不定値だと思ってました。ありがとうございます。
2012-06-10 14:02
[2403] Re: Re: Re: Re: Re: Re: Re: VertexUserDataについて / O.Mizno
>OnNewDocumentのタイミングでプラグインのデータを初期化する作りにすると
>インポートプラグインからSendUserMessageなどで他のプラグインにデータを送る場合、初期化されていない状態になってしまいます。
>できれば読み込み処理前に飛んでくるOnPreNewDocumentみたいなメッセージがあると便利だと思うのですが、どうでしょうか?

インポートプラグインからSendUserMessage()でメッセージを送ったときに、常駐プラグイン側でまだOnNewDocument()が呼ばれていなければ初期化処理を行うようにすればいいように思います。
もちろん後でOnNewDocument()が呼ばれたときに二重に初期化しないようにして。

という感じでどうでしょうか?
2012-06-10 14:13
[2404] Re: Re: Re: Re: Re: Re: Re: Re: VertexUserDataについて / sio29
>インポートプラグインからSendUserMessage()でメッセージを送ったときに、
>常駐プラグイン側でまだOnNewDocument()が呼ばれていなければ初期化処理を行うようにすればいいように思います。
その場合、どこで初期化フラグをクリアすればいいのでしょうか?
インポータプラグインで読み込む場合の流れは
インポータプラグインの読み込み(SendUserMessage)→OnEndDocument→OnNewDocumentとなり初期化フラグをクリアするタイミングがないのですが…
2012-06-10 18:53
[2406] Re: Re: Re: Re: Re: Re: Re: Re: Re: VertexUserDataについて / O.Mizno
>インポータプラグインの読み込み(SendUserMessage)→OnEndDocument→OnNewDocumentとなり初期化フラグをクリアするタイミングがないのですが…

そういえばEndDocumentのほうが後ですね。
SendUserMessageのときにEndとNewの処理を行うという手もありますが、そうすると今後はファイルの読み込みと挿入の区別がつかなくて困るかも。
やはり何かしら仕様を拡張するなりしないと駄目という気がしました。
インポート周りは一度こちらでも試しにテスト実装してみたほうが良さそうですね。
2012-06-10 19:57