Как избавиться от тайлинга текстуры

Как скрыть тайловость 3D ландшафта?

Добрый день! Меня интересуют возможности скрыть тайловость ландшафта. Какие для этого существуют способы, может кто знает?
Текстуру накладывал в glsl, попробовал растянуть текстуру на несколько клеток, но знаний не хватило, как такое реализовать ((
А то как-то тоскливо смотреть на такое (((

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

it_is_good
> Какие для этого существуют способы, может кто знает?

Просто предполагается, что будет два вида. Один сверху, второй, как на скриншоте. Вот сверху сильно заметна тайловость будет. Смотрел в игре Banished скриншоты, так там на несколько клеток (примерно 5х5) ложится одна текстура. На некоторых сайтах советуют поверх ещё одну текстуру ложить на всю карту. Последнее я ещё смогу реализовать, но как в шейдерах растянуть текстуру на 5 клеток, ума не приложу. В выходные только буду дальше пробовать.

P.S. про шум (в oGL) я слышал, но там также говорится, что он на каждой машине будет работать по разному. Вот это и настораживает меня.

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

it_is_good
> Меня интересуют возможности скрыть тайловость ландшафта.
1. Не использовать ландшафт
2. надо просто хорошую текстуру. Чтобы края противоположные края совпадали.
3 не дано

asvp
> 1. Не использовать ландшафт
lol

> 2. надо просто хорошую текстуру. Чтобы края противоположные края совпадали.
Тут и так совпадают

it_is_good
3. Шум/текстура с некоторым масштабом поверх, как уже предлагали.

4. Самый красивый и тяжелый вариант, использовать не 4 текстуры, а 8, и блендить по дополнительной ч/б карте с чистым шумом или еще с чем-то.

5. Текстуры без выделяющихся частей, но тогда у тебя вместо тайлов будет одноцветная мазня.

it_is_good
> Меня интересуют возможности скрыть тайловость ландшафта. Какие для этого
> существуют способы, может кто знает?
Наложить на текстуру фильтр высоких частот. Чем выше порог, тем сильнее можно тайлить.
В фотошопе что-то подобное быстро делается путем удаления теней и пересветов.

Сложный вариант блендить больше одной текстуры по какой-то маске с суммой шумов разной частоты (в простанородье фотошопе называется облака 🙂 )

it_is_good
> . про шум (в oGL) я слышал,

Попробуй для начала задать в вершинах некий случайный цвет и промодулировать им

Источник

методы борьбы с тайлингом

тайлится текстура на hmap’e. Какие есть методы борьбы?
Стандартное смешивание не ботает, тк юзаю texture splatting и еще
мешать туда — это охренеть можно) Что нить кроме этого моно юзать? скажем, шум какой-нить?

скрин

Mephisto std
Я не знаю как, но можно ту темно-зеленую текстуру размножить в граф-редакторе
xx
xx
Тоесть 4 копии текстуры у нас будет (текса в два раза больше)
и нам нужно Разбить вручную тайлинг «по среднему кресту», а потом
сдвинуть офсет (или как там фильтр называется) на 0.5
и снова вручную поклацать Штампом, чтобы убрать «подозрительные места».
И главное в этой технике — надо чтобы в тексе были намеки на Тайлинг, но
какие-то детали узора «желательно серого цвета» обманывали зрение.

Тоесть, игрок посмотрит на ту серо-зеленую часть и у него возникнет сразу два
впечатления — вроде похожэ на повтор (тайлинг) и вроде все «повторы разные».

Ну и напоследок — лучше растянуть побольше Талантливую тексу, чем вот такую
фигню как у тебя «мелко накладывать».
// при мелком репите та текса и рябить, наверно, начинает 🙂

slatazan
славик, я просто поражаюсь — поток мыслей в твоей голове настолько же стройный?)

Mephisto std
увеличить разрешение карты весов

По честному нужна мегатекстура, нормальный фейк предложил slatazan (так делают проги XFader, Luxology imageSynth).

Mephisto std
Добавь света-тени, и деталей ландшафта — кустов, тропинок, деревьев, камней, и теней от всего этого. Голая-то текстура конечно выглядит отстойно.
Ну и желательно ещё смешать с другой текстурой, растянутой в несколько десятков раз по отношению к основной, и нарисовать на ней разные оттенки земли.

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

Можно растянуть текстуры раза в два, но тогда вблизи полезут пиксели. Их можно залечить, наложив вблизи детальную текстуру. Или просто тупо те же текстуры, что и в сплаттинге, но со сжатыми uv. lerp сделать по расстоянию.

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

А вообще, глядя на картинку, там проблема с тайлингом наведенная. Надо сильно более разнообразный террейн сделать. Больше шума и детализации в hmap, посчитать лайтмапы или AO.

Я сразу хотел сказать что текстура «фигня», но вспомнил личный опыт борьбы
и попытался кратко пересказать.

// —
Я пробывал ранее делать мип-мэпы вручную.
Так-вот, основная текса (512) фильтром Резкость поправлялась и хранилась в TGA чтобы пиксель-к-пикселю-как-штык.
Потом пару мипок оч акуратно «изменял» — тот самый крест граней поправлял (0.5; edit; — 0.5)
и несколько пикселей в серединке можно «слегка изменить».
И каждый мип-уровень делал «менее контрастным». //256 128 64 32 и далее автомат повтора
Поэтому яркие загагулины, которые бросаются в глаза и напоминают о тайлинге просто
становились серой массой вдали .
Заодно убирался эфект «ряби вдали».

Mephisto std
Надо-бы как-то внедрить хоть какой-то Бамп.
А то сейчас булыжники выглядят хуже, чем «волнуюший тебя тайлинг».

Ну и мне кажется, что ты выбрал какой-то спорный способ рисования земли.
Тоесть, я сам все время ошибался «как делать землю».
Сейчас рекомендую сделать подобие wh40::Dawn_of_war.
Я не знаю точно, но догадка такая..
Рисуются мега-быстро лоскуты земли у которых всего две текстуры..
Мелкий тайлинг и текстура свободных цветовых оттенков на всю локацию (на всю стратег-карту).
Потом все мега-прелести тропинок и пешеходных зебрушек рисуются через хитрые декали (наклейки).
Как-бы второй проход получается, потому-что все наклейки рисуются из vbo лоскутов земли (индексы выборочные).
Здесь можно использовать Все 4 текстурных слоя, тогда 4 наклейки могут пересекаться в одном месте .
Уже сейчас земля может выглядеть лучше чем в варкрафте (ну или не хуже).
Ну и после этого можно нарисовать лоскуты земель, чтобы «вбить в буфер кадра свет и тень».
Как минимум просто лайт-мэп наложить поверх всех наслоек уже хорошо.

Читайте также:  Как избавиться от вони кошачьей мочи дома

Вероятно, можно как-то со стэнсил-буфером «химичить», чтобы знать «кто в пикселе главный остался».
// первый проход или одна из наклеек, у которых свой байтовый номер.
Тогда при добавке свето-тени первая текса будет «картой блеска» для первого прохода, а вторая
текса будет . тайл-сэтом с блексом для 250-ти наклеек.
И далее тексы для теней.
А вдруг получится 🙂

slatazan
бамп есть, притом довольно качественный) просто у мя проблемы с налаживанием производства карт нормалей)) сделал слишком светлую
По поводу земли — норм алгоритм юзаю. Декалями ложить дорожки — это ж охренеешь их крафтить, у мя приоритет «простое создание уровней»

