LanskoyGames
@LanskoyGames
Нейросети, C#, C++, Python, и смотри описание:-)

Как работает 3D в современных играх?

Как работает 3D в современных играх? В интернете полно информации про RayCast, но как я понял это было только в 80-х, что потом-сейчас и как это реализовать на C++, Python, C# - не могу найти информации, объясните или прикрепите ссылку с информацией. Я именно спрашиваю про базовую часть, про вещи, типа RayTracing полно информации
  • Вопрос задан
  • 174 просмотра
Пригласить эксперта
Ответы на вопрос 2
saboteur_kiev
@saboteur_kiev Куратор тега Разработка игр
software engineer
Слишком общий вопрос.
В общем случае, raycast, raytracing и другое - это просто различные рализации алгоритм рендеринга для 3d сцен.
Есть готовые движки и библиотеки. Какие-то платные, какие-то бесплатные. Какие-то жрут больше ресурсов, но дают более качественную картинку (достаточную для создания CGI сцен для фильмов на большой экран), какие-то после шлифования напильником достаточны для игры в HD разрешении.

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

Рейкастинг и Рейтрейсинг считай две стороны одной медали, могут работать вместе, просто разные задачи. Например рейкастингом построил видимые объекты, сделал сцену, рейтрейсингом сгладил и добавил реалистичные затенения от разных источников освещения.

Или часть простых теней, например от статичных "угловых" объектов типа здания, для оптимизации обсчитали рейкастингом, а рейтрейсингом объекты от сложных подвижных фигур главного героя.

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

А для современных игроделов есть просто несколько готовых фреймворков/движков - тот же юнити, XRay, Unreal, Godot, которые используют несколько алгоритмов рендеринга, разработчик может выбрать как пользоваться рендерингом, какие алгоритмы для какой сцены/действия использовать. Конечно желательно разбираться глубже, чтобы понимать как дизайнить игру, ибо алгоритм, который хорошо работает на открытых пространствах может хуже работать в тесном помещении, где требуется множество объектов с высокой детализацией. И наоборот.

То есть современные игроделы редко занимаются непосредственно ковыряниями с деталями реализации, скорее уже оптимизируют их микс для своего проекта
Ответ написан
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Точно так же как и в старых играх: математика - обычная геометрия и тригонометрия, а так же физика для динамики и анимации. Задаются точки в трехмерном координатном поле. Из точек формируются ребра (отрезки), из трех точек и ребер формируются полигоны. Из полигонов формируются объекты. А уже из групп объектов формируются сцены, уровни и прочие комплексные вещи. Обычная школьная математика. Сцена находится в трехмерном пространстве, а экран - это обычно двухмерная плоскость, то осуществляется проекция трехмерной сцены на двухмерную плоскость экрана. В отрисовке есть куча хитростей и множество различных механизмов и способов оптимизации. Для анимации объектов используются матрицы, которые описывают масштаб объекта по трём осям, его координаты и положение в пространстве - т.к. это проще, чем каждый раз для движения объекта переписывать все его точки. Сам процесс анимации тоже имеет свои нюансы и тут тоже используется много всяких оптимизаций, математики и физики.
Реализовать на низком уровне простейший движок достаточно просто: мануалов и инструментов в сети полно. Можно как полностью с нуля реализовать так и использовать API видео драйвера.
Полезная ссылка: Build your own 3D Renderer
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы