1 post / 0 new
ponyrider0's picture
Last seen: 2 weeks 6 days ago
Joined: 07/22/2016 - 05:01
Karma: 1138
[REL] GIMP-FaceGen-Tools Plugin and Tutorial

mediafire link: gimp-facegen-plugin.7z 

source code:  https://github.com/ponyrider0/gimp-facegen-plugin 

updated tutorial will be posted here: https://www.patreon.com/posts/gimp-facegen-and-32662501





Gimp-Python based plugin for rendering, baking and reverse-calculating FaceGen Textures, Age maps, Detail maps.



  • GIMP 2.10 (might work with 2.8)
  • GIMP DDS plugin


Preparation / Installing GIMP and DDS plugin:

  • GIMP 2 can be downloaded here:  https://www.gimp.org/downloads/ 
  • DDS plugin can be downloaded here:  https://code.google.com/archive/p/gimp-dds/downloads 
  • Make sure GIMP and the DDS plugin are either both 32-bit or both 64-bit.   
  • Make sure the plugin is installed into the proper folder.  
  • For example, If you install GIMP into  "C:\Program Files\GIMP 2\", then you should unzip and copy the "dds.exe" file into "C:\Program Files\GIMP 2\lib\gimp\2.0\plug-ins\".


GIMP-FaceGen-Tools Plugin Installation:

Copy the entire facegen-tools folder into the gimp plugins folder.  By default, this is "C:\Program Files\GIMP 2\lib\gimp\2.0\plug-ins" for GIMP 64bit.  Restart GIMP.



Rendering/Baking a FaceGen Texture:

  • 1. Start GIMP, and open a base face texture: from the main menu, select "File->Open..." and then select a base face texture such as "Oblivion\Textures\Data\characters\nuska\darkelf\headdarkelf_f.dds", from the Oblivion Character Overhaul v2 mod.  When asked, uncheck "Load mipmaps" and click OK.
  • 2. Now load an age map: from the main menu, select "File->Open as Layers..." then select an age map such as "Oblivion\Textures\Data\characters\nuska\woodelf\headwoodelff20.dds".  When asked, uncheck "Load mipmaps" and click OK.
  • 3. Make sure the agemap is scaled to the same size as the base face texture.  If it appears smaller, then select "Layer->Scale Layer..." and change the width and height to the size of the base face texture.
  • 4. From the main menu, select "Filters->FaceGen Tools->Render FaceGen Texture...".
  • 5. The plugin dialog pops up: select the proper layer corresponding for the Age Map and Base Texture.  Click OK.
  • 6. Once the progress bar completes, you will have a face texture with all agemaps baked in.  You can now delete the other layers and export as a new DDS file.


Reverse-Calculating an Age Map from a hand-painted/custom FaceGen Texture:

  • 1. Start GIMP, open base texture like step 1 above.
  • 2. Right-Click layer for base texture in the Layers window.  Select "Duplicate Layer".
  • 3. Edit Duplicated layer by painting, image editing, importing images, etc.
  • 4. Merge any created layers into the Duplicated layer (custom FaceGen Texture).
  • 5. Select "Filters->FaceGen Tools->Calculate Age Map...".
  • 6. Select proper layer corresponding to custom FaceGen Texture and Base Texture. Click OK.
  • 7. Once the progress bar completes, copy/paste newly created age map to new file and export as new DDS file.


Installing a custom Age Map:

1. Determine the proper folder which contains the face textures and age maps for the desired race:

For Vanilla Oblivion, all races except for Orc, DarkElf, Khajiit and Argonian share the same face textures:

  • Imperial:  "Oblivion\Data\Textures\Characters\Imperial\"
  • Redguard:  "Oblivion\Data\Textures\Characters\Imperial\" 
  • HighElf:  "Oblivion\Data\Textures\Characters\Imperial\" 
  • WoodElf:  "Oblivion\Data\Textures\Characters\Imperial\" 
  • Breton:  "Oblivion\Data\Textures\Characters\Imperial\" 
  • Nord:  "Oblivion\Data\Textures\Characters\Imperial\" 
  • Orc:  "Oblivion\Data\Textures\Characters\Orc\"
  • DarkElf:  "Oblivion\Data\Textures\Characters\DarkElf\"
  • Khajiit:  "Oblivion\Data\Textures\Characters\Khajiit\"
  • Argonian:  "Oblivion\Data\Textures\Characters\Argonian\"

For OCO2, only Imperials and Bretons share the same face textures:

  • Imperial:  "Oblivion\Data\Textures\Characters\Imperial\" 
  • Breton:  "Oblivion\Data\Textures\Characters\Imperial\"
  • Redguard:  "Oblivion\Data\Textures\Characters\Nuska\Redgaurd\"
  • Orc:  "Oblivion\Data\Textures\Characters\Nuska\Orc\"
  • DarkElf:  "Oblivion\Data\Textures\Characters\Nuska\DarkElf\"
  • HighElf:  "Oblivion\Data\Textures\Characters\Nuska\HighElf\"
  • Khajiit:  "Oblivion\Data\Textures\Characters\Nuska\Khajiit\"
  • WoodElf:  "Oblivion\Data\Textures\Characters\Nuska\WoodElf\"
  • Nord:  "Oblivion\Data\Textures\Characters\Nuska\Nord\" 
  • Argonian:  "Oblivion\Data\Textures\Characters\Nuska\Argonian\" 

2. Copy the custom agemap into the proper race facegen texture folder, and then rename with desired age:

  • For Imperials, agemaps are named "headhumanfXX.dds" and "headhumanmXX.dds", where the last "f" or "m" characters denote female or male sex, and the "XX" is a two-digit number representing the age.
  • For any race which shares the Imperial facegen texture folder, they will share the same agemaps as well.
  • OCO2 Redguards and Nords use the same agemap filenames as imperials even though the files are in different folders, i.e. "headhumanfXX.dds" and "headhumanmXX.dds". 
  • For Orcs, agemaps are named "headorcfXX.dds" and "headorcmXX.dds".
  • For DarkElves, agemaps are named "headdarkelffXX.dds" and "headdarkelfmXX.dds".
  • For Khajiit, agemaps are named "headkhajiitfXX.dds" and "headkhajiitmXX.dds".
  • For Argonians, agemaps are named "headargonianfXX.dds" and "headargonianmXX.dds".
  • For OCO2 HighElves, agemaps are named "headhighelffXX.dds" and "headhighelfmXX.dds".
  • For OCO2 WoodElves, agemaps are named "headwoodelffXX.dds" and "headwoodelfmXX.dds".

HINT:  Agemaps which are multiples of 10, seem to replace all missing agemaps for that given decade unless a specific agenumber exists.  For example, the agemap for age 10 fills in for all ages from 10-19.  If an agemap for 14 exists, then the game will show the age 10 map for ages 10-13, then the 14 specific map, then the age 10 map again for age 15-19.

3. In-game faces using the custom agemaps may look smooth unless a corresponding normal map is also created and named "<agemap_filename>_n.dds", example: "headhumanf10_n.dds".  I think the agemap-normalmaps might only replace the base normal map and are not composited via multiplication like the texture map.

Edited by: ponyrider0 on 12/29/2019 - 13:30