в первом посте ты предложил по ходу просто сделать нетайловые текстуры) это как бы не способ, я ваще эти текстуры утянул, а не сам делал,
у мя дела поважней чем текстуры клепать — мну прогать надо) текстурщиков потом поищу, когда будет куда искать

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

Tonal
с мегатекстурами я уже делал — очень неудобно было рисовать всё это) остановился на сплаттинге в итоге

BUzer
это ты по принципу готики 3) там если отключить траву и тд — ваще такой тайлинг поёдёт, что над ним даже дум первый будет смеяться
Но это вариант. Правда трава на снегу как-то не очень.

Я вообще-то думал про какую-нить текстуру шума скажем 10 к 1 в отношении к обычной текстуре, и чтобы она как-нить воздействовала
нестандартно — например не складывать цвета, а умножать

Источник

Photoshop. антитайлинг

EARLDK:
Любое содействие в получении статуса PRO (моделинг на заказ, продажа моделей) — бан

Пожизненный бан

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

но чтобы получить окончательный результат нужно неоднократно смотреть на текстуру В МАССЕ.
ранее я создавала бокс в Максе (если ещё не создана сцена, куда пойдёт эта текстура), натягивала на него материал и, благо присутствует автообновление, могла с помощью Alt+Tab бегать посмотреть в макс и назад исправить — в фотошоп.

