★お知らせ(2023/12/27)
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新Live2D公式クリエイターズフォーラムに移行します。
閉鎖に伴い、以下機能は利用不可となります。
・アカウントの新規作成
・トピック投稿、返信
たくさんのご利用誠にありがとうございました。

新Live2D公式クリエイターズフォーラムは以下バナーよりご利用いただけます。
Live2D公式クリエイターズフォーラム

なお、本コミュニティに投稿されたトピックはすべて残りますが、今後削除する可能性がございますので予めご了承ください。
閉鎖に関するお問い合わせにつきましてはLive2D公式クリエイターズフォーラムへご連絡ください。

Unity上でのリップシンクについて

Unityでサンプルのリップシンクを参考に実装しているのですが、
リップシンクの終了時(音声再生終了時)に口が開いた状態から
元の口の状態に戻る際、アルファのフェードイン・フェードアウトが
かかってしまうのですが、OFFにすることって可能なのでしょうか?

コメント

  • ご質問されてから時間が空いてしまいましたが、その後、解決されたでしょうか?

    アルファのフェードイン・フェードアウトというと、normalizePartsOpacityGroup()あたりが
    思い当たるのですが、使われていたりするでしょうか?
    http://sites.cybernoids.jp/cubism2/sdk_tutorial/live2d_library/load_to_display/switch_parts

    おそらく、リップシンクのサンプルのみでは同件発生しなかったように思うのですが、
    サンプルを参考に実装していく過程で、どのような処理を追加したタイミングで
    現象発生したかなどもお教えいただければ、もしかしたらお力になれるかも知れません。

    また、モデルはサンプルに含まれるものでしょうか?
    もしくは、Modeler・Animatorを使ってご自身が作成されたものでしょうか?
    モデルの作りによっても、ご報告いただいた現象が出ることがありそうなので、
    ご回答いただけましたら幸いです。
  • normalizePartsOpacityGroup()は特に使用していないですね
    Live2Dモデルはサンプルのデータではなくオリジナルのものです

    リップシンクはサンプルコードを元にUpdate()に以下のようなコードを組み込んでます
    float volume; if (smoothing) { float currentVolume; currentVolume = (lipSyncText) ? lipTextVol : GetCurrentVolume(asVoice); if (Mathf.Abs(lastVolume - currentVolume) < 0.2f) { volume = lastVolume * 0.9f + currentVolume * 0.1f; } else if (lastVolume - currentVolume < 0.4f) { volume = lastVolume * 0.6f + currentVolume * 0.3f; } else if (lastVolume - currentVolume > 0.4f) { volume = lastVolume * 0.5f + currentVolume * 0.7f; } else { volume = lastVolume * 0.2f + currentVolume * 0.9f; } lastVolume = volume; } else { volume = (lipSyncText) ? lipTextVol : GetCurrentVolume(asVoice); } live2DModel.setParamFloat(lipSyncMouseParam, volume * scaleVolume);
  • > 元の口の状態に戻る際、アルファのフェードイン・フェードアウトがかかってしまうのですが

    これが具体的にどういう状態なのかわからないのですが、もう少し詳しく教えていただけますか?
    口が閉じる際に意図していないのに半透明になってしまうという認識であってますでしょうか?
  • 音声再生が終了して口を閉じた状態に戻る際に、開いた口がフェードアウトして、
    閉じた口がフェードインする状態になってしまいます。

    モーション再生の時のフェードイン、フェードアウトのような感じです。
  • なるほど。
    フェードがかかるということはsmoothingはONになってますよね?
    smoothingがONのときは開くときは素早く、閉じるときは遅くなってます。

    ちょっとだけ書き換えてみましたがこんな感じだとどうでしょう?
    
            if (smoothing)
            {
                float currentVolume = GetCurrentVolume(audio);
    
                if (currentVolume < 0.01)
                {
                    //音声終了してるとき(音量が0に近いとき)は閉じる速度を上げる
                    volume = lastVolume * 0.2f + currentVolume * 0.8f;
                }
                else if (Mathf.Abs(lastVolume - currentVolume) < 0.2f)
                {
                    volume = lastVolume * 0.9f + currentVolume * 0.1f;
                }
                else if (lastVolume - currentVolume > 0.2f)
                {
                    volume = lastVolume * 0.7f + currentVolume * 0.3f;
                }
                else
                {
                    volume = lastVolume * 0.2f + currentVolume * 0.8f;
                }
                lastVolume = volume;
            }
            else
            {
                volume = GetCurrentVolume(audio);
            }
           
    
            live2DModel.setParamFloat("PARAM_MOUTH_OPEN_Y", volume * scaleVolume);
    		
    
    t_shibaura
  • ありがとうございます
    解決しました
    閉じる時の速度が遅くなっているのに気付いてませんでした
コメントするにはサインインまたは登録して下さい。