Course contentsShow
← Unreal Engine Game Development
Lesson 825 of 88011. Performance Profiling and OptimizationFree lesson

Fine-Tuning Console Rendering Pipelines

Adjust console-specific rendering variables like resolution scaling and shadow maps to maintain consistent frame rates on fixed-hardware gaming consoles.

In this lesson, you will learn how to surgically adjust console-specific rendering variables to stabilize your frame rate on fixed-hardware targets.

When developing for consoles, you have a fixed performance ceiling, unlike PC where hardware variance dictates user-end scalability. To maintain a consistent 30 or 60 FPS, you must move beyond generic scalability settings and manipulate the internal rendering pipeline at a granular level.

Dynamic Resolution Scaling (DRS)

The most impactful tool for maintaining frame rate on consoles is Dynamic Resolution Scaling. Instead of forcing a static 4K output, you can allow the engine to scale the internal render target down during complex scenes. You control this in your DefaultDeviceProfiles.ini under the specific console profile:

[PS5 DeviceProfile]
r.DynamicRes.MinUpscaleResolution=1920x1080
r.DynamicRes.MaxUpscaleResolution=3840x2160
r.DynamicRes.FrameTimeBudget=16.66

By setting the FrameTimeBudget to 16.66ms, the renderer will automatically lower the resolution if the GPU exceeds that threshold, ensuring the game stays fluid during intense sequences like heavy alpha blending or complex post-processing.

Shadow Map Optimization

Shadow maps are often the biggest culprit for GPU stalls on consoles. Rather than lowering global settings, fine-tune the pipeline by capping the maximum resolution of cascaded shadow maps and limiting the influence distance for specific light types.

You can inject these overrides during runtime based on your Platform-Specific Scalability Settings to shave off milliseconds:

// Example of a console-specific console variable override
static IConsoleVariable* CVarShadowRes = IConsoleManager::Get().FindConsoleVariable(TEXT("r.Shadow.MaxResolution"));
if (CVarShadowRes)
{
    CVarShadowRes->Set(1024, ECVF_SetByCommandline);
}

By strictly defining the maximum resolution for dynamic shadows, you reduce the GPU's memory bandwidth pressure. Combine this with lowering the r.Shadow.CSM.MaxCascades to balance visual quality against your strict frame budget. The goal is to reach a "performance floor" where, regardless of the on-screen action, the GPU always finishes its work within the target frame window, preventing dropped frames that cause hitching.

Key Takeaway: Use platform-specific device profiles to enforce dynamic resolution scaling and shadow map resolution caps, ensuring your GPU workload never exceeds the console's fixed hardware frame budget.