Part 1: Why Part 2: Stunt Island I'm a late 80s to late 90s gamer: some of my most imprinted memories come from that period. I remember vividly two incredible WOW! moments that changed my life. The first was seeing the DOOM screen melt on one of my dad's school's library machines: With a Master System at home as my only point of reference, DOOM was so many worlds apart
My attempt to rethink the way games are made In 2012, after shipping Fable 3 on Xbox 360 and PC, supporting some DLCs, creating Fable Heroes with some funky new rendering research and helping the team understand the workflows and transition to Unreal Engine 3.... (phew)... I was completely worn down and demoralised. As a team we did some amazing things. I made some life-long friends and was…
The problem statement is: Assuming a triangle-subdivided sphere, map any 3D point on or above it to a triangle index in constant-time, without using recursion, table lookups or complicated branching logic. Even better; make it so simple you can use it in a pixel shader. This is useful for when your playing field is on/above a sphere and you have some lookup tables you want to reference based on…
Around the age of 15 I started to code after a family friend gave me a BBC Microcomputer Model B that his local army barracks were throwing away. Though primitive, it was a wonderful machine that showed me where my future lay. I learned BBC BASIC and a smattering of 6502 Assembly to gain performance and then moved on to PC. I bought a second-hand 286 PC for something like £20 and migrated to…
I've been considering removing comments from this blog for a while; mainly because the site doesn't trigger much discussion and I didn't like keeping the overhead of Disqus around. After looking into Disqus load-time behaviour I was pretty shocked what I was forcing on people loading the site (although you really should be using the likes of Privacy Badger and uBlock Origin ).
Getting frustum points in world-space can be useful in a number of scenarios, such as debug visualisation or building a coarse volume around a partition in your frustum. Each method can be used depending what information you have available to you and what you want to avoid recalculating.
When you develop a solver for the Tammes problem you're usually concerned with distributing points evenly on the sphere , ensuring they are equidistant from each other. The radius of the circles you place at those points is generally not considered:
I posted an article a while back, entitled Very Fast, High-Precision SIMD/GPU Gradient Noise , where I outlined a technique for achieving double-resolution noise at speeds close to that when using float arithmetic. The key observation was that floor could be used on cell boundaries to mask off the ranges that require double arithmetic, allowing the bulk of the work to use float arithmetic.
And we are back! It must be a year now since my old site donw.org went dark for many reasons, including being busy working on my own game. There's some big changes with this new setup: I own the domain donw.io this time round. I've gone through a bunch of domains -- donw.org, donw.co.uk, etc. -- that I used to pay somebody else to manage for me. That was obviously not the right way of going about…
A recently published article by Inigo Quilez on Voronoi Edges highlights the technique of shifting the co-ordinate frame of procedural algorithms to improve precision. This is a really important little trick that I felt was worth reviewing, as it provides huge benefits to world generation at a planetary scale.
This is a bit of a fun post highlighting how some simple maths can be used to create great visual results. With some basic statistics, we can create looping skeletal animations from an input data set that contains non-exact loops. A typical example is a motion capture sampled run animation: This is derived from the CMU Graphics Lab Motion Capture Database, which has been converted to BVH files by…
For some reason I like quaternions. I fell in love with complex numbers back in school when I found out that they made more sense than real numbers. While it might not exactly be helpful to visualise quaternions as an extension of complex numbers, there's something in there that just grabs at me. Unlike previous posts, I've managed to update to D3D11 so I'll be discussing implementation details in…
I used to love Sublime Text 2 (UPDATE: I'm now a Visual Studio Code convert). For me, it does nearly everything a modern C++ code editing platform should do and is constantly moving in a direction that is pleasing to the soul. I've worked with Visual Studio since 1998 for editing my C++ code, and I don't like it. It gets slower year on year, adds many features which are not helpful to your average…
The first part in this series on Reflection in C++ gave a high level overview of many of the possibilities open to you when adding reflection to your games. In this second part I'm going to go into details and cover the system used to aid the rendering engine in Splinter Cell: Conviction (SC5). The motivation for the development of the SC5 engine was a clean break from the past. We were working…
If there was one job I'd love to do other than writing games it'd be writing compilers. This probably explains my obsession with the subject of reflection; a topic I've been hammering away at for almost 10 years now. Having written a few compilers in the past, it became glaringly obvious to me that reflection would be quite simple to add to C++ -- if you're willing to place some limits on it --…