Things have been pretty busy lately. Over the summer, I got my first job working as a programmer. A little over a month ago, I began attending university (first year). While the experiences thus far have been excellent on both counts, there have been a couple unfortunate downsides:
- I’ve barely had any time to blog. Not such an issue, since my writing sucks anyway
- I’ve had absolutely no time to sit down and write a game (!!!)
Surely I can’t be that busy… can I? There’s another reason: I’ve become totally addicted to functional programming. Continue reading
In F# we have this wonderful
Seq.cache function which allows us to cache the results of a
Seq object (also known as
IEnumerable). Unfortunately, C# has no such function, and implementing it yourself usually involves implementing an extra class to hold the data.
I was digging through my old desktop, checking to see if there was anything worth saving before I wiped it and installed a shiny new copy of Windows 7. I found an old… poem. I think. It was years ago. Years.
A couple posts ago, I mentioned that I had been spending a lot of time working with C++. Why was I spending so much time with a language I
hate love so dearly? Simple.
As I waded through the functional paradise that is Haskell, there was always one concept that refused to let itself be understood. Hell, the mere mentioning of the word is enough to make my friends look away (well… that usually happens when I start talking about programming). Its name: Monads.
Well, it’s been ages since I last blogged anything. I feel ashamed… It’s been quite busy on my end. I’ve had plenty of projects to work on.
There’s a bright side to all this – I now have two more languages solidly under my belt! The first is C++, which is something I’ve only had really basic knowledge on up until now. I’ve been neglecting it mostly because it sucks, but it’s become a lot easier to stand now that the new version is finalized. Glory be to lambdas on high!
I developed this technique 2 or 3 years ago to solve one of the main issues with shadow mapping: transparency. The only other solution I had heard of at the time was Deep Shadow Maps, which didn’t seem like something that could be done in real time.
It’s a really, really simple idea. First, render the shadow map, drawing semi-transparent objects with screen door transparency. Apply some softening to the shadows, and voila. Of course, there are two major drawbacks.
- It’s still noisy, unless you use a massive filter.
- The only softening technique that works is PCF. VSM (and possible ESM) doesn’t work because the method naturally creates big depth discontinuities, and the conventional fix for light bleeding eliminates the transparent effect.