Boden-Texturen: 3-m-Kachel + Anti-Wiederholung, „Gras“ heißt jetzt „Steppe“
Sly 25.10.: Texturen wiederholen sich zu krass, „Gras“ sieht nicht nach Gras aus. - Kachel 3 m statt 1 m; zweite Abtastung gedreht + 2,3× größer, großflächiges Rauschen mischt beide, zweites Rauschen variiert die Helligkeit (Spiegel Client). - Material 0 (gras_steppe) heißt im Editor „Steppe“ (Format unverändert); Hilfetexte nachgezogen. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
9f2a32df70
commit
99a06c6cb8
6 changed files with 24 additions and 13 deletions
|
|
@ -49,7 +49,7 @@ static func text() -> String:
|
|||
["1 / 2 / 3 / 4", "Pinselmodus: Heben / Senken / Glätten / Malen"],
|
||||
["[ / ]", "Pinselgröße: Klein (4 m) / Mittel (12 m) / Groß (32 m) zyklisch"],
|
||||
["Linksklick-Ziehen", "Boden formen bzw. malen"],
|
||||
["Strg+Linksklick-Ziehen", "Gegenteil: senken (bei Heben) / heben (bei Senken) / Gras zurückmalen"],
|
||||
["Strg+Linksklick-Ziehen", "Gegenteil: senken (bei Heben) / heben (bei Senken) / Steppe zurückmalen"],
|
||||
]))
|
||||
out += _header("Datei & Undo")
|
||||
out += _table(_rows([
|
||||
|
|
|
|||
|
|
@ -1815,10 +1815,10 @@ func _enter_terrain_mode() -> void:
|
|||
return
|
||||
tool_mode = "terrain"
|
||||
terrain_mod.terrain_panel.visible = true
|
||||
help_label.text = "Linksklick-Ziehen: Boden formen oder malen · Strg+Linksklick: Gegenteil / Gras zurück ·\n1/2/3/4: Heben/Senken/Glätten/Malen · [ / ]: Pinselgröße Klein/Mittel/Groß ·\nPinselgröße & Material rechts · Rechte Maustaste: Flug · Strg+Z: letzter Strich weg"
|
||||
help_label.text = "Linksklick-Ziehen: Boden formen oder malen · Strg+Linksklick: Gegenteil / Steppe zurück ·\n1/2/3/4: Heben/Senken/Glätten/Malen · [ / ]: Pinselgröße Klein/Mittel/Groß ·\nPinselgröße & Material rechts · Rechte Maustaste: Flug · Strg+Z: letzter Strich weg"
|
||||
terrain_mod.terrain_edit_btn.button_pressed = true
|
||||
terrain_tool.call("set_brush_mode", terrain_mod._selected_terrain_mode())
|
||||
_set_status("Terrain-Modus an: LINKSKLICK-Ziehen formt den Boden, im Malen-Modus färbt er das Gelände (Gras/Sand/Fels). Regler rechts stellen Pinsel und Stärke ein.")
|
||||
_set_status("Terrain-Modus an: LINKSKLICK-Ziehen formt den Boden, im Malen-Modus färbt er das Gelände (Steppe/Sand/Fels …). Regler rechts stellen Pinsel und Stärke ein.")
|
||||
|
||||
|
||||
func _leave_terrain_mode() -> void:
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ func build() -> void:
|
|||
mat_scroll.add_child(mat_grid)
|
||||
terrain_palette.add_child(mat_scroll)
|
||||
var mat_labels := [
|
||||
"🌿 Gras", "🏖 Sand", "🪨 Fels", "🌱 Sattgras",
|
||||
"🏜 Steppe", "🏖 Sand", "🪨 Fels", "🌱 Sattgras",
|
||||
"🍂 Vertrocknet", "🍀 Moos", "🟫 Erde", "🛤 Pfad",
|
||||
"⛏ Umgegraben", "🧱 Schotter", "🟤 Lehm", "🏜 Sand hell",
|
||||
"🏜 Sand rost", "🗻 Basalt", "⛰ Geröll", "🌧 Schlamm",
|
||||
|
|
@ -178,7 +178,7 @@ func build() -> void:
|
|||
terrain_panel.add_child(terrain_weich_slider)
|
||||
|
||||
terrain_panel.add_child(_muted_label(
|
||||
"Linksklick-Ziehen formt bzw. malt (je nach Werkzeug), Strg+Linksklick macht das Gegenteil — im Malen-Modus malt Strg+Klick Gras zurück. "
|
||||
"Linksklick-Ziehen formt bzw. malt (je nach Werkzeug), Strg+Linksklick macht das Gegenteil — im Malen-Modus malt Strg+Klick Steppe (Grundboden) zurück. "
|
||||
+ "Jeder Strich ist EIN Rückgängig-Schritt (Strg+Z). Rechte Maustaste = Flug, ESC beendet den Terrain-Modus."))
|
||||
|
||||
# --- Bauen (Karte t_97ea59c5): Modular-Builder-Pieces im App-Skelett ---
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ func _init() -> void:
|
|||
_fill_spin(size_z_edit)
|
||||
vbox.add_child(size_z_edit)
|
||||
|
||||
var hint := _make_label("Erlaubt: 256–4096 m. Die Karte bleibt mittig — das bestehende Terrain\nbehaftet seine Weltposition, die neue Randzone wird flach (Gras).")
|
||||
var hint := _make_label("Erlaubt: 256–4096 m. Die Karte bleibt mittig — das bestehende Terrain\nbehaftet seine Weltposition, die neue Randzone wird flach (Steppe).")
|
||||
hint.modulate = Color(1, 1, 1, 0.7)
|
||||
vbox.add_child(hint)
|
||||
|
||||
|
|
@ -188,7 +188,7 @@ func _update_preview() -> void:
|
|||
lines.append("Beim Verkleinern geht nichts verloren — alles liegt innerhalb der neuen Grenzen.")
|
||||
elif grow:
|
||||
preview_label.modulate = Color(1, 1, 1, 0.7)
|
||||
lines.append("Beim Vergrößern bleibt alles erhalten — die neue Randzone wird flaches Gras.")
|
||||
lines.append("Beim Vergrößern bleibt alles erhalten — die neue Randzone wird flache Steppe.")
|
||||
|
||||
# Spawn-Speicher-Warnung (R2-Befund): V11 verlangt ≥ 4 Punkte je Team beim
|
||||
# SPEICHERN — nach dem Entfernen drohen Teams unter den Deckwert.
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ uniform float index_staerke : hint_range(0.0, 1.0) = 0.75;
|
|||
// im Client. Nicht gesetzt → ausschalten (vertex_only-Modus).
|
||||
uniform sampler2DArray albedo_array : source_color, filter_linear_mipmap, repeat_enable;
|
||||
uniform float layer_count = 20.0;
|
||||
uniform float tile_size = 1.0;
|
||||
uniform float tile_size = 3.0;
|
||||
uniform float texturen_an = 0.0; // 1.0 = Texturen aktiv (vom Mesh-Code gesetzt)
|
||||
|
||||
// Splat-Gewichtstextur (Karte t_7a0a6b79 — weiche Übergänge): je Texel die
|
||||
|
|
@ -87,6 +87,20 @@ vec2 warp(vec2 g) {
|
|||
return g + o * 0.9; // eine Oktave: Quest-Budget (8 Hash statt 16)
|
||||
}
|
||||
|
||||
// Anti-Wiederholung (Karte 25.10., Sly: „Texturen wiederholen sich zu krass“):
|
||||
// Kachel 3 m statt 1 m; zweite Abtastung gedreht + 2,3× größer, ein
|
||||
// großflächiges Rauschen (~9 m) mischt beide, ein zweites (~30 m) variiert die
|
||||
// Helligkeit leicht. 2 Albedo-Fetches je Material statt 1.
|
||||
vec3 alb_anti(float id, vec2 wp) {
|
||||
float T = max(tile_size, 0.05);
|
||||
vec2 uv1 = wp / T;
|
||||
vec2 uv2 = vec2(0.8196 * wp.x - 0.5729 * wp.y, 0.5729 * wp.x + 0.8196 * wp.y) / (T * 2.3) + vec2(0.37, 0.71);
|
||||
vec3 a = texture(albedo_array, vec3(uv1, id)).rgb;
|
||||
vec3 b = texture(albedo_array, vec3(uv2, id)).rgb;
|
||||
vec3 col = mix(a, b, smoothstep(0.35, 0.65, vnoise(wp * 0.11)));
|
||||
return col * mix(0.88, 1.08, vnoise(wp * 0.035 + vec2(17.0, 3.0)));
|
||||
}
|
||||
|
||||
float mat_id(ivec2 p) {
|
||||
return clamp(floor(texelFetch(material_map, p, 0).r * 255.0 + 0.5), 0.0, layer_count - 1.0);
|
||||
}
|
||||
|
|
@ -159,9 +173,7 @@ void fragment() {
|
|||
float m1 = max(material_res - 1.0, 1.0);
|
||||
vec2 g = clamp(warp(clamp(map_uv, 0.0, 1.0) * m1), vec2(0.0), vec2(m1));
|
||||
vec3 t2 = top2(g);
|
||||
vec2 uv = world_pos.xz / max(tile_size, 0.05);
|
||||
vec3 alb = mix(texture(albedo_array, vec3(uv, t2.y)).rgb,
|
||||
texture(albedo_array, vec3(uv, t2.x)).rgb, t2.z);
|
||||
vec3 alb = mix(alb_anti(t2.y, world_pos.xz), alb_anti(t2.x, world_pos.xz), t2.z);
|
||||
col = alb * col; // Tönung/Shading multipliziert (wie Client)
|
||||
}
|
||||
// --- Konturlinien (unverändert, Karte t_3ebe4086) ---
|
||||
|
|
|
|||
|
|
@ -157,8 +157,7 @@ func _apply_texture_uniforms(mat: ShaderMaterial) -> void:
|
|||
albedo.create_from_images(imgs)
|
||||
mat.set_shader_parameter("albedo_array", albedo)
|
||||
mat.set_shader_parameter("layer_count", float(imgs.size()))
|
||||
mat.set_shader_parameter("tile_size",
|
||||
float(arrays.tile_size) if arrays.tile_size > 0.0 else 1.0)
|
||||
mat.set_shader_parameter("tile_size", 3.0) # Spiegel Client TILE_SIZE (Karte 25.10.)
|
||||
mat.set_shader_parameter("texturen_an", 1.0)
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue