The Dark Souls 3 lighting system is really unique and complicated to mess with, so here it is a tutorial teaching you the basics on how to modify it. First of all, we need to understand the file type used for lighting and where it can be found.
The file type that Fromsoftware uses for lighting is the .gparam files and they can be found inside the following folder path: \PARAM\DRAWPARAM\. Also, gparam files can be unpacked with Yabber, giving you a text xml file where you will be able to do your modifications.

When you first look at this file, it can be really scary, but trust me, its more simple than you think. Try thinking of it as a bunch of sections with values inside of them.

Let's divide it in 3 main categories:



Pos Effects

Let’s start talking about the LIGHT section, what exactly it does? Well, this category will deal with the position of the light’s direction, the color it will use, the strength of that color, the strength of the light’s reflection and the SSAO of it.

<param name1="Directional Light Angle0" name2="Angle" type="Float2">
<value id="0">-1,559945 -0,0713</value>

The bold numbers above are, in order, the Y Axis and the X Axis of the light’s angle.

<param name1="Directional Light DiffColor0" name2="DiffColor" type="Float4">
<value id="0">0,919829 0,757829 0,698302 22</value>

The bold numbers above are, in order, the following:
RED/GREEN/BLUE and ALPHA (The alpha number controls how strong will be the light)

<param name1="Directional Light SpecColor0" name2="SpecColor" type="Float4">
<value id="0">0,770774 0,895567 1 16</value>

The bold numbers above are, in order, the following:
RED/BLUE/GREEN and ALPHA (The alpha number controls how strong will be the light)

<param name1="Directional Light Sharpness0" name2="Sharpness" type="Float">
<value id="0">1,6</value>

<param name1="Directional Light SsaoWeight0" name2="SsaoWeight" type="Float">
<value id="0">1</value>

(Just one more observation, avoid changing the light angle, Fromsoftware usually uses mixed lighting where they have both light that is directed to a location as shadow and light that are already pre rendered on the assets, imagine something like they paint over an asset a shadow or a light, if you rotate the light angle 0, shadows and light won't be in the same direction of the ones that were painted over the assets.)

Now that I have presented the 5 main observations of what controls some characteristics of the LIGHT, I will need you to make a mental effort to understand one point, let's imagine the following:

<param name1="Directional Light DiffColor0" name2="DiffColor" type="Float4">
<value id="0">0,919829 0,757829 0,698302 22</value>
<value id="1">0,141176 0,141176 0,14902 4,001954</value>
<value id="2">1 1 1 1</value>
<value id="3">1 1 1 1</value>
<value id="4">1 1 1 1</value>
<value id="10">1,045 0,86 0,81 2,75</value>

In this part of gparam, we have the colour of some ID lighting:

Value id="0" / Value id="1" / Value id="2" / Value id="3" / Value id="4" / Value id="10"

Sounds confusing but imagine you are editing a piece of mapstudio map, there are two sections of information where you can set these ids

LightSetID [ ]
FogParamID [ ]

When you set a LightSetID for that mappiece using mapstudio, it will use the info stored on that id to light that mappiece. Some maps have dozens of ids, and those ids were hand produced by a Fromsoftware lighting desinger. Usually the light 0 is the general light that the map has, and the other ids are for other peculiarities of the map like grass, very distant objects, among other things.

Now let's imagine the following, each Value ID has 4 lights that can be directed and configured.

<param name1="Directional Light DiffColor0
<param name1="Directional Light DiffColor1
<param name1="Directional Light LocalLight DiffColor1
<param name1="Directional Light LocalLight DiffColor2"

They seems to be pretty much the same thing, but they arent. Take a look at this:

<param name1="Directional »|Light|« Diff »|Color0|«
<param name1="Directional »|Light|« Diff »|Color1|«
<param name1="Directional Light »|LocalLight|« Diff »|Color1|«
<param name1="Directional Light »|LocalLight|« Diff »|Color2|«

Each id has these 4 lights
- |Light| |Color0|
- |Light| |Color1|
- |LocalLight| |Color1|
- |LocalLight| |Color2|

Every light will always have Light color 0 and Light color 1 active and visible, but near the end of this portion of the XML that takes care of the light part you will find

<param name1="Directional Enable LocalLight1" name2="Enable LocalLight1" type="BoolB">
<value id="0">False</value>

<param name1="Directional Enable LocalLight2" name2="Enable LocalLight1" type="BoolB">
<value id="0">False</value>

This part is the section that tells you whether a light has the local light ON or OFF (TRUE and FALSE).

Local Light 1 and Local Light 2 generally illuminate the entire asset, be it chr, obj or mappiece.

Now that we have looked at what controls light, let's take a step back and look at something mentioned earlier how the gparam structure is divided:


FOG <--

Pos Effects

We already went through a superficial explanation of the LIGHT, now the FOG is what will manage a part of the gparam that would be something like a fog that blocks the view and, depending on the settings, it will generate this fog on the map either horizontally or vertically, not to be confused with a ffx (visual effects) like a smoke cloud, or visual effects, this fog is part of the lighting, and not only in a certain place.

It will follow a similar structure to the light part, much of this you will have to test and experience personally.

<param name1="Fog-Color" name2="Color" type="Float4">
<value id="0">0,802986 0,718366 0,67493 0,683</value>

The bold numbers above are, in order, the following:
RED/GREEN/BLUE and ALPHA (The alpha number controls how strong will be the fog)

<param name1="Fog-heightColor" name2="heightColor" type="Float4">
<value id="0">0,802986 0,718366 0,72493 0,423</value>

The bold numbers above are, in order, the following:
RED/GREEN/BLUE and ALPHA (The alpha number controls how strong will be the fog)

You can literally split the map in a half, depending on the way you use the colours and intensity of FOG, you will see that a huge fog with two colours divided as if water and oil were divided into two layers, that's why you have the Fog Color and Height Color, but you can adjust it so that this division goes up or down making it have a single color tone.
Basically changing the Fog-Dist will manage the horizontal distance from the fog to the player. On the other hand, Fog-heightDist will do the same but vertically.

<param name1="Fog-Dist" name2="Dist" type="Float">
<value id="0">22,8</value>

<param name1="Fog-heightDist" name2="heightDist" type="Float">
<value id="0">13</value>

The last two options, Fog-fogAlpha and Fog-fogContrast, will control how full an environment will become with the fog or how visible fog becomes by changing these two options.

<param name1="Fog-fogAlpha" name2="Alpha" type="Float">
<value id="0">1</value>

<param name1="Fog-fogContrast" name2="Contrast" type="Float">
<value id="0">0,54</value>

To end this tutorial, let’s talk a little bit about some PosEffects examples and the last options and sections on the gparam file:


Pos Effects <--

With them you can edit many post effects, some of them as example are:

SSAO Editor – Ambient Occlusion
Bloom[Yebis] - Bloom
LightShaft[Yebis] - God Rays
Dof[Yebis] - Depth of Field
Anti-Alias-Editor – Anti Aliasing
MotionBlur-Editor - Motion Blur

And sadly thats it for this tutorial. I promise I will make another one just for the Post Effects changes so you will be able to understand how they works. Thanks for reading.