Saturday, 11 March 2017

Mesh simplification library

I've released a mes simplification library here:

No external dependencies beyond the qef_simd.h single file library I released last week.

Thursday, 2 March 2017

SSE2 QEF implementation

I've ported the existing QEF implementation to SSE2. You can grab the code here:

It should be possible to just drop that in to your project as a replacement, assuming you then enable SSE2 extentions when building. I saw ~2.5x speed up in my tests.

Tuesday, 22 December 2015

Improving Generation Performance

There are quite a few high profile games coming out in the next year or so that make use of voxels to drive dynamic content. Two in particular have really caught my attention, for different reasons. The first was Hello Games' No Man's Sky which is in a similar vein to my own project, using voxel data and Dual Contouring to generate traditional polygonal meshes.

Monday, 19 October 2015

Video update for October 2015

I've posted a new video to YouTube showing some of the speed improvements I've made recently.

Since the last video in Feburary I've moved the entire voxel -> mesh pipeline (except for the seam mesh generation) to the GPU via OpenCL and reworked how the volume is processed. I'm planning on a blog post to explain the changes but the main thing is that I no longer always sample the field at a 1:1 resolution. E.g. for a LOD1 node I now only sample a 128x128x128 volume instead of 8, and for LOD2 only 1 volume instead of 64. This has had a huge impact on the performance which has helped with other features, like the dragging operations you can see in the video.

Sunday, 26 July 2015

Fixing a seams bug

I've been sitting on the "fix" for a bug with the seams for a while now, and since I can't figure out a better solution I'll share my current one.

Thursday, 4 June 2015

Dual Contouring with OpenCL

I've spent the last few weeks rewriting the core component of my engine, the voxel pipeline. This encapsulates the whole process from density function to a triangle mesh. In terms of functionality the pipeline is essentially the same, but now is (almost) entirely implemented using OpenCL. In fact the OpenGL/OpenCL interop is used so that the generated mesh lives and dies exclusively on the GPU.

Wednesday, 29 April 2015

QEF implementations for C++/GLSL and OpenCL

I've created a github repo to hold QEF implementations. The repo currently contains a version created by Leonard Ritter (@paniq) which is a stripped down version of the original implementation by /u/unzret from my previous post. I've also forked that to create an OpenCL version, and added that to the repo too.

These implementations are completely free for any purpose which is an improvement over the reference implementation's license (which was free for non-commercial use). Moreover, this implementation is suitable for use on the GPU which is a technical improvement on the reference version.

I know a lot of people reading this blog are using C# so perhaps someone wants to contribute a C# port? Ideally the repo would be a single resource for QEF code so no one else ever has to write it!