Игровые спецдефекты

Материал из Posmotre.li
Перейти к: навигация, поиск

В отличие от кинематографических, происходящих в основном по вине постановщиков (как известно, и в 40-е с резиновыми монстриками можно было снять достаточно правдоподобно, при умелых руках) — игровые спецдефекты обычно являются неизбежной данью тому или иному этапу развития пользовательской техники. И темпам прогресса, да: даже теоретически имея возможность на том же самом железе мужественно проблему преодолеть, на это, как правило, требуется лишних эдак полгодика. Раз полгодика, два полгодика — глядишь, не только игра уже не актуальна, но и железо, в рамки которого её запоздало загнали. Плюс нехватка рук: зубробизоны типа Кармака пишут новые движки под новое железо, а недотыкомки, купившие движок Wolf3D, никак уж не в состоянии исправить в нём небо и койки. Кстати, вот с них мы и начнём…

Сюда не писать допустимые геймлейные условности — только намеренные графические решения!

Содержание

[править] Шутеры поколения Wolf3D

[править] Бесперспективная перспектива

Самая адова вещь, которую только можно было заложить в бедный движок. Дело в том, что в игре впервые появились полигоны: это стены, которые строго квадратны, строго 64×64 пиксела, которые перекрывают друг друга только цельными вертикальными линиями, которые строго привязаны к такой же «квадратно-гнездовой» сетке самой карты, но, к счастью, хотя бы при условии рассмотрения их только с одного ракурса могут быть «утоплены» слегка вглубь своей клетки (на этом были сделаны двери и стены-секреты; если удалить в редакторе косяк двери или в некоторых местах толкнуть секрет и быстро обежать его сбоку, чтобы сбоку посмотреть на его движение, становятся видны те «белые нитки», которыми шита эта иллюзия). На таких средствах можно сделать очень, очень мало, и, допустим, обычную койку (состоящую как минимум из двух полигонов, если рассматривать её только с одной стороны — вертикальная поверхность спинки, повёрнутая к герою, и горизонтальная поверхность самой постели) уже не сделать никак. Поэтому койка просто отрисована с одного статичного ракурса и засунута туда спрайтом, и глаз абсолютно отказывается воспринимать её как койку: малейшее движение ломает любую перспективу. Чуть лучше получилось с небом: из-за разрешения 320×200, да ещё и на слабых машинах (т. е. в окошке с почтовую марку), пикселизация пейзажа (особенно ночного) начинает «переливаться» муаром, прекрасно воспринимаясь как очень далёкая. В Spear of Destiny уровень, происходящий «на крыше», смущает нарисованными на верхних частях стен «типа-как-облачками», а вот трэш-поделка NiteMare3D на том же движке давит педаль в пол — на стенах полно «движущихся картин», изображающих пейзаж в окне или движущуюся за стеной механику, абсолютно оскорбляющих зрение.

[править] Шутеры поколения Doom

[править] Ограниченные проекции спрайтов

[править] Непрозрачная синяя вода по щиколотку

Рендер полупрозрачных поверхностей очень сложен, когда им занимается процессор, да и поверхность сложной формы, да и большая к тому же…[1] Приходилось поступать очень просто: погружать героя в пол на полтора дециметра, тупо снижением точки камеры намекая, что он как бы ушёл ногами в как бы жидкий как бы «пол» сектора, ну и максимум ещё нарисовать исходящие от его движений волны на этом полу (очевидно, такие же плоские). Встречалось даже на движке самого Doom, но уже только в фанатских картах, вовсю эксплуатирующих незапланированные багофичи.

В играх с портально-секторной геометрией вода может быть и не по щиколотку, а глубокой, чтобы в неё можно было нырять. Это реализуется путём создания в секторе с водой портала, активирующегося приседанием в воде и телепортирующего игрока в другой, «подводный» сектор. Обычно она являет собой такую же неумолимую синюю границу. Но в продвинутых версиях движка Build (Blood, Shadow Warrior) её таки-сумели сделать бледно-голубой и полупрозрачной. Не везде, правда: в одной и той же игре могут по соседству встречаться непрозрачная синяя и красивенькая прозрачно-голубая вода.

В Quake 2 сделали полупрозрачность, но простейшим образом: в шахматном порядке идут пиксели воды и дна. Похожим образом на софтовых движках делались некие подобия стёкол.

[править] Отображение стен по столбцам

