ミルクボーイの漫才風CM全部みる

2019年にM-1グランプリで優勝して以来、ミルクボーイを起用した漫才風CMを本当によく見るようになった。
どうも「オカンが忘れたもの」のシステムは商品紹介と相性バツグンで、笑いも入れつつ適度に情報を提示しながら宣伝するのにちょうどいい構造のようである。
が、何気なく見ていると、どこか違和感のあるヘンなCMが多いように思えてきた。

ミルクボーイの漫才はもともと商品紹介にすぐれたフォーマットなのだが、さらに微調整してCMに適応しているようなのだ。

ということで、ミルクボーイのシステム漫才の仕組みを概観したのち、Web上で閲覧できるミルクボーイの漫才風CMと比較して、本ネタとの構造的な違いやCM化にあたって行われている工夫を見ていこう。

本ネタとCM

まずは比較のために、コーンフレークをテーマとしたこちらの二つの動画を見てみよう。

www.youtube.com 本ネタ「コーンフレーク」

www.youtube.com CM「グラノラハーフ編 楽屋裏編」

どのくらい「違い」があるだろうか?

システム漫才の流れ

ミルクボーイの本ネタをフローチャート化すると、次のようになる。 f:id:xcloche:20220214193221p:plain

ツカミ

漫才のツカミではまずは駒場が会場から何かを受け取るジェスチャーを行い、内海が「①あーありがとうございます、いま○○をいただきました こんなんなんぼあってもいいですからね」と受ける。ここで受け取るのはもらっても困るもの、なんぼあってもいいわけないものなことが多い。

メイン導入

メイン構造の導入部は、駒場の「ウチのオカンが好きな(ジャンル名)があるらしい」から入り、そこからなんやかんやあって忘れてしまったその名前を内海が一緒に考える「ほな俺がね、オカンが一番好きな〇〇一緒に考えてあげるからどんな特徴いうてたか教えてみてよ」の流れになる。ネタによってはここで変化があり、「好きな(ジャンル名)がある」と聞いた時点で「わからへんのでしょう?」で受ける(ミルクボーイのいつものシステムを対象化した)パターンや、「オカンが好きな(ジャンル名)のものなんて○○くらいでしょ」で受けるパターン、またその発展で「いや、オカンが好きな(ジャンル名)は絶対に○○や」と言う決めつけを連呼するループに入るパターン(内海の強弁ループ)などがある。内海の強弁ループは後のメイン構造の中でもたまに挿入されるサブ構造になっている。

メイン構造

駒場によって特徴が提示され、それを元に内海の主張が二転三転するのがメイン構造である。 メイン構造はヒントアンチヒントによって構成されている。

ヒントパートでは、「コーンフレーク」だと「なんであんなに栄養バランスの五角形がでかいのかわからん」のように、テーマとなるものの真の特徴が提示される。特徴を聞いた内海は「そんなもんコーンフレークに決まりや」と、テーマのものであることを肯定し、「あの五角形には実は牛乳が含まれているのを俺は見逃さへんよ」などの補足説明で毒を入れる。

アンチヒントパートでは、「コーンフレーク」だと「死ぬ前の最後のご飯もそれでいい」のように、テーマとなるものの一般的に偽の特徴が提示される。内海はこれを受け、「あー、ほんならコーンフレークと違うわ」と、テーマのものであることを否定し、「コーンフレークはまだ寿命に余裕があるから食べてられる」のように補足説明で毒を入れる。

オチ

最後は駒場の「オトンが言うには〜」からはじまるオトンによるかすりもしないトンチンカンな推理でオチ、というのがミルクボーイの漫才の主な流れである。

CMのシステム

たくさんミルクボーイの本ネタとCMをみたところ、どうも本ネタのシステムは上で述べたように展開する一方、CMのシステムでは別のサブルールが適用されることがある。CMシステムのサブルールには次のようなものがある:

  1. ツカミで本当になんぼあってもいいものをもらう
  2. アンチヒントが偽の特徴ではなく、テーマ商品の知られていない特徴
  3. オトンのトンチンカンな推理ではなく、「実際の商品が出てくる」オチ
  4. 毒が弱い

順番に見ていこう。

ミルクボーイがCMでもらったなんぼあってもいいもの

