King, Witch and Dragon. Devlog #2

В прошлом девлоге я показывал 2D концепт-арты главного героя и его способностей для моей "метроидвании наоборот", теперь пришло время посмотреть и оценить, как это всё получилось в 3D. В этот раз будут GIF-ки и в конце небольшой опрос.

В закладки
Аудио

Болванка гуманоида

В начале работы я решил сделать универсальную болванку гуманоидного персонажа, на основе которого впоследствие можно было бы делать всех антропоморфных персонажей.

Покопавшить в архивах polycount wiki, я нашёл подходящий референс, а также несколько полезных статей по топологии.

Ещё одним интересным челленджем было освоение Blender'a. Лет 10 назад, когда я начал увлекаться 3D-моделированием, Blender был... ну скажем так, "странным". Потом я надолго забросил увлечение 3D графикой, но с недавним релизом версии 2.8 захотелось снова "пощупать" Blender и вот появился хороший повод.

После пары вечеров тягания вертексов получилась вот такая болванка:

Выглядит не очень впечатляюще, но в качестве болванки вполне сойдет.

Модель ГГ

После этого логичным шагом было создание модели главного героя, на основе той самой болванки. Целью было вписаться в бюджет из 10.000 треугольников (не полигонов/квадов/N-гонов, а именно треугольников).

Как видите, я почти уложился в указанный лимит. Лишние 150 треугольников, в данном случае, погоды не сделают.

Развёртка и текстура

При создании моделей для игр, очень много памяти "съедают" текстуры. Для моделей в ААА-играх вполне могут использоваться несколько текстур размером 2к или 4к (Diffuse map, Normal map, Specular/Glossiness/Roughness map и т.д. и т.п.). Я решил поставить себе цель использовать минимум текстур минимального размера.

Так как персонаж будет занимать не очень много места на экране (примерно 1/8 по высоте), а также в качестве визуального стиля выбран cel-shading, то это сильно облегчает задачу. Во-первых не нужна излишняя детализация, потому что её всё равно никто не увидит на персонаже такого размера. Цел-шейдинг подразумевает "плоский" свет и тени без плавных градиентов, т.е. по сути, это заливка разных элементов разным цветом.

Я также решил полностью отказаться от карт нормалей (Normal map) и карт бликов (Specular map) и добиваться нужного мне результата с помощью самописного шейдера, который вместо текстур использует цвета вершин модели (vertex colors). Об этом шейдере я уже написал подробную статью

Чтобы совсем не потерять детализацию при подобном подходе, я использовал приём показаный на GDC техническим художником, работавшим над серией Guilty Gear. Он делает текстуру и развертку особым образом, чтобы получать очень чёткие неразмытые чёрные линии на модели, которые используются для имитации швов, затенённых зон и просто "внутреннего контура":

И последний момент, который я учитывал на этом этапе, это то, что модель главного героя, модель оружия и модели для всех его способностей (крылья летучей мыши, паучьи лапы, щупальце и змея) должны использовать один и тот же материал, чтобы отрисовываться в один проход (draw call). По факту отрисовывается в 3 прохода: основная модель, контур и отбрасывание теней, но это уже особенности шейдера.

По факту я рисовал не текстуру, а атлас для всех моделей. В итоге у меня получилась

1 текстура, размером 8х16 пикселей и объёмом 384 байта

Текстура, увеличенная в 900 раз. В оригинальной текстуре каждый квадрат - это 1 пиксель.​

На текстуре можно увидеть несколько "зон". Левый столбец - это "палитра" самого персонажа. В цетре 4 вертикальных группы пикселей - "палитры" способностей". В правом столбце "палитра" оружия. Столбцы разделены черными пикселями, чтобы иметь возможность делать развертку с черными линиями, как показано на GIF выше.

Все модели, которые будут показаны ниже используют один и тот же материал с одной лишь этой текстурой.

Главный герой

Оружие - Коготь

Крылья летучей мыши (двойной прыжок)

Паучьи лапы (карабканье по стенам и потолку)

Щупальце (grappling hook)

Змея (бросок)

Что дальше?

Теперь можно сказать, что этап моделирования и текстурирования закончен. Следующим большим шагом будет риггинг, скининг и анимация всего этого добра, чтобы посмотреть на него в действии. Да-да, геймплейные видео и GIF-ки уже не за горами :)

И ещё один момент...

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

Если вам понравилась игра, где бы вам было наиболее удобно следить за ней?
Тут на DTF
Группа VK
Страница на Facebook
Twitter
Instagram
Telegram-канал
Discord-сервер
Другое (напишите в комментариях)
Показать результаты
Переголосовать
Проголосовать

Я уверен, это не только мне будет интересно и полезно, но и другим инди-разработчикам, которые хотят продвигать свои проекты в массы.

Ну а пока, если вам интересен проект, подпишитесь на меня в Instagram и Twitter, а также вступайте в группу VK, в которой я публикую апдейты, материалы и WIP'ы, по проекту до того как они попадают сюда.

Спасибо за внимание!

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Андрей Торчинский", "author_type": "self", "tags": [], "comments": 19, "likes": 27, "favorites": 29, "is_advertisement": false, "subsite_label": "indie", "id": 99569, "is_wide": false, "is_ugc": true, "date": "Mon, 03 Feb 2020 08:21:17 +0300", "is_special": false }
0
{ "id": 99569, "author_id": 25031, "diff_limit": 1000, "urls": {"diff":"\/comments\/99569\/get","add":"\/comments\/99569\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/99569"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64960, "last_count_and_date": null }
19 комментариев
Популярные
По порядку
Написать комментарий...
13

Кодишь, моделишь, анимируешь, ригаешь.
ты вообще человек?)

Ответить
14

Всесторонне недоразвитый (с)

Ответить
0

а есть свой список курсов, видео, гайдов, по которых вы учились делать модели, ригать, текстурить и т.д. ??
всегда хотелось научиться, чисто для себя, как хобби
но максимум пока хватило на такую болванку, которую не смог доделать до конца из-за недостачи свободного времени и знаний

Ответить
4

Ну мне хватило вот этого плейлиста, чтобы стартануть в Blender’e - https://www.youtube.com/playlist?list=PLa1F2ddGya_-UvuAqHAksYnB0qL9yWDO6

А дальше это уже опыт, метод проб и ошибок и изучение туториалов по конкретной теме. В наше время на YouTube столько доступного материала, что всё пересмотреть жизни не хватит. Единственное, что я бы отметил, так это что самый качественный контент в англоговорящем сегменте. На русском материала немного и большая его часть ну такое. 

Ответить
0

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

Ответить
1

без развертки далеко с покрасом не уйдет.

Ответить
0

Я бы не сказал, что для развертки нужны особые знания, на крайний случай AutoUnwrap (забыл уже как называется) из блендера поможет.

Ответить
0

Сильно сомневаюсь, что он качественно развернет комплексные формы

Ответить
0

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

Ответить
0

ну если ты размечаешь швы, это не то чтобы уже авторазвертка)
я думал имелось в виду "нажал кнопку -  готово" +)

Ответить
0

ну тут все таки не хватает еще многих деталей, которые иногда имеют сложную форму, например не хватает частей, которыми катки гусениц должны крепиться к корпусу (на фото катки просто висят в воздухе) ... и я не смог понять, как их сделать, чтобы было мало полигонов, не хватает знания всех модификаторов и того, какой должна быть правильная топология

Ответить
0

"Если вы плохой программист и плохой художник, то вам остается только стать гейидизайнером"(с) Ричард Гэрриот 

Ответить
5

Дети против Волшебников, но теперь это инди-игра.

Ответить
5

Признайся, глубоко в душе вы все этого ждали и надеялись ;)

Ответить
1

Вещи выглядит нормально (а меч даже круто), но персонаж — крипово D:

Ответить
0

Выглядит как гульман, но всё равно автор красавец!
Человек оркестр, так сказать.

Ответить
1

Вписали в один пантеон с "Дети против волшебников" и "Гульмэном". Казалось бы, о чём ещё можно мечтать? XD

Ответить
0

Змея выглядит очень странно.
Может, это исключительно из-за ракурса, но выглядит, будто брюхо у неё занимает около 30% площади тела, а не половину.
Эдакая полоса снизу, вместо половины тела.
А остальное выглядит неплохо, детализировано и со стилем.

Ответить

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovz", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "chvjx", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } }, { "id": 20, "label": "Кнопка в сайдбаре", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "chfbl", "p2": "gnwc" } } } ] { "token": "44678009-4347-4bab-9ecf-be51c91ed90c", "release": "c0d1b4db" }
{ "jsPath": "/static/build/dtf.ru/specials/DeliveryCheats/js/all.min.js?v=05.02.2020", "cssPath": "/static/build/dtf.ru/specials/DeliveryCheats/styles/all.min.css?v=05.02.2020", "fontsPath": "https://fonts.googleapis.com/css?family=Roboto+Mono:400,700,700i&subset=cyrillic" }