From df435ab9e73ab2d4110cfa3450c6234e1f4ace7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tur=C3=A1nszki=20J=C3=A1nos?= Date: Sat, 14 Sep 2024 11:38:04 +0200 Subject: [PATCH] terrain: instead of fixed grass chunk generation distance, it will be computed from custom grass view distance to avoid popping --- WickedEngine/wiTerrain.cpp | 7 +++++-- WickedEngine/wiTerrain.h | 1 + WickedEngine/wiVersion.cpp | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/WickedEngine/wiTerrain.cpp b/WickedEngine/wiTerrain.cpp index f43588691..cd4f67bad 100644 --- a/WickedEngine/wiTerrain.cpp +++ b/WickedEngine/wiTerrain.cpp @@ -687,6 +687,9 @@ namespace wi::terrain } } + // Ensure that enough grass chunks are generated so that grass view distance will not cause popping: + grass_chunk_dist = int(grass_properties.viewDistance / chunk_width + 0.5f); + for (auto it = chunks.begin(); it != chunks.end();) { const Chunk& chunk = it->first; @@ -752,7 +755,7 @@ namespace wi::terrain else { // Grass patch removal: - if (chunk_data.grass_entity != INVALID_ENTITY && (dist > 1 || !IsGrassEnabled())) + if (chunk_data.grass_entity != INVALID_ENTITY && (dist > grass_chunk_dist || !IsGrassEnabled())) { scene->Entity_Remove(chunk_data.grass_entity); chunk_data.grass_entity = INVALID_ENTITY; // grass can be generated here by generation thread... @@ -1034,7 +1037,7 @@ namespace wi::terrain const int dist = std::max(std::abs(center_chunk.x - chunk.x), std::abs(center_chunk.z - chunk.z)); // Grass patch placement: - if (dist <= 1 && IsGrassEnabled()) + if (dist <= grass_chunk_dist && IsGrassEnabled()) { it = chunks.find(chunk); if (it != chunks.end() && it->second.entity != INVALID_ENTITY) diff --git a/WickedEngine/wiTerrain.h b/WickedEngine/wiTerrain.h index e982d8e4c..072f87836 100644 --- a/WickedEngine/wiTerrain.h +++ b/WickedEngine/wiTerrain.h @@ -281,6 +281,7 @@ namespace wi::terrain Chunk center_chunk = {}; wi::noise::Perlin perlin_noise; wi::vector props; + int grass_chunk_dist = 1; // For generating scene on a background thread: std::shared_ptr generator; diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index e420a87c4..12ef24193 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -9,7 +9,7 @@ namespace wi::version // minor features, major updates, breaking compatibility changes const int minor = 71; // minor bug fixes, alterations, refactors, updates - const int revision = 569; + const int revision = 570; const std::string version_string = std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(revision);