Introduction

landon is a collection of heavily unit and integration tested tooling, data structures and methods for exporting data (such as meshes and armatures) from blender preparing it for your rendering pipeline.

A typical landon workflow involves running the mesh/armature data export scripts (optionally supplemented with your own Python scripts) from Blender via the CLI or Rust API.

All export scripts write json stdout.

landon provides APIs to parse this data from stdout into Rust structs - but you can also read the JSON output yourself if you don't use Rust.


#![allow(unused_variables)]
fn main() {
// Parsing exported landon data via the Rust API.
// Rust is not required - you can read the exported JSON data with any programming language.
let meshes = blender_mesh::parse_meshes_from_blender_stdout(&blender_stdout);
let armatures = blender_armature::parse_armatures_from_blender_stdout(&blender_stdout);
}

landon can export data that most other exporters typically don't, such as custom mesh properties and bone groups.

Goals

  • Make it as easy as possible to take something from Blender and render it in your application without straying from the raw Blender data
    • We favor exporting the data from Blender as is and then providing APIs to transform it in the different ways that you might like.

Example Use Cases

Some examples of things that landon might help you do include:

  • Export all of the meshes in a .blend file into a collection of BlenderMesh's and call methods to get the vertex data such as positions, uvs and normals from that BlenderMesh.

  • Export all of the armatures in a .blend file and call methods to get the interpolated joint data at a certain keyframe to power your skeletal animation.

Landon CLI

The landon CLI wraps landon's Rust API in order to provide common functionality via a command line interface.

This chapter walks through different example use cases.

Installation

cargo install -f landon

landon install --mesh-to-json --armature-to-json --ik-to-fk

landon --help

Chapter Structure

The chapter walks through real examples of exporting data from Blender files.

Examples provide curl commands to download Blender files to the /tmp directory, but these files are also available offline by cloning the Landon repository.

git clone git@github.com:chinedufn/landon.git
cd landon

Exporting data

The landon export command exports meshes and armatures from any number of Blender files.

The export format

A Blender process writes to stdout when it is opened and after running certain commands, so in order to export data to stdout we must find the exported data within stdout.

To make this easy, each exported JSON mesh or armature is marked with a header and a footer.

BASIC_CUBE=/tmp/basic_cube.blend

# OFFLINE_BASIC_CUBE=crates/blender-export-test/src/tests/basic_cube.blend
# cp $OFFLINE_BASIC_CUBE $BASIC_CUBE

ONLINE_BASIC_CUBE='https://github.com/chinedufn/landon/blob/master/crates/blender-export-test/src/tests/basic_cube.blend?raw=true'
curl -L $ONLINE_BASIC_CUBE > $BASIC_CUBE
landon export -f $BASIC_CUBE

The output for this command would be similar to:

Blender 2.82 (sub 7) (hash 375c7dc4caf4 built 2020-03-12 05:31:51) Read prefs: /Users/muusername/Library/Application Support/Blender/2.82/config/userpref.blend found bundled python: /Applications/blender.app/Contents/Resources/2.82/python Read blend: /tmp/basic_cube.blend START_MESH_JSON /tmp/basic_cube.blend Cube {"attribs": {"vertices_in_each_face": [4, 4, 4, 4, 4, 4], "positions": {"indices": [0, 1, 2, 3, 4, 7, 6, 5, 0, 4, 5, 1, 1, 5, 6, 2, 2, 6, 7, 3, 4, 0, 3, 7], "attribute": {"data": [1.0, 0.9999999403953552, -1.0, 1.0, -1.0, -1.0, -1.0000001192092896, -0.9999998211860657, -1.0, -0.9999996423721313, 1.0000003576278687, -1.0, 1.0000004768371582, 0.999999463558197, 1.0, 0.9999993443489075, -1.0000005960464478, 1.0, -1.0000003576278687, -0.9999996423721313, 1.0, -0.9999999403953552, 1.0, 1.0], "attribute_size": 3}}, "normals": {"indices": [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5], "attribute": {"data": [0.0, 0.0, -1.0, 0.0, -0.0, 1.0, 1.0, -2.8312206268310547e-07, 4.470341252726939e-08, -2.8312206268310547e-07, -1.0, -1.0430819230577981e-07, -1.0, 2.2351744632942427e-07, -1.341104365337742e-07, 2.384185791015625e-07, 1.0, 2.086162567138672e-07], "attribute_size": 3}}, "uvs": null, "bone_influences": null}, "armature_name": null, "bounding_box": {"min_corner": [-1.7881393432617188e-07, -2.980232238769531e-07, 0.0], "max_corner": [1.000000238418579, 1.000000238418579, 1.0]}, "materials": {}, "custom_properties": {}} END_MESH_JSON /tmp/basic_cube.blend Cube Blender quit

NOTE: The Parse chapter will describe how to easily extract this data via the CLI

Headers

Note the START_MESH_JSON and END_MESH_JSON lines wrapping the exported JSON.

Each data type is wrapped in its own header/footer of a similar format.

Data typeHeaderFooter
MeshSTART_MESH_JSONEND_MESH_JSON
ArmatureSTART_ARMATURE_JSONEND_ARMATURE_JSON

Multiple Files

landon can export from any number of Blender files by repeating the -f (--file) flag.

landon export -f some-file.blend --file another-file.blend

Writing to stdout

By default the CLI writes to stdout.

landon export -f some-file.blend | grep START_MESH_JSON

Writing to a file

To write to a file simply pipe the stdout to a file.

landon export -f some-file.blend > /tmp/some-file

Parsing exported data

The landon parse command parses data that was exported from Blender into JSON.

landon parse --help

Parsing Example

BASIC_CUBE=basic_cube.blend
BASIC_CUBE_FILE=/tmp/basic_cube.blend

# OFFLINE_BASIC_CUBE="crates/blender-export-test/src/tests/$BASIC_CUBE"
# cp $OFFLINE_BASIC_CUBE $BASIC_CUBE_FILE

ONLINE_BASIC_CUBE="https://github.com/chinedufn/landon/blob/master/crates/blender-export-test/src/tests/$BASIC_CUBE?raw=true"
curl -L $ONLINE_BASIC_CUBE > $BASIC_CUBE_FILE
SKINNED_LETTER_F=skinned_letter_f.blend
SKINNED_LETTER_F_FILE="/tmp/$SKINNED_LETTER_F"

# OFFLINE_SKINNED_LETTER_F="crates/blender-export-test/src/tests/$SKINNED_LETTER_F"
# cp $OFFLINE_SKINNED_LETTER_F $SKINNED_LETTER_F_FILE

ONLINE_SKINNED_LETTER_F="https://github.com/chinedufn/landon/blob/master/crates/blender-export-test/src/tests/$SKINNED_LETTER_F?raw=true"
curl -L $ONLINE_SKINNED_LETTER_F > $SKINNED_LETTER_F_FILE

Parsing from stdin

By default the landon parse command reads data from stdin and writes to stdout.

landon export -f $BASIC_CUBE_FILE -f $SKINNED_LETTER_F_FILE | landon parse

# {"meshes":{"/tmp/skinned_letter_f.blend":{"LetterF":{"armature_name":"LetterFArmature","bounding_box":{"min_corner":[-0.5135834,-0.12500007,0.0],"max_corner":[0.12500006,0.12500012,1.0]},"multi_indexed_vertex_attributes":{"vertices_in_each_face":[4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4],"positions":{"indices":[79,83,2,3,87,7,6,91,12,4,5,13,107,91,6,14,61,60,31,29,201,79,3,145,103,95,11,15,18,10,11,19,111,99,10,18,16,8,9,17,87,103,15,7,10,14,15,11,99,107,14,10,8,12,13,9,20,16,17,21,119,111,18,22,38,37,26,27,95,115,19,11,144,22,23,151,173,119,22,144,130,20,21,137,115,123,23,19,24,25,27,26,37,49,24,26,50,38,27,25,49,50,25,24,28,29,31,30,60,70,30,31,70,75,28,30,75,61,29,28,22,18,55,44,44,55,54,45,45,54,53,46,46,53,52,47,47,52,51,48,48,51,50,49,18,19,43,55,55,43,42,54,54,42,41,53,53,41,40,52,52,40,39,51,51,39,38,50,23,22,44,32,32,44,45,33,33,45,46,34,34,46,47,35,35,47,48,36,36,48,49,37,19,23,32,43,43,32,33,42,42,33,34,41,41,34,35,40,40,35,36,39,39,36,37,38,14,6,65,71,71,65,64,72,72,64,63,73,73,63,62,74,74,62,61,75,15,14,71,66,66,71,72,67,67,72,73,68,68,73,74,69,69,74,75,70,7,15,66,56,56,66,67,57,57,67,68,58,58,68,69,59,59,69,70,60,6,7,56,65,65,56,57,64,64,57,58,63,63,58,59,62,62,59,60,61,16,20,120,112,112,120,121,113,113,121,122,114,114,122,123,115,137,21,116,152,152,116,117,159,159,117,118,166,166,118,119,173,8,16,112,92,92,112,113,93,93,113,114,94,94,114,115,95,21,17,108,116,116,108,109,117,117,109,110,118,118,110,111,119,9,13,104,96,96,104,105,97,97,105,106,98,98,106,107,99,4,12,100,84,84,100,101,85,85,101,102,86,86,102,103,87,17,9,96,108,108,96,97,109,109,97,98,110,110,98,99,111,12,8,92,100,100,92,93,101,101,93,94,102,102,94,95,103,124,0,76,180,180,76,77,187,187,77,78,194,194,78,79,201,13,5,88,104,104,88,89,105,105,89,90,106,106,90,91,107,4,84,88,5,84,85,89,88,85,86,90,89,86,87,91,90,0,1,80,76,76,80,81,77,77,81,82,78,78,82,83,79,122,200,207,123,200,199,206,207,199,198,205,206,198,197,204,205,197,196,203,204,196,195,202,203,195,194,201,202,121,193,200,122,193,192,199,200,192,191,198,199,191,190,197,198,190,189,196,197,189,188,195,196,188,187,194,195,120,186,193,121,186,185,192,193,185,184,191,192,184,183,190,191,183,182,189,190,182,181,188,189,181,180,187,188,20,130,186,120,130,129,185,186,129,128,184,185,128,127,183,184,127,126,182,183,126,125,181,182,125,124,180,181,82,172,179,83,172,171,178,179,171,170,177,178,170,169,176,177,169,168,175,176,168,167,174,175,167,166,173,174,81,165,172,82,165,164,171,172,164,163,170,171,163,162,169,170,162,161,168,169,161,160,167,168,160,159,166,167,80,158,165,81,158,157,164,165,157,156,163,164,156,155,162,163,155,154,161,162,154,153,160,161,153,152,159,160,1,131,158,80,131,132,157,158,132,133,156,157,133,134,155,156,134,135,154,155,135,136,153,154,136,137,152,153,0,124,131,1,124,125,132,131,125,126,133,132,126,127,134,133,127,128,135,134,128,129,136,135,129,130,137,136,83,179,138,2,179,178,139,138,178,177,140,139,177,176,141,140,176,175,142,141,175,174,143,142,174,173,144,143,2,138,145,3,138,139,146,145,139,140,147,146,140,141,148,147,141,142,149,148,142,143,150,149,143,144,151,150,123,207,151,23,207,206,150,151,206,205,149,150,205,204,148,149,204,203,147,148,203,202,146,147,202,201,145,146],"attribute":{"data":[0.125,0.12499999,0.0,0.125,-0.125,0.0,-0.12500001,-0.12499998,0.0,-0.124999955,0.12500004,0.0,0.12500006,0.12499993,1.0,0.12499992,-0.12500007,1.0,-0.12500004,-0.124999955,1.0,-0.12499999,0.125,1.0,0.12500004,0.12499995,0.79263926,0.12499993,-0.12500006,0.79263926,-0.12500004,-0.12499996,0.79263926,-0.124999985,0.12500001,0.79263926,0.12500006,0.12499994,0.8963196,0.124999925,-0.12500006,0.8963196,-0.12500004,-0.124999955,0.8963196,-0.124999985,0.125,0.8963196,0.12500004,0.124999955,0.66119784,0.12499995,-0.12500004,0.66119784,-0.12500004,-0.12499996,0.66119784,-0.12499998,0.12500001,0.66119784,0.12500004,0.12499996,0.5595808,0.124999955,-0.12500004,0.5595808,-0.12500004,-0.12499996,0.5595808,-0.12499998,0.12500001,0.5595808,-0.50342923,-0.12499996,0.5595808,-0.50342923,-0.12499996,0.66119784,-0.5034292,0.12500001,0.5595808,-0.5034292,0.12500001,0.66119784,-0.5135834,-0.124999836,0.8963196,-0.5135834,-0.124999836,1.0,-0.51358336,0.12500012,0.8963196,-0.51358336,0.12500012,1.0,-0.1790613,0.12500001,0.5595808,-0.23312262,0.12500001,0.5595808,-0.28718394,0.12500001,0.5595808,-0.34124523,0.12500001,0.5595808,-0.39530656,0.12500001,0.5595808,-0.44936788,0.12500001,0.5595808,-0.44936785,0.12500001,0.66119784,-0.39530653,0.12500001,0.66119784,-0.3412452,0.12500001,0.66119784,-0.28718388,0.12500001,0.66119784,-0.23312257,0.12500001,0.66119784,-0.17906128,0.12500001,0.66119784,-0.17906135,-0.12499996,0.5595808,-0.23312268,-0.12499996,0.5595808,-0.287184,-0.12499996,0.5595808,-0.3412453,-0.12499996,0.5595808,-0.39530662,-0.12499996,0.5595808,-0.44936794,-0.12499996,0.5595808,-0.4493679,-0.12499996,0.66119784,-0.3953066,-0.12499996,0.66119784,-0.3412453,-0.12499996,0.66119784,-0.28718397,-0.12499996,0.66119784,-0.23312266,-0.12499996,0.66119784,-0.17906135,-0.12499996,0.66119784,-0.18976389,0.12500001,1.0,-0.25452778,0.12500003,1.0,-0.31929168,0.12500006,1.0,-0.38405558,0.12500007,1.0,-0.44881946,0.12500009,1.0,-0.44881952,-0.12499986,1.0,-0.3840556,-0.12499988,1.0,-0.3192917,-0.124999896,1.0,-0.2545278,-0.12499992,1.0,-0.18976393,-0.12499994,1.0,-0.18976387,0.12500001,0.8963196,-0.25452778,0.12500003,0.8963196,-0.31929168,0.12500006,0.8963196,-0.38405558,0.12500007,0.8963196,-0.44881946,0.12500009,0.8963196,-0.18976393,-0.12499993,0.8963196,-0.25452784,-0.12499991,0.8963196,-0.31929174,-0.124999896,0.8963196,-0.38405564,-0.12499987,0.8963196,-0.44881952,-0.12499985,0.8963196,0.075,0.125,0.0,0.025000013,0.12500001,0.0,-0.02499998,0.12500003,0.0,-0.07499997,0.12500003,0.0,0.075,-0.12499999,0.0,0.024999999,-0.124999985,0.0,-0.025000006,-0.124999985,0.0,-0.07500001,-0.124999985,0.0,0.07500005,0.12499995,1.0,0.025000036,0.12499996,1.0,-0.024999976,0.12499998,1.0,-0.07499999,0.124999985,1.0,0.07499993,-0.12500004,1.0,0.024999935,-0.12500003,1.0,-0.025000058,-0.125,1.0,-0.07500005,-0.12499998,1.0,0.07500003,0.12499996,0.79263926,0.025000028,0.12499998,0.79263926,-0.024999976,0.12499999,0.79263926,-0.07499998,0.125,0.79263926,0.07499994,-0.12500004,0.79263926,0.024999946,-0.12500003,0.79263926,-0.02500005,-0.125,0.79263926,-0.07500005,-0.124999985,0.79263926,0.07500005,0.124999955,0.8963196,0.02500004,0.12499997,0.8963196,-0.024999969,0.12499998,0.8963196,-0.07499997,0.124999985,0.8963196,0.07499993,-0.12500004,0.8963196,0.024999935,-0.12500003,0.8963196,-0.025000058,-0.125,0.8963196,-0.07500005,-0.12499998,0.8963196,0.07499994,-0.12500003,0.66119784,0.024999946,-0.12500001,0.66119784,-0.02500005,-0.125,0.66119784,-0.07500005,-0.124999985,0.66119784,0.07500003,0.12499997,0.66119784,0.025000028,0.124999985,0.66119784,-0.024999976,0.12499999,0.66119784,-0.07499997,0.125,0.66119784,0.07499996,-0.12500003,0.5595808,0.024999958,-0.12500001,0.5595808,-0.025000047,-0.125,0.5595808,-0.07500005,-0.124999985,0.5595808,0.07500003,0.12499997,0.5595808,0.025000028,0.124999985,0.5595808,-0.024999976,0.12499999,0.5595808,-0.07499997,0.125,0.5595808,0.125,0.124999985,0.0699476,0.125,0.124999985,0.1398952,0.125,0.124999985,0.2098428,0.12500001,0.12499998,0.2797904,0.12500003,0.12499997,0.349738,0.12500003,0.12499997,0.4196856,0.12500003,0.12499997,0.4896332,0.12499999,-0.125,0.0699476,0.124999985,-0.125,0.1398952,0.12499998,-0.125,0.2098428,0.12499997,-0.12500001,0.2797904,0.12499997,-0.12500003,0.349738,0.12499996,-0.12500003,0.4196856,0.124999955,-0.12500003,0.4896332,-0.12500001,-0.12499998,0.0699476,-0.12500001,-0.12499998,0.1398952,-0.12500001,-0.12499998,0.2098428,-0.12500001,-0.12499998,0.2797904,-0.12500003,-0.12499997,0.349738,-0.12500003,-0.12499997,0.4196856,-0.12500003,-0.12499997,0.4896332,-0.124999955,0.12500004,0.0699476,-0.124999955,0.12500004,0.1398952,-0.124999955,0.12500004,0.2098428,-0.12499996,0.12500004,0.2797904,-0.12499997,0.12500003,0.349738,-0.12499997,0.12500003,0.4196856,-0.12499997,0.12500003,0.4896332,0.074999966,-0.12500003,0.4896332,0.07499997,-0.12500003,0.4196856,0.07499998,-0.12500003,0.349738,0.07499999,-0.12500003,0.2797904,0.07499999,-0.12500001,0.2098428,0.074999996,-0.125,0.1398952,0.075,-0.125,0.0699476,0.024999963,-0.12500001,0.4896332,0.024999969,-0.12500001,0.4196856,0.024999974,-0.12500001,0.349738,0.02499998,-0.12500001,0.2797904,0.024999984,-0.125,0.2098428,0.02499999,-0.12499999,0.1398952,0.024999995,-0.124999985,0.0699476,-0.025000041,-0.125,0.4896332,-0.025000036,-0.125,0.4196856,-0.02500003,-0.125,0.349738,-0.025000025,-0.125,0.2797904,-0.02500002,-0.125,0.2098428,-0.025000015,-0.12499999,0.1398952,-0.02500001,-0.124999985,0.0699476,-0.07500004,-0.124999985,0.4896332,-0.07500003,-0.124999985,0.4196856,-0.07500003,-0.124999985,0.349738,-0.075000025,-0.124999985,0.2797904,-0.07500002,-0.124999985,0.2098428,-0.07500002,-0.124999985,0.1398952,-0.07500002,-0.124999985,0.0699476,0.075,0.125,0.0699476,0.07500001,0.12499999,0.1398952,0.07500002,0.124999985,0.2098428,0.07500002,0.124999985,0.2797904,0.07500002,0.124999985,0.349738,0.075000025,0.12499998,0.4196856,0.07500003,0.12499997,0.4896332,0.025000015,0.12500001,0.0699476,0.025000017,0.12500001,0.1398952,0.025000019,0.12500001,0.2098428,0.02500002,0.12500001,0.2797904,0.025000023,0.125,0.349738,0.025000025,0.12499999,0.4196856,0.025000026,0.124999985,0.4896332,-0.02499998,0.12500003,0.0699476,-0.02499998,0.12500003,0.1398952,-0.02499998,0.12500003,0.2098428,-0.02499998,0.12500003,0.2797904,-0.02499998,0.12500001,0.349738,-0.024999978,0.125,0.4196856,-0.024999976,0.125,0.4896332,-0.07499997,0.12500003,0.0699476,-0.07499997,0.12500003,0.1398952,-0.07499997,0.12500003,0.2098428,-0.07499997,0.12500003,0.2797904,-0.07499997,0.12500003,0.349738,-0.07499997,0.12500001,0.4196856,-0.07499997,0.125,0.4896332],"attribute_size":3}},"normals":{"indices":[0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,22,22,22,22,23,23,23,23,24,24,24,24,25,25,25,25,26,26,26,26,27,27,27,27,28,28,28,28,29,29,29,29,30,30,30,30,31,31,31,31,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,64,65,65,65,65,66,66,66,66,67,67,67,67,68,68,68,68,69,69,69,69,70,70,70,70,71,71,71,71,72,72,72,72,73,73,73,73,74,74,74,74,75,75,75,75,76,76,76,76,77,77,77,77,78,78,78,78,79,79,79,79,80,80,80,80,81,81,81,81,82,82,82,82,83,83,83,83,84,84,84,84,85,85,85,85,86,86,86,86,87,87,87,87,88,88,88,88,89,89,89,89,90,90,90,90,91,91,91,91,92,92,92,92,93,93,93,93,94,94,94,94,95,95,95,95,96,96,96,96,97,97,97,97,98,98,98,98,99,99,99,99,100,100,100,100,101,101,101,101,102,102,102,102,103,103,103,103,104,104,104,104,105,105,105,105,106,106,106,106,107,107,107,107,108,108,108,108,109,109,109,109,110,110,110,110,111,111,111,111,112,112,112,112,113,113,113,113,114,114,114,114,115,115,115,115,116,116,116,116,117,117,117,117,118,118,118,118,119,119,119,119,120,120,120,120,121,121,121,121,122,122,122,122,123,123,123,123,124,124,124,124,125,125,125,125,126,126,126,126,127,127,127,127,128,128,128,128,129,129,129,129,130,130,130,130,131,131,131,131,132,132,132,132,133,133,133,133,134,134,134,134,135,135,135,135,136,136,136,136,137,137,137,137,138,138,138,138,139,139,139,139,140,140,140,140,141,141,141,141,142,142,142,142,143,143,143,143,144,144,144,144,145,145,145,145,146,146,146,146,147,147,147,147,148,148,148,148,149,149,149,149,150,150,150,150,151,151,151,151,152,152,152,152,153,153,153,153,154,154,154,154,155,155,155,155,156,156,156,156,157,157,157,157,158,158,158,158,159,159,159,159,160,160,160,160,161,161,161,161,162,162,162,162,163,163,163,163,164,164,164,164,165,165,165,165,166,166,166,166,167,167,167,167,168,168,168,168,169,169,169,169,170,170,170,170,171,171,171,171,172,172,172,172,173,173,173,173,174,174,174,174,175,175,175,175,176,176,176,176,177,177,177,177,178,178,178,178,179,179,179,179,180,180,180,180,181,181,181,181,182,182,182,182,183,183,183,183,184,184,184,184,185,185,185,185,186,186,186,186,187,187,187,187,188,188,188,188,189,189,189,189,190,190,190,190,191,191,191,191,192,192,192,192,193,193,193,193,194,194,194,194,195,195,195,195,196,196,196,196,197,197,197,197,198,198,198,198,199,199,199,199,200,200,200,200,201,201,201,201,202,202,202,202,203,203,203,203,204,204,204,204,205,205,205,205],"attribute":{"data":[0.0,0.0,-1.0,0.0,-0.0,1.0,1.0,-5.5134296e-7,3.5930526e-8,-4.4703484e-7,-1.0,0.0,-0.0,0.0,1.0,2.9802334e-7,1.0,0.0,2.9802317e-7,1.0,1.4372209e-7,-1.0,2.5331977e-7,-2.8341834e-8,-4.4703484e-7,-0.99999994,0.0,1.0,-4.172325e-7,5.668366e-8,2.9802317e-7,1.0,3.2124385e-14,-0.99999994,2.384186e-7,0.0,-4.4703484e-7,-1.0,7.1861045e-8,1.0,-4.917383e-7,-3.5930526e-8,0.99999994,-3.7252903e-7,3.6660094e-8,-4.4703486e-7,-1.0,0.0,-0.0,1.0,0.0,2.980232e-7,1.0,1.6893046e-14,-1.0,2.5331974e-7,-1.5977486e-7,-3.725291e-7,-1.0,5.3258244e-8,1.0,-3.2782555e-7,-1.065166e-7,2.9802322e-7,1.0,0.0,-1.0,2.384186e-7,0.0,0.0,0.0,-0.99999994,-0.0,0.0,1.0,0.0,-1.0,0.0,-0.99999994,2.384186e-7,0.0,4.6016874e-7,1.0,0.0,0.0,0.0,-1.0,-2.8760547e-7,-1.0,-3.593053e-8,0.0,-1.0,0.0,0.0,-1.0,0.0,0.0,-1.0,0.0,0.0,-1.0,0.0,0.0,-1.0,0.0,0.0,-1.0,0.0,-0.0,0.0,0.99999994,-0.0,0.0,1.0,-0.0,0.0,1.0,-0.0,0.0,1.0,-0.0,0.0,1.0,-0.0,0.0,1.0,0.0,0.0,-1.0,0.0,0.0,-1.0,0.0,0.0,-1.0,0.0,0.0,-0.99999994,0.0,0.0,-1.0,0.0,0.0,-1.0,-0.0,1.0,0.0,-0.0,0.99999994,0.0,-0.0,1.0,0.0,-0.0,1.0,0.0,-0.0,1.0,0.0,-0.0,1.0,0.0,-2.8760553e-7,-1.0,-3.5930526e-8,-3.4512664e-7,-1.0,-7.1861e-8,-2.8760547e-7,-1.0,-3.5930444e-8,-2.8760547e-7,-1.0,-3.5930444e-8,-3.4512664e-7,-1.0,-7.1861e-8,0.0,0.0,-1.0,0.0,0.0,-1.0,0.0,0.0,-1.0,0.0,0.0,-1.0,0.0,0.0,-1.0,2.300844e-7,1.0,2.480116e-14,2.300844e-7,1.0,1.6534107e-14,4.6016874e-7,1.0,0.0,2.3008437e-7,1.0,0.0,2.3008447e-7,1.0,0.0,-0.0,0.0,1.0,-0.0,0.0,1.0,-0.0,0.0,1.0,-0.0,0.0,1.0,-0.0,0.0,1.0,2.2351736e-7,1.0,3.6660094e-8,2.9802322e-7,1.0,0.0,1.4901161e-7,1.0,0.0,1.4901163e-7,1.0,0.0,-1.4901163e-7,-0.99999994,-1.065166e-7,-2.9802322e-7,-1.0,-2.3808314e-14,-2.9802322e-7,-1.0,-3.174442e-14,-2.9802325e-7,-1.0,-2.3808317e-14,2.9802317e-7,1.0,5.6683664e-8,2.980232e-7,1.0,5.6683657e-8,2.2351739e-7,1.0,2.834183e-8,1.4901161e-7,1.0,4.223262e-15,-2.9802325e-7,-1.0,-3.2776682e-14,-2.9802325e-7,-1.0,-3.823946e-14,-2.9802325e-7,-1.0,-2.185112e-14,-2.9802325e-7,-1.0,-5.46278e-15,-2.9802325e-7,-1.0,-3.2124395e-14,-2.9802325e-7,-1.0,-3.7478464e-14,-5.960465e-7,-1.0,-5.354066e-14,-3.7252906e-7,-1.0,3.5930515e-8,2.9802317e-7,1.0,7.186105e-8,2.9802317e-7,1.0,7.186105e-8,2.2351736e-7,1.0,3.5930537e-8,1.4901158e-7,1.0,1.6062193e-14,-2.9802322e-7,-0.99999994,-1.1336733e-7,-2.9802322e-7,-0.99999994,-1.13367314e-7,-4.4703484e-7,-0.99999994,-5.6683657e-8,-2.9802322e-7,-0.99999994,0.0,2.9802317e-7,1.0,7.186101e-8,2.9802317e-7,1.0,7.186101e-8,2.2351739e-7,1.0,1.0779156e-7,1.490116e-7,1.0,1.4372209e-7,2.2351743e-7,1.0,5.32583e-8,2.9802328e-7,1.0,0.0,2.9802325e-7,1.0,-7.936106e-15,-0.0,0.99999994,0.0,-4.4703486e-7,-1.0,-7.1861066e-8,-2.9802325e-7,-1.0,0.0,-5.960465e-7,-1.0,0.0,-4.4703492e-7,-0.99999994,0.0,0.0,-0.0,1.0,0.0,-0.0,1.0,0.0,-0.0,1.0,0.0,-0.0,1.0,0.0,0.0,-1.0,0.0,0.0,-1.0,0.0,0.0,-1.0,0.0,0.0,-1.0,7.450581e-8,1.0,5.32583e-8,1.4901163e-7,1.0,1.065166e-7,2.9802325e-7,1.0,2.1303319e-7,1.4901163e-7,0.99999994,1.06516595e-7,-0.0,0.99999994,0.0,-0.0,0.99999994,0.0,-0.0,0.99999994,0.0,2.2351742e-7,1.0,5.3258304e-8,2.2351742e-7,1.0,5.3258297e-8,2.2351742e-7,1.0,1.597749e-7,2.9802322e-7,1.0,2.130332e-7,2.9802325e-7,1.0,-7.936106e-15,2.9802325e-7,1.0,0.0,2.9802325e-7,1.0,0.0,2.9802322e-7,1.0,0.0,2.9802322e-7,1.0,1.0651657e-7,2.9802325e-7,1.0,1.0651658e-7,4.4703486e-7,1.0,1.065166e-7,5.960465e-7,1.0,0.0,5.215407e-7,1.0,5.3258255e-8,3.725291e-7,1.0,5.3258276e-8,7.4505806e-8,1.0,5.3258297e-8,7.4505806e-8,1.0,5.3258297e-8,2.2351739e-7,1.0,5.325829e-8,2.2351742e-7,1.0,5.325828e-8,7.450582e-8,1.0,5.325829e-8,7.450583e-8,1.0,5.3258297e-8,2.2351743e-7,0.99999994,5.3258287e-8,0.0,-1.0,0.0,-7.4505806e-8,-1.0,-5.3258308e-8,-2.2351742e-7,-1.0,-5.325831e-8,-2.9802325e-7,-1.0,-2.3808317e-14,-2.9802322e-7,-1.0,-2.3808314e-14,-2.9802322e-7,-1.0,-1.587221e-14,-2.9802325e-7,-1.0,-3.1744423e-14,0.0,-1.0,0.0,0.0,-1.0,-1.0651661e-7,0.0,-1.0,-1.0651661e-7,-1.4901161e-7,-1.0,-1.06516616e-7,-2.9802322e-7,-1.0,-3.174442e-14,-2.9802322e-7,-1.0,-3.174442e-14,-2.9802322e-7,-1.0,-3.174442e-14,-2.2351742e-7,-1.0,-5.325831e-8,-2.2351742e-7,-1.0,-5.3258322e-8,-2.2351742e-7,-1.0,-1.5977493e-7,-2.9802322e-7,-1.0,-2.1303323e-7,-2.9802322e-7,-1.0,-2.3808314e-14,-2.9802322e-7,-1.0,-3.174442e-14,-2.9802322e-7,-1.0,-3.174442e-14,-7.450581e-8,-0.99999994,-5.32583e-8,0.0,-1.0,0.0,1.4901164e-7,-1.0,-1.0651658e-7,2.980233e-7,-1.0,-2.1303319e-7,1.4901165e-7,-1.0,-1.06516595e-7,0.0,-1.0,0.0,0.0,-1.0,0.0,1.0,-1.4901161e-8,5.3258297e-8,1.0,-4.4703487e-8,5.32583e-8,1.0,-7.450581e-8,5.3258297e-8,1.0,-1.3411045e-7,-5.3258326e-8,1.0,-2.0861626e-7,-1.0651663e-7,1.0,-2.5331974e-7,5.32583e-8,1.0,-2.8312206e-7,5.32583e-8,-1.4901161e-7,-1.0,-7.936105e-15,-1.4901163e-7,-1.0,0.0,-1.4901163e-7,-1.0,0.0,-1.4901163e-7,-0.99999994,-7.936106e-15,-2.2351746e-7,-1.0,5.325827e-8,-2.9802325e-7,-1.0,0.0,-2.9802325e-7,-0.99999994,-1.5872212e-14,-1.0,2.3841855e-7,0.0,-1.0,2.3841855e-7,0.0,-1.0,2.3841855e-7,0.0,-1.0,2.2351739e-7,-5.3258294e-8,-1.0,2.2351742e-7,-1.597749e-7,-1.0,2.3841858e-7,0.0,-1.0,2.3841858e-7,0.0,4.4703484e-7,1.0,1.0651662e-7,4.4703486e-7,1.0,1.065166e-7,1.4901163e-7,1.0,1.065166e-7,1.4901163e-7,0.99999994,1.065166e-7,2.980233e-7,1.0,1.5872215e-14,2.9802334e-7,1.0,0.0,2.9802334e-7,1.0,0.0],"attribute_size":3}},"uvs":null,"bone_influences":{"bones_per_vertex":{"NonUniform":[1,1,1,1,2,2,2,2,3,3,3,3,2,2,3,3,2,2,4,4,2,2,3,3,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,2,3,2,2,1,1,1,1,1,1,1,1,2,3,2,1,1,1,1,1,1,1,1,2,2,2,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,4,4,3,3,4,4,3,2,2,2,3,2,2,2,3,3,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,1,1,1,1,1,2,2,1,1,1,1,1,2,2,1,1,1,1,2,2,2,1,1,1,1,2,2,2,3,2,1,1,1,1,1,3,3,1,1,1,1,1,3,2,1,1,1,1,1,3,2,2,1,1,1,1,1,1,1,1,1,2,3,1,1,1,1,1,3,3,1,1,1,1,1,2,3,1,1,1,1,2,2,3]},"bone_indices":[0,0,0,0,1,2,1,2,1,2,1,2,0,1,2,0,1,2,1,2,3,1,2,3,1,2,1,2,1,2,3,1,2,3,0,1,0,1,0,1,2,3,0,1,2,3,0,1,0,1,0,1,3,0,1,3,3,3,3,3,2,2,2,2,0,3,0,3,3,3,3,3,3,3,3,3,1,3,0,1,3,0,3,0,3,3,3,3,3,3,3,3,3,1,3,0,1,3,1,2,2,2,2,2,2,2,2,2,1,2,1,2,1,2,2,2,2,1,2,1,2,2,2,2,0,0,0,0,0,0,0,0,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,0,1,2,0,1,2,3,0,1,2,3,1,2,3,0,1,2,0,1,2,3,0,1,2,3,1,2,3,1,2,1,2,1,2,1,2,3,1,2,1,2,1,2,1,2,3,0,1,3,0,1,3,0,1,3,0,1,2,3,0,1,3,0,1,3,0,1,3,0,1,2,3,0,1,3,0,1,3,0,1,3,0,1,3,0,1,3,0,1,3,0,1,3,0,1,3,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,3,0,3,0,3,0,0,0,0,0,3,0,3,0,3,0,1,3,0,1,0,0,0,0,0,0,1,3,0,1,3,0,0,0,0,0,0,1,3,0,3,0,0,0,0,0,0,1,3,0,3,0,3,0,0,0,0,0,0,0,0,0,0,1,0,1,3,0,0,0,0,0,0,1,3,0,1,3,0,0,0,0,0,0,3,0,1,3,0,0,0,0,0,3,0,3,0,1,3],"bone_weights":[0.99930483,0.9993267,0.9988469,0.9988882,0.5769585,0.41667557,0.5750416,0.41875833,0.08287623,0.9114626,0.0809439,0.9134449,0.052394267,0.88598174,0.050120413,0.052381232,0.88586444,0.050270952,0.6038401,0.21717286,0.16507955,0.6044406,0.2158349,0.16582415,0.8323886,0.14720343,0.8319144,0.14773157,0.1785458,0.7855405,0.015085268,0.18311681,0.77991176,0.017029043,0.22253782,0.7405494,0.22251287,0.740542,0.03593966,0.1644677,0.022933569,0.75609565,0.035559665,0.16221051,0.021494966,0.7592622,0.7325021,0.24111201,0.7324547,0.2411115,0.24104871,0.0171883,0.72107244,0.24646422,0.018294405,0.7150753,0.9979128,0.998135,0.99806494,0.99795896,0.9988047,0.9990297,0.99891806,0.9989621,0.10787421,0.8680739,0.045240935,0.9386733,0.9713774,0.9865636,0.9935986,0.9967849,0.9968572,0.9938901,0.98734754,0.9734771,0.014606806,0.9444226,0.0059462897,0.07222709,0.88400006,0.10569806,0.8703893,0.043480534,0.93957144,0.97172564,0.9866937,0.9936313,0.9967472,0.99692065,0.9939038,0.9873182,0.97335756,0.01533075,0.94405013,0.0057551004,0.07312979,0.88290054,0.024755668,0.9591396,0.98141676,0.99174035,0.99635047,0.9983034,0.99832433,0.9963541,0.99171793,0.9812937,0.025822569,0.9586212,0.07076583,0.915345,0.005161207,0.96714973,0.98713607,0.9948909,0.9978746,0.06926029,0.91721123,0.0041649975,0.9677716,0.9873414,0.99494904,0.99785924,0.99942935,0.99948114,0.99940383,0.99918497,0.9994379,0.99948144,0.99939644,0.9991656,0.52089864,0.47447312,0.4392018,0.55681866,0.2560472,0.73904645,0.14594676,0.84841776,0.52015465,0.47528905,0.43899456,0.5570616,0.25618187,0.73894024,0.14661598,0.8477633,0.035839584,0.8800026,0.05626422,0.014667104,0.86240315,0.06908087,0.022364985,0.00013051182,0.8054408,0.10276213,0.066731885,0.6983354,0.16329528,0.118703805,0.035808858,0.87989175,0.05644027,0.014632608,0.862282,0.069321305,0.022160817,0.00009224564,0.80524856,0.103189684,0.06651563,0.69797367,0.1641143,0.11826125,0.81223685,0.16827872,0.76778257,0.21257482,0.63745654,0.33860016,0.33775267,0.63089234,0.0029583946,0.8118751,0.16870442,0.7674167,0.21303833,0.6367719,0.33948454,0.33603087,0.63306826,0.0021218061,0.19665678,0.73637927,0.052574046,0.16256312,0.7119954,0.10919973,0.13064471,0.60218906,0.24547167,0.0899343,0.31702027,0.010822326,0.5626343,0.19670737,0.7363473,0.052616917,0.16264729,0.7118822,0.109325536,0.13077486,0.6018658,0.24584669,0.09006711,0.31613845,0.010086797,0.5637511,0.73304653,0.21381596,0.04714686,0.7181039,0.17633335,0.10093921,0.62774724,0.13753818,0.22940728,0.3697934,0.08491707,0.5393966,0.73318374,0.21381065,0.046922278,0.71842223,0.17632438,0.10065594,0.6285407,0.13754272,0.22864479,0.37184832,0.08502152,0.5372724,0.9988633,0.99763453,0.99480253,0.9884909,0.974564,0.94401485,0.039739665,0.87734264,0.10453632,0.99887,0.9976349,0.9947986,0.98848146,0.97454613,0.9439851,0.039737288,0.8773002,0.104535356,0.99794656,0.99544877,0.9894214,0.97517526,0.9416019,0.052505236,0.8625044,0.12556209,0.6763853,0.3008956,0.997966,0.99546796,0.9894605,0.9752745,0.9418646,0.052216694,0.8632105,0.12478506,0.6783151,0.29876667,0.8791952,0.08709458,0.013530838,0.9455255,0.021888305,0.9755683,0.9890888,0.9951352,0.99781674,0.9989788,0.87278545,0.06643052,0.058952127,0.9434719,0.002389647,0.009188458,0.9751048,0.9890814,0.9952143,0.99788773,0.99903166,0.8324441,0.05029952,0.115298815,0.9272245,0.052366655,0.9686239,0.9864858,0.9941699,0.99746424,0.99885434,0.7470455,0.021280993,0.21514823,0.89428943,0.08959707,0.95521533,0.025550488,0.98092675,0.9918466,0.9964818,0.9984181,0.99897635,0.9978189,0.99514294,0.98910654,0.975605,0.94559467,0.021895174,0.8793071,0.08709712,0.013317416,0.9990334,0.9978928,0.9952266,0.98911005,0.9751686,0.9436032,0.002405785,0.008915171,0.8730211,0.06643922,0.058716524,0.9988606,0.99747336,0.99418974,0.9865333,0.9687366,0.9274788,0.052095838,0.83295697,0.05032899,0.11476577,0.99843067,0.9964965,0.99187726,0.98100257,0.9554063,0.025134359,0.8947603,0.089086145,0.7481345,0.021453265,0.213979]}},"materials":{},"custom_properties":{}}},"/tmp/basic_cube.blend":{"Cube":{"armature_name":null,"bounding_box":{"min_corner":[-1.7881393e-7,-2.9802322e-7,0.0],"max_corner":[1.0000002,1.0000002,1.0]},"multi_indexed_vertex_attributes":{"vertices_in_each_face":[4,4,4,4,4,4],"positions":{"indices":[0,1,2,3,4,7,6,5,0,4,5,1,1,5,6,2,2,6,7,3,4,0,3,7],"attribute":{"data":[1.0,0.99999994,-1.0,1.0,-1.0,-1.0,-1.0000001,-0.9999998,-1.0,-0.99999964,1.0000004,-1.0,1.0000005,0.99999946,1.0,0.99999934,-1.0000006,1.0,-1.0000004,-0.99999964,1.0,-0.99999994,1.0,1.0],"attribute_size":3}},"normals":{"indices":[0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5],"attribute":{"data":[0.0,0.0,-1.0,0.0,-0.0,1.0,1.0,-2.8312206e-7,4.4703413e-8,-2.8312206e-7,-1.0,-1.0430819e-7,-1.0,2.2351745e-7,-1.3411044e-7,2.3841858e-7,1.0,2.0861626e-7],"attribute_size":3}},"uvs":null,"bone_influences":null},"materials":{},"custom_properties":{}}}},"armatures":{"/tmp/skinned_letter_f.blend":{"LetterFArmature.001":{"joint_index":{"Lower.Arm":3,"Upper.Arm":2,"Lower.Body":0,"Upper.Body":1},"inverse_bind_poses":[{"Matrix":[1.0,-0.0,0.0,-0.0,-0.0,0.0,1.0,0.0,0.0,-1.0,0.0,-0.0,-0.0,0.0,-0.0,1.0]},{"Matrix":[1.0,2.3841855e-7,0.0,-0.0,-0.0,0.0,1.0000001,-0.5959558,2.3841855e-7,-1.0,0.0,-0.0,-0.0,0.0,-0.0,1.0]},{"Matrix":[1.4210855e-14,1.0,-4.371137e-8,4.1019174e-8,-1.0,-4.2632564e-14,3.7892557e-15,-3.5558744e-15,6.211761e-22,4.371138e-8,1.0000001,-0.93840975,-0.0,-0.0,-0.0,1.0]},{"Matrix":[-5.8773644e-9,1.0,-1.6281464e-7,9.703032e-8,-0.9993491,-6.867015e-8,0.036075003,-0.021499105,0.036075003,1.6300369e-7,0.9993491,-0.5955678,-0.0,-0.0,-0.0,1.0]}],"actions":{"Twist":[{"frame_time_secs":0.0,"bones":[{"Matrix":[1.0,0.0,0.0,0.0,0.0,0.0,-1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0]},{"Matrix":[1.0,0.0,2.3841855e-7,0.0,2.3841855e-7,0.0,-1.0,0.0,0.0,0.99999994,0.0,0.5959557,0.0,0.0,0.0,1.0]},{"Matrix":[-4.2632564e-14,-1.0,3.7892536e-15,0.0,1.0,1.4210855e-14,4.3711367e-8,0.0,-4.3711378e-8,0.0,0.99999994,0.9384097,0.0,0.0,0.0,1.0]},{"Matrix":[-7.4505806e-8,-0.9993491,0.036075003,0.0,1.0,0.0,1.6292068e-7,0.0,-1.6042031e-7,0.036075003,0.9993491,0.5959557,0.0,0.0,0.0,1.0]}]},{"frame_time_secs":0.833333,"bones":[{"Matrix":[1.0,0.0,0.0,0.0,0.0,0.0,-1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0]},{"Matrix":[1.0,0.0,2.3841855e-7,0.0,2.3841855e-7,0.0,-1.0,0.0,0.0,0.99999994,0.0,0.5959557,0.0,0.0,0.0,1.0]},{"Matrix":[-0.7071068,-0.70710677,-3.0908623e-8,0.0,0.70710677,-0.7071068,3.09086e-8,0.0,-4.371139e-8,-7.1054274e-15,0.99999994,0.9384097,0.0,0.0,0.0,1.0]},{"Matrix":[0.7071068,-0.7066465,0.025508992,0.0,0.7071067,0.7066466,-0.025508773,0.0,-1.5646219e-7,0.036075007,0.9993491,0.5959557,0.0,0.0,0.0,1.0]}]},{"frame_time_secs":1.666667,"bones":[{"Matrix":[1.0,0.0,0.0,0.0,0.0,0.0,-1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0]},{"Matrix":[1.0,0.0,2.3841855e-7,0.0,2.3841855e-7,0.0,-1.0,0.0,0.0,0.99999994,0.0,0.5959557,0.0,0.0,0.0,1.0]},{"Matrix":[-4.2632564e-14,-1.0,3.7892536e-15,0.0,1.0,1.4210855e-14,4.3711367e-8,0.0,-4.3711378e-8,0.0,0.99999994,0.9384097,0.0,0.0,0.0,1.0]},{"Matrix":[-7.4505806e-8,-0.9993491,0.036075003,0.0,1.0,0.0,1.6292068e-7,0.0,-1.6042031e-7,0.036075003,0.9993491,0.5959557,0.0,0.0,0.0,1.0]}]},{"frame_time_secs":2.5,"bones":[{"Matrix":[1.0,0.0,0.0,0.0,0.0,0.0,-1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0]},{"Matrix":[0.7071067,0.7071069,1.6858732e-7,0.0,2.3841858e-7,-8.526513e-14,-1.0,0.0,-0.7071068,0.70710665,-1.6858748e-7,0.5959557,0.0,0.0,0.0,1.0]},{"Matrix":[-3.0908623e-8,-0.3826832,0.9238797,0.24215159,1.0,1.6727578e-8,4.0383963e-8,-2.9199387e-14,-3.090848e-8,0.9238796,0.38268316,0.8381072,0.0,0.0,0.0,1.0]},{"Matrix":[-7.4505806e-8,-0.9993491,0.036075003,0.0,1.0,0.0,1.6292068e-7,0.0,-1.6042031e-7,0.036075003,0.9993491,0.5959557,0.0,0.0,0.0,1.0]}]},{"frame_time_secs":3.333333,"bones":[{"Matrix":[1.0,0.0,0.0,0.0,0.0,0.0,-1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0]},{"Matrix":[0.9238795,0.38268358,2.0281887e-7,0.0,2.5586968e-7,-8.773273e-8,-1.0,0.0,-0.38268355,0.92387944,-1.7897158e-7,0.5959557,0.0,0.0,0.0,1.0]},{"Matrix":[-2.2932971e-8,-0.3826833,0.9238796,0.13105153,1.0,-7.437627e-8,-5.9852354e-9,-3.0044426e-8,7.100517e-8,0.9238795,0.38268328,0.91234195,0.0,0.0,0.0,1.0]},{"Matrix":[-7.4505806e-8,-0.9993491,0.036075003,0.0,1.0,0.0,1.6292068e-7,0.0,-1.6042031e-7,0.036075003,0.9993491,0.5959557,0.0,0.0,0.0,1.0]}]},{"frame_time_secs":4.166667,"bones":[{"Matrix":[1.0,0.0,0.0,0.0,0.0,0.0,-1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0]},{"Matrix":[1.0,0.0,2.3841855e-7,0.0,2.3841855e-7,0.0,-1.0,0.0,0.0,0.99999994,0.0,0.5959557,0.0,0.0,0.0,1.0]},{"Matrix":[-4.2632564e-14,-1.0,3.7892536e-15,0.0,1.0,1.4210855e-14,4.3711367e-8,0.0,-4.3711378e-8,0.0,0.99999994,0.9384097,0.0,0.0,0.0,1.0]},{"Matrix":[-7.4505806e-8,-0.9993491,0.036075003,0.0,1.0,0.0,1.6292068e-7,0.0,-1.6042031e-7,0.036075003,0.9993491,0.5959557,0.0,0.0,0.0,1.0]}]}]},"bone_groups":{},"coordinate_system":{"up":"Z","hand":"Right"}}}}}

