存在实时阴影贴图情况下,实现骨骼动画使用shader好,还是用cpu直接更新好?
假设场景中有一个角色,带有骨骼动画,面数在3W左右。角色右上方有一个平行光源,光源会实时生成阴影贴图(shadow mapping)。
1、使用GPU更新骨骼动画。GPU很快,但是如果场景中带有会生成阴影贴图的光源时GPU就不得不多次计算同一个数据。也就是说从灯光方向看场景,生成depth map时需要把模型上的顶点更新到指定帧;在实际把场景显示到屏幕时也需要把模型上的顶点更新到指定帧。根据上面提到的情况GPU不得不对同一个顶点做两次骨骼更新运算。光源越多,计算次数越多,越不划算。
2、使用CPU更新骨骼动画。虽然CPU计算能力不如GPU,但是CPU更新顶点后可以把顶点放在内存,之后不管什么时候需要这些数据都可以直接使用,不需要再次计算。
计算骨骼动画有上面两种方法,但是不知道在多光源下哪个会比较有优势?
在shader中有没有办法把计算好的顶点数据拿回内存?如果有,那么这个问题也可以得到解决。