# Projekt: Produkcja demoscenowa ## Konspekt zajęć ### Warsztaty 1: Konfiguracja środowiska pracy **8 października 2021** Na zajęcia należy przygotować środwisko z system Debian Linux/GNU 11. Środowisko może pracować na innych dystrybucjach i systemie macOS, ale na pewno **nie działa** pod Windowsem włączając w to WSL. * kompilator, linker, asembler, debugger i emulator fs-uae * budowanie, uruchamianie i debugowanie efektu * struktura efektu * drukowanie komunikatów diagnostycznych * system budowania * konwertery danych i inne narzędzia [tools](https://github.com/cahirwpz/demoscene/tree/master/tools) #### Zadanie domowe 1. Przygotuj środowisko pracy, zmodyfikuj jakiś efekt i uruchom go. Sprawdź czy jesteś go w stanie debugować. Prześlij zrzut ekranu z działającym efektem i `gdb-dashboard`. 2. Przyjrzyj się światu dookoła, znajdź w nim ciekawe zjawisko lub rzecz, która może służyć za inspirację na efekt. Dostarcz zdjęcie lub krótki filmik. ### Warsztaty 2: Optymalizacja pod M68000 **15 października 2021** * omówienie modelu programowania (rejestry, stos, instrukcje) * podglądanie kodu wynikowego * zliczanie cykli instrukcji * profilowanie fragmentów kodu * zastępowanie kosztownych operacji * rozwijanie pętli * generowanie kodu - procedura [MakeUVMapRenderCode](https://github.com/cahirwpz/demoscene/blob/master/effects/uvmap/uvmap.c#L55) * wstawki asemblerowe * tablicowanie wyników * obliczenia fixed-point * szybkie generowanie liczb pseudolosowych * łączenie C z asemblerem i konwencja wołania procedur * zasady wyrównywania adresów i rejestr SP * omówienie pętli głównej efektu [uvmap](https://github.com/cahirwpz/demoscene/blob/master/effects/uvmap) #### Zadanie domowe: Praca domowa 2 (termin 22.10.2021) 1. Zainstaluj środowisko `Processing` i uruchom jeden z prototypów w katalogu `prototypes`. Prześlij zrzut ekranu z działającym prototypem efektu. 2. Zmodyfikuj prototyp efektu `uvmap`. Dopisz nowy generator mapy w `generators.pde` i podczep go do tablicy generators w pliku `distortions.pde`. Prześlij krótki filmik z działania efektu. Za to zadanie można dostać punkty bonusowe! <!--- 1. Policz ile cykli procesora per piksel zaoszczędziło generowanie kodu w `uvmap`. ---> ### Warsztaty 3: Układy specjalizowane, raster i copper **22 października 2021** * specyfikacja komputera Amiga 500 * omówienie funkcji układów specjalizowanych Amigi * pamięć CHIP vs FAST * czym jest raster? * pozycja promienia rastra (color clock) * timingi dla sygnału PAL (v-blank, h-blank) * instrukcje coppera MOVE, WAIT i SKIP * copper lista: tworzenie, modyfikacja, terminacja * włączanie i wyłączanie coppera (DMA) * obchodzenie ograniczeń instrukcji coppera (linie ≤ 256) * podwójne buforowanie * najczęstsze scenariusze użycia coppera * omówienie wyświetlania grafiki w efekcie [stripes](https://github.com/cahirwpz/demoscene/blob/master/effects/stripes/stripes.c) #### Zadanie domowe: **TODO** ### Warsztaty 4: Grafika bitmapowa **29 października 2021** * reprezentacja grafiki bitmapowej w pamięci * reprezentacja przepleciona (_interleaved_) * konfiguracja okna wyświetlania * konfiguracja układu pobierającego bitplany: start, stop, modulo * przypisywanie kolorów do wartości pikseli * scrolling poziomy i pionowy * tryb _hold-and-modify_ i _extra-halfbrite_ * split-screen na przykładzie [blurred](https://github.com/cahirwpz/demoscene/blob/master/effects/blurred/blurred.c) i [highway](https://github.com/cahirwpz/demoscene/blob/master/effects/highway/highway.c) * tryb _dual playfield_ – efekt [credits](https://github.com/cahirwpz/demoscene/blob/master/effects/credits/credits.c) * lustrzane odbicie – efekt [blurred3d](https://github.com/cahirwpz/demoscene/blob/master/effects/blurred3d/blurred3d.c) * przygotowanie palety – efekt aberracji chromatycznej [glitch](https://github.com/cahirwpz/demoscene/blob/master/effects/glitch/glitch.c) i przezroczystości [transparency](https://github.com/cahirwpz/demoscene/blob/master/effects/transparency/transparency.c) * symulacja ruchu przy pomocy rotacji palety – efekt [neons](https://github.com/cahirwpz/demoscene/blob/master/effects/neons/neons.c) * wyświetlanie grafiki większej niż ekran – efekt [tiles16](https://github.com/cahirwpz/demoscene/blob/master/effects/tiles16/tiles16.c) #### Zadanie domowe: **TODO** ### Warsztaty 5: Blitter **5 listopada 2021** * najczęstsze scenariusze użycia blittera * reprezentacja danych dla blittera * projektowanie funkcji blittera przy użyciu mintermów * właściwości i konfiguracja kanałów blittera * maski i przesunięcia * tryby pracy: w przód i w tył * wystartowanie operacji i oczekiwanie na zakończenie * [diagram](http://amigadev.elowar.com/read/ADCD_2.1/Hardware_Manual_guide/node02DD.html) architektury blittera * kopiowanie obszarów [BlitterCopy](https://github.com/cahirwpz/demoscene/blob/master/lib/libblit/BlitterCopy.c) * cookie-cut [BlitterCopyMasked](https://github.com/cahirwpz/demoscene/blob/master/lib/libblit/BlitterCopyMasked.c) * rysowanie krawędzi i linii [BlitterLine](https://github.com/cahirwpz/demoscene/blob/master/lib/libblit/BlitterLine.c) * wypełnianie obszarów [BlitterFillArea](https://github.com/cahirwpz/demoscene/blob/master/lib/libblit/BlitterFillArea.c) – efekt [anim](https://github.com/cahirwpz/demoscene/blob/master/effects/anim/anim.c) <small>Można przypomnieć [algorytm Bresenhama](https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm) służący do rysowania linii.</small> #### Zadanie domowe: **TODO** **UWAGA!!!** To jest dobry moment, żeby studenci zaczęli szperać za inspiracjami do efektów! ### Warsztaty 6: Duszki aka sprajty **19 listopada 2021** * rozmiar i kolory sprajtów * reprezentacja sprajtów w pamięci * priorytety wyświetlania warstw * programowanie kanałów DMA sprajtów * zmiana pozycji sprajta * ponowne używanie kanału DMA sprajta * tryb ręczny i zwielokrotnianie sprajta * wykrywanie kolizji między sprajtami i playfield'em * rendering do sprajtów – efekt [ball](https://github.com/cahirwpz/demoscene/blob/master/effects/ball/ball.c) #### Zadanie domowe: **TODO** ### Warsztaty 7: Zaawansowane techniki renderingu **26 listopada 2021** * copper-chunky: skoki i pętle w programie copper'a – efekt [plasma](https://github.com/cahirwpz/demoscene/blob/master/effects/plasma/plasma.c) i [tiles8](https://github.com/cahirwpz/demoscene/blob/master/effects/tiles8/tiles8.c) * copper: generowanie przerwań i czekanie na blittera * wyświetlanie w trybie HAM6 – efekt [bumpmap-rgb](https://github.com/cahirwpz/demoscene/blob/master/effects/bumpmap-rgb/bumpmap-rgb.c) * wymiana kolorów co linię rastra – efekt [showpchg](https://github.com/cahirwpz/demoscene/blob/master/effects/showpchg/showpchg.c) * symulacja [motion blur](https://en.wikipedia.org/wiki/Motion_blur) na podstawie efektu [anim](https://github.com/cahirwpz/demoscene/blob/master/effects/anim/anim.c) i [shapes](https://github.com/cahirwpz/demoscene/blob/master/effects/shapes/shapes.c) * składanie rastra z prerenderowanych linii – efekt [prisms](https://github.com/cahirwpz/demoscene/blob/master/effects/prisms/prisms.c) i [twister-rgb](https://github.com/cahirwpz/demoscene/blob/master/effects/twister-rgb/twister-rgb.c) * kolorowanie semi-statycznych obrazów – efekt [floor](https://github.com/cahirwpz/demoscene/blob/master/effects/floor/floor.c), [multipipe](https://github.com/cahirwpz/demoscene/blob/master/effects/multipipe/multipipe.c), [butterfly-gears](https://github.com/cahirwpz/demoscene/blob/master/effects/butterfly-gears/butterfly-gears.c) #### Zadanie domowe: **TODO** ### Warsztaty 8: Zaawansowane użycia blittera **3 grudnia 2021** * chunky to planar: * naiwne rozwiązanie * metoda dziel i zwyciężaj * implementacja przy użyciu procesora [c2p_1x1_4.asm](https://github.com/cahirwpz/demoscene/blob/master/lib/libgfx/c2p_1x1_4.asm) * implementacja przy użyciu blittera * unikanie obliczeń dzięki bit-scrambling * omówienie implementacji w efekcie [uvmap](https://github.com/cahirwpz/demoscene/blob/master/effects/uvmap/uvmap.c#L80) * dodawanie z nasyceniem: * sumator z przeniesieniami szeregowymi * obsłużenie nasycenia * omówienie implementacji na blitter [BitmapAddSaturated](https://github.com/cahirwpz/demoscene/blob/master/lib/libblit/BitmapAddSaturated.c) * omówienie efektu [metaballs](https://github.com/cahirwpz/demoscene/blob/master/effects/metaballs/metaballs.c) i [highway](https://github.com/cahirwpz/demoscene/blob/master/effects/highway/highway.c) * mapa przepływu: * generowanie mapy przesunięć * przesunięcia kafli * rozmywanie przez zaszumianie * omówienie efektu [tilezoomer](https://github.com/cahirwpz/demoscene/blob/master/effects/tilezoomer/tilezoomer.c) #### Zadanie domowe: 1. Poeksperymentować z mapą przesunięć kafli. 2. **TODO** ### Warsztaty 9: Rysowanie grafiki wektorowej **10 grudnia 2021** * grafika 2D * reprezentacja obiektów 2D w pamięci * właściwości przekształceń geometrycznych * rotacja, skalowanie, przesunięcie w 2D * obcinanie odcinków do okna wyświetlania – algorytm [Lianga-Barsky'ego](https://en.wikipedia.org/wiki/Liang%E2%80%93Barsky_algorithm) * obcinanie wielokątów – procedura [ClipPolygon2D](https://github.com/cahirwpz/demoscene/blob/master/lib/lib2d/ClipPolygon2D.c) * rasteryzacja wielokątów przy użyciu Blittera * omówienie efektu [shapes](https://github.com/cahirwpz/demoscene/blob/master/effects/shapes/shapes.c) * grafika 3D * potok graficzny * współrzędne obiektu, świata, kamery i ekranu * transformacje i projekcja * obcinanie do [bryły widzenia](https://en.wikipedia.org/wiki/Viewing_frustum) * [odrzucanie tylnych ścian](https://en.wikipedia.org/wiki/Back-face_culling) * rasteryzacja: algorytm [malarza](https://en.wikipedia.org/wiki/Painter%27s_algorithm), [przeglądania linii](https://en.wikipedia.org/wiki/Scanline_rendering) * omówienie efektu [flatshade](https://github.com/cahirwpz/demoscene/blob/master/effects/flatshade/flatshade.c) (i jego nieintuicyjnych optymalizacji) #### Zadanie domowe: **TODO** ### Warsztaty 10: Dźwięk i muzyka **17 grudnia 2021** * reprezentacja instrumentu w pamięci * właściwości kanałów dźwiekowych Amigi * zmiana głośności kanału * programowanie kanałów dźwiękowych [audio.h](https://github.com/cahirwpz/demoscene/blob/master/include/audio.h) * muzyka [tracker](https://en.wikipedia.org/wiki/Music_tracker)-owa * reprezentacja zapisu nutowego, efekty i polecenia odtwarzacza muzyki * obsługa odtwarzaczy najpopularniejszych formatów [ahx](https://github.com/cahirwpz/demoscene/blob/master/effects/playahx/playahx.c), [cinter](https://github.com/cahirwpz/demoscene/blob/master/effects/playctr/playctr.c) i [the player 6.1](https://github.com/cahirwpz/demoscene/blob/master/effects/playp61/playp61.c) * efekty bazujące na bieżąco odtwarzanym dźwięku #### Zadanie domowe: **TODO** ### Warsztaty 11: Studenci prezentują prototypy efektów **7 stycznia 2022** **TODO** ### Warsztaty 12: Infrastruktura do uruchamiania efektów **14 stycznia 2022** * architektura dema * procedury obsługi przerwań i ich rejestracja [interrupt.h](https://github.com/cahirwpz/demoscene/blob/master/include/interrupt.h) * sterowanie efektem przy pomocy klatek kluczowych [sync.h](https://github.com/cahirwpz/demoscene/blob/master/loader/sync.h) * abstrakcja pliku [file.h](https://github.com/cahirwpz/demoscene/blob/master/include/file.h) * doładowywanie danych z dysku [filesys.h](https://github.com/cahirwpz/demoscene/blob/master/include/filesys.h) * doładowywanie efektów z dysku [amigahunk.h](https://github.com/cahirwpz/demoscene/blob/master/include/amigahunk.h) * dynamiczny przydział pamięci [memory.h](https://github.com/cahirwpz/demoscene/blob/master/include/memory.h) * obsługa zadań i synchronizacja [task.h](https://github.com/cahirwpz/demoscene/blob/master/include/task.h) * interakcja przy pomocy myszki i klawiatury: [event.h](https://github.com/cahirwpz/demoscene/blob/master/include/event.h), [keyboard.h](https://github.com/cahirwpz/demoscene/blob/master/include/keyboard.h) i [mouse.h](https://github.com/cahirwpz/demoscene/blob/master/include/mouse.h) ### Warsztaty 13: Wykorzystanie przepustowości pamięci **21 stycznia 2022** * klasyfikacja cykli pamięci CHIP – według [diagramu](http://amigadev.elowar.com/read/ADCD_2.1/Hardware_Manual_guide/node02D4.html) * raport wykorzystania cykli pamięci z emulatora fs-uae * priorytety kanałów DMA * liczba bitplanów, a copper i sprajty * cykle pamięciowe blittera – według [diagramu](http://amigadev.elowar.com/read/ADCD_2.1/Hardware_Manual_guide/node0127.html) * ustalanie priorytetu Blittera nad procesorem ### Warsztaty 14: Prowadzący pomaga w optymalizacji efektów **28 stycznia 2022** **TODO** ### Podsumowanie: Prezentacja efektów do dema **4 lutego 2022** **Pomysł!** Czy tutaj zaprosić "lożę szyderców" do oceny efektów? ## Zadania domowe ### Lista produkcji do obejrzenia Jako zadanie domowe studenci będą mieli za zadanie wspólnie dokonać analizę dema pod względem estetycznym i technicznym (z naciskiem na to drugie). 1. [Sushi Boyz](https://www.pouet.net/prod.php?which=65405) by Ghostown (PL) 2. [Sunglasses at Night](https://www.pouet.net/prod.php?which=64106) by Ghostown & Whelpz (PL) 3. [Zener Drive](https://www.pouet.net/prod.php?which=71996) by Altair (PL) 4. [Rule 30](https://www.pouet.net/prod.php?which=89365) by Andromeda 5. [Fisherhawk Dr.](https://www.pouet.net/prod.php?which=88651) by Melon Dezign 6. [Eon](https://www.pouet.net/prod.php?which=81094) by The Black Lotus 7. [Rink a Dink: REDUX](https://www.pouet.net/prod.php?which=61182) by Lemon 8. [The Fall](https://www.pouet.net/prod.php?which=75773) by The Deadliners & Lemon 9. [Boogietown](https://www.pouet.net/prod.php?which=59144) by Ghostown 10. [Superoriginal](https://www.pouet.net/prod.php?which=54388) by Supergroup 11. [Gagrakacka Mind Zones](https://www.pouet.net/prod.php?which=65778) by Disaster Area 12. [Emperor of the North Pole](https://www.pouet.net/prod.php?which=63769) by Spaceballs 13. [Lemonade](https://www.pouet.net/prod.php?which=78514) by Lemon 14. [e255](https://www.pouet.net/prod.php?which=67956) by Bomb & Sanity & Dreamdealers 15. [Chillobits](https://www.pouet.net/prod.php?which=85300) by Offence 16. [15 Years of Fame](https://www.pouet.net/prod.php?which=61034) by Up Rough 17. [Abstractica](https://www.pouet.net/prod.php?which=88628) by Nah-Kolor 18. [Way Too Rude](https://www.pouet.net/prod.php?which=85248) by Logicoma & Loonies 19. ...