Friday, April 10, 2009

Animation BlendMask 的再訪 ( Revisited )

早前曾經說過,我試驗過 OGRE 中的新功能「 Animation BlendMask 」,那時候我說過,在試驗的期間,很不容易才看到一點點成績。雖然是有成績,但是在整合上有很多問題未解決,所以便放下了一段短時間。

前陣子再訪這個閣置了的 Animation BlendMask,在初時,愈是試驗的多,就愈是覺得之前所試驗的方法是錯誤的。後來用了兩天的時間,以另外一種方法來試驗 BlendMask,而這樣亦證實了,我之前的認知確是錯誤的。我之前所用的方法,是改邊 BlendMask 的數值,這個方法使我困在兩難中,第一是由 Animation A blend 到 B 中,都要每個 Bone 設定 BlendMask 數值,第二是由 Animation B blend 回 A 時,但當中的設定卻要用不一樣的數值,變得非常不協調及不能系統化的問題。

後來我忽然想到,其實我要改變的數值不是 BlendMask,而應該是 Animation State 本身的 Weight 數值。就是這個想法,便成功地系統化了 BlendMask 功能,然後將其套入一個名為 Animation Group 的 Helper 中,將個別的 Bone 都歸入指定 Animation Group,而每個 Animation Group 都有一套 BlendMask 資料,當要播放 Animation 時,便將 Animation State 放入 Animation Group 中,同時改變 Group 中的各個 Bones 的數值,然後 Playback 這個 Animation State,成功地將 Animation Blending 變得系統化及易於管理。


No comments: