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

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

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

Cubism 2.0 SDKのcocos2d-xでの動作報告

cocos2d-x3.2でSDKを試させていただきました。
win32とiPhone5、AndroidのAQUOS PHONE CL(IS17SH)で
サンプルプロジェクトの動作確認ができました。

iPhone5

AQUOS PHONE CL


しかし、AndroidのArrowsZ(ISW13F)で、テクスチャが重なる部分の
表示がおかしくなる現象が発生しています。
cocos2d-x3.0でも確認してみましたが、見た目が多少変わるものの、
やはり現象発生するようです。

ArrowsZ cocos2dx3.2

ArrowsZ cocos2dx3.0


AQUOS PHONEとArrowsZで同じコードを使っているため、
Android実機側の問題ではないかと考えているのですが、
コード側でも、まだ何か試してみた方が良いことはあるでしょうか?
(Zバッファやアルファ周りの関数を有効/無効にする、など)

AndroidOSのバージョンは、ArrowsZが4.0.3でAQUOS PHONEが4.0.4です。
何か分かることがありましたら、ご教授お願い致します。

コメント

  • 3.2でも動作するんですね!
    動作報告ありがとうございます、僕も試してみます。

    コード側で、試してみた方が良いことですが、
    もしかしたら以下を試すと何か変わるかもしれません。
    setPremultipliedAlpha
    setPartsOpacity

    APIリファレンス
    http://doc.live2d.com/api/core/cpp2.0j/
  • ごめんなさい、setPartsOpacityはあんまり関係ないかもしれません。
  • 動作報告ありがとうございます。
    ArrowsZでの動作については確認してみます。
    こちらでは動作確認はLGL22(Android4.4.2)やいくつかのNexus系で行いましたが、不具合は確認できなかったので実機固有の問題かと思われます。
  • Scirocco-Cloud ( http://www.scirocco-cloud.com/) を使って、
    ARROWS Z ISW13F AndroidOS 4.0.3で確認しましたが同様の現象を確認しました。

    先ほど紹介したsetPremultipliedAlphaの設定を変えましたが解決できませんでした。
  • 再現確認ありがとうございます。お手数おかけします。
    setPremultipliedAlphaに関して、こちらでも試してみましたが、
    やはり現象発生してしまいました。
    今後、SDKを触っていく上で、改善につながりそうな条件を見つけたときは
    またご報告させていただこうと思います。よろしくお願い致します。
  • 別件の調べ物でandroidをいくつか調達しましたので、追加で動作確認をしてみました。
    全てcocos2d-x3.2です。

    ArrowsZ(ISW11F) android2.3.5

    こちらもArrowsZですが、現象発生していたISW13FではなくISW11Fです。

    GalaxySII(ISW11SC) android2.3.6


    GALAPAGOS(EB-W51GJ) android2.3.3


    MOTOROLA PHOTON(ISW11M) android2.3.4


    結果、MOTOROLA PHOTONでも現象発生しております。
    ISW13Fとの共通点はプロセッサにNVIDIAのTegraを積んでいるところだと思われます。
    (Live2D様の方でご確認されたNexusに、Nexus7(2012)はあったでしょうか?
     あった場合はNexus7(2012)もTegraなので、原因は別となりそうです・・・)

    プロセッサの種類の確認は以下を参考にさせていただきました。
    http://dench.flatlib.jp/opengl/devicelist

    以上、取り急ぎご報告まで。
  • 報告ありがとうございます !
    非常に助かります !

    Nexus7(2012)(Android4.2.1)は実機で検証したのですが、正常に動くんですよね…
    こちらでもTegraがあやしいとは考えたのですが、さらに条件がありそうです。

    現在、以下のページなどを参考にしてOpenGLの細かい違いなどを確認中です。
    http://delphigl.de/glcapsviewer/gles_listreports.php

  • こちらでもNexus7(2012)と、Optimus Xが調達できたので動作確認をしてみました。

    Nexus7(2012) Android4.2.2


    Optimus X(IS11LG) Android4.0.4


    Optimus XもTegra250なのですが、正常に動作いたしました。
    Tegraが原因かなと思っていたのですが、外しているかも知れません・・・
    また何か分かりましたらご報告させていただきます。
  • 憶測ですみません。Tegra用とそれ以外でシェーダを分けているのではないかと思うのですが、
    ISW13FやISW11MでもGL_NV_shader_framebuffer_fetchが宣言されている方の
    処理に入っていないように見えます。
    (宣言されていない方の処理をバイナリ上で変更するとTegra系でも反映されます)

    GL_NV_shader_framebuffer_fetchの拡張を持っているかは以下の処理を試し、
    ISW13F、ISW11M、Nexus7、IS11LGでサポートされていることを確認しました。

    char *exts = (char*)glGetString(GL_EXTENSIONS);
    if(strstr(exts, "GL_NV_shader_framebuffer_fetch ")){
    //サポートしている
    }else{
    //サポートしていない
    }

    以上から、Tegra用の処理自体ではなく、その前の分岐部分に何かあるのではと思います。
    憶測を重ねた書き込みになってしまい申し訳ありません。
    また内部の挙動に関しているので、問題あれば管理者権限での投稿の削除をお願いします。
  • 情報提供ありがとうございます。
    確認してみます。
  • お返事遅くなりましたが、SDK2.0.01である程度対応しました。

    >Tegra用とそれ以外でシェーダを分けているのではないかと思うのですが
    現状ではハードウェアによってシェーダは分けていません。どうやら分ける必要がありそうですね。

    そのためSDK2.0.01で、シェーダを切り替える関数を用意しました。

    勝手に切り替えずにAPIを用意したのは、Live2Dライブラリ内のブラックボックスで、ハードウェア情報を読み取ってシェーダを切り替えるのは設計上好ましくないと考えたためです。
    これはこれで面倒くさいと言われそうですが…

    DrawParam_AndroidES2::setExtShaderModeで設定できます。
    trueにすると、こちらで試した範囲では、今までうまくいかなかったものは正常に表示されることを確認しました。
    逆にうまくいっていた機種では、設定しないかfalseにしておく必要があります。
    // インクルードを追加
    #include "graphics/DrawParam_AndroidES2.h"

    // Live2D初期化時
    // うまくいかない機種では以下の処理でOK
    DrawParam_AndroidES2::setExtShaderMode(true);

    とりあえずこれでいかがでしょうか?
  • アップデートありがとうございます。SDKの2.0.01を試させていただきました。
    ISW13FとISW11Mで出ていた現象は再現しなくなりました。

    ただ、別件で(これは自分が乗算済みアルファについてよく分かっていないからかも
    知れないのですが)、setExtShaderMode()をtrueにすると、setPremultipliedAlpha()が
    効かなくなるような見え方をしています(パーツの境目に薄く線が出ます)。
    以前のバージョンや、今回のバージョンでもsetExtShaderMode()を使わないときは、
    setPremultipliedAlpha()がfalseのときはどの機種でも(Androidに限らずWin32版でも)
    境目の線が出ており、setPremultipliedAlpha()をtrueにしたときは境目の線は消えていました。
    cocos2d-xのデフォルト画像の上に描画しているのですが、何か相性が悪いのでしょうか・・・?

    ・ISW13F



    setPremultipliedAlpha()の件以外に関しては、Tegra系のIS11LGやNexus7(2012)、
    Tegra以外のIS14SH、IS17SH、ISW11SC、ISW11F、IS11NEB-W51GJで
    問題なく動作することを確認できました。

    >現状ではハードウェアによってシェーダは分けていません
    こちらの勘違いでお騒がせしました。大変失礼致しました。大暴投でした。
  • 報告ありがとうございます。
    すいません。乗算済みアルファの設定は見逃していました。
    次回更新(早ければ来週くらい?)で対応できそうです。
  • バージョン2.0.03で更新しました。

    Androidの場合はシェーダ設定時にPremultiplied Alphaの設定をするようにしました。
    設定方法は以下のページを御覧ください。

    https://sites.google.com/a/cybernoids.jp/cubism2/sdk_tutorial/platform-setting/cocos2d-x/setextshadermode

    こちらで確認できるだけは確認しましたが、もしうまくいかなければ教えて下さい。
  • バージョン2.0.03を試させていただき、現象が再現しなくなることを確認しました。

    Tegra系(ISW13F、ISW11M、IS11LG)に関して、setExtShaderMode()の第一引数をtrue固定、
    第二引数とsetPremultipliedAlpha()をtrueとfalseで各指定したところ、
    乗算済みアルファを有効にしたときに境目の線がでることはなく、
    また、乗算済みアルファを無効にしたときも(境目の線はでますが)、
    特に表示がおかしくなるようなことはありませんでした。

    Tegra系以外に関しても、ISW11F、ISW11SC、IS17SH、IS14SH、EB-W51GJで、
    特にデグレード等がないことが確認できました。
    ご対応ありがとうございました。
コメントするにはサインインまたは登録して下さい。