In a very interesting journey into learning how to get the most out of the STM32F7 and an extra 512Mbit of fast SRAM, I came up with this graphics demo application. I used the STM32F767ZI - NUCELO (link) , (link) , custom designed a sram SOJ breakout pcb for 512Mbits of external SRAM IS61WV5128BLL-10KLI (link) , (link) , and a prototype pcb integrating FRAM for use with the STM32 QUADSPI periperphal. (link) , Some of the quadspi features were not used, such as dualing FRAM chips.

SRAM SOJ-36 Breakout, Download Eagle .brd at OSH-Park

SRAM SOJ-36 Breakout, Download Eagle .brd at OSH-Park



I jammmed all of this with a 256x64 4bit Grayscale OLED, custom 5V USB supply with conditioning, for noise-freeness Analog's ADM7150 (link) , regulator was used, all of that and this, dot, dot, dot, into a metal cellphone packaging box

So I hope the code is re-usable for someone that wants to delve deep into isometric 2.5D graphics. Being isometric, there are a lot of really cool tricks you can pull off. My favorite trick I implemented was the "dynamic radial grid". Which is kinda like a "shader" for voxels. It takes a signed distance function of sorts, and then for each voxel in the radial grid it's "height" is calculated. There is a "pixel voxel shader" that computes the shading for each voxel as well. I really like how simple this system turned out to be. The shockwave and explosion use this system and it is one of the best things I've ever seen in grayscale! It's a truly procedural system and I'll have to make more use of it.

The true voxel loads a VOX file and caches it to FRAM for persistant storage. For example the SR-71 Blackbird is sitting in FRAM memory (which was programmed from FLASH b4) and in real-time loaded over QUADSPI and rendered in all of its glory. The most amazing part of fun I had with this was the rendering of voxels, that rotate. If the lowest level primitive (voxel) can rotate, thus the entire model consiting of voxels (the primitive) can rotate I thought.... and sure enough here is the SR-71 Blackbird (you may have to manually up the quality on the youtube video) :



+ Various ways to render voxels, using software rasterization.

+ Explosion, procedurally generated in real-time.

+ Shockwave, procedurally generated in real-time.

+ Terrain generated using perlin and simplex noise.

+ Procedurally genererated buildings using psuedo-random numbers.

+ Buildings are placed using a special box packing algorithm.

+ In parallel, using DMA2D, a glow pass is computed on the last frame. This is almost free in cpu cost!

+ Optimized assembler routine for dithering 8bit grayscale to 4bit grayscale

+ Import .VOX files, check out MagicaVoxel

+ Good example usage of QUADSPI to FRAM, using MemoryMapped IO

+ Good example usage of interfacing a 256x64 OLED w/4bit Grayscale

+ Optimized software rasterization (especially isometric cubes, even rotating ones)

- contact AT supersinfulsilicon DOT com



 
 


donate


Free Web Hosting