To make it short, i’d try this - which is a lod system by the way. Create an empty, add to that empty N objects, each of them representing the same object at different level of detail.
Name the childrens 0something, 1something, 2something, Nsomething, where a lower N represents a more detailed object.
Then you add a “Always”, repeated with some frequency, that executes the “update” method on a script like this:
import bge, math
def cacheLodData(node):#sorts the children and cache the list in the node
lods = sorted(node.children, key=lambda e: e.name)
node["levels"] = lods
node["size"] = len(lods)
node = controller.owner
levels = node.get("levels")
if levels == None: levels = cacheLodData(node)
lodSize = node["size"]
player = bge.logic.getCurrentScene().objects[NAME_OF_THE_PLAYER_OBJECT]
distance = node.getDistanceTo(player)#get the distance from the player
thr = int(math.sqrt(distance / lodSize))#use a quadratic to choose the lod index
thr = min(lodSize-1, thr)#remove if you want the object to disappear when far away
for i in range(0, lodSize): levels[i].visible = (i == thr)#hide/show the selected layer
You create a group with the node and its lod children, then you create as many links to that group as you want and you should have your forest. It should work, in theory, I haven’t had the time to test it properly though.