Gamedev
Artyom Kaleev
12 382

Как Portal устроена за кадром Материал редакции

Волшебное слово — noclip.

В закладки
Аудио

Технической начинке Portal свойственны особенности любой другой игры на Source — из-за открытого SDK можно легко понять назначение многих объектов и принципы работы движка в целом. А благодаря удобной консоли возможность заглянуть за пределы уровней есть без всяких модов — достаточно ввести команду noclip.

Выбрали самое интересное из нового выпуска Boundary Break, где блогер Shesez рассказывает о «закулисье» видеоигр.

В первую очередь Shesez отметил, что в Portal, как и в других играх на движке Source, пустота за пределами уровня не всегда выглядит как однотонное пространство. Иногда случается так, что она перестаёт «обновляться», из-за чего при перемещении камеры изображение уровня начинает дублироваться и рябить.

Также одна из загвоздок «закулисья» Portal заключается в том, что при попытке выбраться туда многие объекты исчезают с уровня.

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

Он должен находиться по центру
Так он виден внутри ​распределителя

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

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

Чтобы лучше разобраться, блогер обратился к авторам пользовательских карт. Как выяснилось, в Source объекты не могут фактически храниться за пределами уровня — вместо этого их помещают в невидимые кубы с текстурами, которые в редакторах помечены как «no draw».

В самой же игре, если посмотреть на «no draw» изнутри, как раз и начинает появляться та самая рябь, о которой говорилось выше. То есть, технически настоящая «пустота» начинается лишь за пределами этих условных кубов.

Изображение специально обесцвечено для комфортного просмотра

Затем Shesez перешёл к классической части передач о «закулисье». Так выглядит локация с парковкой из концовки.

На ней, как выяснилось, припрятана пара сюрпризов. Например, маленькая коробка из под фасоли — в ней размещена камера игрока, когда его утаскивают обратно в лабораторию.

Другая находка — это радио. И если по нему выстрелить (в Portal можно подключить оружие из Half-Life 2), то... из него пойдёт кровь.

А всё потому, что здесь радиомагнитофон обозначен не как физический объект, а как NPC — и он ответственен за все звуковые эффекты в последней катсцене.

Через инструменты в Portal можно включить визуальное отображение всех триггеров. К примеру, на выходе с уровней почти всегда расположены скрипты, которые отвечают за воспроизведение фраз ГЛэДОС.

Здесь так же видно, что на лестнице расположен триггер — как только игрок его задевает, лестница обваливается.

А в случае с моментом уничтожения куба-компаньона всё слегка усложняется. В утилизаторе куб сначала пролетает через триггер, отвечающий за фразу ГЛэДОС, затем — за открытие двери, и уже потом за уничтожение куба.

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

Также Shesez рассказал, как работают сами порталы в игре. С визуальной точки зрения один портал отображает то, как выглядит место с перспективы второго, и не более — с другой стороны уровень не достраивается. А когда игрок проходит через него, в определённый момент он просто-напросто телепортируется в нужное место.

Лучше всего это видно в режиме от третьего лица, который также можно включить через консоль.

Вот так выглядит локация с тортом, которую игрок видит в главном меню после прохождения. Как выяснилось, слева расположена дверь — увидеть при нормальном ракурсе её никак нельзя.

В комнате с проектором, которую игрок может заметить в одной из локаций за стеклом, запрятана отсылка к Half-Life 2 — на одном из планшетов написано про HEV-костюм.

Если посмотреть на проектор вблизи, то становится виден номер модели и логотип EIKI — название реально существующей компании, создающей проекторы. Интересно, есть ли у Valve права на его использование?

А вот так выглядит самая последняя катсцена...

...но от третьего лица.

И комната с тортом без эффектов освещения. Ничего необычного.

​Тортик — ложь!
{ "author_name": "Artyom Kaleev", "author_type": "editor", "tags": ["\u043e\u043f\u044b\u0442","\u0437\u0430\u043a\u0430\u0434\u0440\u043e\u043c","portal"], "comments": 17, "likes": 143, "favorites": 160, "is_advertisement": false, "subsite_label": "gamedev", "id": 86347, "is_wide": true, "is_ugc": false, "date": "Tue, 10 Dec 2019 16:15:56 +0300", "is_special": false }
0
{ "id": 86347, "author_id": 17412, "diff_limit": 1000, "urls": {"diff":"\/comments\/86347\/get","add":"\/comments\/86347\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/86347"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954, "last_count_and_date": null }
17 комментариев
Популярные
По порядку
Написать комментарий...
102

 из-за чего при перемещении камеры изображение уровня начинает дублироваться и рябить.

Буфер цвета не чистится потому-что, раньше так экономили время гпу, сейчас эта операция почти бесплатная.

 Также одна из загвоздок «закулисья» Portal заключается в том, что при попытке выбраться туда многие объекты исчезают с уровня.

Не проходят PVS тест. Дело в том, что потенциальная видимость всех сущностей запекается ещё на этапе компиляции карты, а поскольку видимость за картой не просчитана - энтити не проходят PVS тест.

Ответить
56

К примеру, на выходе с уровней почти всегда расположены скрипты, которые отвечают за воспроизведение фраз ГЛэДОС.

Здесь так же видно, что на лестнице расположен триггер — как только игрок его задевает, лестница обваливается.

не, ну это шок-контент

Ответить
23

Так устроены все игры🤷🏼‍♂️

Ответить
13

Нормально с вами на дтф не поэпилептишь, конечно

Ответить
11

А любовь? — Иллюзия. — А религия? — Распространённый суррогат веры. — Вы скептик. — Ничуть! Я дизайнер уровней

Ответить
0

Это можно назвать Reverse engineering'ом ?

Ответить
12

Скорее, видео про то, как геймер узнал про консоль и читы

Ответить
3

Если конечная цель посмотреть примеры использования различных трюков, чтобы повторить их в своей игре на source, то вполне да. 

Ответить
0

Нет. Реверс инженеринг выглядит примерно так. Здесь показан только реверс инженеринг пайплайна рендера карты.

https://www.youtube.com/watch?v=0fEbjljGVHw

Ответить
3

Планшет с документацией HEV Mark V - это просто проп из HL2 (его Кляйнер роняет в лаборатории). 

Ответить
2

виден номер модели и логотип EIKI. Интересно, есть ли у Valve права на его использование?

Не силён в авторском праве, но вроде тут добросовестное использование и нет никакого очернения торговой марки?

Ответить
1

Поздравляю, вы все это могли узнать сами, просто набрав пару команд в консоли.

Кстати, nodraw — это способ оптимизации. Это текстура, которая, собственно, не отображается в игре, но сам браш существует, из-за чего движку нужно меньше рендерить.

Ответить
0

EIKI же

Ответить
0

"спаунят"

Ответить
0

Вау, нет слов!

Ответить
0

Иногда случается так, что она перестаёт «обновляться», из-за чего при перемещении камеры изображение уровня начинает дублироваться и рябить.

Это ещё с движка Wolf3D идет же

Ответить

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovz", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "chvjx", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } }, { "id": 20, "label": "Кнопка в сайдбаре", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "chfbl", "p2": "gnwc" } } } ]
{ "jsPath": "/static/build/dtf.ru/specials/DeliveryCheats/js/all.min.js?v=05.02.2020", "cssPath": "/static/build/dtf.ru/specials/DeliveryCheats/styles/all.min.css?v=05.02.2020", "fontsPath": "https://fonts.googleapis.com/css?family=Roboto+Mono:400,700,700i&subset=cyrillic" }