Как добавить текстуры в unity3d: Unity3d. Уроки от Unity 3D Student (B09-B12) / Хабр

Содержание

Как добавить текстуры в unity3d

.collapse»>Содержание

Unity3D – это очень популярный среди инди-разработчиков игровой движок. Он ценится за удобную в использовании платформу, реалистичную графику и возможность многоплатформенной публикации. Этот урок по Unity будет полезен новичкам в геймдизайне или тем, кто ищет простой способ создать 3D модель города.

Загрузка Unity

На сайте Unity этот продукт представлен в разных тарифных планах. Инди-разработчику для начала прекрасно подойдет бесплатная версия. Нажмите кнопку «Скачать сейчас» и загрузите версию для вашей ОС. Unity доступен для Mac OS и Windows, но обязательно убедитесь, что ваш компьютер соответствует системным требованиям.

Далее необходимо зарегистрироваться. Так вы сохраните историю загрузок из Unity Asset Store. Приложение запустится сразу после скачивания. В зависимости от ОС, установка может занять от двух до десяти минут. В процессе появится диалоговое окно, куда вам нужно будет ввести свои данные. Войдите в учетную запись, чтобы создать новый проект.

Выберите New Project и назовите его «My City». Никакие пакеты пока выбирать не нужно.

Внимательно выбирайте папку для ваших проектов, так как все файлы должны оставаться в одном месте. Для этого проекта оставьте директорию по умолчанию. Как только проект откроется, выберите File > New Scene и назовите сцену «MyFirstCity».

Интерфейс Unity

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

  • Вкладка Project содержит все файлы проекта: картинки, текстуры и префабы. С самого начала поддерживайте порядок в файлах, потому что по мере работы их количество будет стремительно расти, и рано или поздно вы рискуете запутаться.
  • Во вкладке Console отображается код или сообщения об ошибках.
  • В панели Hierarchy содержатся объекты текущей сцены. Любой проект начинается с элементов Light и Main Camera.
  • Вкладка Scene отображает текущую сцену с позиции основной камеры.
  • Вкладка Game отображает игру так, как ее увидит игрок.
  • Во вкладке Animator можно добавлять команды для контроллера анимации вашего персонажа.
  • Панель Inspector содержит такие настройки текущих объектов сцены, как цвет, текстура, скрипты и т. д.

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

  • Инструмент Hand позволяет свободно передвигаться по сцене.
  • Crossed Arrow используется для перемещения элементов сцены.
  • Rounded Arrows вращает элементы сцены.
  • Outward Arrows меняют размер элементов сцены.
  • Box позволяет увидеть сцену от первого лица.

На верхней панели также есть вкладки File, Edit, Assets, Game Objects, Component, Mobile Input, Window и Help. Со временем вы изучите все их подпункты и научитесь пользоваться ими.

Расположение элементов интерфейса

Впервые открыв Unity, вы увидите такое расположение элементов интерфейса, как на скриншоте выше. Чтобы изменить его, перейдите в Window > Layouts. Просмотрите каждый из предложенных вариантов, пока не найдете самый удобный для себя.

Вы можете также самостоятельно настроить расположение элементов, кликая левой кнопкой мыши по вкладкам и перетаскивая их, куда вам нужно. Я, например, работаю на двух мониторах, потому вкладка Game открыта у меня на одном, а Scene – на другом.

Загрузка ассетов

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

Перейдите в Window > Asset Store. Когда магазин откроется, вы увидите там множество объектов, текстур, персонажей и инструментов Unity. Конечно же, вы можете купить всё, что вам понравится, но в этом уроке я расскажу, как создавать текстуры самостоятельно, а также как пользоваться бесплатными ассетами. При первом открытии магазина вас могут попросить войти в вашу учетную запись.

Введите в строку поиска по магазину “Yughues Free Concrete Materials”. Вам откроется следующее окно:

Нажмите Download, дождитесь окончания загрузки и кликните Import. В зависимости от вашей ОС процесс может занять от двух до десяти минут. По завершении импорта новый ассет появится во вкладке Project.

Подобным образом загрузите и импортируйте из магазина

City Props Pack.

Нам также потребуется скайбокс – найдите и импортируйте Wispy Skybox.

Теперь пришло время добавить пакеты Unity. Выберите Assets > Import Package. Нам потребуются пакеты Characters, Cameras и Environment.

Поиск бесплатных ассетов

Чтобы найти текстуру дороги, я ввела “road textures” в поисковике Bing и перешла во вкладку «Изображения». Следует убедиться, что поиск выполняется по файлам с бесплатной лицензией.

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

Теперь аналогичным образом подыщем текстуры для зданий. Я использовала запрос “building textures”. Не забывайте поддерживать порядок в файлах и сохранять изображения в соответствующую папку Unity.

Примечание: работая в Unity над коммерческим проектом, позаботьтесь о лицензии ваших ассетов. Изображения, не требующие лицензионных отчислений, можно купить на Envato Market.

Создайте папку во вкладке Project и назовите ее Artwork. Перейдите в Asset > Import Asset и выберите изображение, затем переместите его в папку Artwork.

Примечание: при перемещении изображения сразу после сохранения проекта оно может не отобразиться или отобразиться без текстуры.

Как только все ассеты загрузятся, можно будет приступать к созданию города. Но перед этим сохранитесь: File > Save Scene.

Ландшафт

Выберите GameObject > 3D Object > Terrain, чтобы добавить в сцену ландшафт.

Примечание: При выбранном инструменте Hand можно приближать и отдалять камеру по отношению к объектам с помощью колесика мыши.

Результат должен выглядеть, как на картинке выше. Возможно, при первом открытии Unity 5 у вас появится пара сообщений о нарушении работы шейдера. Если ваш проект выглядит, как на скриншоте ниже, – не волнуйтесь, это легко исправить. Выберите

Terrain, затем кликните по значку шестеренки сразу под Inspector, пролистайте вниз до пункта Material и выберите опцию Built-In Legacy Diffuse. Это должно помочь.

Положение камеры

Когда вы выбираете объект в панели Hierarchy, информация о нем появляется в окне Inspector. Здесь вы можете настраивать объект, добавлять текстуры, коллайдеры и код.

Выставим правильное положение для камеры. Выберите Main Camera в Hierarchy. Теперь перейдите ко вкладке Inspector и в блоке Transform введите следующие значения для Position: 265, 20, 20.

Текстура для ландшафта

Выберите Terrain в Hierarchy и кликните по иконке кисточки в окне Inspector. Далее нажмите левой кнопкой мыши

Edit Textures под блоком Textures, а затем – Add a Texture. Откроется небольшое окно, в котором нужно будет выбрать текстуру. По завершении появятся текстуры, которые вы импортировали из Asset Store. Выберите двойным кликом ту, которая вам нравится. Я остановилась на Dark Concrete.

Скайбокс

Unity поставляется с довольно неплохим стандартным скайбоксом, но мне больше нравится тот, который мы загрузили ранее. Выберите Main Camera, затем перейдите в Inspector и нажмите Add Component внизу окна. Введите Skybox, нажмите на круглую иконку справа и выберите в появившемся окне нужный скайбокс. Теперь, открыв вкладку Game, вы увидите там добавленный скайбокс.

Формы зданий

Чтобы добавить форму для здания, выберите Game Object > 3D Object > Cube. Сначала вы не увидите этот куб, потому что он будет далеко. Переместите его на обозримую область, выбрав

Cube в окне Hierarchy и задав ему следующее расположение: 300, 25, 100. Выставьте его размер на 20, 50, 20. Размер можно менять как специальным инструментом на панели слева вверху, так и меняя значения в соответствующих полях. Добавив куб, кликните по нему правой кнопкой мыши в Hierarchy и переименуйте на Building 1.

Отлично, теперь добавим еще несколько зданий. Повторите действия выше. В окне Hierarchy появится еще один куб под названием Cube (1), переименуйте его на Building 2. Задайте ему размер 20, 70, 20 и положение 275, 25, 100.

Добавляя здания, меняйте их размер и положение. Убедитесь, чтобы они выстроены по одной линии, для этого среднее значение должно оставаться на 25. Как и размер, положение объектов можно менять не только методом ввода значений, но и инструментом перемещения. Повторяйте все действия, пока у вас не получится пять зданий, от Building 1 до Building 5. Я расположила здания через 25 единиц друг от друга: 250, 0, 100, 225, 0, 100 и т. д. Не забудьте сохранить сцену.

Примечание: вы также можете кликнуть правой кнопкой мыши по зданию в окне Hierarchy, чтобы скопировать и вставить его.

Текстуры зданий

Пора превратить эти неприглядные фигуры в здания. Кликните по папке Artwork во вкладке Project (куда вы загрузили текстуры зданий), выберите текстуру и перетащите ее в окно Scene. Вы увидите изменения в окнах Scene и Game. Меняйте настройки, двигайте и вращайте здания до тех пор, пока не получите нужный результат.

Примечание: если текстура стоит задом наперед, поверните ее по оси Z на 180⁰.

Дорога

Чтобы добавить дорогу, выберите Game Object > 3D Object > Plane

и задайте ей следующее положение: 250, 0.2, 80. Поверните ее по оси Y 90⁰ и измените размер на 1, 1, 15. Теперь выберите текстуру дороги и добавьте ее на созданную плоскость, переименовав последнюю в Road.

Строим улицу

Готовые проекты Unity содержат, как правило, тысячи объектов, скриптов и префабов, потому очень важно поддерживать порядок в файлах. Сейчас мы немного упорядочим содержимое окна Hierarchy.

Любой город обычно делится на кварталы и улицы, и наш не станет исключением. Выберите Game Object > Create Empty, и в Hierarchy появится новый элемент под названием GameObject. Переименуйте его в Block1(L), затем выделите все ваши здания и переместите под этот объект, сделав их дочерними по отношению к нему.

Далее займемся противоположной стороной улицы. Правый клик по Block1(L), копируем и вставляем его. Меняем его название на Block1® и задаем положение 235, -90, 300.

Теперь можете поменять текстуры у зданий на другой улице или при желании загрузить новые. Для изменения текстуры следует выбирать каждое здание по отдельности, иначе вы сразу поменяете текстуру для всех зданий в ряду. Измените положение камеры на 340, 10, 80 и поверните ее на -80⁰. Не забудьте сохраниться.

Примечание: если вам не нравится положение какого-либо элемента, поменяйте его на свое усмотрение.

City Props Pack

Начиная с этого шага я буду использовать инструменты панели переключения в верхнем левом углу.

