Topic: Terrain - Bodenbeschaffenheit - Bäume wachsen

Teayo
Avatar
Topic Opener
Joined: 2015-03-09, 22:11 UTC+1.0
Posts: 269
OS: Windows 11 Home 64-bit
Version: 1.2.1~rc1
Ranking
Tribe Member
Location: Deutschland
Posted at: 2025-04-17, 23:54 UTC+2.0

Terrain Dokumentation EN
Unbewegliche Objekte Aktionen Dokumentation EN

Kann mir jemand die Modellierung des Baumwachstums auf einen definierten Bodentyp genauer erklären ?

Ich frage deshalb , weil es drei Parameter gibt die einen Einfluss haben , obwohl doch ein einziger Parameter reichen würde .

Technisch Name Bereich Bedeutung
temperature Temperatur ? Wie warm die Punkte sind
humidity Feuchtigkeit min 0 (dry / trocken)
max 1000 (wet / feucht)
Wie feucht die Punkte sind
fertility Fruchtbarkeit min 0 (infertile / unfruchtbar)
max 1000 (fertile / fruchtbar)
Wie fruchtbar die Punkte sind
pickiness Resistenz min 0 (not picky / nicht wählerisch)
max 100 (very picky / sehr wählerisch)
Wie gut der Baum mit nicht idealen Bedingungen umgehen kann
Diese Eigenschaft haben nur Bäume und nicht Böden !
Aktion Beschreibung
transform Ersetze Objekt durch Objekt mit Wahrscheinlichkeit
grow Ersetze Objekt durch Objekt mit Wahrscheinlichkeit in Abhängigkeit zur Gelände Beschaffenheit
remove Entferne Objekt mit Wahrscheinlichkeit
seed Erschaffe Objekt mit Wahrscheinlichkeit in Abhängigkeit zur Gelände Beschaffenheit innerhalb Radius ?
  • Welchen Wertebereich hat die Temperatur Eigenschaft ?
    • Negativ möglich ?
    • Ganzzahl 16-bit Integer Wertebereich ?
  • Die Eigenschaft pickiness bewertet vermutlich das Ergebnis aus den anderen drei Eigenschaften . Wie beeinflusst diese Eigenschaft die Baum Aktionen ?
    • Nur grow ?
    • Nur seed ?
    • Oder beides ?
  • Ein Punkt definiert insgesamt sechs Flächen . Ist meine Vermutung korrekt das die Eigenschaften aller sechs Geländetypen die der Punkt definiert zusammen gefügt werden ?
    • Also so Beispiel : ( 1 + 1 + 1 + 1 + 4 + 4 ) / 6 = 12 / 6 = 2 ?
  • Sind die Eigenschaften temperature , humidity und fertility gleichwertig oder haben Sie unterschiedliche Gewichtungen ?
    • Sieht die Wahrscheinlichkeitsformel für die grow und seed Aktion dann in etwa so aus ? :
      (
      (
      (
      ( temperature * constant_temperature_weight ) +
      ( humidity * constant_humidity_weight ) +
      ( fertility * constant_fertility_weight )
      ) / 3
      ) / pickiness
      ) / action_parameter_chance = chance_to_call_action

Fragen über Fragen ... Aber Danke im Voraus für Aufklärung dazu .


Top Quote
Nordfriese
Avatar
Joined: 2017-01-17, 18:07 UTC+1.0
Posts: 2128
OS: Debian Testing
Version: Latest master
Ranking
One Elder of Players
Location: 0x55555d3a34c0
Posted at: 2025-04-18, 09:42 UTC+2.0

Gültige Werte für fertility und humidity sind 0..1000 für Bäume und 1..999 für Terrains; für pickiness 0..99 [%]; temperature ≥ 0 mit Wertebereich int (also bis 2^15 - 1 = 32767 mindestens).

