Краткая история 3D в видео-играх для чайников
В 80-ые интернет и цифровые миры были чем-то загадочным и мистическим, а техно-энтузиасты уже задумывались о трехмерности видеоигровых миров.
Я большой фанат видеоигр, работаю в 3D уже 15 лет, но ни разу не встречал последовательно написанной истории развития 3D-графики в гейм-индустрии и решил написать ее сам. Копнув в историю, я нашел много забавных вещей: например, что первую 3D-игру создали, пользуясь служебным положением, ученые NASA на лучших компьютерах своего времени; как пришли и ушли аркадные автоматы, как эллипсоидный движок Ecstatica позволял делать идеально круглые ягодицы персонажей 94 году и многое другое.
За 40 лет индустрия прошла все этапы взросления — начиная в юности с голого 3D-каркаса (когда рисуются только ребра модели, а грани остаются прозрачными), сегодня в своей зрелости она дала нам микрополигоны, рейтрейсинг и графику уровня кино.
Если вам интересно, как развивались технологии, а с ними и 3D-графика мира фантазий наяву, добро пожаловать под кат. Осторожно, если вы экономите трафик — чтобы наглядно показать развитие графики, я срендерил гифку для каждой новой технологии и они довольно тяжелые.
Пролог. Лаборатории NASA
Maze War — шутер, где игроки перемещаются по лабиринту, другие участники игры представлены на экране в виде глазных яблок
Первой трехмерной игрой был Maze War (1973) — многопользовательский шутер, где игроки в виде глазных яблок перемещаются по лабиринту и убивают друг-друга. Ее создали на лучших компьютерах того времени — Imlac PDS-1 — ценой в 8 тысяч долларов (4 недорогих автомобиля) в свободное время два программиста, работавших в Исследовательском центре Эймса NASA. Движения игроков были дискретными а камера могла поворачиваться ровно на 90 градусов по горизонтальной оси.
Imlac PDS-1. 16 bit. 8 — 16 Kb RAM с магнитным сердечником
А в 1975 году появилась Spasim — трехмерный многопользовательский космический симулятор на 32 игрока.
Spasim — в нее также играли с помощью оборудования ценой в несколько миллионов долларов
Игра также запускалась с помощью устройств недоступным обычному человеку — на компьютерной системе PLATO. Изначально PLATO была разработана для удаленного обучения, но со временем переросла в сетевое сообщество с почтой, чатами, форумами, поисковиками и т.д.
Система состояла из сотни терминалов расположенных в учебных заведениях и была построена вокруг суперкомпьютера CDC Cyber 73, ценой в несколько миллионов долларов. При этом игра работала со скоростью 1 кадр в секунду (1 fps). Создать игру удалось благодаря использованию системы передового программного языка TUTOR.
Компьютерный зал CDC Cyber 170, 1986. 25 Mhz и 8 Mb RAM
Затем 3D игры перестали быть «эксклюзивом секретных лабораторий NASA» и началась эпоха коммерческих и доступных широкой аудитории трехмерных видеоигр.
Предтечи
1980 — Wireframe-каркасы / векторные контуры
Пока понятие «домашний компьютер» лишь зарождалось, а видеоускорители не существовали, передовые игровые технологии разрабатывались для аркадных автоматов. Выход трехмерной игры стал возможным благодаря процессору MOS Technology M6502 (1.512 Mhz), и использованию сопроцессора Math Box. Их производительность позволила рендерить простейший вид трехмерной графики — wireframe.
Wireframe. Отображение только ребер, грани же остаются прозрачными
В 1980 году на аркадном автомате выходит игра Battlezone от Atari. От первого лица игрок управляет танком и перемещаясь по трехмерному полю боя стреляет в другие танки.
Благодаря новизне игрового процесса и трехмерной графике игра долго была популярна и позже в 1983 году была портирована на Atari 2600, а позже и на другие домашние игровые консоли, а также получила ремейк в 1998 году. Игра выглядела как цифровой интернет мир будущего в фантастике XX века (сейчас такой визуальный стиль называют ретро-вейв).
Так было положено начало зарождению видео игровой трехмерной графики.
1983 — Закрашенные полигоны
Следующим шагом естественного развития стало отойти от абстрактной полигональной сетки, и сделать полигоны похожими на поверхность.
Закрашенные полигоны. Полигоны залиты цветом и применяется плоская модель теней
Первой такой игрой стала игра в жанре shoot’em up I, Robot от Atari. Цель игры — пройти 126 уровней, перекрасив красные квадраты в синий цвет, уничтожив щит и глаз Старшего брата. После выпуска игры I, Robot получила негативные отзывы критиков и не окупила затрат на разработку. Было произведено примерно 750—1500 автоматов, некоторые из которых сохранились до сих пор. В настоящее время игровые автоматы для этой игры являются редким предметом коллекционирования, а игра получила запоздалое признание за инновационную трехмерную графику.
В аркадном автомате для I, Robot, использовался 8-разрядный процессор Motorola 6809, мощностью 1,5 Mhz.
1985 — Масштабируемые спрайты
Масштабируемые спрайты. 2D спрайт увеличивается или уменьшался в зависимости от удаления объекта от камеры
Масштабируемые спрайты использовались на аркадном автомате в игре Space Harrier (1985) от SEGA — динамичноом 3D шутере Shoot ’em up от третьего лица в сюрреалистичном мире, наполненном яркими цветами.
Хорошо видно насколько недоставало детализации трехмерным играм тех лет, потому часть разработчиков пользовались «поддельным 3D», используя масштабируемые спрайты.
Чтобы создать ощущение 3D-глубины масштаб спрайта увеличивался или уменьшался в зависимости от удаления объекта от камеры. Хотя это было и не в полной мере 3D, это была уже 16-битная картинка требующая хорошей производительности. В сердце автомата было установлено два 32-битных процессора Motorola 680×0 мощностью в 10 Mhz, а за звук отвечал Yamaha YM2203 (4 Mhz).
Как и предыдущие игры со временем Space Harrier была портирована на домашние игровые системы Sega 32X, Sega Saturn, Sharp X68000, а позже и поставлялась в составе Shenmue для Dreamcast и Xbox.
Space Harrier (1985) сияет своей детализацией на фоне 3D игр того времени
1994 — Великий год в становлении видеоигровой 3D графики
1994 был годом, когда домашние игровые системы стали достаточно мощными, чтобы двигать прогресс игрового 3D. Видеоигровая графика начинает свое шествие навстречу фотореализму.
Так как полигоны — по своей сути это плоскости с прямыми гранями, то чтобы создать сферу из полигонов, требовалось разложить по сферической поверхности огромное количество плоскостей.
Появляется метод затенения по Гуро, который сглаживает цветовые переходы между гранями полигонов. Цвет каждого полигона интерполируется между вершинами, благодаря чему объект выглядит гладким даже при малом количестве граней.
Затенение по Гуро. Сглаживание цветовых переходов между гранями полигонов
Это позволило объектам без жестких граней реалистично реагировать на свет. Star Wars: Tie Fighter (1994) была первой игрой где использовался данный метод. Она вышла на домашнем компьютере под управлением MS-DOS 4.0 и требовала процессор intel i386 и частотой 12-40 Mhz и 2 Mb RAM.
Star Wars: Tie Fighter (1994)
В этом же году выходит первое поколение консолей, способных рендерить 3D: Nintendo 64 и Playstation.
Nintendo 64 — центральный процессор NEC VR4300 (93, 75 Mhz), вспомогательный процессор для обработки графики и звука «Reality Co-Processor» (RCP) частотой в 62,5 Mhz, разделенный внутри на два основных компонента — «Reality Drawing Processor» (RDP) и «Reality Signal Processor» (RSP). Друг с другом компоненты обмениваются данными через 128-разрядную шину с пропускной способностью в 1,0 ГБ/с. RSP — это 8-разрядный целочисленный векторный процессор на основе MIPS R4000. Он программируется микрокодом, что позволяет значительно изменять функциональность процессора, если потребуется, для различных видов работ, точности и загрузки. RSP выполняет геометрические преобразования, обрезку, вычисления связанные с освещением, обработку треугольников, и обладает производительностью примерно в 100 000 полигонов в секунду.
Playstation — центральный процессор — MIPS R3000A-совместимый (R3051) 32-разрядный RISC-микропроцессор, работающий на частоте 33,8688 Mhz, ОЗУ 2 Мб + видео ОЗУ — 1 Мб + аудио ОЗУ — 512 Кб. Что позволяло получить реальную производительность: 360 000 полигонов в секунду/ 180 000 текстурированных и освещенных полигонов в секунду.
В громких промо-материалах того времени маркетологи обещали графику уровня «Истории игрушек» в реальном времени. На деле же из за ограничений мощности консолей пятого поколения 3D имело постоянный эффект подергивания. Консоли не хватало ресурсов чтобы свободно перемещать полигоны в пространстве, и существовала виртуальная 3D сетка-таблица, к ячейкам которой привязывались полигоны. При движении объекта или камеры вершины перескакивали и примагничивались к ближайшей от предпологаемой геометрией ячейке виртуальной таблицы.
Существовала виртуальная 3D сетка-таблица, к ячейкам которой привязывались полигоны. Поэтому создавалось ощущение подергивания поверхностей.
Тем не менее консоли пятого поколения подняли планку графики в домашних видеоиграх и запустил тренд на использование 3D — вышли Need For Speed, Tekken, Super Mario 64.
Все еще 1994. Ecstatica — эллипсоидный движок
В то время, как все практиковали ставшей сегодня традиционным метод полигонального 3D, Эндрю Спенсер пишет движок в котором все состоит из эллипсоидов. Так появляется survival horror игра Ecstatica.
Эллипсоидный подход позволил избавиться от и угловатости низкого полигонажа. Но породило обратную проблему — жесткие грани теперь создавались огромным количеством плотно расположенных друг к другу эллипсоидов. Но тем не менее такая «округлая картинка» удивляла своей детализацией и воспринималась как самостоятельный визуальный стиль.
Эллипсоидный движок. Экзотический подход к созданию 3D из сфер, а не полигонов.
Ecstatica работала на MS-DOS и требовала процессора intel pentium (60 Mhz).
Зрелость. Эпоха шейдеров и видеоускорителей
Производительность устройств росла и развитие технологий рендера продолжилось в нескольких направлениях:
Разница в разрешении текстур в 1998 и 2016 годах. Справа видно что для одного шейдера стали использоваться несколько разных карт.
Затем шейдеры усложнялись и появились отдельные карты для разных характеристик поверхностей: карта нормалей (создает рельеф реагирующий на освещение как если бы это были объемные детали), карта бликов (создает на поверхности места с разной интенсивностью блеска), карта свечения (создает на текстуре места свечения), и отражений (создает отражение динамически изменяющееся в зависимости от расположения камеры), и т.д.
Шейдер 2000 г. (простая текстура цвета), и шейдер 2006 г. (детали на камне реагирующие на угол падения света, поддельные отражения на сферах, мягкие тени)
Далее несколько лет совершенствований уже существующих технологий: Появляются альтернативы Normal Map в виде Parallax map, которые делают объемные элементы текстур еще более реалистичными, совершенствуется screen space reflection, появляется AO, Physically Based Rendering, и т.д. А затем случается следующий эволюционный шаг — рейтрейсинг.
Рейтрейсинг. Метод рендера при котором просчитывается настоящее поведение света и отражений.
Трассировка лучей (Ray tracing; рейтрейсинг) в компьютерных играх — это решение для создания реалистичного освещения, отражений и теней, обеспечивающее более высокий уровень реализма по сравнению с традиционными способами рендеринга. Nvidia Turing, и AMD Radeon 6000 стали первыми GPU, позволяющими проводить трассировку лучей в реальном времени. В этом им помогают нейросети и искусственный интеллект, т.к. чистой производительности, к сожалению, все еще не хватает чтобы рендер происходил в достаточном разрешении.
Вскоре выходит демо Unreal Engine 5 запущенное на Playstation 5 и демонстрирует что в реальном времени можно просчитывать не только свет, тени, но и proxy-геометрию, это такой уровень детализации который используется в кино (полигоны настолько маленькие и их настолько много что они выглядят как шум). Раньше же как правило сначала создавалась высокополигональная модель, затем часть деталей сохранялась только в текстурах а количество полигонов максимально сокращалось на благо оптимизации.
Чуть больше чем за 40 лет от голой полигональной сетки видеоигровая индустрия пришла к настоящему видеореализму.
Демо Unreal Engine 5.
Особенно впечатляет когда включается полигональная сетка. Сравните её с сеткой в Battlezone 1980
Эпилог
Что нового ожидать в видеоигровой графике? Индустрия созрела и, к сожалению, технологии потеряли в своей загадочности. Игровая графика в течение последних 20 лет гналась за кинографикой. Постепенно в рендер в реальном времени приходили технологии из кино. Рендер кадра занимал часы — теперь занимает 1/60 секунды. Видеоигровые технологии догнали кинотехнологии и в чем-то можно сказать перегнали. Хорошо известен пример сериала Мандалорец, где использовался видеоигровой движок Unreal 4. Круг замкнулся.
Технологии стали доступны дома — теперь каждый может делать видеоигры и спецэффекты Голливудского уровня. И не это ли фантастика.
Облачные серверы от Маклауд быстрые и безопасные.
Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!
Классификация игровой 3D графики
Привет, Пикабу)
Продолжаем изучать мир CG игровой индустрии)
Сегодня я хочу поговорить с вами о видах графики в играх. Их очень много. Я постарался как-то сгруппировать их и классифицировать. Возможно многое забыл, не вспомнил, не знал. Дополняйте, это будет полезно и мне и другим читателям) Приступим.
Графика на мобильных устройствах по стилю не отличается от графики на ПК или консолях. Просто на более мощных платформах преобладет стиль реализма, а в мобильных играх мультяшный стиль. По очевидным причинам) Поэтому я не буду разделять игры по этим группам.
Я бы начал с реализма. В реализме выходят почти все трипл-А проекты. Причем сеттинг может быть какой угодно, будь то sci-fi, вестерн или наше время. Градостроители, шутеры, симуляторы и т.д.
Реализация может быть различна. Portal bridge constructor спорный момент) там человечки не очень то реальны, но остальные материалы довольно реалистичны.
«Low Poly Art»
Это целая религия. Люди любят low poly. Года два назад был бум лоу поли. Но и сейчас выходят проекты в этом стиле, довольно высокого качества. Правда часто его смешивают с другими стилями или как-то видоизменяют.
Лоу поли характеризуется чаще всего низкополигональными моделями без сглаживания. То есть отчетливо видно каждый полигон. Текстуры не используют. Каждый полигон имеет один цвет. Так и красят. Ну это как правило. Бывает и текстуры и много чего. Разработчики импровизируют и часто получаются прекрасные визуальные сочетания. Сложность моделей варьируется. Но преобладает минимализм, «чистота» моделей.
«Hand Painted»
Еще одна религия. Чаще всего этот стиль используют в фэнтези. Дота, варкрафт и т.д. Но не только этими играми характеризуется данный стиль. Он может быть с уклоном в комиксы, мультики или даже реализм.
Характеризуется он рисованием текстур от руки. Все тени, блики, а иногда и мелкие детали рисуются на текстуре без геометрии. Хэнд Пэйнтед может быть разный) Мы его еще вспомним дальше) Здесь я скорее привел «классику».
«Cartoon» или мультяшная (казуальная)
По сути и лоу поли и хэнд пэйнтед может быть отнесен к этой группе. Бывает текстуры для такой графики рисуют от руки, бывает не используют текстуры совсем) Но я решил сделать казуальную графику отдельной группой.
Отличительными чертами будет красочность, относительная простота, преувеличение акцентов и нестандартные пропорции) Да, грань очень тонкая, но все таки такие игры отличаются и от лоу поли и от хэнд пэйнтед. Тут уж кто какие цвета подберет, кто сколько полигонов вложит и т.д.)) У каждого автора свой собственный стиль. И игры в такой стилизации приобретают неповторимый стиль автора) И этим они прекрасны)
Как мультики: рик и морти по стилю отличаются от микки мауса или зверополиса) Но по сути все является мультфильмами)
Но все же в казуальной графике можно выделить отдельные подстили с ярко-выраженными отличичтельными чертами) Например.
Пластилиновый стиль) Тут все просто для восприятия) Все сделано из пластилина)
3D pixel art. Как правило низкополигональные модели с пиксельной тектсурой)
А это little big planet) Как мы все хорошо знаем, там картонные и тканевые фигуры)
Ну вот это все, что я смог вспомнить)
Оригинальный визуальный стиль всегда находится в выйгрышном положении по сравнению с тысячами одинаковых игр. Оригинальность может выражаться в необычной рисовке текстур, в необычных чертах персонажей, в необычной геометрии моделей и так далее)
Как устроены игры. Часть 1: 3Д
Вступление
В первую очередь эта статья рассчитана не на тех, кто хочет заниматься 3д, а на обычных геймеров, которые хотят немного лучше понять как устроен процесс разработки игры. На мое решение создание такой рубрики на СГ в большей мере повлияло закрытие YouTube-канала XYZ (они еще выпускают какие-то ролики, но с разработкой они не сильно связаны). Возможно все, о чем будет написано ниже вам известно, и я зря потратил 2 часа.
Я подумал, что начать данную «рубрику» стоит с чего-то понятного всем. Абсолютно все понимают, что игры бывают либо 3дшными, либо 2дшными. Так как 2д я не особо шарю, в качестве темы статьи было выбрано именно 3Д (но вообще в двумерных играх все состоит из плоских картинок, расставленных в разных местах, ничего интересного). Я постарался не писать слишком много и не включать много ненужной информации, но важно понимать, что все о чем пойдет речь ниже довольно сильно упрощено.
Термины
Возможно, некоторые из вас совсем не слышали о «внутреннем мире» 3д и вообще не шарят за всякие, грани, карты нормалей, материалы и т. д. Специально для них я составил небольшой перечень основных понятий, о которых дальше пойдет речь.
Этап 1. Моделирование.
В самом начале 3d-artists (3дшники) берут и в специальных программах создают мэш.
Есть два основных способа это сделать (создать мэш):
Во-первых можно взять кубик и разными инструментами (изменение размера, вращение, выдавливание и много чего еще) пытаться сделать из него то, что тебе нужно. Вы скорее всего знаете, что почти любое 3д состоит из полигонов, что означает многоугольник (существую еще воксели, но про них в другой раз). Базовой формой из которых состоят полигоны является треугольник. Почему не квадрат или не ромб? Используя треугольник можно составить любую форму (из квадратов треугольник довольно сложно сделать). Так вот. На гифке выше можно увидеть как это происходит.
Второй способ похож на лепку из пластилина и зовется скульптингом. «Скульпторы» добавляют на модель кучу полигонов, за счет чего могут, собственно говоря, «лепить» 3д-модели.
Этап 2. Ретополигия и запекание нормалей.
Допустим, вы решили заскульптить какого-нибудь персонажа для своей игры. У вас получилось что-то такое:
Такую модель вы не сможете запихнуть в свою игру никаким образом, так как на ней слишком много полигонов (несколько миллионов) и компьютер будет слишком долго их все обрабатывать. В таких случаях ты садишься и делаешь так называемый «ретоп». В итоге нам нужно получить модель с адекватным (20к — 80к) количеством полигонов. Вкратце это делается примерно так:
Шаг 1. Берем нашу модель после скульптинга. У нее есть своя полигональная сетка. Дальше мы берем и создаем поверх нее новую сетку только с нормальным количеством полигонов. Например, у вас есть модель, у нее есть довольно гладкая поверхность, эта плоская поверхность состоит из 1000 полигонов. Так как плоскую поверхность можно описать пятью-шестью полигонами, мы берем и заменяем эти 400 полигонов пятью-шестью новыми полигонами. Вот примерно так это выглядит на примере 3дшного деда:
Шаг 2. Берем нашу высокополигональную модель, берем нашу, только что созданную, лоуполи модель и запекаем карту нормалей (и возможно displacement map). С помощью карты нормалей можно перенести мелкие детали, без надобности создавать для них отдельные полигоны. То есть морщины на лице деда в игре будут существовать только благодаря карте нормалей.
На скриншоте выше показан материал (слева) и его составные части (справа). Первые три части на картинке справа — это карта нормалей, color map и displaysment map. Color map говорит в какой части модели какой цвет отображать, с помощью displacement map добавляются большие выпуклые детали (такие как выпуклые кирпичи), а с помощью normal map создаются мелкие неровности (в данном случае шероховатости, неровности и сколы на кирпичах)
Важно понимать что normal map и displacement map отличаются по своей сути. Как именно?
Вообще сначала нужно объяснить как происходит обработка изображения перед тем как оно выведется на монитор. В любой сцене (будь то локация в игре или окно в 3д-редакторе) существует источник света (без него будет полная темнота на выходе). Из этого источника во все стороны выходят лучи (типа света). Эти лучи перед тем как попасть в камеру (в жизни тоже мы видим только то, что отразило от себя солнечные лучи, которые потом попали нам в глаз) встречают некоторые объекты. У разных объектов разная поверхность, и луч по-разному одних отражается. За счет этого и происходит обработка изображения. У всех 3д-объектов также есть нормали которые и говорят лучу света как отражаться от той или иной поверхности. Вот как это работает:
И normal и displacement map нужны для того чтобы добавить детализации модели. Но normal map работают за счет, так называемого, фейкового смещения, а displacement map за счет истинного смещения. Начнём с истинного смещения (displacement map). В нем изменяются положение вершин объекта, за счет чего лучи начинают по разному отражаться. В фейковом смещения (normal map) не происходит никаких изменений геометрии. Почему же при использовании normal map, свет все равно начинает отражаться в разные стороны? Normal map изменяет направление нормалей плоскости, поэтому свет начинает отражаться по-другому.
Есть еще много других карт, но делают они примерно тоже самое — добавляют детализацию объекту.
Если нечего не поняли, то вот статья.
Текстуры и материалы.
Тут все намного проще. Есть у вас, скажем, модель. Вы берете и в специальной программе раскрашиваете ее.
После процесса текстурирования и экспорта у вас должна получиться текстура в формате png-изображения.
Если вы делаете игру, то материал для объекта вы будете создавать в движке игры, а не в сторонних программах. В настройках материала можно задать параметры того, как ваша текстура будет отображаться в игре. Например карту нормалей вы тоже будете подключать именно в материал, как отдельное изображение.
Заключение
Надеюсь, некоторые из тех, кто прочитал эту статью нашли в ней что-то полезное для себя. Если есть какие-то замечание, пишите их в комментариях.
Абсолютно все понимают, что игры бывают либо 3дшными, либо 2дшными.
В это время 2.5 D игры :
Если судить по стилю поста, то 2 часть будет про 2д игры. И будет состоять из одного предложения: рисуем спрайты и соединяем их в движке, досвидания.
Всё как-то совсем по верхам. Будто спешим куда-то. Минимум наглядности.
Да и про realtime графику на самом деле ни слова — описан общий для игровой и киношной графики процесс моделинга и шейдинга (да, в киношной графике все те же карты, разве что с ретопологией заморачиваются чуть меньше, потому что могут себе позволить рендерить один кадр час на огромном массиве серверов).
Отдельно непонятно, зачем одновременно displacement (который как раз в играх почти не применяется, потому что для его работы нужно увеличивать количество полигонов, либо руками, либо автоматическим subdivide, что хуже), и normal map, иммитирующий тот же эффект путём шейдинга без изменения геометрии.
И ни слова про PBR, roughness и metallic, адекватное создание материала.
В общем и целом, я считаю себя дилетантом в 3D (т.к. ничего годного за свою жизнь в нём не слепил), но даже я вижу что в статье очень поверхностные знания, которые можно получить в процессе беглого просмотра одного ролика «делаем модель для игры» на ютубе.
Если я представляю себе, что я совсем профан и не шарю, мне сразу становится интересно «а зачем уменьшать количество полигонов, если есть Nanite?» (это достаточно глубокая тема, чтобы по ней можно было отдельную статью написать о том, как хранятся и рендерятся движками разные типы моделей).
А чем первый дед на картинке про ретопологию отличается от последнего? (для наглядности не хватает полигональной сетки на первом деде)
А как выглядит один и тот же материал с разным набором карт? (Очень хорошо бы продемонстрировало то, что, собственно, делают разные типы карт).
И это ж далеко-далеко не всё, потому что помимо моделей есть свет, тени, отражения, шейдеры, пост-эффекты, трансформации и анимации. В итоге на поставленный в заголовке вопрос «как устроены игры» блог отвечает примерно никак, потому что даже про графику в играх рассказывает примерно ничего.


















