Quake III Gets Real Time Ray-Tracing Treatment
Ozh writes "Did you ever wonder what you could do with a cluster of 20 AMD XP 1800s? Some German students and videogame fans did, and their answer has been what they call 'ray-tracing egoshooters', an entirely raytraced game engine which 'runs about 20 fps@36 GHz in 512x512 with 4xFSAA'. The first game to get this treatment is Quake 3 Arena : the screenshots look slightly better than the original 3D engine but the video (56 Mb, 3'19) is quite dramatic."
Its a bit hard to tell from the page whether this makes full use of the GPUs per box in the cluster like Chromium
They do also mention that it can render entirely in software over the network at 20FPS - not bad considering that each fram portion of the data has to pass across presumable 2 machines before it is passed to the display!
Ripping an new rectum in the fabric of spacetime.
That's pretty nice. Unfortunately most of the effect can be simulated using tricks and still run on a regular computer. Especially with all the stuff you can do on the GPU now.
They need to soften the shadows also. Either by using tricks or radiosity. Right now it looks kinda meh...
Interesting effort though.
If you read the article on slashdot properly; it tells you that ;)
Ripping an new rectum in the fabric of spacetime.
Freecache link. This should hopefully be faster. Anyone have a torrent?
Somebody didn't notice the frameset...
Screen Shots
Downloads (video)
09F91102 no, 455FE104 nope, F190A1E8 uh-uh, 7A5F8A09 that's not it, C87294CE no. Ah! 452F6E403CDF10714E41DFAA257D313F.
So my question is, for those of us who don't know the first thing about 3D graphics, what are the pros and cons of a raytracing GPU, compared to the polygon pushers we currently know and love.
Sticking feathers up your butt does not make you a chicken - Tyler Durden
Man, I can't believe they didn't used radiosity to render those images. Yes, I know it takes a lot more of CPU power, but I would surely steal other people computers just to play Quake that way :)
Great so now I have to lug 20 pc's to a LAN party to get a decent frame rate?
And I was just thinking about my next upgrade for HL2/Doom3.
Imagine a cluster... oh wait.. um, so is it running linux? and where is the source code?
09F91102 no, 455FE104 nope, F190A1E8 uh-uh, 7A5F8A09 that's not it, C87294CE no. Ah! 452F6E403CDF10714E41DFAA257D313F.
According to Moore's law, we should get this power in our desktops in about 4 and a half years from now.
_______
2B1ASK1
Probably because they're only rendering to 512x512.
Nothing to see here; Move along.
Dammit, don't give Carmack any ideas! I'll barely be able to run Doom 3!
Because raytracing point-samples the scene, so just like polygon rendering you'll get jaggies all around your objects if you don't antialias.
And they did this for every pixel on each scene, 20 times per second.
It's a slow technique but it gives good results. They managed to do this fast by using hardware and 20 computers all running in parallel and transfering the results over the network in realtime; 20 times per second.
Previously used techniques to draw the graphics for Quake III involve drawing little perspective adjusted triangles on the screen; with stuck-on texturing and they use some clever techniques to approximate lighting and shadow; but these techniques generally aren't as good as ray tracing; but they are easy to design graphics cards to do quickly.
-WolfWithoutAClause
"Gravity is only a theory, not a fact!"pulling down at about 200kb/s
Someone put a lot of computers together to make a powerful distributed system that is capable of rendering Quake using ray-tracing.
Here is an example of a (not real time) raytraced image (one that doesn't use radiosity -- just straight raytracing). In theory, given enough CPU power, they could pull this off.
Ray-tracing uses a method of 3d rendering that is currently beyond dedicated 3d hardware and must be done in software.
The main benefits of ray-tracing from a quality perspective are:
* True, accurate shadows from *everything* (most games, even stuff like Neverwinter Nights have hackish shadow engines that don't realistically display what lighting would look like in real life. These are calculated in real-time, not the precalculated shadows that you'll see in, say, Quake, where the light sources never move. You could throw a flickering lantern across a bar with bottles falling down and have all the bottles cast their own shadows.
* Advanced lighting. Currently, real-time 3d engines are very limited in the types of light they can produce -- generally, only spherical point sources of light.
* Refraction. You can have glass, ooze, or water truly refract light and distort images, not just use some sorta-lame effect to vaguely approximate it. Think of looking through a glass lens or a window in an old house.
* Volumetric fog (where you have "clumps" or "clouds" of fog, rather than just a global constant flag fog covering everything). Quake 3 had some rather (IMHO) impressive hacks to emulate volumetric fog -- ray tracing allows *true* volumetric fog -- people vanishing in swirling clouds of fog and mist and the like, not just a straight visibility dropoff.
* Reflections (there are a lot of hacks to approximate this off with existing 3d engines), but raytracers are *made* for this sort of thing.
* True curved and arbitrarily-shaped surfaces.
* Light projections (with shadowing and all that). They show a bit of this in the demo -- you could have, say, two people having a swordfight in a theater and the picture washing over them, or a scene in a church, with dusty light from the stained glass windows washing over the characters.
Basic ray-tracing does have some flaws. The shadows are sharp and hard -- sharper and harder than in real life. There are hacks to do soft shadows, but there isn't a particularly good an efficient way to pull them off.
It's hard to deal with things like laser beams or light beams coming out of a prism in ray-tracing. You need to do forward raytracing/photon mapping for this, which I suspect that they aren't doing.
Ray tracers tend to look a bit "eerie", for lack of a better word. They tend to leave shadowed areas very dark -- in real life, light will bounce around in corners and things a bit (even surfaces that don't look "reflective" to us will do so). So if I shine a flashlight, a raytracer will show a perfectly accurate cone of light (unlike existing 3d engines) that will spill properly over all surfaces. However, that cone of light will be a *cone* -- normally, when I shine a flashlight in a room, it lights up the entire side to some degree because of light bouncing off of objects.
There are some really nice things about ray tracers. They tend to parallelize really well, so you can theoretically put lots of computers together to do renders (as these folks did), or have lots of chips in parallel to theoretically make a custom piece of hardware.
May we never see th
Imagine what you could do with a beowulf cluster of these things... oh wait... nevermind.
It seems my question is already answered.
Is it just me, or did that look much worse than standard Q3?
Q3 isn't designed, let alone optimized, for raytracing, so that's not a major surprise, but I still expected an improvement, not a downgrade.
I think a custom demo is called for.
The tech sure is hella cool, though.
But they'd be using supersampled AA... if they're doing true FSAA on every pixel, then the slowdown would be 4x.
They could be rendering it at nearly 1280x1024 at the same speed without AA... I'd take that over 512x512.
I've seen "games" that use realtime raytracing on ONE computer. If they need 20 computers to do the same thing, I have to wonder. Is their program just unoptimized/poorly coded? Or have they turned on many questionable quality gimmicks?
Ummmmmm, care to link to these games?
Photos.
That video is one of the most impressive things I've seen (as related to PC video/games). The scene that looks like a night club is astounding, and the scenes with the mirrors are extremely cool.
I can't wait to see this technology in production.
Don't think that a small group of dedicated individuals can't change the world. It's the only thing that ever has.
ed2k link (It sucks that Slashcode is broken WRT ed2k direct links.)
May we never see th
Bah, google it. I'm talking about games I saw years ago, I don't memorize the URLs of every page I visit so I will have instant access to it many years down the road.
A quick google search turned up http://www.realstorm.com/ which is a realtime raytracing engine. A very impressive one might I add. It is able to render at 512x512 in realtime on a single machine, and looks better than Q3RT to boot.
Ray tracers tend to look a bit "eerie", for lack of a better word. They tend to leave shadowed areas very dark -- in real life, light will bounce around in corners and things a bit
That's what radiosity is for. Now a realtime radiosity package would be tres amazing.
Submit a patch or a feature request. You're capable enough from what I've read. If no one posts even a requests in such a forum, there's no way to reasonably expect the code to get changed.
You like splinters in your crotch? -Jon Caldara
They're hosting screengrabs and a big video file, and the site's still holding up? Well now we all know what they did with all those machines they used for the demo!
"Derp de derp."
And some people 10 years ago thought that ray traced games were going to be on LAST generation CONSOLES.
Heres a mirror of the movie.3 rt.avi
http://mirror.openbarr.com/20040509_egoshooters_q
"The road from legitimate suspicion to rampant paranoia is very much shorter than we think." - Picard
"Using point sources on obviously diffuse light sources may give crisp, clear shadows, and a faster render speed, but it makes the raytrace less realistic and less impressive than the original."
Give them a break. As it is, it took them 20 cpus to make this work. Area lighting (you were calling it Diffuse lighting, area lighting is the cg term usually...) requires an array of point lights to make the soft shadows you want. Yep, they're more realistic, but they are an order of mangitude harder to compute.
"If they wanted to show off their real-time raytracing using point-sorces they should have designed some levels that matched the ray tracing to the visible lightsource. "
I'd love to hear of what you'd think would be a good example of a level that utilizes lights that have a physical size of 0 by 0 meters. This is not an "f-u!" challenge, but a genuine curiosity. As a 3d artist, I've yet to make something that wouldn't benefit from area lighting.
"Derp de derp."
You can add a photon mapping pass to a ray tracer to simulate light bouncing indirectly on to other objects. I believe this is part of what is called Monte Carlo ray tracing, which adds a whole swathe of extra goodies to traditional raytracing.
... can be found here.
-- Contradictions only exist in thought - not in reality.
I guess I'll start saving for that alienware system after all..
1) Your analysis is based on bad assumptions so your result is way off. 2) You're a sick bastard for fucking a horse.
The only reason I can think of them consciously doing this is to up the speed numbers, since 30GHz is in our minds not as impressive as 36Ghz, despite the fact we all know AMD is faster per MHz than intel.
click-clack, front and back. I'm not moving this car otherwise.
Okay i know raytracing provides far more realistic visual representations of a 3D modelled scene than actual scanline polygon rendering. But - and here comes the but - i miss a lot of things in this raytraced Quake movie. All the shadows are really really crisps, one would expect that when light bounces off walls and objects a few times its reflected light would soften those crisps shadows. E.g. it would result in softened gradual shadows.
;) )
I guess they limited the path of the ray they calculated so it bounced only two or three times off an object before they stopped calculating it. (If they stopped after one pass you wouldn't have seen those reflective glass balls like you did, which need multiple passes to look like they do).
I also miss colour bleeding on the surfaces. E.g. when you have - let's say - a white surface next to a red surface, some of the red will bleed on the white because light coming from the red surface will fall on the white surface and light it in a red hue. You would have seen this with a proper raytracing engine where the light bounces multiple times from an object and where the colour of the light is affected by the colour of the object.
I think those are the main reasons why the video doesn't look as realistic as i hoped for. (Then again how realistic is walking through a building where they have decorated the place with gruesome wallpaper taken from a horror movie and gigantic brains on mechanic spider legs walk around...
No, photon mapping is different from monte carlo ray tracing.
Photon mapping basically is tracing light particles from the light source over multiple bounces (for indirect illumination). The resulting hit points and other light data are then stored in a structure and used later on for lighting.
Path tracing in a way is like normal ray tracing, but you spawn new rays even for all kinds of reflection (that is *lots* of rays, which is why it's damn slow) and calculate the resulting color by weighting and adding the results of all the rays (recursively).
Essentially both "solve" an integral formulation for lighting known as the rendering equation, but in different ways.
You were probably one of those masochistic bastards that installed Windows 95 on a 4MB 386SX, weren't you?
Castle Wolfenstein and Doom were both done using raytracing, though it was 2-D raytracing. They didn't use fancy lighting or complex models either, so maybe it they don't count.
Lasers Controlled Games!
many games already do this for realistic lighting on the static scene.
For example:
Quake (1, 2 and 3)
THIS THING CAN TURN ON A DIME, MACROSSZERO STYLE ALSO FUCK BETA, ~NYORON
to compute global illumination levels ahead of time (as opposed to using ambience). Then you can use raytracing in realtime to capture dynamic effects.
THIS THING CAN TURN ON A DIME, MACROSSZERO STYLE ALSO FUCK BETA, ~NYORON
are provided by a straight raytracer (soft shadows, color bleeding, etc.)
Because when a ray hits a surface, it only spawns a reflection ray and rays to any (point) light sources. Therefore shadows will have sharp edges, either a particular light at a particular point is visible or it is not.
Moreover, the contribution of non-light sources to a surfaces' illumination is not modeled (light from OTHER surfaces).
To accomplish this, once must create a large number of trial rays in a pattern around the reflection normal that roughly model the diffuse-ness of the surface in question. These can then "view" other nearby surfaces and pass on their illumination. Soft shadows can be achieved in this manner, by having rays intersect light sources which have volume, like real lights would.
But this sort of technique is much, much slower.
THIS THING CAN TURN ON A DIME, MACROSSZERO STYLE ALSO FUCK BETA, ~NYORON
They weren't raytracing engines, they were raycasting engines. Big difference there. Raycasting just calculates if a 2D ray would hit a wall, and how far away it is. It's just simple trig.
I stand corrected! You are right.
Lasers Controlled Games!
This looks worse than the original engine. I've played Q3 since it came out, and those screenshots are crappy compared to what the game really looks like... So big deal, someone used tons of processors and some good coding to create graphics that look worse than the original, for a few thousand times the CPU and $$ cost! Sometimes I wonder why people get excited over this stuff.
As no-one else has mentioned it I'll be the first to point out that if you want to try raytracing for free on just about any platform you'll want POVRAY.
Input error. Replace user and press any key to continue.
Feel free to mod me as redundant, but I'm sick of all the incorrect assumptions regarding rendering.
Raytracing overview. (a simple implementation)
Raytracing involves the casting of rays from the camera's eye, through a pixel in the screen. For each object in the scene (assuming no partitioning optimizations) we calculate whether the ray intersects the object. If it does, we determine the distance from the 'screen' to that object (consider it the Z depth) and save this for later. Once we have checked every object we find the object with the shortest distance (Z depth) and we caluclate the color of the pixel at that point.
To do this we get all the light source in the scene, and we cast a ray from the point on the object to each light source (assume point lights for now). We then determine if any objects intersect the ray. If there is a intersection then the point on the object is in shadow (at least partially, we won't handle translucent objects for shadows) so there is no light reaching the object from that light source. If there is no intersection, we calculate the color based on the material of the object (ka, kd, kn, ks), the angle of the camera to the points normal and the angle of the light source to the points normal as well as any reflected/refracted components.
The reflected/refracted components are where the coolness of raytracing is found. If the object has reflective properties, we cast a ray from the point on the object along at the angle determined by the original rays angle of insidence to the normal. We then use the same logic as the ray from the camera to determine what object it intersetcts with and the color of that point on the object. This is the recursive nature of a raytracing. This color value is then incorporated into the caluclation of the original point's color based on its 'reflectivity'. The same is done for refraction except that the ray is determined based on the refractive index of the object and snells law.
This is the extreme basics of raytracing. There are many subtilties that I have glossed over as well as many optimizations that can be done. For further enhancements there are better light models (spot lights, box lights, area lights, etc), distributed raytracing (which provides many features such as soft shadows, depth of field, motion blur, hazy reflections/refractions, antialiasing) and many others.
--
Area lighting (you were calling it Diffuse lighting, area lighting is the cg term usually...) requires an array of point lights to make the soft shadows you want. Yep, they're more realistic, but they are an order of mangitude harder to compute.
first of all I called it a "diffuse light source", not "diffuse lighting" - a critical distinction between the source and the product. What's more "diffuse lighting" is a cg term too, albeit one you don't seem to know, and "area lighting" is subset of it. If you select "spotlight" instead of "area light" in your copy of lightwave or 3DStudio Max it's still a diffuse light. Pretty much everything but a laser is a form of diffuse light.
and secondly I'm glad you agree with me that they're more realistic but harder to compute. that was my point. they should have put a few sources in each lighting object instead of scattering loads of individual ones around. If that was the sort of level they wanted to use.
I'd love to hear of what you'd think would be a good example of a level that utilizes lights that have a physical size of 0 by 0 meters.
The names escape me, but of the stock levels any of the ones that are floating in space. y'know, space - where all the lights are really far away and cast hard shadows. For example, this effect is why the moon doesn't have a dawn or dusk, just a terminator line.
--
What is considered the "right angle" for a forward raytracer? You can't do it based on the surface angle, unless the thing is absolutely reflective. If it's not, then there's a decent chance to not run in to any light source.
:)
Imagine a piece of paper. Shine a laser (or any light) at it. Assume the light and your eyes are a 90 degree rotation about the center of the point apart, and both looking down at the paper at an angle of 45 degrees. If you raytrace the rays from your eyes, they hit the paper, bounce off along a line between your eyes and the light spot that's on the paper, and continue off in to the darkness. Now, in real life, that light does something.. but if I were to trace physically the light source, I'd not see that spot of light on the paper?
Perhaps I'm missing something, but it seems purely backward or purely forward raytracers couldn't work? You'd have to trace forward any light, to illuminate the surface, and trace backwards to see what ones are in view. If everything was perfectly reflective, however, the light wouldn't be absorbed/scatter in such a way that this would be a problem. But how often is everything in the room a perfect mirror?
Most surfaces scatter the light, so you can bounce off in any direction chosen at random. You generally have to do quite a few bounces before you bounce into a light source or the sky.
Incidentally, perfectly parallel mirrors can be the worst case; imagine a beam of light at a small angle- how many times would it bounce between them before making it out the other end?
You are right though- generally a mixture of forwards and backwards techniques are used. There's also a matrix technique for precalculating the reflectivity of surfaces. If you use raytracing for the first few bounces, and the reflectivity after that, scenes are going to generally look pretty darn realistic.
Oh yeah; there is one problem with raytracing- it can't usually handle refraction (prisms and lenses) of colours very well... one or two experts claim that this is a bug in reality, and that raytracing is perfect :-)
-WolfWithoutAClause
"Gravity is only a theory, not a fact!"I actually did sit down to patch Slashcode after you pointed it out, but Slashcode apparently requires blowing away FC2's Apache and mod_perl installation, which I'm just not willing to do.
May we never see th