OpenGl engine

Whats the estimated time for a team of programmers to create an engine faster and better than Quake 3 using OpenGl. How many programmers and time period you think is needed to accomplish this task ?

Carmack and Hook probably did it in about 1.X year( pure estimation from the .plan file he was doing). That’s working everyday on it.

Carmack has probably 10 years of experienced in 3d, I don’t know for Hook, but might be more than 5.

Just extrapolate with what you’ve got!

You can make a Quake 3 graphic engine quite rapidly(read a couple of months), will it run as fast? I don’t think so. Will there have a game around it. Nope!

[This message has been edited by Gorg (edited 05-28-2000).]

Originally posted by Gorg:
[b]Carmack and Hook probably did it in about 1.X year( pure estimation from the .plan file he was doing). That’s working everyday on it.

Carmack has probably 10 years of experienced in 3d, I don’t know for Hook, but might be more than 5.

Just extrapolate with what you’ve got!

You can make a Quake 3 graphic engine quite rapidly(read a couple of months), will it run as fast? I don’t think so. Will there have a game around it. Nope!

[This message has been edited by Gorg (edited 05-28-2000).][/b]

Hello Gorg,

Please forgive my ignorance so what makes Quake 3 engine fast if not the Open GL hardware engine ? Is there another engine that is working with the hardware opengl engine ?

Well. Rapidly there is Occlusing culling(Quake 3 uses BSPs and portals.) Calculations optimisations (through SSE or MMX or 3dnow) if people don’t have a GeForce.

And there is a bunch of other little tricks to speed up software. One example: You can create better memory management routine than new and delete(or malloc and free for C people).

There is much more than Hardware acceleration to a fast graphic engine.

Quake 3 uses a ten-pass algorithm. Carmack wrote what every of the passes do in one of his old .plan. Hardware alone cannot give top speed for all the things you can do in ten passes.

Hello, Can you list me the engine specifications for Quake 3 so i can ask my programmers if they can do it.Can you send it to confidential@technologist.com

One of my programmers said to me a Quake 3 engine can be done in 7 months.

My current R&D at work deals with the design of a first/third-person 3d engine a’la Quake 3.

To get a head start, I rooted my work in the existing Q3 file formats and rendering technology. This meant that I had instant access to a lot of user-made levels etc, plus a “reference renderer” in Q3.

My estimation is that a competent 3d engine programmer (experience with OpenGL, previous experience programming 3d engines) can produce a Q3-similar 3d engine in maybe 6 months. This does NOT include time to actually code a game or tools, only renderer.

When I started, a lot of time was spent just hacking the .BSP format, trying to understand what was going on. Today there are some OK resources on that information, even though I still see a lot of bogus information floating around (no, Q3 does not just use 10 rendering passes … the number of rendering passes is determined by each surface’s shader + extra stuff such as fog).

Also, when trying to do something like this, you will often end up doing things twice. Of course, it does not take 6 months to get something on the screen. First, you do an engine just to get everything up an running. While doing this, you’re learning the basics of coding a renderer like this, and once you have done this, you have enough experience to see how you should have structured everything, and you can set out to do it properly.

Doing an engine that’s both “faster” and “better” than Q3 (at the FPS style of game) is a really tough task, though.

[This message has been edited by Rune (edited 05-29-2000).]

Hello Rune,

My programmer wants to know where can he read tutorials and example algorithms in programming a hardware engine like quake3.He does not know which direction to go into he wants to see if he can do it or if we should just lease an engine not saying that we can afford to lease quake3 engine. What information/advice can you provide him?

Originally posted by Gorg:
Quake 3 uses a ten-pass algorithm. Carmack wrote what every of the passes do in one of his old .plan. Hardware alone cannot give top speed for all the things you can do in ten passes.

Did you store this old .plan-file?
Could you please post it to this forum or email it to me (mailto:Konstantin.Baumann@uni-muenster.de), if so?

Kosta

Sorry. I found out yesterday that it wasn’t in .plan but in a book.

