I’ve got this strange disposition that I have cultivated where my self satisfaction has a lot to do with whether I am doing something productive. I have to keep busy so that I’m focused and positive, but if I spend too much time on work stuff it feels crushing. On the other hand, if I relax and laze about for a long while, I’ll be fine for a little while, but will gradually become very agitated. This presents a problem for when I already have a lot of work to do, because I’m doing work, but it’s not my own. The answer to this is independent projects. Normally I’ve got one of these going while I’m engaged with other work, but right now I have a lot.
I’m not sure how it came about, but here’s what I have:
1) I’m working on Painter again. A little while ago I was having a conversation about the project. I introduced it as a spiritual successor to Genetic Image, where instead of generated expressions, Painter uses generated programs. After having this conversation I realized that I did all of the hard work for it: the infrastructure to define the programs, statements, expressions, and so on, but I stopped when it got to the actual drawing. For some reason, this seemed like the hard part at the time.
Admittedly, there do not seem to be any open libraries for Java that give Photoshop-esque drawing capabilities, but that’s kind of a silly thing to hope for anyway. However, there are good libraries for producing straightforward visual effects, especially out of Graphics2D. Normally these are directed towards cutting edge UIs, but I’m sure I can use those tools effectively for painting.
2) POV-Ray. I love POV-Ray. In the years since I first discovered it there have been more and more raytracers and renderers, but POV still holds a special place in my heart. However, a thing that has always bugged me about it was that you don’t have a lot of control over how objects reflect light. Actually, that’s not true, but you only have a few ways in which to do it. In traditional renderers, there are several types of illumination: ambient, diffuse, specular, and pure reflection. When programs start using radiosity, particularly via Monte-Carlo integration, it becomes hard to restrict illumination to the four types given. The light reflected off an object viewed from a particular angle is really something in between traditional diffuse and traditional reflection.
Anyway, I decided to compensate for this by modifying the POV-Ray source to include glossy reflection. It looks decent so far. There are actually a few other ways to get this effect, but mine has some special means of variation that allows quite a bit of customizability. When it’s more done I’ll post a few comparison shots.
3) Gameboard: A new project is a program supplement for roleplaying, that attempts to simulate the tabletop experience while gaming over the internet. This project is hardly unique, but most other programs that aim to do tabletop online run into a few flaws: they are closely bound to a particular system, cutting out house-rules; they prioritize 3d graphics over ease of navigation and use; they restrict users to internal assets and prevent them from being creative with their own. Effectively, they prevent users from doing things with the game board that players can do with a tabletop. I haven’t studied the other products that closely, but I know that a few of these are definite issues. My goal with this is to create a system to get those elements of the tabletop experience that are integral toward holding players’ attention during games.
Gameboard has a lot going for it conceptually, but I’m also at a tricky design situation, where I’m trying to figure out how tiles and layers should be represented in data structures. It’s not an impossible decision, but it’s one of those that is either made correctly, saving a lot of time in the future, or is made incorrectly and needs to be revisited a bunch.
4) Finally, I’m working on some new GeneticImage renderings. I’ll post some pictures later…