So I made it – First Class Honours gained, The Lawrence Ho Student Prize for the best game technology related project has been won; now get back on my voxel thing 🙂
Luke M. Iwanski B.Sc. (hons)
Presentation done, no prize for the best poster, oh well..
Two more weeks..
Simple optimisation great performance boost! – Skip ALL the non-visible faces!
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]);
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.
Grid 64 recalculation takes a while :S
Metrics will be added soon.
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:
Earlier I have introduced point light to engine, there is example of one point light – shown below.
Below 510 point lights on 64x64x64 cubes grid.
And its metrics..
Metrics for grid of 32x32x32 cubes, below:
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..
Lately I have started preparing tools for voxel engine, after yesterdays fails with bloom/hdr today I won the battle with Frustum Culling – well it was only battle and there is still lot to improve.
Above we can see snowman’s – my tech model – used in OpenGL API learning process.
Anyway – for some weird reason I have decided that drown “testing models” will be in red. and the colling ones green – don’t ask. Fairly quickly I figured out that culling is updating only when camera is in the move. when rotates frustum is not being updated.. Need to investigate that.
Some screen shots from Guardians project. Download Guardians