Elephants Dream, the original open movie directed by Bassam Kurdali, proved it possible to make high quality 3D animated films using free/libre tools in a studio setting. The Tube Open Movie is a new experiment, this time in distributed collaboration-a love letter to free software and open culture that marks their convergence with digital filmmaking.

Tube is inspired by the Gilgamesh poem, which comes down to us as an incomplete, conflicting set of fragments and variations, the clay tablet remnants of more than a few ruined libraries. The epic centers on the Sumerian king that ruled in ancient Iraq, who for his tyranny the gods teach friendship and loss, and through them, the fear of his own death. In the end, the immortality he achieves is different to the one he first seeks. Nearly five thousand years later, Gilgamesh, a woman and a soldier, rushes into a station in pursuit of a paper blown about by the passing of trains. In an ever accelerating vortex, her hero's journey becomes the animation's own frames

The finished film and its mountain of data assets will be released under the Creative Commons Attribution-ShareAlike (CC BY-SA) license, meaning you can use them for anything-even commercial appropriation-at no charge, but you are required to allow others to reuse your work on the same terms


Production Blog


Type in Wires for Empathy

Hi folks, I’m currently continuing the work you saw in the last update – building a library of time-lapse assets and tools. So far I have posters, aging tiled walls where the tiles break and fall out over time, security cameras, a guard tower, and various types of ‘wirey’ messes, like the stuff that is […]

Hi folks,

I’m currently continuing the work you saw in the last update – building a library of time-lapse assets and tools. So far I have posters, aging tiled walls where the tiles break and fall out over time, security cameras, a guard tower, and various types of ‘wirey’ messes, like the stuff that is tucked away under the platform (but is visible in shots) and the wires feeding into lights, etc. I’m currently working on integration and interaction: creating tools to easily put them into shots, and methods they can ‘talk’ to each other, so that, e.g. a falling tile rips out the posters in front of it. All of these result in ‘normal’ blender animation curves, even though many are using animation nodes to build.

In the meantime, I’d like to show some earlier work we did, namely, our imaginary language/font we’re going to use in the film:

Early on we decided the film would be wordless – no written or spoken words – and we would rely on images, shots and animation rather than language.

Our location is everywhere and nowhere – but it still needed diagetic written words: signs, advertisements, propaganda, etc. Not as language but as texture.

We want the dream to be universal – inspired by specific events, specific places, and deeply colored by them, but not speaking ‘only’ to one group of people. So instead of betraying that desire by using a specific language, it became more obvious that we should use a unique typeface with glyphs that don’t really correspond to an existing script. Since our film is based on the epic of Gilgamesh, we thought it fitting to imagine a modern Sumerian language, evolved from ancient writing over thousands of years to the point of unrecognizability.

Initially I came up with some rough designs, mostly jokey references to 3D graphics elements (axis, cursors, rotation icons, nodes, etc.) mixed in with slightly corrupted versions of letters in English and Arabic, languages that I understand. Last summer, one of our interns further made several quick variations on those ideas, experimenting further.

I spoke with a number of well known font experts in the free software world, and one of them advised me to avoid the following:

  • Difficult to read or write symbols, as those would give the feeling of an ‘alien’ font
  • Symbols too close to existing letters
  • Joined scripts as those are tricky to make work

As a result, I went back to square one (or is it zero) and tried to come up with a design that worked better with those restrictions. The result is a typeface I’m calling “Soomerian Modern” that we can use with Blender, Inkscape, Krita or Gimp to make our various 2D elements. The first instance of this is on a train ticket, visible torn on the ground in the first shot.

Look forward to stencil and other variations of the font, and to seeing it appear on the poster assets I’m now coding/noding 🙂

Propoganda timelapse dev continues

Greetings comrades! So as promised, here’s a more in-depth update, about poster timelapse . In our (hopefully just in the movie, but you never know…) dystopian future, the subway walls need to get peppered with images of successive ruthless dictators, bent on making us love them through propaganda. This effect is sometimes very close to […]

Greetings comrades!

So as promised, here’s a more in-depth update, about poster timelapse . In our (hopefully just in the movie, but you never know…) dystopian future, the subway walls need to get peppered with images of successive ruthless dictators, bent on making us love them through propaganda. This effect is sometimes very close to the camera, and sometimes in the background, throughout many shots.

Posters need to be added to the walls over time, then removed, and perhaps just have other posters put on top of them, with attention to the images (which image in the succession) overlaps (they need to be on top, rather than intersecting each other) and order of removal (posters under other posters can’t go first). In addition, the materials of the poster need to age, and posters under other posters can’t e.g. accumulate dirt, and could get ripped when the top poster gets removed… and .. and…. and…..

*deep breath*

So I’m building a poster control ‘machine’ using a brilliant blender addon called animationnodes – that also allows mixing nodes and python via script nodes. This is what my code and nodes look like right now:

Python Script NodesAll the animation node trees

And this is what they do:

There’s a lot of hidden stuff there too: they make oclusion masks using vertex colors and vertex groups so the posters “know” when they are under or over each other. This will allow me to combine it with…..

….my poster material nodes! :

Cycles poster material nodes

Lets see what those look like in animation:

Phew! pretty cool – still missing a few details and tweaks, but that’s the basic idea. the strange purple rectangle represents an occluding poster. the image is tweaked from a beautiful poster made by Michael Kalinin for the movie, and is just a ‘test image’. The text is using our custom made font “soomerian modern” which all the text in the movie is written in.

So what’s left? well, combining the animation nodes for the posters with the poster materials.

In addition I have similar systems (not shown here) for the wall itself, that have to interact with the posters, so for instance, the posters change the dirtiness levels of the walls, and falling tiles rip out the posters.

Hope you enjoyed this mini update!

Summer 2016 Interns

This summer’s interns have been selected, so I would like to give a short introduction for each of them to familiarize everyone with our new team members. Shown below each one is an example of their work as well! Lamont Robinson, 17, currently lives in Philadelphia, PA and is interested in studying 3D animation. Having […]

This summer’s interns have been selected, so I would like to give a short introduction for each of them to familiarize everyone with our new team members. Shown below each one is an example of their work as well!

Lamont Robinson, 17, currently lives in Philadelphia, PA and is interested in studying 3D animation. Having watched a lot of 2D cartoons, he was heavily inspired to pursue 3D once he saw what it could do. Lamont especially enjoys sculpting people, and objects like vehicles and robots. He found out about the Tube project through BlenderNation, and is excited to learn more about the process of rigging, materials, and character animation.

Lyndon Daniels lives and works in Cape Town, South Africa, where he has participated in many different projects and taught at the University of Cape Town. Having worked in 3D animation for several years, Lyndon has created a wide range of work, including models, applications, and animated shorts. He was inspired by the open movie Elephants Dream, and became interested in the world of open source software and animation. This interest eventually led him to find out about Tube.

e_greyPhone

Alice Langois lives in Belchertown, MA and just finished her freshman year at the Rhode Island School of Design. She has worked in a wide variety of media, but hopes to pursue 2D and 3D animation. She has also gained increasing interest in stop motion, and creating models from found materials. She discovered Tube through BitFilms after seeing the short Caldera. Interested in the free culture behind Tube and Elephants Dream, she hopes to learn more about the use of open source software and the community behind it.

IMG_1694

Congratulations, and thank you for your help!

Summer Internships for Wires for Empathy

We’re happy to announce a new round of summer internships through bitfilms on Wires for Empathy aka the tube open movie project. Read the details in this document – it should contain everything you need to know, deadlines, how to apply, etc. In brief we’re going to be working on two exciting main areas, timelapse […]

a1s22.full.all.0298

