Jump to content

[WIP]New head in blender


Alecu

Recommended Posts

tbh, I would have made the ears part of the head mesh itself. saves painting across extra maps, and less nifs to faff with in the end, hmm, would that make the morphs larger?

 

4k tris on the ears is getting over the top there, that would make a pair of ears more poly heavy than your face!

 

the f3 ears are like 20-30tris, it's all normal mapped.

 

saying that it looks good.

 

Making the ears part of the head mesh is a big mistake. Firstly,you will have to make separate heads for every type of ear and make separate morphs for each head which is already a huge tasks.

And for modders it will be a nightmare. Maybe they want to add some custom ears with some earrings? Secondly,you will use precious texture space on the ears and no matter how you look at them,you will have to make additional cuts to unwrap the mesh and the cuts will literally split the mesh once you export it in the nif format which will result in even more complications.

 

About the normal maps,yes,f3 ears have low poly but from what I have seen,f3 handles normal maps a lot better than oblivion. And the default oblivion ears have about 800 polygons. The ears hat I made are far from perfect but they are my first ears ever. There are still a lot of useless polygons in them. But it shouldn't slow down your game,0.5 fps at most if even any.

 

Also,I believe that the complex additional geometry data that head meshes have means that they will slow down the game more than normal meshes. Adding detailed eye lids,brows will increase the polygon count a lot.And what about variation? Adding brows for example will pretty much hard code them in the mesh and if you want different brows you will have to seriously remodel the head which will break the uv layout in the forehead area. The developers even separated the eye morphs from the rest of the morphs and included only the minimum amount of vertices in them probably for good reason.

 

Even so, I think the game engine handles heads differently with better shadows which result in even more trouble. I can remove the subsurf add save some polygons but that will mean that the head won't looks so smooth and ripples will appear on the head in certain conditions. The mesh isn't optimal,but it's the first one ever and it just works. I'd rather prefer a version system rather than try and make everything perfect from the start. There are much more bigger issues still left and I am running short on time.

 

The priority is making it work as it is. Maybe some minor adjustments but nothing more.I'm still a beginner at this and I was extremely lucky just getting so far. Trying to get everything perfect from the first try can be a mistake. Usually the enthusiasm dies halfway and it will result in even worst performance in the remaining half of the process. Or everything gets abandoned altogether which is the worst option.

 

Looking good and having a good topology aren't the only things. What about expressions? Those are important too,and currently the mouth expressions are all broken. And if you radically change the face topology from the default one,which I pretty much did but not that much,you will have to make some serious adjustments in the egm files. And that's quite complicated. And I still have to do that. Some parts of the egm are quite distorted after creating the egm with the conformulator so you will have to import them in blender and adjust them. And I'm too sure if it will correctly export them. I don't even know if the the egm import/export was made for oblivion. Or if there are variations in the egm files. There are a lot of games that use the gamebrio engine. Maybe some of them use the egm files too but a little bit different from oblivion and the egm importer/exporter was made for those games and not oblivion?

 

Also,there are the egt files that store around 50 textures used for age and for the complexion. And those have to be adjusted too.

 

Everything has to the calculated if it is to end well. I'll keep working when I have good ideas and post once I made some decent progress.

 

I intended this to be a a bit of guide and provide some hints and inspiration, helping people not make the mistakes I did.

Link to comment
Share on other sites

Something else that might interest you in future projects: Re-topologize a game-ready head...which deals with creating a high-poly model first (which can be used to create normal and displacement maps) and then create a low-poly / game-ready model afterwords.
Link to comment
Share on other sites

Looking really nice there! You mention that some of the screenshots are already out of date; but some of the loops in the cheeks are very visible in your game shots in the shading. Be careful when cleaning and smoothing up the .egm morphs, I know my initial results from conformulator were very spiky in many areas. I recently-ish was told that Head06 still has some accuracy issues when adjusting the cheeks, i think. I know I had to redo them a bunch of times during its production, trying to keep one morph from going 'too far' smoothed, throwing off the delicate balance between the other morphs.

 

Regarding the ears, I would also suggest making a lower poly version for the game model, 2k at the most. You don't need to worry about loops on them, only the outer silhouette. Don't forget that FaceGen meshes take up a lot more room than a regular mesh. Each vertex can take up to nearly 700 bytes, with calculations for each vert from upwards of 100 sources between the nif, egm and tri. It does do this very quickly, and Oblivion can handle a higher polycount, just remember that not everyone has a great computer.

 

 

I still can't find that tutorial on prepping a head for Oblivion/FaceGen. Do you still have the issue with the 'head too high' in the CS?

 

Edit: Forgot to mention a mesh cleanup trick I picked up. You can smooth out small irregularities in a model by adding a smooth/level 1 subdiv, then deleting all the newly created edges. It's handy for complex and dense meshes like in a face where a smooth brush application might be a little too much. Depending on the method, you might need to keep an eye on the border vertices.

Link to comment
Share on other sites

More updates.

 

After randomly browsing the head's nif file at 5am in the morning and comparing with a proper head's nif I noticed a weird fact. Though in both files the head appears at the same position int the 3d view,in my head's nif, the object itself is at the feet but the mesh inside the object is at shoulder level while a proper head should have the object at shoulder level at precise coordinated, x = 0, y = -0.119, z = 11.244 or 10 times more depending on the scale. In nifskope this would mean that the the trishape should have a translation of x = 0, y = -1.1870,z = 112.44. I know,the coordinates aren't 100% exact but it works fine and I'm too tired to find a fix.

 

This is how it should appear in nifskope:

 

nifskope

 

Notice the translation in the details view of the head mesh.

 

The main bug is that somehow when importing/exporting a head mesh in blender,the object gets somehow modified and gets moved to 0,0,0 and that's how the head gets screwed. The engine expects the head object/trishape to be positioned at shoulder level,and the mesh inside the object to be positioned to fit the neck. The eye morphs are probably calculated relative to the meshes position in the object, so if the mesh is located at shoulder level and the object down at the feet,when the games apply the eyes morphs,it extends the eye lids relative to the objects position and since the mesh is much higher than the default position,the eye lids get stretched. This is probably what happens.

 

And somehow when importing or exporting the object gets distorted and the positions get altered. I've noticed that some meshes work,while others don't. I don't know if this is a bug or a misused feature or something else.

 

But now the head appears at the bottom in the construction set but the thing is that it looks completely different from the in-game head so I'm afraid that this might be a bug. This is quite some issue because it seriously affects the process of making new races. Maybe this happens all the time.

 

Here's the test race in-game:

 

race in-game

 

And the race in the constructions set:

 

race cs

 

I tried to adapt the moonshadow elves texture to the new head but since my texturing ability almost equals 0 I did a very poor job.

 

Notice how the lips looks completely different.Also the chin and jaw kinda looks ugly from some angles. Still need to do some minor tweaking and that will be the last change that I will make. The next step will be to properly make the head fit with the upper body part at the neck and I will start to fix the expressions and maybe make some new ones.

 

Looking really nice there! You mention that some of the screenshots are already out of date; but some of the loops in the cheeks are very visible in your game shots in the shading. Be careful when cleaning and smoothing up the .egm morphs, I know my initial results from conformulator were very spiky in many areas. I recently-ish was told that Head06 still has some accuracy issues when adjusting the cheeks, i think. I know I had to redo them a bunch of times during its production, trying to keep one morph from going 'too far' smoothed, throwing off the delicate balance between the other morphs.

 

Regarding the ears, I would also suggest making a lower poly version for the game model, 2k at the most. You don't need to worry about loops on them, only the outer silhouette. Don't forget that FaceGen meshes take up a lot more room than a regular mesh. Each vertex can take up to nearly 700 bytes, with calculations for each vert from upwards of 100 sources between the nif, egm and tri. It does do this very quickly, and Oblivion can handle a higher polycount, just remember that not everyone has a great computer.

 

 

I still can't find that tutorial on prepping a head for Oblivion/FaceGen. Do you still have the issue with the 'head too high' in the CS?

 

Edit: Forgot to mention a mesh cleanup trick I picked up. You can smooth out small irregularities in a model by adding a smooth/level 1 subdiv, then deleting all the newly created edges. It's handy for complex and dense meshes like in a face where a smooth brush application might be a little too much. Depending on the method, you might need to keep an eye on the border vertices.

 

You mentioned that in some cases you can see the cheek's rings so to solve that I applied a smooth modifier to the head. By creating a new vertex group and painting the head with weights only on the desired areas I could precisely smooth the head where I wanted to. And you can use modifiers+vertex groups+weight paint in many more ways. If I used the smooth modifier on the entire head it would have ruined the topology in some areas. I've tested the head quite some time after this and I didn't see any rings in the cheeks. I couldn't do the way the way it was mentioned in the post because I couldn't figure how to remove the newly created edges in blender.

 

