Tree Gen 1.27.0: Blatt-Cards aus einer Collection (Punkt 3)
"Leaf Card" kann jetzt eine COLLECTION sein: je Blattpunkt wird zufaellig eine Card gezogen (Pick Instance, seed-stabil). Damit legt der Nutzer 4-6 Diamond-Cards mit unterschiedlichen Atlas-UVs an und die Krone mischt sie. Rueckwaertskompatibel - ein einzelnes Objekt geht weiter, die Sammlung hat Vorrang. Umsetzung: Collection Info mit Separate Children (sonst kaeme die Sammlung als ein Klumpen an und Pick Instance haette nichts zum Auswaehlen), Geometry-Switch zwischen Einzel- und Sammlungspfad, Instanz-Index aus einem Random Value, dessen Obergrenze aus der TATSAECHLICHEN Anzahl kommt - eine feste Obergrenze wuerde bei weniger Cards Luecken erzeugen. Geometry Nodes kann einen leeren Collection-Zeiger nicht selbst pruefen, deshalb setzt make_leaves einen "Use Collection"-Schalter. Beweisfuehrung im Test: die Zufalls-Groesse wird ABGESCHALTET, dann kommt jede Groessenabweichung nur von der Card-Variante und die Anzahl verschiedener Face-Flaechen ist ein exakter Zaehler. Gemessen: Einzel-Card 2 Flaechen (ein Card-Paar), Sammlung mit 4 Cards 10 Flaechen - alle Varianten kommen vor. Gleicher Seed identisch, anderer Seed anders. Nebenbei: die Vorpruefung des Blattwerk-Operators war eine zusammengesetzte Bedingung, die bei gesetzter Sammlung ohne Einzel-Card auf None zugriff. Neu: tests/test_blatt_varianten.py. 20 Tests bestehen. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -352,6 +352,39 @@ Gras-, Blumen- und Farn-Bueschel. Der Kern ist die **Wind-UV**:
|
||||
|
||||
## Stylized Tree Generator
|
||||
|
||||
### Spielfertiger Stand-Baum (Faellsystem)
|
||||
|
||||
Knopf **Spielfertig exportieren** im Export-Panel: Stamm und `_Leaf`-Ebene
|
||||
werden zu **einem** Mesh mit **zwei Material-Slots** verschmolzen
|
||||
(Slot 0 = `M_Bark`, Slot 1 = `M_Foliage`). Die getrennten Objekte im Blend
|
||||
bleiben die Arbeitsebene — verschmolzen wird nur die Export-Kopie. Ursprung
|
||||
Bbox-Unterseite Mitte, FBX-Einstellungen wie in der Fels-Pipeline.
|
||||
|
||||
**Kugel-Normalen** (Haken `Kugel-Normalen auf Blaetter`, Standard an): alle
|
||||
Blatt-Normalen zeigen radial vom Kronen-Schwerpunkt nach aussen. Ohne das wirkt
|
||||
jede Card wie ein eigenes flaches Blech und die Krone flimmert im Licht. Der
|
||||
Schwerpunkt kommt **nur aus den Blatt-Faces** — der Stamm wuerde die Mitte nach
|
||||
unten ziehen und die Kugel verkippen.
|
||||
|
||||
> Bewusst direkt ueber `normals_split_custom_set` statt ueber den
|
||||
> Normal-Edit-Modifier: der muesste vor dem Export angewendet werden, und
|
||||
> angewendete Modifier plus Custom Normals ist genau die Kombination, bei der
|
||||
> der FBX-Export gerne flachbuegelt. Am **reimportierten** FBX gemessen:
|
||||
> mittlere Radialitaet **1.000**, 100 % der 510 Blatt-Loops ueber 0.8.
|
||||
> Gegenprobe Rinde 0.043.
|
||||
|
||||
**Card-Varianten:** `Card-Sammlung` nimmt eine Collection mit 4–6 Diamond-Cards
|
||||
unterschiedlicher Atlas-UVs; je Blattpunkt wird eine zufaellig gezogen
|
||||
(seed-stabil). Eine einzelne Card geht weiter — die Sammlung hat Vorrang.
|
||||
|
||||
Zwei Fallen beim Bauen:
|
||||
|
||||
- Ueber `bmesh.from_mesh` zusammenzufuegen haengt die Geometrie zwar an, wirft
|
||||
aber die **Material-Indizes** weg: danach lagen alle 748 Faces auf Index 0.
|
||||
Blenders `join` fuehrt die Slot-Listen zusammen und rechnet die Indizes um.
|
||||
- `join` loescht das zweite Objekt; jede gehaltene Referenz darauf ist danach
|
||||
tot. Die Aufraeumliste fuehrt deshalb **Namen** statt Objekte.
|
||||
|
||||
### Proportionen: gemessen, nicht geschaetzt
|
||||
|
||||
Drei Presets sahen falsch aus. Die Ursachen wurden gemessen bzw. belegt, nicht
|
||||
@@ -572,6 +605,8 @@ gefiltert `.\run_tests.ps1 -Filter panels`.
|
||||
|
||||
| Datei | prueft |
|
||||
|---|---|
|
||||
| `tests/test_baum_export.py` | Stand-Baum: ein Mesh, zwei Slots, Ursprung, **Kugel-Normalen im exportierten FBX** |
|
||||
| `tests/test_blatt_varianten.py` | Card-Sammlung: alle Varianten werden gezogen, seed-stabil, Einzelobjekt weiter moeglich |
|
||||
| `tests/test_proportionen.py` | Baum-Proportionen: Palmenkrone, Strauch-Breite, Setzling-Schlankheit, Branch Count 0 |
|
||||
| `tests/test_bruchstuecke.py` | Bruchstuecke: Volumen 100 % des Muttersteins, dichte Topologie, genau ein Erz-Stueck, Material-Slots, Ursprung, UCX je Teil |
|
||||
| `tests/test_schnellstart.py` | Schnellstart: jede Sorte liefert ohne Nacharbeit Geometrie + Slot, Erz-Sorte ueber der Dichte-Schwelle, Dissolve-Bereich streut je Stein |
|
||||
|
||||
Reference in New Issue
Block a user