We’re happy to announce a new round of summer internships through bitfilms on Wires for Empathy aka the tube open movie project.
Read the details in this document – it should contain everything you need to know, deadlines, how to apply, etc.
In brief we’re going to be working on two exciting main areas, timelapse animation and lighting. In the run up to the internship period I’m working on documentation for our lighting pipeline and timelapse animation workflow and tools – so if you’re into lighting with cycles, would like the chance to work on our color-managed lighting pipeline, or if you like the idea of animating things changing over time, or modeling snapshots of aging objects, this could be a good fit for you.

Planning in Blender:OrgNodes*

Early last summer I was faced with a problem: As we completed a set of pre-planned and conceptually regular animation shots, our original approach to handing out tasks to artists started to resemble a research project: Delve into the files and preview, identify a ‘high priority’ item, then break it down to bite-sized tasks that […]

tasks_explode Early last summer I was faced with a problem: As we completed a set of pre-planned and conceptually regular animation shots, our original approach to handing out tasks to artists started to resemble a research project: Delve into the files and preview, identify a ‘high priority’ item, then break it down to bite-sized tasks that could be reasonably executed by one person.

But each of these bite-sized tasks depend on one another; so the assignment often fell into order-of-operation problems – before you can rig something you need to model it, and before you light something you need to have it textured, etc. Since multiple assets link into multiple shots, and often times you need to do the same ‘type’ of task on one shot, this gets really complex to figure out- and once you’ve done it once, it’s good to be able to store those relationships in a logical way for future reference.

Helga

helga Helga, our web based production tool, has a good attempt to fix this. But it is hard-coded to a specific workflow, and tends to isolate individual shots and assets so they don’t reflect their interdependence. Each shot and asset has a task tree that looks like this: helga_tasks

Spreadsheets

spreadsheet_example So the next step is using spreadsheets. This is what Caldera – the previous drome project – used to do, essentially supplementing Helga with google docs. We did quite a bit of that too, often using libreoffice to make spreadsheets, and sharing them using google docs – in the future we’d like to use an opensource document collaboration platform, the likes of which collabra and libreoffice are implementing as we speak!

Graphs

The problem with spreadsheets: Everything is on a neat grid layout. That makes it easy to enter and read information, but it actually hides the structure of the data underneath. Our data consists of tasks that depend on each other in a specific order, in a kind of network that has a direction to the links. In computer science, there’s an obvious data structure to use for this: It’s called a DAG, short for Directed Acyclical Graph . Basically a network of nodes ( a graph) where each link has a direction (from node, to node) and you cannot have a cycle – either directly or indirectly, you can’t have an infinite loop of nodes (imagine if rendering depended on animation, but animation depended on rendering – you’d be stuck in a loop and could never finish the project! ). Any proper representation of our task list should reside in such a graph, fitting the data to the data representation: graph

Blender!

nodes being used to shade a single plane (the window) So, as luck would have it, Blender has a programmable DAG editor – the node editor. You’ve probably seen it in screenshots, or used it yourself, to make shaders in cycles, materials and textures for blender internal renderer, or to composite images and renders. In addition to these ‘normal’ uses of the node editor, there is a hidden feature: Blender allows you to create entirely new node network types and node types in python. This has been used to make excellent addons, such as sverchok for procedural modelling, and animation nodes for procedural animation; It might become the basis of all rigging, modelling and animation in future future versions of Blender. nodes being used to composite the entire shot

Finally, OrgNodes

new task tree type, populated with tasks But for our needs, it’s a convenient way of organizing the project! By creating a new node tree type in python – dependency nodes, and a new node type – a task node, we can give each task some properties and some dependencies, such as: a single tasknode with many dependencies

  • owner – the name of the artist or coder working on the task
  • time – estimated time needed to complete the task in person-days
  • type – type of task: is it animation? rendering? texturing? etc.
  • reference – what shot or asset is the primary reference for the task (refers to shots and assets in the helga asset list)
  • Completion – Is it done or not?
  • Dependencies – These are links to other, similar tasks that much be completed before this one; other tasks might have this one as dependency in a similar fashion.

Getting Data In and Out

