Forza Horizon 3 Models Extracting Tutorial [BETA!]
Firstly, all thanks goes to shakotay2 (Make_H2O-ForzaHorizon) and Andrakann (textures)!
Download neccessary software
- Make_H2O_ForzaHorizon by shakotay2
- Any car model from Forza Horizon 3
EXTRACTING
- Extract archive Make_H2O_ForzaHorizon to any folder
- Extract model from Forza Horizon 3 to any folder
- Copy dir_modelbin.cmd from Make_H2O_ForzaHorizon folder to folder scene in folder with model
- Run dir_modelbin.cmd
- Now you see new file called modelbins.txt
MODELBINS
- Open modelbins.txt
- [!] Author recommended to cut all paths with SLOD to separate file (for example, modelname_SLOD_modelbins.txt)...
- And to use separate *modelbins.txt files for the subfolders (exterior, interior, etc)
Make_H2O_ForHor
- Open Make_H2O-ForzaHor_f.exe
- Click File - Open
- Find your modelbins.txt file and open it
- Close the application
IMPORTING
- Go to Make_H2O-ForzaHor folder
- Find MakeH2O_log.txt file
- Change extension from .txt to .obj
- Import file to 3D Editor
KNOWN ISSUES
By shakotay2:
- lods must be dragged manually
- correct position of some parts unsolved
- some uv maps wrong (or multitextured?)
- most UVB28 missing/wrong/too small
- wheel has to be duplicated and scaled/positioned manually
- hood_a.modelbin scale not found so far
- doorHandleLF_a must be placed manually
- high-LOD of that door has multi-texture?
Tutorial by Andrakann
You'll need some tools:
- Hex Editor
- DDS Converter
- Double Commander (free analog of Total Commander)
- DX10_DDS_Headers
Step 1 Making of texture data chunk from swatchbin file:
Open swatchbin in hex editor and read important data in header before cutting it out:
You'll need to know widht, height and compression type for making new DX10 DDS header, remember them, then select and delete header bytes up to "data start" position:
Table of compression types:
- 00h = BC1 (47h in DX10 DDS header)
- 03h = BC4 (50h in DX10 DDS header)
- 05h = BC5 (53h in DX10 DDS header)
- 09h = BC7 (62h in DX10 DDS header)
- 0Dh = R8G8B8A8 (1Ch in DX10 DDS header)
- 13h = A8 (41h in DX10 DDS header)
After you deleted header part, you need to "save as" edited file, I put memorized values as file extension for chunk, leaving name as is:
Some tips for newbies:
You can see decimal numbers for widht/height right inside hex editor, just select two bytes and look in status bar:
"Data start" position reads backward, by bytes, so 04 01 00 00 reads as 00 00 01 04 - this is first byte position adress, displayed as Pos: 104h (260) in status bar if you put marker on them:
Zeroes is skipped and (260) is decimal number of byte.
Step 2 Making of DX10 DDS texture with correct parameters:
So, we need a donor texture with 1024x512 dimensions and BC7 compression, let's make one
Take any pic and resize it to 1024x512 in your favourite editor, save as 1024x512.png, then open in DDS Converter and set desired compression type:
Click "Convert" button, wait a little then click "Save as" button (it's becomes active after conversion is complete).
Name saving file as 1024x512xBC7.dds
Note: Some formats is missing in compression settings, BC4 for example, for this case I put those codes for DDS Headers in table of compression types above.
To make BC4 header out of BC7 one, you need to change one byte at Pos: 80h (128) from 62h to 50h and save result with new name:
Step 3 Detaching header from generated DX10 DDS:
Open 1024x512xBC7.dds in hex editor, put marker in 94h position, press Ctrl+Shift+End to select all bytes to the end of file from selected position, delete:
Save result as 1024x512xBC7_header_only.dds:
Note: You can cut headers from already converted textures, or use the ones I have created so far (attached).
Step 4 Merging DX10 DDS header with swatchbin chunk:
Easiest way to do it is use of Total or Double Commander.
You need to copy header and chunk to same place and with same name, for example "1.dds", then select "Append" instead of default "Overwrite":
Checking result:
Works
Of course it's better to use original names instead of "1.dds" in example, also you can make copies of header for all swatchbins with same dimensions, easiest way to find them is sorting by size:
So, we have 27 files in sum with same size and, probably, same dimensions, time to make chunks (and check dimensions for sureness), this time saving with only "s" in extension for speed up process.
And our winner is!.. for_gauges_001_glos_7947570d-f283-4420-97b5-99398bf36ff4.swatchbin because it have a sligtly smaller size and it's a reason to tune file sizes appearance in Commander:
Have skipped one file for now and the result is:
Lots of "s" chunk files
Now we need a copies of DDS header, select one we have, press Ctrl+C, then Ctrl+V 25 times
Next step is renaming copies of DDS headers by copying swatchbin (or chunk) names and pasting to DDS header names:
(lots of moving selector to file, F2, Ctrl+Insert, move to another file, F2, Shift+Insert and repeat )
Now we append chunk files to dds files, we only need to delete file extension in copy dialogue window and .dds will pop up as suggested name:
- vlad2012, stall, XFX_GANS_666 и 49 другим это нравится