/mvdf

A Minimum Viable Data Format for using R as a front-end for the Blender 3D Rendering Engine

Primary LanguageROtherNOASSERTION

mvdf: a standardized approach to using R as a frontend for the Blender 3D rendering program

Lifecycle: experimental Project Status: WIP – Initial development is in progress, but there has not yet been a stable, usable release suitable for the public. CRAN status R-CMD-check lint codecov License: MIT

The goal of mvdf is to provide a standardized approach to using R as a frontend for the Blender 3D rendering program.

Please note that this package is in early development; breaking changes can and will happen as better approaches become evident.

What’s an MVDF anyway?

The mvdf package proposes a standard approach to using R as a frontend interface for the Blender 3D rendering program. By breaking the development of rendering into three distinct steps – importing data from disparate sources into a standardized format, manipulating that format through a standard set of tools, and creating 3D renderings from standardized formats via exporter functions – mvdf forms the cornerstone of an easily-extensible framework for producing data-driven 3D renders.

The approach centers around creating special objects from our data that we can then create renderings. The simplest of these objects is an mvdf_obj, which just needs an x, y, and z position:

library(mvdf)
iris_mvdf <- mvdf_obj(
  data = iris, 
  x = Sepal.Length,
  y = Sepal.Width,
  z = Petal.Length
)

With our object successfully created, we can then chain together a few functions to make a Python script that will render our data when run inside Blender:

library(magrittr) # For the %>% pipe

render_script <- 
  # Delete placeholder objects and import standard Python modules
  create_blender_frontmatter() %>%
  # Add cubes at each point in space in our mvdf
  add_mesh_primitive(object = iris_mvdf,
                     primitive = "cube", 
                     size = 0.2) %>% 
  # Save the output to save_render.blend
  add_blender_endmatter(filepath = "save_render.blend") 

And we can then execute that script from R using execute_render:

execute_render(render_script)

This script will produce a Blender file (“save_render.blend”) with cubes at each point in space specified in our mvdf, with the end result looking something like this:

knitr::include_graphics("vignettes/iris_cubes.jpg")

For more information, check out the introductory vignette!

Installation

You can install the development version of mvdf from GitHub via:

remotes::install_github("mikemahoney218/mvdf")

You’ll also need to install Blender separately. mvdf is tested against the current release of Blender and is not guaranteed to work with older versions; in particular, some basic operations may fail with Blender < 2.80.