我目前正在进行一个WebGL项目,尽管我认为这个问题适用于许多图形API。
让我用一个简单的立方体的例子来说明我的问题。
一个立方体有6个面,每个面有4个顶点,因此总共有24个顶点组成立方体。但是,如果我们在面之间共享顶点,我们可以将总顶点数减少到只有8个。根据我的阅读,这可以节省大量宝贵的GPU内存,特别是在处理复杂模型和场景时。
另一方面,通过在面之间共享顶点,我亲身体验到了其中一些缺点,包括:
复杂的顶点法线计算,因为我们必须找到每个顶点的“平均”法线,考虑到每个面的法线,该顶点是其一部分。
有些顶点仍然必须被复制以“匹配”它们对应的UV坐标。
由于一个顶点可能被许多面共享,因此我们无法使用每个顶点着色来指定不同的颜色。
我所阅读的书非常强调顶点共享以最小化内存使用,因此当我遇到一些顶点共享的缺点时,我不确定顶点着色真的有多可行/有用。作者没有提及顶点共享的任何缺点,因此我想听听大家的意见。那么,顶点共享所产生的内存节省真的很重要吗?