А меш оптимизируешь после генерации?
Насколько я понимаю, ты находишь общие границы и их режешь полученный меш на полигоны?
Не оптимизирую. Надо бы, но самому писать это не хочется, а те библиотеки которые пробовал (тот же polypartition), не умеют нормально работать с геометрией с дырками.
У меня могут быть очень длинные треугольники, чтобы это работало +- нормально я добавил шаг в A* который делает raycast условный внутри треугольника чтобы пытаться строить прямой путь когда возможно. Хак но работает очень хорошо.
Ведь там как, если использовать A* то для него у каждой ноды должна быть одна оценка (ну то есть для каждого выпуклого полигона надо выбрать одну точку).
И тут как бы можно выбрать угол, центр грани или центр полигона, но если полигоны растянуты, то каждая из этих точек может находиться не по оптимальному пути.
То есть можно упарываться в построение идеально сбалансированного навмеша, можно упороться в идеальный поиск пути по тому что есть. Я выбрал второй путь, так как хочу иметь возможность перегенерировать навмеши на лету. И да, оба пути - глубокая кроличья нора.