Parsing from file

landon parse --file /path/to/data can parse exported data from a file.

The parsed JSON will be written to stdout.

landon export -f $BASIC_CUBE_FILE -f $SKINNED_LETTER_F_FILE > /tmp/out
landon parse --file /tmp/out

Saving JSON to a file

landon export -f $BASIC_CUBE_FILE | landon parse > /tmp/parsed.json
cat /tmp/parsed.json

Blender Mesh

The blender-mesh crate contains data structures and methods for working with meshes.

While the guide will be written with Blender users in mind, please note that a mesh is just a collection of data and as such almost all of blender-mesh knows nothing about Blender and can be used standalone.

This chapter will introduce and explain different mesh data and functions.

The full API documentation can be found on docs.rs.

The JSON that is exported by the CLI matches the structure of the API, so the API is still a good reference for CLI-only users.

Custom Properties

landon exports all custom properties found on a mesh.

These can be useful when your application code wants to treat certain meshes differently based on certain properties that you label the mesh with in Blender.

For example - you might have a linter that ensures that none of your meshes go above 200 vertices in order to preserve your low poly art style.

There might be some exceptions to this rule - so your code might check for the override_max_vertex_count custom property to enforce a different limit in special cases.

In Blender custom properties these can be added in the Object section of the Context panel.

