Jump to content

  • Log In with Google      Sign In   
  • Create Account


Member Since 11 Jul 2012
Offline Last Active May 27 2014 04:54 AM

Topics I've Started

Surviverse - Next-Gen Sandbox Game, Experimental Project

17 April 2014 - 11:39 AM

I'm glad that I've finally published my first unity project - Surviverse. The official website address is:


Surviverse is an open-world sandbox game. I have a lot of ideas and below I placed a short description of my work (the final goal):

At the beginning of the game player has nothing. He starts as a castaway in some unknown, mysterious world. As the name suggests, he must do everything to survive, which includes keeping his energy high enough (hunger + fatigue + physical damage to his body) and not getting killed by some creatures. To do this, he must collect some resources and build a shelter. Later, he can dive into researching magic or technology. Both branches provide awesome items and abilities and finally let the player go to space or jump into different dimensions to explore new, dangerous worlds...

The game is based on voxel terrain similar to other games, but with a significant difference: terrain is far more detailed than usual 1m. It is possible due to advanced techniques used and Unity optimizations. You can build at very high resolutions like 6cm and still keep your performance high. Soon, I'll implement terrain generation on GPU, which shall accelerate the game so much that terrain generator will be able to use high resolutions for things like heightmap, etc..

For now however, the project is in its early-dev stage and has only a few basic features (world, inventory & crafting, building) implemented. The only mode player can play now is creative. An infinite world is generated and then player can craft world modifying items like: Stone Bricks Hollowed Cylinder (material + shape + some other relevant data) and use them to build what he wants.

Get more information about the project at: http://surviverse.com

I have a development blog up and running and all new stuff concerning Surviverse will be published there: http://surviverse.com/development-blog

The game is available for download here: http://surviverse.com/download, but I'd recommend to read help articles before playing.

I plan to update Surviverse regularly. New posts/updates should appear at least every week.
I you want to support the project and get quicker updates, let me know you're interested by following my twitter: https://twitter.com/Kiel366 and Google+ site: Surviverse on Google+

I attach two of my screenshots (see full gallery at: http://surviverse.com/gallery).


So now, go to my website (http://surviverse.com), download the game, read some help as the controls might be quite confusing and play the game!


Write here or on the website what do you think about the project and build something awesome and upload it in this thread as I want to see what you can build.

Hope to see you on my website and in the game soon! icon_biggrin.gif

Best way of volume selection

23 March 2014 - 11:49 AM


I'm writing a sandbox game in Unity 3D based on voxel terrain. I need the player to interact with the world (place/remove blocks).


The problem is, that size of the smallest voxel is 6 cm, so placing voxels one-by-one is unacceptable if player wants to build somehthing big. To solve this problem I've created a crafting system, which lets the player create e.g. a 40x5x5 cube of stone.


Now, the problem is that player must be able to change the orintation of the created item and I don't know how to achieve this! Do you have any idea how could reorientating look like? Maybe according to mouse movement (but how)? or using keyboard...


I've attached a screenshot of what it is like now. Please think of a way how could player reorientate that box in a user-friendly way.




Structure generation in infinite sandbox world

06 February 2014 - 04:54 PM



I'm working on a sanbox game project. I use voxel terrain and my world is infinite. It is divided into 16x16x16 chunks. Generating the heightmap is quite easy, but generating structures like trees or ponds is a problem and here's why:


Each of these structures can reach outside the given chunk and my generator works like this:


generator.generateDataForChunk(Vector3 offset).


The easiest solution would be to just create a map full of chunks and then run the generator over the whole map using world.setVoxel that would work out the proper chunk and set the block, but my world generates also as the player moves so the problem is that if eg. I generate a big tree and its trunk resides on the chunk, which just has been created by player motion, an already existing chunk could be altered eg. by the leaves which generate along with a tree and this is really bad:


consider a tunnel starting on a chunk created due to the player's motion. This chunk gets generated and it changes half of the world player can see because it is carved so that it changes the existing chunks!


I don't know how to resolve that problem and setting sth like MAX_SPREAD to each component is not also good because then a lot more chunks would have to be generated. Doing everything only based on noise (like heightmap) is not an option either, because I'll want also to generate from some pre-loaded structures like villages or castles.


Please help me and thanks in advance.


Transparency problem in voxel terrain!

08 January 2014 - 09:15 AM


I'm working in unity3D and trying to make glass in my voxel engine. I enabled alpha blending, but it resulted in voxels with solid textures also being transparent!
How to make transparent textures properly? Can one mesh be transparent and solid at once or I have to create a dedicated mesh for transparent materials? (World is divided in regions, each one has its terrain mesh) confused.pngconfused.pngconfused.png


Thanks for your help.

Tiling textures using mod() in shader causes stripes on textures

26 December 2013 - 06:39 PM



In my Unity project I want to apply various textures to my voxel terrain. I'm using a texture atlas. In some cases I needed to repeate the texture, so I found out mod() function to be the solution, but it produces nasty one-pixel wide stripes on my textures, which appears to be the first stripe of the neighbouring texture. I turned all the filtering off (apart from point, which cannot be turned off (which is logical) and I think this is the problem), but it did not solve the problem. And here's the question:


How to get rid of this stripe?


Possible solution (but i'd rather a simpler one):


Create an alghorytm that from an array of individual textures creates a single texture atlas, but it adds additional one-pixel padding to each texture (repeating the bordering pixels) - if sampler just takes that one pixel from the neighbouring texture due to point filtering (which cannot be turned off) it will fix the problem, but as I wrote - if you know a simpler solution, it is better for me.


Below I place the source of my shader:

I also attach some screenshots.


Input.color contains texture offset in atlas.

Thanks in advance for your help!

Shader "Custom/WorldShader" {
	    Properties {
	    	_MainTex ("Base (RGB)", 2D) = "white" {}
	    	_TileScale ("Texture size in atlas", float) = 1
	    SubShader {
		    Lighting Off
		    pass {
			    #pragma vertex vShader
			    #pragma fragment pShader
			    #include "UnityCG.cginc"
				sampler2D _MainTex;
				float _TileScale;
			    struct VertIn {
				    float4 vertex : POSITION;
				    float4 color : COLOR;
				    float2 texcoord : TEXCOORD0;
			    struct VertOut {
				    float4 position : POSITION;
				    float4 color : COLOR;
				    float2 texcoord : TEXCOORD0;
			    VertOut vShader(VertIn input) {
				    VertOut output;
				    output.position = mul(UNITY_MATRIX_MVP,input.vertex);
				    output.color = input.color;
				    output.texcoord = input.texcoord;
				    return output;
			    float4 pShader(VertOut input) : COLOR0 {
				    float2 newUVs = float2(fmod(input.texcoord.x, _TileScale) + input.color.r, fmod(input.texcoord.y, _TileScale) + input.color.g);
				    return tex2D(_MainTex, newUVs) * (UNITY_LIGHTMODEL_AMBIENT * 1.5);