Document P1 and P3 integrated acceptance
@@ -1,6 +1,6 @@
|
||||
# План разработки Faset Engine
|
||||
|
||||
Версия 1.3 · 23 сентября 2026 года.
|
||||
Версия 1.4 · 24 сентября 2026 года.
|
||||
|
||||
**Статус:** C++ MVP реализован и принят; первый tag — **v0.1.0-mvp**. Его исходники проверены на `4cb82556de31268d2bde73948dd1ff1b6c02f162`; [досье M0–M9](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. Непрямой свет и продвинутая геометрия
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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, но тонкая геометрия теряет часть пиковой
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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. Сборка первой версии под каждую ОС проверяется на этой ОС.
|
||||
|
||||
|
||||
@@ -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
|
||||
50–99% 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.
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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.
|
||||
|
After Width: | Height: | Size: 185 B |
|
After Width: | Height: | Size: 278 B |
|
After Width: | Height: | Size: 185 B |
|
After Width: | Height: | Size: 262 B |
|
After Width: | Height: | Size: 185 B |
|
After Width: | Height: | Size: 278 B |
|
After Width: | Height: | Size: 185 B |
|
After Width: | Height: | Size: 247 B |
|
After Width: | Height: | Size: 185 B |
|
After Width: | Height: | Size: 247 B |
|
After Width: | Height: | Size: 209 B |
|
After Width: | Height: | Size: 205 B |
|
After Width: | Height: | Size: 214 B |
|
After Width: | Height: | Size: 210 B |
|
After Width: | Height: | Size: 210 B |
|
After Width: | Height: | Size: 207 B |
|
After Width: | Height: | Size: 209 B |
|
After Width: | Height: | Size: 213 B |
|
After Width: | Height: | Size: 214 B |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 209 B |
|
After Width: | Height: | Size: 211 B |
|
After Width: | Height: | Size: 209 B |
|
After Width: | Height: | Size: 205 B |
|
After Width: | Height: | Size: 215 B |
|
After Width: | Height: | Size: 205 B |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 209 B |
|
After Width: | Height: | Size: 237 B |
|
After Width: | Height: | Size: 250 B |
|
After Width: | Height: | Size: 263 B |
|
After Width: | Height: | Size: 251 B |
|
After Width: | Height: | Size: 253 B |
|
After Width: | Height: | Size: 261 B |
|
After Width: | Height: | Size: 253 B |
|
After Width: | Height: | Size: 255 B |
|
After Width: | Height: | Size: 254 B |
|
After Width: | Height: | Size: 248 B |
|
After Width: | Height: | Size: 242 B |
|
After Width: | Height: | Size: 260 B |
|
After Width: | Height: | Size: 242 B |
|
After Width: | Height: | Size: 258 B |
|
After Width: | Height: | Size: 262 B |
|
After Width: | Height: | Size: 205 B |
|
After Width: | Height: | Size: 244 B |
|
After Width: | Height: | Size: 274 B |
|
After Width: | Height: | Size: 264 B |
|
After Width: | Height: | Size: 257 B |
|
After Width: | Height: | Size: 255 B |
|
After Width: | Height: | Size: 271 B |
|
After Width: | Height: | Size: 261 B |
|
After Width: | Height: | Size: 246 B |
|
After Width: | Height: | Size: 267 B |
|
After Width: | Height: | Size: 286 B |
|
After Width: | Height: | Size: 257 B |
|
After Width: | Height: | Size: 263 B |