Yellow-Dog-Man / Resonite-Issues

Issue repository for Resonite.
https://resonite.com
121 stars 2 forks source link

World quality preset option #2327

Open kulzae opened 2 weeks ago

kulzae commented 2 weeks ago

Is your feature request related to a problem? Please describe.

Some worlds have content that could be downgraded or reactive to graphics settings beyond the settings we currently have but have no way to know what a users preferencee is other than a world specific menu and variable. For example the light cones in the bassarisk have the ability to swap to a version with less overlapping faces to reduce overdraw

Describe the solution you'd like

A world quality preset setting. This would be a choice from very low to high that flips an unsafe readable cloud variable int that can be read by the world. This would allow worlds to do things like Turn off shadows completely for certain lights Flip to lower versions of models Hide non essential geometry And other world specific things without needing a world specific setting

Describe alternatives you've considered

Using the current method of making a world specific setting

Tying this setting to an overall graphics preset like https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/1931

Additional Context

No response

Requesters

No response

Frooxius commented 2 weeks ago

This is something I'd like to add, but the hardest part on this is how to model this and how to communicate to world builders what's expected for each of the settings.

The quality can be interpreted in lots of different ways - some worlds might need to use shadows for example, even if the quality is set to "Low" (say someone's making a shadow puppet kind of world). Giving the creators the flexibility to interpret that is important.

But it also bring the problem that it might not result in much consistency. Perhaps that itself is not a big issue - there will inherently be worlds that are just lighter overall (like way lighter even on High settings) and vice versa. And some worlds that completely ignore it.

The other part is - do we just have a few presets? Something like: "Very Low", "Low", "Medium", "High", "Very High"?

That would be relatively easy for creators to work with and adapt their worlds to. We could go for more fancier stuff, say subdivide the settings into more categories or represent it as a numeric value that could be expanded on (or user who gets a slider to move around) for more fine grained options, but that might make it harder for world creators to interpret and work with.

shiftyscales commented 2 weeks ago

some worlds might need to use shadows for example

For this aspect- and consideration- my thought is that a given world could have 'settings recommendations' that it prompts the user with. E.g. "this world recommends the following settings for the best experience" and allows the user to temporarily enable those settings as-needed, e.g. say the world creator wanted users to use bloom, or other post-processing effects as part of the experience.

But it also bring the problem that it might not result in much consistency.

I agree that this aspect probably isn't something we should concern ourselves with. Ultimately with any engine, there will be optimized, and unoptimized contents- and that varies by creator.

We can have general improvements made to make optimizations easier, e.g. mesh variant generation for auto-LODs of assets- while giving world creators the option to manually add customized/hand-made variants as-needed.

Likewise- similar to being able to tag a particular texture to not be scaled down by the resolution settings- we could possibly expose LOD controls for meshes when we get there E.g. determining which LOD should appear at a given quality preset.

We could also probably let world creators specify texture resolution on a per-quality basis if they wanted certain assets to be prioritized/de-prioritized when lowering texture resolution to fit within the video memory budget.


What we could do on our end, however, is pick target hardware configurations we can assign to each configuration alongside #1931 so we can give creators a list of recommended specs/hardware configurations to target at each quality tier.

This would at least ensure some level of consistency for creators to ground their creations to.


Using Unity as a point of reference- their QualitySettings expose and control a lot of things we currently have user-controllable, e.g. shadow distance/quality settings, bone influence, texture quality/resolution multipliers, etc.

So I see this possibly working in a few ways:


Do you think this all makes sense as a starting point, @Frooxius? I agree that if we keep to a pre-set list of qualities.

E.g.:

Having established presets makes it easier for creators to meet those targets- particularly if we also pin specific hardware configurations to them as 'recommended' specs for Resonite so certain areas can be focused on, e.g. video and system memory budget, processor / graphics card speed, etc.

kulzae commented 2 weeks ago

It would be inconsistent but that's partly the point. One world might require shadows for it's experience where as another might not. You can't really turn off shadows globally in that case but if say for instance the user is requesting the very low preset the world creator can trim off what they can to attempt to meet that. That's one reason I'm requesting it as it's own setting apart from the other graphics settings.

Also as it would vary between worlds people likely wouldnt want to "Reset" their graphics settings by changing the overall preset every time and would only mess with the world quality setting

For instance this is how it currently works in the bassarisk Lowest: sets textures to lower resolution. removes some details from the world. Removes reflection probes from the world. Removes shadows from light sources, sets light cones to low impact versions Low: adds reflection probes. Adds details normal: normal texture resolution, light cones are normal impact versions, adds directional light shadows high: adds shadows to a selected light, adds realtime reflection probe.

not all of these would be covered by graphics settings and most are specific to this world. Also I am unsure if its required but i am using a group cloud variable for this and that is not something all creators have access to

FlameSoulis commented 2 weeks ago

I know this will sound dumb... but...

SteamDeck mode. I know this will sound silly, but being able to have a 'just use this, genius' mode for the portable gaming systems could also help out immensely. I know the Linux build is kind of... debatable in support, but even if it has to be bound akin to Low or whatever, many titles are already doing this.

Either way, I strongly agree this would be a major thing to start adopting and working towards. I already am doing extra work just to detect the potato badge for users who need the extra help... but virtually no one knows about it!

shiftyscales commented 2 weeks ago

@FlameSoulis - That basically falls into what I was describing above- having certain target specs / particular hardware we tailor the settings towards. That also provides a frame of reference for creators looking to optimize their content for that particular hardware.