Uploaded image for project: 'Minecraft: Java Edition'
  1. Minecraft: Java Edition
  2. MC-34751

Backface culling should not be used improperly

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Won't Fix
    • None
    • Minecraft 13w41a, Minecraft 13w41b, Minecraft 13w42a, Minecraft 1.7, Minecraft 1.7.1, Minecraft 1.7.2
    • All
    • Unconfirmed

      When stained glass was introduced, it did not have backface culling, and ice and portals also had backface culling removed. However, later this was "fixed" because of MC-34649, the result being to add backface culling to EVERY block, including water. Water is now harder to see where it is, along with not being able to see the surface of the water, making it look like you're in a waterworld.

      Some of this issue is user preference, but the side that doesn't like backface culling on blocks like glass and ice not only is an aesthetic one, but also one of a visibility issue that cannot be fixed, unlike many of the issues that people who like backface culling find with the absence of it.

      Backface culling will make large glass surfaces hard to see exactly where glass is when viewed from 1 direction (see 1a-3a and compare with 1b-3b). With backface culling enabled, you can only see 1 or 2 dimensions of a shape (depending on your viewing angle) and even then, this can be deceiving (compare 4a to 4b)

      Partial transparency is also a nice feature. You could say "normal glass doesn't need it" because there is stained glass, however this isn't true because even normal glass has a small amount of color, based on how it was formed (such as density) and from which angle it is being viewed from. Partial transparency can also be used to simulate glare, scratches, smudges, dirt, imperfections, cracks, etc. It can allow artists to add detail that is not as much in the way as opaque pixels, and this is a way to make glass that has backfaces enabled more pleasant. What I'm saying is: normal glass should have partial transparency support. Why not allow it if there are no issues with it now and stained glass/ice have it, wasn't the issue they fixed the only reason glass didn't support it in the first place?

      When stained glass was originally added, it also had a transparency issue that would not allow for you to use textures with below 50% opacity properly. The faces of the blocks blended together as well, so it was more opaque than the texture itself. Some would say backface culling fixed this, however there is no issue now, because now we could lower the opacity of the texture to compensate for this. It could be fixed in Minecraft by inversely blending the partially transparent textures before mapping them, that way when they blend on one object, the blending is the proper opacity.

      Z-fighting is also not a reason to backface cull. Z-fighting a large problem in Minecraft and it needs to be approached at the source. Whether it is fixed through block logic, OpenGL functions, raytracing, or just changing how certain textures are placed/used, it needs to be dealt with.

      Some people like water with backface culling because it makes flowing water on the side of most blocks invisible, but this can be fixed instead by making water sides invisible when touching solid blocks. Additionally I'm sure that this could also include glass, or even have waterfalls differ from inner water blocks in bodies of water.

      Backface culling is meant to not render faces that you don't see. That is how it should be used. If you can potentially see the face, then backface culling should not be applied, otherwise the result is ugly and weird, as the texture clearly differs based on your position relative to the object. It is true that having backfaces makes it a bit harder to see through in smaller blocks, but this can be remedied with cleaner textures, especially if partial transparency can be used. On large structures having backfaces is not much of a clarity issue, but without it you may need to walk around the structure to see where it stands.

      Possible solution that allows for artist's choice of backface culling or not in their packs:

      The .mcmeta file:

      {
        "texture": {
          "backfaces": true
        }
      }
      

      The only problem with this is that derivative textures, like the beacon glass, would either take the attribute from standard glass or not be changed at all.

      another possible solution is the creation of a new .json file, maybe "backfaces.json":

      {
        "backfaces": {
          "glass":false,
          "stained_glass":true,
          "beacon":true,
          "torch":true,
          "redstone_torch":true,
          "cactus":true
        }
      }
      

      That would have less issues with derivative textures, and might also allow for entities (like the ender crystal) to have backface culling removed as well. The reason things like torches and cacti are on that list is because their faces can be larger than the rectangular prism they create before they intersect, meaning that you can see where the face should be but isn't because it is culled. This is very noticeable when looking at the top of the default redstone torch (while fairly close) and walking around it.

        1. regular_vs_stained.png
          regular_vs_stained.png
          172 kB
        2. 2013-10-14_18.31.50.png
          2013-10-14_18.31.50.png
          200 kB
        3. 1a.png
          1a.png
          105 kB
        4. 1b.png
          1b.png
          139 kB
        5. 2a.png
          2a.png
          133 kB
        6. 2b.png
          2b.png
          156 kB
        7. 3a.png
          3a.png
          196 kB
        8. 3b.png
          3b.png
          265 kB
        9. 4a.png
          4a.png
          397 kB
        10. 4b.png
          4b.png
          417 kB
        11. underwater_1.6.4.png
          underwater_1.6.4.png
          413 kB
        12. underwater_1.7.2.png
          underwater_1.7.2.png
          342 kB

            TheMoogle Mog (Ryan Holtz)
            insomniac_lemon insomniac_lemon
            Votes:
            29 Vote for this issue
            Watchers:
            6 Start watching this issue

              Created:
              Updated:
              Resolved: