scene.org File Archive

File download

<root>­/­parties­/­2016­/­solskogen16­/­demo_oldskool/eph-neonsky-final.lha

File size:
5 203 176 bytes (4.96M)
File date:
2017-01-31 05:45:01
Download count:
all-time: 3 120

Screenshot (by pouët.net)

Screenshot

Preview

  • data/blank_sprite.iff 1.29K
  • data/clouds.data 162.81K
  • data/clouds_colors.data 576B
  • data/clouds_colors2.data 576B
  • data/colorcycle5.ppm 484B
  • data/colorcycle6.ppm 484B
  • data/credits_indexed.iff 8.53K
  • data/greets1.iff 10.58K
  • data/greets2.iff 12.63K
  • data/greets3.iff 10.81K
  • data/greets4.iff 10.17K
  • data/hongkonga.data 269.69K
  • data/hongkongd.data 269.69K
  • data/loadingbar.dat 4B
  • data/neonsky.iff 2.28K
  • data/normals_bpls.data 320.00K
  • data/normals_bpls2.data 320.00K
  • data/normalspal.data 1.00K
  • data/shanghai.data 269.69K
  • data/skyskrapers_heightmap.iff 61.72K
  • data/skyskrapers_keyframes.dat 5.86K
  • data/skyskrapers_texture2.iff 55.62K
  • data/spot.data 576B
  • data/talerigaater.wav 6.61M
  • data/taxi_interleaved.iff 476.42K
  • data/tunnel.data 576B
  • data/tunnel2.data 576B
  • data/tunnel3.data 576B
  • neonsky.exe 82.74K
  • readme.txt 7.49K
  • script4.eph 2.77K

file_id.diz

::::::::
readme.txt
::::::::
Neonsky Final by Ephidrena

Amiga Aga 060 demo 


Note: Requires about 1,8mb of chipram, boot from
cli before starting the demo to avoid issues.


Features:
- 24 bit streaming music downscaled to 8 bit
- Bitplane tunnels/ball/plane
- Bitplane photo crossfader
- Mandelbulb bump with ambient occlusion
- Voxelscape with tiltable camera and fog
- All effects in 640x256 running > 30 fps except the voxel
- 2x Supersampled HDR copperbars with glow
- Hires sprite overlays with superhires positioning
- Final logo HAM8 fade
- Final logo HAM8 horizontal blur 

Loaderror coded all effects and did some graphics  
Frequent did the music  
Evilryu did the normalmap and ambient
occlusion map for the mandelbulb fractal


Frequent writing:

The track used in this demo came to me as a bolt of 
lightning to my head some years ago. Most of it was written 
within some weeks, minor adjustments added at a later stage.

All work done in Propellerhead Reason and rewired to 
Ableton Live for improved mixing. The synthersizer sounds are
made in 96khz/24bit resolution and antialiased down to 
28khz/8bit with Sony Soundforge. Some audiophiles among you 
might recognize the use of 303 drumsounds. Original samples 
are in 16 bit resolution, and antialiased as well.

Although intelligent noise cancelling was used to get rid
of 8 bit artifacts, some noise is still present. Hardcore 
limiting might have reduced it more, but would have killed
most of the dynamic range (if not all), which in my opinion 
is undesirable.

But... what else can you do with something shitty as lame
stereoseparated Paula from 1985?...I could have written a 
book about how much I hate stereo separation and the lousy
dac converters mounted on all Amiga mainboards. Loaderror
might as well fill in with some opinions about the slow
chipram all Amiga models suffers from. Bah...enough from 
me. I'm glad the final version is done.
Enjoy!


Loaderror on the blogging keys:

After seeing Britelite's excellent Hires intro "Hires State
Of Conciousness" I wondered what else can be done in 640x256
resolution. Colour palette effects are essentially
resolution independent. Same goes for per scanline modulo
effects.

The tunnels/movetable effects

The texture is stored in the palette at 12x12 with lower
resolution "miplevels" of 12x6, 12x1, 6x1 and 6x1 again. All
together spending 240 palette entries leaving 16 colours
free for a sprite overlay (greets). Each level has a
different brightness and are resampled from the main 12x12
texture so that one can produce the light at the end of the
tunnel without spending any processing power on this.  Then
each level is color cycled according to their size to
produce the effect of the rolling texture. The y-motion is
because the table is bigger than the screen (shocking!). 9
different tables are created per tunnel with partial angle
and scroll offsets to mitigate the ugliness of 12x12
resolution movement. 1 of the tables are dithered using a
variable ordered dither pattern to produce a more plasma
like look. Works great on old monitors.