This is how I painted the cheeks

 

cheeks

 

And you can see that I inserted some vertex groups in the smooth modifier's vertex group box. And for symmetrical painting around the x axis,check the X-mirror modifier. I sometimes forgot to do this and I had to start all over again so it wasn't fun.

 

Now on with the story. The fact that the head appeared properly in the construction set meant that I had a decent chance of getting the eye morphs to work. So I had to make separate versions with the eyes closed. But I had to apply the mirror modifier and subdivide to properly export the head. And for the eyes you had to make separate blink morphs for each eye. Yet another reason to work on the meshes with the modifiers applied. I was careful to work on only one head mesh,the default one,the one with the blink left eye and the blink right eye, are all the same mesh with all the modifiers applied beforehand with some minor modifications because I wasn't entirely if the vertex indexes wouldn't have changed if I used some other means.

 

The problem that aroused was the fact that I wanted symmetrical blink morphs. But how can you symmetrically change the mesh?. I don't want both eyes to blink but I want each one of them to blink individually and be symmetrical on the x axis,left and right blink had to look the same, which meant that the blink left and right meshes that I used for the morphs had to be mirrored but without directly mirroring the mesh which would have screwed the vertex indexes big time.

 

My idea was to use modifiers+vertex groups+weight painting again. I could symmetrically paint the head on the x axis using the X-mirror option and the lattice could be mirrored on it's local x axis and by changing it's x coordinate from - to +,just changing the sign, it would have made it perfectly mirrored around the global x axis. This means that the blink left would look identical to the blink right morph and I only had to make one eye blink because the other one would be made just by mirroring the lattice.

 

So i started to weight paint the upper part of the eyes lids. This is in order to make the eye lids close,because if you paint both the the upper and lower part,they will both move when modifying the lattice and they will never close. The mistake that I made the first time was that I painted too much and when I applied a lattice it moved more vertexes than I wanted. The second one was that I didn't made a gradual pass from blue to red.Every set of edges has to have more and more weight as you approach the middle of the eye. The eyes lids have some rings and they have to move gradually to make the eyes close nicely. If the weight paint doesn't gradually go from blue to red then the closed eye won't look natural.

 

These are the lattices I used to modify the eyes

 

lattices

 

One to move the upper lid down and one to move the lower lid up.

 

This is how I painted the upper lid. Notice the gradual pass from red to blue and the poor job that I did :laugh: .

 

upper lid weight paint

 

lower lid weight paint

 

Again,I did a very poor job at this,there are a lot of imperfections,but it works :biggrin: and that's just fine.

 

And now the blink left and right meshes:

 

left

 

right

 

After that I had to export them individually and conformulate them. Then I had to copy the data from the egm and tri files of each mesh to the default one's tri and egm. This is to make the eyes blink.

But copying data only from the desired vertices seemed hard so I made a small program that does this for me. You just need to get the vertices that differ from the neutral/default mesh and write them in a text file. The script that I made earlier did all the hard job for me. Now,the program probably has some bugs left,an atrocious user interface and bad coding but it works :laugh: .Or at least is seems to work.But it was kinda fun making it.There where better solutions to this already.

 

program

 

My deepest gratitude to throttlekitty,scanti and the people that developed nif tools and nifskope for their amazing work which made this possible.

 

It still has some work left but if it actually proves useful to anyone I can finish it and upload it. Or upload it as it is if I don't have any free time left.

 

I expected this not to work at all and crash horribly in the construction set and in-game or in the best possible scenario, to get the eye lids bug or the mesh to look horribly distorted when blinking.

But by some miracle it worked just fine the first time :sweat: . If this didn't work at all, I probably couldn't have done anything about it.

 

After many minutes trying to take the screenshot when the eyes are closed I finally did it :smile: . There probably a simple trick to this.

 

*blink*

 

Looking at the jaw,I realize that it doesn't look that good at all. It's either badly shaped or it gets distorted badly when imported in the game by the egm. Probably a mistake of mine when modeling the face. This is probably the last issue with the geometry.

 

But there is still one or two things left. When I examined head 06 egm and tri I noticed that there where more modvertices than the eye morphs actually used and probably that is for a good reason. Or I miscalculated something. And when reading the tutorial about adding eye morphs to lashes,it said that it's important to append the extra data to the egm files also and if you didn't then the eyes would be badly deformed or something like this. I didn't notice this in-game but is some cases this might happen if the simple program didn't append the extra data to the egm files properly.

 

I will use the same technique with lattices/vertex groups/weight paint to make the face expressions. Or even use some bones but if it works ,I don't see any reason to complicate myself.

 

PS. I forgot something really important. To get the right vertex indexes of the head mesh, I exported the nif mesh with nifskope in obj format and then imported it in blender. This is very important.

 

And I don't really know what squint really means or how it deforms the eye sockets or how looking down deforms the eye sockets. Still need to look into that.

Link to comment
Share on other sites

For the head positioning, you are correct: FaceGen expects the model to be 'at the feet' and for obvious reasons, the game needs the head to be 'shoulder level'. Plus, in the CS face editor, you get proper rotations when working. I can't remember the exact steps I took, but the rigging needs to happen down at 0,0,0. I had probably moved the bones that I needed down to 0,0,0, froze their transforms, and re-keyed in their rotations manually. After rigging, move the head+bones back up to where they should be. Blender will handle the transforms/inverse transforms properly on export. You can check this in the TriShapeData block in NifSkope afterward to double check.

 

I'd love to have that program! My code-fu is very weak, so I just did everything by hand where needed.

 

It's been a while, but I'm positive that the extra eye morph data in H06's .egm is correct. Any inconsistencies lead to something that look like this. (the data becomes offset if anything is too big or small, so the next morph in line gets 'bad' data.)

 

lol, getting the eyes closed is a chore! I usually tap on the console key, since the action freezes when the console is up.

 

Mayas idea of symmetry gets a little funny sometimes. I ended up doing left-side morphs, copy/duplicate inverted, and snapped verts to finish the other side. Squint is what you do when it's dusty, too sunny, or you're having trouble seeing something. Also, when adapting the texture, are you doing this by hand? There's a much easier way by shaping the model and baking textures from one to another; I can elaborate on it more if you need.

Link to comment
Share on other sites

For the head positioning, you are correct: FaceGen expects the model to be 'at the feet' and for obvious reasons, the game needs the head to be 'shoulder level'. Plus, in the CS face editor, you get proper rotations when working. I can't remember the exact steps I took, but the rigging needs to happen down at 0,0,0. I had probably moved the bones that I needed down to 0,0,0, froze their transforms, and re-keyed in their rotations manually. After rigging, move the head+bones back up to where they should be. Blender will handle the transforms/inverse transforms properly on export. You can check this in the TriShapeData block in NifSkope afterward to double check.

 

I'd love to have that program! My code-fu is very weak, so I just did everything by hand where needed.

 

It's been a while, but I'm positive that the extra eye morph data in H06's .egm is correct. Any inconsistencies lead to something that look like this. (the data becomes offset if anything is too big or small, so the next morph in line gets 'bad' data.)

 

lol, getting the eyes closed is a chore! I usually tap on the console key, since the action freezes when the console is up.

 

Mayas idea of symmetry gets a little funny sometimes. I ended up doing left-side morphs, copy/duplicate inverted, and snapped verts to finish the other side. Squint is what you do when it's dusty, too sunny, or you're having trouble seeing something. Also, when adapting the texture, are you doing this by hand? There's a much easier way by shaping the model and baking textures from one to another; I can elaborate on it more if you need.

 

A tutorial about adapting the texture would be very useful. Also, I was a bit too tired and misinterpreted and miscalculated when checking the egm and ended up thinking that you need more data in the egm for a head than an eye lash and that I needed to make more changes than it said in the tutorial. I'll keep everything at a minimum to avoid any more confusions.

 

The small application still needs some minor tweaking,it just appends in the egm file,but doing this for the tri file is just the same. It takes a text file,*.txt, with vertex indexes that will be used to append the data. They don't need to be sorted. Also,each index can be separated by a new line,spaces, and ",".

Link to comment
Share on other sites

Texture baking in Blender. I think someone mentioned that Blender has changed since it was written. But I think XNormal does a better job at baking for most projects.

Thank you very much for the tutorial.

 

Does the head need to perfectly fit the upper body mesh?

Link to comment
Share on other sites

It depends on what you're looking at. Obvious gaps should be avoided.

The Fallout 3 head and body borders actually has the head/neck verts sunk in a little but under the body/neck verts. I know I had a few vertices in Head06 that jump away from the body in some of the morphs and skinning. The values would always go wonky for those, and I had to post-fix in NifSkope and my hex editor.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...