Введение

Методологическая основа для 3D CAD/CAM твердотельного моделирования и рендеринга изображений
Излучение лучей является методологической основой для 3D CAD/CAM твердотельного моделирования и рендеринга изображений. По сути, это то же самое, что и трассировка лучей в компьютерной графике, где виртуальные лучи света "испускаются" или "отслеживаются" по пути от фокусной точки камеры через каждый пиксель сенсора камеры, чтобы определить, что видно вдоль луча в 3D-сцене. Термин "Ray Casting" был введен Скоттом Ротом во время работы в исследовательских лабораториях General Motors в период с 1978 по 1980 год. В его статье "Ray Casting for Modeling Solids" описывается моделирование твердых объектов путем комбинирования примитивных тел, таких как блоки и цилиндры, с использованием множественных операций объединения (+), пересечения (&) и вычитания ( ). Общая идея использования этих бинарных операций для твердотельного моделирования во многом принадлежит группе геометрического моделирования Воэлькера и Рекихи из Университета Рочестера. Подробный обзор методов твердотельного моделирования см. в разделе "Твердотельное моделирование". На рисунке справа показан карданный вал, смоделированный из цилиндров и блоков в двоичном дереве с использованием системы Ray Casting Ротта в 1979 году. До появления Ray Casting (и трассировки лучей) алгоритмы компьютерной графики проецировали поверхности или кромки (например, линии) из 3D-мира на плоскость изображения, где применялась логика видимости. Проекция из мира в плоскость изображения представляет собой преобразование однородной системы координат в 3D (также известное как: 3D-проекция, аффинное преобразование или проективное преобразование (гомография)). Рендеринг изображения таким способом затруднен из-за необходимости удаления скрытых поверхностей/кромок. Кроме того, силуэты изогнутых поверхностей необходимо вычислять явно, в то время как при использовании Ray Casting они являются неявным побочным продуктом, поэтому нет необходимости вычислять их при изменении угла обзора. Ray Casting значительно упростил рендеринг 3D-объектов и сцен, поскольку линия отображается в линию. Таким образом, вместо проецирования изогнутых кромок и поверхностей из 3D-сцены на 2D-плоскость изображения, трансформированные линии (лучи) пересекаются с объектами в сцене. Преобразование однородных координат представлено матрицей 4x4. Этот математический метод широко используется в компьютерной графике и геометрическом моделировании. Преобразование включает в себя вращения вокруг трех осей, независимое масштабирование по осям, перемещения в 3D и даже сдвиг. Преобразования легко объединяются с помощью матричной арифметики. Для использования с матрицей 4x4 точка представляется как [X, Y, Z, 1], а вектор направления – как [Dx, Dy, Dz, 0]. (Четвертый элемент предназначен для перемещения и не применяется к векторам направления.)

Классификация входящих и исходящих лучей

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

Антиализинг

Неровные края, вызванные алиасингом, являются нежелательным эффектом методов точечной выборки и представляют собой классическую проблему для растровых алгоритмов отображения. Линейные или плавно изогнутые края будут выглядеть зазубренными и особенно заметны в анимации, поскольку движение изображения делает края размытыми или похожими на маленькие движущиеся эскалаторы. Кроме того, в сцене могут быть потеряны детали, меньшие, чем расстояние между лучами. Зазубренные края на линейном рисунке можно сгладить, следуя по контуру края. Цель такого алгоритма – минимизировать количество линий, необходимых для отрисовки изображения с точностью до одного пикселя. В результате получаются гладкие края. Приведенные выше линейные рисунки были созданы таким образом. Для сглаживания зазубренных краев в затененном изображении с субпиксельной точностью следует генерировать дополнительные лучи для получения информации о краях. (См. Суперсэмплинг для общего подхода.) Края формируются в результате пересечения поверхностей или профиля изогнутой поверхности. Применяя "Когерентность", как описано выше, с помощью бинарного поиска, если видимая поверхность в пикселе (X, Y) отличается от видимой поверхности в пикселе (X+1, Y), то можно сгенерировать луч посередине между ними в точке (X+½, Y) и определить видимую поверхность в этой точке. Расстояние между точками выборки можно дополнительно разделить, но глубина поиска не должна быть большой. Основная глубина поиска для сглаживания зазубренных краев является функцией градиента интенсивности вдоль края. Поскольку (1) область изображения, содержащая края, обычно составляет небольшой процент от общей площади, и (2) дополнительные лучи, генерируемые при бинарном поиске, могут быть ограничены глубиной – видимостью примитивов, формирующих края – стоимость сглаживания зазубренных краев является приемлемой.

История лучевого литья

Для истории трассировки лучей см. статью «Трассировка лучей (графика)», поскольку обе техники по сути являются одной и той же, но под разными названиями. Скотт Рот придумал термин «ray casting» до того, как узнал о «ray tracing». Кроме того, разработка Скоттом Ротом ray casting в лабораториях GM Research Labs происходила одновременно с работой Тернера Уиттеда над трассировкой лучей в лабораториях Bell Labs.

Кастинг в ранних компьютерных играх

В ранних играх от первого лица использовался рейкастинг для эффективного рендеринга 3D-мира из 2D-игрового поля посредством простого одномерного сканирования по горизонтальной ширине экрана. Ранние шутеры от первого лица использовали 2D-рейкастинг как технику для создания 3D-эффекта из 2D-мира. Хотя мир кажется трехмерным, игрок не может смотреть вверх или вниз, либо только в ограниченных углах с искажением сдвига. Этот стиль рендеринга избавляет от необходимости вычислять луч для каждого пикселя в кадре, как это делается в современных движках; как только найдена точка пересечения, к текстуре поверхности применяется искажение проекции, и вся вертикальная колонка копируется из полученного результата в кадр. Этот стиль рендеринга также накладывает ограничения на типы выполняемого рендеринга, например, возможна сортировка по глубине, но буферизация глубины – нет. То есть, полигоны должны полностью перекрывать друг друга, они не могут частично пересекаться или накладываться друг на друга.

Вольфенштейн 3D

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

Теневой Кастер

В игре ShadowCaster от Raven Software используется улучшенный движок на основе Wolfenstein с добавлением текстурирования полов и потолков, а также переменной высотой стен.

Серия Команчи

Двигатель Voxel Space, разработанный NovaLogic для игр Comanche, прослеживал луч через каждый столбец пикселей экрана и проверял пересечение каждого луча с точками карты высот. Затем он преобразовывал каждый элемент карты высот в столбец пикселей, определял, какие из них видимы (то есть не перекрыты пикселями, нарисованными поверх), и отрисовывал их соответствующим цветом из текстуры карты.

За пределами излучения

Поздние DOS-игры, такие как DOOM от id Software, сохранили многие ограничения 2.5D ради скорости, но затем перешли к альтернативным методам рендеринга (например, BSP), перестав быть движками, основанными на трассировке лучей.

Настройка вычислительной геометрии

В вычислительной геометрии задача отбрасывания лучей (также известная как задача выстреливания лучами) может быть сформулирована как следующая задача запроса: задан набор объектов в d-мерном пространстве, необходимо предварительно обработать их и представить в виде структуры данных, позволяющей быстро находить первый объект, в который попадает луч запроса. Задача исследовалась в различных условиях: размерность пространства, типы объектов, ограничения на лучи запроса и т.д. Один из подходов – использование разреженного воксельного октадра.