Skip to content

A ShapeAnimator replacement coded for BepinEx.

Notifications You must be signed in to change notification settings

krypto5863/COM3D2.ShapekeyMaster

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

COM3D2.ShapekeyMaster

A ShapeAnimator replacement coded for BepinEx with extended functionality and a sharp focus on performance.

Overview

ShapekeyMaster AKA SM, is a shapekey animation/setting plugin to compliment the amazing shapekeys whose potential remains currently untapped in the community. SM's primary aim was making shapekeys actually useful for character creation in a way that didn't interfere with user immersion.

  • Performance friendly
  • BepinEx
  • Shapekey conditionals for clothing and specific menu items
  • Completely automatic and persistent
  • Some function customization
  • Import/Export Functions

Making your own Translations!

  1. Navigate to the RootGameFolder/BepinEx/Config/ShapekeyMaster folder. Copy any of the language files and rename it to your language of choice. Naming does not need to be standard except for the .json extension.
  2. Begin Translating. The translations are ordered as "KEY": "Translated Text",. Do not change the key! Furthermore, don't delete keys either. Translations files are encoded in unicode!
  3. Restart your game, select the new language file in the ConfigurationManager or BepinexConfigManager (F1/F5 when installed) or manually set the name of the language file in the ShapekeyMaster cfg file.
  4. Submit the translation file to me so I can include it with ShapekeyMaster releases!

Performance Friendly

I make this claim after timing the functions and what time it took them to complete on average. I've seen numbers as low as 50 Microseconds with rare one frame increases into 1-10 MS which is considered slow.

To put into perspective why these numbers matter, we need to consider the frame time of a game running at 60 FPS. I've extrapolated that a game running at 60FPS needs to put out a new frame every 16.66666~ Miliseconds in order to keep that frame rate. Any time we put a load on our games, we can suffer an FPS hit because processing times take longer so the frame can not be put out as fast. SM's average impact is about 500 microseconds (this is a rounded guess with a ton of key sets and the UI closed). Which has a very minor if not insignificant impact on your FPS.

Shapekey Conditionals

This is a function that I think shapekeys needed very much to become useful. Shapekey conditionals allow your shapekeys to automatically be enabled/disabled/modified in response to a clothing item or .menu file being active on the applied maid. This allows you to prevent clipping or incompatibility with clothing while still retaining the keys when those conditions don't apply anymore seamlessly.

Automatic and Persistent

SM basically gatekeeps the shapekey setting function and ensures that the values being set are in line with what it demands. In this way, whenever the game sets keys, it sets our own keys meaning the changes are practically seamless. You won't notice a delay and you'll never have to manually set keys again yourself.

Function Customization

This is basic support for increasing max deform limits, turning off autosaves, hotkeys which are optional (we use the gear menu) and changing how many entries are displayed per page.

Import/Export

Since we understand that users may seek to share their maids or keys with other users, SM allows you to easily and convienently export certain shapekeys which can then be shared and given to another user all with the push of a button. Importing for them is a matter of pressing the button, selecting the file and done.

Usage

  1. Download the DLL
  2. Download the COM3D2.API.dll from https://github.com/DeathWeasel1337/COM3D2_Plugins/releases
  3. Place both DLLs into your BepinEx/plugins folder.
  4. Profit! Simply open the UI with the icon in the gear menu or configure the hotkey in the config (you can use ConfigurationManager, F1 if ConfigurationManager is installed to configure the hotkey and other plugin settings too).

Please make sure that your game version and BepinEx are at least Game: 1.54+ and Bepinex: 5.11+ or ShapekeyMaster might not work as expected.

Tips

As always, I need to include some usage details to maximize the usage of SM.

  1. Avoid persistent animations. These are frame rate killers even with the optimizations by SM. Animating with excitement and stuff is fine but shapekeys were never meant to be changed every single frame. Kiss's code on that front has very little optimization (where body keys are concerned, face keys are optimized for sets every frame as seems to be commmon practice.)
  2. Avoid globals. These are checked every single time a maid refreshes keys. Globals may be neccessary some times and it's always better to have one global than the same key set on every maid. But otherwise, setting keys to be maid specific is the way to go.
  3. Close the UI. The UI is built on IMGUI which is a double edged sword. UI creation is way easier with IMGUI but it's not performance friendly at all... This is what I could do for now.

Convert from SA

We understand a lot of users have ShapekeyAnimator and have used it over a long time and luckily a converter has been created by Pain Brioche and can be found here: https://github.com/Pain-Brioche/ShapekeyMasterConverter

Furthermore, you can refer to this Picture guide by Dybug for more information on Shapekey conversion if you are having trouble, the conversion process has some quirks so it's recommended you give this a look: https://drive.google.com/drive/folders/1UZAPurIqWPRm4tYSXeJI8AychjA6jo7N

Enjoy!

And don't abuse those meidos!