Oil Rig

Oil Rig
Oil Rig (3ds Max). Rendered (Vue) by Mr.Vanyaba (http://vanyaba.blogspot.com)

четверг, 23 февраля 2012 г.

Skyrim - создание нового персонажа (часть 5)

Skyrim - создание нового персонажа (часть 5)



Теперь у меня есть 2 персонажа - тонкая и толстая. Соответственно body 0 и body 1. Нужны они для морфирования в самой игре - чтобы можно было выбрать комплекцию тела. Обязательно нужно учесть условие, что одно тело должно быть изменено из другого тела. Суть такова: меш состоит из вертексов, вертексы имеют индексы. Морф работает только в том случае, когда у обеих моделей одинаковое количество вертексов и они совпадают индексами. В противном случае может возникнуть ситуация, что вертексы ноги будут неправильно перетекать, скажем  в руку. Проверить морф просто - выделяем объект №1 (или номер 2), применяем к нему модификатор morpher, указываем в ячейке в качестве цели другую модель. Если все правильно, то  ваша модель будет перетекать без проблем из одной в другую.
А что же делать если вертексов одинаковое количество, а индексы сбились? Ну может конечно есть и простое решение, но можно поступить и по непростому. Я его опишу. Ну может меня поправят - я не претендую на идеал - буду только рад.
Делаем копию модели - например большой. Затем открываем рибон. Выбираем инструмент Freeform/Conform. Вместо Grid (Draw on:) выбираем Surface

Поясню, что это такое. Конформ как бы утягивает или наоборот надувает модель до нужного объема. Объем определяется в данном случае другим объектом - режим Draw on Surface. Соответственно surface - целевая модель. В нашем случае - толстая модель ужимается до худышки. Потом конечно нужно разгладить складочки. В целом получается очень даже хорошо. И морф работает, и текстура от большого тела не слетела. Ненужное тело удаляется.

Так вот. Теперь у меня есть 2 тела - толстое 1 и тонкое 0. И оба они морфятся, Но поскольку голова неизменна - одна на 2 тела, то нужно поправить вертексы на шее для стыковки. Просто включаю привязку к вершинам - режим 3D и устанавливаю вертексы на срезе шеи на тонкой модели так, чтобы они совпадали с вертексами на шее среза головы. Все окей.
Теперь я прячу худышку и работаю с толстым телом. Режу его на нужные куски - рука, нога, тело. Задача - перенести вес со старой хайполи модели на новую. Поскольку скин уже сделан и отработан, модель идентична, переносить нужно его не скинврапом, а через skin utilities.
Я беру тело со скином. Перехожу в утилиты жму export skindata to mesh - получаю новый меш - он точно такой же но без модификатора скин. Все данные о весах запечены в сам меш. Затем я беру новое тело (единичку), вешаю на него модификатор скин, включаю ограничение на 4 кости и добавляю в него те же кости, что и в старом меше. Потом выделяю это тело и тело со скиндатой. Перехожу в Skin Utilities, жму import skin data. Открывается окно в котором нужно сопоставить старые и новые кости - слева - то что есть в скине - справа - список приходящих костей из skindata модели. Так как названия одинаковые, то остается нажать match by name и кости автоматически сопоставятся. После нажатия OK. Мы получаем скин полностью аналогичный старому - т.е. вертексам автоматически назначатся веса со старого скина. Новым вертексам - на груди - веса как бы интерполируются. По скин утилитам много информации в сети. Есть даже видео туторы. Можно даже просто зеркалить скин. У Майка на сайте достаточно подробно описан процесс.
То что я делаю с телом, делаю и с ногами и с руками.
А вот для нулевочки процесс уже проще. Тут уже достаточно скопировать модификатор скин с единички на меш нулевочки (кто не знает - выделяем модификатор скин в стеке, жмем правой клавишей, жмем Copy, выбираем другой меш, в стеке выбираем верхний модификатор, правой клавишей - Paste). Вуаля - нулевочка готова, поскольку, как я уже сказал, у вертексов одинаковые ID.
Остается сделать руки в режиме вида от первого лица. Тут тоже все просто - делаем копию меша кистей и копию меша тела. Заходим в едитполи тела. Удаляем полики, которые не будут видны - это ноги, торс, грудь, надплечья. Мы решили оставить руки по шов развертки. Переходим в скин тела - удаляем лишние кости - ноги, спина и прочее. Оставляем только те кости, которые отвечают за деформацию рук и пальцев. Все тоже самое проделываем для единички.

Теперь, что касается текстур - текстурами занимается Кристина, от меня требуется лишь дать ей карту нормалей. Сразу предупрежу, что там нужна не Tangent normal Map, а Objetct Normal map. Первая такого синеватого оттенка. Чтобы сделать карту нормалей, нужно импортировать тело в zbrush, увеличить количество сабдивов - потом, если конечно нужно, поработать с геометрией - добавить ребрышки видимые, возможно шрамы, мелкие впадинки и прочие мелкие выступающие части тела. Короче, проработать его как следует.  Сделать более реалистичным - добавить складочек, выемочек, прочего. Затем нужно перейти на первый сабдив - вернуться к исходному телу. Суть то запекания в следующем - берется проработанное хайполи тело, и такое же лоуполи тело, задается размер карты, и после старта, высокополигональное тело как бы проецируется на низкополигональное. Но проецируется хитро - в текстуру записывается как бы разница между высотами детального и недетального тела.
Кто не понимает объясню на простом примере. Есть ровная дорога и та же самая дорога, но с холмом посредине. Один в один дорога. Но есть в одном месте возвышенность. Так вот, можно сказать, что вторая дорога, есть суть первая, но в точке с координатами 1;15 она поднята на 10 единиц вверх, в точке с координатами 1;18 она поднята на 18 единиц вверх, в точке с координатами 1;21 она поднята на 4 единиц вверх. Ну и так далее. Так вот вся информация о месте расположения точки (координата) берется из текстурной развертки объекта, а степень искажения записывается в виде цвета RGB. RGB - красный, синий, зеленый канал - по сути XYZ координата смещения по высоте, относительно исходной (низкополигональной) модели (максимальное число 255;255;255 - то есть максимально точно можно передать смещение на 255 единиц по любой оси, относительно оригинала). Таким образом процессору дается низкополигональная модель для просчета перемещения, а высокополигональная геометрия отображается в виде текстуры видеокартой. Ну как-то так, если на пальцах объяснить. Я уж не знаю куда проще. Чем выше нужна степень детализации, тем больше размер текстуры нужен. Ну и соответственно нужно чтобы лоу поли тело максимально точно повторяло хайполи.
Скайриму нужна карта нормалей, если выводить из Zbrusha, с повернутыми каналами G и B, кажется еще и нужно сделать SwitchRG каналы, но даже если вы забыли поменять каналы местами при выводе, не отчаивайтесь - все можно поправить в фотошопе.

Комментариев нет:

Отправить комментарий