GParams are general purpose graphics configuration files that many Fromsoft games use. The majority of this tutorial will be about GParams in Elden Ring, but many of the themes may apply to the other games. GParams can control many things such as fog, outdoor/ambient lighting, colors, anti-aliasing, and more. Not everything is known about what the groups/parameters do, so if you find anything out, don't hesitate to message me on ServerName (@?Rainer?).
Firstly, to edit a GParam you will need either Yabber, WitchyBND, or Smithbox. The main difference between these tools is that Yabber and WitchyBND will serialize the GParam into an xml of text that you can edit, and Smithbox is a desktop application with a UI. Which one you use is a matter of personal preference.
Smithbox will allow you to easily select a GParam file within its Gparam Editor. WitchyBND/Yabber works by dragging the file onto the exe (or using the right click context menu if you have that enabled), and it will proceed to output an XML with the GParam's data. Now that you know how to open a GParam file, we will move on to discuss the data that you will work with.
GParams have 4 layers of categories.
1. Groups - groups are sets of parameters to edit. Most of the names are self-explanatory, but I will go into detail regarding each group.
2. IDs - these are subgroup IDs that are intended to be used in map objects like collisions, assets, and enemies. They have GParam configs but I am uncertain how these can be used.
3. Time of Day - the in-game time of day. This is fairly self-explanatory.
4. Parameters - the controls/features for the group specified. Each group has different parameters.
| Group | Description |
|---|---|
| LightSet | Unsure of details thus far, but it controls what I believe are the sun's lightrays. |
| SSAO | Screen space ambient occlusion parameters. Very complex stuff. No idea how to successfully use this group. |
| Tone Map | Generic graphics editing parameters such as exposure, contrast, and overall color tints. |
| Bloom | Bloom parameters. |
| LightShaft | Pseudo-raytracing. Creates light shafts that move across the world as time passes. |
| Anti-Alias | Anti-aliasing parameters. |
| MotionBlur | Standard motion blur parameters. |
| FurBlur | Motion blur that only blurs the outlines/fur of objects. Used to create more realistic fur motion. |
| FeedBackBlur | Extreme motion blur effects. Presumably reserved for effects in cutscenes and such. |
| ColorGrading | Fine-tuning for LUTs used. |
| ShadowParam | Shadow parameters. |
| AboveShadow | Unused in ER. |
| WaterInteraction Simulation | Only used in the mapbase GParam for ER. Unsure how to use this. |
| AOFields | Unused in ER. |
| AOFields Model | Unused in ER. |
| SeaWave | Unused in ER. |
| Glow Filter | Related to the bloom group. Still not fully understood. |
| Lens Simulation | Camera lens effects and filters. |
| Cloud Shadow | Unused in ER. |
| Wet | Parameters for emulating wetness of characters and objects. |
| SSR | Screen space reflection. Unsure how to work with this group still. |
| VolumetricFog | Ambient, higher quality fog/mist parameters. |
| FogVolume | Faster moving, perlin-noise based fog (such as the fog in Stormveil Castle). |
| EnvironmentConfig | Very basic environment parameters such as overall color-shift. |
| RayTracing | Raytracing parameters (very advanced and no idea how to use). |
| Parameter | Description |
|---|---|
| Exposure | Overall brightness of the scene. 3 is the average for most locations in ER. |
| ToneMapMode | 0: No color shift, 1: No color shift, 2: No color shift, 3: Enables color shift parameters. Enables basic contrast settings. No Reinhard or filmic contrast. No Reinhard white balance, 4: dark and creepy like the game Limbo, 5: same thing, 6: Enables color shift parameter, 7: Enables color shift parameter. Enables filmic contrast, 8: Enables color shift parameter. Enables Reinhard contrast and white balance, anything past 8 freezes the screen but not the game |
| FilmicContrast | |
| ReinhardContrast | |
| ReinhardWhiteBalance | |
| Enable autoexposure | Prevents extreme settings (such as pitch black/white areas) from occurring, and adjusts exposure accordingly when transitioning between two areas with different GParams (such as walking from outside to inside a dark cave). Disable this for full control over GParam exposure. |
| Enable chromatic aberration | Enables the red/green/blue color-shift effect. |
| ToneLateralDispersion[0] | Controls the degree of separation between hues on the x axis. |
| ToneLateralDispersion[1] | Controls the degree of separation between hues on the y axis (this parameter should really be called ToneVerticalDispersion). |
| Power | Strength of the vignette effect. |
| Range | Rate at which the vignette fades away to 0 opacity. |
| Shape | shape of the vignette, 0 value is a circle, negative values create a more vertical shape, positive values create a more horizontal shape |
| ColorH | Overall color hue. |
| ColorS | Overall color saturation. |
| ColorShift | Overall rgb color tone. |
| ColorV | Color value (relative dynamic range of lightness; similar to contrast). |
| Parameter | Description |
|---|---|
| Enable | 1 = enabled, 0 = disabled |
| GlareNumLevels | Intensity of glare. |
| Glare Luminance | Brightness of glare. |
| Glare Threshold | Brightness level at which glare becomes noticeable. |
| GlareBloom Alpha | Opacity of glare/bloom. |
| GlareBloom GaussianRadiusScale | Scale of bloom's gaussian noise. |
| GlareBloom Saturate Ctrl | Saturation levels of glare/bloom. |
| GlareBloom Smooth | Overall smoothness of edges. |
| GlareBloom FeedbackWeight | How much the bloom feeds into itself, thus creating more bloom. |
##red|(This group has a lot of parameters. Some that are unknown/obvious will be skipped. Hopefully I'll figure out some unks later.)##
| Parameters | Description |
|---|---|
| Enable | |
| VolumeWidth | Controls smoothness of the fog. Higher value = smoother. This can take a big toll on video memory. Mostly apparent around light sources. |
| VolumeDepth | Controls smoothness of the fog. Higher value = smoother. This can take a big toll on video memory. Mostly apparent around light sources. Low depth/width volumetric fog interacting w/ .btl light. |
| GameScale | Affects width/depth. It seems there's a ratio of some kind like (VolumeWidth + VolumeDepth) / (GameScale) = overall fog scale resolution. |
| NearDepth | Volume depth near the camera. Approx within 1 meter. |
| FarDepth | Volume depth far from the camera. 1 meter+. Again, your GPU will catch on fire if you make these values really high. |
| NearOffset | Controls the distance of the near depth parameter from the camera. Higher = farther. |
| FogEndDepth | Controls depth of fog at the outer perimeter. |
| DrawTiming | idk |
| EnableAnalyticalFog | |
| VolumeSliceSampleOffset | |
| CancelInScatteringRateFromSSR | |
| FixedDensity | Thickness of the fog. |
| ScatteringG | |
| LocalLightScale | The scale at which light is diffused and spread as seen through the fog. Very useful for immersive fog. |
| LocalLightDistScale | Same as LocalLightScale but for distant lights. |
| HeightFogDistribution | |
| HeightFogOffset | |
| HeightFogReferenceOffset | |
| HeightFogReferenceModeRate | |
| HeightFogDensityScale | |
| AbsorptionScale | |
| SkyColor | Ambient lighting color reflection. |
| HeightAtten | |
| StartDist | Distance from the camera at which the fog begins. |
| LightBankId | |
| LightId | |
| DirectColor | |
| OppositeColor | |
| HeightAtten | |
| StartDist | Distance from the camera at which the height fog begins. |
| ShadowSampleCount | |
| ShadowDither | |
| AngleClip | |
| EnableReproj | |
| JitterCount | |
| JitterXYSize | |
| FeedbackWeight | |
| InjectingSampleCount | |
| InjectingDither | |
| InjectingReprojEnabled | |
| InjectingFeedbackWeight | |
| SampleCount | |
| Dither |
GParams can be invoked in three ways (that I know of).
The least used method is through events. Events call for GParam overrides to force a gparam in a certain area upon certain conditions (such as a GParam changing during a boss fight).
More commonly, GParams can be invoked by weather changes. The GParam is assigned to weathers through the Weather parameter in the regulation. This method works well but can be tricky to utilize because there are so many weathers and the weather changes quite frequently.
Lastly, you can use collisions on the map to invoke a GParam. Open Map Studio and load a map that you want to edit (underworld maps and legacy dungeons are the easiest to start with due to rarely using weathers). You will be editing a collision that activates the GParam. In order to find the correct collision, the workflow is as follows:
Click on the collision you want to edit and scroll down on the properties to find “Gparam”. You'll see parameter fields such as LightSetID, transition time, and 4 fields for SubIDs. Let's use Leyndell, Ashen Capital as an example (map ID m11_05_00_00). If you take a look at the GParams for this area, they're named “m11_05_0000” and have a sub id that go as high as 900 (m11_05_0900). These SubIDs are how the GParam is assigned to a collision. If we wanted to use GParam m11_05_0800 for a certain collision, we would put the value “8” in the GparamSubID_Base field.
The numbers at the beginning of the GParam name (m11_05 in this example) are how the GParam is “assigned” to a certain map. Feel free to look at various vanilla collisions to see how the GParams are assigned. Keep in mind that overworld areas are much trickier to tune to your liking because there are dozens of weather events changing GParams constantly.