なんぼあってもいいわけがないもの(本ネタのシステム)

  • 跳び箱の6段目
  • 警察手帳
  • むちゃくちゃ長い延長コード
  • 来客用スリッパの左側
  • 宝くじの当選番号を決めるルーレットの矢
  • どこかの信号機
  • 長めの蛇口
  • 理髪店前の赤青白のグルグル回るやつ

本当になんぼあってもいい/スポンサーが売りたいもの(CMのシステム)

  • 十連ガチャ
  • デカビタCのCM
  • 拳銃情報*1
  • しろまるひめグッズ
  • 善玉菌
  • ウルトラライトダウンを収納する袋
  • ヒートテックが入ったチャック付きの袋
  • CO2センサー

どっち?

  • 広告のスキップボタン*2
  • Wi-Fiのパスワード
  • でびるよおよお・そくじゅじょう

アンチヒントがなく、全てがヒントである(オールヒント)CM

www.youtube.com 明治QUARKのCM

www.youtube.com モンストのCM

これらの動画と冒頭にあげた「グラノラハーフ編 楽屋裏編」が、アンチヒントがなく、すべてが商品説明になっているCMの例である。

グラノラハーフやQUARKのCMではメインテーマのものはクライマックスになるまで出てこず、ヒントをもとに「ヨーグルト」→「チーズ」と内海の推量が変化していく、という変則構成になっており、商品である「明治QUARK」がヒントの特徴すべてを満たすものであることが最後に明らかになる。

モンストのCMでは、駒場側の「そのソシャゲは気前がいいキャンペーンをやっているらしい」メッセージに内海側が「モンストはそんなに気前がいいはずがない」立場を崩さないことで普段の本ネタのスタイルと一見同じ流れになっているが、その実本当に気前のいいキャンペーンをやっているわけなので本ネタの流れとしては成立していないという不思議な構造になっている。

明治QUARKに至っては「ミルクボーイの鉄板ネタには珍しい、まさかの展開が!?」とこの展開に自覚的なコピーを動画タイトルにつけている。

限られた時間に情報を詰め込むためであろう変則システムのこの工夫、普段のスタイルを意識して聞いてしまうと変な不安になるところもある(真/偽の対立構造が消失しているので)。

「実際の商品が出てくる」オチ

上の明治QUARKのCMで、駒場が「いやわからへんねんな」から実際の商品を懐から取り出して「パッケージが妙にオシャレやねんな」「いやあるんかい 先言えよ」「ほな食べてみよか」と展開しているように、オチを「これやねんけどな」にして実際の商品を提示して見せる流れは強いサブシステムで、いろいろなCMで採用されている。

中でも関西ペイントの「接触感染対策テープ」CMでの、オトンのトンチンカン推量からの商品提示二段オチがめちゃくちゃ気持ち悪くていいのでオススメしておく。 www.youtube.com 合成背景のグリーンバックが……

ミルクボーイの漫才では、テーマとなるものの偏見に基づくあるあるの毒を吐く構図が重要なのだが、CMではテーマ商品の宣伝をする関係上、毒にあたる部分がなんかボンヤリしていたり、弱毒化しているのも注目である。

中でも「デカビタ」は、元々ミルクボーイが本ネタとしてデカビタをテーマにやっていたところにCMキャラクターとして起用され、本ネタに近い構造のCMが作られた経緯があり、同じテーマについて本ネタバージョンとCMバージョンの比較ができる稀有なサンプルである。

www.youtube.com デカビタ本ネタ

www.youtube.com デカビタCM

どちらも2分尺の両者を比較してみよう。

アンチヒント「売り切れてたら見つかるまで探し回る」を受けての「ほなデカビタと違うか、デカビタが売れてたとしてもね、リアルゴールドでまかなえるんやから」のキラーツッコミは当然CMではダメなので「デカビタはね、スーパーや自動販売機で見かけたらなんか買ってまうくらいのやつなんやから」に差し替えられている。

デカビタあるある自転車止めてたら絶対カゴに入れられてるらしいは本ネタ内のあるあるでは一番面白いのだが、もちろん企業イメージ最悪なのでカットされている。

全レビュー

ほか、いまWebで閲覧できるかぎりのミルクボーイの漫才風CMとその特徴を表にまとめた。ミルクボーイの漫才風CMをみたい人は適宜参考にしてほしい。

docs.google.com

本当になんぼあってもええもの

ミルクティーにするとうまい紅茶。20箱以上買っている

