Как стать автором
Обновить

233 орешка для Золушки: отбираем цвета для «идеальной» палитры

Время на прочтение13 мин
Количество просмотров20K
Всего голосов 65: ↑61 и ↓4+57
Комментарии43

Комментарии 43

У меня ASCII графика всегда вызывает теплые воспоминания о Turbo Pascal 6.0 =)
А у меня воспоминания о тёплом ламповом Бейсике с зелёной псевдографикой на чёрном экране.
Делаю в игре зеленый спец. режим:
Спасибо! :)
А саму игру можно увидеть?
Да, вот на Стиме:
Proto Raider
Вопрос немного не по теме, но почему решили работать со стимом через издателя, а не самостоятельно?
Первый раз тогда выходил на Стим — сам побоялся. Теперь планирую самостоятельно.
А издатель как-то финансировал разработку?
Нет
> Существует известная палитра, в которой компоненты насыщенности и яркости вытянуты в одну линию.

А существует ли для этой палитры раскладка RGB цветов для элементов дискретного пространства? Или может быть там как-то алгебраически можно рассчитать цвет?
Палитра устроена так:
  • Hue меняется по горизонтали от 0 до 360 градусов
  • Saturation — уменьшение вверх до 0
  • Brightness — уменьшение вниз до 0

Далее, HSB в RGB можно перевести так:
Ссылка
Расскажите, пожалуйста, как у вас устроены сами спрайты? Это именно спрайты, то есть картинки, которые вы рисовали в фотошопе, люстре или чём там и потом вставляли в движок, или используется какой-нибудь аналог curses с честным выводом текста?
ASCII спрайты — это честные символы с дополнительной информацией о цвете каждого. Спрайты я делал в обычном текстовом редакторе с моноширинным шрифтом. Выводятся в игре они уже движком, посимвольно с помощью шрифта, который можно выбирать. Вот, например, как храниться спрайт:
javascript
var bossDoctor = {
	frameTime: 500,       // Duration of one frame in msec.
	sprites: [[                  // Array of frames
		".--.",                // Each frame is array of regular strings
		"'oO'",
		' "| ',
		"/[]|",
		" TT "
	],[
		".--.",
		"'Oo'",
		' "| ',
		"/[]|",
		" TT "
	]],
	colorsPattern: [[  // Array of colors of frames
		"wwww",      // Each frame is an array of regular strings
		"wggw",      // Characters in the strins are indexes of colors from "colorPresets"
		" g. ",
		" aa ",
		" ss "
	],[
		"wwww",
		"wggw",
		" g. ",
		" aa ",
		" ss "
	]],
	colorPresets: {			// Colors indexes
		"a": "888888", 
		"s": "FF4400", 
		"g": "00CCFF", 
		"w": "FFFFFF", 
		".": "444444"},
	defaultColor: "FF8800"		// Default color for spaces in "colorsPattern"
}

Очень приличная палитра. Жаль, что не вы создавали палитру для xterm. В то время не заморачивались и тупо порезали RGB-пространство на равномерные куски. В итоге номинально там 216 цветов, но половина из них сливается между собой и практически полностью отсутствуют темные тона. В консоле цвета — это боль…
НЛО прилетело и опубликовало эту надпись здесь
Смахивает на знаменитое «озвучено лучшими программистами» ©
Профессиональными.
И я так же делал, когда с VGA игрался: 16 основных цветов для совместимости + куб 6х6х6. Многие простые игры такую палитру использовали. Ещё нравился вариант 8х8х4 (по 3 бита на красный и зелёный, 2 бита на синий). Очень удобно для приближённого представления произвольного цвета, например, для вывода фотографий на экран.

