chicken-hackers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Chicken-hackers] 3D engine strategy


From: Brandon J. Van Every
Subject: [Chicken-hackers] 3D engine strategy
Date: Thu, 22 Feb 2007 13:03:33 -0800
User-agent: Thunderbird 1.5.0.9 (Windows/20061207)

Warning: this post is long.

I have come to some important realizations about my career. This is going to have a major impact on my involvement with the Chicken Scheme project.

For those who don't want to wade through all of this, here's the punchline. I've decided that using an extant 3D engine, even if it means coding in C++, is more important than writing 3D support libraries from scratch in Chicken Scheme. So I won't be pursuing the gl-display project. If you want to talk to me about welding Chicken onto a suitable extant 3D engine, we could have that discussion.

Now for the long explanation.

Recently I was contacted by Stormfront Studios of San Rafael, CA. They have a long history as a game company, having done Utopia on the Intellivision back in the day, under a different company name. Recently they're doing licensed fantasy movie titles. They did a Two Towers game in 2002, a D&D game called Demon Stone in 2004, and an Eragon game in 2006. They contacted me out of the blue, I wasn't looking for work. I flew down to CA for a 10 hour interview last Thursday, one week ago. People wise, we really liked each other. I fit their corporate culture well.

But technically, I didn't have enough to offer them. They asked me a lot of basic questions about C++ during the interview, to the point that I was wondering if they were interviewing me like a junior programmer. I got about 80% of them right, from memory, not having bothered with C++ for about 3 years. I feel that C++ minutiae is a big timewaster for the most part. It's something I avoid in my own work, hence why I don't remember it. But it's clear that the game industry cares about this sort of thing. We also failed to have much high-level discussion of other things I know about, like 3D pipeline or engine design, or build systems. We traded some sound bytes back and forth that demonstrated passing familiarity with the issues. But never did we come to a point where they were getting excited about, oh, look what this guy can do for us.

Last Saturday I wrote them an e-mail thanking them for their time. I noted our cultural fit, but also the lack of high level technical discussion. I took a gamble: I told them all the great things I was about to do with Chicken Scheme. That I wasn't going to give up Chicken Scheme if I came to work for them, that after a time, I'd try to find a way to usefully insert it into their process. I was hoping they'd see me as more technically competent and make me a better $XX,XXX offer. It didn't have that effect. On Monday, they told me they wouldn't be making an offer.

On Monday, I also realized that Chicken's C output is not like I thought it was. It outputs 1 function call per math operation. Consequently, the C compiler cannot combine the operations into a semi-efficient stream of assembly instructions. Those function calls are in the way.

For 3D graphics and game development, this kind of output is not acceptable. I will never be able to convince anyone in the game industry to use this over, say, Python, Ruby, or Lua. Being able to scale the performance from the high level to the low level, has been my core interest when pursuing exotic programming languages. I've made a major strategic blunder, not realizing the actual nature of Chicken's output sooner. Once upon a time I went to town on the Great Computer Language Shootout benchmarks, but I never drilled down to the details of what is actually produced. Chicken did reasonably well in those benchmarks, and so I wonder what was really being benched.

How did I fail at my due diligence? Well, I was doing due diligence for about 2 years solid on every single exotic programming language out there. It got to the point where I was spending so much time evaluating, that I wasn't getting anything done. So finally, I resolved to stick it out and just concentrate on something, instead of jumping around. At first I worked on the Bigloo Scheme build, but ongoing Windows problems caused me to jump ship for Chicken. Felix was open to replacing the Autoconf build, so I ran with it. A man-year later, we have a build that runs on all platforms, and I think it's pretty near to being a stable, perfected build. If I had known it would take a man-year, I honestly wouldn't have done it. I would have washed my hands of Chicken, Scheme, and programming exotica, and just moved on with my life. But as it happened I did do it, and so we have it.

