Slashdot Mirror


Hacking Hi-Def Graphics and Camerawork Into 4Kb

TRNick writes "The old home-computing art of hacking elaborate graphics and camerawork into tiny amounts of memory has been lost, right? Not so. The demoscene is keeping ingenious coding skills alive, and TechRadar finds out the latest developments. Winner of the 4kb competition at 2009's Breakpoint party was RGBA's demo 'Elevated,' a gorgeous scrolling demo featuring photo realistic landscapes and music, which fits into the memory used by one of your PC's desktop icons. This is really impressive stuff."

25 of 255 comments (clear)

  1. Re:I assume the SOURCE fits into 4 kb by Anonymous Coward · · Score: 5, Informative

    If you're not going to read the article, maybe you should at least have some idea of what the demo scene is about before rushing to first post.

    What it is saying is that the executable file is 4096 bytes. The source code has little relation to that. If the program asks to use more memory beyond that after it's loaded, that's fine.

  2. Even smaller - the BINARY is 4k by kyz · · Score: 5, Informative

    The source is much larger. The size counted is the size of the executable. Write as many comments as you like in your source code.

    You can use as much memory as you like, but it's a very boring pile of memory if you don't then precompute a pile of pretty pictures using algorithms and data, which is what the 4kb is really counting.

    You can use as many external libraries you like, as long as they're public; so you don't have to write your own OpenGL implementation, but you can't hide 200kb of your latest cool code somewhere other than the 4kb executable.

    Feel free to hack the executable format to remove unnecessary headers and sections that an average compiler or linker would generate.

    --
    Does my bum look big in this?
    1. Re:Even smaller - the BINARY is 4k by Anonymous Coward · · Score: 3, Insightful

      The difference is, the old C64 demos would run on any C64.

      This '4K' demo requires gigabytes of other code to run, so you need to install a hell of a lot of other software before it will work.

      It will only work on certain PCs with the right configurations too, and will break when the external libraries it uses change.

  3. Wow by Lord+Byron+II · · Score: 4, Funny

    It takes a 64MB avi to store the 4KB demo!

  4. Re:Trojan by Anonymous Coward · · Score: 5, Informative

    The compression techniques in demo code drive AV products nuts, that's just the way it is. They're not going to infect your system -- that would add too much bloat.

    Shame it doesn't work on Win7 64-bit tho.

  5. I wish by Khyber · · Score: 3, Insightful

    I wish more developers would try doing things like this. I can imagine a game along the designs of Doom3 or Quake4 that would fit on a floppy disc with some proper code crunching.

    Of course, the downside is that it'd be all too easy to snag tiny files like that on a torrent site.

    --
    Still waiting on Serviscope_minor to wake up to fucking reality and realize that Jessica Price isn't going to fuck him.
    1. Re:I wish by molukki · · Score: 5, Informative

      Try .kkrieger -- FPS game in 96kB

    2. Re:I wish by slim · · Score: 4, Interesting

      Try Left 4K Dead

      The fact is that cramming a lot of game into a small space is still worth doing.

      • Flash games sites have bandwidth costs
      • Console gamers develop high expectations as the hardware reaches the end of its lifecycle, and developers compete to squeeze more out of it
  6. Re:TROJAN?! by Ilgaz · · Score: 4, Funny

    Funny is 4 KB app manages to do HDTV and your AV solution being thousands (if not millions) times bigger can't figure the difference between a trojan and packed executable. That is in case it is even packed.

  7. YouTube version by slim · · Score: 5, Informative

    I strongly suspect my video card won't be up to this, so I seeked out a capture of it on youtube:

    http://www.youtube.com/watch?v=_YWMGuh15nE

    1. Re:YouTube version by odin84gk · · Score: 4, Funny

      Wouldn't it be more appropriate to post a tinyurl than the direct youtube link?

    2. Re:YouTube version by Dalambertian · · Score: 5, Informative

      If you really wanna keep track of the newest demos, I recommend demoscene.tv The quality is far superior than youtube, and they also provide the 4k download. http://demoscene.tv/page.php?id=172&lang=uk&vsmaction=view_prod&id_prod=13718

  8. For those w/o Windows - video by Maxmin · · Score: 3, Informative

    Elevated by RGBA and TBC.

    Impressive, though it seems the demo scene has evolved to include the use of platform libraries (graphics/synthesizer.) Impressive anyways - I'm assuming the imagery is all algorithmic.

    When I last paid attention to demos, it seemed to be all in the executable, code dealing directly with hardware.

    --
    O lord, bless this thy holy hand grenade, that with it thou mayest blow thine enemies to tiny bits, in thy mercy.
    1. Re:For those w/o Windows - video by Maxmin · · Score: 3, Insightful

      On second viewing, two things come to mind:

      1) the opening scene from LOTR: The Two Towers, an amazing piece of design and rendering.

      2) Audio player visualizations. The giveaway is the contrails appearing in sync to the music.

      Is it possible RGBA are using a built-in visualization library, possibly from WMP? That would explain the high level of detail and apparent use of texture maps, which I'm guessing wouldn't fit into 4kb, algorithmic or not.

      This (admittedly weak) theory can be verified by disabling the visualization library for Windows Media Player.

      Anyone want to volunteer to verify this?

      --
      O lord, bless this thy holy hand grenade, that with it thou mayest blow thine enemies to tiny bits, in thy mercy.
    2. Re:For those w/o Windows - video by atraintocry · · Score: 3, Insightful

      You were actually serious about the WMP thing?

      It comes down to a few things:
      - those common device drivers can do a hell of a lot these days
      - that 4k executable expands to over 300 MB in memory when you run it
      - these techniques have been perfected over decades of work
      - mountain landscapes are one of a handful of real-world things that can be realistically generated with small equations
      - these people are exceptionally talented

      You are right to notice the similarity as there is a lot of overlap between music visualization and demoscene work. I would guess that the former arose as a result of work being done in the latter.

      It's 4096 bytes, whatever you want to call that. A typical (self-imposed) demo limitation.

      These things were being made long before there was a Windows or a WMP. And there are always those ones that make you feel like "this shouldn't be possible," but I suppose that's the point.

  9. Re:Trojan by Anonymous Coward · · Score: 4, Informative

    The loaders they use to uncompress the image are routinly also used by virus writers for their own non-3d distructive payloads. Sometimes the people adding the virus signatures get lazy and just target the loader rather than the payload.

    I'm just happy these demos run with DEP enabled.

  10. libraries by Anonymous Coward · · Score: 5, Insightful

    Everyone going on here about how stupid it is that they used existing libraries mind you that typical compo rules state that it must run on a base install. Nobody here is linking to myuberleetcode.dll or anything. That and think about the freaking sound for a second or better yet try and write a 4k and then come back and talk about how stupid it is

  11. KC explored by eddy · · Score: 4, Insightful

    Yes, and that'd be very neat and much much harder than you seem to think. Try it, go looking for that magical random seed that creates a 1MB blob of code that does something impressive. Maybe you should expand your idea to first generate a filtering program that can determine if a code sequence, when run over some data, creates a demo? :-)

    4K demos are sort of an artistic exploration of Kolmogorov complexity.

    Remember also that, if the judges die of old age before your demo appear, you're unlikely to place well in the compo.

    --
    Belief is the currency of delusion.
  12. No, they wouldn't by Sycraft-fu · · Score: 4, Insightful

    While demos like this are extremely neat, there are also some real limitations to what you can do. This is by no means an all inclusive list but some of the major limitations of making something like this:

    1) All graphics are completely procedural, as in mathematically described. That means you don't get to have an artist sit down and draw them. Puts limits on how they can look and demands a fair bit of self similarity.

    2) You use a MASSIVE amount of memory in relation to your file size. You may have noticed it sits at a black screen for a bit before running. Why? It is doing all its calculations, decompressing in to memory. When running on my system, it took 350MB. Rather than storing lots on disk and streaming as needed, you store little on disk and have to use tons of RAM.

    3) You can't have things like voices and such in the game, takes too much space. Even with extremely efficient compression (which produces audible artifacts) voices will quickly make your game larger.

    4) All assembly coding. To do this, you are writing everything as efficient as you can. That's wonderful, but hard to maintain. For a large project that is going to need to run on a lot of systems, be patched and so on, you want a higher level language. Doing everything in assembly would be a nightmare to maintain.

    I could go on, this is just an example. What it comes down to is that this is neat for demos. I -love- stuff like this, Farbrausch is one of my favourties for this sort of thing. However it is not a realistic exercise for normal applications. You do not want to sacrifice everything just to try and have a small program footprint. On the contrary, if increasing the on disk size makes it better or more efficient, then you want to do that. Disk space is extremely cheap. Better to use more of it than to sacrifice in another area.

    1. Re:No, they wouldn't by tepples · · Score: 4, Insightful

      All graphics are completely procedural, as in mathematically described. That means you don't get to have an artist sit down and draw them.

      Then give the artist a dataflow diagram, similar to GraphEdit, to build procedures.

      Puts limits on how they can look and demands a fair bit of self similarity.

      Nature is self-similar.

      You use a MASSIVE amount of memory in relation to your file size.

      But it doesn't have to be pushed over the wire or the optical disk, which becomes important as Xbox 360 games begin to run up against the 7 GB/disc limit and PC games begin to run up against monthly download caps.

      You can't have things like voices and such in the game, takes too much space. Even with extremely efficient compression (which produces audible artifacts) voices will quickly make your game larger.

      I forget: how big was the S.A.M. synthesizer on the old 8-bit home micros?

      All assembly coding. To do this, you are writing everything as efficient as you can. That's wonderful, but hard to maintain. For a large project that is going to need to run on a lot of systems, be patched and so on, you want a higher level language. Doing everything in assembly would be a nightmare to maintain.

      Sure, demos aren't intended to be maintained much past the party, but some of the procedural techniques apply just as well to C or Lisp or ML or whatever if you want to trade off some efficiency to gain maintainability.

      On the contrary, if increasing the on disk size makes it better or more efficient, then you want to do that. Disk space is extremely cheap.

      Specifically, there are places where disk space is still a lot cheaper than bandwidth.

  13. Re:finally! by Goaway · · Score: 3, Insightful

    No, don't. Then we'll have to listen to the "THEY JUST USED BUILT-IN DIRECTX FUNCTIONS FOR THIS THEY TOTALLY SUCK" crowd all over again. There's no lack of people around here who don't have a single clue what it takes to do something like that, but will yak on and on about how it is nothing impressive.

  14. Re:Meh by ivoras · · Score: 4, Interesting

    No, it just raises the bar. Back when all you had to work with was CGA in 320x200 it was impressive to show a rotating cube in 4k. Today, this demo nicely shows where the virtual bar is when even considering making a 4k demo. As you couldn't do "Elevated" on your 100 MHz 486 in *no* condition or with any libraries, so would you be laughed at if you presented a rotating cube or a wormhole today.

    Here's an excerpt from TFA:

    for those wondering, this a (too) low density flat mesh displaced with a procedural vertex shader. there arent any texturemaps for texturing, instead texturing (and shading) is defferred and computed procedurally in a full screen quad. this means there is zero overdraw for the quite expensive material at the cost of a single geometry pass. then another second full screen quad computes the motion blur. camera movements are computed by a shader too and not in the cpu, as only the gpu knows the procedural definition of the landscape.

    If you can do better, show your work :)

    --
    -- Sig down
  15. Re:Trojan by AmiMoJo · · Score: 4, Informative

    You need d3dx9_33.dll, which is not included on 64 bit systems.

    With that DLL it works fine on XP x64.

    --
    const int one = 65536; (Silvermoon, Texture.cs)
    SJW, n: "Someone I don't like, and by the way I'm a fuckwit" - AC
  16. Link by eulernet · · Score: 4, Funny

    Torrent anyone ?

  17. Explanations by Anonymous Coward · · Score: 5, Informative

    Hi guys. I'm one of the programmers behind Elevated, Inigo Quilez. I was responsible for the programing of the visuals. Christian Ronde made the music and Rune Stubbe made the synthetizer and music player.

    Apparently some people cannot believe this, but I will say it myself so there is no more useless speculation going on: this is a 4096 bytes executable demo. Not 4096 of source code. ItÂs a 4096 bytes executable (actually, a few less bytes), x86 binary, with plays a realtime animation and music demonstration without using any external data file. It uses a few d3d functions to generate a rectangle, to compile a hlsl shader and to set a projection matrix. That's it. I have read some people claiming there is "3d engines" built in in directx; I must presume those were assertions coming from people who actually know little about computer graphics today. Also, obviously, Microsoft didn't make any RenderCool( D3DX_MOUNTAINS, D3DX_PLEASE ) function in any of their APIs nor LoadTerabytesOfTextures( D3DX_ROCK_AND_SNOW, D3DX_FROM_HIDDEN_SYSTEM_FOLDER );

    The demo doesn't use any external library for sound or whatever. The demo could be recompiled in OpenGL/Linux very easily (it was Opengl in fact, just ported to DX in the last minute), and be something around 4300 bytes. We went for DX to fit in 4096 bytes to complain with the competition rules of Breakpoint, the party where we presented Elevated.

    Regarding the music, the demo not only encodes the music track, but also implements the instrument synthesis and track playback. The complete sound system takes about 900 of the 4096 bytes, it's mainly FPU code. To see how this is possible, you can have a look for now to sound synthesis and DSP.

    The "textures" are infinite, just as the terrain itself. You can travel as far as you want on the terrain, this never ends, and same for textures. The rock, vegetation, snow, texturing takes about 100 bytes, although it uses some Perlin noise functions that take about 350 bytes. So in essence, we encoded mega, tera, peta and hexabytes of texture in few hundred bytes. The prize, of course, is that they are just too fractalish. But it made the job. Cameras are based on simple sinus and cosinus functions, the playback code is 150 bytes or so, and the camera data itself is exactly 4 bytes for each shot (a 16 bit random seed to feed the sin/cos functions with random frequencies and phases), a velocity and a FOV value. The rest of the sequencing data and playback code (to fade in, fade out, summer/winter transitions, brightness/contrast and color correction parameters) are around 400 bytes. The rendering is done in a "deferred" way, for those who know about computer graphics a little bit, which means the zbuffer if filled first and then a full-screen rectangle is drawn with a shader invocation. This shader computes the surface normals, does the texturing (lakes and sky included) and then does some tonemaping and motion blur. The shader is huge, around 1500 bytes. Another 800 bytes are used for basic operations as opening a window, initializing the rendering surface, sending the synthetized sound to the sound card, implementing the rendering loop and listening for the ESC keypress.

    All this code is written in assembler (nasm), for those who were saying we donÂt know what hardware means. We spoke to the machine in this demo, as much as you can do in a modern OS at least from user code. The C version of the demo (which we used during development and debugging) is close to the 4200 bytes. The demo is also selfcompressed, and in fact the first thing the demo does at runtime is to allocate some memory (350 megas), self decompress there, and ask windows to run from that memory location. The uncompressed demo as it comes from visual studio (cl+nasm) is 7 kilobytes if I remember well.

    Making a full selfcontained 4 minutes audiovisual piece like this is possible if you know computers, progaming, maths, rendering technologies, you apply a bit of imagination, and you are lucky to be the first to do it. So, those who