Откройте вкладку Project и разверните папку City Props Pack. Пролистайте вниз до папки Prefabs, откройте ее и найдите элемент под названием Stop sign. Выберите его, и он появится в окне Inspector.

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

Добавим еще какие-нибудь детали. Выбирайте все элементы, какие вам нравятся, и располагайте их вдоль улицы. Любой объект можно скопировать и вставить несколько раз в окне Hierarchy. Чтобы не нарушать порядок в файлах, создайте пустой родительский элемент под названием City Props и переместите туда все соответствующие элементы. Сохраните сцену.

Примечание: Если объекты в сцене светятся белым, поменяйте настройки шейдера на Legacy Shaders / Bumped Diffuse.

Деревья

Unity поставляется со стандартным пакетом деревьев, но вы всегда можете загрузить дополнительные ассеты из магазина.

Кликните по Terrain в Hierarchy. Затем нажмите на иконку дерева в блоке Terrain окна Inspector. Под настройками выставьте значение Brush Size на 1 и после этого нажмите Edit Trees > Add Tree. В блоке Tree Prefab кликните по круглой иконке справа.

Выберите дерево (я остановилась на Broadleaf) и добавьте его двойным кликом. Теперь оно отобразится под блоком Trees в окне Inspector. Используйте мышь, чтобы расположить дерево в сцене. Синий индикатор рядом с курсором укажет место, куда оно будет добавлено. Так как значение Brush size у нас 1, вы будете добавлять по одному дереву за раз. Менять размер деревьев можно с помощью опции Tree Height. Если вас не устроит полученный результат, вы всегда можете нажать Edit Trees и удалить дерево.

Персонаж от третьего лица

Пришло время создать первого обитателя нашего виртуального города. Разверните папку Standard Assets во вкладке Project и нажмите Characters > ThirdPersonCharacter. Пролистайте до папки Prefabs и перетащите объект под названием ThirdPersonController в вашу сцену. Задайте контроллеру положение 315, 0.1, 78 и размер 3, 3, 3.

Его также можно развернуть в любом нужном вам направлении. Нажмите Play и попробуйте с помощью клавиатуры управлять действиями персонажа.

Нам нужно, чтобы камера следовала за персонажем, иначе он будет пропадать из поля зрения. Выберите элемент Main Camera в Hierarchy и перетащите его под ThirdPersonController так, чтобы камера стала дочерним элементом. Теперь, когда вы нажмете Play, камера будет следовать за персонажем.

Контроллер от первого лица

Можно также добавить возможность просмотра от первого лица. Для этого перейдите во вкладку Project и выберите Standard Assets > Prefab > FPS Controller. Перетащите контроллер в сцену, поверните его и настройте размер. Обратите внимание, что FPS Controller имеет собственную камеру, потому для его использования нужно будет удалить MainCamera.

Примечание: если ваш персонаж проваливается сквозь землю, скорее всего, вы расположили его слишком низко. Кликните дважды по персонажу в окне Hierarchy, и он отобразится в окне Scene. Поднимите контроллер выше вручную или впишите напротив Y значение 1.

Поздравляю! Вы только что создали свой первый трехмерный город Unity 5! Как видите, это легко и увлекательно. Вы можете проявить фантазию и добавить туда всё, что заходите: машины, магазины, дома и т. д.

Следите за обновлениями, вас ждет еще много уроков по Unity 5.

Вы можете добавлять текстуры на поверхность 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’а для разбавления монотонности большой, плоской области с такой же затайленой текстурой, повторяющейся снова и снова.

Травяная поверхность с нарисованной текстурой грязи в углах

Предыдущие уроки вы можете найти по следующим ссылкам:
Уроки B01-B03
Уроки B04-B08

Базовый Урок 09 — Добавление материалов

В уроке рассказывается, как добавлять текстуру к объекту используя материал.

Когда вы работает с игровыми объектами в Unity3d, вам потребуется также использовать материалы. Например, мы хотим добавим материал с текстурой к кубу.

Для начала сохраним нашу текстуру в папку Assets (в корневой папке проекта).

Добавим директорию Materials (мы помним, что всегда удобно поддерживать «иерархический порядок» в проекте) и назовем наш файл bulb texture (расширение *.png (в оригинальном уроке *.psd), см. примечание).

Переключимся назад в Unity3d, убедимся что в Project View появилась папка Materials c нашей текстурой.

Создадим куб. Добавить нашу текстуру к кубу, можно просто перетащив ее из Project View на куб (материал создастся автоматический). Но, возможно, вы захотите настроить его заранее, тогда выбираем Create->Material.

Назовем его bulb и положим в папку Materials.

Выберем buld и перенесем нашу текстуру из Project View на пустой серый квадрат в Inspector View (с надписью none(Texture 2D)), либо нажав на Select все в том же квадрате и выбрав ее из появившегося списка.

Взамен серого квадрата появится иконка с текстурой.
Перетяним наш материал на куб. Куб сразу станет текстурированным.

При выборе материала в Inspector View вы так же можете выбрать шейдер, по которому будет расчитываться его конечный вид

PS: О шейдерах мы обязательно поговорим отдельно, но много позже.

Так же у материала можно настраивать tiling (мозаичное размещение текстуры). Чем больше значения tiling по x-ой или y-ой координате, тем больше раз она повторяется по соответствующей стороне. Чтобы понять как это работает — поставте значения по x и y равным 10 (при изменении значения текстура на кубе будет обновляться в реалтайме).

Параметр offset (смещение) отвечает за сдвиг текстуры «по кругу». Чтобы лучше понять как он работает, поэкспериментируйте c ним.

Базовый Урок 10 — Основы работы с аудио

В уроке рассказывается, как проигрывать компонент Audio Source (аудио ресурс) и вызывать звуковые клипы с помощью скриптинга.

Для работы со звуком в Unity3d вам потребуются два компонента:

  • AudioListener (аудио приемник)
  • AudioSource (аудио ресурс)

Обычно AudioListener является компонентом у камеры. Выберем камеру и убедимся в этом, посмотрев в Inspector View.

Для того чтобы слушать звуки вы должны иметь хотя бы один AudioListener в каждой сцене.

Добавим пустой GameObject и добавим к нему компонент Audio Source.

Добавить аудио-клип можно либо через Inspector View, либо с помощью скрипта.

В нашем проекте есть два аудио-файла — моно и стерео.

Моно обычно используется для звуковых эффектов. Только для него можно использовать затухание или другие 3d-эффекты.
Стерео, соответственно, для музыки, т.к. стереозвук прогирывается как есть.

В окне Preview можно проиграть выбранный файл.

Добавим наш клип (GreenadeLaunch) в поле Audio Clip. Если включен параметр Play On Awake, то звук будет проигрываться сразу после запуска сцены.

Если же мы хотим, чтоб аудио-клип прозвучал в нужный нам момент, нужно написать скрипт. Оставим поле Audio Clip у Audio Source пустым и добавим c#-скрипт, назвав его PlaySounds. Добавим в скрипт следующий код:

Добавим скрипт к пустому GameObject, а значение переменной myClip у скрипта проиницилизируем звуковым файлом (GreenadeLaunch). Теперь нажав на play вы снова усшылите звук.

Проигрывать аудио можно и без использования Audio Source. Удалим компонент Audio Source c нашего GameObject, а код в теле метода Start() заменим следующим:

Тут, PlayClipAtPoint — статическая функция класса AudioSource, которая создает новый GameObject, с соответствующим Audio Source (в нашем случае это myClip) и после проигрывания аудио-клипа удаляет данный GameObject.

Сохраните скрипт и убедитесь что он есть у нашего GameObject, а значение myClip равно GreenadeLaunch.

Жмем Play и сразу после загрузки сцены жмем на Pause чтобы убедиться что на сцене появился новый игровой объект с именем One Shot Audio.

Базовый Урок 11 — Основы соединений

В уроке рассказывается, как использовать Fixed joint (неподвижное соединение) и Hinge joint (шарнирное соединение) для создания цепи у «шара для разрушения зданий»

Для создания интересной физики в Unity3d воспользуемся «соединениями» (joints). И для илюстрации этого создадим модель шара для разрушения зданий.

Исходная сцена содержит плоскрость (Floor), камеру (Main Camera) и точечный источник света (Point light).
Для начала создадим cферу, добавим к ней компонент Rigidbody и назовем ее Ball.
Добавим на сцену цилиндр, так же добавив к нему Rigidbody. Размер и положения цилиндра и сферы указанны на рисунке ниже. Для цилиндра scale равно 0.15, 0.25 и 0.15, для x, y и z соответственно, цилиндр свинут «вверх» к «краю» шара (грани при этом пересекаются).

Чтобы связать сферу и цилиндр — выбирете сферу (Ball) и добавьте к ней компонент Fixed Joint. Переменную Connected Body проинициализируем значением Cylinder.rigidbody. Напомню, что для этого достаточно перетащить Cylinder из Hierarchy view в Inspector View, на поле напротив Connected Body.

Переименуем Cylinder на более подходящее названия для крепежа шара, например, Ballstem. Значение переменной Connected Body поменяется автоматический.

Нажмите play и увидите как шар падает вместе с прикрепленным к нему цилиндром.

Теперь начнем создавать подвижные участки цепи.
Создадим капсулу (назовем ее Chain1), при этом размеры ее будут аналогичны размерам Ballstem’а, а находится она будет чуть выше него, чтоб крайние грани объектов пересекались. Chain1 так же будет с компонентом rigidbody.

А к Ballstem’у добавим компонент Hinge Joint, у которого
Connected Body мы инициализируем Chain1.rigidbody.
Место закрепление обозначенно ораньжевой стрелкой.

Нам потребуется еще один участок цепи. Выберем Chain1 и сделаем его дубликат (ctrl+D или cmd + D). Переименуем его в Chain2, так же сдвинув его к верхушке Chain1. К Сhain1 добавим Hinge Joint, с
Connected Body равным Chain2.rigidbody.

Аналогично добавим Chain3.

В конце, мы добавим HingeJoint к Chain3, при этом мы не будем задавать значение Connected Body. В этом случае объект будет прикрепленн «сам к себе» (точнее сказать к пустому месту в сцене).

Выделем Ball, Ballstem, Chain1, Chain2, Chain3 и наклоним их.

Жмем play и смотрим как перемещаются наш шар с цепью.

Базовый Урок 12 — Ввод с использованием виртуальных осей

В уроке рассказывается, как использовать стрелки (arrow keys), для перемещения влево и вправо, с помощью «осей» (axes)

На это раз на сцене у нас есть плоскость (floor), камера (Main Camera), источник света (Point light) и пустой gameObject.

