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

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

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

Live2Dモデルをテクスチャにレンダリングできない

編集済: 11月 2016 Cubism SDK 2.1
お世話になります。

CubismSDKのバージョンを変更したところ、IDirect3DDevice9::SetRenderTarget()を用いて、テクスチャにレンダリングする際に、Live2Dモデルが描画されなくなりました。
以前は、VS2010+DirectX2010June+CubismSDK_2.0.06_1という環境で開発しており、その際本事象は発生しませんでした。
今回、開発環境のバージョンアップに伴い、CubismSDKのバージョンを変えた(2.0.06_1→2.1.04_1)ところ、
本事象が発生しました(ソースの変更はありません)。
下記動作確認結果から、CubismSDKのバージョンアップ(2.0→2.1)で何かが変わったものと推察されますが、
現状原因が分からず、問い合わせさせて頂きました。

〇動作確認結果
・VS2010+DirectX2010June+CubismSDK_2.0.06_1は〇
・VS2010+DirectX2010June+CubismSDK_2.1.00_1は×
・VS2010+DirectX2010June+CubismSDK_2.1.01_1は×
・VS2010+DirectX2010June+CubismSDK_2.1.04_1は×
・VS2015+DirectX2010June+CubismSDK_2.0.06_1は×(コンパイル時リンクエラー)
・VS2015+DirectX2010June+CubismSDK_2.1.04_1は×

〇参考サイト
http://d.hatena.ne.jp/taiyakisun/20100228/1267312271


お手数ですが、ご調査頂けると幸いです。
以上です。よろしくお願いします。

開発環境
------------------------------------------
Windows10 Pro 64bit
Microsoft Visual Studio Professional 2015 Update 3
C++
DirectX9.0c SDK (June 2010)
Live2D Cubism SDK for DirectX Version 2.1.04_1

Debugモード時設定
ランタイムライブラリ:マルチスレッドデバッグ(/MTd)
追加の依存ファイル:live2d_directX_mtd.lib
ライブラリパス:Live2D_SDK_DirectX_2.1.04_1_jp\lib\x86\140
------------------------------------------

コメント

  • @gama55 さん

    >〇動作確認結果
    こちらの内容ですが、SDK付属のサンプルプロジェクトでの結果でしょうか?

  • y_a_s_(Dev Staff) 様

    ご質問ありがとうございます。
    こちらはサンプルプロジェクトではなく、自作のプロジェクトでの結果となります。
  • @gama55 さん

    > こちらはサンプルプロジェクトではなく、自作のプロジェクトでの結果となります。
    ありがとうございます。
    念のための確認ではありますが、SDK付属のサンプルプロジェクトは動作すると考えてもよろしいでしょうか?
    もし動作する場合、こちらで調査した結果、初回の live2DModel->draw() の直前に設定されていたレンダーターゲットをSDK内でキャッシュしてしまいます。
    そのため、その後でアプリケーション側でレンダーターゲットを切り替えても、Live2Dは最初にキャッシュしたターゲットに描画を行っています。
    対処法ですが、予め描画するレンダーターゲットが変わらないのであれば、初回描画の直前に描画したいレンダーターゲットをメインに設定していただければ想定した動作が可能です。
  • y_a_s_(Dev Staff) 様

    ご回答ありがとうございます。

    > 念のための確認ではありますが、SDK付属のサンプルプロジェクトは動作すると考えてもよろしいでしょうか?
    はい。サンプルプロジェクト(Simple_MTプロジェクトで確認)は正常に動作することを確認しています。

    > もし動作する場合、こちらで調査した結果、初回の live2DModel->draw() の直前に設定されていたレンダーターゲットをSDK内でキャッシュしてしまいます。
    > そのため、その後でアプリケーション側でレンダーターゲットを切り替えても、Live2Dは最初にキャッシュしたターゲットに描画を行っています。
    なるほど。そういうことでしたか。今回の事象では、バックバッファからテクスチャに、途中でレンダーターゲットを切り替えたときに発生していたので、合点がいきました。

    > 対処法ですが、予め描画するレンダーターゲットが変わらないのであれば、初回描画の直前に描画したいレンダーターゲットをメインに設定していただければ想定した動作が可能です。
    レンダーターゲットが途中で変わる場合は、どうしたらいいでしょうか?

    今回やりたかったことというのが、Live2Dモデル全体のフェードイン、フェードアウトでして、通常はバックバッファに描画しているモデルを、フェードする際にテクスチャにレンダーターゲットを変更して、テクスチャの透明度を変更することで実現していました。
    最初からモデルをテクスチャに描画して、そのテクスチャをバックバッファに書くようにすればいいんでしょうか?
  • @gama55 さん

    > 最初からモデルをテクスチャに描画して、そのテクスチャをバックバッファに書くようにすればいいんでしょうか?
    現状のSDKではこの方法で回避していただくのが最良かと思います。
  • 編集済: 11月 2016
    y_a_s_(Dev Staff) 様

    ご回答ありがとうございます。

    > もし動作する場合、こちらで調査した結果、初回の live2DModel->draw() の直前に設定されていたレンダーターゲットをSDK内でキャッシュしてしまいます。
    上記動作ですが、バグではなく2.0→2.1での仕様変更ということでしょうか(これから変更されることは無い動作?)?
    あと、Live2Dモデルだけでなく、それ以降に描画したBMP画像なども、レンダーターゲット変更できなくなっているようです(キャプチャを取るとLive2Dモデルよりも奥の背景のみ描画される状態)。
  • @gama55 さん

    > 上記動作ですが、バグではなく2.0→2.1での仕様変更ということでしょうか(これから変更されることは無い動作?)?
    2.1実装時に入ってしまったバグになります。誠に申し訳ありません。
    時期は未定ですが、下記の件も含め対応を検討させていただきます。

    > あと、Live2Dモデルだけでなく、それ以降に描画したBMP画像なども、レンダーターゲット変更できなくなっているようです(キャプチャを取るとLive2Dモデルよりも奥の背景のみ描画される状態)。
    こちらもバグが原因の動作となっております。
    内部でレンダーターゲットを変更する処理を行っているのですが、その処理後に設定し直すレンダーターゲットをキャッシュしたターゲット(live2DModel->draw()直前に設定されていたターゲット)にしてしまっていました。
    live2DModel->draw() の直後に、レンダーターゲットを任意のものに設定していただければ回避が可能です。
  • y_a_s_(Dev Staff) 様

    ご回答ありがとうございます。
    対応検討の件、回避方法の件了解しました。
    ご対応お待ちしております。
コメントするにはサインインまたは登録して下さい。