@Override
        public HashMap<String, UpdatedTerrainPatch> call() throws Exception {

            HashMap<String, UpdatedTerrainPatch> updated = new HashMap<>();
            
            for (TerrainQuad terrainQuad : terrains) {
                // go through each patch and calculate its LOD based on camera distance
                terrainQuad.calculateLod(camLocations, updated, lodCalculator); // 'updated' gets populated here
            }
            
            for (TerrainQuad terrainQuad : terrains) {
                // then calculate the neighbour LOD values for seaming
                terrainQuad.findNeighboursLod(updated);
            }
            
            for (TerrainQuad terrainQuad : terrains) {
                // check neighbour quads that need their edges seamed
                terrainQuad.fixEdges(updated);
            }
            
            for (TerrainQuad terrainQuad : terrains) {
                // perform the edge seaming, if it requires it
                terrainQuad.reIndexPages(updated, lodCalculator.usesVariableLod());
            }
            
            //setUpdateQuadLODs(updated); // set back to main ogl thread
            lodCalcRunning.set(false);
            
            return updated;
        }
Overrides the parent UpdateLOD runnable to process
multiple terrains.
jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/MultiTerrainLodControl.java