.:- - - - -:.
.: FULCRUM :.
: _____.:\|\_________/|/:.____ :
_ ._ _ _._:_\ ___ ' '___ /_:_._ _ _. _
... . .....\| \\:. . . :: . . :// |/..... . ...
. \ | \: :.. . . ..: :/ | /
_/|___ _/|____ _/|__ ' _/|____ _/|____ ' _/|____ _/|_____ _
__\_ ._/__\ \ /____\ / _\ ___/___\ __ /___\ \ /_____\_. /____ _
\ ` __/ ` \' \ ` \ ___\ ` \ \ |/ \ ` \' \ ` . ' . \
_\ \ \ |\ \_ |\ \ |\ \_ '. \_ |\ \_ |\ \ \_
/__ \ /______ /____ /__ /___\ /_____ /___\ \___/
\ __\fulcrum\ ___\| \ ___\ \ ______\ \ ___\|sim1\ ___\2o14\ ____\
_ \|:::::::::::\| ': \| ' \| ' \| :: \|::::::::\| '
' ::::.:.: ' ' ' :.:.:::: '
: .p.r.e.s.e.n.t.s. .
. ..:::::: Escape Through Subspace 1K . :::::::. .
.. . .........: -------------------------- :.......... . ..
' : : . '
...................: :.../_ /_............
Code, "music": Seven
tools used: Crinkler, custom tools
* To run perfectly, the unsafe version of this 1K should run at exactly 60 FPS.
Otherwise it will run slower or faster than it was designed for. To ensure this,
- A very fast video card with lots of Pixel Shader 4.0 compatible shader pipelines.
It was designed to run in 1280*720 mode on a GTX 970, but the organisers changed
the hardware and beamer resolution in the week before the party. I don't expect
the 1920*1080 to run correctly on anything slower than a GTX 1080. For AMD, the
RX 480 is plenty fast for the 1280*720 version. And intel cards won't run this.
Sorry for the high hardware requirements but a 1K doesn't leave much space for
speed-optimisations.... The intro has been tested on AMD and NVidia cards with
- V-Sync set to Always On in the drivers
- AMD Optimize Power or the equivalent Nvidia feature that limits the FPS to 30
should be turned off in the drivers.
- The safe versions have timing code added, so should run on all videocards. They also
have a shader without glsl warnings, safe Crinkler options and less questionable hacks.
* 200 MB ram (for the Crinkler decompression)
* Tested on Windows 7 and 10, might even run on Windows XP
* 1 kb diskspace
- Kaatje and the kids for giving me time to work on this release
- Blueberry and Mentor for Crinkler 2.0. Most people have no
idea how amazing this tool is, and the new features are a lifesaver!
- Tom Lowe for discovering the Mandelbox fractal
- Knighty for the Cosmos fractal
- IQ for creating Shadertoy
- Sir GarbageTruck and Johan Burell for quality-checking the name.
- Las/Mercury for a certain optimisation that caused me a lot of pain
on the compomachine, but that I still needed in the end.
- Bloodnok, RufUsul and Pasy for testing the NVidia/Windows10 fix.
.About the intro.
This 1K was made for the Assembly 2016 party. It's been a few years since I visited Assembly,
and I wanted to make a high-quality release. 2 months before the party, we started investigating
various music strategies (CPU waveout, Midi, GPU waveout) but Midi is still king for 1K sound
I wanted to the visuals to be something more than the usual 1K abstract fractal art,
but a quick port of our previous 1K (Dystaxia, from 2013) from 1KPack to OpenGl + Clinkster 2.0,
showed that even with the nice new TINYINTRO and TINYHEADER features, we simply didn't have the
space to show any realistic objects. So, 1 month before the party, back to fractals it was. You
simply can't beat them for compactness, nice looks and combining large-scale features and details.
When looking at fractals on the net, I came upon a really nice-looking castle created by
intersecting a Mandelay fractal with a heightmap, and so got the idea of a spaceship-mandelbox
hybrid. A first version with the camera flying straight ahead over the ship was easily done,
and adding Knighty's Cosmos fractal gave a nice background.
Due to family circumstances, Coplan had to drop out, and our other musicians were busy. So, I
decided that ambient space noise would do, and I could do that myself. (Yes, I know there's no
sound in space. Sometimes reality would make a poor compo experience). I delayed working on the
music, though, and improved the visuals with fake reflections, the green Borg glow (Thanks to
Yncke for the idea) and some camera motion. The green glow caused a visual artefact outside the
ship that looked like a purple glow at low raymarching precision, so I co-opted that in a
2 weeks before the party, while working on the intro, my videocard gave up the ghost (Radeon HD
7870, rest in peace). That caused an involuntary 4-day break while I waited for an RX480 to arrive.
On one hand, I was happy that this didn't occur a month before, when the new high/midrange 14nm
cards from Nvidia and AMD were announced but not available, or a week later and closer to the
party, but I had really preferred to wait for the prizes in Euro to drop a bit. But at least the
new card gave me similar performance as the compo-machine spec.
At this point the music consisted of a single midi note, just to include the midi initialisation
code so I had a rough approximation of how big the intro was. I figured reserving 30 bytes extra
would be enough for some extra midi-noise. But when I started adding the music I was negatively
surprised... With the camera flying over the ship, I wanted to have sound fading in and then fading
out, and adding this already consumed all space. Adding some more variation in instruments, tone
and fading speed pushed that up to 50 bytes over the limit :(
The final week was spend looking over both the shader code and the assembler part again and again,
looking for tricks and hacks to save space. The camera motion could be simplified, some register
values are in a known state after Crinkler decompression, instructions were re-ordered and
countless shader variations were tested. The improved stability of Crinkler 2.0 was really a
life-saver here, it used to be that a simple re-ordering or a 1-byte change could the Crinkler
result to vary by plus or minus 5 bytes, whereas you now get stable results on the
fractions-of-a-byte level. That really helps to separate the good changes from the bad.
The size slowly dropped to the 1K limit. Inbetween I found a way to colorize the Cosmos fractal
with just 2 bytes that I really wanted to keep. Much re-tweaking of parameters ensued, because
while it looks 3D, the stars are actually a 2D fractal, and a discrete one at that: if you drop
the speed of the stars too much, the fractal behaves like a slideshow, with stars jumping from
position to position. And you cannot change the size, amount and brightness independently either,
any change influences everything.
I had expected having to cut *something* to make the cut, but 2 days before the party, I managed to
remove the final byte. Then I noticed the Assembly website had upgraded the supported beamer
resolution to full HD, with a videocard upgrade to match (GTX 1080), so I made a full HD version as
well, which was 1K without any changes. And so, for I think the first time, I got an entry entirely
done before the party. It worked on AMD and Nvidia, and I upgraded the laptop just to test it on
Windows 10. Unlike the past Revision parties, I wouldn't have to spend days in the compo room to
get my entry working.
Queue Friday, by which time the compo crew pretty much regarded me as an intermittent part of the
furniture in the comporoom. While the 720p version ran fine on the AMD compomachine (albeit slower
than on an RX480), the NVidia machine refused to run any version. Much detective work later (Was it
the shader? The assembly hacks? The dual-screen setup? The driver version? The driver settings? The
attached hardware? Unsafe Crinkler options?), it turned out to be a combination of a driver change
and an assembly hack, although I still have no idea why it didn't happen on at least two other
nvidia machines. Anyway, the fix was literally 1 bit, and the final 1080p version even dropped one
byte to 1023.
Now, lets's hope the audience likes it...
-- summer 2017 update: recent Nvidia drivers no longer initialize uninitialized variables to zero, which caused visible corruption on the ship. I managed to fix it while keeping the unsafe versions just at the 1K limit. I also added decent timekeeping to the safe versions so the length of the intro no longer depends on the speed and vsync of the videocard.
: \ \ :
:: ' \ Fulcrum memberstatus: ::
: ------------------------ :
:. seven.....................code .:
: coplan...................music :
: el.blanco................music :
: ranger.rick..............music :
: the.watcher.........code,music :
: yncke.................graphics : .
:: :: / .
....................::......... . . . . . ..........::...../_ /_.......
: : / /
.: . .........: visit us at : :..../..... . :.
.: --------------- :. '
' ''::::::: . http://www.fulcrum-demo.org/ . :::::::' '
. : . . . :
_/|__: _/|___ _/|_____ _/|_:_
_\ _ \_ __\_ ._/__ __\_. /______\.__ /__ -
_ \ |\ \\ ` .____/_\ . ' . \ ` \| \ - _
_ - _\ |_\ \\_ \| \\ |\ \ \_ ' \_ _
/____ /_ ' /____\ \___/____ /
demo\ ____\ \ ______\sim:1\ ____\tlp.ttn\ __\
\| ::\| \| :: .wt\|
' .::.':. DEMO .: .::. '
/ - - - - - -\
- - -
: use AMIGA TOPAZ fonts, please :