ousnius / bodyslide-and-outfit-studio Goto Github PK
View Code? Open in Web Editor NEWBodySlide and Outfit Studio, a tool to convert, create, and customize outfits and bodies for Bethesda games.
License: GNU General Public License v3.0
BodySlide and Outfit Studio, a tool to convert, create, and customize outfits and bodies for Bethesda games.
License: GNU General Public License v3.0
When loading a project, automatically load a slider set without the selection dialog, if it's the only one in the XML file.
Fixed.
Taken from the Nexus:
Hello all, I seem to be running into problems with object (.obj) import and export while using OS.
Occasionally, when exporting a complex part of an outfit using the right-click “Export Shape to .obj” command, it appears to fail to complete the writing of the .obj file. Opening the file in Notepad++ revels that the file contains vertex coordinates (v) and texture coordinates (vt) but ends without the face definitions (f) section. The texture coordinates (vt) in the incomplete file seem to be incorrectly written in comparison to completed .obj files generated by 3ds Max, NifSkope, and Maya.
Using the “Shape>Export Shape to .obj” command with the same outfit part highlighted, OS locks up then CTD.
Importing an .obj file flips the UVs coordinates top to bottom in UV space.
Importing an .obj file with the same outfit part highlighted should adjust the default vertex positions. Although with the parts that do not export correctly from OS this operation causes the shape to explode. It looks like the vertex positions are being read in the incorrect order, from the open NIF file or the imported the .obj. The same explosion happens when the .obj is imported as slider data.
For those that want to make .obj files compatible with OS, the .obj file needs to be exported from Maya with only “Groups” option selected and in 3ds Max the only option that should be selected should be texture coordinates. To be honest, I have never tested the 3ds Max export, the file contains the correct info (v,vt,f) although it does have some extra excluded lines, but I do not think that should effect the import. NifSkope does not export compatible .obj files because the written files contain material and normal information.
Attempting to import an .obj which contains a "o " line will instantly crash Outfit Studio.
Since .obj is a rather loosely defined standard, different tools will write different data into their exports. As such unexpected entries should be handled in some way, say by ignoring them.
The Duplicate Shape dialog can't be cancelled properly (no check for an empty return).
Done.
With any transform brush active, show the position of the currently focused vertex at the bottom right.
The default brush settings need some adjustments for convenience (mostly strength, spacing). Maybe a way for the mask brush to set the value to 1.0 immediately (higher strength?).
A slider that scales a selected bone up/down to check for weighting quality or clipping would be useful.
Add a new menu item that transfers the weights of the selected bones from reference to chosen shape 1:1.
This is a transfer, not a copy, so it requires same vertex count and order.
When using "Brush-> Clear Mask" while in the bones tab, the displayed bone weight colors are getting cleared as well (only visually until you re-select the bone).
When right-clicking a shape in the shape list, make "Copy Selected Weights" appear as well instead of just "Copy Bone Weights".
When using the "Copy Selected Weights" and "Copy Bone Weights" features while having parts of the shape masked, make sure only the unmasked parts receive new weights and the masked parts keep their old weights.
Save Project always clears the mask, even though it should only clear it when unweighted vertices are found and then mask those.
Add NiTriStrips and NiTriStripsData support.
In case you save a project without having a "SliderSets" folder, Outfit Studio will fail to save it properly.
Not really a problem as the program is distributed with that folder, but should be fixed anyway.
The brush size adjustments by holding the 'S'-Key are too slow and can go over the limit.
Maybe also adjust the increase/decrease hotkeys (values and in general).
The Rotate Shape dialog needs a preview option like the move/scale dialogs.
Can be done using virtual rotations that are cleared afterwards.
Renaming a shape that has (old, not conformed yet) slider data assigned, and the naming doesn't match the shape name, the program crashes trying to deep rename the slider data.
Substring that doesn't exist -> Out of bounds in some cases -> Crash.
A shape name entry has to be added to the template loading code that uses the Config.xml to allow for loading a specific shape of a multi-shaped NIF.
Need a virtual shape rotation that can be loaded from the NIF.
Rotation matrix of NIF format has to be converted to Axis Angles and the angle in degrees.
Sometimes, duplicated shapes can't be toggled invisible (they will stay visible).
When moving a shape with "Shape -> Move Shape" or moving a single vertex using the new 'V' hotkey, the new positions are calculated wrong when in slider edit mode.
Load Project should load shapes with slider data that is in a different data folder and referenced to, instead of removing the shapes and their slider data from the project.
Make pressing the enter key on the keyboard accept the entered values and close the dialog.
When painting a mask, show the mask value of the currently focused vertex at the bottom right, just like with the weight values.
When deleting a bone, its nodes aren't deleted from the reference NIF.
"Save Project" then copies the reference NIF with the still existent node, meaning it will be in the final output. The "Export" feature doesn't clone any reference NIFs, so there was no issue there.
When a loose texture is not found, search all *.BSA in Skyrim\Data for the texture and load it.
Outfit Studio crashes when a project is loaded that has over 100 sliders.
wxWidgets slider ID problem?
wxCheckBoxBase::Set3StateValue(wxCheckBoxState state) Line 91
OutfitStudio::ShowSliderEffect(int sliderID, bool show) Line 373
OutfitStudio::createSliderGUI(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & name, int id, wxScrolledWindow * wnd, wxSizer * rootSz) Line 331
OutfitStudio::CreateSetSliders() Line 266
OutfitStudio::OnLoadProject(wxCommandEvent & __formal) Line 667
The alignment of the UI when looking at a single-weighted slider set (GenWeights="false") in BodySlide is off.
Add a brush that smooths weighting with a laplacian/hc-laplacian filter.
Accessed by holding the Shift key while weight painting.
(Shift = Smooth)
(ALT = Erase)
(CTRL = Mask)
Done.
When copying weights to shapes that have NiSkinInstances instead of BSDismemberSkinInstances, the NIF will be corrupted.
Allows in-game usage of the morphs for the specific body/outfit. Requires RaceMenu v3.0.1+. The TRI files are rather big as they include all slider data for all shapes (all BSDs in one file).
Also assigns the path to the built TRI file in the NIF as a NiStringExtraData block.
BodySlide: Builds _0_1.nif and makes use of zaps.
RaceMenu: Allows for further in-game tweaking for the player character or followers with EFF.
Add settings menu, accessible from both the BodySlide and Outfit Studio frames.
Examples:
This could use some notes on external dependencies.
For example: which version of wxWidgets are you using?
Nodes that are used by the HDT PE in-game are not and don't have to be in the in-game skeleton, that's why Outfit Studio can currently not load them, as they're missing in the reference skeleton.
Need to find a way to keep those bones loaded and intact (option to import anyway and ignore reference skeleton things).
When toggling "Brush-> Show Mask", the displayed bone weight colors are getting toggled as well. This toggle should only affect the mask vertex color channel, not all channels.
The slider set and shape data file strings aren't appended ".xml" or ".nif" automatically, if the user forgets to type them in. Both typing "file.nif" and "file" should work and get adjusted to "file.nif".
Merge all dialogs that pop up when a bone is missing in the reference skeleton into one with a list of them.
Building from source gives me different behavior in outfit studio from what I see in the copy downloaded from nexus.
When I open Skyrim\Data\meshes\clothes\prisoner\prisonerclothes_f_1.nif from outfit studio built from source, I get 20 message boxes from this code:
bool AnimInfo::LoadFromNif(NifFile* nif, const string& shape) {
vector<string> bonenames;
vector<int> boneIndices;
//vector<int> boneids;
//vector<AnimBone> tmpbonelist;
if (!nif->GetShapeBoneList(shape, bonenames))
return false;
int slot = 0;
for (auto bn: bonenames) {
if (!AnimSkeleton::getInstance().RefBone(bn)) {
AnimBone& cstm = AnimSkeleton::getInstance().AddBone(bn, true);
if (!cstm.isValidBone) {
wxMessageBox("Referenced bone not found in skeleton, skipping: " + bn, "Invalid Bone");
continue;
}
...
There might be two problems here. One in the behavior of the code, the other in the phrasing of the messsage box message.
The .AddBone() method is the source of the invalid cstm values. But .AddBone() is just searching an empty tree for them. Perhaps supposed to be adding an empty AnimBone of that name which will then have content plugged in. If this were the case, though, that message box message would be misleading.
The bones are present in the nif argument to this method, and this looks like the code which is trying to fill in the animskeleton values.
(Alternatively, maybe an earlier bit of processing was supposed to fill that tree with bone nodes. But if that were the case, I don't know what this code is for.)
Add a hotkey that brings up a dialog to adjust the position of only the currently select vertex, ignoring the mask.
Add radius/strength options for copying bone weights to make it work better and customizable for different types of shapes.
When a reference template load didn't succeed (XML, shape or else doesn't exist), show an error message.
Non-global skin transforms:
Shapes that depend on transforms baked into the individual bones in the NiSkinData to be displayed correctly, will have an offset in Outfit Studio due to it not normalizing them.
They have to be applied to the vertices and taken from the reference skeleton again (?).
Need a way to apply a new diffuse texture from the "Set Textures" dialog to the mesh in the Outfit Studio view. Button to copy diffuse path to OS image path?
Add "Apply Sliders" message that appears when using a slider while the base shape has been edited to the "Load Slider Preset" function as well. Might fix some possible bugs or not.
When editing a shape and using a zap in BodySlide that has been created before the edit, the program crashes in some cases.
The texture paths (diffuse, specular, normal, etc.) can be trimmed for the texture set when a NIF is loaded into Outfit Studio to prevent texture loading issues and clean the mesh up in general.
Cut "Data", if that equals the first 5 characters of the string.
To make it easier to work with files in multiple locations, the individual file browser dialogs should use different default paths.
Additionally, the load project path should default to BodySlide\SliderSets, the save preset path to BodySlide\SliderPresets and the save group path to BodySlide\SliderGroups.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.