Гайд по оптимизации производительности в Смуте
UPD: Поднимаем FPS с 26 до 38 без сильно заметного ухудшения качества графики* (точный прирост зависит от железа).
Введение
Итак, занявшись харкорным профилированием Смуты через PIX for Windows и Nvidia Nsights Graphics, нашел пару интересных мест влияющих на производительность.
Статья с подробным исследованием проблем производительности в процессе, но сейчас я бы хотел поделиться парой советов по оптимизации перформанса через конфиги игры.
На моем железе (ноут с RTX 2060 6 GB, AMD Ryzen 7 4800H и 16 GB RAM) на рынке в Нижнем Новгороде (первая локация после пролога) на высоких настройках фпс увеличивается с 26 до 38 [UPDATED].
Кажется, что немного, но на самом деле это 31%. В миллисекундах это 12,15 ms (с 38,46 ms до 26,31 ms).
Было:
Стало:
В чем суть изменений
- Выключен рейтрейсинг (r.RayTracing=False). Все равно не используется т.к. для Lumen включенный софтварный рейтрейсинг (r.Lumen.HardwareRayTracing=False). Он же требует включенным GPU Skin Cache (см. следующий пункт)
- Выключен GPU Skin Cache для SkeletalMeshes (в основном относится к персонажам). Потому что очень медленный из-за того, что использует CPU visible память через шину PCI (параметр r.SkinCache.Mode=1).
- При включенном DLSS можно отключить встроенный TSR (Temporal Super Resolution) который съедает производительность при не таком большом улучшении качества сглаживания. (параметр r.AntiAliasingMethod=4).
- Выключен CustomDepth пасс (r.CustomDepth=0). Это потенциально может сломать «ведьмачье чутье», но вроде работает.
- Hardware occlussion queries заменены на HZB Occlusion. (r.HZBOcclusion=2)
- Отключены тени от ландшафта (r.AllowLandscapeShadows=0)
- Тюнинг качества объемных облаков
- Отключен 4й каскад в Directional Light (r.Shadow.CSM.MaxCascades=3)
- Включен Occlusion culling для каждого инстанса в ISM (Instanced StaticMesh) и HISM (Hierarchical) (r.InstanceCulling.OcclusionCull=1)
- Включены некоторые оптимизации для RenderThread.
Как сделать
Находим файл C:\Users\<НАЗВАНИЕ ПОЛЬЗОВАТЕЛЯ>\AppData\Local\Smuta\Saved\Config\Windows\Engine.ini
и вставляем в конец вот этот блок [UPDATED]:
; Ультимативный подход для тех кто хочет получить максимум фпс за счет потенциально мыльных текстур
; (если видеопамяти будет не хватать, движок будет использовать MIPы вместо того чтобы выгружать видеопамять в системную память)
;D3D12.AdjustTexturePoolSizeBasedOnBudget=1
r.RayTracing=False
r.SkinCache.CompileShaders=False
r.GPUSkin.Support16BitBoneIndex=False
r.GPUSkin.UnlimitedBoneInfluences=False
r.AntiAliasingMethod=2
r.SkinCache.Mode=0
r.SkinCache.DefaultBehavior=0
r.SupportReversedIndexBuffers=False
r.SupportDepthOnlyIndexBuffers=False
r.VirtualTexturedLightmaps=False
r.OcclusionCullParallelPrimFetch=True
r.UseParallelGetDynamicMeshElementsTasks=1
; Это изменение может сломать какие-нибудь пассы вроде «ведьмачьего чутья» (кнопка Q) или подсвеченный контур объектов, не проверял особо, но вроде работает
r.CustomDepth=0
r.HZBOcclusion=2
bSmoothFrameRate=False
r.LandscapeLOD0DistributionScale=4
r.LandscapeLODDistributionScale=2
r.AllowLandscapeShadows=0
r.FreeSkeletalMeshBuffers=1
; Если совсем не нужны объемные облака — можно их отключить и получить прирост перформанса
;r.VolumetricCloud=0
; Тюнинг качества облаков — они нигде не перезаписываются в Scalability даже в исходной версии движка
r.VolumetricCloud.ViewRaySampleMaxCount=256
r.VolumetricCloud.ShadowMap.RaySampleMaxCount=96
r.VolumetricCloud.SampleMinCount=2
r.VolumetricCloud.EmptySpaceSkipping=1
r.CapsuleShadows=0
r.VolumetricCloud.SkyAO.MaxResolution=256
; Выключаем 4 каскад в Directional shadows. Там все равно Distance fields shadows отрабатывают, а разница не особо заметна
r.Shadow.CSM.MaxCascades=3
r.Shadow.MaxNumFarShadowCascades=0
r.Shadow.FarShadowDistanceOverride=0
;r.DFDistanceScale=1
r.InstanceCulling.OcclusionCull=1
; Все равно не используется, но буферы аллоцирует
r.Nanite=0
; Буфер наполовину пустой поэтому можно его срезать с 4096
; Может повлиять на качество освещения в некоторых сценах.
; Поэтому выключил по дефолту. Тем у кого машина слабая имеет с смысл раскомментить
;r.LumenScene.SurfaceCache.AtlasSize=2048
Вот собственно и все, можно запускать игру и проверять перформанс.
P.S.
Интересно было бы получить фидбек насколько это повлияет на фпс у других людей (если вообще найдутся желающие применить эту оптимизацию).
#смута #оптимизация #перформанс #производительность #unrealengine
Агрегатор видеоигр VideoGamesCritic получил новые функции вместо SteamDB
NVIDIA подтвердила поддержку DLSS 5 на видеокартах серии RTX 40
От SRTM-30 и GAN до гексагонального мира: история создания 8 More Lives
Sony назвала игры, которые покажет на выставке Tokyo Game Show 2026
DLSS 5 работает не только на RTX 5090, так как технология запустилась и на бюджетных видеокартах
Inart готовится открыть предзаказ на фигурку Дефстроука из Batman Arkham Origins
Мои игровые странствия
Создатель Devil May Cry рассказал, чего боится больше исчезновения дисков