28 февраля 2023 28.02.23 3 445

Идея обнаружения игрока в шутере Return To Castle Wolfenstein

+3

Старт

Сегодня всё же решился написать свой первый блог в последний днем зимы. Дамы и господа, представляю вам на оценку блог об идее обнаружения в шутерах на примере игры Return To Castle Wolfenstein. Необходимо отметить, что автор не является разработчиком игр и выбрал данную игру по собственному желанию. Ёмкость блога звёзд с неба не хватает, но главное, чтобы он был полезен для любого читателя. Можно будет в конце поэкспериментировать с концепцией обнаружения в программе After Effects (для опытных пользователей After Effects).

Return To Castle Wolfenstein
Return To Castle Wolfenstein

Родом из 2001 на научную экспертизу будет взята культовая и легендарная игра Return To Castle Wolfenstein. Однако необходимо отметить такую вещь, что стелс в данной игре это редкость, и данные моменты можно встретить очень редко, да и то только в начале некоторых уровней. Жанр игры как-никак это fps (first person shooter — шутер от первого лица), соответственно, это обычный шутер, где при любом обнаружении все враги тут же знают о вашем расположении. Далее перемещаемся в отдел самой концепции обнаружения в шутерах от первого лица. Естественно основываться будем на двумерном пространстве, которое имеет только x, y координаты. Надо учитывать, что тут будет описана только концепция, которая будет показана на примере квадратиков, которые к игре никак не будут относиться. Итак приступаем к идее. Я советую вам скачать After Effects 2022, т. к. потом каждый из вас сможет поэкспериментировать.

Обнаружение
Обнаружение

Идея обнаружения

Идея, которую представляет автор во внимание, заключается в том, чтобы при использовании компьютерного зрения с отслеживанием изменения значения по одному из цветовых каналов, в нашем случае, по зелёному каналу цветопередачи, оповещать всех NPC на карте. Лучше всего для эксперимента подошли следующие элементы со следующими цветовым значениями по каналу RGB (красный, зелёный и синий):

  • Фон: [165,161,170] Фон не имеет толком роли, просто не хочется показывать концепцию на чёрном фоне.
  • Игрок: [186,46,46] К элементу игрока будет привязано отслеживающая функця по изменению зелёного канала цвета. Как только элемент обзора NPC пройдёт через игрока, то тогда отслеживающая функция обнаружит это событие и тревога на уровне будет поднята.
  • NPC: [82,147,29] (Обзор NPC в виде круга также будет иметь такой же цвет) NPC, имея свой обзор в виде геометрической фигуры, как только задевает элемент игрока, тут же поднимает тревогу через отслеживающую функцию, которая привязана к игроку.

Юху, основные элементы определены и их идеи описаны, которые будут реализованы чуточку ниже. Шустро переходим к реализации концепции для его анализа. Атака и остановка NPC при обнаружении игрока в данном эксперименте не была рассмотрена, т. к. скажу прямо, не хотел заморачиваться с дополнительным программированием в среде выражений After Effects.

Реализация идеи обнаружения

Шагаем теперь в сторону реализаций и экспериментов в среду After Effects 2022. А теперь имеем следующий список, в котором приоритет распределяется снизу вверх (выше — приоритетнее):

  • [Корректирующий слой]: Имеет функцию Sample Image, которая привязана к элементу «Игрок», отслеживает её изменение.
  • [NPC]: Неигровой персонаж, который имеет маршрут, по которому перемещается, соответственно, вместе с ним перемещается элемент «NPC угол обзора».
  • [NPC угол обзора]: Перемещается по x, y координатам вслед за NPC и также поворачивается в ту сторону, в которую поворачивается NPC. Данный элемент имеет такой же цвет, как и NPC, только также имеет 50% прозрачности.
  • [Игрок]: К игроку привязана функция с элемента «Корректирующий слой»
  • [Фон]: Просто для вида, не имеет специфических функций

Рассмотрим на ниже приведённые GIF-файлы

Первым видео мы видим перемещение зелёного квадрата (NPC) с его углом обзора. Число сверху слева — это значение зелёного канала у красноватого квадратика (ИГРОК). Как мы видим, при пересечении Угла обзора об игрока значение вырастает с 46 до 97, затем снова падает до 46, когда NPC не видит игрока.

Мини эксперимент

Вторым видео будет тот же эксперимент, но при этом ниже добавлен текст, что в случае обнаружения поднимается тревога на всём уровне и все противники знают о вашем присутствии и местоположении.

