新しいLive2D公式コミュニティ(日本向け)が公開されました!
ぜひご利用ください!
Live2D公式コミュニティ

■このコミュニティの今後について
このコミュニティ(forum.live2d.com)につきましては、しばらくの間新コミュニティと並行して運営しますが、2023年夏ごろを目処に方針を決定する予定です。
(2022/12/27追記 2022年内を目処に閉鎖 から変更しております)
内容については決定次第お知らせいたします。
海外向けコミュニティについては変更ございません。
Live2Dに関するユーザーのみなさま同士の交流・ご質問・不具合の報告・提案・要望などについて是非お寄せください。
※Live2D公式スタッフからの発言や回答については確約できないことを予めご了承ください。

Live2D ヘルプ

Cubism Editorダウンロード / 動作環境
Cubism SDKダウンロード / 対応表
Cubism 製品利用ライセンス(SDK含)

Cubism 製品のライセンスについてのお問い合わせはこちら
nizima 及び nizima 製品についてのお問い合わせはこちら
【各最新OSの対応状況について】
Cubism Editorは 4.1.02 正式版以降でWindows 11 及び macOS Monterey に対応しております。ぜひ最新版をご利用ください。
※macOSをお使いの方でOSアップデートする際は必ずCubism Editorのライセンスを解除してください。
Cubism EditorをインストールしているmacOSをアップグレードしたい
Cubism SDKについては各SDKのREADMEまたはNOTICEをご確認ください。

【Mac各機種への対応状況について】
現在、Cubism EditorはApple M1チップ搭載機種には対応しておりません。
詳細は 動作環境 をご参照ください。
関連するお問い合わせへの対応はこの文章をもって代えさせていただきます。
Cubism 製品のマニュアル・チュートリアルはこちら
 
Cubism Editorマニュアル    Cubism Editorチュートリアル    Cubism SDKマニュアル    Cubism SDKチュートリアル

モデルのパーツの表示・非表示についてご質問

DirectX9でLive2Dを使用しています。
解決できない問題があり、ご質問させて頂きます。

プログラムおよび素材はSDKに添付されていたSampleApp1とharuを使用しています。

自作のシェーダを通して描画を行ったところ、
本来は非表示のパーツが表示されてしまう現象です。
具体的には、腕を組んだ状態と腕を下ろした状態が重なって表示されます。
シェーダなしの描画だと腕を組んだ状態が非表示になり、正常に表示されます。

Cubism SDKにALive2DModel::setPartsOpacity関数があるのですが、
マニュアルには上記関数がパーツの表示・非表示に対応しているとありました。
こちらで以下のように対応したのですが、全く効果がありませんでした。

腕を下ろした状態を表示
ALive2DModel::setPartsOpacity("PARTS_01_ARM_L_A_001", 1);
ALive2DModel::setPartsOpacity("PARTS_01_ARM_R_A_001", 1);

腕を組んだ状態を非表示
ALive2DModel::setPartsOpacity("PARTS_01_ARM_L_B_001", 0);
ALive2DModel::setPartsOpacity("PARTS_01_ARM_R_B_001", 0);

以上、解決方法が見つからなく困っています。
どなたかご存知の方がいらっしゃいましたらよろしくお願い致します。

コメント

  • 自作のシェーダは、モデルを描画したオフスクリーンに対して実行しておられるでしょうか?
    モデルのdraw()内では、ライブラリ側のシェーダが使われているはずなので、
    もしですが、これに直接バッティングするタイミングで自作のシェーダが実行されている場合は、
    表示がおかしくなる(描画周りの関数が効かなくなるように見える)ことはありそうに思います。

    ・「他のシステムとの連携について」→「描画の詳細」
    http://sites.cybernoids.jp/cubism2/sdk_tutorial/first/adapt
    >シェーダは基本的なテクスチャのアルファブレンド処理のみ
    ↑このライブラリ側のシェーダと自作シェーダがぶつかってしまっているのでしょうか?

    もしくは、PARTS_01_ARM_L_A_002系が何かの原因で表示されていて、
    001系を指定したsetPartsOpacityは動いているのに腕は描画されている、とかでしょうか?
    (シェーダなしの場合は正常に表示されているとのことなので、こちらの可能性は薄そうですね)

    y_a_s_(Dev Staff)naotaro
  • ご回答ありがとうございます。

    >・「他のシステムとの連携について」→「描画の詳細」
    >http://sites.cybernoids.jp/cubism2/sdk_tutorial/first/adapt

    上記の記載事項を確認していませんでした。

    ご回答を踏まえて以下にまとめました。

    自作のシェーダはデフォルトのフレームバッファに直接描画していますので、
    上記記載事項の場合、「1.スクリーンにLive2Dを直接描画する場合」の項目にあたります。
    ご回答の通り、ライブラリ側のシェーダ(この場合は「シェーダは基本的なテクスチャのアルファブレンド処理のみ」)の描画処理と
    こちらの自作シェーダとの描画処理がぶつかっていそうです。
    モデルの draw() 処理を実行する前に自作シェーダを実行する手順で描画しています。
    そのためぶつかった事による内部の動作の詳細は分からないのですが、
    結果としてこちらが思った通りの描画結果が得られていないようです。
    以上です。

    現時点の方法だと各パーツの表示・非表示は実現は厳しそうなので、
    別の方法(オフスクリーン方式など)を検討したいと思います。

    色々悩んでいた部分がすっきりして、大変助かりました。
    ありがとうございました。
コメントするにはサインインまたは登録して下さい。