The cross fader (photo effects)

Another palette effect where the first picture is using
colours 0..15 while the second picture is using colours
0..16 * 16. Then the result of the mix is calculated at the
sum of these palette indices. For example a 50% mix of
colour 1,1 will be placed at colour index 16*1+1. The sum is
a side effect of placing the first picture's bitplanes using
bitplane pointesr 0-3 and the second image bitplanes at
pointer 4-7.

The neon copper bars

A 1D RGB buffer of 256 lines*2 subsamples*3 components is
created. Then additive draw a set of 1d points into this
buffer. Then perform a IIR blur filter back and forth to add
the glow. Then downsample, clamp and put it as a copper
list.  So it is 2x Supersampled HDR copper bars with bloom.

The voxel

Rotate/translate some camera rays, intersect them with a
plane on left and right side of the screen (a lot of
calculations become 0 because the plane coefficients are
0,1,0,0. 2 intersections figured out per line where one is
free since the camera can't roll and hence the intersection
just depends on y height and y-angle).  Look up height map
at the intersection point Fill and compare with height
buffer to avoid overdraw. If the intersection point is the
same as the previous intersection point for this horisontal
pixel position then it means we are on top of the voxel so
increase brightness to highlight it. When drawing on the
side fade towards black as drawing downwards to make this
"ambient occlusion" look.

The palette is organised to have shading and fog like this
colour = pal[shade+fog*16]; Shade is 0-16 and the palette
gets more and more foggy on increments of 16.

The 2d mandelbulb bump with ambient occlusion

Evilryu (quite active on Shadertoy) made a nice mandelbulb
effect and I asked if I could get the normal map and ambient
occlusion maps from it. Then these were combined by
shortening the normals of the normal map using the ambient
occlusion factor. Then afterwards this image was converted
from true colour to 256 colours.  Then we effectively have
only 256 unique normals to shade for the image and hence it
is resolution independent again. So 2 directional lights +
ambient were calculated in palette space and it applies to
the whole image using no effort. The image is 640x512
scrolled upwards.

Sprite overlays Hires AGA sprite 16 color overlays. The
resolution independent sprites are a nice HW feature. They
are positioned at subpixel accuracy on 35NS increments for
smooth movement. 

HAM8 Fade

Fading the final logo in HAM8 is not just about fading the
palette. One must additionally modify the pixels where the
R,G and B are selected to be modified.  This routine is
fairly sluggish and can be improved a lot. It uses 8bpl c2p
while 6bpl would be enough since the two final planes are
static. Additionally the fade code is in C which I haven't
dared look at. Maybe next demo there will be a faster HAM8
fade.. Or maybe this is quite boring in the first place.

HAM8 Horizontal Blur

8 pre-blurred Hires HAM8 pictures were interleaved so that
every 8 line is sharp and the lines between have varying
degrees of blur. Then a blur level is selected per scanline
using the modulo registers in a copper program.

Other stuff

The effects use a lot of chipram being in Hires and all. So
I quickly ran out of chipmem even after precalcing two of
these tunnel effects. So I made a "system" of copying data
back and forth between fast and chip ram. Next time I want
to make it progressive as the chip copy can be noticed by a
lag at the beginning of each effect.

The ancient startup code got translated from assembly to C
(yes startup code in 100% assembly for historic reasons).

First Ephidrena demo to actually use Amiga hardware
capabilities except what is needed for 256 color chunky to
planar effects. Now there is some foundation code in place
for making more use of it later. This was one of my main
motivations for making this demo :) 

The first Neonsky was using system code, but since I
couldn't iron out all the minor glitches and felt like there
was magic going on behind the scenes I decided to code my
own sprite and screen handling routines. Of course this
opened up another can of worms, but atleast they were my own
worms.

Demo coding process: 
1) This will take 1 hour, I'm a genious!  
2) Oh no!  
3) Why do I do this thing. I'm old now 
4) Oh this says i, but should have said j  
5) Goto 1