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:
+13
-3
@@ -29,7 +29,11 @@ card=bpy.data.objects.new("Diamon Plane", me); bpy.context.collection.objects.li
|
||||
|
||||
s=bpy.context.scene.tree_gen_settings
|
||||
s.preset='eiche'; s.art_name="Eiche"; s.variant=1
|
||||
s.leaf_card=card; s.leaf_size=0.22 # Dichte: Default verwenden
|
||||
# Groesse und Dichte aus den Defaults nehmen. Frueher stand hier fest
|
||||
# leaf_size=0.22 - der alte Blaettchen-Wert. Zusammen mit der neuen Dichte 170
|
||||
# ergab das genau die Kombination, die wir loswerden wollten: hunderte winziger
|
||||
# Cards (gemessen 2778 Blatt-Tris statt ~1000).
|
||||
s.leaf_card=card
|
||||
s.make_leaf=True; s.use_growth=False
|
||||
r=bpy.ops.object.treegen_create()
|
||||
names=sorted(o.name for o in bpy.context.scene.objects if o.type=='MESH')
|
||||
@@ -41,9 +45,15 @@ def tris(n):
|
||||
ob=bpy.context.scene.objects[n]
|
||||
return sum(len(p.vertices)-2 for p in ob.evaluated_get(dg).data.polygons)
|
||||
tt,tl=tris("Eiche_01"), tris("Eiche_01_Leaf")
|
||||
print("TRIS Stamm=%d Blatt=%d Summe=%d / 2500 %s (Dichte %.0f)" % (tt,tl,tt+tl,"OK" if tt+tl<=2500 else "UEBER", s.leaf_density))
|
||||
# Budget aus den Einstellungen holen, nicht fest verdrahten: es steht seit
|
||||
# ASSETS.md Teil 6 pro Wachstumsstufe (S1 800 / S2 1200 / S3+S4 4000) und wurde
|
||||
# von 2500 angehoben, weil bei ISM-Instanzen mit LOD-Kette nicht die Dreiecke
|
||||
# der Engpass sind, sondern Overdraw und Schatten der Cards.
|
||||
budget = s.leaf_budget
|
||||
print("TRIS Stamm=%d Blatt=%d Summe=%d / %d %s (Dichte %.0f)"
|
||||
% (tt,tl,tt+tl,budget,"OK" if tt+tl<=budget else "UEBER", s.leaf_density))
|
||||
if tl==0: fails.append("blattwerk_leer")
|
||||
if tt+tl>2500: fails.append("budget")
|
||||
if tt+tl>budget: fails.append("budget")
|
||||
# Ursprung deckungsgleich
|
||||
a=bpy.context.scene.objects["Eiche_01"]; b=bpy.context.scene.objects["Eiche_01_Leaf"]
|
||||
d=(a.location-b.location).length
|
||||
|
||||
Reference in New Issue
Block a user