非常食ようかん。たまになんでもないときに食べる

*1:警察による、遺産などで見つかった拳銃に関する情報を提供するよう求める啓発動画

*2:Youtube広告で、「今は押さんといてくださいね」というメタ的なツッコミがある

Wordleの最善手をめぐる巷説と、真の答え

最近、twitterで🟩🟩🟨⬜⬜みたいな謎の色付き正方形がいっぱいシェアされてくるようになりました。

これは「Wordle」というパズルゲームで、5文字の単語を入力して得られた手がかりから、正解の5文字の単語を当てるゲーム(その文字が正解に含まれていて位置もあっていたら🟩、含まれているが位置はあっていないときは🟨でヒントが出る*1)です。

www.powerlanguage.co.uk
Wordle、おもしろいですよね。

aseruneko.github.io
日本語版も有志によって作られたようです。

この記事では、インターネット上で囁かれているさまざまなWordleの戦略を概観・レビューした後、情報量を用いたもっとも効率的な単語の選び方を実践・解説します。

パッと思いつく戦略

プレイしていてまず思いつく戦術はこんなところでしょうか:

①いろんな単語によく含まれる文字はヒントになりやすいはず

  • qとかzが含まれる単語は少ないので、手がかりに入れてもあんまり参考にならなそうなので

②一度🟩で確定したところに次またその文字を置くのは損

  • わかっていない⬜を🟨にするチャンスを逃しているので

  • ヒントを集めたあと、最後に当てるときだけ入れたほうがよさそう

③なるべく多くまだ使ってない文字を入れたほうがいい

  • ⬜で単語中に使われていないことが確定した文字を使うのは、ヒントを得るチャンスを逃しているので

Wordleでは最初は色のヒントなしで単語を入力するわけですが、では、このときにより多くの情報が得られる「初手」の単語は何がいいでしょうか?
巷ではさまざまなヒューリスティックな手法による初手5文字が提唱されています。

文字ベースの手法

試み①:出てくる頻度が多い順に文字を使う

slc.is

先ほどのパッと思いつく戦略で挙げたように、「とりあえず色のヒントが得られやすそうな単語を使おう」というのがいちばんはじめの発想です。Wordle全単語リスト*2 (wordleのjsファイルから候補として入れられる単語リストを取り出してきたもの)で登場したアルファベットを上から順番に並べてみると、次のようになります。
f:id:xcloche:20220124205753p:plain

上記のブログでは、上から順にs, e, a, o, r, i, l, t,.n, u,... がよく使われているので、上位5つを含む単語、aeros, soare, aroseがいいんじゃない? 二手目もunlitあたりがいいんじゃない? というアイデアを提示しています。

初手案:aeros, soare, arose

試み②:その位置ごとの出現頻度が多い順に文字を使う

では、aeros, soare, aroseの三つがあったとき、どれがいちばん色のヒントを得やすいでしょうか?
ここで上記のブログが提案しているのが、位置ごとの文字の出現頻度です。
「q」を含む単語を例にとって考えてみましょう。qで始まる単語はあっても、qで終わる単語はほぼないので、5番目にqがある単語よりも1番目にqを置いたほうがよりたくさんヒントが得られそうです。
そこで、彼らは位置ごとの文字の出現頻度を比較して、aeros, soare, aroseの中でもっともスコアが高いものを選びました。

それぞれの位置でのアルファベットの出現が独立と仮定して、
P(aeros) ∝ P(1番目がa) P(2番目がe) P(3番目がr) P(4番目がo) P(5番目がs)
の近似をするのに近い発想ですね(ブログではスコアは加算していますが)。

結果、試み①で得られたうち、aerosのスコアが高かったとのことで、文字ベースでは「aeros」がいい!と結論されています。

初手案:aeros*3

文字ベース手法の課題

位置ごとの文字頻度を考える方法はいい線いっているように見えますが、仮定が多かったり根拠が不明瞭だったり、文字順にある相関(sのあとはaがきやすい、qのあとは必ずuがくる、など)等の情報をとりこぼしたりしています。

なるべく多くの色のヒントが出そうな初手にしよう、という発想はよさそうなのですが、そもそも、「よく出る文字がいっぱい入ってるのがいい手がかり」ってどういう根拠なのでしょうか? なんとかして単語のよさを定量的にはかることはできないのでしょうか?

ここからは、これらの手法がある程度よい方法になっている背景の原理や、原理から直接的に導かれるもっとよい手法を考えてみましょう。

単語ベースの方法

Wordleというゲームは、換言すれば、手がかりとなる単語を入力して出てきた色のパターンをヒントに、全12972単語から候補を1つに絞りこんでいくゲームです。
上で紹介した文字ベースの手法は、「よくある文字でできた単語を手がかりにすると、色のパターンにバリエーションが出やすい→絞りこみやすい」ことから、ヒューリスティクスとして有用だったわけで、原理そのものである「その単語はどれくらい単語候補を絞れるか?」を直接計算して比較するのが、以下の単語ベースの戦略になります。

試み③:ミニマックス法

Automatic Wordle Solving. Taking out the fun of Wordle is fun by… | by Yotam Gafni | Jan, 2022 | Towards Data Science

手がかり単語を入力したときに出てくる色のパターンは🟨🟩⬜⬜⬜とか🟩🟩🟨⬜⬜とかですが、これは逆に見ると、12972単語あったのが、手がかり単語によってそのパターンに属する単語のグループだとわかった、と解釈できます(たとえば、"aeros" を入力してパターン⬜🟨⬜🟩🟨 が返ってくるのは、答えが escot, estoc, estop, eusol, sheol, shmoe, syboe のどれかだったときだけ)。
ここで、ミニマックス法は、「「最悪の場合(属する単語数が最多の色のパターン)でも○○個までは絞りこめますよ」の、○○がいちばん小さくなる手がかり単語を見つける」考え方です。
この手法の利点は、「最悪でもn回でゴールできる」が言えることで、ミニマックス法を使えば、5回以内に必ずクリアできる(決まった手続きに従って単語を出せば、当てられない単語はない)ことが保証されています。

初手案:aesir

しかし、この方法でもまだ絞り込みが最悪ではなかった場合の色のパターンにそれぞれ何単語が属しているかの情報が使えておらず、平均のスコアをあげるのにまだ改善の余地があります。
属する単語が最悪(マックス)付近の個数のパターンがたくさんあるのか、満遍なく小さく分割されているかで状況が変わってくるわけです。使える情報を余すことなく活用するのが、以下の平均情報量(エントロピー)最大化の手法です。

ここから先はパッとみた感じ公開された試みがなかったので、自分で実装してみることにしました。

試み④:平均情報量最大化(Greedy)

情報量は、簡単にいうと、「その事象が発生した」という情報がどれくらい意味をもつか、という尺度です。よくあることだと小さいし、滅多に起きないことだと大きな値になります。 確率pでおこる事象が観測されたとき、その事象がもつ情報量は - log(p) であらわされます。pが小さければ小さいほど大きくなるので、滅多にないことが起こったならそれは大きな情報を持っている、とする定義になっています。

確率試行で得られる情報量の期待値が平均情報量です。とれる選択肢のうち、平均情報量が最大になる試行を選ぶことで、得られる手がかりを最大にすることができます。

Wordleにおける確率試行とは何か? その答えは、単語を入力してカラーパターンを得ることです。
得られるカラーパターン(🟩🟩🟨⬜⬜, ⬜⬜⬜⬜⬜, ⬜🟨⬜⬜🟨など)の組み合わせは、色数(🟩, 🟨, ⬜)の文字数(5)乗で243通り*4あり、「どのカラーパターンが実現するか」を確率として考えることで平均情報量が計算できます。

平均情報量Hの表式を書き下すとこんな感じになります:
f:id:xcloche:20220124211547p:plain

ここで、それぞれのパターンになる確率は、p(🟩🟩🟨⬜⬜) = (色パターンが 🟩🟩🟨⬜⬜になる解候補の数)/(解候補の総数)のように計算されます。

平均情報量が最大になるのはカラーパターンに属する単語の数がパターンによらず均等に近いときで*5、すべての単語について平均情報量を計算することで、一回の手がかりで得られる情報の期待値が最大になる単語を明示的・定量的に発見することができます。
計算してみると、tares(スズメノエンドウ)が6.2bitほどで最大(平均的に一手めで候補を12972個から200個程度まで絞れる)になることがわかりました。

初手案:tares

とりあえず一手目だけみると、もっとも多くの情報を得ることができる単語は、TARESです。

試み⑤:平均情報量最大化(多層)/なんかすごい人

ここまできたら正直もうあんまり変わらないんですが、実は、もうちょっとだけ考えることがあります。

というのも、taresは十分強い選択ですが、平均情報量最大化は実は一手目だけで考えるのはあまりよくない(一手目では最大でも、二手目以降の影響でひっくり返りうるGreedyな選択のため)です。
全体最適まで考えると計算量が爆発してしまうので、二手目まで&候補に残った単語だけのリストから新たに選ぶ、という制約で二手目時点での平均情報量を最大化してみたところ、salet(中世の鎧)(二手目時点で10.3bit)が最良の初手、となりました(taresだと10.25bit)。「SALET wordle」などで検索するとSALETがトップのなんかすごい別アプローチの手法なども出てきたので、このへんも読むと楽しいかもしれません(ぼくはまだしっかり読めてません)。Wordleチートシートもあるよ!

The best strategies for Wordle - Things (various)


読め

DUO 3.0

DUO 3.0

Amazon
英単語を勉強し、Wordleに勝て

情報理論を学び、Wordleに勝ち、競馬にも勝て

おまけ

あとでSALETの記事を読んでいて引っかかったのだが(というかこの記事を書いていて見つけたのだが)、どうもWordleの答えは回答として使える12972単語より少ない頻出2315リストからとられている(マニアックな単語ではなく、ある程度身近な単語が使われている)らしく(wordleの実行ファイルのjavascriptを見ると「La」と「Ta」という形で単語リストの変数が分けられており、どうも解答はLa側からのみ選ばれているっぽい)、解答候補がLaのみと仮定して計算してみると、taresではなくsoareがgleedyな場合の平均情報量最大(5.89bit)となる(Taのほうの「回答可能だが解答ではない」単語はさまざまな単語の複数形が含まれるため、末尾のsが強くなっていたと思われる)。
ちなみにsoare(イギリス英語で若鷹)もtares同様、Laの解答候補リストをうまく分割はするものの、これ自体はTa単語なので一発正解はなさそうである。

f:id:xcloche:20220127182937p:plain
Laリストのみの出現アルファベットの頻度を見るとsがだいぶ順位を下げているのがわかる
なんかもう飽きたのでやらないが……

ルールのスクリプト(参考:GitHub - yotam-gafni/wordle_solver: A python wordle solver

# cue5文字とanswer5文字を入れると、カラーパターン配列([0,1,0,0,2]など)を返す
# 0:⬜, 1:🟨, 2:🟩
def cue_to_color(cue, ans):
    color = [0 for i in range(5)]
    
    for c_ind in range(5):
        if cue[c_ind] == ans[c_ind]:
            color[c_ind] = 2
            ans = f"{ans[:c_ind]}*{ans[c_ind+1:]}"
    for c_ind in range(5):
        if cue[c_ind] in ans and color[c_ind] == 0:
            color[c_ind] = 1
            ind_app = ans.find(cue[c_ind])
            ans = f"{ans[:ind_app]}*{ans[ind_app+1:]}"
    return color

単語セットからのエントロピー計算(wordのリストは前出のgithubにあります)

import numpy as np
words = [word.strip() for word in open("words.txt","r").readlines()]
    
# cueとanswerの候補リストを入力すると、
# カラーパターン(key)と、そのカラーパターンになる絞り込まれた単語リスト(item)を返す 
def cue_to_patterns(cue, answers):
    patterns = {}
    for answer in answers:
        color = cue_to_color(cue, answer)
        if tuple(color) not in patterns:
            patterns[tuple(color)] = [answer]
        else:
            patterns[tuple(color)].append(answer)
    return patterns

# パターンと単語の辞書を入力すると、エントロピーを計算
def patterns_to_entropy(patterns):
    counts = np.array([len(patterns[item]) for item in patterns])
    freq = counts/counts.sum()
    entropy = -freq.dot(np.log2(freq))
    return entropy

# 好きな単語を入れてみて、その単語がどれくらいいい初手か計算してみよう!
patterns = cue_to_patterns("salet", words)
entropy = patterns_to_entropy(patterns)

# patternsの中から実現パターンを参照して更新し、
# エントロピー最大のcueを探して入力したら、平均情報量最大化ソルバーです

*1:答えに含まれているより多くの回数、手がかりに同じ文字が含まれていたときは、①位置が同じもの ②順目が早いもの の順の優先度で、答えに含まれているその文字の回数だけヒントが表示されます(たとえば正解ではoもtもひとつの「point」のときに、o, tがそれぞれ二つずつある手がかり「tooth」を入力すると、🟨🟩⬜⬜⬜になる)。

*2:https://slc.is/data/wordles.txt

*3:ちなみに、この確率をaerosのアナグラムだけでなくすべての答え単語について計算すると「sores」が位置と出現頻度が独立と仮定したとき「いちばんありきたり」な単語のようです(仮定のもと、いちばんどこかしらでヒントの色が出やすい)。ブログでは暗黙に「同じ文字は出てこないほうがいいヒント」が仮定されていますが、文字被りがない候補でも実は「aeros」ではなく「cares」がトップになります

*4:🟩🟩🟩🟩🟨みたいなパターンはありえないので、実際はもうちょっと少ない

*5:ヒントが出ない確率が高いために、ある意味で、文字ベースの手法は近似的にこれに近いことを行っています。満遍なくパターンが分かれてそれぞれが小グループになるのが、そこからさらに分割する上でいい状態、というイメージ

キレキレダンスとアニメーション

先日、アイドルマスターシンデレラガールズ・スターライトステージ(デレステ)が「涼宮ハルヒの憂鬱」とコラボし、いくつかの楽曲がゲーム内で実装され、音楽ゲームとしてプレイできるようになった。

中でもアニメのエンディングテーマ「ハレ晴レユカイ」のダンスは評判で、「すごい再現度だ」とする比較動画は何度もTwitterのタイムラインに流れてきた。


確かにアニメをよく再現した、いいモーションである(ぼくは「ワープでループなこの想いは」のところのナナさんの動きが好き)。が、いざ並べてアニメのキレキレのダンスと比較すると、デレステのダンスMVはもっさりして見えるというか、どこか動きに精彩を欠くように感じられないだろうか?

過去記事では、2Dアニメーションと3DCGの差異について、顔のパーツを前に持ってくる技法や画角、カメラワークなど、主に2Dアニメの奥行き方向に関するトピックについて書いた。

xcloche.hateblo.jp

今回はアニメーションのモーションに着目して、モーションキャプチャでとってきた動きと典型的な2dアニメーションの動きの差異から、このデレステダンスの違和感について考えていきたい。

リミテッド・アニメーション

一番大きな違いは、一般的なアニメは24fpsで作られ(秒間24枚の絵を表示する)、この24枚の中でも2コマや3コマ同じコマが使われる(2コマ打ち、3コマ打ちいわれる、実質12fps/8fpsのリミテッド・アニメーション)に対して、デレステはフルの60fpsで3Dモデルが動いていることだ。ヌルヌルである。

3DCGでセルルックアニメーションを製作する際も、ヌルヌルさせず多少間引いたほうが「アニメとして自然に見える」という話題は、前回の記事でも挙げたのであった。

ただし、モーションキャプチャで取り込んだモーションを24fpsで再生するだけで「アニメのキレキレのモーション」になるかというと、(けっこうこれだけでそれっぽくなるのだが)話はそう単純ではない。

アニメの世界は、我々とは異なる物理法則のもとで動いているのである。

アニメーションのタメとツメ

リミテッドアニメーション(コマ数の少ないアニメ)は現実世界以上に、緩急を強調する傾向があるとされる。これらは「タメ」と「ツメ」となどいわれ、予備動作を長くして強調する(タメ)一方で、素早い動きは少ないフレームでサッと描く(ツメ)。

「緩急を強める」というのは、換言すれば、速いものはより速く(枚数少なく)、遅いものはより遅く(枚数多く)する、ということだ。

解説ページなどをいろいろ見るに、CGアニメーションのモーション製作の現場では緩急の強調は当然のように意識されている*1ようだが、ダンスモーションをモーションキャプチャからおこすとき、つまりリアルの動きをバーチャルに取り込む際、事後的にタメ・ツメを(強力に)補正することはあまりないように思う。(後述するが、もちろんタメ・ツメをしすぎないのにも相応の理由がある)

ここではあえて、モーションキャプチャや現実の動画撮影でとってきたリアルのモーションを無理やりにタメ・ツメ強調の2Dアニメ的モーション表現にしてしまうにはどうすればいいか考えてみたい。

タメとツメを補正する

参考:すごいもので、そういう研究をしている人がいる。 http://www.cgg.cs.tsukuba.ac.jp/projects/2013/motion_frame_omission/data/gcad.pdf

ダンスの動画をタメとツメで緩急をつけてキレキレにするアルゴリズムを考えてみよう。実装されたコードがパッと見つからなかったので、夏休みの自由研究とでも思って先行研究を参考にオレオレ実装をしてみる。どうデザインすればいいだろうか?

まずは動画のデータを読み込み、(前のフレームとの画素の差分などから)フレームごとに物体の速度を何らかの形の時系列で表現してみる(スピード関数を作る)ことからはじめよう。スピード関数をどう定義するかは考えどころだが、カットの切り替わりやカメラのズームイン/ズームアウトしてもあまり値が変わらない、標準的な物体の動きの挙動にロバストな指標にするのがよさそうである*2

先に述べた通り、タメ・ツメのいちばん簡単な特徴は、速いものをもっと速く、遅いものをもっと遅くすることである。これは、元のフレーム(60fpsの青い等間隔の点)から、24fpsの表現で使うフレームをサンプリングする(赤い点)際、スピード関数が大きいところはよく間引き、スピード関数が小さいところからはいっぱいサンプリングする、ということに対応する。

Image
青い点(60fpsの等間隔)からオレンジのスピード関数にしたがって、赤い点をサンプリングする

こうして不均等にサンプリングした集めた赤い点を等間隔に並べて再生すると、遅い動きの部分はゆっくりと予備動作を描写する一方で、速い動きの中間の表現は少ない時間(=少ない枚数)で表現される、というリミテッドアニメーション的なフレームのサンプリングが行えるワケである*3

補正との比較

AISTのダンスデータセットから適当に取ってきたダンス動画をタメツメ補正してみた。
aistdancedb.ongaaccel.jp

上が均等割24fps、下がタメツメ補正の動画である。
パッと見でもダンスがキレキレになっているのがわかる(23秒付近の首を左右に振るシーンなどがわかりやすい)。

デレステのほうはこんな感じである。

(正直24fpsにしただけでかなりヌルヌルの違和感がかなり減って上下の違いがあまりわからないのだが)手を上下に振るシーンや、雪美ちゃんのソロパート、30秒時点での三人の左右移動などがより躍動的になっているのがわかる。コマ送りでみると、手を振る中間の枚数が減らされているのを確認できる。

身体性の呪縛

もちろんここには動きのリアリティとのトレードオフがあって、緩急を強調すればするほど動きは(アニメ的には自然でも、リアルから見ると)不自然になってしまう。アイドルの3Dモデルを動かすゲームであれば、ヌルヌル描画の方が生っぽくて喜ばれる、という状況も大いにあるだろう。

が、アニメのもつケレン味ってこういうところ(緩急の強化など)から出でくるものでもあるし、モーションキャプチャで取ってきたデータをゴリゴリにタメツメ処理してみるのも面白そうだな〜、と、いろいろ遊んでみて思った次第である。

始めからアニメ/CG上でデザインされたモーションと比べると、モーショントラッキングで取ってきた動きには、人体の身体性による呪縛があるといえる。人間には難しいけれどもCGのモデルであればいとも簡単にできる、メチャクチャかっこいい、彼ら・彼女らのエクストリームなモーションが、気づかないうちに排除されている可能性があるのだ。

遊べそう

現状、目まぐるしくカットが変わったりフレームイン/アウトがあってスピード関数がうまい表現になっていないなあとか、そもそも姿勢推定をした方がいいカモとか、フレームの中間表現を生成したほうがいいカモとか、大事なフレーム検出の技術があるらしいぞ*4とか、いろんな興味があるので、気が向いたらこのあたりはまた触ってみたい。

*1:SHIROBAKOでもこれを扱ったシーンがあった(戦闘機の中で動物をキャッチするシーン?)記憶がある

*2:今回の例ではめんどくさいので特徴点の移動距離平均のような量を使っている。ここはかなり工夫の余地がありそう

*3:どの程度スピードによるサンプリングの傾斜をつけるか(グラフではスピードが最大値のとき、スピードが最小値のときの1/3しかサンプリングしない)はタメ・ツメ度合いを表すパラメータになっている

*4:https://ieeexplore.ieee.org/document/6909825