Крупномасштабный рендеринг ландшафта

Грэг Дункан

Сегодняшний проект относится к категории «Смотри, как круто!»

Рендеринг ландшафта

Рендеринг ландшафта – это пример кодирования игровой технологии, демонстрирующий как отрендерить крупномасштабный ландшафт в реальном времени с помощью эффективного раcпределения задач между CPU и GPU. В статье дается обзор приложения, делающего такой рендеринг, включая ссылки на свободно распространяемый код.

clip_image002

Введение

Этот пример показывает, как отрендерить крупномасштабный ландшафт на интеловской архитектуре Sandy Bridge в реальном времени путем эффективного распределения задач между ядрами главного процессора и графическим процессором. В примере входная карта высот преобразуется в иерархическое квадродерево, используемое для рендеринга ландшафта с адаптивно подбираемым уровнем детализации (LOD). Адаптивная упрощенная триангуляция, рассчитываемая в ходе преобразования, компактно кодируется для сбережения времени вычислений и объема памяти. Уровень детализации конструкции подбирается асинхронно ядрами главного процессора, а рендеринг выполняет графический процессор.

Приложение

Terrain Rendering – приложение, использующее DXUT и Microsoft DirectX* 11 с D3D_FEATURE_LEVEL_10_0. Приложение управляет всем рендерингом, взаимодействием с пользователем и GUI. При инициализации приложение загружает все модели, распределяет ресурсы и компилирует шейдеры. При первом запуске оно предварительно рассчитывает триангуляцию, что занимает некоторое время (до одной минуты) и сохраняет ее на диске. При следующих запусках приложение загружает эти данные с диска.

Обзор

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

clip_image004

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

Предвычисления адаптивной триангуляции довольно сложны и интенсивно потребляют вычислительные ресурсы. Их выполнение при работе программы требует значительного времени и ведет к ощутимым приостановкам и задержкам. Для решения этой проблемы приложение предварительно рассчитывает адаптивные треугольники для всей территории на стадии препроцессинга и сохраняет результирующие данные на диске в компактном представлении (см. секцию 4). Например, полная триангуляция для территории 8192×8192 требует примерно 6 МБ (сравните со 128 МБ, необходимыми для сохранения карты высот). При работе приложения эти данные используются для эффективной триангуляции.

...

SNB Terrain

Этот пример показывает, как отрендерить крупномасштабный ландшафт на интеловской архитектуре Sandy Bridge в реальном времени путем эффективного распределения задач между ядрами главного процессора и графическим процессором. Исходная карта высот преобразуется в иерархическое квадродерево, используемое для рендеринга ландшафта с адаптируемым уровнем детализации (LOD). Адаптивная упрощенная триангуляция компактно кодируется, сохраняя время процессора и пространство памяти. Построение LOD выполняется асинхронно на ядрах процессора, а рендерингом занят графический процессор, что обеспечивает стабильную частоту кадров.

Системные требования
Аппартура:
  • CPU: Процессор с архитектурой x86 с технологией Intel® Advanced Vector Extensions (Intel® AVX) – интеловская микроархитектура с кодовым названием Sandy Bridge или более поздняя
  • GFX: использует API графикb Microsoft DirectX* 11 на аппаратуре, поддерживающей Microsoft DirectX* 10 (или лучше)
  • OS: Microsoft Windows* 7 SP1 (для поддержки Intel AVX)
  • Память: 2 ГБ RAM или больше
ПО:
Поддерживаемый инструментарий:
  • Microsoft DirectX* SDK (выпуск июня 2010 или позже)
  • Microsoft Windows* SDK май 2010

Поддерживаемые компиляторы:

Требующиеся библиотеки:

  • Microsoft* C Run-Time Libraries (CRT) 2008/2010

Компиляция и запуск на моем ноутбуке не составили труда, так как у меня был установлен DirectX SDK. Вот снимки некоторых экранов с моего ноутбука:

clip_image006

clip_image008

Снимок решения:

clip_image010

Что же хорошего? Я не уверен… Шутка! Я считаю, что это классно и забавно иметь возможность облететь территорию, поиграть с настройками и узнать, как это создается. Лакомым куском является оригинал статьи на сайте CodeProject с детальным и глубоким введением в проблему. Если вы до сих пор размышляете над тем, как выполнить рендеринг ландшафта, эта статья может вам помочь.