diff --git a/src/common/rendering/vulkan/accelstructs/vk_lightmap.cpp b/src/common/rendering/vulkan/accelstructs/vk_lightmap.cpp index 4e059fc82..681df71cf 100644 --- a/src/common/rendering/vulkan/accelstructs/vk_lightmap.cpp +++ b/src/common/rendering/vulkan/accelstructs/vk_lightmap.cpp @@ -21,7 +21,7 @@ ADD_STAT(lightmapper) CVAR(Int, lm_background_updates, 8, CVAR_NOSAVE); CVAR(Int, lm_max_updates, 128, CVAR_NOSAVE); - +CVAR(Float, lm_scale, 1.0, CVAR_NOSAVE); VkLightmap::VkLightmap(VulkanRenderDevice* fb) : fb(fb) { diff --git a/src/rendering/hwrenderer/doom_levelmesh.cpp b/src/rendering/hwrenderer/doom_levelmesh.cpp index 598c5e376..cd9dd011c 100644 --- a/src/rendering/hwrenderer/doom_levelmesh.cpp +++ b/src/rendering/hwrenderer/doom_levelmesh.cpp @@ -35,6 +35,8 @@ CCMD(invalidatelightmap) Printf("Marked %d out of %d surfaces for update.\n", count, level.levelMesh->Surfaces.Size()); } +EXTERN_CVAR(Float, lm_scale); + DoomLevelMesh::DoomLevelMesh(FLevelLocals &doomMap) { SunColor = doomMap.SunColor; // TODO keep only one copy? @@ -1100,6 +1102,8 @@ void DoomLevelMesh::BuildSurfaceParams(int lightMapTextureWidth, int lightMapTex surface.sampleDimension = LightmapSampleDistance; } + surface.sampleDimension = uint16_t(max(int(roundf(float(surface.sampleDimension) / max(1.0f / 4, float(lm_scale)))), 1)); + { // Round to nearest power of two uint32_t n = uint16_t(surface.sampleDimension);