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

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

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

UnityでLive2Dモデルを表示した際の拡縮率は?

チュートリアルに従って、Unity上にLive2Dモデルを表示できたのですが、実寸より小さく表示されます。
どの程度縮小されているのでしょうか?(どの程度拡大すれば実寸どおりのサイズになるのでしょうか?)

コメント

  • 返事が遅れてすみません。
    とりあえず確認しますが、従ったチュートリアルというのは、プロジェクト作成チュートリアルのことでしょうか?
  • 返信ありがとうございます。

    説明が足りなくてすみません。
    以下のページに記載されている手順を参考にしました。
    http://sites.cybernoids.jp/cubism/home/special/20140327/session2

    上記ページの中で

    1.6 再生ボタンを押してシーンを再生
     おそらく小さいく表示されるので、「Miku」のScale を(5, 5, 1)にする。

    と記載されており、その記載のとおり小さく表示されるのでScaleでサイズを調整しておりますが、そもそも、なぜ作成時より小さく表示されるのか?(Live2Dの仕様なのか? Unityの仕様なのか?)、Scaleの値をどの値に設定したら実寸どおりの表示サイズとなるのか?
    というのを教えて頂けないかという質問でした。

    Unity勉強中なので見当違いの質問かもしれませんが...
  • なんとなくわかってきた気がします。
    以下のコードで、Live2Dのモデルの座標系をUnityの表示領域の座標系に変換しており、この行列の設定次第で表示サイズが変わってくるようですね...

    //表示位置と大きさの指定
    Matrix4x4 m1 = Matrix4x4.Ortho( 0, 900, 900, 0, -0.5f, 0.5f );
    Matrix4x4 m2 = transform.localToWorldMatrix;
    Matrix4x4 m3 = m2 * m1;
    live2DModel.setMatrix( m3 );

    この記述から推測すると、
    Live2Dのモデルの座標系は左上が(0,0)で右下が(幅,高さ)となっていると思わますが、あってるんでしょうか?
  • やはり上記の箇所がよくわからないのですが、
    Matrix4x4 m1 = Matrix4x4.Ortho( 0, 900, 900, 0, -0.5f, 0.5f );
    に指定する left, right, top, bottom の値はそれぞれどのような値を設定したら良いのでしょうか?

    そもそもLive2D関係無くUnityに関するものかもしれませんが、Unityの関数リファレンス等を参照してもいまいちピンと来ませんでした。
    ここで設定する値が、Unity上でLive2Dモデルが表示されるサイズにどのように関わってくるのか、ご存知であればヒントでも教えて頂きたいです。

    よろしくお願い致します。
  • 編集済: 8月 2014
    私も気になったため、色々と試してみました。

    Live2Dの座標系は左上を(0,0)の原点とし、右下が(幅,高さ)で間違いないと思います。
    Matrix4x4.Ortho(...)のbotomとtopの値が逆になっているのは
    unityの座標系とLive2Dの座標系で上下が逆なため、ここで修正しているようです。

    サイズについてですが、Live2Dのキャンパスサイズがそのまま
    表示スプライトのサイズとなっているようです。
    (キャンパスが256*256なら、Unity単位で原点(0,0)から(256,256)のスプライトになります。)

    なので、Matrix4x4 m1 = Matrix4x4.Ortho( 0, 256, 256, 0, -0.5f, 0.5f );
    にすれば256*256のキャンパスサイズが丁度Unity単位での2*2のサイズになるはずです。
    *修正
     変換後のスプライトサイズが1*1になるとしていましたが
     -1~1にクリッピングされるため2*2の間違いでした。

    Matrix4x4.Orthoで得られる行列は平行投影変換行列で
    簡単に言うとOrthoで指定した短形領域を上下左右-1~1の正方形にする変換行列です。

    ちなみに、この辺りの行列変換をいい感じにしてくれるクラスとして
    L2DModelMatrixというクラスが用意されているようです。
    GitHubGist

    *私も行列は得意ではないので、間違えていたらごめんなさい。


  • 詳細に調査していただきありがとうございます!!
    大変助かります。
  • 以下のページが参考になりそうだったので、メモ。

    "プロジェクト作成チュートリアル - Live2D Cubism Documents":http://sites.cybernoids.jp/cubism/sdk_tutorial/platform-setting/directx/createproject

    "モデルのローカル座標について - Live2D Cubism Documents":http://sites.cybernoids.jp/cubism/sdk_tutorial/live2d_library/load_to_display/display_model/local
コメントするにはサインインまたは登録して下さい。