Custom mesh properties

Int, Float, String and Vector custom properties are exported. Type information can be found next to every value since the Rust API uses this to generate a type safe data structure.

Dictionaries are not currently supported - but feel free to open an issue if you need this.

Rust API

BlenderMesh.custom_properties Rust API

Example JSON Representation

Accurate as of May 31, 2020

"custom_properties": {
    "example_float": {
        "Float": 20.0
    },
    "example_int": {
        "Int": 30
    },
    "example_string": {
        "String": "Hello"
    },
    "example_vec": {
        "Vec": [
            {"Float": 1.0},
            {"Int": 2},
            {"String": "World"}
        ]
    }
}

Materials

landon can export data from Blender's Principled BSDF shader node.

In the Rust API they're available through BlenderMesh#method.materials.

Currently the base color, metallic, roughness and normal map inputs are exported.

In general, if landon does not export something that you need please open an issue.

We support both uniform/scalar values and texture values for all inputs, with the exception of normal maps where no use cases for a scalar value come to mind.

Base ColorMetallicRoughnessNormal Map
Uniform
Texture✓*✓*✓**

* - metallic and roughness texture inputs must come through a Separate RGB node.

** - normal map textures must be inputted through a Normal Map Blender shader node.

Texture and scalar inputs can be mixed and matched.

