Как поставить текстуру на террейн в unity
Перейти к содержимому

Как поставить текстуру на террейн в unity

  • автор:

Текстуры

Вы можете добавлять текстуры на поверхность terrain’а для создания окраски и мелких деталей. Так как terrain’ы довольно большие объекты, к ним обычно применяют текстуры, которые можно бесшовно стыковать, чтобы замостить ими поверхность (повтор обычно не заметен с точи зрения персонажа, который находится близко к земле). Одна текстура будет служить как “фоновая” картинка по всему ландшафту, но вы также можете рисовать области, используя другие текстуры, чтобы симулировать различные покрытия, такие как трава, пустыня и снег. Нарисованные текстуры могут быть применены с разной прозрачностью, так, чтобы у вас получился плавный переход между травянистой местностью и песчаным пляжем, например.

Terrain песчаной дюны с песочной текстурой

Включение текстур

Кнопка с кистью на панели инструментов включает рисование текстур.

Изначально у terrain’а не будет текстур, назначенных для рисования. Если вы кликнете кнопку Edit Textures и из выпавшего меню выберите Add Texture, вы увидите окно, в котором вы можете указать текстуру и её свойства.

Depending on the material type you set in Terrain Settings, the color channels of the main texture map may have different uses. These are listed below in Terrain Texture Settings.

Click on Select to see your texture assets in a separate Select Texture window (not shown). Click on the texture you want and it displays in the Add Terrain Texture window. (See Add Terrain Texture window, before and after, in Fig 1 below.)

Fig 1: Click on Select in the Add Terrain Texture window and choose a texture asset from the Select Texture window (not shown) - it then displays, ready to add to the terrain

Нанесение текстур на ландшафт

Depending on the material type you set in Terrain Settings, the color channels of the main texture map may have different uses. The different Add Terrain Texture windows are listed here.

Standard [image above in Fig 1]: RGB channels are the albedo color of the terrain surface, while alpha channel controls the smoothness. There is also a ‘Metallic’ slider which controls the overall look of the surface.

Diffuse: RGB channels are the diffuse color. Alpha channel is not used.

Окно Add Texture

Specular: RGB channels are the diffuse color. Alpha channel is the gloss map.

Окно Add Texture

Custom: How the splat map is used depends on your custom shader, but usually you want the RGB channels to be the base color.

Окно Add Texture

Besides the main texture map, you can also specify a normal texture for all of the 3 built-in material types. The texture type of the normal texture used here must be ‘Normal Map’ (you can change the texture type of a texture asset in its import settings). Shader code that handles normal map will be turned on only when at least one normal texture is set for the terrain, so you don’t need to pay the performance cost of normal map if you don’t use them.

Свойство Size (прямо под селекторами текстур) позволяет вам установить ширину и высоту на которую будет растягиваться изображение по поверхности terrain’а. Свойство Offset определяет, как далеко от точки вращения terrain’а будет начинаться тайлинг; вы можете установить его в 0, чтобы начать тайлинг прямо от угла. После того как вы установили текстуру и нужные вам свойства, нажмите на кнопку Add, чтобы сделать текстуру доступной terrain’у.

To make changes to an added terrain texture, select its thumbnail, click the ‘Edit Textures’ button and select ‘Edit Texture…’ from the menu. Or, you can simply double click on its thumbnail. To remove a terrain texture, select its thumbnail, click the ‘Edit Textures’ button and select ‘Remove Texture’ from the menu.

Рисование текстурами

Первая текстура, которую вы добавите, будет использоваться в качестве “фона” для покрытия terrain’а. Однако, вы можете добавить сколько угодно текстур; последующие текстуры будут доступны для рисования с помощью привычных кистей. Под текстурами в инспекторе terrain’а вы увидите не только обычные опции Brush Size и Opacity, но и дополнительную опцию Target Strength. Она устанавливает максимальную степень непрозрачности, которую достигнет кисть, даже если повторно пройдётся по одной и той же точке. Это может быть полезно при добавлении едва заметных островков разнообразия цветов на одном типе terrain’а для разбавления монотонности большой, плоской области с такой же затайленой текстурой, повторяющейся снова и снова.

