SCENEのマージ方法について


#1

以下のページを参考にしてSCENEのマージを行おうとしました。
https://docs.aspose.com/display/3dnet/Merge+Meshes+in+3D+file

アウトプットファイルを「GLTF2」、または「GLTF2_Binary」にしたいのですが、どのように行えばいいでしょうか?
以下の方法でSCENEはマージされるのでしょうか?

Scene scene = new Scene(input.rvm);
GLTFSaveOptions option = new GLTFSaveOptions(FileFormat.GLTF2_Binary);
option.DracoCompression = true;
Mesh mesh = PolygonModifier.MergeMesh(scene);
scene.Save(output.glb, option);


#2

@keisuke

サポートにお問い合わせいただきありがとうございます。

調査中です。すぐにご連絡いたします。


#3

以下の方法でマージ、変換の処理はできました。
ただし、同じインプットファイルで「マージ実施」と「マージ未実施」のファイルをブラウザに描画して比較すると形が変わっていました。
PolygonModifier.MergeMeshの処理の中でプリミティブが消えたり、メッシュが消えたりすることはあるのでしょうか?

Scene scene = new Scene(input.rvm);
Mesh mesh = PolygonModifier.MergeMesh(scene);
FileFormat.PLY.Encode(mesh, tmp.ply, new PlySaveOptions(FileContentType.ASCII));
scene = new Scene(tmp.ply);
GLTFSaveOptions option = new GLTFSaveOptions(FileFormat.GLTF2);
scene.Save(base.Output, option);


#4

メッシュをマージした場合としない場合を再度比較したところ、一部が表示されない現象が発生してます。
確認に使用したコードとインプットファイル、キャプチャを添付しますのでご確認お願い致します。

  1. NotMerged

Scene scene = new Scene(“input.rvm”);
GLTFSaveOptions option = new GLTFSaveOptions(FileFormat.GLTF2_Binary);
scene.Save(“output.glb”, option);

  1. Merged

Scene scene = new Scene(“input.rvm”);
Mesh mesh = PolygonModifier.MergeMesh(scene);
FileFormat.PLY.Encode(mesh, “tmp.ply”, new PlySaveOptions(FileContentType.ASCII));
scene = new Scene(“tmp.ply”);
GLTFSaveOptions option = new GLTFSaveOptions(FileFormat.GLTF2_Binary);
scene.Save(“output.glb”, option);

■添付ファイルの内容
・1.ASPOSE_Merged.png
⇒マージ実行結果

・2.ASPOSE_NotMerged.png

⇒マージ未実行結果

・3.test_text.rvm
⇒原本のRVMファイル

・4.E3D.png
⇒原本をE3Dで表示した結果

captch.zip (242.6 KB)


#5

@keisuke

glTFはシーンをサポートしているため、シーンから巨大なメッシュを作成する必要はありません。 以下は、シーンをマージするサンプルコードです。 古いシーンのノードを新しいシーンのルートノードにアタッチするだけです。

    private static void MigrateSceneTest()
    {
        Scene s1 = new Scene(@"chair.FBX");
        Scene s2 = new Scene(@"BoomBox.gltf");

        Scene output = new Scene();
        MigrateScene(s1, output);
        MigrateScene(s2, output);
        output.Save("merged-scene.obj", FileFormat.WavefrontOBJ);
    }
    private static void MigrateScene(Scene src, Scene dst)
    {
        while(src.RootNode.ChildNodes.Count != 0)
        {
            dst.RootNode.AddChildNode(src.RootNode.ChildNodes[0]);
        }

    }

#6

私の目的はSceneのマージではなく、Meshのマージです。
Meshの数が多いほどブラウザでのDrawCallが多くなるため、描画されるまでの時間がかかってしまいます。そのため、MeshをマージしてDrawCallを減らそうとしています。

以下のURLを参考にしてマージした結果が4番目のReplyです。
https://docs.aspose.com/display/3dnet/Aspose.3D+for+.NET+17.11+-+November+2017


#7

@keisuke

我々はそれに取り組んでいます。 しばらくお待ちください。


#8

@keisuke

Aspose.3D for .NET 19.11.1をお試しいただき、ご意見をお聞かせください。

Aspose.3D for .NET 19.11.1.zip (5.0 MB)


#9

頂いたDLLを使用しましたが、まだ表示が正しくないです。
結果を添付しますのでご確認お願い致します。

captcha.zip (156.3 KB)


#10

@keisuke

添付バージョンで修正されたdraco対応ファイルに問題がありました。 生成されたファイルもglTF Viewerでテストしました。

次のような効率的なバージョンのコードを使用してください。

Scene scene = new Scene("input.rvm");
Mesh mesh = PolygonModifier.MergeMesh(scene);
scene = new Scene(mesh);
GLTFSaveOptions option = new GLTFSaveOptions(FileFormat.GLTF2_Binary);
scene.Save("output.glb", option);

Aspose.3D for .NET 19.11.2.zip


#11

頂いたdllにて正しく描画されることを確認しました。
ご対応ありがとうございました。


#12

@keisuke

フィードバックありがとうございます。

さらにサポートが必要な場合は、お気軽にお問い合わせください。