Document P1 and P3 integrated acceptance

This commit is contained in:
Emil
2026-09-24 06:33:34 +03:00
parent ed523c61c1
commit f645965d56
1421 changed files with 30364 additions and 29 deletions
+37 -17
View File
@@ -1,6 +1,6 @@
# План разработки Faset Engine
Версия 1.3 · 23 сентября 2026 года.
Версия 1.4 · 24 сентября 2026 года.
**Статус:** C++ MVP реализован и принят; первый tag — **v0.1.0-mvp**. Его исходники проверены на `4cb82556de31268d2bde73948dd1ff1b6c02f162`; [досье M0M9](docs/validation/mvp-acceptance.md) связывает этапы с проверками и revisions. После MVP реализованы Lua-модуль и P2 GPU visibility/mesh LOD. Для P2 сохранён direct-эталон; [досье Linux-проверок](docs/validation/p2-gpu-visibility-2026-09-23/README.md), [проверка Windows SwiftShader](docs/validation/p2-swiftshader-2026-09-23/README.md), [протокол приёмки](docs/studies/19-p2-gpu-visibility-acceptance.md), [первое измерение](docs/studies/20-p2-gpu-visibility-benchmark-2026-09-23.md) и [повтор после оптимизации](docs/studies/21-p2-gpu-visibility-optimization-2026-09-23.md) фиксируют функциональную и измерительную область. Первый Debug-профиль обнаружил дорогой MainCull; перенос GPU-выходов в device-local память и bounded atomic append устранили эту стоимость в повторном синтетическом тесте. Это не доказывает ускорение любой игры. Windows P2 функционально проверен в native CI через SwiftShader; физический Windows GPU и другие семейства драйверов остаются без проверки. Для MVP Linux проверен на RTX 2080 Ti, Windows — в native CI через SwiftShader; это не сертификация всех GPU/драйверов. Системный IME и физические переходы между мониторами не проверены, native Wayland restore имеет явный skip; XWayland и Windows lifecycle прошли. Контракты находятся в [ARCHITECTURE.md](docs/ARCHITECTURE.md), история — в [журнале реализации](docs/IMPLEMENTATION.md).
@@ -201,8 +201,12 @@ snapshot 0,197/0,288 мс; startup 295/248 мс. Эти показатели у
в соответствующие tracking budgets. Явные Vulkan allocations 43,02/43,12 MiB
**превысили** исходный ориентир 20 MiB из-за двух постоянно созданных 2048²
D32 shadow-атласов по 16 MiB; даже 2D-сцена с нулём shadow raster держит оба.
Память требует оптимизации/нового baseline, без подмены бюджета. Физический
Windows GPU остаётся отдельным покрытием. Dynamic gameplay loading рассматривать при
Память требует оптимизации/нового baseline, без подмены бюджета. При
асинхронных Build и Export статус схемы теперь получает хеш фактического
снимка worker, поэтому изменение C++ в очереди не создаёт ложный статус
устаревания. [Финальная совмещённая проверка](docs/validation/p1-p3-final-2026-09-24/README.md)
повторяет перенос трёх Release-игр на чистом `ed523c6`. Физический Windows GPU
остаётся отдельным покрытием. Dynamic gameplay loading рассматривать при
подтверждённой проблеме линковки, без обещания C++ hot reload в P1.
### P2. GPU-driven visibility и LOD
@@ -221,22 +225,38 @@ GPU instance record содержит стабильные slot/generation; пл
### P3. Освещение, тени и temporal reconstruction
**Освещение, тени и измеренный выбор пути реализованы; приёмка всего P3 ещё
открыта.** Есть authored directional/point/spot lights, общий shader ABI для
Direct и P2, четыре каскада солнца, отдельный 16-face atlas для point/spot,
видимость каскадеров из shadow views и общий бюджет 4096 caster draws.
**P3 реализован и принят в зафиксированном Linux reference GPU и Windows
SwiftShader профиле; общие claims о качестве/ускорении не делаются.** Authored
directional/point/spot lights используют общий shader ABI для Direct и P2.
Четыре sun cascades, отдельный 16-face atlas point/spot, видимость каскадеров
из shadow views и общий бюджет 4096 caster draws имеют проверяемые счётчики.
Ранжирование 128 local lights, атомарный отказ от шести point faces и
unshadowed fallback доступны с диагностикой. На Linux reference GPU Release
1920×1080 измеренный рост стоимости main raster превысил порог для проверки
Forward+. Depth-free tiled путь 16×16 прошёл image parity, но полный build +
raster на плотной контрольной сцене оказался медленнее; `Auto` оставлен на
forward, явный tiled доступен для локализованных источников и выиграл в
отдельном сценарии. [Исследование](docs/studies/23-p3-forward-plus-2026-09-24.md)
и [протокол проверки](docs/validation/p3-lighting-2026-09-24/README.md)
фиксируют Linux и Windows SwiftShader checkpoint; совмещённая с temporal
ревизия требует отдельной приёмки.
unshadowed fallback оставляют избыток явно видимым. На Linux RTX 2080 Ti
Release 1920×1080 Forward+ gate сработал при 32 источниках; depth-free
16×16 tiled путь прошёл image parity. Совмещённый повтор на 7 560 кадрах
показал, что полная цена tile build+raster выше на 11–13% в плотной сцене,
но ниже на 43–54% для локализованного света. Поэтому `Auto` оставлен на
forward, а `Tiled` выбирается явно после профилирования. См.
[benchmark](docs/studies/24-p3-integrated-forward-plus-2026-09-24.md) и
[протокол lighting](docs/validation/p3-lighting-2026-09-24/README.md).
Затем: previous transforms, motion vectors, jitter, history rejection и TAA; temporal upscaling — после устойчивого TAA. Проверять тонкую геометрию, движение, disocclusion, camera cut и смену разрешения, сравнивать с режимом без temporal. У cache/pass видны затраты и причины обновления.
Previous transforms, motion vectors, jitter, depth-aware history rejection,
1:1 TAA и 0.67 temporal Upscale теперь доступны для Direct и P2; Off остаётся
default. Scene history независима от HZB, UI выводится после resolve в
полном разрешении, Player получает полную shader/reflection упаковку. Editor
показывает effective mode, reset/fallback, jitter и опциональные GPU-счётчики
принятых/отклонённых пикселей; resize с включённой диагностикой проверен
отдельным физическим GPU регрессионным тестом. При отказе shader bundle во
время смены Direct → GPU старые TAA pipelines и history сохраняются;
повторная попытка после восстановления пакета проходит. Финальная
[матрица качества](docs/validation/p3-temporal-2026-09-24/matrix/integrated-ed523c6/README.md)
содержит 1 386 кадров на трёх путях видимости, включённую Vulkan validation,
восемь кадров после disocclusion, reset-сценарии и сравнение с 2× spatial
reference. В тонкой контрольной геометрии эталон 2× точнее, а разреженная
720p сцена не ускоряется от Upscale; TAA/Upscale оставлены opt-in. Память P1
превышает старый 20 MiB ориентир из-за shadow atlases. Более широкие сцены,
физический Windows GPU и сравнение с коммерческими temporal алгоритмами не
подтверждены этими проверками; GI/virtualization относятся к P4.
### P4. Непрямой свет и продвинутая геометрия
+1
View File
@@ -8,6 +8,7 @@ Faset is an independent engine project for desktop **2D and 3D games on Linux an
- [User manual](docs/manual/index.md) — learn C++ gameplay and follow working examples; maintained alongside implementation.
- [Development plan](PLAN.md) — milestones through MVP, acceptance criteria, and development beyond MVP.
- [P1/P3 integrated acceptance](docs/validation/p1-p3-final-2026-09-24/README.md) — final code revision, release exports, GPU evidence and limits.
- [Architecture](docs/ARCHITECTURE.md) — accepted decisions and subsystem boundaries.
- [Documentation](docs/README.md) — navigation and maintenance rules.
- [Source studies](docs/studies/README.md) — Unreal Engine, Godot, Unity, Blender, ECS, graphics, asset import, and builds.
+7 -1
View File
@@ -124,7 +124,10 @@ toolchain, шейдерных и runtime-входов. Повторное исп
метаданные устаревшими. Исходный каталог и копия повторно хешируются после native
build и перед повторным использованием кэша или публикацией. Это обнаруживает сохранившееся изменение;
запись и восстановление прежних байтов другим процессом того же пользователя во
время чтения компилятором не исключены. Экспорт отдельно проверяет asset generations.
время чтения компилятором не исключены. Build и Export возвращают хеш снимка,
который захватил worker, а не хеш на момент постановки команды в очередь;
Session использует его для статуса Inspector. Экспорт отдельно проверяет asset
generations.
Структурированные сообщения компилятора/Lua дополняют сырой лог. Для исходников
проекта Editor и MCP вызывают один `faset_source_open` с относительным путём и
@@ -179,6 +182,9 @@ temporal color независимы; cut, смена view/projection/viewport/sc
невалидным motion, depth mismatch или reactive geometry используют текущий
цвет. Упаковка Player содержит готовые Slang SPIR-V и reflection; runtime не
требует Slang compiler. Фактический режим и причина fallback видны в профиле.
При неудачной пересборке temporal pipelines во время переключения Direct → GPU
активные pipelines, layout fingerprints и TAA history сохраняются; после
исправления shader package переключение можно повторить.
TAA/Upscale пока **опциональны**: малые фиксированные сцены показывают
уменьшение temporal variation, но тонкая геометрия теряет часть пиковой
+28
View File
@@ -629,3 +629,31 @@ TAA and 0.67 Upscale raw image sequences and bounded 720p cost on the physical
Linux GPU, with its own exact shader-source revision. TAA/Upscale remain opt-in
because scene quality and whole-frame
timing require game-specific comparison.
At clean source `ed523c6`, the final integrated temporal matrix repeated all
1,386 lossless frames across Direct, GPU frustum and GPU occlusion after adding
optional accepted/rejected-history pixel diagnostics and fixing the resize path
with diagnostic readback enabled. The failed Direct-to-GPU mode switch now
restores active TAA pipelines and history for a safe retry; a real Vulkan RED
test reproduced the old null-pipeline failure. Every frame used active Vulkan
validation and
reported zero errors; the 1,388 generated PNGs, including two contact sheets,
were byte-identical to the earlier branch matrix. The
[final matrix dossier](validation/p3-temporal-2026-09-24/matrix/integrated-ed523c6/README.md)
records the exact binary and shader hashes, eight post-open disocclusion frames,
reset comparisons, the 2× spatial reference and a separate 90-frame 720p
Off/TAA/Upscale profile. This bounded fixture shows reduced static-wire frame
variation, but its spatial reference has lower error and 0.67 Upscale does not
improve whole-frame GPU time. Both temporal modes remain opt-in; the diagnostic
GPU counter remains off during performance measurements.
At the same clean revision, Build and Export results carry the worker's
validated gameplay-source hash. A controlled queued-edit test first reproduced
the false stale-schema state, then passed after the fix. The complete Linux
Debug suite passed 76 of 77 CTests with one compositor-dependent window skip;
24 focused Linux Release tests passed. The real Release Editor exported the C++
2D, C++ 3D with Blender asset, and Lua-only games; each relocated package ran
120 offscreen frames on the physical RTX 2080 Ti with active Vulkan validation
and zero errors while the source project paths were hidden. The
[final combined dossier](validation/p1-p3-final-2026-09-24/README.md) holds the
clean-source verifier report and package manifests.
+2 -2
View File
@@ -1,6 +1,6 @@
# Документация Faset Engine
Актуализировано 24.09.2026. C++ MVP реализован и принят в зафиксированных профилях Linux и Windows; после него добавлены P1–P3. Результаты и пределы проверок находятся в [досье MVP](validation/mvp-acceptance.md), [P1 Release reference](validation/p1-iteration-2026-09-24/final-release/README.md), [P3 lighting](validation/p3-lighting-2026-09-24/README.md) и [P3 temporal](validation/p3-temporal-2026-09-24/README.md). Manual описывает текущие функции, PLAN отделяет их от следующих этапов.
Актуализировано 24.09.2026. C++ MVP реализован и принят в зафиксированных профилях Linux и Windows; после него добавлены P1–P3. Результаты и пределы проверок находятся в [досье MVP](validation/mvp-acceptance.md), [финальной совмещённой проверке P1/P3](validation/p1-p3-final-2026-09-24/README.md), [P1 Release reference](validation/p1-iteration-2026-09-24/final-release/README.md), [P3 lighting](validation/p3-lighting-2026-09-24/README.md) и [P3 temporal](validation/p3-temporal-2026-09-24/README.md). Manual описывает текущие функции, PLAN отделяет их от следующих этапов.
## Канонические документы
@@ -21,7 +21,7 @@
## Что уже выбрано
C++ с последующим Lua; EnTT; Vulkan 1.3, Render Graph и Slang; SDL3; Box2D/Box3D; собственный retained UI редактора с тёмной темой; ImGui для отладки; CMake/Ninja/Clang; JSON authoring и cooked binary; отдельный Player; статический gameplay и DLL/SO-плагины редактора под согласованный SDK; вложенные сцены и overrides; fixed tick и Update/FixedUpdate/LateUpdate.
C++ gameplay и подключаемый Lua-модуль; EnTT; Vulkan 1.3, Render Graph и Slang; SDL3; Box2D/Box3D; собственный retained UI редактора с тёмной темой; ImGui для отладки; CMake/Ninja/Clang; JSON authoring и cooked binary; отдельный Player; статический gameplay и DLL/SO-плагины редактора под согласованный SDK; вложенные сцены и overrides; fixed tick и Update/FixedUpdate/LateUpdate.
**MCP принадлежит только редактору и его сервисам.** Обычный Blender остаётся внешним инструментом; дополнительный плагин не является модификацией Blender. Сборка первой версии под каждую ОС проверяется на этой ОС.
+6 -3
View File
@@ -37,9 +37,12 @@ Use the **Visibility** selector to compare **Direct**, **GPU frustum**, and **GP
Use the **Temporal** selector for **Off**, **TAA**, or **Upscale**. Upscale shows a
5099% render-scale slider; output UI remains sharp. The requested/effective
mode, fallback reason, internal extent, history reset reason and temporal GPU
pass times are shown separately from visibility and HZB history. This selector
only changes the live Editor viewport. See [Temporal rendering](temporal.md).
mode, fallback reason, internal extent, clip/internal-pixel jitter, history
reset reason and temporal GPU pass times are shown separately from visibility
and HZB history. **Count temporal pixels (GPU readback)** optionally shows
accepted and rejected history samples for output-scene pixels; it adds GPU
work and is off by default. This selector only changes the live Editor
viewport. See [Temporal rendering](temporal.md).
The panel reports the previous completed frame: renderer wall time, GPU timestamp time where available, synchronous readback time, draw calls, packed vertices, culled meshes, textures, explicit Vulkan allocation sizes, actual validation availability/errors, and GPU pass-label count. It also shows whether GPU visibility ran, submitted indirect bins, visible instances, frustum rejects, deferred and post-pass visible instances, HZB history validity, counts per prepared LOD level, and GPU pass timings where available. GPU counts are explicitly marked unavailable until the first frame rendered with diagnostics open; only a displayed zero is a measured zero. **Previous HZB history: invalid** is expected after a camera cut or resize until compatible depth history is available. A current HZB preview can still exist after that first frame because it was built from the current depth. Renderer wall time includes waiting for GPU work; it is not thread CPU usage. Memory excludes driver-internal allocations. The overlay itself adds drawing work, so hide it for a baseline performance measurement.
+5
View File
@@ -21,6 +21,11 @@ Play captures the authoring document when requested. Editing the document while
build runs does not silently change that snapshot. Runtime movement, spawned objects,
and gameplay progress do not write back into authoring or its Undo history.
Build and Export capture gameplay sources when their worker begins. If you edit C++
while a job waits in the queue, it builds the newer snapshot and the Inspector's
schema status uses that snapshot's hash. An edit during the active build causes
the job to reject changed sources; run Build again after the edit.
The Player supports pause and single-step. Editor controls use a private session
control file; they do not expose runtime entity queries through MCP. Closing the
Player is observed by the Editor, which keeps its logs and authoring state.
+5 -1
View File
@@ -168,7 +168,11 @@ otherwise they are `null`. `gpu_allocated_bytes` includes live temporal targets
and histories, subject to the allocation limits described above. Compare full
frame GPU and renderer wall time too: scene raster savings can be offset by
resolve, memory and synchronous readback. A valid frame-level history flag says
the previous frame may be sampled, not that every pixel accepted it. For image
the previous frame may be sampled, not that every pixel accepted it. Normal
Player profiles set `temporal_counters_valid: false` and leave
`temporal_accepted_pixels`/`temporal_rejected_pixels` null. The Editor's optional
**Count temporal pixels (GPU readback)** toggle measures them for diagnostic
frames but adds GPU work, so keep it off for performance runs. For image
quality, inspect a still thin edge, a slow pan and a newly uncovered surface, and
compare the same frame against Off. See [Temporal rendering](temporal.md) for
mode controls and native C++ configuration.
+13 -1
View File
@@ -17,6 +17,15 @@ view, resize, scale switch or compatible shader reload is expected. A valid hist
does not imply every pixel reused it: newly visible surfaces can still reject
their individual history samples.
The panel also shows the jitter in clip coordinates and the equivalent internal
pixel offset. Turn on **Count temporal pixels (GPU readback)** only when you need
to inspect how many output-scene pixels actually blended previous color versus
rejected it. The counts are unavailable until a frame completes with the toggle
on; a displayed zero is a measured zero. This optional GPU buffer clear, atomic
count and readback add diagnostic work. Leave it off for timing comparisons.
The toggle affects only the Editor viewport. Counting pauses while the panel is
closed and resumes when it reopens with the checkbox still selected.
For a Player or exported game, select the mode at launch:
```sh
@@ -62,4 +71,7 @@ faster. Compare Off, TAA and Upscale at the target output resolution with both
still and moving cameras, and inspect thin objects and opening doors before
choosing a mode for a game. The [P3 temporal validation record](https://github.com/emil28092005/Faset_Engine/blob/main/docs/validation/p3-temporal-2026-09-24/README.md)
contains source captures, paired image measurements and a bounded 720p cost
profile.
profile. The [integrated three-path matrix](https://github.com/emil28092005/Faset_Engine/blob/main/docs/validation/p3-temporal-2026-09-24/matrix/integrated-ed523c6/README.md)
also compares Direct, GPU frustum and GPU occlusion, eight open-door frames,
and a 2× spatial reference. In that fixed thin-wire scene the 2× reference
remains closer to the target than TAA or Upscale.
@@ -4,7 +4,7 @@ The [unaltered version 2 workflow report](report.json) was produced by a clean
`6c2e8fa80036315a695f67f3c53524165fb4b10a` checkout on 2026-09-24.
It used disposable copies of the checked-in `collect-3d` and `examples/lua`
projects. Every sample, process log and Player profile is retained under `raw/`;
[the run log](workflow.log) shows the order and completion. The report identifies
the report records the order and completion. The report identifies
each input revision by SHA-256, and records all command arguments, phase labels,
configuration and dirty-tree state. Its SHA-256 is
`fd463c0cd12eed0a22143aa68bd732386804b0df4ecb2a3d9caa26f59dcfe6e2`.
@@ -98,6 +98,12 @@ faces. This is a measured tracking-budget miss, not a failed export or a reason
to redefine the counter silently. The linked dossier retains exact values,
atlas breakdown, raw profiles and source/toolchain provenance.
The [final integrated acceptance](../p1-p3-final-2026-09-24/README.md) reruns
all three relocated Release packages at clean `ed523c6` after the queued-edit
source-signature fix. A deterministic test first reproduced the false stale
schema state, then verified that Build and Export publish the worker's actual
source hash. This does not revise the older 240-frame timing or memory baseline.
The [Lua-only Linux Release dossier](../lua-release-2026-09-24/README.md) separately
records a relocated package that validated and rendered 120 frames after hiding
its source project, with 0 validation errors. The final fixture placement was
@@ -0,0 +1,68 @@
# P1 and P3 integrated acceptance — 2026-09-24
The final code revision is `ed523c61c106b8e19614e4d56f0b5d39b8392478`.
The [Release export report](report.json) records a clean source checkout and the
exact Editor SHA-256. The Editor exported `collect-2d`, `collect-3d` with its
Blender exit arch, and the Lua-only example. Each package was relocated to a
Unicode-named path outside its disposable source project; those source paths
were hidden while the Player validated and rendered from an unrelated working
directory. All three packages passed **120/120** offscreen frames on a physical
NVIDIA GeForce RTX 2080 Ti with active Vulkan validation and zero errors. The
[file checksums](SHA256SUMS.txt), package manifests for
[2D](evidence/collect-2d-manifest.json),
[3D](evidence/collect-3d-manifest.json) and
[Lua](evidence/lua-manifest.json), and raw [2D](evidence/collect-2d-profile.json),
[3D](evidence/collect-3d-profile.json), and [Lua](evidence/lua-profile.json)
profiles preserve the result without duplicating native build directories.
| Final-code check | Result |
| --- | --- |
| Linux Debug full CTest | 76 passed, 1 compositor-dependent native window skip, 0 failed (77 registered) |
| Linux Release P1/P3-focused CTest | 24 passed, 0 failed |
| Relocated Release games on physical Linux GPU | C++ 2D, C++ 3D, Lua-only: 120 frames each; validation active, 0 errors |
| [Native/manual CI](https://github.com/emil28092005/Faset_Engine/actions/runs/35949830254) | Linux and Windows native checks plus strict MkDocs passed |
| [Windows software-Vulkan CI](https://github.com/emil28092005/Faset_Engine/actions/runs/35949830251) | Final revision run; see linked job result |
The P1 queued-edit regression verifies that an asynchronous Build or Export
reports the gameplay-source hash captured by its worker, not the hash from when
the command entered the queue. The P3 shader-reload regression first reproduced
a null-pipeline crash during Direct-to-GPU switching with TAA active; the
failed transition now preserves the old pipelines and history and can be
retried after restoring the shader package. Both regressions are in the full
Linux suite and Windows native/graphics checks.
The [final P3 temporal matrix](../p3-temporal-2026-09-24/matrix/integrated-ed523c6/README.md)
records 1,386 lossless frames across Direct, GPU frustum and GPU occlusion,
plus an independent 90-frame 720p profile. All captures used active Vulkan
validation with zero errors; its 1,388 PNG files are byte-identical to the
earlier branch matrix. The [integrated lighting study](../../studies/24-p3-integrated-forward-plus-2026-09-24.md)
contains 7,560 frame rows from the earlier clean `4a3453e` revision, on the
same physical GPU and shader path. Its dense tile build+raster case was slower
than forward; the localized-light case was faster, so `Auto` remains forward.
The P1 [240-frame Release reference](../p1-iteration-2026-09-24/final-release/README.md)
passed the original small-demo timing budgets but missed the old 20 MiB
explicit-allocation target at 43.02/43.12 MiB because both shadow atlases are
allocated eagerly. The final revision does not change that allocation policy.
TAA and 0.67 Upscale remain opt-in. The 2× spatial reference was more accurate
on the fixed thin-wire fixture, and Upscale did not reduce whole-frame GPU time
in the sparse 720p test. These checks cover one physical Linux GPU and Windows
SwiftShader functionality; a physical Windows GPU and broader driver families
still need separate testing.
Reproduce the relocated Release check from a clean source checkout with the
documented dependencies:
```sh
cmake --preset linux-release
cmake --build --preset linux-release --target faset_editor --parallel 2
python3 tools/verify_playable_exports.py \
--editor build/linux-release/faset_editor \
--output /tmp/faset-p1-p3-export-new \
--standalone-root /tmp/faset-p1-p3-games-new \
--include-lua
```
Use fresh output paths. The verifier retains the full packages and captures
outside the repository, while this dossier commits the report, selected
manifests, per-frame profiles, and run records.
@@ -0,0 +1,13 @@
53aa10c37bb1c86a4cbecd040c8db3ea2104225c5463dde2475544d7ccc4e098 report.json
0b25fbe9008fc8d0af4ee24fac8eeafe986edfcf117db5c6c25ef03e98e4e1ed evidence/collect-2d-manifest.json
51b3756c7e81b5e1d8d48a0a145725745b6557aa722aca2c0bc2a116540f6e50 evidence/collect-2d-profile.json
893f77cbb5312a72ba51977a41bf1821ce7d8598fba6298eb12cf71d0f9e0653 evidence/collect-2d-run.json
ca001236d8b832b6c4243ba89eccf7321c97791d4bc65439abab94fce84c7a12 evidence/collect-2d-validate.json
3df6c30b4ee77f39a3669ca861f91ecafe65af83166863265c7c3a71ba02acee evidence/collect-3d-manifest.json
f1257c452464c772b396e49d5cc82e308731d390acf806340319eff52b1e1ca3 evidence/collect-3d-profile.json
8c01257fa600e0574907dad4120d13192d965df2a617d3f120ef0a2a0384aff2 evidence/collect-3d-run.json
ac2393c08fbdf65cc49cbf4fb67ba2f19744c21fea24e442be1fb5adaf3a90e6 evidence/collect-3d-validate.json
bf9b158062e04b9f6c6de0b19ac37082e5ab1dec353a4c7d55d5ee645c0d4a47 evidence/lua-manifest.json
97fd804af08b93b584572282824a34a98ab0f3b868783555f3ac425d68c186ba evidence/lua-profile.json
a7ce66d0bc5e4d986ca29a2583149439f8b6e9eb269ac52fe6124b7903538d67 evidence/lua-run.json
b944b17455adad19dffb2e80b6f5895b7969e98321c5618ae1f67e26542bab38 evidence/lua-validate.json
@@ -0,0 +1,269 @@
{
"asset_generations": {},
"build_fingerprint": "4e24b57bd9e1c76da8e01d84369654fcb075b5c01560223eb659d73fea9d009a",
"configuration": "Release",
"executable": "faset_player",
"files": [
{
"path": "README.txt",
"sha256": "82bf72bc542643f6c4090e0a5de69b0014ca3fa17c6f9dfb12cc41e44c8b8db6",
"size": 262
},
{
"path": "Notices/Faset-NOTICE.txt",
"sha256": "30c2e7e80f5153b31ab57675e07246aef9165965d64e36022b426a26449ece3f",
"size": 204
},
{
"path": "Notices/dependencies.json",
"sha256": "a54639ad2d9ad13c2e5f1ec90d6775f5dfc493656789b78c7e44debe2a378fdc",
"size": 2206
},
{
"path": "Notices/stb/LICENSE",
"sha256": "bebfe904b14301657e4e5d655c811d51fd31b97c455b9cc2d8600d6bac6cff63",
"size": 2510
},
{
"path": "Notices/json/LICENSE.MIT",
"sha256": "46a65cffd1ea955132d95a8dd921640714a8d6b537d2e4e482d31145ae95b603",
"size": 1076
},
{
"path": "Notices/box3d/LICENSE",
"sha256": "da5e31a26bf3cfd5ba5c96d6823e480128c81e76c107ef9d3ee5d94789184b90",
"size": 1067
},
{
"path": "Notices/box2d/LICENSE",
"sha256": "68a3e676d7e94093b102d5cba0d4e04af812040d6f230c3db67a6664574e43d2",
"size": 1067
},
{
"path": "Notices/entt/LICENSE",
"sha256": "0785027ce472d7c61f05fba664a1d3ba6639c1593ced351ad9e4bed868765d99",
"size": 1097
},
{
"path": "Notices/sdl3/LICENSE.txt",
"sha256": "97f35b302b361680ec1e891e95d2d52097bb95abff361434916d99dc1305f127",
"size": 884
},
{
"path": "shaders/gpuTemporalVertexMain.reflection.json",
"sha256": "7a8efe2645e7ce465ca44d19f8cfb2eb6c767abd1c3ce12ed69a149a50be8a8c",
"size": 3308
},
{
"path": "shaders/gpuTemporalVertexMain.spv",
"sha256": "dfe7309aafbd41974668b295e179354965db440e4156b9f12d6a67db16b357f9",
"size": 5996
},
{
"path": "shaders/temporalFragmentMain.reflection.json",
"sha256": "e36452227788f3703d7342b6d9a7a0efef74ce4da3aa96bb176a26e169ec3628",
"size": 3874
},
{
"path": "shaders/temporalFragmentMain.spv",
"sha256": "03adc6673276979b3ea46becf3a36940d3061af77cb8c965c7471feff8dbf89a",
"size": 30976
},
{
"path": "shaders/temporalVertexMain.reflection.json",
"sha256": "6f7812ce88b14bca62a6d2ad82a8657e2ee48c252558f34677c6a2bd980a7edb",
"size": 3935
},
{
"path": "shaders/temporalVertexMain.spv",
"sha256": "6cc3535c952a33ee46fd417fbec7fcad8f24357508b2119256b3077be3d60955",
"size": 1784
},
{
"path": "shaders/temporalCompositeFragmentMain.reflection.json",
"sha256": "44765a41fc362c9a97b1a19834f285e2e7facb24d8715e3d8559b8e9633a7a0e",
"size": 959
},
{
"path": "shaders/temporalCompositeFragmentMain.spv",
"sha256": "9e21c8534c0e70a58ae018fb2d143bf9cfb70112e71b67585f525eef0aecad1b",
"size": 768
},
{
"path": "shaders/temporalCompositeVertexMain.reflection.json",
"sha256": "a3a2ea858bd038423896043b0703704f707addceb5bd56721cd897f6bd092065",
"size": 956
},
{
"path": "shaders/temporalCompositeVertexMain.spv",
"sha256": "6b19f65b64f40d0a249660fdfba9dd5d95831ffab7314a307bf1f5cf39c6a248",
"size": 340
},
{
"path": "shaders/temporalResolveMain.reflection.json",
"sha256": "07177e347d62c243264d5b70a6d0c24611fddeb30fcce6b448dd1488af8371e3",
"size": 3381
},
{
"path": "shaders/temporalResolveMain.spv",
"sha256": "5f579dfe762d201db5ba33483b14bd0e0d37051735874919a3913ee00157bad7",
"size": 23236
},
{
"path": "shaders/gpuPostCullMain.reflection.json",
"sha256": "19ce128388c7f88e0c517fb58a25e46f1382e35ae5f376b10eebe155a2811c4c",
"size": 3591
},
{
"path": "shaders/gpuHzbMain.reflection.json",
"sha256": "589818f670881c64f3aba726ee3bc82fe4b9d835a347f99134e0e157dc4a112e",
"size": 2050
},
{
"path": "shaders/gpuCullMain.reflection.json",
"sha256": "8986a45a8d29743d16f0caece9181b18c85d6490d93b4a56cdb4f53052890f3f",
"size": 3587
},
{
"path": "shaders/gpuShadowMain.reflection.json",
"sha256": "96b3620b163dadf214933cfba6600b1b6a835c4d98b75b1f83e6ccd3dedb2425",
"size": 2755
},
{
"path": "shaders/gpuVertexMain.reflection.json",
"sha256": "01a6cc1bbf3c11c558560d6f8557fd4582d392906ed20a8c729673d0ebf640ed",
"size": 3098
},
{
"path": "shaders/gpuPostCullMain.spv",
"sha256": "1f8edd3be1f99f9433494a6f7be68f1317d6e7099e19354a7b8130d5d932224d",
"size": 12548
},
{
"path": "shaders/gpuHzbMain.spv",
"sha256": "08682362ee2120ed19d260e613285071747c3e436bb09bb6238e46f9cedc2308",
"size": 4140
},
{
"path": "shaders/gpuCullMain.spv",
"sha256": "e5ea6589ddb3613b59f8e58420be95a534cf4149816bc65bae26b1395c638955",
"size": 16288
},
{
"path": "shaders/gpuShadowMain.spv",
"sha256": "f56e0ae3e9b31cb1e3f24e379c81e11c853f8a7102648aaaebc92a17c7e8e53c",
"size": 2492
},
{
"path": "shaders/gpuVertexMain.spv",
"sha256": "32421d4a91f3a88d5210fee7af34b48bcad83072f14e2ccb9ef2ff983e45f78f",
"size": 5016
},
{
"path": "shaders/shadowMain.reflection.json",
"sha256": "d39e2f83c797589296eac9dce139b9ad836a895d6685bc40f79dd2609d687fee",
"size": 3597
},
{
"path": "shaders/fragmentMain.reflection.json",
"sha256": "2b07af2aae7578bdb6c2aa22658538821608b1dd5aeddd7b06e42b2e78cedf12",
"size": 3596
},
{
"path": "shaders/vertexMain.reflection.json",
"sha256": "b3bdff863d53a0b385e06a36701a83a6ecafe9a93e97281a732cce8ff862c0db",
"size": 3591
},
{
"path": "shaders/lightTileMain.reflection.json",
"sha256": "bf6a9256aaa6d6edacfa1e1c265d7c8ce2c1e4ea4036e0bea078c22fd4b536ca",
"size": 1978
},
{
"path": "shaders/lightTileMain.spv",
"sha256": "92850edcc5ee5b586a90ce84ee69a98075a6fff3c13db4a57528d9431afe8b68",
"size": 6800
},
{
"path": "shaders/shadowMain.spv",
"sha256": "7643b4d688492b5ee923b9606f0b0e70343ca05fa67673838206119a6f86d8d8",
"size": 784
},
{
"path": "shaders/fragmentMain.spv",
"sha256": "fea4dd48664a510bad12b5e8582f2db798d4dbea62ce0de35dc2acfe32372733",
"size": 28960
},
{
"path": "shaders/vertexMain.spv",
"sha256": "1ad2631c35d654f48166321ae43d4165043e1b919b14f1dc61caf97b1ada0898",
"size": 1224
},
{
"path": "faset_player",
"sha256": "0ad5fa3dd08090b4fcfccf91714b86c6454dac43b37fbdbfeb2f3e5abb18dd51",
"size": 6163032
},
{
"path": "scene.fscene",
"sha256": "0d7b221abc1cae5e9f1d04357c684ac6993f5878d634b4b950eec66dd8e55b2a",
"size": 6214
}
],
"format": "faset.export",
"generation": "69bfdd90-4539-4fd5-852e-f43012482808",
"lua_enabled": false,
"lua_fingerprint": "",
"platform": "linux",
"prerequisites": [
"Linux x86_64",
"Vulkan 1.3 driver",
"Compatible glibc and libstdc++ runtime"
],
"renderer_profile": {
"api": "Vulkan 1.3",
"materials": [
"base-color factor and texture",
"metallic and roughness factors"
],
"required_features": [
"dynamicRendering",
"synchronization2"
],
"shadow_atlases": {
"caster_draw_limit": 4096,
"fallback_resolution": 1024,
"local_face_limit": 16,
"preferred_resolution": 2048,
"sampled_d32_required": true,
"sun_cascade_limit": 4
},
"texture_sampling": "linear clamp, one mip level",
"unsupported_material_features": [
"normal maps",
"metallic-roughness maps",
"emissive and occlusion maps",
"alpha mode selection",
"unlit mode",
"per-material face culling"
]
},
"scene_hash": "fdfa1c49cf78a1cf52cd41b201c35bb0b5f852c90b7626b2a7f17da3e2e3e24c",
"simulation": {
"fixed_delta": 0.016666666666666666,
"gravity": [
0,
-9.81,
0
],
"max_catch_up_ticks": 4,
"physics_substeps": 4
},
"units": {
"angle": "radian",
"coordinates": "right-handed Y-up",
"distance": "metre"
},
"validation_log": "{\"dimension\":2,\"validated\":true}\n",
"version": 1
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,18 @@
{
"arguments": [
"/tmp/faset-p1-p3-ed523c6-games/Faset Café 世界/collect-2d/faset_player",
"--headless",
"--frames",
"120",
"--capture",
"/tmp/faset-p1-p3-ed523c6-games/Faset Café 世界/collect-2d/verification.ppm",
"--profile",
"/tmp/faset-p1-p3-ed523c6-games/Faset Café 世界/collect-2d/profile.json"
],
"cwd": "/tmp/faset-p1-p3-ed523c6-games/empty-working-directory",
"seconds": 0.7100785550137516,
"exit_code": 0,
"timed_out": false,
"stdout": "New round: collect the three gold cubes, then reach the green exit. E resets.\n{\"device\":\"NVIDIA GeForce RTX 2080 Ti\",\"dimension\":2,\"effective_temporal_mode\":\"off\",\"effective_visibility_mode\":\"direct\",\"frames\":120,\"gpu_visibility_active\":false,\"temporal_mode\":\"off\",\"ticks\":120,\"validation_errors\":0,\"visibility_mode\":\"direct\"}\n",
"stderr": ""
}
@@ -0,0 +1,12 @@
{
"arguments": [
"/tmp/faset-p1-p3-ed523c6-games/Faset Café 世界/collect-2d/faset_player",
"--validate"
],
"cwd": "/tmp/faset-p1-p3-ed523c6-games/empty-working-directory",
"seconds": 0.018040610011667013,
"exit_code": 0,
"timed_out": false,
"stdout": "{\"dimension\":2,\"validated\":true}\n",
"stderr": ""
}
@@ -0,0 +1,296 @@
{
"asset_generations": {
"5832763b-3ed0-44d6-9088-0b524f196a91": "4a5bfcc1437a7b4d65c388da2beace0308cceda8e16503d08ce676260f21d5c2"
},
"build_fingerprint": "decc796cd50c86e1550d33a559b4f876b691928a282c44583990589087b8579f",
"configuration": "Release",
"executable": "faset_player",
"files": [
{
"path": "README.txt",
"sha256": "82bf72bc542643f6c4090e0a5de69b0014ca3fa17c6f9dfb12cc41e44c8b8db6",
"size": 262
},
{
"path": "Notices/Faset-NOTICE.txt",
"sha256": "30c2e7e80f5153b31ab57675e07246aef9165965d64e36022b426a26449ece3f",
"size": 204
},
{
"path": "Notices/dependencies.json",
"sha256": "a54639ad2d9ad13c2e5f1ec90d6775f5dfc493656789b78c7e44debe2a378fdc",
"size": 2206
},
{
"path": "Notices/stb/LICENSE",
"sha256": "bebfe904b14301657e4e5d655c811d51fd31b97c455b9cc2d8600d6bac6cff63",
"size": 2510
},
{
"path": "Notices/json/LICENSE.MIT",
"sha256": "46a65cffd1ea955132d95a8dd921640714a8d6b537d2e4e482d31145ae95b603",
"size": 1076
},
{
"path": "Notices/box3d/LICENSE",
"sha256": "da5e31a26bf3cfd5ba5c96d6823e480128c81e76c107ef9d3ee5d94789184b90",
"size": 1067
},
{
"path": "Notices/box2d/LICENSE",
"sha256": "68a3e676d7e94093b102d5cba0d4e04af812040d6f230c3db67a6664574e43d2",
"size": 1067
},
{
"path": "Notices/entt/LICENSE",
"sha256": "0785027ce472d7c61f05fba664a1d3ba6639c1593ced351ad9e4bed868765d99",
"size": 1097
},
{
"path": "Notices/sdl3/LICENSE.txt",
"sha256": "97f35b302b361680ec1e891e95d2d52097bb95abff361434916d99dc1305f127",
"size": 884
},
{
"path": "assets/5832763b-3ed0-44d6-9088-0b524f196a91/current.json",
"sha256": "b0732959808ce61ef5a3223fba2d9ad8c17a3ea7873d4a81c00aadee6c51032e",
"size": 134
},
{
"path": "assets/5832763b-3ed0-44d6-9088-0b524f196a91/generations/4a5bfcc1437a7b4d65c388da2beace0308cceda8e16503d08ce676260f21d5c2/manifest.json",
"sha256": "ee3f68794c6dc44ab492b1ba4640aa74e4de79a5ec10aed8dcdd45a03afc508e",
"size": 4532
},
{
"path": "assets/5832763b-3ed0-44d6-9088-0b524f196a91/generations/4a5bfcc1437a7b4d65c388da2beace0308cceda8e16503d08ce676260f21d5c2/meshes/mesh-93b5b3e52cb6bb120fefb80e2d8e222b-0.fmesh",
"sha256": "3875c16ea628d4126373ebfe07816621fbad3961596a2fcd112f1eec0e378071",
"size": 928
},
{
"path": "assets/5832763b-3ed0-44d6-9088-0b524f196a91/generations/4a5bfcc1437a7b4d65c388da2beace0308cceda8e16503d08ce676260f21d5c2/meshes/mesh-0961e2a3f92977836a3aa80cab09277e-0.fmesh",
"sha256": "98b38aca7d2786c58a2265ba4d1f2255123f03d31d947e239232cf55bfdc2c97",
"size": 928
},
{
"path": "assets/5832763b-3ed0-44d6-9088-0b524f196a91/generations/4a5bfcc1437a7b4d65c388da2beace0308cceda8e16503d08ce676260f21d5c2/meshes/mesh-fc069a07a87e0f831fd92efdbc4efa1f-0.fmesh",
"sha256": "98b38aca7d2786c58a2265ba4d1f2255123f03d31d947e239232cf55bfdc2c97",
"size": 928
},
{
"path": "shaders/gpuTemporalVertexMain.reflection.json",
"sha256": "7a8efe2645e7ce465ca44d19f8cfb2eb6c767abd1c3ce12ed69a149a50be8a8c",
"size": 3308
},
{
"path": "shaders/gpuTemporalVertexMain.spv",
"sha256": "dfe7309aafbd41974668b295e179354965db440e4156b9f12d6a67db16b357f9",
"size": 5996
},
{
"path": "shaders/temporalFragmentMain.reflection.json",
"sha256": "e36452227788f3703d7342b6d9a7a0efef74ce4da3aa96bb176a26e169ec3628",
"size": 3874
},
{
"path": "shaders/temporalFragmentMain.spv",
"sha256": "03adc6673276979b3ea46becf3a36940d3061af77cb8c965c7471feff8dbf89a",
"size": 30976
},
{
"path": "shaders/temporalVertexMain.reflection.json",
"sha256": "6f7812ce88b14bca62a6d2ad82a8657e2ee48c252558f34677c6a2bd980a7edb",
"size": 3935
},
{
"path": "shaders/temporalVertexMain.spv",
"sha256": "6cc3535c952a33ee46fd417fbec7fcad8f24357508b2119256b3077be3d60955",
"size": 1784
},
{
"path": "shaders/temporalCompositeFragmentMain.reflection.json",
"sha256": "44765a41fc362c9a97b1a19834f285e2e7facb24d8715e3d8559b8e9633a7a0e",
"size": 959
},
{
"path": "shaders/temporalCompositeFragmentMain.spv",
"sha256": "9e21c8534c0e70a58ae018fb2d143bf9cfb70112e71b67585f525eef0aecad1b",
"size": 768
},
{
"path": "shaders/temporalCompositeVertexMain.reflection.json",
"sha256": "a3a2ea858bd038423896043b0703704f707addceb5bd56721cd897f6bd092065",
"size": 956
},
{
"path": "shaders/temporalCompositeVertexMain.spv",
"sha256": "6b19f65b64f40d0a249660fdfba9dd5d95831ffab7314a307bf1f5cf39c6a248",
"size": 340
},
{
"path": "shaders/temporalResolveMain.reflection.json",
"sha256": "07177e347d62c243264d5b70a6d0c24611fddeb30fcce6b448dd1488af8371e3",
"size": 3381
},
{
"path": "shaders/temporalResolveMain.spv",
"sha256": "5f579dfe762d201db5ba33483b14bd0e0d37051735874919a3913ee00157bad7",
"size": 23236
},
{
"path": "shaders/gpuPostCullMain.reflection.json",
"sha256": "19ce128388c7f88e0c517fb58a25e46f1382e35ae5f376b10eebe155a2811c4c",
"size": 3591
},
{
"path": "shaders/gpuHzbMain.reflection.json",
"sha256": "589818f670881c64f3aba726ee3bc82fe4b9d835a347f99134e0e157dc4a112e",
"size": 2050
},
{
"path": "shaders/gpuCullMain.reflection.json",
"sha256": "8986a45a8d29743d16f0caece9181b18c85d6490d93b4a56cdb4f53052890f3f",
"size": 3587
},
{
"path": "shaders/gpuShadowMain.reflection.json",
"sha256": "96b3620b163dadf214933cfba6600b1b6a835c4d98b75b1f83e6ccd3dedb2425",
"size": 2755
},
{
"path": "shaders/gpuVertexMain.reflection.json",
"sha256": "01a6cc1bbf3c11c558560d6f8557fd4582d392906ed20a8c729673d0ebf640ed",
"size": 3098
},
{
"path": "shaders/gpuPostCullMain.spv",
"sha256": "1f8edd3be1f99f9433494a6f7be68f1317d6e7099e19354a7b8130d5d932224d",
"size": 12548
},
{
"path": "shaders/gpuHzbMain.spv",
"sha256": "08682362ee2120ed19d260e613285071747c3e436bb09bb6238e46f9cedc2308",
"size": 4140
},
{
"path": "shaders/gpuCullMain.spv",
"sha256": "e5ea6589ddb3613b59f8e58420be95a534cf4149816bc65bae26b1395c638955",
"size": 16288
},
{
"path": "shaders/gpuShadowMain.spv",
"sha256": "f56e0ae3e9b31cb1e3f24e379c81e11c853f8a7102648aaaebc92a17c7e8e53c",
"size": 2492
},
{
"path": "shaders/gpuVertexMain.spv",
"sha256": "32421d4a91f3a88d5210fee7af34b48bcad83072f14e2ccb9ef2ff983e45f78f",
"size": 5016
},
{
"path": "shaders/shadowMain.reflection.json",
"sha256": "d39e2f83c797589296eac9dce139b9ad836a895d6685bc40f79dd2609d687fee",
"size": 3597
},
{
"path": "shaders/fragmentMain.reflection.json",
"sha256": "2b07af2aae7578bdb6c2aa22658538821608b1dd5aeddd7b06e42b2e78cedf12",
"size": 3596
},
{
"path": "shaders/vertexMain.reflection.json",
"sha256": "b3bdff863d53a0b385e06a36701a83a6ecafe9a93e97281a732cce8ff862c0db",
"size": 3591
},
{
"path": "shaders/lightTileMain.reflection.json",
"sha256": "bf6a9256aaa6d6edacfa1e1c265d7c8ce2c1e4ea4036e0bea078c22fd4b536ca",
"size": 1978
},
{
"path": "shaders/lightTileMain.spv",
"sha256": "92850edcc5ee5b586a90ce84ee69a98075a6fff3c13db4a57528d9431afe8b68",
"size": 6800
},
{
"path": "shaders/shadowMain.spv",
"sha256": "7643b4d688492b5ee923b9606f0b0e70343ca05fa67673838206119a6f86d8d8",
"size": 784
},
{
"path": "shaders/fragmentMain.spv",
"sha256": "fea4dd48664a510bad12b5e8582f2db798d4dbea62ce0de35dc2acfe32372733",
"size": 28960
},
{
"path": "shaders/vertexMain.spv",
"sha256": "1ad2631c35d654f48166321ae43d4165043e1b919b14f1dc61caf97b1ada0898",
"size": 1224
},
{
"path": "faset_player",
"sha256": "aaca5e66ea65e7ff71e1e9ecb4dbc7f461cc3927dd422a90785ec669d7afb171",
"size": 6168048
},
{
"path": "scene.fscene",
"sha256": "21c364140669ec82c6886102667b255df5ccdf0ec77e0ca64060f84dd7b86632",
"size": 8639
}
],
"format": "faset.export",
"generation": "6c1dbd3a-7254-4b80-9dd5-ea433c42692c",
"lua_enabled": false,
"lua_fingerprint": "",
"platform": "linux",
"prerequisites": [
"Linux x86_64",
"Vulkan 1.3 driver",
"Compatible glibc and libstdc++ runtime"
],
"renderer_profile": {
"api": "Vulkan 1.3",
"materials": [
"base-color factor and texture",
"metallic and roughness factors"
],
"required_features": [
"dynamicRendering",
"synchronization2"
],
"shadow_atlases": {
"caster_draw_limit": 4096,
"fallback_resolution": 1024,
"local_face_limit": 16,
"preferred_resolution": 2048,
"sampled_d32_required": true,
"sun_cascade_limit": 4
},
"texture_sampling": "linear clamp, one mip level",
"unsupported_material_features": [
"normal maps",
"metallic-roughness maps",
"emissive and occlusion maps",
"alpha mode selection",
"unlit mode",
"per-material face culling"
]
},
"scene_hash": "ee12794145c14ba5b599c5d9ae21648cccdfa91c47ee7742549f60d5fe7bc3e0",
"simulation": {
"fixed_delta": 0.016666666666666666,
"gravity": [
0,
-9.81,
0
],
"max_catch_up_ticks": 4,
"physics_substeps": 4
},
"units": {
"angle": "radian",
"coordinates": "right-handed Y-up",
"distance": "metre"
},
"validation_log": "warning: material material-bb63b094febbf90bb7049c9bcf7587bc has features beyond the initial base-color/PBR renderer\n{\"dimension\":3,\"validated\":true}\n",
"version": 1
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,18 @@
{
"arguments": [
"/tmp/faset-p1-p3-ed523c6-games/Faset Café 世界/collect-3d/faset_player",
"--headless",
"--frames",
"120",
"--capture",
"/tmp/faset-p1-p3-ed523c6-games/Faset Café 世界/collect-3d/verification.ppm",
"--profile",
"/tmp/faset-p1-p3-ed523c6-games/Faset Café 世界/collect-3d/profile.json"
],
"cwd": "/tmp/faset-p1-p3-ed523c6-games/empty-working-directory",
"seconds": 0.6615268219902646,
"exit_code": 0,
"timed_out": false,
"stdout": "New round: collect the three gold cubes, then reach the green exit. E resets.\n{\"device\":\"NVIDIA GeForce RTX 2080 Ti\",\"dimension\":3,\"effective_temporal_mode\":\"off\",\"effective_visibility_mode\":\"direct\",\"frames\":120,\"gpu_visibility_active\":false,\"temporal_mode\":\"off\",\"ticks\":120,\"validation_errors\":0,\"visibility_mode\":\"direct\"}\n",
"stderr": "warning: material material-bb63b094febbf90bb7049c9bcf7587bc has features beyond the initial base-color/PBR renderer\n"
}
@@ -0,0 +1,12 @@
{
"arguments": [
"/tmp/faset-p1-p3-ed523c6-games/Faset Café 世界/collect-3d/faset_player",
"--validate"
],
"cwd": "/tmp/faset-p1-p3-ed523c6-games/empty-working-directory",
"seconds": 0.012342931993771344,
"exit_code": 0,
"timed_out": false,
"stdout": "{\"dimension\":3,\"validated\":true}\n",
"stderr": "warning: material material-bb63b094febbf90bb7049c9bcf7587bc has features beyond the initial base-color/PBR renderer\n"
}
@@ -0,0 +1,294 @@
{
"asset_generations": {},
"build_fingerprint": "29bd60b58d0331ca9aef6738bc2de9b6e1fc700987de05730207cbd288013871",
"configuration": "Release",
"executable": "faset_player",
"files": [
{
"path": "README.txt",
"sha256": "82bf72bc542643f6c4090e0a5de69b0014ca3fa17c6f9dfb12cc41e44c8b8db6",
"size": 262
},
{
"path": "Notices/Faset-NOTICE.txt",
"sha256": "30c2e7e80f5153b31ab57675e07246aef9165965d64e36022b426a26449ece3f",
"size": 204
},
{
"path": "Notices/dependencies.json",
"sha256": "262e8f63cf21c516829b1fedb0900ac90e76d62aa8f78d9ad02d8f24e0359e74",
"size": 2468
},
{
"path": "Notices/lua/LICENSE.txt",
"sha256": "e42d195c77d3ad7255ee9c874772d3c53998e7f60f9acf453d4630fa161e0bfe",
"size": 1126
},
{
"path": "Notices/stb/LICENSE",
"sha256": "bebfe904b14301657e4e5d655c811d51fd31b97c455b9cc2d8600d6bac6cff63",
"size": 2510
},
{
"path": "Notices/json/LICENSE.MIT",
"sha256": "46a65cffd1ea955132d95a8dd921640714a8d6b537d2e4e482d31145ae95b603",
"size": 1076
},
{
"path": "Notices/box3d/LICENSE",
"sha256": "da5e31a26bf3cfd5ba5c96d6823e480128c81e76c107ef9d3ee5d94789184b90",
"size": 1067
},
{
"path": "Notices/box2d/LICENSE",
"sha256": "68a3e676d7e94093b102d5cba0d4e04af812040d6f230c3db67a6664574e43d2",
"size": 1067
},
{
"path": "Notices/entt/LICENSE",
"sha256": "0785027ce472d7c61f05fba664a1d3ba6639c1593ced351ad9e4bed868765d99",
"size": 1097
},
{
"path": "Notices/sdl3/LICENSE.txt",
"sha256": "97f35b302b361680ec1e891e95d2d52097bb95abff361434916d99dc1305f127",
"size": 884
},
{
"path": "shaders/gpuTemporalVertexMain.reflection.json",
"sha256": "7a8efe2645e7ce465ca44d19f8cfb2eb6c767abd1c3ce12ed69a149a50be8a8c",
"size": 3308
},
{
"path": "shaders/gpuTemporalVertexMain.spv",
"sha256": "dfe7309aafbd41974668b295e179354965db440e4156b9f12d6a67db16b357f9",
"size": 5996
},
{
"path": "shaders/temporalFragmentMain.reflection.json",
"sha256": "e36452227788f3703d7342b6d9a7a0efef74ce4da3aa96bb176a26e169ec3628",
"size": 3874
},
{
"path": "shaders/temporalFragmentMain.spv",
"sha256": "03adc6673276979b3ea46becf3a36940d3061af77cb8c965c7471feff8dbf89a",
"size": 30976
},
{
"path": "shaders/temporalVertexMain.reflection.json",
"sha256": "6f7812ce88b14bca62a6d2ad82a8657e2ee48c252558f34677c6a2bd980a7edb",
"size": 3935
},
{
"path": "shaders/temporalVertexMain.spv",
"sha256": "6cc3535c952a33ee46fd417fbec7fcad8f24357508b2119256b3077be3d60955",
"size": 1784
},
{
"path": "shaders/temporalCompositeFragmentMain.reflection.json",
"sha256": "44765a41fc362c9a97b1a19834f285e2e7facb24d8715e3d8559b8e9633a7a0e",
"size": 959
},
{
"path": "shaders/temporalCompositeFragmentMain.spv",
"sha256": "9e21c8534c0e70a58ae018fb2d143bf9cfb70112e71b67585f525eef0aecad1b",
"size": 768
},
{
"path": "shaders/temporalCompositeVertexMain.reflection.json",
"sha256": "a3a2ea858bd038423896043b0703704f707addceb5bd56721cd897f6bd092065",
"size": 956
},
{
"path": "shaders/temporalCompositeVertexMain.spv",
"sha256": "6b19f65b64f40d0a249660fdfba9dd5d95831ffab7314a307bf1f5cf39c6a248",
"size": 340
},
{
"path": "shaders/temporalResolveMain.reflection.json",
"sha256": "07177e347d62c243264d5b70a6d0c24611fddeb30fcce6b448dd1488af8371e3",
"size": 3381
},
{
"path": "shaders/temporalResolveMain.spv",
"sha256": "5f579dfe762d201db5ba33483b14bd0e0d37051735874919a3913ee00157bad7",
"size": 23236
},
{
"path": "shaders/gpuPostCullMain.reflection.json",
"sha256": "19ce128388c7f88e0c517fb58a25e46f1382e35ae5f376b10eebe155a2811c4c",
"size": 3591
},
{
"path": "shaders/gpuHzbMain.reflection.json",
"sha256": "589818f670881c64f3aba726ee3bc82fe4b9d835a347f99134e0e157dc4a112e",
"size": 2050
},
{
"path": "shaders/gpuCullMain.reflection.json",
"sha256": "8986a45a8d29743d16f0caece9181b18c85d6490d93b4a56cdb4f53052890f3f",
"size": 3587
},
{
"path": "shaders/gpuShadowMain.reflection.json",
"sha256": "96b3620b163dadf214933cfba6600b1b6a835c4d98b75b1f83e6ccd3dedb2425",
"size": 2755
},
{
"path": "shaders/gpuVertexMain.reflection.json",
"sha256": "01a6cc1bbf3c11c558560d6f8557fd4582d392906ed20a8c729673d0ebf640ed",
"size": 3098
},
{
"path": "shaders/gpuPostCullMain.spv",
"sha256": "1f8edd3be1f99f9433494a6f7be68f1317d6e7099e19354a7b8130d5d932224d",
"size": 12548
},
{
"path": "shaders/gpuHzbMain.spv",
"sha256": "08682362ee2120ed19d260e613285071747c3e436bb09bb6238e46f9cedc2308",
"size": 4140
},
{
"path": "shaders/gpuCullMain.spv",
"sha256": "e5ea6589ddb3613b59f8e58420be95a534cf4149816bc65bae26b1395c638955",
"size": 16288
},
{
"path": "shaders/gpuShadowMain.spv",
"sha256": "f56e0ae3e9b31cb1e3f24e379c81e11c853f8a7102648aaaebc92a17c7e8e53c",
"size": 2492
},
{
"path": "shaders/gpuVertexMain.spv",
"sha256": "32421d4a91f3a88d5210fee7af34b48bcad83072f14e2ccb9ef2ff983e45f78f",
"size": 5016
},
{
"path": "shaders/shadowMain.reflection.json",
"sha256": "d39e2f83c797589296eac9dce139b9ad836a895d6685bc40f79dd2609d687fee",
"size": 3597
},
{
"path": "shaders/fragmentMain.reflection.json",
"sha256": "2b07af2aae7578bdb6c2aa22658538821608b1dd5aeddd7b06e42b2e78cedf12",
"size": 3596
},
{
"path": "shaders/vertexMain.reflection.json",
"sha256": "b3bdff863d53a0b385e06a36701a83a6ecafe9a93e97281a732cce8ff862c0db",
"size": 3591
},
{
"path": "shaders/lightTileMain.reflection.json",
"sha256": "bf6a9256aaa6d6edacfa1e1c265d7c8ce2c1e4ea4036e0bea078c22fd4b536ca",
"size": 1978
},
{
"path": "shaders/lightTileMain.spv",
"sha256": "92850edcc5ee5b586a90ce84ee69a98075a6fff3c13db4a57528d9431afe8b68",
"size": 6800
},
{
"path": "shaders/shadowMain.spv",
"sha256": "7643b4d688492b5ee923b9606f0b0e70343ca05fa67673838206119a6f86d8d8",
"size": 784
},
{
"path": "shaders/fragmentMain.spv",
"sha256": "fea4dd48664a510bad12b5e8582f2db798d4dbea62ce0de35dc2acfe32372733",
"size": 28960
},
{
"path": "shaders/vertexMain.spv",
"sha256": "1ad2631c35d654f48166321ae43d4165043e1b919b14f1dc61caf97b1ada0898",
"size": 1224
},
{
"path": "faset_player",
"sha256": "fa97bc49dd022aba111764957ce0ee39a96f9fcaf898bcf34da6cd752a441c5c",
"size": 6513616
},
{
"path": "project.faset.json",
"sha256": "e07b12047f8141c3c4cc8f0e7d0905a5c635375e4494755e34191db0859ab86f",
"size": 175
},
{
"path": "Scripts/util/motion.lua",
"sha256": "bad3dcdc1081fd1dec589c12dad8dc175b739d77ea52b957ead9ecb4b7cb88a3",
"size": 150
},
{
"path": "Scripts/player.lua",
"sha256": "1c51810574a3413c46a7cbd0ea2e84a9b802da1206a2b72bb78f6cc951367a11",
"size": 1376
},
{
"path": "Scripts/beacon.lua",
"sha256": "44d932ebedf66cadb9620f2d926177be2f8d43d71d56aa83611de686af026231",
"size": 820
},
{
"path": "scene.fscene",
"sha256": "641ba14a1f9c3966b9ec797814fdfa54f954dc5e0d53ab00c645598edef61baf",
"size": 1681
}
],
"format": "faset.export",
"generation": "e6cea245-85ab-4203-9a79-747cd19c5139",
"lua_enabled": true,
"lua_fingerprint": "a9261789bb1e0ca38bd40b08b0454165cd51454cba3ad4725dd357812ced6e35",
"platform": "linux",
"prerequisites": [
"Linux x86_64",
"Vulkan 1.3 driver",
"Compatible glibc and libstdc++ runtime"
],
"renderer_profile": {
"api": "Vulkan 1.3",
"materials": [
"base-color factor and texture",
"metallic and roughness factors"
],
"required_features": [
"dynamicRendering",
"synchronization2"
],
"shadow_atlases": {
"caster_draw_limit": 4096,
"fallback_resolution": 1024,
"local_face_limit": 16,
"preferred_resolution": 2048,
"sampled_d32_required": true,
"sun_cascade_limit": 4
},
"texture_sampling": "linear clamp, one mip level",
"unsupported_material_features": [
"normal maps",
"metallic-roughness maps",
"emissive and occlusion maps",
"alpha mode selection",
"unlit mode",
"per-material face culling"
]
},
"scene_hash": "143724a468d711cbdf9a9700310d7b0acef003ce1b21422ca5204e0e565fa02c",
"simulation": {
"fixed_delta": 0.016666666666666666,
"gravity": [
0,
-9.81,
0
],
"max_catch_up_ticks": 4,
"physics_substeps": 4
},
"units": {
"angle": "radian",
"coordinates": "right-handed Y-up",
"distance": "metre"
},
"validation_log": "{\"dimension\":2,\"validated\":true}\n",
"version": 1
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,18 @@
{
"arguments": [
"/tmp/faset-p1-p3-ed523c6-games/Faset Café 世界/lua/faset_player",
"--headless",
"--frames",
"120",
"--capture",
"/tmp/faset-p1-p3-ed523c6-games/Faset Café 世界/lua/verification.ppm",
"--profile",
"/tmp/faset-p1-p3-ed523c6-games/Faset Café 世界/lua/profile.json"
],
"cwd": "/tmp/faset-p1-p3-ed523c6-games/empty-working-directory",
"seconds": 0.5867973900167271,
"exit_code": 0,
"timed_out": false,
"stdout": "{\"device\":\"NVIDIA GeForce RTX 2080 Ti\",\"dimension\":2,\"effective_temporal_mode\":\"off\",\"effective_visibility_mode\":\"direct\",\"frames\":120,\"gpu_visibility_active\":false,\"temporal_mode\":\"off\",\"ticks\":120,\"validation_errors\":0,\"visibility_mode\":\"direct\"}\n",
"stderr": "Lua player ready: A/D move, Space jump, E reset\n"
}
@@ -0,0 +1,12 @@
{
"arguments": [
"/tmp/faset-p1-p3-ed523c6-games/Faset Café 世界/lua/faset_player",
"--validate"
],
"cwd": "/tmp/faset-p1-p3-ed523c6-games/empty-working-directory",
"seconds": 0.007388445985270664,
"exit_code": 0,
"timed_out": false,
"stdout": "{\"dimension\":2,\"validated\":true}\n",
"stderr": ""
}
@@ -0,0 +1,577 @@
{
"format": "faset.playable-export-verification",
"version": 1,
"started_utc": "2026-09-24T03:16:06.383543+00:00",
"platform": "linux",
"engine": "/home/emil/Desktop/.worktrees/Faset_Engine-p1-p3-integration",
"editor": "/home/emil/Desktop/.worktrees/Faset_Engine-p1-p3-integration/build/linux-release/faset_editor",
"standalone_root": "/tmp/faset-p1-p3-ed523c6-games",
"engine_revision": "ed523c61c106b8e19614e4d56f0b5d39b8392478",
"engine_dirty": false,
"engine_git_status": [],
"engine_diff_sha256": null,
"editor_sha256": "142405fc82ea3c7fbf9866179651e75867e954149303ef2b182e122fd0f32524",
"project_workspace": "/tmp/faset-p1-p3-ed523c6-export",
"vulkaninfo_available": true,
"driver_override": null,
"frames_per_game": 120,
"status": "passed",
"projects": [
{
"name": "collect-2d",
"dimension": 2,
"language": "cpp",
"source_inputs": [
{
"path": ".gitignore",
"sha256": "53aa4d7124d4c8d93b8d7c4cb470b6c82b844e019a660d6243ffeadc50602de1"
},
{
"path": "README.md",
"sha256": "8cf5a2d6de849eb090b9ea6d5e27841f551bd06947e5054f0d2f59639a90edd0"
},
{
"path": "Scenes/main.scene.json",
"sha256": "be48a6d21385e717b6c8ebf9a3b4322eebbeff6bb067428e089ab5214be79854"
},
{
"path": "Scripts/Gameplay.cpp",
"sha256": "6b581b24da613e1915819de0a0f0ea820dd3333efa62c4b479a9ea7ffdbc6bcc"
},
{
"path": "Scripts/Gameplay.hpp",
"sha256": "4121587182ed4f74901b1c0757c53daadbf309af1d6bb5dd87fef142130ccbbe"
},
{
"path": "project.faset.json",
"sha256": "36e2acd32210f5489372a2331346a3294ead2395f0713e3e5fd2da4e83263689"
}
],
"generation": "69bfdd90-4539-4fd5-852e-f43012482808",
"configuration": "Release",
"standalone_directory": "/tmp/faset-p1-p3-ed523c6-games/Faset Café 世界/collect-2d",
"executable": "faset_player",
"package_file_count": 41,
"asset_generations": {},
"device": "NVIDIA GeForce RTX 2080 Ti",
"device_class": "physical",
"driver": {
"apiVersion": "1.4.329",
"driverVersion": "595.84.0.0",
"deviceName": "NVIDIA GeForce RTX 2080 Ti",
"driverID": "DRIVER_ID_NVIDIA_PROPRIETARY",
"driverName": "NVIDIA",
"driverInfo": "595.84"
},
"validation_enabled": true,
"validation_errors": 0,
"completed_frames": 120,
"summary_ms": {
"gpu": {
"max": 0.58032,
"min": 0.554496,
"p50": 0.559104,
"p95": 0.575584,
"samples": 120
},
"render_call": {
"max": 5.697768,
"min": 1.5953,
"p50": 1.930722,
"p95": 2.358479,
"samples": 120
},
"renderer_cpu": {
"max": 5.692117,
"min": 1.59053,
"p50": 1.921184,
"p95": 2.345554,
"samples": 120
},
"renderer_readback_cpu": {
"max": 2.598762,
"min": 0.376931,
"p50": 0.463665,
"p95": 0.606183,
"samples": 120
},
"simulation": {
"max": 0.294355,
"min": 0.134755,
"p50": 0.168708,
"p95": 0.272694,
"samples": 120
},
"snapshot": {
"max": 0.248098,
"min": 0.128342,
"p50": 0.144372,
"p95": 0.23347,
"samples": 120
},
"wall": {
"max": 6.124743,
"min": 1.900084,
"p50": 2.29008,
"p95": 2.699522,
"samples": 120
}
},
"capture": {
"width": 1280,
"height": 720,
"sampled_colors": 7,
"sha256": "f9d74067d87c1ebf30c6db372a26d93b7285791c8cb0307a24af5adb23bf201a"
},
"source_project_paths_unavailable": true,
"status": "passed"
},
{
"name": "collect-3d",
"dimension": 3,
"language": "cpp",
"source_inputs": [
{
"path": ".gitignore",
"sha256": "53aa4d7124d4c8d93b8d7c4cb470b6c82b844e019a660d6243ffeadc50602de1"
},
{
"path": "Assets/exit-arch/create.py",
"sha256": "9c7291124fb1498a3f992ef74afc39cd98f9cc3e2ff4687c633bece85d580905"
},
{
"path": "Assets/exit-arch/manifest.json",
"sha256": "7a13347adc89761fb02ebeab3c58ba87f319cd62f53ec87a3bb61bcd066ffa55"
},
{
"path": "Assets/exit-arch/manifest.json.faset-import.json",
"sha256": "ef4eef28a18a0cc40a40df75db34c97faa5d783b891265f862633f3aec514afc"
},
{
"path": "Assets/exit-arch/payload/ee6c748a212905fc9c465cbe95c033e94b80be643624f4f240ad5353761205b3.glb",
"sha256": "ee6c748a212905fc9c465cbe95c033e94b80be643624f4f240ad5353761205b3"
},
{
"path": "Assets/exit-arch/source.blend",
"sha256": "ff2676bec97ab778e531e87a185ad716049ea3b05b4a4f0027a6345737735035"
},
{
"path": "README.md",
"sha256": "2df5ca4df47ab5d3d05d41508201296d4ad5ec876245f19f061767ade6a30e8f"
},
{
"path": "Scenes/main.scene.json",
"sha256": "61b65baf79e52f07ac386a7f98acf985a1b09e88770cdde37ef461dc94b9dcd7"
},
{
"path": "Scripts/Extensions/Beacon.hpp",
"sha256": "c60d56161eead16f541835053ad32ac3333383d83015709c060b7d45e0af5a97"
},
{
"path": "Scripts/Gameplay.cpp",
"sha256": "5d419786a6861d7f14ed4eca54634694d8cd43be5dbbd60a2c6790db665c3a6a"
},
{
"path": "Scripts/Gameplay.hpp",
"sha256": "4121587182ed4f74901b1c0757c53daadbf309af1d6bb5dd87fef142130ccbbe"
},
{
"path": "project.faset.json",
"sha256": "43d273b1054ec9069369073f54cc1fc7efb3d6b699dcd342c552a2dc2ef852ef"
}
],
"import": {
"asset_id": "5832763b-3ed0-44d6-9088-0b524f196a91",
"cache_hit": false,
"diagnostics": [],
"generation": "4a5bfcc1437a7b4d65c388da2beace0308cceda8e16503d08ce676260f21d5c2",
"manifest": {
"asset_id": "5832763b-3ed0-44d6-9088-0b524f196a91",
"files": [
{
"path": "meshes/mesh-fc069a07a87e0f831fd92efdbc4efa1f-0.fmesh",
"sha256": "98b38aca7d2786c58a2265ba4d1f2255123f03d31d947e239232cf55bfdc2c97",
"size": 928
},
{
"path": "meshes/mesh-0961e2a3f92977836a3aa80cab09277e-0.fmesh",
"sha256": "98b38aca7d2786c58a2265ba4d1f2255123f03d31d947e239232cf55bfdc2c97",
"size": 928
},
{
"path": "meshes/mesh-93b5b3e52cb6bb120fefb80e2d8e222b-0.fmesh",
"sha256": "3875c16ea628d4126373ebfe07816621fbad3961596a2fcd112f1eec0e378071",
"size": 928
}
],
"generation": "4a5bfcc1437a7b4d65c388da2beace0308cceda8e16503d08ce676260f21d5c2",
"importer": "faset-gltf-1/cgltf-1.15",
"input_key": {
"bundle_sha256": "7a13347adc89761fb02ebeab3c58ba87f319cd62f53ec87a3bb61bcd066ffa55",
"dependencies": {},
"importer": "faset-gltf-1/cgltf-1.15",
"settings": {},
"source": "ee6c748a212905fc9c465cbe95c033e94b80be643624f4f240ad5353761205b3",
"target_profile": "desktop-static-pbr-v1",
"toolchain": {
"cgltf": "360db1a95480fe102ae9c69b27c5d101167ff5ba",
"stb": "2c980bb59875b0d32144a71867fbdebb2f77cd20"
}
},
"kind": "scene",
"materials": [
{
"alpha_cutoff": 0.5,
"alpha_mode": "OPAQUE",
"base_color": [
0.2199999988079071,
0.28999999165534973,
0.3400000035762787,
1.0
],
"base_color_texture": -1,
"double_sided": true,
"emissive": [
0.0,
0.0,
0.0
],
"emissive_texture": -1,
"format": "faset.material",
"id": "material-bb63b094febbf90bb7049c9bcf7587bc",
"metallic": 0.07999999821186066,
"metallic_roughness_texture": -1,
"name": "Weathered stone",
"normal_texture": -1,
"occlusion_texture": -1,
"roughness": 0.800000011920929,
"unlit": false,
"version": 1
}
],
"meshes": [
{
"id": "mesh-fc069a07a87e0f831fd92efdbc4efa1f",
"name": "Cube.001",
"primitives": [
{
"material": 0,
"path": "meshes/mesh-fc069a07a87e0f831fd92efdbc4efa1f-0.fmesh"
}
]
},
{
"id": "mesh-0961e2a3f92977836a3aa80cab09277e",
"name": "Cube.002",
"primitives": [
{
"material": 0,
"path": "meshes/mesh-0961e2a3f92977836a3aa80cab09277e-0.fmesh"
}
]
},
{
"id": "mesh-93b5b3e52cb6bb120fefb80e2d8e222b",
"name": "Cube.003",
"primitives": [
{
"material": 0,
"path": "meshes/mesh-93b5b3e52cb6bb120fefb80e2d8e222b-0.fmesh"
}
]
}
],
"nodes": [
{
"id": "node-cec6e8cea80cf5a98ba3263a0156bee4",
"local_transform": [
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
1.4500000476837158,
1.2999999523162842,
1.0
],
"mesh": 0,
"name": "Left post",
"parent_id": "",
"stable_source_id": true
},
{
"id": "node-5f8a90a6c4d27020d20bd4fa81d1d958",
"local_transform": [
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
1.4500000476837158,
-1.2999999523162842,
1.0
],
"mesh": 1,
"name": "Right post",
"parent_id": "",
"stable_source_id": true
},
{
"id": "node-482463e486a8d1fd741340c653cd128f",
"local_transform": [
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
3.0,
0.0,
1.0
],
"mesh": 2,
"name": "Lintel",
"parent_id": "",
"stable_source_id": true
}
],
"outputs": [
"node-cec6e8cea80cf5a98ba3263a0156bee4",
"node-5f8a90a6c4d27020d20bd4fa81d1d958",
"node-482463e486a8d1fd741340c653cd128f",
"mesh-fc069a07a87e0f831fd92efdbc4efa1f",
"mesh-0961e2a3f92977836a3aa80cab09277e",
"mesh-93b5b3e52cb6bb120fefb80e2d8e222b",
"material-bb63b094febbf90bb7049c9bcf7587bc"
],
"payload_source": "/tmp/faset-p1-p3-ed523c6-export/Faset Café 世界/collect-3d/Assets/exit-arch/payload/ee6c748a212905fc9c465cbe95c033e94b80be643624f4f240ad5353761205b3.glb",
"schema_version": 1,
"settings": {},
"source": "/tmp/faset-p1-p3-ed523c6-export/Faset Café 世界/collect-3d/Assets/exit-arch/manifest.json",
"source_sha256": "ee6c748a212905fc9c465cbe95c033e94b80be643624f4f240ad5353761205b3",
"textures": []
},
"previous_generation": "",
"removed_output_ids": []
},
"generation": "6c1dbd3a-7254-4b80-9dd5-ea433c42692c",
"configuration": "Release",
"standalone_directory": "/tmp/faset-p1-p3-ed523c6-games/Faset Café 世界/collect-3d",
"executable": "faset_player",
"package_file_count": 46,
"asset_generations": {
"5832763b-3ed0-44d6-9088-0b524f196a91": "4a5bfcc1437a7b4d65c388da2beace0308cceda8e16503d08ce676260f21d5c2"
},
"device": "NVIDIA GeForce RTX 2080 Ti",
"device_class": "physical",
"driver": {
"apiVersion": "1.4.329",
"driverVersion": "595.84.0.0",
"deviceName": "NVIDIA GeForce RTX 2080 Ti",
"driverID": "DRIVER_ID_NVIDIA_PROPRIETARY",
"driverName": "NVIDIA",
"driverInfo": "595.84"
},
"validation_enabled": true,
"validation_errors": 0,
"completed_frames": 120,
"summary_ms": {
"gpu": {
"max": 0.626976,
"min": 0.591392,
"p50": 0.593024,
"p95": 0.609792,
"samples": 120
},
"render_call": {
"max": 6.146895,
"min": 1.808681,
"p50": 2.18943,
"p95": 2.625573,
"samples": 120
},
"renderer_cpu": {
"max": 6.132347,
"min": 1.80252,
"p50": 2.179871,
"p95": 2.614251,
"samples": 120
},
"renderer_readback_cpu": {
"max": 2.79918,
"min": 0.363165,
"p50": 0.462913,
"p95": 0.60977,
"samples": 120
},
"simulation": {
"max": 0.56743,
"min": 0.171815,
"p50": 0.195588,
"p95": 0.312489,
"samples": 120
},
"snapshot": {
"max": 1.089595,
"min": 0.166834,
"p50": 0.188876,
"p95": 0.30222,
"samples": 120
},
"wall": {
"max": 7.696708,
"min": 2.167007,
"p50": 2.61865,
"p95": 3.165631,
"samples": 120
}
},
"capture": {
"width": 1280,
"height": 720,
"sampled_colors": 65,
"sha256": "2905891c9766b2f1f65d5b4284056cb3839f1faae195f9fea39a56e3ebf44363"
},
"source_project_paths_unavailable": true,
"status": "passed"
},
{
"name": "lua",
"dimension": 2,
"language": "lua",
"source_inputs": [
{
"path": "README.md",
"sha256": "8392da3c18916400ea628daed094c77c390c553cbdcf822da227bdcd3d86380c"
},
{
"path": "Scenes/main.scene.json",
"sha256": "f1ab54150a58b289c47bcc34566ad7ee3025ad931db81e7f5dce70d9fbcac8ab"
},
{
"path": "Scripts/beacon.lua",
"sha256": "44d932ebedf66cadb9620f2d926177be2f8d43d71d56aa83611de686af026231"
},
{
"path": "Scripts/player.lua",
"sha256": "1c51810574a3413c46a7cbd0ea2e84a9b802da1206a2b72bb78f6cc951367a11"
},
{
"path": "Scripts/util/motion.lua",
"sha256": "bad3dcdc1081fd1dec589c12dad8dc175b739d77ea52b957ead9ecb4b7cb88a3"
},
{
"path": "project.faset.json",
"sha256": "7e4c0781c1837208b4499a9991ffb702143edf1f933ae9c7e3d2543fd2577747"
}
],
"generation": "e6cea245-85ab-4203-9a79-747cd19c5139",
"configuration": "Release",
"standalone_directory": "/tmp/faset-p1-p3-ed523c6-games/Faset Café 世界/lua",
"executable": "faset_player",
"package_file_count": 46,
"asset_generations": {},
"device": "NVIDIA GeForce RTX 2080 Ti",
"device_class": "physical",
"driver": {
"apiVersion": "1.4.329",
"driverVersion": "595.84.0.0",
"deviceName": "NVIDIA GeForce RTX 2080 Ti",
"driverID": "DRIVER_ID_NVIDIA_PROPRIETARY",
"driverName": "NVIDIA",
"driverInfo": "595.84"
},
"validation_enabled": true,
"validation_errors": 0,
"completed_frames": 120,
"summary_ms": {
"gpu": {
"max": 0.572544,
"min": 0.551552,
"p50": 0.552288,
"p95": 0.567232,
"samples": 120
},
"render_call": {
"max": 5.602829,
"min": 1.551566,
"p50": 1.886379,
"p95": 2.296171,
"samples": 120
},
"renderer_cpu": {
"max": 5.596396,
"min": 1.544143,
"p50": 1.877962,
"p95": 2.288677,
"samples": 120
},
"renderer_readback_cpu": {
"max": 2.93176,
"min": 0.380919,
"p50": 0.480496,
"p95": 0.599982,
"samples": 120
},
"simulation": {
"max": 0.171945,
"min": 0.082806,
"p50": 0.116279,
"p95": 0.158329,
"samples": 120
},
"snapshot": {
"max": 0.096432,
"min": 0.046618,
"p50": 0.056105,
"p95": 0.082215,
"samples": 120
},
"wall": {
"max": 5.867127,
"min": 1.702691,
"p50": 2.074804,
"p95": 2.451364,
"samples": 120
}
},
"capture": {
"width": 1280,
"height": 720,
"sampled_colors": 4,
"sha256": "e2f4c3b84de75dadd2e31d388d0ba51abc1861f1ec76eb7ba51a4a2dcac720a7"
},
"source_project_paths_unavailable": true,
"status": "passed"
}
],
"requested_projects": [
"collect-2d",
"collect-3d",
"lua"
],
"finished_utc": "2026-09-24T03:22:20.623059+00:00"
}
@@ -9,6 +9,9 @@ SwiftShader CI at the tiled revision. The combined P1+P3 renderer checkpoint
`4a3453e` was tested separately, including the temporal renderer. Its lighting
A/B raw data are in [study 24](../../studies/24-p3-integrated-forward-plus-2026-09-24.md),
and temporal image/cost evidence has a [separate record](../p3-temporal-2026-09-24/README.md).
The later [final P1/P3 acceptance](../p1-p3-final-2026-09-24/README.md) at
`ed523c6` reruns the lighting/temporal tests and relocated Release games; the
7,560-frame lighting A/B sweep remains the measured `4a3453e` workload.
## Implemented at the checkpoint
@@ -13,6 +13,13 @@ recorded frame reported zero
validation errors. These observations do not establish physical Windows GPU
behavior or high-end reconstruction quality.
The [final integrated matrix](matrix/integrated-ed523c6/README.md) separately
repeats all 1,386 frames at clean `ed523c6`, after the optional diagnostics
shader, resize fix, and visibility-switch rollback. Actual Vulkan validation
was active with zero errors;
all captured PNGs are byte-identical to the earlier branch matrix. Its
independent 720p profile is recorded with exact binary and shader hashes.
## Raw artifacts and method
- [Lossless PNG example](captures/wire-static-taa-15.png) and
@@ -1,12 +1,20 @@
# P3 temporal image-quality matrix: branch checkpoint
# P3 temporal image-quality matrix: branch and integrated captures
The [final integrated capture](integrated-ed523c6/README.md) repeated this
entire 1,386-frame matrix on clean source `ed523c6` after the optional
pixel-diagnostics shader, resize fix, and visibility-switch rollback. Validation
was active with zero errors,
all 1,388 resulting PNG files are byte-identical to the branch artifacts
below, and a separate final-shader 720p profile is retained. The branch record
remains here as the original quality study and provenance baseline.
This is a functional and image-quality capture from
`fe3a589174f8fe8e35ee231fe74fe938f4dd3cbd` on
`feat/p3-temporal-integration`, before the later pixel-diagnostics shader was
merged into the combined P1+P3 branch. It is separate from the earlier Direct
capture at `1a1f69f` and from the combined lighting performance sweep at
`4a3453e`. Repeating this matrix on the final combined source is necessary
before claiming its exact images as integrated release evidence.
`4a3453e`. The integrated rerun linked above now checks the exact images on
the combined shader.
The run used Linux Debug, NVIDIA GeForce RTX 2080 Ti, proprietary driver
595.84, 160×120 output except the 319×241 resize scene and 320×240 spatial
@@ -0,0 +1,80 @@
# Final integrated temporal capture at `ed523c6`
This is the P1+P3 integration capture from **clean source revision
`ed523c61c106b8e19614e4d56f0b5d39b8392478`**, after merging the optional
history-pixel diagnostics shader and its window-resize fix, plus the
transactional visibility-switch rollback and async build-signature fixes.
The Linux Debug capture used the physical NVIDIA GeForce RTX 2080 Ti with proprietary driver
595.84. The [provenance manifest](provenance.json) records the exact capture
executable SHA-256 and all 31 loaded SPIR-V/reflection artifact hashes.
The [frame CSV](frames.csv) links **1,386 lossless source PNGs** across Direct,
GPU frustum and GPU occlusion, Off/jittered-current/TAA/upscale-current/Upscale,
2× spatial sources, motion, eight post-open door frames, cut, teleport,
projection/view switch, resize, transparency and UI. Every row reports
`validation_enabled=1`, `validation_errors=0`, and the requested visibility and
temporal paths actually executed. Output was 160×120 except the 319×241 resize
and 320×240 spatial source. The [metrics](metrics.json),
[wire reference sheet](spatial-reference.png) and
[door trail sheet](door-trail-nearest-4x.png) are computed from these images.
All 1,388 PNG files (the 1,386 frames plus two sheets) are byte-identical to
[the earlier branch matrix](../README.md) under the same relative names. This
checks that the integrated diagnostic shader and failure-path fixes, with pixel
counting disabled, did not alter these fixtures. The metrics JSON differs only
in source revision; the frame CSV contains separate timings. In the final matrix, both GPU visibility paths
matched Direct exactly on all 430 comparable ordinary frames per path. The
static wire's frame variation fell 7.2% with TAA and 6.1% with Upscale versus
their same-jitter current-only controls. The 2× box-filter spatial reference
still had lower error than either temporal mode in this fixture; this is no
claim of overall quality superiority. In the opening-door sequence, old red
foreground never returned; the count of edge pixels differing by >8 from the
unobstructed temporal reference went from 121 to 17, then reached zero by the
sixth open frame for TAA, and from 176 to 28, reaching zero by the fifth open
frame for Upscale. Cut, teleport, changed projection/view and resize matched
current-only immediately in the fixed reset ROI.
The separate [720p CSV](profile-720p-debug.csv) has 30 measured frames per Off,
TAA and 0.67 Upscale after ten warm-up frames for each mode, with rotating mode
order. Every one of its 90 rows reports active validation and zero errors.
It is a sparse one-cube/one-wire Direct fixture with full-frame synchronous
capture in Debug, not a quiet Release gameplay benchmark. p95 below uses
linear interpolation at rank `(n 1) × 0.95`:
| Mode | Full GPU p50 / p95 | Resolve p50 / p95 | Renderer CPU p50 / p95 | Explicit Vulkan allocation |
| --- | ---: | ---: | ---: | ---: |
| Off | 0.558 / 0.581 ms | — | 2.109 / 2.437 ms | 43.02 MiB |
| TAA | 0.676 / 0.697 ms | 0.084 / 0.101 ms | 2.472 / 2.770 ms | 76.77 MiB |
| Upscale 0.67 | 0.675 / 0.702 ms | 0.083 / 0.101 ms | 2.475 / 2.836 ms | 68.52 MiB |
The diagnostic counter toggle was off, so no per-pixel counter readback was
included in these timings. The 0.67 mode did not improve the whole GPU time on
this sparse fixture. The [parent P3 record](../../README.md) explains the
quality limitations and the earlier, separately timed 720p checkpoint.
To reproduce from this source revision, install the
[pinned analyzer dependencies](../../../../../tools/requirements-temporal-quality.txt)
into a Python environment, configure the Linux Debug build and run:
```sh
cmake --build build/linux-debug --target faset_render_temporal_acceptance_tests --parallel 2
ctest --test-dir build/linux-debug --no-tests=error -R '^render_temporal_quality_matrix$' --output-on-failure
build/linux-debug/faset_render_temporal_acceptance_tests --capture-quality /tmp/faset-p3-final-new
build/linux-debug/faset_render_temporal_acceptance_tests --profile-720p /tmp/faset-p3-final-new-profile.csv
python3 tools/analyze_temporal_quality_matrix.py --input /tmp/faset-p3-final-new \
--output /tmp/faset-p3-final-new-analyzed \
--revision ed523c61c106b8e19614e4d56f0b5d39b8392478 \
--driver 'NVIDIA proprietary 595.84'
```
Use fresh paths: the analyzer rejects an existing output directory. The
separate [resize diagnostics regression](https://github.com/emil28092005/Faset_Engine/blob/main/tests/render_temporal_diagnostics_tests.cpp)
exercises counter readback during swapchain recreation on a physical GPU; this
quality capture leaves that optional diagnostic path disabled.
The [visibility-switch rollback test](https://github.com/emil28092005/Faset_Engine/blob/main/tests/render_reload_tests.cpp)
checks that a failed GPU-mode transition preserves live TAA output and history
and that the transition can be retried after restoring the shader bundle. The
[P1 queued-source regression](https://github.com/emil28092005/Faset_Engine/blob/main/tests/editor_schema_signature_tests.cpp)
checks that Build and Export report the worker snapshot hash rather than the
enqueue-time hash. These failure-path fixes did not change any matrix image.
Binary file not shown.

After

Width:  |  Height:  |  Size: 185 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 B

Some files were not shown because too many files have changed in this diff Show More