Skip to content

Commit

Permalink
break out lod_shrink_factor
Browse files Browse the repository at this point in the history
  • Loading branch information
crocdialer committed Oct 16, 2024
1 parent 1b8aa15 commit a9ea9ec
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 7 deletions.
7 changes: 5 additions & 2 deletions include/vierkant/Mesh.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ struct mesh_buffer_params_t
//! maximum number of lods to be generated
uint32_t max_num_lods = 7;

//! shrink-factor for num_indices in successive lods
float lod_shrink_factor = 0.5f;

//! flag indicating if meshlet/cluster information shall be generated.
bool generate_meshlets = false;

Expand Down Expand Up @@ -289,10 +292,10 @@ struct mesh_buffer_bundle_t
//! combined meshlet-buffer
std::vector<Mesh::meshlet_t> meshlets;

//! indices into vertex-buffer, referenced my meshlets
//! indices into vertex-buffer, referenced by meshlets
std::vector<index_t> meshlet_vertices;

//! micro-indices into meshlet_vertices, referenced my meshlets
//! micro-indices into meshlet_vertices, referenced by meshlets
std::vector<uint8_t> meshlet_triangles;
};

Expand Down
11 changes: 6 additions & 5 deletions src/Mesh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -478,14 +478,13 @@ mesh_buffer_bundle_t create_mesh_buffers(const std::vector<Mesh::entry_create_in

for(uint32_t i = 0; i < params.max_num_lods; ++i)
{
// shrink num_indices to 50%
constexpr float shrink_factor = .5f;
constexpr float max_mismatch = .1f;
constexpr float target_error = 0.05f;
float result_error = 0.f;
float result_factor = 1.f;

auto target_index_count = static_cast<size_t>(static_cast<float>(num_indices) * shrink_factor);
auto target_index_count =
static_cast<size_t>(static_cast<float>(num_indices) * params.lod_shrink_factor);

constexpr bool sloppy = false;

Expand All @@ -509,10 +508,11 @@ mesh_buffer_bundle_t create_mesh_buffers(const std::vector<Mesh::entry_create_in

spdlog::trace("level-of-detail #{}: {} triangles - target/actual shrink_factor: {} / {} - "
"target/actual error: {} / {}",
i + 1, num_indices / 3, shrink_factor, result_factor, target_error, result_error);
i + 1, num_indices / 3, params.lod_shrink_factor, result_factor, target_error,
result_error);

// not getting any simpler
if(result_factor - shrink_factor > max_mismatch) { break; }
if(result_factor - params.lod_shrink_factor > max_mismatch) { break; }

min_num = num_indices;
lod_indices.resize(num_indices);
Expand Down Expand Up @@ -687,6 +687,7 @@ size_t std::hash<vierkant::mesh_buffer_params_t>::operator()(vierkant::mesh_buff
vierkant::hash_combine(hash_val, params.optimize_vertex_cache);
vierkant::hash_combine(hash_val, params.generate_lods);
vierkant::hash_combine(hash_val, params.max_num_lods);
vierkant::hash_combine(hash_val, params.lod_shrink_factor);
vierkant::hash_combine(hash_val, params.generate_meshlets);
vierkant::hash_combine(hash_val, params.use_vertex_colors);
vierkant::hash_combine(hash_val, params.pack_vertices);
Expand Down

0 comments on commit a9ea9ec

Please sign in to comment.