[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Chicken-hackers] 3D engine strategy
Brandon J. Van Every
[Chicken-hackers] 3D engine strategy
Thu, 22 Feb 2007 13:03:33 -0800
Thunderbird 188.8.131.52 (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
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
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.
Brandon Van Every
|[Prev in Thread]
||[Next in Thread]|
- [Chicken-hackers] 3D engine strategy,
Brandon J. Van Every <=