Мне кажется есть более простой способ не прибегая к помощи сторонних програм увидеть текстуру в массе прямо в фотошопе. К примеру сейчас мне нужно просто разложить плитку в архикаде. В нём автообновление не настроено (если оно есть — расскажите где. но это уже отдельная тема)

Если тема уже обсуждалась, прошу покажите.
Спасибо.

1. Открепите текстуру от заднего плана.
2. Увеличьте размер холста.
3. На полученном большом фоне размножьте текстуру друг к другу.
__

Так же можно в меню фильтры-другое-офсет делать сдвиг текстуры, где можно увидеть как стыкуются края.

EARLDK:
Любое содействие в получении статуса PRO (моделинг на заказ, продажа моделей) — бан

Пожизненный бан

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

я имела ввиду автоматизацию в фотошопе.

есть ещё варианты?

именно. в максе ничего перезагружать не надо

Источник

«Охота на тайл» — тайлящаяся текстура за 5 минут на базе фотографии (цикл: Работа с текстурами и изображениями)

Вступление

Чтобы уравновесить кислотно-щелочной баланс после моей предыдущей, скорей всего неудачной, с точки зрения зрительских симпатий, публикации и чтобы принести ресурсу больше пользы, чем вреда – я публикую новый туториал. В отличие от всех предыдущих уроков он будет короче и будет напоминать по длине вот эту статью. Скажу даже более, он будет ей вторить, словно подпевая вполголоса. Надеюсь нам удастся спеться и вместе мы выдадим слаженный дует. Там речь шла о блендинге тайлов – здесь же речь пойдет о самих тайлах. О создании тайлящейся текстуры на базе любой фотографии. Это базовые знания, еще базовей чем это может быть только изучение интерфейса пакета Photoshop. В случае если мой тенор будет фальшивить — гоните его долой.

Итак, главный вопрос сегодняшней ночи – как сделать качественную тайл-текстуру за 5 минут? Хороший вопрос я думаю, и на него вполне можно потратить 5-10 минут вашего времени. Возможно после этого для ваших собственных прототипов вы будете использовать оригинальные тайлы, созданные вашими руками, не тратя времени на поиск художника или текстурщика, который смог бы вам помочь. Заманчиво?

Первым делом находим удовлетворяющую вас фотографию из тех, что не имеет копирайта (как правило на полях или по центру изображения). Внимательно следите за этим, потому что игровая индустрия богата курьезными ситуациями и эта далеко не последняя из могущих произойти с вами. Хотя. Что может быть веселее забыть в пред-релизной версии текстурной даты текстуру от игры Unreal Tournament? И такое случалось. Правда я не видел на лицах людей улыбок и не слышал их радостного смеха.

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

Я взял эту фотографию из реферата Ольги Васильевны Кузьминой. Не слишком большая и содержит все грядущие проблемы с которыми может столкнуться человек изготовляющий тайл-текстуры (или тайловые текстуры, или просто «тайлы»). Во-первых, она маленькая. Во-вторых – есть небо. В третьих, фактура не равномерна, что может привести к возникновению периодического рисунка при многократном повторе.

