Search this blog

12 March, 2010

Retweeting

Cool stuff people showed me, and that I'm re-posting here.

New ways of editing code in this very cool Java IDE experiment: CodeBubbles

Distance fields used for shadows in UE

Distance fields for raytracing, in Go

A free data mining tool for games: Echo Chambers


Processing-made Mycellium

Color-grading should be better understood in games

This scribble tool does something that looks arbitrary, but feels "right" while drawing.

09 March, 2010

68000

My counter has registered more than 68000 visits (well, not counting the RSS accesses, that I would expect to be the most of them... but anyway). Time for an Amiga tribute*!








P.S. I do not endorse any group of individuals that still think the Amiga is alive and better than anything else. The Amiga is not a Commodore 64, it's dead it was a nice machine but now is dead. And no, its multithreading is not better than Windows, and people don't care a shit that you can format a floppy disk while doing other things.

07 March, 2010

Skin

 
  
  
  
  
  
 

My current favorite: Bad company 2, outdoors it totally nails the look. 
Mass effect 2 has some very nice lighting in some real-time non playable sequences but its skin model is remarkably flat. 
Fight Night is impressive too, it's by far the most complicated of them all in terms of lighting and skin effects, and it's the only one that has no shadowmap problems...

p.s. My job/goal this year is to beat them all. It will be tough, and it is stressful... We'll see.

06 March, 2010

Homework

1) Write down all the ideas you have in your work/programming hobby on post-it notes.
2) When you have the chance of implementing a given idea, move its note to one of the following stacks: success, failure, unknown.
3) Make sure to scan the unknown stack time to time to see if those ideas, after more testing, can be moved into one of the other two stacks.
4) At the end of your project, count the total number of notes and the ratio of successful ideas over failed ones.

If you have less than ten notes, you're being assigned mindless tasks, either you're a coop or you should change your job.

If you have a lot of notes, but mostly successful ones, you're probably not risking enough. Your ideas are boring, you're not experimenting, you're living on your experience.

If you have a lot of notes, and a lot of failures, congratulations. You're either utterly incompetent or you are a genius. Anyway, you're trying to create something new (or at least, new to you...). Hope you're surviving the next waves of layoffs and be happy.

I had the urge of writing this after the discussions I had about my previous post. It seems to me that there are a lot of preconceptions that are so tough to change even if they are clearly wrong.
Our industry moves fast, and some days you feel like being on the bleeding edge of the technology. Some other days, you look around and you wonder how's possible that we're doing our work with the same tools and mindset of twenty years ago.

Is it really so debatable that C++ is outdated? That reference counting is not so great? That transform hierarchies should not be the fundamental data structure of your 3d engine? Or that Collada (or any intermediate format, really) is indeed a waste of time for games?
I wrote about those things and more on this blog, and each time I write about them, I find a lot of resistance.

Are we that scared of trying new things? Can we really never fail?

Some weeks ago a coworker of mine showed me a presentation that we had at my company about the things we could do with the "next gen". And we were pretty disappointed to see that those early predictions were still more or less the things we are doing right now. We had the experience to know what we could do but we didn't try to do much more than that. We didn't try things we didn't know...

Of course, the next step would be asking ourselves what we can do to be better than that. Personally I suspect we're not experimenting more mostly because we really can't do things fast enough. We're slow, our iterations are slow, our languages and tools are hardened and inflexible. But digging into that could be the scope of another post...

p.s. Check out this GUI idea.  I suggest to watch the first minute or so of the video, stop it, think about it for a while, then finish it/visit the forums. I was really surprised to see some innovative thinking in an area so stale and so painful as is the one of game GUI/Frontends. I don't think that this approach scales well, but anyway most games do not have too complicated interfaces, and for an indie project it's the perfect approach. Kudos.

02 March, 2010

3D Engines out there

Every now and then people ask me for recommendations on 3d engines for their projects. Honestly I'm not such an expert on the topic, I've always written or used in-house solutions, so my knowledge about free middleware is pretty thin.

