Coder Social home page Coder Social logo

ousnius / bodyslide-and-outfit-studio Goto Github PK

View Code? Open in Web Editor NEW
287.0 287.0 64.0 16.17 MB

BodySlide and Outfit Studio, a tool to convert, create, and customize outfits and bodies for Bethesda games.

License: GNU General Public License v3.0

GLSL 0.70% C++ 85.49% C 13.75% CMake 0.06% Batchfile 0.01%
c-plus-plus modding opengl

bodyslide-and-outfit-studio's People

Contributors

andrew-boyarshin avatar caliente8 avatar candoran2 avatar daz001 avatar enpinion avatar guekka avatar orxx avatar ousnius avatar silentdark avatar sts1skj avatar zeule avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bodyslide-and-outfit-studio's Issues

OBJ Import/Export Bugs

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.

Show position of vertex

With any transform brush active, show the position of the currently focused vertex at the bottom right.

Adjust default brush settings

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?).

Bone scaling preview

A slider that scales a selected bone up/down to check for weighting quality or clipping would be useful.

Add "Transfer Selected Weights"

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.

"Clear Mask" clears weight colors

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).

Copying weights to unmasked vertices

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.

Preview of Rotate Shape

The Rotate Shape dialog needs a preview option like the move/scale dialogs.
Can be done using virtual rotations that are cleared afterwards.

Renaming shapes with unusual slider data naming

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.

Add shape name to template loading

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.

Rotate Shape (Virtual)

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.

Show mask value of vertex

When painting a mask, show the mask value of the currently focused vertex at the bottom right, just like with the weight values.

Save Project keeps deleted bone nodes of reference

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.

Load Textures from BSA

When a loose texture is not found, search all *.BSA in Skyrim\Data for the texture and load it.

Over 100 sliders

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

Add "Smooth Weight" Brush

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)

Build all slider data as TRI files for RaceMenu

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.

Settings Menu

Add settings menu, accessible from both the BodySlide and Outfit Studio frames.

Examples:

  • field of view
  • rebinding zoom, rotation and translation controls
  • current config.xml settings

build notes

This could use some notes on external dependencies.

For example: which version of wxWidgets are you using?

HDT PE Nodes

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).

"Show Mask" affects bone weight colors

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.

Save Project As dialog file names

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".

mishandled bones

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 single-vertex moving

Add a hotkey that brings up a dialog to adjust the position of only the currently select vertex, ignoring the mask.

Skin Transforms

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 (?).

Apply texture from "Set Textures"

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?

Zapping a shape edited later on

When editing a shape and using a zap in BodySlide that has been created before the edit, the program crashes in some cases.

  • Vertex order/count/position?
  • Weighting?
  • UV?

Trim texture paths when loading NIF

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.

Separate paths for file browser dialogs

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.