Miles Macklin

Path Tracing

A few of us at work have been having a friendly path-tracing competition (greets to Tom & Dom). It's been a lot of fun and comparing images in the office each Monday morning is a great motivation to get features in and renders out. I thought I'd write a post about it to record my progress and gather links to some reference material. Here's a list of features I've implemented so far and some pics below: Read more →

Trees (the green kind)

I've always had an interest in computer generated plants so I was pleased to read Self-organising tree models for image synthesis from Siggraph this year. The paper basically pulls together a bunch of techniques that have been around for a while and uses them to generate some really good looking tree models. Seeing as I've had a bit of time on my hands between Batman and before I start at LucasArts I decided to put together an implementation in OpenGL (being a games programmer I want realtime feedback). Read more →

Atomic float+

No hardware I know of has atomic floating point operations but here's a handy little code snippet from Matt Pharr over on the PBRT mailing list which emulates the same functionality using an atomic compare and swap: inline float AtomicAdd(volatile float *val, float delta) { union bits { float f; int32_t i; }; bits oldVal, newVal; do { oldVal.f = *val; newVal.f = oldVal.f + delta; } while (AtomicCompareAndSwap(*((AtomicInt32 *)val), newVal. Read more →

Fin!

Batman: Arkham Asylum is finished and the demo is up on PSN and Xbox Live. I was pretty much responsible for the PS3 version on the engineering side so anything wrong with it is ultimately my fault. I think most PS3 engineers working on a cross platform title will tell you that there is always some apprehension of the 'side by side comparisons' which are so popular these days. This one popped up pretty quickly after the demo was released: Read more →

Tim Sweeney’s HPG talk

This link was going round our office, a discussion over at Lambda the Ultimate regarding Tim Sweeney's HPG talk. http://lambda-the-ultimate.org/node/3560 Tim chimes in a bit further down in the comments. Read more →

Handy hints for Bovine occlusion

Code517E recently reminded me of a site I've used before when looking up form factors for various geometric configurations. One I had missed the first time though is the differential element on ceiling, floor or wall to cow. http://www.me.utexas.edu/~howell/sectionb/B-68.html Very handy if you're writing a farmyard simulator I'm sure. Read more →

Particle lighting

I put together an implementation of the particle shadowing technique NVIDIA showed off a while ago. My original intention was to do a survey of particle lighting techniques, in the end I just tried out two different methods that I thought sounded promising. The first was the one ATI used in the Ruby White Out demo, the best take away from it is that they write out the min distance, max distance and density in one pass. Read more →

Code charity

A friend just sent me this: http://playpower.org/ It's a non-profit organisation with the goal of developing educational games for developing countries that run on 8bit NES hardware. The old Nintedo chips are now patent-free and clones are very common: They're trying to recruit programmers with a social conscience, I'm not old-school enough to know 8bit assembly but then I wouldn't mind learning.. who needs GPUs anyway! Read more →

Red balls

A small update on my global illumination renderer, I've ported the radiance transfer to the GPU. It was fairly straight forward as my CPU tree structure was already set up for easy GPU traversal, basically just a matter of converting array offsets into texture coordinates and packing into an indices texture. The hardest part is of course wrangling OpenGL to do what you want and give you a proper error message. Read more →

Tree traversals

I changed my surfel renderer over to use a pre-order traversal layout for the nodes, this generally gives better cache utilisation and I did see a small speed up from using it. The layout is quite nice because to traverse your tree you just linearly iterate over your array and whenever you find a subtree you want to skip you just increment your node pointer by the size of that subtree (which is precomputed, see Real Time Collision Detection 6. Read more →