Metasequoia BBS

| 新規投稿 | 通常表示 | ツリー表示 |
状態
タグ
キーワード
[7821] 仕様に沿ってないGLTFファイルが出力できてしまう / まじかる☆しげぽん
[不具合報告,Ver4.6.6] 返信
Ver4.6.6で1バージョン古い状態ですが、GLTFのエクスポートで仕様に沿ってないデータが出力できてしまうようです。

GLTFの仕様では、メッシュの最小単位が1ポリゴンでメタセコのようにオブジェクトレイヤーの中身が何もない0ポリゴンのデータをGLTFとしてエクスポートするとエラーとなるデータになります。

そのまま読み込めるビューアーも存在しますが、Windowsのペイント3Dで中身が何もない0ポリゴンのデータをGLTFとして出力してGLBファイルを開こうとするとこのようにエラーが出ます。

https://imgur.com/a/Z4F1Tfq

ポリゴン数が何もない空のデータを出力しようとした際にエラーを表示して出力を中止するよう対応してもらえればと思います。
2018-09-25 11:46
[7822] Re: 仕様に沿ってないGLTFファイルが出力できてしまう / 管理者
メッシュが必要というのは仕様書のどこに記載されていますか?
こちらで確認した限りではmeshesタグが必須という記述は見当たらず、Chronos公式のglTF Validatorでもメッシュのないデータはvalidとなるので、メッシュの有無に関わらず出力できるようにしています。

この解釈が正しければ、ペイント3Dが単にメッシュのないデータを受け付けないようにしているだけではないでしょうか。同じMicrosoft製でも3D Builderは読み込み可能ですし。
2018-09-25 12:27
[7826] Re: 仕様に沿ってないGLTFファイルが出力できてしまう / まじかる☆しげぽん
>メッシュが必要というのは仕様書のどこに記載されていますか?

エンジニアに確認したところ、byteLengthの最小単位が1になっているようです。
https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/schema/buffer.schema.json

        "byteLength": {
            "type": "integer",
            "description": "The length of the buffer in bytes.",
            "minimum": 1
        },

https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#reference-buffer

buffer.byteLength ✅
The length of the buffer in bytes.

Type: integer
Required: Yes
Minimum: >= 1

0だと-1を返すようです。
2018-09-26 10:21
[7827] Re: 仕様に沿ってないGLTFファイルが出力できてしまう / まじかる☆しげぽん
https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#bufferview

bufferView.byteLength ✅
The length of the bufferView in bytes.

Type: integer
Required: Yes
Minimum: >= 1
2018-09-26 10:23
[7828] Re: 仕様に沿ってないGLTFファイルが出力できてしまう / 管理者
改めて調査したところ、オブジェクト内に中身が何もなければバッファは出力されず、また面が1つでもあれば問題ありませんが、面がなくてラインのみが含まれているとbufferViewのサイズが0で出力されてしまうようです。
こちらに該当しているのではないでしょうか?

今後のバージョンでサイズが0で出力されないよう修正いたしますが、現状でも出力前にラインを除去すれば大丈夫だと思います。

2018-09-26 14:34
[7829] Re: 仕様に沿ってないGLTFファイルが出力できてしまう / まじかる☆しげぽん
>また面が1つでもあれば問題ありませんが、面がなくてラインのみが含まれているとbufferViewのサイズが0で出力されてしまうようです。
私が試した状況は、ラインも何もない状態でGLBをエクスポートしてペインター3Dがエラーが出たという感じなので、ラインのみが含まれていてbufferViewのサイズが0で出力されてしまうのはまた別の問題ですが、そもそも出力するポリゴンが一切ない状態だったらファイルを出力しないという処理がGLTF的な仕様に沿った形になると思います。
2018-09-27 10:04
[7830] Re: 仕様に沿ってないGLTFファイルが出力できてしまう / 管理者
既に書いた通りペイント3Dが単に受け付けないだけで、glTFの仕様とは無関係です。
思い違いをされているようですが、あるソフトがエラーを出すからといって、それは必ずしもデータにエラーがあることを意味しません。そのソフトにとって必要なデータが入っておらず処理を継続する意味がないためエラー扱いにするケースがあります。
ペイント3Dはデータチェック用のソフトではありませんので、その結果でエラーの可否を判断する方法は間違いです。エラーチェックは公式のglTF Validatorを使用してください。

glTFは本質的に様々なデータを格納可能なコンテナであって、メッシュは必須ではなく、シーンやマテリアル・テクスチャ情報のみを含むことができます。メッシュがないのをエラーとするのは仕様上では間違いです。仕様の話をするのであれば、仕様書をもう一度よく読んで正しく理解してください。
2018-09-27 10:55
[7831] Re: 仕様に沿ってないGLTFファイルが出力できてしまう / まじかる☆しげぽん
読み込み対象のツールに問題があるかもしれませんから、そうですね。
glTF Validatorで判断したいと思います。

では、メタセコではbuffer.byteLengthの値の最小単位は1以上を出力しているという認識で合ってるでしょうか?
何もジオメトリが無いため、buffer.byteLengthが0で問題が起きてると判断したためです。

>https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#reference-buffer

>buffer.byteLength ✅
>The length of the buffer in bytes.

>Type: integer
>Required: Yes
>Minimum: >= 1
2018-09-27 11:14
[7832] Re: 仕様に沿ってないGLTFファイルが出力できてしまう / 管理者
もしバッファのサイズが0ならglTF Validatorが検知してくれるはずです。実際に試して確認してみてください。
2018-09-27 11:49
[7833] Re: 仕様に沿ってないGLTFファイルが出力できてしまう / まじかる☆しげぽん
ご返答ありがとうございます。
確認してみます。
2018-09-27 11:58