OK, Voxels

Posted by aeron on Nov. 3, 2012, 11:04 p.m.

Picking up from 2 blogs ago, I switched to Irrlicht and started working on texturing. A picture's worth a thousand words, so I'll shortcut by about 7000 this blog :)

After getting paging to work, I got some perlin noise loading in chunks:

Pushing it a little harder, because I can:

Now texturing is the tricky part. After working up the courage to tackle this beast, I loaded a simple texture and slapped on some UV coordinates:

Wait, have I deceived myself with how difficult this is? Okay but what if I want to support different material textures? I organize a couple textures in an atlas and start dialing in the UV coordinates:

Damn, it really was too good to be true. Okay fuck it I'll hack it by using modf:

I got rid of the black grid and it's starting to look more coherent. But alas the textures are reflected every other block producing noticeable patterns:

Well I seam to have coded myself into a corner. It's obvious my naive handling of vertex UVs won't release me from this type of problem, so I just started playing around with numbers. I ended up with this:

Definitely a cool look, but not what I'm going for. So I'm gonna have to approach this from a different angle, I found some code that implements the UV mapping I want in a shader which might be a viable method. I'm also looking into another method that involves texture arrays (which would ultimately have to be implemented in a shader as well). The latter method relies on slightly newer hardware but if I went that route I could reap the benefit of mipmaps, normal maps, and filtering without any bleeding along the borders. At the same time I'm perfectly happy without any of those things (I can't say I'm not fond of the pixellated style).

Anywho, that's all I have for now my friendlies lolwut

Comments

sirxemic 12 years, 1 month ago

I am a bit confused by the way you guys are throwing the term "paging" etc out there. What are you doing exactly?

aeron 12 years, 1 month ago

In the volume class I'm using you can limit the number of blocks stored in memory at one point in time. As more of the map is generated blocks no longer in use can be unloaded and stored into so called "pages" on the disk. Mega was referring to paging as an OS feature that allows the OS to do generally the same thing for application memory.

sirxemic 12 years, 1 month ago

Ah. I figured you meant that from the beginning. Then Mega used "page-flipping" and then you said "paging volume" and I was like "wut". Paging is the correct term, I think.

In any case, looks nice so far :P