Нормализация текстуры (Texture Normalize)

И если с первым – мы смиримся, то второе требует некоего разрешения. Давайте приведем будущий тайл к удобоваримому виду. Хотя бы избавимся от неба, чтобы почва была более или менее равномерной. Это можно сделать двумя способами. Классическим выделением через рамку с помощью инструмента Rectangular Marquee Tool (M) или с помощью клавиши М. После того как вы выделили нужный объем, нажмите стандартную для большинства пакетов операцию копирования-вставки – Ctrl + C и Ctrl + V. Полученный лоскуток перетащите в нужное место (с помощью мыши) и повторите операцию, чтобы больше никогда в жизни этого тайла не видеть неба. Если что-то не заладилось и вы не доверяете вашим рукам – переключитесь в режим Move Tool (V) и перетащите объекты с помощью курсорных клавиш (стрелочек). Такой способ бывает важен при необходимости точного позиционирования элемента.

Читайте также:  Чесоточный клещ у собак передается человеку

Примечание: Небо моего тайла на иллюстрации красное. И это не потому, что я сделал хитрое или применил «маску», а потому что я хотел явно выразить проблему. Повторив тоже что и я — вы получите такой же результат. Никаких хитростей.

Также операция клонирования может быть выполнена с зажатой клавишей Alt при включенном инструменте Move Tool (V), он используется для перемещения любых объектов (слои, группы). То есть вы выделяете нужный вам объем, зажимаете клавишу Alt и тащите выделенное куда вам нужно. Выделение может быть любым. Сделанным с помощью Magic Wand, Lasso Tool – словом так можно копировать все возможные выделения и их содержимое. Если при этом зажать Shift, то ваш объект-клон будет двигаться по прямой, либо налево, либо направо, либо вверх, либо вниз, не сбиваясь при этом с выбранного направления.

Первые швы (Patсh Tool)

— У нас проблема кэп. Появились Швы! Свистать мистера Патча на мостик!

Иными словами вызываем инструмент Patсh Tool (J) с той же панели инструментов (слева от рабочего полотна).

Важное примечание: По умолчанию этот инструмент может быть закрыт другими. В Фотошопе под одной иконкой может скрывать и три. Появятся они если нажать на иконку, что для махрового новичка (нас с вами) может быть не очевидно. Если вам лень тащить до них указатель мыши – пощелкайте на клавиатуре комбинацией Shift + J. Практически все важные операции, как и в стратегиях реального времени зашиты на short-cat’ы. Прошивок как в StarCraft вы здесь не увидите, но ускорить рабочий процесс на порядки – будет можно. Со временем это дойдет до автоматизма.

С помощь Patсh Tool (J) мы выделяем проблемную зону шва, для того чтобы потом ее перетащить на то место откуда будет снята та фактура которая не содержит дефектов и других артефактов. По мне сравнение с пластическим хирургом – гораздо интереснее. Если считать, что швы это опаленная кожа, ну… или морщины, то чистой, хорошей кожей будет фактура не содержащая проблем находящаяся по соседству. Ее-то мы и берем за сэмпл.

Итого… уже получилась неплохая текстурка. За то время пока я писал этот текст (см. выше) можно было бы протайлить десяток подобных текстур. Если не более. Однако нас сейчас не интересует скорость моего набора, а в большей степени интересует что делать с краями этой фотографии. Этого нашего тайла.

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

Корчуем швы со сдвигом (Filter Offset)

Этот чудесный фильтр позволяет избавить вас от рутинных операций. Нужно открыть проблемную текстуру, желательно после всех операций пост-обработки, выбрать пункт Filter/Other/Offset и задать в пикселях необходимое смещение. Если ваша текстура, как в нашем случае 512х512 то наиболее удобный Offset составит 256 пикселей. Таким образом мы не ставим крест на этой текстуре, но убираем его с помощью уже знакомого инструмента Path Tool (J).

