SGZ Intro editor

CPP, ASM

64kb intro editor

When I joined Stravaganza demoscene group they were already a succesful demogroup with many winner productions released. At that time they were focused on demos (realtime animations without size limit) so I decided to try to keep improving my intro tools (the same but with size limit, typically 64kb).

One of the key of their success was the use of one of their coolest tool: SGZ DemoEditor. It worked similar to a video sequencer (Sony Vegas or Adobe premiere) where you could place 3D scenes, apply effects, load textures and synchronize everything with the music.

It was a big advantage over the tradional way to do demos and intros where the designer explain his idea, gives him textures and models to the developer and the latter tries to create evertything from code.

With sequencer tools the designer could modify the demo in realtime and see the result by himself, he could change the 3D objects, effects parameters, textures and many more options directly from the UI without any help from the developer.

At first we were tempted to use the same editor for our 64kb intro system, but as the way to create intros varies greatly from demos. So I ended up creating my own editor. It was developed using C# .net and WinForms for the UI and C++ for the DLL plugins.

I tried to replicate most of the features from the SGZ DemoEditor:

  • Expandable: works through plugins.
  • Can render an .avi of the demo.
  • Supports full animated variables through curve editors.
  • Effects and curves with copy & paste support.
  • Supports realtime effects and also .avi clips.
  • Full WYSIWYG.
  • Multimonitor friendly (edit on one screen and preview on the other).
  • Many shortcuts to speed up editing process.

The editor integrates the resources loaded from my other tools: KTexGen for textures and materials, KSynth for the music and 3DStudio MAX Tools for geometry. Basically it works with two entities:

  • Resource: a resource could be for example a texture or a mesh and you could link those resources to parameters on the effects.
  • Effect: An effect is a plugin with a common interface to render a frame based on some inputs defined as parameters. Each parameter has a widget based on its type and generally you could link it to other variables or animate them using curves.

Effects

The effects are placed on the timeline in a similar way to how the video editor work. Once you set a slice on the sequence editor you could choose between the available list of plugins and after that you could adjust the parameters from the effect using the upper left window. So each slice on the timeline represents a effect with that starts at the left side of the effect and end at the right side. The different layers are used to sort the drawing order of each effect.

KTexGen v2

Animation

Most of the parameters could be animated from integers, floats, vectors to textures or cameras. To animate the parameters we could use the curve editor. This editor let us to specify a curve over the time that will animate a parameter. This curve could be numerical or a gradient, depending on the type of the parameter.

KTexGen v2

In the editor you will place different points (keys) and specify the interpolation method to be used: step, linear or spline. You could also add an operator and modifier to the initial curve.

KTexGen v2

Demo

The following video shows an early stage demo of the editor: