Home Artists Posts Import Register
Join the new SimpleX Chat Group!

Content

Liminal according to stats is a somewhat difficult. Only about a 3% success rate from the playthroughs though it could be including different playthroughs with the same character.

Anyways, for after Halloween I wanted to choose a project that I could really sink my teeth in. I've always been a fan of procedural generation and I wanted to also go back to doing AI like the original Viva project. I stumbled on a voxel youtube video and I asked "Why aren't there many truly destructible environment shooters" out there?

The answer is, because it's hard. Such a dynamic landscape is difficult to represent computationally. However I already achieved a proof of concept that allows:

  • Destructible environments
  • No floating pieces
  • Base template for a shooter

This concept uses voxels. It's exactly like Minecraft except the mesh generation that arises from the grid of values gets constructed to create more interesting looking isosurfaces, as opposed to blocky blocks.

This devpost is the first to detail the progress of the project.

First I began with a simple voxelizer that creates chunks in places where you make BoxColliders. Then you run a grid for each chunk and assign a 1 if it's inside the box collider or 0 otherwise. Then you run a compute shader to voxelizer the isosurface:

With this system I was then able to write a little shooter that writes a "zero" wherever you shoot. Creating a destructible environment:

The next step was when things started to get complicated. If there is a floating group of voxels, I wanted to convert that group into a physics object so it would fall.  First I had to figure out how to find these groups.

The solution was to create test groups from where you subtract a voxel, so it only checks if you shoot and destroy (because thats when floating islands can be created). Then, for each test, snake your way until you hit the floor. 

The snake only travels to another voxel if both are solid (have a 1 assigned). From there if I run out of places to travel to and didn't touch the floor, then it's a disconnected group.

The floor is denoted as having a negative value to save space. So 0 means empty air, 1 means solid box, and -1 means foundation (floor). I feel like the bottleneck for games like this is memory as it can very quickly accumulate CPU and GPU memory and clog the game up.

With this in mind and a couple days later. Voila:

I then began to prettify it by just adding some basic smoke explosion particles:

When physics bodies are created, they can be expensive to compute if they accumulate so I needed a way to delete them over time. Instead of just deleting them after a set period, I made them revoxelize into the position they rested in:

This way the environment can keep evolving but still maintain close to its previous shape.

That's where I'm at right now. I have yet to find a theme for it but I will be working on gameplay. It will also be multiplayer. As for the AI side of things, I'd like to have at least a dozen AI players join 2 teams. More on that later.

Stay tuned!

Files

Comments

Anonymous

wonderful work!