質問は基本的に1スレッドにつき1つの内容でお願いします。

お問い合わせの際は下記の情報を明記をお願いいたします。

▼ソフトウェアに関するご質問の場合

・【問題が発生したソフトウェア名とバージョン】(例:Cubism Editor 3.1.02、Euclid Editor 1.2.0 など)
・【ご利用のPC環境】例:Windows10、macOS HighSierra など
・【グラフィックボード】例:GeForce GTX 950M など
・【メモリ】例:8GB
・【原画(イラスト)を制作したソフトウェア】例:Photoshop , CLIP STUDIO , SAI など
・【問い合わせ内容がわかるスクリーンショットまたは動画】

---------------------------

▼SDKに関するご質問の場合

・現象の再現を行い検証させていただきますので、再現する最小のプロジェクトのご提供か、再現するまでの手順
・使用したSDKのバージョン

目や口が開きっぱなしになる

Unity 2017.3.0f3
Cubism 3.1 SDK for Unity
を使用しております。

以下の手順に従って、自動まばたきとリップシンク設定を行いました。

自動まばたきの設定
http://docs.live2d.com/cubism-sdk-tutorials/eyeblink/

リップシンクの設定
http://docs.live2d.com/cubism-sdk-tutorials/lipsync/

しばらくは期待通り自動的にまばたきをし、音声に合わせて口を開閉してくれますが、
開発を進めるうちに、目や口が開きっぱなしになることがあります。
感覚としては30分〜1時間くらいで発生しているように思います。
もしかすると、開発環境の再起動などと関係しているかもしれません。

CubismEyeBlinkControllerとCubismMouthControllerを
Inspectorから削除後に再度Add Componentで追加し直すと、
再び期待通りに開閉するようになります。

また、これを自動的に行うためにInspector上でAdd Componentせず、
スクリプトから以下のように追加した場合では
これが改善されず、目や口が開きっぱなしになります。

--
CubismEyeBlinkController = gameObject.AddComponent();
CubismEyeBlinkController.BlendMode = CubismParameterBlendMode.Override;

CubismAutoEyeBlinkInput = gameObject.AddComponent();
CubismAutoEyeBlinkInput.Mean = 4;
CubismAutoEyeBlinkInput.MaximumDeviation = 2;

CubismMouthController = gameObject.AddComponent();
CubismMouthController.BlendMode = CubismParameterBlendMode.Override;

CubismAudioMouthInput = gameObject.AddComponent();
CubismAudioMouthInput.AudioInput = gameObject.GetComponent();
CubismAudioMouthInput.Gain = 10;
CubismAudioMouthInput.Smoothing = 1.0f;
--

このような現象が発生した方はいらっしゃいませんでしょうか?
また、その際はどのように対応されましたでしょうか?

コメント

  • 申し訳ありません。
    <>で囲った部分が欠落していました。
    プレビューでは正しく表示されていたのですが・・・
    --
    CubismEyeBlinkController = gameObject.AddComponent<CubismEyeBlinkController>();
    CubismEyeBlinkController.BlendMode = CubismParameterBlendMode.Override;

    CubismAutoEyeBlinkInput = gameObject.AddComponent<CubismAutoEyeBlinkInput>();
    CubismAutoEyeBlinkInput.Mean = 4;
    CubismAutoEyeBlinkInput.MaximumDeviation = 2;

    CubismMouthController = gameObject.AddComponent<CubismMouthController>();
    CubismMouthController.BlendMode = CubismParameterBlendMode.Override;

    CubismAudioMouthInput = gameObject.AddComponent<CubismAudioMouthInput>();
    CubismAudioMouthInput.AudioInput = gameObject.GetComponent<AudioSource>();
    CubismAudioMouthInput.Gain = 10;
    CubismAudioMouthInput.Smoothing = 1.0f;
    --
  • edited 01/12
    @ganessa さん

    動作を確認してみましたが、目や口が開いたままになるという現象が再現できませんでした。
    もし可能であれば、現象が再現する最小のプロジェクトをいただけませんでしょうか?


    Cubismのコンポーネントを動的にアタッチする件ですが、この場合はチュートリアルには記述していない注意があります。
    各機能のControllerでは、値を適用するパラメータへの参照の取得を、Start()のタイミングで行っています。
    参照する対象は、まばたきやリップシンクの場合、CubismLookParameterまたはCubismMouthParameterがアタッチされたGameObjectです。

    そのため、Parameterをアタッチしないまま、先にControllerをアタッチしてしまうと、ParameterがアタッチされたGameObjectを見つけることが出来ず、Controllerの値を操作してもパラメータへ反映されないことがあります。
    もしこの減少が発生していた場合、Parameterをアタッチした後にControllerをアタッチする、または、Parameterをアタッチした後でControllerのRefresh()を呼び出すことで回避することが出来ます。

    こちらの注意点は後日チュートリアルへ追記させていただきます。
  • 再現しないのですね・・・
    最小プロジェクトを作成してみます。

    Refresh()は、何度も試してみましたので、
    別の要因かと思われます・・・
  • 最小プロジェクトを作成するために、
    モデルの差し替えやInputやControllerの
    アタッチ/デタッチを繰り返すうちに、
    本現象が再現しなくなりました。

    この作業の過程でInputやControllerを
    複数アタッチしていることがありました。
    もしかすると、それが原因だったのかもしれません。

    お騒がせして申し訳ありませんでした。
    また再発するようであれば、追記させていただきます。
  • edited 03/26
    正常にリップシンクされず口が閉じたままになる問題が発生しましたので、
    CubismMouthControllerとCubismAudioMouthInputにログを入れ問題の箇所を調査しました。
    MouthOpeningに設定された値は正しいが、MouthOpeningの値を取得すると更新されていないように見えました。

    CubismMouthControllerを以下のように置き換えると問題が発生しなくなり、
    元に戻すと問題が再発するようでした。
    public float MouthOpening = 1f;
    
    private float mouthOpening = 1f;
    public float MouthOpening
    {
        get
        {
            return mouthOpening;
        }
        set
        {
            mouthOpening = value;
        }
    }
    
    同じ現象でお悩みの方の参考になればと思います。
  • 最新版のCubism 3 SDK for Unity R8に上げてみたのですが、
    本件は改善されていないようでした。

    上記対応が上書きされてしまい口が閉じたままになる問題が再発しましたが、
    幸い同じ対応で回避することが出来ました。
    public float MouthOpening = 1f;
    
    private float mouthOpening = 1f;
    public float MouthOpening
    {
        get
        {
            return mouthOpening;
        }
        set
        {
            mouthOpening = value;
        }
    }
    
    同じ現象でお悩みの方の参考になればと思います。
    /// <summary>
    /// The opening of the eyes.
    /// </summary>
    [SerializeField, Range(0f, 1f)]
    public float MouthOpening = 1f;
    
    MouthOpeningのコメントが
    The opening of the eyes.
    になっているところくらいは直していただきたいところ・・・
  • @ganessa さん

    お世話になっております。

    ご不便をおかけする状況がたびたび発生してしまい大変申し訳ございません。

    ご指摘の箇所の修正も含めて、ご報告いただいた内容を確認したいと考えております。
    そのために、状況が再現できる最小プロジェクトのご提供をお願いできますでしょうか。

    改めてのお願いとなり恐れ入りますが、ご確認の程何卒よろしくお願いいたします。
  • お忙しい中、ご返信ありがとうございます。
    ただいま、リリース予定が重なっておりまして
    最小プロジェクトの作成が出来ておりませんが、
    出来ましたら共有させていただきます。
    よろしくお願いします。
Sign In or Register to comment.