Понимания, что для многих задач лучше и естественнее использовать HSV в качестве универсальной палитры, а не RGB, у меня тогда ещё не было. Да и негде было посмотреть: не то, что интернета — телефона не было.
Похожая работа для палитр в 16 и 32 цвета:
http://pixeljoint.com/forum/forum_posts.asp?TID=12795
http://pixeljoint.com/forum/forum_posts.asp?TID=16247
Спасибо вам огромное за статью! Делаю на данный момент небольшую игру в ASCII-art и проблема с созданием палитры встала уже давно.
Очень красивая палитра! В своё время я пытался собрать палитру из предопределённых цветов PANTONE в фотошопе, но безуспешно, а готовые наборы были либо чересчур объёмные, либо просто (субъективно) некрасивые. Тут всё же нужен талант художника, чтобы комбинировать цвета исходя из их эмоционального восприятия, а не численного описания.
Спасибо!
Я в Winter Novel использовал только 16 цветов, т.к. изначально движок был только консольным и изображение выводилось в системный терминал. Палитра терминала Windows, кхм, не очень подходит для вывода таких картинок. Поэтому в OpenGL каждый цвет потом уже вытягивали вручную. И если зелёный/синий смотрятся ещё нормально, то красный/оранжевый так и остались излишне попугаистыми. Наверное, стоило изначально отказаться от Windows терминала и использовать большее количество цветов…
image


Кстати, а почему Proto Raider распространяется только под Windows? Если движок написан на JS, то вероятно его будет не сложно портировать под другие платформы.
Proto Raider еще на старом движке написан, что позволило запустить его только под Windows и iOS. Сейчас перехожу на Cocos2d-js.
Ох уж эта живучая легаси формула… Прочитал вашу статью и сразу о ней вспомнил :)
Там очень много толковой информации, возможно будет полезно при апгрейде вашей палитры.
Да, я привел ее с оговорками, не вдаваясь в подробности т.к. конкретные числа не принципиальны ввиду последующей ручной подборки цветов «на глаз».
Да и гамма-коррекцию стоило бы упомянуть вместо магических коэффициентов 0.15 и 0.7.
В принципе, можно было бы упомянуть, согласен.
Тоже вспомнил про эту статью.
Действительно, старые заблуждения могут жить вечно.
Как по мне Золотой цвет однообразен, предлагаю его в ручную пересмотреть, а после пускать эту палитру в массы, ибо действительно хорошо составлена.

P.S. Такие игры веют гиговской ноткой, и это хорошо. Хочется добавить, что неплохо поддержку 2К — 4К дисплеев и под них режим, где большинство уровней сразу на экране. Как на обоях, что в Facebook выложили.
Спасибо! Попробую поработать над золотым.
Забацал вот такой генератор:
https://htmlpreview.github.io/?https://github.com/e673/vga-palette-gen/blob/master/color.html

Видно сильную нелинейность цветового пространства LAB, особенно в синих тонах.

P.S. По рукам не бейте — я на JS вообще не умею писать.
Я только хотел про LAB написать, а вы уже готовый генератор сделали! LAB довольно интересное пространство.
А почему не стали игру делать кроссплатформенной? Пользователи *nix обычно с удовольствием покупают такие игры, а так вы потеряли часть доходов, может и не так уж много, но все же. Или есть трудности в реализации кроссплатформенного решения которые не видно на первый взгляд?
Игра Proto Raider запущена на Стиме и iOS т.ч. он кросплатформенная. Другое дело, что платформ могло быть и побольше. Все дело во времени. Такие игры не приносят прибыль — это как хобби. Поэтому сложно иногда выделать время.
А на каком языке игра написана? Java же вроде дает кроссплатформенное решение сразу? Я чайник =) могу и ошибаться =)
Это я следующую игру на Cosos2d-js пишу, а та игра была написана на самодельном движке.
По теме статьи: мне кажется, стоит использовать разные корректировки насыщенности и яркости для левой и правой частей получившейся палитры.

Или, возможно, просто уменьшить количество оттенков зеленого, если мы его так плохо различаем.
Да, для зеленого тона и некоторых других, плохо различается насыщенность. Как не корректируй — ничего не помогает. Действительно, единственным способом решения проблемы является уменьшение количества градаций насыщенности. Но это испортит визуальную структуру палитры — будут дырки. Вот я и на распутье. Но скорее всего я таки «продрежу» палитру.
Просто замечательная статья и очень крутая графика в играх (как бы парадоксально это не звучало для графонозависимых).
Спасибо!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории