Каков современный современный алгоритм трассировки лучей по полям высоты?

16

В течение многих лет было много работ по различным методам рисования рельефа местности в трассировщике лучей. Некоторые алгоритмы направляют марш по сетке напрямую (или через quadtree); другие преобразуют местность в полигональную сетку и используют стандартный тест пересечения лучей и треугольников. Исследования, похоже, продвинулись в последние несколько лет, и трудно найти статьи, написанные в последнее десятилетие, но баланс между памятью и вычислениями (как CPU, так и GPU) все еще меняется.

Какой алгоритм в настоящее время обеспечивает наилучшую производительность на настольных компьютерах высокого класса? Или, если нет единого ответа, как отличаются характеристики производительности современных лучших алгоритмов?

Дэн Халм
источник
Отражения в пространстве экрана: создайте поле высоты с использованием буфера глубины и кадров, проследите лучи, чтобы получить грубые отражения. Я не знаю о деталях, но я бы предположил, что Crysis, Killzone, в последнее время Frostbite и т. Д. Будут использовать некоторые сложные методы, чтобы сделать это быстро. Вы смотрели на это?
Дэвид Кури
1
@DavidKuri Спасибо, это хороший указатель на то, как быстро получить ядро ​​лучевого марширования. Должно быть много возможных оптимизаций для более статического поля высоты, которое не очень хорошо работает при трассировке пространства экрана, например, для предварительно вычисленных mipmaps или min-max quadtree, поэтому я все еще надеюсь на ответ это охватывает это.
Дэн Халм
Привет, Дэн! Кстати, вы ищете решения для процессоров или графических процессоров? И рендеринг в реальном времени или не в реальном времени?
Алан Вульф
@AlanWolfe Я использую графический процессор и не в режиме реального времени (то есть максимальную пропускную способность, а не лучшее качество изображения, которым вы можете управлять за 16 мс), но я все равно буду приветствовать интересные ответы, которые быстры на ЦП или в первую очередь для интерактивных средств визуализации.
Дан Халм
Вы можете попытаться создать поле расстояния со знаком на карте высот. Это в основном 3d-текстура, которая хранит расстояние до следующей поверхности. Это позволяет «путешествовать лучом быстрее». Unreal Engine 4 использует это для окклюзии окружающей среды среднего уровня, мягких теней и теней ландшафта в целом
user1888

Ответы:

12

Для получения информации о текущем состоянии дел ищите эту статью: «Максимальное количество карт для быстрой, точной и масштабируемой визуализации поля с динамической высотой», Tevs et al. 2008

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

Если вы посмотрите на рисунок 8, вы увидите сравнение базовых линейных степпингов с максимальными мип-картами. Линейный шаг приводит к 200 шагам, что можно сделать в реальном времени на современном графическом процессоре, но все еще на самом деле медленно. Макс мипмапы делают то же самое примерно за 10 шагов, все в шейдере.

Рама
источник
Я принимаю этот ответ, потому что сама статья хороша и ее раздел «Связанные работы» кажется довольно полным. Даже если я не буду использовать эту технику в точности, я уверен, что смогу кое-что адаптировать для своего варианта использования из этого и его ссылок.
Дэн Халм
Нашли ли вы какие-нибудь демоверсии с максимальным количеством карт? Благодарю.
raRaRa
Я не читал газету, но этот «максимальный размер карт» звучит очень похоже на технику, используемую для картографирования конусных шагов (которая улучшает отображение окклюзии параллакса, пропуская большие области благодаря конусам).
Жюльен Геро,
@JulienGuertault Я бы сказал, что это простая трассировка HiZ. это безопасный способ быть уверенным в том, что вы ударили. Но не очень быстро по сравнению с небезопасными методами, такими как бинарный поиск.
v.oddou
4

Лучшее, что я лично видел, это то, что делает Inigo Quillez, которое используется в демосцене. Лучи маршируйте местность, делая большие шаги по мере удаления от камеры, поскольку (как правило) детали менее важны на расстоянии (исключение = тонкие стены!). Он использует информацию о проникновении и другие легко доступные метрики для имитации окклюзии окружающей среды и других сложных методов освещения.

Вот демонстрация материала в действии: https://www.youtube.com/watch?v=_YWMGuh15nE

А вот страница IQ по лучевой разведке местности, которая довольно интересна для чтения: http://www.iquilezles.org/www/articles/terrainmarching/terrainmarching.htm

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

Я видел некоторые разговоры об этом на siggraph 2014, и хотя некоторые люди использовали методы, подобные IQ, некоторые делали вещи даже не так хорошо, как IQ, что было интересно посмотреть: P

Алан Вульф
источник
1
Алгоритм по вашей ссылке очень прост. Это выглядит менее изощренно, чем некоторые из бумаг, которые я нашел в девяностых. Это выглядит как хорошая отправная точка, но я надеюсь на самое высокопроизводительное решение для производственной системы, а не просто «мой первый raytracer».
Дэн Халм
Этот материал используется для демонстрации кода демосцены и экранного пространства в самых современных современных играх. Самый быстрый код иногда самый простой. Я не отклонил бы это из-за его простоты. Было бы интересно посмотреть, если вы получите какие-либо другие ответы, хотя.
Алан Вульф
2
Чего не хватает в вашем ответе, так это того, что IQ использует стандартную сетку полей высот в качестве начального предположения, чтобы дать старт лучам на местности. Сначала он рендерит низкополигональную версию ландшафта, используя стандартную растеризацию, а затем запускает пиксельный шейдер поверх изображения, который начинает лучевое копирование на растровой глубине минус некоторый консервативный порог. Это единственный способ сделать это в реальном времени.
Бенедикт Биттерли
Я считаю, что только часть того, что вы говорите, является правдой. он использует эвристику, основанную на высоте местности (вместе с расстоянием от камеры), чтобы определить, как далеко может идти луч, но, насколько я слышал, он не использует растеризацию. Вот пример его работы, в которой не используется растеризация, но это не означает, что нет реализаций, которые действительно
Алан Вулф,
Я немного сбит с толку, что вопрос о трассировке лучей, а этот ответ - о маршевых лучах. Существует фундаментальное различие между ними и тем, чего они могут достичь.
Жюльен Герто
4

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

http://www.lonesock.net/files/ConeStepMapping.pdf https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch18.html

cbuchner1
источник