Перейти к содержимому

Как объединить объекты в юнити

  • автор:

Как объединить сгенерированые объекты в Unity?

c1685e7018724f558e71327ee2d40cc3.png

У меня есть рандомно генерированный лабиринт, который создается за счет построения 4 стен и 1 пола в каждой ячейке. В итоге, после генерации, в проекте у меня создаются огромное количество отдельных объектов(4 стены и пол), которые в итоге формируют нужный мне лабиринт.

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

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

Рекомендации по производительности для Unity

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

Недавно мы выпустили приложение Quality Fundamentals, которое позволяет решить распространенные проблемы с производительностью, проектированием и средами для приложений HoloLens 2. Это приложение отлично подходит для демонстрации приведенного ниже содержимого.

Использование рекомендуемых параметров проекта Unity

Самый важный шаг при оптимизации производительности приложений смешанной реальности в Unity — использовать рекомендуемые параметры среды для Unity. В этой статье содержится информация о самых важных конфигурациях сцены для создания производительных приложений смешанной реальности. Некоторые из этих рекомендаций отдельно выделены ниже.

Профилирование с помощью Unity

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

Для Unity доступна замечательная документация по следующим темам:

  1. Удаленное подключение профилировщика Unity к приложениям UWP
  2. Эффективная диагностика проблем с производительностью с помощью профилировщика Unity

Профилирование GPU

Профилировщик Unity

Подключив профилировщик Unity и добавив профилировщик GPU с помощью действия Add Profiler (Добавить профилировщик) в верхнем правом углу, в средней области профилировщика вы увидите, сколько времени тратится на работу центрального и графического процессоров соответственно. Это позволяет разработчику быстро получить приближенные сведения о требованиях приложения к ЦП или GPU.

ЦП и GPU в Unity

Чтобы использовать профилирование GPU, необходимо отключить задания графики в параметры проигрывателя Unity. Дополнительные сведения см. в описании модуля профилировщика использования GPU для Unity.

Отладчик фреймов Unity

Еще одним функциональным и ценным инструментом для работы является отладчик фреймов Unity. Он позволяет хорошо понять, что GPU делает в каждым фрейме. Следует обращать внимание на дополнительные целевые объекты отрисовки и команды blit для копирования между ними, так как на HoloLens они очень дороги. В идеале для HoloLens не следует использовать целевые объекты отрисовки вне экрана. Они обычно добавляются при включении дорогостоящих функций отрисовки (например, MSAA, HDR или полноэкранных эффектов, таких как цветение), которые следует избегать.

Наложение частоты кадров HoloLens

На странице System Performance (Производительность системы) портала устройств есть полезная сводка по производительности ЦП и GPU устройства. Здесь можно включить параметры Display frame rate counter in headset (Счетчик частоты кадров отображения в гарнитуре) и Display frame rate graph in headset (График частоты кадров отображения в гарнитуре). Эти параметры активируют счетчик и график частоты кадров соответственно, что позволяет моментально оценить работу любого запущенного на устройстве приложения.

PIX

Для профилирования приложений Unity также можно использовать PIX. Кроме того, доступны подробные инструкции по использованию и установке PIX для HoloLens 2. В сборке разработки области, которые отображаются в отладчике фреймов Unity, также доступны в PIX для более подробного просмотра и профилирования.

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

UnityEngine.XR.XRSettings.renderViewportScale = 0.7f; 

Рекомендации по производительности ЦП

Ниже приводятся более подробные рекомендации по производительности, которые особенно касаются разработки на C# в Unity.

Кэширование ссылок

Мы рекомендуем кэшировать ссылки на все важные компоненты и игровые объекты во время инициализации, так как повтор вызовов функций, например GetComponent() и Camera.main, требует больше ресурсов памяти чем хранение указателя. . Camera.main фактически использует FindGameObjectsWithTag() для выполнения ресурсоемкого поиска объекта камеры в графе сцены по тегу MainCamera.

using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour < private Camera cam; private CustomComponent comp; void Start() < cam = Camera.main; comp = GetComponent(); > void Update() < // Good this.transform.position = cam.transform.position + cam.transform.forward * 10.0f; // Bad this.transform.position = Camera.main.transform.position + Camera.main.transform.forward * 10.0f; // Good comp.DoSomethingAwesome(); // Bad GetComponent().DoSomethingAwesome(); > > 

Отказ от использования GetComponent(string)
При использовании GetComponent() существует несколько разных перегрузок. Важно всегда использовать реализации на основе конкретных типов, но не перегрузку поиска на основе строк. Поиск по строке в сцене значительно дороже, чем поиск по типу.
(Хорошо) Component GetComponent(Type type)
(Хорошо) T GetComponent()
(Плохо) Component GetComponent(string)>

Отказ от дорогостоящих операций
  1. Отказ от использования LINQ Хотя запросы LINQ могут быть очень понятыми и простыми для чтения и записи, обычно они требуют больше ресурсов для вычислений и хранения по сравнению с использованием написанных вручную алгоритмов.
// Example Code using System.Linq; List data = new List(); data.Any(x => x > 10); var result = from x in data where x > 10 select x; 
 GameObject.SendMessage() GameObject.BroadcastMessage() UnityEngine.Object.Find() UnityEngine.Object.FindWithTag() UnityEngine.Object.FindObjectOfType() UnityEngine.Object.FindObjectsOfType() UnityEngine.Object.FindGameObjectsWithTag() UnityEngine.Object.FindGameObjectsWithTag() 

Удалите все SendMessage() и BroadcastMessage() любой ценой. Эти функции работают на три порядка медленнее, чем прямые вызовы функций.

  1. Остерегайтесь упаковки-преобразования Концепция упаковки-преобразования очень важна в языке и среде выполнения C#. Так называют процесс создания переменных со ссылочным типом в виде оболочек для переменных со значениями типа, такими как char , int , bool и т. д. Если переменная со значением типа «упакована», она помещается в объект System.Object , который хранится в управляемой куче. Для нее выделяется память и ее нужно обрабатывать сборщиком мусора после освобождения. Такие процессы выделения и освобождения ресурсов приводят к снижению производительности, а во многих случаях их можно убрать или легко заменить на менее дорогостоящую альтернативу. Чтобы избежать упаковки, убедитесь, что переменные, поля и свойства, в которых хранятся числовые типы и структуры (включая Nullable ), строго типизированы как конкретные типы, такие как int , float? или MyStruct , вместо использования объекта. Если эти объекты помещаются в список, обязательно используйте строго типизированный список, например List , а не List или ArrayList . Пример упаковки-преобразования в C#
// boolean value type is boxed into object boxedMyVar on the heap bool myVar = true; object boxedMyVar = myVar; 
Повторяющиеся пути кода

Нужно уделять особое внимание всем повторяющимся функциям обратного вызова Unity (т. е. обновления), которые выполняются много раз за секунду и (или) кадр. Любые дорогостоящие операции в этом коде будут иметь огромное и стабильное влияние на производительность.

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

void Update()

Update() служит самым ярким примером этой проблемы с производительностью, но некоторые другие повторяющиеся обратные вызовы Unity могут оказаться не менее или даже более серьезными, как например следующие: FixedUpdate(), LateUpdate(), OnPostRender(), OnPreRender(), OnRenderImage() и т. п.

  1. Однократное выполнение операций для каждого кадра Следующие API Unity содержат операции, типичные для многих голографических приложений. Хотя и не всегда, результаты таких функций часто можно вычислять один раз за кадр и повторно использовать в приложении для всего этого кадра. а) Мы рекомендуем выделить один отдельный класс или службу, чтобы обработать Raycast для взгляда на сцену и повторно использовать полученный результат во всех остальных компонентах сцены, не повторяя идентичные операции Raycast для каждого компонента. В некоторых приложениях нужно выполнять Raycast из разных позиций или с разными LayerMask.
 UnityEngine.Physics.Raycast() UnityEngine.Physics.RaycastAll() 

б) Избегайте операций с методом GetComponent() в повторяющихся обратных вызовах Unity, таких как Update(), используя кэширование ссылок в Start () или Awake().

 UnityEngine.Object.GetComponent() 

в) Мы рекомендуем по возможности создавать экземпляры всех объектов при инициализации и применять пулы объектов для повторного использования игровых объектов в ходе работы приложения.

 UnityEngine.Object.Instantiate() 
Прочее
  1. Физика а) Как правило, для улучшения обработки физики следует ограничить количество времени или количество итераций в секунду, затрачиваемых на ее обработку. Это снизит точность имитации. См. документацию по TimeManager в Unity. б) Типы коллайдеров в Unity могут иметь очень разные характеристики производительности. В приведенном ниже списке коллайдеры перечислены в порядке уменьшения производительности, слева направо. Важнее всего избегать коллайдеров сетки, которые значительно требовательнее к ресурсам, чем коллайдеры примитивов. Сфера < Капсула < Коробка
  2. Анимации Избавьтесь от анимации простоя, отключив компонент Animator (отключение объекта Game не дает такого эффекта). Избегайте шаблонов разработки, в которых аниматор в цикле постоянно присваивает значение одному параметру. Такой метод создает значительную нагрузку на ресурсы без видимого эффекта в приложении. Дополнительные сведения доступны здесь.
  3. Сложные алгоритмы Если приложение использует сложные алгоритмы, такие как обратная кинематика, поиск пути и т. д., попробуйте найти более простой подход или оптимизируйте соответствующие параметры по производительности.

Рекомендации по производительности взаимодействия ЦП с GPU

Как правило, производительность взаимодействия ЦП с GPU упирается в вызовы отрисовки, передаваемые на графическую плату. Чтобы повысить эту производительность, вызовы отрисовки следует стратегически уменьшать и (или) реструктуризовать до достижения оптимальных результатов. Поскольку вызовы отрисовки сами по себе требуют много ресурсов, снижение их количества позволит сократить общий объем работы. Кроме того, изменения состояния между вызовами отрисовки требуют ресурсоемких операций по проверке и преобразованию в графическом драйвере, а значит реструктуризация вызовов отрисовки в приложении для ограничения изменений состояния (т. е. разных материалов и т. д.) может повысить производительность.

В документации по Unity есть отличная статья с обзорным и подробным описанием пакетной обработки вызовов на этой платформе.

Однопроходная отрисовка экземпляра

Однопроходная отрисовка экземпляра в Unity позволяет уменьшить число вызовов отрисовки для каждого глаза до одного экземпляра. Благодаря согласованности кэша между двумя вызовами отрисовки будет заметно и некоторое улучшение производительности GPU.

Включение этой функции в проекте Unity

  • OpenXR
  • Подключаемый модуль Windows XR
  • Устаревшая версия WSA
  1. Откройте Параметры OpenXR (перейдите в раздел Изменение>параметров> проектаУправление подключаемым> модулем XROpenXR).
  2. Выберите Экземпляр с одним проходом в раскрывающемся меню Режим отрисовки .

Этот параметр не применяется к проектам, использующим подключаемый модуль Windows XR.

  1. Откройте параметры проигрывателя XR (перейдите в раздел Изменение>параметров> проекта Параметрыпроигрывателя>XR).
  2. В раскрывающемся меню Метод стерео отрисовки выберите экземпляр single pass instanced (Необходимо выбрать поле Virtual Reality Supported проверка (Поддерживаемые проверка виртуальной реальности).

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

  • Максимизация производительности дополненной реальности и виртуальной реальности с помощью расширенной стереоскопической отрисовки
  • Однопроходная отрисовка экземпляра

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

Действия для решения этой проблемы описаны в документе Unity об однопроходной стереоскопической отрисовке для HoloLens.

Пакетная обработка статических объектов

Unity поддерживает создание пакетов из нескольких статических объектов, что позволяет снизить число вызовов отрисовки для GPU. Пакетная обработка статических объектов будет нормально работать в Unity для большинства объектов Renderer, которые имеют одинаковый материал и имеют атрибут Static (чтобы присвоить его, выберите объект в Unity и щелкните флажок в верхней правой части окна инспектора). Игровые объекты, имеющие атрибут Static, не могут перемещаться на протяжении всего периода работы приложения. Это означает, что пакетную обработку статических объектов трудно применить для HoloLens, поскольку здесь почти каждый объект должен быть перемещаемым, масштабируемым и т. д. Для иммерсивных гарнитур пакетная обработка статических объектов позволяет значительно сократить число вызовов отрисовки, а значит и повысить производительность.

Дополнительные сведения см. в разделе о пакетной обработке статических объектов в статье Пакетная обработка вызовов отрисовки в Unity.

Пакетная обработка динамических объектов

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

Полный список этих требований см. в разделе о пакетной обработке динамических объектов в статье Пакетная обработка вызовов отрисовки в Unity. Чаще всего игровые объекты не удается объединить в пакет, поскольку для такой обработки данные о сетке не могут содержать более 300 вершин.

Другие методики

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

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

Изменение свойств в Renderer.material во время выполнения приводит к созданию копии материала, что может нарушить возможность пакетной обработки. Используйте Renderer.sharedMaterial для изменения свойств общего материала для нескольких игровых объектов.

Рекомендации по производительности GPU

Дополнительные сведения об оптимизации отрисовки графических объектов в Unity см. здесь.

Пропуская способность и скорость заливки

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

  • Пропускная способность памяти — это скорость операций чтения и записи из памяти, которую может обеспечить GPU.
    • В Unity измените параметр Texture Quality (Качество текстур) в меню Edit>Project Settings>Quality Settings (Правка — Параметры проекта — Параметры качества).
    • В Unity используйте свойствоXRSettings.renderViewportScale.

    Оптимизация совместного использования буфера глубины

    Рекомендуется включить общий доступ к буферу глубины , чтобы оптимизировать стабильность голограммы. При включении репроецирования на поздних этапах с помощью этого параметра рекомендуется выбрать 16-разрядный формат глубины вместо 24-разрядного . 16-разрядные буферы глубины существенно снизят нагрузку на пропускную способность (передачу данных) для буфера глубины, а значит и энергопотребление. Это может быть большим улучшением как в плане снижения энергопотребления, так и в плане производительности. Но использование 16-разрядного формата глубины может иметь два неприятных последствия.

    Z-конфликт

    Снижение четкости по глубине при 16-разрядном буфере повышает вероятность Z-конфликтов по сравнению с 24-разрядными буферами. Чтобы избежать таких артефактов, измените ближнюю и дальнюю отсекающие плоскости для камеры Unity с учетом снижения разрешения. Для приложений на основе HoloLens дальняя плоскость обрезки в 50 м вместо стандартного для Unity значения 1000 м обычно полностью устраняет Z-конфликты.

    Отключение буфера трафаретов

    Если Unity создает текстуру отрисовки с 16-разрядной глубиной, буфер трафаретов не создается. Выбор 24-разрядного формата глубины, как описано в документации по Unity, приведет к созданию 24-разрядного Z-буфера и 8-разрядного буфера трафарета (если 32-разрядная версия применима на устройстве (например, HoloLens), что обычно бывает).

    Отказ от полноэкранных эффектов

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

    Оптимальные параметры освещения

    Глобальное освещение в реальном времени в Unity дает потрясающие визуальные результаты, но требует довольно ресурсоемких вычислений. Мы рекомендуем отключать глобальное освещение в реальном времени для всех сцен Unity. Для этого нужно в разделе Window>Rendering>Lighting Settings> (Окно > Отрисовка > Параметры освещения) снять флажок Real-time Global Illumination (Глобальное освещение в реальном времени).

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

    Выберите Edit>Project Settings (Редактировать > Свойства проекта), затем категорию Quality> (Качество) и укажите вариант Low Quality (Низкое качество) для платформы UWP. Можно также отдельно указать для свойства Shadows (Тени) значение Disable Shadows (Отключить тени).

    С моделями в Unity рекомендуется использовать просчитанное освещение (baked lighting).

    Уменьшение количества многоугольников

    Количество полигонов можно снизить следующими способами:

    1. Удаление объектов из сцены.
    2. Прореживание ресурсов, которое позволяет снизить количество полигонов для некоторой сетки.
    3. Внедрение в приложение системы уровня детализации, которая отрисовывает более далекие объекты с меньшим числом полигонов без изменения их геометрии.

    Общие сведения о шейдерах в Unity

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

    1. Выберите нужный ресурс шейдера или материал, затем в верхнем правом углу окна Inspector (Инспектор) выберите значок шестеренки и действие Select Shader (Выбрать шейдер). Выбор шейдера в Unity
    2. После выбора ресурса шейдера нажмите кнопку Compile and show code (Компилировать и показать код) в окне Inspector (Инспектор). Компиляция кода шейдера в Unity
    3. После компиляции найдите раздел статистики в области результатов, где отображается число разных операций для вершинных и пиксельных шейдеров (учтите, что пиксельные шейдеры часто называют фрагментными). Работа стандартного шейдера Unity
    Оптимизация пиксельных шейдеров

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

    Таким образом, фрагментные шейдеры не только выполняют больше операций, чем вершинные (из-за сложных вычислений освещения) но и почти всегда применяются к более крупному набору данных. Например, при размере экрана 2000 на 2000 пикселей фрагментный шейдер будет выполнен 2000 × 2000 = 4 000 000 раз. При отрисовке для двух глаз это число удваивается, так как работают сразу два экрана. Если приложение смешанной реальности использует несколько проходов, полноэкранные эффекты постобработки или отрисовку нескольких сеток в пределах одного пикселя, это количество еще значительно увеличится.

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

    Альтернативы стандартному шейдеру Unity

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

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

    Предварительная загрузка шейдера

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

    Ограничение перерисовки

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

    Обычно перерисовка устраняется отбрасыванием объектов до того, как они будут отправлены в GPU. Unity предоставляет подробные сведения о реализации отбрасывания загораживаемых объектов для этой платформы.

    Рекомендации по использованию памяти

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

    Сборка мусора

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

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

    При разработке в Unity одной из самых распространенных ошибок, которые приводят к избыточному сбору мусора, является отсутствие кэша для ссылок на компоненты и классы. Все ссылки следует собирать в методе Start() или Awake() и использовать повторно в функциях Update() и LateUpdate().

    Еще немного советов.

    • Используйте класс C# StringBuilder для динамического создания сложных строк в процессе выполнения.
    • Удалите все вызовы Debug.Log(), когда в них отпадет необходимость, иначе они будут по-прежнему выполняться в рабочих версиях приложения.
    • Если голографическое приложение часто требует большого объема памяти, попробуйте вызывать System.GC.Collect() на этапах загрузки, например при отображении экрана загрузки или перехода между сценами.
    Использование пулов объектов

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

    Производительность при запуске

    Мы рекомендуем начать работу приложения с небольшой сцены, а затем загружать остальную часть с помощью SceneManager.LoadSceneAsync . Это позволит приложению максимально быстро перейти к интерактивному состоянию. При активации новой сцены создается пиковая нагрузка на ЦП, что может привести к подвисанию или отрывистому отображению содержимого. Для обхода этой проблемы можно установить для параметра загружаемой сцены AsyncOperation.allowSceneActivation значение False, затем дождаться полной загрузки сцены, очистить экран и вернуть этому параметру значение True для завершения активации сцены.

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

    См. также статью

    • Оптимизация отрисовки графических объектов в играх на Unity
    • Оптимизация сбора мусора в играх на Unity
    • Советы и рекомендации по физике (Unity)
    • Оптимизация скриптов (Unity)

    Уроки Blender 3D

    Уроки Blender с нуля / #1 – Основы программы Blender для начинающих

    Уроки Blender с нуля / #1 – Основы программы Blender для начинающих

    Видео курс по изучению Blender для начинающих с нуля. За курс вы научитесь работать с программой Blender для разработки 3Д объектов. Вы познакомитесь с добавлением материалов, настройкой формы объектов, анимациями. К концу курса у вас будут знания для 3D графического дизайна.

    Видеоурок

    Полезные ссылки:

    • Официальный сайт компании Blender;
    • Примеры работы в Blender.

    Информация про Blender

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

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

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

    На что способна?

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

    Сама программа разработана и используется для создания трёхмерной компьютерной графики, включающее в себя средства моделирования, скульптинга, анимации, симуляции, рендеринга, постобработки и монтажа видео со звуком, компоновки с помощью «узлов», а также создания 2D-анимаций.

    Проще говоря, программа настолько обширна, что если вы хотите или когда-либо задумывались про создание своего объекта, то вы с уверенностью 100% сможете это сделать в программе Blender.

    Как проходит процесс работы?

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

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

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

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

    План курса

    Если вы никогда ранее не сталкивались с подобными программами, то вероятнее всего вам будет сложно сразу с ходу начать делать свои объекты. Разработка 3Д объектов представляется сложным и долгим процессом. Нужно не только уметь работать с самой программой, но также хорошо визуализировать что вы хотите создать и иметь четкую картинку готового объекта.

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

    В ходе курса мы с вами сделаем главное. Мы научимся работать со всеми базовыми концепциями программы и создадим несколько хоть и простых, но все же интересных 3Д объектов. Также мы научимся экспортировать созданные объекты для дальнейшего их использования в игровых движках. В частности мы выгрузим наш объект в движок Unity.

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

    Установка программы

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

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

    Создание проекта

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

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

    Задание к уроку

    Установка всего

    Скачайте программу Blender и выполните ее установку на компьютер.

    Blender. Как объединить или разделить объекты?

    Допустим, у вас есть 2 модели и необходимо их объединить, что-бы редактировать их одновременно, применять модификаторы и тд.

    1. Выделяете первый объект (его названием будет назван конечный продукт)
    2. Выделяете второй объект
    3. Жмете CTRL+J
    4. Редактируете объект как вам угодно

    После соединения все материалы сохраняются как есть.

    Обратите внимание, что вы должны находиться в режиме объектов, а не вершин. То есть, вы не должны видеть точки или грани.

    Пример объединения

    Для наглядности, я все-же покажу как это выглядит.

    Мы имеем 2 куба, которые необходимо объединить в один объект.

    2 куба

    Выбираем первый куб

    выделили первый куб

    Затем, с зажатым SHIFT, выбираем второй

    выделенные два куба

    Ну и жмем CTRL+J

    выделенные 2 куба, объединились

    Теперь эти 2 куба представлены как один объект. Далее можно уже объединять вершины между собой и редактировать полученный объект как обычно.

    Кстати, если выбрать 2 точки и нажать F то проведется грань между ними, а если выбрать грань или 3 точки и нажать F то появится плоскость.

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

    У меня после слияния получилось следующее)

    объединенные объекты в один

    Как разделить объект на несколько частей?

    Часто приходиться так-же разделять уже собранный объект на несколько частей.

    Для этого нужно выполнить несложный ряд действий

    1. Переходим в режим редактирования нужного объекта
    2. Выделяем нужную часть
    3. Жмем P
    4. Выбираем нужное действие

    После этого у нас появиться 2 объекта из выделенной области и всего остального, что было в объекте.

    Пример

    Для наглядности, я разделю то, что у меня получилось обратно на 2 части

    Для удобства выделения переключаем режим отображения в сетку, нажатием кнопки Z

    переключение на отображение только сетки

    Далее выделяем вершины

    выделение вершин

    Жмем P и выбираем Selected. Если вам нужно разделить по накинутым материалам то выбираем by Material. А если объект явно имеет отдельные детали то можно нажать by Loose Parts.

    разделение выделенных вершин и всего остального через P

    Объект разделится на 2 части

    разделили и получили 2 объектаразделили и получили 2 объекта

    Готово. Мы разделили объект на 2 объекта.

    Для запаивания дыр можно использовать выделение по 3 вершины и нажатие F.

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

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