OpenBRF

From Mount&Blade Modding Wiki
Jump to: navigation, search

OpenBRF is the cornerstone of the Mount&Blade modding. Made by Marco Tarini (mtarini) originally made with The Last Days of the Third Age module in mind (the Lord of the Ring based one). He was developing it inside of that community, but after some early revisions the tool was made public. It is meant to be used to preview and edit BRF files (Binary Resource Files), i.e. most content of the game (e.g. meshes and animations).

Contents

[edit] Story

It was originally developed as an internal tool within the The Last Days Mod team. Marco, who helped them programming shaders, beautifying the map, in complex tweaking and posting general advices and suggestions. Seeing the potential of such a tool, decided to release it publically as an open source tool, hence the name.

Once its public release was announced in the Official Forums, it was received with expectation, good critics and a mare magnum of suggestions, slow but steady Marco began to add features from animation support to vertex coloring, investigating Warband's format with zero documentation from part of the TaleWorlds developers, today has been accepted as the de-facto tool by the Mount&Blade modding scene.

[edit] Features

[edit] Basic Features

[edit] Loading & saving:

  • Loads and saves all contents of BRF files:
  1. Meshes (including vertex-animated & rigged)
  2. Collision objects (including spheres capsules manifold & faces...)
  3. Textures, Materials, Shaders
  4. Skeletons, Skeletal-animations.
  • Compatibility:
  1. M&B ver 1.011 complaint.
  2. Back compatibility with M&B .808 BRF files (load only).
  3. "Forward" compatibility with Warband BRF files (save/load).

[edit] Viewing:

  • Meshes, Collision objects, Skeletons, Skel-animations, Texture and Material:
    Shown in 3D view (using, as appropriate, textures, wireframe, per-vertex color, animations, customizable skins, alpha channel, xrays -- for collision objects, etc)
  • All attributes for all objects (e.g. flags, numbers and strings) are shown in the GUI.
  • navigation mode (WASD) for interiors; custom view orientation for helmets.
  • "side-to-side" or "combined" modes for viewing multiple selections.

[edit] Importing & exporting:

  • Meshes exported/imported in: obj (including multi-material), ply, dxf (autocad), dae (collada), off.

(not all formats allow to export vertex colors or normals. Normals are recomputed if missing).

  • Rigged meshes, Skeletal-Animations: export/import as SMD (or maya .ma, experimental)
  • Skeletons: export/import as SMD -- also, export/import as a control (static) mesh
  • Vertex-animated meshes: export/import as MD3 or as separate frames,
  • Collision bodies: export/import as multiple-object obj (notes on usage: see this info)

[edit] Basic editing:

  • Direct editing of any attribute of any object (e.g. flags).
  • Group edits: multiple-select objects to view or edit them all in one go (e.g. renaming a group will edit prefixes)
  • Cut, copy and paste objects to easily move them from a brf file to another.
  • Remove, rename, duplicate objects; sort them or move them up and down in the list
  • Search for objects, or module inconsistencies.

[edit] Tools for skeletons/rigging/skeletal-animation

[edit] Autobreak-up of animations into sub-sequences:

(useful for for long sequence of animations listed as a single one). Animation can be either auto-split, by dividing chunks separated by large gaps in frame numeration, or split by following an action.txt file (in this case, a new action.txt is also produced, which refers the new split animations. The original action.txt file is kept intact -- just for safety).

     How-to: Just right click on an animation in the list.

[edit] Customizable skinning to view animations:

Rigged meshes can be enlisted to compose "skins". Skins are sets of user-selected rigged meshes which are used by OpenBrf to display skeletal-animations. Similarly, animations can be set as "reference animations" so that you can see your rigged meshes under that animation. Skins can also be used to export animations/rigged meshes/skeletons.

How-to:

  1. Right click on the mesh to add it to a skin, or on an animation to use it as a "reference" animation.
  2. Reference objects (skeletons, animations, models) are auto-saved but you can also edit them directly (tools=>edit reference models).

[edit] Simplified skeleton retouching through meshes:

This is to allow edits of the skeleton w/o using an animation program (small thing, mostly for myself). First, export a "skeleton modification mesh", which is just a static mesh (e.g. obj) featuring the bones. Then, edit the resulting mesh using any 3D editor; don't change bone size, number or shape: only their orientation and positions. Then, you use that mesh to modify the skeleton, and openBRF will modify just bone positions/orientation, keeping all else, like bone names, bone connections etc.

[edit] Reskeletonize tool for rigged meshes:

This can be used to go from a mesh rigged for skeleton A to make a new mesh rigged for skeleton B. (if the two skeletons are similar enough). The mesh will deform to adapt to the new skeleton. This is not supposed to be perfect, but can be a start for further editing. Optionally, the deformed mesh can be placed as a frame to the original body mesh (you know, just how natives hides feminine version of armor shapes in subsequent frames).

[edit] Transfer rigging from a mesh to another:

to transfer rigging from a rigged "exemplar" mesh to one or more target (usually non rigged) mesh (Similar to "obj2smd" program.).
How to:  
#select one or more exemplar meshes, 
#copy [ctrl+C], 
#select one or more target mesh, 
#"edit" -> "paste rigging"

[edit] Transfer timings:

to transfer timings (times per frame): as above, but use "paste timings"

[edit] Tools for 3D meshes:

[edit] Renormalize and merge tool:

Recomputes the normal of the mesh + merges together positions and vertices, so that the data is more compact and rendering efficient. You can see the number of vertices and positions go down in the "data" box. There is also an option to automatically perform either of these operations after import.

[edit] Redefine hard-edges:

hard edges (normal discontinuities) can also be redefined using a custom crease-angle parameter, with the above tool. Texture seams can be preserved or ignored.

[edit] "Feminization" of outfits:

you can pick an armor/outfit of your mod and make OpenBRF build the feminine version of it (it will be added as another frame of that mesh, just like the game wants).

[edit] Rescale-rotote-translate-mirror-etc, meshes:

just as the name says.

[edit] Ruler tool:

designed to pinpoint the precise reach of weapons [Fei Dao suggestion]

[edit] Combine meshes tool:

makes one mesh from many (works with static, vertex-animated, rigged meshes alike).

[edit] Back-faces:

add them (creates x2 faces), or remove them. Useful for flat impostors that must be seen from both sides.

[edit] Recoloring:

(i.e. per vertex colors support). Assign a uniform color, tune hue-saturation-brightness-contrast of existing colors.

[edit] Ambient occlusion:

computes ambient occlusions and stores it as per vertex color. Adds a lot of realism cheap and fast to your meshes. A few parameters (darkness, and light dispositions) can be tuned under "settings".

[edit] Tangent direction computations:

tang. dirs, which are needed for bumpmapping, can be computed over your meshes (they can be saved only as WarBand BRF).

[edit] LoDs computation:

OpenBRF can build lod's (level of details) for your meshes, progressively simplifying them by automatic polygonal reduction. Under "settings", you can customize which lod are produced, and how much polygonal reduction should take place.


[edit] Tools for Collision Objects:

[edit] Smart Import/exports of subparts:

To make collision objects using the efficient "sphere" and "capsules" primitive. See more info [here]

[edit] Auto-quadrangolized:

to turn a triangle-based Collision Object to a more efficient Quad-dominant one (because, in game, it is better to use fewer quads than more triangles).

[edit] Smart visualization:

"X-rays" style.

[edit] Scale/translate/rotate/mirror/merge:

Of Collision objects.

[edit] Build from mesh:

Turn a mesh (or a group of meshes) into a collision object:==== (note: it better be closed, and appropriately low res).


[edit] Tools for Materials/Textures:

[edit] Editing of multiple materials/meshes:

Just make a multiple selection and edit flags, texture names, etc.

[edit] Direct flag editing:

Of material, textures.

[edit] Texture data:

openBRF will tell you everything about resolution, mipmap level, compression mode, disk size, location (module or common folder) etc of your textures.

[edit] Mini-"can't find texture" diagnostics:

If openBRF is not able to show textures, for whatever reason, it shows a checkboard replacement and offer a mini-diagnostic under settings

[edit] Material rendering:

openBRF will try to guess rendering of a material (shininess, transparency, cutouts...) when rendering a material over a mesh. Normalmap and specular maps too.


[edit] Tools for vertex animations:

[edit] Frame stacking:

vertex animation are build stacking each frame separately.

You can import them separately, or use the cut-frame, copy-frame, paste-frame operations (under "edit"). Either way, you can choose one of two algorithms in order to actually assemble the animation (make your choice under "settings" menu): either you trust the vertex order of your mesh, or you distinguish vertices by their vertex coordinates. More info in this post.

[edit] Direct import/export:

As MD2 files

[edit] Copy timings:

To transfer per-frame timings from an ani to another (select first animation, copy it (ctrl+C), select second ani, "edit"->"paste timings".


[edit] Module management:

[edit] Fast ini loading:

to make a quick auto-scan of the entire dataset as described in the ini- file (i.e.\ read all the included brf files for further references).

[edit] Module navigation:

to jump from a mesh to its material and from a material to its textures/shader (and back). Use Ctrl-arrows (left/right), or click on labels (e.g. "Material") in the panel.

[edit] "Used-by" submenu:

(the opposite of the above): you can see all other objects using an object (and load them if you want). The same menu shows all txt files making any use of that object, directly or indirectly (txt files are the one the games loads when it loads your module) .

[edit] Autocompletion:

of texture names, etc. Also, after you copy an object (ctrl-C), you can paste its name (ctrl-V) in a text box (you can still paste the object itself in the object list, to move it from a brf file to another).

[edit] Verify-module tool:

to scan the entire module for errors and inconsistencies: missing texture, doubled item, meshes using unknown material,wrong brf order in ini file. It's in the "module" menu. [HokieBT and Dain Ironfoot suggestion]

[edit] Search:

to look for objects with a certain string in the name [HokieBT and Darwin suggestion]

[edit] Scanning of txt:

so that OpenBRF knows what Meshes, Matrerials, Skeletons... etc your module is using. Objects are color coded accordingly. More info [here]

[edit] "Follow used":

to jump from a mesh to its material and from a material to its textures/shader (and back). Use Ctrl-arrows (left/right), or click on labels (e.g. "Material") in the panel.

[edit] Show unreferenced DDS tool:

to see what texture files (DDS and TIFs) are sitting on the hard drive unused.

[edit] Dump module content from prompt:

if you run it from the command line (or a batch file) like this: OpenBRF.exe --dump <module_path> <file.txt> then OpenBRF will not open the GUI, but instead it will dump an easy-to-parse text file with the names of all the meshes, materials, animations... etc found in the BRF files which are listed in the ini of the module. This is intended to be used by other mod tools, e.g. to add auto-completion or error checking.

[edit] Links

Official Board in TaleWorlds Forums: http://forums.taleworlds.com/index.php/board,215.0.html
Download Link and Updated Information: http://forums.taleworlds.com/index.php?topic=72279.0