В этом посте разберемся, как устроены самые эффектные и впечатляюще трюки с пространством в таких играх, как Antichamber и Superliminal, которые создают иллюзию неевклидова пространства.
Видео для ЛЛ (источник в конце):
Начнем с иллюзии лестницы в Antichamber. Головоломка выглядит так: вы видите две лестницы, красную и синюю. Вы выбираете одну из них, спускаетесь, поворачиваете за угол, и видите ту же самую картину. На этот раз вы думаете, что все поняли, выбираете другую лестницу, по которой спускаетесь, поворачиваете за угол и снова натыкаетесь на прежнюю картину.
Как эти комнаты бесконечно повторяются? Ключевой момент кроется в устройстве коридоров. Итак, у вас есть одна комната с двумя лестницами, и у вас есть коридор, ведущий к лестнице, по которому вы должны вернуться.
Оба варианта с лестницами имеют два идентичных поворота, и все это в точности повторяет коридор, по которому вы подходили к лестницам. Сейчас все они отмечены белым цветом.
То есть вот что происходит на самом деле: когда вы поворачиваете за угол и идете дальше, то просто телепортируетесь в точно такой же коридор, ведущий к лестнице и из-за плоского освещения в игре невозможно определить, когда происходит телепорт, поэтому для вас он кажется совершенно бесшовным.
Такие уловки с телепортом встречаются в игре повсеместно. Иногда это завязано на части стены, на которой нужно сосредоточиться, иногда подвох кроется в окнах, через которое вы можете видеть что-то другое.
Еще один умопомрачительный трюк - этот невозможный куб в музее, в котором со всех сторон вы видите совершенно разные сцены. Но как это возможно?
Трюк очень прост, и он завязан на стенсил-буфере. Видеокарта в компьютере имеет небольшой буфер, который может маскировать и отбрасывать пиксели на нашем экране. Обычно этот буфер используется для маскировки частей нашего экрана с помощью трафаретов, поэтому этот буфер называется буфером трафарета или стенсил-буфером. Но для чего мы можем его использовать? Например, в рендере зеркала заднего вида в игре.
При этом вы не хотите рисовать весь вид сзади автомобиля поверх фронтального вида и вы просто хотите нарисовать его в крошечном прямоугольном зеркале. Для этого мы можем создать трафарет и вид сзади будет отображаться только в тех частях, которые перекрываются трафаретом.
Стенсил-буфер может иметь несколько каналов для отображения. Допустим, у нас есть красный, синий и зеленый каналы. Трафарет, назначенный красному каналу, будет отображать только объекты, предназначенные для этого же красного канала, поэтому если мы посмотрим на панель с этим стенсил-буфером, то сможем увидеть только объекты в красном канале.
Теперь мы создаем еще две таких панели - одну для синего и одну для зеленого канала, и если мы наклеим эти панели вокруг куба и разместим наши объекты внутри, то мы можем видеть, как иллюзия разворачивается в нескольких комнатах в одном и том же пространстве.
Теперь о принудительной перспективе в игре Superliminal.
Идея такая: когда вы берете объекты, и их размер в перспективе остается прежним, в то же время их реальный размер резко меняется, поэтому объекты, которые кажутся нам очень большими, действительно становятся такими в игровом мире. Например, если путь вам преграждает непреодолимая преграда, как на рисунке ниже, то вы просто хватаете ее и приближаете к себе. Таким образом, размеры этого предмета на экране не изменились, но в игре эта шахматная фигура уменьшилась в несколько раз. Но как это работает?
Все это связано с угловыми размерами или, другими словами, с видимым размером объекта с вашей точки зрения. Хитрость заключается в том, чтобы сохранить этот угловой размер одинаковым независимо от расстояния до объекта. И вот как это работает. Если мы посмотрим на формулу ниже, то увидим, что угловой размер определяется двумя переменными - диаметром и расстоянием.
То есть довольно легко сохранить объект одного и того же видимого размера и при этом изменить расстояние до него. Масштаб объекта всегда меняется вместе с расстоянием от него до нас, поэтому, если расстояние становится вдвое больше, то мы просто делаем масштаб также в два раза больше, а если расстояние уменьшилось вдвое, то и масштаб изменился также. Это гарантирует, что наш объект всегда останется того же размера в нашем поле зрения и мы получаем наш эффект принудительной перспективы.
Чтобы это заметить, как только вы поднимете объект, то запомните расстояние и масштаб, и когда мы перемещаем объект, то просто толкаем его как можно дальше к стене, сохраняя его видимый размер таким же, каким мы его запомнили.
Все, что нам теперь нужно сделать, это проверить, как далеко находится объект, и сравнить текущее расстояние с первоначальным расстоянием. То есть соотношение между текущим расстоянием и начальным расстоянием определяет то, насколько мы должны масштабировать наш объект и это дает нам эффект принудительной перспективы.
Спасибо за внимание!
Источник: https://youtu.be/lFEIUcXCEvI