Unity: работа с Terrain

Привет, народец! Меня всё-таки попросили написать отдельную статью, как работать с Terrain и создать локацию. Предыдущие статьи Вы можете обнаружить по ссылкам:

  1. Как создать игру, ничего не умея. Часть первая: модели и анимации
  2. Как создать игру, ничего не умея. Часть вторая: сцена (уровень), квесты, интерактивные объекты
Terrain

Пойдем мы с вами по протоптанной дорожке, создадим Scene, а в ней GameObject -> 3D Object -> Terrain и выставим значения Terrain Width(Length, Height) 100-100-120. И перед нами появляется серый квадрат!

Отлично, половина работы сделана. Давайте придадим некие очертания нашему квадрату, а именно, создадим горы у краёв Terrain. Для этого переходим в Inspector и находим кисточку Paint Terrain, в ней выбираем графу Raise or Lower Terrain.

После выбираем подходящую кисть, размер(Brush size) и Opacity(силу воздействия). Я выбрал параметры 7 и 10. Начинаем водить нашей кистью по краям Terrain и получаем горы по краям, если Вы всё сделали правильно, у Вас должно получиться что-то подобное.

После я возьму другую кисть (тут уже на ваш выбор), выставлю Opacity на 3 и начну водить ей по ровным поверхностям что бы создать эффект российских ровных дорог =). Получилось вот так.

Мне кажется, я объяснил, как пользоваться кистями. Поигравшись с настройками, вы вполне сможете создать от пустыни до тропиков, всё зависит от фантазии, единственное что еще скажу, если вы ходите сделать возвышенность меньше, то просто зажмите клавишу Shift, от этого будет обратный эффект. Сейчас же не будем на этом зацикливаться и двинемся дальше.

Текстуры

После всех манипуляций у меня появился серый квадрат с непонятными выпуклостями, нужно придать ему немного жизни.И снова тут несколько вариантов:

  1. Нарисовать текстуры самому (если умеем)
  2. Купить готовые в Asset Store
  3. Скачать бесплатный пак стандартных асетов (это мы и сделаем)

Идём в Asset Store и вводим в поисковике standard assets, он сразу же нам выдаст необходимый пак. Скачиваем, интегрируем, радуемся =).

Снова нажимаем на кисточку в Inspector Terrain и выбираем строку Paint Textures. Ниже видим строку Edit Terrain Layers, выбираем Create Layer. В появившемся окне я нахожу текстуру травы(GraceHillAlbedo) применяю и вижу, что моя серая постройка стала зеленой.

Добавляем очередную текстуру, у меня это CliffAlbedoSpecular, её я буду использовать для разрисовки гор, негоже что бы всё было одного цвета. Выбираю кисть, размер, и текстуру гор, начинаю рисовать.

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

Получился конечно не шедевр, но у меня нет желание тратить на это больше 5 минут =). А теперь, для Зеленых, посадим несколько деревьев! Выбираем Paint Trees рядом с кистью, нажимаем Edit Trees и выбираем Add Tree. Нажимаем на кружочек в поле Tree Prefab и выбираем дерево которое нам понравилось. В паке оказалось всего три дерева, и я решил добавить их все. Поставив первое дерево, я обнаружил что оно слишком уж большое, поэтому перетаскиваем бегунок Tree Height влево до нужного нам размера и начинаем посадку деревьев.

Партия зеленых может спать спокойно! Проделываем похожую процедуру с травой. Для тех, кто не нашел, куда же добавлять текстуру травы, ищем строчку Details в ней Edit Details -> Add Grass Texture. В строке Detail Texture нажимаем на кружок и добавляем траву, у меня это GrassFrond02AlbedoAlpha. Обратите внимание на две полоски с цветом, они отображают, какой цвет будет у травы в живом и сухом виде, а когда мы добавляем траву в сцену, бегунками можно настроить сколько будет мертвой травы, а сколько живой, это покажет мир более живым. Дальше играем с бегунками Setting и выставляем значение подходящие Вам.

