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

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

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

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

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

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

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

CubismSDKとARkit(iOS)での問題について

こんにちは
CubismSDK2.1とiOSのARkitを仕様してVtuber向けのアプリを開発しております。
お客様より顔の傾きに応じて、カラダの傾きも追従してほしいとの依頼があったため、パラメータPARAM_ANGLE_ZとともにPARAM_BODY_ANGLE_Zの値も変更したのですが、この動きでは顔の傾きに対して
カラダが傾くスピードが早いと指摘されたので、カラダの傾くスピードをもう少しゆっくりできないかと思っております。
様々なドキュメント類を確認しましたが、解決に至っておりません。
お力添えをいただければ幸いです。
現在のアプリでの動きがわかるよう動画を撮影しましたので、ご覧くださいませ。
https://drive.google.com/open?id=1yau_ofFEhkxCIwFQEOAAudht6ZdvHcmw
以上、よろしくお願いいたします。

コメント

  • @daisuke_hanano

    「カラダが傾くスピード」とは、顔の傾きに対する体の変化量のことでしょうか?
    それとも顔が傾くタイミングから遅延させる時間のことでしょうか?
  • edited 10/02
    @y_a_s_(Dev Staff)

    「カラダが傾くスピード」とは、顔の傾きに対する体の変化量のことでしょうか?
    →こちらの方なのですが、iOSのホロライブというアプリをご覧になるとわかりやすいと言われています。
    PARAM_BODY_ANGLE_Zの値を例えば0→10にした時に10に達するまでの時間をゆっくりにしたいということです。
    今の動きだと顔の向きとほぼリアルタイムに体が傾くのでホロライブとは程遠いと指摘された次第です。
    以上、よろしくお願いいたします。
  • @y_a_s_(Dev Staff)
    本件、いかがでしょうか。
    いつぐらいのご回答になりそうでしょうか。
  • @daisuke_hanano

    回答が遅れてしまい申し訳ありません。

    顔の傾きの値を直接パラメータに設定するのではなく、取得した値にイージングをかけてから設定すれば、同様な動作になるかと思われます。

    Cubism2 SDKでは、付属のフレームワークの「L2DTargetPoint」というクラスで簡易的なイージングを行っておりますので、こちらを利用していただくことでも実装することができます。
    L2DTargetPointは、SDK同梱のサンプルプロジェクト「SampleApp1」のLAppModel::update()で扱っておりますので、詳細につきましてはこちらをご参照ください。
  • @y_a_s_(Dev Staff)
    ご回答ありがとうございます。
    今のARkitを使用したプログラムには流用できなかったので、顔が傾くタイミングから体を傾ける時間を遅延させるにはどうすればよろしいでしょうか。

    ご教示のほどよろしくお願いいたします。
  • edited 10/05
    @daisuke_hanano
    誠に申し訳ありませんが、サードパーティとの連携や、設定する値の加工方法につきましてはお答えいたしかねます。

    L2DTargetPointの使い方ですが、パラメータへ適用する値は取得できていると思われますので、
    値をL2DTargetPoint::set()の第1引数に渡し、L2DTargetPoint::update()を呼ぶとイージングした値が計算されます。
    L2DTargetPoint::set()の第2引数は0を設定してください。
    イージングされた値は、L2DTargetPoint::getX()で取得できます。
    取得される値は-1~+1となっておりますので、パラメータの最大値に合うよう乗算してください。
    この値を適用する場合、ALivev2DModel::setParamFloat()ではなく、ALivev2DModel::addToParamFloat()を使用すると、より自然な動きになるかと思われます。

    L2DTargetPointを使用しない場合、検索していただければイージングの計算式を解説しているページを見つけられますので、そちらを参照してください。
    https://www.google.co.jp/search?q=イージング+計算式&oq=イージング+計算式&aqs=chrome..69i57j69i61.8180j0j7&sourceid=chrome&ie=UTF-8
Sign In or Register to comment.