Die Formel für die Wachstumschance eines gegebenen Baums an einem gegebenem Field ist etwas kompliziert … :

    static constexpr int kPrecisionFactor = 1 << 26;
    constexpr double kHumidityWeight = 5.00086642549548;
    constexpr double kFertilityWeight = 5.292268046607387;
    constexpr double kTemperatureWeight = 0.6131300863608306;

    // Avoid division by 0
    assert(affinity.pickiness() < 100);
    const double sigma = std::floor(100.0 - affinity.pickiness());

    // Unlike real numbers, floating point multiplication/division is neither associative nor
    // commutative. Fortunately, execution order is well-defined by the C++ standard.
    const double result = exp(
       -(square((affinity.preferred_fertility() - terrain_fertility) / (kFertilityWeight * sigma)) +
         square((affinity.preferred_humidity() - terrain_humidity) / (kHumidityWeight * sigma)) +
         square((affinity.preferred_temperature() - terrain_temperature) /
                (kTemperatureWeight * sigma))) /
       2.0);

    return static_cast<unsigned int>(
       std::max(0.0, std::floor(result * static_cast<double>(TerrainAffinity::kPrecisionFactor))));

Dabei sind terrain_humidity, terrain_fertility und terrain_temperature die durchschnittlichen Parameter des betrachteten Fields, die sich berechnen, indem die Werte der 6 Terrains der 6 benachbarten Dreiecke aufsummiert und durch 6 geteilt werden.

Code siehe https://codeberg.org/wl/widelands/src/branch/master/src/logic/map_objects/terrain_affinity.cc

Edited: 2025-04-18, 09:47 UTC+2.0

Top Quote
Teayo
Avatar
Topic Opener
Joined: 2015-03-09, 22:11 UTC+1.0
Posts: 269
OS: Windows 11 Home 64-bit
Version: 1.2.1~rc1
Ranking
Tribe Member
Location: Deutschland
Posted at: 2025-04-19, 18:00 UTC+2.0

Und welchen Einfluss und auch welchen Wertebereich hat die Angabe des Parameters in der 'grow' und 'seed' Aktion mit :
* 70.31% seed sapling proximity Alder Also was würde bei 0% passieren, was bei 100%, was bei -50%, bei 200% (Falls Werte unter 0 und über 100 erlaubt) ?

Edited: 2025-04-19, 18:04 UTC+2.0

Top Quote
Nordfriese
Avatar
Joined: 2017-01-17, 18:07 UTC+1.0
Posts: 2128
OS: Debian Testing
Version: Latest master
Ranking
One Elder of Players
Location: 0x55555d3a34c0
Posted at: 2025-04-20, 11:41 UTC+2.0

Weder grow noch seed akzeptieren Parameter, um die Erfolgschance zu beeinflussen. Die Wachstumschance des Baums auf seinem Field ist gerade die Chance, mit der die grow- oder seed-Aktion erfolgreich durchgeführt wird.

Prozentzahlen müssen immer zwischen 0 und 100 liegen. Der Proximity-Faktor ist eine sehr indirekte Art festzulegen, wie groß der zufällige Radius sein kann, mit dem seed stattfindet.


Top Quote
Teayo
Avatar
Topic Opener
Joined: 2015-03-09, 22:11 UTC+1.0
Posts: 269
OS: Windows 11 Home 64-bit
Version: 1.2.1~rc1
Ranking
Tribe Member
Location: Deutschland
Posted at: 2025-04-20, 14:55 UTC+2.0

Gut ich fasse meinen Erkenntnis Gewinn nochmal zusammen :

Icon Parameter Name Anwendung Min Max Gewichtungsfaktor Beschreibung
temperature Temperatur Bäume
Gelände
.
0
1
kalt
32767
32766
heiß
0.6131300863608306 signed-16bit-integer
intern double float
humidity Feuchtigkeit Bäume
Gelände
.
0
1
trocken
1000
999
feucht
5.00086642549548
fertility Fruchtbarkeit Bäume
Gelände
.
0
1
unfruchtbar
1000
999
fruchtbar
5.292268046607387
pickiness Empfindlichkeit Bäume
.
0%
unempfindlich
99%
empfindlich
67108864 100% nicht erlaubt division durch Null
Empfindlichkeit / Toleranz gegenüber Abweichungen
zu präferierten Bedingungen
proximity Nähe Bäume
(Programm
Aktion 'seed')
0%
.
kein
Radius
100%
.
maximaler
Radius
Indirekte Beeinflussung Such-Radius
um Baum für geeignete Setzling Position

Ursprünglich hatte ich ja auch nur aus reiner neugierde nachgefragt. Danke für die Informationen. Vielleicht hilft diese Tabelle zukünftig auch anderen Interessierten.

Edited: 2025-04-20, 15:04 UTC+2.0

Top Quote