RELEASE Dragon Quest XI S (Full Version) 60 FPS mod

Discussion in 'Switch - ROM Hacking, Saves, Translations & Tools' started by Kirby567fan, Sep 28, 2019.

Loading...
  1. cucholix

    cucholix Banners guy

    Member
    9
    Jan 17, 2017
    Chile
    Hopefully resolution is tied to gpu where we have more room for visual improvement, draw distance is tied to cpu and it’s already hitting ceiling at 2x scale and full cpu speed.
     
    Last edited by cucholix, Oct 16, 2019
  2. Niko_of_Death

    Niko_of_Death Member

    Newcomer
    2
    Aug 10, 2016
    United States
    Where is draw distance killing performance for you? I've been trying a ViewDistanceScale of 5 and performance isn't that bad, with FPS unlocked some areas still get decently above 30fps (don't have tools to measure exactly), towns can be choppy but even then they're not that bad (and are choppy by default anyway)
     
  3. cucholix

    cucholix Banners guy

    Member
    9
    Jan 17, 2017
    Chile
    The framerate is pretty choppy in Gondolia at anything past 2.5 draw distance.

    Edit: Haven’t tried with FPS unlocked :o
     
    Last edited by cucholix, Oct 16, 2019
  4. Niko_of_Death

    Niko_of_Death Member

    Newcomer
    2
    Aug 10, 2016
    United States
    I've been enjoying it with FPS unlocked, I know some people can't stand unstable framerates but I prefer them to solid 30 personally. Battles in particular hold up pretty well framerate wise.
     
  5. sorabora

    sorabora GBAtemp Regular

    Member
    4
    Dec 8, 2016
    United States
    How's the fan noise in that mode?
     
  6. Niko_of_Death

    Niko_of_Death Member

    Newcomer
    2
    Aug 10, 2016
    United States
    Loud since I run at full overclock
     
    TidusTran and sorabora like this.
  7. Niko_of_Death

    Niko_of_Death Member

    Newcomer
    2
    Aug 10, 2016
    United States
    Going to go through some of the interesting looking settings and update this with comparisons/info. Note that I'm using an already modified defaultscalability here.

    Comparisons can be found here:
    Green Joy-Con D-Pad Shells for Nintendo Switch

    (aside from ScreenshotCopyright I'm only using 1 modified setting from base at a time)

    Tested settings:
    Code:
    r.AmbientOcclusion.HalfRes=1 to 0 - works, does what you'd expect
    bScreenshotCopyright=true to false - works, removes watermark from screenshots
    r.DefaultFeature.AntiAliasing=0 - works, disables FXAA
    r.DefaultFeature.AntiAliasing=2 - no apparent difference, expected to enable TAA instead of FXAA
    r.DefaultFeature.AntiAliasing=2 + PostProcessAAQuality=6 - broken, TAA can be enabled but is jittery, I tried defining extra TAA parameters (sample count etc.) but they didn't fix it. Presumably the jitter also means the AA effect isn't fully applied.
    r.RenderTargetInitializeBufferSizeX/Y=1600/900 to 960/540 - doesn't seem to have major impact, main menu logo resolution does seem to be affect by it so I think it has some impact, just not as much as cvar
    +CVars=r.SetRes=1920x1080 to 960/540 - sets the display resolution. Weird that InitialBufferSize default is different than this, maybe that has more to do with render res than display res? (Note: For the comparison I also disabled the dynamic res, set render res to 100, and set the screen percentage to 100, so not exact comparison to base. Also, since screenshots are limited to 720p you can't get full comparison, cant confirm if its exactly 1080p)
    r.PostProcessAAQuality=6 (without TAA enabled) - Not sure, hard to tell with compressed 720p screenshot given difference between AA setting levels is not massive. Presumably should work given changing it gets TAA enabled
    r.MaxAnisotropy=16 - No apparent effect, nor does setting it to 1. I don't think this even worked on PC so not a surprise.
    
    Also, I'm trying to figure out how to get UE4's profiler enabled. The console command I'm trying to use is "stat UNIT", but can't figure out how to get that to be run automatically through ini tweaks. That or some other tool would be nice to have to figure out what the game's memory overhead is.

    Added a true baseline (absolutely no ini tweaks), and the max I could get it to run at (all presets maxed, any variables I could get to work maxed, full screenpercentage). Runs at like 5fps lol
     
    Last edited by Niko_of_Death, Oct 17, 2019
    cucholix likes this.
  8. Kirby567fan
    OP

    Kirby567fan GBAtemp Regular

    Member
    5
    Jan 6, 2018
    Morocco
    There is also MinimumDesiredFrameRate=25 in another ini in JackGame directory so that might be what youre searching.
     
  9. Niko_of_Death

    Niko_of_Death Member

    Newcomer
    2
    Aug 10, 2016
    United States
    Fun Fact: The game actually seems to allow supersampling, setting ScreenPercentage to 200 gives 4K (presumably, unless the base is below 1080p. It's definitely above 1080p at the very least). Unfortunately the switch's screenshot function didn't work with it, guess the memory bandwith was too limited.
    https://files.catbox.moe/2gc1u2.mp4
    BTW In my absolute max profile I had TAA enabled and it worked properly, so there is something that can fix it I guess. Now the main thing I want is to find a way to improve the point light shadows, can't seem to find anything to improve them beyond slightly improving the filtering.
     
    Last edited by Niko_of_Death, Oct 17, 2019
  10. cucholix

    cucholix Banners guy

    Member
    9
    Jan 17, 2017
    Chile
    It’s my guess too that dynamic resolution percentage is relative to base screen resolution, and not relative to per area resolution settings.

    I tested @Kirby567fan mod and it stutters even slowdown in some areas, maybe it could be possible lower the resolution while also disabling the dynamic res.

    For example setting all dynamic res to 100, and set all res settings to 83.33
     
    Last edited by cucholix, Oct 17, 2019
  11. Niko_of_Death

    Niko_of_Death Member

    Newcomer
    2
    Aug 10, 2016
    United States
    It doesn't even seem like Dynamic Res is even being applied, at least with the settings I've tried. Going to keep trying different setups, the settings are kinda all over the place. Wish I had the tools to properly measure framerate/res.
     
  12. Konathedemo

    Konathedemo GBAtemp Regular

    Member
    4
    Aug 2, 2015
    France
    There's a software called TrDrop that can analyse the framerate of a video but I don't know if the low quality of the recording of the switch will work well with it
    But it should help you at least with the framerate
    (also if someone could do a config for 1080p gameplay I would be really greatful)
     
    Last edited by Konathedemo, Oct 17, 2019
  13. Niko_of_Death

    Niko_of_Death Member

    Newcomer
    2
    Aug 10, 2016
    United States
    As in pure 1080p, no dynamic res? Cause the framerate is very unstable at 921mhz gpu
     
  14. Konathedemo

    Konathedemo GBAtemp Regular

    Member
    4
    Aug 2, 2015
    France
    If you could do that then yes or otherwise 900p. Again I would be very grateful if you could do that (I tried to do it myself but I'm too stupid to repack the files myself)
     
    Last edited by Konathedemo, Oct 18, 2019
  15. cucholix

    cucholix Banners guy

    Member
    9
    Jan 17, 2017
    Chile
    Attached a more balanced resolution that doesn't affect fps that much.
    Settings:
    Code:
    ; 固定解像度の場合のスクリーンパーセンテージ
    +ScreenPercentageSettings=(TypeName="GameDefault",ConsoleModeScreenPercentage=66.66,HandheldModeScreenPercentage=66.66)
    +ScreenPercentageSettings=(TypeName="PartyTalk",ConsoleModeScreenPercentage=66.66,HandheldModeScreenPercentage=83.33)
    +ScreenPercentageSettings=(TypeName="PhotoMode",ConsoleModeScreenPercentage=66.66,HandheldModeScreenPercentage=100)
    +ScreenPercentageSettings=(TypeName="CutScene",ConsoleModeScreenPercentage=83.33,HandheldModeScreenPercentage=83.33)
    +ScreenPercentageSettings=(TypeName="Casino",ConsoleModeScreenPercentage=83.33,HandheldModeScreenPercentage=83.33)
    +ScreenPercentageSettings=(TypeName="Custom")
    ; 動的解像度の場合のスクリーンパーセンテージ(据え置きは1600x900ベース、携帯モードは1088x612ベース)
    +DynamicResolutionScreenPercentageSettings=(TypeName="GameDefault",ConsoleModeScreenPercentage=73.33,HandheldModeScreenPercentage=85,bDynamicResolution=False)
    +DynamicResolutionScreenPercentageSettings=(TypeName="PartyTalk",ConsoleModeScreenPercentage=73.33,HandheldModeScreenPercentage=85,bDynamicResolution=False)
    +DynamicResolutionScreenPercentageSettings=(TypeName="PhotoMode",ConsoleModeScreenPercentage=73.33,HandheldModeScreenPercentage=125)
    +DynamicResolutionScreenPercentageSettings=(TypeName="CutScene",ConsoleModeScreenPercentage=66.66,HandheldModeScreenPercentage=66.66)
    +DynamicResolutionScreenPercentageSettings=(TypeName="Casino",ConsoleModeScreenPercentage=73.33,HandheldModeScreenPercentage=83.33)
    +DynamicResolutionScreenPercentageSettings=(TypeName="Custom")
    Strange enough ScreenPercentageSettings doesn't set the main resolution but DynamicResolutionScreenPercentageSettings

    In fact you can set ScreenPercentageSettings to 0 and the game won't suffer any change lol, the new pack has dynamic res disabled too, but has slightly lower resolution overall
     

    Attached Files:

    Broduskii likes this.
  16. Niko_of_Death

    Niko_of_Death Member

    Newcomer
    2
    Aug 10, 2016
    United States
    Yeah, the dynamic res settings are driving me insane, no matter what settings I use it never seems to update.
     
  17. Broduskii

    Broduskii GBAtemp Regular

    Member
    5
    Jul 2, 2014
    United States
    WOW thank you so much <3
     
  18. Niko_of_Death

    Niko_of_Death Member

    Newcomer
    2
    Aug 10, 2016
    United States
    Managed to get Anisotropic filtering working
    In DefaultDeviceProfiles.ini, by default
    [Switch DeviceProfile] has the following LOD settings defined:
    Code:
    +TextureLODGroups=(Group=TEXTUREGROUP_World,MinLODSize=1,MaxLODSize=2048,LODBias=0,MinMagFilter=linear,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    +TextureLODGroups=(Group=TEXTUREGROUP_WorldNormalMap,MinLODSize=1,MaxLODSize=2048,LODBias=0,MinMagFilter=linear,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    +TextureLODGroups=(Group=TEXTUREGROUP_WorldSpecular,MinLODSize=1,MaxLODSize=2048,LODBias=0,MinMagFilter=linear,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    +TextureLODGroups=(Group=TEXTUREGROUP_Weapon,MinLODSize=1,MaxLODSize=2048,LODBias=0,MinMagFilter=linear,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    +TextureLODGroups=(Group=TEXTUREGROUP_WeaponNormalMap,MinLODSize=1,MaxLODSize=2048,LODBias=0,MinMagFilter=linear,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    +TextureLODGroups=(Group=TEXTUREGROUP_WeaponSpecular,MinLODSize=1,MaxLODSize=2048,LODBias=0,MinMagFilter=linear,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    +TextureLODGroups=(Group=TEXTUREGROUP_Vehicle,MinLODSize=1,MaxLODSize=2048,LODBias=0,MinMagFilter=linear,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    +TextureLODGroups=(Group=TEXTUREGROUP_VehicleNormalMap,MinLODSize=1,MaxLODSize=2048,LODBias=0,MinMagFilter=linear,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    +TextureLODGroups=(Group=TEXTUREGROUP_VehicleSpecular,MinLODSize=1,MaxLODSize=2048,LODBias=0,MinMagFilter=linear,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    +TextureLODGroups=(Group=TEXTUREGROUP_Effects,MinLODSize=1,MaxLODSize=2048,LODBias=0,MinMagFilter=linear,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    +TextureLODGroups=(Group=TEXTUREGROUP_EffectsNotFiltered,MinLODSize=1,MaxLODSize=2048,LODBias=0,MinMagFilter=linear,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    +TextureLODGroups=(Group=TEXTUREGROUP_MobileFlattened,MinLODSize=1,MaxLODSize=2048,LODBias=0,MinMagFilter=linear,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    Changing these to the PS4 ones defined in the same file:
    Code:
    +TextureLODGroups=(Group=TEXTUREGROUP_World,MinLODSize=1,MaxLODSize=2048,LODBias=-1,MinMagFilter=aniso,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    +TextureLODGroups=(Group=TEXTUREGROUP_WorldNormalMap,MinLODSize=1,MaxLODSize=2048,LODBias=-1,MinMagFilter=aniso,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    +TextureLODGroups=(Group=TEXTUREGROUP_WorldSpecular,MinLODSize=1,MaxLODSize=2048,LODBias=-1,MinMagFilter=aniso,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    +TextureLODGroups=(Group=TEXTUREGROUP_Weapon,MinLODSize=1,MaxLODSize=2048,LODBias=-1,MinMagFilter=aniso,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    +TextureLODGroups=(Group=TEXTUREGROUP_WeaponNormalMap,MinLODSize=1,MaxLODSize=2048,LODBias=-1,MinMagFilter=aniso,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    +TextureLODGroups=(Group=TEXTUREGROUP_WeaponSpecular,MinLODSize=1,MaxLODSize=2048,LODBias=-1,MinMagFilter=aniso,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    +TextureLODGroups=(Group=TEXTUREGROUP_Vehicle,MinLODSize=1,MaxLODSize=2048,LODBias=-1,MinMagFilter=aniso,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    +TextureLODGroups=(Group=TEXTUREGROUP_VehicleNormalMap,MinLODSize=1,MaxLODSize=2048,LODBias=-1,MinMagFilter=aniso,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    +TextureLODGroups=(Group=TEXTUREGROUP_VehicleSpecular,MinLODSize=1,MaxLODSize=2048,LODBias=-1,MinMagFilter=aniso,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    +TextureLODGroups=(Group=TEXTUREGROUP_Effects,MinLODSize=1,MaxLODSize=2048,LODBias=-1,MinMagFilter=linear,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    +TextureLODGroups=(Group=TEXTUREGROUP_EffectsNotFiltered,MinLODSize=1,MaxLODSize=2048,LODBias=-1,MinMagFilter=aniso,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    +TextureLODGroups=(Group=TEXTUREGROUP_MobileFlattened,MinLODSize=1,MaxLODSize=2048,LODBias=-1,MinMagFilter=aniso,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
    gives us anisotropic filtering, as can be seen here:
    Green Joy-Con D-Pad Shells for Nintendo Switch


    Also, I still haven't exactly figured out the TAA jitter, but I think it has something to do with dynamic resolution, so disabling it might get TAA working. I've had TAA working sometimes, but not sure exactly what got it working.

    EDIT: Got mesh LOD improvements working too
    Adding
    Code:
    +CVars=r.StaticMeshLODDistanceScale=X
    to Switch DeviceProfile sets this. Not sure what the default is (presumably 1?), but lower is better. This comparison shows mesh downgrades with 5, and improvements with 0.1
    Green Joy-Con D-Pad Shells for Nintendo Switch
     
    Last edited by Niko_of_Death, Oct 18, 2019
    Kirby567fan and cucholix like this.
  19. Niko_of_Death

    Niko_of_Death Member

    Newcomer
    2
    Aug 10, 2016
    United States
    I believe I have figured out most of the dynamic resolution stuff.
    First of all, the screenpercentage in DefaultDeviceProfiles.ini must be set to the MINIMUM you want. There are 3 places to put it in DefaultDevicesProfiles.ini
    Code:
    +CVars=r.ScreenPercentage=X
    under Switch DeviceProfile, SwitchConsole DeviceProfile, SwitchHandheld DeviceProfile. I'm not quite sure what effect (if any) the one under Switch DeviceProfile has, given Console/Handheld both have a specific definition.
    Next you have the Dynamic Res profiles Kirby567fan posted earlier. Strangely, it seems like the photo mode one is not being applied, as I have tried setting it to force full res (or supersampling) in photo mode, but it has no apparent effect. The party mode profile does work (for example, I had a 33% minimum for GameDefault, with an obviously subnative res in game, and 200% static for PartyTalk, and the supersampling + framerate drop in party talk mode spoke for itself), and I'm not sure on cutscene and casino settings (haven't been able to test).
    The thing that should be noted, as cucholix noted above, is that (contrary to what I, and presumably others, would assume) DynamicResolutionScreenPercentageSettings sets the MAXIMUM it can go to, and ScreenPercentageSettings sets the MINIMUM.
    So, for example, if you want docked mode to range from 720p to 1080p, you should have
    Code:
    +ScreenPercentageSettings=(TypeName="GameDefault",ConsoleModeScreenPercentage=66.66,HandheldModeScreenPercentage=66.66)
    +DynamicResolutionScreenPercentageSettings=(TypeName="GameDefault",ConsoleModeScreenPercentage=100,HandheldModeScreenPercentage=85,bDynamicResolution=True)
    
    Finally, you have the dynamic res settings in DefaultEngine.ini. From what I can tell MinDesiredFramerate has no impact on dynamic res, the comment says something about particle collision (machine translated so not exactly sure what it means). The settings you want are the ones with r.DynamicResolution. as a prefix (they're all grouped together).
    I'm not quite certain what each of these do (I can't find documentation on all of them, presumably due to changes in the engine since the version DQXI uses), so here are the ones I believe are important and what I assume they do:
    Code:
    r.DynamicResolution.DecreasesResolution=18 - The minimum step to change resolution by? Not too sure
    r.DynamicResolution.DecreasesResolutionMaxCount=30 - Presumably the max for the previous function
    r.DynamicResolution.WaitFramesToUpper/LowerResolution=3 - The amount of frames to process after a high/low gpu load is detected before adjusting the resolution (to avoid overcorrecting)
    r.DynamicResolution.Min/MaxTimeBudget=X - The "normal" frametime range, in milliseconds. With 33.33 ms being the frametime corresponding to 30fps, the default is to be slightly above/below 33. This can be adjusted slightly to have the game be more or less sensitive to high/low gpu loads (i.e. raise MaxTimeBudget so lower frametimes are allowed before lowering resolution, lower MinTimeBudget so higher frametimes are needed before raising resolution), or if your framerate is unlocked, can be adjusted to be based around 16.66 ms (60fps), or whatever frametime you want to target. AFAIK these values need to be integers.
    r.DynamicResolution.Heavy/LightTimeBudget=X - Extended frametime range, not sure what the difference between this and Min/Max is, presumably there is a greater amount of correction when frametimes are out of this range compared to being out of the Min/Max range but within this range
    
    As for disabling the framerate cap, you can do that by changing
    Code:
    nvn.SyncInterval=2
    
    to 1 in SwitchEngine.ini (and presumably you could also change to 0 to remove vsync entirely)
    as well as changing
    Code:
    FrameRateLimit=30
    
    to 60 in DefaultGameUserSettings.ini.

    EDIT: Testing further, it seems like dynamic res is definitely the cause of the TAA "jitter" artifact I was experiencing.
     
    Last edited by Niko_of_Death, Oct 18, 2019
    cucholix likes this.
  20. masagrator

    masagrator The developper

    Member
    11
    Oct 14, 2018
    Poland
    @Niko_of_Death never change nvn.syncinterval to 0, it will crash game. Deleting this line disables double buffer. Disabling vsync is impossible in Switch retail games.
     
    Last edited by masagrator, Oct 18, 2019
    Niko_of_Death likes this.
Quick Reply
Draft saved Draft deleted
Loading...