lod в играх что это

Level Of Detail (LOD).

lod в играх что это

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

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

В game-индустрии основой производства трехмерных объектов является полигональное моделирование. И здесь возникает задача быстрого и эффективного создания полигональных LOD’ов с сохраниением общей формы и, что особенно важно, текстурных координат. Кому охота каждый раз перенатягивать текстуры на каждый новый LOD?

Как их делать в MAX’е.

lod в играх что это

lod в играх что это

4-й MAX имеет встроенный модификатор Multires. Он схож по функциональности с Polychop’ом, но более продвинутый. В нем, кроме процентного отношения, уже можно задавать количество вершин.

Также Multires позволяет сваривать вершины(Vertex Merging), принадлежащие разным элементам обьекта, т.е. когда в сетке имеются разрывы. Polychop этого делать не умеет.

Неплохим средством в помощь гейм-моделеру является утилита Polygon Counter.

lod в играх что это

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

lod в играх что это

Обычно для тестирования LOD’ы экспортируются в движок игры. Но для 3DSMAX’а существует полезный (слегка нами модифицированный) скрипт LOD_Tester (работает как в 3-й так и в 4-й версиях MAX’а). Он позволяет переключать LOD’ы непосредственно во вьюпорте. Это подходит для тех случаев, когда под рукой нет игрового движка.

Источник

СОДЕРЖАНИЕ

Историческая справка

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

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

Хорошо известные подходы

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

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

Подробная информация о дискретном уровне детализации

lod в играх что это

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

Пример дискретного уровня детализации

Сравнение и измерения визуальных воздействий

670

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

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

В следующей таблице сравнивается производительность рендеринга с учетом LOD и метода полной информации ( грубой силы ).

Сравнение и измерения визуальных воздействий

ГрубыйDLODСравнение
Визуализированные
изображения
lod в играх что этоlod в играх что этоlod в играх что это
Время рендеринга27,27 мс1,29 мс21 × уменьшение
Вершины сцены2 328 480109 44021 × уменьшение

Иерархический LOD

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

Практическое применение

Видеоигры

В популярной игре о строительстве городов Cities: Skylines моды позволяют изменять уровень детализации.

В ГИС и 3D моделировании городов

Уровень детализации присутствует в ГИС и 3D моделях городов как схожая концепция. Он показывает, насколько тщательно были нанесены на карту особенности реального мира и насколько модель соответствует своему реальному аналогу. Помимо геометрической сложности, в LOD модели могут учитываться другие показатели, такие как пространственно-семантическая согласованность, разрешение текстуры и атрибуты. Стандартный CityGML содержит одну из самых известных категорий LOD.

Источник

[Tutorial] Создание LOD’ов для 3D моделей

lod в играх что это

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

Что такое, зачем нужно?

LOD (англ. Levels Of Detail — уровни детализации) — приём в программировании трёхмерной графики, заключающийся в создании нескольких вариантов одного объекта с различными степенями детализации, которые переключаются в зависимости от удаления объекта от виртуальной камеры. Другой метод заключается в использовании одной основной, «грубо приближенной», модели и нескольких внешних надстроек к ней. Каждая последующая надстройка к основной модели дополняется элементами детализации пропорционально номеру надстройки. То есть на самом большом расстоянии будет отображаться единственная главная модель объекта. С приближением же последнего к камере игрока к конвейеру отрисовки будут последовательно подключаться последующие надстройки деталей.

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

Поэтому резонно искать автоматизированные средства генерации лодов.

lod в играх что это

lod в играх что это

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

lod в играх что это

Вердикт: не подходит для большинства моделей

Вердикт: то, что надо!

1) Выбираем нашу модель, переходим во вкладку «Utilities», намаем кнопку «More», в списке выбираем «Simplygon» и нажимаем «ОК»

lod в играх что это

2) В появившемся свитке снимаем галочку «Silent mode» и нажимаем на кнопку «Launch Simplygon»

lod в играх что это

3) Открывается окно подпрограммы «Simplygon»
Для быстрого решения поставленной задачи переходим в правой колонке в закладку «Quick Start», выбираем пункт «LOD chain» («цепочка ЛОДов»), отмечаем необходимый уровень упрощения моделей (в нашем случае это 71, 50 и 36 процентов от исходного количества полигонов), далее нажимаем «Click me to Proceed»

lod в играх что это

4) В процессе работы вы увидите кнопку «Download» («Скачать»). Прелесть в том, что вычисления происходят в «облаках», то есть не зависят от вашего компьютера, отсюда такая скорость таких сложных вычислений. В любом случае, вы можете поставить галочку «Download automatically in future» (скачивать автоматически в будущем). Пока этот пункт не выбран, нажимаем «Скачать» вручную.

lod в играх что это

5) По окончании процесса нажимаем на кнопку «Import»

lod в играх что это

6) После, закрываем Simplygon. При этом программа спросит «импортировать ли сгенерированные ЛОДы в 3Ds Max», нажимаем «Yes»

lod в играх что это

7) Теперь у нас есть наша исходная модель + 3 её лода. Их необходимо переименовать. Правила именования моделей в серии TW: окончания должны иметь вид _lod1 (исходная модель), _lod2, _lod3 и _lod4.

8) Тут же, в списке элементов сцены вы сможете обнаружить три сторонних объекта с именами Object#. Это копии корня сцены, появившиеся в процессе создания лодов. Не будем вдаваться в подробности, их нужно просто удалить.

lod в играх что это

lod в играх что это

Надеюсь, будет полезно. Удачного моделирования

Источник

Lod в играх что это

Для создания различных моделей в АРМА применяются различные лоды. К примеру для создания самого простого статичного объекта нужен минимальный набор лодов: лоды детализации, геометрии, родвей и фаир геометрии, лод теней, но если модель представляет из себяк примеру здание то понадобятся лоды path, для правильного перемещения по нему ботов, лод мемори для дверей и вертикальных лестниц.

Лоды детализации или разрешения (Resolution LODs)

Лоды детализации в окне лодов обозначаются цифоами: 0.000 1.000 2.000 3.000 и тд.
Лод детализации основной визуальный лод модели. При разработке модели делают несколько лодов детализации, каждый последующий лод упрощен в плане количества полигонов, вершин и секций.

Вид от Пассажира/Командира/Стрелока/Пилота (VIEW Cargo/Commander/Gunner/Pilot)

Это лоды детализации использующиеся в технике. На этих лодах показана детальное окружение в модели от первого лица персонажа будь то Пассажир/Командир/Стрелок или пилот.

Лод геометрии (Geometry)

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

Лод геометрии огня (Fire Geometry)

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

Лод поверхности (RoadWay)

Лод поверхности (RoadWay) нужен для того чтобы персонаж мог ходить по горизонтальным плоскостям наших объектов (пол\крыша\лестницы\и т.п)

Лод теней (Shadow Volume)

Лод теней, как следует из названия нужен для отображения теней. Армовский движок умеет автоматически генерировать тени для моделей, если количество полигонов не превышает 3тыс. (не точно), для более полигональных и больших моделей и нужен этот ЛОД.

В object builder LOD-ы детализации можно создать путем клика правой кнопкой мышки в окне List of LODs (панель отображения лодов)
lod в играх что это lod в играх что это

После выбора New… по умолчанию создаться LOD детализации и ему присвоится порядковый номер в след за предыдущим. В моих настройках которые я предложил для урока, это верхнее правое окно. Все остальные типы LOD-ов будут создаваться через LOD-ы детализации путем изменения в пункте Properties их свойств.

Источник

OpenSceneGraph: Уровни детализации (LOD) и фоновая загрузка объектов

lod в играх что это

Введение

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

Типичный пример: «большой мир» при визуализации железной дороги на движке OSG. Не хватает только лангольеров, пожирающих мир за поездом.

1. Использование уровней детализации (LOD)

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

OSG предоставляет инструменты для реализации этого приема через класс osg::LOD, наследуемый от всё того же osg::Group. Этот класс позволяет представить один и тот же объект в нескольких уровнях детализации. Каждый уровень детализации характеризуется минимальной и максимальной дистанцией до наблюдателя, при соблюдении которой происходит переключение отображения объекта в этом уровне детализации.

osg::LOD позволяет задавать данный диапазон сразу при задании дочерней ноды, или позже, применением методы setRange()

Продолжаем мучать цессну и проиллюстрируем описанную технику примером

main.h

main.h

Для начала загружаем модель

Теперь необходимо генерировать несколько (ограничимся для примера двумя) моделек, с более низким уровнем детализации. Для этого скопируем загруженную ноду дважды, применяя методику так называемого «глубокого» копирования класса, для ноды реализуемого методом clone()

Теперь редуцируем геометрию этих моделей, используя класс osgUtil::Simplifer. Степень упрощение модели задается методом setSampleRatio() данного класса — чем меньше передаваемый параметр, тем менее детальной будет модель после применения процедуры редукции

Когда у нас есть модельки разного уровня детализации мы можем зарядить их в корневую ноду, созданную как умный указатель на osg::LOD. Для каждого уровня детализации задаем дистанцию отображения этого уровня

Под FLT_MAX понимается в некотором роде «бесконечно» большое расстояние до наблюдателя. После запуска вьювера получаем следующую картину

Уровень детализации 3

lod в играх что это

Уровень детализации 2

lod в играх что это

Уровень детализации 1

lod в играх что это

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

2. Техника фоновой загрузки узлов сцены

В движке OSG представлены классы osg::ProxyNode и osg::PagedLOD, предназначенный для баллансировки нагрузки при рендеринге сцены. Оба класса наследуются от osg::Group.

Узел типа osg::ProxyNode уменьшает время запуска приложения до начала рендеринга, если в сцене огромное количество загружаемых с диска и отображаемых моделей. Он работает как интерфейс к внешним файлам, позволяя выполнять отложенную загрузку моделей. Для добавления дочерних узлов используется метод setFileName() (вместо addChild) чтобы установить имя файла модели на диске и загрузить его динамически.

Узел osg::PagedNode наследует методы osg::LOD и загружает и выгружает уровни детализации таким образом, чтобы избежать перегрузки конвейера OpenGL и обеспечить плавную отрисовку сцены.

3. Динамическая (runtime) загрузка модели

Посмотрим, как происходит процесс загрузки модели с применением osg::ProxyNode.

main.h

main.cpp

Процесс загрузки здесь немного отличается

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

lod в играх что это

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

lod в играх что это

Что происходит в рассмотренном примере? osg::ProxyNode и osg::PagedLOD работают в данном случае как контейнеры. Внутренний менеджер данных OSG будет посылать запросы и загружать данные в граф сцены по мере того, как возникнет необходимость в файлах моделей и уровнях детализации.

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

Движок автоматически обрабатывает узлы, не отображаемые в текущем вьюпорту и удаляет их из графа сцены когда рендер перегружен. Однако, такое поведение не затрагивает узлы osg::ProxyNode.

Как и прокси-узел, класса osg::PagedLOD также имеет метод setFileName() для задания пути к загружаемой модели, однако для его необходимо установить диапазон дистанции видимости, как для узла osg::LOD. При условии, что у нас имеется файл cessna.osg и низкополигональная модель уровня L1 мы можем организовать выгружаемую ноду следующим образом

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

При рендеринге внешне не видна разница между osg::LOD и osg::PagedLOD, если использовать только один уровень детализации модели. Интересной идеей будет организовать громадный кластер моделей Cessna, используя класс osg::MatrixTransform. Для этого можно использовать например такую функцию

Пример программы реализующей фоновую загрузку 10000 самолетов

main.h

main.cpp

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

lod в играх что это

Заключение

Этот урок в цикле об OpenSceneGraph будет последним, выполненным в формате «How To». В рамках двенадцати статей удалось уместить базовые принципы работы и использования OpenSceneGraph на практике. Очень надеюсь, что данный движок стал более понятен русскоязычному разработчику.

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

Но я не прощаюсь, благодарю за внимание и до новых встреч!

Источник

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

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

lod в играх что это