Далее снова возвращаем значения Offset обратно. И… текстура готова. Если попробовать выложить ее словно плитку станет заметно, что возникает некий периодический рисунок в определенных местах. Ваша задача – быстро его устранить.

На следующем рисунке я указал зону этих неприятностей белесым цветом. Именно на эти зоны мы и поставим заплатки. Заодно сделаем это не с помощью Patсh Tool (J), а с помощью Lasso Tool (L). Почему так, а не наоборот я расскажу в советах, в конце урока.

Ловим багги лассо (Lasso Tool)

Берем лассо Lasso Tool (L) и выделяем землю, которая ляжет поверх прессованной земли, которая чертовски нам мешает. Потом через Ctrl + C и Ctrl + V переносим их в нужные места. Задача примерно на глаз избавиться от явных теней и явных элементов текстуры которые присутствуют в едином числе и при повторении будут заметными. Да, безусловно, это сделает текстуру менее уникальной. Но нам тут надо целый овраг покрыть, и никуда не годиться повторяющееся по всему периметру какое-либо черное пятно.

Теперь наша текстура выглядит так.

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

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

Делаем паттерн (Define Patern)

Выделите текстуру с помощью Rectangular Marquee Tool (M) или с помощью искрометной комбинации Ctrl + A. Затем перейдите во вкладку Edit. Вторая вкладка после пункта File. Выберете там Define Pattern. Напишите для паттерна любое удобное вам имя.
Теперь, при создании любого файла любого размера вы можете воспользоваться операцией Fill из того же подпункта Edit, либо нажав комбинацию клавиш Shift + F5. Выбрав там свой паттерн вы сможете залить им любую поверхность избавив тем самым себя от рутинных операций проверки файлов.

Читайте также:  Когда можно прививаться от клещей

Эпилог

Сложно поверить, но каждое из этих микро-знаний приходило постепенно. К примеру вы узнали это за 5 минут. Я узнал за 5 месяцев потому, что копался самостоятельно, и потому что когда-то давно никто не любил делиться. Чтобы с вами случилось, если бы вы узнали, что весь процесс обучения этой простейшей операции пришелся на отрезок в 5 лет? Я не так далек от истины. Потому что каждым элементом этого маленького уравнения я занимался в разные годы. И фильтр Offset в нем стал последним неизвестным.

Бонус для терпеливых

Для тех кто смог выдержать пять минут чтения и еще две на эпилог. Существует очень важный фильтр. Который может превратить ваше изображение в как бы рисованное. Это секрет, и никому его не открывайте. Т.к. грамотное использование этого фильтра позволяет добиться удивительных результатов. Но тут как и в любом кулинарном процессе нужна очень точная рецептура. Маслин должно быть не более десяти, кружочков лука диаметром семи сантиметров можно положить побольше, не забывая про толщину нарезки… чувствуете? Ну… наверное ничего кроме слез. Если отвлечься от лука — пропорции, проценты, и очередность наложения изображений — очень важна. Дойти до этого сразу не может никто. Все это путь экспериментов. Для многих зачастую многолетних. Причем Level Up’ы будут случаться и по прошествии десятка лет. Я серьезно. Не только у такого лодыря как я.

Так вот. Наша цель — фильтр Filter/Atistic/Cutout. Посмотрите что он сделает с текстурой.

Теперь еще один важный пункт. Всему важна своя мера. Просто как фильтр — он не нужен никому. Но если изменить уровень процентности слоя с ним лежащий поверх нашей оригинальной текстуры на 37%, то будет видна и та текстура что снизу (сохраняя нам фото-текстуру), и та текстура что сверху (нивелируя черные фрагменты фото-текстуры). Вместе они дополняют друг друга. Текстура уже не такая фото, и как бы с легкой претензией на артовость. Чувствуете как я говорю о них? Как о вкусе вина.
Признаться я никогда не понимал вин, и не понимал все богатство их вкуса. Увы, в этом деле я не образован. Но меня всегда трогали фильмы о виноделах влюбленных в свое дело. То как они описывали напиток. Его вкус. То как он впитывает эмоции. Не думайте что текстура чем-то отличается. Во все что мы делаем — мы вкладываем толику своих эмоций. Что мы получили с нашими процентами?

