Summary
This plugin merges some characters into one, for:
Installation
Set "CharacterFusioner.PersonAtom.cslist" to the Person Atom Plugin.
Usage of plugin
Optional : Set Base Appearance
Base Character values(Morphs, Scale, etc.) are the values when the plugin is loaded.
You can set other values using "Base Appearance...".
Credits & Thanks to :
This plugin merges some characters into one, for:
- Continuously... (by adjusting Weights...)
- Morph
- Scale
- Selectively...
- Clothing
- Hair
- Skin
- etc...
Installation
Set "CharacterFusioner.PersonAtom.cslist" to the Person Atom Plugin.
Usage of plugin
- "Open Custom UI.." from Plugins tab.
- Add Appearance [1].
- Switch thumbnail [2], if needed.
- Fusion Appearance, by selecting Clothing etc. [3] & adjusting Weight Slider [4].
- Filter Fusion Targets [5] , if needed.
Optional : Set Base Appearance
Base Character values(Morphs, Scale, etc.) are the values when the plugin is loaded.
You can set other values using "Base Appearance...".
Tips
- By checking "Keep Open", you can add many "Additional Characters" at once.
- By selecting "All Flattend", you can add AppearancePresets from AddonPackages.
- (When scene loading, if AppearancePresets file not found in the 'real' folder, this plugin scans all packages to find the file.)
- Change the flavor of your favorite scenes
- By checking "Randomize When SceneLoaded", "Randomize All" is executed when the scene is loaded.
- ie, by setting to your favorite scenes, you can change the flavor every time you play.
- Workflow for New character creation
- "Randomize All" : Create new character.
- (Repeat until your favorite.)
- Edit "Name" and "Save AppearancePresets..."
Triggerable Actions (Overview)
Weight Calculations
Additional Character Weights are actively set by user.
And, "Base weight" is computed passively from Additional Characters Weight.
Each morph value is a weighted average of all characters (including base character).
The way to determine Morph category(head,body, etc.)
Morph category is determined by whether the following names are included in the morph name.
If it doesn't match anything, it will be categorized as Other.
[Head Morphs]
[Body Morphs]
- [Variable Actions]
- (Additional Character) - Weight
- [Triggerable Actions]
- Randomize All
- Reset (to BaseCharacter)
Weight Calculations
Additional Character Weights are actively set by user.
And, "Base weight" is computed passively from Additional Characters Weight.
Each morph value is a weighted average of all characters (including base character).
The way to determine Morph category(head,body, etc.)
Morph category is determined by whether the following names are included in the morph name.
If it doesn't match anything, it will be categorized as Other.
[Head Morphs]
Eye | brow,eye,iris,pupil,lacrimal,lashes |
Mouth | mouth,lip,philtrum,teeth,fang,jaw,chin,tongue |
RestOfHead | head,face,cranium,temple,cheek,ear,nose,nostril,laugh |
[Body Morphs]
Torso | body,neck,collarbone,sternum,rib,belly,pregnant,navel,waist,chest,breath,stomach,hip,glute |
Breast | breast,nip,areola |
Arm | arm,shoulder,hand,nail |
Leg | leg,thigh,knee,shin,calve,foot,feet |
Labia | labia,genital,clit,pubic area |
The way to read Appearance Presets(*.vap) Directly
"Appearance Presets" file (*.vap) is JSON formatted. But it is not a strict format and cannot be parsed as JSON tree.
Therefore, it is interpreted by low-level processing, as explained in the guide below.
That's the magic of fast loading appearances.
The way to read Selectable Presets(Hair, Skin, Clothing,...) from Appearance Preset file
Achieved by partially loading Appearance Presets as Skin/Hair/Clothing Presets.
For example for ClothingPresets, it would be :
Originally, ClothingPreset can only read from the "Clothing" folder, I rewrote `storeFolderName` so that it can read "Appearance" folder.
"Appearance Presets" file (*.vap) is JSON formatted. But it is not a strict format and cannot be parsed as JSON tree.
Therefore, it is interpreted by low-level processing, as explained in the guide below.
Guides - The way to read Appearance Presets(*.vap) Directly
"Appearance Presets" file (*.vap) is JSON formatted. target vap file example. { "setUnlistedParamsToDefault" : "true", "storables" : [ { "id" : "geometry", "useAdvancedColliders" : "true"...
hub.virtamate.com
That's the magic of fast loading appearances.
The way to read Selectable Presets(Hair, Skin, Clothing,...) from Appearance Preset file
Achieved by partially loading Appearance Presets as Skin/Hair/Clothing Presets.
For example for ClothingPresets, it would be :
Code:
var pm = person.GetStorableByID("ClothingPresets").GetComponentInChildren<PresetManager>();
string tmp = pm.storeFolderName;
pm.storeFolderName = "Appearance";
pm.presetName = $"{characterName}";
person.GetStorableByID("ClothingPresets").CallAction("LoadPreset");
pm.storeFolderName = tmp;
Credits & Thanks to :
- MacGruber_Utils.cs
- Helped me implementing difficult features & keeping my code small !!
- ProjectCanyon.MorphMerger.2
- Great predecessor project.