Are BSP based engine becoming archaic?

Started by
22 comments, last by uutee 19 years, 6 months ago
I've been a level designer for a few years, professionally only recently. The last three years were spent studying CSI. I never got into game programming but I understand a large amount of the programming side and theory because of my CSI background. Yet still I am unable to answer this concretely. It seems more and more BSP based level design/engines are becoming more and more useless, seeing Quake style engines rapidly disappearing. Obviously a mesh/model cached into video card memory will render much faster, but when an engine is entirely mesh the method of culling becomes questionable. I believe a heavy usage of mesh and a light mixture of BSP for culling, allowing for tons of detail in indoor areas with high frames, will never go instinct. However GPU's are becoming so fast that wasting that extra time rendering is becoming faster and faster it seems that it might even be faster then wasting CPU time deciding what to and what not to render. The answer I'm looking for is that BSP will never go away, not because I like level design with BSP, but because, and I say this at the end of my post, I am much more of a fan boy of the Quake engine and games such as half-life, and there is a growing rivalry with fans of the Unreal engine at our office. Arguments between my co-workers and I often lead to mindless debate and noob calling.
Advertisement
Great post, and I think that you are quite correct in your assumptions. GPUs are getting much faster at rendering mass amounts of polygons, causing many once popular algorithms to become useless on newer hardware.

Look at the ROAM algorithm for terrain level of detail. It once had a large following of terrain engine developers, but now you are hurting your engine's performance using ROAM with newer hardware. You would get much better performance using static VBOs chunked into blocks with frustum culling, or using Geo-Mipmapping. While I still think the BSP\PVS algorithms have their purpose, their are pros and cons to both. The pros are fairly obvious, especially on older hardware, but a major con that game developers, in my opinion, might be omitting BSP implementation is that it generally doesn't support dynamic meshes, or mesh deformation (without a lot of "handy work"). I don't see BSP completely going away, but I do see more hybrid engines coming out.

Just my 2 cents!
Hate to break it to you, but...
Yann Gives some great reasons why BSP's are out dated..

BSPs were great for rendering when there was no or little hardware Z-buffer support, because they can give you perfect Z-sorting for free when walking down the tree to render it.
Quake3 already dropped the fully convex leaves concept, but still kept BSPs, same for lots of other engines (unreal), I'm not sure why, probably because using something else would have meant making a whole new bunch of tools.

and about that mesh/culling, you really should use massive culling (frustum + occlusion), if you want highly detailed levels on today's hardware... thinking that a whole mesh for a whole level can run OK today is the symptom: "we've got fast CPUs and GPUs, so we don't need to bother optimizing". but if we do bother, we can display much higher quality, detailed graphics.

BSPs were also probably kept for collision detection, but as time goes on, they're becoming more and more useless and obsolete (it's been quite a while now in fact...)

the big problem with BSPs is that they also are completely static. of course you could rebuild at runtime a whole sub-branch of the tree... but it's damn slow, and that time could be spent doing some _useful_ things, using another more appropriate space partitionning technique, such as octrees, ABTs, KD-trees, whatever...

Quote:However GPU's are becoming so fast that wasting that extra time rendering is becoming faster and faster it seems that it might even be faster then wasting CPU time deciding what to and what not to render.


that's true for some things, but definitely not for a whole 500 000 triangles level :)
it'll be true if you partition too much and if you don't have enough triangles in each batch (and still, it's not the time needed to do a frustum test that will become annoying, it's the CPU overhead to render the batch, rendering 1000 10 triangles batches will be a _lot_ slower than rendering 10 1000 triangles batches, even without any culling tests whatsoever)
Yes, BSPs are getting outdated, but consider it a tool in a toolbox. Just don't always use it, but at least it is there if the situation arises. If you read my above post, I state that BSPs are a decent solution to outdated hardware, which still make up a decent part of the target market. They are outdated for newer hardware, because better solutions have been developed. It depends on what your requirements and design goals are.

As I stated, every algorithm has its pros and cons.
Small question:In an interview I read Carmack says that one thing they didn't do in Doom3 was to implement a general solution for rendering transparent surfaces in the right order.It seemed weird to me,because I thought BSP-based PVS can do that.Have they dropped that feature?
It probably has alot to do with their lighting engine. Per pixel lighting and alpha blended triangles have trouble with each other (from what I saw of the doom 3 lighting shaders). As for BSP, people forget BSP has alot more use than just what needs to be rendered and what doesn't. Things like sounds being in correct areas, lights only affecting rooms they are in, etc also is part of the BSP process. All the culling you do isn't just for what polygons need rendering, I think BSPs become more and more useful as time goes on, and with the Leafy-bsp system (ALA Quake 3) they're getting better too. BSPs may be static, but you can always put dynamic meshes within leaf areas, there's nothing against doing that.
Quote:Hate to break it to you, but...
Yann Gives some great reasons why BSP's are out dated..


Actually, no.

If you read his posts more clearey, you would see that ABT's and BSP's are practicly the same thing. What he said is that classical Quake style BSP is outdated. However, KD-trees are still usefull (octrees and quad trees), especially binary trees as they require less checks. Anyway, you will use partition tree which suits you best.

Would you say that Octree would be an improvement for Quake 2? I think not. Use tools as you know they'll do their job best.

ABT - axis-aligned binary tree (only cut via planes perpendicular to XY, XZ and YZ)
BSP - Binary Space Partition Tree, self explanatory
So... Muira Yoshimoto sliced off his head, walked 8 miles, and defeated a Mongolian horde... by beating them with his head?

Documentation? "We are writing games, we don't have to document anything".
Quote:Original post by DD-
The answer I'm looking for is that BSP will never go away, not because I like level design with BSP, but because, and I say this at the end of my post, I am much more of a fan boy of the Quake engine and games such as half-life, and there is a growing rivalry with fans of the Unreal engine at our office.


Unreal uses BSP, with lots of instanced meshes laid on the BSP shell. It can be effective, but mostly for indoord environments where auto-portalization via BSP is practical.

I personally prefer ABT (the A stands for "adaptive", not "axis-aligned", btw) because it's more capable of handling scenes full of complex unique geometry that should be split into manageable chunks, but BSP can't handle it.
Assassin, aka RedBeard. andyc.org
btw, after reading ffx's post, I need to add a precision to my above post: when talking about BSPs, I referenced what the term "BSP" usually describes: quake-like leafy BSP trees, and not all binary space partitionning techniques of course.

GodBeastX> since Q3 (and maybe Q2), Id doesn't use convex leaves in their BSPs, and cannot use the sort order to sort transparent polygons. having strictly convex leaves in a doom3 level would produce far too many polygon splits, and far too many GCs/render calls.

This topic is closed to new replies.

Advertisement