Some old messages I found on floppy from the old MCI-WorldComm BBS where John Carmack and Michael Abrash hung around amongst others. I think I'm ok with posting this as it was a public system, but if John or Michael don't like it, let me know and I'll remove it.
I have more but what I would do while logging in long distance, and at the time, great cost, was to cut and paste interesting things into a giant text file, so a lot of it is out of sorts.
*NOTE* the working title of DOOM - "It's Green and It's Pissed", also note, John spells out 3D as "three-D" lol.
I also have source for a demo Radial Voxel Editor that Carmack toyed with using for DOOM instead of sprites. (coming soon)
No I didn't write bilestoad, but all of us at id came from an apple
II background, and the game is legendary for its audacity. We considered
doing a wolfenstein style modernization, but it looks like our time
is booked for quite a whil -- we are doing wolfenstein for the lynx and
super nintendo, and planning our direct follow up. The working title is
"It's Green and Pissed", but we probably can't get that on the super
nintendo. I have improved the three-D routines by over 100% from
wolf, and it will have arbitrarily angled walls, variable height walls,
environment morphing (walls that slide around and change into different
forms). I was rather looking forward to doing a full virtual reallity
engine, but everyone is telling me that a second generation wolfenstein
style game would be the best direction (and there are some technical
problems with doing arbitrary texture mapping on the video game systems).
It seems that the blood and guts game style has been incredibly
popular. Our commander keen games were well received as family
games, but we get lots of comments that wolf is a tension releiver
for busy adults. The next game is not going to be cute.
I have seen some of the demo games for VR studio, and it looks pretty
well put together. The speed could be improved, but the fundamental
limitation I see to its world model is that every vertex in a given
area needs to be transformed and dealt with. You need to break
a larger world up into small areas seperated by opaque doors, rather
than having seamless transitions between areas. My early research
went into adressing the problem of rendering an arbitrarily large
world model within a finite time. My discoveries in that area are
what is giving the next wolfenstein style game the major speed improvements.
I have switched over to an object based (polygon) representation
of the world that I map textures onto, rather than pixel based ray
Wolfenstein 3-D is a fast action 3-D texture mapped game for 286
or better computers with VGA. I am the technical director for ID
software, and I wrote the game. You should be able to find an upload
of the shareware game on any comercial on line service or large
bulletin board. If not, I could upload it here, but its a bit big
for 2400 baud download.
READ: Locate Message Reply Write Help Quit READ>
Conf: programming/graphics Sun Jul 26, 1992 6:41pm PDT
From: jcarmack Message: 1055
To: billb Original: 1043
Subj: Re: Wolfenstein Replies: 1075, 1076
Wolfenstein is done with a matrix, but the next game is done with
arbitrary line segments. It is a LOT easier to do an open space
game than an inside game. The hidden surface removal algorithm
almost allways takes more time than the vertex transformations.
I was recently at the simulation facilities of Alaska Airlines looking
at their flight simulators, and I learned a few interesting things.
The engineers actually drew different versions of terrain features
for different distances. This seemed patently rediculous to me.
It took over one man year to enter one city area. If I were doing
a flight sim, I would make a program to create less detailed versions
of a given 3-D object by culling vertexes out of the object description
when the length gets below a given size for the distance being represented,
and for extreme distances taking out all interior edges to make
the object a silhoette. Some of this could be done at run time,
but making three or four representations ahead of time would be
the speedy thing to do. When the object is transformed, take the
Z coordinate and compare it to the distance values for each representation.
The other thing that surprised me was that the simulator did not
have a global hidden area removal algorithm. If the draftsman doesn't
go to extra trouble, the objects are just drawn in their internal
order, possible drawing a distant building over a nearer one.
The operator has to manually place a plane of occlusion between
any objects that might overwrite each other. The rendering engine
takes the midpoint of each object and draws the one in the near
area first. What a pain.
The setup they were using was a silicon graphics indigo for map
editing, and a room full of custom hardware for the rendering.
The images were rendered on three monitors inside the cockpit at
640*480*24 bit color at 33 frames per second (weird). That is a
lot of processing power. It texture mapped most surfaces on the
fly. This was a low end simulator, so it could only do twilight
and night scenes (it didn't model all the city buildings, it just
sprayed a lot of light points around populated areas). It did cost
ten or fifteen million dollars, though (including plane cockpits).
If you want to do a really good open air game, I would suggest a
hierchal object representation. Start with an area the size of
your entire world (flight sims are easy because of the 2-D nature
of the world), make avery coarse representation of your world, then
subdivide it and specify a more detailed description. Continue
subdividing and clarifying the image until you have an exact representation
of your world. Even subdivision, like a quadtree, comes to mind
first, but there may be benefits to unevent divisions. When you
are rendering a view, the area where the camera is should be drawn
with the greatest subdivision level. Cross into adjacent visable
areas (this eliminates 3/4 of the world data set), using progressively
coarser detail based on the total distance, until the most distant
world blocks are several miles wide and very low detail. Fractalin
terrains are perfect for this type of data organization, because
the landscape is generated in a recursive detail manner anyway.
Objects moving around the world will be in 1 - 4 areas, depending
on their position. Use the object detail for the closest one.
There are no quick fix answers to 3-D systems, because the structure
of the data and the fundamental refresh type need to be matched
to the problem at hand.
RadED - Video of Early voxel system evaluated for the original DOOM
I can't figure out how to vidcap off software that twiddle's ModeX(ah, the old days), so I had to tape with my cam, sorry for the crappy quality
I have Carmack's source that he posted some place.
Dug out the source code. Of course you'll need to compile it...
recent note: this may not all be correct anymore... Look in the source
if you are curious.
RADED basic operation:
The holograms are composed of 64 platters of 64 radial sections with
32 evenly spaced divisions.
Right clicking in the circular edit area will draw with the current edit
color. The projection will not be updated until the mouse button is released.
Left clicking in the edit area changes the edit color to the color clicked
Pressing 'S' saves the current hologram.
Pressing 'C' while the cursor is in the edit window will draw a circle
with a radius out to the cursor. Everything inside is erased.
Clicking in the color palette area changes the current edit color.
Clicking in the area between views selects the platters to write through.The
platter first clicked on is the one displayed, but you can drag the selected
area so that it covers multiple platters. When multiple platters are
selected, drawing is done in all the platters at once.
The left/right arrow keys rotate the image.
The 1/2 keys rotate the projection without redrawing the edit window until
you release the key.
Clicking along the bottom of the screen rotate the image to a specific angle
based on the x position of the click.
The up/down arrow keys move the platter selection range up and down.