For the full version of Star Villains and Space Heroes, we're souping up the graphics a bit. One thing that we like a lot are the explosions, debris and ship damage graphics, which are receiving a major overhaul. We thought you all might be interested in an inside look at how this works, so Chris and I are going to be doing a set of two or three features on how destroying ships works from each of our perspectives. Chris and I have a workflow that goes something like this: I make the model, and send it to Chris. Then Chris G-chats me a few times that he'd like the destroyed mesh for it. A few weeks later I get around to splitting it up into a said mesh. It is after that point that Chris proceeds to literally whisper the incarnate life force into it, making manifest all of our dreams.
Destroyed mesh, destroyed mesh, destroyed mesh. How many ways can I find to say I loathe you? See, it's not so much the act of creating a model [for what a ship looks like after it's been destroyed,] it's creating a mesh for *every* ship that gets a little irritating. It's a procedural task, monotonous. It's free of the creativity which goes into creating the ship itself. The ship is intact. It must become... not intact. Make it happen, I say to myself, thinking where to begin. Luckily for me my job just got a little easier.
Chris wrote a shader for destroyed ship textures. It has the ability to combine a diffuse color, specular, bump, self illumination, and, most importantly, opacity channels together in-game. For those who don't speak graphics, it means it can look the way it normally looks, plus have transparent parts [like big gaping holes drawn into the texture.]
How many ways can I find to say I love this? When I didn't have this option before, the only way to go about creating all the jagged edges between separated chunks of a ship was to actually model all the little jagged edges along the border of whatever chunk of the ship I was working on. Due to polygon restrictions, this meant that the broken looking edges never looked that broken, or convincing. Now through textures, whole sections of the ship can be made to appear invisible, with nice jagged, burnt, torn edges which I've drawn on.
The image below should give you an idea of the difference. The first model has been split in two by modeling a separation into the geometry. The split is kind of polygonal looking. I used a technique called Boolean, where I make a shape which represents what should get cut out of the model, and then subtract it from the ship. It's not a terrific tool, as it's prone to bugs, and it means I have to do this weird brain trick where I model the hole backwards, by making a strange jagged nonsense shape to cut out of it. The second version shows the separation achieved though opacity data in the texture. Finally you can see the much simpler geometric separation the texture version uses, which is pretty much a straight line.
The only part which makes this technique difficult has to do with the textures. It helps if your texture is laid out in such a way that makes drawing continuous features easy. By this I mean, say you have a car, and you want to split in in half. You might start by drawing a big cut between the engine and the door. To make this big cut continue across the roof and undercarriage, it helps if those parts are actually adjacent in the texture. For example, in the image below you can see where the Kilo get's it's textures from. The front half's pieces are all stacked on top of each other, so if I draw a big line running down all those pieces, there will be a big line running down my whole ship. I added false colors to the texture so you can see what I mean against the model.
The end result is pretty cool. Defiantly looks like the Kilo class has seen better days. I'm going to be working on a lot of new spaceships for the full version, so I'll put together a post covering the whole design process for a complete starship. Stay tuned!
Happy destroying, Everyone!
You can find the rest of our devlog posts here: