Editable Grid.. yay!

Editable grid 16x16x16

Finally, my grid is editable now.

We can edit or remove current blocks – adding new ones will be introduced after optimisation stage.
Current version supports 4 standard blocks (Blue, Green, Yellow, Brown) and 1 point light (Blue with circle in the middle).

In this iteration of “boxel engine” regenerateBuffers method updates nearest block that collides with ray fired from camera POV within worldGrid 3 dimensional table, after that, buffers that contain shadow and light powers are recalculated, at the end two openGL methods are called (for each buffer):

 glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer[sectorID]);
 glBufferSubData(GL_ARRAY_BUFFER, 0, frame_vertices[sectorID].size()*sizeof(glm::vec3),  &frame_vertices[sectorID][0][0]);

first, buffer is bind, and then values are updated, starting from index 0 and then updating whole buffer.
Optimisation, that I will be introducing soon, is updating only changed values that will reduce data size.
That has to be send to graphics card.

Note:

Grid 64 recalculation takes a while :S

Metrics will be added soon.

100 will be about: Shadows and some point Light(s)

Shadows added - calculated on GPU but still works fine!

Shadow value for each cube is stored in separate grid, values are sent to shader and then output is altered. It all depends on value.
The value is calculated based on number of obstacles on the way between light and current cube.
Below you can find some metrics:

Metrics for shadow added.

Earlier I have introduced point light to engine, there is example of one point light – shown below.

Point lights introduced.. performance drops.. but that's good.

Below 510 point lights on 64x64x64 cubes grid.

Point lights on 64 grid - 36 FPS.. pretty Ok.

And its metrics..

512 Point Lights took 2 Friends Episodes to load in

Metrics for grid of 32x32x32 cubes, below:

Wait.. What?!?.. straight Line?

Why the results for point lights are almost the same?
All the calculations are precomputed on CPU so we are dealing with fixed buffer of light values – which is fair enough, however I need to optimise loading process so it will allow to add lights in real time.

Next step, editable terrain..

Directional Light performance impact on the scene

Directional Lighted "boxel" scene

Very simple calculation of directional light had noticeable impact on the performance, table below shows it:

Performance impact for different number of boxes.

and yeah, SW:TOR is pretty Ok but nothing can win with “coding hunger”.

First Video Demo

And here we are first Tech Demo.

Long Story short.
After hours spend on readings, coding and calculations I have got simple, bit slow but working Smoke effect.
Grid 96^3
FPS 25 – 30 on ATI Radeon HD 5700 Series which lets face it is a crap.
Next step – rewriting code, trying to make it bit more flexible and implement it to polygon based scene.

I’ll make it smoke!

15 Points!

After hours spend on research and readings great publications like: GPU Gems, Coder Mind or Philip Rideout’s, Miles Macklin’s blogs aim of my Honours Project gets clearer and clearer.

I want to create simple Smoke Effect.

“Particle effects like smoke, fire and foam can be efficiently rendered without using hacks. Voxels are also being used by some big Hollywood special effects studio’s to render hair, fur and grass. ” – quote from Ray Tracey’s Blog

All important calculation will be proceed on GPU – I will do my best – using GLSL.

After couple hours spend on learning GLSL I have got that:

Bonsai - Raytracked

Loads of artefacts, however it is not so bad for just couple hours.

Next step will be to implement Perlin noise to get echo – base for my particles.

21/06/11 Update:

Perlin noise implemented.

Cube ‘n’ Cubes

Cube, Texture, Normals n Light

Over the weekend I have managed to do a bit for my Voxel Engine – well now it will be more like minecraft but hey I am still learning.

Boxes are connected by manager to Entity, Material manager improves performance.

The idea is simple each object is based on bunch of cubes, terrain is based on bunch of objects, that should allows me to implement octree pretty easily.. I hope.