本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

报码:【腾讯GAD】Unity 实现传统的GPU Skinning (1)(2)

时间:2017-07-08 13:52来源:香港现场开奖 作者:本港台直播 点击:
iii. 上面的转置其实可以通过 shader 调整左乘右乘调整,但会增加一个 Vector4 ,加上开销较小,就不做这个处理了。 iv. 实际的测试模型,有 100+ 根骨骼,这

iii.上面的转置其实可以通过shader调整左乘右乘调整,但会增加一个Vector4,加上开销较小,就不做这个处理了。

iv.实际的测试模型,有100+根骨骼,这Shader目前只支持最大64根,C#端做了拆分处理(代码很长,不贴了)。

v.性能测试

PC上,30个人渲2遍,增加了9.3msGPUSkinRender.LateUpdate开销,BonePalette通过BakeMesh的计算就在这里(理应快很多,因为BakeMesh做了些额外的事情)。如果是直接bones[j].localToWorldMatrix * bindPoses[j];会是15.0ms左右。这一段计算合理的话应该在Worker线程完成的,但在C#层面无法修改或者得不偿失(可以自己用额外的分线程去计算,但是Transform需要提前Copy,按以往经验,快不了多少).

PC上的同样的角色做CPU SkinningWorker线程计算MeshSkinning.Skin非常快,主线程的overhead几乎可以忽略,性能上完胜.

5.结论

Unity CPU Skinning因为多线程与SIMD优化,性能非常好,在目前多核CPU时代非常有优势。在PC上,UnityGPU Skinning亦有更好的性能,实测下来是目前最优方案,也确实看到有游戏使用了(PC端的女仆2)。在Unity上实现的传统GPU Skinning,通过C#层面的优化,综合性能并不理想,主要原因是Unity的限制导致Bone Palette无法高效的多线程计算。但理论上,在GPU有余力时,Bone Palette如果能高效多线程计算,性能应该会上升.后续我会尝试在Unity源码层面做一些修改,希望能取得更优的移动平台性能。

原文链接:?ADTAG=gad.tg.sh

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容