Is it possible to enable DLSS in HDRP in quality settings without it always turning on DLSS?

I was wondering if it was possible to make it so DLSS can be enabled in the HDRP settings, without having it also always also apply the DLSS preset selected in the Quality Level as pictured here after switching to a different quality level?

After upgrading to 2023.2 my VR game has started to always applies DLSS mode set in the “mode” drop down (pictured below) whenever the HDRP quality level is switched at runtime. For the past couple years I’ve had a separate user setting for changing the DLSS mode… as I’ve found DLSS to be nearly unplayable at “ultra performance” level in VR, and still a notable downgrade even when on max quality compared to when it’s off.

It’s important for me that it stays off by default so only player who need DLSS have to suffer from it.

If I felt like if it was really my choice I would just disable DLSS entirely; however as it really can be a turnkey solution to making lower end video cards (e.g. Nvidia 2060/3060) to be able to play some gamed in higher quality levels than they could otherwise… it felts a bit capricious of me to fully remove the option by disabling it in the quality setting listed above.

9515617--1341490--Quality Levels.png

I would really like for my players to be able to quickly switch between Potato (970+) / Low (1070+) / Medium (2070+) / and Ultra (3070+) – without then also having to manually unselect a non-intuitive secondary feature which makes the medium and high quality modes more blurry than my “Potato” quality presets. (I am keeping DLSS disabled for the Potato/Low quality levels as they pre-date DLSS.)

yes, you can switch the camera between using DLSS and not using DLSS. I have some open bug report which leads sometimes to reduced performance while doing so in a build using VR, but in general it works:

HDAdditionalCameraData HDCam = cam.gameObject.GetComponent<HDAdditionalCameraData>();
HDCam.antialiasing = mode.AntialiasingMode; // dynamicResolutionType > 0?mode.AntialiasingMode : qualityController.antiAliasingMode;
HDCam.TAAQuality = mode.TAAQualityLevel;
switch (dynamicResolutionType)
{
    case DynamicResolutionType.None:
        HDCam.allowDeepLearningSuperSampling = false;
        HDCam.allowDynamicResolution = false;
        HDCam.antialiasing = useTAA ? HDAdditionalCameraData.AntialiasingMode.TemporalAntialiasing : HDAdditionalCameraData.AntialiasingMode.FastApproximateAntialiasing;
        break;                 
    case DynamicResolutionType.DLSS:
        HDCam.allowDynamicResolution = true;
        HDCam.allowDeepLearningSuperSampling = true;
        HDCam.deepLearningSuperSamplingUseCustomQualitySettings = true;
        HDCam.deepLearningSuperSamplingQuality = mode.QualityMode;
        HDCam.deepLearningSuperSamplingUseCustomAttributes = true;
        HDCam.deepLearningSuperSamplingSharpening = 1;
        break;
    case DynamicResolutionType.TAAU:
        HDCam.allowDynamicResolution = true;
        HDCam.allowDeepLearningSuperSampling = false;
        break;
}

This is code taken out of context, but the idea is to use HDAdditionalCameraData to switch DLSS.

1 Like