VHACD работает, но во первых долго, а во вторых очень приблизительно.
Причём приблизительность, судя по всему напрямую зависит от кол-ва вокселей. Тепичный представитель нового подхода к программированию - долго-долго маслает, жрёт несколько ядер и выдаёт крайне приблизительный результат. Не нравится мне всё это.
Неаккуратные брашы - это продукт VHACD.
Вложение: collision.zip (69.0 кб)
Этот файл был скачан 91 раз.
Вообще говоря, дефолтный патч это работа через OpenCL. Но даже при максимальных настройках оно ведёт себя странновато.
Я бы не стал заострять на этом внимание, но по сути это вообще единственное, что я смог найти. Прикладываю демку, сами попробуйте.
Столик, кстати из буллита.
Вложение: vhacd.zip (106.4 кб)
Этот файл был скачан 75 раз.
Прогнал конкавные мешы через BSP-дерево. Это далеко не такое простое занятие, как может показаться. Дерево, оно же не различает где пустота, а где солид, поэтому мы на выходе очевидно имеем нарубленное конвексное пространство. И из этой кашы нам надо вычленить наш исходный меш.
Простая фильтрация точек в дерево не спасёт - точности не хватает.
Моё решение - задвинуть исходные точки полигонов внутрь, примерно на ON_EPSILON * 2, тогда в большинстве случаев референсные лифы определяется правильно. Фейл обычно наступает в случае заострённых поверхностей, ну например на приложенной карте к грешному языку прилипло два лишних браша. Для наконечников тоже есть эта проблема, но поскольку наконечники являются wrapped convex меш, то для них вызывается другой алгоритм, без декомпозиции.
Вложение: collision.zip (130.8 кб)
Этот файл был скачан 87 раз.
nemyax кутришное дерево не сохраняет фейсы, да и толку мне с тех фейсов? Мне же конвексные брашы нужны, а не фейсы.
Цитата:
nemyax писал: мол у меня со стороны бакфейса солидно/пусто
это не работает так. Это если я бы изначально фильтровал брашы в дерево.
А я сую ему вот эту кашу из полигонов и потом, получившимся деревом кромсаю браш на конвексные части. Ну как в унреале, для понимания.
Там не остаётся места для пустоты, там всё заполнено брашами. Я тоже думал, да ерунда ща определим. Весь день промудохался, пока не придумал фильтровать в дерево оригинальные плоскости, но с небольшим смещением, чтобы компенсировать потерю точности.
Утомил меня этот .ase в край. Более идиотского текстового формата я просто не видел. Там получается занятная тенденция, поскольку текстовый формат не является строгим, то каждый извращается как может.
На этом фоне .smd выглядит просто образцом стандартизации, хотя он тоже текстовый. Вот как раз потому что никакие вольности там недопустимы, даже пробелы и отступы должны совпадать. Так что финальная версия компилятора будет грузить именно .smd. А для асешек я конвертор напишу, ну оно не особо сильно нужно, скорее для обратной совместимости и тестирования.
Дядя Миша писал: На этом фоне .smd выглядит просто образцом стандартизации
Ага, только новые версии 3д пакетов его уже не поддерживают, никто не писал никаких плагинов. Разве что в блендере был экспорт в сорсовский smd.
Цитата:
Дядя Миша писал:
Прогнал конкавные мешы через BSP-дерево. Это далеко не такое простое занятие, как может показаться. Дерево, оно же не различает где пустота, а где солид, поэтому мы на выходе очевидно имеем нарубленное конвексное пространство. И из этой кашы нам надо вычленить наш исходный меш.
А по нормалям меша нельзя определить?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Там плагин элементарно пишется за полчиса, вон Немякса спроси.
Цитата:
FiEctro писал: А по нормалям меша нельзя определить?
В дереве используются только чётные плоскости.
Мне тут в голову пришла любопытная мысль. Я же собирался сделать поддержку компилируемых декалей, ну т.е. таких, которые будут превращаться в полигоны уже на этапе компиляции карты, значит можно организовать некоторую поддержку для хейтмапы прямо в компилере.
Можно вообще по хейтмапе сразу сгенерить выпуклую декаль, как будто это параллакс какой-нибудь Но конечно опционально. Скажем еденичную дырку от взрыва или там лужу так еще сделать можно, а вот всю стену выпуклыми кирпичами замостить - нет, слишком тормозно.