18 February 2017

I'm now Contracting!

Two days ago, I started a new estimated 5 month contracting job back at Jagex. How quickly things change! Obviously I can't share details of why I was brought in, or specifics of the challenges I face, but I will try to share any general topics I can here.

It's fantastic being back - I did always like the company, and particularly the people.

It's going to be strange, but great, to be able to dedicate my time there to actual software development. My previous job became a mix of random assistance, project managing, line-managing, code reviews, meetings, and only occasionally did I get the chance to write any code myself. It's already clear that the self-training I did on Java Spring, unit testing, and even AngularJS, will come in useful, even at this early stage.

So, while I'm clearly no longer available over the next 5 months for other contract work, I can still take on some freelance work. I'd just need to fit it around the Jagex contract job, and I am able to book time off with sufficient notice.

If you have anything you'd like me to take a look at, please do still get in touch, as I might well be able to fit it in. If not, I may be able to recommend another freelancer to do it. So there's nothing to lose really!

11 February 2017

VDSS - Simulation and Rendering

It's been quite a busy week for me; getting some professional photos taken, attending a local business event, a fair amount of admin, and family things, so I've not been able to make as much progress with this as I would've liked. Good reasons though!

However, I did significantly improve the Simulation process - it's now much closer to what I was expecting to see.

I've also added very simple 'glass' objects to the 3D rendering, for the main display sphere, spinning screen, and the beam source. Here's a quick video of what I've got so far (it's much smoother in reality):

Clearly, that doesn't look much like glass, and I need to remove the portion of the sphere covered by the beam source cones. That'll come later.

I also need to figure out a good way to show the screen spinning really fast. This is actually easier said than done. It's currently rendered using the overly simplistic method of adding half a degree to its Y rotation every frame. This has a number of issues:

  1. It's not very fast. But simply adding more degrees per frame results in choppy animation. Imagine adding 90 degrees per frame. Then you end up with an X. Not smooth.
  2. It's inconsistent. Because it's progressing a certain distance per frame (frame based rendering), as the frame rate varies (particularly while rotating the view), it appears to speed up and slow down. If I do any kind of animation, I should be using time based rendering.*
I'll investigate motion blur, and maybe even just replace the flat spinning screen with a cylindrical effect. I'm uncertain the approach I'll take at the moment, but it's not a priority yet. This might well be a topic for a future blog post in itself.

As for the simulation itself, it's getting there, but it's not quite perfect yet. It should be a bit more like an hourglass top to bottom. It's probably related to some inconsistent scaling (both in the simulation and the rendering) which I'll tidy up, and it's not working properly for multiple beam sources. I'll fix it though :).

Once I've fixed the simulation, I'll concentrate on the web interface!

* Older PC games used to use frame based rendering. This is why, when you played them on a more powerful PC, which was capable of rendering more frames per second, these games ran comically fast. The "touch the forward button and now you're at the other side of the map" kind of fast. This is why time based rendering is so much better - the time that elapsed between frames is used to determine how much something should be moved. Now, the speed is constant, regardless of the power of the CPU.

3 February 2017

Volumetric Display Systems Simulator

"What's... one of those?" I hear you ask.

One of these!

(images clearly downloaded off the 'net)

More specifically, "swept volume displays" are a type of 3D display technology that relies on the "Persistence of Vision", drawing points of light onto a rapidly spinning screen to produce the effect of genuine 3D objects in space.

For my final year project at University, 13 years ago now, I implemented a 3D simulator for swept volume displays. More specifically, it simulated "distortional dead zones" within any simple display configuration, allowing you to explore the best configuration for image quality. Put simply, if the screen is at right-angles to the beam source, the voxel is the perfect shape. The more acute the angle, the more elongated and fuzzier the voxel becomes, reducing image quality.

The interface was originally implemented in Visual Basic, with the calculations done in C, and OpenGL responsible for the rendering.

The original Visual Basic interface
The original Visual Basic interface

The original 3D rendering, using C and OpenGL
 The original 3D rendering, using C and OpenGL

I've learned an awful lot since then, and I was always fond of the project, so I've decided to reimplement it using modern web technologies, finally unifying the interface with the rendering in a fun and intuitive way.