HOM hunting

Content

This tutorial discusses methods to eliminate HOMs. It should help you with 90 % of common HOMs. For the rest (more difficult ones, more technical stuff), you should check BSP Tutorial written by Hourences (it will be linked many times on this page). This article is more about "from symptoms to solution" and is written for more patient beginners. ;-)

What it is a HOM?
Causes and types of HOM
- Texture HOM
- Antiportal HOM
- Invalid geometry HOM
- Disappearing faces HOM
- The rest
Thru-the-portal HOM
Full-blown HOM
HOM – real case 1 (thru-the-portal HOM)
HOM – real case 2 (full-blown HOM)
Conclusion

What it is a HOM?

The Hall of Mirrors (HOM) is the effect caused by disappearing face (most of the time). For whatever reason, a brush's face is not displayed and whatever is behind is shown instead. In many cases there is nothing behind (you're looking out of the level) and so last thing drawn on that specific spot is shown which results in a "repeating pattern" with some flickering effects or whatever else. This is a reason for the name Hall Of Mirrors.

There is an incredible BSP Tutorial by Hourences (no need to introduce him I think) where you can learn about BSP problems and how to fix them. This page is focused solely on HOMs with few real-life examples. I hope it provides added value to aforementioned n1 tutorial. For the sake of completeness, I will repeat some things from that tutorial (HOM-related only).

Because HOM might but also might not be mapper's fault, I will explicitly point out if some case is your fault or not. It's no offence; there were times when I'd be happy to know this. (Of course, you have to fix also problems caused by engine limits, but you can at least blame something else. :-))

Causes and types of HOM

There are HOMs caused by user actions and there are HOMs that are a result of UEd/Unreal engine limits. As I don't understand all causes ("it's the problem of the engine"), so I will split HOMs on a "symptoms" basis instead of "cause" basis.

Texture HOM

Texture HOM

If you used texture with an alpha channel on a solid face, you can see through it. That's bad and in this case it's your fault. It is not related to BSP – the face is shown but you can see behind it. Never do this! I'm using alpha textures on sheets in front of the actual wall texture... whatever, we will not cover this HOM more than it deserves (mentioning the type, cause + this paragraph). Next one...

Antiportal HOM

If you can see an antiportal face a HOM occurs because antiportal's face displays nothing (so it repeats the last thing that was visible on that spot). "How could be someone so stupid?" you may ask. ;-) Imagine a partitioning-wall in the middle of the room with an antiportal inside. Suddenly some AVA freak give you some advice to lose some bricks. There is a hole and HOM in it. You have to rework the antiportal (make a smaller one – or two – or omit it completely).

Greetings and thanks for this experience goes to Sjosz. :-) Always watch antiportals. If you know this type, it's the very easy one.

Brushes with non-planar faces

Invalid geometry HOM

Non-planar faces are evil. You can get this problem through vertex editing if faces have more than three vertices (three is safe, because three points in space define the plane, and so are always on that plane). Most brushes have more vertices per face. Check the picture on the right side. There are two brushes with non-planar faces (both selected). The additive one causes HOM, the subtractive one forms some ghost face (it is visible only from this side, looking along the green arrow will not show any problem). Be very careful when creating various sloped ramps that does not go along the axis. Check the faces with the wire-frame view in the 3d viewport. In most cases these HOMs are shaped as triangles and brush simply tries to tell you: "I wanted to be shaped like this."

You can fix the brushes on the picture by moving marked vertices to align them with the rest of the plane. It is too obvious on the Side view, but it will not be so clear in many cases (rotated brushes, etc). Moving vertices will also cause that your geometry will not be like you wanted it to be – you have to rethink the brushes in most cases. (Take into consideration, that brushes on the picture would be wrong even in the reality. They really need to be re-thought.)

So again – illegal user action has caused the HOM but it is easy to fix if you have basic experience with this. (Thanks to Angel Mapper for reminding me this obvious knowledge on forums. :-))

Disappearing faces HOM

Generally the most classic HOM case. Your brushes can be perfect and even simple but with more and more brushes in the level there is an increasing probability that HOM occurs – just because the cuts will become too complex. Check Hourences' BSP Tutorial and also his Semi-solids Tutorial to learn how to limit the cuts.

I don't know if there are any real subtypes of this HOM type, but I divide them in two cases: thru-the-portal HOM and full-blown HOM (no proper name for this one :-)). These two cases are solved in examples lower on this page (both from my map Taboo). But first, we will take a look at some characteristics and solutions for them in theory. I will talk about (dis)appearing of HOMs instead of disappearing faces, so sorry for this inverted terminology. Since we're talking about HOMs, I think it is kinda more convenient. ;-) Wherever face is mentioned, it can be a face or just a part of the face (caused by cuts).

The rest

HOM can occur even in the middle of the corridor, but this is out of our 90% scope. :-) Again – check Hourences' tutorial. Most of the time you will deal with HOMs that are described in next sections (you don't want to deal with the worst cases, I bet ;-)).

There is also one quite easy HOM case. If you accidentally sink brush into a semisolid one, a HOM will appear. You have to delete the semisolid brush and the sunk one too. Duplication may not work and so may not Poly to Brush (I don't know what construction brush can pass to newly added brush, but it simply does not work sometimes). This is still easier solution and you often know why HOM appeared; just be rigorous and do it properly. You may find other cases when this plain technique could work.

Thru-the-portal HOM

This is a strange HOM that occurs only when looking through the specific zone portal.

Symptoms:

  • You know, there is a portal between you and the HOM (the HOM always disappears when you enter the zone).
  • The HOM appears and disappears when changing your FOV direction (e.g. it can appear only on the screen edge, or only in the middle of the screen).
  • Disappearing surfaces have the proper zone color (if you manage to see them).

Fixing:

  • Move portal a little.
  • Try to increase the overlap between the portal and geometry brushes (sink the portal deeper into the BSP).
  • Last resort: Rethink your zones ;-)

This HOM is easy in most cases, but you're also more limited in the ways that you can fix it. You generally don't want to omit THAT zone portal, do you? I'm not sure if you can apply some fix-tips from the full-blown HOM, but you could try. ;-) You can send me an e-mail if you have any better tips or more specific knowledge. I'll appreciate it (and credit you for all useful contributions ;-)).

The nasty thing about this type of HOM is that it is not always visible, so you can actually have your level released and then some player will report to you that he "found some HOM during my incredibly high lift jump with my view facing that direction, bla bla..." – you get the idea. On the other hand, it is not so serious when it does appear. Zoning in Roughinery-FE (haven't checked other versions) has a bug visible only from some respawn points (before you start to move) by just rotating your view – it looks like a HOM directly on the zone portal, but I haven't checked the map in the editor. It is some relative of this type of HOM with no real harm caused.

Full-blown HOM

This is an always visible HOM that occurs mostly because the Unreal engine can't handle cuts on your face... on a face of your brush I mean.

Symptoms:

  • It does not matter in which zone you are, the HOM is still there.
  • No matter your view direction, the HOM is still there.
  • If you go into the geometry (camera in "void"), you can see the surfaces – and after switching to Zone/Portal view, you can see, that those surfaces have a different zone colour.

Fixing:

  • Follow the cuts, as Hourences and other mapping powers advise.
  • Check for brush edges cutting other brushes edges (co-planar faces) etc.
  • In order to make things simple, sometimes it is even better to ADD a brush (mostly not, but sometimes, you know)... simplicity is more important than brush count.

HOM – real case 1

This is a case of "thru-the-portal HOM". On the first picture, you can see a HOM on the faces of the big room behind the selected portal. The red arrow shows the line of sight. When I lowered my view, the HOM was gone, but that was not the fix ("please, players, run around with your eyes stuck to the ground"). When the faces were shown I checked their colours – they were in the same zone, so it definitely was not a full-blown HOM.

Thru-the-portal HOM - beforeThru-the-portal HOM - after

There is a glimpse of the solution on the second picture. I split the portal in two. One for the place above the wooden strut, another one for the place under it. I also moved that lower one a little (on the top view). I have to admit that the second screen-shot is not flawless because I had to put the camera into geometry in order to see selected portal brushes in the 3d view, but that is not the real problem. Problem is that there was still a HOM (check the black spot in the door frame). I noticed it when I started to write the description for this case. :-) It took me 10 minutes to go into Windows, start the UEd, move the upper zone-portal 8uu closer to the lower one on the top view (there was no HOM through the lower one), rebuilt the level and the HOM was gone.

HOM – real case 2

This is a full-blown HOM that is caused by crazy cuts that could not be handled by the engine. The first picture shows the HOM in Dynamic Light view. You can see another room behind the HOM and, of course, also some void out there. This HOM is always visible and you have to check the cuts in order to fix it. Here (again), it is time to read Hourence's BSP tutorial, because he describes some tips about following the cuts.

The second picture shows the cuts (Zone/Portal view) + two selected subtractive brushes that create that flak platform. There was no problem in that area until I crated that ramp and added trim brushes. Even then no problem occured, but after some construction in other parts of the level (a few another trims) voila!... HOM. That's the Unreal magic, isn't it? :-) I decided to simplify the area, because there is that common edge of both aforementioned brushes (red x on the picture), that cuts the planes of brushes below. Especially that lowered walkway with the ramp and trims around. In order to simplify the situation I decided to add another brush (it is a paradox, but that is how it works sometimes).

On the second picture my camera is actually in the geometry, so you can see the faces (or their parts) that form the HOM. As you can see their colour is different – it's as though the engine decided that they belonged to another zone. Don't ask me why it is so, but after that decision, it is kinda logical that they are not drawn. :-) Notice also all of those small cuts on the floor (brush 2 floor has different tone because it is selected). There is a thin stripe of HOM on the right side of the ramp (near the red x). That was actually the hint that I needed to blame that common edge between brushes 1 and 2.

Serious HOM - beforeSerious HOM - cutsSerious HOM - after

As you can see in the top view of the third picture, my new brush avoids cutting that sloping stuff there and the cuts on the selected face look much cleaner. I did not beat the HOM completely, it only started to back off. :-) But I needed to re-order the brushes anyway, so I was optimistic for the future. First I changed order of brush 3 to "First". That brought back the faces of the trims and suppressed the HOM even more. Now the face/brush order was fine in theory, but there was a HOM strip on one trim face. That was the moment, I started to experiment with order and I ordered x and y to "Last" (in that order, because y creates that space above ramp and x is one big brush providing the trims on both sides). That sent my HOM into oblivion. It might not have (it also shows how moody the engine is sometimes) but then I'd have followed another cuts. But it did. :-)

Conclusion

As you can see, a HOM is an indication, not the problem itself. Try to identify its type and then fight it appropriately. And, of course, never rely only on geometry builds (you can for quick checks, but it is not good enough for serious use). You can be sure of the solution only after a full-build (you can omit path build for speed). You may be lucky and not encounter a HOM for a long time – it depends on your brushes. Always keep them as clean as possible. But when it comes, you have to know what to do. I have provided some examples, but full-blown HOM fixing is especially about experience. I don't have much of that, I'm just too contemplative and lucky. But when you fix one of them, you know what to do with another. Follow the cuts. ;-)

Good luck and may the HOMs stay out of your sight.

Credits/thanks

Hourences and Angel Mapper helped me a lot with BSP related stuff on forums, so they deserve first thanks. ;-)
IronMonkey provided nice language/style feedback while perfectly preserved my style (yeah, I know you'd welcome also another style, but no chance :-P).