Советы по работе с текстурами

Во время работы над игровой графикой накопились небольшие мысли, которыми хотелось бы поделиться, как советами для новичков. Опытные художники точно знают все эти нюансы — или уже успели себе четко сформулировать, или чувствуют интуитивно из-за набранного опыта.
В прошлом туториале я очень кратко показал, как можно использовать кисти для рисования крупных объектов. К счастью, ZX-Spectrum обладает очень низким разрешением, что делает невозможной работу кистями на мелких деталях без увлекательного соревнования в мелких деталях, поэтому я бы хотел дать пару советов по поводу совмещения мелких объектов и текстур. Заодно здесь же дам пару идей, почему и как конвертер неизбежно выдаёт уродливый результат.




Применимость текстур к объектам разного размера


Итак, в туториале по реалтайм работам я остановился на том, что набросок, сделанный кистями, необходимо допиливать вручную. Почему? Тезисы:
1. Чем мельче объект, тем меньше разнообразных текстур на него влезет.
2. Чем мельче объект, тем мельче должна быть решетка тектуры.

Давайте приведем пример. Возьмем четыре нетекстурированных шара разного диаметра.



Для начала попробуем взять самую мелкую текстуру — 1/2, где каждый второй пиксель проставлен. Попробуем поставить примерную тень:



Всё выглядит отлично. Даже минимальный шар 11 диаметром в 8 пикселей выглядит весьма сносно. Причиной этому — мелкая «ячеистость» текстуры. Текстура 1/2 повторяется каждые 2 пикселя, поэтому, если мы текстурируем шарик 8 пикселей в диаметре, детальности текстуры хватает, чтобы не слишком портить контуры.
Теперь добавим еще разновидность градации — текстуру 1/4, как с темной, так и со светлой стороны.



Что произошло?
Шарик 21 — справа потерял свою форму, вытянулся, так как черная текстур 1/4 попала на край. Слева светлой текстурой 1/4 не удалось сделать правильную форму тени, из-за чего он стал визуально более плоским, как пуговица.
Шарик 22 — на грани фола. Размеров почти хватает, чтобы передать форму тени, правый край практически хорош, кроме нижней обгрызанной части.
Шарик 23, 24 — размеров шарика прекрасно хватило — толщина перехода больше, чем толщина (разрешение) узора текстуры.

Усложним. Внесем еще одну градацию в темном и светлом переходе.



Шарик 31 — размеров шарика не хватило, чтобы добавить новую текстуру. Некуда, fail.
Шарик 32 — дополнительная текстура разорвала контуры тени, сделав их зазубренными. Опять же не пойдет.
Шарик 33 — на грани фола. Правый край выглядит приемлимым, но неаккуратным.
Шарик 34 — в целом хорош.

Какие выводы можно сделать?
1. Для тонких деталей берите тонкую текстуру. Нарушения этого правила ведут к мусору и шуму.
2. Чем тоньше тень, тем меньше переходов в неё влезет.

Обратные выводы:
1. Чем крупнее объекты на картинке, тем плавнее переходы можно впихнуть без попиксельных страданий. Пользуйтесь этим на пати, если хотите взять место.
2. Чем крупнее объекты, тем разнообразнее текстуры. То есть, картинку с мелкими объектами сложнее сделать зрелищной, чем с крупными.

Почему конвертер даёт убогий результат.

Конвертер умеет применять только фиксированное количество текстур на всю картинку. Художник, в отличие от конвертера, умеет разделить картинку на составляющие, и для разных объектов использовать разные текстуры. Скомбинируем разные шарики с разным количеством текстур, как это умеет делать живой человек, и как не умеет делать конвертер.



Шарик 41 — одна текстура, отлично.
Шарик 42,43 — две текстуры — хороший компромисс между плавностью и аккуратностью
Шарик 44 — три текстуры — приятный переход, ничего не потеряли.

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

Текстура текстуре рознь.


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



Разница в точке начала отсчета текстуры. У первой текстуры пиксели идут белый/черный, а у второй — черный/белый. Мелочь, правда? Но попробуем наложить её на вот этот вот шарик, сделав ему небольшое затенение справа снизу.



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



Первый — оригинал. Второй — левая текстура, третий — правая текстура. На втором шарике текстура попала красиво, не придерешься. На третьем — катастрофа. Попробуем еще один надуманный пример — сгладим тень на верхней и левой кромках.



Сложно определить, какой вариант вышел лучше. Чего мы хотели добиться? Мягкости или остроты контуров? Левая текстура дала в сочетании с этим конкретным контуром остроту, правая — мягкость.

Отсюда еще один нюанс про конвертер. Если художник действует, исходя из каждой конкретной детали и выбирает позиционирование текстуры, более подходящее каждому объекту, то математическая точность алгоритма ordered dithering не имеет вариаций и портит четкие детали. Более того, в некоторых случаях художник может скомбинировать обе текстуры в одном и том же объекте, если они не пересекаются. Конвертер в подобной ситуации запорет или одну, или вторую сторону, как было с шариком номер 3 из примера.

Мой вывод — если хотите настоящей пиксельной графики по всем канонам, то рисуйте сами, выкиньте конвертеры и алгоритмы и засучите рукава. Надо раздеваться и работать.

27 комментариев

avatar
Отличный туториал. Все так и есть.
Художник разделяет объекты, планы, видит форму, расставляет приоритеты — что важнее детализировать, а что достаточно изобразить произвольным пятном. Конвертор не различает ничего.
avatar
как жаль, что я не конвертер(
avatar
Еще-еще, больше давай!!! Очень классно!
avatar
Хм. А если сначала сделать определение контуров, а затем подбирать те текстуры, которые лучше эти контуры сохранят? Компьютер вполне с этим может справиться, вроде?
avatar
Направление мысли верное, но, чтобы догнать человека, потребуется искусственный интеллект. Слишком много нестандартных решений делается в процессе прямо исходя из конкретной ситуации, формализовать эти правила в программу нереально.
avatar
10 баллов из 5! Кто уже много чего попробовал рисовать конечно знают, но не всегда могут объяснить. Живые примеры наше всё! Особо про начало отсчёта текстуры порадовало! Правда когда рисуешь картинку целиком происходит не подгон текстуры под картинку а наоборот подгон картинки под текстуру, иначе текстура рвано смотрится и глаз режет. Если будет время добавь об этом плз. Как начинаешь рисовать текстурами с разной точкой отсчёта и потом в одном из знакомест они соединяются и получается либо пофиг оставляем так, либо переделка одной из частей под общую точку отсчёта.
  • TmK
  • +4
avatar
О дааа, стыковка двух текстур с разной точкой отсчета — это ппц. Я сперва какие-то части перерисовывал, но обычно это только при доработке конверсии такая проблема ну или при текстурировании разными цветами. Сейчас я обычно при ручном текстурировании всегда сверяю точку отсчета от левого или правого верхнего угла знакоместа, чтобы потом не расстраиваться при стыковке текстур на соседних элементах.
avatar
Я в таких случаях веду «текстурный мостик» от элемента к элементу, а потом стираю его :)
avatar
Даааа!
avatar
Насчет подгона картинки под текстуру — не совсем согласен, это у кого как :)
Я раньше тоже фанатично подгонял всё под математическую текстуру, а потом в какой-то момент начал менять текстуру в угоду картинке. То есть, если детали страдают оттого, что я «не могу» поставить пиксель мимо текстуры, то правильностью узора можно пожертвовать. Тот же MAC вообще из строгих текстур 1/2 только использует, остальное — как удобнее. Может, это и правильно, кстати, так для чистых деталей намного больше возможностей получается.
avatar
Ну вот смотри…

Все что ты написал в своей статье верно и в пиксельной графике эта штука называется «dithering» (то есть получение дополнительных псевдоцветов при использовании ограниченной палитры). Но dithering, это лишь метод, а текстура это инструмент для его получения и этот инструмент может быть совершенно разным по внешнему виду. Конечно вариант основанный на стандартной «сетке», которым пользуются большинство, выглядит наиболее аккуратным. Но ведь никто не запрещает пользоваться другими видами текстуры, при создании dithering'а. Просто хаотично расставленные точки, смесь их и обычной сетки (как у MAC), всевозможные квадратики/кружочки вырезанные в сетке (многие такой штукой занимались с разной переодичностью), мелкие пятна разных размеров и форм (у меня подобное неоднократно было и у tutty нечто подобное), прямые вертикальные/горизонтальные линии и тд и тп. И я, обычно, пользуюсь несколькими вышеописанными вариантами даже в пределах одной работы. Где-то чтобы мелкие детали или выверенный контур сильно не искажать, где-то просто в декоративных целях.

