在我的领域(VFX,涵盖路径跟踪,计算机动画,粒子模拟,流体动力学,图像处理等),算法复杂性是至关重要的。没有什么比线性运算时间更糟糕的工作可以希望在任何合理的时间内完成通常达到数百万个顶点,多边形,体素,粒子,纹理像素的输入,尤其是当其中许多东西需要每秒完成许多次才能提供时实时,交互式反馈。
话虽如此,通常在同事之间的讨论中,并没有那么强调算法复杂性,这也许是因为它被认为是理所当然的,而是“基本的”。通常假设,如果您要编写路径跟踪程序,它将在对数或更佳的时间内运行,并且对数据结构(如边界体积层次结构)的熟悉和理解对于读者而言相对来说是微不足道的。我什至有一个熟练的同事一直在说多线程和SIMD比算法更重要,而且我不认为他的意思是您可以期望从并行化冒泡排序中受益匪浅。我认为他说的是,因为他认为我们将应用明智的算法视为理所当然,
如今,很多时候通常将重点放在采用许多这些熟悉的算法上,并使它们更好地利用硬件的基本特征,例如CPU缓存,SIMD寄存器和指令,GPU和多核。例如,英特尔提出了一种采用熟悉的旧BVH并提出“光线包”概念的新颖方法,基本上是通过递归树遍历一次来测试多条相干光线(听起来像这样)它具有复杂性和系统开销,但事实是,现在可以通过SIMD指令和寄存器同时测试这些射线的ray / AABB和ray /三角形相交,这远远超出了它的弥补。
类似catmull-clark细分的东西,在计算机图形学中是非常基本的东西。但是如今,具有竞争性,热门和超高效的是GPU实现,该实现使用Charles Reg流行并后来被Pixar采纳的Gregory Patches近似CC细分。现在,更直接的CPU实现已经过时了,这不一定是因为它已被算法复杂性所取代,而是因为它已被可与GPU完美配合的东西所取代。
如今,这些挑战通常不是以与硬件的基本特征相对独立的方式提出最佳算法,这是很多挑战。我实际上是通过提出一种新颖的加速结构而步入行业的,这种加速结构显着加快了碰撞检测的速度,该碰撞检测使用分层分段方法(而不是空间索引)为90年代的角色和其他软体动画,这使我受益匪浅。职位空缺,但如今这些东西已经不那么令人印象深刻了,因为我在拥有如此令人印象深刻的CPU缓存,多核和可编程GPU之前就发布了它,而如今却没有,而如今,由于基础硬件。