__ TABLE OF CONTENTS __

_______________________________________________________

__ Natron v2.5.x («JC» Build) __

_______________________________________________________

K.A.D.Pi:

Development Aid Kit for opensource VFX pipelines based on Krita, Blender and Natron

(the "mcfly" project)

by Juan Cristóbal Quesada (a.k.a Emmett-Brown82)

https://github.com/Emmett-Brown82

__ ABSTRACT __

«We hereby present this «Development Aid Kit» for Technical Directors and VFX facilities that work in audiovisual productions using workstations, laptops and any kind of digital means. This Development Aid Kit pretends to be the stepping stone used to be able to build a VFX pipeline to alleviate the load of tasks between the different departments in an homogeneous way. It consists of a series of tools and helping hands to the development in order to ease the production entry curve for live/CG performance films or Full CG.

Furthermore, this stepping stone is all based on free software either for the operating systems (we use Rocky Linux 9.5) either for softwares like Krita, Blender and Natron, with the intention to demonstrate that it is possible to produce short sized and medium sized audiovisual products uniquely and exclusively by using Open Source free software.

It is not a fully built VFX pipeline, nor is it a set of scripting tools that would help to fix one-of-a-time production problems in the different departments that take place.

Moreover, as a proof of concept, this project demonstrates that it is possible to always integrate «any» DCC software inside a VFX pipeline. As one will see, each and every piece of software has its own characteristics, being the sole and only requirement, for him to provide a programmable API (not python-based, necessarily). Thus, their license counterparts are Autodesk Maya, The Foundry Nuke, and Photoshop.

We offer then this kit in order to enlighten the starting curve of production of technical staff and TDs inside the production of audiovisual products and one toolbox or «script integrator» that loads by default in all three pieces of software.»

__ FINAL COMMENT __

Maybe the reader wonders why the codename of the KADPi project is «Mcfly». As a son of the 80s, that grew up with Spielberg, Zemeckis, Cameron, Scott brothers, Hughes, enjoying those movies and the first CGI VFX and the storytelling, I could not let pass by the opportunity to wink an eye to those film wonders that remind some of us, the best of our childhood. We chose Mcfly because of the iconic weight that share Christopher Lloyd and Michael J. Fox in the plot as well as the message that it is thrown: dont let yourself be intimidated or harrassed, dont choke upon blackmailing and offense, as it means that they take life out from you for a moment, and you give it to someone it is not worth the fight. «Mcfly, are you a chicken?»

__ DOCUMENTATION __

K.A.D.Pi Development Phases

__ KADPi Phase 1: Technical Specs (June 2025) __

  • Abstraction layer at the «host» Application level. Which means same look & feel and same logic.
  • Abstraction layer from the Python2/Python3 level.
  • Abstraction layer from the python Qt Binding.
  • Abstraction layer from the Operating System. Code is ready to be extended to run in windows and macOs.
  • Easy configurable remote debugger from your preferred IDE.
  • «hot live reload» of all your code with no close/open the «host» app.
  • Code is scripted (no securization yet).
  • Compatible with Krita 5.2.x, Blender 4.2.x LTS and Natron 2.5.x.
  • Currently compatible with Rocky Linux 9.5.

__ KADPi Phase 2: Technical Specs (December 2025) __

  • Code is securized by means of dynamic link libraries.
  • High execution time at the C programming Language level.
  • Optimization and efficiency at the algorithm level to deal with large amounts of data at a very low cost of RAM memory usage.
  • Compatible with Blender 4.2.x LTS at the binary level.
  • Compatible with Windows 11 and  Rocky Linux 9.5.
  • Easily extendable to any «host» Application through a customized compilation stack.
  • Tooltip System improved.
  • Single «hot live reload» of tools/scripts added.

__ KADPi Phase 3: Technical Specs (May 2026) __

  • (to be announced…)

Natron v2.5.x ("JC" Builds)

__ ABSTRACT __

(1/3).- why doing a custom Natron build?

The most updated official release of Natron is v2.5.0 available through their website: https://natrongithub.github.io 

That version is compatible with python 3.10 and PySide 1.2.4 (Qt 4.8.7) which is kind of obsolete.

The Natron devs are shifting the codebase of Natron to be able to support Python 3.10/11 with PySide2 (Qt 5) and even PySide6, but it is not ready yet.

This project was a work entity on its own since the official release had a python embedded pypanel bug/crash. Basically, if a python pypanel throws an error, the C/C++ code of Natron/s codebase handles runtime exceptions within slots. And this is bad practice and not allowed: you are not allowed to throw exceptions inside a Qt function slot. And this statement is equally valid for Qt4 and Qt5.

We hereby present two links to both Natron v2.5.0 bug fixed versions: one with Qt4 and another with Qt5. It is vitally important for you to know that both are <<custom builds>> made by me (Juan Cristóbal Quesada, aka JC) with this C/C++ bug fixed in all two versions. You will not find this bug yet fixed in the official releases, though i reported the issue and should be fixed in the nightly builds. (Kudos to Natron devs for merging those fixes in the following builds, starting from july 2025 onwards).

