code: public static void filterLowHangingWalkableObstacles(Context ctx, int walkableClimb, Heightfield solid) {
  
          ctx.startTimer("FILTER_LOW_OBSTACLES");
  
          int w = solid.width;
          int h = solid.height;
  
          for (int y = 0; y < h; ++y) {
              for (int x = 0; x < w; ++x) {
                  Span ps = null;
                  boolean previousWalkable = false;
                  int previousArea = RecastConstants.RC_NULL_AREA;
  
                  for (Span s = solid.spans[x + y * w]; s != null; ps = s, s = s.next) {
                      boolean walkable = s.area != RecastConstants.RC_NULL_AREA;
                      // If current span is not walkable, but there is walkable
                      // span just below it, mark the span above it walkable too.
                      if (!walkable && previousWalkable) {
                          if (Math.abs(s.smax - ps.smax) <= walkableClimb)
                              s.area = previousArea;
                      }
                      // Copy walkable flag so that it cannot propagate
                      // past multiple non-walkable objects.
                      previousWalkable = walkable;
                      previousArea = s.area;
                  }
              }
          }
  
          ctx.stopTimer("FILTER_LOW_OBSTACLES");
      }
docs: / @see rcHeightfield, rcConfig