Arm*_*ada 7 opengl 3d opengl-es webgl
我目前正在开发一个WebGL项目,尽管我认为这个问题在许多图形API中是通用的.
让我用一个简单的立方体的例子来展示我的要求.
一个立方体有6个面,每个面有4个顶点,因此我们总共有24个顶点构成了立方体.但是,如果我们在面之间共享顶点,我们可以将顶点总数减少到只有8.正如我一直在阅读的那样,这可以节省大量宝贵的GPU内存,尤其是在处理复杂的模型和场景时.
另一方面,我亲身经历了在面之间共享顶点的一些缺点.这些包括:
复杂的顶点法线计算,因为我们必须找到每个顶点的"平均"法线,同时考虑到顶点所属的每个面的面法线.
无论如何必须复制一些顶点以与其对应的UV坐标"匹配".
由于顶点可能被许多面共享,因此我们无法使用每个顶点着色为每个面指定不同的颜色.
我一直在阅读的书真正强调顶点共享的重要性,以最大限度地减少内存使用,所以当我遇到顶点共享的一些缺点时,我不确定顶点着色的可行性/有用性如何,并且作者没有提到顶点共享的任何缺点我想得到你们的意见.那么从顶点着色产生的内存节省真的那么重要吗?
您命名的缺点确实非常真实,特别是对于具有大量锐边或不同纹理的形状.立方体是顶点共享的最糟糕的例子,每个顶点有3个不同的法线和可能的纹理坐标.共享顶点基本上是不可能的.
但想到一些有机形状.像一个球,一些动物的身体,汽车,树木,甚至像沙漠或其他东西一样简单的东西.这些形状可能需要大量的顶点看起来像任何体面,但很多这些顶点在面之间共享.他们需要完全相同的法线,纹理坐标和whatevers才能看起来光滑.
此外,第一个缺点并不那么重要.计算顶点可以在预处理中完成,在大多数情况下甚至可以由建模器完成.这基本上没有实时完成,相反,你只是已经有了这种格式.但是,如果它确实需要实时完成,你可以想象这成为一个实际问题,你需要开始考虑权衡和配置文件.但即使这样,它也可以使用几何着色器处理,如果需要视觉保真度,这可能是一个更好的解决方案.
总之,它在很大程度上取决于你在做什么.在某些情况下,由于您提到的原因,顶点共享并不可行.无论如何,在许多情况下它可以节省大量内存.
| 归档时间: |
|
| 查看次数: |
1101 次 |
| 最近记录: |