Записи, помеченные ‘’

Project Jealousy #1. Генерация портретов персонажей.

Воскресенье, 6/09/2009

Новости

Как я уже писал в “Project Jealousy #0“, я программирую 2D Tactical RPG. Основная механика хождения группы по пещерам, стрельба и освещение работают почти хорошо, поэтому теперь первостепенной задачей стал моск/разум существ. Сейчас я пишу скриптовый язык (NV-script) для программирования логики мобов, мувиков + кое-каких дополнительных возможностей (программируемый игроком робот !! А-а-а !!). Ботаю книжку Programming Language Pragmatics. Иногда хочется просто отвлечься от постоянного переписывания парсеров и лексеров, и сделать что-то существенное и интересное.

Портреты персонажей

Очевидно, маленькие персонажики 16 на 16 пикселей, пусть и увеличенные (x2) - это несколько недостаточно для создания атмосферы игры. Конечно, можно привести в пример rogue-like игры, но навязанный минимализм и культура рогаликов - это несколько не мое, поэтому я решил сделать портреты персонажей. Идея отличная, но чтобы нарисовать десятки или даже сотни портретов, надо искать художников, которых у меня наберется всего-то в количестве 0.25 человек. Что делать?

Кстати, три классических вопроса русской интеллигенции: Что делать? Кто виноват? И кто взял мои очки?

Итак, поскольку я планирую генерировать максимально возможное число игровых сущностей, почему бы не генерировать и портреты за одно? Предположим, что портрет должен выглядеть так:

Основная идея - это разделение картинки на составные части: 1) овал лица, 2) глаза, 3) нос, 4) губы 5) волосы (прическа). Заменяя любую из частей лица, мы получаем уже другой внешний вид, другого персонажа. Достаточно даже всего четырех вариантов лиц, глаз, носов и т.д., которые дадут 4^5 = 1024 разных лица. Может быть, они и будут не сильно одушевленно и выразительно выглядеть, но в качестве фотографии на паспорт сойдут. Плюс, наличие персональных лиц позволяет сделать дополнительные приколы с полицией, ищущей опасных преступников по фотке, баунти-хантинг и т.п.

Не забываем, что цвет кожи, волос, губ, глаз можно так же сделать переменными. Это позволяет сделать число вариантов практически бесконечным.

Механика

Каждая черта лица представляет собой последоватльное наложение белой основы, (если надо: лицо, прическа, губы), тени и контура (опять же, если надо). В показанных в этой статье картинках такой контур используется для глаз, бровей и носа, а обводка на лице - это часть “белой основы” (методика пока не отработана и изменения еще будут).

Каждая картинка обрабатывается фильтром (red, green, blue, alpha) и наклеивается на идущую перед ней. Полный нераскрашенный портрет выглядит так:

Отдельные части лица приведены на следующем рисунке в порядке их наложения. Пометка “shadow” означает, что картинка является тенью - как правило он выводится полупрозрачной (0.0 < alpha < 1.0).

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

Пока показан только один тип лица, и все различие сведено к раскашиванию.
В целом, кажется, что получается довольно неплохо.

Из плюсов таких портретов:

  • Разнообразие лиц
  • Похожий стиль каждого изображения
  • Меньше работы художника
  • ?
  • Профит

Из минусов, очевидно:

  • Разнообразие возможно только в допустимых перделах
  • Шаблонные лица - отсутсвие уникальности героев
  • Дополнительная сложность рисования, необходима совместимость различных черт лица между собой
  • Что-то еще, что может пофейлить идею

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