UVMapping. Продолжение. ABF.

Доброго всем времени.

Напишу что дальше получается с генерацией UV.

После того как сделал алгоритм добавляющий по одному треугольнику к сгенерированной UV картинке и понял что это фигня полная , заинтересовался алгоритмами , которые считают всё и сразу.

Последний писк моды в этом направлении – ABF. И разные вариации его ускорения ABF++, LinABF.

ABF – это по большому счёту тотже самый LSCM, но там учитывается нелинейность синуса.

Для реализации выбрал LinABF, потому как он обещает большую скорость вычисления, и не такой замороченный как иерархические варианты ускорения ABF.

У LinABF по сравнению с исходным ABF есть огромный плюс – на каждом шаге решается линейная система уравнений, что позволяет воспользоваться например сольвером PARDISO и получить очень быстрое решение буквально за 3-4 итерации.

Есть у LinABF и минус – это таже линейность системы уравнений… Что при неудачном выборе начального решения возможно не позволит системе сойтись впринципе. (Впрочем такого не видел пока.)

Теперь картинки:

Исходное изображение.

Исходное

UV координаты сгенерированные Блендером 2.44 (ABF).

UV координаты сгенерированные мной (LinABF)

Впринципе результат одинаковый (если не считать того что отражено по оси Y да и масштаб разный) .

Даже треугольник на границе одинаково пересекается, потому как для граничных треугольников нет условия на сумму углов меньшую чем 2*PI.

Отсутствие ограничений на отрицательность углов тоже может помешать получить корректное решение.

Впрочем когда нелинейность пространства ещё разумная, с сходимостью у LinABF нет никаких проблем.

А при неразумной нелинейности пользы даже от корректного решения немного – слишком уж будет отличаться размер текселя в разных треугольниках.

PS: Теперь следующий этап – корректно резать на куски модельку.

  • IronPeter

    Что-то я не понимаю. А чем плохо – положить меш на плоскость и релаксировать физикой? Сохраняя длины ребер. Рвать там – где большие растяжения.

  • Balmer

    Переводя твоё сообщение на язык UV писателей. Релаксация физикой – это итеративный алгоритм решения нелинейной системы уравнений. То есть то-же самое что и ABF. То есть это просто медленно.

  • Balmer

    И ещё в твоем посте встречается слово “положить на плоскость”, тоже оно из старого лексикона LSCM. Даже то ухо что у меня на картинке (с другой стороны уха тоже полигонов дофига), ты таким способом не разложишь. ABF крут тем, что у него исходное решение – это не проекция на плоскость.

  • Aliot

    IronPeter, так, как ты предлагаешь у нас кто-то делал еще лет 5 назад – так что могу уверенно говорить, что не очень хороший метод.
    Проблема в том, что:
    * “Хорошего” решения может не быть. Сходимости тоже
    * Это медленно
    * От начального выбора “плоскости” (стартовой размотки) зависит очень многое.
    * Невозможно легко понять, когда уже пора “рвать”. Не исключено, что большие растяжения перестанут ими быть
    Ну и самое главное Balmer сказал – это и будет итеративный алгоритм, только настроенный на сохранение длины ребра с неочевидным стартовым выбором. Т.е. не самый лучший.

  • Aliot

    2Balmer
    Дядя, а вы когда доделаете таки – можно будет вам (компании, обоим, не знаю еще кому) денег занести за итоговый результат? Прошу прощения, что влезаю с меркантильным вопросом таким – но дело бы бы и правда нам очень полезное.
    Не слишком мне нравится (совсем не), как у нас этот самый ABF реализован, и fallback до других вариантов (аж целых трех), если ABF не смог. Получается долго, медленно и не круто (хоть и надежно).

  • Balmer

    2Aliot – сначала доделать надо, и оттестировать. Не исключено что будет косяк фатальный какой, или конечный результат убогий окажется. Но вот реальные модельки, на которые UV координаты накладывать надо – с удовольствием бы заимел.

  • Aliot

    Попробую заслать.