スクスタの「クリティカル率」を調べてみませんか?
(まず、クリティカル率について説明します。調査支援ツールをすぐに使いたい方は「使い方」まで飛んでください。)
クリティカルは強い!!!!!!!
スクスタはリズムゲームではない。リズムアクションRPGである。
ということで、スクスタでは、RPGよろしく、ライブするスクールアイドル達が「会心の一撃」的な技を使うことができます。それがクリティカルです。クリティカルは、アピールするスクールアイドルのパラメータに応じて決まった確率(クリティカル率)で発生し、獲得ボルテージがなんと50%もアップします。これだけボルテージを引き上げられる要素は他になく、非常に強力です。
なら、クリティカル率が高いキャラが強いのかというと、一概にそうは言えなさそうなのが、スクスタの難しいところです。スクスタの獲得ボルテージは、アピール値をベースに計算されます。よって「クリティカル率が高いが、アピール値が低いAさん」より「クリティカル率は低いが、アピール値が高いBさん」の方が強い場合も考えられます。このAさんとBさん、どちらが強いのかを判断するために必要な情報こそが、クリティカル率です。Aさんがクリティカルを80%出せるのか、それとも60%しか出せないのか、その差が、AさんとBさんを天秤にかけるときに大きく影響してくるのです。
クリティカル率に関する先行研究
クリティカル率については、スクスタ学会の権威達により、かなり研究が進んでいます。特に、おーかみ(@riruha178)さんとふぁりー(@506Farley)さんが素晴らしい成果をあげており、解明まで一歩手前な感があります(すごすぎる)。
従来研究にもとづき、クリティカル率に関する仮定をまとめると、ポイントは以下2点です。
1. クリティカル率は、カードのテクニック値に応じて線型的に増加する。
2. テクニック値がアピール値より低いカードは、クリティカル率が40%減少する。
1については、クリティカル率がシンプルに計算可能、かつ未検証の部員に対してもクリティカル率の予測が可能という、素晴らしい成果です。
2については。。。これは衝撃でした。。。なんと、アピール > テクニックとなる部員は、1の式で導出したクリティカル率に対して、とんでもないデバフを受けるようなのです。
例えば、大人気の松浦果南さん(初期)も、このデバフの対象となっており、割と高いテクニック値のわりにクリティカルが出にくいという検証結果が出ています。
さらなる研究が必要
クリティカル率にデバフを受けるカードは、概ね「アピール > テクニックとなるカード」とは分かっていますが、まだデータが少なく、断定できていないのが現状です(一部例外も観測されています)。また、おーかみさんらが収集している、テクニック値に応じたクリティカル率の測定結果も、サンプルがまだ少ないため、回帰分析に精度向上の余地があります。今まさに「クリティカル率検証勢」の登場が求められています。
でもやりたくない
クリティカル率の検証方法は以下のとおりです。
1. プレイ動画を撮る。
2. 動画を見返してアピールとクリティカルの数を数える。
3. これをクリティカル数千回分やる。
マゾい。
いかに偉大か、先人達は。
ですが、もう手ずからクリティカルを数える必要はなくなります。
プレイ動画を分析してCRITICALを数えるプログラム
これで、マゾい作業から解放されます!今まで色々とプログラムを作ってきましたが、今回のやつはかなりお気に入りです。ぜひ使ってみて下さい!機能はこんな感じです。
・プレイ動画から、特定のカードのアピールだけを抽出(全自動)
・さらに、抽出したアピールをCRITICALとGREATに分別(半自動)
・CRITICALの数とCRITICAL率を算出
ここから、使い方を紹介します。
なお、Windows専用です。
動作確認環境: Windows 10(64bit)
使い方 1. インストール
このプログラムは、Pythonというプログラミング言語で作られています。Pythonを実行する環境が必要なので、まず始めにインストールして下さい。(インストール済の方は飛ばして下さい。バージョンが3系であれば問題ないと思います。ただし、3.8はダメでした。)
このページの下にある、「Files」から、「Windows x86 executable installer」を選択してインストーラをダウンロードします。64bitのWindowsを使っている場合は、「Windows x86-64 executable installer」の方がよいです。
ダウンロードしたインストーラを実行すると、Python実行環境のインストールが始まります。注意点として、以下画面の「Add Python 3.7 to PATH」に必ずチェックを入れて下さい。チェックしたら、「Install Now」を押し、インストールを進めます。
Pythonがインストールできたら、ツールをダウンロードします。以下GitHubのリポジトリを開き、ページ右上の「Clone or download」から「Download ZIP」を選択してダウンロードして下さい。zipファイルをダウンロードできたら、任意の場所に解凍して下さい。
解凍できたら、中に入っている、「0_install.bat」を実行します。これは、フォルダ上に、クリティカル率調査のための仮想環境を構築し、必要なPythonモジュールをダウンロードする処理です。インストールと名乗っていますが、フォルダ内に必要なファイルを展開しているだけです。消したければ、フォルダごと削除すれば、跡形もなく消えます。
これでプログラムを動かす環境ができました!が、もう一息準備が必要です。少し面倒ですが、自分でCRITICALを数えるより数百倍は楽だと思ってお付き合い下さい。
使い方 2. プレイの録画
CRITICAL率を調べたい部員をデッキに入れて、プレイ動画を録画します。ここで、いくつかプレイの条件があります。
・オートプレイにする。
・背景は2Dにする。
・ソロ曲でプレイする。
オートプレイは必須条件です。これは、プログラムが、CRITICALとGREATしか識別できない仕組みとなっているためです。
残りの2つは、検出率及び精度を向上させるための推奨事項です。特にこだわりが無ければ、2Dでソロ曲をプレイして下さい。
他に条件はありません。プレイ動画には、リザルト画面や曲選択画面が混ざっていても問題ありません。全てプログラムではじきます。
使い方 3. 検出用画像の準備 〜その1〜
このプログラムは、テンプレートマッチングという手法で、画像の検出を行います。これは、探したいモノの画像をもとに、ターゲット画像を走査して、類似度が高いエリアを探す手法です。つまり、画像の中から善子ちゃんを探すには、善子ちゃんの画像が必要となります。なので、善子ちゃんの画像を準備しましょう。
必要な画像は、以下のとおりです。
・CRITICAL率を調べたい部員のアイコン(以降、善子とする)
・CRITICALの画像
・GREATの画像
まず、善子のアイコン画像を準備します。先ほど録画したプレイ動画を、「0a_extract_all.bat」の上にドラッグアンドドロップして下さい。すると、「source」というフォルダができ、中に動画のスクリーンショットが展開され始めます。展開中でも構わず「source」フォルダを開いて、中から、善子がアピールしている瞬間のスクリーンショットを探して下さい。
ここで、検出精度を確保するために、以下条件を満たす善子を探してください。
・タップの演出(キラキラや波紋)が善子に被っていないこと。右側から降ってきたノーツをタップしたときが比較的よいです。
・タップしてから時間が経っていること。タップした直後は、アイコンの大きさが変化しており、検出に不適です。
以下の画像は良くない例です。タップ直後で、善子のアイコンが大きくなっており、しかもタップ演出が被っています。
良い例はこちらです。
いい感じの善子が見つかったら、次はCRITICALとGREATの画像を探します。善子と同様に、タップ演出が文字に被っておらず、時間が経って大きさが安定しているものを選んで下さい(キャラより表示時間が長いので、比較的楽だと思います)。
画像を探し終えたとき、まだ「0a_extract_all.bat」が動いているようであれば止めます。表示されているコマンドプロンプト上で、「Ctrl + C」を押して下さい。処理を中断するか確認されるので、「Y」を入力し、Enterキーを押すと処理が終了します。
使い方 4. 検出用画像の準備 〜その2〜
収集した善子・GREAT・CRITICALの画像を編集して、検出用画像に仕立て上げます。ここからは、画像編集ソフトを使用します。経験がある方は、手持ちのソフトを使ってください。ない方は、GIMPという画像編集ソフトをインストールして使うのがオススメです。以降の説明では、GIMPを使っていきます。
まず、善子のアイコンが映ったスクリーンショットから、善子だけを切り抜きます。GIMPを起動したら、画像をGIMPのウィンドウにドラッグアンドドロップして開きます。開いたら、左上のツールボックスから矩形選択ツールを選択し、善子だけを囲んで下さい。
善子を囲えたら、「Ctrl + C」→「Ctrl + Shift + V」の順に押して、囲った善子を新しい画像にします。画像を作成できたら、「Ctrl + E」を押して、画像を保存します。この画像は「icon.png」という名前で、ツールのフォルダに保存して下さい。
同じように、GREATとCRITICALの検出用画像を作成します。GREATとCRITICALが映ったスクリーンショットから、GREATとCRITICALの文字だけを矩形選択ツールで囲い、新しい画像を作成して保存します。この画像は「great.png」と「critical.png」という名前で、ツールのフォルダに保存して下さい。
なお、GREATとCRITICALは、文字全体ではなく、左側の一部のみ切り取った方が検出精度が良いような気がします。ツールのフォルダに、great.pngとcritical.pngの作成例を入れてあるので、参考にしてみて下さい。
これで、画像の準備は終わりです。以下の画像のように、ツールのフォルダに、作成した「icon.png」、「great.png」、「critical.png」が入っていることを確認して下さい。GIMPはまだ閉じないで下さい!
使い方 5. 検出パラメータの設定
プログラムに、テンプレートマッチングを行う領域を設定します。以下2つの領域を設定します。
・善子の検出領域
・CRITICAL/GREATの検出領域
設定値は、GIMPを使って決めることができます。GIMPで最初に開いた、善子が映っているスクリーンショットをもう一度開いて下さい。開いたら、矩形選択ツールを使って、善子の周囲を囲みます。ここで、以下2点を注意して囲って下さい。
・icon.png作成時に作った矩形が中に収まるように囲う。icon.pngより大きいサイズでないと、プログラムがエラーになります。
・矩形はなるべく狭くする。狭いほど検出速度が上がります。
icon.pngより気持ち大きめくらいの矩形を作るとよいです。
できたら、左側のツールバーに表示されている数字を確認します。これが設定値です。設定値は、ツールのフォルダにある「parameter.conf」に設定します。「parameter.conf」をメモ帳で開き、以下の画像のとおり書き換えて下さい。
次に、CRITICAL/GREATの検出領域を設定します。CRITICALが映っているスクリーンショットを開き、善子のときと同様に、critical.pngが中に収まる大きさの矩形で、CRITICALの文字を囲って下さい。囲えたら、以下の画像のとおり、「parameter.conf」を書き換えて下さい。
お疲れ様でした!これで準備は完了です。「parameter.conf」を上書き保存し、GIMPを閉じて下さい。いよいよ、ツールを動かしていきます!
(補足)検出パラメータ及びGREAT/CRITICALの検出用画像は、同じ解像度のプレイ動画を分析する限りは、流用可能です。次回以降は、検出したいカードのアイコン画像のみ準備すれば、次の「部員の抽出」の手順に移ることができます。
使い方 6. 部員の抽出
第1段階として、プレイ動画から善子を検出し、善子がアピールしたコンボを抽出します。プレイ動画を「1_extract.bat」にドラッグアンドドロップして下さい。「detected」というフォルダが作成され、検出処理が始まります。コマンドプロンプト上に進捗と、検出したフレーム数が表示されます。
善子を検出すると、そのフレームがdetectedフォルダに画像として保存されるので、確認してみて下さい。
ここで、検出が上手くいかない場合は、コマンドプロンプト上で「Ctrl + C」→「Y」の順に入力し、処理を止めて下さい。次に「parameter.conf」を開き、上側のDETECT_THRESHOLDを以下の方針で修正します。
・善子がアピールしていないときの画像が出力される→DETECT_THRESHOLDを0.1上げる
・何も検出されない→DETECT_THRESHOLDを0.1下げる。もしくは、GIMPを使って設定した「parameter.conf」を入力ミスしている可能性があるので、もう一度見直す。
「parameter.conf」の修正が終わったら、「99_clear.bat」を実行し、「detected」フォルダを一度削除します。その後、再度、プレイ動画を「1_extract.bat」にドラッグアンドドロップして下さい。
検出が上手くいっているようであれば、そのまま待ちます。進捗が100%になったら、何かキーを押して、コマンドプロンプトを閉じて下さい。
使い方 7. GREAT/CRITICALの分別〜その1〜
第2段階です。ここでは、抽出した善子のアピールを、テンプレートマッチングにより、GREATとCRITICALに分別します。「2_sort.bat」を実行すると処理が始まるので、終わるまでお待ち下さい。処理が終了したら、コマンドプロンプトで何かキーを押して閉じます。
「detected」フォルダを開くと、「critical」フォルダと「great」フォルダにそれぞれCRITICALとGREATの画像が仕分けされて入っています。中を確認して、検出ミスがないことを確認して下さい。ミスがあった場合は、手動でファイルを移動するか、以下手順でもう一度分別をやり直します。
仕分けミスがひどい場合→「2a_revert_sort.bat」を実行し、画像を全て「detected」フォルダに戻す。その後、「parameter.conf」の下側にあるDETECT_THRESHOLDを0.1上げて保存し、再度「2_sort.bat」を実行する。
「critical」フォルダと「great」フォルダの中身が正しいことを確認できたら、この処理は終了です。しかし、「detected」フォルダには、criticalにもgreatにも仕分けされていない画像が残っていると思います。これは、テンプレートマッチングの限界です。仕方がないので、残りの画像は手動で仕分けます。そのために、手動仕分けツールを作ってあります。
使い方 8. GREAT/CRITICALの分別〜その2〜
テンプレートマッチングで分別できなかったGREAT/CRITICALがある場合、これらを手動で分別します。「3_manual_sort.bat」を実行して下さい。すると、以下のような、仕分けツール画面が立ち上がります。
仕分けツールは、キーボード入力で操作します。以下、使い方です。
・「Enter」キー:画像を「critical」フォルダに仕分けて、次の画像に進みます。
・「q」キー:仕分けツールを終了します。
・「p」キー:直前の画像に戻ります。ミスしたときに戻って修正できます。
・上記以外のキー:画像を「great」フォルダに仕分けて、次の画像に進みます。
・左上に表示されている数字:全体の進捗です。
全ての画像を仕分け完了したら、ツールが閉じます。「detected」フォルダ内の画像が全て「critical」又は「great」フォルダに移動したことを確認して下さい。
使い方 9. CRITICAL数の集計
いよいよ最後です。「4_count.bat」を実行します。すると、以下の内容が表示されます。
・total notes:全アピール数(「critical」フォルダと「great」フォルダ内の画像の合計数)
・CRITICAL:クリティカル数(「critical」フォルダ内の画像の合計数)
・CRITICAL rate:クリティカル率(CRITICAL / total notes)
これでクリティカル率が計算できました!
引き続き、別の動画・カードでクリティカル率を検証する場合は、「99_clear.bat」を実行し「detected」フォルダを削除して下さい。
上手く動かない場合
今のところ想定されるエラーです。
「0_install.bat」でエラーが出る。
Pythonのバージョンがツールに対応していない可能性があります。3.7.5を使ってみて下さい。また、Anacondaを使っている方は、conda側のenvironment(base等)がactivateされていないか確認して下さい。ツールのバッチファイルでは、独自のvenvをactivateしてからスクリプトを実行しているので、condaのenvironmentをdeactivateしないと動きません。
「0a_extract_all.bat」又は「1_extract.bat」でエラーが出る。
1. PCの空き領域が不足している可能性があります。このツールは、画像を大量に出力するので、十分な空き領域を確保して下さい。また、「0a_extract_all.bat」は、最後まで動かさず、必要な画像を入手できたら、途中で止めることを推奨します。
2. プレイ動画の形式が、ツールに非対応の可能性があります。HandBrake等の動画変換ツールを使って、プレイ動画の形式を「H.264/AVC」に変換すると読み込めるようになるかもしれません。
「1_extract.bat」又は「2_sort.bat」でエラーが出る。
「parameter.conf」の設定が怪しいです。もう一度GIMPを使って設定し直してみて下さい。テンプレート画像が中に収まる設定値にしないとエラーになります。
その他のエラー
すみませんが、このツールは積極的にはサポートしないつもりなので、原因不明のまま終わるかもしれません。ですが、Twitter(@devsifmatch)までエラー報告いただけると、もしかしたら対応できるかもしれません。その際は、エラーが表示されているコマンドプロンプトのスクリーンショットも貼っていただけると、原因究明しやすいです。すみませんが、よろしくお願いいたします。
この記事が気に入ったらサポートをしてみませんか?