OffTheGrid revisited
What is OffTheGrid terrain?
OffTheGrid is a terrain technology we developed to bring detailed terrain data to in-game resolution without losing much detail. Below you can see a comparison between heightmap terrain (left), and OTG terrain (right). The OTG terrain is actually using fewer polygons.
How does it work?
We start with a high-polygon terrain, and iteratively discard the least important polygon edge (as defined by Dr. Michael Garland's quadric-based polygonal surface simplification algorithm) until we get down to our in-game polygon count target. We then apply the normals and color map from our high-polygon terrain onto our simplified mesh. Here is a wireframe image showing how OTG terrain uses less polygons by choosing them more carefully.
Why do we care?
With traditional heightmap terrain, it is only possible to accurately represent soft, rolling hills - small details like rivers, sand dunes, and cliff faces are all smoothed away by the grid. Using OffTheGrid terrain will allow us to portray a much wider variety of environments than we could with heightmap terrain. Here is an example of a small mountain detail that is destroyed by the grid (left). Please keep in mind this is just our base terrain mesh -- we are going to add vegetation, detail maps, and other environmental detail on top of this.
Now that we have an effective technique to create an efficient base mesh, do you have any other ideas for how we can improve our terrain? I have a few ideas, but I'm not sure which is the most important.
Overgrowth alpha 29
Here is what is new in Overgrowth in this weekly alpha. If you are confused what a weekly alpha is, or even what Overgrowth is, please read our fancy FAQ. Basically, we are developing a massive video game from the ground up -- we are able to do this completely independently by accepting preorders for the game before it's done!
John is now in LA, gearing up for E3! He is going to represent us indie style while the rest of us scramble to get the fighting system in gear.
The coolest thing about this new alpha is the introduction of the ragdoll shove, which causes the enemy to go sprawling on the ground Lugaru style. We will definitely get some video of this later for you guys.
Here are a few highlights from the source repository:
- Better physics for small, long objects (weapons)
- Added ragdoll shove
- Safer creation and removal of entities
- More work generalizing shared editor functionality
- Starting on physics editor
- New text editor UI
- Enhanced item browser
- Bug fixes
Thanks as always for all the support! See you guys in IRC and the forums.
Music to listen to while programming - part 2
Here is the second half of my list of favorite songs to listen to while programming. Each song is matched with the coding task I think it best complements. You can find part 1 here.
6. Math and geometry
Ludwig van Beethoven - Moonlight Sonata
This is one of those songs that probably makes babies smarter. Maybe it will work on me too? When it comes to mathy coding, I definitely need all the help I can get. Conveniently, this song is also somber enough to suit the mood that hits me when a thick tangle of matrices refuses to behave.
7. GUIs
Nobuo Uematsu - Terra's Theme
Sometimes you just need good old school MIDI (or maybe a slightly updated version of it). For many of us, this was the music we were listening to when video games first captured our imaginations. Nothing's better than Final Fantasy to remind us of those magical days, and Terra's theme is one of the best. When working on 2D, I feel it's appropriate to hark back to a time when 2D was the only D.
8. Post effect shaders
Jefferson Airplane - White Rabbit
One call makes lines larger.
And one call makes them small.
But the ones that Whaleman gives you,
Don't do anything at all.
9. Fixing syntax errors
Ennio Morricone - The Ecstasy of Gold
Fixing syntax errors is like weed whacking. It's a chore, but it makes you feel powerful, and you can have fun doing it. It's almost like debugging, except you plow through 100 errors in a minute instead of one bug in a day. One of my favorite things is when I forget the semicolon at the end of a class definition and out tumble 3000 errors, jangling and glinting in the type checker's glare. Tremble errors, for ye know of the coming keypress, and know it shall be thy doom!
10.Testing
Muse - Take a Bow
You are exhilarated to at last run the program, and it all seems wonderful at first. Time to take a bow.
But there's an ominous overtone. In fact, you "bring corruption to all that you touch." Everywhere you look, every button you press, you find a new bug. "You must pay for your crimes against the Earth." And you will pay. Debugging comes next.
11.Debugging
John Powell - Bourne Music
I am the agent. The bug is my target. Get some rest, Bug. You look tired.
That's it for now. In the comments on part 1, you guys suggested a lot more great music to listen to while programming. Please feel free to continue here. But this time, I think it'd also be interesting to hear more about the sources you guys use to find and play songs. I often use Pandora, or simply listen to my songs on iTunes. I've also been trying out Mugasha, which is a cool beta service for electronica. And I've been having fun with this sweet Philip Glass applet that jaggerlink posted in the comments last time. What else is out there?
Overgrowth animation editor UI
The animation editor in Overgrowth is one of the last pieces of the puzzle that will let us transform the Phoenix Engine from cool tech into a sweet ninja rabbit fighting game. This (combined with the upcoming physics editor) will let us rig character models to a physics based skeleton and start creating all of the running animations, combat moves, etc.
When I'm making a UI, the first thing I do is make a quick functional prototype in WebKit. It's not pretty, and you probably don't really know what the following mess does, but it works!
Once I know what features I need according to my prototype, it's time to start making it pretty and usable. My buddy Iiro Jppinen is my go to guy for pretty Photoshop work, so I send him a rough sketch of what I'm thinking and he whips up a hot looking PSD. It seriously takes him a matter of minutes sometimes.
This is the original editor. After several iterations, we simplified it down to the design below (still probably not final).
It should be pretty easy for people to add new keyframe based animations. Basically, the way it works is that you hit the diamond button to add a new keyframe. You can drag the keyframes around like you would expect, or you can hit the info button to attach a script to them if necessary. The scrubber on the bottom lets you scroll around or resize the viewing pane. The speed slider controls the playback speed. When you mouse over the start line, blue line, or end line, a grabber fades in, and you can drag those lines around.
The final step to making the UI is to cut up the Photoshop document into each component piece, and save out a ton of little images. Then I use these images to restyle my original WebKit prototype to be identical to the Photoshop mockup.
What would you guys like to see in an animator? If you've made keyframe animations before, what features did you find useful? If you're new to animation, does this mockup make sense?
Music to listen to while programming - part 1
Programming is tough. Sometimes I need background music to keep things lively. But choosing songs is tricky. Anything with lyrics is distracting. Melodies that are new to me are jarring. Songs I've heard a thousand times only emphasize the dullness of a thick page of code. Sometimes silence is really the only solution, and I'm sure many programmers out there swear by it. But for me, if carefully selected, a little music goes a long way. Here are five of my favorites, matched to the coding dish with which they go best.
1. Architectural and algorithmic design
Philip Glass - Koyaanisqatsi Soundtrack
This is the soundtrack for a strange movie about the beauty of the modern cityscape and all the marvels of 20th century industry, like the New York City subway, nuclear power plants, space rockets, and explosions. Koyaanisqatsi means life out of balance, and the movie shows how, with industrious spirit and scientific discipline, humans are coming ever closer to bringing life back into balance, finally taming the barbarism of overgrown nature. Computers are the end game in our long struggle. And it's we, the programmers, who shall lead the people from desert and jungle, to salvation in the new reality, civilized and virtual.
The Koyaanisqatsi soundtrack is hymn to the technological revolution. It's both ode to our forebears in industry and hint of the transcendent abstraction to come. It stirs us at the event horizon of our humanity, that pivot point between this reality and the next. Save this music only for the grandest of programming problems.
2. Utility functions
Edvard Grieg - In the Hall of the Mountain King
Put it on loop. Type with the beat. Do da da da di da da di da da di da normalize a vector do da da da di da di da di da di da do a checksum on a file!
3. Parsing XML and the like
Clint Mansell - Lux Aeterna
XML is the programming equivalent of Jabba the Hutt. It's a bloated, sluggish thing whose company is deadly dull. I need a song that comes in like a Jedi Knight with a vendetta, and somehow makes parsing seem epic.
4. Memory management and threading
Silence
This is where the nastiest bugs are born. Sad to think how many security vulnerabilities have been caused by programmers rocking out to Rage Against the Machine. Best to keep things quiet.
...Then again, this is a post about music. So, if you can take it, I suggest:
Rob Dougan - Clubbed to Death
This one is weighty enough to convey the importance of thread/memory safety, melodic enough that you should be able to arrange most code calmly and correctly, and intense enough that the errors you do introduce will be epic and wild ones, which are worth having simply because they are too cool. Like this one.
5. Creative code
Ratatat - Seventeen Years
This is for when I really don't feel like working but I want to feel like I am working. I'm frustrated with all my scheduled problems, so I decide to be "creative." What I've been working on isn't going anywhere anyway. After all, I've already come up with a brilliant idea for this project: "create a great video game, with next-gen procedural effects and shaders, that will work on every computer ever, and will be fun because we will playtest it." All that remains is to implement it. I shouldn't be implementing things. Implementation is for mindless grunts, programmers. But I am software engineer, nay, architect, nay, artist.
I pull out a sketchbook, grab a shot of cappuccino, and scribble my UI-nouveau: each window is a planet, the desktop unfurls as celestial tapestry. On Google Docs now, new document: "Quantum Tunneling for UI Design." Biting burnt tongue reveals intriguing new pain. Paint my flow charts in pastel blue. Have to focus, back to code. But maybe, with quantum superposition...
In the end it's all a bunch of foos and bars. Atlantean relics rendered incomprehensible by the sober mind. When this humour hits me, I need music that's more indie than Thomas Jefferson racing a solar car in the Indy 500, artsier than Art Bell peeling arteries off a melting clock, and, yo dawg, trendier than trends that have trends. Okay, Ratatat's not quite this, but I like them, so there you go.
Do you guys listen to music while programming? Or perhaps while doing other work? Please share your picks!