使用和不使用骨架的网格物体是否应使用不同的着色器?
背景 现在我的着色器被构造为处理带有骷髅的网格物体。每个顶点需要3个骨骼ID ,各自具有骨骼重量。这适用于我希望设置动画的骨架模型,但我觉得无生命网格对于每个传递的顶点都有这么多无用的数据有点过分。
在我看来,我可以为带有骨骼和无生命网格的动画网格使用单独的着色器,或者我可以将单一骨骼骨骼作为单个骨骼传递给缺少骨骼的无生命对象,并将每个顶点绑定到此骨骼。 / p>
哪一个是首选,还是有更好的解决方案?
答案 0 :(得分:3)
正如您在问题中指出的那样,这里的主要问题是执行时间和内存。渲染具有蒙皮(骨架)的对象有很多方法可以同时使用两者:
由于上述考虑因素,通常应用程序选择为蒙皮和非蒙皮对象分别设置顶点着色器。通常,应用程序将创建多个蒙皮着色器,这些着色器将针对不同的“层级”皮肤质量创建。例如,每个顶点的不同数量的可能骨骼,或者蒙皮矩阵的总数。但是,做出这些决定的唯一方法是分析您的应用程序。
如果性能和内存不是您的问题,那么您可以使用现有着色器将非蒙皮对象渲染为蒙皮对象,但是,因为这需要一些正确设置的工作,所以创建一个可能同样容易新的非皮肤着色器。