The primary way of data entry is right in the node editor: Use Shift-A, or the handy panel on the left to create new nodes. Copy, paste, and duplication all work, as does the usual way of connecting nodes. addingnewnode However, we recognized early on that we’d probably need some other connectivity. I created a JSON file format for tasks, and some simple operators to export tasks or import them from JSON files. This helped automate data entry from sources we already had available. io We also know that many people find spreadsheets far more user friendly then nodes – and not everybody has to deal with the dependencies. So we made spreadsheet import and export – currently using .csv files (this could be improved a lot – we aren’t even using csv libraries in python) – but it works fine for our current needs. You can export all or part of the graph to spreadsheet/s, edit those spreadsheets (or create new ones) and then import the changes back into the graph. This makes communicating with the rest of the team fairly simple.

Search

search In order to make import and export easy, We have a ‘Search and Select’ function that lets you search for specific things, for instance, you can search for all character animation tasks, and then export a spreadsheet just for those. This is handy to then use for communicating with animators and animation supervisors. We can even modify the spreadsheet – assigning animators, or adjusting estimated time or completion, and then re-import back into the graph. Search is of course, also useful when working directly in the graph, without needing to import or export anything.

Lies, Damn Lies, And Statistics

Finally we have have stats and reports. If Nothing is selected, it adds all the uncompleted task times, giving a total project estimate (in person / time units) Note that our current total is a bit inflated as I tended to pad tasks out – especially tiny ones – things that might take an hour or two have a whole day. This number also assumes only one person working, and no corners being cut. If you have a selection it displays the time for the selected task/s and all its/their dependencies. Thus you only have to select the final render for a specific shot, and see how much time it takes to complete it. stats

DNA

While writing this code I wanted to get something ‘up and running’ really fast. At the same time, I feel like this could be more useful in a bigger system. So, to describe the data structure of an individual task, I decided to keep all of this in one really simple class/module, that could then be modified to hook into another library, or to change class types for a given project, etc. without having to touch the rest of the code. While the name is inspired by blender’s sDNA and sRNA systems for data storage and access, this is in no way as elaborate or cool. But it still allows for really quick and nice additions. If you’re looking to take this and integrate into your own system, look at the file taskdna.py first!

taskdna Future Work

In the future I’d like to tie this as a small piece of larger asset/task management systems. That means that there needs to be an api to connect to various project databases, and the taskDNA also needs to be part of that api, allowing the system to define not just the tasks but the actual data structures.

A small part of this that might be cool is enabling image previews in the nodes, reflecting the current status of those tasks.

Download

The current version is zipped and installable via blender’s user preferences->addons panel, get it here: tasker version 0.2

You can also download this project along with a lot of other addons for tube from my gitlab: tube addons project

The files are located in the folder tasker/

Once downloaded either:

  • make a zip file of the entire tasker folder then install the zip as an addon in Blender
  • if you’re technically inclined, make a symbolic link within the Blender addons directory directly to the tasker/ folder – that way you can git pull it and see the changes directly in blender without having to re-install.

From Politicians to Tasks!

In the import function I wanted to sort the nodes based on the dependencies, so they could be displayed in a nice layout in the editor. DAGs have well known sorting functions, but I didn’t want to implement my own. So, I borrowed code originally written by Paul Tagliamonte for the Sunlight Foundation – It turns out that following the trail of money and influence on politicians is also a DAG, and Paul wrote some beautiful BSD licensed Python for sorting and cycle detection. Thanks Paul!

As a bonus image, here’s the rendered frame produced via the screenshots above: frame Finally thanks to everybody here – I hope this post satisfies those of you who, like me, are geeky about this stuff. To them, and everyone else I promise more new cool artwork in the next update!

*The current name is ‘tasker’ but I’m switching to orgnodes as a pun on emacs org mode.

You can also follow us on twitter or check out our full blog at urchn.org

Credits

