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:
+34
-12
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user