Обнаружение и фиксация обнаружения

Исследование продемонстрировало работоспособность алгоритма обнаружения игрока в игре Return To Castle Wolfenstein, а вернее, данный алгоритм обнаружения крайне близок к алгоритму обнаружения в упомянутой игре ранее.

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

Расположение будет выглядеть так:

After Effects 2022
After Effects 2022

Пойдём снизу вверх по списку из Afrer Effects

[Shape layer] 7-й элемент это фон, он имеет из важного только цвет, необходимо выставить значения заливки (Fill) следующие:

  • R (red): 165
  • G (green): 161
  • B (blue): 170

растягиваем на всё видео окно и ставим «замок», как в списке

[Shape layer] 6-й элемент это игрок, выставляем значения заливки (Fill)

  • R (red): 186
  • G (green): 46
  • B (blue): 46

Далее этот элемент лучше переименовать romaa712

[Shape layer] 5-й элемент это обзор NPC (необходимо создать огромный круг, диаметр которого будет от нижней части до верхней части), называем его SG_Fow и выставляем следующие цвета

  • R (red): 82
  • G (green): 147
  • B (blue): 29

Затем на данный слой необходимо добавить эффект Radial Wipe и настраиваем его следующим образом

Transition Completion: ставим 80%

Start Angle: вставляем код ниже

thisComp.layer("SG").transform.rotation+36;

Wipe Center: вставляем код ниже

thisComp.layer("SG").transform.position

Эффект настроен, теперь необходимо настроить позицию 5-го элемента, для этого необходимо сделать следующее:

перейти во вкладку Position данного слоя и вставить туда следующий код

thisComp.layer("SG").transform.position

[Shape layer] 4-ый элемент это обзор NPC, необходимо его назвать SG

Также желательно анимировать у данного слоя Position и Rotation, чтоб где-то Обзор NPC пересёкся с игроком.

[Adjusment layer] 3-ий элемент, на него кидаем эффект Sample Image и настраиваем эффект

Center: вставляем код ниже

thisComp.layer("romaa712").transform.position

Sampled Color Output: вставляем код ниже

center = effect("Sample Image")(1);
radius = effect("Sample Image")(2);
sampleImage(center, [radius, radius]) 

[Text layer] 2-й элемент это обычный вывод текста [называем его 12122], который будет высчитывать значения зелёного цвета из 1-го элемента

в Source Text вставляем следующий код:

maks = 0
moris = 0
rezult = 'StopGame';
for(i=-40;i<40;i++)
{
	nomer = Number(thisComp.layer("12121").text.sourceText.valueAtTime(time+i))
	if(nomer>maks) { maks = nomer;}
	nomer = maks;
}
for(i=0;i<40;i++)
{
	numer = Number(thisComp.layer("12121").text.sourceText.valueAtTime(time-i))
	if(numer>moris) { moris = numer; }
}
if(maks==moris){ rezult = 'Обнаружен' }
else { rezult = 'Всё спокойно' }
[rezult]
//['Сейчас:' + moris + '\n Максималка' + maks]

[Text layer] 1-й элемент это обычный вывод текста [называем его 12122], который будет высчитывать значения зелёного цвета из 1-го элемента

в Source Text вставляем следующий код:

x = Math.round(thisComp.layer("Adjustment Layer 1").effect("Sample Image")("Sampled Color Output")[1]*255);
[x]

Итоги

Ох, это было сложно, но довольно интересно, ведь весь эксперимент и его проведение было сделано с помощью написания выражений в After Effects, среди анимации в After Effects было только анимация NPC передвижения и поворота, остальное это программирование.

Выводы следующие: эксперимент и анализ результатов эксперимента в среде After Effects дали положительный опыт, с помощью которого у любого читателя данного блога будет иметься представление об моментальном обнаружении в таких играх, как Return To Casle Wolfenstein.


Return to Castle Wolfenstein

Платформы
PC | Mac | Linux | PS2 | XBOX | X360
Жанр
Дата выхода
19 ноября 2001
909
4.4
720 оценок
Моя оценка

Лучшие комментарии

Использовать АЕ для программирования каких-то систем — эт, конечно, МОЩНО.

Предлагаю к ознакомлению

Иван, спасибо за комментарий

В моём случае просто повезло с функционалом, который заложен в AE, благодаря которому появилась идея демонстрации принципа игровой механики обнаружения на примере игры Return To Castle Wolfenstein

Читай также