Author SHA1 Message Date
Emil f07eb4091e Add editor right-click context actions
Native and manual checks / native (ubuntu-24.04) (push) Failing after 1m54s
Native and manual checks / manual (push) Successful in 32s
Native and manual checks / native (windows-2025) (push) Canceled after 0s
Windows editor and software Vulkan / windows-graphics (push) Canceled after 0s
2026-09-24 15:44:25 +03:00
Emil 3eea1fe9f1 Preserve final Windows SwiftShader acceptance evidence
Native and manual checks / native (ubuntu-24.04) (push) Failing after 32s
Native and manual checks / manual (push) Successful in 29s
Windows editor and software Vulkan / windows-graphics (push) Canceled after 0s
Native and manual checks / native (windows-2025) (push) Canceled after 0s
2026-09-24 06:38:17 +03:00
Emil f645965d56 Document P1 and P3 integrated acceptance 2026-09-24 06:33:34 +03:00
1453 changed files with 55722 additions and 43 deletions
+40 -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`; [досье 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,15 @@ 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
остаётся отдельным покрытием. На этой же ревизии [Windows graphics
CI](https://github.com/emil28092005/Faset_Engine/actions/runs/35949830251)
прошёл 78/78 CTest и перенос трёх 120-кадровых игр через SwiftShader.
Dynamic gameplay loading рассматривать при
подтверждённой проблеме линковки, без обещания C++ hot reload в P1.
### P2. GPU-driven visibility и LOD
@@ -221,22 +228,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.
+5
View File
@@ -45,6 +45,11 @@ if(TARGET faset_ui AND TARGET faset_editor_session AND TARGET faset_scene_view)
target_compile_definitions(faset_editor_gizmo_ui_tests PRIVATE FASET_TEST_ENGINE="${PROJECT_SOURCE_DIR}")
add_test(NAME editor_ui_gizmos COMMAND faset_editor_gizmo_ui_tests)
set_tests_properties(editor_ui_gizmos PROPERTIES LABELS "gpu")
add_executable(faset_editor_context_menu_ui_tests ${PROJECT_SOURCE_DIR}/tests/editor_ui_context_menu.cpp)
target_link_libraries(faset_editor_context_menu_ui_tests PRIVATE faset_editor_ui)
target_compile_definitions(faset_editor_context_menu_ui_tests PRIVATE FASET_TEST_ENGINE="${PROJECT_SOURCE_DIR}")
add_test(NAME editor_ui_context_menu COMMAND faset_editor_context_menu_ui_tests)
set_tests_properties(editor_ui_context_menu PROPERTIES LABELS "gpu")
add_test(NAME editor_ui_authoring COMMAND faset_editor_ui_tests)
set_tests_properties(editor_ui_authoring PROPERTIES LABELS "gpu")
add_executable(faset_editor_ui_latency ${PROJECT_SOURCE_DIR}/tests/editor_ui_latency.cpp)
+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, но тонкая геометрия теряет часть пиковой
+33
View File
@@ -629,3 +629,36 @@ 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. At that same code revision,
[Windows graphics CI](https://github.com/emil28092005/Faset_Engine/actions/runs/35949830251)
passed 78/78 CTests, the Release export integration and three relocated
120-frame C++/Lua game runs on SwiftShader. The
[native/manual CI](https://github.com/emil28092005/Faset_Engine/actions/runs/35949830254)
passed Linux and Windows native checks and strict MkDocs.
+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. Сборка первой версии под каждую ОС проверяется на этой ОС.
+10 -1
View File
@@ -1,4 +1,4 @@
# P1 editor visual references
# Editor visual references
These image prototypes were generated from the recorded native editor screenshot in
`docs/validation/checkpoint5-linux-2026-09-18/editor-blender.png` before changing the
@@ -15,3 +15,12 @@ Both were created with the built-in image generation tool using the cited screen
as the edit reference. The accepted behavior and validation criteria are in the
[P1 design](../superpowers/specs/2026-09-24-p1-iteration-design.md) and
[`PLAN.md`](../../PLAN.md).
The [editor context-menu reference](editor-context-menu-reference.png) explores
the hierarchy, asset-browser, and viewport menus in the same dark editor style.
It is a **visual reference**, not the authority for enabled actions, wording,
positions, or behavior. The [Editor workspace manual](../manual/editor/workspace.md#right-click-context-menus)
describes the intended interaction; source code and tests determine the implemented
behavior.
The [Linux implementation capture](../validation/context-menus-2026-09-24/scene-context.png)
shows the Scene-root menu rendered by the acceptance test.
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

+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
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.
+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.
+36
View File
@@ -94,6 +94,42 @@ These shortcuts apply when a text or numeric editor is not consuming the key.
The viewport camera is an editing camera; navigating it does not rewrite a scene
camera component.
## Right-click context menus
Right-click a Scene-tree row to act on that row. Right-click the scene root or
empty space in the tree to **Create object**, **Create cube**, **Create plane**,
or **Create sprite**. An ordinary local object offers **Frame selection**,
**Rename**, **Add child object**, **Duplicate**, and **Delete**. Duplicate and
Delete are single authoring actions; use **Undo** to reverse either one.
Add child creates an object parented to the
selected row. Right-clicking also selects the target, so an action applies to the
row under the pointer rather than a previously selected object.
Template content keeps its ownership rules. An inherited object offers
**Frame selection**, **Open template source**, **Add local child**, and
**Hide in this scene**. Locally added objects have no corresponding source
object, so they omit **Open template source**. Open an inherited object's source
scene to rename or change its inherited structure; suppression hides it only in
the containing instance. A top-level instance group offers **Open template source**,
**Add local object**, and **Remove instance**. Nested instance groups direct
structural changes to their source. See [Scene templates](templates.md) for
restoring suppressed objects and the difference between source and local edits.
In **Assets**, right-click a project file to select it and show actions appropriate
to its type: **Open script** or **Open scene**, **Import / Reimport** for a
supported source asset, and **Copy project path**. An imported-asset row offers
**Copy asset ID**, **Place in scene** when the cooked asset is available, and
**Reimport source** when it still has a source file. Import and Reimport start jobs;
check **Jobs** or **Console** for the result.
See [Assets and Blender](assets.md) for supported formats and reimport behavior.
A short right-click in the viewport opens the menu for the object under the
pointer, or creation actions when the pointer is over empty space. Moving while
holding the right button past the drag threshold keeps the existing camera
gesture: orbit in 3D or pan in 2D, with no menu on release. Press **Escape** or
click outside a menu to close it. These menus edit the scene through the same
authoring commands as the toolbar and MCP; they do not affect the running Player.
## Edit components and undo
The Inspector uses the registered component schema to show numbers, vectors,
@@ -0,0 +1,13 @@
# Editor context menus — Linux, 2026-09-24
`scene-context.png` is a GPU capture of the implemented Editor at 1280 × 900 with
the Scene-root context menu open. It was produced by the headless
`editor_ui_context_menu` test using `FASET_CONTEXT_CAPTURE`.
The test also exercises entity Duplicate/Delete with Undo, inherited-instance
parenting, contextual file actions, menu dismissal, and the viewport's click vs.
right-drag camera gesture. It checks that selecting an unavailable imported asset
cannot use toolbar actions on a previously selected file. See
`tests/editor_ui_context_menu.cpp` for the exact acceptance assertions. The
generated visual exploration lives separately in
`docs/design/editor-context-menu-reference.png`.
Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

@@ -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](windows-swiftshader/README.md) | 78/78 CTests, Release export integration and three relocated 120-frame C++/Lua games passed on SwiftShader; validation layer unavailable |
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"
}
@@ -0,0 +1,3 @@
# Retain the exact CRLF bytes from the Windows CI artifact for SHA-256 verification.
*.json -text -whitespace
*.gz binary
@@ -0,0 +1,27 @@
# Final Windows SwiftShader evidence
The [Windows graphics CI run](https://github.com/emil28092005/Faset_Engine/actions/runs/35949830251)
completed successfully on clean source revision
`ed523c61c106b8e19614e4d56f0b5d39b8392478`. Its CTest step passed
**78/78 tests**. The compressed [CTest log](LastTest.log.gz) retains individual
test output. The workflow also passed the Release 2D/3D export integration;
its [2D](integration-result-2.json) and [3D](integration-result-3.json) result
records are retained here.
The [playable export report](playable-report.json) records `engine_dirty=false`,
the Editor SHA-256, and three successful Release exports: C++ `collect-2d`,
C++ `collect-3d` (including the Blender asset import), and Lua-only `lua`.
Each package was relocated to a Unicode-named directory, ran **120/120**
offscreen frames on SwiftShader, and reported that its source project path was
unavailable. The [Vulkan probe](vulkan-probe.json) identifies the software
device; [toolchain details](toolchain.json), package manifests, per-frame
profiles, validation and run records are retained alongside this page.
The Windows packages report `validation_enabled=false`: the pinned SwiftShader
CI verifies functional rendering but does not substitute for a physical Windows
GPU run with an active Vulkan validation layer. Linux physical-GPU validation
is recorded in the [parent dossier](../README.md).
The data were copied unchanged from the workflow's `windows-graphics-evidence`
artifact. Verify the retained files with `sha256sum -c SHA256SUMS.txt` from this
directory. The `.gz` CTest log was compressed without a timestamp.
@@ -0,0 +1,18 @@
07b6228b20191a4de5944a88c8af214cbde0a7f880408ae04652396f695493ad LastTest.log.gz
fed7c131500340414c3275874217df6e1acf07202a740e214a59d4e9346a9dee collect-2d-manifest.json
e2b27a0d56349b93dc375d5c3d5b78e987e4ae1bfe63bc06d593d1098e8bd29a collect-2d-profile.json
549846af4d85d04d5d9697973d33bdc61fdeafe2a7b9134972e34df3b72733a7 collect-2d-run.json
dc2dfaa6792cf03a9773a498f012a584189c28052ec6f22ecc133420f65a40d9 collect-2d-validate.json
12f1de3fbf88f5a79362546c1bb774edba1d10242e87b0dcf2c54da518e2f092 collect-3d-manifest.json
d092746029f534a19cb5601b1b99ae89bb8df1ef4233c23c7c6b2fc58f94a187 collect-3d-profile.json
73c8500a138db03799b3a2ef62e53aee4eac85e4fc8f67afb8304a8c3dc99707 collect-3d-run.json
d158e2a3bd2bd2266569f1538e3d22c8ddf89f4fb6e35d5667da077d6e73a4cb collect-3d-validate.json
755ae27866521bb47ae77f2f2e8700be3519bd239c1eba6fd1bebd245eb76fd1 integration-result-2.json
e7f6dd0a77606c1b67d31815028a6f813230b0d8080102466952642573167646 integration-result-3.json
e27b20493c70f1647d03cfb7e324469c6ce4969f29ac4a396edaa0c5b35c856c lua-manifest.json
545abdc5a83cd4c2e57ec123b8d081ea8d65181d3f2ef67b99e40dcc6bb19cfc lua-profile.json
0bc49809aebe0c1e18532f46179a6af57f4739d12932f54b9bfb111e718a64e8 lua-run.json
7bd404dbc99c866f8fea7fb62ce0ef2b835e35c18aca03fab61f5101f04ed063 lua-validate.json
b4a039e27bb39889c3c730e468ff06988d0f5398cd751cdd112cb225c2709750 playable-report.json
969162d1f994724ff6f98d20353e62e3881477ebce98759ca325c8febb175176 toolchain.json
0c85c12510dbb0d895faefb7d14f26935a5add675cf0477b29f543d72eed40d6 vulkan-probe.json
@@ -0,0 +1,274 @@
{
"asset_generations": {},
"build_fingerprint": "a55d8cd6e8a3df06c58f881f5599a8efbaa966c405ecf2e3993b4085444dd7d9",
"configuration": "Release",
"executable": "faset_player.exe",
"files": [
{
"path": "faset_player.exe",
"sha256": "6efca1fb12e2dfc8d6bd8d4cd83f688c6c6ff0d566fbf86d35a4a5246ee495e0",
"size": 4666368
},
{
"path": "Notices/box2d/LICENSE",
"sha256": "68a3e676d7e94093b102d5cba0d4e04af812040d6f230c3db67a6664574e43d2",
"size": 1067
},
{
"path": "Notices/box3d/LICENSE",
"sha256": "da5e31a26bf3cfd5ba5c96d6823e480128c81e76c107ef9d3ee5d94789184b90",
"size": 1067
},
{
"path": "Notices/dependencies.json",
"sha256": "a54639ad2d9ad13c2e5f1ec90d6775f5dfc493656789b78c7e44debe2a378fdc",
"size": 2206
},
{
"path": "Notices/entt/LICENSE",
"sha256": "0785027ce472d7c61f05fba664a1d3ba6639c1593ced351ad9e4bed868765d99",
"size": 1097
},
{
"path": "Notices/Faset-NOTICE.txt",
"sha256": "30c2e7e80f5153b31ab57675e07246aef9165965d64e36022b426a26449ece3f",
"size": 204
},
{
"path": "Notices/json/LICENSE.MIT",
"sha256": "46a65cffd1ea955132d95a8dd921640714a8d6b537d2e4e482d31145ae95b603",
"size": 1076
},
{
"path": "Notices/sdl3/LICENSE.txt",
"sha256": "97f35b302b361680ec1e891e95d2d52097bb95abff361434916d99dc1305f127",
"size": 884
},
{
"path": "Notices/stb/LICENSE",
"sha256": "bebfe904b14301657e4e5d655c811d51fd31b97c455b9cc2d8600d6bac6cff63",
"size": 2510
},
{
"path": "README.txt",
"sha256": "fe27b3851e724087d90841a9878e41e972d74e1e414cb696b6c9ad53ff2c9038",
"size": 266
},
{
"path": "scene.fscene",
"sha256": "0d7b221abc1cae5e9f1d04357c684ac6993f5878d634b4b950eec66dd8e55b2a",
"size": 6214
},
{
"path": "shaders/fragmentMain.reflection.json",
"sha256": "9b55300034684c433a1defa7f3027d1dece064575f181670dd03b89aa63a532c",
"size": 3768
},
{
"path": "shaders/fragmentMain.spv",
"sha256": "fea4dd48664a510bad12b5e8582f2db798d4dbea62ce0de35dc2acfe32372733",
"size": 28960
},
{
"path": "shaders/gpuCullMain.reflection.json",
"sha256": "96e0d6557c6303a7a450e9ba6feb6a283163d16653daec5a63eca549c78b15c2",
"size": 3753
},
{
"path": "shaders/gpuCullMain.spv",
"sha256": "e5ea6589ddb3613b59f8e58420be95a534cf4149816bc65bae26b1395c638955",
"size": 16288
},
{
"path": "shaders/gpuHzbMain.reflection.json",
"sha256": "98ec71e97494b42fc558acd2296e46ae7bcb5850d11aef8bfd00c4ea349ba7e1",
"size": 2144
},
{
"path": "shaders/gpuHzbMain.spv",
"sha256": "08682362ee2120ed19d260e613285071747c3e436bb09bb6238e46f9cedc2308",
"size": 4140
},
{
"path": "shaders/gpuPostCullMain.reflection.json",
"sha256": "9cddc008fb32d2259dc22ce44f6d060a663c454fcd4e445c872106243f37a550",
"size": 3757
},
{
"path": "shaders/gpuPostCullMain.spv",
"sha256": "1f8edd3be1f99f9433494a6f7be68f1317d6e7099e19354a7b8130d5d932224d",
"size": 12548
},
{
"path": "shaders/gpuShadowMain.reflection.json",
"sha256": "89c682fe25b67804d991d010dd6841f2173617358508e64fca4d825bd4c14fb9",
"size": 2884
},
{
"path": "shaders/gpuShadowMain.spv",
"sha256": "f56e0ae3e9b31cb1e3f24e379c81e11c853f8a7102648aaaebc92a17c7e8e53c",
"size": 2492
},
{
"path": "shaders/gpuTemporalVertexMain.reflection.json",
"sha256": "bb5bfe6f167fe854b76c30ec8cc5a2eb6e54ab418a10ac4aa53090b63b992316",
"size": 3470
},
{
"path": "shaders/gpuTemporalVertexMain.spv",
"sha256": "dfe7309aafbd41974668b295e179354965db440e4156b9f12d6a67db16b357f9",
"size": 5996
},
{
"path": "shaders/gpuVertexMain.reflection.json",
"sha256": "47227a7c12cd469d4aac3d17a0b78477550db8fa2777845f5cd6a652fec42d87",
"size": 3248
},
{
"path": "shaders/gpuVertexMain.spv",
"sha256": "32421d4a91f3a88d5210fee7af34b48bcad83072f14e2ccb9ef2ff983e45f78f",
"size": 5016
},
{
"path": "shaders/lightTileMain.reflection.json",
"sha256": "c86a17d1b01a6f1797418f93aa09fa70a73b214282bf210d598cde7ffa7ce9b5",
"size": 2066
},
{
"path": "shaders/lightTileMain.spv",
"sha256": "92850edcc5ee5b586a90ce84ee69a98075a6fff3c13db4a57528d9431afe8b68",
"size": 6800
},
{
"path": "shaders/shadowMain.reflection.json",
"sha256": "24f4f5f30cc55f6730d198829048f13fc24c529f57d2d09f6e79e933315f5a63",
"size": 3768
},
{
"path": "shaders/shadowMain.spv",
"sha256": "7643b4d688492b5ee923b9606f0b0e70343ca05fa67673838206119a6f86d8d8",
"size": 784
},
{
"path": "shaders/temporalCompositeFragmentMain.reflection.json",
"sha256": "51513834e46536cac7521e4e91c8f877e1702362e6a8223ce9b29fc823d94e58",
"size": 997
},
{
"path": "shaders/temporalCompositeFragmentMain.spv",
"sha256": "9e21c8534c0e70a58ae018fb2d143bf9cfb70112e71b67585f525eef0aecad1b",
"size": 768
},
{
"path": "shaders/temporalCompositeVertexMain.reflection.json",
"sha256": "caacb282616fe3d5129acf7a4cc88f9fb923d9b24bccc6c82260baec5e7640eb",
"size": 994
},
{
"path": "shaders/temporalCompositeVertexMain.spv",
"sha256": "6b19f65b64f40d0a249660fdfba9dd5d95831ffab7314a307bf1f5cf39c6a248",
"size": 340
},
{
"path": "shaders/temporalFragmentMain.reflection.json",
"sha256": "d28069adc2b1d58bf6b32e8d267ecb6fc374602d032aa6e29a25d3cd19f3460a",
"size": 4062
},
{
"path": "shaders/temporalFragmentMain.spv",
"sha256": "03adc6673276979b3ea46becf3a36940d3061af77cb8c965c7471feff8dbf89a",
"size": 30976
},
{
"path": "shaders/temporalResolveMain.reflection.json",
"sha256": "533f8f4f8a0550b94c24a925abc6acedd45cf6d62df89c7a030c1aa81bd1c382",
"size": 3534
},
{
"path": "shaders/temporalResolveMain.spv",
"sha256": "5f579dfe762d201db5ba33483b14bd0e0d37051735874919a3913ee00157bad7",
"size": 23236
},
{
"path": "shaders/temporalVertexMain.reflection.json",
"sha256": "510ed900d9485b19e5649b14378c276d6c9df2c75e17ae7df7d908ed7c665e9a",
"size": 4128
},
{
"path": "shaders/temporalVertexMain.spv",
"sha256": "6cc3535c952a33ee46fd417fbec7fcad8f24357508b2119256b3077be3d60955",
"size": 1784
},
{
"path": "shaders/vertexMain.reflection.json",
"sha256": "009f4d731ae8668fb448d12ff7d5daa62bb64b22e0aab4cfa26712c737731d05",
"size": 3764
},
{
"path": "shaders/vertexMain.spv",
"sha256": "1ad2631c35d654f48166321ae43d4165043e1b919b14f1dc61caf97b1ada0898",
"size": 1224
},
{
"path": "Windows-Runtime.txt",
"sha256": "1c53b7b6890d4a10408acfa7a27760ca1b176bb43dba9c25f3e5d2ac2d7d15db",
"size": 227
}
],
"format": "faset.export",
"generation": "bee9b162-a18f-4a1a-b20e-45a158083622",
"lua_enabled": false,
"lua_fingerprint": "",
"platform": "windows",
"prerequisites": [
"Windows x64",
"Vulkan 1.3 driver",
"Microsoft Visual C++ x64 Redistributable (Visual Studio 2022 or newer)"
],
"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}\r\n",
"version": 1
}
@@ -0,0 +1,18 @@
{
"arguments": [
"C:\\Users\\runneradmin\\AppData\\Local\\Temp\\faset-playable-exports-w6c8iavr\\Faset Café 世界\\collect-2d\\faset_player.exe",
"--headless",
"--frames",
"120",
"--capture",
"C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\faset-playable-exports-w6c8iavr\\Faset Café 世界\\collect-2d\\verification.ppm",
"--profile",
"C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\faset-playable-exports-w6c8iavr\\Faset Café 世界\\collect-2d\\profile.json"
],
"cwd": "C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\faset-playable-exports-w6c8iavr\\empty-working-directory",
"seconds": 1.9529999999999745,
"exit_code": 0,
"timed_out": false,
"stdout": "New round: collect the three gold cubes, then reach the green exit. E resets.\n{\"device\":\"SwiftShader Device (LLVM 10.0.0)\",\"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": "[Faset] Vulkan validation layer/debug-utils unavailable; validation disabled.\n"
}
@@ -0,0 +1,12 @@
{
"arguments": [
"C:\\Users\\runneradmin\\AppData\\Local\\Temp\\faset-playable-exports-w6c8iavr\\Faset Café 世界\\collect-2d\\faset_player.exe",
"--validate"
],
"cwd": "C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\faset-playable-exports-w6c8iavr\\empty-working-directory",
"seconds": 0.016000000000076398,
"exit_code": 0,
"timed_out": false,
"stdout": "{\"dimension\":2,\"validated\":true}\n",
"stderr": ""
}
@@ -0,0 +1,301 @@
{
"asset_generations": {
"5832763b-3ed0-44d6-9088-0b524f196a91": "e8eb8805673cc22596d1c5b48fc6b8fbdf600d1c6a15c9633d14014a7eb1d11f"
},
"build_fingerprint": "e72712c86649f4ecb5545c5576dfcea5e446bcad8e06a0fe5275afea1d77a1a3",
"configuration": "Release",
"executable": "faset_player.exe",
"files": [
{
"path": "assets/5832763b-3ed0-44d6-9088-0b524f196a91/current.json",
"sha256": "32a37e4497f1129c0c78f3ccab4c53e802afe60cabc7a445a31114bf071ff90a",
"size": 134
},
{
"path": "assets/5832763b-3ed0-44d6-9088-0b524f196a91/generations/e8eb8805673cc22596d1c5b48fc6b8fbdf600d1c6a15c9633d14014a7eb1d11f/manifest.json",
"sha256": "c13287d0ebbef75aa610af4a5d3e687e232b2450f3daaff6926fe6128250ead6",
"size": 4532
},
{
"path": "assets/5832763b-3ed0-44d6-9088-0b524f196a91/generations/e8eb8805673cc22596d1c5b48fc6b8fbdf600d1c6a15c9633d14014a7eb1d11f/meshes/mesh-0961e2a3f92977836a3aa80cab09277e-0.fmesh",
"sha256": "98b38aca7d2786c58a2265ba4d1f2255123f03d31d947e239232cf55bfdc2c97",
"size": 928
},
{
"path": "assets/5832763b-3ed0-44d6-9088-0b524f196a91/generations/e8eb8805673cc22596d1c5b48fc6b8fbdf600d1c6a15c9633d14014a7eb1d11f/meshes/mesh-93b5b3e52cb6bb120fefb80e2d8e222b-0.fmesh",
"sha256": "3875c16ea628d4126373ebfe07816621fbad3961596a2fcd112f1eec0e378071",
"size": 928
},
{
"path": "assets/5832763b-3ed0-44d6-9088-0b524f196a91/generations/e8eb8805673cc22596d1c5b48fc6b8fbdf600d1c6a15c9633d14014a7eb1d11f/meshes/mesh-fc069a07a87e0f831fd92efdbc4efa1f-0.fmesh",
"sha256": "98b38aca7d2786c58a2265ba4d1f2255123f03d31d947e239232cf55bfdc2c97",
"size": 928
},
{
"path": "faset_player.exe",
"sha256": "201b909c445c91293a13454f2f868f41c6716c8423c9cb07901c4889785fb917",
"size": 4679168
},
{
"path": "Notices/box2d/LICENSE",
"sha256": "68a3e676d7e94093b102d5cba0d4e04af812040d6f230c3db67a6664574e43d2",
"size": 1067
},
{
"path": "Notices/box3d/LICENSE",
"sha256": "da5e31a26bf3cfd5ba5c96d6823e480128c81e76c107ef9d3ee5d94789184b90",
"size": 1067
},
{
"path": "Notices/dependencies.json",
"sha256": "a54639ad2d9ad13c2e5f1ec90d6775f5dfc493656789b78c7e44debe2a378fdc",
"size": 2206
},
{
"path": "Notices/entt/LICENSE",
"sha256": "0785027ce472d7c61f05fba664a1d3ba6639c1593ced351ad9e4bed868765d99",
"size": 1097
},
{
"path": "Notices/Faset-NOTICE.txt",
"sha256": "30c2e7e80f5153b31ab57675e07246aef9165965d64e36022b426a26449ece3f",
"size": 204
},
{
"path": "Notices/json/LICENSE.MIT",
"sha256": "46a65cffd1ea955132d95a8dd921640714a8d6b537d2e4e482d31145ae95b603",
"size": 1076
},
{
"path": "Notices/sdl3/LICENSE.txt",
"sha256": "97f35b302b361680ec1e891e95d2d52097bb95abff361434916d99dc1305f127",
"size": 884
},
{
"path": "Notices/stb/LICENSE",
"sha256": "bebfe904b14301657e4e5d655c811d51fd31b97c455b9cc2d8600d6bac6cff63",
"size": 2510
},
{
"path": "README.txt",
"sha256": "fe27b3851e724087d90841a9878e41e972d74e1e414cb696b6c9ad53ff2c9038",
"size": 266
},
{
"path": "scene.fscene",
"sha256": "21c364140669ec82c6886102667b255df5ccdf0ec77e0ca64060f84dd7b86632",
"size": 8639
},
{
"path": "shaders/fragmentMain.reflection.json",
"sha256": "9b55300034684c433a1defa7f3027d1dece064575f181670dd03b89aa63a532c",
"size": 3768
},
{
"path": "shaders/fragmentMain.spv",
"sha256": "fea4dd48664a510bad12b5e8582f2db798d4dbea62ce0de35dc2acfe32372733",
"size": 28960
},
{
"path": "shaders/gpuCullMain.reflection.json",
"sha256": "96e0d6557c6303a7a450e9ba6feb6a283163d16653daec5a63eca549c78b15c2",
"size": 3753
},
{
"path": "shaders/gpuCullMain.spv",
"sha256": "e5ea6589ddb3613b59f8e58420be95a534cf4149816bc65bae26b1395c638955",
"size": 16288
},
{
"path": "shaders/gpuHzbMain.reflection.json",
"sha256": "98ec71e97494b42fc558acd2296e46ae7bcb5850d11aef8bfd00c4ea349ba7e1",
"size": 2144
},
{
"path": "shaders/gpuHzbMain.spv",
"sha256": "08682362ee2120ed19d260e613285071747c3e436bb09bb6238e46f9cedc2308",
"size": 4140
},
{
"path": "shaders/gpuPostCullMain.reflection.json",
"sha256": "9cddc008fb32d2259dc22ce44f6d060a663c454fcd4e445c872106243f37a550",
"size": 3757
},
{
"path": "shaders/gpuPostCullMain.spv",
"sha256": "1f8edd3be1f99f9433494a6f7be68f1317d6e7099e19354a7b8130d5d932224d",
"size": 12548
},
{
"path": "shaders/gpuShadowMain.reflection.json",
"sha256": "89c682fe25b67804d991d010dd6841f2173617358508e64fca4d825bd4c14fb9",
"size": 2884
},
{
"path": "shaders/gpuShadowMain.spv",
"sha256": "f56e0ae3e9b31cb1e3f24e379c81e11c853f8a7102648aaaebc92a17c7e8e53c",
"size": 2492
},
{
"path": "shaders/gpuTemporalVertexMain.reflection.json",
"sha256": "bb5bfe6f167fe854b76c30ec8cc5a2eb6e54ab418a10ac4aa53090b63b992316",
"size": 3470
},
{
"path": "shaders/gpuTemporalVertexMain.spv",
"sha256": "dfe7309aafbd41974668b295e179354965db440e4156b9f12d6a67db16b357f9",
"size": 5996
},
{
"path": "shaders/gpuVertexMain.reflection.json",
"sha256": "47227a7c12cd469d4aac3d17a0b78477550db8fa2777845f5cd6a652fec42d87",
"size": 3248
},
{
"path": "shaders/gpuVertexMain.spv",
"sha256": "32421d4a91f3a88d5210fee7af34b48bcad83072f14e2ccb9ef2ff983e45f78f",
"size": 5016
},
{
"path": "shaders/lightTileMain.reflection.json",
"sha256": "c86a17d1b01a6f1797418f93aa09fa70a73b214282bf210d598cde7ffa7ce9b5",
"size": 2066
},
{
"path": "shaders/lightTileMain.spv",
"sha256": "92850edcc5ee5b586a90ce84ee69a98075a6fff3c13db4a57528d9431afe8b68",
"size": 6800
},
{
"path": "shaders/shadowMain.reflection.json",
"sha256": "24f4f5f30cc55f6730d198829048f13fc24c529f57d2d09f6e79e933315f5a63",
"size": 3768
},
{
"path": "shaders/shadowMain.spv",
"sha256": "7643b4d688492b5ee923b9606f0b0e70343ca05fa67673838206119a6f86d8d8",
"size": 784
},
{
"path": "shaders/temporalCompositeFragmentMain.reflection.json",
"sha256": "51513834e46536cac7521e4e91c8f877e1702362e6a8223ce9b29fc823d94e58",
"size": 997
},
{
"path": "shaders/temporalCompositeFragmentMain.spv",
"sha256": "9e21c8534c0e70a58ae018fb2d143bf9cfb70112e71b67585f525eef0aecad1b",
"size": 768
},
{
"path": "shaders/temporalCompositeVertexMain.reflection.json",
"sha256": "caacb282616fe3d5129acf7a4cc88f9fb923d9b24bccc6c82260baec5e7640eb",
"size": 994
},
{
"path": "shaders/temporalCompositeVertexMain.spv",
"sha256": "6b19f65b64f40d0a249660fdfba9dd5d95831ffab7314a307bf1f5cf39c6a248",
"size": 340
},
{
"path": "shaders/temporalFragmentMain.reflection.json",
"sha256": "d28069adc2b1d58bf6b32e8d267ecb6fc374602d032aa6e29a25d3cd19f3460a",
"size": 4062
},
{
"path": "shaders/temporalFragmentMain.spv",
"sha256": "03adc6673276979b3ea46becf3a36940d3061af77cb8c965c7471feff8dbf89a",
"size": 30976
},
{
"path": "shaders/temporalResolveMain.reflection.json",
"sha256": "533f8f4f8a0550b94c24a925abc6acedd45cf6d62df89c7a030c1aa81bd1c382",
"size": 3534
},
{
"path": "shaders/temporalResolveMain.spv",
"sha256": "5f579dfe762d201db5ba33483b14bd0e0d37051735874919a3913ee00157bad7",
"size": 23236
},
{
"path": "shaders/temporalVertexMain.reflection.json",
"sha256": "510ed900d9485b19e5649b14378c276d6c9df2c75e17ae7df7d908ed7c665e9a",
"size": 4128
},
{
"path": "shaders/temporalVertexMain.spv",
"sha256": "6cc3535c952a33ee46fd417fbec7fcad8f24357508b2119256b3077be3d60955",
"size": 1784
},
{
"path": "shaders/vertexMain.reflection.json",
"sha256": "009f4d731ae8668fb448d12ff7d5daa62bb64b22e0aab4cfa26712c737731d05",
"size": 3764
},
{
"path": "shaders/vertexMain.spv",
"sha256": "1ad2631c35d654f48166321ae43d4165043e1b919b14f1dc61caf97b1ada0898",
"size": 1224
},
{
"path": "Windows-Runtime.txt",
"sha256": "1c53b7b6890d4a10408acfa7a27760ca1b176bb43dba9c25f3e5d2ac2d7d15db",
"size": 227
}
],
"format": "faset.export",
"generation": "2dd8f235-75f3-4b16-be10-c2ea596259e9",
"lua_enabled": false,
"lua_fingerprint": "",
"platform": "windows",
"prerequisites": [
"Windows x64",
"Vulkan 1.3 driver",
"Microsoft Visual C++ x64 Redistributable (Visual Studio 2022 or newer)"
],
"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\r\n{\"dimension\":3,\"validated\":true}\r\n",
"version": 1
}
@@ -0,0 +1,18 @@
{
"arguments": [
"C:\\Users\\runneradmin\\AppData\\Local\\Temp\\faset-playable-exports-w6c8iavr\\Faset Café 世界\\collect-3d\\faset_player.exe",
"--headless",
"--frames",
"120",
"--capture",
"C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\faset-playable-exports-w6c8iavr\\Faset Café 世界\\collect-3d\\verification.ppm",
"--profile",
"C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\faset-playable-exports-w6c8iavr\\Faset Café 世界\\collect-3d\\profile.json"
],
"cwd": "C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\faset-playable-exports-w6c8iavr\\empty-working-directory",
"seconds": 6.0,
"exit_code": 0,
"timed_out": false,
"stdout": "New round: collect the three gold cubes, then reach the green exit. E resets.\n{\"device\":\"SwiftShader Device (LLVM 10.0.0)\",\"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": "[Faset] Vulkan validation layer/debug-utils unavailable; validation disabled.\nwarning: material material-bb63b094febbf90bb7049c9bcf7587bc has features beyond the initial base-color/PBR renderer\n"
}
@@ -0,0 +1,12 @@
{
"arguments": [
"C:\\Users\\runneradmin\\AppData\\Local\\Temp\\faset-playable-exports-w6c8iavr\\Faset Café 世界\\collect-3d\\faset_player.exe",
"--validate"
],
"cwd": "C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\faset-playable-exports-w6c8iavr\\empty-working-directory",
"seconds": 0.032000000000152795,
"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,31 @@
{
"build": {
"build_directory": "D:\\a\\_temp\\faset-windows-export-e2e\\native-build\\Release",
"configuration": "Release",
"directory": "D:\\a\\_temp\\faset-windows-export-e2e\\project\\.faset\\cache\\builds\\fbdea58e-124d-472b-b766-ca9e06d1905b",
"fingerprint": "fe40e3424d7b789082bd7c264853181baa6af3431b0c3a377618e83691e324ad",
"generation": "fbdea58e-124d-472b-b766-ca9e06d1905b",
"generation_reused": false,
"lua_enabled": false,
"lua_fingerprint": "",
"phase_times_ms": {
"configure": 42018,
"native_build": 96460,
"schema_package": 826,
"total": 139304
},
"player": "D:\\a\\_temp\\faset-windows-export-e2e\\project\\.faset\\cache\\builds\\fbdea58e-124d-472b-b766-ca9e06d1905b\\faset_player.exe",
"schema": "D:\\a\\_temp\\faset-windows-export-e2e\\project\\.faset\\cache\\builds\\fbdea58e-124d-472b-b766-ca9e06d1905b\\schema.json",
"schema_cache_hit": false,
"source_signature": "15301c593f735036cd5f41c6425120d867394fb7b40b0b1b060b7f530292b839"
},
"build_directory": "D:\\a\\_temp\\faset-windows-export-e2e\\native-build\\Release",
"configuration": "Release",
"directory": "D:\\a\\_temp\\faset-windows-export-e2e\\export-2\\generations\\fbdea58e-124d-472b-b766-ca9e06d1905b",
"executable": "D:\\a\\_temp\\faset-windows-export-e2e\\export-2\\generations\\fbdea58e-124d-472b-b766-ca9e06d1905b\\faset_player.exe",
"generation": "fbdea58e-124d-472b-b766-ca9e06d1905b",
"manifest": "D:\\a\\_temp\\faset-windows-export-e2e\\export-2\\generations\\fbdea58e-124d-472b-b766-ca9e06d1905b\\manifest.json",
"player": "D:\\a\\_temp\\faset-windows-export-e2e\\project\\.faset\\cache\\builds\\fbdea58e-124d-472b-b766-ca9e06d1905b\\faset_player.exe",
"schema": "D:\\a\\_temp\\faset-windows-export-e2e\\project\\.faset\\cache\\builds\\fbdea58e-124d-472b-b766-ca9e06d1905b\\schema.json",
"source_signature": "15301c593f735036cd5f41c6425120d867394fb7b40b0b1b060b7f530292b839"
}
@@ -0,0 +1,31 @@
{
"build": {
"build_directory": "D:\\a\\_temp\\faset-windows-export-e2e\\native-build\\Release",
"configuration": "Release",
"directory": "D:\\a\\_temp\\faset-windows-export-e2e\\project\\.faset\\cache\\builds\\9c96cb69-a6e2-4de4-bc50-646e79f650d1",
"fingerprint": "962a55fda8928ee1f6a8bebfa15fd497ccb9668291109b7f2463453650504512",
"generation": "9c96cb69-a6e2-4de4-bc50-646e79f650d1",
"generation_reused": false,
"lua_enabled": false,
"lua_fingerprint": "",
"phase_times_ms": {
"configure": 13316,
"native_build": 127,
"schema_package": 820,
"total": 14263
},
"player": "D:\\a\\_temp\\faset-windows-export-e2e\\project\\.faset\\cache\\builds\\9c96cb69-a6e2-4de4-bc50-646e79f650d1\\faset_player.exe",
"schema": "D:\\a\\_temp\\faset-windows-export-e2e\\project\\.faset\\cache\\builds\\9c96cb69-a6e2-4de4-bc50-646e79f650d1\\schema.json",
"schema_cache_hit": false,
"source_signature": "15301c593f735036cd5f41c6425120d867394fb7b40b0b1b060b7f530292b839"
},
"build_directory": "D:\\a\\_temp\\faset-windows-export-e2e\\native-build\\Release",
"configuration": "Release",
"directory": "D:\\a\\_temp\\faset-windows-export-e2e\\export-3\\generations\\9c96cb69-a6e2-4de4-bc50-646e79f650d1",
"executable": "D:\\a\\_temp\\faset-windows-export-e2e\\export-3\\generations\\9c96cb69-a6e2-4de4-bc50-646e79f650d1\\faset_player.exe",
"generation": "9c96cb69-a6e2-4de4-bc50-646e79f650d1",
"manifest": "D:\\a\\_temp\\faset-windows-export-e2e\\export-3\\generations\\9c96cb69-a6e2-4de4-bc50-646e79f650d1\\manifest.json",
"player": "D:\\a\\_temp\\faset-windows-export-e2e\\project\\.faset\\cache\\builds\\9c96cb69-a6e2-4de4-bc50-646e79f650d1\\faset_player.exe",
"schema": "D:\\a\\_temp\\faset-windows-export-e2e\\project\\.faset\\cache\\builds\\9c96cb69-a6e2-4de4-bc50-646e79f650d1\\schema.json",
"source_signature": "15301c593f735036cd5f41c6425120d867394fb7b40b0b1b060b7f530292b839"
}
@@ -0,0 +1,299 @@
{
"asset_generations": {},
"build_fingerprint": "a210b1cfff71fcd01e150f7e824d14b5dfe42e2629a92c84f349d89feacf3ed0",
"configuration": "Release",
"executable": "faset_player.exe",
"files": [
{
"path": "faset_player.exe",
"sha256": "34b4fd6350122072599709071d891f109060533b6c390b77615b08b68ab1569a",
"size": 4973056
},
{
"path": "Notices/box2d/LICENSE",
"sha256": "68a3e676d7e94093b102d5cba0d4e04af812040d6f230c3db67a6664574e43d2",
"size": 1067
},
{
"path": "Notices/box3d/LICENSE",
"sha256": "da5e31a26bf3cfd5ba5c96d6823e480128c81e76c107ef9d3ee5d94789184b90",
"size": 1067
},
{
"path": "Notices/dependencies.json",
"sha256": "262e8f63cf21c516829b1fedb0900ac90e76d62aa8f78d9ad02d8f24e0359e74",
"size": 2468
},
{
"path": "Notices/entt/LICENSE",
"sha256": "0785027ce472d7c61f05fba664a1d3ba6639c1593ced351ad9e4bed868765d99",
"size": 1097
},
{
"path": "Notices/Faset-NOTICE.txt",
"sha256": "30c2e7e80f5153b31ab57675e07246aef9165965d64e36022b426a26449ece3f",
"size": 204
},
{
"path": "Notices/json/LICENSE.MIT",
"sha256": "46a65cffd1ea955132d95a8dd921640714a8d6b537d2e4e482d31145ae95b603",
"size": 1076
},
{
"path": "Notices/lua/LICENSE.txt",
"sha256": "18c02bc0a68f7bf638609d3729056bc1b260cd111cdd5ef0dcc33d365f420159",
"size": 1149
},
{
"path": "Notices/sdl3/LICENSE.txt",
"sha256": "97f35b302b361680ec1e891e95d2d52097bb95abff361434916d99dc1305f127",
"size": 884
},
{
"path": "Notices/stb/LICENSE",
"sha256": "bebfe904b14301657e4e5d655c811d51fd31b97c455b9cc2d8600d6bac6cff63",
"size": 2510
},
{
"path": "project.faset.json",
"sha256": "e07b12047f8141c3c4cc8f0e7d0905a5c635375e4494755e34191db0859ab86f",
"size": 175
},
{
"path": "README.txt",
"sha256": "fe27b3851e724087d90841a9878e41e972d74e1e414cb696b6c9ad53ff2c9038",
"size": 266
},
{
"path": "scene.fscene",
"sha256": "641ba14a1f9c3966b9ec797814fdfa54f954dc5e0d53ab00c645598edef61baf",
"size": 1681
},
{
"path": "Scripts/beacon.lua",
"sha256": "8d30f894795f231795d6585acaa5c8df66179597f5e608da8a596152bc9bd74a",
"size": 847
},
{
"path": "Scripts/player.lua",
"sha256": "8a525c978b9147312c4917e5c04a40443f923bfeea14fbafc014ca9bea1b9322",
"size": 1423
},
{
"path": "Scripts/util/motion.lua",
"sha256": "d35063ecaa127eeebc0c4931eeb5ed42fe69ab54f3e824caf8661fe60525c2a5",
"size": 157
},
{
"path": "shaders/fragmentMain.reflection.json",
"sha256": "9b55300034684c433a1defa7f3027d1dece064575f181670dd03b89aa63a532c",
"size": 3768
},
{
"path": "shaders/fragmentMain.spv",
"sha256": "fea4dd48664a510bad12b5e8582f2db798d4dbea62ce0de35dc2acfe32372733",
"size": 28960
},
{
"path": "shaders/gpuCullMain.reflection.json",
"sha256": "96e0d6557c6303a7a450e9ba6feb6a283163d16653daec5a63eca549c78b15c2",
"size": 3753
},
{
"path": "shaders/gpuCullMain.spv",
"sha256": "e5ea6589ddb3613b59f8e58420be95a534cf4149816bc65bae26b1395c638955",
"size": 16288
},
{
"path": "shaders/gpuHzbMain.reflection.json",
"sha256": "98ec71e97494b42fc558acd2296e46ae7bcb5850d11aef8bfd00c4ea349ba7e1",
"size": 2144
},
{
"path": "shaders/gpuHzbMain.spv",
"sha256": "08682362ee2120ed19d260e613285071747c3e436bb09bb6238e46f9cedc2308",
"size": 4140
},
{
"path": "shaders/gpuPostCullMain.reflection.json",
"sha256": "9cddc008fb32d2259dc22ce44f6d060a663c454fcd4e445c872106243f37a550",
"size": 3757
},
{
"path": "shaders/gpuPostCullMain.spv",
"sha256": "1f8edd3be1f99f9433494a6f7be68f1317d6e7099e19354a7b8130d5d932224d",
"size": 12548
},
{
"path": "shaders/gpuShadowMain.reflection.json",
"sha256": "89c682fe25b67804d991d010dd6841f2173617358508e64fca4d825bd4c14fb9",
"size": 2884
},
{
"path": "shaders/gpuShadowMain.spv",
"sha256": "f56e0ae3e9b31cb1e3f24e379c81e11c853f8a7102648aaaebc92a17c7e8e53c",
"size": 2492
},
{
"path": "shaders/gpuTemporalVertexMain.reflection.json",
"sha256": "bb5bfe6f167fe854b76c30ec8cc5a2eb6e54ab418a10ac4aa53090b63b992316",
"size": 3470
},
{
"path": "shaders/gpuTemporalVertexMain.spv",
"sha256": "dfe7309aafbd41974668b295e179354965db440e4156b9f12d6a67db16b357f9",
"size": 5996
},
{
"path": "shaders/gpuVertexMain.reflection.json",
"sha256": "47227a7c12cd469d4aac3d17a0b78477550db8fa2777845f5cd6a652fec42d87",
"size": 3248
},
{
"path": "shaders/gpuVertexMain.spv",
"sha256": "32421d4a91f3a88d5210fee7af34b48bcad83072f14e2ccb9ef2ff983e45f78f",
"size": 5016
},
{
"path": "shaders/lightTileMain.reflection.json",
"sha256": "c86a17d1b01a6f1797418f93aa09fa70a73b214282bf210d598cde7ffa7ce9b5",
"size": 2066
},
{
"path": "shaders/lightTileMain.spv",
"sha256": "92850edcc5ee5b586a90ce84ee69a98075a6fff3c13db4a57528d9431afe8b68",
"size": 6800
},
{
"path": "shaders/shadowMain.reflection.json",
"sha256": "24f4f5f30cc55f6730d198829048f13fc24c529f57d2d09f6e79e933315f5a63",
"size": 3768
},
{
"path": "shaders/shadowMain.spv",
"sha256": "7643b4d688492b5ee923b9606f0b0e70343ca05fa67673838206119a6f86d8d8",
"size": 784
},
{
"path": "shaders/temporalCompositeFragmentMain.reflection.json",
"sha256": "51513834e46536cac7521e4e91c8f877e1702362e6a8223ce9b29fc823d94e58",
"size": 997
},
{
"path": "shaders/temporalCompositeFragmentMain.spv",
"sha256": "9e21c8534c0e70a58ae018fb2d143bf9cfb70112e71b67585f525eef0aecad1b",
"size": 768
},
{
"path": "shaders/temporalCompositeVertexMain.reflection.json",
"sha256": "caacb282616fe3d5129acf7a4cc88f9fb923d9b24bccc6c82260baec5e7640eb",
"size": 994
},
{
"path": "shaders/temporalCompositeVertexMain.spv",
"sha256": "6b19f65b64f40d0a249660fdfba9dd5d95831ffab7314a307bf1f5cf39c6a248",
"size": 340
},
{
"path": "shaders/temporalFragmentMain.reflection.json",
"sha256": "d28069adc2b1d58bf6b32e8d267ecb6fc374602d032aa6e29a25d3cd19f3460a",
"size": 4062
},
{
"path": "shaders/temporalFragmentMain.spv",
"sha256": "03adc6673276979b3ea46becf3a36940d3061af77cb8c965c7471feff8dbf89a",
"size": 30976
},
{
"path": "shaders/temporalResolveMain.reflection.json",
"sha256": "533f8f4f8a0550b94c24a925abc6acedd45cf6d62df89c7a030c1aa81bd1c382",
"size": 3534
},
{
"path": "shaders/temporalResolveMain.spv",
"sha256": "5f579dfe762d201db5ba33483b14bd0e0d37051735874919a3913ee00157bad7",
"size": 23236
},
{
"path": "shaders/temporalVertexMain.reflection.json",
"sha256": "510ed900d9485b19e5649b14378c276d6c9df2c75e17ae7df7d908ed7c665e9a",
"size": 4128
},
{
"path": "shaders/temporalVertexMain.spv",
"sha256": "6cc3535c952a33ee46fd417fbec7fcad8f24357508b2119256b3077be3d60955",
"size": 1784
},
{
"path": "shaders/vertexMain.reflection.json",
"sha256": "009f4d731ae8668fb448d12ff7d5daa62bb64b22e0aab4cfa26712c737731d05",
"size": 3764
},
{
"path": "shaders/vertexMain.spv",
"sha256": "1ad2631c35d654f48166321ae43d4165043e1b919b14f1dc61caf97b1ada0898",
"size": 1224
},
{
"path": "Windows-Runtime.txt",
"sha256": "1c53b7b6890d4a10408acfa7a27760ca1b176bb43dba9c25f3e5d2ac2d7d15db",
"size": 227
}
],
"format": "faset.export",
"generation": "5dcba522-6303-4c69-9ab8-19ddc4ef991f",
"lua_enabled": true,
"lua_fingerprint": "0e4d4cb17bbabafdd59df85ac4f624deb1cb2922d86bf100b3ce8bab81dc62ba",
"platform": "windows",
"prerequisites": [
"Windows x64",
"Vulkan 1.3 driver",
"Microsoft Visual C++ x64 Redistributable (Visual Studio 2022 or newer)"
],
"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}\r\n",
"version": 1
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,18 @@
{
"arguments": [
"C:\\Users\\runneradmin\\AppData\\Local\\Temp\\faset-playable-exports-w6c8iavr\\Faset Café 世界\\lua\\faset_player.exe",
"--headless",
"--frames",
"120",
"--capture",
"C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\faset-playable-exports-w6c8iavr\\Faset Café 世界\\lua\\verification.ppm",
"--profile",
"C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\faset-playable-exports-w6c8iavr\\Faset Café 世界\\lua\\profile.json"
],
"cwd": "C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\faset-playable-exports-w6c8iavr\\empty-working-directory",
"seconds": 1.9220000000000255,
"exit_code": 0,
"timed_out": false,
"stdout": "{\"device\":\"SwiftShader Device (LLVM 10.0.0)\",\"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[Faset] Vulkan validation layer/debug-utils unavailable; validation disabled.\n"
}
@@ -0,0 +1,12 @@
{
"arguments": [
"C:\\Users\\runneradmin\\AppData\\Local\\Temp\\faset-playable-exports-w6c8iavr\\Faset Café 世界\\lua\\faset_player.exe",
"--validate"
],
"cwd": "C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\faset-playable-exports-w6c8iavr\\empty-working-directory",
"seconds": 0.03099999999994907,
"exit_code": 0,
"timed_out": false,
"stdout": "{\"dimension\":2,\"validated\":true}\n",
"stderr": ""
}
@@ -0,0 +1,556 @@
{
"format": "faset.playable-export-verification",
"version": 1,
"started_utc": "2026-09-24T03:25:55.101593+00:00",
"platform": "win32",
"engine": "D:\\a\\Faset_Engine\\Faset_Engine",
"editor": "D:\\a\\Faset_Engine\\Faset_Engine\\build\\windows-debug\\faset_editor.exe",
"standalone_root": "C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\faset-playable-exports-w6c8iavr",
"engine_revision": "ed523c61c106b8e19614e4d56f0b5d39b8392478",
"engine_dirty": false,
"engine_git_status": [],
"engine_diff_sha256": null,
"editor_sha256": "3462ebc0c4fe2873bb86a504bad57f1c516db02cd0419790e7f260f7fa5759c4",
"project_workspace": "C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\faset-playable-projects-p3lt6g26",
"vulkaninfo_available": false,
"driver_override": "D:\\a\\Faset_Engine\\Faset_Engine\\.cache\\windows-graphics\\driver\\vk_swiftshader_icd.json",
"frames_per_game": 120,
"status": "passed",
"projects": [
{
"name": "collect-2d",
"dimension": 2,
"language": "cpp",
"source_inputs": [
{
"path": ".gitignore",
"sha256": "3bb936ff6f84f3db041c75d6e207138a9107997cc9ad372621f657456c9c0665"
},
{
"path": "project.faset.json",
"sha256": "27bd0e432381f8f884e78f6d68e9d0dc13d49222e70f3a5e34fef1d57d379b0b"
},
{
"path": "README.md",
"sha256": "7d7b95b16b29b1ed7fb1775d062d5ff599777189414d3e9500d0af0cc998201b"
},
{
"path": "Scenes/main.scene.json",
"sha256": "9e2ad049f60a9ff7f98e31061a8f107648fbf672e5b9292f53e6672e5bae66f1"
},
{
"path": "Scripts/Gameplay.cpp",
"sha256": "99fb965e6589b138049a2e6cf95c5c61baea70761ffab33082a8058c91a687ff"
},
{
"path": "Scripts/Gameplay.hpp",
"sha256": "9d1fa36da50886fa7d84f8a8b3d1ae42856ae74aae1e52be5015b60977634dc0"
}
],
"generation": "bee9b162-a18f-4a1a-b20e-45a158083622",
"configuration": "Release",
"standalone_directory": "C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\faset-playable-exports-w6c8iavr\\Faset Café 世界\\collect-2d",
"executable": "faset_player.exe",
"package_file_count": 42,
"asset_generations": {},
"device": "SwiftShader Device (LLVM 10.0.0)",
"device_class": "software",
"driver": {},
"validation_enabled": false,
"validation_errors": 0,
"completed_frames": 120,
"summary_ms": {
"gpu": {
"max": 535.1824,
"min": 5.6256,
"p50": 5.7408,
"p95": 6.3772,
"samples": 120
},
"render_call": {
"max": 536.1708,
"min": 5.8779,
"p50": 5.9993,
"p95": 6.6358,
"samples": 120
},
"renderer_cpu": {
"max": 536.1549,
"min": 5.8729,
"p50": 5.9924,
"p95": 6.6284,
"samples": 120
},
"renderer_readback_cpu": {
"max": 0.755,
"min": 0.1461,
"p50": 0.1521,
"p95": 0.1726,
"samples": 120
},
"simulation": {
"max": 0.4475,
"min": 0.2221,
"p50": 0.2841,
"p95": 0.3237,
"samples": 120
},
"snapshot": {
"max": 0.2605,
"min": 0.1438,
"p50": 0.223,
"p95": 0.2439,
"samples": 120
},
"wall": {
"max": 537.2951,
"min": 6.3889,
"p50": 6.5105,
"p95": 7.1658,
"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": "3bb936ff6f84f3db041c75d6e207138a9107997cc9ad372621f657456c9c0665"
},
{
"path": "Assets/exit-arch/create.py",
"sha256": "5d9dc30a3f939376d2474cf958065e6daab140c7220444cedecd3bf5edf6e3d1"
},
{
"path": "Assets/exit-arch/manifest.json",
"sha256": "d72d44184d665148109de74782bc695d79392e43be12782e48096a7d79e37c4f"
},
{
"path": "Assets/exit-arch/manifest.json.faset-import.json",
"sha256": "7639d4fa33f2ac52e10d1cf79280a93aeb680399d217fda167acec1c6edcae00"
},
{
"path": "Assets/exit-arch/payload/ee6c748a212905fc9c465cbe95c033e94b80be643624f4f240ad5353761205b3.glb",
"sha256": "ee6c748a212905fc9c465cbe95c033e94b80be643624f4f240ad5353761205b3"
},
{
"path": "Assets/exit-arch/source.blend",
"sha256": "ff2676bec97ab778e531e87a185ad716049ea3b05b4a4f0027a6345737735035"
},
{
"path": "project.faset.json",
"sha256": "9a0ee78fa0ea56982a99cf707948a33db37266ab84de9d3f12a24aabb98afda5"
},
{
"path": "README.md",
"sha256": "a2378adc9dbd5ffb6bfa65abb7770051827d08279e48761046f30d932a5eab8c"
},
{
"path": "Scenes/main.scene.json",
"sha256": "b1b668a2d633deda0074b475460c82019dbcf592b76502906192eaf1f2345a7e"
},
{
"path": "Scripts/Extensions/Beacon.hpp",
"sha256": "650e75bbc55a3339647bcf67ba10fd9b20cece3531bb688b4221155e97959d5e"
},
{
"path": "Scripts/Gameplay.cpp",
"sha256": "c76fbb0bf28a85cc88732a905f2bc9be3e24c58d02cbf2ecccbf77c99093c029"
},
{
"path": "Scripts/Gameplay.hpp",
"sha256": "9d1fa36da50886fa7d84f8a8b3d1ae42856ae74aae1e52be5015b60977634dc0"
}
],
"import": {
"asset_id": "5832763b-3ed0-44d6-9088-0b524f196a91",
"cache_hit": false,
"diagnostics": [],
"generation": "e8eb8805673cc22596d1c5b48fc6b8fbdf600d1c6a15c9633d14014a7eb1d11f",
"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": "e8eb8805673cc22596d1c5b48fc6b8fbdf600d1c6a15c9633d14014a7eb1d11f",
"importer": "faset-gltf-1/cgltf-1.15",
"input_key": {
"bundle_sha256": "d72d44184d665148109de74782bc695d79392e43be12782e48096a7d79e37c4f",
"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": "C:\\Users\\runneradmin\\AppData\\Local\\Temp\\faset-playable-projects-p3lt6g26\\Faset Café 世界\\collect-3d\\Assets\\exit-arch\\payload/ee6c748a212905fc9c465cbe95c033e94b80be643624f4f240ad5353761205b3.glb",
"schema_version": 1,
"settings": {},
"source": "C:\\Users\\runneradmin\\AppData\\Local\\Temp\\faset-playable-projects-p3lt6g26\\Faset Café 世界\\collect-3d\\Assets\\exit-arch\\manifest.json",
"source_sha256": "ee6c748a212905fc9c465cbe95c033e94b80be643624f4f240ad5353761205b3",
"textures": []
},
"previous_generation": "",
"removed_output_ids": []
},
"generation": "2dd8f235-75f3-4b16-be10-c2ea596259e9",
"configuration": "Release",
"standalone_directory": "C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\faset-playable-exports-w6c8iavr\\Faset Café 世界\\collect-3d",
"executable": "faset_player.exe",
"package_file_count": 47,
"asset_generations": {
"5832763b-3ed0-44d6-9088-0b524f196a91": "e8eb8805673cc22596d1c5b48fc6b8fbdf600d1c6a15c9633d14014a7eb1d11f"
},
"device": "SwiftShader Device (LLVM 10.0.0)",
"device_class": "software",
"driver": {},
"validation_enabled": false,
"validation_errors": 0,
"completed_frames": 120,
"summary_ms": {
"gpu": {
"max": 637.6869,
"min": 37.2225,
"p50": 37.7003,
"p95": 45.7855,
"samples": 120
},
"render_call": {
"max": 639.0197,
"min": 37.6292,
"p50": 38.1144,
"p95": 46.2208,
"samples": 120
},
"renderer_cpu": {
"max": 638.8844,
"min": 37.6063,
"p50": 38.0892,
"p95": 46.1966,
"samples": 120
},
"renderer_readback_cpu": {
"max": 0.7719,
"min": 0.1536,
"p50": 0.1646,
"p95": 0.1863,
"samples": 120
},
"simulation": {
"max": 0.4813,
"min": 0.3285,
"p50": 0.4281,
"p95": 0.4658,
"samples": 120
},
"snapshot": {
"max": 2.8825,
"min": 0.1996,
"p50": 0.211,
"p95": 0.2401,
"samples": 120
},
"wall": {
"max": 643.0612,
"min": 38.3261,
"p50": 38.7591,
"p95": 46.9079,
"samples": 120
}
},
"capture": {
"width": 1280,
"height": 720,
"sampled_colors": 64,
"sha256": "1bd32e4498921c76759654b0dc5bcd7545916a276e3bd8d4f66c0125d7daff72"
},
"source_project_paths_unavailable": true,
"status": "passed"
},
{
"name": "lua",
"dimension": 2,
"language": "lua",
"source_inputs": [
{
"path": "project.faset.json",
"sha256": "c8907e39f3524019cb7978208eb8f65338ffbdd2df79c5cd34a5c5642d26cd36"
},
{
"path": "README.md",
"sha256": "c1e1fbbbf1872bfc64e097f72f9016a9c0ac197575ccd0e9baf08b1f947a007f"
},
{
"path": "Scenes/main.scene.json",
"sha256": "e38bba8ba7248b2ea05a1ad72be905a854d4b4f80956582da0c4fcf0d954e309"
},
{
"path": "Scripts/beacon.lua",
"sha256": "8d30f894795f231795d6585acaa5c8df66179597f5e608da8a596152bc9bd74a"
},
{
"path": "Scripts/player.lua",
"sha256": "8a525c978b9147312c4917e5c04a40443f923bfeea14fbafc014ca9bea1b9322"
},
{
"path": "Scripts/util/motion.lua",
"sha256": "d35063ecaa127eeebc0c4931eeb5ed42fe69ab54f3e824caf8661fe60525c2a5"
}
],
"generation": "5dcba522-6303-4c69-9ab8-19ddc4ef991f",
"configuration": "Release",
"standalone_directory": "C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\faset-playable-exports-w6c8iavr\\Faset Café 世界\\lua",
"executable": "faset_player.exe",
"package_file_count": 47,
"asset_generations": {},
"device": "SwiftShader Device (LLVM 10.0.0)",
"device_class": "software",
"driver": {},
"validation_enabled": false,
"validation_errors": 0,
"completed_frames": 120,
"summary_ms": {
"gpu": {
"max": 561.3185,
"min": 5.0842,
"p50": 5.3742,
"p95": 6.5115,
"samples": 120
},
"render_call": {
"max": 562.358,
"min": 5.3653,
"p50": 5.6835,
"p95": 6.7907,
"samples": 120
},
"renderer_cpu": {
"max": 562.3404,
"min": 5.355,
"p50": 5.6686,
"p95": 6.7782,
"samples": 120
},
"renderer_readback_cpu": {
"max": 0.788,
"min": 0.1524,
"p50": 0.1686,
"p95": 0.2111,
"samples": 120
},
"simulation": {
"max": 0.2332,
"min": 0.105,
"p50": 0.1587,
"p95": 0.2034,
"samples": 120
},
"snapshot": {
"max": 0.0998,
"min": 0.0488,
"p50": 0.0787,
"p95": 0.0863,
"samples": 120
},
"wall": {
"max": 563.2592,
"min": 5.5956,
"p50": 5.9325,
"p95": 7.0824,
"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:34:02.166131+00:00"
}
@@ -0,0 +1,23 @@
{
"sources": {
"headers": {
"repository": "KhronosGroup/Vulkan-Headers",
"commit": "0d3f509e57041fbd073a1ee84cd9ccd36d148446",
"sha256": "e82005a6bd3289ce213232ef41e0f8722d1365ed72bf5cc4be56911c56bc30e0"
},
"loader": {
"repository": "KhronosGroup/Vulkan-Loader",
"commit": "32fcb949e253cbeb40cda7ea76122b492db579ae",
"sha256": "610fa9017226c49bc4f19398d94fce9e3c9ff94c14f6420f9fe24822707feacf"
},
"swiftshader": {
"repository": "google/swiftshader",
"commit": "1e80438d2b93ef36a7c05f8d2b81233bac0e3d16",
"sha256": "1c3a1afc397c7aa4d3275790bc9b451e80b144a1db665135d5519838bacf44a8"
}
},
"validation_layer": false,
"vulkan_sdk": "D:\\a\\Faset_Engine\\Faset_Engine\\.cache\\windows-graphics\\sdk",
"driver": "D:\\a\\Faset_Engine\\Faset_Engine\\.cache\\windows-graphics\\driver\\vk_swiftshader_icd.json",
"loader_only": false
}
@@ -0,0 +1,32 @@
{
"format": "faset.windows-vulkan-probe",
"version": 1,
"status": "passed",
"loader": "D:\\a\\Faset_Engine\\Faset_Engine\\.cache\\windows-graphics\\sdk\\bin\\vulkan-1.dll",
"driver_manifest": "D:\\a\\Faset_Engine\\Faset_Engine\\.cache\\windows-graphics\\driver\\vk_swiftshader_icd.json",
"driver_library": "D:\\a\\Faset_Engine\\Faset_Engine\\.cache\\windows-graphics\\driver\\vk_swiftshader.dll",
"manifest": {
"file_format_version": "1.0.0",
"ICD": {
"library_path": ".\\vk_swiftshader.dll",
"api_version": "1.0.5"
}
},
"loader_debug": "all",
"pointer_bits": 64,
"icd_negotiate_result": 0,
"icd_interface_version": 7,
"enumerate_version_result": 0,
"loader_api_version": "1.4.341",
"create_instance_result": 0,
"devices": [
{
"name": "SwiftShader Device (LLVM 10.0.0)",
"api_version": "1.3.0",
"driver_version": 20971520,
"vendor_id": 6880,
"device_id": 49374,
"device_type": 4
}
]
}
@@ -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

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