Aetherius is a voxel based game experiment being written in Java with LWJGL. It provides a procedural universe that runs infinitely in every direction across infinite worlds, with thousands of materials. All the non-procedural content is made with a suite of software that ships as part of the game. Aside from the pre-baked content and the modder, the game also procedurally generates content from mixing and matching an abundance of components that the player has the ability to add to or remove from. This content includes NPCs, Quests, Machinery and Materials. Aetherius is a true sandbox. The player can toggle every single aspect of vanilla gameplay, and construct their own game rules to suit themselves. It is fast approaching a viable alpha test phase.
Aetherius generates a different seamless texture for each ore voxel. Here's some of the theory behind the idea. :-)
Posted by JustSuds on Nov 22nd, 2012
Whenever you mine something in a game, you can always tell what it is. Usually because the game reliably uses the exact same texture or model to represent the ore. Its a tried and tested system. It works. But doesn't it get stale? You need to dig out 150 pieces of iron. 150 pieces of iron ore that appear, sound, and act identical. It always takes you x.y seconds to mine that one ore.One thing Aetherius does, is ads variations to almost everything. Colours, patterns, time periods, sound effects. The variances in voxel colours, and sound effects are already implemented. They're subtle, but you know they're there. They don't appear significant individually, but when combined they go serious lengths towards breaking the monotony of the landscape and gameplay experience. They break that "drone" effect (or maybe they just hold it off).
One of the most significant variances will be the patterns. You may have noticed in our screenshots, Aetherius doesn't use textures at all. Eventually we will add support for texture packs (already implemented, just not accessible through the menu yet, not till we have a larger and more stable amount of materials), but the vanilla experience will not be textured. Instead, we generate patterns. These patterns will have different properties per material; roughness, saturation, colour variance, contrast. These will give the appearance that every single voxel is in fact unique. Take a look below:
Under the "per voxel" heading, you can clearly see the borders of the voxels. These black lines would usually represent the edges of the textures. Just after the right edge, the texture would start to repeat from the left again. We've chosen to take a different route. We generate textures on the fly from our pattern parameters. To do this, we take a sample of Simplex noise (shown to the right) and we interpret it according to the pattern supplied. The result of our simplex calculations is a floating point value between 0.0f, and 1.0f (in the image, we interpret 0.0f to be black, and 1.0f to be solid white, with everything in between being represented by a different shade of gray -- many more than 50 :D) So with low abundance, only the whitest whites (approaching 1.0f, maybe values greater than 0.998f) might be used as "bits" of ore. Each sample is slightly different, so with high colour variance, the differences between samples will be used to exaggerate the contrast in colours of "bits".The beauty of simplex noise is that the results are reliable. Notice that nowhere in our sample is a bright white pixel adjacent to a dark black one. The results of simplex noise are actually a set of randomised gradients. That is at a certain resolution, every point is either black or white, and represented by a direction. Then as the algorithm traverses along that direction, you get a smooth shift between the black and the white point.Aetherius actually uses Simplex noise for almost everything. Almost everything is slightly varied, and absolutely all variation is derived from Simplex noise. This allows us to have hundreds of materials of the same type next to each other with a guarantee that the textures align perfectly and never noticeably repeat.