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

cucholix

00000780 00000438
Member
Joined
Jan 17, 2017
Messages
3,246
Trophies
1
Age
44
XP
6,274
Country
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,

Niko_of_Death

Well-Known Member
Member
Joined
Aug 10, 2016
Messages
151
Trophies
0
Age
29
XP
1,205
Country
United States
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.
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)
 

cucholix

00000780 00000438
Member
Joined
Jan 17, 2017
Messages
3,246
Trophies
1
Age
44
XP
6,274
Country
Chile
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)
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,

Niko_of_Death

Well-Known Member
Member
Joined
Aug 10, 2016
Messages
151
Trophies
0
Age
29
XP
1,205
Country
United States
The framerate is pretty choppy in Gondolia at anything past 2.5 draw distance.

Edit: Haven’t tried with FPS unlocked :o
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.
 

Niko_of_Death

Well-Known Member
Member
Joined
Aug 10, 2016
Messages
151
Trophies
0
Age
29
XP
1,205
Country
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:

(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,
  • Like
Reactions: cucholix

Kirby567fan

Well-Known Member
OP
Member
Joined
Jan 6, 2018
Messages
402
Trophies
0
Age
23
XP
2,649
Country
Morocco
so in docked mode the game outputs a 900p image upscaled to 1080p (i.e. UE4 display resolution is 900p)? Is there any way to change this? Also, is the DynamicResolutionScreenPercentageSettings relative to the display resolution or ScreenPercentageSettings? i.e., if PartyTalk base res is 66.66% of 900p, is the 83.33% DynmaicRes setting making it so dynamic res allows it to go up to 83.33% of 900p if theres performance headroom, or make it so it can go down to 83.33% of that 66.66% under high load? Any tweaks to the dynamic res setup outside of min/max possible? (i.e. target FPS, % change allowed per update, etc.)
Regardless, thanks for the work!

EDIT: Is it Switch\SwitchEngine.ini "nvn.SyncInterval=2" to "nvn.SyncInterval=1"?
There is also MinimumDesiredFrameRate=25 in another ini in JackGame directory so that might be what youre searching.
 

Niko_of_Death

Well-Known Member
Member
Joined
Aug 10, 2016
Messages
151
Trophies
0
Age
29
XP
1,205
Country
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,

cucholix

00000780 00000438
Member
Joined
Jan 17, 2017
Messages
3,246
Trophies
1
Age
44
XP
6,274
Country
Chile
Also, is the DynamicResolutionScreenPercentageSettings relative to the display resolution or ScreenPercentageSettings? i.e., if PartyTalk base res is 66.66% of 900p, is the 83.33% DynmaicRes setting making it so dynamic res allows it to go up to 83.33% of 900p if theres performance headroom, or make it so it can go down to 83.33% of that 66.66% under high load? Any tweaks to the dynamic res setup outside of min/max possible? (i.e. target FPS, % change allowed per update, etc.)
Regardless, thanks for the work!
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,

Niko_of_Death

Well-Known Member
Member
Joined
Aug 10, 2016
Messages
151
Trophies
0
Age
29
XP
1,205
Country
United States
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
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.
 

Konako

2B Lover
Member
Joined
Aug 2, 2015
Messages
133
Trophies
0
XP
694
Country
France
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.
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 Konako,

Niko_of_Death

Well-Known Member
Member
Joined
Aug 10, 2016
Messages
151
Trophies
0
Age
29
XP
1,205
Country
United States
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)
As in pure 1080p, no dynamic res? Cause the framerate is very unstable at 921mhz gpu
 

Konako

2B Lover
Member
Joined
Aug 2, 2015
Messages
133
Trophies
0
XP
694
Country
France
As in pure 1080p, no dynamic res? Cause the framerate is very unstable at 921mhz gpu
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 Konako,

cucholix

00000780 00000438
Member
Joined
Jan 17, 2017
Messages
3,246
Trophies
1
Age
44
XP
6,274
Country
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
 

Attachments

  • pakchunk0-Switch_1_p.rar
    2.3 KB · Views: 180
  • Like
Reactions: Broduskii

Niko_of_Death

Well-Known Member
Member
Joined
Aug 10, 2016
Messages
151
Trophies
0
Age
29
XP
1,205
Country
United States
Attached a more balanced resolution that doesn't affect fps that much.


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
Yeah, the dynamic res settings are driving me insane, no matter what settings I use it never seems to update.
 

Broduskii

Well-Known Member
Member
Joined
Jul 2, 2014
Messages
180
Trophies
0
XP
1,162
Country
United States
Well since people were able to decrypt DQXIS pak files, I updated my mod to edit romfs rather than exefs to acheive 60 FPS. With that I made some improvement to the mod f.e the resolution will drop as low as 360p if it cant acheive 60FPS so OC will not need to be so high even on open areas, and I also discovered how to edit the rendering resolution of the game so fixed 720p or higher is possible and the mod will work on any version of the game even if an update drops later. It should also work on the japanese version of the game but you should edit the titleid.If you want to use both mods at the same time just change the name of one of the paks to "pakchunk0-Switch_2_p.pak" btw the Hi-Res mod make the game run at 720p at all time so OC is needed.
WOW thank you so much <3
 

Niko_of_Death

Well-Known Member
Member
Joined
Aug 10, 2016
Messages
151
Trophies
0
Age
29
XP
1,205
Country
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:

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
 
Last edited by Niko_of_Death,

Niko_of_Death

Well-Known Member
Member
Joined
Aug 10, 2016
Messages
151
Trophies
0
Age
29
XP
1,205
Country
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,
  • Like
Reactions: cucholix

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
    OctoAori20 @ OctoAori20: Not a lot, just relaxing