Geniusz matematyki na przykładzie Quake'a 3 [EN]
Dave Plummer - emerytowany programista Microsoftu (twórca m.in. menedżera zadań w Windows) szczegółowo wyjaśnia dlaczego silnik Quake'a 3 był tak szybki. W tym krótkim materiale pokazuje praktyczne zastosowanie wektorów, logarytmów i pochodnych. W powiązanych dodałem polski artykuł na Wikipedii...
Bethesda_sucks z- #
- #
- #
- #
- #
- #
- 108
- Odpowiedz
Komentarze (108)
najlepsze
Ale dzisiaj już kodu na takim poziomie się nie optymalizuje bo wszystko jest *objektowe*, procki mamy szybkie, rdzeni naście, ramu ponad 8 GB, po co to komu :]
@reveil: Dokładnie, dziś ludzie skupiają die na bardziej pożytecznych rzeczach niż optymalizowanie podstawowej operacji matematycznej - to zostało już rozwiązane w sprzęcie. Poza tym kompilatory w większości przypadków lepiej
Nie chodzi o całego Quake'a a o szybką odwrotność pierwiastka kwadratowego (fast inverse square root).
Tu jest całe to cudo:
float Q_rsqrt( float number )
{
long i;
float x2, y;
const float threehalfs = 1.5F;
x2 = number * 0.5F;
y = number;
i = * ( long * ) &y; // evil floating point bit level hacking
i = 0x5f3759df - ( i
@slx2000: Chodzu o to, że nie jest to jako const w kodzie
Binarny space partitioning (bsp), który wykorzystał podczas tworzenia silnika do doom jako teoria powstał chyba już w latach 70
Raycaster tez nie był jego inwencją.
Geniusz polega na tm ze potrafił teorie przełożyć na kod który działał na sprzęcie który był w zasiegu konsumentów.
@slums: I potem tak jest, że klikasz na wykop a tam powiadomienia się nie wyświetlają, bo ktoś nie umiał w logikę :D
Dzięki.
Ciekawostka też jest taka, że geniusz i mikrooptymalizacje też często prowadziły do ciekawych i nieprzewidzianych interakcji. Niektórych z nich nigdy nie wyłapano w czasie życia gry i zostały w nich na zawsze.
https://www.youtube.com/watch?v=WmO2cdTU7EM
Kilka lat temu policzyłem objętość walca i od tamtego czasu nie zrobiłem nic równie „zaawansowanego”.
@dqdq1: Z punktu widzenia osoby podejmującej decyzję czego warto się uczyć, nie ma większego znaczenia co ilu osobom się przydaje. Istotne jest czy przyda się Tobie w realizacji Twoich celów.
A w programowaniu akurat matematyczne myślenie się przydaje bardzo, nawet jeśli nie wykorzystuje się większości twierdzeń ze szkoły. Bo matematyka to nie rachunki a przede wszystkim sztuka budowania ścisłych abstrakcji, sztuka szukania wzorców, sztuka upraszczania,
Dlatego o ile mnożenie dwóch liczb np. w C na tych prockach to może być pojedyńcza instrukcja, to dzielenie to może być spora funkcja.
W dawnych latach miałem też okazje reprezentować sie na pierwszych ligach Doty 1. [ Defense of the Ancients ]
Obecnie jeszcze pykam Knights n Merchatnts gra dalej rozwijana i dostaje aktualizacje chodź mało kto wie :D