Rock Generator 2.7.0: Plattenstil nach Genshin-Referenz

Der User hat Genshin-Screenshots als Stilvorlage geschickt. Auswertung: die
Felsen dort bestehen aus WENIGEN GROSSEN, fast leeren Platten mit SCHMALEN
DUNKLEN FUGEN. Das Detail steckt in der Fuge, nicht in der Flaeche.

Meine Textur machte das Gegenteil - viele kleine Zellen mit breitem Verlauf ueber
die ganze Oberflaeche. Deshalb half weder TexScale noch die Zellgroesse: beide
haben nur am Symptom gedreht, waehrend das Muster grundsaetzlich zu dicht war.

Neue Regler:
- "Fugenbreite" (Default 0.05): Breite des Uebergangs Fuge -> Flaeche. Klein =
  harte Fuge und flache Platte. War vorher fest auf 0.32 = weicher Verlauf ueber
  die ganze Zelle ("Golfball").
- "Platten flach" (Default 1.0): 1 = Flaeche nahezu einfarbig, Kontrast wandert
  komplett in die Fuge.
- "Zellgroesse" heisst jetzt "Plattengroesse" (Default 0.7 statt 2.5) - kleiner
  = GROESSERE Platten. Der alte Name war irrefuehrend.
Grundton auf helles warmes Grau, AO-Staerke 1.0 -> 0.55 (weniger Unruhe).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-31 08:46:01 +02:00
co-authored by Claude Opus 4.8
parent d58bfe05e8
commit 1df70c9e50
6 changed files with 45 additions and 17 deletions
+34 -12
View File
@@ -1,7 +1,7 @@
bl_info = {
"name": "Stylized Rock Generator",
"author": "D4rkst3r",
"version": (2, 6, 0),
"version": (2, 7, 0),
"blender": (4, 2, 0),
"location": "View3D > Sidebar > Rock Gen",
"description": (
@@ -842,17 +842,29 @@ class RockGenSettings(PropertyGroup):
description="Cavity/AO multiplikativ ins Farbbild backen (EcoGame-Konvention)",
)
bake_ao_strength: FloatProperty(
name="AO-Staerke", default=1.0, min=0.0, max=1.0,
name="AO-Staerke", default=0.55, min=0.0, max=1.0,
description="0 = kein AO im Albedo, 1 = voll",
)
bake_base_color: FloatVectorProperty(
name="Grundfarbe", subtype='COLOR', size=4,
default=(0.52, 0.47, 0.40, 1.0), min=0.0, max=1.0,
default=(0.62, 0.60, 0.56, 1.0), min=0.0, max=1.0,
description="Grundton des Steins; Outline/Highlight werden davon abgeleitet",
)
bake_seam_width: FloatProperty(
name="Fugenbreite", default=0.05, min=0.01, max=0.5,
description=("Wie breit der Uebergang von der Fuge zur Plattenflaeche ist. "
"Klein = schmale harte Fuge und flache Platte (Genshin), "
"gross = weicher Verlauf ueber die ganze Zelle"),
)
bake_plate_flat: FloatProperty(
name="Platten flach", default=1.0, min=0.0, max=1.0,
description=("1 = Plattenflaeche nahezu einfarbig, Detail steckt nur in der "
"dunklen Fuge. 0 = klassischer Verlauf ueber die Zelle"),
)
bake_cell_scale: FloatProperty(
name="Zellgroesse", default=2.5, min=0.5, max=12.0,
description="Kleiner = groessere Zellen (weniger Bruchstuecke)",
name="Plattengroesse", default=0.7, min=0.3, max=12.0,
description=("Kleiner = GROESSERE Platten. Genshin-Referenz: nur wenige grosse "
"Platten pro Kachel, nicht viele kleine Zellen"),
)
# --- FBX-Export ---
@@ -1055,7 +1067,8 @@ class OBJECT_OT_export_rocks_fbx(Operator):
# Textur-Bake (nahtlos tileable via 4D-Torus-Projektion, fuer Triplanar in UE)
# ---------------------------------------------------------------------------
def _build_bake_material(base_color=(0.52, 0.47, 0.40), cell_scale=2.5):
def _build_bake_material(base_color=(0.52, 0.47, 0.40), cell_scale=2.5,
seam_width=0.32, plate_flat=0.0):
"""Baut ein prozedurales, nahtlos tileables Stylized-Rock-Material (Zell-Look).
Trick: Die 2D-UV wird als (cos u, sin u, cos v, sin v) auf einen Torus
@@ -1132,7 +1145,9 @@ def _build_bake_material(base_color=(0.52, 0.47, 0.40), cell_scale=2.5):
cell_fac = nodes.new("ShaderNodeMapRange")
links.new(vor_edge.outputs["Distance"], cell_fac.inputs["Value"])
cell_fac.inputs["From Min"].default_value = 0.0
cell_fac.inputs["From Max"].default_value = 0.32
# Fugenbreite: klein = schmale, harte Fuge und flache Platte (Genshin-Look),
# gross = breiter Verlauf ueber die ganze Zelle ("puffy", Golfball).
cell_fac.inputs["From Max"].default_value = seam_width
cell_fac.inputs["To Min"].default_value = 0.0
cell_fac.inputs["To Max"].default_value = 1.0
cell_fac.clamp = True
@@ -1154,12 +1169,15 @@ def _build_bake_material(base_color=(0.52, 0.47, 0.40), cell_scale=2.5):
# alle Toene aus base_color abgeleitet.
ramp = nodes.new("ShaderNodeValToRGB")
cr = ramp.color_ramp
# plate_flat 0 = klassischer Verlauf, 1 = Plattenflaeche nahezu einfarbig
# mit dunkler Fuge (Referenz Genshin: leere Flaeche, Detail nur in der Fuge).
f = max(0.0, min(1.0, plate_flat))
cr.elements[0].position = 0.0
cr.elements[0].color = _tone(0.12) # Riss / Outline
cr.elements[1].position = 0.85
cr.elements[1].color = _tone(1.22) # Zell-Highlight
mid = cr.elements.new(0.32)
mid.color = _tone(0.72) # Zell-Grundton
cr.elements[0].color = _tone(0.12 - 0.05 * f) # Fuge: dunkler bei flach
cr.elements[1].position = 0.85 - 0.6 * f # Plateau frueher erreicht
cr.elements[1].color = _tone(1.22 - 0.24 * f) # weniger Highlight
mid = cr.elements.new(max(0.04, 0.32 - 0.26 * f))
mid.color = _tone(0.72 + 0.22 * f) # Platte heller/gleichmaessiger
links.new(combined.outputs[0], ramp.inputs["Fac"])
# Roughness: an den Rissen etwas rauer
@@ -1262,6 +1280,8 @@ class OBJECT_OT_bake_rock_textures(Operator):
mat, sk = _build_bake_material(
base_color=tuple(settings.bake_base_color),
cell_scale=settings.bake_cell_scale,
seam_width=settings.bake_seam_width,
plate_flat=settings.bake_plate_flat,
)
# AO-Staerke ins Albedo (Fac 0 = aus, 1 = voll)
sk["ao_mix"].inputs["Fac"].default_value = (
@@ -1592,6 +1612,8 @@ class VIEW3D_PT_rock_generator(Panel):
box.prop(settings, "bake_resolution")
box.prop(settings, "bake_base_color")
box.prop(settings, "bake_cell_scale")
box.prop(settings, "bake_seam_width")
box.prop(settings, "bake_plate_flat")
row = box.row(align=True)
row.prop(settings, "bake_color", toggle=True)
row.prop(settings, "bake_normal", toggle=True)