Git Product home page Git Product logo

cuburn's Introduction

Cuburn

This project is a fractal flame renderer, similar to flam3, built for CUDA GPUs. It also includes a new blending system, the ability to perform spline-based animation of individual parameters over time, and new, HDR-aware filtering mechanisms. The overall result is a distinctive, dreamlike atmosphere — rendered up to one hundred times faster than CPU.

This project is licensed under the GPL version 3.

Getting started

To use cuburn, you'll need the following dependencies:

  • A CUDA-compatible graphics card with SM 2.0 (GTX 400 series) or newer
  • A recent CUDA toolkit (at least v4.1) and drivers
  • pycuda
  • numpy
  • scipy
  • tempita
  • Maybe some other stuff, I'll come back to check later

Perform a git checkout of cuburn, cd to cuburn's directory, and run

python main.py -g input.flam3

... and your GPU will start rendering your fractal flame, saving the results to the current home directory. main.py is the primary interface to cuburn, and it includes built-in help; run python main.py --help to find out what it supports.

Once the program runs, check out the sample flock for more details on the design of the JSON flame format and how to use it to manage and render a collection of flames.

Differences between flam3 and cuburn

Gorgeous, fluid interpolation

Erik Reckase and Vitor Bosshard came up with a phenomenal new approach to applying the typical rotational parameter interpolation used by flam3's animation system, which served as a template for the current spline-based system used by cuburn (which Erik also worked on). The result can literally stop you in your tracks when you see it, and I'm thrilled to have been able to implement their ideas.

Everything is an animation

Cuburn is built for beautiful, fluid animations, and the interface is built with that in mind. If you want a single image — no motion blur, no velocity interpolation — you can pass the --still argument to any cuburn command that accepts profile arguments.

Temporally-aware, graphical, JSON-encoded flame representation

Cuburn can read flam3-style XML flame descriptions, but it really shines when used with its native JSON dialect. This method of representing flames has temporality in every expression, and was designed from the ground up for nondestructive composition and blending, so that everything from individual frames to composed sequences to entire flocks can be lovingly tended by a community of artists and editors.

The format is also amenable to composition with less directed input, such as that produced by a genetic algorithm, which can add variety and spark inspiration without destroying the original intent or severing the "anchor points" which tie a flock together.

It still needs a frontend to realize this humanely, so right now this might as well be vaporware.

Output profiles

Cuburn separates the description of the underlying mathematical system from the particulars of rendering. Instead of containing information such as output resolution within the flame XML, cuburn allows flames to specify the camera in terms of IFS coordinates, and then applies an output profile to convert camera coordinates to image-space coordinates for rendering.

Filtering parameters and sampling patterns are done the same way, and in almost every case, parameters are continuously-valued. This means that the same splines which allow animators complete control over the movement of the frame can be used to describe its filtering relative to the other sheep in a flock.

Totally revised filtering

I sat down with a notebook and a laptop running Maxima, and came out with some weird, inefficient shear-sampled hybrid directional-bilateral-gradient nonsense filter and a new tone-mapping algorithm that intentionally adds spatial distortion around clipped regions. Looks great, tho.

cuburn's People

Contributors

stevenrobertson avatar ereckase avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.