W mojej dziedzinie (efekty wizualne, które obejmują takie elementy, jak śledzenie ścieżki, animacja komputerowa, symulacja cząstek, dynamika płynów, przetwarzanie obrazu itp.), Złożoność algorytmiczna ma fundamentalne znaczenie. Nie ma możliwości, aby cokolwiek działającego w gorszym czasie niż liniowo-rytmiczny mogło mieć nadzieję na ukończenie w rozsądnym czasie na wejściach, które zwykle osiągają miliony wierzchołków, wielokątów, wokseli, cząstek, tekstur, szczególnie gdy wiele z tych rzeczy musi wypełnić wiele razy na sekundę, aby zapewnić interaktywne opinie w czasie rzeczywistym.
Biorąc to pod uwagę, nie kładzie się tak dużego nacisku na złożoność algorytmiczną w dyskusji zwykle wśród współpracowników, być może dlatego, że jest to nieco oczywiste i raczej „szczątkowe”. Ogólnie przyjmuje się, że jeśli piszesz moduł śledzenia ścieżki, że będzie on działał w czasie logarytmicznym lub lepszym, a struktury danych, takie jak ograniczające hierarchie woluminów, są znane i względnie trywialne w implementacji dla czytnika. Miałem nawet wykwalifikowanego kolegę, który powtarzał, że wielowątkowość i SIMD są ważniejsze niż algorytmy, i nie sądzę, żeby miał na myśli to, że można oczekiwać, że wyciągniesz wiele z równoległego tworzenia bąbelków. Myślę, że to powiedział, ponieważ wziął za pewnik, że zastosujemy rozsądne algorytmy,
Obecnie dużą uwagę skupia się na przyjęciu wielu znanych algorytmów i lepszym wykorzystaniu podstawowych cech sprzętu, takich jak pamięć podręczna procesora, rejestry i instrukcje SIMD, procesory graficzne i wiele rdzeni. Na przykład Intel wymyślił nowatorski sposób na przejęcie znanego starego BVH i zaproponowanie koncepcji „pakietów promieni”, polegających w zasadzie na testowaniu wielu spójnych promieni za jednym razem z rekurencyjnym rodzajem przechodzenia przez drzewa (co może brzmieć jak to przyszedłby ze swoją częścią złożoności i kosztów ogólnych, z tym że więcej niż to wynika z faktu, że promienie te można teraz testować jednocześnie pod kątem skrzyżowań promień / AABB i promień / trójkąt za pomocą instrukcji i rejestrów SIMD).
Podobnie jest z podobnym podziałem catmull-clark, co jest bardzo podstawowym elementem grafiki komputerowej. Jednak obecnie konkurencyjne, gorące i super wydajne są implementacje GPU, które przybliżają podział CC za pomocą łatek Gregory, spopularyzowanych przez Charlesa Loopa, a następnie przyjętych przez Pixara. Prostsza implementacja procesora jest teraz raczej przestarzała, niekoniecznie dlatego, że została zastąpiona pod względem złożoności algorytmicznej, ale dlatego, że została zastąpiona przez coś, co dobrze gra z GPU.
I to zwykle stanowi duże wyzwanie w dzisiejszych czasach, gdy nie ma najlepszego algorytmu w sposób stosunkowo niezależny od podstawowych cech sprzętu. Dostałem stopę w branży, opracowując nowatorską strukturę przyspieszenia, która znacznie przyspieszyła wykrywanie kolizji dla animowanych postaci i innych miękkich ciał w latach 90., stosując hierarchiczne podejście do segmentacji w przeciwieństwie do indeksu przestrzennego, co dało mi dużo oferty pracy, ale w dzisiejszych czasach nie jest już tak imponująca, ponieważ opublikowałem ją na długo, zanim mieliśmy tak imponujące pamięci podręczne procesora i wiele rdzeni i programowalnych układów GPU, a co nie, a obecnie stosuję zupełnie inne podejście w wyniku znacznych zmian w podstawowy sprzęt.