Some workflows and information on texture creation for Overhaul.
The mainstay of content for the Overhaul to begin with will be using upscaled 4x textures with PBR additions.
Starting Tutorial: Using ShaderMap 4 (SM4) to Make Simple PBR Textures
If a creature is quite "dry" and "normal" we can just do a normal map. This adds some shadowing on the model where bumps are in the texture.
Using ShaderMap 4 we just simply add the image we want to create normals from, which will generate a basic normal map - to have it to NWN standards change the green channel to be Y+
(shamelessly from the tutorial above) Select the normal map then click the axis icon in the bottom left panel.
Next, click the box at the top of the green axis.
Click the checkbox to accept the changes.
These maps provide a shine to the object.
However it's not as simple as "just export stuff from ShaderMap 4" or any other tool, since:
Specular maps:
Roughness maps:
Some experimentation is required here and for different types.
Using shader variables
This might be easier than having a ton of DDS files which essentially are one uniform colour. Saves a lot of disk space and file mess too.
Example MTR c_ettercap.mtr:
customshadervs vslit_nm customshaderfs fslit_nm renderhint NormalTangents // Textures texture0 c_ettercap_d texture1 c_ettercap_n parameter float Specularity 0.02 parameter float Roughness 0.1 |
Example code to change the values for testing - debug console - select the ettercap and apply.
float fSpecularity = 0.02;
float fRoughness = 0.05;
SetMaterialShaderUniformVec4(OBJECT_SELF, "c_ettercap", "Specularity", fSpecularity);
SetMaterialShaderUniformVec4(OBJECT_SELF, "c_ettercap", "Roughness", fRoughness); |
Example values see here: Enhanced Lighting Engine and PBR
However having something that is "wet but solid" instead of water needs some testing. It sometimes also benefits from the diffuse file (main colours) being altered to remove shadows or lighten them up.
Some examples:
| Specular | Roughness | Picture | Description |
|---|---|---|---|
| 0.3 | 0.05 |
| Generally a bit "wet" but not quite good enough |
| 1.0 | 0.00001 |
| A metallic mess (note setting Roughness to 0.0 seems to recalculate it as if it wasn't set) |
There's a Metallicness value set in the shader too. We'll look at that another time...the shader defines it in inc_material.shd and seems to be auto generated anyway:
uniform lowp float Specularity; uniform lowp float Roughness; uniform lowp float Metallicness; Default definition: fMetallicness = clamp(fMetallicnessModifier * fSpecularity - fMetallicnessMod, 0.0, 1.0); |
Code to test:
float fSpecularity = 0.02;
float fRoughness = 0.05;
float fMetallicness = 0.05;
SetMaterialShaderUniformVec4(OBJECT_SELF, "c_ettercap", "Specularity", fSpecularity);
SetMaterialShaderUniformVec4(OBJECT_SELF, "c_ettercap", "Roughness", fRoughness);
SetMaterialShaderUniformVec4(OBJECT_SELF, "c_ettercap", "Metallicness", fMetallicness); |
These provide some colourisation information to the model where things are reflected. The default games version without PBR's is a bit lackluster.
The "default" option uses the texture file "chrome1"

This applies - as it looks like - a bit of a silvery-shine.
Needs further testing on how we replace this default or, well, how it works overall. Some aspects of implementation: