Дата фиксации: 2026-04-21 (Обновлено: 2026-07-12)
Этот документ описывает текущий debugging/tooling path в ProjectV: HUD, runtime diagnostics, Tracy, smoke scripts и
failure probes.
В current mainline уже есть:
- in-app HUD;
- runtime diagnostics с единым форматом логов;
- Tracy CPU/GPU instrumentation;
- automated runtime smoke (Linux и Windows);
- automated failure probes;
- unit tests на critical world/interaction/physics glue.
HUD — Dear ImGui (status strip + Settings/Stats). Bitmap debug HUD pipeline удалён.
Видно в strip: FPS/frame time, control mode, pause, editor tool, AA/SMAA/scale.
Settings (`): overlays, lighting, walk, world/editor actions, music, replay, dev
(screenshot, shader reload, present mode, quit). Stats panel — детальная телеметрия.
F1— скрыть весь UI (strip + окна);`— Settings on/off (+ освобождает/возвращает relative mouse);Tab— relative mouse;- редкие debug toggles — только через Settings (не отдельные hotkey).
Основные клавиши рантайма (bindings в src/app/InputActions.cpp):
W/A/S/D— перемещение;Space— вверх / двойное нажатие togglescreative ↔ walk;Shift— вниз / sneak в walk mode;Ctrl— speed boost;Alt— speed slow;Tab— relative mouse mode;F1— hide UI;F2— cycle placement material (White → Gray → Glass → Fluid);`— Settings;Esc— quit.
Остальные действия (MSAA, overlays, save/load, editor tool, music, lighting, …) — кнопки/галочки в Settings. Editor LMB/RMB без изменений.
Editor-tool contract:
OFFсохраняет старыйLMB remove / RMB placepath;PAINTкрасит hit voxel поLMBи ставит adjacent voxel поRMB; при активном anchor заполняет весь box между anchor и текущим target/placement voxel;ERASEудаляет hit voxel обеими кнопками; при активном anchor стирает весь box между anchor и текущим target voxel;FILLflood-fill'ит connected region материала hit voxel в выбранный placement material;INSPECTоставляет raycast/read-only path и добавляет chunk-oriented target/placement telemetry/overlay.
Anchor contract:
- Settings → Editor → mutation anchor ставит или снимает anchor на логически текущем voxel для активного tool;
- для
PAINT/INSPECTanchor обычно идёт поplacementVoxel, дляERASE— поtargetVoxel; - overlay показывает и сам anchor voxel, и preview box до текущего target/placement voxel;
- pick material не меняет мир, а только синхронизирует placement material с текущим hit material.
Критические runtime ошибки проходят через RuntimeDiagnostics
из RuntimeDiagnostics.hpp.
Формат логов:
[ProjectV][Subsystem][Step] ...
Текущие helpers:
LogRuntimeFailureLogVkFailureLogVmaFailureLogSdlFailurePV_CHECK_OR_RETURNPV_ASSERT
Практический смысл:
- expected failures логируются явно и возвращают
false; - invariant failures в debug build должны падать быстро и явно.
./tools/linux/Invoke-ProjectVRuntimeSmoke.shpowershell -ExecutionPolicy Bypass -File tools/windows/Invoke-ProjectVRuntimeSmoke.ps1Это developer-only GUI smoke: targeted lifecycle check, не универсальный DoD. Используйте его после изменений в Vulkan/bootstrap/swapchain/window lifecycle/present/screenshot sync или при риске device-lost/hang.
Проверяет:
- запуск окна;
- resize;
- minimize/restore;
- maximize/restore;
- graceful shutdown.
Для lighting/material/shader tuning основной сигнал — build/tests, scripted captures, sidecar metadata и визуальное сравнение.
./tools/linux/Invoke-ProjectVFailureProbes.shpowershell -ExecutionPolicy Bypass -File tools/windows/Invoke-ProjectVFailureProbes.ps1Проверяет:
- controlled failure на missing shader blob (
PROJECTV_SHADER_BASE_DIR); - controlled failure на intentional incomplete init (
PROJECTV_FAIL_INIT_STAGE).
Сейчас поддерживаются две главные env-based probe ручки:
PROJECTV_SHADER_BASE_DIRPROJECTV_FAIL_INIT_STAGE
Поддерживаемые PROJECTV_FAIL_INIT_STAGE значения:
after_bootstrapafter_worldafter_scene_resourcesbefore_graphics_pipelinebefore_voxel_meshing_pipeline
Это current reproducible failure path без порчи кода и без ручного удаления .spv.
CPU зоны размечаются через:
PV_PROFILE_ZONE()PV_PROFILE_ZONE_N(...)PV_PROFILE_FRAME_MARK()
GPU зоны размечаются через:
PV_PROFILE_GPU_ZONE(...)
Основные plot'ы конфигурируются в Profiling.hpp и считаются фиксированным benchmark metrics pack.
- Собери и запусти
ProjectV. - Если нужен bundled profiler UI, используй preset
windows-clang-debug-tracy-profiler/linux-clang-debug-tracy-profiler(если доступен) и отдельно собери targettracy-profiler. - Запусти profiler и подключись к приложению.
- Смотри:
- CPU zones вокруг
UpdateApp,TickWalkCharacter,UpdateWalkGroundSupport,PrepareFrameRenderData,DrawFrame; - GPU zones для
Voxel Meshing,Opaque Pass,Transparent Pass,Debug Overlay,Debug HUD; - plot'ы по dirty chunks, face counts, upload bytes и
walkstate drift.
- CPU zones вокруг
Если проблема в input/control modes:
- смотри HUD;
- проверяй
UpdateAppиInputActions; - проверяй replay/unit tests или manual interaction по конкретному сценарию.
Если проблема в world edits / raycast / chunk rebuild:
- смотри HUD и
VoxelWorldTests; - смотри dirty chunk counters и face counts;
- проверяй
VoxelWorld,VoxelInteraction,SceneResources.
Если проблема в resize/minimize/restore/shutdown:
- сначала запускай runtime smoke script;
- потом смотри swapchain recreate path и stderr runtime logs.
Если проблема в init/bootstrap:
- сначала failure probes;
- потом
RuntimeDiagnosticslogs; - потом
VulkanBootstrap/VulkanInit.
Если проблема в производительности:
- сначала Tracy plots и zones;
- потом HUD counters;
- только потом hypotheses/optimisation.
- Voxel ASCII Guide — этажи Y/XZ и tick-лог
PROJECTV_ASCII_TICK_LOG- Linux Build & Run Guide - RTX Renderer Architecture
- Physics & Movement Guide
- BuildAndRun (Windows)
- Profiling
- RenderArchitecture (Historical)
- VoxelWorld (Historical)