Skip to content

02 ‐ Final Fantasy VII Remake Guide

Crescent Edge edited this page Jun 22, 2026 · 7 revisions

Final Fantasy VII Remake

Method Comparison Image

NormalSmithingComparison

Comparison Description

This image compares methods of baking lighting texture maps for Tifa's Hair mesh in FFVII Remake.

I compare two approaches: a more detailed method using Normal Smithing and the “fake” bent normal technique using Blender (by Wolfenstein on the OpenFFVIIR Discord).

Normal Smithing uses ray-casting to generate bent normals by capturing how light interacts with the hair by averaging unobstructed light directions, leading to realistic self-occlusion and dynamic shading that shows fine details and natural shadows which can be seen in the video.

In contrast, using the Blender (Fake Bent Normal) approach simply assigns a uniform light direction per face, resulting in flatter shading without the nuanced shadowing that comes from nearby occluding geometry. This can be seen in several scenes where the hair in the Blender approach shows a flat black vs the better shading of the base game and Normal Smithing.


The rest of this page documents the settings I've used to generate Bent Normal and Occlusion maps for Final Fantasy VII Remake.

Settings Overview

The settings below are for a final detailed render that takes roughly 10 minutes on a Ryzen 7950x3D.

Left-Hand-Side Right-Hand-Side

Output Settings

  • Texture Width: 2048
  • Texture Height: 2048
  • UV Padding: 0
  • Supersample Factor: 2x

UV Mapping Options

  • Bent Normal/Occlusion Map: UV 1
  • Alpha Map UV: UV 0

Map Generation Options

Map Types

  • Generate Bent Normal Map: Yes
  • Generate Occlusion Map: Yes

Sampling Options

  • Use Tangent Space: Yes
  • Use Cosine Distribution: Yes
  • Process Back-facing Triangles: No
  • Lerp Occlusion From Threshold: Yes

Swizzle Options

  • Invert X: No
  • Invert Y: Yes
  • Invert Z: No

Baking Options

  • Ray Sample Count: 64
  • Max Ray Distance: 1000
  • Ray Origin Bias: 0
  • AA Sub-Samples: 2x
  • Occlusion Threshold: 0.428

Important Note: To get both sides of the hair mesh to appear in blender, you need to duplicate the hair mesh and the go edit->Normals->Flip. I don't join these meshes together again afterwards as this would double the amount of UVs needing to be calculated. You can leave them as seperate meshes and import into FFVIIR and everything works fine as you can see in my Tifa Shorter Hair mod.

Detailed Instructions

Input Files

How to Export the FBX Model from Blender

Import Settings

In Blender 3.6, import the model using the Blender Uasset Addon and ensure "Keep Sections" is ticked and "Scale" is set to Centimetres.

It is important to use "Keep Sections" as this will allow us to choose a mesh within Normal Smithing's settings.

If you've extracted all of the Uassets, including textures, you can check "Load Textures".

This will help you later if you have an Alpha Texture you want to use.

Export Settings

Go to File -> Export -> FBX.

  • Under "Geometry", ensure that "Tangent Space" is NOT ticked.
  • Under "Armature", uncheck "Add Leaf Bones".
  • Uncheck "Bake Animation".

Alpha Texture

If the mesh you are trying to calculate Bent Normals or Occlusion maps for has an Alpha Texture, be sure to export this from Blender or extract it from the source Uasset.

You can use UE4-DDS-Tools to extract the alpha texture from the Uasset manually.

Or if you imported the textures into Blender:

  • Go to "Texture Paint" on the top tabs.
  • On the left-hand side at the top, click on the Image Dropdown.
  • Select the correct alpha texture.
  • Next to the Image Dropdown in the "Image" dropdown menu, click on that, then save the image as a PNG.

Load Model

Use the "Load Model" button to import the exported model from Blender.

Mesh Selection

Displays a dropdown list of all meshes available in the loaded model.

Selects the mesh that will be used for map baking.

Load Alpha Texture

If the mesh requires an Alpha Image, open the file dialog and select the alpha texture image we exported earlier.

The alpha texture, if provided, is used during occlusion testing to simulate transparency.

Important Note: When preparing your alpha texture for occlusion testing, ensure that it is formatted correctly. The application supports two approaches:

  • RGBA Format: The texture should include an explicit alpha channel where transparency is determined by the alpha values.
  • RGB Format (using Greyscale): If the texture lacks a dedicated alpha channel, use a greyscale image where the luminance (from Black to White) represents transparency—darker areas will be treated as more transparent, while lighter areas will be considered opaque. This distinction is crucial because the alpha texture is sampled during the baking process to determine occlusion. An improperly formatted texture may lead to inaccurate occlusion results. The application uses different methods to read the pixel data depending on the file type (for example, PNG images retain their original format using a WPF decoder), so ensuring your texture meets one of these standards will help avoid unexpected behavior during the bake.

FFVII Remake uses the RGB Greyscale format for its Alpha textures.


Output Settings

Texture Width / Texture Height

The standard for the game is 1024x1024. For meshes with small UV islands (or if you are encountering black triangles on the mesh in game) try a higher resolution, as there will be more Bent Normal/Occlusion pixels per UV island. For my Tifa Shorter Hair mod i used 2048x2048 for the Bent Normal and Occlusion Map textures.

UV Padding

I used 0 and relied on the average normal background color to refine the edges.

Supersample Factor

I used 2x at a texture resolution of 2048x2048, so internally it will be calculating at 4096x4096 before downscaling at the end. This is to drastically reduce the image noise seen at lower resolution. Increasing this will always produce a higher quality results at the expense and time and processing power.


UV Mapping Options

Bent Normal/Occlusion Map UV

The standard "Bent Normal/Occlusion Map" UV for FFVIIR is UV 1.

Alpha Map UV

The standard "Alpha Map" UV for FFVIIR is UV 0.


Map Generation Options

Generate Bent Normal Map

Check one or both depending on what you want to generate.


Sampling Options

Use Tangent Space

  • On:
    Transforms computed bent normals from world space into the surface’s local tangent space.
    • This is what the game is expecting for the Bent Normal Map.

Use Cosine Distribution

  • On:
    Generates sample directions using a cosine-weighted distribution.
    • This is what the game is expecting for the Bent Normal Map.

Process Back-Facing Triangles

  • Off:
    Usually unnecessary for the current game assets, may be necessary for custom meshes. You can check in blender if your mesh as back-facing triangles (flipped normals) by using the Face Orientation option under the show overlays button at the top right corner of the viewport.

Lerp Occlusion From Threshold

  • On:
    For hair in particular, if you want higher contrast in the occluded areas but still smooth the transitions between light and dark, leave this on.
  • Off:
    From my testing, this is the closest to the default look in the game.


Swizzle Options

Invert X, Invert Y, Invert Z

  • The game expects Y to be inverted, so Y should be ticked.

Baking Options

These can be set to whatever you like.

Ray Sample Count

I start at 64; you can go higher for a higher quality output but that might be unnecessary for this use.
In the comparison video I used 64.

Max Ray Distance

I've left this at 1000, given the size of the mesh it probably doesn't need to be that big.

Ray Origin Bias

Set this to 0 so that the app automatically calculate this from the geometry.

AA Sub-Samples

Setting this to 2 means that for each pixel, 2 sub–samples are computed and then averaged, leading to a smoother transition across edges. Increasing the AA sub-sample count can significantly improve image quality by reducing noise and aliasing, though it will also increase processing time.

Occlusion Threshold

By default, the Occlusion Maps from the game appear to have a hard limit at 0.428.

Time To Bake

On my PC (Ryzen 7950x3D, 64Gb RAM) this took around 10 minutes to bake out giving really high quality detailed maps ready to use in game. When testing your mods i would recommend reducing the settings to do more rapid iterations before using this high settings for the final render.