![](https://box.kancloud.cn/2016-04-28_57215540ddc9b.jpg)
[http://crytek.com/cryengine/presentations/spherical-skinning-with-dual-quaternions-and-qtangents](http://crytek.com/cryengine/presentations/spherical-skinning-with-dual-quaternions-and-qtangents)
使用quaternion对skinning进行优化:
- 使用dual quaternion来取代matrix4x3
- 使用quaternion取代vertex stream中的tangnet,binormal项
得到的结果是:
- vertex shader constants削减1/3
- 把vertex中的tangent/binormal/normal项压缩至8byte
**DualQuaternion**
总体上说会带来性能的提升,具体在:
- 积累transformation会变快
- apply transform会变慢
- shader constant的下降会大幅度提升性能(这里在某些显卡上有一个constant waterfall的情况,所以constant的降低非常有意义)
美术制作这里:
制作动画会从linear变到spherical,所以需要做一些改变。
**TangentFrameCompress**
这里所谓的tangent frame就是vertex中的tangent/binormal/normal项。
如果完全不做压缩,那就是sizeof(float)*3*3 = 36byte,所有相关压缩之后会降到8byte。
这里是把这个矩阵压缩到一个quaternion,解出t,b,n的方法是:
![](https://box.kancloud.cn/2016-04-28_5721554118a96.jpg)
由于quaternion是normalized,所以quaternion又可以只保留xyz项,w项推算出来,符号不是问题。
这里一个注意就是gpu 浮点数处理0的时候和cpu的ieee不一样,所以如果quaternion的w是0的时候要加一个很小的bias。
- 前言
- PracticalOcclusionCullingInKillZone3
- KillZone3的版本发布工具
- BattleField 3和NeedForSpeedTheRun中的渲染技术
- Shiny PC Graphics in Battle Filed 3
- Cascaded Light Propagation Volumes for Real-Time Indirect Illumination
- [crytek]Spherical Skinning withDual-Quaternions and QTangents
- [gdc12]神秘海域的水技术
- 《钢铁侠》等电影中的image based lighting和physical shading
- CompanyOfHeroes2渲染技术
- [sig13]Lighting technology of "The Last Of Us"