Tuesday, September 11, 2012

"Long Island Ice Tea" - Tech Demo

We proudly present our first tech demo. We are planning to deploy a tech demo each time we implemented some interesting feature.

After some experimentation we decided to ignore the heightmap based Unity terrains. Instead we combine a formable organic environment with sharp blocks. The intention is to accentuate the difference between natural grown landmarks and man made structures.

This demo shows the basic mechanics of terraforming and block placing. It contains 5 types of materials for the terrain and block placing. The terrain is currently limited to a small area.

We created our demo section where you can see the planned demos and start playing the already released ones.








Known limitations:

  • You can fall through the terrain when you walk of the edges or dig too deep :-)
  • The normal calculation is not final. (Chunk edges visible)
  • Sound crackling issue: Some times the sounds is kind of distorted ... seems to be an unity issue and machine depending... under investigation

Wednesday, July 11, 2012

Unity Experiments

As mentioned in our previous post we are currently experimenting with different solutions to represent an interesting game world.

These are some screens from an early endless terrain generator.

Enjoy!






Tuesday, July 10, 2012

Status

One year ago we started the development of slyceverse. During this time we learned quiet a lot about game development.

It's time to take a look at what we have learned so far and what this means for the future development.

Technology

It was a really fun and interesting experience writing a game framework while discovering DirectX and shaders.  2 Months ago we realized that this approach is really good for learning and understanding the underlying concepts. But it also had a big downside: We had to reinvent and build so many things, like mesh importers, networking, storage, animation, physics interaction and sound. This was quiet a big task for a team as small as and time constraint as ours.
We needed to cut some development time by using a game engine that supplied us with standard implementations. This would allow us to focus on the game concepts and mechanics.
This is why we evaluated Unity3D and decided to use it. Unity offers a wide range of ready-to-use components, an asset store, multi-platform support and most importantly we can use our favorite programming language c#.

Game Concepts and Mechanics

We also decided to take a look at some of the game concepts and mechanics.

So what are our big goals?
  1. Procedural generated rich game world that is fun to explore
  2. Share the experience with others
  3. The ability to shape the world


Shaping the world

Shaping the world means to interact with the environment by removing or adding volume to it. Thus creating mountains, slopes or caves.

Our current approach involves voxel based terrains that we transform into iso-surfaces via the marching cubes algorithm. 

Let me explain what this means:
  1. creating voxel volumes
  2. compressing and storing of voxel volumes
  3. manipulation of voxel volumes
  4. managing of voxel volumes
  5. iso-surface generation (mesh generation)
  6. lod-level iso-surface generation
This approach uses a lot of CPU time, RAM and storage space. We need to store not only the voxel volume but also the generated meshes (for performance). And when we add more detail layers, like shadows, grass and decals we have even more data to process and manage.

Our voxels have density, material, light and additional attributes. And most importantly we cannot tell if a voxel is visible by only looking at the voxel itself. Only after iso-surface generation we know where the surface will be. 
This problem doesn't exist in a world like Minecraft, where every voxel is represented by a cube.

The big downside of using voxels for terrain representation is that we have to store a lot of information that we rarely need. All those chunks full of stone, wood, sand and air. And even with storage solutions like sparse octrees or compression there is a lot of overhead from managing those voxels.

A mountain in the distance consists of many voxels that we have to create, manage and store. Even when the player will never visit or manipulate it.

Is there a way around this?
  • Do we really need to store that a mountain consists of vast amounts of stone? 
    • Could we somehow interpolate it and thus reduce the required storage space and RAM? 
    • Would the player mind an interpolation when the result feels good and is nice to look at?
  • Do we really need to store all the voxel data and generate the iso-surface from it? 
    • Could we manipulate the mesh directly? Is this more CPU hungry than a Marching Cubes?
    • Are there other methods that produce satisfying results?
  • Generally how can we reduce the amount of stored and managed data necessary for the world and player? 
We set some requirements for the terrain generation and representation to help us find different solutions:
  1. The initial iso-surface creation of the terrain in sight should not take more than 30 seconds. 
  2. (Small) Changes to the environment should take effect immediately. 
  3. The needed RAM should be under 1 GB.
Currently we are thinking about these questions and trying some ideas. We don't know where this will lead us. But it will be fun to find out :-)


World generation

Our goal is to create a world that will be generated each time you start a new game. The player should be able to tinker with the generation process. For example what kind of landmasses, climate and biosphere.

The world should be fun to play and interesting to explore. Different landscapes, moods, creatures, plants and weather.

Populate the world with creatures, plants and landmarks. 

Later on evolve creatures to sentient beeings and simulate the creation of gods, cities and civilizations. And on top of that create some quests. I think this bit will take us some extra time :-)

In this area there are so many sources of inspiration like Game of LifeSim EarthMinecraft, Procedural WorldsADOM and Cult.


The Future

We will need some time to get these questions sorted out and familiarize us with the Unity framework. Then we need to port some of the code-base to Unity or rebuild it from scratch to take advantage of the new framework.


Hope you stay with us…
Until we meet again in the Slyceverse!

Saturday, May 5, 2012

Screenshots: Leaves - more instanced geometry

Added some more instanced geometry. This time some leaves. Makes the trees look more vivid.
Cannot wait to see the results when we add wind :-)







Friday, April 27, 2012

Screenshots: Instanced Grass

Our latest achievement is geometry instancing. We put it to good use and created some nice looking grass patches.

They are generated using the vertex output from the marching cubes algorithm. The texture of the instanced geometry is based on the material of the vertex. The normal of the vertex defines if there should be an instance and of what kind. Pointing upward we get grass, downwards we could add lianes.

We want to add animation as well. Wouldn't it be nice to have grass waving in a summer breeze? Or shaking and bending sideways due to strong winds.

The current images are not perfect because the draw order of the grass and water are not fully correct. This means you can't see the sea grass trough the water surface.

Now enjoy the screens :-)





Wednesday, April 4, 2012

Screenshots: Basic inventory

Today we added a basic inventory, yay! :)

And while we were away coding, some grass snuck in as well.

Monday, March 19, 2012

Screenshots: Sea of Tranquility

We finally added basic water to slyceverse. Thirst will not be your death :-)

enjoy the impressions of volumetric voxel water (try saying that ten times quickly)

Tuesday, March 13, 2012

Screenshots: Voxels gone Wild, Water and Walls

Here are some screens showing my playground during development and testing. I'm currently working on water and transparent volumes. Still some work to do.

A glass dome

Voxels gone wild

Adding transparancy

Mayhem
Creating wall like surfaces

Wednesday, February 29, 2012

Update: sunny days and starry nights

Timelapse of the current day/night cycle in slyceverse.

Planned features for skybox are: 
  • Atmospheric scattering
  • Volumetric clouds
  • Weather moods




Sunday, February 26, 2012

Update: HUD elements, OBJ and color control

Changes

  • added HUD
    • currently shows the game time and active tool
    • todo: compass, health, minimap, toolbelt
  • added  windowed and fullscreen resolution
  • added Wavefront .obj format importer
  • added contrast, brightness and gamma settings

Screenshots


HUD showing the active tool and game time



Thursday, February 23, 2012

Hello world!


In June 2011 three developers decided to have some fun and naively started to create a 3D game. This is their story ....



What you saw here is the current development version of the game's various components.
These include: procedural world generation, voxel management, iso surface generation, UI, DirectX interface, 3D rendering, collision, lighting, music and 3D sounds.