Сповіщення
Очистити все

Введення в 3D-моделювання для STALKER. Частина 7


Ранг:
Майстер
Роль:
Гість
Записи:
752
Приєднався:
7 місяців тому
 

Кістки та шейпи

Наступний крок - створення кісток. Кістки використовуються в грі для анімації моделі та прив'язки так званих Bounding Box, або просто шейпів. Детальніше про шейпи: це невидимі фігури (сфера, Box-коробка, циліндр), одночасно пов'язані з кісткою та моделлю. З кісткою тому, що кожна кістка може відповідати один шейп. Чому може? Бо його може й не бути. Крім того, під час програвання анімації шейпи рухаються разом із кістками, що цілком логічно. Зв'язок із моделлю саме шейпів опосередкований. СДК вміє генерувати шейп кістки, виходячи з крайніх координат вертексів, прив'язаних до цієї кістки. Це полегшує процес створення моделі, т.к. не треба вручну налаштовувати усі шейпи.

Важливо зрозуміти, що модель без шейпів у грі буде повністю проникна для куль, НПС, героя. Без шейпів, але зі скелетом і прив'язкою, це анімований каркас для проникної текстури. Тільки шейп дозволяє моделі взаємодіяти зі світом-пострілами, вибухами, аномаліями. При цьому, налаштування шейпа (Game Material кістки) відповідає за звук рикошету, кроків, колізії (згадаймо звук падіння горілки, що викинута з інвентарю). Цей же матеріал відповідає за візуалізацію попадання в об'єкт пулі-рикошет з іскрами, пил, осколки скла. Є й цікавіші ефекти. Матеріал clothes, наприклад, симулює батут при стрибку на ньому і, в той же час, в ньому «в'язне» граната, що відскакує від решти матеріалів. Матеріал glass, покладений горизонтально, слизький для героя.

Дуже багато статей говорять про те, що матеріал текстури впливає на фізику. Я не знайшов цього зв'язку входу своїх експериментів. Зміна
матеріалу текстури на будь-який зі списку не веде до будь-яких змін у принципі. Можу лише припустити, що матеріали текстур пов'язані
з освітленням, намоканням поверхонь.
UPD: Речі, написані в цій статті, стосуються лише об'єктів динаміки (все те, що не є частиною рівня та сповнюється
скриптами або через олл.спавн). Якщо йдеться про створення карти, то об'єкти, розставлені в СДК і скомпілювані як
частина рівня можуть взагалі не мати кісток, їх фізичні властивості визначаються якраз параметром Game Mtl текстури.

Важлива деталь. Зараз ми займемося прив'язкою вертексів моделі до кістки. На такій маленькій моделі, в принципі, не важливо, що і куди прив'язати. Ми можемо виділити всі вертекси і прив'язати їх до однієї кістки, вибрати сферичний шейп і отримати добрий результат. Однак у складних моделях треба уважно дивитися, які частини моделі ми прив'язуємо до якихось кісток, т.к. від цього залежить прорахунок шейпів, як говорилося вище, і коректність відігравання анімацій, якщо йдеться про прив'язці моделі нпс до стандартного скелета сталкера. Цікавий момент. Ми можемо дістати це стандартний скелет та анімації з готової моделі та «пришити» до нього нову модель без прив'язки вертексів до кісток. Для цього нам знадобиться конвертер bardac'a та ЦДК. Але в такому разі модель не буде анімована. Фізика невидимих ​​шейпів прораховуватиметься, персонаж рухатиметься-модель «левітуватиме», але без анімації видимих ​​частин.

Пара слів про автоматичну генерацію шейпів. Візьмемо будинок зі мурами. Стіні підійде Шейп Box. Вибираємо вертекси на краях стіни так, щоб у нас були всі три виміри коробки і приєднуємо до кістки (на малюнку червоним відмічені вертекси, яких вистачить). СДК зробить нам шейп по крайніх точках. Тобто, якби у стіні було вікно, то його вертекси ніяк не впливали б на наш шейп, і з погляду фізики гри воно було б непроникним для куль та гранат. Це означає, що для стіни з вікном потрібно буде 6 кісток: частини лівіше, правіше, вище і нижче вікна, а так само вікно - перехрестя з двох шейпів.

ВАЖЛИВО! Один і той же верткс цілком може бути прив'язаний до двох кісток, якщо це потрібно для анімації.
Однак ЦДК зараховує вершину тільки до однієї кістки при генерації шейпів. Це означає, що одна
вершина не може бути крайньою і необхідною для загалу шейпів відразу двох кісток.

