Гайд по оптимизации производительности в Смуте

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).

Было:

Гайд по оптимизации производительности в Смуте26 фпс

Стало:

38 фпс38 фпс

В чем суть изменений

  1. Выключен рейтрейсинг (r.RayTracing=False). Все равно не используется т.к. для Lumen включенный софтварный рейтрейсинг (r.Lumen.HardwareRayTracing=False). Он же требует включенным GPU Skin Cache (см. следующий пункт)
  2. Выключен GPU Skin Cache для SkeletalMeshes (в основном относится к персонажам). Потому что очень медленный из-за того, что использует CPU visible память через шину PCI (параметр r.SkinCache.Mode=1).
  3. При включенном DLSS можно отключить встроенный TSR (Temporal Super Resolution) который съедает производительность при не таком большом улучшении качества сглаживания. (параметр r.AntiAliasingMethod=4).
  4. Выключен CustomDepth пасс (r.CustomDepth=0). Это потенциально может сломать «ведьмачье чутье», но вроде работает.
  5. Hardware occlussion queries заменены на HZB Occlusion. (r.HZBOcclusion=2)
  6. Отключены тени от ландшафта (r.AllowLandscapeShadows=0)
  7. Тюнинг качества объемных облаков
  8. Отключен 4й каскад в Directional Light (r.Shadow.CSM.MaxCascades=3)
  9. Включен Occlusion culling для каждого инстанса в ISM (Instanced StaticMesh) и HISM (Hierarchical) (r.InstanceCulling.OcclusionCull=1)
  10. Включены некоторые оптимизации для RenderThread.

Как сделать

Находим файл C:\Users\<НАЗВАНИЕ ПОЛЬЗОВАТЕЛЯ>\AppData\Local\Smuta\Saved\Config\Windows\Engine.ini

и вставляем в конец вот этот блок [UPDATED]:

[/Script/Engine.RendererSettings]

; Ультимативный подход для тех кто хочет получить максимум фпс за счет потенциально мыльных текстур
; (если видеопамяти будет не хватать, движок будет использовать 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

 

Источник

Читайте также