sodium-fabric icon indicating copy to clipboard operation
sodium-fabric copied to clipboard

Implement render scaling

Open Artoria2e5 opened this issue 3 years ago • 5 comments

Is your feature request related to a problem? Please describe. After breaking an expensive graphic card, I ended up having to drive a 4K "retina" screen with an integrated Intel GPU. People on some other laptops like 13-inch macbooks may also have the issue of having a high-res screen with a slow GPU.

Describe the solution you'd like Sodium should have an option for rendering the 3D (but not the UI) portion at a lower resolution, and then scaling up to fit the screen. The method for upscaling can be made tweakable (antialias / upscale shaders and stuff).

Describe alternatives you've considered

  • Changing the resolution directly is very complicated in macOS.
  • https://github.com/juliand665/Resolution-Control looks like it would work, but it's only for 1.15.

Additional context None for now.

Artoria2e5 avatar Jul 20 '20 07:07 Artoria2e5

For a short term solution, look here: image

https://www.curseforge.com/minecraft/mc-mods/retino

NebelNidas avatar Jul 22 '20 21:07 NebelNidas

I'd like to address this in a future release of Sodium, but I haven't placed it on the roadmap anywhere yet.

jellysquid3 avatar Jul 25 '20 18:07 jellysquid3

Is the feature request being implemented?

SukkaW avatar Aug 31 '21 00:08 SukkaW

Would love this feature!

johalun avatar Jan 26 '22 17:01 johalun

While we're waiting for this feature I just wanted to mention that sodium-extras have the option to use half the resolution on macOS, as well as FPS counter and other useful stuff removing the need for mods like retiNO and FPS display. Still a universal render scale option would be the best. Hope we'll get it soon!

johalun avatar Jul 20 '22 18:07 johalun

We now have Resolution Control+ for current versions of Minecraft. It might be worth reviewing if this feature request is still valid and relevant.

douira avatar Jul 22 '23 01:07 douira

We now have Resolution Control+ for current versions of Minecraft. It might be worth reviewing if this feature request is still valid and relevant.

@douira, I'd like to add my .02 for this, having tried out resolution control with sodium and iris, with shaders. In short I feel the ability to have the world rendered at a lower resolution than the GUI is such a useful essential that it would be great to have it as part of sodium (or maybe just iris, as a common post-processing stage that can be applied to any and all shaders?).

Firstly to set the use case, I use resolution control to purposefully render a shaderpack (currently BSL) in integer scale at as low as 0.25x, particularly with the black outlines feature enabled. In this configuration, specifically with the outlining, integer scaling enhances the look of the shader*, although this is of course subjective, and I conversely hate running this effect at 1x resolution as it looks distasteful. The performance gain of the low render resolution is also a requirement for me to run shaders in general as I am the kind of user who prefers modest, portable and power efficient hardware; lower render resolution proves that one doesn't need to have high-end hardware (and consume or perhaps daresay "waste" lots of energy) to enjoy shader eyecandy. In short, resolution control is currently required for me to both achieve the look I want (the pixelated scaling applied to an arbitrary shader at will), and also be able to run it performantly.

Now, resolution control plus as it currently exists has so far been slow to update to 1.20.4 for instance, and it is also is not without it's bugs; for an example, while I've yet to capture it happening in a screenshot, sometimes various parts of the rendering process appear to be incorrectly rendered as too small in the bottom left corner over the rest of the image, as if there was some render buffer size mismatch. I've observed this happening both with BSL's adformentioned outline pass, and in vanilla "shaders" without iris occuring to vanilla clouds. These issues are possibly fixable, but especially given the iris use case I feel like tighter integration with sodium (and iris) would nip these issues in the bud. For me to be able to utilise iris at all, I then have to currently wait for resolution control to update**. Otherwise the exercise is pointless, not merely because of a performance issue but because again rendering at a reduced resolution + applying an integer upscaling filter to the result is integral to the aesthetic.

I also note that the alternative to achieving this look is running the game overall at a lower resolution and applying an integer filter by external means, and while minecraft's GUI scaling permits such low resolutions, this experience is suboptimal due to things like 3D isometric block models in the inventory being quite hard to discern or look at this way, in contrast to the world view, or things like italic text becoming difficult to read.

Lastly, while I understand that the actions of forks like rubidium are none of the business of sodium's developers, having this feature in sodium would encourage the downstream forks to adopt this feature, quite possibly by re-using the existing effort. No such mod like resolution control currently exists on forge to my knowledge. (Unless one wants to deal with optifine...)

I appreciate that the request has to be balanced against developer resources but I strongly feel that a resolution control feature (preferably with selectable filter) has a solid place in sodium, or possibly iris. It would enable more experience customisation and I feel it is not a feature that should require a more obscure mod to update; rather, it should be core and available to anyone who has sodium, as soon as it updates.

* I've attached some screenshots captured at output resolution in case anyone reading wants visual examples. [edit: I would recommend viewing these at 100% to better demonstrate the interaction of the black edges with the integer scaling... also I just realised I had hidden the UI in all these screenshots, derp. I can assure you they were taken with RC+, I have not edited these images!]

2023-12-15_11 27 57 2023-12-15_12 33 26 2023-12-16_21 59 36 2023-12-16_22 00 35 2023-12-16_22 11 35 2023-12-16_22 22 24 2023-12-16_22 25 06 2023-12-15_11 24 58

** So essential is resolution control plus's functionality to being able to create the minecraft experience I describe that I got impatient enough to download the mod's source for resolution control+ 3.0.0, blindly patch the versions of some dependencies to be inline with 1.20.4's current mod versions like e.g. mod menu, rebuild and then blindly hope it didn't fail to build or crash the game. Nothing has yet caught fire, but I could not maintain this strategy nor contribute that back for ongoing long term health reasons, so this approach is not sustainable.

thetaepsilon avatar Dec 29 '23 19:12 thetaepsilon

I'm not really the person you need to convince to add this to sodium, but I will answer since you pinged me. I don't think it's necessary to add to sodium as Resolution Control+ exists, which seems to work reasonably well, and better integration with it is something both it and sodium could work on. However, in the end it's down to if anyone feels like spending time engineering and then maintaining this feature instead of another feature in sodium since time is limited and doesn't grow with the number of features. Jellysquid mentioned they wanted to work on it in the future, but that was three years ago.

douira avatar Dec 29 '23 23:12 douira

I still think we should implement this functionality, since there's no intention to ever support Minecraft's exclusive fullscreen mode. Changing the render scale and outputting a native resolution image is vastly superior to changing the monitor's video mode.

jellysquid3 avatar Dec 29 '23 23:12 jellysquid3

Closing this issue in favor of https://github.com/CaffeineMC/sodium-fabric/issues/2362 as that outlines details about the implementation & scope.

jellysquid3 avatar Mar 07 '24 15:03 jellysquid3