STEEL
3D
Well, this is IT. The fruit of about a year's work, since I first got into 3d.
I started writing this particular engine in July, 97. It's a testbed for
everything I learn as I go along. I set out some goals for myself right at the
beginning, and they're just about outlined in the feature list. I barely added
anything I haven't planned for, or left out anything. It's a
demo style engine, inspired by some of the
demos I've seen along the way, so it's not intended for a game like quake. The reason I made
it this way is that it allows for more geometric freedom and variety, and lets
me practice all kinds of rendering techniques that are otherwise useless
for quake-like stuff. On the other hand I can't use the current techniques
used in those kinds of engines... Oh well, maybe next time... The
more serious reason I didn't wanna make a game with big walls filling the whole
screen is that my poly fillers are way too slow ;). But I have to accept the
engine for what it is, and I have to admit, it does everything I wished for, and more.
And what is it then, exactly? Well, I call it a really-slow-time near-photoreallistic
engine :-). The second part is just an excuse for the first :-). Although
it does look good compared to other engines... And you have to remember that
this is still a very immature version, I've only done very essential and obvious
optimizations, so it might get faster. Also, the demo's still buggy.
If it works for you - good, if not - well, not... I didn't try to make this
an awesome release, just so it's there if anybody's curious. On the other
hand I won't put the code up, cause it's in even worse shape than this demo.
Although you can extrapolate from the rest of my page that I will put it up as soon as it's ready,
just like everything else I make :-). I'm gonna base more
tutorials
on this code too. But right now it would be almost useless.
Still, if you need anything specific, feel free to ask me. [Well, the code's
on, but not cleaned up as I hoped...]
The "demo" basically consists of a gouraud textured 'terrain' (just a 3d function
for now), a simple textured box over it, which is orbited by a gouraud textured sphere with spikes.
In front of you is a blob. The light source can be moved around. Looks really good in 24bit color and higher. (disregard the bugs ;)
Sowness: .8-9fps on my 486 :-) (in starting position). The highest speed I heard
of on p2/300 in 32bit color vith univbe is 14fps! If only intel could catch up with me... ;)
So if you still wanna risk it, you can download it
right here. Last updated on Feb 28, 98.
Source Code
Screen Shots
Steel3D Features
- Optimized triangle fillers, and generic poly fillers
- All kinds of poly filling and shading:
-flat
-gouraud
-phong
-texture mapping:
-affine
-perspective correct
-environment mapping (fake phong also)
- All shading and filling types can be combined (well ones that make sense)
- Hierarchical object structure
- Forward kinematics
- Loading of various 3d file formats
-3ds - buggy, incomplete
-a modeller (maybe... someday...)
- *Cool surface reps
-implicit surfaces (blobs, etc)
-NURBS, maybe other parametric surfaces
-wavelets (lod control for surfaces and maybe textures)
- *Dynamic LOD - large scale, preferably infinite, of course :-)
- *Adaptive subdivision of surfaces (ex: curvature dependent)
- *Occlusion culling - maybe
- 3D clipping (frustrum clipping) of:
-objects (using bounding spheres - more like culling)
-vertices (also more appropriately called culling)
-polygons
- Backface culling:
-normal · view vector
-clockwise test (just to make sure :-)
- All clipping, culling (except clockwise test) and lighting done in object space using inverse transformations
- Z-sorting of polygons
- Correct camera motion and rotation along all axes
- Rendering done in 32bit color, output in 15-32bit (using Allegro).
I might still add 16bit internal rendering, even if it means repeating code...
I'll soon add 320x200 support. Finally, I might use my own vbe2 code,
which has less overhead than Allegro.
- Engine structure written in C++ OOP (sorry...)
Note: bold = implemented, rest = to do, "*" = later additions
Well, it looks like just about everything's finished (so I added those
extra features :-). In reality the
engine's still not quite complete. But I'm definately getting closer...
News
May 4
Steel3D is dead. Long live Steel3D...
Well, it took long enough... I actually abandoned that engine a good while ago
but never got around to updating this page. Now I'm into windows (yeah, oh joy!).
Anyways, gotta go with the flow... I also had to get away from software
rendering cause it was rendering my engine useless :-) All that fancy (and
fancier) poly filling's done almost free in hardware. So now I started on a new
engine in MSVC that's supposed to support conditional compiles for
OpenGL
and Direct3D with no additional effort.
(If you wanna learn a little about em, check out my here it is.
Feb. 24
Another version of the demo. The blob's jiggling around now, and I've also
added better controls. You can have more game-like movement, move the light
source and the blob around. Read readme.txt for the controls. I'll add more
interactivity later.
Feb. 24
New demo with a blob and a little demonstration of hierarchical transformation
(the spiked sphere) included. No realtime morphing on the blob though yet... Soon...
Feb. 22
I haven't done any work on my pages for a long time. I didn't wanna waste time
with anything other than coding my engine. I haven't done as much as I'd like,
but I'm going along steadily.
- Added the option to change resolutions
- I got hierachical objects and transformations working well
- Fixed up frustrum clipping a bit, but it's still buggy :-)
- Got some 3ds loader going, but it's buggy
- I just implemented implicit surface polygonization in the last week.
I'm using an lut based marching cubes algo, but modified it to shared
structures. Hopefully I can get it to go faster than this. I'm planning
on surface tracking to ignore irrelevant cubes, and maybe adaptive subdivision.
- Hopefully a new demo's coming up soon... Nothing glamorous as usual, just to
illustrate the new features.
- Still not putting on the finishing touches as I hoped before :-)
Jan. 18
Converted bounding volume from rectangle to sphere. Got hierarchical
objects working. Still have work to do on object support in general.
The only other things left to do is completing all the different poly types,
and optimizing video. Then it's time for general optimization.
Dec. 29
I've been workin on my engine a lot in the break. Finished hicolor rendering.
Got a simple demo going. Frustrum clipping's still buggy.
Dec. 3:
Hehe. Damn... I finished frustrum clipping a few weeks ago and
haven't done anything since. School bogged me down...
Back to Steel's Programming Resources
Last updated on 05/04/98