Еще один вариант ввода — использование «осей» (Axes).
Откроем Input Manager (Edit->Project settings->Input). Разверните Axis и затем Horizontal.

Посмотрим на некоторые дефолтные параметры:

Параметр Значение Комментарий
Negative Button left Клавиша для перемещения в отрицательном направлении
Positive Button right Клавиша для перемещения в положительном направлении
Alt Negative Button a Альтернативная клавиша для перемещения в отрицательном направлении
Alt Possitive Button d Альтернативная клавиша для перемещения в положительном направлении
Type Key or Mouse Button Тип ввода, для перемещения вдоль данной оси (в нашем случае X)
Axis X axis Ось объекта, вдоль которой мы будем перемещаться

Для того, чтобы использовать данное перемещение (Horizontal), нам потребуется метод GetAxis() класса Input.

Добавим C#-скрипт, назовем его GetAxis.cs и напишем:

Добавим скрипт к пустому gameObject’у, и нажмем play. Если зажать стрелку влево/вправо (или же a/d), в status bar’е вы увидите как меняется значение переменной horiz:

Значение этой переменной может меняться от -1 до 1 (в зависимости от зажатой клавиши). Как только вы отпустите клавишу, horiz станет снова равен 0.

Добавим еще строчку кода в Update(), сразу за Debug.Log():

Запустим сцену и нажмем на стрелку — вы увидите, как наш gameObject начнет перемещаться вдоль оси X.

Материалы и текстуры — База знаний

Мы сделали небольшой прототип уровня и нам он кажется скучным и серым. Поэтому хотим научить тебя работать с материалами и текстурами, чтобы добавить в уровень красок🎨

Прототип. Присылай администратору сайта скриншоты своих прототипов и мы опубликуем лучшие в сообществе Юниум.

Материал

По умолчанию все объекты имеют серый цвет. Можно изменить цвет любого объекта с помощью материала.

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

Используй пункт главного меню Assets → Create → Material или контекстное меню окна Проект, для создания нового материала. После создания, ты можешь применить его к объекту и настроить все его свойства в Инспекторе. Для применения материала к объекту, просто перетащи его из окна Проект на любой объект в Сцене или Иерархии. Чтобы изменить материал у всех объектов одного prefab’а, необходимо изменить материал у сохраненного prefab’а в окне Проект. Попробуем сделать материалы для моста. Нам понадобятся два цвета: коричневый и темно-коричневый (для столбов). Создадим два материала для этого.

Новые материалы

Выбери один из них и в Инспекторе измени цвет (в самом верху, рядом со словом Albedo). Повтори тоже самое с другим материалом.

Свойства материала в Инспекторе

Теперь необходимо заменить материалы в prefab’е моста. Разверни prefab в окне Проект, нажав на стрелочку:

Так можно развернуть prefab

Выбери несколько объектов, которые должны быть одного цвета. А теперь посмотри на окно Инспектор и найди там компонент Mesh Renderer. Именно он отвечает за то, какого наш объект будет цвета и как он будет отражать свет. Найди свойство Material и разверни его нажав на стрелочку. Ты увидишь число, которому соответствует количество материалов необходимых для этой 3D модели (Size) и, собственно, сами материалы. В нашем случае один материал — Default-Material. Его и нужно заменить, нажав на соседний кружочек.

Замена материала

Теперь ты можешь добавить материалы к остальным элементам prefab’а. Обрати внимание, что изменяя prefab в окне Проект, ты меняешь сразу все его копии на Сцене. Это ли не чудо?

Вот, что получилось у нас:

Прототип в цвете

Материалы не только отвечают за свет, как мы уже говорили, но и за другие свойства, например:

  1. Albed — цвет и текстура.
  2. Metallic — определяет металлическая (значение 1) ли поверхность или нет (значение 0).
  3. Smoothness — определяет насколько поверхность глянцевая (значение 1) или шероховатая (значение 0).

Текстура

Текстура

Использование текстур позволяет воспроизвести малые объекты поверхности, создание которых полигонами оказалось бы чрезмерно ресурсоемким. Например: шрамы на коже, складки на одежде, мелкие камни и предметы на поверхности стен и почвы.

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

Unity поддерживает все самые популярные форматы изображений: jpeg, png, tiff, tga, psd. Текстура должна быть квадратной и иметь следующие размеры: 32х32, 64х64, 128х128, 256х256, 512х512, 1024х1024, 2048х2048, 4096х4096, 8192х8192. Если не следовать этим правилам — Unity попытается сам преобразовать изображение в нужный размер.

Текстура — это параметр материала. А материал может содержать в себе несколько текстур. Например, одна текстура отвечает за отображение цвета, вторая — за рельеф поверхности.

Импорт текстуры

  1. Создай папку в окне Проект, где будут храниться все текстуры. Предлагаем назвать папку Texture.
  2. Нажми на эту папку правой кнопкой мыши и выбери «Import New Asset…». Выбери картинку.
  3. Выбери нужный материал. В окне Инспектор нажми кружочек рядом с параметром Albedo и выбери текстуру.
Мост с текстурой

Для простых объектов (куб, сфера, плоскость) можно изменить количество повторений текстуры на объекте. По умолчанию, текстура не повторяется. Выбери материал, в окне Инспектор параметр Tiling отвечает за повторение текстуры по осям x, y.

Изменение Tiling по оси Y

Normal Map

Normal map

Normal map — это техника симуляции неровностей на плоской поверхности без больших вычислительных затрат и изменения геометрии.

Есть простой сервис, где из картинки можно настроить и скачать себе Normal map.

Импорт Normal map

  1. Создай папку в окне Проект, где будут храниться все текстуры. Предлагаем назвать папку Normal map.
  2. Нажми на эту папку правой кнопкой мыши и выбери «Import New Asset…». Выбери картинку.
  3. Выдели в окне проекта, добавленную картинку. В свойстве Texture Type выбери Normal Map.
  4. Чтобы добавить материалу неровность, выбери его, в окне Инспектор нажми кружочек рядом с параметром Normal map и выбери нужную.
Мост с Normal Map

Импорт 3D-моделей в Unity и подводные камни / Блог компании Plarium / Хабр

Представляем третью статью нашего цикла о работе с 3D-моделями в Unity. Предшествующие статьи: «Особенности работы с Mesh в Unity» и «Unity: процедурное редактирование Mesh».

В мире компьютерной графики существует множество форматов представления 3D-моделей. Некоторые из них позиционируются как универсальные, другие — как оптимизированные под конкретные задачи или платформы. В любой сфере мечтают работать с универсальным форматом, но реальность говорит нам «нет». Более того, из-за такого зоопарка получается порочный круг: разработчики «универсальных» инструментов придумывают свои внутренние форматы для обобщения предыдущих, увеличивая популяцию и плодя средства преобразования форматов. Так появляется проблема потери или искажения данных при конвертации. Проблема стара как мир (мир IT, конечно), и она не обошла стороной импорт моделей в Unity.

В этой статье мы расскажем о некоторых трудностях, с которыми приходится сталкиваться при работе с моделями в Unity (особенности функционирования ModelImporter, разница представлений 3D-объектов и др.), а также о том, какие инструменты мы создали, чтобы эти трудности преодолеть.

Особенности работы ModelImporter


Напомним, что для API видеокарт минимальный и единственный трехмерный примитив — это треугольник, в то время как геометрия в FBX, например, может быть представлена в виде четырехугольников. Современные 3D-пакеты для создания моделей, как правило, допускают различные уровни абстракции, но и там рендер результата происходит посредством треугольников.

При этом многие инструменты заточены на работу именно с четырехугольниками, что подталкивает 3D-художников использовать этот примитив как основной. В таких случаях в ТЗ часто требуется триангулировать модель перед внедрением. Если триангуляцию не сделали, соответствующий модуль Unity в стандартном режиме выполняет ее автоматически при добавлении файла. Из-за этого появляются ошибки, поскольку алгоритмы триангуляции в разных пакетах реализованы по-разному. При выборе диагонали для разбиения четырехугольника возникает неоднозначность, отсюда большинство проблем, которые можно разделить на две группы.

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


Сюзанна, триангулированная в Blender (Quad Method: Beauty) и в Unity (автоматически при импорте)

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


Самокат здорового человека и самокат курильщика

Проблемы второй группы встречаются в текстурной развертке. Например, у нас есть четырехугольник с достаточно тупым для возникновения ошибки углом. При предварительном просмотре в 3D-пакете он разбивается одной из диагоналей на два вполне себе складных треугольника.


Исходный полигон


Полигон, триангулированный в Blender

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


Полигон в Unity с треугольником, близким к вырожденному (правый треугольник практически неотличим от отрезка)

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

Я 3D-пакет, я так вижу


В 3D-моделировании часто возникает разница между фактическим количеством вершин и их количеством в 3D-пакете. Суть проблемы заключается в информации, которая требуется для обработки видеокартой. Структура данных для вершины предопределена и включает в себя позицию, нормаль, касательную, координаты текстурной развертки на каждый канал и цвет. То есть в одну вершину две нормали не запихнуть.

Для некоторых художников же не всегда очевидно, что вершина определяется не только своей позицией. Моделлеры прекрасно знают понятия Hard/Soft Edges и UV Seams, но не все осознают, каким образом они реализованы программно. Дополнительно сбивают с толку 3D-пакеты, которые в стандартном режиме показывают количество вершин как количество уникальных позиций.

Так, обычный примитив Cube геометрически представим 8 вершинами. Однако чтобы корректно передать отражение света от каждой грани и правильно наложить текстуру, в каждом углу куба необходимо по 3 вершины с одинаковой позицией, но разными нормалями и текстурными координатами, поскольку в каждом из углов сходится по 3 ребра. Этому моменту посвятили небольшой блок документации. Там же можно посмотреть примеры.


Метрики куба в Blender


Метрики куба в Unity

Хватит это терпеть!


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

Для анализа и проверки мы разработали следующий функционал:

  • подсчет количества уникальных позиций вершин, раскрашенных вершин, Hard Edges, UV Seams;
  • расчет Axis-Aligned Bounding Box (AABB) и его центра;
  • определение выхода значений координат UV-развертки за диапазон 0.0–1.0;
  • определение наложений в текстурной развертке;
  • проверка текстурной развертки на достаточность заданного пиксельного отступа при заданном разрешении текстуры.

Что это нам дает?

Подсчеты количества уникальных позиций вершин, Hard Edges, UV Seams и раскрашенных вершин — необходимы для проверки соответствия задуманной художником модели той, что была импортирована в Unity. Этот функционал также позволяет следить за соблюдением требований к оптимизации модели (например, чтобы количество вершин не превышало определенное значение). Из-за все той же особенности 3D-пакетов, которые показывают по факту количество уникальных позиций, бывают случаи, когда метрика числа вершин в редакторе моделей удовлетворяет этому ограничению, однако после внесения файла в проект может оказаться, что это не так.