For example, it's totally fine for your base color to be a uniform value and your metallic to come from a texture.

Texture Inputs

Here's an example of how to input a texture into each supported input field.

Note that this screenshot reads metallic and roughness from the same texture, but you can also read them from separate textures by using two Separate RGB nodes instead of one.

Texture material inputs

Scalar Material Inputs

Here's an example of how to input uniform values into the supported input fields. Simply set your desired values in Blender's Principled BSDF shader node and they'll be exported.

Uniform material inputs

Blender Armature

Bone Groups

landon exports all bone groups found on an armature.

One use case for this data is render different animations for different parts of an armature.

For example - if your game character is walking while punching - you might want to play a walking animation on it's lower body bones and a punch animation on its upper body bones.

In Blender you'd create a bone group for the upper body and another bone group for the lower body and then use this data in your renderer when determining which bones to render.

Blender bone groups

Rust API

https://docs.rs/blender-armature/0.2.0/blender_armature/struct.BlenderArmature.html#method.bone_groups

Blender Iks to Fks

Troubleshooting

This chapter contains information about how to troubleshoot failed attempts to convert IK/FK rigs into FK rigs.

Over time we want to replace this information with code that makes it unnecessary.

Unorganized

Here we dump troubleshooting information as we run into it that we can later clean up and organize into the right chapters.

FK animation slightly off from IK animation

The FK animation isn't guaranteed to follow the same path as the original IK animation in between keyframes.

The IK rigs constraints might lead it to follow a certain path while the FK rig will simply have a roughly straight interpolation between the keyframes.

To solve for this - run the IK to FK converter and then run both animations side by side in Blender.

If the FK rig is slightly out of place during a frame - insert a key at that frame on the original IK rig and convert again.

In short - when the FK rig differs in interpolation from the IK rig it means you need more keyframes.

Troubleshooting Rigify

Shoulders and pelvis not converting properly

  • Copy transforms constraint from pelvis.L to ORG-pelvis.L

  • Copy transforms constraint from pelvis.R to ORG-pelvis.R

  • Snap IK to FK (or vice versa) for all keyframes for both hands

    • Press Action in the Rig Main properties under IK->FK for left hand
    • Press Action in the Rig Main properties under IK->FK for right hand
  • Action item: Open issue in the rigify repository asking if these constraints can be added by default

Before Copying Transforms

Notice that the shoulders and pelvis are not green to start off with.

Before copy transforms

After Copying Transforms

After copying transforms the shoulders and pelvis will become green.

After copy transforms