Thanks guys!
I just updated all the video and screenshots on my website in the last couple of days, so anything you see on there now is very recent.
Tod - I've spent a stupidly ridiculous amount of time working on this. If you want to see some real crap, remind me to post some screenshots from early in the project.
_____________
Some planet battle screenshots:
Here's the breakdown on the graphics of these planet battle screenshots.
Landscape:
I'm using Ogre 1.7's TerrainComponent. I've modified the terrain shader so it can handle both a main directional light, and a few point lights. I got this to work in a single pass, which seems to help performance a lot. There's also a few other modifications to help reduce the appearance of texture tiling in distant terrain.
The shadows are PSSM.
The landscape was sculpted in Ogitor.
Bullets:
All bullets are drawn as 2 billboards. One for the streaky tail, and another for the head. The head part is necessary because from a straight-on viewing angle the tail isn't visible.
For performance reasons, I draw every similar-looking bullet with a single BillboardSet, and manually move around all the billboards each frame.
Muzzle flashes:
These are also drawn with a billboard. I also use a single BillbaordSet to draw all the muzzle flashes.
Explosions and Smoke:
I'm using ParticleUniverse for these.
Skybox:
These are normal, straight up skyboxes. On some of my skyboxes, especially in space, I use a shader to give the stars and nebula a slight shimmer, but it's subtle.
Rocks and stuff:
I use the PagedGeometry add-on for this, which uses static geometry and "impostor billboards" to draw a lot of stuff in a small number of batches. I had to really hack apart PagedGeometry to get the PSSM shadows working with them. Shadows were a huge time-sink for me. I actually don't get why pure graphics programmers enjoy working on stuff like shadows, it gives me a gigantic headache. I'm a million times happier when I'm working on gameplay code.
User Interface:
This is CEGUI, with a completely rewritten skin.
I've always had excellent performance out of CEGUI.
- Bottom right icons: Stims. These are heals or performance enhancing buffs. The second screenshot also shows a rune with a special power that I've collected from an alien planet.
- Left meter: weapons and health
- Top right: radar
Buildings:
The main point of a planet battle is to destroy the buildings of an enemy colony.
The shader for the buildings use diffuse, spec, normal, and glow textures.
It handles all the lighting in one pass.
It does a second pass to display damage. I keep a list of the bullet impact positions for each building, and pass these into the shader. The shader then briefly displays a sort of energy-fizzle-glow at the point of the bullet impact.
Fliers:
Those things in the sky of screenshot 2 are called fliers. They drop bombs on you until you shoot them down. The character in screenshot 2 is taking some damage from a flier bomb.
Characters:
- The character shader is pretty complicated:
- diffuse, spec, normal, and glow textures.
- hardware skinning
- up to 5 lights, point lights and directional supported
- a "stim texture" overlay for when you're using a stim effect.
- a damage texture overlay for when you're taking damage
- everything in single pass
I spent a lot of work on this, so I could have quite a few troops fighting at once, without killing performance.
Character Animations:
Ogre provides a pretty low-level layer for animation support. So I spent a lot of time creating an animation system capable of smoothly transitioning between 2 different animations without any animation hitching. And it also needed to be capable of blending different animations so I could do stuff like run and shoot at the same time. I used Ogre's BoneBlendMask functionality to accomplish this. For example, if I'm just shooting, it uses all the bones from the shoot animation. But if I'm shooting and running, it uses the upper-body bones from the shoot animation, and combines them with the lower-body bones for the run animation.