Текстуры травы для unity: Бесшовные текстуры травы, скачать для 3D моделирования и дизайна
|
Unity 2019.2: Работа с материалами в Terrain Tool — Unity — DevTribe: инди-игры, разработка, сообщество
Это обновление пакета расширяет возможности рисования материалов на местности. В этом обновлении вы найдете новые фильтры Brush Mask, переработанный инструмент Paint Texture и улучшения рабочего процесса Terrain Toolbox.
Brush Mask Filters
Возможно, вы уже знакомы с Brush Masks, которые представляют собой кисти Terrain’a, в которых используется одноканальная текстура для определения формы и прочности области Terrain, над которой вы работаете. Чтобы настроить вывод маски в градациях серого, вы можете изменить другие функции кисти, такие как Scale Radius, Falloff и Remap.
Brush Mask Filters — невероятное новое дополнение к Terrain Brush. Эти фильтры добавляют дополнительные операции к кисти, прежде чем вычислять окончательный результат работы маски кисти.
Например, если вы используете фильтр Add со значением ввода 5, высота области скульптинга увеличивается. Это потому, что мы добавили 5 к каждому пикселю маски кисти.
Существуют две категории Brush Mask фильтров. Первая категория содержит фильтры математических операций, которые обычно встречаются в инструментах редактирования на основе узлов для манипулирования текстурами. Вторая категория включает операции работы с ландшафтом.
Фильтр на основе Terrain может содержать серию операций, которые помогают изолировать определенные объекты Terrain. Например, фильтр высоты использует значения минимальной и максимальной высоты, чтобы изолировать определенный диапазон высот ландшафта. Вогнутый фильтр помогает идентифицировать открытые расщелины ландшафта. В этой версии пакета доступно 15 фильтров.
Math operations
- Abs — модуль числа
- Add — добавление
- Clamp — ограничение по диапазону (от и до)
- Complement — добавление (из теории множеств)
- Max — максимум
- Min — минимум
- Multiply — умножение
- Negate — отрицание
- Noise — шум
- Power — возведение в степень
- Remap
Terrain-based
- Aspect
- Concavity
- Height
- Slope
Вы можете легко добавить или объединить несколько фильтров в стеке Brush Mask Filters для достижения разных результатов. Эта новая функция доступна для всех кистей Terrain!
Unity выполняет операции по порядку, сверху вниз. Используя различные комбинации Brush Mask Filters, вы можете достичь действительно интересных и приятных результатов, таких как текстуры Terrain, которые будут описаны позже в этом блоге.
Combining Brush Mask Filters
Вы можете комбинировать несколько фильтров масок кисти для создания сложных кистей, которые соответствуют вашим потребностям.
Вот шаги, показанные в видео:
- Щебень: Добавьте фильтр высоты, чтобы замаскировать русло реки и другие плоские участки, которые будут покрыты водой.
- Песок: Настройте фильтр «Height«, чтобы замаскировать берега реки, и добавьте фильтр «Slope«, чтобы сгладить переходы между изменениями уклона. Затем отключите фильтр, чтобы подправить области резкими переходами текстур. Вы можете отключить фильтры, чтобы быстро изменять стек фильтров без потери данных.
- Трава: Настройте фильтр «Height«, чтобы замаскировать все области ниже берега реки, и отрегулируйте кривую, чтобы сгладить переходы на склонах.
- Камень: Снимите фильтр «Height» и отрегулируйте кривую наклона, чтобы скрыть ровные участки. Используйте фильтр «Slope» для нацеливания на участки с крутыми склонами и слегка смешайте их с более ровными участками травы.
- Мох: Добавьте фильтр «Complement» и установите значение ввода 1, чтобы инвертировать результаты стека. Вместо нацеливания на крутые склоны, фильтр «Complement» позволяет вам ориентироваться на ровные участки и мелкие склоны. Затем добавьте фильтр «Noise«, чтобы рандомизировать результаты, и фильтр «Power«, чтобы повысить резкость областей, на которых вы рисуете. Мох имеет тенденцию расти в областях с высокой влажностью, и в отличие от травы, он может жить на крутых склонах, а также на участках с более высоким уровнем возвышения.
- Снег: Удалите все фильтры, чтобы очистить стек фильтров. Добавьте фильтр «Height«, чтобы замаскировать вершину горы. Добавьте фильтр «Aspect«, чтобы замаскировать грани горы относительно желаемого направления. Используйте фильтр «Аспект«, чтобы имитировать снег, унесенный порывами ветра. Добавьте фильтр «Concavity» для работы с вершинами в долине и имитируйте скопления снега в некоторых областях.
Улучшенный Paint Texture tool
Улучшенный Paint Texture Tool теперь включает в себя совершенно новый инструмент Eyedropper Terrain Layer, а также возможность менять порядок текстур в слоях ландшафта.
Eyedropper tool
Удерживайте Shift + A, чтобы включить инструмент пипетки для слоев текстур ландшафта, а затем щелкните по области ландшафта, чтобы выбрать материал непосредственно из него. Инструмент работает аналогично инструменту «Пипетка» в программном обеспечении для редактирования фотографий. Это значительно ускоряет процесс выбора материалов при рисовании.
Упорядочивание слоев текстур ландшафта
Выбранный вами материал появится в обновленном пользовательском интерфейсе слоя материала, который теперь содержит список, который можно изменить. Переупорядочьте слои материала в пользовательском интерфейсе, чтобы изменить соответствующий ему канал карты Spat. Карты Splat — это текстуры маски распределения материалов, которые Редактор Unity 3D использует на ландшафте. Чтобы одновременно удалить несколько слоев ландшафта, просто установите флажок рядом с каждым слоем, а затем нажмите кнопку «Удалить слой».
Обновление Terrain Toolbox
Рабочий процесс Terrain Toolbox был улучшен несколькими способами. Вы заметите разницу при импорте слоев материала и Splat карт. Вместо того, чтобы вручную выбирать текстуру из папки активов, теперь вы можете импортировать текстуры непосредственно из ландшафта.
Когда вы используете внешнее программное обеспечение для создания контента, такое как World Machine, экспортированные Splat карты могут иногда неправильно ориентироваться. Теперь, когда вы импортируете Splat карты с помощью Terrain Toolbox, вы можете просматривать их и при необходимости корректировать их ориентацию.
Что касается визуализации, Terrain Toolbox также имеет новый раздел для инструментов визуализации. Используйте инструмент «Height Map«, чтобы просмотреть высоту ландшафта при его создании. Это отлично подходит для создания ландшафта, который должен быть относительно равномерным с остальным миром. Это также полезно для создания ландшафта с высоты птичьего полета и для планирования специфических для высоты объектов, таких как озера.
А еще совсем недавно стала доступна бета версия Unity 2019.3, в котором так же есть новые фишки для Terrain Tools
PS. Не забудьте поддержать авторов перевода, поставив плюсик или сделав репост новости :3
Low Poly Nature Pack (4 сезона) [Unity Asset Store] — Low-Poly Art в игровой индустрии / Блоги
Low Poly Nature Pack (4 сезона) [Unity Asset Store] — Low-Poly Art в игровой индустрии / Блоги — XGM
640×480
800×600
1300×768
Fullscreen
Cancel
Data loading…
Доброго времени суток!
Хочу представить вам мой новый пак, выполненный в Low-Poly Art стиле.
Этот пак содержит деревья, кусты, камни, траву и цветы для desktop и мобильных проектов.
В пак входит 156 уникальных моделей и 12 текстур травы.
Для каждой модели доступно 3 варианта префабов (3х156 префабов):
- с разноцветными материалами
- с текстурой-палитрой (один материал с текстурой на все префабы)
- с вертексной раскраской (vertex color shader не входит в состав пака)
Деревья (75-940 треугольников):
- 39 летних
- 32 осенних
- 24 зимних
- 10 весенних
Кусты (70 — 300 треугольников)
- 7 летних
- 7 осенних
- 2 зимних
- 2 весенних
— 3 горшка (116 треугольников)
Камни (32 — 124 треугольника):
- 18 камней (6 обычных, 6 со снегом, 6 с мхом)
Трава/цветы (18 — 54 треугольников):
- 6 цветов (6 моделей и 6 billboard текстур)
- 2 зеленной травы (2 модели и 2 billboard текстуры)
- 4 желтой травы (6 моделей и 6 billboard текстур)
Цена пака на Asset Store: 5$
Ландшафт — База знаний
Скриншот из игры Witcher 3
Посмотри на этот замечательный скриншот из Ведьмака. Попробуем сделать свой, чтобы прокатиться по горным тропам на машине?
Ландшафт
Ландшафт лучше создать как отдельную 3D-модель, например, в Blender или в любой другой программе по работе с трехмерной графикой. Но для наших целей хватит Unity. Игровой движок содержит в себе встроенный функционал, который называется Terrain и позволяет создавать горы, ямы, добавлять деревья и траву. Terrain — трехмерный игровой объект и создать его можно в том же меню, что и примитивные объекты.
Terrain очень большой игровой объект
Чтобы редактировать Terrain, выбери его и найди в окне Инспектор следующие настройки.
Raise / Lower Terrain
Этот инструмент позволяет рисовать горы и углубления (с нажатой клавишей Shift). Если на ландшафте не создаются углубления — подними ландшафт с помощью инструмента Paint Height, о котором рассказывается далее.
Paint Height
Этот инструмент позволяет поднять ландшафт до заданной высоты. Кнопка Flatten поднимает весь ландшафт на заданную высоту (параметр Height).
Smooth Height
С помощью этого инструмента можно сгладить неровности ландшафта.
Вот, что получилось у нас:
Нужный нам ракурс (слева) и Вид сверху (справа)
Paint Texture
Пришло время добавить красок. С помощью этой кисти можно наложить текстуры на ландшафт. Для этого сначала добавь нужные текстуры в окне Инспектор Edit Texture → Add Texture. Добавляй сразу все, которые собираешься использовать, так удобнее будет работать. Текстуры, которые используем мы, можно ⬇скачать тут.
Вот, что получилось у нас:
Промежуточный результат
Paint Details
С помощью этой кисти можно добавить траву и камни на ландшафт.
Рассмотрим процесс создания травы. Нажми кнопку Edit Details… → Add Grass Texture. В параметре Detail Texture выбери текстуру травы. С помощью параметров Min Width (минимальная ширина), Max Width (максимальная ширина), Min Height (минимальная высота), Max Height (максимальная высота) можно изменить размер травы. Цвет травы можно изменить в параметрах Healthy Color (цвет свежей травы), Dry Color (цвет сухой травы). Нажми кнопку Add.
Для текстуры травы нужна подобная картинка: Grass.png
Удерживая кнопку Shift можно удалить траву кистью.
Удерживая кнопку Ctrl можно удалить траву определенного типа.
С помощью этой кисти можно добавлять мелкие объекты на ландшафте (камни). Нажми кнопку Edit Details… → Add Detail Mesh. В параметре Details выбери объект. С помощью параметров Min Width (минимальная ширина), Max Width (максимальная ширина), Min Height (минимальная высота), Max Height (максимальная высота) можно изменить размер объекта. Цвет объекта задается в параметрах Healthy Color (основной цвет), Dry Color (вторичный цвет). Render Mode задает режим отображения объекта: Grass — плоский режим, Vertex Lit — трехмерный режим.
Place Trees
Данный инструмент позволяет сажать деревья на ландшафт.
Деревья — это 3D модели, созданные в специальной программе 3D моделирования. В играх чаще всего используются модели деревьев, созданные в программе SpeedTree. Это платная программа. В ассете «Environment» находятся бесплатные деревья, созданные в этой программе. Его можно добавить также, как ты добавлял ассет Characters. Также, Unity поддерживает деревья, созданные в Blender.
Что получилось у нас (слева) и Скриншот из Witcher 3 (справа)
Нам определенно есть к чему стремиться😂
Теперь можно добавить транспорт! Посмотри 📖инструкцию, чтобы узнать как это сделать.
Присылай администратору сайта скриншоты своей работы с Ландшафтом и мы опубликуем лучшие в сообществе Юниум.
Создание игры «35ММ». Постапокалипсис в России
Всем доброго времени суток, меня зовут Сергей Носков. Сегодня я бы хотел рассказать о создании моего первого полноценного инди-проекта под названием 35ММ, вышедшего в Steam в 2016 году. История конечно давняя, и с тех пор уже было опубликовано несколько статей и интервью на тему проекта, однако, подробного описания процесса разработки не было. Также, практически не были затронуты технические моменты реализации. Об этом, собственно, мы и поговорим.
Начнем с небольшой предыстории. 35ММ — это адвенчура с видом от первого лица в сеттинге постапокалипсиса на территории России. В народе — симулятор ходьбы. Игра повествует нам историю путешествия двух странников по опустевшим землям, оставленным цивилизацией. Основная часть населения вымерла после страшной болезни, и теперь природа отыгрывает у человечества свои очки. К сожалению, уже не помню точно, как зародилась идея данного проекта, но точно помню, что на тот момент я был ярым фанатом темы сталкера, игр «Метро» и вообще подобного атмосферного антуража. У меня всегда вызывали трепет и восторг пейзажи заброшенных городов, промышленных зон и деревень. Уж не знаю, что это за болезнь такая и как такую любовь объяснить, но нас таких много. В общем-то, подобной страсти по данной теме было достаточно для того, чтобы начать создание своего небольшого игрового мира.
Поскольку за плечами у меня уже было два небольших проекта (Свет и Поезд), а также опыт работы в движке Unity, я начал разработку новой игры именно в нем. Если не ошибаюсь, на тот момент уже была доступна пятая версия движка, но я в некоторой степени консерватор (не лучшая моя профессиональная черта), поэтому решил остаться в версии 4.7. Для общего понимания — между версиями движка 4 и 5 очень много существенных различий, особенно в плане рендеринга, освещения и материалов. В Unity 5 появились физически точные шейдеры, способные корректно отражать свет и отображать рефлексы. Простыми словами — блики и отражения на материалах с такими шейдерами выглядят более натурально и симпатично. В 4 версии базовые шейдеры были значительно проще, однако, навыки написания собственных шейдеров могли значительно повысить качество картинки. Об этом поговорим немного позже. Вполне понятно, что разработка игры включает в себя множество аспектов, помимо работы в самом движке. Для того, чтобы в движок было что запихивать-требуется контент: модели, текстуры, звуки, скрипты и т.д. Все то, что в итоге мы видим на мониторе и слышим в колонках. И конечно же, для каждого типа контента требуется свой софт. Для создания 3D моделей я использовал 3D max, для работы с 2D графикой и создания текстур — Photoshop, для работы со звуком — Adobe Audition, код писал в прилагаемой к Unity программе Monodevelop. Особо впечатлительным рекомендую закрыть глаза или перескочить к следующей главе — игра написана на Javascript. Только тсс, никому не говорите. Просто я знаю, что для некоторых это дурной тон и на Javascript уже
никто не пишет. В общем, основные инструменты выбраны и рабочий процесс потихоньку тронулся с места.
С чего все началось
В некоторых интервью я уже упоминал о том, что обычно не имею четкого плана разработки, а лишь общую картину. Поэтому, зачастую, создание локаций происходит стихийно и дизайн продумывается на ходу. Это, конечно, больше минус, чем плюс, но есть и положительная сторона — это очень занимательно и ты никогда не знаешь точно, что будет дальше. Получается так, что игра в некоторой степени живет своей жизнью уже на начальных этапах. Разработка 35ММ началась с создания самой первой локации — лесного заброшенного домика и просторного участка с полями и хвойным лесом.
Для построения поверхности земли использовался террейн с 5-6 текстурами травы и земли. Стандартный шейдер террейна окрашивает поверхность разными текстурами по RGBA маске, которую мы создаем кистью в самом движке, и результат часто выглядит очень замыленным, переходы между текстурами слишком плавные и не кажутся натуральными. Для доработки этого момента был изменен шейдер террейна и добавлена маска смещения. ЧБ текстура «смещала» маску, нарисованную в террейне и создавала более рваные и четкие края, что визуально немного усложняло вид поверхности.
Дополняло поверхность нашей земли несколько типов травы в виде хаотично раскиданных плейнов. В юнити также имеется билборд режим (когда плейны травы всегда смотрят на игрока), но для игры с видом от первого лица он не очень подходит, ибо слишком заметно, как трава «следит» за нашей камерой. С травой всегда нужно быть осторожным и добавлять ее в разумных пределах, поскольку данное удовольствие накидывает достаточно много вызовов отрисовок (drawcalls), а это в свою очередь сказывается на производительности. Чем больше drawcalls — тем выше нагрузка на систему компьютера. Но не стоит забывать, что не одни лишь вызовы увеличивают нагрузку. Есть масса способов убить производительность в игре. Дополнительно к траве на земле для разнообразия были раскиданы меши с ветками и камнями, а также ряд декалей с грязью и следами автомобильных колес.
После создания поверхности переходим к растительности, деревьям и кустам. Основную часть леса (хвойные деревья) я предпочел высадить с помощью инструментов самого террейна — то есть кистью. Плюс данного метода в том, что это делается быстро и легко, к тому же на большой дистанции такой лес трансформируется из мешей в билборды, что очень хорошо сказывается на оптимизации. Однако, вблизи нагрузка сильно увеличивается, поскольку, как я понял, такие деревья не батчатся. Возможно я ошибаюсь, и кто-то меня поправит. Батчинг — очень важный для оптимизации инструмент. Грубо говоря, это объединение мешей с одним материалом в один общий меш, что значительно сокращает количество drawcalls, соответственно снижает нагрузку. Еще один минус рассадки на террейне — одинаковое положение деревьев, то есть все они создаются под одним углом и эта одинаковость сильно бросается в глаза. В связи с этим, некоторые сосны, ели и лиственные деревья я устанавливал вручную под разными углами и с разными размерами, что вносило в пейзаж разнообразие. Таким же способом были расставлены и кусты.
Для полноты картины осталось разобраться с небом. Для этой задачи использовался обычный скайбокс материал с шестью текстурами. Были попытки модифицировать шейдер так, чтобы небо выглядело динамическим, но результат себя не оправдал и эту затею пришлось оставить. Альтернативным вариантом стало использование системы частиц с текстурой облаков и горизонтальными билбордами с анимацией движения. Насколько я помню, аналогичный вариант применялся в игре Stalker, да и наверняка много где еще.
Освещение
В 4-й версии движка Unity был очень удобный режим запекания лайтмапов — dual lightmapping. В текущих версиях имеется аналогичный вариант, но я пока детально не изучал его. Dual режим позволял нам на ближних дистанциях отрисовывать рилтайм тени и блики, но по мере удаления от камеры, все это дело плавно переходило в запеченные лайтмапы, что очень облегчало задачу для нашего «железа». В общем, данный способ я и применял на всех локациях игры. В результате, для каждой средней локации был запечен комплект примерно из 5-10 лайтмапов для ближнего плана, и аналогичное количество для дальнего (на ближнем плане тоже лайтмапы, но только с запеченным амбиент окклюженом).
Вообще, на многих участках я старался использовать полностью запеченный свет, за исключением света солнца. Местами были расставлены Point светильники для подчеркивания акцентов и большей освещенности. В основном это делалось в помещениях, куда проникало мало внешнего света. В ряде мест, конечно же, использовались и рилтайм светильники с тенями: свет от костра, настольной лампы, потолочного или настенного фонаря. Кстати говоря, в работе с освещением пришлось столкнуться с большой проблемой, связанной с Point светильниками и рилтайм тенями. На некоторых участках взгляд камеры на точечный источник света с тенями давал жуткие фризы и тормоза. Не совсем ясно, почему нагрузка была настолько велика, но профайлер в этот момент показывал зашкаливающие значения drawcalls на долю секунды. Исправить ситуацию помогло использование двух Spot светильников, направленных в противоположные друг от друга стороны. Такой вариант оказался менее тяжеловесным.
Модели
Большая часть 3D моделей для игры была создана самостоятельно. Что-то делалось достаточно тщательно, с запеканием карт нормалей и прочими тонкостями, а что-то создавалось на скорую руку в целях экономии времени. Основная часть объектов создавалась группами и использовала единую атлас-текстуру. То есть в одной текстуре находились участки, например, для бетонного блока, дорожного знака, кирпичного мусора, канализационного люка и тд. Это позволяло применять для всех данных объектов один материал, а соответственно, позволяло объектам забатчиться. Как мы помним — это довольно таки неплохо. Некоторые модели были добросовестно скачаны мной с просторов интернета, из свободных библиотек. В основном это мелкие пропсы для наполнения помещений, однако, все эти модели я старался немного видоизменить, чтобы схожесть не сильно бросалась в глаза. Часто замечал в инди — играх одинаковые ассеты, что несколько влияло на восприятие не лучшим образом. Наиболее проблемным в плане создания стал транспорт. Моделирование колесной техники с нуля очень трудозатратно и занимает массу времени. Потому, несколько экземпляров автомобилей было куплено мной в магазине Asset Store.
Отдельной «песней» стало создание персонажей. Это тот еще экспириенс. Для тех, кто не очень хорошо представляет, какой объем работы необходим для того, чтобы на свет появился персонаж, способный как-то существовать в игре, поясню. Создается высокополигональная модель со всеми деталями, пуговицами на рукавах, морщинами на лице и тд. Создается низкополигональная модель того же персонажа с текстурной разверткой (в моей игре количество полигонов на персонажа в среднем было около 5-8 тысяч). Далее с высокополигональной модели для низкополигональной путем хитрых или нехитрых манипуляций снимается карта нормалей, карта амбиента (мягкого затенения). Я обычно из амбиента потом делаю диффузную карту в фотошопе. В диффузной карте в альфа канале создаем карту спекуляра для создания блеска.
Для 2019 года конечно уже слишком примитивно, но для 16 года и для инди-проекта было вполне годно.
Далее, нашего перса нужно зариггать — поместить в него кости, за счет которых он сможет двигать конечностями, шевелить челюстью, сгибать и разгибать пальцы и т.д. Ну и в конечном итоге, все это дело нужно заанимировать. Обычно к персонажу создается набор анимаций с разными состояниями: ходьба, бег, стоячее или сидячее положение. Но требуются также и уникальные фрагменты, например, в моем случае для напарника нашего героя Петровича понадобилось большое количество вариаций действий: открывание дверей, рассматривание карты, драка с бандитами, бросок световой шашки на уровне Бор и т.д. Все это пришлось анимировать вручную, что, конечно, сильно бросается в глаза своей топорностью. Вообще, ручная анимация движений человека — занятие весьма сложное и добиться правдоподобного результата крайне сложно. Поэтому моушн-кепчер является наиболее подходящим для данной задачи решением. Насколько я знаю, сейчас этот вариант дешевле и быстрее, чем работа аниматора, хотя полученные данные нужно обрабатывать и «подчищать» вручную.
Шейдеры
Сразу уточню — о написании шейдеров я понимал на тот момент очень поверхностно. Мое обучение в основном заключалось в разборе готовых примеров и их доработке. Брал различные варианты из сети, менял параметры, добавлял новые или убирал старые и проверял, как это отражается на результате. Оказалось, что это крайне увлекательное занятие. Особо интересным для меня было оперирование разными каналами текстуры в качестве маски. В некоторых случаях я старался уместить максимальное количество информации в одну текстуру и использовать ее. В начале статьи я упоминал о различиях между 4-й и более поздними версиями Unity, а конкретно, о наличии в последних физически корректного шейдинга. Данный недостаток я попытался устранить своими силами и в стандартный шейдер со спекуляром, кубмапой и нормал мапой был добавлен эффект френеля. Это такая особенность отражающих материалов, при которой поверхности под углом, относительно нашего взгляда, отражают окружение (или кубмапу в данном случае) сильнее и обычно выглядят более светлыми и контрастными. Это очень хорошо заметно на глянцевом шаре, края которого кажутся более светлыми, чем центр. Мне удалось повторить данный эффект, а также добавить возможность заблюрить кубмапу в материале, что обычно мы можем наблюдать на отражающих, но шершавых поверхностях. Данный шейдер меня полностью устроил и был применен к большинству материалов в игре.
Вторым интересным опытом было создание шейдера для кожи персонажей. За основу был взят код, найденный в интернете, позволяющий использовать градиентную текстуру, отвечающую за силу и цвет освещения, влияющего на модель. Подобная текстура с красноватым оттенком в середине позволила имитировать человеческую кожу, которая как бы немного просвечивает, то есть имеет свою толщину, в которой свет плавно рассеивается. Эффект не идеальный, но выглядит лучше, чем стандартный пластиковый Bumped Specular.
Помимо вышеперечисленных шейдеров в процессе работы было создано множество второстепенных вариантов с индивидуальными эффектами.
Например, шейдер лужи с кубмапой и деформацией диффузной карты. Поскольку применять реальные отражения для луж слишком накладно, да и рендер в текстуру использовать не хотелось (это когда кадр сохраняется в текстуру и применяется в материале, в ходе чего, например, можно сделать искажения теплого воздуха), я решил сделать простые искажения текстуры земли, натянутой на лужу. Эффект был вполне симпатичным и совсем не напрягал железо. Кстати говоря, для искажений воздуха у керосиновых ламп и костра был как раз использован шейдер с рендером в текстуру. Кажется, это был Heat distort из ассета Detonator. Также, для имитации объемных лучей света был создан вертексный шейдер с эффектом Soft Particle и Rim light эффектом (когда мы смотрим на полигоны под углом, меш уходит в альфу). Это классический и уже «бородатый» способ реализации. Сейчас, для новой Unity есть крутой вариант, работающий на основе постэффекта и позволяющий рисовать реальные лучи света даже с учетом теней.
Еще стоит отметить комплект шейдеров, которые были сделаны для имитации мокрых поверхностей. В игре есть эпизод, в котором в определенный момент начинается проливной дождь и часть материалов плавно приобретает характерный блеск. Основной эффект применялся к террейну, на котором как и в случае с лужами начинала искажаться диффузная текстура. Также проявлялись и подтеки воды на окнах домов. Ну и самой «мокрой» фишкой были стекающие по объективу капли. Здесь на самом деле меня терзали сомнения, ведь у героя не было ни очков, ни шлема, и каким образом капли так навязчиво красуются на экране — было не ясно. Однако, визуально мне эффект так понравился, что я просто не смог от него отказаться.
Так мы плавно переходим к постэффектами. Говоря о каплях на экране — все просто: несколько капель из текстуры множатся и с разной скоростью движутся вниз. Параллельно вниз движутся волны (текстуры градиента), которые умножаются, каждая на свою группу капель. Потом все это дело суммируется, слегка выводится в «диффузку», если можно так выразиться, но в основном применяется в качестве маски смещения координат. В итоге наша картинка искажается от преломлений капель воды. Основной набор постэффектов, которые на камере были всегда или опционно (если игрок их включал или не отключал) — это антиалиасинг, SSAO, Bloom, Aberration, Vignette, Sun Shafts. Все это стандартные эффекты Unity, однако SSAO был модифицирован так, чтобы отрисовка теней на расстоянии сводилась к нулю, ибо вдалеке в тумане темные пятна теней смотрелись странно. Был также изменен и эффект аберрации (это цветовые искажения картинки при использовании линз, что-то вроде цветовых контуров по краям объектов). Стандартный эффект от Unity рисовал бордово-зеленые края объектов (довольно странное решение на мой взгляд). В действительности, чаще всего цвета ближе к желто-красно-синим, что и было мной реализовано. Еще одним постоянным эффектом был самописный колор коррекшн. Стандартный эффект Юнити показался мне слишком ресурсоемким, поэтому был реализован свой, упрощенный. В основном он создавал эффект тонмаппинга и немного менял цветовую гамму на более холодную. Выбор цветовой палитры картинки —это всегда сложная задача, в которой трудно определиться. Бывает так, что могут нравиться совершенно противоположные варианты и принять решение крайне сложно. В данном проекте я остановился на тусклой и холодной гамме. Многим она показалась чрезмерно блеклой, но, как мне кажется, она очень точно передает настроение, которое я пытался отразить в своей игре, настроение печали, уныния и одиночества.
Что же с кодом?
Я неоднократно упоминал в интервью о том, что от темы программирования всегда был далек и больше делал упор на визуальной составляющей. Первый полноценный код я начал писать, работая над игрой “Поезд”, так что к моменту разработки 35ММ некоторые навыки у меня уже были. Вообще, квестовый жанр мне показался очень подходящим для понимания программирования на моем начальном уровне. Большая часть действий в игре основана на триггерах. В триггер (кубик с коллайдером) попадает объект, и начинает что-то происходить, например стартует кат-сцена. В скрипте, как в сценарии к театральному спектаклю, построчно описано, когда и что происходит — сейчас у нас выключается камера игрока, включается камера кат-сцены, появляется персонаж в кадре, запускается анимация разговора и т.д. Я полагаю, что есть инструменты, которые весь этот процесс облегчают (полагаю, потому что не углублялся), но такой вариант мне до сих пор кажется наиболее понятным, потому что ты сам контролируешь все события. Перемещение нашего напарника в игре было реализовано с помощью триггеров, которые являлись чекпоинтами его маршрута. При попадании в триггер могла включаться какая-то новая анимация, или же персонаж мог что-то сказать.
Такой метод использовался на всех уровнях, кроме последнего. На финальной локации в городе, если мы добирались до нее с напарником, он уже не вел нас по маршруту, а наоборот бегал за нами. Там уже использовался контроллер, основанный на NavMesh (системе, которая позволяет объекту искать путь до цели и двигаться к ней).
Сложнее обстояли дела с медведем на второй локации игры. Там был использован контроллер, работающий лишь с ригидбоди (физическое тело), поэтому зверь оказался глуп и часто врезался в деревья и прочие объекты. Физический материал с нулевым трением позволил избежать серьезных застреваний и медведь в итоге как бы соскальзывал и продолжал нас преследовать. Здесь, и вообще на участках, где можно погибнуть, я столкнулся с самой серьезной для меня проблемой — запуск смерти и рестарта. В момент смерти нужно было учесть все текущие состояния персонажа: включен ли фонарик, открыта ли карта, активирован ли нож и т.д. Также требовалось сохранить значения здоровья и всех ресурсов и затем, все, что активировано, требовалось деактивировать и запустить анимацию падения камеры. После затемнения экрана нужно было все вернуть и прочитать сохраненные значения. На самом деле больших сложностей при должном подходе тут нет, но в моем случае выскакивало множество багов: то нож оставался в руках перед глазами в момент атаки медведя, то карта не убиралась — все в таком духе. К тому же, никогда не знаешь как себя в этот момент может повести игрок, куда он побежит и в какие условия заведет медведя, который может где нибудь застрять или, к примеру, атаковать нас через стену. В общем, много нюансов, которые сразу и не предусмотришь.
Взаимодействие нашего персонажа с объектами было реализовано с помощью луча Raycast. Все интерактивные объекты были помечены тэгом Subject, и когда луч в них попадает, он активирует подсветку (меш — индикатор с подсвеченными краями) и включает скрипт, который уже отвечает за то, какое действие мы можем совершить с этим объектов, например подобрать предмет, прочитать записку или открыть дверь.
Для взаимодействия изначально были планы сделать полноценные руки, которые тянулись бы к объектам, это создавало бы более явный эффект присутствия. Но такой вариант представлял для меня большую сложность реализации и перспективу наличия целой “пачки “ багов в дальнейшем, поэтому остались лишь руки, которые носят уже подобранные предметы. Перед камерой висит префаб с маленькими ручками, в которых уже имеются все предметы (фотоаппарат, нож, топор и т.д). При выборе же предмета в процессе игры, нужный включается, а ненужные выключаются.
Интересный момент был связан с анимацией разговора персонажей. Техника примитивна, но я сам додумался, горжусь, ага. Сперва я думал, что при общении персонажей придется при каждой фразе запускать анимацию открытия челюсти в рандомном порядке. Но потом в голову пришло то, что можно скриптом считывать уровень громкости звуковой дорожки в момент проигрывания и переносить этот уровень в float значение, которое уже отвечает за положение челюсти героя. В конечном итоге, челюсть автоматически открывалась при произношении слов в такт звуковому файлу. Это значительно упростило задачу, хотя и выглядело слишком “машинно”.
Оптимизация
Оптимизация — это очень важная часть разработки, от которой зависит то, насколько “гладко” игра будет работать на различном железе. Я затрону оптимизацию именно визуальной составляющей проекта. Для этого существует несколько полезных методов: группы лодов, окклюжен куллинг, отсечение объектов на расстоянии. LOD Group стоит использовать в случае с “тяжелыми” высокополигональными объектами. Для этого создается несколько мешей с разным количеством полигонов. Чем дальше камера находится от объекта, тем более упрощенная модель отрисовывается в кадре. К примеру, для 35ММ лоды применялись в моделях автомобилей, персонажей, некоторых деревьев. Обычно делалось 2-3 лода, среди которых каждый последующий меш имел почти в 2 раза меньше полигонов. Для наглядности: исходная модель автомобиля состоит из 15 тысяч полигонов, первый LOD имеет уже около 9 т. (уменьшается количество ребер, удаляются мелкие детали, типа петель, деталей салона), второй LOD доходит уже до 5 т. (удаляются дверные ручки, зеркала внутри салона, геометрия становится еще проще). Далее в том же духе. Для лодов, кстати говоря, был использован один интересный прием. Когда мы запекаем лайтмапы для объекта с лодами, нам приходиться печь для обоих объектов. Для того чтобы сократить время на запекание и сэкономить память системы, я использовал скрипт, который автоматически переносил назначенную лайтмапу со всеми координатами с родительского объекта (нулевой LOD) на все остальные лоды.
Второй метод оптимизации — это Occlusion Culling. Это механизм, при котором отсекается все, что не находится в поле зрения камеры, либо закрыто другим объектом. Например, когда мы заходим в помещение, за стеной мы уже не видим многих предметов на улице, а поэтому незачем тратить ресурсы на их отрисовку.
Еще один полезный способ упростить рендер — отсечение объектов на расстоянии. Это самый первый вариант, с которым я познакомился еще со времен проекта “Свет”. На камеру вешается скрипт, который настраивает для каждого слоя свое расстояние отрисовки. В моем случае специально было создано три категории слоев, с мелкими объектами (предметы быта, молотки, кирпичи и мелкий мусор), со средним и чуть выше среднего размерами (чайники, кусты, цветочные горшки, небольшие фонарные столбы и т.д). Трем категориям назначались расстояния: 40, 80 и 120 метров. Оказавшись дальше указанного расстояния, камера переставала рендерить соответствующий объект. Вариант очень удобный и действенный, поскольку мелкие пропсы издалека уже не видать, а потому, отрисовывать их нет смысла.
Звук
Основная часть звуков для игры была взята из бесплатных библиотек с просторов интернета. Обычно я качал нужные варианты, а потом комбинировал и миксовал их в Adobe Audition. В общем-то про эту часть работы нечего особо рассказать, ибо это достаточно рутинный, нудный процесс и для меня не особо привлекательный. К слову, работа по внедрению звуков, озвучиванию кат-сцен, подгонке звуковых файлов, чтобы в нужный момент нужный звук проиграл — все это заняло, наверно, одну четвертую общего времени работы над игрой. Единственным приятным моментом тут было внедрение музыки, над которой работал крутой и чрезвычайно талантливый композитор Дмитрий Николаев. Я очень доволен тем что у него получилось, ведь по большому счету, я не знал точно, что именно хотел слышать. Но Дмитрий очень хорошо прочувствовал настроение, которое было заложено в проект и реализовал его в виде атмосферных амбиентов. Получилось нечто фантастичное, загадочное и мелодичное.
Еще одним интересным этапом была работа с голосовой озвучкой персонажей. Несмотря на критику со стороны, я до сих пор доволен результатом и считаю, что актеры очень хорошо справились со своей задачей. К слову, основных персонажей озвучивали Всеволод Петрыкин и Александр Браги, за что им огромное спасибо.
В целом, по работе со звуком каких-то серьезных проблем не наблюдалось, хотя, после релиза обнаружился редкий баг, который я до сих пор не смог побороть, ибо так и не понял его природу. Иногда часть звуков переставала проигрываться, либо звучала с каким-то сильнейшим эффектом эха. При разговоре у героя мог внезапно пропасть голос и точно так же внезапно восстановиться. Были догадки, связанные с большой нагрузкой и большим количеством звуков, игравших одновременно. Также были предположения о связи бага с зонами реверберации, но это не точно.
На этом, пожалуй, все. С момента разработки прошло уже много времени, какие-то вещи подзабылись, а какие-то стали уже совсем не актуальными, но надеюсь, что статья для кого — то окажется полезной и может быть даст ответы на некоторые вопросы. Всем спасибо и удачи!
Уроки Unity3D и Daz3D: Документация MegaSplat 1.6
Известные проблемы:
Unity версий от 5.6 до 5.6.1p2 ломает Массивы Текстур(Texture Arrays). Если вы используете 5.6, пожалуйста, убедитесь, что версия Unity выше, чем 5.6.1p2.
Существуют сложные проблемы с использованием Metal API в OSX, для получения дополнительной информации об этих проблемах см. Нижнюю часть этого документа.
Обзор
MegaSplat — это усовершенствованная система Splat Mapping для Unity, которая позволяет нарисовать до 256 текстур на Мешах или Terrains(Ландшафтах), используя один материал и визуализируя их за один проход на основе карты высот используя смешивание(blending). Традиционные методы отображения сплатов ограничены четырьмя или пятью текстурами за проход, а стоимость эффекта пропорциональна количеству используемых текстур. MegaSplat имеет постоянную стоимость пиксельного шейдера независимо от того, сколько текстур используется. MegaSplat основан на стандартном рабочем потоке Unity Metallic, что означает, что он поддерживает все функции освещения, которые поддерживает Unity.
MegaSplat работает и с мешами, и с Unity Terrains. Шейдеры и набор инструментов доступны для обоих рабочих процессов.
Требования
MegaSplat требует поддержки Texture Array и Unity версии 5.6.1p2 или выше. Texture Array доступны на большинстве платформ, за исключением DX9 и openGLES2.0. Если при открытии примера сцены вы видите черный ландшафт, вероятно, это связано с тем, что Unity работает в режиме эмуляции или в DX9. Чтобы это исправить, убедитесь, что в настройках Edit>Graphics Emulation установлено значение «No Emulation»:
Также убедитесь, что ваш редактор работает в режиме DX9 или OpenGL/Metal. Текущий используемый API указан в верхней части окна Unity:
Иногда Unity возвращается к использованию эмуляции или запуску в DX9 или DX11 в режиме DX9, если используется более старая встроенная видеокарта. Когда это происходит, ландшафт отображается как черный.
Обратите внимание, что при сборке для OSX Unity версии 5.6 и выше, по умолчанию, используется значение Metal, но в редакторе используется OpenGL. Пожалуйста, обратитесь к разделу в конце этого документа для получения дополнительной информации о рендеринге в MegaSplat: Metal и OpenGL.
Быстрый старт
Лучший способ понять, как работает MegaSplat, — запустить игру в приведенных примерах. В MegaSplat есть ДВА рабочих процесса, один для работы с мешами (с использованием Vertex Painter) и другой для работы с Ландшафтами(Terrains) Unity (с использованием Terrain Painter). В следующем руководстве используется набор инструментов Vertex, поэтому убедитесь, что вы открываете правильные сцены и набор инструментов.
— Откройте сцену MegaSplat/Examples/Scenes/Mesh.unity или MegaSplat/Examples/Scenes/MeshTessellation.unity
— Выберите меши GameObject. Выбрав корневой игровой объект, вы можете одновременно разрисовать все остальные игровые объекты, связанные с ним.
— Убедитесь, что свойство Active является true
— Перейдите на вкладку Custom
— Нажмите на свойство селектора объекта «Brush» и выберите «MegaSplat_Example» в качестве кисти.
— Выберите текстуру из меню и начинайте рисовать
Обратите внимание, что все рисование с помощью шейдеров MegaSplat должно выполняться на вкладке «Custom» или «Flow», если направление рисования идет в рисовании вершин. Рисование цвета вершин или UV-каналов может иметь нежелательные эффекты, так как эти данные используют шейдеры.
Окно Vertex Painting В первом разделе этого окна вы можете включить или отключить Vertex Painter, показать данные, нарисованные на вершинах, используя шейдер предварительного просмотра, изменить вид кисти(brush visualization) и переключаться, если нужно отобразить каркас выбранных мешей. Вы можете отменить любые изменения на любых вершинных каналах, нажав на кнопку в полосе «Clear Channel». Все редактирование в рисовании вершин неразрушаемо, но отменяемо. Следующая область содержит различные настройки кисти, такие как размер(Size), течение(Flow) и спад(Falloff). Рисование вершин поддерживает давление планшета. Вы также можете заполнить все выбранные меши с помощью кнопки Fill(Заливка). Наконец, вы можете изменить режим кисти и выбрать кисти для рисования. |
Режим кисти позволяет рисовать, используя разные слои и умные кисти. При использовании двухслойного шейдера вы можете рисовать на верхнем или нижнем слое. Вы можете рисовать отдельные текстуры за раз(Single), кластеры текстур(Claster), которые выбираются из набора текстур на основе функций шума, значений угла или высоты или с помощью смешанной кисти.
Параметр «Blended (Смешанная) кисть» рисует сразу на обоих слоях, позволяя выбрать верхнюю и нижнюю текстуры и использовать шум для наложения между ними. Ее можно использовать для создания очень сложных кистей.
Стратегия, которую я обычно использую при рисовании, состоит в том, чтобы заполнить нижний слой одним набором текстур, затем переключиться на верхний слой и смешать другой набор текстур, а затем переключиться обратно на нижний слой, чтобы смешать третий набор. Хотя в каждой вершине на каждом слое может существовать только одна текстура, подобная работа в обоих направлениях позволяет мне создавать богатую и сложную поверхность естественным образом.
Как только вы закончите играть с примером сцены, остальная часть этой документации поможет вам настроить ваши собственные меши и текстуры для использования с системой, а также понять все инструменты и функции MegaSplat.
Работа с вашими собственными данными
Обработайте ваши меши
Если вы работаете с мешами, MegaSplat требует определенных данных каждой вершины для работы. Этот процесс может потребовать разделения некоторых вершин, что приведет к немного большему числу вершин, в зависимости от топологии вашего меша. Чтобы преобразовать меш, откройте конвертер в Window-> MegaSplat Mesh Converter и перетащите игровой объект из окна проекта в поле «Game Object», и все меши, содержащиеся в этом ассете, будут преобразованы. Ваш меш должен быть настроена на чтение/запись в настройках средства импорта, чтобы данные меша были доступны для обработки. Нажмите кнопку, и рядом с вашим исходным ассетом будет создан новый ассет с добавлением «_splat» на имя.
Обратите внимание, что если вы планируете использовать статическую оптимизацию меша или отключите чтение-запись, вы захотите запечь свои меши, когда закончите их рисовать. Это обсуждается позже в этом документе.
Создание текстурных массивов
MegaSplat основан на массивах текстур, которые являются новой функцией текстурирования, представленной в Unity 5.4. не предоставляет инструментов для управления массивами текстур, поэтому MegaSplat предоставляет их для вас. Массив текстур — это, в основном, длинный список текстур, которые действуют как единый ресурс для графического процессора. Массивы текстур в MegaSplat управляются объектом TextureArrayConfig, который автоматически упаковывает и преобразует исходные текстуры в несколько массивов текстур.
Создание текстуры массива
Щелкните правой кнопкой мыши в представлении проекта внутри этой папки и перейдите в «Create->MegaSplat->Texture Array Config»
Выберите созданный конфиг и дайте ему имя.
После того, как вы создадите Texture Array Config, вы будете управлять всеми текстурами для ваших материалов из этого интерфейса.
Настройки управляют окончательным размером и настройками созданной текстуры. Вы можете использовать текстуры любого размера для ввода, но графические процессоры требуют, чтобы все текстуры в массиве текстур имели одинаковый размер, поэтому упаковщик текстур преобразует вашу текстуру в размер, указанный здесь.
Пакетный импортер позволяет импортировать целые каталоги текстур одновременно. Вы можете установить имя расширения для каждой текстуры, и все текстуры в выбранном каталоге с этими расширениями будут автоматически помещены в конфигурацию.
В списке текстур вы можете управлять исходными данными для каждой текстуры. Для каждой записи вы можете указать вещество или список исходных текстур для каждого компонента поверхности PBR. Если вам не хватает одной из этих текстур, упаковщик текстур создаст недостающие данные из предоставленных вами карт (сгенерирует карту нормалей из вашей карты высот и т. Д.), Когда он упакует данные в массивы.
Текстуры diffuse, normal, height, smoothness и ao упакованы в два массива текстур. Если используется металлическая или эмиссионная карта, будет создан другой массив для хранения этих данных. Если назначена альфа-текстура , будет создан отдельный альфа-массив.
После создания вы можете назначить эти массивы вашим материалам так же, как вы бы назначили обычную текстуру.
Нажатие «Update» скомпилирует ваш массив. Это может занять несколько минут, так как необходимо упаковать текстуры вместе и сгенерировать все недостающие текстуры, которые ему нужны.
Также есть возможность сортировать ваши текстуры по имени.
Библиотека кластеров текстур (необязательно)
Каждый Texture Array Config также содержит библиотеку кластеров текстур. Кластер текстур — это группа текстур, которая должна рассматриваться как одна при рисовании. Например, у вас может быть три варианта текстуры грязи и камня, и вы хотите нарисовать их в случайных вариациях. Это может быть огромной визуальной победой, поскольку это сломает любой тайлинг. Используя эту технику, вы можете предпочесть меньшие текстуры с большим количеством вариаций, которые могут выглядеть намного лучше, чем одна текстура с высоким разрешением.
MegaSplat может автоматически генерировать эти кластеры для вас на основе соглашений об именах. Например, если вы назовете свои текстуры mud_01, mud_02, mud_03 и нажмете «Auto Generate Clusters» в редакторе конфигурации массива текстур, он автоматически создаст кластеры этих текстур. Вы также можете добавить их вручную с помощью кнопки «Create New Entry».
Если вы откроете один из сгенерированных кластеров, вы увидите список всех текстур, которые он использует, и систему смешивания, которую он использует, под ними.
Вы можете автоматически генерировать или создавать новые кластеры текстур с помощью редактора библиотеки кластеров. При рисовании, какая текстура будет выбрана, будет основываться на одной из трех функций: Noise Angle Height |
Редактор Noise(Шума)
В этом режиме функция шума используется для определения того, какая текстура входит в какую вершину. Функция шума показывает частоту и амплитуду, позволяя вам регулировать частоту и разнообразие выбора, а также значение наложения, которое определяет, где находится центральная точка наложения. Небольшой предварительный просмотр амплитуды шумовой функции показан справа; если выходной сигнал шумовой функции ближе к черному, он выбирает текстуры в начале кластера, если он ближе к белому, он будет выбирать текстуры ближе к концу кластера.
Angle(Угол)
Опция угла позволяет выбирать текстуры на основе угла вершины нормали. Это выражается в виде кривой анимации, отображающей угол от -1 (вниз) до 1 (вверх) нормали вершины к значению от 0 до 1, представляющему положение в кластере. Если бы у нас было три текстуры в нашем кластере и нарисованы по всей поверхности, используя кривую по умолчанию, первая текстура в массиве была бы применена к вершинам, которые в основном направлены вниз, вторая текстура была бы применена к нормалям вершин, указывающим в основном вбок, и третье будет применено к нормали вершин, направленной в основном вверх.
Height(Высота)
`Параметр высоты аналогичен параметру угла, за исключением того, что он отображает значение высоты 0-1 вместо нормального угла вершины. В этом режиме текстуры ранее в кластере будут применены к нижней части объекта, а текстуры позже в верхней части. Вы можете использовать кривую, чтобы настроить это отображение.
Настройка ландшафта
Чтобы начать работу с Unity Terrain в MegaSplat, просто выберите ландшафт и откройте инструмент рисования ландшафта. Окно рисования ландшафта заметит, что ваш ландшафт не в формате MegaSplat, и спросит вас, хотите ли вы преобразовать его. Когда вы конвертируете ландшафт, он сгенерирует материал и шейдер, создаст текстуры подложки, необходимые для хранения данных сплата, и назначит их ландшафту. Как только это будет сделано, вам нужно настроить материал и шейдер. Вы можете нажать кнопку «Выбрать материал» в Terrain Painter, настроить параметры шейдера и назначить массивы текстур. Когда вы вернетесь в Terrain Painter с выбранным ландшафтом, выберите в меню конфигурацию массива текстур, и появятся инструменты рисования.
MegaSplat также содержит систему для синхронизации настроек материала и шейдера на многих территориях. Если вы выберете несколько ландшафтов одновременно, он добавит компонент к каждому ландшафту, который содержит ссылку на материал шаблона. Изменения в материале шаблона будут автоматически распространяться на все территории, которые его используют.
Если ваша местность ранее была текстурирована с помощью другой программы, вы можете преобразовать это текстурирование в формат MegaSplat с помощью преобразователя местности, описанного ниже.
Генератор шейдеров
MegaSplat стал слишком большим, чтобы использовать встроенные в Unity опции shader_feature и multi_compile для своих шейдеров. Теперь он имеет генератор шейдеров, который записывает новые версии шейдеров, когда вы меняете в них настройки. Это позволяет MegaSplat иметь гораздо больше опций, чем традиционный шейдер, повышает мою способность оптимизировать систему и позволяет избежать десятков шейдеров на выбор с произвольно выбранными комбинациями функций. Скорее, почти все функции могут быть смешаны и сопоставлены с тем шейдером, который вам нужен.
Чтобы создать новый шейдер MegaSplat, щелкните правой кнопкой мыши в представлении своего проекта и выберите «Создать-> MegaSplat-> MegaSplat Shader».
Затем создайте материал и назначьте созданный шейдер. Вам также нужно будет присвоить массивы текстур, созданные с помощью Конфигурации массива текстур, для рассеянного и нормального слотов, так же, как вы бы назначали текстуры обычным материалам. Выберите ваш материал, и первый раздел интерфейса — это Shader Compiler:
Обратите внимание на предупреждение в верхней части: при изменении одного из этих значений шейдер, используемый этим материалом, будет регенерирован с новыми параметрами, изменяя возможные параметры и традиционные параметры материала под ним. Это означает, что если несколько материалов используют один и тот же шейдер, вы также измените эти параметры на всех них. В большинстве случаев вам понадобится всего несколько уникальных шейдеров на сцену. Вам нужно будет установить тип шейдера на ландшафт или сетку, в зависимости от того, какой рабочий процесс вы используете.
Опции:
— Name
— Это путь к материалу в выбранном шейдере
— Тип шейдера
— Меш или Terrain
— Alpha Mode
— Доступны режимы Альфа или Альфа Тест . Выставляет свойство для альфа-массива.
См. Альфа-режим для получения дополнительной информации ниже.
— Tessellation
— Доступны None, Edge, или Distance на основе Tessellation .
— Phong Curve. Когда включено, используется Phong Tessellation для полного сглаживания сетки.
— Tessellate Shadow Pass
— Нужно ли запустить тесселяцию на shadow pass?
— Generate Fallback Shader
— Вызывает создание второго запасного шейдера для устройств, которые не поддерживают тесселяцию.
— Displace From Center
— При значении false смещенные вершины перемещаются только вверх вдоль нормалей от исходной поверхности. Когда true, смещение центрируется вокруг исходной вершины, двигаясь как вверх, так и вниз.
— Per Texture Tessellation Params
— Позволяет контролировать количество и Up Bias на текстуру
— Splat UVMode
— Управляет UV выделением меша.
— UV берет координату UV из первого набора UV меша
— UV2 берет координаты UV из второго набора UV меша
— UV Project использует плоскую проекцию для генерации UV
— Вы можете выбрать локальное или мировое пространство
— Доступны Top, Front, или Side проекции
— Вы можете выбрать использование спроецированных касательных или касательных моделей. Обратите внимание, что модель может иметь только один набор касательных, поэтому выравнивание карты нормалей может быть основано только на проекции или на модели, но не на обоих.
— Triplanar использует трипланарные UV, которые смешивают текстуры, проецируемые с верхних, передних и боковых проекций локального пространства. Трипланар может быть ресурсоемким, потому что ему нужно в 3 раза больше образцов.
— Add Second UV
— Это позволяет вам иметь дополнительный набор UV для макротекстуры. По умолчанию макроструктура берет UV из первого набора UV меша. Однако, добавив второй набор UV, вы можете использовать проекцию для макротекстуры, второй набор UV или даже использовать трипланарное текстурирование для карт сплат и координаты UV для вашей макротекстуры.
Включение этой опции повышает минимальную модель шейдера до 4.0 из-за количества текстурных интерполяторов, необходимых для прохождения дополнительного набора UV.
— Lighting mode
— Текущие варианты: StandardPBR и Ramp. При линейном освещении для представления реакции рассеянного освещения используется 2-мерная текстура. Это полезно для нефотореалистичного рендеринга и устраняет необходимость в ресурсоемких расчетах освещения.
— Layer Mode
— Single Layer: один слой данных MegaSplat на контрольную точку
— Two Layer: два слоя с коэффициентом смешения между ними
— Detail Texture: один слой MegaSplat, но с детальной текстурой, отобранной для второго слоя
— Alpha Layer: позволяет наложению второго слоя в смешивающем режиме на макротекстуру (первый слой действует как функция стирания). Полезно, когда вы хотите смешать наложения с традиционными объектами текстуры, например: смешивание песка с основанием здания или нанесение грязи на крышу.
— Bottom Layer Texturing
— Painting: режим по умолчанию, позволяет рисовать на этом слое, с выбором текстуры
— Project 3 way: использует метод процедурной проекции вместо рисования
— Когда эта опция включена, предоставляется выбор, будет ли эта проекция происходить в мировом или локальном пространстве.
— Top Layer Texturing
— Painting: режим по умолчанию, позволяет рисовать на этом слое, с выбором текстуры
— Project 3 way: использует метод процедурной проекции вместо рисования
— Когда эта опция включена, предоставляется выбор, будет ли эта проекция происходить в мировом или локальном пространстве.
— Per Tex Flow Mode
— None: нет отображения потока
— Flow: отображение потока включено
— Flow: отображение потока с преломлением (только двухслойный шейдер)
— Per Tex Scale
— Позволяет управлять масштабированием uv текстуры
— Per Tex Material
— Позволяет контролировать металлический, гладкость и пористость текстуры. Обратите внимание, что металлик и гладкость используются только в том случае, если вы не предоставляете версию для каждого пикселя. Пористость контролирует, как материал реагирует на влажность, материалы с более низкими значениями пористости темнеет альбедо во влажном состоянии.
— Per Tex Contrast
— При использовании PerTextureProperties вы можете при желании установить контраст смешивания для карт на каждой текстуре. Обратите внимание, что смешение слоев по-прежнему контролируется стандартным ползунком контраста.
— Per Tex Glitter
— Включает функцию блеска и предоставляет ползунок для силы блеска на текстуру
— MacroTexture
— Использовать макрос текстуры по всему мешу или ландшафту?
— Splats Fade To Macro
— Устанавливает факторы смешивания, чтобы карт splat показывались близко и и постепенно исчезали в макротекстуре и скрывали следующие два свойства.
— Layering
— При смешивании, сверху макротекстура или сплат карты?
— Blend Mode
— Как смешать макротекстуру с картами сплат
— Detail Noise Texture
— Добавляет возможность иметь единую текстуру деталей для всех данных карт сплат.
Это очень дешево, намного дешевле, чем режим текстурирования деталей, и все равно выглядит великолепно..
— Per Texture Detail Strength
— Позволяет контролировать уровень шума детали на текстуре
— Distance Noise Texture
— В основном та же методика, что и в Detail Noise Texture, но вместо того, чтобы смешиваться близко, сливается, когда объект удаляется дальше. Это можно использовать с низкими значениями шкалы, чтобы поместить «макро» шум объектов на расстоянии.
— Parallax Map
— Следует ли использовать параллактическое отображение? Это создает образцы диффузных текстур во второй раз, чтобы создать эффект глубины. Также работает с тесселяцией для создания еще лучшего эффекта глубины (который может позволить вам снизить факторы тесселяции)..
— Emission Map
— Следует ли использовать Emission splat map?
— Distance Resampling
— Ресэмплинг всех сплат карт на второй UV шкале и смешивание их с исходными образцами. Это может быть использовано, чтобы помочь уменьшить тайлинг на расстоянии (хотя я лично предпочитаю хорошо спроектированные кластеры текстур, которые намного менее ресурсоемкие).
— Puddles
— Позволяет рисовать в UV3.y тобы на поверхности появлялись лужи. В инструменте Terrain Painter предусмотрена отдельная вкладка Puddles для рисования луж.
— Доступны несколько режимов луж:
— Puddles
— Основная лужа стоячей воды
— PuddleFlow
— Стоячая лужи, но вода с мэппингом потока
— PuddleRefractive
— Преломляющая вода, которая искажает ландшафт под ней
— Lava
— Для рисование поверхностей лавы
— Существует также опция (“Push Terrain Down”) для управления тем, как лужи взаимодействуют с картой высот. Когда false, рисование луж накапливает воду на текущей поверхности. Когда true, ланшафт сдвигается вниз, как будто она сдвинулась ниже уровня воды. Во многих случаях это тривиальное различие, но если вы анимируете сбор воды в области, вам не нужно, чтобы камни двигались, но лучше, чтобы вода накапливалась. Однако, если вы имеете дело в основном со статичным рельефом ландшафта, то, когда камни выталкиваются, когда вы рисуете воду в область, эта область остается плоской с ровной плоскостью воды..
— Puddle Foam доступна при использовании режимов PuddleFlow или PuddleRefractive, что позволяет упаковывать текстуру пены в канал B карты нормалей. Пена появится вокруг камней и по всей поверхности воды.
— Puddle Refraction Depth Dampen, доступная при использовании режима PuddleRefractive, добавляет ползунок, который контролирует степень ослабления рефракции в глубоких областях местности. Идея здесь похожа на пену в том смысле, что мы хотим, чтобы участки воды, которые глубже, имели более спокойное, более широкое преломление, а участки вокруг камней, которые были более мелкими, имели более турбулентное преломление.
— Доступна опция glitter чтобы добавить блеск в лужи
— Rain Drops
— Позволяет анимированные капли дождя в лужах. Дождь может увеличиваться и уменьшаться по мере изменения вашей погоды.
— No Rain On Walls позволяет фильтровать капли дождя на основе угла нормалей, чтобы они не появлялись на стенах.
— Wetness
— Влажность позволяет вам рисовать, насколько влажна данная поверхность. Это может быть очень полезно в сочетании с лужами или как отдельный эффект на стены пещеры и тому подобное.
Влажность рисуется в канале UV1.w или с помощью вкладки terrain painter’s wetness при работе с Terrains.
— Snow
— Снег позволяет использовать глобальную текстуру снега для всей сцены. Текстура карты нормалей всегда в формате NormalSAO. Снег предназначен для взаимодействия с лужами, позволяя вам растопить снег в лужи или потоки, открывая скалу под ним.
— Опция “snow over macro texture” будет применять снег после применения макро-текстуры, позволяя динамическому снегу покрывать текстуру на расстоянии.
— Опция snow glitter, чтобы включить блеск для снега
— Disable Bottom Layer Blend
— Отключить смешивание по высоте в нижнем слое карты сплат, выбрав только одну текстуру для каждого треугольника. Это полезная оптимизация при текстурировании неорганических поверхностей с помощью MegaSplat. Представьте, что у вас есть дом с текстурой стены, крыши и пола. Вы можете назначить все вершины на крыше одной текстуре, все вершины на полу — другой и т. д., Чтобы полностью текстурировать дом, избегая необходимости упаковывать текстуры в список текстур. Это бы хорошо работало, но у вас возникла бы проблема, состоящая в том, что текстура отбиралась 3 раза и смешивалась на полигоне. Включение этой опции сделает так, что для каждого треугольника будет выбрана только одна текстура, а смешение не используется.
— Low Poly Look
— Вызывает геометрический шейдер, чтобы придать каждому треугольнику твердый край. Доступен второй вариант, который позволяет смешивать жесткие и мягкие края.
— Process Mesh
— Осуществляет ли процесс преобразования меша в геометрический шейдер. Настоятельно рекомендуется выполнять предварительную обработку данных меша вместо использования этой опции, но если вы абсолютно не можете предварительно его обработать или построить свой меш в соответствии с требованиями MegaSplat (или просто хотите увидеть результаты до этого), эта опция делает эту работу в геометрическом шейдере. Однако это намного медленнее.
— Curved World
— Если ассет Curved World установлен, эта опция будет генерировать шейдеры с поддержкой Curved World (дополнительная информация Curved World в asset store).
— Custom Code
— При включении MegaSplat сгенерирует несколько специальных файлов для вашего шейдера, которые позволят вам вставить собственный код шейдера в различные части конвейера, что позволит вам настроить MegaSplat сверх того, что предусмотрено в пакете.
— Shader Level Override
— Позволяет увеличить уровень шейдера в скомпилированном шейдере. Это может быть полезно, если вы хотите явно форсировать совместимость с конкретной платформой или вам нужны дополнительные образцы текстур для вашего пользовательского кода. Обратите внимание, что если MegaSplat необходимо увеличить модель шейдера (скажем, до 4,6 при включении тесселяции), он увеличит ее выше этого значения, чтобы шейдер работал.
— Debug Options
— Позволяет просматривать выходные данные каждого канала (альбедо, высота, нормали и т. Д.). Это используется Render Baker для запекания текстур, но также полезно для отладки.
Shader Options
Остальные настройки материала являются традиционными для шейдера.
Ниже объясняется, но параметры, которые вы увидите, будут зависеть от
настроек вашего шейдера:
Макротекстурирование позволяет назначить текстуру для всего объекта или ландшафта. В разделе генерации шейдеров представлен ряд опций того, как макроструктура смешивается с картами сплатов. Самым распространенным методом является смешивание данных карты сплат и макротекстуры, которая действует как оптимизация на расстоянии, позволяя вам прекратить выполнение функций отображения сплатов и выполнять только выборку макротекстуры. Тем не менее, макротекстурирование может использоваться другими способами, такими как global tint, или в качестве горизонтальной полосатой текстуры для полосатого ландшафта (используйте второй набор UV для проецирования текстуры горизонтально по ландшафту).
Раздел Splat Map шейдера. Interpolation contrast контролирует, насколько резким является переход между текстурами. По мере того, как вы понижаете значения, переход становится более мягким, а когда вы повышаетесь, становится намного более четким. Этот параметр будет иметь огромное влияние на сочетание текстур! Вы также можете контролировать это для каждой текстуры с помощью опции PerTexContrast.
Свойство Texture Scale позволяет масштабировать размер текстур карты сплат по сравнению с основными UV (или трипланарными UV ).
Parallax height (показывается, когда включен Parallax) позволяет создавать эффект увеличения глубины за счет повторной выборки диффузных текстур. Слишком высокие значения могут показывать небольшие артефакты, а значение 0 не будет иметь никакого эффекта. Расстояние затухания параллакса указывает расстояние, на котором эффект параллакса начнет затухать. При 2-кратном увеличении этого расстояния эффект параллакса перестанет вычисляться, что сделает шейдер менее ресурсоемким на расстоянии.
Displacement — это общее расстояние от исходной поверхности, на которое может быть сдвинута тесселяционная вершина.
Mip Bias позволяет вам ссылаться на более низкий уровень карты MIP при выполнении смещения. Это и немного быстрее, и обычно обеспечивает визуальное повышение качества, не позволяя смещению создавать как можно больше шипов из мелких деталей на карте высот.
Shaping — это отдельный контроль контраста того, как слои Splat Mapping смешиваются вместе.
Up Bias позволяет смещать displacement в сторону восходящего вектора, а не по нормали. На таких поверхностях, как галька и небольшие камни, их выступание со стороны склона выглядит неправильно.
Up Bias и Displacement может быть скорректировано для каждой текстуры, если включены свойства для каждой текстуры.
В тесселяции на основе Distance у вас есть коэффициент тесселяции (сколько раз делить данный треугольник), а также минимальное и максимальное расстояние, на котором это значение интерполируется.
В тесселяции на основе Edge у вас есть максимальный размер экрана, который получит ребро до его разделения.
Значения min/max также используются для уменьшения смещения, скрывая переход.
Тесселяция может быть очень ресурсоемкой функцией, поэтому рекомендуется сохранять коэффициент тесселяции или длину ребра как можно более консервативными.
Работа с Тесселяционными Мешами
Трещины могут появляться в мешах при использовании тесселяции. Это может быть вызвано тем, что вершина имеет одинаковую позицию, но не одну и ту же нормаль (жесткое ребро) или координату UV. Вы можете нарисовать демпфирование смещения в канале UV3.z вершин, чтобы подавить смещение в этих точках. Чтобы сделать это, переключитесь на вкладку Paint в Vertex Painter и выберите UV3_z в качестве целевого канала. Установите значение кисти на 1 и нарисуйте вершины. Вы также можете использовать это, чтобы контролировать величину смещения на вершину. Значение 0 будет иметь максимальное смещение, а значение 1 не будет иметь смещения.
Detail Texturing
При использовании режима Detail Texture, детальные текстуры можно смешивать по мере приближения к поверхности, обеспечивая улучшенное чувство разрешения. Обратите внимание, что для детальных текстур в этом режиме требуется массив текстур, и для них используется тот же индекс, что и для основных текстур сплата. В противном случае параметры масштабирования, наложения и затухания аналогичны параметрам макротекстуры. Для многих случаев использования Detail Noise является более предпочтительным вариантом, так как он не требует полного массива текстур деталей и не использует второй слой MegaSplat для текстурирования деталей.
Параметр «Detail Noise» — это гораздо менее ресурсоемкая форма текстурирования деталей, которая работает со всеми другими режимами слоя и режимами UV. Если эта опция включена, у вас есть одна детальная текстура для всего ландшафта, и вам не нужно иметь отдельный массив текстур для детальных текстур. Это делает его намного менее ресурсоемкой, чем в режиме Detail Texture, и при этом может выглядеть потрясающе, предотвращая расплывчатость объектов из-за отсутствия текстурного разрешения.
Без Detail Noise обратите внимание на размытые текстуры, когда камера находится слишком близко
С Detail Noise размытые пиксели остались в прошлом
Каналы Blue текстуры используются для модуляции альбедо, при котором каналы Red / Green модифицируют нормаль, а канал Green вносит субтрактивный шум в гладкость. Вы можете думать о них как о карте норм + яркость в синем канале, но, честно говоря, это не имеет большого значения, если шум сосредоточен на 0,5 вокруг изображения, а текстура линейна. Вы можете включить Per Texture Noise Strength в шейдерном генераторе, чтобы контролировать, насколько эта деталь отображается на каждой текстуре.
Текстура DIstance Noise
Текстурирование Distance Noise является той же базовой техникой, что и Detail Noise, но начинает постепенно исчезать на начальном расстоянии и полностью исчезает на конечном расстоянии. Это может позволить вам ввести текстуру шума в стиле «макро», на расстоянии.
Без Distance Noise
С использованием Distance Noise
Flow Mapping
Текстура Flow Mapping позволяет создавать движущиеся поверхности. Пользователи могут рисовать направление потока, используя набор инструментов рисования, для мешей или ландшафтов. Когда этот параметр включен, отображаются общие настройки скорости и интенсивности, хотя пользователь может регулировать скорость потока для каждой текстуры в следующем блоке. По умолчанию отображение потоков не применяется к каждой текстуре; Вы должны установить значение скорости для текстур, которые вы хотите отобразить на карте.
Направление потока отображается в каналах UV2 zw или через вкладку «Flow» в инструменте Terrain Painter. Чтобы нарисовать направления потока на мешах, переключитесь на вкладку «Flow», выберите каналы UV2_ZW и нарисуйте текстуру, в которой вы увеличили скорость потока. Вы также можете включить режим предварительного просмотра в окне Vertex Painter и просмотреть направления потока на текстуре воды или в виде стрелок на поверхности.
Чтобы увидеть анимацию потоковых карт в редакторе, вам нужно включить Animated Materials в строке меню. Обратите внимание, что при использовании двухслойного шейдера будет течь только текстура, нарисованная на верхнем слое; это так, что это может быть необязательно альфа с нижним слоем.
Если вы используете многослойный шейдер, отображение потока применяется только к верхнему слою. Доступны значения альфа и преломления, позволяющие создавать эффекты, подобные воде, которые показывают и искажают текстуру первого слоя. Когда преломление включено, вместо этого используются свойства металла для текстуры и гладкости для масштабирования значений альфа и преломления каждой текстуры. Это позволяет вам иметь воду (прозрачную/преломляющую) и лаву (непрозрачную/преломляющую) в одном и том же шейдере. Чтобы это работало, убедитесь, что глобальная Flow Alpha установлена в 1, а затем установите Flow Alpha для каждой текстуры.
Часто бывает полезно иметь настройки для каждой текстуры в массиве; однако Unity не обеспечивает поддержку свойств массива. Чтобы обойти эту проблему, когда в генераторе шейдеров включено какое-либо свойство для каждой текстуры или когда включено отображение потока, текстура 256×4 записывается для хранения различных значений для каждой текстуры.
В этом окне будут показаны только те свойства, которые вы включили. Выберите текстуру с помощью ползунка индекса и настройте любые свойства для этой текстуры. Если вы хотите установить все текстуры в массиве для использования этого значения, нажмите кнопку All, и текущее значение будет применено ко всем текстурам.
Система луж в MegaSplat способна создавать стоячие лужи, подобные тем, которые видны на городской улице, а также потоки, которые текут по ландшафту вместе с пеной, которая взаимодействует с поверхностью. Основным преимуществом использования системы луж по сравнению с системой картирования потока является то, что она взаимодействует с местностью более правдоподобным образом и обычно менее ресурсоемко, чем расположение потока на карте.
Когда режим лужи включен, вы можете смешивать маленькие лужи, рисуя в канале UV3.y или используя вкладку луж в Terrain Painter. Значение 0 не будет отображать лужу, а значение 1 будет полностью загружено.
Лужи и влажность вводят некоторые новые материальные понятия, с которыми вы, возможно, не знакомы, такие как пористость. Оно представляет, насколько пористый материал — очень пористые материалы будут собирать больше воды, чем остальные материалы, и, таким образом, будут иметь более блестящую и темную поверхность во влажном состоянии. Поскольку пористость имеет много общего с шероховатостью, пористость на пиксель рассчитывается на основе карт гладкости, а затем модулируется на уровне текстуры или глобальной пористости.
Функция «Puddles» содержит несколько режимов: от наименее ресурсоемких до самых требовательных к мощности компьютеров.
— Puddles
— Полезен, если вам нужны просто стоячие лужи воды.
— PuddleFlow
— За немного большую ресурсоемкость, вы можете карту нормалей flowmap передать поверхности лужи.
— PuddleRefractive
— Это позволяет карте нормалей лужи преломлять поверхность под ней
— Lava
Это отдельная система, которая использует входные данные лужи для рисования потоков лавы .
В режимах PuddleFlow или PuddleRefractive доступна опция Foam (Пена). Текстура пены упакована в канал В карты нормалей, используемый для луж. Пена будет наиболее заметна вокруг скал, которые пересекаются с водой.
Слайдер Normal Blend позволяет вам контролировать влияние воды на нормаль. Если бы вы смотрели на стоячую лужу, поверхность воды была бы совершенно плоской. Когда NormalBlend установлен в 1, области воды имеют абсолютно плоские нормали. При значении 0 используется нормаль исходной поверхности. Это значение должно быть установлено близко к 1 для стоячей воды и ближе к 0,5 для чего-то вроде текущей воды.
Водный оттенок может придать воде тонкий оттенок. Значение 0,5, 0,5, 0,5 не имеет никакого эффекта. Наконец, настройки потока доступны для управления скоростью и интенсивностью отображения потока.
Raindrops(Капли Дождя)
Когда включены капли дождя, в лужах появляются анимированные капли дождя. Капли дождя требуют специально сконструированной текстуры, которая включена в MegaSplat (water_ripple, в каталоге examples / texture). Rain Intensity контролирует, насколько видны лужи. Rain UV Scale позволяет масштабировать дождь относительно текстуры на лужах.
Lava
Когда вы устанавливаете тип лужи на Lava, для настройки параметров лавы доступен отдельный интерфейс. Лава окрашивается точно так же, как лужи, поэтому материал может иметь лаву или лужи, но не оба.
Текстура, используемая для Lava, использует собственный формат упаковки. Красный и зеленый каналы карты нормалей упакованы в красный и зеленый каналы текстуры лавы. Синий канал содержит своего рода карту высот, используемую для окрашивания поверхности. Альфа-канал контролирует высыхание лавы; значение 0 будет чисто жидким, а значение 1 будет высушенной затемненной лавой. Две папки с примерами (lava_flow и lava_flow2) включены в папку примеров.
Свойство UV Scale можно использовать для масштабирования текстуры лавы. Ширина смеси определяет, как быстро происходит переход между лавой и подстилающей поверхностью. Максимальное значение позволяет вам уменьшить максимальное количество лавы, удаляя лаву из всей сцены. Скорость и интенсивность контролируют скорость и время цикла отображения потока на лаве; скорость воспринимается как постоянное движение, а интенсивность — как количество вращения в эффекте карты потока.
Сушка контролирует степень охлаждения лавы. Когда сушка установлена на высокое значение, в текстуре появятся большие области охлажденной лавы. Обратите внимание, что это основано на альфа-канале текстуры лавы.
Размер искажения, скорость и масштаб влияют на величину искажения, скорость эффекта искажения и размер текстуры искажения. Обратите внимание, что все 4 канала текстуры Лаваля используются в качестве входов для функции искажения.
Градиент в синем канале текстуры лавы используется для смешивания основного цвета лавы с цветом подсветки. Цвет кромки очерчивает область лавы, ползет вверх по скалам.
Снег
Когда снег включен, вы можете использовать фильтры высоты и количества, чтобы контролировать, сколько снега появляется в вашем ландшафте. Snow использует текстуру карты альбедо + высота и текстуру NormalSAO (Normal RG в каналах RG, плавность в B, AO в альфа-канале). Ультрафиолетовая шкала основана на макроструктуре и соответственно масштабируется. Количество контролирует общее количество снега по местности. Диапазон высоты определяет начальную точку появления снега и количество единиц, которые нужно смешать до полного снежного покрова. Влияние карты высот определяет, сколько исходных значений высоты местности используется для определения места сбора снега. Положительные значения эрозии приводят к таянию снега на высоких участках поверхности, в то время как отрицательные значения приводят к его таянию на нижних участках поверхности. Значение кристаллов контролирует зеркальную реакцию снега — более высокие значения выглядят более ледяными, а более низкие значения выглядят более пушистыми. Наконец, таяние влияет на BDRF по краям снега, делая его более влажным.
Вы можете контролировать «вектор вверх» снега. По умолчанию он указывает вверх, но изменение значений может позволить снегу накапливаться на одной стороне горы больше, чем на другой.
Лужи и тесселяция все взаимодействуют со снегом. Если вы нарисуете лужи на снегу, используя низкое значение смешивания на лужах, они сначала растопят снег, обнажая поверхность под ним, а затем вода будет скапливаться на мелководье поверхности. По мере того, как снег заполняет трещины, поверхность поднимается, становится более гладкой и принимает на себя аспекты смещения карты высот в текстуре снега.
При анимации снега, который будет добавлен или удален со сцены, лучше всего настроить несколько значений одновременно. Снег должен накапливаться с влиянием карты низкой высоты, эрозии, кристаллов и факторов таяния. Как только показ закончится, эти значения должны увеличиться, чтобы превратить существующий снег в лед (кристалл), удалить снег с верхушек скал (влияние карты эрозии / высоты), добавить влажность по краям снега (таяние) и, наконец, уменьшить общее количество количество снега Существует пример компонента для анимации этих значений, и примером анимации может быть сцена, включив компонент в тестовых сценах и сдвинув ползунок времени.
Wetness(Влажность)
Влажность также можно покрасить. На сетках это сохраняется в канале UV1.w или на вкладке Wetness в инструменте Terrain Painter. Влажность окраски затемняет альбедо и увеличивает гладкость поверхности в зависимости от пористости и шероховатости основной текстуры. Пористость может быть установлена как свойство для каждой текстуры или глобально. Когда поверхности пористые и шероховатые, вода собирается в этих областях и вызывает потемнение альбедо и повышенную отражательную способность.
Мокрый камень с высокой пористостью в природе. Обратите внимание на потемнение и усиление зеркальности. |
Glitter(Блеск)
Блеск добавляет небольшие блестки на поверхности и доступен для снега, луж или на основе текстуры. Небольшая текстура используется с блестками в красном канале (пример текстуры — glitter_noise) и текстурой шума в зеленом канале, которая используется для того, чтобы блеск мерцал. Эта текстура должна использовать опцию fade mips.
Для текстуры блеска доступна ультрафиолетовая шкала, а также отражающая способность, чтобы контролировать, насколько сильный блеск. Снег и лужи также имеют значение блеска, которое контролирует ширину области блеска.
Alpha Режим
Когда включен альфа-режим установлен на Transparent или Cutout, дополнительный массив текстур выставляется для хранения альфа-значения каждой текстуры сплата, и материал рисуется соответствующим образом. В качестве альтернативы, если все, что вы хотите сделать, это вырезать отверстия в местности, вы можете включить опцию «Alpha Hole», которая позволяет вам указать индекс текстуры для отверстий. Например, если вы установите индекс на 0, то везде, где вы рисуете первую текстуру в массиве текстур, будет образовываться отверстие.
Debug
Панель отладки дает некоторое представление о том, насколько дорог ваш шейдер, а также какая модель шейдера требуется. Добавление таких функций, как тесселяция, снег или второе ультрафиолетовое излучение, может увеличить минимальную требуемую модель шейдера. Посмотрите соображения производительности для получения дополнительной информации в этой области.
Рисование на Меше
Учебное видео:
https://www.youtube.com/watch?v=RNT94fruCl0&t=20s
— Перетащите сконвертированный меш на сцену.
— Назначьте материал для него
— Откройте окно Vertex Painter в Window-> Vertex Painter Pro
— Убедитесь, что меш выбран
— Перейдите на вкладку «Custom»
— Назначьте Texture Array Config, используя поле «Brush»
— Измените режим кисти на «Single Bottom»
— Убедитесь, что переключатель «Active» отмечен в окне Vertex Painter.
— Выберите текстуру в интерфейсе кисти и начните рисовать
Режим кисти «Single» позволяет вам выбирать и рисовать одну текстуру на вашем меше.
Режим кисти «Cluster» позволяет вам рисовать текстуры на меше, выбранные из кластера текстур.
Режим кисти «Blended» дает отличные результаты, смешивая два кластера текстуры вместе с функцией шума, рисуя одновременно на обоих слоях. Предварительный просмотр обновляется по мере изменения параметров кисти.
Ниже приведен пример типов богатых поверхностей, которые могут быть созданы с помощью этой техники. Смешиваются два кластера текстур, каждый из которых выбирается из нескольких исходных текстур.
Первый кластер смешивает 3 текстуры грязи с шумовой функцией, в то время как второй кластер смешивает 5 текстур породы вместе, и эти две микшируются с помощью третьей шумовой функции. Выложенный плиткой на большой площади, видимых повторов нет, и деталь держится даже при близком расстоянии.
При работе с двухслойным шейдером также есть опция «Auto» для режима слоя. Это будет смотреть на текущую информацию и рисовать на том, какой слой имеет наименьший вес.
Рисование на Unity Terrains
MegaSplat работает со стандартными Unity Terrains. Создайте новый ландшафт и откройте набор инструментов рисования ландшафта из Windows/Terrain Painter. Выберите ландшафт, и вам будет предложено окно с объяснением шагов, которые необходимо выполнить для ее настройки . Тем не менее, вы можете просто нажать «Set Everything up for me», и Terrain Painter создаст требуемый шейдер и материал и настроит ландшафт для их использования. Как только это будет сделано, вам нужно будет выбрать материал в меню настроек местности и отредактировать его, как минимум вам нужно будет назначить массив диффузной текстуры.
Unity не позволяет разработчикам получать доступ к данным вершин низкого уровня, и, поскольку Unity использует систему LOD для рельефа, данные вершин в любом случае не согласованы. Поэтому при работе с ландшафтами Unity система будет записывать все данные ландшафта в текстуру рядом с вашим объектом ландшафта. Вы должны нажать SAVE, когда закончите рисование, чтобы сохранить эти данные на диск!
Преобразование существующих территорий Unity
Оригинальное учебное видео (довольно старое, но все еще актуальное):
https://www.youtube.com/watch?v=ykFWlhwX2_0&t=23s
Если у вас есть ландшафт Unity, возможно, созданный вами вручную или сгенерированный из системы создания ландшафта, вы можете легко преобразовать этот ландшафт в шейдерную систему MegaSplat. Для этого выберите ландшафт и откройте окно Terrain Painter и используйте кнопку автоматической настройки, чтобы настроить материал, шейдер и ландшафт. Вам нужно будет выбрать сгенерированный материал, настроить параметры шейдера и назначить массив диффузной текстуры.
С выбранным ландшафтом, перейдите на вкладку Utility и откройте инструмент Terrain Converter. Выберите ваш массив диффузных текстур.
Этот интерфейс показывает вам текущие текстуры Unity Terrain слева. Справа вы можете выбрать кластер текстуры, который соответствует этой местности. Когда вы сопоставили все исходные текстуры с кластерами, нажмите «Convert», чтобы преобразовать текущие данные отображения сплат в формат MegaSplat.
Обратите внимание на настройки в верхней части, над texture->cluster mappings. Шкала шума кластера позволяет вам установить глобальную шкалу шума кластера, основной метод защиты от мозаики, предлагаемый в MegaSplat.
Blend Biasing позволяет смещать смесь между двумя слоями к центральной точке, так что две текстуры смешиваются в большем количестве областей над областью наложения.
Blend Blur размывает исходное изображение карты сплат. Это создаст более широкие области смешивания между слоями.
Каждое отображение кластера текстур также имеет ползунок Contrast — это позволяет вам сместить смесь, чтобы сделать одну текстуру более преобладающей, чем другую в преобразовании.
Обратите внимание, что Blend Biasing, Blend Blur и Contrast полезны только с двухслойным шейдером.
Вы можете включить второй вариант кластера для любого данного отображения. Это позволяет вам смешивать небольшое количество другого кластера текстур, увеличивая текстурную сложность. Слева вы видите траву без вторичной текстуры, а справа вторичная текстура смешивается с травой.
Когда вторичный кластер имеет значение true, интерфейс расширяется, показывая второй выбор текстуры вместе с несколькими параметрами. Частота шума контролирует функцию шума, используемую для определения, где будет смешиваться второй кластер. Более высокие значения шума будут производить более частые, но меньшие исправления, более низкие значения будут производить менее частые и большие исправления. Диапазон шума контролирует минимальное и максимальное значение смеси. В этом снимке вторичная текстура никогда не будет полностью смешиваться, так как ее максимальное значение уменьшается. Когда это объединено с смешиванием карты высот, которое использует MegaSplat, это означает, что небольшие участки более высоких камней будут высовываться из текстуры мха в этих областях. Наконец, также доступен начальный уровень шума, который смещает положение в шуме и изменяет, где появляются эти пятна.
Некоторые советы:
— Двухслойный шейдер рекомендуется для преобразования из традиционного текстурирования
— Если вы генерируете ландшафт в процедурной программе, лучше всего иметь широкие и размытые переходы между вашими ландшафтами. Они могут не очень хорошо смотреться на обычном шейдере, но позволят MegaSplat сделать более интересное смешивание, делая ландшафты намного лучше.
— Вы можете использовать размытие, чтобы расширить смешения ландшафта; однако, это может заставить некоторые текстуры исчезать в более доминирующие текстуры рядом с ними. — Вы можете использовать настройку контрастности, чтобы сместить их обратно в микс
-Выбор правильного интерполяционного контраста может сделать чудеса с качеством преобразования. Низкие коэффициенты интерполяции позволят получить более мягкую смесь, которая может больше походить на исходный ландшафт.
Render Baking
Одна из оптимизаций, которая возможна с MegaSplat, заключается в плавном исчезновении макротекстуры мешей или ландшафтов, которые находятся далеко. В некоторых случаях желательно визуализировать эту текстуру на нарисованных данных MegaSplat. MegaSplat включает в себя инструмент Render Baking, который запекает нарисованное на ряде мешей или ландшафтов с набором текстур.
Чтобы использовать эту функцию, выберите ландшафты или меши, которые вы хотите запечь для одного набора текстур. Обратите внимание, что если вы запекаете несколько мешей для одного набора текстур, то у них не должно быть перекрывающихся UV, иначе данные, отображаемые в этом разделе текстуры, будут отображаться в зависимости от того, какой меш был нарисован последним.
Откройте панель «Utilities» в наборе инструментов «Terrain» или «Vertex». Выберите выходной путь и разрешение. Затем выберите, какие «features» вы хотите экспортировать, и нажмите «Export Selected».
Если выбраны все функции, то MegaSplat будет отображать карты диффуза, нормали, ambient occlusion, emissive, height, metallic, и roughness всех выделенных мешей (или для вашеего ландшафта). Затем вы можете упаковать их для своей любимой программы редактирования изображений и использовать их в качестве макротекстур.
Режим Alpha Layer
Режим Альфа-слоя шейдера можно использовать для рисования карт сплатов поверх текстурированных объектов.
В этом режиме макротекстура используется для текстурирования объекта, а вес верхнего слоя слияния используется для смешивания с данными слияния. Рисование на нижнем слое выступает в качестве инструмента стирания для удаления отображения сплат.
Чтобы настроить это, создайте новый шейдер MegaSplat и материал с Layer Mode, установленным на AlphaLayer, поместив исходные текстуры в область Macro Texture. Затем откройте vertex painter, установите кисть на нижний слой и нажмите fill. Это заставит объект появляться без карт сплат. Установите кисть на второй слой, выберите текстуру или кластер для рисования и нарисуйте карты сплат на вашем меше.
По умолчанию шейдер будет использовать одинаковые UV-координаты как для макротекстуры, так и для данных карты сплат. Однако в настройках шейдера есть опция, которая вызывает использование второго набора UV для вашей макротекстуры.
Проблемы с тангенсами
При работе с несколькими наборами UV, имейте в виду, что меш имеет только один доступный набор тангенсов, и большинство программ моделирования (а также параметры импорта Unity) всегда генерируют эти тангенсы на основе первого набора UV. С практической точки зрения это означает, что если в вашей модели отражены и повернуты UV, то тангенс пространство будет зеркально отражено или повернуто для всех UV относительно нормального отображаемого освещения. Если ваш второй набор UV не вращается и не отражается одинаково, то он будет отображать нормальное отображенное освещение, которое кажется перевернутым или прерывистым. По умолчанию тангенсы берутся из модели, но есть возможность при использовании проецируемых UV генерировать тангенсы вместе с проекцией.
Альтернатива режиму альфа-слоя
Другой вариант текстурирования множества объектов в сцене с использованием MegaSplat — использование системы массивов текстур, чтобы избежать использования нескольких материалов для множества различных объектов. Чтобы использовать их на неорганических поверхностях, таких как дома, вы можете упаковать множество текстур в массив текстур и раскрасить каждый подобъект нужной текстурой. Опцию «disable bottom layer blend» можно затем использовать для отключения из расчетов экстрасэмплов и блендинга, необходимых для отображения сплатов. Обратите внимание, что вы все еще можете использовать двухслойный шейдер, чтобы смешать другую текстуру поверх традиционной текстуры аналогично тому, как работает смешивание Alpha Layer. Это может быть мощной техникой, которая позволяет вам значительно сократить количество draw calls в сцене.
Вопросы производительности
Производительность шейдеров — сложная тема, но на большинстве аппаратных средств эти шейдеры будут зависеть от сэмплинга текстур и пропускной способности памяти, а не от арифметических расчетов. Тем не менее, не все образцы текстур равны. Например, сэмпл текстуры несколько раз в одной и той же области может быть намного быстрее, чем сэмпл нескольких текстур. С учетом вышесказанного, развертывание Debug на этих шейдерах покажет вам точное количество выполненных сэмплов на пиксель с включенным текущим набором параметров. Хотя он и не идеальный эталон, и, конечно, не линейный (12 сэмплов не в 6 раз медленнее, чем, например, 2 сэмпла), тем не менее, является разумным ориентиром для снижения производительности.
В качестве примера, вот как счетчики выборок разбиты по функциям для нескольких заданных шейдеров. Обратите внимание, что стандартный Terrain Shader с 8 текстурами собирается нарисовать два прохода объекта, что требует дополнительных затрат в сравнении только сэмплинга текстур.
Shader | Unity Terrain Shader | Unity Terrain Shader | MegaSplat | MegaSplat |
Diffuse Only | 5 samples per pixel | 10 samples per pixel | 3 samples per pixel | 6 samples per pixel |
Diffuse + Normal | 9 samples per pixel | 18 samples per pixel | 6 samples per pixel | 12 samples per pixel |
Diffuse + Normal + Specular + AO | 13 samples per pixel | 26 samples per pixel | 9 samples | 12 samples |
Здесь мы видим, что эта техника более эффективна, чем стандартные Terrain Unity, с гораздо лучшим качеством. Однако MegaSplat поддерживает множество методов, недоступных ни в Terrain Shader Unity, ни даже в стандартном Shader Unity. Довольно просто создать шейдер, который может иметь 30 или более текстурных сэмплов на пиксель.
Вот пример того, как некоторые функции влияют на сэмплы:
- Parallax mapping
- — Требуется еще один сэмплинг диффузных текстур, так что еще 3 или 6 сэмплов, в зависимости от того, какой шейдер MegaSplat используется.
- Flow Mapping
- Flow Mapping требует прямого удвоения всех образцов текстуры в области, где активна карта потока. Условное ветвление используется в областях, где карта потока не активна, чтобы уменьшить количество сэмплов на пиксель.
- Flow mapping также создает зависимое считывание текстуры, которое медленнее, поскольку графический процессор должен ждать считывания одного значения, прежде чем он сможет вычислить UV для следующего сэмпла.
- Per Texture Properties
- Поскольку Unity 5.4 не поддерживает свойства массива для материалов, мы сохраняем свойства каждой текстуры в текстуре 256×4. Каждый пиксель, который должен быть выбран (в зависимости от набора функций), добавляет 3 дополнительных сэмпла (на слой). Хотя стоит отметить, что из-за небольшого размера текстуры, это, вероятно, намного быстрее, чем другие сэмплы в системе.
- Однако, поскольку это чтение текстуры должно произойти до того, как сэмплы массивов будут выполнены, это может привести к остановке графического процессора (это называется зависимым чтением текстуры), поэтому подумайте, действительно ли вам нужны per-texture properties или нет, прежде чем включать их.
- Triplanar Texturing
- Трипланарное текстурирование требует сэмплинга один раз для каждой проекции, поэтому умножьте общее количество сэмплов на 3. При использовании трипланарного режима вы захотите свести к минимуму другие функции
- Macro Texturing
- Макротекстурирование добавляет 1-2 сэмпла для основной текстуры в зависимости от режима упаковки. Тем не менее, если вы полностью перейдете к макротекстуре, шейдер начнёт работу без какого-либо отображения сплата. Это позволяет вам иметь дистанционную текстуру, которая является чрезвычайно эффективной.
- Tessellation
- Тесселяция может легко поставить любой графический процессор на колени. Правильная настройка параметров имеет жизненно важное значение. На некоторых графических процессорах стоимость включения тесселяции, даже если вы не генерируете много вершин, может быть высокой — поэтому рекомендуется переключаться на резервный шейдер, когда объект находится вне диапазона тесселяции.
- Edge Length (при использовании режима edge) и свойства тесселяции управляют максимальным количеством тесселяции. Когда длина edge мала или тесселяция высока, генерируется больше треугольников.
- Регулировка min/max расстояния для тесселяции уменьшит общую тесселяцию на расстоянии в режиме «Distance». Однако они используются только для затухания смещения, когда в режиме edge, так как в этом режиме размер пространства экрана edge используется для определения коэффициента тесселяции.
- Resample Distance
- Удваивает количество образцов карты сплат; предпочитаю кластеры текстур, чтобы победить тайлинг по этой технике.
- Low Poly Look
- Использует геометрический шейдер для генерации треугольников с жесткими краями. Использование геометрического шейдера обычно медленное, и в этом случае выдает больше вершин, чем было у меша.
- Puddles
- Простые лужи очень дешевы на мешах, не требуют текстурных сэмплов. На Terrains производится сэмплинг второй контрольной текстуры для данных о том, куда уходят лужи. Лужи с потоком требуют 2 стандартных образца текстуры на пиксель, поэтому они все еще дешевы. Лужи с пеной и преломлением стоят дополнительных сэмплов текстуры.
- Snow
- Снег требует 2 сэмпла текстуры на пиксель. Когда тесселяция включена, эти сэмплы также должны быть сделаны на стадии дисплейсмента.
- Per Texture Properties
- Хранятся в небольшой текстуре 256х4. Несмотря на то, что они быстро отбираются из-за размера текстуры, в некоторых случаях они могут ввести небольшое зависимое считывание текстуры, когда графический процессор должен ждать завершения этих отсчетов, прежде чем начинать следующие.
Обратите внимание, что шейдер terrain выполняет дополнительные 3 сэмпла для контрольной текстуры на слой и должен дождаться окончания этих сэмплов, чтобы выполнить следующий набор сэмплов. Эта текстура хранит информацию, которая будет отпечатана в вершинах меш-шейдеров. Из-за этого рендеринг ландшафта может быть медленнее, чем рендеринг регулярных мешей. Может помочь использование более мелкой управляющей текстуры, повышающей вероятность того, что необходимые тексели находятся в кеше. Displacement Dampening, Flow Mapping или Puddles также требуют сэмплинга дополнительной управляющей текстуры для их данных.
Collision Response
MegaSplat включает в себя компоненты, которые помогут вам определить, какую текстуру вы ударили с помощью raycast, а также смещения для работы с физикой и tessellated/displaced поверхностями. Когда вы нажмете кнопку воспроизведения в примерах сцен, вы увидите текстуру, над которой вы сейчас находитесь, отображается в правом верхнем углу экрана.
Чтобы настроить Collision Response, выберите массив диффузных текстур и включите «Export Texture List». Это позволит экспортировать объект сценариев со списком имен текстур, которые будут использоваться во время выполнения.
Затем на любом ланшафте или меше, из которого вы хотите получить эту информацию, добавьте компонент MegaSplat Collision Info и назначьте список текстур свойству Texture List компонента. Если ваш шейдер представляет собой двухслойный шейдер, включите two layer, и наиболее доминирующая текстура будет возвращаемой.
Наконец, вам нужно включить «Keep Runtime Data» в Vertex Instance Stream. Это обеспечит сохранение данных меша в CPU во время игры.
Камера имеет компонент «DisplayTextureName», который является хорошим примером того, как использовать систему для извлечения информации о текстуре из raycast или collision.
Физика и Тесселяция
Тесселяция с дисплейсментом выглядит потрясающе; но есть проблема, которая вынуждает многих разработчиков идти в обратном направлении, и это физическая интеграция. Наиболее очевидным решением было бы тесселяция и дисплейсмент физического меша, однако это сделало бы физические меши чрезвычайно большими и неуправляемыми. Таким образом, MegaSplat включает в себя уникальный набор инструментов, которые позволяют интегрировать физику с дисплейсментом для получения точных результатов, а также простые примеры использования этих инструментов.
Основная идея заключается в том, чтобы сохранить текстуру с низким разрешением для каждой поверхности и выполнить дисплейсмент точки столкновения на CPU. Если вы установите Physics Data Size в массиве диффузных текстур, MegaSplat автоматически сгенерирует эти данные. Для большинства потребностей достаточно данных размером 32 (пикселя), хотя доступны большие размеры, если вам нужно, чтобы что-то пролезало через небольшие трещины в данных дисплейсмента.
Статические Меши
Для работы vertex painter необходимо сохранить копию меша на CPU с помощью флагов read-write(чтения-записи) в средстве импорта мешей. Когда игра запускается, она применяет изменения к мешам с помощью дополнительной функции VertexStream. Однако это несовместимо с Статический батчингом(Static batching) и некоторыми функциями освещения, которые требуют, чтобы меши были помечены как статические. Чтобы это исправить, на панели «Utility» в Vertex Painter есть инструменты, которые позволяют вам выпекать копии ваших мешей с внесенными в них модификациями вершин. Однако, делать это по одному мешу за раз может быть утомительно, если вы рисуете их много на сцене. Существует также инструмент под названием «Bake Scene to Mesh Cache», который будет выполнять эту операцию для всей сцены, сохраняя все меши, которые были нарисованы, в папку кэша ассетов и заменяя ими используемые в вашей сцене.
Хотя вы можете использовать это вручную, идеальным рабочим процессом является вставка в build machines build steps. Перед созданием и запеканием lightmaps выполните функцию SaveMeshCache.Bake, передав соответствующую информацию, сохраните сцену, затем вычислите освещение и создайте свой проект и отмените изменения сцены, используя вашу систему контроля версий.
Использование инструментов Vertex Painting
Система Vertex Painting, включенная в MegaSplat, представляет собой полнофункциональный набор инструментов, способный рисовать цвета вершин, направления потока, редактировать геометрию меша, запекать ambient occlusion или информацию освещения в вершинах и многое другое. Более подробную документацию по его использованию, а также видеоуроки можно найти в моей учетной записи GitHub по адресу:
https://github.com/slipster216/VertexPaint
Также доступны дополнительные инструменты и пользовательские кисти для выполнения операций, таких как смешивание нормалей между объектами и вставка различной информации в данные вершин.
Terrain Painting
Система Terrain Painting основана на том же самом коде и принципах рабочего процесса, которые использовались и в Vertex Painter. Однако он рисует только на ландшафтах Unity и не добавляет никаких дополнительных компонентов на сцену, поскольку данные хранятся в текстурах.
Процедурное Текстурирование
Пример меша, текстурированной процедурно, без рисования, в реальном времени
При работе с мешами доступна процедурная система текстурирования в реальном времени, которая текстурирует ваш ландшафт на основе правил, а не рисования. Когда режим текстурирования слоев установлен на Project 3 Way, отображается интерфейс процедурного текстурирования. Этот режим позволяет вам текстурировать слой или несколько слоев целиком на графическом процессоре без необходимости рисовать меш. Это может быть очень полезно для быстрого рисования больших ландшафтов или для рисования ландшафта в сценариях, где рисование недоступно (во время выполнения).
Основная идея аналогична другим трипланарным проекционным шейдерам — текстура автоматически накладывается на Верхнюю(Top), Боковую(Side) и Нижнюю(Bottom) части геометрии. Однако, поскольку MegaSplat работает не так, как традиционные шейдеры, используется специальная версия этого метода, которая использует уникальные возможности MegaSplat.
Для каждой проекции (Сверху, Сбоку, Снизу) вы можете выбрать 3 текстуры, которые смешиваются друг с другом аналогично использованию кластеров текстур. Важно правильно установить значение шкалы кластера — слишком высокие значения приведут к появлению зашумленных шаблонов, а слишком низкие значения не приведут к значительным изменениям. Наконец, вы можете использовать threshold slide, чтобы определить, какие углы считаются «side» проекцией.
Это очень мощный инструмент, потому что он позволяет вам отфильтровать выбор top/side/bottom по трем произвольным углам. Вы можете, например, использовать его для текстурирования всей геометрии, обращенной вверх, чтобы быть верхней, всей геометрии с небольшим наклоном, чтобы быть боковой проекцией, и всей геометрии, обращенной вбок или вниз, чтобы быть нижней проекцией.
Если вы используете двухслойный шейдер, а второй слой настроен на использование 3-сторонней проекции, тогда доступен дополнительный набор вариантов текстурирования и набор вариантов наложения для двух слоев:
Частоту шума(Noise Frequency), Амплитуду шума(Noice Amplitude) и min/max можно использовать для управления смешиванием двух процедурно-слоистых текстур. Опять же, правильная шкала шума является ключом к тому, чтобы выглядеть потрясающе. Регулировка амплитуды приведет к более быстрому смешиванию между двумя слоями или сведет на нет смешивание при значении ниже 0.
Ползунок min / max можно использовать для контроля минимального и максимального количества смешивания между двумя слоями.
Таким образом, вместо простого проецирования 3-х текстур, по одной сверху/сбоку/снизу и их наложения, MegaSplat позволяет проецировать 3 произвольных проекции на два слоя, в общей сложности 19 текстур смешиваются вместе для создания ландшафта. Это обеспечивает гораздо больше разнообразия, устраняет текстуру и делает сцену намного более интересной.
Наконец, в нижней части интерфейса вы найдете кнопку «Bake to Vertex Stream on selected Meshes». При нажатии любые выделенные меши, которые настроены для использования материала и для окрашивания вершин, будут иметь процедурное текстурирование, запеченное в вершинах. На этом этапе вы можете переключить шейдер обратно в режим рисования, и текстурирование останется, что позволит вам дополнительно изменять меш через интерфейс рисования.
Этот метод позволяет использовать процедурное текстурирование в реальном времени как способ нанесения быстрого базового слоя на меш перед рисованием. Уловка заключается в том, чтобы сохранить копию материала/шейдера для такого использования, применить его к новым мешам, запечь текстуру обратно в меш, а затем переключиться на версию шейдера с отключенным процедурным текстурированием, так как данные теперь запечены в вершинах, сохраняя вычисления вершин, требуемые процедурной техникой.
Демонстрация этой функции сделана в MegaSplat Dev Log 15 на канале YouTube.
График Процедурной Текстуры
По сути, это специфичный для домена шейдерный график для создания процедурных систем текстурирования ландшафта с помощью MegaSplat.
В отличие от традиционного графа шейдеров, где у вас есть входные данные для уравнения освещения на мастер ноде, который содержит входные данные для выбора текстуры каждого слоя MegaSplat и значения наложения между ними. Этот формат обсуждается ниже.
Ноды на графике работают с одним из двух типов данных; Индексы текстуры (красный) или значения с плавающей точкой (серый). Ноды 3d-шума, угла нормалей и высоты будут выводить свой результат в виде значения от 0 до 1. Селекторы могут использоваться для выбора между несколькими индексами текстуры на основе одного из этих значений. Кластеры текстур также доступны для использования на графике, и вы можете легко переназначить значения с плавающей точкой с помощью элементов управления кривой.
Если вы хотите поэкспериментировать с этой функцией, я предлагаю посмотреть MegaSplat Dev Log 16 на канале YouTube, процесс создания графика и текстурирования ландшафта с его помощью. Дополнительная документация находится рядом с этим документом в папке MegaSplat.
Текстурирование Больших Ландшафтов от Внешних Программ
Многие программы генерации ландшафта могут выводить какое-либо руководящее изображение или диффузную карту для вашей ландшафта. Вы можете использовать эти изображения, чтобы быстро наложить текстуру на весь ландшафт, используя инструмент Splat from Color Map на панели Utilities.
Этот инструмент берет цветное изображение и файл конфигурации. Пример включен в пакет и может использоваться с изображением t03_guide, находящимся в папке «Examples/Terrain».
Вы можете создать свою собственную конфигурацию, щелкнув правой кнопкой мыши в окне проекта и выбрав Create/MegaSplat/ColorToSplatConfig.
Это один мэппинг с этим файлом конфигурации. У вас может быть столько мэппингов, сколько вам нужно. Каждый мэппинг от исходного цвета на вашем изображении до кисти, которая будет применена к этой области изображения. В этом примере мы используем смешанную кисть, которая собирается применить текстуру из текстуры кластера shore_sand к верхнему слою, а текстуру из кластера текстуры песка — к нижнему слою. Функция шума используется для выбора между этими двумя кластерами, а сфера предварительного просмотра обновляется в реальном времени по мере настройки параметров.
Вы также можете создавать мэппинги, используя индексы, хранящиеся в текстурах, или традиционное изображение текстуры сплат.
Смешивание Объектов
Пример смешивания объектов меша, на основе ландшафта, включен в каталог примеров. Если вы приблизите объекты к валунам, вы увидите, что они плавно переходят в ландшафт. Это сделано:
- Необходимо, чтобы координаты UV, используемые для Splat Mapping, были одинаковыми в области смешивания
- Убедитесь, что картина одинакова на обоих объектах.
- Было обеспечено выравнивания нормалей и касательных в области наложения.
В этом примере первое требование выполняется с использованием трехплоскостной проекции мирового пространства для координат UV на обоих объектах.
Для второго требования просто выберите оба объекта и закрасьте пересечение одним и тем же кластером или текстурой Megasplat.
Для третьего требования в программе Vertex Painter доступна кисть Normal Blend Brush. Чтобы использовать ее, перейдите на вкладку Custom и выберите NormalBlendBrush в качестве пользовательской кисти (так же, как вы выбираете кисть для MegaSplat). Выберите валун для рисования и ландшафт под ним в качестве «Target object» в настройках кисти. Затем нарисуйте вдоль пересечения, и нормали и касательные отрегулируются, чтобы получить значение, похожее на целевой меш.
Обратите внимание, что, поскольку положения вершин редко выстраиваются между двумя объектами, нормали и касательные могут немного отличаться. Однако нормаль/касательная, выбранные для выравнивания, основаны на интерполированной нормали в данной позиции, поэтому вы можете обычно немного отрегулируйте угол, пока они не подойдут достаточно хорошо.
Перенос Paint Jobs
Иногда вы тратите кучу времени на рисование меша, чтобы все выглядело отлично, но потом понимаете, что вам его нужно каким-то образом изменить. Это может быть проблематично, поскольку данные запекаются в меш. Однако MegaSplat включает в себя две утилиты, которые могут помочь решить эти проблемы.
Первый — это Render Baker, который был рассмотрен ранее в этом документе. Он может отображать текстуру «SplatData» в том же формате, что и система ландшафта. Обратите внимание, что для правильной работы у ваших мешей не должно быть перекрывающихся UV-координат.
Вторая утилита — это инструмент Splat Data to Vertex Data, который находится на вкладке «Utility» в Vertex Painter. Он может прочитать текстуру Splat Data и применить ее к данным вершины. Его также можно использовать для переноса работ по рисованию из ландшафта Unity в меши.
Используя эти два инструмента, можно сохранить paint job, изменить геометрию меша и повторно применить этот же paint job. Пример этого делается в MegaSplat Dev Log 16 на канале YouTube.
Интеграция с другими vertex painters или процедурной геометрией
Шейдеры MegaSplat могут использоваться с другими vertex painters или процедурной геометрией. Расположение данных для информации о вершине выглядит следующим образом:
Color RGB = Vertex Weights
Color Alpha = индекс bottom текстурного слоя (с шагом 1/255)
UV1.w = Wetness
UV2.zw = Flow Direction
UV3.X = смесь между слоями (только слой шейдера)
UV3.Y = Displacement Dampening с использовании Tessellation
UV3.Z = Puddle количество
UV3.W = индекс top текстурного слоя (с шагом 1/255, только шейдер слоя)
Структура данных управляющей текстуры (для использования с ландшафтами Unity):
Color.R = индекс bottom слоя (с шагом 1/255)
Color.G = индекс top слоя (с шагом 1/255)
Color.B = смесь между слоями
Color.A = демпфирование смещения (1 = без демпфирования, 0 = максимальное демпфирование)
Вторая текстура параметров выбирается, когда включены функции, которые в этом нуждаются. Это макет:
Color.RG = направление потока(flow)
Color.B = влажность(wetness) (0 = нет влажности, 1 = насыщенная)
Color.A = лужи(puddles) (0 = нет луж, 1 = полное погружение)
Если вы хотите применить текстуру во время выполнения, просто отрегулируйте цвет вершины или UV-канал соответствующим образом или отрегулируйте пиксели управляющей текстуры при работе с ландшафтами Unity.
Если вы генерируете процедурную геометрию, то вам необходимо настроить эту геометрию в соответствии с требованиями шейдера. Каждый полигон должно иметь одну красную, одну зеленую и одну синюю вершину, причем только один. Для этого может потребоваться создание дополнительных вершин, но для большинства геометрий количество добавляемых вершин довольно мало.
Неважно, какой цвет у каждой вершины, до тех пор, пока у каждой вершины на данной грани есть только один из каждого присутствующего цвета. Эти весовые коэффициенты используются для фильтрации данных индекса текстуры, позволяя каждой грани знать три текстуры, которые она должна выбрать для данной грани.
Рисование в Реальном Времени
Примеры компонентов включены и используются в демонстрационных сценах, чтобы показать, как эффективно рисовать в режиме реального времени. Эти скрипты подробно прокомментированы, особенно в рабочих процессах меша, поскольку кэширование и развертывание используемой математики может обеспечить ускорение на порядок по сравнению с более простой версией. Я предлагаю вам использовать их в качестве шаблона.
Чтобы они работали с мешами, необходимо включить свойство «Keep runtime data» в VertexInstanceStream меша. Terrains должны перепрыгнуть через несколько обручей, чтобы восстановить текстурные данные в состояние неигрового режима в режиме редактора. Это также задокументировано в компонентах.
Некоторые из примеров сцен показывают шары, катящиеся по ландшафту, некоторые из них будут рисовать выбранную текстуру на местности.
Расширение Шейдеров MegaSplat Вашим Собственным Кодом
Удобно ли писать шейдерный код? Когда MegaSplat генерирует шейдер, он делает это из ряда файлов фрагментов, которые можно легко изменить. Однако, если вы обновите MegaSplat, эти изменения будут потеряны. Таким образом, MegaSplat предоставляет вам возможность написать собственный код, который будет включен в определенные точки шейдера, что позволит вам настроить работу MegaSplat в неразрушающем рабочем процессе.
Параметр пользовательского кода описан в Development Log #20 на YouTube. Когда вы включаете опцию Custom Code, MegaSplat напишет файлы .prop и .cginc для вашей настройки. Эти файлы должны оставаться рядом с шейдером и материалом MegaSplat, и все шейдеры MegaSplat в каталоге с опцией нестандартного кода будут использовать одни и те же файлы .props и .cginc, что позволяет легко иметь несколько шейдеров с одинаковыми модификациями.
Файл .props можно использовать для объявления новых свойств материала. Они должны иметь префикс с именем _Custom_, чтобы отображаться в редакторе шейдеров MegaSplat. Написанный файл .cginc содержит несколько функций, а также документацию по этим функциям и структурам, которые они используют. Вы можете настроить эти функции таким образом, чтобы изменять положение вершин, изменять входные данные для уравнения освещения (Albedo, Normal и т. Д.) И корректировать результаты тесселяции / смещения. Пожалуйста, обратитесь к .cginc файлу и видео YouTube для получения дополнительной информации.
Интеграция с Amplify Shader Editor
Для Amplify Shader Editor были добавлены две ноды, которые позволяют вам создавать свои собственные шейдеры, используя технику MegaSplat.
MegaSplatSamplerNode работает как сэмплер текстуры, но принимает массив текстур вместо текстуры. Он также принимает параметр Texture Choice (хранится в color.a или UV3.w в макете вершины MegaSplat) и контраст, используемый для смешивания. В настоящее время нода ожидает, что карта высот находится в альфа-канале, выполняет смешивание и выводит окончательный цвет вместе с «Resample Data», который может быть подключен ко второму MegaSplatSamplerNode для выборки карты нормалей или дополнительных карт с использованием та же самая полученная смесь.
Режим смешивания(Blend) MegaSplat позволяет смешивать несколько слоев данных megasplat, как это видно в двухслойном шейдере MegaSplat. Вы бы вставили полученное значение высоты из ноды сэмплера каждого слоя во входы высоты (A / B), а смешанный вес (нарисованный в UV3.x кистями MegaSplat) в значение наклона.
Используя эти две ноды, вы можете создавать свои собственные шейдеры в стиле MegaSplat.
Дополнительно
Набор инструментов Vertex Painting поставляется с набором традиционных шейдеров карт сплат-карт, которые позволяют создать до 5-ти слоев карт сплат-карт с потоковым картографированием. Поскольку шейдерам требуется несколько минут для импорта, они были заархивированы в zip-файле вместе с другими примерами для пакета Vertex Painter.
Примечание о Поддержке OSX и Metal API от Apple
Ситуация с графическим API на OSX немного беспорядочная. Для максимальной совместимости я рекомендую использовать OpenGL, пока эти проблемы не будут решены Apple и Unity. Обратите внимание, что в Unity 5.6 Metal является API-интерфейсом по умолчанию для сборок в OSX, и начиная с 2017.1 они ожидают сделать Metal API-интерфейсом по умолчанию для редактора. Однако вы можете переключить настройки сборки и редактора для использования OpenGL.
Apple решила не поддерживать использование Geometry shaders на Metal. Это потому, что шейдеры Geometry действительно медленные, и их, как правило, следует избегать. MegaSplat использует геометрические шейдеры для опций «Low Poly Look» и «Preprocess in Shader», поэтому они не будут работать в OSX при использовании Metal API.
Тесселяция в настоящее время недоступна в Metal в Unity, поэтому шейдеры тесселяции также не будут работать при использовании Metal API в OSX.
Некоторые функции MegaSplat, такие как Snow и Wetness, используют слишком много интерполяторов для работы под шейдерной моделью 3.5. Когда эти функции включены, MegaSplat увеличит модель шейдера до модели 4.0 шейдера. Однако, поскольку использование шейдерной модели 4.0 также требует наличия геометрических шейдеров, эти функции отключаются при включении при работе в Metal. Вы можете использовать уровень переопределения шейдеров, чтобы поднять модель шейдера до 4.5, и шейдеры будут работать под Metal, но тогда шейдеры больше не будут работать под OpenGL в OSX, которая не поддерживает модель шейдеров 4.5.
Итак, как я уже сказал, это беспорядок, и я бы порекомендовал отключить Metal в OSX для редактора и использовать сборку для максимальной совместимости. Однако, если вы хотите использовать Metal в OSX, вы можете создать запасную цепочку шейдеров, создав несколько версий каждого шейдера (4.5 для металла, 4.0 для openGL).
Устранение Неполадок и Часто Задаваемые Вопросы
В: Текстуры сплатов в примере сцены чёрные, что не так?
A: Эмуляция графики включена? Unity часто переключает мой Mac для эмуляции устройств openGLES2.0, на этих устройствах данные карты сплат всегда возвращаются черными, потому что массивы текстур не поддерживаются. Я также добавил цвета отладки для неподдерживаемых типов шейдеров на устройстве.
SHADER_API_D3D9: возвращает зеленый
SHADER_API_GLES (openGLES2.0): возвращает желтый
SHADER_API_D3D11_9X: возвращает синий цвет
Неизвестный: возвращает синий
Кроме того, убедитесь, что ваш редактор не работает в режиме DX9 или DX9_11, который указан в верхней части окна редактора.
Q: Я не вижу движущихся карт
О: Убедитесь, что анимационные материалы включены, и что вы нарисовали направления потока в каналах UV2.ZW. Убедитесь, что скорость и интенсивность потока увеличены, а затем выберите текстуру в свойствах для каждой текстуры и убедитесь, что ее скорость также увеличена. Наконец, если вы используете двухслойный шейдер, помните, что карта потоков применяется только к верхнему слою, поэтому она должна быть видимой, чтобы увидеть эффект.
Q: Текстуры интерполируются по лицу — я вижу 20 текстур на одном треугольнике.
A: Вам необходимо предварительно обработать ваш меш с помощью конвертера в формат, используемый MegaSplat. Если вы процедурно генерируете геометрию, вам нужно правильно пометить цвета вершин, чтобы у каждой грани было ровно одно красное, одно зеленое и одно синее значение. Если вы используете меши, возможно также, что вы случайно закрасили в цветовые каналы — MegaSplat использует данные в цветовых каналах вершин для фильтрации выбора текстуры, поэтому, если эти данные будут случайно изменены, это может вызвать эту проблему.
Q: Когда я нажимаю кнопку воспроизведения, я получаю сообщение об ошибке, похожее на это, и меш выглядит так, как будто не нарисован!
Не разрешен доступ к цветам в меше ‘Combined Mesh (root: scene) 2’
UnityEngine.Mesh: get_colors ()
JBooth.VertexPainterPro.VertexInstanceStream: EnforceOriginalMeshHasColors (Mesh) (в активах / MegaSplat / VertexPaint / VertexInstanceStream.cs: 128)
A: Настройки импорта в вашей меше не установлены на чтение/запись(Read/Write), или вы установили статический меш. Это означает, что ЦПУ не имеет доступа к данным вершин и не может применить задание рисования. Если вам нужно, чтобы ваш меш была статически упакован, или по какой-то причине вам необходимо отключить чтение/запись, вы можете запечь копию готового меша, используя параметры запекания на панели «Utility» инструмента вершин.
Q: Я рисовал ландшафт, но когда я перезагружал свою сцену, она исчезла.
A: В отличие от vertex painter, вам нужно нажать сохранить в terrain painter, иначе изменения не будут сохранены.
Q: Мой ландшафт/меш белый
A: Назначьте массивы текстур вашим материалам в разделе SplatData редактора материалов.
Q: Превью моих текстур в инструментах рисования очень темное!
A: Это ошибка в коде редактора Unity при работе с линейным пространством, и мне еще предстоит найти хороший способ обойти это.
Особая благодарность:
- Хенрик Холмдат за информацию о минимальной окраске вершин
- Seneral за свою среду редактора нодов с открытым исходным кодом (используется Texture Graph). Получите здесь: https://github.com/Seneral/Node_Editor
Способы текстурирования ландшафта — Gamedev на DTF
Привет! Если ты увлекаешься процедурным генерированием ландшафта, эта статья поможет тебе в процедурном его текстурировании.
{«id»:42269,»url»:»https:\/\/dtf.ru\/gamedev\/42269-sposoby-teksturirovaniya-landshafta»,»title»:»\u0421\u043f\u043e\u0441\u043e\u0431\u044b \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u0430″,»services»:{«vkontakte»:{«url»:»https:\/\/vk.com\/share.php?url=https:\/\/dtf.ru\/gamedev\/42269-sposoby-teksturirovaniya-landshafta&title=\u0421\u043f\u043e\u0441\u043e\u0431\u044b \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u0430″,»short_name»:»VK»,»title»:»\u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435″,»width»:600,»height»:450},»facebook»:{«url»:»https:\/\/www.facebook.com\/sharer\/sharer.php?u=https:\/\/dtf.ru\/gamedev\/42269-sposoby-teksturirovaniya-landshafta»,»short_name»:»FB»,»title»:»Facebook»,»width»:600,»height»:450},»twitter»:{«url»:»https:\/\/twitter.com\/intent\/tweet?url=https:\/\/dtf.ru\/gamedev\/42269-sposoby-teksturirovaniya-landshafta&text=\u0421\u043f\u043e\u0441\u043e\u0431\u044b \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u0430″,»short_name»:»TW»,»title»:»Twitter»,»width»:600,»height»:450},»telegram»:{«url»:»tg:\/\/msg_url?url=https:\/\/dtf.ru\/gamedev\/42269-sposoby-teksturirovaniya-landshafta&text=\u0421\u043f\u043e\u0441\u043e\u0431\u044b \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u0430″,»short_name»:»TG»,»title»:»Telegram»,»width»:600,»height»:450},»odnoklassniki»:{«url»:»http:\/\/connect.ok.ru\/dk?st.cmd=WidgetSharePreview&service=odnoklassniki&st.shareUrl=https:\/\/dtf.ru\/gamedev\/42269-sposoby-teksturirovaniya-landshafta»,»short_name»:»OK»,»title»:»\u041e\u0434\u043d\u043e\u043a\u043b\u0430\u0441\u0441\u043d\u0438\u043a\u0438″,»width»:600,»height»:450},»email»:{«url»:»mailto:?subject=\u0421\u043f\u043e\u0441\u043e\u0431\u044b \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u0430&body=https:\/\/dtf.ru\/gamedev\/42269-sposoby-teksturirovaniya-landshafta»,»short_name»:»Email»,»title»:»\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u043f\u043e\u0447\u0442\u0443″,»width»:600,»height»:450}},»isFavorited»:false}
2610
просмотров
Так, как я специализируюсь на Unity — буду рассказывать всё то, что косвенно или прямо связано с ним.
В этом случае мы создаём Shader, который имеет 4 канала, такие, как R — красный, G — зелёный, B — синий, A — прозрачность. Если ландшафт очень большой — мы делим его на отдельные регионы, где каждый регион имеет по 4 канала.
R + G + B + A = RGBA
При текстурировании ландшафта мы записываем каналы исходной текстуры в соответствующие каналы для Shader’а. То есть красный цвет исходной текстуры записывается в R-канал, зелёный, синий и прозрачность точно также.
Такой способ хорошо экономит память, но в производительности сильно отстаёт от следующего кандидата. Тест на производительность:
Я как-то замерял, у меня каждая новая текстура заметно просаживала производительность. Вот заметка, например: Измеряю градацию FPS. Делаю так: добавляю по одной текстуре на ландшафт, запускаю сцену в редакторе и в сборке. FPS меряется компонентом FPS Counter. В редакторе измеряю чисто для сравнения. И только после разогрева, не сразу после запуска Unity.
1) Без текстур — 67/88
2) 1 текстура без карт нормалей — 64/82
3) 1 текстура с картой нормалей — 57/72
4) 2 текстуры с картами нормалей — 49/58
5) 4 разные текстуры с картами нормалей — 37/43
6) 4 одинаковые текстуры с картами нормалей — 38/43
7) 5 текстур с картами нормалей — 36/41
8) 8 текстур с картами нормалей — 36/41
Второй способ — «Всё в одном»
Да, второй способ не знаю как назвать (и есть ли у него название?). Потому, как ранее не встречал статью или мануал по данному способу, а пришёл к этому вынуждено.
Нам понадобится один Shader, у которого есть только текстура и карта нормали. Shader очень простой и выводит данные как есть. Второй Shader — это, так называемый, Blit Shader, который будет смешивать текстуры между собой и выводить «скомпонованный» результат, как одну текстуру.
Такой способ не нуждается в вычислениях и сразу выводит (заранее подготовленную текстуру) на ландшафт.
Помимо простого смешивания текстур, мне нужно было смешивать текстуры на определённой высоте ландшафта, например трава — на равнинах, а камень — на склонах. Не представляю как мне удалось бы сделать такое первым способом, но для этого способа я знаю решение:
- Необходимо генерировать ландшафт так, чтобы порядок вершин в массиве располагались по формуле y + x * height.
- Находим самую высокую и низкую точку ландшафта, назовём вектор (x, y) как Elevation.
- Создаём массив heightMap и последовательно заполняем его высотой вершин по формуле Mathf.InverseLerp(Elevation.x, Elevation.y, vertex.y).
- Создаём и заполняем массив heightMapColors, на каждый (RGB) канал записываем значение heightMap. Прозрачности не должно быть.
- Создаём Texture2D и красим его через SetPixels(heightMapColors).
Передаём данную текстуру нашему Blit Shader’у, а в нём в свою очередь выполняем смешивание исходя из данной текстуры. Результат:
Texture1 + (HeightMap + Texture2) = Texture3
Если будут вопросы пиши в Telegram.
Наш канал о разработке игр.
With love — @codisrq.
Acrosicious / TerrainGrassShader: шейдер травы ландшафта в реальном времени для ландшафта Unity.
Этот пакет включает шейдер ландшафта Unity, который генерирует траву на различных текстурах в реальном времени. (Проверено с 5.6)
Он был создан в ходе работы над диссертацией на степень бакалавра в исследовательской группе HCI Гамбургского университета. Список литературы
Основная функция
Grass генерируется графическим процессором в реальном времени и распределяется в зависимости от идентификатора текстуры земли. Рисование текстур ландшафта немедленно обновляет траву для прямой визуальной обратной связи.Шейдер использует путь «Отложенный рендеринг», поддерживающий дешевое освещение и тени. Он также поддерживает до 10 сперических коллайдеров (например, для персонажа игрока, чтобы гнуть траву, где он ходит).
Установка
Импортируйте .unitypackage в свой проект. Либо откройте одну из двух демонстрационных сцен, либо следуйте инструкциям.
Инструкции по использованию шейдера травы ландшафта:
Установка:
- Убедитесь, что для пути рендеринга задано значение «Отложенный», а цветовое пространство — линейное.
- Создайте объект ландшафта и добавьте хотя бы одну текстуру.
- Перейдите в настройки ландшафта -> Выберите опцию «Пользовательский» в разделе «Материал» и добавьте материал «Отложенный шейдер травы» в слот «Пользовательский материал».
Конфигурация:
Чтобы настроить шейдер, выберите материал «Grass Shader Deferred» из «Terrain Shader / Shader».
Четыре раскрывающихся меню «Опции для текстуры ландшафта #» используются для настройки травы для первых четырех текстур ландшафта объекта ландшафта.Выберите текстуру травы, которую хотите нарисовать.
Настройте высоту, ширину и сухие / здоровые цвета для вашего контента.
Наконец, флажок «Включено» активирует эту траву.
Трава теперь отображается на местности в зависимости от силы соответствующей текстуры ландшафта.
- Текстура шума: Укажите текстуру шума для различной высоты и цвета.
- Гладкость: Увеличивает отражающую способность травы (рекомендуется 0).
- UpDown: Переместите траву в землю в случае, если нижняя часть текстуры и земля не соприкасаются.
- Плотность травы: Измените количество отображаемой травы.
- 3 спрайта: Обеспечивает самый высокий уровень детализации с 3 спрайтами чередования
- 1 Sprite: Включает самый низкий LOD с 1 спрайтом (иначе используются 2 спрайта; лучше для повышенного обзора).
- Включить ветер: Включить развевающееся движение травы.
- Направление ветра: 0-360 ° обозначает направление движения ветра.
- Максимальное расстояние: Максимальное расстояние рисования травы.
- LOD2 Distance: Расстояние, где нужно переключиться на второй LOD.
- Размер перехода: Размер области перехода между уровнями детализации (большие значения требуют большей производительности, но сглаживают переход).
- Отбрасывание теней: Позволяет траве отбрасывать тени (очень высоко над головой).
- Толщина тени: Делает отбрасываемые тени более отчетливыми. (Также используйте силу тени от падающего света!)
- Shadow LOD Distance: Расстояние, до которого трава отбрасывает тени.
- HDR Вкл .: Включите при использовании HDR.
Вы можете добавить скрипт Terrain Shader / Shader / GrassCollider.cs к модели персонажа игрока (или любому другому объекту), чтобы трава изгибалась по кругу вокруг нее.
Когда сценарий добавляется к модели, «Радиус» указывает максимальный радиус изгиба травы.
Слот «Материал» скрипта должен быть заполнен материалом «Отложенный шейдер травы».
Советы по производительности:
Если требуется большая производительность, вы можете попробовать выполнить следующие настройки:
- Уменьшить любые расстояния LOD
- Отключить отбрасывание теней
- Уменьшить плотность
- Измените самый низкий LOD на 1 Sprite
Другое:
- Включенная текстура лучше всего подходит для довольно плоской местности (или если местность с травой ровная).Для травы на холмах больше подходит клин / текстура.
- Если вы смешиваете две текстуры ландшафта, трава, назначенная каждой текстуре, смешивается в зависимости от силы каждой текстуры.
Лицензия
Лицензия MIT
Copyright (c) [2017] [Себастьян Рингс]
Разрешение предоставляется бесплатно любому лицу, получившему копию
этого программного обеспечения и связанных файлов документации («Программное обеспечение») для работы с
в Программном обеспечении без ограничений, включая, помимо прочего, права
использовать, копировать, изменять, объединять, публиковать, распространять, сублицензировать и / или продавать
копий Программного обеспечения и разрешить лицам, которым Программное обеспечение
предоставлено для этого, при соблюдении следующих условий:
Приведенное выше уведомление об авторских правах и это уведомление о разрешении должны быть включены во все
копии или существенные части Программного обеспечения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ
ПОДРАЗУМЕВАЕТСЯ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ,
ПРИГОДНОСТЬ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ И ЗАЩИТА ОТ ИНФОРМАЦИИ. НИ В КОЕМ СЛУЧАЕ
АВТОРЫ ИЛИ ДЕРЖАТЕЛИ АВТОРСКИХ ПРАВ НЕСУТ ОТВЕТСТВЕННОСТЬ ЗА ЛЮБЫЕ ПРЕТЕНЗИИ, УБЫТКИ ИЛИ ДРУГИЕ
ОТВЕТСТВЕННОСТЬ, ВЫЯВЛЯЮЩАЯСЯ ЛИ В РЕЗУЛЬТАТЕ ДОГОВОРА, ПРАКТИКИ ИЛИ ИНЫМ ОБРАЗОМ,
ВНЕЗАПНО ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ ДЕЛАМИ
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ.
Создание ландшафта и добавление деревьев и травы в Unity
Введение
В этой статье показано, как создать ландшафт и добавить деревья и траву в Unity
Предварительные требования
Unity Environment версии 2017.4.40f1
Создайте проект
Для начала нам нужно перейти в иерархию. Мы собираемся выбрать 3D-объект, и мы собираемся выбрать ландшафт.
Первое, что нам нужно, это влияет на нашу местность, поэтому вы можете использовать колесо мыши на карте и колесо мыши для увеличения и уменьшения масштаба.
Это наша местность. Следующее, что нам нужно сделать, это перейти в магазин активов.
По сути, импортируйте стандартные активы или вы можете добавлять отдельные объекты по мере продвижения. Переходим в строку поиска и вводим стандартные активы. После этого убедитесь, что вы перешли к фильтру, убедитесь, что вы сняли галочку с продажи. Прокрутите вниз, убедитесь, что вы выбрали бесплатно, а затем просмотрите результаты прокрутки, и это стандартные ресурсы, которые мы собираемся использовать, щелкните один раз, а затем прокрутите вниз и выберите импорт, дайте некоторое время, пока вы не импортируете все активы.На этот раз процесс займет немного времени, так что вы можете опубликовать это видео и продолжить. После того, как ваши активы были успешно импортированы, перейдите в свой проект и выберите импорт.
Вы успешно импортировали стандартные основные средства. Теперь вы можете вернуться в игру. У вас есть сцена здесь, поэтому следующее, что нам нужно сделать, это добавить немного травы к нашему ландшафту. Для этого вам нужно нажать на маленькую кисточку.
Вам нужно отредактировать текстуры, а затем добавить текстуру.Мы нажмем здесь выбрать, а затем введем здесь слово трава. Затем мы выберем траву и дважды щелкнем.
Далее выберите добавить. Теперь у нас есть травяной камень. Мы также собираемся редактировать текстуры, снова добавляем новую текстуру.
Мы снова наберем слово «трава» и на этот раз поставим холм из травы. Дважды щелкните здесь, чтобы выбрать.
Увеличьте размер кисти и убедитесь, что вы выбрали траву этой травой.Тогда вы действительно можете приступить к рисованию.
Следующее, что нам нужно сделать, — это трава. Выберите этот вариант, который говорит поднять более низкую местность. Щелкните один раз, чтобы получить размер кисти 100.
Теперь я могу щелкнуть и перетащить, увеличивая базовый ландшафт.
Если вы хотите опустить местность, вы можете удерживать нажатой клавишу Shift, а затем просто щелкнуть и перетащить, чтобы опустить местность, поэтому, не удерживая клавишу Shift, вы поднимаете местность, удерживая клавишу Shift. вниз вы понижаете местность.
Следующее, что нам нужно сделать, это добавить несколько деревьев, поэтому мы собираемся выбрать этот параметр здесь, а затем выбрать любые деревья. Когда мы выбираем дерево, мы нажимаем на эту маленькую опцию.
Затем мы, в основном, пройдемся и добавим несколько деревьев, которые у нас есть здесь, поэтому выберите широколистный, дважды щелкните по нему и щелкните добавить деревья.
Теперь я могу просто щелкнуть там один раз, но чтобы щелкнуть еще раз, требуется немного времени.Не сходите с ума с добавлением деревьев, потому что ваш компьютер должен отображать всю эту информацию. Я просто собираюсь снова выбрать деревья редактирования, выбрать и щелкнуть по этой маленькой опции.
Я выберу следующее доступное дерево и нажму «Добавить». Я собираюсь добавить другие деревья. Я могу редактировать деревья. Я собираюсь добавить еще один тип дерева, хвойное. Дважды щелкните
Щелкните Добавить, а затем мы можем добавить хвойные деревья вокруг местности.Вот как вы создаете ландшафт трехмерного мира с помощью Unity 3D.
Сводка
Надеюсь, вы поняли, как создать ландшафт, добавить деревья и траву в Unity
Grass for unity free | Новости Unity 3d | Активы | Туты | Indie
2014,1,2016,1,2d вогнутый коллайдер, 1,32 бит, 1,3d, 2,3D Interactive Sandbox, 1,3d сканирование, 1,64 бит, 1, активации, 1, Adcolony, 1 , admob, 1, Альтернативные магазины приложений, 1, альтернативы, 1, Amazon, 1, AMD, 1, аналитика, 1, android, 6, Android SDK Tools, 1, angrybirds, 1, APK, 1, App, 6, App Обзор, 1, яблоко, 1, as, 1, ASO, 1, Assets, 8, дополненная реальность, 1, AVPro QuickTime, 1, новичок, 2, за кадром, 4, BigMiniGolf, 1, Bravo Storm Beta, 3, bugfix, 1, Build, 1, Buy, 1, c #, 3, camera, 1, Cardboard, 1, CGTrader, 1, China, 1, chrome, 2, chromebook, 1, clash of clans, 1, Collaboration, 1, коллайдер, 1, конвертер цветов, 1, компании, 1, контест, 1, Cpi, 1, CrossyRoad, 1, ЗАВИСИМОСТЬ ВПРЫСКА, 1, Загрузки, 12, drawcalls, 1, dropbox, 2, EA, 1, EditorVR, 1, error, 10, Ошибка построения игрока, 1, facebookdevelopers, 7, facebookUnitySDK, 4, Failed, 1, flapflap, 1, Flappybird, 1, flapybird, 1, Fog, 1, free, 35, free post, 4, future, 1 , game, 5, Game Companies, 1, шаблон документа игрового дизайна, 1, gameplay, 1, Games, 1, gamestory, 1, GDC, 1, GIMP, 1, git, 1, github, 5, GLOBAL GAME JAM 2015, 1, Google, 1, Google Daydream, 1, Магазин Google Play, 4, разработчики Google, 6, gradle, 1, графика, 1, трава для единства бесплатно, 1, Руководства, 23, Hacknslash, 1, Безголовый режим, 1, Здоровье, 1, Heroku, 1, Как кодировать, 1, HowTo, 8, Доход, 1, Индия, 1, инди, 2, Инди-команды, 3, инфографика, 3, информация, 7, Intel, 1, iOS, 4, iPhone, 2, Проблемы, 2, javascript, 1 , установка jdk, 2, ярлыки клавиатуры, 3, язык, 2, обучение, 5, уровень одиннадцатый, 1, ошибка лицензии, 1, Linux, 2, список, 1, madebyunity, 3, madewithunity, 6, мес, 1, мобильный, 1, mobogenie, 1, монетизация, 2, трюки с мышью, 1, Must, 1, новости, которые нужно знать, 24, NullReferenceException, 1, Object, 1, oculus, 3, Official, 3, открытая бета-версия, 1, открытый исходный код, 3 , оптимизация, 1, краска.сеть, 1, производительность, 1, разрешение, 1, PKBhaag, 1, плагины, 7, Pokemon Go, 1, polijoy, 1, production, 1, Profitable, 1, programmer, 2, Promote Your App, 3, psd, 2 , Publish, 2, realsense, 1, reddit, 1, release, 3, render settings, 2, reskin, 1, Resources, 2, Russia, 2, scripts, 4, SDK, 4, SHADERS, 4, Similar, 1, skybox, 1, Slender, 1, solutions, 3, soomla, 1, Source Codes, 1, SourceCodes, 2, Space Invader, 1, спонсируемый пост, 1, Sprites, 1, Staff Pick, 8, strategy, 1, Textmeshpro, 1, текстуры, 1, Наклонная кисть, 1, инструменты, 8, хитрости, 8, Учебник, 20, Невозможно найти, 1, объединить 2013,1, объединить 2017,1, единство, 9, Unity 2d Pathfinding, 3, единство 2d water, 1, Подключаемый модуль Unity AdMob, 1, Объявления Unity, 1, Форум Unity, 1, Таймер Unity, 1, Unity Web Player, 3, Сбой Unity Windows 10, 1, Unity Without Borders, 1, Unity2d, 4, unity4 .6,1, unity5,13, URP, 1, полезные приложения, 1, версия, 1, виртуальная реальность, 2, виртуальная реальность, 1, Visual Studio, 1, ваучеры, 1, воксель, 1, VR, 3, webplyer, 5, win, 2, windows, 3, wordpress, 2,
[Введение в Unity] Как использовать Terrain Engine
При создании сцены важны географические особенности, такие как земля, море и горы.
Вы можете получить их в Asset Store, но вы также можете создать свой собственный мир с помощью функции под названием «Terrain Engine», доступной в Unity.
В этой статье я объясню, как создать ландшафт с помощью Terrain Engine.
Создание ландшафта
В строке меню выберите «GameObject> 3D Object> Terrain».
Выберите «Рельеф»
Теперь создана «плоская» модель местности.
Создана модель местности
Теперь нам нужно сделать его более реалистичным.
Создавать потрясения и депрессии
Поскольку созданная местность плоская, нам нужно добавить реалистичные потрясения и депрессии.
В окне инспектора «Рельеф» есть группа значков (кнопок инструментов).
Кнопки инструментов в Инспекторе
Это инструменты для редактирования ландшафта.
Нажмите крайнюю левую кнопку инструмента «Поднять / опустить местность», чтобы отобразить элементы для редактирования в нижней части окна.
Выберите «Поднять / опустить местность»
Выделив кисть в палитре «Кисти», щелкните или перетащите мышь, чтобы добавить неровности ландшафту.
При перемещении указателя мыши в окне «Сцена» он принимает вид синего теневого указателя.Используя мышь, поместите кисть в то место, где вы хотите добавить неровности, щелкните и перетащите мышь, чтобы добавить их.
Создавайте потрясения и депрессии кистью
В «Настройках» «Размер кисти» определяет размер кисти, а «Непрозрачность» определяет «ширину вариации».
Слово «вариативная ширина» может не описывать, как «Непрозрачность» работает очень хорошо, поэтому давайте сравним фактические результаты с непрозрачностью, установленной на 10 и 100. В обоих случаях я рисую одинаково с теми же настройками, за исключением того, что непрозрачность регулируется. .
Рисунок с непрозрачностью 10
Рисунок с непрозрачностью 100
Приведенная выше анимация должна дать вам представление о том, что такое «ширина вариации».
Создать плато
Теперь давайте попробуем создать плато.
Щелкните вторую кнопку инструмента «Paint Height», чтобы отобразить настройки ниже.
Настройка «Высота»
«Размер кисти» и «Высота» работают так же, как и для «Поднять / опустить местность».
Установив значение «Высота», вы можете создать плато с заданной высотой.
В окне «Сцена» нарисуйте так же, как «Поднять / опустить местность», чтобы создать плато.
Создать плато
Итак, вы успешно добавили плато.
Настроить текстуры
Затем примените текстуры к ландшафту.
Подготовьте материалы для текстуры
Во-первых, импортируйте бесплатный ассет текстуры для ландшафта.
Загрузите и импортируйте ресурс «Terrain Textures Pack Free» из Asset Store.
Пакет текстур ландшафта бесплатно
Добавить текстуру к местности
Выберите кнопку инструмента «Рисовать текстуру» и нажмите кнопку «Редактировать текстуру», чтобы прикрепить текстуру к ландшафту.
Применить текстуру № 1
Появится всплывающее окно. Выберите «Добавить текстуру».
Применить текстуру № 2
Появится окно «Добавить текстуру ландшафта», нажмите «выбрать» в поле «Не (текстура 2D)» слева.
Добавить текстуру
Появится список текстур. Вы можете выбрать любую текстуру по своему усмотрению, но давайте для этого примера выберем «GrassUV01».
Список текстур
Закройте окно и нажмите «Добавить».
Теперь к ландшафту применена текстура, похожая на траву.
Проверить внешний вид в окне сцены
Добавить вторую текстуру
В настоящее время вся местность имеет единую текстуру, поэтому она не подходит для мира с несколькими цветовыми оттенками, такими как трава и камни.
Таким образом, в дополнение к текстуре, подобной траве, описанной выше, мы можем добавить к ландшафту текстуру, похожую на пустошь.
Как и в случае с первой текстурой, выберите «Редактировать текстуры> Добавить текстуры».
Он снова вызывает окно для выбора текстуры, поэтому выберите текстуру серого цвета.
Добавьте вторую текстуру.
Закройте окно. Теперь вы можете раскрасить местность указанной текстурой, щелкнув и перетащив мышь.
Нарисуйте местность второй текстурой
Вы можете изменить текстуру с помощью «Редактировать текстуру».
Изменить текстуру
Создание леса
Затем сажайте деревья на местности, чтобы создать леса или леса.
Подготовьте материал для леса
Во-первых, импортируйте бесплатный актив деревьев из Asset Store.Загрузите и импортируйте ресурс Free Trees, как показано ниже.
Актив «Бесплатные деревья»
Добавьте деревья в сцену
Нажмите кнопку инструмента «Раскрасить деревья» и выберите «Редактировать деревья> Добавить деревья».
Выберите «Редактировать деревья»
Появится следующее окно, нажмите кнопку справа.
Нажмите маленькую кнопку справа
Появится список импортированных деревьев, выберите свое любимое.
Список активов дерева
Выделив дерево, переместите указатель мыши в окно сцены.После этого указатель превратится в голубой маркер. Щелкните мышью, чтобы разместить деревья.
Разместите деревья, щелкнув мышью
Деревья добавляются автоматически при перетаскивании мыши.
Добавьте деревья, перетаскивая мышью
Поместите деревья в сцену
Создайте озеро
Затем создайте на местности географический объект, например пруд или озеро.
Unity по умолчанию не имеет прудов или озероподобных элементов, поэтому сделайте бассейн на местности и налейте в него воду, чтобы получить аналогичный элемент.
Импорт материала «Вода»
Давайте сначала импортируем «воду».
В строке меню выберите «Assets> Import Package> Environment».
Импортируйте пакет Environment
Появится окно для импорта пакетов, нажмите «Импорт» со всеми выбранными пакетами.
Импортировать все пакеты
После импорта пакетов в представлении проекта проверьте, есть ли «WaterProDaytime» в Assets / Standard Assets / Environment / Water / Water.
Это будет водный материал, который мы будем использовать на этот раз. Кстати, WaterProNight — это вода, предназначенная для ночных сцен, как следует из названия.
Выберите Prefab Water
Сделать бассейн
Теперь давайте сделаем таз на местности.
В Инспекторе ландшафта настройте параметры «Paint Height» следующим образом.
Параметр «Высота краски»
Нарисуйте круг с потрясениями, перетащив мышь в Сцену, чтобы сформировать бассейн.
Создать бассейн
Поместите WaterProDaytime в сцену
Перетащите «WaterProDaytime» из окна «Проект» и поместите его так, чтобы он соответствовал чаше на сцене.
Место «WaterProDaytime»
Если размер не подходит, отрегулируйте «WaterProDaytime», масштабируя и перемещая его.
Загрузите местность в STYLY
Вы также можете загрузить созданный ландшафт в STYLY.
Однако, если вы загрузите ландшафт, созданный с помощью Unity, в STYLY как есть, это вызовет некоторые проблемы.Например, вы не сможете масштабировать или вращать его. В худшем случае вы не сможете загрузить его из-за размера файла. Итак, используйте следующие два метода для загрузки ландшафта в STYLY.
Первым можно пользоваться бесплатно, но у него есть недостатки; может быть применена только одна основная текстура, и деревья не могут быть воспроизведены, что требует другого метода для размещения деревьев в СТИЛЬНОЙ сцене.
[Unity] Как преобразовать местность в файл OBJ (с изменяемым размером)
Второй нельзя использовать бесплатно, но вы можете применять несколько текстур и воспроизводить деревья.
[Unity] Разделение ландшафта на сетку и текстуру с помощью «Terrain To Mesh»
Поздравляю. На этом мы завершаем руководство по созданию ландшафта с помощью Terrain Engine.
Создание ландшафта поможет улучшить ваш мир. Если вы научитесь создавать ландшафты, вы сможете создавать разнообразные пространства виртуальной реальности.
European Forest Environment in Unity — Очки опыта
СОЗДАНИЕ ЕВРОПЕЙСКОЙ ЛЕСНОЙ СРЕДЫ В ЕДИНСТВЕ — BREAKDOWN
Богдан Билоус рассказывает нам о том, как он создал свою впечатляющую европейскую лесную среду в Unity.В этой статье он описывает свой процесс создания готовой к игре растительности, а также свои настройки материалов и то, как он создает эффективное наружное освещение.
Введение
Hi Experience Points! Меня зовут Богдан Билоус, я из Украины, я 3D-художник, работающий в игровой индустрии уже 4 года. Я начал свою карьеру в качестве 3D-художника, когда был студентом в Польше.
Почему мне пришла в голову идея создавать 3D? Я начал свой путь в качестве 3D-художника 4 года назад после получения степени бакалавра изящных искусств.У меня был план переехать в Польшу и там учиться, поэтому я выбрал компьютерную графику, потому что считал, что это лучшая область для использования моих знаний из моего предыдущего учебного курса. Прежде чем погрузиться в компьютерную графику, я изучал академическое искусство (традиционная скульптура, живопись, керамика) в Украине. Я всегда был увлечен искусством и создавал разные интересные вещи, чтобы выразить себя. В то же время со школы я мечтал о разработке игр.
В середине первого года обучения в Польше я получил свою первую работу в студии инди-игр.Там я получил свой первый опыт создания 3D для игр, и мне захотелось узнать о нем больше. После университетских лекций и работы над инди-проектами я проводил все свое свободное время, занимаясь самообучением, поисками и желанием найти больше способов попрактиковаться. Начиная с основ 3D, я прошел почти все направления, чтобы найти способы самосовершенствования.
Почему я создал свою сцену на движке Unity? Раньше я работал в Unity. Я знаком с пользовательским интерфейсом и инструментами, поэтому мне было проще начать экспериментировать.Я также заметил, насколько активно этот движок улучшается с точки зрения графики, поэтому решил попробовать…
Вначале у меня не было никаких планов, я просто хотел создать красивое место и протестировать различные решения. с растительностью и деревом. Я выбрал регион и тип ландшафта и, естественно, мой выбор пал на восточноевропейский ландшафт, поэтому каждый следующий объект должен соответствовать ему. Затем я взял как можно больше ссылок в Интернете, чтобы понять, как свет взаимодействует с природой и что меня больше всего вдохновляет.Я искал ресурсы, чтобы заполнить пространство в магазине ресурсов, например, динамические облака, хвойные деревья, горы на заднем плане и так далее.
unity — Как разместить траву на пользовательской сетке ландшафта
Это старая тема, но она все еще актуальна.
Есть несколько способов справиться с травой за пределами Unity’s Terrain.
Самый простой способ — создать свою собственную плоскую сетку и применить шейдер с задней гранью ИЛИ использовать перевернутый V-образный узор, который действительно близко друг к другу, где каждая сторона является зеркалом противоположности.Затем поместите их вручную по одному в свою сцену. Хитрость заключается в том, чтобы убедиться, что это как статический префаб, так и в том, что он позволяет создавать экземпляры графического процессора на материале. Это позволит либо группировать траву, либо иметь одну копию, хранящуюся в графическом процессоре, и визуализировать ее с изменением освещения. (Это одно или другое, но при включении обоих движок — тот, который управляет тем, что где, на основе приоритетов.)
Минус этого варианта в том, что он требует много времени.
Чуть более сложный вариант WAY Fast — использовать систему частиц (сюрикен) с эмиттером сетки с нулевой гравитацией и силой и с настройкой так, чтобы трава появлялась на поверхности меша.Вы можете сделать частицу травы бесконечной, отключив в частице модуль «за время жизни», активировав «Зацикливание» + «Предварительное нагревание» и набрав «Бесконечность» в параметре StartLifetime. В идеале у вас должен быть сценарий, который мог бы вызывать функцию Stop (), чтобы частица перестала вычислять генерацию, но оставила экземпляры частиц в сцене.
Если все настроено правильно, при создании экземпляра графического процессора будет генерироваться трава.
Самое интересное в этой возможности заключается в том, что вы можете управлять функциями частиц, такими как отбрасывание / получение теней, количество генерируемой травы, влияние на траву световых зондов и зондов отражения и т. Д.Это упрощает настройку благодаря расширенным графическим параметрам.
Вы даже можете настроить основную систему частиц сюрикена, которая генерирует различные виды травы и цветов, если вы настроите ее правильно.
Единственным недостатком этой опции является отсутствие LOD, если у вас есть действительно сложная геометрия для меша, на котором появляется текстура травы. (Он действительно применяет Midmaps, если текстуры активированы Mipmap!) Если вам интересно, да, можно иметь ветры / силу для воздействия на частицы… но это должно быть сделано в шейдере, используемом для частицы.
лучших бесплатных моделей местности, деревьев и травы 3d модели скачать
Unity лучшие бесплатные ресурсы — лучшие бесплатные модели местности, деревья и трава 3d модели
Я хотел бы указать вам на лучшие бесплатные модели местности, доступные для загрузки в магазине ресурсов unity. Пакет сообщества Unity, содержащий бесплатные модели ландшафта также с деревьями, кустами, травой и текстурами, уже довольно давно входит в топ-10 магазина Unity Asset Store, в этой статье я покажу вам живое 3D-превью бесплатных ресурсов ландшафта, включенных в этот пакет.Чтобы увидеть предварительный просмотр, убедитесь, что на вашем компьютере установлен Unity Player.
Вы можете загрузить бесплатный ресурс моделей местности из магазина Unity Asset, перейдя по ЭТОЙ ССЫЛКЕ. Вы можете импортировать в свой проект Unity, выбрав опцию Загрузить и импортировать . Давайте подробнее рассмотрим эту бесплатную загрузку ресурсов ландшафта, изучив ее содержимое.
лучших моделей свободной местности: деревья, растения и растительность, чтобы сделать вашу рощу индивидуальной
Очень необходимый тип моделей свободного ландшафта для игры включает деревья, растения и растительность, поскольку мы знаем, что каждый новичок-воин или волшебник отправится в приключения в каком-то зеленом лесу, полном врагов и сокровищ.Этот пакет Unity Free Terrain Pack включает следующие бесплатные модели 3d деревьев и растений:
- Ольха
- Бамбук
- Банановый завод
- Баньян
- Клен японский
- Мимоза
- Пальма
- Сосна обыкновенная
- Явор
- Ива
Если вы хотите предварительно просмотреть бесплатные трехмерные модели деревьев и растений, вы можете воспользоваться средством предварительного просмотра веб-плеера Unity, включенным на эту страницу, и запустить его в своем браузере.