On top of that, it does not help that most of the engines I've checked out looked terrible to me. You would expect people trying new and cool ideas in the opensource world, where you're not tied to deadlines and products.
You'll be wrong or at least, I've never seen anything interesting or new among the thousands of engines sources you can find on the net. Most of the times, they follow the same pattern, they are textbook engines. 

They are all scenegraph based. They don't really care about caches or threads. They don't care about iteration time or ergonomy. They support all the wrong formats (i.e. the horrible Collada XML) and they're all busy implementing every "technique" out there. They go against everything I advocate on this blog :D

But enough of this. Here it comes my list of notable opensource 3d engines out there:

Ogre3D. This is perhaps the most famous one. The good thing is that there are some commercial products using it, most of them are not graphically intensive, but still, a good sign. 
The community is huge, the documentation is huge, you'll expect this engine to be well tested.  Also, there are  bindings for any language out there, and even a C# native port (Axiom).
The architecture does not look very interesting, the engine is big and complicated, but it focuses more in getting a lot of things done than solving the fundamental problems that a 3d engine should address. For example, it has little support for multithreading, just some locks and they seem to be not too tested as well. 
It's packed with a lot of ready made stuff, from terrain to shadows, to LODs,  particles, various culling methods and so on. All that I can say it that the quality of those black boxes varies at best though. A few years ago I remember looking into its lispsm shadows only to find it seriously broken.

Nebula (UPDATE: last? version in the comments here, Radon labs is no more, Nebula 2 could be interesting too, Nebula 3 is a rewrite - latest version, unofficial community?): This is actually the only opensource 3d engine that I  really like among the ones I've looked. It's made by the game company Radon Labs, that offers it to the public.
Focuses on a lot of the right things, cares about the general infrastructure more than specific features. Also it has been used on commercial titles, with great results. Radon Labs ships titles for all the consoles, but obviously the opensource engine can't include parts of the 360 or Ps3 devkits. That said, their experience outside the PC realm, where you can push polygons for free, without needing to care much about performances or good coding practice (if you're not shipping an AAA title, that is) is a bless! 
Recommended, even if the community does not seem to be huge or too active, it seems to be mostly carried over by Radon alone. That means that it's maybe better not to jump on it if you're a total beginner that does not want to learn from the source...

OpenSceneGraph: This one is interesting, it focuses on performance and multithreading,  even if it's OpenGL only and it focuses a lot on portability, it's more a visualization engine than a game one, somewhat like NVidia Scenix or the old OpenGL Performer.
Here you can find its mission, and here its forum and development blog. Obviously it's scenegraph based and as I said, it's looks like it's an opensource replacement of  the dead Performer or the never-born project Fahrenheit. So overall I won't use it and you need to keep in mind what's its purpose, but overall it has with lots of things going on, a good community and a clear design. There is even a nodekit for postprocessing, and some extensions to use Cuda and OpenCL.
Same really goes for OpenSG, both are worth a look but I won't recommend either for games or as a guide to design a 3d engine.

Panda3d: Another engine I don't know much about. But it has shipped titles, and from what I can see, I would prefer this as an alternative to OGRE.

Sauerbraten: The guy behind this engine/game (Wouter van Oortmerssen) is a genius, he implemented more programming languages than the ones I know, and he worked on Far Cry! Sauerbraten is a very fast 3d engine, to the point that it has even been successfully ported to the iPhone. Surely interesting, even if it's very specialized in what it does, it's worth a look.

Quake 3: It's old, it's very specific, and it's not actively supported. But it's a serious commercial engine, and it was made by ID. That's more than enough.

Other worth mentioning. Horde3d: I don't know much about this one, but some of its features sound right. From what I can tell, there's no title shipped with this one, and moreover it's OpenGL only at the moment, that is a bad sign. Oolong engine: iPhone only. Quelsolaar stuff: Ideas that are all over the place. Most of them are nice, some are more toys than productive environments, anyway, worth a look. 
After all this I'd still say that if you are looking at an engine to learn from, take most of those cum grano salis. On the other hand, if you just want a platform to quickly develop a game, maybe you should pay the small price that comes with Unity, or try the UDK. Or simply, stick with 2D...