cjoka — высокопроизводительный, модульный 3D-игровой движок и редактор уровней на C++20. Создан с упором на Data-Oriented Architecture (EnTT ECS), графику OpenGL 4.6 (Forward+ Light Culling, 3-Split CSM, TAA, SSR, VXGI, Nanite-Grade ClusterLOD), физическую симуляцию NVIDIA PhysX 5.5, нативный C++ геймплейный скриптинг и полноценный редактор сцен в стиле современных движков (Unity / Unreal Engine).
- Свободная камера навигации (Flycam): Плавное перемещение на WASD / стрелочках, свободный обзор головы при зажатой ПКМ, панорамирование (СКМ), зум колёсиком мыши и ускорение на Shift.
- Billboard-иконки и 3D-пирамиды видимости (Frustum): Камеры и источники света в сцене отображаются векторными Billboard-иконками, всегда ориентированными на наблюдателя. При выборе камеры проецируется точный 3D Wireframe Frustum с учетом угла обзора (FOV), соотношения сторон и направления взгляда.
- Модульная система окон (
Windowmenu): Все рабочие панели (Hierarchy, Inspector, Asset Browser, Atmosphere & Sky, Graphics / RTX, Nanite Metrics, Performance Stats) легко открываются и закрываются через менюWindowили хоткеямиAlt+1..Alt+8. - Режим предпросмотра игры (
Play Game): Мгновенное переключение на игровую камеру (MainCamera), запуск PhysX симуляции персонажей и логики C++ скриптов. Скрытие панелей редактора и служебных гизмо для получения чистого экрана игры (Game View). Быстрый возврат в редактор по клавишеESCс полным восстановлением состояния сцены. - 3D Gizmo манипуляторы: Перемещение (1), вращение (2) и масштабирование (3) объектов сцены с поддержкой локального / глобального пространства и шаговой привязки (Snapping).
- Сборка автономных игр (Standalone Builder): Встроенный генератор автономного исполняемого файла игры (
F7или менюBuild) без редакторских зависимостей.
- Nanite-Grade ClusterLOD (Virtual Geometry):
- Автоматическая топологическая склейка вершин (Vertex Welding) при загрузке мешей с построением связной 2-manifold геометрии без швов и разрывов.
- Высокоскоростной алгоритм Quadric Error Metrics (QEM Garland & Heckbert) с локальным графом смежности (
vertTris) для мгновенной генерации LOD-уровней. - Защита границ (Boundary Quadrics) и контроль инверсии полигонов (Normal Flipping Guard) для безупречного сохранения силуэта тонких поверхностей, растительности и листьев.
- Непрерывный расчет экранной погрешности в пикселях (
errorThresholdPx) и бесшовный инстансинг на GPU (glDrawElementsInstanced).
- Материалы PBR и растительность (Two-Sided Foliage):
- Поддержка двусторонних материалов (
twoSided) с аппаратным отключением Backface Culling и инверсией нормалей для обратных граней (if (!gl_FrontFacing) N = -N;). - Альфа-отсечение (Alpha Mask Cutout) для текстур листвы и прозрачных сеток.
- Полный стек PBR Cook-Torrance (Albedo, Normal, Roughness, Metallic, AO, Emissive).
- Поддержка двусторонних материалов (
- Forward+ Кластеризация источников света: Compute-шейдерный куллинг до 1024 точечных и прожекторных источников света по 3D-воксельной сетке фрустума (SSBO).
- Cascaded Shadow Maps (CSM): 3-каскадные карты теней с расчетом границ по глубине вида, сглаживанием артефактов движения и 16-точечной Poisson Disk PCF фильтрацией.
- Voxel Global Illumination (VXGI) & Light Probes: 3D-воксельная волюметрическая сетка освещения с конусным трейсингом (Cone Tracing) и сетка запекаемых световых зондов (Light Probe Grid).
- Hi-Z Screen-Space Reflections (SSR): Трассировка лучей в экранном пространстве с адаптацией под шероховатость (Roughness) PBR-материалов.
- Temporal Anti-Aliasing (TAA): Субпиксельное субсемплирование по последовательности Хэлтона (Halton 2,3), репроекция буфера скоростей (Motion Vectors / Velocity Buffer) и стабильный блендинг без мерцания при движении.
- Атмосфера и пост-процессинг: Процедурный градиент неба с динамическим солнцем, экспоненциальный дистанционный туман, полноэкранный HDR-пайплайн с ACES Tonemapping, виньетированием и Bloom.
- Character Controller (CCT): Кинематический контроллер персонажей для стабильного преодоления ступеней, склонов, гравитации и прыжков.
- Rigid Bodies & Коллизии: Динамические и статические твердые тела, непрерывное определение столкновений (CCD) и триггеры.
- Транспорт (Vehicle Physics): Модель автомобиля со сцеплением шин, заносом, ручным тормозом и подвеской.
- PBD Cloth Simulation: Моделирование ткани (плащи, флаги) методом Position-Based Dynamics с реакцией на скорость ветра и движения.
Движок предоставляет систему нативных C++ компонентов логики с полным доступом к ECS:
class PlayerMovement : public ScriptableEntity {
public:
void onCreate() override { ... }
void onUpdate(float dt) override {
// Управление вводом, физикой, звуком и трансформами
}
};
REGISTER_SCRIPT(PlayerMovement, "Player Movement")- Файловый формат
.anim:- Сохранение и загрузка клипов анимаций (
.anim) в человекочитаемом JSON-формате. - Поддержка многоканальных треков:
Position,Rotation(Euler/Degree),Scale, а также произвольных Float-параметров (Camera.FOV, интенсивность света и др.). - Плавная кубическая Hermite (Smoothstep) и линейная интерполяция между ключевыми кадрами.
- Сохранение и загрузка клипов анимаций (
- Катсценовый Секвенсер без лимитов времени:
- Полное снятие 10-секундного ограничения: длительность настраивается от 1 секунды до сотен секунд с масштабируемым таймлайном.
- Кат-трек камер (Camera Cuts & Shots):
- Добавление смены камер (Camera Cuts) по таймлайну с автоматическим переключением активной камеры во вьюпорте в реальном времени.
- Кейфрейминг плавного движения камеры (Camera Motion Path) с интерполяцией позиции, вращения и угла обзора (FOV).
- Профессиональный интерфейс в стиле Unity Animation Window:
- Кнопка
Preview [ON/OFF]для живого предпросмотра катсцены во вьюпорте прямо в редакторе без входа в Play Mode. - Режим авто-кейфрейминга
● REC: автоматическая запись ключей при перемещении объектов во вьюпорте. - Транспортные контролы: переход на старт (
|<<), шаг к предыдущему ключу (<),Play ▶/Pause ❚❚, шаг к следующему ключу (>), переход в конец (>>|), поле номера текущего кадра (Frame Box) и таймер. - Интерактивный таймлайн-холст (Dopesheet Canvas): временная линейка с разметкой секунд/кадров, алмазные маркеры кейфреймов (
◆), цветовые плашки камерных планов и клипов анимаций, скраббер текущего времени и ползунок масштаба (Zoom).
- Кнопка
| Клавиша | Функция |
|---|---|
ПКМ + мышь |
Свободный обзор камеры редактора (Flycam Look) |
WASD / Стрелочки |
Полёт камеры вперёд, назад, влево, вправо |
Q / E |
Спуск и подъём камеры по вертикали |
Shift |
Ускорение движения камеры (x2.5) |
СКМ (Колёсико) |
Панорамирование сцены (Pan) |
| Прокрутка мыши | Зум к точке курсора |
F |
Фокус камеры на выделенном объекте |
1 / 2 / 3 |
Переключение Gizmo: Перемещение / Вращение / Масштабирование |
Alt+1 .. Alt+8 |
Быстрое открытие/закрытие панелей (Hierarchy, Inspector, Sky, etc.) |
Alt+K |
Открытие/закрытие окна катсценового секвенсера (Sequencer) |
Ctrl+D |
Дублирование выбранного объекта |
Delete |
Удаление выбранного объекта |
Tab |
Полное скрытие / показ UI редактора |
ESC |
Остановка режима Play Game и возврат в редактор |
- Linux (x86_64)
- Компилятор Clang с поддержкой C++20
- CMake 3.20+ и Ninja
- Драйвер с поддержкой OpenGL 4.6
# Конфигурация и сборка проекта
cmake -B build -G Ninja
ninja -C build cjoka
# Запуск редактора сцен
./build/cjoka
# Сборка и запуск автономного игрового билда
ninja -C build cjoka_standalone
./build/cjoka_standalone