Director: Bassam Kurdali
Producer: Fateh Slavitskaya
Writer: Fateh Slavitskaya
Animation Supervisor: Chris Bishop
Environment/Texture Lead: Nicolo Zubbini
Modelling Lead: Dimetrii Kalinin
Sound: Thomas Vechionne
Music: Jan Morgenstern
Animators:
Gianmichele Mariani
Sarah Laufer
Tal Hershkovich
Luciano Munoz
Karen Webb
Virgilio Vasconcelos
Jarred de Beer
Jeanhye Kim
Carlo Serra
Matt Bugeja
Nathan Vegdahl
Oscar Baechler
Bassam Kurdali
Chris Bishop
Francesco Siddi
Beorn Leonard
Roselyn McMurray
Samantha Luo
BingRun Jiang
Aslynn Kilgore
Pipeline/Technical Artists:
Paolo Acampura
Jake Wisdom
Bassam Kurdali
Josh Wedlake
Lighters/Compositors:
Pablo Vasquez
Hanny Lu
Christine Stuckart
Francesco Siddi
Ivan Cappiello
Ivan Cappiello
Bassam Kurdali
3D Generalists:
Lukas Zeichmann
Hanny Lu
Henri Hebeisen
Pablo Lizardo
Josh Wedlake
Samah Majadla
Ike Ahloe
Jamal Coleman
Benjamin Sohn
Davide Maimone
Connie Hildreth
Timothy Miko Carol
Dan Finnegan
Hassan Yola
Kursad Kuratas
Jonathan Williamson
2D Artists:
Becky Tang
Juanangel Redondo
Lisette Lopez
Malefico Andaur
Astro Leon-Jhong
Pere Balsach
Marcel Mars
Jimmu Bohall
Chris Bishop
Warren Belfield
Michael Kalinin
Bassam Kurdali
Developers:
Lucas Toenne
Chris Webber
Ahmad Abdelhamid
Shantanu Choudary
Daf
Bassam Kurdali
Chris Perry
Interns:
Andreu Cabre
Alvaro Luna Buatista
Andre Souza De Silva
Arindam Mondal
Nathanael Gaethers
Gatis Rathko
Alejandro Cruz
Nora Jenny
Milan Stankovic
Raphael Sousa
System Administration:
Wm Josiah Erikson
Jason Van Gumster
Executive Producers:
Barbara Elizabeth Bolles
Michael Tiemann
Kÿra
Phillipe Castelyan
Producers:
E. G. Ellis
Chris Perry
Spirit Animal:
Dan Gilbert
Special Thanks:
Stanley Kowalski III
Matteo Gloyer
Ed Ellis
Backers:
Colin Levy
Jonathan Williamson
Ethan Time
Jeroen Bakker
Maria Figueiredo
Will Kahn-Greene
Rob Myers
loglow
Rodney Dawes
Ian Lilkendey
Rock Shaink
Jake Blais
Mike Sheldon
John Pointer
solstag
Riccardo Giovanetti
Tero Pajunen
Martin Preisler
Tony Mullen
Andreu Cabré
Andrew Heaven
Cliff Garwood II
Timo Munnukka
Ben Hagen
malefico
Xesus Garcia Alvarez
Scott B. Hamilton
Carsten Fisch
Blaine Landowski
Lars Brubaker
Alan Ferguson
David M. Cotter
Andrea Weikert
Michael Langford
gnumpen
Ren-Wei Yang
Julian Gall
Grá Linnaea
Jelmer Vernooij
Andrew Mike
Trevor
Alexander Pierce
Geoffrey Lehr
Andrew Buttery
David M Driggs
Louis S. and Tammy D.
Fred Benenson
Daniel Tompkins
Christine Pedersen
Chris (deleted)
twmffat
David REVOY
Julius Tuomisto
Simon Haller
GenX
James Pierechod
Jamie Brandon
Lancalot
Bensn
Andrew Jones
Goofy Goober
Edward
Thomas Dudziak
Lance Conatser
Sean Kennedy
Matthias
Joshua Kratovil
Dirk Siegel
Marek Belski
Anthony Barone
GiantRabbit
Stephen Paul Weber
Chris Van Vranken
Ryan Sayre
Mike Sayen
Srinivas Sirigina
Robert von Burg
Jeff Elmer
Jason Canty
Sarah Jane Pell
Cheryl Court
Dale Rooney
Doha Marzouk
Matthew Nash
Jules Beulen
Gordon
Matija Nalis
Rana Hobbs
Angie Kalea Ho
Robyn Ellis
John C
Shadi Sakr
Alexander Kvartz
Hawyee Auyong
Lallemand
Alain Marion
Donald Thompson
Joshua S.
Bojan Orlovic
mads simonsen
Aurélien Sacaze
Ivan Kapovic
rmellin
Peter Kropf
Richard Perry
Sébastien Jomphe
Stephen
BAIL
Adam Kasanof
Erik Möller
don snover
david joyner
Pascal Bach
Goran B.
DarthOdorous
Benoit HEBEISEN
Omnifarious
Bradley Cathey
Kc Michael Martinez
acro
Tristan Louis
David Mason
Tom James Allen Jr
Thies Schulz-Holland
Thomas Hahn
Andreas Mattijat
Erwin Vanderhoydonks
Steve Clement
Aniline
Giovanni Gallo
Oliver B
Duy Kevin Nguyen
Daniel Yanez
David Hickson
Andre Hugo
Yannick Croissant
Frank Anes
Carlos Muriel
Ain Anepaio
chaitanya krishnan
Joar Wandborg
JayMon
kokomo_joe
André Kishimoto
Lexicus
artleast
Eric Harris-Braun
Andrew Kwon
Peter de Castro
Philipp Oeser
Johnell Malone
Dan Cundiff
Leandro Simonetti
Matt Koons
Marius Slavescu
Julian Mulvey
Jonathan Masters
Dylan Cole
Jánvári Bálint
Horia Ardelean
Ace Gopher
Travis McHenry
John Urquhart Ferguson
Erick
vagn scott
Sjako ten Haken
Todd Gross
Ejner Fergo
Anthony Ray
Mathias L
Hugh Fitzgerald
Yves Bilgeri
Adam Ziegler
Amer Rahmani
John Burak
Jason Burns
Steven Bible
Emanuele Olivetti
Kristian Egdamin
Brett Truett
Logan Scheel
Jonathan Brier
Todd Yurkovic
Luca Rossetto
Rui Nóbrega
SHAMISEN
The-Wise-Cat
Sylvain Racicot
openstandards
Ignacio Fiallos
Autumn Laraine Mackey
Gordon Milner
William Welton
John Knight
Thomas LeBlanc
Yannick Warnier
Flavio Perez
Adam Lyall
melissa
kamereon
Malachi de AElfweald
Pat Heiden
Denver Gingerich
Steven Zakulec
Admiral Potato
James Weeks
Brenton Buchbach
Johann
mike interbartolo
David Seguin
Adrian Giddings
Kristoffer Strömblad
Greg Fischer
James R. Hall
Peter Carrero Provenzano
andrew brennan
chad
Rein de Waart
Kaliatech
Campbell Hore
Will T.
Wesley Hirsch
Tom M.
Jiri Hnidek
John Wisdom
Mike Linksvayer
Terry Hancock
Brett McCoy
Max De Marzi
Farida Majadla
Mohammed Majadla
Michele Hardesty
Lucas Scavone
J. Piscioneri
Florian Berardi
Colin Reynolds
Nick Bastin
abhay toshniwal
Jason Ward
Brian De Wolf
Coucouf
Carl Richell
Matthew Muldoon
Houda Kurdali
Steve
Nelson Goncalves
Christopher Webber
Devi Hart
Chris Perry
S J Bennett
Troy Sabotka
Scott Wilson
ton roosendaal
Joseph Annino
paulthegrouch
Michael Mellinger
Simon Haegler
William Leu
Jake Mazonson
CapyBaron
Vandré Israel Brunazo
Jean-Sebastien Guillemette