Но! Все это очень и очень индивидуально!
Тебе, например, может претить использование больше одного вида начертания текстуры в одной работе или же использование чего-то отличного от стандартной «сетки». Ну сам посмотри, большинство людей этой самой «сеткой» пользуются, но при этом работа с текстурой у всех отличается в мелочах. Именно по текстуре можно узнать работу того или иного автора. Это как почерк.
avatar
Согласен по всем пунктам. Я сам не использую разные текстуры только потому, что не научился еще.
avatar
Добавлю ещё, что сетка хороша в основном только для переходов или создания дополнительного цвета на либо гладких, либо далёких от зрителя поверхностях, где нет фактуры материала объекта. Если же её применять вообще для всего, то картинка станет «пластиковой». Для примера приведу свою старую картинку с Волкодавом (её ещё как-то помню, а другие примеры искать лень), где на ткани используется «шахматка», а плащ из шкуры уже выполнен спреем. Это, конечно, больше метод для машин с чуть большим разрешением чем у Спектрума (Амиг, Атари и др.), но и на нём иногда бывает полезно.
Также напоминаю, что не все йогурты текстуры хорошо выглядят на реальных машинах особенно через антенное RF подключение (а это, на минуточку, всё оригинальные 16/48К машины, да и 128К тоже). Особенно жутко из-за хромы выглядит чёрно-белая «шахматка» по которой громадные вертикальные розовые полосы. Они ещё и мигают как гигаскрин. Но есть и приятные фокусы. Например, тёмно красные вертикальные линии через одну по чёрному фону сливаются в один промежуточный цвет! К сожалению это почти не работает для других цветов.
avatar
Спасибо за добавления! Мне кажется, что переход на LCD мониторы сильно повлиял на аккуратность ZX-графики. То, что раньше размазалось и прокатило бы, теперь режет глаз, и это — норма. Имхо, это изменение в лучшую сторону. Насколько по твоей оценке близок Spectaculator к имитации картинки RF-антенны?
avatar
Все относительно.
Ведь те картинки (игровые заставки) рисовались на телевизорах. И сейчас они на подобном же железе смотрятся хорошо. Чего не скажешь про сценовую графику. Да она аккуратнее и более навороченна, но всех ньюансов на телевизоре не увидишь + проблеммы с цветами на оригинальных машинах, про которые уже PheeL писал.

То есть получается, это немного разные вещи. И делать их нужно по разному, в зависимости от того на чем это будет потом просматриваться.
avatar
Не очень близок. Т.е. часть эффектов он повторяет, например, белая шахматка или вертикальные линии будут смазаны до грязного жёлтого цвета. Но это прибито гвоздями, а на реале всё будет зависеть от того, что было раньше по хроме(chroma). Эдакий HoldAndModify(HAM) режим с Амиги. Шучу :) Или вот ещё одно несоответствие — если большая часть фона залита ярко-зелёным или ярко-голубым цветом, то ярко-белый будет! темнее! их. А эти два цвета очень «ядовитые» на экране. Так что та, казалось бы, ошибочная палитра для эмулятора где это так, на самом деле пытается соответствовать реальной машине, но без учёта других особенностей.
avatar
Спасибо! Любопытный нюанс очень.
avatar
слушай, а вот ведь кстати почему (возможно) у многих художников 80-х совсем не такой стиль рисования, как у современных ребят. наверняка дело было не только в индивидуальном почерке и излюбленных приёмах, но ещё и в подгонке под то, чтобы это хоть как-то удобоваримо смотрелось на тачках с описанным тобой типом подключения…
avatar
Имхо, дело скорее в накопленных приёмах и опыте всё же. Посмотри работы в графике 84-88го года — прямо можно модные тенденции и техники для каждого года отдельно выписывать. Считаю, что они специально не подгоняли, просто планка ниже была в силу многих причин — не было Pixeljoint.com, не было тысяч увиденных шедевров, не было других платформ, не было хорошего железа, не было осознания, что можно лучше. Кто-то один упарывался на небольшую технику, доводил её до блеска, показывал другим в играх, другие ахали-охали, пытались подражать, развивали в свою сторону. И географически эти тенденции и мода тоже отдельными были, что накладывалось на национальные художественные школы, на естественные природные условия (особенно в цветопередаче), на сюжеты и стили.
avatar
Вы ещё не забывайте про те инструменты для рисования, которые были доступны на тот момент. David Thorpe в одном из своих интервью говорил, что рисовал в Melbourne Draw. Попробуйте и вы. Я сразу нажал на ресет ещё в 94-м году.
avatar
Попробовал. Такой ничего себе редактор, жалко мышку не умеет.
avatar
на маленьких объектах можно использовать просто точки, вместо наложения текстур. Ведь удобнее самому поставить несколько точек
avatar
avatar
Интересен переход из одной текстуры в другую на центральном конусе. Я думаю в разрешении Спектрума это будет сделать сложней..
avatar
на мой вкус куда интереснее преломление картинки в стеклянном шаре:) ну и работа с тенью на полу, конечно, выше всяких похвал
avatar
Васса сказала, что на темном шаре снизу не хватает подсветки от пола :)
Зеркальный шар хорош, я бы из головы так не смог.
avatar
MacPaint, ага. Мне нравятся картинки, сделанные с помощью этой программы.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.