Что такое меши в играх

Меши (Meshes)

Meshes составляют большую часть создаваемых вами трёхмерных миров. Unity не имеет встроенных инструментов для моделирования геометрии, разве что за исключением некоторых плагинов Asset store. Но несмотря на это, Unity поддерживает работу со многими пакетами трёхмерной графики. Unity также поддерживает работу с мешами, которые состоят как из трёхсторонних, так и из четырёхсторонних полигонов. Неоднородные рациональные безье-сплайны (Nurbs), неоднородные рационально сглаживаемые сетки (Nurms) а также высокополигональные поверхности должны быть конвертированы в полигоны.

3D форматы

Импортирование мешей в Unity может быть выполнено с помощью двух основных типов файлов:

Любой из этих типов позволит вам добавлять свои меши в Unity, но есть соображения относительно того типа, который вы выберите:

Экспортированные 3D файлы

Преимущества:

Недостатки:

Собственные файлы 3D приложений

Преимущества:

Недостатки:

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

Текстуры

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

Textures в или над уровнем с компонентами (ассетами)»> Разместите свои текстуры в папке Textures в или над уровнем с компонентами (ассетами)

Создание и присвоение материала

Для каждого импортированного материала, Unity применит следующие правила:-

Если генерация материала отменена (иначе говоря если галочка Import Materials не выставлена), тогда будет назначен материал по-умолчанию. Если же генерация была включена, тогда произойдёт следующее:

Коллайдеры (Colliders)

Анимации (Animations)

Анимации автоматически импортируются из сцены. Для более детального ознакомления с настройками импорта анимации посетите главу документации под названием подготовка компонентов и их импорт в системе анимации (Mecanim).

Карты нормалей и персонажи (Normal mapping and characters)

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

Формы смешивания (Blendshapes)

Есть два способа импорта форм смешивания с нормалями:

Советы (Hints)

Редактор Unity отображает гораздо больше вершин и треугольников (по сравнению с тем, что отображается в моём трёхмерном приложении).

Так и есть. На что вы действительно должны обратить внимание, так это на то, какое количество вершин/треугольников на самом деле было послано для просчёта на графический процессор (GPU). В отличие от случаев, где материал требует, чтобы эти данные посылались на GPU дважды, такие вещи как твёрдые-нормали (hard-normals) и несмежные UV развёртки(non-contiguous UVs) намеренно отображают гораздо большее количество вершин/треугольников, чем есть на самом деле. В контексте UV и 3D пространства треугольники должны располагаться смежно, чтобы сформировать собой границу, поэтому при уменьшении количества треугольников на UV-швах, которые и должны были образовать собой границу и возникает эффект мнимого увеличения их количества.

Источник

Unity: процедурное редактирование Mesh

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

Статья направлена на прокачку навыков процедурной обработки мешей в Unity. Мы расскажем об операциях преобразования и генерации частей меша.

Наш джентльменский набор для процедурного редактирования 3D-моделей включает три базовые операции: триангуляцию, движение точек, выдавливание. Подробно поговорим о последних двух. Сначала рассмотрим простейшие операции движения — перемещение вершин, поворот и масштабирование ребер и треугольников. Затем разберемся с одним из способов генерации новой геометрии — операцией выдавливания (Extrude).

В предыдущей публикации мы описывали свою структуру для удобной работы с данными 3D-моделей.

Как можно заметить, здесь используется PLINQ. Это обусловлено тем, что алгоритмы вычислительной геометрии часто можно оптимизировать за счет многопоточности.
Конечно, во время выполнения LINQ-конструкций мусора создается больше, чем при выполнении «ручного» кода. Однако этот недостаток в значительной степени компенсируется лаконичностью таких конструкций, а также наличием в PLINQ встроенных средств управления ресурсами. Кроме того, переход между однопоточной и многопоточной реализацией осуществляется с помощью всего лишь одной команды, что сильно облегчает процесс отладки.

Кручу, верчу, запутать хочу

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

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

Читайте также:  листья томатов становятся фиолетовыми в чем причина

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

В целом здесь нет веских причин усложнять код и применять матрицу трансформации. Результат добавления вектора движения к позиции вершины соответствует интуитивному представлению о ее перемещении.

Перемещение ребер и треугольников реализовано так же — добавлением вектора смещения.

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

Роем себе аккуратную ямку

В 3D-моделировании часто применяется операция выдавливания (Extrude). Для ее выполнения должен быть известен вектор движения (смещения) и набор полигонов. Процесс выдавливания можно декомпозировать на два действия:

1. Смещение полигонов на заданный вектор движения (offset). При этом необходимо дублировать разделяемые граничными полигонами вершины, чтобы не нарушать положение тех элементов, которые не относятся к смещаемой части. Иначе говоря, нужно оторвать и передвинуть выбранный кусок. Если этот шаг выполнить первым, то модель, вероятно, развалится на части, которые придется соединять в будущем.

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

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

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


Два выделенных на модели кластера в Blender

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

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

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

Так, треугольнику соответствует некоторый вектор нормали, определяющий лицевую сторону. Каждый треугольник ограничен выпуклым контуром, состоящим из трех ребер. У каждого ребра есть две вершины, в нашей структуре представленные как v0 и v1. Определим направление ребра так, что v0 — начало, v1 — конец. Теперь, если направление ребер треугольника задано в соответствии с обходом его вершин, то любой внешний контур кластера должен иметь обход либо по часовой стрелке, либо против, а любой внутренний — наоборот. Конструкторы CustomMesh и Triangle мы реализовали так, чтобы обход вершин всех треугольников соответствовал направлению хода часовой стрелки.

Имея направление обхода контура, можно точно сказать, с какой стороны от ребра находится внутренняя часть контура, а с какой — внешняя. Опираясь на эту информацию, мы будем выбирать ориентацию стенки. Пусть (v0, v1) — ребро, на основе которого нужно сгенерировать желаемый параллелограмм. Возьмем две точки v2 и v3 как позиции смещения v0 и v1. Затем построим два треугольника по следующей схеме:

И так для каждого ребра контура.

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


Подмножество полигонов, невалидное относительно смещения. Даже в Blender при таком Extrude не удастся избежать кривой геометрии


Валидные подмножества полигонов

Стенка готова, осталось сместить треугольники. Этот шаг алгоритма прост в понимании, хоть реализация и получилась громоздкой.

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

Читайте также:  какие цветы можно брать на похороны мужчине

Готово. Теперь, сложив результаты всех шагов, получаем ямку или горку.

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

И это еще не все

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

Например, дополнительно мы написали метод Combine() для объединения двух CustomMesh. Ключевое отличие нашей реализации от UnityEngine.Mesh.CombineMeshes() в том, что если при объединении мешей какие-то вершины оказываются полностью эквивалентными, мы оставляем только одну из них, таким образом избегая лишней геометрии.

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

Что же, с этим разобрались! В следующей статье рассмотрим особенности импорта .fbx в Unity и методы валидации моделей в проекте.

Источник

Что такое Mesh и как это работает

Содержание

Содержание

Mesh — что это такое и почему название часто появляется в рунете. Ответ прост: беспроводные сети научились проникать сквозь кирпичные стены и железобетонные перекрытия. Покажем, как это настроить, и сравним скорость интернета до и после.

Мы привыкли выбирать: быстрый проводной интернет или медленный Wi-Fi. Проводное соединение имеет один недостаток — привязка к месту. В остальном это быстро, стабильно и постоянно. Беспроводная сеть — штука капризная, поведение интернета может меняться от погодных условий и окружающей обстановки. Например, сигнал стремительно теряет мощность при прохождении через стены и перекрытия из бетона.

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

Что такое Mesh

Владельцы широких интернет-каналов знают, как редко удается получить полную скорость по тарифу, если вместо витой пары подключаться по Wi-Fi. Современные роутеры научились разгоняться до 5 ГГц, но от этого нюансы с качеством покрытия не отменяются. Поэтому теоретические 7 Гбит/с почти всегда ограничены 300-500 Мбит/с, и то принимающие устройства должны быть в непосредственной близости к передающим. О скоростных максимумах диапазона 2.4 ГГц лучше промолчать.

Словом, это классическая беспроводная сеть: витая пара подключается к роутеру, который поднимает соединение и передает его по воздуху. Чем дальше юзер отходит от передатчика, тем меньше оплаченных мегабит остается у него в ноутбуке. Чтобы это исправить, необходимо изменить строение сети. Например, сделать так, чтобы интернет был не только в комнате с роутером, но и на другом этаже или в дальней спальне. Для этого нужно установить несколько равнозначных устройств. Это не роутеры, соединенные мостом, а специальные маршрутизаторы с выделенным каналом для связи между собой. Для дома, как правило, хватает двух или трех таких девайсов: один работает как главный передатчик, остальные дублируют сигнал. Это и есть Mesh.

