«Скажи мне, Люк, — ты мне жук?» © Неизвестный.
Если кратко
В прошлый раз поведал я про идеи для ИИ, хотя правильнее будет называть это не «искусственный интеллект», а «бот» — от «болванчик».
Мне не всегда нравится, когда в Develop-версии бегают всякие одноцветные кубики, которые символизируют что-то. По этой причине решил я замоделить одного жука. Надеюсь к прототипу номер 3 будет их несколько, но если не получится, то будет только он.
Будет несколько скриншотов-этапов моделирования.
Навигатор
Предыдущий | Сборник | А теперь…
Ближе к теме
Для начала скажу, как всегда в теории бот работает нормально, а на деле — когда как. Вина это моя или, скажем, движка и его внутреннего кода, но по непонятным причинам он даже не может сделать правильный рейкаст. Вообще жук пока бродит как надо, но когда я решил сделать проверку «в лоб», то оказалось, что работает он не так стабильно как хотелось. Надо будет долго сидеть и смотреть что там происходит — ни рейкаст, ни sphere-cast не находит пересечений там где они есть и наоборот — где пустынное поле внезапно он сигнализирует, что мол есть коллизия — странный какой-то.
Ну а теперь уж точно ближе к теме!
Скульптинг
Вообще это где-то моя вторая попытка подойти к скульптингу в Blender'е, да и вообще ко всему этому. Сразу должен сказать, что без планшета создание скульптур было бы похоже на пытку и в результате получилось бы что-то очень плохое. Но не планшет «рисует» за художника, поэтому я не удивлюсь, если есть мастера, которые мышкой делают шедевры.
Как и в обычном полигональном моделировании всё начинается с куба. Затем простыми модификациями сетки сделал что-то вроде супер-лоу-поли бланка для головы жука. К сожалению у меня не сохранились этапы этих работ, поэтому могу показать только результат в виде готовой скульптуры жука:
Для скульптинга в блендере есть пара вариантов ( а может и больше ) — Dyntopo и через модификатор Multiresolution.
Первый видоизменяет сетку путём добавления новых треугольников при этом модель остаётся «как есть».
А вот со вторым я работал впервые и он идёт другим путём — что-то вроде комбинации модификаторов Subdivide и displacement — сетка модели подразделяется т.е. увеличивает число полигонов в зависимости от исходной сетки, затем кисти могут модифицировать полученную подразделённую сетку ( с обычным Subdivide такое не прокатит ). Модификация скульптингом сохраняется не как отдельная модель, а в виде «сдвигов» — зачем это надо? А вот тут особый плюс от Multiresolution — можно переходить между «уровнями» детализации и даже больше — редактировать исходную сетку.
Лоуполи или ретопология
Данная «скульптура» не годится для игр в реальном времени и я думаю это очевидно — больше кол-во полигонов. Поэтому надо было сделать низко-полигональную модель. Хорошо, что в Blender'е есть особые функции, которые позволяют «привязать» вершины к поверхности объектов. Это конечно не инструмент ретопологии как в 3DCoat, где необходимо по сути просто «тыкать по модели» для создания новой сетки поверх существующей, но тоже облегчает жизнь.
Когда лоу-поли сетка была готова, то принялся я и за создание UV-развёртки — поступил как всегда:
1. Наметил грани-швы.
2. Нажал на U — Unwrap UV.
3. Всё готово, но можно чуть подредактировать.
Затем сделал «запекание»( bake ) карт нормалей ( Normal Map ) и AO (ambient occlusion). Настроил тест-материал и вот как это выглядело:
Затем повторил всё аналогично для других частей жука — тушки, лап (на самом деле одной) и «днища».
Сделал ещё тест-материалов т.к. для каждой часть надо свой и чуть позже объясню почему.
В результате получился вот такой вот жук:
Добавил пару новых текстур, изменил материал и нарисовал подобие Hand-Painted текстурки:
"… Эй! Погоди! Ты же как-то говорил только про текстуры нарисованные вручную и без всяких карт нормалей! Что это ты удумал!?"
Да, изначально я планировал использовать исключительно Hand-Paint Textures, но затем я осознал\вспомнил, что с картами нормалей это могло бы выглядеть интереснее. Учитывая, что технология позволяет (Unity), то почему бы это не использовать? (хотя появилась у меня одна проблема со specular map)
«Ты что-то говорил про отдельные материалы — дак что там?»
Отдельные материалы (и сама сетка) не спроста появились. Дело в том, что планировал сделать некий BugBuilder( да, автоматически создаёт ошибки на ровном месте! Это будущее программирования! ). Задача это «строителя» в очевидном — строить, но не здания, бункеры или компилированный код, а жуков из заранее определённых частей.
Думаю такая концепция знакома многим — имеется анимированный скелет и на него надеваются различные «шмотки», а в данном случаи части жука, при этом со своим материалом. Это позволить внести некое видовое разнообразие в рамках одного типа врага — жука. Конечно будут и «пресеты»\префабы с готовыми типами, например, вот данного жука я назвал Chacaga (не знаю почему, но созвучно с Чикаго).
Вернёмся к самой модели жука.
Риггинг и анимация
Опять же это вторая работа, но уже с риггом т.е. настройкой костей, различных вспомогательных штук и подготовка к анимации.
До этого игрался с риггом человека ( в блендере есть некий meta*-rig — по сути готовый скелет с настройкой для человекоподобных персонажей ), который я всё же хотел построить сам и тут мои небольшие знания пригодились, хоть жук — не человек.
Сделал скелет, задал некоторых костям constrains для inverse kinematic, короче было даже весело, ведь это не человек, а что-то другое.
Попрактиковался в задании костям произвольной геометрии, которая иногда помогает лучше разобраться и управлять этим всем.
Когда разобрался с этим, тогда пошёл цеплять сетку к костям. И пришлось мне это делать трижды: голова, тело и «лапы».
Протестировал как там всё зацепилось:
Затем предстоял очень сложный момент — анимация.
Наверно кто-то помнит мою плохую анимацию пчело-осы. Жук не стал исключением и она аналогично плохо выглядит :D
Как же я намучился с анимацией «ходьбы» — сначала он ходил как «робот-солдат», затем он был дёрганым и только на третий раз у меня получилось что-то сделать похожее на передвижение жука.
Набор анимаций для теста был очень скуден: «ожидание» и «ходьба».
Нет «атаки», «смерти» и каких-либо дополнительных анимаций.
<< Тут должно быть либо видео, либо gif, но не будет, лол >>
Как это выглядит в игре
Собственно, когда была готова модель, текстуры и анимация, тогда я сразу перекинул всё это дело в проект Unity. Уже был написан небольшой скрипт для ИИ, но не полный функционал конечно.
Они бродят то туда, то сюда, при этом проигрывается анимация, казалось бы всё хорошо…
Но жуки решили, что физика им не писана и решили немного «Harlem Shake» устроить.
А вот это дебаг-вид:
Можно заметить, что жуки таки рвутся размножаться :D
Что дальше?
Дальше больше! Или меньше.
Сейчас стараюсь сделать новую модель Люка, но что-то она не нравится мне. Собственно 100% будет подобный лог о модельке Люка (если вообще закончу его).
Ещё хотел чего-нибудь по локациям в общем и про первую локацию в частности.
Конечно поработать ещё с ИИ, сделать лут и прочее, но это наверно уже совсем другая история :)
Всем мир, чуваки!
Пфф, да кому нужны эти логи?! ТАМ Е3 ИДЁТ!!!
* Деятельность организации «Meta» признана экстремистской и запрещена на территории Российской Федерации
Лучшие комментарии
Как же долго всё это рисуется, а с учётом, что сцена из одного жука состоит. Как люди вообще выдерживают рендер коротких мультов?) (я про любителей, а не крутые студии)
А тем временем всё сделано! Ну или почти всё. Не сделал элемент с «бледнером» — только крутящийся жук :D
stopgame.ru/blogs/topic/63466
Или хочется именно в игровой среде посмотреть? Там плохо видно анимацию (
Думаю ещё разбавить «внутрибленеровским захватом» т.е. показать сетку, риг и может ещё чего) Если успею конечно, ведь планирую вечером новый пост\статью\не_лог\тему опубликовать.
Уже скоро вечер, а рендер ещё неготов :/
Разве что если нужен элемент, где появляется сетка, текстура и «кости» — наверно было бы интереснее. Да, думаю смогу сделать так что ждите :)
А пока можете вот тут лайки наставить vk.com/wall-1750347_2274
Проект участвует в одном конкурсе и это один из этапов — сбор «одобрения», можете даже расшарить всё это дело)
*всем нужны лайки и плюсы*
Ну вообще я обещал, что вечером выложу ролик — надо слово держать :)