Компьютерная графика, как известно, является основой игровой индустрии. В процессе создания графического контента мы неизбежно сталкиваемся с трудностями, связанными с разницей его представления в среде создания и в приложении. К этим трудностям прибавляются риски простой человеческой невнимательности. Учитывая масштабы разработки игр, такие проблемы возникают либо часто, либо в больших количествах.
Борьба с подобными трудностями навела нас на мысли об автоматизации и написании статей на эту тему. Большая часть материала коснется работы с Unity 3D, поскольку это основное средство разработки в Plarium Krasnodar. Здесь и далее в качестве графического контента будут рассматриваться 3D-модели и текстуры.
В этой статье мы поговорим об особенностях доступа к данным представления 3D-объектов в Unity. Материал будет полезен в первую очередь новичкам, а также тем разработчикам, которые нечасто взаимодействуют с внутренним представлением таких моделей.
Skyrim 5 Лучших Эффектов в Скайрим!
О 3D-моделях в Unity — для самых маленьких
При стандартном подходе в Unity для рендеринга модели используются компоненты MeshFilter и MeshRenderer. MeshFilter ссылается на Mesh — ассет, который представляет модель. Для большинства шейдеров информация о геометрии является обязательной минимальной составляющей для отрисовки модели на экране. Данные же о текстурной развертке и костях анимации могут отсутствовать, если они не задействованы. Каким образом этот класс реализован внутри и как все там хранится, является тайной за энную сумму денег семью печатями.
Снаружи меш как объект предоставляет доступ к следующим наборам данных:
- vertices — набор позиций вершин геометрии в трехмерном пространстве с собственным началом координат;
- normals, tangents — наборы векторов-нормалей и касательных к вершинам, которые обычно используются для расчета освещения;
- uv, uv2, uv3, uv4, uv5, uv6, uv7, uv8 — наборы координат для текстурной развертки;
- colors, colors32 — наборы значений цвета вершин, хрестоматийным примером использования которых является смешивание текстур по маске;
- bindposes — наборы матриц для позиционирования вершин относительно костей;
- boneWeights — коэффициенты влияния костей на вершины;
- triangles — набор индексов вершин, обрабатываемых по 3 за раз; каждая такая тройка представляет полигон (в данном случае треугольник) модели.
Ядро движка (UnityEngine (native)) изолировано от скриптов разработчика, и обращение к его функционалу реализовано через библиотеку UnityEngine (C#). Фактически она является адаптером, поскольку большинство методов служат прослойкой для получения данных от ядра. При этом ядро и вся остальная часть, в том числе ваши скрипты, крутятся под разными процессами и скриптовая часть знает только список команд. Таким образом, прямой доступ к используемой ядром памяти из скрипта отсутствует.
Skyrim мод графика 2018!!! Карта, погода и текстуры для Скайрима!
О доступе к внутренним данным, или Насколько все может быть плохо
Для демонстрации того, насколько все может быть плохо, проанализируем объем очищаемой памяти Garbage Collector’ом на примере из документации. Для простоты профилирования завернем аналогичный код в Update метод.
public class MemoryTest : MonoBehaviour < public Mesh Mesh; private void Update() < for (int i = 0; i < Mesh.vertexCount; i++) < float x = Mesh.vertices[i].x; float y = Mesh.vertices[i].y; float z = Mesh.vertices[i].z; DoSomething(x, y, z); >> private void DoSomething(float x, float y, float z) < //nothing to do >>
Мы прогнали данный скрипт со стандартным примитивом — сферой (515 вершин). При помощи инструмента Profiler, во вкладке Memory можно посмотреть, сколько памяти было помечено для очистки сборщиком мусора в каждом из кадров. На нашей рабочей машине это значение составило ~9.2 Мб.
Это довольно много даже для нагруженного приложения, а мы здесь запустили сцену с одним объектом, на который навешен простейший скрипт.
Важно упомянуть об особенности компилятора .Net и об оптимизации кода. Пройдясь по цепочке вызовов, можно обнаружить, что обращение к Mesh.vertices влечет за собой вызов extern метода движка. Это не позволяет компилятору оптимизировать код внутри нашего Update() метода, несмотря на то, что DoSomething() пустой и переменные x, y, z по этой причине являются неиспользуемыми.
Теперь закешируем массив позиций на старте.
public class MemoryTest : MonoBehaviour < public Mesh Mesh; private Vector3[] _vertices; private void Start() < _vertices = Mesh.vertices; >private void Update() < for (int i = 0; i < _vertices.Length; i++) < float x = _vertices[i].x; float y = _vertices[i].y; float z = _vertices[i].z; DoSomething(x, y, z); >> private void DoSomething(float x, float y, float z) < //nothing to do >>
В среднем 6 Кб. Другое дело!
Такая особенность стала одной из причин, по которой нам пришлось реализовать собственную структуру для хранения и обработки данных меша.
Как это делаем мы
За время работы над крупными проектами возникла идея сделать инструмент для анализа и редактирования импортируемого графического контента. О самих методах анализа и трансформации поговорим в следующих статьях. Сейчас же рассмотрим структуру данных, которую мы решили написать для удобства реализации алгоритмов с учетом особенностей доступа к информации о меше.
Изначально эта структура выглядела так:
Здесь класс CustomMesh представляет, собственно, меш. Отдельно в виде Utility мы реализовали конвертацию из UntiyEngine.Mesh и обратно. Меш определяется своим массивом треугольников. Каждый треугольник содержит ровно три ребра, которые в свою очередь определены двумя вершинами. Мы решили добавить в вершины только ту информацию, которая нам необходима для анализа, а именно: позицию, нормаль, два канала текстурной развертки (uv0 для основной текстуры, uv2 для освещения) и цвет.
Спустя некоторое время возникла необходимость обращения вверх по иерархии. Например, чтобы узнать у треугольника, какому мешу он принадлежит. Помимо этого, обращение вниз из CustomMesh в Vertex выглядело вычурно, а необоснованный и значительный объем дублированных значений действовал на нервы. По этим причинам структуру пришлось переработать.
В CustomMeshPool реализованы методы для удобного управления и доступа ко всем обрабатываемым CustomMesh. За счет поля MeshId в каждой из сущностей имеется доступ к информации всего меша. Такая структура данных удовлетворяет требованиям к первоначальным задачам. Ее несложно расширить, добавив соответствующий набор данных в CustomMesh и необходимые методы — в Vertex.
Стоит отметить, что такой подход не оптимален по производительности. В то же время большинство реализованных нами алгоритмов ориентированы на анализ контента в редакторе Unity, из-за чего не приходится часто задумываться об объемах используемой памяти. По этой причине мы кешируем буквально все что можно. Реализованный алгоритм мы сначала тестируем, а затем рефакторим его методы и в некоторых случаях упрощаем структуры данных для оптимизации времени выполнения.
На этом пока все. В следующей статье мы расскажем о том, как редактировать уже внесенные в проект 3D-модели, и воспользуемся рассмотренной структурой данных.
Источник: habr.com
Что такое меши в skyrim
Адрес: Москва
Сообщений: 5,043
Мэш, эта как основа чего-либо,этакий каркас, прически и одежда состоят из мэшей в игре.Если ты закачиваешь пользовательскую прическу или одежду мэш которых не встроин в игру, то они будут отображаться как стандартная прича или одежда
__________________
Династия Бэль
Сообщений: 611
onishka
Меш — это модель объекта, покрываемая сверху текстурами. Без них не будут работать многие новые предметы/одежды.
Адрес: Ростов-на-Дону
Сообщений: 8
спасибо, тогда другой вопрос. скачала я прическу с длинными волосами, скачала меши к ним, они все равно не показываются 😕
новая династия ^^
Адрес: Москва
Сообщений: 5,043
Есть три варианта.
1.Ты скачала сначала мэш, а потом цвет и сначала мэш инула в доунлоадс?
2.Мэш в файле был не правильным
3.Игра не захотела воспринимать мэш
__________________
Династия Бэль
администратор
Адрес: Питер
Сообщений: 8,359
Последовательность скачивания не имеет значения, ровно как и размещение в папку Даунов.
onishka, скачала CEP (Color Enabling Package)?
Адрес: Ростов-на-Дону
Сообщений: 8
сначало скачал цвет потом меш потом распаковала и кинула в доунлоадс а что сначала нужно меш скачать? когда скинула файл волос в сейвед(какойто) то в причах появились голые головы
Адрес: Ростов-на-Дону
Сообщений: 8
скачала я и сер ну у меня пиратка и сер установился в соседнюю папку я пробовала его и в основных симов кидать и в сезон не помогло
Адрес: 127.0.0.1
Сообщений: 289
Блин, ну что вы так к этому слову цепляетесь? Elemental верно сказал — mesh — это модель. Переводится как «сетка». Если посмотреть на модель с включенными граными полигонов, вы действительно увидите что-то вроде сетки.
Но повторюсь — для меня это не более, чем режим редактирования в 3Д-Максе. Он так и называется — «Editable Mesh».
В симсах же этот самый . Меш. Это модель! Модель чего либо. Тоесть кресло, которое я сделал можно назвать мешом! Только того кто назовёт, прибъю на месте.
Адрес: Москов, САО, Бескудниково
Сообщений: 4,396
__________________
И сплоченность рядов есть свидетельство дружбы —
Или страха сделать свой собственный шаг.
И над кухней-замком возвышенно реет
Похожий на плавки и пахнущий плесенью флаг.
« Предыдущая тема | Следующая тема »
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) |
Опции просмотра |
Линейный вид |
Комбинированный вид |
Древовидный вид |
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Обратная связь / Архив / Вверх
Часовой пояс GMT +4, время: 19:20
Запрещено копирование и публикация любых материалов форума на другие порталы
без письменного разрешения администрации и указания ссылки на prosims.ru
Источник: prosims.ru
Что такое меш и почему за этими сетями наше будущее
Автор канала Шифроденьги рассказал, что такое меш, почему за этими сетями будущее и как блокчейн ускорит их развитие.
Меш-сеть — это распределенная, одноранговая, самоорганизующаяся сеть с ячеистой топологией. На английском меш означает «ячейка».
Меш-сети отличаются от привычных централизованных сетей тем, что в них все узлы равноправны, каждый узел является и провайдером, и роутером, и мостом (cетевым коммутатором).
Чтобы стать полноценным узлом в сети, достаточно установить программное обеспечение Меш-сети у себя на роутере/телефоне/ноутбуке. Для подключения клиента к Меш-сети не потребуется никакого дополнительного ПО, кроме dhcp-клиента и поддержки ipv6 системой.
В меш-сети вы «сам себе провайдер», вас нельзя отключить от этой сети, вас нельзя подслушать специальным оборудованием.
Сети Меш — это путь, по которому человечество построит свободный, устойчивый к цензуре, децентрализованный интернет с End-to-End шифрованием трафика по умолчанию. А криптовалюты — это недостающий элемент уравнения.
В чем ценность глобальной Меш-сети?
В Меш-сети невозможно контролировать трафик и узлы, обслуживающие сеть, потому что там нет единого центра для получения IP-адресов (DHCP), все маршруты распределенные и динамические, и DNS также может быть децентрализован;
Меш-сеть опционально анонимна и всегда приватна. Весь трафик шифруется по умолчанию. Нет централизованных логов сессий пользователей и активности узлов. Прощай, Большой Брат.
Трафик невозможно приоритезировать. Network Neutrality — это закон, который прописан в коде. Прощай, приоритезация трафика и лоббирование интересов корпораций и правительств.
Сеть невозможно заблокировать или закрыть, потому что она соединяется по принципу «каждый с каждым», что создает большое количество связей. Обрыв одного или нескольких соединений не нарушит функционирование сети в целом. Прощайте, государственные фаерволы.
Если произошло стихийное бедствие, то с помощью Меш-сети можно быстро построить сеть на месте происшествия для связи, а при поддержке извне — соединить ее с глобальной сетью.
При этом такая сеть может быть дешевой и самоорганизующейся, то есть подключил кабель/Wi-Fi/сотовую связь к девайсу, нажал на кнопку — и ты автоматически становишься участником сети. Также такая сеть может работать в режиме «оверлея», то есть поверх существующей инфраструктуры, например, интернета.
Меш это сложно?
При запуске Меш-сети нужно решать много задач по маршрутизации, одновременно совмещая это с шифрованием и возможностью оверлейного режима работы.
Тем не менее протокол с открытым исходным кодом cjdns и основанный на нем проект Hyperboria решают все эти задачи достаточно эффективно.
Есть множество других протоколов для построения Меш-сетей. Ниже приведена сравнительная таблица:
Авто-назначение адреса — клиент сам выбирает себе адрес и может не менять его, переходя из одной подсети в другую, так как нет единого центра выдачи адресов;
Авто-конф. Маршрутизация — нет необходимости вручную настраивать маршрутизацию в сети;
Распределенная маршрутизация — узлы обмениваются информацией о маршрутизации;
Объединение сетей — способность объединять сети через обычный интернет;
IPv4/v6 — по какому протоколу работает сеть;
Авто-настройка — позволяет пользоваться сетью без установки какого-либо другого ПО;
Разработка — статус разработки сети;
Поддержка — какие операционные системы могут быть полноценными участниками сети.
Проблемы и препятствия для глобальной Меш-сети
В сравнении с привычным интернетом, Меш-сети часто неэффективны, потому что не гарантируют ширину канала и качество связи. Внутри мало контента и нет огромного количества привычных сайтов и сервисов. В самом начале запустить Меш-сеть очень сложно, а эффективность достигается только при большом количестве пользователей (узлов).
Тем не менее cjdns и другие протоколы разрабатываются и функционируют уже около 15 лет. А на нашей планете организовано множество различных Меш-сетей: от Нью-Йорка до Афганистана. Люди строят «свой» интернет, чтобы уйти от контроля правительств и интернет-провайдеров, чтобы защищать свою свободу слова и свободу доступа к информации по всему миру.
Самая крупная Меш-сеть в мире называется Guifi, находится в Испании и насчитывает на момент написания статьи 34,593 активные ноды.
Этот проект стартовал в 2004 году с одной Wi-Fi ячейки. Рамон Рока, один из инженеров компании Oracle, устал ждать, пока в его городок Гурб проведут интернет. Изначально он хотел решить проблему для себя. Но затем помог и соседям. Настроив роутеры Linksys определенным образом, он смог объединить их в Меш-сеть, к которой смогли присоединиться остальные при наличии подключения к интернету.
Первый узел сети заработал, когда Рока установил на самом высоком здании городка роутер с направленной антенной. Это было единственное здание в регионе с подключением к сети. Роутер при помощи направленной антенны связывал с интернетом дом инженера, находящийся в 6 километрах от здания. Вскоре о подключении к интернету начали просить соседи.
А потом и соседи соседей, знакомые, коллеги. Все желающие смогли подключиться — доступ был бесплатным, нужно было лишь приобрести роутер. Сеть постепенно увеличивалась в размерах год за годом. Рока и его команда волонтеров работают до сих пор, даже по ночам. Развивать сеть им стоит больших трудов. Все пожертвования уходят на покупку оборудования.
По сути, сеть держится только на добровольных началах ее создателей.
Но как заинтересовать всех остальных людей присоединиться к сети, если для них проблемы контроля интернета пока не так актуальны или просто не важны? Как заинтересовать пользователей, которые не понимают, что такое меш и каковы его преимущества, начать наполнять сеть контентом и сервисами, если внутри пусто и нет никого, кроме ранних последователей? Как заинтересовать узлы, лучше обслуживать сеть и предоставлять более качественный канал связи?
С одной стороны, государства, интернет-провайдеры и корпорации сами создают стимулы для развития свободного альтернативного интернета. Вспомнить хотя бы последнюю историю с Telegram, когда РКН заблокировал более 18 миллионов ip-адресов, в том числе и адреса серверов Google и Amazon. Пострадали многие сайты и сервисы, среди которых — Microsoft Office 365, обновления Windows, Xbox, Viber, Одноклассники и многие другие. Были проблемы с проведением платежей через 3DSecure MasterCard.
Но одних только негативных стимулов недостаточно для создания сетевого эффекта для перехода из привычного интернета в свободную глобальную Меш-сеть.
До появления криптовалют реализация «позитивных» экономических стимулов в Меш-сетях во всей их гибкости и мощности была невозможна. Просто потому, что вам бы пришлось под каждое устройство писать код для процессинга банковско-фиатных платежей, что очень сложно и небезопасно, а также проходить бюрократические барьеры и идентификацию по паспорту. По сути, сейчас у нас уже есть все технологии для реализации глобальной Меш-сети. Но будем реалистами — скорее всего, ее альфа-версии.
Что такое меш + криптовалюты? Глобальная Меш-сеть
Допустим, система экономических стимулов может выглядеть как-то так:
Я плачу пирам (пиры — это соседние узлы в Меш-сети) за трафик, который они маршрутизируют для меня;
Пиры платят мне за трафик, который я маршрутизирую для них;
Я делаю криптовалютный депозит на свой аккаунт-узел, когда баланс нулевой;
IPFS используется для кэширования и хранения контента с системой подобных экономических стимулов (используя Filecoin);
Чем качественнее ты обслуживаешь сеть, тем больше криптовалюты получаешь.
Представьте, что сеть может организовываться через любые устройства (телефоны, часы, холодильники и так далее) с помощью определенного софта и радиосвязи. Представьте, что можно перенаправлять трафик из интернета в глобальную Меш-сеть и обратно. Представьте, что пополнение балансов в сети происходит автоматически и автономно с помощью пары простых смарт-контрактов.
Конечно, тут не обойтись без большого количества транзакций в секунду, что тоже достижимо. Вот и все. Что такое меш? Это когда нет центральных вышек. Нет проводов под землей. Нет централизованных провайдеров.
Нет мобильных операторов. Нет базовых сетей GSM.
Нет никаких сомнений в том, что такая сеть принесет огромную пользу абсолютно всем. Посмотрим, найдется ли тот, кому хватит огня, чтобы реализовать это.
Примеры криптовалютных проектов, которые делают Меш-сети: Skycoin, RighMesh, Ammbr, Altheamesh.
Например, проект Skycoin разрабатывают свою Меш-сеть Skywire, и планы очень амбициозные. Команда хочет построить глобальную Меш-сеть, а блокчейн Skycoin будет использоваться в ней как платежная система.
Источник: decenter.org