blendergltfoptix

Primitive ID, not unique if the same mesh is used more than once


I working on a thermal tool using OptiX. I started with the "meshviewer" example which uses syoyo's tinygltf loader. Basically I want to import a file, get the number of primitives and then add up the intersections.

Now I imported a file containing two cubes, which should consist of 12 triangles each, so 24 in total. When I start my program the loader only recognizes 12 triangles, but it renders 2 seperate cubes. The primitive IDs seem to be identical for both cubes.

Is there a workaround when I export from blender? If I understood the documentation directly the separate cubes are treated as two "identical" instances of the same mesh and thus share the primitive IDs. I am using the v2.81 of Blender with the gltf exporter.

Do I understand the problem correctly? And is there an easy workaround? If not it seems I will have to modify the tinygltf loader.

Thank you for help in advance!


Solution

  • It's possible the two cubes share the same mesh. In the screenshot below, there are two Blender "objects", Left-Cube and Right-Cube. Both objects use the same Blender mesh, called Shared-Cube-Mesh.

    The glTF exporter recognizes this pattern and mirrors it in the glTF file. There will be two glTF nodes, corresponding to the two Blender objects that use the mesh. But there will only be a single glTF mesh, with a single cube.

    You can click the "number of users" button, shown below with a white arrow pointing to it, to make the second object use its own unique mesh. But be warned, this doubles the amount of mesh data being exported to glTF in this simple example. A complete copy of the mesh would be made in both Blender and the glTF binary payload.

    Blender Screenshot