-
Notifications
You must be signed in to change notification settings - Fork 0
Self Tests RU
🌐 English · Русский
← GPU-рендерер · Структура проекта →
Nova поставляется с пакетом headless-самотестов, которые запускаются как аргументные ветки демо-приложения — без интерактивного ввода, без рендера в живой терминал — поэтому их можно гонять на CI и защищаться от регрессий. Каждый печатает строку PASS / FAIL.
Соберите один раз, затем запустите тест по имени:
dotnet build -c Release
dotnet run --project SampleGame -c Release --no-build -- <имя_теста>Например:
dotnet run --project SampleGame -c Release --no-build -- gputestКонтрибьюторы обычно собирают через
dotnet build -c Release --no-incremental(обычная инкрементальная сборка может ложно показать «0 warnings»).
| Имя | Что защищает |
|---|---|
impulsetest |
Импульсный решатель физики — сфера и ящик падают, лежат, отскакивают, скользят, кувыркаются, стопкуются, разлетаются и засыпают на прогоне по dt (Стадии 1–6). |
jointtest |
Шарниры — маятник на ball-socket, hinge с лимитом угла + мотором, и distance как жёсткий стержень и мягкая пружина, все — двусторонние связи в том же решателе, что и контакты. |
hulltest |
Выпуклую оболочку — quickhull, опорную функцию и масс-свойства замкнутого полиэдра (объём / центр масс / инерция vs аналитический куб). |
gjktest |
GJK / EPA — ближайшее расстояние + точки-свидетели между разделёнными выпуклыми телами, и нормаль + глубину проникновения для пересекающихся. |
hullphystest |
Динамический коллайдер-оболочку — оболочка ложится плашмя на бокс / другую оболочку / меш-пол (на той же высоте), стопкуется, лежит и скользит на реальном наклонном меше (не по габаритному боксу) и кувыркается в покой. |
cutovertest |
Загрузку миров со устаревшим ключом engine и roundtrip сетевой синхронизации физики (authority шагает → сериализация → клиент экстраполирует + подводит → сходится). |
bvhtest |
Построение/обход BVH. |
worldtest |
Систему миров. |
editortest |
Встроенный редактор end-to-end: свет, объекты-камеры (Fixed/Follow, циклы F7/F8, обход стен, прицел в разделённом экране), компоновку HUD, чистую математику редактора, авторинг шарниров + сетевой синк, мост меш→оболочка и капсулу игрока. |
picktest |
Выбор прицелом / пикинг объектов. |
worldsynctest |
Полный roundtrip мира через WorldSync (каждое поле объекта/света/камеры/физики/текстуры + сравнение). |
collisiontest |
Чистые резолверы коллизии пузыря камеры и 3D SAT. |
physicstest |
Общую чистую математику физики (кватернионная ориентация, lerp углов, экстраполяция, комбинация упругости, ближайшая точка на треугольнике). |
gputest |
Паритет CPU↔GPU — рендерит фиксированные сцены (в т.ч. текстурированные) на обоих путях и сравнивает попиксельно. |
texturetest |
Конвейер декода / сэмплинга / UV / параметров / мипов PNG. |
splashtest |
Хелперы блочных букв стартового сплэша. |
uitest |
Консольный UI-тулкит мастера настройки (компоновка, навигация фокуса, виджеты, hit-test мыши, поток мастера). |
colortest |
Визуально-только цветовая диагностика (без строки PASS/FAIL). |
uidemo |
Визуально-только интерактивное демо UI-тулкита (проверка зума шрифта). |
gputest рендерит одну и ту же сцену CPU-рейтрейсером и GPU-ядром и сравнивает попиксельно:
- С тенями выкл каждая фича детерминирована, поэтому два изображения должны быть точно равны — разница пикселей Δ = 0.
- С тенями вкл отличаться может только тонкая полоса на границе тени.
- Для текстур меш-примитивы и импортированные меши остаются Δ = 0; аналитическая UV сферы допускает тонкий шов/полюсную полосу, а mipmapped-объект — тонкую полосу.
Результат Δ=0 — доказательство того, что изменение математики затенения / пересечения / компоновки / BVH / текстур сохранило CPU- и GPU-рендереры синхронными. См. GPU-рендерер.