High performance and high volume processing and rendering of low-poly 3D ants in Unity3D

As an experiment to play around with multi-mesh-instancing and compute shaders in Unity, I created a small project to render as many moving 3D low-poly ants as possible at the same time. Each ant was vertically offset by a few units and each was just pseudo randomly walking until hitting the virtual boundaries of the square. This was all done in a compute shader, and the result then rendered by the mesh-instancing unity provides.

This way, it was possible to render ~900k ants moving around all visible at the same time with stable 13 FPS. (This was achieved with a AMD Ryzen 9 5900X and a NVIDIA Geforce RTX 2080 Ti) To force them to be rendered at all times, an orthographic camera from above was used, which always sees all the ants.

Here is the link to the GitHub repository.

Here is a short video clip of them in motion, but of course with that many small moving objects, the bitrate suffers very much.

Mixed reality online multiplayer board game simulator in Unity 3D

Together with a teammate, I created a multiplayer MR experience in which you can play Chess and Go. This was for the module “Windows App development” Used for this project was Unity3D, MRTK and PUN2. Check out the description and code on the GitHub repository.

The project was made to work on an Augmented Reality device such as the Microsoft HoloLens and Virtual Reality Headsets such as the HP Reverb. The idea was that two players could connect with either platform and play with each other. Initially there were plans to integrate the table recognition of the MRTK for the AR devices, but that was scrapped due to time constraints.

In the end, project had the following features:

  • peer to peer Online Multiplayer
  • AR and VR support
  • Builtin Chess and Go modes (no rules, just board and figures)
  • import of custom games with board texture, 3d models, snap positions, etc.
  • control with hand gestures for AR (Hololens)

Gamejam: I Am Dice

My very first gamejam game made. Also my first actual completed project with the Unity3d engine.

This is a simple 3D collectathon platformer in which you have to collect all the dice “dots” to win. What happens when you find them all?

I worked on this in a team of four and we submitted it to the “GMTK Game Jam 2022“.

This was a rated gamejam and we placed as followed out of 6049 entries:

CriteriaRankScoreRaw Score
Enjoyment#8393.3813.381
Presentation#9693.6673.667
Overall#15203.2223.222
Creativity#33942.6192.619

Link to the game: https://steffen-winternheimer.itch.io/iamdice
Link to the GitHub repo: https://github.com/MisterIXI/i-am-dice

Dodgeblock

 

In Order to learn more about using the Unity3d engine, as well as programming C# scripts, I wanted to re-iterate the idea of my first game programmed in Pascal in Delphi. (To check out the post about that project click here) This game takes the basic ideas of my old game I just mentioned and adds expands on it further. The main difference is that through the 3D engine used all the objects can now move freely on the two axis of the game field, and additionally implement physic simulation into the mechanics. Through that the blocks can push each other around or have new types of movement (like the purple momentum based blocks).

You can download the game & files here:

First steps with a “LEGO Rock Raiders” inspired game

One Game I really enjoyed in my childhood was “LEGO Rock Raiders” and at some point I wanted to try myself on a game similar to it and see how far I could take it with my current knowledge.

A short explanation of the original game: it’s a strategy/building game in top down vision in which you indirectly control all your builders. While you can micromanage pretty much all actions it is one of those “queue your actions and let the builders decide who takes up which action” games.

Anyway, this project was my first go at pathfinding and made realize the complex math behind the different possibilites. After researching a few of them I decided to implement the A* and fully understand it before I moved on to start on the rest. After a lot of hours put into this I finally got a working prototype. You can see this here:

As you can see the little blobs can’t walk on water and try to avoid the gravel, since that makes them walk slower. I also made them split up when controlled together. But my biggest problem was that I couldn’t fully grasp the use of a dictionary for this implementation. And since this was supposed to be primarily a learning process I focused on the different topics lying below it.

I ended up doing other stuff and letting this project sit. Maybe I will revisit this at a later point when I have a better grasp of the more advanced basics needed for such use cases.