Очень бесячий баг
Помогите пж. Я начинающий айтишник. Я тут решил в своём проекте сделать процедурную генерацию, однако столкнулся с косметическим, однако ооочень бесячим багом. Его вы можете увидеть на фото 1. Поясняю - когда мир создаётся, вроде бы всё номально, но тут БАЦ - внутренний угол там, где должна быть такая же плоская трава. И этот баг повторяется с каким-то расстоянием. Я уже чего только не перепробовал (нейронки особо не помогли, а иногда делали только хуже). Я работаю на годот 4.6. Я новичок на этом движке (в целом в ИТ), так что не судите строго)
extends TileMap
#Настройки мира
var width = 400
var height = 200
var noise = FastNoiseLite.new()
func _ready() -> void:
randomize()
noise.seed = randi()
noise.frequency = 0.03
generate_world()
func generate_world():
clear()
var cells_to_draw = []
#Собираем координаты в массив
for x in range(width):
var noise_val = noise.get_noise_2d(float(x),0.0)
var ground_y = int(noise_val * 10 + 20)
for y in range(ground_y, height):
cells_to_draw.append(Vector2i(x,y))
set_cells_terrain_connect(0,cells_to_draw,0,0)
Не считайте мой вопрос наглостью, просто я действительно уже не знаю что делать(
Решение 1: Использовать обычные тайлы вместо террайна
extends TileMap
var width = 400
var height = 200
var noise = FastNoiseLite.new()
func _ready() -> void:
randomize()
noise.seed = randi()
noise.frequency = 0.03
generate_world()
func generate_world():
clear()
# Просто устанавливаем тайлы без автоматического соединения
for x in range(width):
var noise_val = noise.get_noise_2d(float(x), 0.0)
var ground_y = int(noise_val * 10 + 20)
for y in range(ground_y, height):
set_cell(0, Vector2i(x, y), 0, Vector2i(0, 0)) # Укажите правильные координаты вашего тайлаРешение 2: Правильная настройка террайна
Если хочешь оставить set_cells_terrain_connect, попробуй:
func generate_world():
clear()
var cells_to_draw = []
for x in range(width):
var noise_val = noise.get_noise_2d(float(x), 0.0)
var ground_y = int(noise_val * 10 + 20)
# Добавляем ВСЕ ячейки, включая границу сверху
for y in range(ground_y, height):
cells_to_draw.append(Vector2i(x, y))
# Используем правильный слой террайна (возможно нужен 1 вместо 0)
set_cells_terrain_connect(0, cells_to_draw, 0, 1)Решение 3: Сглаживание шума
Проблема может быть в резких перепадах высот:
func _ready() -> void:
randomize()
noise.seed = randi()
noise.frequency = 0.02 # Уменьшите частоту
noise.fractal_octaves = 3 # Добавьте октавы для плавности
noise.fractal_gain = 0.5
generate_world()Решение 4: Дополнительная обработка
func generate_world():
clear()
var cells_to_draw = []
var prev_y = 0
for x in range(width):
var noise_val = noise.get_noise_2d(float(x), 0.0)
var ground_y = int(noise_val * 10 + 20)
# Сглаживание резких перепадов
if x > 0 and abs(ground_y - prev_y) > 3:
ground_y = prev_y + sign(ground_y - prev_y) * 3
for y in range(ground_y, height):
cells_to_draw.append(Vector2i(x, y))
prev_y = ground_y
set_cells_terrain_connect(0, cells_to_draw, 0, 0)Спасибо, попробую
Не помогает(