Wie kann man die Spannungs-Dehnungs-Mechanik im Voxel-Terrain implementieren?

13

Ich bin dabei, eine Minecraft-ähnliche Welt zu entwickeln, in der das Gelände in Voxel unterteilt ist. Ich möchte jedoch auch, dass instabile Konfigurationen von Landschaften vorhersehbar zusammenbrechen. Zum Beispiel würde ein zu schwerer Überhang bei "hoch belasteten" Voxeln brechen und abbrechen , ebenso wie eine Säulenformation mit einer asymmetrisch erodierten Basis . Ich dachte darüber nach, jedem Voxel im Gelände ein Spannungsvektorfeld hinzuzufügen und folgendes zu tun (Pseudocode):

foreach voxel in terrain
    foreach neighbor in voxel.neighbor_voxels()
        if magnitude(voxel.stress - neighbor.stress) > stressThreshold
            detach_voxels(voxel, neighbor)

Das Problem ist jedoch, dass ich nicht weiß, wie ich diese individuellen Belastungen berechnen soll. Gibt es eine Art FEA-basierten Algorithmus, der auf Voxeldiskretisierungen spezialisiert ist und mit dem ich die Spannungen pro Voxel berechnen kann? Oder gehe ich das falsch an und gibt es einen anderen Weg, dies zu tun?

Silberklinge Damus
quelle

Antworten:

1

Sie können eine DFS-Suche für alle verbundenen Voxel in Betracht ziehen und das Voxel ermitteln, von dem das am meisten abhängige oder "verzweigte" Voxel ist. Und dann führen Sie Ihren netten kleinen Pseudocode aus. :)

MoustacheMoses
quelle