Комментарии (25)
belь
2020.05.08 18:50
круто! спасибо
Спасибо, сэкономил много времени
Круто, очень полезно! Ждём ещё 199 Выпусков 🙂
“Способ, который я сам придумал”…ммм, ясненько…
-NiK-
2020.05.09 00:17
Наверное имелась в виду странная техника смешивания кусочков битмапы путем брейка и упаковки в анврапе, а не high pass фильтр. Без бленда между кусками результат на любителя.
А вообще хорошо, что есть рендер, в который это уже встроено 🙂
возможно зря я)
-NiK-
2020.05.09 13:57
Не зря. Это я пролистывая видос не заметил что “способ, который я сам придумал” действительно говорится в контексте High Pass 🙂 Это не значит, что автор не придумал его сам. Просто он не знал, что до него его уже придумали.
Что касается распила модели для получения рандомного смещения по резким границам полигонов, то это по моему мнению полная дикость. Метод миксования оффсетнутых битмап через нойз тоже давно известен.
snake
2020.05.09 09:56
Спасибо!
А как конкретно называется карта из видео-примера? Не могу найти её в списке OSL в материал-эдиторе.
-NiK-
2020.05.10 20:26
Я ее скачал с гитхаба. Линк под видео
Ясно, спасибо
Так загадочно, с хрипотцой рассказывал, что я был заинтригован до конца. Даже не важно, знал я этот способ или нет, но дослушал до финиша=))
спасибо!
Ну по, хорошему, такие модели надо удалять из базы или во фри переводить.
эмм, а можно просто купить PixPlant
купить? пффф…)))
Спасибо, хороший способ. Буду юзать!
“Скачать картинки и продавать”, о это горькое ощущение от такой покупки.
Skap
2020.05.10 15:56
А если реалворд?
-NiK-
2020.05.10 16:26
Те кто хочет практиковать этот метод должны понимать одну вещь. Автор не просто убирает тайлинг, а превращает текстуру буквально в noise из пикселей. Конечно от тайлинга не остаётся и следа, как и от самой текстуры 🙂
Это допустимо только в очень ограниченном кол-ве кейсов, а точнее только когда сама текстура шумоподобная (например однородный ковер). Только в отличие от нойза у вас будут видны границы квадратиков.
Поправьте меня если я ошибаюсь.
_____
И как-то странно вы завершили видео. Ну разбили битампу на “паззл” и перемешали кусочки, а что дальше делать вашему последователю? Нужно эту битмапу запечь/отрендерить обратно в jpeg. Вы же не предлагаете разбивать итоговую модель на пазл и так текстурить? 🙂
Автор Вам огромное Спасибо!!!
Благодарю))
.Kin
2020.05.14 14:57
в одно время переносил обивки салона в электронку под рендер путём фотосъёмки.
фиксируется камера с наименьшими искажениями по рисунку.
ставится свет. равноудалённо по четырём сторонам с одной интенсивностью света делается 4 снимка. свет под углом раскрывающий рельеф.(я делал и 5й снимок с фронтальным светом)
в фш смешивается множителем слои. 10075 противоположные два и 3525 ещё два. хотя проценты не помню точно уже.
ресультат оч неплох был…свет равномерен, рисунок ткани читаем
спасибо и чего я раньше не увидела:)
волшебник!
Допустим, нужно нанести маленький рисунок на уже оттектурированную поверхность. Для таких нужд подойдёт материал Blend: основным материалом будет текстура поверхности, а маской – желаемый рисунок. По умолчанию, рисунок растянется на весь полигон. Используя UVW Map, можно уменьшить рисунок, но повторение текстуры будет даже если не включать соответствующую опцию (тайлинг). Есть ли способ убрать повторение текстуры кроме как увеличение холста маски изображения?
Конкретный пример – на рисунке ниже. Я пытаюсь добиться того, что осталась только одна иконка с изображением антенны в центре поверхности.
Я в таком случае не заморачиваясь нарезал бы полигонов, а на центральный кинул бы нужный материал с текстурой. Можно и масками, но это дополнительное время.
-
529 КБ
Просмотров: 572
выв самой текстуре тайлинг отключите
Попробовал. В результате дополнительным материалом, которым окрашивается маска, было “залито” всё оставшееся место на полигоне. Походу придётся резать полигоны, как Андрей посоветовал.
Попробовал. В результате дополнительным материалом, которым окрашивается маска, было “залито” всё оставшееся место на полигоне.
Попробуйте такой вариант:
Инвертируем маску в программе Photoshop.
Меняем местами материалы в материале Blend.
В свойствах маски выключаем галочки Tile.
Содержание
- Как скрыть тайловость 3D ландшафта?
- методы борьбы с тайлингом
- 3ds max: Тайлинг.
- Что такое тайловое текстурирование — общие принципы и использование Статьи редакции
Как скрыть тайловость 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 в отношении к обычной текстуре, и чтобы она как-нить воздействовала
нестандартно — например не складывать цвета, а умножать
Источник
3ds max: Тайлинг.
Вопрос моделлерам. Питаюсь смоделировать небольшой городок, а также избавиться от проблемы размытия текстуры на полигонах большого размера. Маппинг: face. То есть, нужно настроить тайлинг, но для конкретных полигонов. Кто что посоветует?
Я знаю что можно задавать кол-во тайлов в счетчике.
Тоесть сначала выделяешь полигон или несколько . затем делаешь модификатор UVW Map в нем есть счетчик тайлов .
Так же в текстуре материала можно кол-во тайлов задать, и тогда выделив полигон применить к нем этот материал .
Как еще можно избавиться от размытия не знаю .
NewOne
Спасибо, НО почему это дело не работает с MultiSub-Object материалами не знаю, всетаки у меня большой меш улицы, и без мультиматериалов не обойтись (наверное).
Третий вариант, выбрать в анврапе (Unwrap UVW — select face) нужные тебе полигоны и заскейлить их за приделы клетки символизирующей один тайл.
Но честно говоря и первых двух вариантов достаточно даже для работы с Мультисаб материалами.
Странно, но у меня почему-то с мультисабами никак маппинг не корректируется, разве только тайлинг самой текстуры, но в этом случае он меняется и для других полигонов, в итоге текстура сжимается на тех полигонах, на которых она хорошо сидела. Пробовал выделять полигон и с помощью Mesh Select и просто выделял, потом UVW Map или Unwrap UVW, вообще ничего не меняется. а без мультисабов все работает. В чем можеть быть проблема? Макс 7 версии.
Очень интересный вопрос — не подскажите пару статей по текстурированию игровых уровней?
Источник
Что такое тайловое текстурирование — общие принципы и использование Статьи редакции
Как создавать тайлы и зачем это нужно.
Этот обучающий материал посвящён тайловому текстурированию: как создаются и применяются тайлы и почему это одна из важных основ в геймдеве — акцент будет на применение в разработке игр.
Не стану детально описывать пайплайн в конкретных программах, а сосредоточимся на общих принципах работы и ответах на возможные вопросы.
В одном из своих обучающих материалов я уже упоминал метод тайлового текстурирования, но рассказал о нём поверхностно — тогда основная тема касалась оптимизации UV-развертки.
Tile — произносится как «тайл», переводится как «плитка», а означает повторение. Повторяющуюся текстуру используют для текстурирования больших поверхностей: грунта, стен, домов, модулей и иногда мелких объектов. Такой вид текстур позволяет добиться высокого качества и при этом уменьшить количество применяемых материалов в игровой сцене.
Бесшовные текстуры — это и есть тайлы, но иногда их так называют. Паттерны на краях текстуры продолжают друг друга, чтобы избавиться от швов и сделать повторяемость менее заметной.
Trim Sheet или тримы , в какой-то степени — это тоже тайлы, однако они бесшовные лишь по одной оси и применяются к вытянутым объектам: балкам, перилам, плинтусам, узорам на стенах и многим другим. Наглядные примеры таких текстур ниже.
Tile Atlas или атлас тайлов — несколько тайлов на одной текстуре. При использовании атласов приходится жертвовать числом полигонов, чтобы использовать оверлапинг — наложение UV-островов на один участок текстуры. Атласы создают ради того, чтобы снизить количество материалов, чаще всего используются в мобильных играх, где требования к оптимизации более высокие.
Tileset или тайл сет — подразумевается сет модулей, из которых делают уровни. Эти модули используют общие тайловые материалы или тримы, поэтому их можно назвать сетом одного тайла.
Оптимизация. Известно, что файлы игр состоят примерно на 60-80% из текстур, а возможно и на 95% — всё зависит от конкретного проекта. Однотипные, бесшовные текстуры часто используются повторно на различных моделях, тем самым позволяя экономить место на жёстком диске, снижать время загрузки и обращение к видеопамяти. Повторное использование материала в сцене вместо создания нового снижает количество Draw Calls — вызовов отрисовки.
Сокращение времени на разработку. Опытный левелдизайнер может создавать новые и уникальные локации, используя одни и те же модели и текстуры. Разумеется, это занимает меньше времени нежели создание каждой сцены с нуля.
Повторяемость ассетов. Если в игре часто использовать ассеты повторно, то через несколько часов геймплея визуально игра станет скучной. Этим особенно страдают игры с большим миром, например TESO, да и вообще вся серия «Свитков». После нескольких походов по пещерами можно увидеть все возможные тайлсеты, и новые локации не вызовут никаких впечатлений, так как они почти идентичны во всём, кроме проектировки уровня.
Зато большая часть Тамриеля (Мира вселенной The Elder Scrolls) умещается в 95 гигабайт, что по сравнению с новыми играми не так уж и много.
Сложный пайплайн для инди и новичков. При создании своего примера, я потратил больше дня на подбор скачанных текстур для одной очень простой модельки, при этом получилось так себе.
Основная трудность для меня была в том, что я не знал, что хочу визуализировать, не хватало предварительных артов или референсов, а если я и знал, что мне нужно, то нужных текстур не находил. Потратить ещё кучу времени на создание своих текстур исключительно для примера я не решился.
А теперь представьте те же сложности в масштабах игрового проекта или большого ассета. Для реализации качественных тайл сетов понадобится хоть какой-то опыт, время или деньги на покупку готовых.
Обработка фотографий в 2D редакторе — в Photoshop или в специализированных программах. Для создания полноценного PBR-материала не достаточно одной текстуры цвета — необходимы маски метала, шероховатости и карта рельефа (Metallic, Roughness, Normal Map). Всё это нужно либо рисовать вручную, либо генерировать из той же фотографии, что, конечно, даст результат, но не лучшего качества. По этой причине способ считается устаревшим.
Для генерации существуют отдельные программы — например бесплатный materialize или Bitmap2Material — который по сути является набором нод из Substance Designer. Ещё есть онлайн-сервис NormalMap-Online, он может создать Normal, AO, Sepcular из любого изображения. У всех этих генераторов похожий принцип, цвет используется как маска, карта нормалей получается вдавленной в тёмных местах и выдавленной на светлых, в некоторых случаях из этого можно получить приемлемое качество.
Моделирование и запекание. Художник создаёт геометрию на прямой плоскости при помощи скульптинга или моделирования. Геометрию окрашивают ID-материалами или через Vertex Paint. Далее это запекается на обычный плейн в текстуры: Normal, ID map, Curvature, Ambient Occlusion.
Остальное создаётся вручную. ID Map помогает отделять друг от друга элементы на плоской текстуре. Metallic, roughness и базовый цвет можно создать в Substance painter, в Blender через нодовый редактор, в Photoshop или даже внутри игрового движка, смешивая текстуры по ID-маске.
Hand Paint — создание текстур вручную, рисование в Photoshop или в других 2D-редакторах. Как правило, этот метод подходит для стилизованной графики, так как добиться реализма мазками кисти крайне сложно, если вообще возможно. Для создания стилизованной графики с PBR можно комбинировать с методом запекания.
Процедурные редакторы. Благодаря нодовым редакторам можно создать, а затем в любой момент отредактировать, что угодно, изменять не только цвета, но и каждый паттерн в отдельности, создавать множество вариаций одного материала.
Ноды — это что-то вроде визуального программирования. В каждой программе они реализованы по-разному, но суть везде похожая: первая нода создает простой паттерн или шум, вторая нода его редактирует, а третья — добавляет цвета. Конечно, при создании реалистичного материала тремя-четырьмя нодами не обойтись.
Лучшей нодовой программой для создания тайлов и не только, считается Substance Designer, так как она, её инструментарий и библиотека нодов были созданы для этой задачи.
Источник
Tile, в переводе плитка, есть просто повтор текстуры на объекте.
вот ут тайлится трава. Явление как правило нежелательное, сделать его менее заметным можно примерно так: делаешь микс из двух карт с разными каналами UV. В первый слот микса засовываешь тайлящуюся текстуру, во второй либо ее же, но посветлее/потемнее или другую тайлящуюсю, а в качестве маски ставишь большую текстуру со вторым каналом (второй UV растягиваешь на весь объект). Выходит что тайл вроде бы есть, но уже неоднородный.
а как например на текстуре 512 на 512 сделать более менее нормальное качество, с помощью тайла, например у меня есть дерево камни, пенек,и трава,я если честно не понимаю (, если не сложно можно через скайп будет быстрее, и + там можно екран показать)
Как создавать тайлы и зачем это нужно.
Этот обучающий материал посвящён тайловому текстурированию: как создаются и применяются тайлы и почему это одна из важных основ в геймдеве — акцент будет на применение в разработке игр.
Не стану детально описывать пайплайн в конкретных программах, а сосредоточимся на общих принципах работы и ответах на возможные вопросы.
В одном из своих обучающих материалов я уже упоминал метод тайлового текстурирования, но рассказал о нём поверхностно — тогда основная тема касалась оптимизации UV-развертки.
Определение и термины
Tile — произносится как «тайл», переводится как «плитка», а означает повторение. Повторяющуюся текстуру используют для текстурирования больших поверхностей: грунта, стен, домов, модулей и иногда мелких объектов. Такой вид текстур позволяет добиться высокого качества и при этом уменьшить количество применяемых материалов в игровой сцене.
Бесшовные текстуры — это и есть тайлы, но иногда их так называют. Паттерны на краях текстуры продолжают друг друга, чтобы избавиться от швов и сделать повторяемость менее заметной.
Trim Sheet или тримы, в какой-то степени — это тоже тайлы, однако они бесшовные лишь по одной оси и применяются к вытянутым объектам: балкам, перилам, плинтусам, узорам на стенах и многим другим. Наглядные примеры таких текстур ниже.
Tile Atlas или атлас тайлов — несколько тайлов на одной текстуре. При использовании атласов приходится жертвовать числом полигонов, чтобы использовать оверлапинг — наложение UV-островов на один участок текстуры. Атласы создают ради того, чтобы снизить количество материалов, чаще всего используются в мобильных играх, где требования к оптимизации более высокие.
Tileset или тайл сет — подразумевается сет модулей, из которых делают уровни. Эти модули используют общие тайловые материалы или тримы, поэтому их можно назвать сетом одного тайла.
Преимущества и недостатки
Плюсы
Оптимизация. Известно, что файлы игр состоят примерно на 60-80% из текстур, а возможно и на 95% — всё зависит от конкретного проекта. Однотипные, бесшовные текстуры часто используются повторно на различных моделях, тем самым позволяя экономить место на жёстком диске, снижать время загрузки и обращение к видеопамяти. Повторное использование материала в сцене вместо создания нового снижает количество Draw Calls — вызовов отрисовки.
Сокращение времени на разработку. Опытный левелдизайнер может создавать новые и уникальные локации, используя одни и те же модели и текстуры. Разумеется, это занимает меньше времени нежели создание каждой сцены с нуля.
Минусы
Повторяемость ассетов. Если в игре часто использовать ассеты повторно, то через несколько часов геймплея визуально игра станет скучной. Этим особенно страдают игры с большим миром, например TESO, да и вообще вся серия «Свитков». После нескольких походов по пещерами можно увидеть все возможные тайлсеты, и новые локации не вызовут никаких впечатлений, так как они почти идентичны во всём, кроме проектировки уровня.
Зато большая часть Тамриеля (Мира вселенной The Elder Scrolls) умещается в 95 гигабайт, что по сравнению с новыми играми не так уж и много.
Сложный пайплайн для инди и новичков. При создании своего примера, я потратил больше дня на подбор скачанных текстур для одной очень простой модельки, при этом получилось так себе.
Основная трудность для меня была в том, что я не знал, что хочу визуализировать, не хватало предварительных артов или референсов, а если я и знал, что мне нужно, то нужных текстур не находил. Потратить ещё кучу времени на создание своих текстур исключительно для примера я не решился.
А теперь представьте те же сложности в масштабах игрового проекта или большого ассета. Для реализации качественных тайл сетов понадобится хоть какой-то опыт, время или деньги на покупку готовых.
Методы создания тайл текстур
Обработка фотографий в 2D редакторе — в Photoshop или в специализированных программах. Для создания полноценного PBR-материала не достаточно одной текстуры цвета — необходимы маски метала, шероховатости и карта рельефа (Metallic, Roughness, Normal Map). Всё это нужно либо рисовать вручную, либо генерировать из той же фотографии, что, конечно, даст результат, но не лучшего качества. По этой причине способ считается устаревшим.
Для генерации существуют отдельные программы — например бесплатный materialize или Bitmap2Material — который по сути является набором нод из Substance Designer. Ещё есть онлайн-сервис NormalMap-Online, он может создать Normal, AO, Sepcular из любого изображения. У всех этих генераторов похожий принцип, цвет используется как маска, карта нормалей получается вдавленной в тёмных местах и выдавленной на светлых, в некоторых случаях из этого можно получить приемлемое качество.
Моделирование и запекание. Художник создаёт геометрию на прямой плоскости при помощи скульптинга или моделирования. Геометрию окрашивают ID-материалами или через Vertex Paint. Далее это запекается на обычный плейн в текстуры: Normal, ID map, Curvature, Ambient Occlusion.
Остальное создаётся вручную. ID Map помогает отделять друг от друга элементы на плоской текстуре. Metallic, roughness и базовый цвет можно создать в Substance painter, в Blender через нодовый редактор, в Photoshop или даже внутри игрового движка, смешивая текстуры по ID-маске.
Hand Paint — создание текстур вручную, рисование в Photoshop или в других 2D-редакторах. Как правило, этот метод подходит для стилизованной графики, так как добиться реализма мазками кисти крайне сложно, если вообще возможно. Для создания стилизованной графики с PBR можно комбинировать с методом запекания.
Процедурные редакторы. Благодаря нодовым редакторам можно создать, а затем в любой момент отредактировать, что угодно, изменять не только цвета, но и каждый паттерн в отдельности, создавать множество вариаций одного материала.
Ноды — это что-то вроде визуального программирования. В каждой программе они реализованы по-разному, но суть везде похожая: первая нода создает простой паттерн или шум, вторая нода его редактирует, а третья — добавляет цвета. Конечно, при создании реалистичного материала тремя-четырьмя нодами не обойтись.
Лучшей нодовой программой для создания тайлов и не только, считается Substance Designer, так как она, её инструментарий и библиотека нодов были созданы для этой задачи.
Похожие функции можно найти в редакторе шейдеров Blender, среди плагинов для Unity, блюпринтов в Unreal Engine.
Процесс тайлового текстурирования
Вся суть этого процесса сводится к тому, что вам нужно разместить UV-острова на текстуре так, чтобы это выглядело приемлемо на 3D-модели. При этом внешний вид UV-развёртки будет просто ужасен, но это не имеет значения. Я накидал простую модель дома, и опишу процесс его текстурирования.
Усреднение общего текселя (texel density)
Чтобы в сцене или на одном объекте не было разброса по качеству, необходимо определится с количеством пикселей на сантиметр, перед тем как начать текстурирование.
Я уже рассказывал в прошлом уроке, но напомню что texel density — это величина, которая является отношением размера текстуры (в пикселях) к габаритам 3D-модели в сцене.
Почему это имеет значение? Представим, что вы скачали или сделали текстуру кирпича, он оказался крупный, поэтому вы увеличили размеры UV-острова. Второй материал, кирпичи другого цвета, напротив, оказались мелкими и, чтобы сопоставить размеры, вы уменьшили развертку. Как результат одна текстура «мыльней» другой.
Конечно, не обязательно делать везде одинаковый тексель — разброс по качеству становится заметным, если разница текселя более 4 px/cm. Можно допускать размытие на слабо заметных участках, куда игроки особо не смотрят. Если паттерны на текстуре слишком большие или маленькие, то ради качества стоит поискать или сделать другую.
Определитесь с текстурами
Не торопитесь объединять их в атласы и тримы — для начала нужно убедится в том, что вы будете окрашивать модель или сцену именно этими текстурами. Выделите те элементы, которые вы скорее всего будете текстурировать не тайлами, а уникальным сетом, как, например, надписи, дверь, какие-то пропсы.
Редактирование UV-развёртки
Некоторые новички почему-то беспокоятся за подобный вид UV, когда острова выходят за квадрат и беспорядочно накладываются друг на друга — это нормально, важно лишь то, как выглядит текстура на геометрии
Однако это не значит, что на UV можно забить совсем — придется поправлять их положение, когда вы начнёте оптимизировать количество материалов.
Оптимизация тайлов в тримы
В текущем виде у меня выходит восемь материалов — для одного домика это очень много, поэтому я объединил три материала в один трим.
Выбрал элементы, которые имеют вытянутые формы — бетон, метал и пластик — и расположил UV-острова этих элементов в три линии. Я советую делать это до того, как вы начнёте объединять текстуры, чтобы убедится в том, что с таким расположением UV-модель будет выглядеть как надо.
Объединение текстур
Для этого подойдет любой 2D-редактор, в котором вы умеете работать. Не забывайте, что придётся совмещать не одну текстуру, а несколько текстурных сетов — можно легко в них запутаться. Для работы с тайлами я использую Substance Designer, в нём довольно удобно сортировать текстуры и в любой момент легко исправить ошибку.
Таким образом, ничего не потеряв кроме времени, я снизил количество используемых материалов — что немаловажно для оптимизации.
Создание атласа тайлов
При создании атласов паттерн текстуры придется уменьшить, потеряв качество, либо увеличить сделав текстуру ещё более повторяющейся.
У большого паттерна есть ещё один недостаток — чтобы он чаще повторялся на 3D-модели, придётся делать много разрезов, швов на геометрии, тем самым увеличивая полигонаж.
Больше полигонов ради оптимизации
Когда плоскость очень большая и UV-остров не умещается в какой-то участок, приходится создавать швы на ровном месте. Это нормальная практика, так как несколько полигонов ухудшат оптимизацию не больше чем еще один материал.
К тому же, эти вершины в дальнейшем можно использовать для vertex paint или сделать геометрию более детализированной, вместо простой плоскости, как у меня. В моём случае использование атласа будет не рациональным и сулит потерю качества и очень много разрезов.
Создаем декали
Это довольно просто — создайте текстуру с прозрачностью и элементами, которые вы хотите нанести на модель. В моём случае это грязь и подтёки.
Чтобы проецировать эти декали поверх тайловых текстур, добавьте сверху полигон и разверните его на нужном участке текстуры. Оставляйте между полигонами небольшое расстояние, иначе будет битва за отрисовку, текстура начнет мерцать во время движения камеры.
Разработчики часто выделяют для декалей отдельный материал, как и для стекла, из-за возможных трудностей с шейдером прозрачности.
В целом, я рассказал об основных принципах нанесения тайлов, перейдём к следующей теме.
Избавляемся от повторяемости
Существует несколько способов скрывать однотонность: очевидные и простые и те, что требуют навыков работы с шейдерами.
Объекты окружения, пропсы, детализация геометрией. Использовать модели окружения, чтобы закрывать ими стены и полы с повторяющейся текстурой. Понимаю, что это очевидно, но и о простых вещах стоит напоминать.
Свет. Не стоит недооценивать работу с освещением, оно играет очень важную роль в любом рендере. Большие однообразные текстуры можно и нужно прятать под бликами и тенями.
Вариативность базового цвета. При помощи настроек шейдера в игровом движке, можно создавать варианты одного и того же материала, изменять, к примеру, базовый цвет. Конечно, в таком случае появится новый материал, но текстуры будут использоваться те же.
Декали. Это не только ранее упомянутая грязь и подтёки. Декалями могут быть надписи, крепления, какие-то символы — практически всё, что можно уместить на плоскости в виде текстуры.
Помимо ранее упомянутого процесса создания декалей через создание полигонов, в игровых движках есть свои инструментарии для их нанесения.
Смешивание материалов. Через Vertex Color, цвет вершин или текстурную маску. Аналогично тому, как текстурируют terrain, грунт в игровом движке, можно текстурировать и модели.
В каждом игровом движке или отдельном рендере процесс смешивания материалов может выглядеть по-разному, но суть одна — нужно создать для этого шейдер или найти подходящий под ваши цели.
В целом, идеальное решение скрытия тайлов это редактирование шейдера, смешивание материалов и текстур. Например, в стандартном шейдере Unity есть функция Detail Texture, нужно лишь добавить туда какой-нибудь шум для разнообразия цвета или обратить внимание на эту технологию (статья на DTF).
Вопросы
Как с такой развёрткой запекать тени и Ambient Occlusion?
Ambient Occlusion в играх чаще всего создается при помощи постобработки на камере или запекается в общую карту теней. А карта теней запекается на второй UV-канал, движок генерирует его автоматически или же художники продумывают его заранее.
Если я не хочу использовать тайлы?
Если вы задались таким вопросом, то альтернативных вариантов у вас не много и они будут ещё сложнее в реализации. Возьмём для примера мою модель. Стены кирпича имеют тексель 6 пикселей на сантиметр при разрешении 1024 px, а UV-остров в два раза больше текстуры.
Чтобы сохранить тот же уровень качества текстуры, мне придётся создать для каждой стены отдельный материал, сильно завышать разрешение текстуры, либо разрезать модель на кучу полигонов ради швов и оверлапинга — всё равно, что создать нормальный атлас тайлов.
Когда использовать тайлы, когда тримы, когда атласы тайлов?
- Тайлы используются для текстурирования больших поверхностей, часто используемых в одной и той же сцене или на модели.
- Тримы объединяют в себе несколько бесшовных текстур в одном направлении, поэтому хорошо подходят для вытянутой геометрии вроде труб, балок, перил, поребриков, декоративных узоров на стенах и тому подобного.
- Атлас тайлов используются в тех случаях, когда оптимизация в большем приоритете, чем качество — например, в мобильных играх.
В этом уроке я рассказал практически всё, что знаю. Допускаю, что мог что-то упустить, поэтому задавайте вопросы, критикуйте — по возможности, не обижусь и постараюсь улучшать свои обучающие материалы.