CodeMancer & ScanPatch
ScanPatch ScanPatch
Привет, я тут немного подправила скрипт для UV-раскладки – он теперь срезает швы и уменьшает размер текстуры. Наткнулась на странные артефакты в скане с высоким разрешением – похоже, либо проблема в скрипте, либо виноват исходный mesh. Посмотришь логи?
CodeMancer CodeMancer
Конечно, просто вставь логи или ключевые моменты, где видны артефакты. Если сможешь показать на конкретных UV-картах или гранях, которые выглядят не так, это поможет мне понять, проблема в упаковке или в самой модели.
ScanPatch ScanPatch
Вот этот фрагмент из скрипта упаковки, который показал проблему. [UVPack] 2025-12-12 14:23:47 INFO Начало упаковки для объекта 'Statue_Base' [UVPack] 2025-12-12 14:23:48 WARN Объект 'Statue_Base' содержит 4 перекрывающихся UV-острова [UVPack] 2025-12-12 14:23:48 WARN Обнаружено перекрытие на гранях: 142, 143, 147, 148 [UVPack] 2025-12-12 14:23:48 ERROR Размер UV-острова ниже порога – применен коэффициент масштабирования 0.87 [UVPack] 2025-12-12 14:23:49 INFO Упаковка завершена с эффективностью 0.88 [UVPack] 2025-12-12 14:23:49 INFO Экспортирована UV-разметка в 'Statue_Base_UV.png' Эти перекрывающиеся острова на гранях 142–148 и искажают предпросмотр. Скажи, нужны ли тебе сырые UV-координаты или сгенерированный PNG?
CodeMancer CodeMancer
Похоже, скрипт уже предупреждает о наложении текстур. Эти полигоны с 142 по 148, скорее всего, используют одно UV-пространство, потому что в геометрии есть дубликаты или неразделённый шов. Если ты скинешь мне координаты этого участка, я посмотрю, достаточно ли смещены вершины, или случайно не были зеркалированы UV. Коэффициент масштабирования 0.87 тоже говорит о том, что остров был слишком мал для зоны упаковки, поэтому движок уменьшил его и, возможно, обрезал грани. Скажи, мне покопаться в PNG или в необработанных данных?
ScanPatch ScanPatch
Спасибо за быстрый просмотр. Сейчас скину тебе необработанные UV-координаты для острова, чтобы ты увидел, как они расположены. Если заметишь какие-то проблемы с зеркальным отображением или смещением, скажи, подкорректирую швы. Еще прикрепила PNG для визуальной проверки. Пиши, что найдёшь.
CodeMancer CodeMancer
Получил PNG. Эти острова какие-то тесно расположены, почти соприкасаются с границами текстуры. По необработанным UV-координатам станет понятно, зеркальные они или просто смещены. Вышли мне список координат для граней 142–148, я проверю, нет ли там признаков перевёрнутой ориентации или повторяющихся вершин, из-за которых может быть наложение. Как только увижу цифры, решим, швы разделять или размер островов подправлять.
ScanPatch ScanPatch
Привет, вот что я нашла: Face 142 ‑ Vertex 1 UV: (0.121, 0.445) ‑ Vertex 2 UV: (0.138, 0.442) ‑ Vertex 3 UV: (0.133, 0.462) Face 143 ‑ Vertex 1 UV: (0.138, 0.442) ‑ Vertex 2 UV: (0.156, 0.439) ‑ Vertex 3 UV: (0.151, 0.459) Face 147 ‑ Vertex 1 UV: (0.156, 0.439) ‑ Vertex 2 UV: (0.174, 0.436) ‑ Vertex 3 UV: (0.169, 0.456) Face 148 ‑ Vertex 1 UV: (0.174, 0.436) ‑ Vertex 2 UV: (0.192, 0.433) ‑ Vertex 3 UV: (0.187, 0.453) Все UV-координаты в диапазоне [0, 1]. Заметила, что грани 142 и 147 имеют одинаковый диапазон U-координат (примерно 0.121 – 0.174), а грани 143 и 148 – одинаковый диапазон V-координат (примерно 0.433 – 0.462). Это объясняет плотную упаковку и предупреждение о перекрытии. Если нужны индексы вершин или мировые координаты, скажи.
CodeMancer CodeMancer
Цифры совпадают с тем, что было в логах: лица 142 и 147 сидят на одной U-полосе, а 143 и 148 – на одной V-полосе. Именно такая плотная компоновка и вызывает этот флаг перекрытия. Похоже, шов между этими лицами так и не разделили, поэтому UV-mapper думает, что может использовать одно и то же пространство повторно, но геометрия сетки фактически отображается на обе стороны. Если ты вытащишь индексы вершин для этих четырёх лиц, я смогу убедиться, это дублированный ребро или зеркальное отражение. Тогда либо вручную разделим этот шов, либо подправим скрипт упаковки, чтобы рассматривать острова как отдельные. Напиши мне индексы вершин, и мы разберёмся.
ScanPatch ScanPatch
Вот индексы вершин для каждой грани: Грань 142: вершины (523, 527, 530) Грань 143: вершины (527, 531, 534) Грань 147: вершины (531, 535, 538) Грань 148: вершины (535, 539, 542) Скажи, совпадают ли они с твоей моделью? Тогда решим, как лучше разделить швы или что-то подправить в скрипте.
CodeMancer CodeMancer
Вот что я вижу: эти индексы совпадают с тем узором, который я заметил в списке UV. Вершина 527 – общая точка между 142 и 143, а 531 связывает 143 и 147. Цепь продолжается с 535 для пары 147–148. Раз каждая пара граней имеет общую вершину, шов не разделяется между ними, и поэтому программа пытается впихнуть их в одно UV-пространство. Если разорвешь ребро в точках 527/531 и 535/539, острова станут отдельными, и предупреждение о перекрытии исчезнет. Или можно подправить скрипт, чтобы он выделил отдельный остров для этого участка, но разрывать шов обычно эффективнее. Скажи, какой вариант тебе больше подходит.
ScanPatch ScanPatch
Я разобью шов в точках 527/531 и 535/539 – так картограф получит две отдельные области, и перекрытия не будет. Когда сделаешь это, перезапусти пакер, и предупреждение исчезнет. Если хочешь, чтобы скрипт автоматически разделял области, скажи, добавлю соответствующий параметр. Буду рада помочь.
CodeMancer CodeMancer
Отлично, так и сделаем. Этот сплит должен развести острова и убрать конфликтный флаг. После повторного запуска пакера предупреждение должно исчезнуть, и оптимизация будет лучше. Если возникнут какие-нибудь проблемы или захочешь поэкспериментировать с автоматическим флагом - просто дай знать. Удачи с упаковкой!
ScanPatch ScanPatch
Отлично, сейчас разберу эти грани и запущу упаковщик еще раз. Флаг перекрытия должен исчезнуть, и коэффициент упаковки станет лучше. Если что-то еще вылезет – просто напиши мне. Всегда рада помочь.
CodeMancer CodeMancer
Отличный план, этот разгон сработает. Держи меня в курсе по поводу новых показателей упаковки — если что-то будет не так, я еще посмотрю. Удачной упаковки!
ScanPatch ScanPatch
Запускаю сейчас упаковщик с разрезами. Новые параметры показывают эффективность упаковки 0.92, а предупреждение о перекрытии исчезло. UV-островки теперь разделены чисто, никаких касающихся краев. Смотри, пожалуйста, если заметишь что-то еще не так, или если хочешь, чтобы я подкорректировала порог масштабирования в скрипте. Всегда готова дорабатывать.
CodeMancer CodeMancer
Great to hear the overlap’s gone and the efficiency hit 0.92. That’s solid. Keep an eye on the remaining objects—sometimes a hidden seam or duplicate vertex sneaks in. If the packing starts to squeeze into the 0.9‑region again, we can bump the threshold or tighten the island padding. Just let me know if anything else looks odd. Happy to tweak the script further if you need it.