Dans mon domaine (VFX, qui couvre des choses comme le traçage de chemin, l'animation par ordinateur, la simulation de particules, la dynamique des fluides, le traitement d'image, etc.), la complexité algorithmique est fondamentale. Il n'y a aucun moyen que quelque chose de pire que le temps linéithmique puisse espérer se terminer en un temps raisonnable sur des entrées qui atteignent généralement des millions de sommets, polygones, voxels, particules, texels, en particulier lorsque beaucoup de ces choses doivent se terminer plusieurs fois par seconde pour fournir rétroaction interactive en temps réel.
Cela dit, l'accent mis sur la complexité algorithmique n'est généralement pas si fort dans les discussions entre collègues, peut-être parce qu'il est quelque peu tenu pour acquis et plutôt "rudimentaire". On suppose généralement, si vous écrivez un traceur de chemin, qu'il fonctionnera en temps logarithmique ou mieux, et que les structures de données telles que les hiérarchies de volumes limites sont familières et relativement triviales à mettre en œuvre pour le lecteur. J'ai même eu un collègue qualifié qui n'arrêtait pas de dire que le multithreading et la SIMD sont plus importants que les algorithmes, et je ne pense pas qu'il voulait dire cela dans le sens où vous pouvez vous attendre à tirer le meilleur parti de la parallélisation d'un type de bulles. Je pense qu'il a dit que parce qu'il tenait pour acquis que nous appliquerions des algorithmes sensés,
Souvent, ces derniers temps, l'accent est mis sur la prise d'un grand nombre de ces algorithmes familiers et sur leur meilleure exploitation des caractéristiques sous-jacentes du matériel comme le cache du processeur, les registres et instructions SIMD, les GPU et les cœurs multiples. Par exemple, Intel a trouvé une nouvelle façon de prendre le vieux BVH familier et de proposer le concept de "paquets de rayons", testant essentiellement plusieurs rayons cohérents à la fois avec une sorte récursive de traversée d'arbre (qui pourrait ressembler à cela viendrait avec sa part de complexité et de surcharge, sauf qu'il est plus que compensé par le fait que ces rayons peuvent désormais être testés simultanément pour les intersections rayon / AABB et rayon / triangle via des instructions et registres SIMD).
Une chose similaire avec comme la subdivision catmull-clark, qui est très rudimentaire en infographie. Mais de nos jours, ce qui est compétitif, chaud et super efficace, ce sont les implémentations GPU qui se rapprochent de la subdivision CC en utilisant les correctifs Gregory, popularisés par Charles Loop et adoptés plus tard par Pixar. L'implémentation plus simple du CPU est maintenant plutôt obsolète, pas nécessairement parce qu'elle a été remplacée en termes de complexité algorithmique, mais parce qu'elle a été remplacée par quelque chose qui fonctionne bien avec le GPU.
Et c'est généralement une grande partie du défi de nos jours n'est pas de trouver le meilleur algorithme d'une manière qui soit relativement indépendante des caractéristiques sous-jacentes du matériel. En fait, j'ai mis le pied dans l'industrie en proposant une nouvelle structure d'accélération qui a considérablement accéléré la détection des collisions pour les personnages animés et autres corps mous dans les années 90 en utilisant une approche de segmentation hiérarchique par opposition à un indice spatial, ce qui m'a procuré beaucoup de offres d'emploi, mais de nos jours ce n'est plus si impressionnant depuis que je l'ai publié bien avant que nous ayons des caches CPU et des cœurs multiples et des GPU programmables aussi impressionnants et ainsi de suite, et aujourd'hui j'utilise une approche complètement différente en raison des changements importants apportés à la matériel sous-jacent.