# Fix Landscape Deformation at Distance in UEFN with Python

**URL:** <https://forums.unrealengine.com/t/fix-landscape-deformation-at-distance-in-uefn-with-python/2741215>\
**Category:** Programming & Scripting\
**Tags:** Python, tutorial, fortnite-creative, unreal-editor-for-fortnite, UEFN, Landscape, fortnite\
**Created:** [August 4, 2026, 4:40pm UTC](https://forums.unrealengine.com/t/fix-landscape-deformation-at-distance-in-uefn-with-python/2741215 "2026-08-04T16:40:44Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![milkc0de](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/milkc0de/32/1194876_2.png) [@milkc0de](https://forums.unrealengine.com/u/milkc0de)\
**Post date:** [August 4, 2026, 4:40pm UTC](https://forums.unrealengine.com/t/fix-landscape-deformation-at-distance-in-uefn-with-python/2741215/1 "2026-08-04T16:40:44Z")

</div>

[![](https://d3kjluh73b9h9o.cloudfront.net/original/4X/1/f/2/1f2d8f764fe8edfd88b5fe7a4d40896a8b1b26af.jpeg "Fix Landscape Deformation at Distance in UEFN with Python") ](https://www.youtube.com/watch?v=iOUIJXdQcZA)

UEFN does not currently expose the **Max LOD Level** property in the Landscape Details panel.

This can cause detailed Landscape shapes to become heavily simplified or deformed at a distance. However, the hidden `max_lod_level` property can be changed through UEFN Python editor scripting.

The video below shows a synchronized comparison using the same Landscape, camera path, and graphics settings.

- **Before:** `max_lod_level = -1`
- **After:** `max_lod_level = 0`

`-1` is the default automatic LOD behavior.  
`0` restricts the Landscape to LOD 0 at all distances.

## Python script

Select one or more Landscape actors in the Outliner, then run this script:

```python
import unreal

# ============================================================
# Force LOD 0 only on the selected Landscape actors.
#
# max_lod_level:
# -1 = Default automatic LOD behavior
# 0 = Force LOD 0 at all distances
# 1 = Allow up to LOD 1
# ============================================================

MAX_LOD_LEVEL = 0

def is_landscape_actor(actor):
    if actor is None:
        return False

    class_name = actor.get_class().get_name()

    return class_name in {
        "Landscape",
        "LandscapeProxy",
        "LandscapeStreamingProxy",
    }

def describe_actor(actor):
    return (
        f"{actor.get_actor_label()} "
        f"({actor.get_class().get_name()})"
    )

actor_subsystem = unreal.get_editor_subsystem(
    unreal.EditorActorSubsystem
)

selected_actors = list(
    actor_subsystem.get_selected_level_actors()
)

if not selected_actors:
    raise RuntimeError(
        "No actors are selected.\n"
        "Select one or more Landscape actors in the Outliner, "
        "then run the script again."
    )

invalid_actors = [
    actor
    for actor in selected_actors
    if not is_landscape_actor(actor)
]

if invalid_actors:
    invalid_actor_list = "\n".join(
        f" - {describe_actor(actor)}"
        for actor in invalid_actors
    )

    raise RuntimeError(
        "The selection contains non-Landscape actors.\n"
        "The operation was cancelled to prevent accidental changes.\n\n"
        f"{invalid_actor_list}"
    )

with unreal.ScopedEditorTransaction(
    "Set Selected Landscape Maximum LOD Level"
):
    for actor in selected_actors:
        actor.modify()

        old_value = actor.get_editor_property(
            "max_lod_level"
        )

        actor.set_editor_property(
            "max_lod_level",
            MAX_LOD_LEVEL,
        )

        actual_value = actor.get_editor_property(
            "max_lod_level"
        )

        unreal.log(
            "[SelectedLandscapeLOD] Success: "
            f"{describe_actor(actor)}: "
            f"max_lod_level {old_value} -> {actual_value}"
        )

unreal.log(
    "[SelectedLandscapeLOD] Completed. "
    "Press Ctrl+S to save or Ctrl+Z to undo."
)

```

To restore the default automatic LOD behavior, change:

```python
MAX_LOD_LEVEL = -1

```

## Notes

Forcing LOD 0 may increase rendering cost, particularly on large Landscapes. Performance should be tested on all target platforms.

I also tested the following hidden Landscape properties:

- `lod0_screen_size`
- `lod0_distribution_setting`
- `lod_distribution_setting`
- `lod_blend_range`

These properties produced `IllegalPropertyOverride` validation errors in my project, so they are intentionally not included in the script above.

In my test, `max_lod_level` did not appear in that validation error list.