Real-Time rendering by Thomas Muller and Eric Haines.

But he still probably wrote it in a .plan or at a conference

Ahh, Gorg, you have the book, too? Yeah, the book says they got the info from his .plan, so it’s gotta be somewhere…

Hi BloodyAngel!

Well, I don’t know how good your programmer is, but I’m pretty sure that he can’t write a Q3 style 3d engine from tutorials or demos.

All the so called “quake level viewers” I have seen so far, are a LOT slower then the real Quake1/2/3 even there is a LOT more happening inside the game than just rendering the scene. There is sound, AI, backtracking, physics, collision dection, dynamic lighting, multiplayer LAN, and so on.

If you have a really good team (not based on what there thinking), they will probably set up an raw Q3 Level VIEWER within 6 month from existing and public code snippeds.

But this is not half of what you wanted.

First of all, it will be SLOW (you know why? because a C/C++ compiler does know sh*t about lowlevel optimizing). If tried out the MS Visual C++ compiler, and it does NOT take i.e. the memory (bursting) into account, so by just reversing the order of a couple of c++ intructions, I got an 30% performance increase, when I replaced that with pure assembler (takeing the bursting and caching into account), I got another 100% performance increase (with 3dnow/ISSE even more))

Also, MS-W95/W98 alignes the allocated memory chunks to 4 byte boundarys, giving you a 3 clock penalty on each mmx/double instruction on Intel Cpu’s, not to mention that ISSE requires 16Byte alignment.

And the Windows memory allocation stuff is SLOW to, why Do you think Unreal allocates all memory it can gets? Because Tim Sweeny has its own memory mangement.

BTW: A Q3 style engine spends more time to figure out what NOT to draw, then to render stuff (that is something that neighter OGL, nor DirectX do for you).
Buzz words are: BSP’s, PVS, O’Culling.

So, since your programmer asked for tutorials, I assume that he has no strong background in 3d or OGL (more than a year), nor into processor internals.

So what you really need is eighter a senior 3d programmer (more than 5 year of experience in 3d, and the knowlege of at least 3dKnow and ISSE, and at least one WORKING 3d engine), or you should just
license an existing engine (Q2 cost about 250.000 bucks including source, as far as I know).

According to what you said, I would STRONGLY adivce the last, since 3d guru’s arent that cheap eighter.

I don’t wanted to offend anybody, but this is the raw truth (as I see it) Flame me if you want.

Regards,

LG

P.S.: I am into 3D for ten years, and into microprocessors for at least 8 years and worked with Intel and AMD prototype CPU’s

Hi lgrosshennig!

What do you think about Intel C++ compiler?
I’m playing with it now. It’s not bad, but either not perfect.

Intrinsic pseudo-functions for MMX & SSE - definitely the step in a right direction, just current implementation is not very convenient. But anyway it’s better then what I have now for VC6 - a huge lot of #defines.

And, of course, it can optimize only for P5…PIII (and not always in the best way ).
Unfortunately, if you want the best performance on K6/-3D and K7 - hand-coded asm is the only way…

Hi Serge!

I found that the Intel compiler is quite good at floating point code (due to clever use of the FXCH instruction), but not that good at integer stuff.

If you have >a lot of< time you should give the progressive refiement compilation a try. The results are actually quiet good (better than VC++), the only thing is that it takes some time, and it is done for the system you are compiling it on (cache, timing, …).

I always used to say: Old friends are the best friends, and so I stick to my good old MASM.

This way, I don’t have any problems writting
code for both, ISSE and 3DNow!.

I think I am faster duing optimation (where it is appropriate) on my own, instead of letting some (stupid) software figure that out)

At least what I am thinking.

Regards,

LG

Lgrosshennig email me at confidential@technologist.com