(2/3).- __ Specs/features __

  1. meant for pipeline devs and TDs to be able to tinker with python and integrating Natron into VFX pipeline at an early stage before the official release is done.
  2. For this reason the custom builds dont have all the features a regular release would have. It is not meant for artists to use extensively, but rather, for testing purposes.
  3. Tested in Rocky Linux 9.5, Ubuntu 18 and Ubuntu 24.

(3/3).- __ How to run ?  __

In both .zip archives you will find seldom shell scripts acting as launchers. Please use them to launch correctly and with no errors Natron:

  • Natron-v2.5-Qt4-Launcher.sh
  • Natron-v2.5-Qt5-Launcher.sh

Tron StarDusters v5

__ ABSTRACT __

The TronStarDusters 5 is a 99completely unique and original Unity personal project, i have been playing with since quite some years ago. 

I embrace both, coding in C# and Unity Editor tool development as well as all the artsy side. It allows me to explore creativity through design decisions and digital art crafting.

For this, I use primarily Blender 4.2.x LTS as the main digital content creation tool. Coming from the Maya based users pool, it has been relatively easily  to adapt, since the 3D core concepts remain current.

Things that I’ve learned so far:

  • Unity/Visual Studio C# coding and good practices (Reflection, design patterns, etc).
  • Unity 6 Editor Toolset extension called «TronStarDusters» to ease the pipeline assets (materials, textures and static and dynamic meshes) integration into the engine.
  • Universal Rendering  Pipeline and the shader graphics pipeline.
  • Unity Visual Graph node-based shader creation tool.
  • Blender Modelling tools.
  • Shading & Texturing in Blender. 
  • Shading networks animated parameters through Blender drivers.
  • A set of 80s CRT Camera 2D post-processing effects originally coded for this project.
  • Unity 6 SkinnedMeshRenderer component combiner.
  • Procedurally generated terrain through a personal, optimized, custom proper Ken Perlin’s noise procedural texture implementation.
  • Compute Shaders.

This 1982 Tron movie inspired project attempts to pay an hommage to cinema.

__ Vehicle Concepts __

One of the core requirements of this project was the ability to deal with at least two completely animated meshes. For each mesh, a set of customizable items would apply. We try to offer three base models. The important fact about mesh combination is that it allows for single unique draw calls. Special care has to be taken in order to not reach the point of integer representation overflow when combining multiple meshes. The result: a single SkinnedMeshRenderer component with several submeshes where each of them has a different material applied to it.

I wanted to get a grasp of Tron movies style, with the specific combination of neon lights and darker parts. That 80s look and feel.

I focused on simple geometric shapes like triangles, hexagons and squares and started building up from there.

Starduster-TronViper

Starduster TronTank

TronViper

  • M (Mass): LOW.
  • DoM (Degree of Movement): HIGH.
  • CoMP (Center of Mass Position): MID.
  • ST (Suspension Type):
    • Damping: HIGH.
    • Suspension Magnetic Field: HIGH.
  • CoD (Change of Direction): 45 degrees.

TronTank

  • M (Mass): HIGH (heavy-weighted).
  • DoM (Degree of Movement): LOW.
  • CoMP (Center of Mass Position): LOW.
  • ST (Suspension type):
    • Damping: LOW.
    • Suspension Magnetic Field: HIGH
  • CoD (Change of Direction): 120 degrees.

TronLoner

  • M (Mass): MID.
  • DoM (Degree of Movement): MID.
  • CoMP (Center of Mass Position): LOW.
  • ST (Suspension Type):
    • Damping: MID.
    • Suspension Magnetic Field: MID.
  • CoD (Change of Direction): 90 degrees.

__ Modelling /// Texturing /// Shading __

During the development of this ambitous project, I modelled several assets, very basic ones, to be able to code and debug the SkinnedMeshRenderers mesh combination merging algorithm. Once the algorithm was all set up, i decided to remake the motorbikes models. Since I had no previous experience with Blender (I am a Maya user) I decided to limit the extent of the Art side by crafting first a better motorbike so I could play with modelling, shading and texturing still at the early stages of the Art pipeline.

What you see here is just an approximation to the final look. These are just WIP images and videos. The final look will probably be totally different.

In the meantime, I’ve been able to play with shading networks, glare FX, using and gaining better skills at CG modelling and in general, getting at ease with the software.

__ CRT Effects __

For this project i wanted an 80s look. So I decided to explore the many different aspects of what a CRT TV should look like and try to mimic the same effects. It turned out that all the math behind those FXs is really simple (high school level). 

There are some plugins that already perform such FXs in Unity Store, but if you are curious as I am towards what’s the thing about them it may be a good exercise to try to achieve them on your own.

Retro CRT Camera FXs developped so far are:

  • Scanline FX
  • Chromatic Aberration FX
  • Film grain
  • Frequency interference
  • Lens Distortion
  • Anamorphic image
  • Film Vignette

Still to do:

  • Ghosting FX
  • Heat haze (Heat shimmer FX)

Below you can find an example of PostProcessing FX: a camera lens distortion shader written using Unity’s Visual Graph. The Lens-distortion shader supports a Pincushion/Barrel distortion by varying couple of numeric values.

 

