Промт для создания игры Backrooms: как сгенерировать хоррор-локации и код

Ни один качественный проект в жанре лиминальных пространств не обходится без грамотно выстроенной логики, и все мы это прекрасно понимаем. Буквально десятилетие назад создание бесконечных коридоров отнимало львиную долю времени разработчика, но сейчас генеративные сети забрали эту рутину на себя. Многие считают процесс написания запросов пустяковым делом, но на самом деле именно здесь скрываются самые неприятные подводные камни. Устав от суеты с ручной расстановкой стен, энтузиасты массово идут к языковым моделям за готовыми скриптами. А начинать работу с ними стоит всё-таки с понимания внутренней архитектуры нужного нам движка.

Все топовые нейросети в одном месте

Жёлтые обои и гудение ламп

Мерзкий флуоресцентный свет. Именно он солирует в тех самых офисных подсобках, создавая давящий, невероятно жуткий антураж. С чего начинается выбор подходящего скрипта? С определения базовых механик. И если мы говорим о Unity или Unreal Engine, то первым делом стоит запросить контроллер от первого лица. Разумеется, стандартная капсула движения сгодится лишь для чернового прототипа. Нам ведь нужен добротный реалистичный ход с инертностью и покачиванием камеры. К слову, отличный результат даёт такой запрос:

«Act as a Senior C# Game Developer. Write a First Person Controller script for Unity that includes stamina-based sprinting, procedural head bobbing linked to walking speed, and footstep sound triggers based on the ground tag. The code must be highly modular and optimized for a slow-paced liminal horror game»

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

Как выстроить бесконечный лабиринт?

Процесс этот не сложный, но крайне кропотливый. Безусловно, создать одну замкнутую комнату довольно просто, но нам требуются запутанные переходы без видимых границ. Для этого лучше отказаться от примитивных квадратных сеток с жёстко заданными координатами. Гораздо эффективнее попросить ИИ написать код, опирающийся на классические математические алгоритмы. Сначала мы запрашиваем генерацию базовой сетки по алгоритму волнового коллапса (Wave Function Collapse), затем вплетаем логику добавления случайных проломов в стенах, ну и, наконец, прописываем строгие правила спавна декораций. Сформулировать задачу можно так:

Ваш личный ИИ-отдел маркетинга, который работает 24/7 📈

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

Делегируйте рутину искусственному интеллекту и увеличивайте продажи. Начните работу здесь 👉 https://clck.ru/3RNCRL

«Generate a procedural dungeon script in C# for Unity. Use a modified Random Walk algorithm to create organic, non-linear office layouts reminiscent of the Backrooms Level 0. Include logic to instantiate prefabs for walls, ceiling, and floor from an array. Add a function to randomly place ‘Fluorescent Light’ prefabs on the ceiling with a 15% probability of them flickering, using a sine wave function for the light intensity»

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

Освещение

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

«Write a comprehensive guide and provide a C# script for dynamically controlling a Unity Post-Processing v2 profile to simulate VHS tape degradation. Specify exact values for chromatic aberration, film grain size, color grading (heavy yellow/green tint), and lens distortion. Add a script that randomly spikes the VHS tracking error effect every 30 to 60 seconds to simulate a corrupted tape»

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

«A seamless texture of dirty, damp yellow office wallpaper from the 1990s, liminal space aesthetic, hyperrealistic, 4k, diffuse map, flat lighting»

творит чудеса, выдавая идеально тайлящиеся бесшовные картинки.

Искусственный интеллект для сущностей

Стоит ли доверять языковым моделям поведение монстров? Да, но с большой долей скепсиса. В представлении многих новичков код преследования пишется буквально в пару строк. На практике же банальный агент навигации часто намертво застревает в узких коридорах процедурно сгенерированного мира. С поиском пути дело обстоит сложнее, чем кажется на первый взгляд. Махинации с рейкастами (проверками видимости игрока) лучше прописывать отдельными независимыми модулями. Тем более, что машина отлично понимает паттерны конечных автоматов. Нужно отметить, что запрос должен быть максимально сухим:

«Create a State Machine for a hostile entity in Unity C#. States should include: Wandering (picking random waypoints in the procedural maze), Chasing (running towards the player when line of sight is established via Raycast), and Retreating (fleeing when the player uses a flashlight). The enemy must use NavMesh, but include a fallback logic to unstuck itself if velocity remains zero for 3 seconds»

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

Звуковой ландшафт

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

«Write an AudioManager script in C# that handles ambient background noise. Implement a system that dynamically blends between three different low-frequency hum audio clips based on the player’s position. Add a ‘Sanity’ feature where distant, distorted whisper sounds play randomly at intervals of 120 to 300 seconds, with the volume inversely proportional to the player’s sanity variable»

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

На что обратить внимание при оптимизации?

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

«Write a chunk-based object pooling manager for procedural generation in Unity. The script should instantiate walls from a pre-loaded pool instead of calling Instantiate() at runtime. The game world is divided into 20×20 meter grids. The script must only enable chunks within a 40-meter radius of the player’s Transform and disable the rest to maintain 60 FPS. Provide clear comments explaining the pooling logic»

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

Все топовые нейросети в одном месте

Разные уровни

Какими бывают таунхаусы или торговые центры в реальности, мы знаем прекрасно, а вот уровни Закулисья подчиняются своей собственной извращённой логике. Базовый нулевой уровень — это абсолютная классика. А вот колоритный антураж так называемых «Poolrooms» (бесконечных бассейнов) требует совершенно иного подхода к написанию кода. Вода, блики, мокрый кафель.

«Generate a C# script for generating interconnected pool rooms. The algorithm should place large ‘Water’ planes at the bottom of the rooms and construct walkways around them using a grid system. Include logic to spawn ‘Pillar’ prefabs at the corners of intersections. Ensure the generated layout contains varying room sizes (e.g., small 5×5 corridors, large 20×20 open pools)»

Обязательно ли писать отдельный скрипт под каждый новый этаж? Вовсе нет. Можно создать один универсальный генератор, который принимает на вход разные наборы префабов и правила их компоновки. Ложка дёгтя кроется лишь в том, что запечь свет в бесконечно генерируемом лабиринте физически невозможно. Придётся использовать тяжёлые реал-тайм источники. А если ещё вспомнить про мягкие тени от колонн, то частота кадров может упасть до некомфортных пятнадцати значений. Поэтому в запросах всегда уточняйте важный нюанс:

«Ensure the lighting script optimizes real-time lights by dynamically disabling shadows for light sources that are more than 15 meters away from the camera»

Кроме того, не стоит перегружать сцену лишними мелкими деталями.

Нет смысла переплачивать наёмным программистам на начальных этапах создания инди-хоррора, если грамотно составленные текстовые запросы способны закрыть большинство технических потребностей. Главное — раскладывать сложные игровые механики на мелкие подзадачи и общаться с языковой моделью на языке строгих алгоритмов, а не размытых абстрактных желаний. Удачи в проектировании ваших собственных бесконечных коридоров, пусть они вызывают у игроков неподдельный леденящий трепет!