The keyboard as a canvas

I've been kinda dragging my heels on some of my programming experiments, but I think I've finally got most of what I set out to accomplish this time.

In a nutshell, I was able to take a 3D model, and put it in a scene...

... and turn that scene into this.

Recognize the effect? I hope you do, although it doesn't look as good as what I'm trying to mimic. I think some of that is the textures I'm using, in addition to the fact I'm teaching myself shader programming without too much prior experience.

What I was going for was a hand drawn, kinda storybook look, as if the scene were sketched and colored on a sheet of drawing paper. I've been pulling tutorials and such from various sources, and some of you might recognize that model, or even the texture used in the background. I've had to add my own spin to it, of course - this requires a bunch of separate concepts to be applied in a certain way.

In a nutshell, the effect I've done involves...

  • Edge detection
  • Shadow mapping
  • Blur effects

... and now that I think about it, I didn't actually use toon shading, but I think I could throw that in while I clean things up. Honestly, I had already done everything except the shadows quite a while ago, but since it had been a few months, I decided to recode everything from scratch.

Right now, the code's a little messy, since all I was concerned about was getting the effect right, so I have a lot to clean up. My shadow mapping isn't 100% perfect, and if I have the time I'd like to see if I can implement cascaded shadow maps. I also save all my render targets so I can debug visually, but that also means I have nine different buffers (then a back buffer on top of that), which can't be doing good things to my memory usage.

Maybe when I'm done with all of that, I'll post up what I did. There are also a couple more effects I'd like to try doing.

... And for those of you wondering, the positive x direction (in worldspace) is actually going to the left of the screen, while the positive z direction is going into the screen. XNA's coordinate system is right-handed.