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 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
bl_info = {
|
||||
"name": "Stylized Rock Generator",
|
||||
"author": "D4rkst3r",
|
||||
"version": (2, 16, 0),
|
||||
"version": (2, 17, 0),
|
||||
"blender": (4, 2, 0),
|
||||
"location": "View3D > 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()
|
||||
|
||||
Reference in New Issue
Block a user