﻿================================================================
 HS2 Auto Wipe Camera   v1.27.0
 HoneySelect 2 / StudioNEOV2 用 ワイプ（ピクチャーインピクチャー）カメラ
================================================================

MMD ダンスを流しているスタジオの画面に、踊り子のアップを小窓（ワイプ）で
重ねて出すプラグインです。テレビのワイプ、あるいは複数カメラのライブ映像の
ような画面が、ダンスを読み込むだけで自動的に組み上がります。


■ 特徴

・毎回の設定が要りません
  誰を追うか、どのボーンに寄せるかを選ばせません。踊っているキャラは
  自動で判別します。画角は「顔／バスト／腰／脚／全身／尻」のショットサイズで
  指定し、寄り具合はそのキャラ自身の頭〜腰の長さを基準に計算するので、
  背丈やスケールの違うモデルでも同じ画になります。

・ワイプ構成がダンサーの人数で自動的に組み替わります
  1人なら顔と尻の2枚、2人なら四隅にそれぞれの顔と尻で4枚……というように、
  ダンスを差し替えるだけで並びが変わります（最大6枚）。
  気に入らなければ、好きに並べてから「今の並びを N 人用として記憶」を押せば
  次からその並びが復元されます。

・ワイプの絵がメイン画面と食い違いません
  HS2 のキャラライトはカメラ相対なので、素直に2台目のカメラを置くと
  被写体の裏側を見ることになり、ワイプだけ暗い絵になります。
  このプラグインは描画の間だけライトをワイプの視点に向け直します。
  ポストプロセスも移植する（または メインカメラ自体を一瞬借りる）ので、
  色味やトーンもメイン画面と揃います。

・別ウィンドウ・スマホ・OBS に出せます（MJPEG 配信）


■ 動作環境

・HoneySelect 2 (StudioNEOV2)
・BepInEx 5.4.x

必須の依存プラグインはありません。以下は「あると良くなる」ものです。

・CharaAnime
    誰が踊っているかの判定に使います。入っていない場合は VMDPlayPlugin(MMDD)
    の情報と、動きの大きさ・メインカメラの向きから推定します。
・HS2_CamReaction
    入っている場合だけ、ワイプ内に「段階」「回数」を表示できます。
    無ければその項目が静かに消えるだけです。

スタジオ (StudioNEOV2) 向けに作ってあります。


■ 導入

  HS2_AutoWipeCam.dll を

      <HS2 のフォルダ>\BepInEx\plugins\

  にコピーするだけです。

  ※ ゲームを起動したままだと DLL を上書きできません（ファイルが使用中に
     なります）。更新するときはゲームを終了してから差し替えてください。

  アンインストールは DLL を消すだけです。設定は
  BepInEx\config\syuba.hs2.autowipecam.cfg に作られるので、
  必要ならこれも消してください。


■ 最初の一歩

  1. スタジオを開いて、いつも通り MMD ダンスを読み込む
  2. F6 を押す    → ワイプが出ます
  3. Shift + F6   → 設定パネル

  起動直後はワイプが消えた状態で始まります。ポーズ付けやシーン作りの最中に
  2回目のレンダリングを走らせても重いだけなので、F6 を押すまで待ちます。

  設定パネルの言語は既定で英語です。先頭の Language を Japanese にすると
  日本語表示になります（OS のフォントを動的に読みます）。


■ キー操作

  F6              全ワイプの ON / OFF（マスタースイッチ）
  Ctrl + F6       選択中のワイプだけ ON / OFF
  F7              撮る部位を切替（顔→バスト→腰→脚→全身→尻）
  Shift + F7      尻ショットへ一発切替（もう一度押すと元のショットへ）
  Shift + F6      設定パネル

  キー操作は「選択中のワイプ」に効きます。選択中のワイプは、パネルを開いて
  いる間だけオレンジの枠で示されます。
  割り当ては設定パネルの「9. Keys」または cfg ファイルで変えられます。


■ 設定パネル

  Shift + F6 で開きます。右下の角をドラッグしてリサイズでき、位置と大きさは
  次回起動時にも残ります。
  パネルを開いている間は、ワイプを左ドラッグで動かせます。ドラッグ中は
  画面の端・画面中央・他のワイプの辺に吸い付きます（吸着、既定 ON）。

  撮る部位 (Shot size)
      顔 / バスト / 腰 / 脚 / 全身 / 尻

  カメラ角度 (Angle)
      おまかせ（部位ごとの定番アングル）／正面／角度固定／旋回／メインと同じ。
      「おまかせ」は部位を選ぶだけで角度も決まります。真正面は防犯カメラの
      絵に見えるので少し斜めに、脚と尻は下から煽るようにしてあります。
      俯角・回り込み角のスライダーは、その定番アングルからの ± オフセットです。

  追う相手 (Target)
      自動、またはキャラ指定。

  ワイプ枠 (Window)
      隅・形（縦長 9:16 など）・大きさ・位置・不透明度・枠線。
      枠線の色は1枚ずつ変えられます。6枚並べたとき、枠の色がどれが誰かの
      目印になります。

  このワイプの負荷 (This wipe's cost)
      更新レート（既定 30fps）と描画解像度（既定 720）。ワイプごとに別々です。

  設定のコピー (Copy settings)
      1枚作り込んでから他のワイプに配れます。枠の位置と追う相手はコピー
      されません（コピー元の真上に重なってしまうため）。

  プリセット (Presets)
      人数別の構成テーブルを「まるごと」5枠に保存できます。1枠 ＝
      「1人ならこう／2人ならこう／3人ならこう」のセット全体です。

  ワイプ内の表示 (Caption on each wipe)   → 下記
  画面の組み方 (Screen layout)            → 下記
  共通の設定 (Shared settings)            言語・描画モード・自動編成の ON/OFF など


■ ワイプ構成の自動編成

  MMDD が読み込んでいるダンサーの人数を見て、構成を組み直します。

    0人      1枚   メインカメラが映している子のバストアップ
    1人      2枚   同じ子の顔と尻を下に2つ
    2人      4枚   四隅に、それぞれの顔と尻
    3人      3枚   下に尻ワイプ3つ
    4人      4枚   四隅にそれぞれの尻
    5人以上  人数分（最大6枚）下に横並び

  人数が 1.5 秒安定してから適用します（シーン読み込み中はキャラとモーションが
  数フレームかけて揃うので、途中の人数で組むと壊れて見えるため）。
  組み直すのは人数が変わったときだけなので、そのあと手で調整した内容は
  次にダンスを差し替えるまで残ります。

  2人以上のときは、ワイプごとに担当を固定します。自動のままだと
  メインカメラを振るたびにワイプ同士が担当を交換してしまうためです。

  「今の並びを N 人用として記憶」で自分の構成を覚えさせられます。記憶されるのは
  追う相手・部位・枠・画角一式（角度モード・俯角・回り込み角・ズーム・FOV・
  高さ）と、その人数のときの画面の組み方です。更新レートと解像度は含めません
  （構成ではなくマシンに合わせる設定なので）。

  自動編成そのものは「共通の設定」で切れます。切ると枚数は + / - で手動になります。


■ 画面の組み方（ワイプをダンスに重ねたくないとき）

  ダンス映像そのものを画面の左／右／上／下／中央に寄せて形を変え、空いた側を
  まるごとワイプ領域にできます。

    配置    被せる（従来）／中央／左／右／上／下
    形      画面と同じ／16:9／4:3／3:4／1:1
    大きさ  画面高に対する ％

  形を変えられることが要点です。元のアスペクトのまま縮めても四方に細い余白が
  出るだけで何も入りません。4:3 を全高で左端に寄せれば、右に1本の使える列が
  残ります。「中央」は左右の両方がワイプ領域になります。

  「ワイプをその領域に敷き詰める」を押すと、空いた領域にグリッドで並べ直します。

  ※「横の見え方を保つ」（既定 ON）について
    Unity はアスペクトを変えても垂直画角を保つので、素直に縦長にすると左右が
    切られて踊り手が見切れます。ON にすると水平画角の方を保ちます。
    ただしカメラが見る範囲が広がるぶん描画は重くなります（16:9→4:3 で約1.33倍、
    16:9→1:1 で約1.78倍）。重ければ OFF にするか、形を 4:3 程度に留めてください。


■ ワイプ内の表示（キャプション）

  「番号／キャラ名／段階／回数」の4つを、それぞれ「なし・左上・右上・左下・
  右下」から選んで置けます。同じ角のものは1行に横並びになります。
  「まとめて左下へ」のような一括ボタンもあります。

  ※「段階」「回数」は HS2_CamReaction を入れている場合のみ出ます。

  キャプションはゲーム画面のワイプにだけ出ます。UI として描いているため、
  下記の MJPEG 配信の映像には入りません。


■ 別ウィンドウ・スマホ・OBS で見る（MJPEG 配信）

  「7. Streaming」の "Stream wipes to their own windows" を ON にすると、
  各ワイプが MJPEG として配信されます。

    http://127.0.0.1:8787/      全ワイプを並べたページ
    http://127.0.0.1:8787/0     ワイプ1枚だけ（別ウィンドウ用）

  受け手は <img> タグ1個で済むので、ブラウザの窓、OBS のブラウザソース、
  Electron の枠など、どれでもそのまま受けられます。
  ワイプが Screencap のスクリーンショットに写らない制限も、この映像を別途
  キャプチャすれば回避できます。

  スマホ・タブレットで見る場合:
    "Who can watch" を LocalNetwork にすると、同じ Wi-Fi の端末から見られます。
    起動時のログに、打つべき URL が出ます。/m がスマホ用のページです
    （全画面・タップでツールバー・左右でワイプ切替）。

    ★ 認証はありません。LocalNetwork にしている間は、そのポートに届く人は
      誰でも見られます。共有回線では使わないでください。使い終わったら
      ThisPcOnly に戻すことをおすすめします。

  配信は画面のワイプと同じ描画結果を使い回すので、配信のために余分に描画は
  しません。かかるのは読み出しと JPEG 圧縮だけです。ただし圧縮はメインスレッドで
  走るので、枚数 × fps がそのまま CPU に乗ります。常用は1〜2枚が目安です。
  重ければ Stream height を 360、Stream frame rate を 10 まで落としてください。

  映像が上下逆さになる環境では "Flip the streamed image" を ON にしてください
  （既定 OFF。開発環境の DX11 では反転不要でした）。


■ 描画モード

  軽量カメラ（既定）
      専用カメラで描き、ポストプロセスレイヤーだけを移植します。軽いですが、
      メインカメラのコンポーネントとして実装されたエフェクト（DHH 等）は
      乗りません。

  共有カメラ
      メインカメラ本体を一瞬借りて描くので、全エフェクトがそのまま乗り、
      メイン画面と原理的に食い違いません。そのぶん重くなります。

  どちらのモードでも、描画の間だけキャラライトをワイプの視点に向け直します
  (Light follows wipe)。これを切ると、ワイプの絵だけ暗くなります。


■ 重いとき

  ワイプはシーンの2回目のレンダリングなので、素直に作ると GPU 負荷がほぼ
  倍になります。効く順に:

    1. 「ワイプに影を出す」を OFF（既定 OFF）
       影はカメラごとに描き直しになる上に、解像度を下げてもコストが
       下がりません。単独ではここが一番効きます
    2. 描画モードを「軽量カメラ」に（既定）
    3. 更新レートを下げる（既定 30fps → 12〜15fps）
    4. 描画解像度を下げる（既定 720 → 360）
    5. ワイプの枚数を減らす

  複数のワイプは初回の描画タイミングをずらしてあるので、同じフレームに全部が
  重なってスパイクになることはありません。


■ 制限

  ・ワイプは UI オーバーレイとして描いています。OBS などのデスクトップ
    キャプチャには写りますが、Screencap のスクリーンショットには写りません
    （MJPEG 配信で回避できます）
  ・ワイプの設定はシーンファイルには保存されません（BepInEx の設定として
    全体で1つ）。そもそもダンスごとに設定を変えなくていいのが売りです
  ・軽量カメラモードでは一部のエフェクトが乗りません（上記）


■ うまく動かないとき

  ワイプに後頭部が映る
      「向きを反転」(Flip facing) を ON にしてください。

  ワイプの絵が上下逆
      そのワイプの「上下反転」(Flip vertically) を ON。

  設定パネルの日本語が □ になる
      Language を English に戻してください（日本語フォントが
      見つからない環境です）。

  ダンサーの人数が合わない・構成が組まれない
      パネルの「判定元」を確認してください。CharaAnime が入っていれば
      その登録モデルを使い、無ければ MMDD の情報から推定します。

  更新したのに挙動が変わらない
      BepInEx は、一度書き出された設定ファイルの値を既定値より優先します。
      設定パネルの「全ワイプ」リセットを1回押してください。リセットされるのは
      画角まわりだけで、枠の位置・サイズ・解像度・更新レートは残ります。

  キーが効かない
      他のプラグインとキーが衝突している可能性があります。「9. Keys」で
      割り当てを変えられます。

  何も起きない
      BepInEx\LogOutput.log に "Auto Wipe Camera" の行が出ているか
      確認してください。


■ ライセンス

  自由に使ってください。改変・再配布・改変版の公開、いずれも制限しません。
  クレジットも任意です。無保証です。


■ 作者

  syuba