The type of distortion depends on the values of the coefficients in the polynomial expression.

Normally, for an 80s TV CRT look we would steer for a barrel distortion.

The Maths behind the Lens Distortion FX

To be able to apply this, we have to play with (u,v) coordinates in their polar shape as stated in the picture.

There are different coefficients named Ki. But we will see that the most heavy-weighted one is the K2 coefficient.

Varying the K2 coefficient plus the intensity value, we can obtain pretty much the biggest range of variation. From barrel to pincushion.

(Source: Distorsión (óptica) – Wikipedia, la enciclopedia libre)

__ PIPELINE /// TOOLS __

In 2016 a bunch of friends and colleagues from work decided to embark in the producion of a teaser for what would become a bigger film the followin years. I was in charge of developing from zero a pipeline that would integrate Tactic as Digital Asset Management System, Maya + Yeti + Arnold + AlShaders.

These videos showcase the two main tools developped for each department: they handle the chek-in and check-out of assets, so, the inputs and outputs of every department in the pipeline. We finished the teaser before the pipeline was polished, but hopefully you get the idea.

Little tool between rigging and animation departments to help automate the loading of the synoptics of the main characters.

Video player with a custom interface allowing the different departments to visualize the playblasts of the same sequence. Helps detect «raccord» issues in a sequence.

Playblast generator tool. Performs different actions related to playblast generation, naming convetion, folder structure delivery and tracking of old history playblasts.

«Papitomatic». – Tool that acts as a plugin that pushes further the Animation Studio Library by allowing to export animation data without opening Maya ! It analyzes the Maya ASCII files in search of animation data (keyframe information) and injects it into the Studio Library allowing the animator to reuse and copy animation in a totally fast and new way.

 

Pipeline mover and copier. Allows to select which scenes and characters the artist wants to work on and proceeds to «download» the content to their local machines handling all path related issues, and save the work back on the server. It also allows to modify which references will be loaded before opening Maya in order to save loading time!

 

Cameratronic. – Layout/Editorial Tool that allows to create the master shots of an entire sequence and movie and edit the cameras. A Camera Sequencer helper.

Motion tail Autorig. Sets up controllers around a curve that handles the motion of some characters where their anatomy makes this suitable.

A dynamics parameters autoconfigurator allowing to ease the tweaking and adjustment of the different values to achieve the desired physically-based motion.

Another tool for the Crowds/Dynamics Department. Allows to automate the construction of a motion curve and their controls to handle the movement of particles.

__ 3D /// Computer Graphics /// Algorithms __

July 2006, my final grade project. C /// OpenGL /// Glut /// OpenAL. Based on Craig Reynolds Steering behaviour paper, but this time, we decided to make the motion physically based as the result of forces that affect acceleration instead of velocity. Several behaviours were implemented such as wandering, path following, obstacle avoidance, eating, death and birth of particles, chasing, fleeing and finally, flocking. All these behaviours were implemented in an ecosystem of fish particles (tuna, anchovy, sharks). In order to give some sense and logic, a simple multitask decision system was implemented that was affected by two parameters: libido and hunger measured as percentages that would drop down by the passing of time and chasing/fleeing behaviors.

Procedural texture and mesh terrain generator. One of the things that i had to leave behing during my FGP was the programming of Perlin noise. Since i started tinkering with Python and Qt i decided to start a mini tool showcasing the implementation. I also used Vertex Buffer Objects to perform better on the graphics card.

First approach to computer graphics back in 2005. Done in cortona VRML 3D. Done as part of an introductory course to Computer Graphics during my third year at university.

Design /// Modeling entirely in VRML. Texturing is handpainted sometimes and others i leaned on opensource images.

Coursera MOOC as an introduction to interactive programming in Python. My first approach to this programming language. The course was using an online platform to run everything. I decided to port it to PyGame so i could run it as a standalone application in my computer.

Exercises done as part of the Algorithms & DataStructures course at Princeton University. I decided to enroll in this course to improve and get a first grasp of programming complexity and performance. If i recall correctly, there were 5 weekly exercises. Normally it would take me from friday (day of the exercise release) to the next thursday dedicating 3-5 hours per day. To me it was very demanding but back in the day i was a little bit more relieved from work. Part 2 of the course explains graphs, and for the time being, it will remain undone ;P.

__ ART __

Some exercises I’ve been doing over the last years with different techniques including digital artwork and other traditional media like charcoal, ink or watercolours. Since 2017 I’ve been attending nightly oil painting classes in an atelier here in Madrid and had quiet and relaxing times experimenting with anatomy, landscapes and more «abstract» forms of art as well as different types of brush strokes and effects.

__ Zootrope /// Art __

These are a series of inspirational references from cinema, litterature, music, poetry, ballet I wanted to pay hommage to. It was done as part of an optional subject in Arts of the Tecnologías de Telecomunicación degree at UOC University in September 2024 Semester. I just wanted to reflect some very cool life attitudes, things that make me smile and wanted to share with others, things, situations, comments that resonated with me over the years. Hope it Helps! and grants you a Smile!