Thursday, November 13, 2014

Python-3 Game Server

I've been working on something new. I get a lot of projects where I have to add multiuser functionality. Finally I've made the jump to Python 3, and built a generic multi-user game server, so I can stop rewriting this sort of thing for every new project. It's using the most excellent asyncio framework, with aiopg for Postgresql support.

The server code is on GitHub, the Unity3D client is still in progress.

Those tedious functions, such as Registration, Authentication, Reset Password, Messaging, Rooms and Object storage are solved, may I never have to write a "Reset Password" module again!

Thursday, October 09, 2014

4 Million Vertices of Procedural Spacecraft

Still lots of improvements to be made... but it is definitely getting better.

Wednesday, October 08, 2014

Procedural Spacecraft

I applied the greeble system to another spacecraft shell, trying to make some kind of freighter.

This highlighted a few issues. Greebles need to tile, rather than stretch. They also need to take collisions into account when determining placement.

Sunday, October 05, 2014

More greebles...

Greebles - Before and After



I've also made a Mesh Combiner script, which combines meshes which share materials into single sub-meshes, and also works with the 74k vertices per mesh limit. This also works nice with a LOD system, so you can enable and disable layers of greebles as required.

Being able to script the Unity editor in this way makes it an extremely powerful game dev tool.

Saturday, October 04, 2014

A Bug in the Greeble System

Greeble Tool for Unity

As part of my quest to create amazing procedural spacecraft, I made a greebling tool for Unity. Here are the before and after screengrabs.



If you want to be really crazy you can even add greebles to your greebles.

Greebles Upon Greebles!

Thursday, September 25, 2014

Surround, Binaural, or Spatial Sound in Unity3D.

Over the last week I've done a lot of research into surround sound and how it works. Some things surprised me. Here's a summary of my findings.

Headphones are the best output device for creating surround sound. This is because the amount of sound reaching each ear can be precisely controlled, without also sending sound to the other ear (this happens with any speaker setup).

Our brains determine where sounds are coming from based on subtle changes created by the shape of our ears, head density (LOL) among other things. We can emulate this using 'head-related-transfer-functions'. Wikipedia has a good summary of this. If you have audio that has been processed using an array of HRTF filters, the best way to supply this sound to your ears is with plain old stereo headphones!

The bad news is that HRTF is very CPU intensive to compute. This is the reason we have dedicated surround sound hardware. Not all surround sound hardware implements HRTF, this headset from the same company simulates the effect, it is not true HRTF.

If it can be simulated using hardware, it can also be simulated using software, which is exactly what I've done. You can now provide virtual surround sound on any pair of stereo headphones, no extra hardware required. 

Unity currently simulates 3D sound by using volume to simulate distance, panning to simulate left and right, and the doppler effect to simulate relative velocity. However it does not provide any audio cues for front and back, or when sounds are occluded. The Spatial Audio package improves this by adding left/right phase adjustment, and frequency filtering to simulate sound from the rear.

The package also simulates sound damping as a result of being occluded. These subtle adjustments in sound give a significant improvement in spatial awareness to the player.

I've uploaded a web player demo so you can hear the difference for yourself.

Thursday, September 18, 2014

Spatial Audio in Unity3D

I recently acquired an Oculus Rift.

It was easy to integrate into one of my existing projects, however during testing, I discovered Unity does not support 'surround sound' using stereo headphones.

After much research, trial and error I have found that getting 'true' (HRTF) surround sound really requires dedicated hardware. It's too expensive to run realtime on your CPU at the same time as your game.

I read that FMOD has a 'fake HRTF' implementation, however this is not exposed by Unity. Well, at least it can be faked right? After all, reality is not important, perception of reality is!

So I faked it. This is my SpatialAudioSource component.

Just drag and drop the component onto any existing audio source. It also features audio occlusion. So if something gets between the Player and the AudioSource, the audio is altered accordingly.

When it's ready, I'll put it on the Asset Store.

Wednesday, June 11, 2014

2500 AI Bots

I'm stress testing React, my behaviour tree AI tool for Unity. The screenshot shows 2500 AI's wandering a plane, obeying orders from their commander. Most of the CPU is being used by the skinned mesh renderer (4085 draw calls!).

The next release of React will add some new features. There is a 'chain of command' component which allows an AI to command a group of other AI, and respond to success or failure of orders. There is also a goal planner, and a swarm movement component in the works.

Tuesday, April 08, 2014

A Web Server inside Unity3D

UniWeb now includes a tiny embedded web server which you can use to do crazy things. That is all.

Popular Posts