Відображення символів із відрізаними кінцівками (моделі Blender на Java / OpenGL)


10

Які аспекти слід взяти до уваги для створення класів анімації анімації та рендерингу, якщо я хочу мати відривні кінцівки? Я розробив детальну систему тіла, яка може визначати все, що стосується нервової системи. Я маю на меті щось подібне до рівня деталей пошкоджень, виявлених у фортеці карликів. Наприклад, коли персонаж пошкоджує свою передпліччя, є ймовірність пошкодження нерва, яка може відключити всю руку. Або вони могли повністю втратити руку.

У мене створена система для обробки частини даних. Кожен персонаж має тулуб, який має придатки та внутрішні частини. Кожен відросток також може мати придатки для дитини та внутрішні частини. Додаткові відростки вимикаються / видаляються, якщо батьківський додаток вимкнено / видалено. Якщо будь-який з відключених / вилучених придатків або внутрішніх частин потрібен на все життя, персонаж незабаром помре.

Над чим я зараз працюю, - це частина малювання / анімації. Як визначити анімацію, щоб знати, які з них дозволені, враховуючи поточний стан тіла (відсутні руки / ноги тощо)? Як налаштувати систему малювання, щоб не намалювати пропущені кінцівки? Чи повинна кожна кінцівка / відросток бути власною моделлю (я хотів би намалювати відрізані придатки на землі)?

Проста система, з якої я переходжу (я тільки що написала це для тестування), імпортує всі ключові кадри анімації як повноцінні моделі в VBO (разом з підрахунками вершин для місця початку / зупинки ключових кадрів). Він не імпортує і не використовує кістки, визначені в Blender, і не інтерполює між кадрами.

Це, мабуть, досить велике запитання, тому я також шукаю ресурси, які можуть завести мене туди, куди мені потрібно поїхати.

EDIT

Я запитую про анімацію, знаючи, які кінцівки вона анімує, тому що я хотів би, щоб вона була встановлена ​​для виконання альтернативної анімації, якщо потрібна кінцівка відсутня. Подумавши про це, я думаю, що я виконав би цю перевірку перед активацією анімації та активував відповідну анімацію на той час.

Відповіді:


7

Зараз я працюю за подібною системою. Процедурна анімація + розчленування тощо.

Як визначити анімацію, щоб знати, які з них дозволено давати поточний стан тіла (відсутні руки / ноги тощо)?

Я не дуже дотримуюся цього шматочка, якщо кінцівок немає, то кого хвилює, анімація чи ні, тому що його не видно.

Чи повинна кожна кінцівка / відросток бути власною моделлю (я хотів би намалювати відрізані придатки на землі)?

Я динамічно будую їх за допомогою вершинних ваг кісток. Якість, мабуть, трохи нижча, ніж робити кожну кінцівку вручну, але це менше зусиль, коли я це зробив один раз, тому що потім можу застосувати її до кожної моделі.

З розумним підходом із наступного розділу, так, кожна кінцівка матиме власну модель.

Я б, мабуть, мав повну модель під рукою всього об'єкта, і кожна з кінцівок вирізана.

Як налаштувати систему малювання, щоб не намалювати пропущені кінцівки?

2 головних варіанти, найпростіший спосіб - просто намалювати кінцівки окремо, і там, де кінці з’єднуються, є додаткові грані, які, як правило, приховані текстурами «сирої плоті», які будуть помітні при видаленні кінцівок.

Другий вибір - це робити це динамічно на льоту, це працюватиме лише щодо відносно простих моделей. Підхід полягає в тому, щоб взяти базову модель і знайти вершини, зважені до кінцівки, яку ви хотіли розчленувати. Видаліть ці вершини, зазначивши, до чого вони підключаються, щоб ви знали відкритий розділ. Потім ви динамічно закриваєтесь відкритим розрізом трикутниками з текстурою «сирого м’яса». З точки зору розумного розробника програмного забезпечення, цей підхід не дуже вдалий (деформація моделі часу роботи), і менш "плоскі" характеристики продуктивності, але мені якось подобається.

Незважаючи на те, що перший метод буде генерувати набагато більше дзвінків на дзвінок, він також трохи доступніший.

Я особисто йду з другою, з відносною успішністю, але всі мої моделі дуже низькі, тому динамічне розкроювання моделі та повторне завантаження VBO в кадрі є поки що можливим.

Він не імпортує і не використовує кістки, визначені в Blender, і не інтерполює між кадрами.

Це робить розчленування справді важким процедурним способом, бо як ви знаєте, які вершини належать до якого суглоба? Вага вершин кісток і розчленування йдуть рука об руку, так що я пропоную вам переосмислити цю частину.

Я також пропоную вам вкласти гроші в інтерполяцію. Без цього ви не можете прискорити / уповільнити свою анімацію, і ви поєднані з частотою кадрів. Це означає, що ви зможете менше отримувати свої анімації. наприклад, ви не можете уповільнити анімацію прогулянки, коли хтось зупиняється тощо.


Дякую @Michael Я виховував інтерполяцію та імпорт кісток, бо знаю, що з часом вони мені знадобляться, але я їх ще не маю. З того, що ви сказали, схоже, я знаю, що робити, як тільки дойду до цього моменту. Ймовірно, я би просто асоціював придаток або групу придатків з кісткою. Я поставлю окреме запитання щодо імпорту кісток.
MichaelHouse

оскільки ви працюєте над чимось подібним, можливо, у вас є додаткова інформація щодо цього пов'язаного питання? gamedev.stackexchange.com/q/20931/7191
MichaelHouse

5

Найкращий варіант - відрізати кінцівки і використовувати декілька підмоделей залежно від поточного стану ран. Ваш підхід до використання VBO на ключовий кадр є просто надмірним; використовувати скелетну анімаційну систему та відтворювати різні анімації залежно від отриманих ушкоджень (кульгання однією ногою, повзання без двох ніг тощо).

Valve опублікував хороший набір слайдів про рани та розчленування в L4D2. Мені дуже подобається підхід до використання моделі для органів та кісток та відсікання моделі «шкіри» на основі текстурних проекцій порізів, пострілів тощо.


Цікаво. Ці слайди добре виглядають. Схоже, це спрацювало б для пошкодження, яке не вплинуло на весь відросток.
MichaelHouse
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.