From a2d46424ecb3617c5477e7d94c5c7fbb038c9e89 Mon Sep 17 00:00:00 2001 From: D4rkst3r Date: Mon, 3 Aug 2026 08:38:46 +0200 Subject: [PATCH] Rock Gen 2.17.0: Erz-Maske invertiert - Nuggets laufen auf A = 0 zu Entscheidung der Spielseite: die A-Semantik bleibt eingefroren (1.0 = kein Erz), der Master loest es ueber Erz = (1 - A) * ErzMenge mit ErzMenge als MI-Regler, Standard 0. Normale Stein-MIs ignorieren den Kanal damit vollstaendig, nur die Erz-MIs drehen ihn auf. Kein Re-Export des 25er-Sets noetig, keine Fallunterscheidung im Addon. Dafuer musste die Maske umgedreht werden: bisher lag das Nugget-ZENTRUM auf A = 1.0 - also auf demselben Wert wie "kein Erz". Unter der Master-Formel waere das Erz damit unsichtbar gewesen und der ganze RESTLICHE Stein haette als Erz gegolten. Jetzt laufen die Nuggets auf A = 0 zu. Gemessen: ohne Erz A 1.00..1.00 und (1-A) max 0.000 - ein normaler Stein zeigt im Master garantiert nichts. Mit Erz erreicht (1-A) 1.00, Abdeckung unveraendert 4/9/15 % bei Anteil 0.08/0.18/0.35. Die Erzstellen sitzen an denselben Punkten wie vorher, nur andersherum kodiert. Die Tests pruefen jetzt direkt gegen die Master-Formel statt gegen den Rohwert - am Rohkanal ist die Richtung zu leicht zu verwechseln. Panel zeigt bei aktivem Erz-Bake "A=Erz (0=Erz)" plus den Hinweis auf die Formel, damit das niemand versehentlich zurueckdreht. Nugget-Groesse bleibt wie entschieden ABSOLUT (Radius in Metern). ACHTUNG: Erz-Assets, die mit 2.15/2.16 exportiert wurden, tragen die alte Richtung und muessen neu exportiert werden. Steine ohne Erz-Bake sind nicht betroffen - deren A war und ist durchgehend 1.0. 17 Tests bestehen. Co-Authored-By: Claude Opus 4.8 --- README.md | 27 ++++++++++++++-- blender_manifest.toml | 2 +- dist/index.html | 6 ++-- dist/index.json | 8 ++--- dist/stylized_rock_generator-2.16.0.zip | Bin 32002 -> 0 bytes dist/stylized_rock_generator-2.17.0.zip | Bin 0 -> 32287 bytes stylized_rock_generator.py | 30 +++++++++++------ tests/test_bruchstuecke.py | 8 +++-- tests/test_erz.py | 41 ++++++++++++++++-------- 9 files changed, 86 insertions(+), 36 deletions(-) delete mode 100644 dist/stylized_rock_generator-2.16.0.zip create mode 100644 dist/stylized_rock_generator-2.17.0.zip diff --git a/README.md b/README.md index 69e1eb1..dd29698 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ Abgestimmt auf `A:\eco\EcoGame` (UE 5.8). Kurzfassung: | **R** | Cavity pur — 1 = offene Flaeche, 0 = tiefe Fuge (**ohne** Hoehen-Verlauf) | | **G** | Moos-/Schmutzmaske — 1 = hier waechst was (Oberseite + Fugennaehe + Noise) | | **B** | Hoehen-Verlauf — 0 = Unterseite, 1 = oben | - | **A** | Erz-Maske — 1 = Erz, 0 = kein Erz. Ohne Erz-Bake bleibt der Kanal auf 1.0 | + | **A** | Erz-Maske, **invertiert**: 1.0 = kein Erz, 0.0 = Erz. Ohne Erz-Bake bleibt der Kanal durchgehend auf 1.0 | Getrennt statt eingebacken: der erdige **Boden-Saum** am Stein-Fuss und die **Moosfarbe** werden pro Material-Instanz geregelt, nicht im Mesh festgelegt. @@ -127,6 +127,27 @@ die Material-Instanz in UE. Knopf: **Erzfels-Set erzeugen (S + M)** erzeugt Regler: `Erz-Anteil`, `Nugget-Groesse` (Radius in m), `Erz-Seed`. +**Richtung des A-Kanals — wichtig.** Die Nuggets laufen auf **A = 0** zu, nicht +auf 1. Der Master rechnet: + +``` +Erz = (1 - A) * ErzMenge +``` + +`ErzMenge` ist ein MI-Regler mit **Standard 0**. Damit ignorieren normale +Stein-MIs den A-Kanal vollstaendig, und nur die Erz-MIs drehen ihn auf. Ein +Stein ohne Erz-Bake behaelt seine durchgehende 1.0 und liefert `(1-A) = 0` — +deshalb musste das bestehende 25er-Set **nicht** neu exportiert werden. + +Andersherum gebacken waere das Erz unsichtbar und der ganze *restliche* Stein +wuerde als Erz gelesen. `tests/test_erz.py` prueft deshalb direkt gegen diese +Formel und nicht gegen den Rohwert. + +Die **Nugget-Groesse bleibt absolut** (Radius in Metern): ein kleiner Brocken +bekommt weniger, dafuer proportional groessere Einschluesse. Das ist physikalisch +richtig, und das Spiel skaliert die Meshes per ScaleMin/Max ohnehin zufaellig - +eine groessenrelative Optik waere dadurch sowieso wieder zerlegt. + Nuggets statt Rauschen: gestreute Zentren mit weichem Abfall. Ein Noise-Feld gaebe wolkige Schlieren ueber den ganzen Stein, Erz sitzt aber in abgegrenzten Einschluessen. Die Zentren bevorzugen Fugen — Adern folgen Rissen, und das @@ -155,8 +176,8 @@ Material-Slots** wie der Mutterstein (die UE-Skripte mappen darueber) und beim Export eine eigene `UCX_`-Huelle. **Punkt 4a:** mit `Ein Stueck mit Erz` heisst ein zufaelliges Teil -`_Piece_Erz` und traegt Erz-Adern im A-Kanal. Alle anderen Teile behalten -A = 1.0. Ob das Erz-Stueck gespawnt wird, entscheidet die Loot-Logik im Spiel. +`_Piece_Erz` und traegt Erz-Adern im A-Kanal (Richtung 0). Alle anderen +Teile behalten durchgehend A = 1.0 und sind damit fuer den Master erzfrei. Ob das Erz-Stueck gespawnt wird, entscheidet die Loot-Logik im Spiel. **Wie die Bruchkanten zusammenpassen:** Voronoi ueber Halbraeume. Fuer jedes andere Zentrum wird an der Mittelsenkrechten geschnitten und die abgewandte diff --git a/blender_manifest.toml b/blender_manifest.toml index 4602900..c32a869 100644 --- a/blender_manifest.toml +++ b/blender_manifest.toml @@ -1,7 +1,7 @@ schema_version = "1.0.0" id = "stylized_rock_generator" -version = "2.16.0" +version = "2.17.0" name = "Stylized Rock Generator" tagline = "Batch-Generator fuer stylized Rocks mit UE5-Export" maintainer = "D4rkst3r" diff --git a/dist/index.html b/dist/index.html index f514219..929d951 100644 --- a/dist/index.html +++ b/dist/index.html @@ -40,14 +40,14 @@ 4.9KB - stylized_rock_generator-2.16.0 + stylized_rock_generator-2.17.0 Stylized Rock Generator Batch-Generator fuer stylized Rocks mit UE5-Export link 4.2.0 - ~ all all - 31.3KB + 31.5KB stylized_tree_generator-1.25.0 @@ -61,6 +61,6 @@ -

Built 2026-08-03, 06:23

+

Built 2026-08-03, 06:38

diff --git a/dist/index.json b/dist/index.json index 0514d69..8083681 100644 --- a/dist/index.json +++ b/dist/index.json @@ -57,7 +57,7 @@ "id": "stylized_rock_generator", "name": "Stylized Rock Generator", "tagline": "Batch-Generator fuer stylized Rocks mit UE5-Export", - "version": "2.16.0", + "version": "2.17.0", "type": "add-on", "maintainer": "D4rkst3r", "license": [ @@ -73,9 +73,9 @@ "Mesh", "Modeling" ], - "archive_url": "./stylized_rock_generator-2.16.0.zip", - "archive_size": 32002, - "archive_hash": "sha256:cb9cb1d36073da86d67d5997b9266a7d3192587591995a0fd59f6fa12f57b3e1" + "archive_url": "./stylized_rock_generator-2.17.0.zip", + "archive_size": 32287, + "archive_hash": "sha256:5d6a1616822ac74059ca82a07c3b42976efb37b211b523cafdbb1864de3118f6" }, { "schema_version": "1.0.0", diff --git a/dist/stylized_rock_generator-2.16.0.zip b/dist/stylized_rock_generator-2.16.0.zip deleted file mode 100644 index fb7240264a03c13620bdb4f0224269131b0396e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32002 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 J{eLb%{{wmkv4Q{q diff --git a/dist/stylized_rock_generator-2.17.0.zip b/dist/stylized_rock_generator-2.17.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..f3bf76d3fbe550786f9b8cf2fadda29957b5b89b GIT binary patch literal 32287 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 Sidebar > Rock Gen", "description": ( @@ -659,10 +659,18 @@ def _bake_vertex_cavity(context, obj, settings): n = 1.0 - mnoise + mnoise * vnoise[vi] g = max(0.0, min(1.0, base * n * moss * 1.6)) - # A: Erz-Maske. Ohne Erz bleibt der Kanal auf 1.0 - so wie im - # eingefrorenen Layout v2 festgelegt und wie das bestehende - # 25er-Set es bereits traegt. - a = 1.0 if ore_a is None else ore_a[vi] + # A: Erz-Maske, INVERTIERT geschrieben - 1.0 = kein Erz, 0.0 = Erz. + # + # Der Master rechnet `(1 - A) * ErzMenge`, wobei ErzMenge ein + # MI-Regler mit Standard 0 ist. Damit ignorieren normale Stein-MIs + # den Kanal vollstaendig, und nur die Erz-MIs drehen ihn auf. Ein + # Stein ohne Erz-Bake behaelt seine 1.0 und bleibt unveraendert - + # deshalb muss das bestehende 25er-Set nicht neu exportiert werden. + # + # Wichtig: die Nuggets muessen deshalb Richtung 0 laufen, nicht + # Richtung 1. Andersherum waere das Erz unsichtbar und der ganze + # RESTLICHE Stein wuerde als Erz gelesen. + a = 1.0 if ore_a is None else 1.0 - ore_a[vi] data[li].color = (r, g, b, a) @@ -989,9 +997,11 @@ class RockGenSettings(PropertyGroup): # --- Erz (A-Kanal) --- bake_ore: BoolProperty( name="Erz-Maske (A-Kanal)", default=False, - description=("Schreibt Erz-Nuggets in den A-Kanal. EIN neutrales Set fuer " - "ALLE Erzsorten - welches Erz es ist (Tint + Gluehen), " - "entscheidet die Material-Instanz in UE. Aus = A bleibt 1.0"), + description=("Schreibt Erz-Nuggets in den A-Kanal, und zwar Richtung 0: " + "1.0 = kein Erz, 0.0 = Erz. Der Master rechnet " + "(1 - A) x ErzMenge, ErzMenge ist ein MI-Regler mit " + "Standard 0 - normale Stein-MIs ignorieren den Kanal damit " + "komplett. EIN neutrales Set fuer ALLE Erzsorten"), ) ore_amount: FloatProperty( name="Erz-Anteil", default=0.18, min=0.0, max=1.0, @@ -2583,8 +2593,10 @@ class VIEW3D_PT_rock_vcol(_RockSub): box.operator("rockgen.fracture", icon='MOD_BUILD') col.label(text="R=Cavity G=%s B=Hoehe A=%s" % ("Teil-Maske" if s.part_mask_from_shells else "Moos", - "Erz" if s.bake_ore else "1.0"), + "Erz (0=Erz)" if s.bake_ore else "1.0"), icon='INFO') + if s.bake_ore: + col.label(text="Master rechnet (1-A) x ErzMenge", icon='NODE_MATERIAL') # Nicht in der ausgegrauten Spalte: der Knopf arbeitet auf der Auswahl # und ist auch dann sinnvoll, wenn beim Erzeugen nicht gebacken wird. layout.separator() diff --git a/tests/test_bruchstuecke.py b/tests/test_bruchstuecke.py index 5000a63..d47605d 100644 --- a/tests/test_bruchstuecke.py +++ b/tests/test_bruchstuecke.py @@ -110,9 +110,11 @@ for anzahl in (2, 3, 4): if lay is None: fails.append("%s: kein Vertex-Layout v2" % ob.name) elif ob.name.endswith("_Piece_Erz"): - if max(a) < 0.9 or min(a) > 0.01: - fails.append("%s: traegt keine Erz-Maske (A %.2f..%.2f)" - % (ob.name, min(a), max(a))) + # Der Master rechnet (1 - A): Nuggets muessen auf A = 0 zulaufen. + erz = [1.0 - x for x in a] + if max(erz) < 0.9 or min(erz) > 0.01: + fails.append("%s: traegt keine Erz-Maske ((1-A) %.2f..%.2f)" + % (ob.name, min(erz), max(erz))) else: if min(a) < 0.999: fails.append("%s: A ist nicht 1.0 (min %.2f) - nur das " diff --git a/tests/test_erz.py b/tests/test_erz.py index 11132a6..15e02f9 100644 --- a/tests/test_erz.py +++ b/tests/test_erz.py @@ -3,6 +3,10 @@ Kernaussagen, die hier festgenagelt werden: * EIN neutrales Set - die A-Maske sagt nur WO Erz sitzt, nicht welches. * Ohne Erz bleibt A auf 1.0 (Layout v2, wie das bestehende 25er-Set). +* A wird INVERTIERT gebacken: 1.0 = kein Erz, 0.0 = Erz. Der Master rechnet + `(1 - A) * ErzMenge` mit ErzMenge als MI-Regler (Standard 0) - normale + Stein-MIs ignorieren den Kanal damit komplett. Geprueft wird deshalb direkt + gegen diese Formel und nicht gegen den Rohwert. * Die Maske ueberlebt den FBX-Roundtrip. * Die Aufloesung der Maske haengt an der Vertex-Dichte - deshalb erzeugt das Erz-Set dicht. Bei ~150 Verts waren die Nugget-Zentren jeder dritte Vertex @@ -49,28 +53,37 @@ def einer(**kw): return ob, a, tris -# --- 1) Ohne Erz bleibt A auf 1.0 ---------------------------------------- +def erz_aus_a(a): + """Was der Master sieht: (1 - A). 0 = kein Erz, 1 = volles Erz.""" + return [1.0 - x for x in a] + + +# --- 1) Ohne Erz sieht der Master NICHTS --------------------------------- _, a, _ = einer(bake_ore=False, subsurf_levels=4) if min(a) < 0.999: fails.append("Ohne Erz ist A nicht 1.0 (min %.3f) - das bricht das " "eingefrorene Layout v2 und das bestehende 25er-Set" % min(a)) +if max(erz_aus_a(a)) > 0.001: + fails.append("Ohne Erz liefert (1-A) bis %.3f - ein normaler Stein wuerde " + "im Master Erz zeigen" % max(erz_aus_a(a))) # --- 2) Mit Erz: Maske vorhanden, Anteil steigt monoton ------------------- -print("%-24s %7s %7s %9s %7s" % ("Variante", "A min", "A max", "A>0.5", "Tris")) +print("%-24s %7s %7s %9s %7s" % ("Variante", "A min", "A max", "Erz-Anteil", "Tris")) anteile = [] for amt in (0.08, 0.18, 0.35): ob, a, tris = einer(bake_ore=True, ore_amount=amt, ore_nugget_size=0.10, subsurf_levels=5, decimate_ratio_1=0.40, decimate_ratio_2=0.80) - anteil = sum(1 for x in a if x > 0.5) / len(a) + erz = erz_aus_a(a) + anteil = sum(1 for x in erz if x > 0.5) / len(erz) anteile.append(anteil) print("%-24s %7.2f %7.2f %8.0f%% %7d" % ("Erz-Anteil %.2f" % amt, min(a), max(a), 100 * anteil, tris)) - if max(a) < 0.9: - fails.append("Erz-Anteil %.2f: A erreicht nur %.2f - keine Nuggets" - % (amt, max(a))) - if min(a) > 0.01: - fails.append("Erz-Anteil %.2f: A faellt nie auf 0 - der ganze Stein " + if max(erz) < 0.9: + fails.append("Erz-Anteil %.2f: (1-A) erreicht nur %.2f - die Nuggets " + "laufen nicht auf A=0 zu" % (amt, max(erz))) + if min(erz) > 0.01: + fails.append("Erz-Anteil %.2f: (1-A) faellt nie auf 0 - der ganze Stein " "waere Erz" % amt) if not (anteile[0] < anteile[1] < anteile[2]): fails.append("Erz-Anteil wirkt nicht monoton: %s" @@ -124,8 +137,9 @@ for ob in bpy.context.scene.objects: fails.append("%s hat nur %d Verts - zu grob fuer eine Nugget-Maske" % (ob.name, len(ob.data.vertices))) a = [c.color[3] for c in ob.data.color_attributes["Cavity"].data] - if max(a) < 0.9: - fails.append("%s traegt keine Erz-Maske (A max %.2f)" % (ob.name, max(a))) + if max(erz_aus_a(a)) < 0.9: + fails.append("%s traegt keine Erz-Maske ((1-A) max %.2f)" + % (ob.name, max(erz_aus_a(a)))) s_hoch = max(v for k, v in hoehen.items() if "_S_" in k) m_hoch = min(v for k, v in hoehen.items() if "_M_" in k) @@ -150,12 +164,13 @@ else: ob = [o for o in bpy.context.scene.objects if o.type == 'MESH' and not o.name.startswith("UCX_")][0] a = [c.color[3] for c in ob.data.color_attributes[0].data] - anteil = sum(1 for x in a if x > 0.5) / len(a) + erz = erz_aus_a(a) + anteil = sum(1 for x in erz if x > 0.5) / len(erz) print("Nach FBX (%s): A %.2f..%.2f, Erz auf %.0f%%" % (dateien[0], min(a), max(a), 100 * anteil)) - if max(a) < 0.9 or min(a) > 0.01: + if max(erz) < 0.9 or min(erz) > 0.01: fails.append("Erz-Maske ueberlebt den FBX-Roundtrip nicht " - "(A %.2f..%.2f)" % (min(a), max(a))) + "((1-A) %.2f..%.2f)" % (min(erz), max(erz))) print("") if fails: