Tree Gen 1.31.0: LOD1-3 trugen die Standposition mit (aus UE gemeldet)
Fehler: _origin_bottom_center backt zuerst die Weltmatrix ins Mesh und wendet DANN die Zentrierung an - zurueck gibt es aber nur die Zentrierung. Den Stufen 1-3 wurde nur diese aufgedrueckt, ihre Weltmatrix blieb ungebacken. Ergebnis: sie landeten bei MINUS der Standposition. Gemeldet fuer einen Baum bei x = 18 m, dessen LOD1-3 bei x = -1894 cm sassen - exakt die Standposition, in Zentimetern wegen FBX_SCALE_ALL. Jetzt backt jede Stufe erst ihre EIGENE Weltmatrix, dann kommt die gemeinsame Zentrierung aus LOD0. Warum der Test das nicht gefunden hat: er baute den Baum am URSPRUNG. Dort ist minus null eben null. Der Baum steht jetzt bewusst bei (18, -7.5), und je Stufe wird die X/Y-Mitte im reimportierten FBX gemessen - an derselben Stelle wie die Radialitaets-Pruefung. Gegenprobe gemacht: mit zurueckgedrehtem Fix meldet der Test LOD1-3 bei -17.87/7.46, also exakt minus der Standposition, und faellt mit 6 Fehlern durch. Mit Fix liegen alle Stufen bei 0.000-0.135 um den Ursprung. Ausserdem Dichte 170 -> 150. Grund: mit der REALEN Diamond-Card (6 Tris, nicht die 2-Tri-Attrappe aus meinen Sweeps) landet die Eiche bei Dichte 170 auf 4206 Tris - 2778 Krone plus 1428 Stamm - und damit ueber dem 4000er-Budget aus ASSETS.md Teil 6. Die abgenommene Krone (2778) und das dokumentierte Budget (4000) sind also nicht gleichzeitig haltbar. 150 liegt im abgesegneten Sweetspot 130-170 und haelt das Budget mit 3816. Wenn der Look bei 170 wichtiger ist, muesste das Budget auf ~4300 - das ist eine Entscheidung der Spielseite. Nebenbei: test_leaves hatte leaf_size fest auf 0.22 stehen (alter Blaettchen-Wert) und pruefte gegen ein fest verdrahtetes 2500er-Budget. Beides kommt jetzt aus den Einstellungen. 23 Tests bestehen. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
bl_info = {
|
||||
"name": "Stylized Tree Generator",
|
||||
"author": "D4rkst3r",
|
||||
"version": (1, 30, 0),
|
||||
"version": (1, 31, 0),
|
||||
"blender": (4, 2, 0),
|
||||
"location": "View3D > Sidebar > Tree Gen",
|
||||
"description": "Parametrischer Baum-/Palmen-/Busch-Generator (Geometry Nodes) mit Wachstums-Stufen",
|
||||
@@ -1195,7 +1195,11 @@ LEAF_GROUP_NAME = "GN_TreeLeaves"
|
||||
# hingehoeren. Mit Bueschel-Atlanten liegen die Groessenordnungen bei
|
||||
# Size ~0.7 und Density ~90.
|
||||
LEAF_DEFAULTS = {
|
||||
"Density": 170.0, # Punkte pro m2 Zweigoberflaeche
|
||||
# 150 statt der zunaechst gemessenen 170: mit der REALEN Diamond-Card
|
||||
# (6 Tris, nicht 2) landet die Eiche bei 170 auf 4206 Tris und damit ueber
|
||||
# dem 4000er-Budget aus ASSETS.md Teil 6 - 2778 Krone plus 1428 Stamm.
|
||||
# 150 liegt im abgesegneten Sweetspot 130-170 und haelt das Budget (3816).
|
||||
"Density": 150.0, # Punkte pro m2 Zweigoberflaeche
|
||||
# DER Volumen-Hebel. Bei 0.02 trugen nur die aeussersten Zweigspitzen Laub -
|
||||
# die Krone hatte nur Kontur und war innen nackt. Bei 0.04 wachsen Bueschel
|
||||
# auch am mittleren Geaest und die Krone bekommt Tiefe. Am fertigen Baum in
|
||||
@@ -1861,7 +1865,7 @@ class TreeGenSettings(PropertyGroup):
|
||||
"damit mischt die Krone 4-6 Varianten statt einer"),
|
||||
)
|
||||
leaf_density: FloatProperty(
|
||||
name="Dichte", default=170.0, min=0.0, max=20000.0,
|
||||
name="Dichte", default=150.0, min=0.0, max=20000.0,
|
||||
description=("Cards pro m2 Zweigoberflaeche. Presets mit viel Geaest (Eiche) "
|
||||
"bekommen dadurch automatisch mehr Blaetter als schlanke. 150 haelt "
|
||||
"auch die Eiche im 2500-Tri-Budget; der Button meldet die Summe"),
|
||||
@@ -2147,13 +2151,24 @@ class TREEGEN_OT_export_game(Operator):
|
||||
% (merge.name, mitte.x, mitte.y, mitte.z))
|
||||
lods.append(merge)
|
||||
|
||||
# Ursprung aus LOD0 - Unreal platziert nach LOD0. Alle Stufen um
|
||||
# denselben Betrag verschieben, damit sie deckungsgleich bleiben.
|
||||
# Ursprung aus LOD0 - Unreal platziert nach LOD0. Alle Stufen
|
||||
# bekommen DIESELBE Zentrierung, damit sie deckungsgleich bleiben.
|
||||
#
|
||||
# FALLE: _origin_bottom_center backt zuerst die Weltmatrix ins
|
||||
# Mesh und wendet DANN die Zentrierung an - zurueck gibt es aber
|
||||
# nur die Zentrierung. Wer den Stufen 1-3 nur diese aufdrueckt,
|
||||
# laesst ihre Weltmatrix ungebacken: sie landen bei MINUS der
|
||||
# Standposition. Gemeldet aus UE fuer einen Baum bei x = 18 m,
|
||||
# dessen LOD1-3 bei x = -1894 cm sassen - exakt die
|
||||
# Standposition, in Zentimetern wegen FBX_SCALE_ALL.
|
||||
# Deshalb je Stufe erst die EIGENE Weltmatrix backen, dann die
|
||||
# gemeinsame Zentrierung.
|
||||
versatz = _origin_bottom_center(lods[0])
|
||||
for weitere in lods[1:]:
|
||||
weitere.data.transform(versatz)
|
||||
weitere.data.transform(weitere.matrix_world)
|
||||
weitere.matrix_basis = Matrix.Identity(4)
|
||||
weitere.matrix_parent_inverse = Matrix.Identity(4)
|
||||
weitere.data.transform(versatz)
|
||||
|
||||
_deselect(context)
|
||||
if s.generate_lods:
|
||||
|
||||
Reference in New Issue
Block a user