Liminal Engine - это полноценный, хотя и простой 3D-движок, реализованный в Scratch. Изначально он создавался как основа для проекта по мотивам Backrooms (https://www.youtube.com/watch?v=7ovY3gITYCQ&t=22s), после чего был адаптирован и немного доработан для корректной работы в классической версии Scratch. В дальнейшем движок может быть расширен и улучшен, однако на текущий момент он представляет собой исходник движка для Backrooms, адаптированный под более универсальное использование. Проект состоит из трёх спрайтов: main - главный спрайт, отвечающий за запуск проекта и базовую инициализацию, render - спрайт, в котором происходит непосредственный рендер 3D-графики, и update - спрайт, отвечающий за обновление логики и управление камерой. В спрайте render используются три основные функции. Функция create screen очищает экран и Z-буфер. Экран хранится в двух списках: screenColor, содержащем цвет каждого пикселя, и screenZ, содержащем значения глубины (Z-buffer). Функция render triangle отвечает за отрисовку одного треугольника в экранные буферы. В неё передаются координаты трёх вершин треугольника в мировом пространстве и соответствующие им UV-координаты (x1, y1, z1, u1, v1, x2, y2, z2, u2, v2, x3, y3, z3, u3, v3), затем ID текстуры (texture), позиция камеры (cameraPositionX, cameraPositionY, cameraPositionZ) и вращение камеры (cameraRotateX, cameraRotateY, cameraRotateZ). При использовании стандартной системы перемещения камеры из спрайта update рекомендуется передавать переменные cameraPositionX, cameraPositionY, cameraPositionZ и cameraRotateX, cameraRotateY, cameraRotateZ. Отдельная передача позиции и поворота камеры позволяет реализовывать несколько камер или, например, скайбокс. Функция render screen выводит сформированный экран на сцену. Стандартный пайплайн рендера выглядит следующим образом: сначала очищается экран и Z-buffer, затем добавляются все треугольники сцены, после чего вызывается render screen для отображения результата. Текстуры хранятся в списке textures и задаются в виде строки формата «ширина x высота @ данные пикселей», где после символа @ перечисляются цвета каждого пикселя в формате HEX без прозрачности, разделённые символом |. Пиксели идут слева направо и сверху вниз. Пример корректного описания текстуры есть в проекте. В UV-координатах допускаются значения больше 1 - в этом случае текстура будет повторяться (тайлинг), что позволяет легко создавать бесшовные поверхности без необходимости увеличивать размер самой текстуры. В спрайте update реализованы две основные функции. Функция Game-cameraRotate проверяет нажатие кнопки мыши и обновляет вращение камеры (cameraRotateX, cameraRotateY, cameraRotateZ). При необходимости её можно заменить собственной реализацией. Функция Game-cameraMovement обрабатывает нажатия клавиш и изменяет позицию камеры (cameraPositionX, cameraPositionY, cameraPositionZ). По умолчанию используются клавиши WASD, их русская раскладка (ЦФЫВ) и стрелки для перемещения по осям X и Z, а также QE и ЙУ для перемещения по оси Y. Данная функция в основном предназначена для разработки и отладки, так как позволяет свободно перемещаться по вертикали, поэтому её можно без проблем модифицировать под нужды конкретного проекта.
v0.3.5 - 19.02.2026