Обучение технологии ray-casting, часть 1

в 11:39, , рубрики: c++, движок, перевод, разработка игр, С++

Двумерное indie… трехмерные AAA-проекты… А может что-то промежуточное?

Приветствую всех читателей. Мною было решено обобщить и перевести замечательную серию статей «Ray-Casting Tutorial For Game Development And Other Purposes» за авторством Ф. Пермади по изучению технологии ray-casting.

image


В данной публикации затронуты и объединены What is Ray-Casting и Ray-Casting vs Ray-Tracing For Game Development оригинальные статьи.

Стоит заметить, что в стремлении создать псевдотрехмерный движок (о чем тоже можно написать статейку) я досконально изучил данный туториал. Надеюсь Думаю, это помогло мне при переводе подобрать наиболее удачные слова а также не потерять смысл написанного.

Ну что ж… Начнем!

Что такое ray-casting?

Ray-casting (далее — бросание) — это технология, которая преобразует ограниченный набор данных (максимально упрощенная карта, либо же план этажа) в 3D проекцию путем «бросания лучей» из точки обзора по всей области видимости. К примеру, на картинке ниже показано, как бросание преобразует что-то двумерное A во что-то почти что трехмерное B.

image

Ray-casting и ray-tracing

Как и ray-casting, ray-tracing (далее — трассировка) «определяет видимую часть поверхности путем бросания воображаемых лучей света из точки обзора в сторону объекта на сцене».

Предыдущие два определения создают видимость, что бросание и трассировка — это одно и то же. На самом деле, некоторые книги вовсе используют оба термина, как взаимозаменяемые. Но тем не менее, с точки зрения gamedev-программистов, бросание лучей стоит рассматривать, как частный случай реализации трассировки.

Бросание быстрее трассировки. Это возможно за счет того, что оно использует некоторые геометрические ограничения для ускорения процесса рендеринга. К примеру, стены всегда перпендикулярны полу (это можно увидеть в таких играх как Doom или же Wolfenstein 3D). Если бы не такие ограничения, то технология бросания не была бы возможна.

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

Принцип

Бросание: лучи выпускаются и движутся группами, основываясь на некоторых геометрических ограничениях. К примеру, на экране с разрешением 320х200 «генератор лучей» выпустит их только в количестве 320 штук (это число мы получаем из следствия, что экран, имеющий ширину в 320 пикселей, имеет и 320 вертикальных столбцов).

Трассировка: каждый луч вычисляется по отдельности, то есть каждая точка на экране монитора (обычно, пиксель) трассируется одним своим лучом. К примеру, на экране с разрешением 320х200 нам необходимы 64 тысячи (320 * 200 = 64000) лучей, что в 200 раз медленнее в сравнение с бросанием.

Формула

Как правило, при бросании допустимы погрешности в вычислениях. При трассировки же все должно быть максимально точным.

Скорость

Бросание в разы быстрее трассировки и подходит для процессов реального времени. Трассировка же ни как не подходит (разве что у нас не имеется ПК с частотой в 500Гц).

Качество

При бросании мы получаем изображение среднего / плохого качества. Можно заметить деление на блочные элементы. При трассировке же картинка максимально реалистичная — иногда даже слишком.

image

Сцена из Wolfenstein 3D. Заметьте, картинка делится на прямоугольные блоки. Объекты (оружие) и враги (собака) — это просто прозрачные растровые изображения, которые масштабированы и отрисованы поверх заднего фона.

image

Сцена из игры 7th Guest. Результат рендеринга поражает. Тем не менее, передвижения игрока ограничены ранее определенными путями (это обусловлено тем, что количество заранее отрендеренных картинок ограничено).

Внешний мир

При бросании мы геометрически ограничены и в распоряжении находятся только простые фигуры. При трассировке же любая фигура может быть отрендерена.

Память

Бросание: отрендеренные изображения не сохраняются на диск. Обычно, только сама карта сцены хранится на носителе, а соответствующие изображения генерируются «на лету».

Трассировка: отрендеренные изображения сохраняются на диск и загружаются оттуда при необходимости. В настоящее время не существует такой аппаратной части, что была бы способна рендерить результат трассировки лучей «на лету».

Примеры

Бросание:

  • Wolfenstein 3D (iD Software)
  • Shadow Caster (Raven)
  • Arena (Bethesda)
  • Doom (iD Software)
  • Dark Forces (LucasArts)

Трассировка:

  • 7th Guest (Trilobyte)
  • Critical Path (Mechadeus)
  • 11th Hour (Trilobyte)
  • Myst (Cyan)
  • Cyberia (Xatrix)

Конец первой части

Автор: 18old-kid

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js