《Real Time Rendering》之Vertex Blending/Skinning

實踐中的骨骼動畫(Skeletal Animation)主要包括如下流程:

  1. 骨骼矩陣變換(Bone Matrix Transform)
  2. 蒙皮操作(Skinning)

所謂頂點混合(Vertex Blending)語義上主要指蒙皮操作。

但如下公式4.56中同時包含了骨骼動畫的骨骼矩陣變換及蒙皮操作流程。

u(t) = sum_{i=0}^{n-1}w_{i}B_{i}(t)M_{i}^{-1}p,  where sum_{a}^{b}w_{i} = 1, w_{i} geq 0 	ag{4.56}

f_{bone contribution} = B_{i}(t) * M_{i}^{-1} 	ag{1}

可簡化上述公式為

u(t) = sum_{i=0}^{n-1}w_{i}f_{bone contribution}p 	ag{2}

公式1為骨骼變換操作,公式2即為蒙皮操作。當將公式1的計算結果 f_{bone contribution} 傳入GPU即可以實現GPU Skinning。

  • 公式1中 B_{i}(t) 為骨骼的世界空間變換矩陣, M_{i}^{-1} 執行世界空間到骨骼空間變換(World Space to Bone Space),兩者連接即計算出骨骼在Bone Space的變換以影響蒙皮點。
  • 實踐中可以考慮使用骨骼模型空間(Model Space)變換,即 B_{i}(t) 作為模型空間矩陣, M_{i}^{-1} 執行模型空間到骨骼空間編號(Model Space to Bone Space)。
  • B_{i}(t) 通過骨骼父子關係從根骨骼計算至所有子骨骼,子骨骼受根骨骼影響。
  • M_{i} 為骨骼初始變換矩陣(世界空間或模型空間)。

即: 如何快速理解並說明骨骼動畫流程?

  1. 骨骼矩陣計算,父骨骼影響子骨骼。子骨骼變換包括父骨骼變換和自身變換。(Bone Space -> Model Space)
  2. 骨骼矩陣逆變換到骨骼空間(Model Space -> Bone Space)
  3. 骨骼空間里蒙皮進行頂點混合。(Bone Space Skinning)

References

[1] Real Time Rendering

推薦閱讀:

TAG:遊戲編程 | 實時渲染 |