Как это выглядит

За сложной теорией и иностранными названиями стоит эргономичная и дружелюбная к домашнему юзеру система. Новое поколение роутеров Mesh легко узнать по футуристичному дизайну корпусов и тому, что на задней панели почти всегда отсутствуют привычные антенны-«рожки»:

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

Чем отличается от роутера

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

Создавая децентрализованную беспроводную сеть, где каждое устройство работает независимо, необходимо подключить дополнительный канал для связи между ними, чтобы, кроме пользовательских точек Wi-Fi, роутер имел в запасе невидимое соединение для связи со своими братьями-близнецами. В правильной реализации для этого устанавливают отдельный модуль с собственным усилителем и антенной. Производители называют это Backhaul — транспортная связь. То есть, канал, который доставляет какую-то сервисную информацию без вмешательства в дела клиентов.

Так выглядит антенный блок Mesh-системы Zyxel Multy X: красным обозначены антенны для Backhaul, желтым — основные для пользовательских диапазонов, голубым — Bluetooth. В основном, так устроены все Mesh-роутеры.

Читайте также:  молочная кукуруза это что

Выходит, что «меш» имеет две стороны — фронтенд и бэкенд, то есть бэкхол. У простого роутера она одна — только клиентская связь. Таковы аппаратные отличия роутеров из разных систем.

Чем Mesh лучше обычного роутера

«Железные» доработки в новых системах меняют и поведение роутеров в программном плане. Это также отличает их от предшественников в практическом использовании.

Беспроводные сети нового поколения позволяют очень гибко настроить домашнюю сеть в плане как покрытия, так дополнительных опций. Чтобы доказать, что Mesh по-настоящему решает распространенные проблемы с классической сетью Wi-Fi, попробуем настроить ее самостоятельно и проверим, что умеют хваленые технологии в суровых условиях — 2 этажа и 200 квадратных метров.

Настраиваем и тестируем

Кроме готовых комплектов, производители также предлагают отдельные роутеры, которые при необходимости можно подключить в режиме Mesh. Например, последние модели Keenetic, начиная с Keenetic Start, знают о дополнительной связи Backhaul и легко превращаются из обычных роутеров в меш:

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

Стартовый набор

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

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

Настройка

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

Теперь нужно подобрать логин и пароль. Если это первая настройка устройства, то логин и пароль будут указаны на задней части самого роутера или в инструкции по эксплуатации. В большинстве случаев это пара admin/admin или admin/1234. Вводим и попадаем в главное меню:

Интернет и Wi-Fi есть. Переходим в настройки беспроводной сети и открываем параметры системы Wi-Fi:

Перед нами настройки Mesh. В центре экрана черным по белому написано: возьмите второй роутер и переключите его в режим C, чтобы он работал как усилитель. Крутим в руках Keenetic Lite и видим интересную картинку:

Волшебники из Keenetic не обманули — находим рычажок и клацаем в нужном направлении:

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

Затаив дыхание, включаем второй роутер в сеть и чего-то ждем:

Снова не обманули, Lite подцепился к Giga. И даже попросил обновления. Пожалуйста, нам не жалко. Через пять минут проверяем подключение:

Все идет по плану. Убираем провода и устанавливаем репитер на законное место — подальше от основного. Пока не включаем. Для чистоты эксперимента проверим скорость соединения возле основного роутера:

Из проводных 500 Мбит/с по Wi-Fi 2.4 ГГц нам достается всего 100 Мбит/с. Будем отталкиваться от этих значений. Отходим подальше — туда, где будет работать репитер, и проверим, как там обстоят дела с интернетом:

Почти никак: сигнал на минимуме, скорость — тоже. Да еще и потеря пакетов появилась — 0,71%. Теперь подключаем импровизированный Mesh-репитер и снова проверяем скорость, не отходя от кассы:

Ого! Скорость приема почти 90 Мбит/с — всего на 10% меньше от изначального сигнала. И это через 22 см плиты-перекрытия и несколько кирпичных стен. Поразительно! Система работает отлично.

Стоит ли игра свеч

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

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

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

Источник

Информ портал о технике и не только