Движки поколения Doom рисовали стены по столбцам и полы с потолками — по строкам. Поэтому, если взглянуть вверх-вниз, перспектива изрядно портится. Прямо под ноги под углом 90° взглянуть в принципе невозможно.

Дело усугубляют спрайты, которые обычно рисуются совсем в другой перспективе. Поэтому в играх наподобие Duke Nukem 3D посмотришь сверху на труп — он лежит косо.

В современных портах с настоящим трёхмерным ландшафтом и теми же спрайтами вообще ужас: смотришь вниз и видишь, как этажом ниже на полу какие-нибудь демоны на жопах елозят и ногами дрыгают, и таким образом бегают лёжа. Как вариант — спрайты всегда вертикальны и потому сверху выглядят картонными. Это не совсем тот же самый спецдефект, но близко к тому. И только VoxelDoom сумел наконец изрубить гордиев узел на корпию — скорей бы уж хотя бы нормальная бетка, а не одни технические альфы.

[править] Спрайтовые клубы дыма

Разного рода огни и дымы требуют большого количества спрайтов (так называемую систему частиц). Каждая частица — полупрозрачная, это изрядная нагрузка на видеоплату. Потому частиц делают мало. Посмотришь глазами стрелка — от ракеты идёт неплохой дым. Сдвинешься — идут такие колечки через метр. Так было и в Hexen, и в Unreal Tournament, и в более поздних играх; более-менее избавились в конце 2000-х.

[править] Симуляторы дотрёхмерной эры

Думаете, первые игры, где была трёхмерность, шутеры? Нет, это были симы. Первый из ПК’шных — Aviator за авторством небезызвестного Джеффа Крэммонда. Впоследствии он же сделал автомобильный REVS.

[править] Зачатки трёхмерности (Quake, Unreal и иже с ними, до 2000)

Больше не будем писать «шутеры поколения» — трёхмерность уравняла все игры в правах. Что шутеры, что гонки, что стратегии…

Разве что стратегии, которым нужно много юнитов, отстают на поколение по качеству моделей. В те времена трёхмерных было мало (Ground Control, Total Annihilation, WarZone 2100; существовали воксельные образчики вроде Myth или C&C: Tiberian Sun). Только WarCraft III (2002), с его рублеными «игрушечными» юнитами, переломил тенденцию; именно с этого момента начался массовый переход стратегий в 3D.

[править] Унаследованы с прошлых поколений

[править] Нехватка полигонов

[править] Спрайт-заместитель

И сейчас делают несколько уровней детализации моделей. Поначалу делали проще: близко — модель, далеко — спрайт. Иногда «далеко» — это были пять-десять метров! В первых стратегиях с 3D вроде Total War трёхмерным был только рельеф местности, а почти все объекты, включая и войска, состояли из спрайтов.

В первых играх для акселераторов спрайты-заместители использовались нечасто (полупрозрачные объекты перегружали все подсистемы движка и видеоплаты, один из редких примеров — Grand Prix 3). Зато в программных движках (Descent) их использовали за милую душу.

К спрайтовой графике вернулись около 2000, когда модели уже стали достаточно детальными, а прозрачность — не таким узким местом. Но это уже другой этап.

[править] Спецэффекты в программном режиме и светофильтры в аппаратном

До появления шейдеров программист был ограничен теми эффектами, которые были заложены в видеоплату. Поэтому в программном режиме он мог наложить какой-то постфильтр (пикселизованный экран, если ослеплён в Counter-Strike, колышущуюся воду в Quake). А в Direct3D/OpenGL — нет!

[править] Видна граница уровней детализации текстур

Трилинейная (и тем более анизотропная) фильтрация текстур очень дорога, обходятся билинейной. Когда смотришь на большую поверхность под острым углом (например, на дорогу в гонке, или на большой плац), видишь границы уровней детализации. В Minecraft и по сей день видна та резкая линия, где рельсы или приставная лестница внезапно превращаются в кашу.

[править] Низкая дальность прорисовки

Даже несчастная сотня многоугольников может немало затормозить игру. Поэтому в закрытых пространствах делали вечные коридорчики, тамбурчики и поворотики, разрывающие обзор. А в открытых — рисовали очень близко (подчас на 10 метров). Оттуда родом штамп «дистанционный туман».

[править] Ошибки и условности анимации

