Character Customizer Blueprint System

Would there be any particular way to have one instance of Character Customizer for player character (playable races) generation in game, and another instance of CC for biped creature and NPC (non playable races) generation?

Reason is - 10 male and 10 female is perfect for playable races, but adding in non-playable races it might not be enough.

The system was designed in such a way that it is possible to add more races. By default it comes with 20 already setup for you but it is possible to add more. It’s very time consuming though and requires a bit of blueprint knowledge. If you run into that scenario down the road get back in touch with me and I’ll most likely just make a few videos showing how to do it. Like I said, it’s time consuming but entirely possible to do yet doing it without videos to follow along with would scramble the average user’s brains. It is complex and even I had to step back and work through the flow charts a few times here and there during development. Regardless, it is possible to do and if you find that you do indeed need to do it just let me know if/when you get to that point.

Thanks - will do - and thanks for the lightning fast response!

Epic has fixed the morph propagation bug in UE 4.11.2 so it’s no longer an issue for those of you that are sending morph target calls to slave meshes.

Wonderful kit, the videos explain everything in great details, recommend for anyone serious for a good character customization kit.

8357dbb5a8a55dc1c30f0fb3aa6a09c8d5dfad04.jpeg

Now I have to figure how much I want to add, like tattoos, scars, etc., work work work!

Thanks for the hard work !

Nemo

Question - When the player has customized their avatar and before they click Finished, how can they name their character and save that name?
Was logically hoping that would be a last step before finishing the CC module.

The focus of the system is entirely built towards handling character customization. Primarily handling morph targets, dynamic materials and rigged models. In the character customizer system the player is always identified as “Player” and a name is not really taken into account. They are simply known by the scripts as the player character. The reasoning behind this is so that people who play your game can share their character’s looks with one another. All they need do is share the player’s customization save game file and they’ll instantly have the other player’s character appearance upon swapping it. I never added in a way to type in a name and save that into the player’s character customization.

On a good note however, UE4 allows you to use as many save game objects as you want. My suggestion would be that you could save the player’s name, stats, loot, etc to a different save game object. For instance, after they are done customizing their character and they click finish you could have a different menu pop up for them to name their character and even perhaps choose some starting stats or what have you. This will leave the freedom of the player’s being able to share their character appearance without forcing them to change their name and stats,etc when they want to swap how they look.

What I would do is change the button that says “Finish” to read “Next” and upon clicking it (at the end of the script chain of course) have it load another menu for them to choose a name and what have you. Then have that menu save to a different save game object. Again the idea was to keep the character customization save game object separate from everything else and I recommend keeping things like the player’s name and stats in a separate save. However that’s not required. You could always add a new name or string variable to the Player_CharacterMorphSettings save game object located in the CharacterCustomizer/SaveObjects folder. Then place a text box in your menu and script that text box to write to that new variable you added in.

Just bought it and checked the tutorials, pretty good stuff!

Couple of questions:

  1. Regarding the inherit from the Mesh: based on the list of morphs that you put into the array in the Race1 player character, I have a bit of an issue since in Maya I have the morphs name for 3 main parts ( body, eyes and teeth ), so each morph for each mesh is named accordingly, since Maya do not accept meshes with the same name…in the bug video you posted a while ago I notice that you have the body and the torso with the same morphs target name, so I’m wondering if you use a different setup or if I’m doing something wrong, since I’ve been creating morphs with their “parent” name for each part of the body.
    I’m asking this because the Set master component will morph accordingly to the name and the main different between the meshes I have is that each one ends with “…_body”, “…_eyes” and “…_teeth”…so what will be the best solution for me? importing each single skeletal mesh with their own morphs into Maya, rename all the morphs with “…_body” for the eyes and teeth? or is there a way for the system to let it understand the slight difference between the names so that the morphs will be recognized and triggered?

  2. Is there an efficient way to assign different morph values to a single button, but also be able to update the slider values of the selected morphs? lets say that I want to mix 6 morphs, each one currently set to a single slider, so that I’m able to control each single one indipendently, but I would also have the possibility to have a kind of “template” where those 6 morph values are stored so that I can assign specific morphs to my character without dealing with each single slider…but the sliders themself should also be updated based on the stored morph values assigned to the button…hope its clear :slight_smile:

  3. I have 3 main characters, they have different skeletal proportions ( small, normal, big ), but the joint structure is the same and, most important, the morphs name are exactly the same between them. Since the first character is done and the UMG setup is completed I want to basically have a carbon-copy of the first character to be applied to the second and third character, where the main difference will be the base skeletal mesh, but everything else is exactly the same…I tried to replace Race2 by doing a brutal copy of Race1 directly from the folders inside the project and rename it “Race2” but that caused issues to the MorphLoadActor BP, so I’m not sure if there is a safe ( better ) way to do that or not…any advices to copy/paste the same exact setup from one character to the other one? that would be so usefull :slight_smile:

Cheers

  1. Group the morphs in Maya for each model. In fact, let me post an image showing you a setup in Outliner that will allow you to give them the same morph names. When you export simply select all the morph targets and the group they are in along with the models and rig of course. When you import into UE4 it will recognize them as having the same morph name and they will work together and treated as a single morph.

(Just to clarify. The Morphs that go together have to have an IDENTICAL name. Take note that even the capitalization is the same.)

  1. It is definitely possible to do that. All the scripts are there for it but I didn’t setup a template to do exactly what you’re suggesting. It’s easy enough to adjust one of the existing templates to create a sort of character preset button. When you get to that point just hit me back on this thread and I’ll make a video showing how to do it. It’s pretty simple but it’s better for me to show through a video. If you need the video now then I’ll try and get one to you in the next few days.

  2. Okay, you can’t do a “brutal copy” of the menus. Due to the complexity of the system and it’s flexibility each menu has to be setup by hand within the blueprints as each menu’s scripts access different variables for each race within the savegame object. It’s still pretty fast to do what you’re talking about. In video 16 I show the NPC Menu Integration. You would do practically the same process except instead of copying things over to the NPC menu you’d instead copy them over to the Race 2 menu. It’s really just a bunch of selecting, copying and pasting. In your case, after you’ve done all the copy/pasting you’d compile and you may get a few errors pop up. If you do get any errors click on each error and most of them would be where a script was attempting to access a variable called “Race 1”. You’d simply swap that to the “Race 2” variable because the Race 2 menu won’t have a variable called “Race 1” it will instead have a variable called “Race 2”. Shouldn’t be too many of those tho if any at all.

Let me know if you have any questions or if you need that video already.

Hi !
I have finally gotten the DAZ characters in to my satisfaction - I would appreciate your assistance on the opacity - to hide the body parts under the clothing. I think my female model (Race02) is fine, but I brought the male (Race01) in with full anatomy, and want to be sure certain anatomical features remain hidden by opacity in the relevant situations where they should. Thanks!

It’s actually really easy to do. First you’d make a black and white alpha mask. The black area is what you want hidden while the white area is what needs to be visible. The alpha mask is based on the UV map of your geometry of course. So where the anatomy UV’s are laid out on your maps they would get black for hidden. You then set the blend mode of the material to Masked and hook up your black and white alpha mask to the Opacity Mask channel. In this image example I have masked the feet of the character so when the character has shoes on the feet are hidden underneath them.

You can also layer these using a blend darken so each clothing item can have it’s own black and white alpha mask. This allows you to setup your clothing so clothing articles can be mixed and matched by your players. Just change the relevant alpha map being used through a dynamic material property whenever they swap to a new clothing article. In the example below I have the feet and pelvic region masked so my character would have shoes and underwear equipped. You can also make a sort of ladder of Blend Darkens for additional Alpha masks as needed depending on how many clothing slots your game has.

For when they are wearing nothing just use an all white texture. It can be a tiny 2x2 white image. (Or just use the one in the engine already. It’s called WhiteSquareTexture, you’ll have to turn on Show Engine Content to see it.) Whenever they unequip a slot just switch that texture parameter to the all white texture. All alpha masks for clothing can be fairly small in general. I usually have mine at about a 512x512 resolution. Though the resolution you use doesn’t matter as the alpha mask really has no impact on performance. It’s just a matter of saving space on your game’s overall size. So long as it’s big enough to get the desired results you should be fine.

Setting up the slider or button is also easy to do. Whenever they equip that item by clicking the button or using the slider you’d simple set the Texture Parameter Value of the Dynamic Material for that alpha mask to the alpha mask of the clothing article.

:
On a 4.12 project (CC migrated from a 4.11 project) I have ensured I have a copy of morph load actor in the scene - but it is not using the race01 I have set up.
Have been getting these errors spamming the message log:
Error Blueprint Runtime Error: Accessed None from function: ‘ExecuteUbergraph_MorphLoadActor’ from node: Set Morph Target in graph: Player_Race_1_MorphAllGraph in object: MorphLoadActor with description: Accessed None
and
Error Blueprint Runtime Error: Accessed None trying to read property Race1 from function: ‘ExecuteUbergraph_MorphLoadActor’ from node: Set Morph Target in graph: Player_Race_1_MorphAllGraph in object: MorphLoadActor with description: Accessed None trying to read property Race1

Any idea what I did wrong?

I should note - in the CC scene I do not get these errors.
Thanks!

UPDATE: May have fixed it - Had to set default pawn in the 3rd person Game Mode to be Race_1_CharacterBP. Will see what happens when I set up Race 2 and see if it updates.

Oh, sorry for the late response. For some reason I didn’t get an email notification from the thread. Let me know if you have any other issues or if the issues persists but it looks like you found the problem. But yes, the Game mode needs to have the right pawn selected for it as I have in the game mode that’s included with the system.

I am now bringing in the first clothing assets.
I brought in a body suit with the Male Genesis2 skeleton (same as the race01).
I assume I need to retarget and add all the animations used by the race01 figure to the bodysuit ( and every clothing piece I add in later)?
When I set it up in the race01 blueprint, it follows the character around, but is not animating.

Do I need to have the exact same morphs added to the bodysuit as the character mesh, or does the set master pose component automatically handle that?

If your body suit is rigged to the same skeleton as your Genesis model then no, you do not have to retarget the animations. They should inherently work with the body suit because they use the same skeleton. The body suit has to be rigged to the skeleton tho, just like any other clothing model and body model has to be. It won’t just move with it unless it has a SkinCluster assigned to it. Ergo, it needs to be rigged to the skeleton.

You do need the exact same morphs added to the bodysuit. The Master Pose Component simply tells the bodysuit to use the same animation sequence/timing as the master. It has nothing to do with morph targets.

Thanks, I assume that means in UE4 they have to be the same skeleton (same exact name, same skeleton), and the genesis model has to be retargeted and working with the animations (which it does).

Whoa - for every item? that is going to take a long time to import. The Mesh (inherited) doesn’t pass these to the child component meshes?

If something has the same skeleton then you can import it using that skeleton in the import options. Upon doing so the new item will simple just work with any animations targeted to that skeleton.

Morph targets are a set of numerical assignments that tell vertices where to move when the target is morphed. UE4 doesn’t know where to move those vertices for that morph unless you import those morph targets with the model. That’s just how it is with morph targets. In UE4, you send the morph target call to the Mesh (Inherited) and any model that is a child of the Mesh (Inherited) will morph if and only if it also has that same morph target name. I wish there was a way around it but that’s just how morphs work.

I assume it is only necessary that the morphs that affect that area be on the object, e.g. nose morphs for the face would not need to be on a pair of pants, but a weight morph for the body would.

This explains why in, say, skyrim, the actual body morphs are limited to one - a weight slider. No individual hip, breast, waist, butt, belly, shoulder width, etc. - because they would have to be implemented on every clothing item that touches that morph.

Yes, you assume correctly. Each item only needs morphs for morphs that would effect the area that it covers on the body.

Yea, I figured that’s why Skyrim only did one morph from skinny to thick. To save time on development.

Thank you so much - I am going to have to revamp things slightly.
May need help on implementing the opacity filter >>> do you have any videos to recommend on setting that up ( for hiding the body parts under the clothing when the clothing item becomes equipped).
Thanks!