Now I am faced with essentially the same question again. Should I bang on Chicken's C code generation until it does what I want? I've evaluated the problem over the last few days and the answer is no, clearly not. I look at the sources and right now, I simply don't understand them. With my weak Scheme coding skills, it will take me months and months that I don't have. If I don't walk away from this invitation to Hell, then in the past 4 years I will have learned nothing. I've been through bankruptcy and nearly got evicted for this sort of thing. Not gonna do it again.

I've also realized something else I've been doing majorly, majorly, ***MAJORLY*** wrong. I HAVE NOT BEEN WRITING MY GAME. I have not been writing it for ***3 YEARS***. This is the reason I go down to a place like Stormfront Studios and lose the job, even when everyone likes me. This is why I don't notice the quality of the C output. This is why nobody in the computer industry wants to pay me for what I know. This is why my career is at a standstill. I've become a good build engineer and a so-so compiler dabbler, but not a game developer.

And so, drastic corrective action is being taken as of today.

The reality is that even after 3 years of dabbling, I'm still a better C++ coder than I am a Scheme coder. And in the C++ universe, there are far more tools and libraries that have taken care of the basics of 3D development. Chicken Scheme hasn't made me a more productive game developer; far from it.

I am going to resume my Ocean Mars planetary rendering engine project. In C++. Using someone else's extant 3D engine. Not my homebrew. Reviving my C++ skills will get part of my game actually written. It will enable me to actually get jobs in the game industry, so that I don't have to live on a shoestring anymore. Even if I eventually turn away from C++ again, the exercise is worthwhile for now.

I haven't committed to a 3D engine yet. One candidate is the Ogre 3D engine http://www.ogre3d.org . Ogre is a LGPL project; that's not ideal but it's livable. I'm impressed with what I've seen of Ogre's project management and community. With Ogre, if I need GUI stuff I'd use Crazy Eddie's GUI System http://www.cegui.org.uk CEGUI is under MIT license and claims to be the preferred GUI of the Ogre 3D engine.

Irrlicht is another engine worth looking at. http://irrlicht.sourceforge.net/ It's under zlib-libpng license.

The G3D library project http://g3d-cpp.sourceforge.net/ is interesting in that it's OpenGL based, has been ported to many platforms, and is moving to a CMake build system. It doesn't try to be a 3D engine, it tries to be a bunch of libraries for building a 3D engine.

I'm not interested in The Nebula Device. http://nebuladevice.cubik.org It's under BSD license and has good technology, but I don't get along with the project lead at all. I've done my time in that community and I'm not impressed with their community organization. I think the project lead stunts the community's growth. My experience in the Chicken and CMake communities, is that easygoing project management is essential if I'm to get anything done.

Where does Chicken fit into this? Well, I know C++ is an inadequate language for computational geometry and game scripting. Sooner or later, I'm going to decide that coding in straight C++ is not enough. Actually that happens with every 3D engine out there. Nobody ever does just straight C++ for everything. Chicken could still be the language to take over the game industry. *IF* it can demonstrate industrial relevance to C++. *IF* the C code output is improved.

Who will do the work? It can't be my primary burden right now. My primary burden has to be writing my game. Not writing underlying tools from scratch. But I hope I can contribute to such work, and organize people to undertake it. Chicken does have a good community and a cross-platform build system; I'd rather not throw those away.

Consequently, if the gl-display people want to "Hey Presto!" and <poof> become 3D engine people, we could keep going. Otherwise, I'm off to code in C++, until the need for a better language is clear and pressing. The gl-display people could also continue without me, if they think it's better to write everything from scratch.

I will continue to maintain the CMake build system for now. However, if Chicken doesn't prove relevant to my game development efforts in coming months, be advised that eventually you won't have me as a maintainer. I hope we have other mutually beneficial Chicken projects to work on together, so that I have a reason to say involved. But if not, I've written a build system that will survive me. Anyone can pick up and deal with if they're motivated. Most of it is well commented and tutorialized; I'll document more as time goes on, as a safeguard.


Cheers,
Brandon Van Every





reply via email to

[Prev in Thread] Current Thread [Next in Thread]