Игру не стоит делать реалистичной. Поэтому, например, во многих шутерах не реализовано движение ползком — персонаж идёт на корточках. Или бегать можно не только вперёд, но и назад. И как такое анимировать? К тому же для большей красоты комбинируют готовую и алгоритмическую анимацию, а людям свойственно ошибаться.

Два примера из одной игры, ставшие мемами — крабошпион и запутывающиеся ноги разведчика в Team Fortress 2.

Человек может бочком протиснуться в узкий проход, поэтому часто делают, чтобы хитбокс не совпадал с фигурой персонажа — так что руки иногда проваливаются в текстуры.

[править] Развитие видеоускорителей (до середины 2000-х)

[править] Унаследованы с прошлых поколений

[править] Видна смена уровня детализации объектов

Если и делают спрайты-заместители, то ставят их очень далеко. Зато модель уже не делают из минимума многоугольников, лишь бы форма узнавалась — поэтому появляются уровни детализации моделей. Для этих уровней детализации трилинейную фильтрацию уже никак не сделаешь, можно только сменять скачком. Артефакт хорошо заметен в Mafia: The City of Lost Heaven, когда у машины вдруг появляются стёкла!

[править] Глюки рэгдоллов

Основная статья: Рэгдолл

В 2000 году вышел Hitman: Codename 47, ставший пионером алгоритмической анимации (так уж вышло, что без рэгдоллов там никак, ведь таскать трупы — часть геймплея). С тех пор и повелось: там, где персонаж себя не контролирует, анимировать алгоритмически. Алгоритмы там, как правило, простые (разностная схема Верле плюс кое-какие ограничения), потому трупы часто неестественно выворачиваются.

[править] Современность (примерно 2007 и далее)

Прошлые пункты захватывали 4–5 лет, этот — почти 10. Причин этому много.

[править] Унаследованы с прошлых поколений

[править] Края объекта не несут рельеф

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

[править] Общая пластиковость внешнего вида

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

[править] Заботливо замазанные ограничения слабого «железа»

Основная статья: Мыльное кинцо

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

[править] Шутеры (всех поколений)

[править] Невозможно увидеть ноги

С появлением трёхмерности можно смотреть по полной сфере, 4π стерадиан. А ноги-то свои не увидишь никак!

Исключения можно пересчитать по пальцам, даже на 2016 год.

[править] Большая пушка пересекается со стеной

Точнее, несложными алгоритмическими трюками делают, чтобы не пересекалась, хотя, по идее, должна.

[править] Гонки (всех поколений)

[править] Адаптация интерьера кабины под мониторный угол зрения и прикрученный к столу контроллер-руль

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

В первых трёхмерных гонках (The Need for Speed, IndyCar 2, Grand Prix 2) была вообще старательно прорисованная двухмерная кабина.

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

[править] Адаптация гоночной сигнализации под мониторный угол зрения

[править] Странное поведение рук пилота

  1. У всех машин, кроме картов, руль ходит как минимум на 3/4 оборота в каждую сторону. В гонках — часто на 120°, и всё.
  2. Когда реальный пилот за компьютером нажал на кнопку переключения, виртуальный пилот всё ещё держит руки на руле. Потому рука едва ли не телепортируется к рычагу.

Потому хардкорные симуляторы часто отключают виртуальные руки (а то и виртуальный штурвал).

[править] Примечания

  1. В 256-цветовых режимах существовал очень простой и быстрый (по сравнению с тупым суммированием RGB) способ отображения прозрачных объектов. Для каждого из типов прозрачности готовим таблицу 256×256: что впереди, что на фоне — что в результате будет. Для поверхностей с априори ограниченными цветами (16 оттенков синего для воды, 4 оттенка серого для стекла, 32 оттенка оранжевого и красного для огня и т. д.) можно было брать меньшие таблицы — 256×16, 256×4, 256×32. Использовалось в продвинутых версиях движка Doom — Heretic, Hexen, порты Doom. Особым образом собрав таблицу, можно сделать, чтобы огонь был прозрачным, а палка — нет, при том, что весь факел — один спрайт! Каждая таблица занимала 64k памяти, таблиц обычно делали четыре-пять для разных видов объектов, да и на первых порах такты приходилось жёстко экономить — потому применяли уже в играх с хорошими требованиями вроде ЦП 80486, ОЗУ 8 мегабайт. Да и, учитывая то, что для каждого пиксела пришлось бы рендерить воду, дно и залезть в таблицу — дальше спрайтов по понятной причине дело не пошло.
Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты