Автоматическая генерация уровней детализации: must-have для realtime-рендеринга
Эта возможность появилась в новом релизе UNIGINE Engine 2.15.1, значительно упростив работу по созданию 3D-моделей и их импорту в движок.
Но для начала, вернемся к истокам, разберемся с основной терминологией и тем, как это было до.
Заметив вдалеке шедевр архитектуры, вы не разглядите на нем резных колонн, шероховатость камня, из которого он построен, цветов, что растут в саду. Поле зрения человеческого глаза небезгранично, и этот принцип применим и к 3D-визуализации в реальном времени. Каким бы детализированным ни был объект в виртуальной среде, чем больше дистанция, тем меньше деталей различает глаз.
Использование уровней детализации (LOD) — самый верный способ оптимизировать ваш проект. Смысл состоит в том, чтобы геометрия объекта сменялась с высокодетализированной на менее детализированную по мере удаления от него камеры.
Зачем же расходовать производительность GPU на рендер высокополигонального объекта, если мы все равно ограничены тем, что различает наш биологический инструмент?
Традиционно в real-time, для создания уровней детализации требуется к 3D-модели создать несколько версий, каждая из которых отличается количеством полигонов в меньшую сторону.
Главная цель использования LOD заключается в перераспределении ресурсов GPU. Ему есть, чем заняться: например, в динамике отрисовывать по 60 сцен в секунду. Уровни детализации — это индустриальный стандарт оптимизации производительности.
В UNIGINE, модель представлена в виде одного меш-объекта с несколькими уровнями детализации. Их настройка позволяет задать дистанцию, на которой один слой должен сменяться другим, и участок плавного перехода, на котором смена уже не заметна глазу. Главная задача — обеспечить максимальное использование имеющихся ресурсов: движок хорошо себя чувствует на «железе» текущего и предыдущих поколений.
Настройка уровней детализации в UNIGINE Engine осуществляется двумя способами:
Вручную. В 3D редакторе создаются несколько моделей, отличающихся разным количеством полигонов, затем происходит их загрузка в UnigineEditor. Недостатком этого метода является необходимость каждый раз возвращаться в сторонний 3D редактор, вносить правки в оригинальную модель и все ее низкополигональные версии, а затем снова загружать их в UnigineEditor. И так до тех пор, пока вам не надоест, и вы не начнете пользоваться способом №2.
Автоматически. Генерация уровней детализации происходит во время импорта модели в UnigineEditor. Все что нужно — всего одна (ого!) высокополигональная модель, а движок создаст уровни детализации сам, используя указанные вами настройки.
На этом способе и остановимся подробнее.
UNIGINE позволяет автоматически генерировать уровни детализации во время загрузки высокополигональной модели, избавляя вас от необходимости настраивать их вручную, используя сторонние приложения. Эта функция основана на встроенной библиотеке meshoptimizer.
В зависимости от сложности геометрии загружаемого объекта, время на итерацию может разниться, но чаще всего занимает несколько секунд, в редких случаях может доходить до минуты.
Кому это подходит?
3D-художникам. Существенно экономит время на создании нескольких вариантов одной и той же модели с разной детализацией и последующей их загрузке в редактор;
Проектам, в которых либо нет художников, либо используются сложные модели, созданные без их участия: 3D-сканы, инженерные CAD модели и т.д. В этом случае нет даже возможности сделать несколько менее детализированных копий, и автоматическая настройка уровней детализации решает эту проблему, экономя людские и финансовые ресурсы.
Как это выглядит?
Ограничения метода
При всех достоинствах автоматической генерации уровней детализации, у нее все же имеется ограничение: авто-LOD не следует использовать с Skinned Mesh, который предназначен для рендеринга персонажей с костной анимацией, а также для целевой анимации морфинга персонажей. Для них уровни детализации по-прежнему могут быть созданы только вручную через сторонние 3D-редакторы.
То же касается очень сложных моделей, для них качественные уровни детализации лучше делать самим. Следует учесть, что это займет гораздо больше времени, чем при автоматической генерации движком.
В остальном же, автоматическая генерация уровней детализации — must-have для realtime-рендеринга, облегчающий работу не только разработчикам, но и графическим процессорам. Максимизация производительности при минимизации ресурсных затрат — баланс, к которому стремится UNIGINE с каждым релизом.