From e2c0c42d88c27124d1e127f0709eea5f8d05758f Mon Sep 17 00:00:00 2001 From: SleepKiller Date: Fri, 22 Nov 2019 02:42:49 +1300 Subject: [PATCH] update readme --- README.md | 26 +++++++++++++++++------- docs/images/blender_addon_installed.png | Bin 0 -> 28421 bytes 2 files changed, 19 insertions(+), 7 deletions(-) create mode 100644 docs/images/blender_addon_installed.png diff --git a/README.md b/README.md index f254e17..3fa8c4a 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,32 @@ # SWBF-msh-Blender-Export WIP .msh (SWBF toolchain version) exporter for Blender 2.8 -Currently capable of exporting the active scene without collision primitives or skinning information. +Currently capable of exporting the active scene without skinning information. ### Installing +You install it like any other Blender addon, if you already know how to do that then great! Grab the [latest release](https://github.com/SleepKiller/SWBF-msh-Blender-Export/releases/latest) (or if you're the adventerous type [clone from source](https://github.com/SleepKiller/SWBF-msh-Blender-Export/archive/master.zip)) and you'll be good to go. -> TODO: Install instructions. +However if you don't know how to install then read on! + +These instructions are going to be for Windows. If you're on a different platform I'm sure some quick web searching can help provide you with answers. + +First download and extract the addon [latest release](https://github.com/SleepKiller/SWBF-msh-Blender-Export/releases/latest). + +Then open up Explorer and paste `%USERPROFILE%\AppData\Roaming\Blender Foundation\Blender\2.80\` into it's address bar. Then go into the `scripts` folder in that directory and copy the `addons` folder from the extracted addon into the scripts folder. + +Next open up Blender, go into Edit > Preferences > Addons. Select "Community" tab and then search for ".msh". "Import-Export: SWBF .msh export" should come up, check the box next to it. The preferences window should look like this once you're done. + +![Installed addon.](docs/images/blender_addon_installed.png) + +If you've done that then the addon is installed and you should now find "SWBF msh" listed under Blender's export options. + +### Reference Manual +Included in the repository is a [Reference Manual](https://github.com/SleepKiller/SWBF-msh-Blender-Export/blob/master/docs/reference_manual.md#reference-manual) of sorts. There is no need to read through it before using the addon but anytime you have a question about how something works or why an export failed it should hopefully have the answers. ### Work to be done -- [x] Raise an error when a .msh segment has more than 32767 vertices. -- [x] Convert from Blender's coordinate space to .msh cooordinate space. -- [x] Add support for exporting materials. Blender's materials are all based around it's own renderers, so possibly going to need custom UI and properties in order to provide something useful for .msh files. -- [x] Add support for collision primitives. Blender doesn't seam to support having basic boxes, cylinders or spheres so it's likely some wacky rules and conventions will need to be used by the modeler. "Add a 1m mesh primitive, have "sphere/box/cylinder" in the name and control the size with the object's scale." Less intuitive than I'd like but it might be the best course of action. - [ ] Investigate and add support for exporting bones and vertex weights. - [ ] Investigate and add support for exporting animations. -- [ ] Investigate if anything special needs to be done for lod/lowres exporting. +- [ ] Investigate and add support for editing and exporting SWBF2 cloth. - [ ] Implement .msh importing. Currently you can use the 1.2 release of [swbf-unmunge](releases/tag/v1.2.0) to save out munged models to glTF 2.0 files if you need to open a model in Blender. ### What from [glTF-Blender-IO](https://github.com/KhronosGroup/glTF-Blender-IO) was used? diff --git a/docs/images/blender_addon_installed.png b/docs/images/blender_addon_installed.png new file mode 100644 index 0000000000000000000000000000000000000000..0c3d47e608e150b1975a34341bfea10bf46c137d GIT binary patch literal 28421 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 XU+9UrtrLxd&!%zY