Вычисление AABB и его центра — позволяет определить смещение модели относительно начала ее собственной системы координат. Это необходимо для предсказуемого позиционирования ассетов, которые инициализируются в сцене уже во время работы приложения. Так, AABB здания по-хорошему должен иметь minY = 0, а какой-нибудь люстры, которая крепится к потолку — maxY = 0.

Выход координат вершин UV-развертки за диапазон 0.0–1.0 — в большинстве случаев (например, если текстура должна тайлиться на модели) предусмотрен. Часто такой подход используется для представления в сцене множества низкодетализированных мелких объектов (растительности) и/или находящихся вдалеке, а также замощения больших однородных объектов (зданий). В случае тайлинга значениям координат конкретного UV-канала просто обрезают целую часть на уровне шейдера, если Wrap Mode текстуры установлен в Repeat.

Представьте теперь, что вы уложили текстуру в атлас (и накрыли одеялком :3). В шейдер будут приходить уже преобразованные координаты, соответствующие атласу (x * масштаб + смещение). Никакой целой части на этот раз вероятнее всего уже не будет и обрезать будет нечего, а модель залезет на чужую текстуру (одеялко оказалось маленьким). Эта проблема решается двумя способами.

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

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

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

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

Пример. Мы работали с набором моделей для динамических объектов в игре. Поскольку не было задачи запечь для них свет, в UV-развертке допускались наложения.


Пример базовой UV-развертки с наложениями (показаны красным)

Однако затем мы решили не использовать эти модели как динамические, а расставлять их в качестве статичного декора на уровне. Для оптимизации, как известно, освещение статических объектов в сцене запекают в специальный атлас. Отдельного UV2-канала для карты освещения у этих моделей не было, а качество работы автоматического генератора в Unity нас не устраивало, поэтому мы решили как можно чаще использовать базовую текстурную развертку для запекания.

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


Некорректно запеченное освещение модели (слева) и исправленное (справа)

Unity при формировании карты освещения в первую очередь пытается использовать UV2-канал. Если он пустой, то используется основной UV, если и этот пуст, то извините, нате вам исключение. Запечь модели в карту освещения без предварительно подготовленного UV2 в Unity можно двумя способами.

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

Второй способ — использовать базовую UV-развертку для запекания. Очень даже привлекательный вариант, поскольку при работе с одной текстурной разверткой меньше вероятность совершить ошибку, чем при работе с двумя. По этой причине мы стараемся минимизировать количество моделей, в базовой UV которых присутствуют наложения. Созданный инструментарий помогает нам это осуществлять.

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

Подведем итог. Конечно, практически невозможно отследить все нюансы: иногда приходится мириться с несовершенством результата, чтобы выполнить задачу в срок. Однако выявление даже части таких недочетов позволяет ускорить разработку проекта и повысить его качество.

Работа с компрессией текстур в Unity3D + NGUI / Хабр

Привет Хабровчане!

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

Хотелось бы поделиться разработкой, которую мы успешно внедрили у себя в Heyworks и используем на проекте Pocket Troops (Неудержимые). Проблема, с которой сталкивались и сталкиваются все разработчики, при чем не только работающие с NGUI и Unity3d, но и с другими движками и пакетами, это поиск золотой середины между качеством и весом игровых интерфейсов (впрочем, это не только интерфейсов касается). В этой статье я постараюсь помочь убить двух зайцев одной пулей.

В первую очередь, очень большое спасибо хочу сказать товарищу Leopotam за идею, которую он подал нам в обсуждении к статье, так что это он во всем виноват. Идею мы развили, написали замену NGUIшным шейдерам, а так же кое-какие утилиты, упрощающие жизнь. Я не стану приводить замеры, сколько байт мы выйграли в размере билда, сколько наносекунд потеряли, используя более сложные шейдеры, лишь скажу, что вся проделанная работа того стоила — выйгрыш в качестве арта виден невооруженным глазом. Также отмечу, что несмотря на то что статья привязана к NGUI, описанный здесь подход с успехом можно использовать с любыми, не только UI, текстурами. Нужно будет лишь написать соответствующие шейдеры. Но я тороплю события, ведь начать хотелось с другого.

Атласов у нас в проекте немало. Это я к тому, что выбор между визуальным качеством и размером в билде стоял для нас достаточно остро, особенно на грани 100мб для iOS 🙂

Вот, к примеру, главный атлас, содержащий все иконки скиллов и общую графику

Так же есть атлас магазина, с иконками магазина, и два атласа улучшений, с иконками улучшений. Итого 4 атласа 2048х2048. И это не предел, как порадовал нас недавно арт-отдел…

В чем сомнений точно не может быть — атласы надо жать. И здесь всплывает первая проблема — PVRTC уверенно поддерживает только iOS, некоторые андроиды его держат, но некоторые — нет, так что будьте готовы к вылетам по памяти, если вдруг какое-то из устройств не поймет PVRTC и станет работать с несжатой текстурой. Собственно, первое время нам приходилось мириться с таким положением дел. Кроме проблем с поддержкой сжатия, PVRTC дает визуальные артефакты на градиентах и переходах в прозрачность. Хотя, для этого у нас был небольшой хак. Берем текстуру, открываем в фотошопе, накладываем сверху новый слой, залитый серым цветом, на него накладываем шум (Add Noise 12.5%), выставляем способ наложения — soft light, едва заметная прозрачность слоя (обычно 20-40%), и применяем маска по альфе текстуры, чтобы шум не применялся на прозрачных участках. (Подробнее и с картинками можно почитать в статье другого работника Heyworks) Но это на 100% не избавляло от шумов, особенно артефакты виднелись на переходе в прозрачность. Приходилось особо «шумные» спрайты выделять в несжатые атласы. Короче, крутились как могли.

Так мы и пришли, а точнее — резко прыгнули, к тому что имеем сейчас. И об этом по-подробнее.

Суть метода, предложенного Leopotam, заключается в том, чтобы выделить альфа канал из текстуры атласа, и применять сжатие уже к RGB текстуре. Это, в первую очередь избавляет нас от шумов, а так же позволяет нам на андроидах использовать ETC сжатие, которое было недоступно для текстур с альфа каналом.

Но что же делать с альфой? Напрашивается первый вариант — использование Alpha8 текстуры (правда ходят слухи что не все iOS устройства адекватно с ней работают, но вроде как это было давно и неправда). Второй вариант — если у нас от 1 до 4 атласов в проекте, мы можем использовать отдельную текстуру, из r, g, b, a каналов которой будет браться информация о прозрачности спрайтов каждого отдельного атласа (если атласов меньше трех — текстура эта будет RGB).

Расположив альфа-каналы наших четырех атласов в одной текстуре, получаем вот такой психодел.

Однако, замерив суммарный размер получившихся текстур, мы заметим, что немного проигрываем. Не страшно, ведь заметное улучшение качества греет душу. Но на этом мы не останавливаемся. Во-первых, берем текстуру с альфа каналами и делаем ее 16-битной. Этой разрядности вполне хватает для передачи нужной информации, и визуально разницы никто не заметит. Во вторых, экспериментально выяснено, и подтверждено арт-отделом, что если альфа-текстуру использовать размером в два раза меньшим, чем соответствущий ей атлас (то-есть 1к для 2к атласа) — разницы на глаз не заметно, а вот выигрыш в объеме — в 4 раза!

Резонный вопрос — а что делать, если атласов — пять и больше? Есть и для этого ресурсы. Ведь альфа-текстуру мы уменьшили в 4 раза, а значит сможем квадратами разложить всего 4х4=16 атласов! Конечно, проделывать такой титанический труд вручную каждый раз, когда хочется изменить один из атласов — дело неблагодарное. Для этого был написал скрипт, который собирает альфа каналы из атласов, раскладывает в альфа текстуре, и настраивает материалы — маску выбора альфа-канала и смещение текстурных координат для каждого отдельного материала. Но есть одна тонкость, связанная с тем, как NGUI работает с атласами. Ведь когда меняется атлас, к примеру добавляется в него новый спрайт, NGUI при перетасовке спрайтов работает не с исходными текстурами, а с их копиями, запеченными в атласе. Но ведь атласы у нас помечены как RGB, а значит если NGUI прочитает спрайты в из атласа, то мы потеряем всю информацию о прозрачности. Тут приходится либо впиливаться в NGUI, чего очень не хотелось бы, либо поступать так, как сделали мы. А сделали мы два метода. Первый, вызывается перед тем, как что-то поменять в атласе. Он помечает все атласы в своем списке как RGBA, дабы NGUI адекватно отработал. Второй метод, «достает» альфа каналы из атласов, раскладывает их в отдельную текстуру, настраивает и ее, и материалы атласов нужным образом, и возвращает атласы снова в RGB.

Да, немного насчет материалов, а точнее шейдеров. Мы взяли NGUIшный шейдер, и немного переписали его, чтобы альфу он читал не из альфа-канала текстуры атласа, а из выбранного с помощью маски определенного канала альфа-текстуры.

Здесь нас постигла еще одна тонкость работы с NGUI. Дело в том, что для отрисовки, казалось бы, одного и того же UI, используются несколько модификаций одного шейдера. Когда вы используете ClippingPanel — способ обрезания UI внутри нее как раз и задает модификацию шейдера, которая будет подставлена. А это SoftClip или AlphaClip (модификации шейдера именуются соответственно), а следовательно эти шейдера также надо подправить. Этот момент мы в первых экспериментах не учли и получили неработающие скроллируемые списки. Кроме того, в более новой версии NGUI вообще по-другому все работает, шейдера нумеруются по принципу, в который я не вникал пока.

Итак, для чего это все?

— Теперь наш UI выглядит как будто его не жали PVRTC и ETC компрессией, максимально устранены артефакты сжатия
— Размер билда существенно снизился даже по сравнению с версией со сжатыми атласами, молчу что было бы, если бы мы их не жали
— Чуть усложнился процесс работы с атласами, но я верю, что наступит день и мы придем к полной автоматике
— Уверен, что лишние операции в шейдере добавили циклов расчета видеокарте, но разницы пока никто не увидел

По ссылке прошу любить и жаловать:

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

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

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

Спасибо!

c # — в Unity 3D, как добавить текстуру к 3D-объекту (.fbx)?

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
.

unity3d — Как добавить текстуру из android в unity?

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
.

unity3d — Как установить изображение на текстуру в Unity 3d

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
.

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

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