Введение
Методологическая основа для 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]. (Четвертый элемент предназначен для перемещения и не применяется к векторам направления.)
Ray casting is the methodological basis for 3D CAD/CAM solid modeling and image rendering. It is essentially the same as ray tracing for computer graphics where virtual light rays are "cast" or "traced" on their path from the focal point of a camera through each pixel in the camera sensor to determine what is visible along the ray in the 3D scene. The term "Ray Casting" was introduced by Scott Roth while at the General Motors Research Labs from 1978–1980. His paper, "Ray Casting for Modeling Solids", describes modeled solid objects by combining primitive solids, such as blocks and cylinders, using the set operators union (+), intersection (&), and difference ( ). The general idea of using these binary operators for solid modeling is largely due to Voelcker and Requicha's geometric modelling group at the University of Rochester. See solid modeling for a broad overview of solid modeling methods. This figure on the right shows a U Joint modeled from cylinders and blocks in a binary tree using Roth's ray casting system in 1979. Before ray casting (and ray tracing), computer graphics algorithms projected surfaces or edges (e. g., lines) from the 3D world to the image plane where visibility logic had to be applied. The world to image plane projection is a 3D homogeneous coordinate system transformation (aka: 3D projection, affine transformation, or projective transform (Homography)). Rendering an image in that way is difficult to achieve with hidden surface/edge removal. Plus, silhouettes of curved surfaces have to be explicitly solved for whereas it is an implicit by product of ray casting, so there is no need to explicitly solve for it whenever the view changes. Ray casting greatly simplified image rendering of 3D objects and scenes because a line transforms to a line. So, instead of projecting curved edges and surfaces in the 3D scene to the 2D image plane, transformed lines (rays) are intersected with the objects in the scene. A homogeneous coordinate transformation is represented by 4x4 matrix. The mathematical technique is common to computer graphics and geometric modeling. A transform includes rotations around the three axes, independent scaling along the axes, translations in 3D, and even skewing. Transforms are easily concatenated via matrix arithmetic. For use with a 4x4 matrix, a point is represented by [X, Y, Z, 1] and a direction vector is represented by [Dx, Dy, Dz, 0]. (The fourth term is for translation and that does not apply to direction vectors.)
Классификация входящих и исходящих лучей
На рисунке показан пример двоичных операторов в дереве композиции, использующих операции сложения (+) и вычитания (-), применительно к одному лучу. Процедура трассировки лучей начинается с вершины дерева твердотельной композиции, рекурсивно спускается к нижнему уровню, классифицирует луч по отношению к базовым геометрическим примитивам, а затем возвращается вверх по дереву, комбинируя классификации левого и правого поддеревьев. На рисунке иллюстрируется комбинирование классификаций левого и правого поддеревьев для всех трех двоичных операторов.
Антиализинг
Неровные края, вызванные алиасингом, являются нежелательным эффектом методов точечной выборки и представляют собой классическую проблему для растровых алгоритмов отображения. Линейные или плавно изогнутые края будут выглядеть зазубренными и особенно заметны в анимации, поскольку движение изображения делает края размытыми или похожими на маленькие движущиеся эскалаторы. Кроме того, в сцене могут быть потеряны детали, меньшие, чем расстояние между лучами. Зазубренные края на линейном рисунке можно сгладить, следуя по контуру края. Цель такого алгоритма – минимизировать количество линий, необходимых для отрисовки изображения с точностью до одного пикселя. В результате получаются гладкие края. Приведенные выше линейные рисунки были созданы таким образом. Для сглаживания зазубренных краев в затененном изображении с субпиксельной точностью следует генерировать дополнительные лучи для получения информации о краях. (См. Суперсэмплинг для общего подхода.) Края формируются в результате пересечения поверхностей или профиля изогнутой поверхности. Применяя "Когерентность", как описано выше, с помощью бинарного поиска, если видимая поверхность в пикселе (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-мерном пространстве, необходимо предварительно обработать их и представить в виде структуры данных, позволяющей быстро находить первый объект, в который попадает луч запроса. Задача исследовалась в различных условиях: размерность пространства, типы объектов, ограничения на лучи запроса и т.д. Один из подходов – использование разреженного воксельного октадра.