There are three tools for creation Blast asset.
First one is FractureTool (see NvBlastExtAuthoringFractureTool.h) which is used to fracture an input mesh. It supports Voronoi fracturing and also simple slicing. Internal surfaces of output chunks can be tesselated and noise can be applied to them. The slicing method supports slicing with a noisy slicing surface, which allows the creation of a jagged slicing line. Noisy slicing is switched on by setting a non-zero noise amplitude in slicing parameters (Nv::Blast::SlicingConfiguration).
1) Array of triangles - the tool fills provided array with triangles of chunk, ID of chunk should be provided.
2) Buffered output - tool fills provided array with vertices, and another array of arrays with indices. Indices form triplets of vertices of triangle.
Tool provides method to trim convex hulls against each other. It can be used along with noisy slicing to avoid "explosive" behavior due to penetration of neighboor collision hulls into each other. As a drawback penetration of render meshes into each other is possible due to trimmed collision geometry.
int32_t Nv::Blast::BlastBondGenerator::buildDescFromInternalFracture(FractureTool* tool, const std::vector<bool>& chunkIsSupport, std::vector<NvBlastBondDesc>& resultBondDescs, std::vector<NvBlastChunkDesc>& resultChunkDescriptors);
Other methods can work with prefractured mesh created in Third party tool, and can be used for converting prefractured models to Blast assets.
Nv::Blast::BlastBondGenerator supports two modes of NvBlastBond data generation:
1) Exact - in this mode exact common surface between chunks is found and considered as interface between them. Exact normal, area and centroid are computed.
2) Average - this mode uses approximations of interface, and can be used for gathering NvBlastBond data for assets, where chunks penetrate each other, e.g. chunks with noise.
To use it, create a MeshCleaner using
Nv::Blast::MeshCleaner* cleaner = NvBlastExtAuthoringCreateMeshCleaner();
Given an Nv::Blast::Mesh called "mesh," simply call
Nv::Blast::Mesh* newMesh = cleaner->cleanMesh(mesh);
If successful, newMesh will be a valid pointer to the cleaned mesh. Otherwise, newMesh will be NULL.
When done, release using
cleaner->release();