很多朋友说Away3D 的骨骼数限制在32根,确切的说应该是Stage3D 的限制。在 AGAL2.0之前 VC寄存器是128个,每个vc常量寄存器最大只能容纳4位,transform占用一个4*4的矩阵,所以如果把一个transform存进vc里面,需要到4个寄存器才能存得完。这样,一根骨骼占用了4个寄存器。而vc总共是有128个。就算全部128个vc都用于计算骨骼,也只能32根骨骼。该怎么办呢?
之前在做 《狂P三国》时的解决办法是把transform减缩成一个四元素储存骨骼的旋转,然后一个三维坐标储存骨骼的位移。这样,transform就只需要2个vc寄存器了。128个VC 全部用于骨骼计算可用数就翻了一倍了。可以支持64根骨骼了。但是这样也是有弊端的。在游戏开发中我们基本满足了美术制作需求但是模型想再加效果就基本上不可能了。
比如:给模型加个选中效果边缘光,给模型受光照shader 等等。这时候就直接报错了。因为我们没有足够的寄存器去使用了。
后来在技术群里和大家交流了一圈后发现,想满足美术和策划的需求。只有一个办法就是对模型进行拆分。以不变应万变,无论多少根骨骼 每32根骨骼进行一次拆分这样骨骼数上不在限制。这样一来骨骼数满足了,还可以实现之前想要的 shader 效果了。
虽然在AGAL2.0里面 VC已经提高到了 250个。有更大的发挥空间了,但是需要FP14的支持。想了想还是放弃了。就目前这种现状还得做版本兼容得不偿失!