Ще одна важлива деталь. Наприклад, необхідний шейп для перекладини, яка знаходиться під кутом 45 градусів щодо горизонту. Для неї нам знадобиться кістка, так само відхилена на 45 градусів. І взагалі, шейпи сильно залежать від кута кісток щодо осей координат. Тобто на очі створені кістки дадуть криві шейпи. Щоб вирівняти їх, можна використовувати інструмент Select and Rotate, але параметри вбивати внизу поля. Інструмент примхливий, обережно. Іноді потрібно просто натиснути +, щоб вирівняти кістку.

Що ж, з теорією покінчено. Приступимо до практики. Оскільки ми збираємося анімувати наш артефакт у майбутньому, нам знадобиться мінімум п'ять кісток т.к. прив'язка йде до зчленування кісток, тобто їх завжди потрібно на одну більше. Під час експорту обрубується остання кістка, т.к. до неї не можна прив'язати вертекси. Це також важливо.

Майте на увазі, що особисто я поки не знаю, як прив'язати до ланцюга кісток ще одну, покинувши режим створення. Тому будьте обережні у майбутньому, якщо не вистачить кісток, доведеться починати спочатку. Ну або пошукати в мережі інформацію =)

UPD: Щоб додати кістку, потрібно клікнути один раз по тій кістці, до якої ми хочемо прив'язати нову, і НЕ затискаючи
кнопку миші, відвести кросор убік. Операція проводиться з увімкненою кнопкою Bones із вкладки System.
Дякуємо Андрію Непряхіну за його уроки=)

І так. Створюємо наші кістки і вирівнюємо їх усі, т.к. вони зберігають кут відносно один одного (при цьому, вирівнювання полями з циврами внизу - вирівнювання щодо точки відліку координат, а мишею - щодо батьківської кістки). Оптимально підняти кістки трохи вище за точку відліку координат. Крім того, щоб далі не напоротися на виліт, краще перейменувати першу кістку в link (саме так прописується перша кістка в конфігах для спавна вже існуючих моделей). Кістки можна зменшити у розмірах до пропорційних артефакту. Але ЦДК на це не відреагує. Тому, задаючи параметри Height і Width, робимо їх пропорційними моделі відразу, до створення.

UPD: Є такий момент: якщо хоча б один вертекс у моделі НЕ прив'язаний до якоїсь кістки, то перша кістка буде автоматом
генерувати шейп на ВРЮ модель. І його доведеться налаштовувати вручну. АЛЕ! Можна взагалі не прив'язувати до першої кістки
будь-яких вертексів. Вона все одно буде в моделі в СДК.

Далі прив'язка. Вибираємо наш об'єкт та застосовуємо модифікатор Physique. Тиснемо Attach to Node, а потім на першу кістку ближче до зчленування, має з'явитися діалогове вікно. У ньому вибираємо Rigid та знімаємо галочку з Create Envelopes. Тиснемо Initialize. Перемикаємо з Deformable Rigid. Важливо зберігати порядок дій, інакше операція може бути некоректною.

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

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

Для цього тиснемо Vertices. Далі алгоритм простий. Затиснута кнопка Select-вибираємо потрібні вертекси. Тиснемо кнопку Assign to Link і прив'язуємо до кістки (починаємо з першої і йдемо по порядку. У моєму випадку одне кільце для кожної кістки) вибрані вертекси. Вертекси стануть червоними. Програма в цьому режимі не бачить моделі, а реагує на кістки і тільки. Тобто якщо кістку всередині моделі, то можна сміливо її використовувати.

Одні й ті ж вертекси, що випадково потрапили у виділення, можна ще раз сміливо відточити до кістки.
Використовуємо Ctr+Z для скасування виділення, затискаємо Shift або Ctr для додавання до виділення.
Перевірити, які вертекси вже прив'язані до кістки, можна натиснувши Select by Link і натиснувши на кістку.
Можна сховати вертекси кнопкою Hide. Дуже корисно, щоб не плутати вже прив'язані вертекси з шуканими.

Далі тиснемо на зелений хрестик, знову на кістку (ту ж). Хрестики вертексів мають стати зеленими. А потім тиснемо Lock Assignment. Хрестики перетворяться на дужки.

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

Нарешті, прив'язавши вертекси (зовсім не обов'язково все, якщо не планується анімувати об'єкт), ми можемо експортувати модель.

Тиснемо:

Далі вибираємо Export Skin та зберігаємо модель. Читаємо лог, він може лаятися на дуже багато речей =)


   
Цитата