diff --git a/README.md b/README.md index b526221..f41c8a1 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,12 @@ Abgestimmt auf `A:\eco\EcoGame` (UE 5.8). Kurzfassung: - **AO/Cavity wird ins Albedo multipliziert** (Option „AO ins Albedo einrechnen", Staerke regelbar). Dunkle Ritzen und helle Platten stecken im Farbbild — das 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. - Tileable (4D-Torus) passt zum triplanar mappenden Master-Material. diff --git a/blender_manifest.toml b/blender_manifest.toml index 9d70fde..7cdfb78 100644 --- a/blender_manifest.toml +++ b/blender_manifest.toml @@ -1,7 +1,7 @@ schema_version = "1.0.0" id = "stylized_rock_generator" -version = "2.6.0" +version = "2.7.0" name = "Stylized Rock Generator" tagline = "Batch-Generator fuer stylized Rocks mit UE5-Export" maintainer = "D4rkst3r" diff --git a/dist/index.json b/dist/index.json index 4483d2f..e45b176 100644 --- a/dist/index.json +++ b/dist/index.json @@ -7,7 +7,7 @@ "id": "stylized_rock_generator", "name": "Stylized Rock Generator", "tagline": "Batch-Generator fuer stylized Rocks mit UE5-Export", - "version": "2.6.0", + "version": "2.7.0", "type": "add-on", "maintainer": "D4rkst3r", "license": [ @@ -23,9 +23,9 @@ "Mesh", "Modeling" ], - "archive_url": "./stylized_rock_generator-2.6.0.zip", - "archive_size": 17621, - "archive_hash": "sha256:f20343bd1aae3c03585e7621816b8934719e8855d7d4c411a0973df3d21ac397" + "archive_url": "./stylized_rock_generator-2.7.0.zip", + "archive_size": 18091, + "archive_hash": "sha256:2a3b20b6a915271e10b5246b77fc89361cab3dab2ead032aff4e4cd3526ccf33" }, { "schema_version": "1.0.0", diff --git a/dist/stylized_rock_generator-2.6.0.zip b/dist/stylized_rock_generator-2.6.0.zip deleted file mode 100644 index 69ab35b..0000000 Binary files a/dist/stylized_rock_generator-2.6.0.zip and /dev/null differ diff --git a/dist/stylized_rock_generator-2.7.0.zip b/dist/stylized_rock_generator-2.7.0.zip new file mode 100644 index 0000000..7007ff0 Binary files /dev/null and b/dist/stylized_rock_generator-2.7.0.zip differ diff --git a/stylized_rock_generator.py b/stylized_rock_generator.py index b917b7c..bea0d64 100644 --- a/stylized_rock_generator.py +++ b/stylized_rock_generator.py @@ -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)