I do not understand this. People all over the world have done so many things including cloning sheeps and walking on the moon. No one seems to can beat John Carmack code. I asked one programmer in America at a top programming company he has 15 years experience and when i asked him I need an engine to Beat quake 3 he FARTED!!! and apologized and walk away in shock. Is john carmack code that perfect that no other human being can come close to creating his strategic algorithms? Now listen to that code snipplets were given away to the public and still programmers cant make a better engine. John carmack is in the Matrix he is ONE with the code it is that obvious he HAS obtained GOD status in programming!!! This is not up for debate folks these are the facts from my own journeys.

From what I know, Carmack and other programmers uses algorithm already created long ago(or not so long ago).

The only thing you have to do is adapt it to your architecture. That is the hardest part : making everything fit nicely. That means :

  1. Fast
  2. Easy customisation (Unreal Engine is now 3-4 years old!!)

You need a lot of knowlegde for that, not only in graphics, but in physics and in software architecture.

The main drawback is the time it takes. If it takes you a year to create your engine, well it is one lost year! You haven’t made any in that year and you are not even close to because you still haven’t work on anything to give to the public.

Simply put, as people have already mentioned above, but I’ll restate it for you.

A) Anyone can write anything, given time.

B) Anyone can write anything better than (A), given more time.

There are so many different ways, techniques, and algorithms in software engineering that there is no such thing as “the right way” to do it. One person’s code may be fast, another’s may be more accurate, etc.

The point is, Carmack has been working on the quake engine for many many years. In fact, most commercial 3D engines have been in developement (and most actually still are, ie: Q1->Q2->Q3A, Unreal->UT, etc).

This means many many years of optimizations, better hardware, more features, newer software technology, and the list goes on.

Unless you and your team of developers have many years of experience in the 3D market individually, to come up with something that rivals or betters the speed and quality of an engine like Q3A is going to take you a very very long time.

-As an aside, I am about 3 months total into 3D programming for my life, and about 10+ years into general software programming. I have a working 3D engine, specific to my application. It is nowhere near sophisticated, fast and efficient, etc., as an engine as above. Its for a commercial app. Its my first ever. And fully, as far as programming goes, I can say “I know NOTHING” when it comes to works of this magnitude. I’ll be learning for a long long time.

Good luck, and I wish you the best.

Siwko

Hello,

I think the final performance is really based on the resources available to the development team.I think that as usual Id did extensive research in regards to where technology is today and where it is aiming at tommorow.I also believe that they have access to information that would be identified as classified to the general public is reference to Processor strengths and weaknesses.I do believe that they actually design a demo engine and begin evaluating benchmarking results.I do believe that manufacturing companies provide them with classified information in regards to obtaining maximum power from hardware resources.I have heard that 3DFX had a program a few years back where people could have written code to access the hardware itself however developers were asking to many questions due to their lack of knowledge and 3dfx decided that supporting these developers was a nightmare. I guess these were the programmers who thought glide was not enough.However I do feel that classified information for optimized results is reserved for the big and established entities.

Not true. Most hardware companies are more than forthcoming with information, even to single-user/developers. I have requested repeatedly, and repeatedly recieved information about processor and video hardware and API/SDK’s by many companies. Be forewarned, though, this process also takes time. I recently requested some info from AMD, and didn’t get a reply until a month or so later. These companies are very busy, even for the large developers.

Siwko

What does the programmer needs to do to make a very good and fast hardware engine?I am not a programmer and not even close to becomming one either.What is the formula of making a fast engine capable of breaking current benchmarking results.Technology is advancing programmers now have ISSE and 3Dnow and hardware accelerators that do lots of the work so the formula should be easy in design. What are the laws in regards to creating the 3D engine such laws like over 1 million calculations is considered as an overload or try to use x amount of cache for this specific task.What about using representations as a variable is this a factor also? The less lines drawn in an engine or a level does this means more processor power available? Whats the power management guide in reference to 3D engines like a budget saying we want to use this part of the processor for this and memory bursting for that.Whats your infrastructure design for a very fast 3D hardware engine and what about maximizing Opengl through the accelerator cards for 100% power useage.

testing an trying is the law, you also have to remember that if you want a game, you still some processing power for AI, physic, game logic etc…