А теперь добавим нашу текстуру еще раз сверху. В стиле на авось. С уровнем процента прозрачности 37% но изменив наложение текстуры на Overlay. Методы наложения это свойства слоя с которыми текстура (или изображение на нем, или маска) накладывается на тот слой, что лежит под ним. Можно было бы сделать это десятком других способов — но я предпочитаю этот. Быстрая цвето-коррекция и усиление контраста. Одним лишь продублированным слоем.

Вы знаете. Скорее всего вам трудно будет в это поверить, и возможно вы сочтете меня сумасшедшим, но я верю в две вещи. То что какая-то толика нашей души переходит в душевно сделанный объект. И в то что существует магия цифр. Эти значения для себя я подбирал давным давно. Кое-какие прохвосты врачи усмотрели у меня… как это бишь называется? Да, ограниченный дальтонизм. У нас, мужиков, это часто бывает. И так уж получилось что я вижу мир чуть иначе. Мне удалось подобрать такие цифры которые позволяют мне рисовать в привычном для меня контрасте и даже в привычной гамме. А затем я подкручиваю изображение. Частенько это не спасает от ядерных цветов, но решает ряд других проблем.

Маленький GIF пример. Это незначительные на первый взгляд изменения. Пустяковые. Но в комплексе они могут дать удивительный результат. Все в этом мире состоит из мелочей.

При дополнительной получасовой работе с текстурой из нее может получиться конфетка. Но я не располагаю этими 20-30 минутами. Нам нужно было быстро.

Ну и конечно если вдуматься это хохма. Дальтоник работает коцепт-артистом в индустрии, главным художником и бог знает кем еще. Правда и врачи сказали — ограниченный. Так что… все относительно. Пусть те кто смеются — смеются и дальше. Главное что и вы теперь знаете что есть некие числа и некая магия. И возможно я не одинок в своих мыслях.

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

Наблюдения

Идеальный растровый тайл. Идеального растрового тайла на базе фотографий в природе не существует. Он как «неуловимый Джо», помните о таком? Не пытайтесь его отыскать. Идеальный тайл — это цветовая заливка, фрактальный тайл, программно генерируемый тайл, и вряд ли они устроят ваше начальство.
Всегда будут какие-то огрехи, и что-то будет не нравится. Подобных вещей можно избегнуть в случае pixel-art’а или полностью рисованных текстур. Там периодические элементы будут сведены к минимуму за счет мастерства и опыта художника. Частенько «идеальный» тайл будучи идеальным совсем не радует глаз, т.к. многие элементы превращаются в некую «шахматную доску» от которой либо рябит в глазах, либо она не привлекает.

Время работы. Да, я сделал его за пять минут. Но в случае других, более сложных тайлов время может сильно растягиваться. Иные текстуры можно обрабатывать часами. Так и скажите вашему начальству, которое прочитав этот микро-урок, предложит вам «протайлить» 12 текстур за час. Это не конвейер, даже в этой рутинной работе есть творческое звено. Необходимо минимальное чувство вкуса. Ну и сноровка конечно же.

Забавный факт. Помимо того что тайл — это плиточная или «кафельная» структура состоящая из повторяющихся фрагментов изображения, тайлом же называют периодичный рисунок возникающий при многократном повторении тайла. «Мне не нравится явный тайл» — фраза говорящая о возникновении хорошо читающегося периодического рисунка, а не о качестве проработки тайла. Говоря кратко и понятно — «то чертово пятно видно и повторяется повсюду, когда ты его, наконец, уберешь?».

Источник

Оцените статью
Избавляемся от вредителей