Live2D Ver3におけるモザイク処理について

2,959 views
Skip to first unread message

tok...@mekakushi.dojin.com

unread,
Jun 10, 2017, 4:08:44 AM6/10/17
to 宴ユーザーグループ
以前、Live2Dモデルの一部にモザイクを適用する処理が宴3では実装出来るかもしれないと伺いました。
以下のURLのような処理です。
http://qiita.com/naotaro0123/items/d7ac74ec18607ea04a33

現在の宴3で既に可能なのでしょうか?
可能な場合は適用方法をお教え下さい。

マッドネスラボ

unread,
Jun 10, 2017, 6:45:03 AM6/10/17
to 宴ユーザーグループ
宴3ではLive2DのCubizm3.0を使っているのですが、
内部構造が完全に変わっているため、上記のリンクにあるような使い方は根本的に真似できなくなっています。

Live2DのCubizm3.0のUnitySDKに、改善依頼を出すと、できるようになるかもしれません。

マッドネスラボ

unread,
Jun 10, 2017, 9:33:47 AM6/10/17
to 宴ユーザーグループ

Live2Dの仕組みに頼らずに試してみたところ、一応こんな感じで可能ではあります。

けっこう処理の負荷がかかるので、モバイル機器では動作確認が必要かと思います。


ちょっと強引に書き換えた部分も多いのですぐには公開できませんが、近いうちに使えるようにしようかと思います。








tok...@mekakushi.dojin.com

unread,
Jun 10, 2017, 10:00:47 AM6/10/17
to 宴ユーザーグループ
おぉぉ、Live2Dv3では無理という話だったのに、可能なのですね。
負荷が掛かるのはある程度仕方ないことですし、宴3に組込まれるのを楽しみにしています。

Live2Dの方にもSDK改善要望は出しておこうと思います。
ご回答ありがとうございました!

tok...@mekakushi.dojin.com

unread,
Jun 12, 2017, 10:08:55 PM6/12/17
to 宴ユーザーグループ
Live2Dのフォーラムに問い合わせてみたところ、
フレームバッファに書き込む部位の切り替えをパーツの表示状態で行っていますが、3.0のSDKではUnityのLayerで分けることで同一の処理を行うことができます
だそうです。

マッドネスラボ

unread,
Jun 13, 2017, 5:51:13 AM6/13/17
to utag...@googlegroups.com
UnityのLayerを分ける方法はカメラを複数用意する必要があるので、シーンの構成を含めてプロジェクト全体に影響します。
なので、ある程度Unityに使い慣れている人じゃないと辛そうです。

元々のこれもそうなのですが、カメラや描画ターゲットをかなりイレギュラーに使わないといけないので、
そこまで難しいことをするのであれば、もはや宴側で仕組みを用意するものではなく
Unityの使い方に慣れて独自に拡張したほうが早いレベルになるかと思います。

一応シェーダーを作ってみたのですが、レイヤーを分けなくてもこんな感じでパーツの一部をモザイク描画することは可能です。
これは、胴体部分のパーツのみをモザイクをオンオフしています。


ただLive2D自体の描画の仕組みがわからないので若干不完全で
服の後ろにマントのように水色の余分な描画ができちゃっています。
このアプローチであれば、Live2D側にモザイクシェーダーを用意してもらうのが一番早いかと思います。

もう一つのやり方は、先日お伝えしたようにLive2Dの仕組みを使わないやり方になります。
「モザイク用の板ポリゴンをLive2Dモデルの手前に置く」というやり方になります。
ただ、この場合は「一部のパーツのみ」というやり方はできないので、「手のパーツはモザイクしない」とかはできません。


また、これもLive2D側の問題ではあるのですが、アニメーションするパーツに合わせてモザイクを動かそうとしたときに、
Live2Dのアニメーションでどれくらい移動したかを上手くとってこれない可能性があります。


ちなみに、上記の「特定のパーツのみをモザイク」と「全体の一部の領域をモザイク」どちらが良いでしょうか?
(Live2D側のアップデートが必要かもですが)一応やること自体は可能そうです。


tok...@mekakushi.dojin.com

unread,
Jun 13, 2017, 7:08:55 AM6/13/17
to 宴ユーザーグループ
部分モザイクも試して頂いてありがとうございます。
私的にはパーツに追従してモザイクを動かしたいので特定のパーツのみモザイクというのが良いなぁと思います。
Unityの勉強を始めて間もない私では特定のパーツのみ版だと実装するのが難しいとは思いますが。

モザイクが必要なパーツが大幅に動くアニメーションを作ってしまったので、
板ポリゴン版だとパーツにモザイクが上手く掛からない可能性があるのが心配です。
でも手動でモザイクの位置や大きさをフレーム単位で調整出来るなら、こちらでも頑張って調整しようと思います。

マッドネスラボ

unread,
Jun 13, 2017, 7:49:29 AM6/13/17
to utag...@googlegroups.com

パーツ単位であれば
 ・ 添付のパッケージファイル(MosaicParts.unitypackage)をプロジェクトにインポート
・「Unlit Mosaic」というシェーダーとマテリアルが追加されるので、それをモザイクをかけたいパーツのオブジェクトのマテリアル設定
でいけると思います。
マテリアルの「Size」 でモザイクの大きさを変えられます。



MosaicParts.unitypackage

マッドネスラボ

unread,
Jun 13, 2017, 8:25:13 AM6/13/17
to 宴ユーザーグループ
すみません。
上記のシェーダーですが、置き場所がLive2Dのシェーダーと同じ場所じゃないとダメかもしれません。
エラーが出るようでしたら、こちらを参考に置き場所を変えてください。


tok...@mekakushi.dojin.com

unread,
Jun 13, 2017, 10:03:21 AM6/13/17
to 宴ユーザーグループ
丁寧な解説ありがとうございます。
早速試したところモザイク表示する事が出来ました。
水色の外枠が出来てしまう問題はモザイクパーツの背景に画像があれば表示されないので大丈夫そうです。

ただ、複数のパーツにモザイクを施すと↓のように表示順が上にあるパーツが透明化されてしまうようです。


Auto Generated Inline Image 1

マッドネスラボ

unread,
Jun 13, 2017, 10:08:16 AM6/13/17
to 宴ユーザーグループ
すみません。
修正しましたので、添付のパッケージでシェーダーを更新してください

MosaicShader.unitypackage

tok...@mekakushi.dojin.com

unread,
Jun 13, 2017, 10:17:40 AM6/13/17
to 宴ユーザーグループ
ありがとうございます!
複数パーツもモザイク表示出来るようになりました。
これでゲームを作る事が出来そうです。
本当にありがとうございました!

tok...@mekakushi.dojin.com

unread,
Jul 27, 2017, 9:21:26 AM7/27/17
to 宴ユーザーグループ
一ヶ月半も経ってからで申し訳ないのですが、再質問させて下さい。
クリッピングマスクを使ってモザイクパーツの一部を隠そうと思ったのですが、
モザイクを施したパーツはクリッピングが無効になってしまい、隠す事が出来ませんでした。

クリッピングを施したパーツにモザイクを掛けることは出来ないのでしょうか?

マッドネスラボ

unread,
Jul 27, 2017, 10:12:35 AM7/27/17
to 宴ユーザーグループ
Live2Dのマスク処理は、専用のマテリアルを設定する必要があるようです。
・(以前お渡しした)「Unlit Mosaic」というマテリアルをコピーして、「Unlit Mosaic Masked」という別のマテリアルを作る
・「Unlit Mosaic Masked」マテリアルのプロパティで、「Mask」のチェックを入れる
・「Unlit Mosaic Masked」マテリアルをマスクされるモザイクオブジェクトに設定する
というやり方を試してみてください。



tok...@mekakushi.dojin.com

unread,
Jul 27, 2017, 10:36:13 AM7/27/17
to 宴ユーザーグループ
試してみましたが、Mask?にチェックする前と表示が変わりませんでした。
マスク元のパーツがLive2Dでの作成時に不透明度0で、MeshRendererがオフになっているのが原因だったりするでしょうか?

tok...@mekakushi.dojin.com

unread,
Jul 27, 2017, 10:44:33 AM7/27/17
to 宴ユーザーグループ
あ、オフになっていないマブタパーツがマスク元の瞳に設定してもダメでした。
マスク自体はされているのですが、添付画像のようにマスク前のパーツ範囲がモザイクされてしまいます。

Auto Generated Inline Image 1
Auto Generated Inline Image 2

マッドネスラボ

unread,
Jul 27, 2017, 12:45:58 PM7/27/17
to 宴ユーザーグループ
クリッピング自体がLive2Dの独自の処理なので、できるかわかりませんが
対応できるか試してみます。
こちらにクリックピングのテスト用のデータを送っていただけるでしょうか?



tok...@mekakushi.dojin.com

unread,
Jul 27, 2017, 9:29:44 PM7/27/17
to 宴ユーザーグループ
どうぞよろしくお願いします。
テストデータを送信しました。
03シーンでスキップを2回押した状態がモザイクはみ出しが分かり易いと思います。
e19_03オブジェクトのDrawablesのD_PSD_33にマスクOnのモザイクが掛けられています。

tok...@mekakushi.dojin.com

unread,
Jul 27, 2017, 10:39:51 PM7/27/17
to 宴ユーザーグループ
テスト用の軽いファイルを用意しました。
白目に瞳をクリッピングしているデータです。

マッドネスラボ

unread,
Jul 28, 2017, 4:46:05 AM7/28/17
to 宴ユーザーグループ
作ってみました。
けっこう重い処理になるので、Unlit Mosaicシェーダーと、マスク付きのUnlit Mosaic Maskedシェーダーにわけました。

添付のパッケージファイルを適用すると、Unlit Mosaic Maskedというシェーダーが追加されるので、
それを、Unlit Mosaic Maskedのマテリアルのほうに再設定してください。




MosaicMask.unitypackage

tok...@mekakushi.dojin.com

unread,
Jul 28, 2017, 5:00:56 AM7/28/17
to 宴ユーザーグループ
さっそく試した所、マスク範囲をはみ出さずにモザイクされることを確認しました。
素早い対応、ありがとうございました!

Reply all
Reply to author
Forward
0 new messages