Files
2026-10-31 23:11:57 +01:00

176 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Weryfikacja v1 — 31 października 2026
Sprawdzone lokalnie: Windows, Unreal Engine 5.7, Blender 5.1.2 i FFmpeg.
Nie uruchamiano testów na Linuksie ani na Blenderze 4.x.
- Testy poza UE: 7 zaliczonych, w tym rzeczywiste kodowanie dwóch PNG do MP4,
odczyt częściowo zapisanych komunikatów i raportowanie liczby klatek.
- Postęp headless: sprawdzone etapy od startu UE do jego zamknięcia,
licznik zapisanych PNG i cichy zapis pełnych logów do pliku.
- Obiekt `Renderer`: własne 320×180, dwie próbki, rozgrzewka 0; sprawdzone
właściwości MRQ i rzeczywiste wymiary PNG. Walidacja błędnych argumentów
i nadpisywanie presetu. Launcher używa obiektu ze skryptu: sprawdzone 400×224.
- Dwukrotne wykonanie ćwiczenia w UE: bez dodatkowych aktorów, bindingów i Camera Cuts.
- Render MRQ w procesie edytora uruchomionym bez okna: 48 PNG oraz MP4, 24 FPS.
- `python exercises/my_shot_headless.py`: pełne ćwiczenie 1920×1080, 4 próbki,
rozgrzewka 32, 48 PNG i MP4. UE zamknął się automatycznie; oba kody zakończenia 0.
- Podgląd pojedynczej klatki z terminala (`--single-frame 24`): zaliczony.
- Odroczone zamknięcie edytora po renderze: kod zakończenia UE i launchera 0.
- Zwykły `UnrealEditor.exe`: projekt otwiera się bez żądania aktualizacji targetu
po usunięciu pozostałych receiptów i cache kompilacji UE 5.8.
- Wizualnie sprawdzony kadr, ekspozycja i wygenerowana postać.
- Pełny edytor z działającym UI Sequencera: otwarcie sekwencji, ticki UI,
przebudowa sceny i dwa kolejne rendery po 48 klatek do MP4 w jednym procesie.
Renderer startuje przez MoviePipelineQueueSubsystem po powrocie ze skryptu;
Sequencer jest zamykany przed przebudową bindingów oraz rozpoczęciem PIE.
- Blender: eksport zapisanej kolekcji, trzy materiały, aktualizacja istniejącego
StaticMesh pod tą samą ścieżką po zmianie geometrii.
- Zmiana koloru materiału oraz dodanie osadzonej tekstury: sprawdzone wartości
parametrów UE, przypisanie tekstury i render do MP4.
- Import lokalnych RobotPolice i pilot z FBX, automatyczne dopasowanie wysokości
do 200 cm i ustawienie podstawy na Z=0. Odtworzenie materiałów z tekstur PBR.
- Pełny `my_shot.py` z robotem: 48 klatek 1920×1080, MP4 i poprawne zamknięcie UE.
- GLB po włączeniu łączenia części modelu: zaliczony test eksportu/importu
Blendera, aktualizacji materiałów i tekstury oraz renderu.
- `character_custom.blend`: dwukrotne wykonanie `my_shot.py`, dwa eksporty
Blendera do GLB i aktualizacja tego samego assetu UE; podgląd renderu zaliczony.
Uruchamianie sprawdzeń jest opisane w README. Wyniki każdego renderu są zapisane
w jego `result.json`; logi UE znajdują się w `Saved/Logs`.
Skrypty integracyjne generują własne mapy i assety w `Workshop/Generated`.
## Postacie szkieletowe — 31 października 2026
- 13 testów poza UE: w tym zakresy klipów, wykrywanie nakładania, prędkość,
wybór klipu i odrzucanie animacji z innym szkieletem.
- UE 5.7: import fighter i creature jako SkeletalMesh z materiałami i teksturami,
własny szkielet każdej postaci oraz klipy idle, walk i attack z osobnych FBX.
- W klipach walk sprawdzone rzeczywiste zmiany rotacji kości między klatkami.
- Ponowny import tych samych assetów po restarcie UE oraz zapis zależności
(szkielet, materiały, tekstury). FBX używa importera zgodnego z FbxImportUI;
poprzednia wartość flagi Interchange jest przywracana po imporcie.
- Sequencer: klipy w kolejnych zakresach, prędkość 0.75 i jednoczesne klucze
transformacji rodzica. Render 48 klatek, 640×360, dla obu postaci.
- Blender 5.1.2: wczytanie fighter i chodzenia z nowych FBX wyeksportowanych
przez UE, zmiana geometrii z zachowaniem wag, zapis `.blend`, eksport Armature
i aktywnej akcji, import do UE i render 24 klatek, 640×360.
- Dołączone źródła są w FBX 6.1, nieobsługiwanym przez importer Blendera 5.1;
bezpośredni import w UE działa. Test Blendera korzysta z eksportu UE do FBX 7.3.
Odtworzenie testu Blendera (po teście `smoke_skeletal.py`):
```text
blender --background --python-exit-code 1 --python tools/create_skeletal_fixture.py
python tools/run_workshop.py tools/smoke_skeletal_blender.py --render
```
Eksport szkieletowy obejmuje jedną postać i aktywną akcję w zakresie sceny.
Nie sprawdzano retargetingu, Animation Blueprintów ani eksportu wielu akcji/NLA.
## Pliki na zajęcia i pełne katalogi
- `tools/smoke_workshop_files.py`: w UE zaimportowano wszystkie 51 klipów fighter
i 12 klipów creature; sprawdzono kompletność słowników i dodatnią długość klipów.
- `exercises/basics.py`: eksport własnego `.blend`, 192 klatki kamery na okręgu,
stały promień, zgodne końce trasy i ciągły yaw obejmujący pełne 360°.
- `exercises/animation_starter.py`: jedna postać, dokładnie dwa klipy, 360 klatek.
- Wszystkie trzy sceny zostały zbudowane i zapisane w oddzielnych mapach.
## Blendowanie z Pythona
- 17 testów poza UE: dodatkowo poprawne nakładanie, wagi obu klipów, zachowanie
wejścia i wyjścia środkowego klipu oraz odrzucanie trzech równoczesnych klipów.
- `tools/smoke_blending.py`: w UE 5.7 utworzono przejścia idle → attack → walk,
po 12 klatek każde. Sprawdzone zapisane klucze Weight i wyrenderowana klatka 54,
w środku pierwszego przejścia, równolegle z kluczami pozycji rodzica.
- Przejście korzysta z kanałów wag; chronione pola MovieSceneEasingSettings
nie są modyfikowane. Modele i klipy są ponownie używane z `reimport=False`.
## Automatyczne wykrywanie bez aliasów
- 23 testy poza UE: dodatkowo pomijanie pliku modelu, nazwy z plików, wykrywanie
kolizji nazw, automatyczny wybór wszystkich klipów, jawny wybór i puste `animations={}`.
- Sprawdzone przekazywanie `reimport=False`/`True` oraz użycie istniejącego modelu.
- `tools/smoke_workshop_files.py` zaliczony w UE: obie postacie wczytane bez
argumentu `animations`, pełne 51 + 12 klipów i plik zadania z dwoma pełnymi nazwami.
## Automatyczny blend
- 26 testów poza UE: blend wynika ze wspólnego zakresu, także przy jednej klatce
nakładania; stykające się klipy nie dostają fade. Sprawdzone łańcuchy trzech
klipów oraz odrzucanie niejednoznacznych zakresów i dodawania w odwrotnej kolejności.
- Parametr `blend_in` usunięty z API i przykładów. Zakresy scen pozostają takie same.
## Katalog enumów i długości dostępnych offline
- 34 testy poza UE: statyczne enumy obejmują wszystkie pliki źródłowe, importują
się bez `unreal`, udostępniają sekundy i przeliczenie klatek z FPS i prędkością.
- Sprawdzone zaokrąglanie czasu float32 bez dodawania zbędnej klatki, automatyczny
koniec dla enuma, jawny koniec oraz odrzucenie sekcji dłuższej niż sekwencja.
- `tools/smoke_animation_catalog.py` w UE: porównane długości wszystkich 63 klipów
z rzeczywistym `get_play_length()`, odtworzone enumy, w tym `speed=2`, oraz render
klatki ze środka automatycznego przejścia. Katalog pochodzi z eksportu assetów UE.
- Po przypisaniu parametrów sekcji przywracany jest zakres podany w Pythonie,
ponieważ edytor może przeskalować go przy zmianie prędkości.
## Automatyczne katalogi własnych modeli
- 41 testów poza UE: generowanie nowej klasy, metadane bez `unreal`, zachowanie
innych modeli, aktualizacja podzbioru, usuniętych klipów i niezmienionych danych.
- Sprawdzone odrzucanie kolizji nazw i nieprawidłowych czasów bez naruszenia pliku
oraz dodanie nowej klasy do już załadowanego modułu.
- `tools/smoke_automatic_catalog.py` zaliczony w UE: pierwszy import pod nazwą
StudentCatalogSmoke, automatyczny zapis dwóch klipów, odczyt wygenerowanego enuma
i użycie go do animacji z automatycznym końcem. Katalog testowy zapisano w build.
- Zwykły hook odświeżył także pełne katalogi Fighter i Creature z istniejących assetów.
## keep_end_position
- 45 testów poza UE: dodatkowo pozioma interpolacja ruchu, sumowanie pętli,
włączenie przeniesienia do Transform i ponowne użycie jednej kopii klipu.
- `tools/smoke_keep_end_position.py` zaliczony w UE: slash_2 od klatki 57 przy
30 FPS, wejście slash_3 w klatce 161. Zapisane rzeczywiste klucze rodzica;
po klatce 163 aktor zachowuje około 354 cm przesunięcia dla modelu wysokości 200 cm.
- Sprawdzone ciągłe położenie bioder przy przejściu, brak podwojenia przesunięcia,
niezmieniona źródłowa animacja, ponowne wykonanie i render klatki po ataku.
- Przenoszony jest poziomy ruch pierwszej kości szkieletu (Hips w tym modelu).
Pionowe ruchy i obroty kości zostają w klipie; kopie są w wygenerowanym folderze RootMotion.
## Odczyt pozycji i ruch względny
- 49 testów poza UE: odczyt istniejących kanałów pozycji, pozycja startowa bez
ścieżki, dodanie względnego offsetu oraz walidacja bez tworzenia częściowych kluczy.
- `tools/smoke_relative_move.py` zaliczony w UE: creature wysokości 300 cm,
start `(0, -850, 0)`, MUTANT_RUN z keep_end_position, swiping i walking.
- Pozycja w klatce 80 odczytana z natywnych krzywych Sequencera. Ruch 80–120
zwiększył Y dokładnie o 50 cm, zachował punkt początkowy i pozycję po klatce 120.
Sprawdzono też interpolowaną pozycję w środku ruchu.
## Cofanie i zastępowanie trasy
- 53 testy poza UE: odwrócone odtwarzanie, cofanie ruchu po nierównomiernej krzywej,
sumowanie pętli do tyłu, usuwanie kluczy wewnątrz move i przesuwanie późniejszych.
- `tools/smoke_reverse_walk.py` zaliczony w UE: run → swiping → walking z reverse,
naturalny ruch wstecz oraz zastąpienie trasy cofnięciem o 200 cm.
- Sprawdzone pozycje początkowa, środkowa i końcowa, brak wewnętrznych kluczy
z poprzedniej trasy i zachowanie względnego ruchu późniejszego klucza.
## Zachowanie końcowej pozy
- 55 testów poza UE: natywne Keep State, zamrożony odcinek końcowej pozy oraz
skracanie tego odcinka, gdy pojawi się następny klip tej samej postaci.
- `tools/smoke_keep_end_pose.py`: śmierć mutanta od klatki 0 przy 30 FPS, render
klatki 299 po zakończeniu klipu. Wizualnie sprawdzono, że mutant leży na ziemi.
- Samo Keep State dawało w takim renderze pozę referencyjną; dodatkowy odcinek
z prędkością 0 i przesunięciem czasu do końca klipu utrzymuje właściwą pozę.
## Rodzaje świateł i klucze światła
- 60 testów poza UE: klucze koloru i jasności, ponowne użycie tracków oraz
odrzucanie błędnych argumentów bez tworzenia tracka.
- `tools/smoke_lights.py` w UE: point, spot i sun w jednej scenie, render klatek
0, 24 i 47. Wizualnie sprawdzono zmianę koloru reflektora z czerwonego na niebieski
oraz wzrost jasności reflektora i żarówki.
- Domyślne `intensity=500` słońca dobrano do stałej ekspozycji `camera.create`;
przy `intensity=1` słońce nie było widoczne na renderze.