Рэй кастинг - Ray casting
Рэй кастинг является методологической основой трехмерного моделирования CAD / CAM и визуализации изображений. По сути, это то же самое, что и трассировка лучей для компьютерной графики, где виртуальные световые лучи «отбрасываются» или «отслеживаются» на своем пути от фокальной точки камеры через каждый пиксель в датчике камеры, чтобы определить, что видно вдоль луча в трехмерной сцене. Термин «Ray Casting» был введен Скоттом Ротом в исследовательских лабораториях General Motors с 1978 по 1980 годы. Его статья "Ray Casting для моделирования твердых тел"[1], описывает смоделированные твердые объекты путем объединения примитивных твердых тел, таких как блоки и цилиндры, с помощью операторов множества union (+), пересечения (&) и разницы (-). Общая идея использования этих бинарных операторов для твердотельного моделирования во многом принадлежит группе геометрического моделирования Фолькера и Реквича в Университете Рочестера.[2][3]. Видеть Твердотельное моделирование для широкого обзора методов твердотельного моделирования. На этом рисунке справа показан U-образный шарнир, смоделированный из цилиндров и блоков в двоичном дереве с использованием системы литья лучей Рота, около 1979 года.
Перед преобразованием лучей (и трассировкой лучей) алгоритмы компьютерной графики проецировали поверхности или края (например, линии) из трехмерного мира на плоскость изображения, где должна была применяться логика видимости. Проекция плоскости изображения на мир представляет собой преобразование трехмерной однородной системы координат (также известное как: 3D проекция, аффинное преобразование, или проективное преобразование (Гомография )). Рендеринг изображения таким способом трудно добиться с помощью удаления скрытых поверхностей / краев. Кроме того, силуэты изогнутых поверхностей должны быть явно решены, поскольку это неявный побочный продукт литья лучей, поэтому нет необходимости явно решать его при изменении вида.
Приведение лучей значительно упростило рендеринг трехмерных объектов и сцен, поскольку линия трансформируется в линию. Таким образом, вместо проецирования изогнутых краев и поверхностей в трехмерной сцене на плоскость двухмерного изображения, преобразованные линии (лучи) пересекаются с объектами в сцене. Однородное преобразование координат представлено матрицей 4x4. Математический прием является общим для компьютерной графики и геометрического моделирования.[4] Преобразование включает в себя повороты вокруг трех осей, независимое масштабирование по осям, переводы в 3-D и даже наклон. Преобразования легко объединяются с помощью матричной арифметики. Для использования с матрицей 4x4 точка представлена как [X, Y, Z, 1], а вектор направления представлен как [DИкс, Dу, Dz, 0]. (Четвертый термин предназначен для перевода и не применяется к векторам направления.)
Упрощая математику, алгоритм преобразования лучей требует значительных вычислительных ресурсов. Pixar имеет большие фермы рендеринга, здания с тысячами процессоров, для создания своей анимации с использованием трассировки лучей (также известной как «лучи-кастинг»] в качестве основной техники.
Концепция
Из реферата к статье "Ray Casting for Modeling Solids": Для визуализации и анализа смоделированных составных твердых тел в качестве зондов используются виртуальные световые лучи. В силу своей простоты метод ray casting надежен и расширяем. Самая сложная математическая задача - найти точки пересечения линии и поверхности. Таким образом, поверхности в виде плоскостей, квадрик, торов и, возможно, даже параметрических участков поверхности могут ограничивать примитивные тела. Здесь рассматриваются вопросы, связанные с адекватностью и эффективностью использования лучей. Возможность быстрого создания изображений для интерактивного моделирования - самая большая проблема.
Световые лучи и геометрия камеры составляют основу всех геометрических рассуждений. На этом рисунке показана модель камеры-обскуры для эффекта перспективы при обработке изображений и модель параллельной камеры для массового анализа. Простая модель камеры-обскуры состоит из фокальной точки (или точки глаза) и квадратного массива пикселей (или экрана). Прямые световые лучи проходят через массив пикселей, чтобы соединить фокус со сценой, по одному лучу на пиксель. Чтобы затемнить изображения, интенсивность лучей измеряется и сохраняется в пикселях. Отражающая поверхность, отвечающая за значение пикселя, пересекает луч пикселя.
Когда фокусное расстояние, расстояние между точкой фокусировки и экраном бесконечно, то изображение называется «параллельным», потому что все световые лучи параллельны друг другу, перпендикулярны экрану. Хотя перспективный вид является естественным для создания изображений, для некоторых приложений требуются лучи, которые могут быть равномерно распределены в пространстве.
Для удобства моделирования типичная стандартная система координат для камеры имеет экран в плоскости X-Y, сцену в полупространстве + Z и точку фокусировки на оси -Z.
Луч - это просто прямая линия в трехмерном пространстве модели камеры. Его лучше всего определить как вектор направления в параметризованной форме как точку (X0, Y0, Z0) и вектор направления (Dx, Dy, Dz). В этой форме точки на линии упорядочены и доступны через один параметр t. Для каждого значения t определяется соответствующая точка (X, Y, Z) на прямой:
Х = Х0 + t · DИкс Y = Y0 + t · Dу Z = Z0 + t · Dz
Если вектор нормализован, то параметр t - это расстояние вдоль линии. Вектор можно легко нормализовать с помощью следующих вычислений:
Dist = √ (DИкс2 + Dу2 + Dz2) DИкс = DИкс / Dist Dу = Dу / Dist Dz = Dz / Dist
Учитывая геометрические определения объектов, каждый из которых ограничен одной или несколькими поверхностями, результат вычисления пересечения одного луча со всеми ограниченными поверхностями на экране определяется двумя массивами:
Параметры луча: т[1], т[2], ..., т[n] Указатели на поверхности: S [1], S [2], ..., S [n]
где n - количество пересечений лучей и поверхностей. Упорядоченный список параметров лучей т[i] обозначают точки входа-выхода. Луч входит в твердое тело в точке т[1], съезд т[2], входит в твердое тело при т[3] и т. Д. Пункт т[1] находится ближе всего к камере и т[n] самый дальний. В сочетании с параметрами луча указатели поверхностей содержат уникальный адрес для информации о пересекаемой поверхности. Поверхность может иметь различные свойства, такие как цвет, зеркальность, прозрачность с / без преломления, полупрозрачность и т. Д. Твердое тело, связанное с поверхностью, может иметь свои собственные физические свойства, такие как плотность. Это может быть полезно, например, когда объект состоит из набора различных материалов, и интерес представляют общий центр масс и моменты инерции.
Применение информации
Три алгоритма, использующие литье лучей, - это рисование линий, создание закрашенных изображений и вычисление объемов и других физических свойств. Каждый алгоритм, учитывая модель камеры, отбрасывает один луч на пиксель на экране. Для вычисления объема разрешение используемого пиксельного экрана зависит от желаемой точности решения. Для штриховых рисунков и затенения изображения разрешение определяет качество изображения.
ЛИНИЙНЫЕ ЧЕРТЕЖИ. Чтобы нарисовать видимые края твердого тела, генерируйте по одному лучу на пиксель, перемещаясь по экрану сверху вниз, влево-вправо. Оцените каждый луч, чтобы идентифицировать видимую поверхность S [1], первый указатель поверхности в отсортированном списке пересечений лучей и поверхностей. Если видимая поверхность в пикселе (X, Y) отличается от видимой поверхности в пикселе (X-1, Y), отобразите вертикальную линию длиной в один пиксель с центром в точке (X-½, Y). Точно так же, если видимая поверхность в точке (X, Y) отличается от видимой поверхности в пикселе (X, Y-1), отобразить горизонтальную линию длиной в один пиксель с центром в точке (X, Y-½). Результирующий рисунок будет состоять только из горизонтальных и вертикальных краев и будет выглядеть неровным в разрешении курса.
Система лучей Рота генерировала изображения твердых объектов справа. Для оптимизации использовались боксы, динамическое ограничение и согласованность. Для каждого изображения на экране была сделана выборка с плотностью около 100x100 (например, 10000) лучей, и новые края были обнаружены с помощью двоичного поиска. Затем все края сопровождались нанесением дополнительных лучей с шагом в один пиксель на двух сторонах краев. Каждое изображение было нарисовано на трубке Tektronix с разрешением 780x780.
ТЕНЁННЫЕ ИЗОБРАЖЕНИЯ. Чтобы сделать закрашенное изображение, снова пролейте на экран один луч на пиксель. Однако на этот раз используйте указатель видимой поверхности S [1] на каждом пикселе, чтобы получить доступ к описанию поверхности. Исходя из этого, вычислите нормаль поверхности в видимой точке. т[1]. Значение пикселя, отображаемая интенсивность света, пропорционально косинусу угла, образованного нормалью к поверхности и вектором источника света к поверхности. Обработка всех пикселей таким образом дает растровое изображение сцены.
ВЫЧИСЛЕНИЕ ОБЪЕМА И МОМЕНТОВ ИНЕРЦИИ. Объем (и аналогичные свойства) твердого тела, ограниченного криволинейными поверхностями, легко вычисляется методом интегрирования «аппроксимирующих сумм», аппроксимируя твердое тело набором прямоугольных параллелепипедов. Это достигается за счет «углубленного» снимка твердого тела в параллельном виде. Если лучи проходят через экран в твердое тело, твердое тело разбивается на объемные элементы. Два измерения параллелепипедов постоянны, что определяется двумерным расположением лучей на экране. Третье измерение является переменным и определяется вычисленной точкой входа-выхода. В частности, если расстояние между лучами на экране по горизонтали и вертикали равно S, то объем, «обнаруживаемый» каждым лучом, равен
S × S × (т[2]-т[1] + т[4]-т[3] + ∙∙∙ + т[n] -т[n-1]) / L
где L определяется как длина вектора направления. (Если уже нормализовано, это равно 1.)
L = √ (DИкс2 + Dу2 + Dz2)
Каждый (т[я]-т[я-1]) / L - длина лучевого сегмента внутри твердого тела.
На этом рисунке показаны параллелепипеды для смоделированного твердого тела с использованием метода лучевого литья. Это использование модели камеры с параллельной проекцией.
Классификация лучей In-Out
На этом рисунке показан пример бинарных операторов в дереве композиции с использованием + и -, где оценивается один луч.
Процедура приведения лучей начинается с вершины дерева композиции твердых тел, рекурсивно спускается вниз, классифицирует луч по отношению к примитивным твердым телам, а затем возвращает дерево, объединяющее классификации левого и правого поддеревьев.
На этом рисунке показано объединение левой и правой классификаций для всех трех бинарных операторов.
Реалистичные закрашенные картинки
Ray casting - это естественный инструмент моделирования для создания затемненных изображений. Система оттенков серого, разработанная Скоттом Ротом и Дэниелом Бассом из GM Research Labs, производила изображения на цветном растровом дисплее Ramtek примерно в 1979 году. Для создания изображений система предоставляла пользователю следующие элементы управления:
Вид • Направление и положение обзора • Фокусное расстояние: от горизонтальной перспективы до параллели • Коэффициент масштабирования
Освещение • Количество источников света • Расположение и сила света • Опционально тень • Интенсивность окружающего света и фона
Отражение поверхности •% отражено диффузно •% отражено зеркально •% передано
На этом рисунке показана сцена на столе с тенями от двух точечных источников света.
Алгоритмы затенения, реализующие все реалистичные эффекты, требуют больших вычислительных ресурсов, но относительно просты. Например, на следующем рисунке показаны дополнительные лучи, которые можно использовать для одного источника света.
Для одного пикселя изображения, который нужно визуализировать, алгоритм отбрасывает луч, начиная с фокусной точки, и определяет, что он пересекает полупрозрачный прямоугольник и блестящий круг. Затем должен быть брошен дополнительный луч, начиная с этой точки в направлении, симметрично противоположном нормали к поверхности в точке пересечения луча и поверхности, чтобы определить, что видно в зеркальном отражении. Этот луч пересекает непрозрачный треугольник. Наконец, каждая точка пересечения луча и поверхности проверяется, чтобы определить, находится ли она в тени. Луч «теневого щупа» направляется от точки пересечения луча с поверхностью к источнику света, чтобы определить, не преграждает ли какая-либо другая поверхность этот путь.
Тернер Уиттед называет вторичный и дополнительный лучи «Рекурсивной трассировкой лучей».[5]. [Комната с зеркалами будет дорого стоить для рендеринга, поэтому разумно ограничить количество рекурсий.] Белое моделирование преломления для прозрачных пленок путем генерации вторичного луча из точки видимой поверхности под углом, определяемым показателем преломления твердого тела. Затем вторичный луч обрабатывается как зеркальный луч. Формулу преломления и наглядные примеры см. В статье Уиттеда.
Корпуса и эффективность
Кастинг лучей квалифицируется как метод грубой силы для решения проблем. Минимальный алгоритм прост, особенно с учетом его многочисленных приложений и простоты использования, но приложения обычно излучают много лучей. Для визуализации одного кадра анимационного фильма можно использовать миллионы лучей. Время компьютерной обработки увеличивается с увеличением разрешения экрана и количества примитивных твердых тел / поверхностей в композиции.
За счет использования минимальных ограничивающих рамок вокруг твердых тел в дереве композиции исчерпывающий поиск пересечения лучей и твердых тел напоминает эффективный двоичный поиск. Алгоритм грубой силы выполняет исчерпывающий поиск, потому что он всегда посещает все узлы в дереве, преобразуя луч в локальные системы координат примитивов, проверяя пересечения лучей с поверхностью и комбинируя классификации, даже если луч явно не попадает в твердое тело. Чтобы обнаружить «явный промах», более быстрый алгоритм использует дерево двоичных композиций как иерархическое представление пространства, которое занимает сплошная композиция. Но вся информация о положении, форме и размере хранится на листьях дерева, где находятся примитивные твердые тела. Верхний и промежуточный узлы в дереве определяют только операторы объединения.
Описание с помощью вложений пространства, которое заполняют все твердые тела, дает всем узлам в дереве абстрактную сводку информации о положении и размере. Затем быстрые тесты «луч пересекает корпус» направляют поиск в иерархии. Когда тест не проходит на промежуточном узле в дереве, луч гарантированно классифицируется как не входящий в состав, поэтому повторный просмотр его поддеревьев для дальнейшего исследования не требуется.
Точно оценить экономию затрат при использовании вложений сложно, потому что это зависит от пространственного распределения примитивов (распределения сложности) и от организации дерева композиции. Оптимальные условия:
- Никакие примитивные корпуса не перекрываются в пространстве
- Дерево композиции сбалансировано и организовано таким образом, что субтвердые тела, находящиеся поблизости в космосе, также находятся поблизости в дереве.
Напротив, худшее состояние:
- Все примитивные вложения взаимно перекрываются
Ниже приведены различные улучшения производительности, сделанные в статье Рота о приведении лучей, но впоследствии были внесены значительные улучшения другими.
- Ранние выходы. Если оператор в составном узле в дереве - или & и луч классифицируется как выходящий из левого субтвердого тела, тогда луч будет классифицирован как выходящий из составного, независимо от классификации луча относительно правого субтела. твердый. Таким образом, в классификации луча относительно правильного субтвердого тела нет необходимости, и этого следует избегать для повышения эффективности.
- Трансформации. Первоначально комбинируя преобразование экрана в сцену с преобразованием примитива из сцены в локальное и сохраняя полученные преобразования из экрана в локальные в структурах данных примитива, устраняется одно преобразование луча на пересечение луча и поверхности.
- Рекурсия. Учитывая глубокое дерево композиции, рекурсия может быть дорогостоящей в сочетании с выделением и освобождением памяти. Рекурсию можно моделировать, используя статические массивы в виде стеков.
- Динамическое ограничение. Если должны отображаться только видимые края твердого тела, алгоритм преобразования лучей может динамически ограничить луч, чтобы прервать поиск. То есть, обнаружив, что луч пересекает субтвердое тело, алгоритм может использовать ближайшую к экрану точку пересечения, чтобы ужесточить границу глубины для теста «прямоугольник пересечения лучей». Это работает только для + части дерева, начиная с вершины. С помощью - и & соседние «входящие» части луча могут позже стать «выходящими».
- Согласованность. Принцип согласованности заключается в том, что поверхности, видимые в двух соседних пикселях, скорее всего, будут одинаковыми, чем разными. Разработчики компьютерной графики и систем машинного зрения применили эту эмпирическую истину для повышения эффективности и производительности. Для штриховых рисунков область изображения, содержащая края, обычно намного меньше, чем общая область изображения, поэтому отбрасывание лучей должно быть сосредоточено вокруг краев, а не в открытых областях. Это может быть эффективно реализовано путем редкой выборки на экране лучей и последующего определения местоположения, когда соседние лучи идентифицируют различные видимые поверхности, края посредством двоичного поиска.
Сглаживание
Неровные края, вызванные наложением спектров, являются нежелательным эффектом методов точечной выборки и являются классической проблемой алгоритмов отображения растров. Линейные или плавно изогнутые края будут выглядеть неровными и особенно нежелательны в анимации, потому что движение изображения делает края нечеткими или похожими на маленькие движущиеся эскалаторы. Также могут быть потеряны детали в сцене, меньшие расстояния между лучами. Неровные края на чертеже линии можно сгладить, следуя кромкам. Цель такого алгоритма - минимизировать количество линий, необходимых для рисования изображения с точностью до одного пикселя. Результат - ровные края. Приведенные выше линейные рисунки были нарисованы таким образом.
Чтобы сгладить неровные края затененного изображения с точностью до субпикселей, необходимо использовать дополнительные лучи для получения информации о краях. (Видеть Суперсэмплинг для общего подхода.) Края образуются пересечением поверхностей или профилем криволинейной поверхности. Применяя «Когерентность», как описано выше, с помощью двоичного поиска, если видимая поверхность в пикселе (X, Y) отличается от видимой поверхности в пикселе (X + 1, Y), то луч может быть сгенерирован на полпути в (X + ½, Y) и идентифицированная видимая поверхность. Расстояние между точками выборки можно разделить дальше, но поиск необязательно должен быть глубоким. Первичная глубина поиска для сглаживания неровных краев зависит от градиента интенсивности по краю. Так как (1) область изображения, содержащая края, обычно составляет небольшой процент от общей площади, и (2) дополнительные лучи, отбрасываемые при двоичном поиске, могут быть ограничены по глубине (то есть видимых примитивов, образующих края), стоимость для сглаживание неровных краев доступно.
История лучевого литья
Историю использования Ray Casting см. трассировка лучей (графика) потому что оба в основном одно и то же. Скотт Рот изобрел термин «трассировка лучей» до того, как услышал о «трассировке лучей». Разработка Скоттом Ротом методов трассировки лучей в GM Research Labs происходила одновременно с работой Тернера Уиттеда по трассировке лучей в Bell Labs.
Кастинг лучей в ранних компьютерных играх
Вольфенштейн 3D
Мир в известной видеоигре Вольфенштейн 3D был построен из квадратной сетки стен с одинаковой высотой и одноцветных полов и потолков. Чтобы нарисовать мир, для каждого столбца экрана был нарисован один луч. пиксели и вертикальный кусок стены текстура был выбран и масштабирован в зависимости от того, где в мире луч попадает в стену и как далеко он проходит до этого.[6]
Уровни, основанные на сетке, преследовали двоякую цель: столкновения лучей со стенками можно было обнаружить быстрее, поскольку потенциальные попадания стали более предсказуемыми, а накладные расходы на память уменьшились. Однако кодирование широко открытых областей требует дополнительного места.
Команчи серии
В Воксельное пространство двигатель разработан НоваЛогик для Команчи игры проследил луч через каждый столбец пикселей экрана и проверил каждый луч по точкам в карта высот. Затем он преобразовал каждый элемент карты высот в столбец пикселей, который определил, какие из них являются видимыми (то есть не были перекрыты пикселями, которые были нарисованы впереди), и нарисовал их соответствующим цветом из карты текстуры.[7]
Настройка вычислительной геометрии
Эта секция нуждается в расширении. Вы можете помочь добавляя к этому. (Май 2010 г.) |
В вычислительная геометрия, проблема преобразования лучей также известна как проблема со стрельбой и может быть сформулирована как следующая проблема запроса: задан набор объектов в d-мерное пространство, предварительно обработать их в структура данных так что для каждого луча запроса можно быстро найти начальный объект, на который попал луч. Проблема исследовалась для различных настроек: размерность пространства, типы объектов, ограничения на запрос лучей и т. Д.[8] Один из способов - использовать разреженное воксельное октодерево.
Смотрите также
Рекомендации
- ^ Рот, Скотт Д. (февраль 1982 г.), "Ray Casting для моделирования твердых тел", Компьютерная графика и обработка изображений, 18 (2): 109–144, Дои:10.1016 / 0146-664X (82) 90169-1
- ^ Voelker, H.B .; Реквича, А.А.Г. (декабрь 1977 г.). «Геометрическое моделирование механических деталей и процессов». Компьютер. 10.
- ^ Реквича, А.А.Г. (декабрь 1980 г.). «Представление для твердых тел: теория, методы и системы». Опросы ACM Computing. 12.
- ^ .Newman, W .; Спроул, Р. (декабрь 1973 г.). Принципы интерактивной компьютерной графики. Макгроу-Хилл.
- ^ Уиттед, Тернер (июнь 1980 г.), «Улучшенная модель освещения для затемненного дисплея», Коммуникации ACM, 23 (6): 343–349
- ^ Учебник по методу лучей в стиле Wolfenstein Ф. Пермади
- ^ Андре Ламот. Черное искусство программирования 3D-игр. 1995, стр. 14, 398, 935-936, 941-943. ISBN 1-57169-004-2.
- ^ «Съемка лучей, порядок глубины и удаление скрытых поверхностей», Марк де Берг, Springer-Verlag, 1993, ISBN 3-540-57020-9, 201 с.