Horizon Zero Dawn

Skeletons, animations, shaders, texturing, converting, fixing and anything else related to read game models
id-daemon
Posts: 1040
Joined: Sun Mar 22, 2015 7:09 pm

Horizon Zero Dawn

Post by id-daemon »

Image

Image

Image

Extracting resources:
===============================================================
0. you need oo2core_5_win64.dll in the same folder with the tool
Its in almost any big game now, easy to find. Probably other versions will work too, if you rename them

1. you need to place the tool in your unpacked horizon folder, or better, i recommend using included ini file (just change your folder). If you use this INI - you can use the tool from any folder
Note: remove PATCH.BIN and unneeded LANGUAGE .BINs from the folder, or the tool will crash

2. first thing you need to extract is resource list.
To do this, just run the tool. It will create a text file list. I recommend sorting this list so you can make better selections of what you want to extract. I sort it in excel. It also allows to make filters in it

3. if you want to extract some resource, run
horizon /e resourcename

4. for batch extract, create a text file with a list of what you want to extract, and run
horizon /x list.txt

5. horizon /p list.txt - same as /x, but dump files with directory structure
===============================================================


Convertion:

===============================================================
Now after you extract some res, converting is simple.
Just drag resource of the EXE and it will:
- extract model if res has models
- extract textures if it has textures
- extract skeletons if it has skeletons


Extracting characters with skeleton:
===============================================================
1. place all parts of a character in one folder, and run horizon on all of them
2. a file called "matrices" will be created and UPDATED in the process with all the bone matrices present in all parts
3. put corresponding skeleton file to the same folder and run horizon on it
4. copy-paste skeleton into model parts so they will be complete working models
===============================================
important warning! if you plan to export another model after that, DELETE that "matrices" file before doing it, or this will lead to a complete mess!


Extracting robots
===============================================================
This is most complicated thing. Unlike characters, they have destructible parts, and these parts are connected to animation skeleton. This means, to get model fully working, 4 sources are required:

- matrices from mesh parts (same as characters)
- mesh skeleton (same as characters)
- animation skeleton (ragdoll)
- robot helper bones

you need to place all these files in the same folder:

1. mesh parts usually contained in /animation/parts/ folder
2. half of robots have 2 skeleton files: mesh_skeleton_rootbone & skeleton_rootbone
you need mesh_skeleton_rootbone
3. ragdoll is in robot template file from entities/characters/robots/templates/archetypes/ folder
4. each robot has a file called robot_modelhelpers - this one contains helper bones info

Once you have all these, you can start with convertion

step 1:
Run horizon on all parts files. This will create matrices as it was before

step 2:
Run horizon on template file. This will extract animation skeleton from it.
(you dont need ascii and smd files generated, delete them. They are only useful if you want to experiment with animation only)
So you have .animskel file now in the same folder.

step 3: run this:
horizon [mesh_skeleton] [animskel] > a.bat
this will create FULL horse skeleton both in SMD & ASCII and also A.BAT file

-------------------------
At this time you have info which robot parts are destructibles, and which are normal weighted meshes. You need to treat them differently from now on. Destructibles will be static meshes, and they are all listed in A.BAT file. All others are normal weighted meshes.
You can already use normal weighted meshes as before, but for destructibles you need to perform additional step 4.
-------------------------

step 4:
Open A.BAT file, and replace all "_helper" strings with ".core". This probably could be done automatically on export, but the thing is, I'm not sure all helper bones will always be called the same as helper MESHES. So I'm leaving this to the users at least for now.
Run this .BAT file.

-------------------------
Now after running this file, if there were no errors, you will have all destructible parts property placed and weighted to correct bones.
Note: sometimes there will be destructible parts missing. This means helper bones were created for them, but later the devs decided not to have them in game.
-------------------------

to load all destructible parts as one file:
========================================================
Merge all ASCII files into one as text file, then copypaste skeleton into it.
Then count submeshes (it will correspond to number of "material" string)
and put a number of submeshes after the skeleton (before all the actual data).
This number will correspond to number of "material" string in all files.
Same for SMD files, just no need to count submeshes.
Last edited by id-daemon on Sat Mar 31, 2018 4:57 pm, edited 1 time in total.
id-daemon
Posts: 1040
Joined: Sun Mar 22, 2015 7:09 pm

Re: Horizon Zero Dawn

Post by id-daemon »

You must be able to extract characters, animals, weapons and robots fully weighted and working.
Image

Animation tool is still in progress: (NSFW) https://www.youtube.com/watch?v=m5nh9q1LPcs
As you can see, not all of them are working correctly now.
id-daemon
Posts: 1040
Joined: Sun Mar 22, 2015 7:09 pm

Re: Horizon Zero Dawn

Post by id-daemon »

Updated tool with animation support and support for all textures export.

To extract animations:

1. Extract animation manager (with /e command)

animation managers can be found in models/animation_managers/characters/

2. Extract skeleton. You can use animation skeleton or mesh skeleton

read how to get mesh skeletons in the first post

animation skeletons are in template files:
- for robots its in entities/characters/robots/templates/archetypes/
- for animals - in entities/animals/
- for humans - entities/characters/components/humanoidragdollcomponents
(humanoidragdollcomponents has 2 skeletons with same name for male, female & child)

3. Extract animations from animation manager

drop animation manager onto the tool, this will extract all animations into "anim" folder
animation file names will be hashes

4. Convert animations. There are 2 options:

a) Horizon [animation] [animskel]

This will extract animation with skeleton in rest pose and make proper SMD file.

b) Horizon [animation] or just drop animation (.morpheme) file onto the tool

This will extract only animation. This option will allow you to merge all animations into one file. To make proper SMD, you'll have to copypaste the skeleton from animation skeleton SMD or mesh skeleton SMD to the beginning of the animation SMD file.

======================================
Notes:

- most ingame animations are morpheme, and can be extracted with this tool
- some ingame animations and all cutscenes are in decima engine anim format, and can't be converted
- some animations are additive, they cannot be extracted properly
Last edited by id-daemon on Tue Apr 23, 2019 4:58 pm, edited 1 time in total.
id-daemon
Posts: 1040
Joined: Sun Mar 22, 2015 7:09 pm

Re: Horizon Zero Dawn

Post by id-daemon »

New tool version with improved animations support.

There are some important changes, so i decided to post this new version separately. After testing some robots, we found that most robot animation packages include about a half robot anims, and the other half is animations of a human interacting with that robot (riding, attacks etc). These required special treatment. The process remains the same, except extracting animation manager (step 3 in previous post).

When extracting animation manager, tool will now make 2 text files:

1. _anims_by_name.txt - this is list of all animation system elements with original names. They include parameters, groups, switches, all kind of data used in animation engine. Some of them will have links to actual animations, sometimes several. This is an example:

Image

2. _anims_by_id.txt - reference list of all animation files with names used in previous list. If you sort that list, you can see where each file is used. Or use it to make batch-rename of the files to the names you want.

Tool will also create a number of "bone_setup" files which are needed to correctly convert animations to SMD. Some animations will work without them (like it was before), but many will require them to be in the same folder.

Animation files will be named with internal numbers instead of hashes. Each file will have sequential number (used in text lists described above) and bone setup number. For example in horse animation package there will be 180 animations ending with "5" which are horse animations, and 130 ones ending with "8" which are animations of aloy riding the horse. You can use this to sort the files so you can convert using correct skeleton.