/// <summary> /// 口形状キー領域をモーフウェイト値で変換してタイムラインへ追加する。 /// </summary> /// <param name="table">追加先のタイムラインテーブル。</param> /// <param name="lipKeyArea">口形状キー領域。</param> /// <param name="morphWeight">モーフ名とそのウェイト値。</param> /// <param name="morphEtoAI"> /// "え" から "あ","い" へのモーフ変更を行うならば true 。 /// </param> private void AddMorphKeyArea( MorphTimelineTable table, KeyArea lipKeyArea, MorphWeightData morphWeight, bool morphEtoAI) { // "え" から "あ","い" への変換を行うか? bool e2ai = (morphEtoAI && morphWeight.MorphName == "え"); // キー領域作成 var area = new KeyArea(); foreach (var p in lipKeyArea.Points) { area.AddPointAfter( p.Key, p.Value * morphWeight.Weight * (e2ai ? 0.5f : 1.0f)); } // タイムラインに追加 if (e2ai) { table.GetOrAddNew("あ").KeyAreas.Add(area); table.GetOrAddNew("い").KeyAreas.Add(area); } else { table.GetOrAddNew(morphWeight.MorphName).KeyAreas.Add(area); } }
/// <summary> /// 口形状キー領域をモーフウェイト値で変換してタイムラインへ追加する。 /// </summary> /// <param name="table">追加先のタイムラインテーブル。</param> /// <param name="lipKeyArea">口形状キー領域。</param> /// <param name="morphWeight">モーフ名とそのウェイト値。</param> /// <param name="morphEtoAI"> /// "え" から "あ","い" へのモーフ変更を行うならば true 。 /// </param> private void AddMorphKeyArea( MorphTimelineTable table, TimelineKeyArea lipKeyArea, MorphWeightData morphWeight, bool morphEtoAI) { // "え" から "あ","い" への変換を行うか? bool e2ai = (morphEtoAI && morphWeight.MorphName == "え"); // キー領域作成 var area = lipKeyArea.Clone(); foreach (var p in lipKeyArea.Points.Keys) { area.Points[p] *= morphWeight.Weight * (e2ai ? 0.5f : 1.0f); } // タイムラインに追加 // モーフ名が空文字列のものは弾く if (e2ai) { table.GetOrAddNew("あ").KeyAreas.Add(area); table.GetOrAddNew("い").KeyAreas.Add(area); } else if (!string.IsNullOrEmpty(morphWeight.MorphName)) { table.GetOrAddNew(morphWeight.MorphName).KeyAreas.Add(area); } }