[WIP] VadersApp′s Oblivion diverse bodies 4 all NPCs

Post » Wed Mar 09, 2011 9:43 am

In vanilla Oblivions all NPCs bodies are looking the same. Of course there are great different body meshes made by several talented artists, but they all have got the same problem -> Only one mesh for all NPCs.
I tried my best to achive a solution for this problem.

So what have i done?
First i have to say that I am a total noob in modding games. So i had to learn several different things before.
Tools that i had do use are Blender and Nifskope and Wrye Bash.

After some tries with different body replacers i choosed the one from which i believe would be the best for my mod.
So i haven chosen the DMRA body. It is easier to make a "big" body smaller than a small body big.
I loaded the femaleupperbody.nif and added two bones ""Bip01 briastTransform" and "Bip01 briastSideTransform", i also added "Bip01 ButtTransform". I also wanted to add a bone to transform the belly but that wasn′t looking good until now. Maybe i could add it later.
Than i had to learn how to weightpaint the body to the bones. After some days i think i got it :)
I also added those three bones to "Coronerras Maximum Compatibility Skeleton" which is my base for animation with moving briasts and back. I had to rotate the bones a bit to get things looking good.

Than i calculated the transform an rotation data of the 3 new bones for 49 different bodie types. Here is the list i made:

Skelett	trans	Scale	scale	trans		Rot2	scaleskeleton_001_veryold_veryslim.nif	-10	0.6	0.6	-6	6	-15	0.50skeleton_002_old_veryslim.nif	-8	0.54	0.6	-5	5	-10	0.40skeleton_003_older_veryslim.nif	-6	0.44	0.6	-4	4	10	0.30skeleton_004_normal_veryslim.nif	-4	0.35	0.6	-3	3	30	0.26skeleton_005_younger_veryslim.nif	-1.4	0.28	0.6	-2	2	50	0.20skeleton_006_young_veryslim.nif	-1	0.23	0.6	-1	1	55	0.17skeleton_007_veryyoung_veryslim.nif	0	0.2	0.6	0	0	60	0.15							Skeleton_008_veryold_slim.nif	-13	0.8	0.8	-6	7	-15	0.60Skeleton_009_old_slim.nif	-10	0.78	0.8	-5	5	-10	0.48Skeleton_010_older_slim.nif	-7.5	0.68	0.8	-4	4.5	10	0.40Skeleton_011_normal_slim.nif	-6	0.6	0.8	-3	3	30	0.36Skeleton_012_younger_slim.nif	-1.5	0.53	0.8	-2	2	50	0.30Skeleton_013_young_slim.nif	-1.2	0.39	0.8	-1	1	55	0.27Skeleton_014_veryyoung_slim.nif	0	0.35	0.8	0	0	60	0.25							Skeleton_015_veryold_slimmer.nif	-16	1.0	1.1	-6	8	-15	0.7Skeleton_016_old_slimmer.nif	-12	0.9	1.1	-5	6.5	-10	0.6Skeleton_017_older_slimmer.nif	-9	0.8	1.1	-4	5	10	0.55Skeleton_018_normal_slimmer.nif	-6	0.7	1.1	-3	3	30	0.49Skeleton_019_younger_slimmer.nif	-3	0.6	1.1	-2	2	50	0.44Skeleton_020_young_slimmer.nif	-1.5	0.55	1.1	-1	1	55	0.42Skeleton_021_veryyoung_slimmer.nif	0	0.5	1.1	0	0	60	0.4							Skeleton_022_veryold_normal.nif	-19	1.1	1.4	-6	9	-15	0.8Skeleton_023_old_normal.nif	-15	1.0	1.4	-5	7	-10	0.7Skeleton_024_older_normal.nif	-9	0.9	1.4	-4	5	10	0.65Skeleton_025_normal_normal.nif	-7	0.8	1.4	-3	3	30	0.6Skeleton_026_younger_normal.nif	-3.5	0.7	1.4	-2	2	50	0.55Skeleton_027_young_normal.nif	-1.7	0.65	1.4	-1	1	55	0.52Skeleton_028_veryyoung_normal.nif	0	0.6	1.4	0	0	60	0.5							Skeleton_029_veryold_rounder.nif	-22	1.3	1.7	-6	9	-15	0.9Skeleton_030_old_rounder.nif	-17	1.2	1.7	-5	7	-10	0.8Skeleton_031_older_rounder.nif	-10	1.1	1.7	-4	5	10	0.75Skeleton_032_normal_rounder.nif	-6	1	1.7	-3	3	30	0.7Skeleton_033_younger_rounder.nif	-4	0.9	1.7	-2	2	50	0.67Skeleton_034_young_rounder.nif	-2	0.85	1.7	-1	1	55	0.63Skeleton_035_veryyoung_rounder.nif	0	0.8	1.7	0	0	60	0.6							Skeleton_036_veryold_round.nif	-25	1.65	2	-6	10	-15	1.1Skeleton_037_old_round.nif	-18	1.4	2	-5	8	-10	1Skeleton_038_older_round.nif	-12	1.3	2	-4	5	10	0.9Skeleton_039_normal_round.nif	-8	1.2	2	-3	3	30	0.84Skeleton_040_younger_round.nif	-4	1.1	2	-2	2	50	0.8Skeleton_041_young_round.nif	-2	1.05	2	-1	1	55	0.77Skeleton_042_veryyoung_round.nif	0	1	2	0	0	60	0.75							Skeleton_043_veryold_veryround.nif	-25	1.9	2.5	-6	12	-15	1.4Skeleton_044_old_veryround.nif	-18	1.7	2.5	-5	10	-10	1.25Skeleton_045_older_veryround.nif	-12	1.55	2.5	-4	6	10	1.15Skeleton_046_normal_veryround.nif	-8	1.5	2.5	-3	4	30	1Skeleton_047_younger_veryround.nif	-4	1.4	2.5	-2	2	50	0.98Skeleton_048_young_veryround.nif	-2	1.35	2.5	-1	1	55	0.95Skeleton_049_veryyoung_veryround.nif	0	1.3	2.5	0	0	60	0.9


I used nifskope to type in those numbers.
I also weightpainted some clothes that could be used with the scaleable bodies. The weightpaint copy script works great :) So its very easy to convert clothes for the body.
Now i had to get 49 new skeletons atached to the npcs. The best solution i found was using wrye bashs "MAONPCSkeletonPatcher" and mod it a bit:

class DiverseSkeletonPatcher(BasalNPCTweaker):    """Changes all NPCs to use the diversive Skeleton for different look ."""    #--Config Phase -----------------------------------------------------------    def __init__(self):        MultiTweakItem.__init__(self,False,_("VadersApp′s diverse NPCs"),            _('Changes all (modded and vanilla) NPCs to use diverse Skeletons for different look.'),            'VadersApp Skeleton',            (_('All NPCs'), 0),            (_('Only Female NPCs'), 1),            (_('Only Male NPCs'), 2),            )    def buildPatch(self,log,progress,patchFile):        """Edits patch file as desired. Will write to log."""        count = {}        keep = patchFile.getKeeper()        for record in patchFile.NPC_.records:            if self.choiceValues[self.chosen][0] == 1 and not record.flags.female: continue            elif self.choiceValues[self.chosen][0] == 2 and record.flags.female: continue            if record.fid == (GPath('Oblivion.esm'),0x000007): continue #skip player record            try:                oldModPath = record.model.modPath            except AttributeError: #for freaking weird esps with NPC's with no skeleton assigned to them(!)                continue            random.seed(record.fid)            randomNumber = random.randint(1, 49)            if randomNumber == 1:                newModPath = r"characters\_male\skeleton_001_veryold_veryslim.nif"            if randomNumber == 2:                newModPath = r"characters\_male\skeleton_002_old_veryslim.nif"            if randomNumber == 3:                newModPath = r"characters\_male\skeleton_003_older_veryslim.nif"            if randomNumber == 4:                newModPath = r"characters\_male\skeleton_004_normal_veryslim.nif"            if randomNumber == 5:                newModPath = r"characters\_male\skeleton_005_younger_veryslim.nif"            if randomNumber == 6:                newModPath = r"characters\_male\skeleton_006_young_veryslim.nif"            if randomNumber == 7:                newModPath = r"characters\_male\skeleton_007_veryyoung_veryslim.nif"            if randomNumber == 8:                newModPath = r"characters\_male\skeleton_008_veryold_slim.nif"            if randomNumber == 9:                newModPath = r"characters\_male\skeleton_009_old_slim.nif"            if randomNumber == 10:                newModPath = r"characters\_male\skeleton_010_older_slim.nif"            if randomNumber == 11:                newModPath = r"characters\_male\skeleton_011_normal_slim.nif"            if randomNumber == 12:                newModPath = r"characters\_male\skeleton_012_younger_slim.nif"            if randomNumber == 13:                newModPath = r"characters\_male\skeleton_013_young_slim.nif"            if randomNumber == 14:                newModPath = r"characters\_male\skeleton_014_veryyoung_slim.nif"            if randomNumber == 15:                newModPath = r"characters\_male\skeleton_015_veryold_slimmer.nif"            if randomNumber == 16:                newModPath = r"characters\_male\skeleton_016_old_slimmer.nif"            if randomNumber == 17:                newModPath = r"characters\_male\skeleton_017_older_slimmer.nif"            if randomNumber == 18:                newModPath = r"characters\_male\skeleton_018_normal_slimmer.nif"            if randomNumber == 19:                newModPath = r"characters\_male\skeleton_019_younger_slimmer.nif"            if randomNumber == 20:                newModPath = r"characters\_male\skeleton_020_young_slimmer.nif"            if randomNumber == 21:                newModPath = r"characters\_male\skeleton_021_veryyoung_slimmer.nif"            if randomNumber == 22:                newModPath = r"characters\_male\skeleton_022_veryold_normal.nif"            if randomNumber == 23:                newModPath = r"characters\_male\skeleton_023_old_normal.nif"            if randomNumber == 24:                newModPath = r"characters\_male\skeleton_024_older_normal.nif"            if randomNumber == 25:                newModPath = r"characters\_male\skeleton_025_normal_normal.nif"            if randomNumber == 26:                newModPath = r"characters\_male\skeleton_026_younger_normal.nif"            if randomNumber == 27:                newModPath = r"characters\_male\skeleton_027_young_normal.nif"            if randomNumber == 28:                newModPath = r"characters\_male\skeleton_028_veryyoung_normal.nif"            if randomNumber == 29:                newModPath = r"characters\_male\skeleton_029_veryold_rounder.nif"            if randomNumber == 30:                newModPath = r"characters\_male\skeleton_030_old_rounder.nif"            if randomNumber == 31:                newModPath = r"characters\_male\skeleton_031_older_rounder.nif"            if randomNumber == 32:                newModPath = r"characters\_male\skeleton_032_normal_rounder.nif"            if randomNumber == 33:                newModPath = r"characters\_male\skeleton_033_younger_rounder.nif"            if randomNumber == 34:                newModPath = r"characters\_male\skeleton_034_young_rounder.nif"            if randomNumber == 35:                newModPath = r"characters\_male\skeleton_035_veryyoung_rounder.nif"             if randomNumber == 36:                newModPath = r"characters\_male\skeleton_036_veryold_round.nif"            if randomNumber == 37:                newModPath = r"characters\_male\skeleton_037_old_round.nif"            if randomNumber == 38:                newModPath = r"characters\_male\skeleton_038_older_round.nif"            if randomNumber == 39:                newModPath = r"characters\_male\skeleton_039_normal_round.nif"            if randomNumber == 40:                newModPath = r"characters\_male\skeleton_040_younger_round.nif"            if randomNumber == 41:                newModPath = r"characters\_male\skeleton_041_young_round.nif"            if randomNumber == 42:                newModPath = r"characters\_male\skeleton_042_veryyoung_round.nif"            if randomNumber == 43:                newModPath = r"characters\_male\skeleton_043_veryold_veryround.nif"            if randomNumber == 44:                newModPath = r"characters\_male\skeleton_044_old_veryround.nif"            if randomNumber == 45:                newModPath = r"characters\_male\skeleton_045_older_veryround.nif"            if randomNumber == 46:                newModPath = r"characters\_male\skeleton_046_normal_veryround.nif"            if randomNumber == 47:                newModPath = r"characters\_male\skeleton_047_younger_veryround.nif"            if randomNumber == 48:                newModPath = r"characters\_male\skeleton_048_young_veryround.nif"            if randomNumber == 49:                newModPath = r"characters\_male\skeleton_049_veryyoung_veryround.nif"            try:                if oldModPath.lower() == r'characters\_male\skeletonsesheogorath.nif':                    newModPath = r"Mayu's Projects[M]\Animation Overhaul\Vanilla\SkeletonSESheogorath.nif"            except AttributeError: #in case modPath was None. Try/Except has no overhead if exception isn't thrown.                pass            if newModPath != oldModPath:                record.model.modPath = newModPath                keep(record.fid)                srcMod = record.fid[0]                count[srcMod] = count.get(srcMod,0) + 1        #--Log        log.setHeader(_('===VadersApp′s diverse NPCs'))        log(_('* %d Skeletons Tweaked') % (sum(count.values()),))        for srcMod in modInfos.getOrdered(count.keys()):            log('  * %s: %d' % (srcMod.s,count[srcMod]))


I made a batched patch. And voila all NPCs and also the ones from other mods got the new skeletons.

here is the result :

http://www.youtube.com/watch?v=zDo4iSFDlmw
The spell i used is to take npcs clothes away. I changed upper and lower body with a mesh with clothes to avoid nudity. For all NPCs it′s the same mesh with different skeletons.

What i want to achive before release is:

1. get facegen data for age and face heavy/light to atach the right bodies to the right face.
I tried my best but the data is encrypted
Maybe one of you could help me out with this problem?
My second attempt was to create a macro that reads the data out of the construction set. The macro is working fine, but cs doesn′t. It crashs after reading the data of 20-25 npcs :(
2. maybe adding other bones to achive even better quality
3. if everything is complete i have to weightpaint stock clothes and armor for the body.
User avatar
Tiffany Holmes
 
Posts: 3351
Joined: Sun Sep 10, 2006 2:28 am

Post » Wed Mar 09, 2011 2:19 am

I have added 7 skeletons to diverse the male bodies and weightpainted some stock clothes, so that they have to wear something *g*

http://www.youtube.com/watch?v=Pr-9Zup7g5k
User avatar
jodie
 
Posts: 3494
Joined: Wed Jun 14, 2006 8:42 pm

Post » Wed Mar 09, 2011 6:04 am

Fantastic work. I have always avoided installing body mods on the grounds that suddenly everyone in the world has ripped/beautiful bodies, even for the older NPCs or beggars. It just didn't make sense. :P

It would be great to see people with different-looking bodies throughout the world. How come nobody in Cyrodiil is fat? :P
User avatar
LuBiE LoU
 
Posts: 3391
Joined: Sun Jun 18, 2006 4:43 pm

Post » Wed Mar 09, 2011 7:58 am

This sounds really cool. I am surprised this didn't get the attention it deserves! :ohmy:

PS: I use HGEC, and a lot of cloth replacers that use that body mod. Dunno if I want to change the bodies (don't really understand a lot of the tweaks behind a body type and cloth clipping) to use your app, but nevertheless it sounds great.

PS: I always get a loading crash if I add the MAO Skeleton tweak in my bashed patch. Building the bashed patch without that tweak loads the game just fine.
User avatar
Jenna Fields
 
Posts: 3396
Joined: Mon Dec 11, 2006 11:36 am

Post » Wed Mar 09, 2011 3:20 am

Saw you post this in the Wrye Bash thread some days ago and been waiting to see you finished work. Looking forward to trying it out. Diversity makes the game so much better. Good luck.
User avatar
Juliet
 
Posts: 3440
Joined: Fri Jun 23, 2006 12:49 pm

Post » Wed Mar 09, 2011 12:28 pm

Thank you, for your interest.

Yesterday i′ve fixed some anoying clipping bugs for the male body and added scaleable weightpainting to the bell and the briast muscles to wip a little bit ofcourse only for the fat body.
Also added some bones for better quality.
Next step ist to copy those skeleton to the other 6 bodies and replace some numbers to get the diversity.
Maybe later i will add a new video for demonstration.
User avatar
kristy dunn
 
Posts: 3410
Joined: Thu Mar 01, 2007 2:08 am

Post » Tue Mar 08, 2011 9:20 pm

Interesting. You might want to check out theTalkieToaster's skeletal variation modder's resource found here: http://www.tesnexus.com/downloads/file.php?id=29853

It could be of some use. :)
User avatar
Cameron Garrod
 
Posts: 3427
Joined: Sat Jun 30, 2007 7:46 am

Post » Wed Mar 09, 2011 11:37 am

thank you. thats the one which inspired me to create this mod.
User avatar
lydia nekongo
 
Posts: 3403
Joined: Wed Jul 19, 2006 1:04 pm

Post » Wed Mar 09, 2011 12:35 am

Todays clip shows only males, but in this version i′ve changed some bones, added more bones and did better weightpainting. Also most of the animation bugs are fixed.
It features 7 skeleton types from "veryslim" to "veryround".

I also added a new bone to scale fat wobbling. It′s the same thing like BBB for female. It scales from veryslim 0 to veryround 1. It could be set higher in one of the next versions.

Fatter Npcs aren′t possible because of clipping of animations.

Please have a look. Here is the clip

http://www.youtube.com/watch?v=-cGsPvOlQfY

If you have suggestions for improvements, let they come :)
User avatar
Calum Campbell
 
Posts: 3574
Joined: Tue Jul 10, 2007 7:55 am

Post » Wed Mar 09, 2011 1:15 am

Looks great, but some butts look funny though. Also those nappies on fat people look crazy. :D

I hope that you'll manage to get this done and implemented, it is very promising. I'd love to use it. And I like the ideas about reading from existing sliders data and setting constitution according to that.
User avatar
Trista Jim
 
Posts: 3308
Joined: Sat Aug 25, 2007 10:39 pm

Post » Wed Mar 09, 2011 8:55 am

Todays clip shows only males, but in this version i′ve changed some bones, added more bones and did better weightpainting. Also most of the animation bugs are fixed.
It features 7 skeleton types from "veryslim" to "veryround".

I also added a new bone to scale fat wobbling. It′s the same thing like BBB for female. It scales from veryslim 0 to veryround 1. It could be set higher in one of the next versions.

Fatter Npcs aren′t possible because of clipping of animations.

Please have a look. Here is the clip

http://www.youtube.com/watch?v=-cGsPvOlQfY

If you have suggestions for improvements, let they come :)


Can you show these wearig armor or is that not done yet?
User avatar
Jonathan Windmon
 
Posts: 3410
Joined: Wed Oct 10, 2007 12:23 pm

Post » Wed Mar 09, 2011 10:34 am

Can you show these wearig armor or is that not done yet?


Yep, i weightpainted the bruma armor. The Fatbody has heavy clipping problems, but i think that can not be changed without scaling it a bit smaller.
Maybe i could add some vertices to the original male body to achive better weightpainting on the clothes and armor.

It′s very cold in Bruma, and the guards have a hard job to do, so i gave back to them the original Bruma armor.

http://www.youtube.com/watch?v=GPZ2At6PHsg
User avatar
Big Homie
 
Posts: 3479
Joined: Sun Sep 16, 2007 3:31 pm

Post » Wed Mar 09, 2011 1:29 am

Yep, i weightpainted the bruma armor. The Fatbody has heavy clipping problems, but i think that can not be changed without scaling it a bit smaller.
Maybe i could add some vertices to the original male body to achive better weightpainting on the clothes and armor.

It′s very cold in Bruma, and the guards have a hard job to do, so i gave back to them the original Bruma armor.

http://www.youtube.com/watch?v=GPZ2At6PHsg



LOL! That sure is something. You figure with the cold and being guards after all they would stay in shape :)

This looks really good. The final judgement will be if the body changes make sense (like the guard example). Certain NPCs should never be fat, some more than most. If you can control that, you have a sure winner.

Example - guards should be muscular or thin (some beefy I guess but not fat.
Upper class could be fat but not all.
Middle and lower class would tend to be thin.
Adventurers usually muscular or thin.
Shop keepers usually fat (most of the time).

and so on....
User avatar
Robert Garcia
 
Posts: 3323
Joined: Thu Oct 11, 2007 5:26 pm

Post » Wed Mar 09, 2011 2:02 am

LOL! That sure is something. You figure with the cold and being guards after all they would stay in shape :)

This looks really good. The final judgement will be if the body changes make sense (like the guard example). Certain NPCs should never be fat, some more than most. If you can control that, you have a sure winner.

Example - guards should be muscular or thin (some beefy I guess but not fat.
Upper class could be fat but not all.
Middle and lower class would tend to be thin.
Adventurers usually muscular or thin.
Shop keepers usually fat (most of the time).

and so on....


I thought about that,too .My first attempt was to read facegen data (age and face fatness :)). But its encrypted.
Also getting it out of the cs didn′t work because of constant crashing of the cs. (made a macro)

It′s a good solution to attach the bodytypes as you suggested.

I've added a slowmotion of the fat wobbling effect. I have to add more vertices i think. It is undetailed.

http://www.youtube.com/watch?v=SMz8uNZgHSU
User avatar
Dina Boudreau
 
Posts: 3410
Joined: Thu Jan 04, 2007 10:59 pm


Return to IV - Oblivion