Наша местность всё живее и живее! Но всё еще чего-то не хватает. Точно! Нам не хватает неба, давайте добавим небо! Иду в ассет стор, в поисковике вбиваю Sky Free и первое что мне выдает это Sky5x, скачиваю и добавляю в проект. Далее нажимаем на Window -> Rendering ->Lighting Setting, находим строчку Skybox Material нажимаем на кружок и выбираем понравившееся Вам небо, я выбрал небо с облаками.

Получилось довольно неплохо для проекта, собранного на скорую руку.

Если посмотреть на игровую сторону, то мы имеем покачивающиеся деревья и траву на ветру. Не поленитесь потратить достаточно времени, на создание локации и она Вам будет приносить только удовольствие.

Заключение

Создание локации — довольно сложный и очень трудозатратное удовольствие, вам нужно сразу понимать что вы будете создавать, чтобы в дальнейшем не пришлось всё делать заново. А в данной статье я рассказал основы, как пользовать кистями для изменения Terrain. Надеюсь, вам это было полезно. А мы с вами встретимся уже в следующей статье по созданию игры, используя только интернет!

Автор не входит в состав редакции iXBT.com (подробнее »)
Автор nonp НА Рейтинг +5.00
Блог Компьютерные и мобильные игры 1326 5099 RSS Вступить Подписаться
Не упускай интересное! Подпишись на нас в ВК и Telegram.

Пожаловаться на комментарий
11 комментариев
Добавить комментарий

Коротко и понятно. Люблю такое читать. У меня вопрос, как насчет UE4? Тоже хороший движок, может стоит хоть немного сравнить разработку на этих движках. Но если нет, так нет.

Хорошо, как закончу с проектом на Unity, возьмусь за серию статей на UE.

Ответ nonp на комментарий

Хорошо, как закончу с проектом на Unity, возьмусь за серию статей на UE.

Жду с нетерпением. Подписался.

Терейн в юнити гавно как и само юнити, покупайте получше компы и учите анриал.
Это исключительно Ваше мнение.

Я бывший юнити разработчик (4 года), сейчас анриал. Верь мне — юнити шлак, рад что вылез с этого забаганого «навоза» с кривыми пайплайнами и ущербной средой разработки… как страшный сон забыл.

Я повторюсь, это Ваше мнение.Моё же, любой движок имея понимание как он работает можно привести к нужным Вам результатам. Я так же работаю на UE и не вижу в них особой разницы.
П.С: Не работаю над ААА проектами, возможно поэтому и не встречалось мне больших отличий в производительности.

К примеру перечислю быстрые фичи среды разработки unreal чего нет в unity:
1) Качество света, он мягкий и секси… Сделать такой в юньке это танец с бубном на неделю беременного вождя апачи… и то, до первого апдейта.
2) мало кто сейчас использует террейн в его чистом виде и на юньке я делал красоту с помощью микросплата и прочих бубнов… Вот скрин:
https://drive.google.com/file/d/1yPVoMtHoY1tTpuSa8z-Du4zVQUDcd6yX/view?usp=drivesdk
Но, на unreal это работает с коробки без прочих усилий.
3) Теперь AI and pathfinding… Ну тут вообще лучше не вспоминать юнити.
4) шейдера… Вот тут реально надо быть или слепым или тупым я хз… Чтоб говорить что они на юньке такие же и разницу не видеть…
Я понимаю что логику одинаково можно закодить что на шарпе что на спп, всегда останусь при мнении что юнити движок для бедных что не могут комп прочитать под анриал… у меня самого компиляция шейдеров на анриале вызывает боль и нервный тик но оно того стоит.

Захотелось вставить свои 5 копеек. Все что ниже — передрал с некого сайта, с корявым переводом от Гугла.
Хотя обе платформы создают высококачественные визуальные эффекты, большинство пользователей обнаружили, что Unreal Engine имеет небольшое преимущество перед Unity в качестве визуальных эффектов. Он может создавать фотореалистичные визуализации, которые погружают геймеров и позволяют им свободно путешествовать по потрясающему новому миру, а также включать высококачественные активы из различных источников. Благодаря мощным возможностям рендеринга и первоклассным визуальным эффектам, качество анимации не имеет себе равных. Это был явный фаворит среди пользователей по качеству инструментов анимации и визуализации анимации.
Unity немного медленнее обрабатывает и рендерит, чем Unreal Engine. Это может не иметь значения, если у вас есть неограниченное время для создания игры, но если вы разработчик, который работает в сжатые сроки, вы можете увидеть преимущество в молниеносных возможностях рендеринга Unreal Engine.
Для кого лучше всего подходит Unity?
Unity — отличная платформа для начинающего инди-разработчика игр. Благодаря собственному языку C# и огромному сообществу других разработчиков и дизайнеров Unity является отличной платформой для независимых дизайнеров, которые хотят начать создавать прямо сейчас и не хотят платить платформе гонорар за свои игры на серверной части.
Для кого лучше всего подходит Unreal Engine?
Unreal Engine — это полностью отлаженная графика и молниеносная скорость рендеринга, что делает его идеальным для разработчиков игр корпоративного уровня или независимых разработчиков, которые хотят получить сверхвысокое качество в своих играх и не возражают платить лицензионные платежи за конечную игру.

Текстурирование Terrain

Текстуры на объекте Terrain рисуются во вкладке Paint Terrain, в котором надо выбрать режим Paint Texture.

Unity. Paint Texture

Затем надо нажать на кнопку Edit Terrain Layers… и в выпадающем списке выбрать Create Layer…, где можно выбрать материал (текстуру), которой можно рисовать по объекту Terrain.

Если материалов нет, их можно импортировать через Asset Store.

Unity. Terrain. Create Layer

Изменить размер текстуры можно через параметр Size.

Unity. Terrain. Tiling Settings. Size

В результате объект Terrain будет выглядеть примерно как на картинке ниже.

Unity. Terrain

Обновлено: 01 ноября 2020 | История изменений

Комментарии

Авторизуйтесь, чтобы добавлять комментарии

Как модифицировать текстуру Terrain в Unity3D c помощью скриптов?

Суть вопроса в следующем. Меня интересует как написать свой скрипт что бы по нажатии на Terrain менялась текстура выбранной области. Простая рисовалка я бы так сказал. Из той информации что я пересмотрел я понял что нужно использовать непосредственно TerrainData и splatPrototype. Но не могу сообразить как это все сложить в месте. Кто то сталкивался с такой задачей? Если будут примеры кода буду признателен.

  • Вопрос задан более трёх лет назад
  • 3838 просмотров

Комментировать
Решения вопроса 1

Самый простой правильный способ:
Тебе нужно брать из текстуры определенные пиксели(GetPixels), закрасить их нужный цвет, потом применить эти изменения на текстуре terrain-а(SetPixels, Flush). Какие пиксели брать можно определить через raycast. Недостатком данного способа являться, то что довольно сложно получить качественные, плавные изменения.

Качественный способ:
Кроме текстуры terrain-а нам нужна еще splat текстура и шейдер который будет с ней работать. Делаем вторую текстуру меньшего размера чем исходная и повторяем все так, как в первом способом, но с ней. Так как она меньшего размера при наложении она будет растянута и будет получаться плавный переход. Сам шейдер смотрит на вторую текстуру и где необходимо домешивает к текстуре terrain-а другую текстуру или цвет, это уже как захочется.

Теперь не правильный качественный и простой способ:
Берем кучу projector-оторов и размещаем их там где нужно на terrain-е.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *