【PngTuber】Blenderで音声の音量によって画像を切り替える【キャラクターの口パク・まばたき】

キャラクターの口パク

さて、いきなり3Dモデルを作るのは難しい、あるいは3Dはなかなか馴染めないから2Dで作成したいという場合もあるでしょう。

私もイラストやキャラクターに関しては2Dの動きの方が好きだったりします。

PngTuber+やPngTuber Makerなどで作る方法もありますが、デザインがチープだしせっかくBlender勉強してきたので、Blenderでやってみたい欲があり備忘録。

以下一部参考。

参考動画

サウンドに合わせて動かす方法

↑↑ クリックすると動画が見れます ↑↑



↑↑ クリックすると動画が見れます ↑↑



↑↑ クリックすると動画が見れます ↑↑



↑↑ クリックすると動画が見れます ↑↑



↑↑ クリックすると動画が見れます ↑↑



参考サイト
ま、なかなかこの手の資料はなく、オーディオスペクトラムのような手法ならこのように色々ありましたが、ちょっと違うんですよね…

共通点はありますが。

データの準備

口閉じイラスト
口開きイラスト
音声

音声を挿入

動画シーケンスにて音声を挿入。
1フレーム目に合わす。
nキーで波形を表示。

オブジェクトの挿入

3Dビューに
  • 口閉じイラスト
  • 口開きイラスト
を挿入。

エンプティでしないこと。

標準アドオン「Import Images as Planes」、もしくはBlender4.1以降は標準メニューになり

追加→メッシュ平面

を挿入し画像を設定。

ドライバーの登録(失敗例)

まず、表示非表示は、オブジェクトプロパティから可視性の「ビューポート」からすれば出来そうと思い、そこにキーフレームを挿入してみたが、ビューポートでキーフレームを作ることは出来るが、ビューポート自体数値が無いためか音声のサンプル化が出来ずサンプル化しても波形の形にならず一直線になることが分かった。

よってドライバーで試してみた。

口閉じイラストを選択してオブジェクトプロパティから可視性の「ビューポート」を右クリックしてドライバーを登録。

グラフエディターのドライバーから

キー→Fカーブをベイク

で上記と同じ音声を選択。

多分Blender4.1くらいからはグラフエディターではなくドライバーエディターから、

チャンネル→音声のサンプル化

で波形が表示される。

マウスホイールで拡大/縮小、もしくは「正規化」で自動で拡大表示にする。

再生して確認。

nキーでドライバー、もしくはビューポートから右クリックして、ドライバーエディターを開く

ドライバーエディター

「セキュリティのため、Pythonを制限しています」消し方
しかし、ドライバーの中のタイプにて「スクリプトの式」が選択されていると

セキュリティのため、Pythonを制限しています

と表示され、それ以外の選択時には、

無効なターゲットチャンネル

と表示されてしまいます。

どうやらこれは、Windowsのセキュリティではなく、Blenderのセキュリティ機能が反応しているようです。

この場合、

プリファレンス→セーブ&ロード→Pythinスクリプトの自動実行

にチェックが入ってないと思うので、チェックを入れると、

無効なターゲットチャンネル

は消えないが、

セキュリティのため、Pythonを制限しています

は消えた。

エラー:無効なPython式
音声の波形を使いたいなら「スクリプトの式」タイプが基本なので、音声の波形を使うには「スクリプトの式」タイプのドライバーを使うしかないようだ。

「式」とは変数を用いることのできるPython式のことだが、デフォルトでは式に入力できるのは数値のみ。

しかし数値を入力しても定義してないので全体が変わるだけで効果が無いようだ。

この時点でvarなどの変数を入れると

エラー:無効なPython式

と表示される。

「入力値を追加」からプロパティより「サウンド」、挿入した音声ファイルを選択する。

※デフォルトではオブジェクトしか選べれないので、なぜか一旦追加した入力値を閉じて再度追加したらサウンドが選べれる。

そして変数名に「var」と入っているので、これはそのままでいいし任意の文字に変えてもいい。

この変数名が上記の「式」に使えるようになる。

しかし「フォールバックを使用」にチェックを入れないと

エラー:無効なPython式

のエラーが消えない。

これで行けるかと思ったら、なかなかうまくいけない。

もうわけがわからなくなり、別の方法で、マテリアルでシェーダーミックスでオンオフすることに。

やっぱりキーフレームで出来るのではないか。。。

キーフレームの登録(成功例)

上手く行ったのは、ビューポートのオンオフでなく、シェーダーミックスで切り替える方法だ。

シェーダーエディター

シェーダーミックスでの分岐
口閉じイラストのみ、プリンシプルBSDFの後にシェーダーミックスを挿入。

シェーダーミックスのもう一つのシェーダーの入力に透過BSDFを挿入。

要はシェーダーミックスにて、プリンシプルBSDFと透過BSDFを分岐する形にする。

しかしこのままでは0.9999のまま変わらず、1にしたとたんにしかも口開きにならずに黒影。

この黒影は重ねてある口開きの画像だ。

この現象は以下で解決した。

マテリアルプロパティ→設定→レンダーメソッド

を「ブレンド」にして「透過で重ね合わせ」にチェック。

これでシェーダーミックスの係数を「0→1」で口閉じ口開きの切り替えがとりあえず手動で出来た。

係数へのキーフレーム割り当て
この係数にキーフレームを割り当てる。

係数の数値の上で右クリックしてキーフレームの挿入。

その時もし係数に何か繋がっていると(基本繋がってはいないが...)「キーフレームの挿入」が出てこないので注意する。

そして、このシェーダーミックスをきちんと選択してからグラフエディターに行く

そうしないとグラフエディターにキーフレームが表示されない

グラフエディター

音声のサンプル化
そしてタイムラインを挿入したい時間軸に合わせて(最初なら0など)、

グラフエディターで表示されたキーフレームを選択して(エンベローブが紫色の状態)、

チャンネル→音声のサンプル化

波形が表示されるので、見にくければ正規化で波形を拡大。

これで、再生して係数の値が動いたら、ひとまずOK。

音声のサンプル化のの注意点
ちなみにこれはバグかもだが、

マテリアルプロパティ→サーフェス→係数

の数値はリアルタイムで動かないので、シェーダーエディターの係数の数値の方を確認する。

あと注意点だが、この音声のサンプル化は最初ほんとにやりにくくて、、上記のように選択していても「音声のサンプル化」がグレーアウトしているときがある。
これは、現在のフレームがそのオブジェクトが非表示の場合に起こる。なので「音声のサンプル化」をする際にはオブジェクトを表示しておかないといけない。
例えば音声を0フレームに合わして「音声のサンプル化」をするなら、0フレーム目は表示にしておく必要がある。

それから音声を作り直した際は、一旦キーフレームを消すと面倒なことになるので、音声のサンプル化をやり直す際は、消さずにそのまま上書き(もう一度新しい音声ファイルで「音声のサンプル化」)すればよい。

エンベローブモディファイア
ただ音量が小さいと変化はないので、それを修正します。

nキー→モディファイア→モディファイアーを追加→エンベローブ

で、制御点を追加。

波形をホイールで縮小して確認しつつ、真ん中の数値を下げながら、右側の数値を上げると、音量が変わらずに波形のみ強弱が出来る。

これで口パクが出来ました!!


Blenderでこれをしている情報が全くなく、でも技術上出来るはずだと思ってたら出来ました!!

やっぱりBlenderは機能が多すぎて、それ相応に特化したソフトを使うより操作がかなり難しいです。。。

あとはランダムで瞬きでも入れようか。

キャラクターのまばたき

まばたきをキーフレームで表現するにはBlenderではかなり面倒で、そもそもプログラミングでいうrand()関数などを使いながら1か0を設定すると早いわけだが、それを使わずに遠回りしながらGUIでちょこまかちょこまか操作するような手順になる。

他のソフトで試したことはないが多分一発で行けると思うし、もう一度言うがBlenderではかなり面倒だ。

データの準備

同じくまばたき用のイラストを準備して、3Dビューポートに重ねるように挿入しておく。

一番手前に位置しておく。

キーフレームの登録

シェーダーエディター

シェーダーミックスでの分岐
で、同じようにその画像をシェーダーミックスで分岐する。

係数へのキーフレーム割り当て
そして同じように係数にキーフレームを割り当ててグラフエディターへ。

グラフエディター

今回は音声とは関係ないので、すぐモディファイアを、上から以下の順番で追加していく。

ノイズモディファイア
ランダム関数で0と1としたいとこだが、今のところランダム生成はノイズモディファイアを使うしかない。

スケール 0以外。0だと無しになるので。ただしあまり上げ過ぎない。上げ過ぎるとまばらになる。
強さ がっつり上げる。最終確認時に完全に矩形波になるように。そうしないと画像が半透過になってしまう。

リミットモディファイア
Y最小 0
Y最大 1

階段モディファイア
ステップサイズ 10くらい

これで一応瞬きにはなるが、まばたきの時間が長い時もあるんですよね。。。

瞬きの最大時間を指定したいけど無理っぽい。


結局これはPythonプログラミングをしないとできなかった。

一応できたので、また落ち着いたらアドオンにして公開しようかな。



Blenderは複雑で超分かりにくくて難解だけど、プログラミングで何とか出来るところはせめてのも救い。。。

最後に・・・

今回は
  • キャラクターの口パク
  • キャラクターのまばたき
についてまとめてみました。

最後までお読み頂きありがとうございました。

[カテゴリ]

2025年06月08日

関連記事

エンプティとはBlenderのエンプティ(Empty)は、レンダリングされないけど3Dビュー...

2025年04月18日

BlenderのレンダリングエンジンであるEEVEEとCyclesは、それぞれ目的や仕組みが大きく異な...

2025年07月14日

ミラーモディファイアで反転良く上げられるのは、ミラーモディファイアがあるが、左...

2025年05月03日

結局マテリアルとシェーダーとテクスチャとノードの違いは何なのか?いまだ...

2025年04月19日

スピンツールは、指定した軸を中心にメッシュを回転・複製して回転体(円弧や円柱など)を作...

2025年05月11日

Copyright© 2021-2025 iphone-photo-movie.com All Rights Reserbed.

当サイトに掲載している文章、画像などの無断転載を禁止いたします。