ProXimus


Description:

ProXimus is a pseudo-scripted effect generator, originally intended for use as a video game development tool. the basic premise is that most special effects follow certain patterns which can easily be modeled mathematically. So in effect ProXimus is a 2d (3d if you include time) function evaluator, that makes images based on a density function of pixel coordinates.

Background:

After years of spending my time using different gradients in paintshop pro and photoshop to get the basic effect into form when I knew exactly what I wanted in a mathematical since, I started thinking of ways that I could help expedite the process. at first I considered making plugins that could do basic patterns that cropped up commonly, but the more I thought about it the more complex it became. I quickly realized that I would need something like a script to get anything versatile enough to be truly useful. I also had experimented with media player visualizations which made me think about making a program which generated a full image via a 2d function based on pixel coordinates. about this time I also started developing my own expression system for use in a game engine as a faster and smaller alternative to a full scripting language. unfortunately for my expression system my team chose to go with a full scripting language (LUA), it turned out for the best, but I was somewhat disappointed that the expression system was going to to go waist. about a year later I found myself making effects again and rethinking my old idea for a mathematical effect generator, but this time I had the missing ingredient. I made a quick and dirty MFC based 2d function evaluator which I called ProX (short for PROcedural teXture) as soon as it was marginally functional I found it was able to make some very nice images, but the interface and language lacked the some needed features, so after about a month I recoded it using an platform independent UI API called wxWidgets, and the image file library DevIL.

Work Flow:

when you start a project in ProXimus you draw a function based on one or more of the five internal variables (x, y, X, Y, ang, r, t) to a layer, this layer can then be sampled by other layers or saved as an image (or a string of images in animations). the way in which you write these functions is by defining one or more variables. the terminology is somewhat confusing to people with a programming background as (except for a few very specific exceptions) the variables do no hold a value, they merely represent a value which is equivalent to an expression the user defines. ProXimus handles variables more like a mathematician would think about them. for example f(x) = y, y only has a value if x does, and y's value changes as x's does. the only real exception to this happens in summations which will be discussed in the language reference. the variables you define are bound to one (or more, or none) of the color channels of the layer, there is a large selection of color spaces supported including RGB and HSL, different color spaces have different numbers of channels but most have three. when you have all your variables defined, you merely need to click the 'Evaluate' button (or press f10) and ProXimus will evaluate all variables for every pixel in the layer. the resultant image will be the real component of all values greater than 0 (darkest) and less than 1 (brightest). similarly most of the built in variables will be in the range of 0-1.

internal variable reference



back to the ProxDox home