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
+6
View File
@@ -34,6 +34,12 @@ Abgestimmt auf `A:\eco\EcoGame` (UE 5.8). Kurzfassung:
- **AO/Cavity wird ins Albedo multipliziert** (Option „AO ins Albedo einrechnen", - **AO/Cavity wird ins Albedo multipliziert** (Option „AO ins Albedo einrechnen",
Staerke regelbar). Dunkle Ritzen und helle Platten stecken im Farbbild — das Staerke regelbar). Dunkle Ritzen und helle Platten stecken im Farbbild — das
traegt den Stylized-Look. Separate Rough-/AO-Paesse sind Default **aus**. traegt den Stylized-Look. Separate Rough-/AO-Paesse sind Default **aus**.
- **Plattenstil (Genshin-Referenz):** Die Textur besteht aus **wenigen grossen,
fast leeren Platten** mit **schmalen dunklen Fugen** — das Detail steckt in der
Fuge, nicht in der Flaeche. Regler: `Plattengroesse` (kleiner = groessere
Platten), `Fugenbreite` (klein = harte Fuge, flache Platte), `Platten flach`
(1 = Flaeche nahezu einfarbig). Ein dichtes Zellmuster ueber die ganze
Oberflaeche erschlaegt die Form und passt NICHT zu diesem Look.
- 1024 px reicht fuer stylized Formen. - 1024 px reicht fuer stylized Formen.
- Tileable (4D-Torus) passt zum triplanar mappenden Master-Material. - Tileable (4D-Torus) passt zum triplanar mappenden Master-Material.
+1 -1
View File
@@ -1,7 +1,7 @@
schema_version = "1.0.0" schema_version = "1.0.0"
id = "stylized_rock_generator" id = "stylized_rock_generator"
version = "2.6.0" version = "2.7.0"
name = "Stylized Rock Generator" name = "Stylized Rock Generator"
tagline = "Batch-Generator fuer stylized Rocks mit UE5-Export" tagline = "Batch-Generator fuer stylized Rocks mit UE5-Export"
maintainer = "D4rkst3r" maintainer = "D4rkst3r"
+4 -4
View File
@@ -7,7 +7,7 @@
"id": "stylized_rock_generator", "id": "stylized_rock_generator",
"name": "Stylized Rock Generator", "name": "Stylized Rock Generator",
"tagline": "Batch-Generator fuer stylized Rocks mit UE5-Export", "tagline": "Batch-Generator fuer stylized Rocks mit UE5-Export",
"version": "2.6.0", "version": "2.7.0",
"type": "add-on", "type": "add-on",
"maintainer": "D4rkst3r", "maintainer": "D4rkst3r",
"license": [ "license": [
@@ -23,9 +23,9 @@
"Mesh", "Mesh",
"Modeling" "Modeling"
], ],
"archive_url": "./stylized_rock_generator-2.6.0.zip", "archive_url": "./stylized_rock_generator-2.7.0.zip",
"archive_size": 17621, "archive_size": 18091,
"archive_hash": "sha256:f20343bd1aae3c03585e7621816b8934719e8855d7d4c411a0973df3d21ac397" "archive_hash": "sha256:2a3b20b6a915271e10b5246b77fc89361cab3dab2ead032aff4e4cd3526ccf33"
}, },
{ {
"schema_version": "1.0.0", "schema_version": "1.0.0",
Binary file not shown.
Binary file not shown.
+34 -12
View File
@@ -1,7 +1,7 @@
bl_info = { bl_info = {
"name": "Stylized Rock Generator", "name": "Stylized Rock Generator",
"author": "D4rkst3r", "author": "D4rkst3r",
"version": (2, 6, 0), "version": (2, 7, 0),
"blender": (4, 2, 0), "blender": (4, 2, 0),
"location": "View3D > Sidebar > Rock Gen", "location": "View3D > Sidebar > Rock Gen",
"description": ( "description": (
@@ -842,17 +842,29 @@ class RockGenSettings(PropertyGroup):
description="Cavity/AO multiplikativ ins Farbbild backen (EcoGame-Konvention)", description="Cavity/AO multiplikativ ins Farbbild backen (EcoGame-Konvention)",
) )
bake_ao_strength: FloatProperty( 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", description="0 = kein AO im Albedo, 1 = voll",
) )
bake_base_color: FloatVectorProperty( bake_base_color: FloatVectorProperty(
name="Grundfarbe", subtype='COLOR', size=4, 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", 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( bake_cell_scale: FloatProperty(
name="Zellgroesse", default=2.5, min=0.5, max=12.0, name="Plattengroesse", default=0.7, min=0.3, max=12.0,
description="Kleiner = groessere Zellen (weniger Bruchstuecke)", description=("Kleiner = GROESSERE Platten. Genshin-Referenz: nur wenige grosse "
"Platten pro Kachel, nicht viele kleine Zellen"),
) )
# --- FBX-Export --- # --- 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) # 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). """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 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") cell_fac = nodes.new("ShaderNodeMapRange")
links.new(vor_edge.outputs["Distance"], cell_fac.inputs["Value"]) links.new(vor_edge.outputs["Distance"], cell_fac.inputs["Value"])
cell_fac.inputs["From Min"].default_value = 0.0 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 Min"].default_value = 0.0
cell_fac.inputs["To Max"].default_value = 1.0 cell_fac.inputs["To Max"].default_value = 1.0
cell_fac.clamp = True 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. # alle Toene aus base_color abgeleitet.
ramp = nodes.new("ShaderNodeValToRGB") ramp = nodes.new("ShaderNodeValToRGB")
cr = ramp.color_ramp 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].position = 0.0
cr.elements[0].color = _tone(0.12) # Riss / Outline cr.elements[0].color = _tone(0.12 - 0.05 * f) # Fuge: dunkler bei flach
cr.elements[1].position = 0.85 cr.elements[1].position = 0.85 - 0.6 * f # Plateau frueher erreicht
cr.elements[1].color = _tone(1.22) # Zell-Highlight cr.elements[1].color = _tone(1.22 - 0.24 * f) # weniger Highlight
mid = cr.elements.new(0.32) mid = cr.elements.new(max(0.04, 0.32 - 0.26 * f))
mid.color = _tone(0.72) # Zell-Grundton mid.color = _tone(0.72 + 0.22 * f) # Platte heller/gleichmaessiger
links.new(combined.outputs[0], ramp.inputs["Fac"]) links.new(combined.outputs[0], ramp.inputs["Fac"])
# Roughness: an den Rissen etwas rauer # Roughness: an den Rissen etwas rauer
@@ -1262,6 +1280,8 @@ class OBJECT_OT_bake_rock_textures(Operator):
mat, sk = _build_bake_material( mat, sk = _build_bake_material(
base_color=tuple(settings.bake_base_color), base_color=tuple(settings.bake_base_color),
cell_scale=settings.bake_cell_scale, 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) # AO-Staerke ins Albedo (Fac 0 = aus, 1 = voll)
sk["ao_mix"].inputs["Fac"].default_value = ( 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_resolution")
box.prop(settings, "bake_base_color") box.prop(settings, "bake_base_color")
box.prop(settings, "bake_cell_scale") box.prop(settings, "bake_cell_scale")
box.prop(settings, "bake_seam_width")
box.prop(settings, "bake_plate_flat")
row = box.row(align=True) row = box.row(align=True)
row.prop(settings, "bake_color", toggle=True) row.prop(settings, "bake_color", toggle=True)
row.prop(settings, "bake_normal", toggle=True) row.prop(settings, "bake_normal", toggle=True)