diff --git a/include/core/application.hpp b/include/core/application.hpp index 08da7458..1294ee12 100644 --- a/include/core/application.hpp +++ b/include/core/application.hpp @@ -244,7 +244,7 @@ private: float x, y, z, orientation; }; std::vector pendingCreatureSpawns_; - static constexpr int MAX_SPAWNS_PER_FRAME = 8; + static constexpr int MAX_SPAWNS_PER_FRAME = 3; static constexpr int MAX_NEW_CREATURE_MODELS_PER_FRAME = 1; static constexpr uint16_t MAX_CREATURE_SPAWN_RETRIES = 300; std::unordered_set pendingCreatureSpawnGuids_; diff --git a/src/core/application.cpp b/src/core/application.cpp index ee2697e7..eb9d0a7a 100644 --- a/src/core/application.cpp +++ b/src/core/application.cpp @@ -786,7 +786,7 @@ void Application::update(float deltaTime) { if (gameHandler) { static float creatureResyncTimer = 0.0f; creatureResyncTimer += deltaTime; - if (creatureResyncTimer >= 1.0f) { + if (creatureResyncTimer >= 3.0f) { creatureResyncTimer = 0.0f; glm::vec3 playerPos(0.0f); diff --git a/src/rendering/m2_renderer.cpp b/src/rendering/m2_renderer.cpp index 378a7b41..23c1c6d9 100644 --- a/src/rendering/m2_renderer.cpp +++ b/src/rendering/m2_renderer.cpp @@ -2081,8 +2081,10 @@ void M2Renderer::render(VkCommandBuffer cmd, VkDescriptorSet perFrameSet, const lastDrawCallCount = 0; - // Adaptive render distance: balanced for performance without excessive pop-in - const float maxRenderDistance = (instances.size() > 2000) ? 350.0f : 1000.0f; + // Adaptive render distance: tiered by instance density to cap draw calls + const float maxRenderDistance = (instances.size() > 2000) ? 300.0f + : (instances.size() > 1000) ? 500.0f + : 1000.0f; const float maxRenderDistanceSq = maxRenderDistance * maxRenderDistance; const float fadeStartFraction = 0.75f; const glm::vec3 camPos = camera.getPosition();