★お知らせ(2023/12/27)
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新Live2D公式クリエイターズフォーラムに移行します。
閉鎖に伴い、以下機能は利用不可となります。
・アカウントの新規作成
・トピック投稿、返信
たくさんのご利用誠にありがとうございました。
新Live2D公式クリエイターズフォーラムは以下バナーよりご利用いただけます。
なお、本コミュニティに投稿されたトピックはすべて残りますが、今後削除する可能性がございますので予めご了承ください。
閉鎖に関するお問い合わせにつきましてはLive2D公式クリエイターズフォーラムへご連絡ください。
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新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です。
何か分かることがありましたら、ご教授お願い致します。
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です。
何か分かることがありましたら、ご教授お願い致します。
0
コメント
動作報告ありがとうございます、僕も試してみます。
コード側で、試してみた方が良いことですが、
もしかしたら以下を試すと何か変わるかもしれません。
setPremultipliedAlpha
setPartsOpacity
APIリファレンス
http://doc.live2d.com/api/core/cpp2.0j/
ArrowsZでの動作については確認してみます。
こちらでは動作確認はLGL22(Android4.4.2)やいくつかのNexus系で行いましたが、不具合は確認できなかったので実機固有の問題かと思われます。
ARROWS Z ISW13F AndroidOS 4.0.3で確認しましたが同様の現象を確認しました。
先ほど紹介したsetPremultipliedAlphaの設定を変えましたが解決できませんでした。
setPremultipliedAlphaに関して、こちらでも試してみましたが、
やはり現象発生してしまいました。
今後、SDKを触っていく上で、改善につながりそうな条件を見つけたときは
またご報告させていただこうと思います。よろしくお願い致します。
全て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) Android4.2.2
Optimus X(IS11LG) Android4.0.4
Optimus XもTegra250なのですが、正常に動作いたしました。
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用の処理自体ではなく、その前の分岐部分に何かあるのではと思います。
憶測を重ねた書き込みになってしまい申し訳ありません。
また内部の挙動に関しているので、問題あれば管理者権限での投稿の削除をお願いします。
確認してみます。
>Tegra用とそれ以外でシェーダを分けているのではないかと思うのですが
現状ではハードウェアによってシェーダは分けていません。どうやら分ける必要がありそうですね。
そのためSDK2.0.01で、シェーダを切り替える関数を用意しました。
勝手に切り替えずにAPIを用意したのは、Live2Dライブラリ内のブラックボックスで、ハードウェア情報を読み取ってシェーダを切り替えるのは設計上好ましくないと考えたためです。
これはこれで面倒くさいと言われそうですが…
DrawParam_AndroidES2::setExtShaderModeで設定できます。
trueにすると、こちらで試した範囲では、今までうまくいかなかったものは正常に表示されることを確認しました。
逆にうまくいっていた機種では、設定しないかfalseにしておく必要があります。
とりあえずこれでいかがでしょうか?
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で
問題なく動作することを確認できました。
>現状ではハードウェアによってシェーダは分けていません
こちらの勘違いでお騒がせしました。大変失礼致しました。大暴投でした。
すいません。乗算済みアルファの設定は見逃していました。
次回更新(早ければ来週くらい?)で対応できそうです。
Androidの場合はシェーダ設定時にPremultiplied Alphaの設定をするようにしました。
設定方法は以下のページを御覧ください。
https://sites.google.com/a/cybernoids.jp/cubism2/sdk_tutorial/platform-setting/cocos2d-x/setextshadermode
こちらで確認できるだけは確認しましたが、もしうまくいかなければ教えて下さい。
Tegra系(ISW13F、ISW11M、IS11LG)に関して、setExtShaderMode()の第一引数をtrue固定、
第二引数とsetPremultipliedAlpha()をtrueとfalseで各指定したところ、
乗算済みアルファを有効にしたときに境目の線がでることはなく、
また、乗算済みアルファを無効にしたときも(境目の線はでますが)、
特に表示がおかしくなるようなことはありませんでした。
Tegra系以外に関しても、ISW11F、ISW11SC、IS17SH、IS14SH、EB-W51GJで、
特にデグレード等がないことが確認できました。
ご対応ありがとうございました。