Graphics settings

Usage guide of settings.graphics: the Graphics tab, options per engine, presets, settings and defaults, rows from other kits, modding.

Source: module-kits:kits/settings_graphics/usage/en.mdView Markdown source

Also read offline — CLI: grip-forge docs settings-graphicsMCP tool: gripforge_docs { "topic": "settings-graphics" }

Graphics settings of the player (settings.graphics) #

The Graphics tab of the Options screen: quality preset, resolution, window mode, VSync, frame rate limit, render scale, shadows, anti-aliasing, view distance, field of view and brightness. Readable offline: gripforge docs settings-graphics, or the MCP tool gripforge_docs (topic settings-graphics).

What it is for #

The kit is the player's graphics preferences, applied natively by each engine. Each option appears only where the target supports it. Only what the player changed is applied, so the game keeps its own tuning until then. The choices are saved in the player settings (gripforge.settings/<project>/settings.graphics), outside game saves, and applied again at the next start.

It is installed by default in every new game, with ui.menu, input.remap, audio.core and i18n.text. Remove it only when asked. It requires game.engine; the tab lives in ui.menu.

Turn it on #

gripforge_gamekit_install   { project_id: "gkp_…", id: "settings.graphics" }
gripforge_gamekit_configure { project_id: "gkp_…", id: "settings.graphics",
                              config: { "defaults": { "preset": "medium", "fpsLimit": 60 }, "hidden": ["fov"] } }

Only the keys that differ from the defaults need to be written. The full reference is gripforge kit api settings.graphics.

Options #

OptionValuesWebGodotUnityUnreal
presetlow, medium, high, ultra (custom once an option is changed by hand)yesyesyesyes, with scalability
resolutionnative, 1280x720…nowindow sizeScreen.SetResolutiongame user settings
windowModefullscreen, borderless, windowedfullscreen or windoweddisplay serverfull screen modewindow mode
vsyncon, offnodisplay serverv-sync countgame user settings
fpsLimitunlimited, 30, 60, 120, 144, 240play loopmax fpstarget frame rateframe rate limit
renderScale50 to 100 %pixel ratio3D scale of the viewportURP render scale (hidden without URP)resolution scale
shadowsoff to ultrashadow map on / sizelights and shadow atlasquality shadowsshadow quality
antialiasingoff, fxaa, msaa2, msaa4, taanoMSAA, FXAA, TAAMSAAmethod and quality
viewDistance50 to 200 %camera far and fogcamera farcamera far and LOD biasview distance quality
fov80 to 130 %camera field of viewcamera field of viewcamera field of viewcamera manager
brightness50 to 150 %exposureenvironment brightnesslight and ambient intensitydisplay gamma

Presets set render scale, shadows, anti-aliasing and view distance: low is 70 %, off, off, 60 %; medium 85 %, medium, FXAA, 80 %; high 100 %, high, MSAA 2x, 100 %; ultra 100 %, ultra, MSAA 4x, 150 %. Changing one of them by hand switches to custom.

Settings and defaults #

KeyDefaultMeaning
defaultshigh preset, native resolution, windowed, VSync on, unlimited frame rate, render scale 100 %what the tab shows before the player changes anything
hidden[]options never shown
only[]when set, only these options are shown (among those the target supports)
resolutions1280x720, 1600x900, 1920x1080, 2560x1440, 3840x2160offered besides native; engines keep those the screen can show

Rows from other kits #

A kit adds rows to this tab by exposing, on its capability service, graphicsFields(lang), setGraphicsOption(id, value) and optionally resetGraphicsOptions(), and by calling registerSection('<capability>'). The rows appear before Restore defaults, with ids <capability>/<id>, and are reset with the tab. render.lod (its level of detail profile) is looked up without registration. Neither kit requires the other.

Service, events, variables #

Service settings.graphics: get(field), values(), chosen() (what the player changed), set(field, value), setPreset(p), presets(), supported(), resolutions(), setResolutions(list), reset() (the engine settings the kit changed are restored), reload(), registerSection(capability), sections(); options tab graphics (optionFields(lang), setOption(id, value)). Events: graphics.changed { changes, preset }, graphics.reset. Variables: graphics.preset, graphics.resolution, graphics.windowMode, graphics.vsync, graphics.fpsLimit, graphics.renderScale, graphics.shadows, graphics.antialiasing, graphics.viewDistance, graphics.fov, graphics.brightness.

Hooks and modding #

A graphics option is the player's choice, not a decision of the game, so the kit declares no hook. A mod may override defaults (a default preset, a frame rate limit) and resolutions; the values stay bounded by the config schema. hidden and only are not moddable: the game decides which options the player gets. What the player chose always wins over the defaults, modded or not.

{ "schema": "gripforge.mod/1", "id": "light_start", "name": "Light start", "version": "1.0.0",
  "requires": { "settings.graphics": "^1" }, "config": { "settings.graphics": { "defaults": { "preset": "medium" } } } }

When it does not do what you expect #

SymptomCause and fix
An option is missingthe target does not support it (VSync and resolution on the web), or hidden / only removes it
The game ignores defaultsthe player already changed that option: the saved choice wins; reset() clears it
The preset says customan option was changed by hand after choosing it
Render scale is missing on Unityit needs URP
A kit's row is missingthe kit did not call registerSection