
[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的方法是:

由于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"