ドリクラエミュ弄り:描画調整等

 さてとドリクラ改造小話の今月分その2。
 いやですね、もう先週ですけど今回は週中に早めに録ってのんびりするくらいの算段だったんですよ。でも見てると結局何か気付いちゃうんですね。んで時間があるならやれるだけやろうとしてしまう。

 まぁ自分で言うのも何ですけど、自分は完璧超人の気質はありますからね。
 勿論あずまんがのツインテが取れる方じゃなくて、原作の「完璧でなければ氏ね!」って粛正されてしまう方のあれですよね。(そんな事やってるから全滅の憂き目に遭うんだ)

 以下は描画周りの問題点・疑問点など。
 ちょっと内部実装的な部分も絡みつつの話。

 (話のサンプルとして、)
ドリームクラブZERO アイリ sweet x2☆summer(縦・服揺れ)



●カメラ切り替え演出(クロスフェード)および同期ズレ問題
 少し前にカメラ切り替えエフェクトの話を書いたんですが、少し気になる点があってもう少し調査を進めてみた次第。

 大きな物事としては以下、
  • クロスフェード発生タイミングがずれている
  • スレッド同期ズレの問題(描画全般)

 まずシーン切り替えの演出、ディゾルブ(dissolve)というかいわゆるクロスフェードと言った方が馴染み易いかな、互いのシーンがフェードで重なる手法ですが参考、細かい事を言うと正確なクロスフェードではなくてあくまで擬似的な処理になってまして。
 実際は前シーンが止まった状態の絵に次のシーンの動きが重なっていくという作り。まぁ正しく互いの動きをフェードインアウトさせるには一度に二回描画が必要になりますからね。処理速度を考えれば当然の選択。
 そこは見た目にも大した問題ではないんですが、ただここで一点「クロスフェードのタイミングが少しずれている」のがちょっと気になってはいたんですよね。

 シーンが切り替わるタイミングの「数フレーム前」に止め絵を撮って、そこから徐々にフェードインで重ねている。だから切り替え前のシーンの動きが少し重なってから次のシーンに切り替わるようになっている。
 言い換えるとシーンが切り替わる前にまず、残像みたいに一瞬手前のフレームを残して再び動き出すというカットが挟まっている。一瞬だけの残像拳。

 ここは如何せんエミュなので処理の同期ズレ問題というのは当初からずっと抱えていて、何かあるのかないのかというのは気になっていたところで。
 ただ同期ズレにしてはあまりにもズレが大きいなと調べてみたら、やはりというかこれは意図的な実装ということにはなる模様。フェード時間の半分前倒しになってました。
 これは多分おそらく、色々切り替えタイミングがシビアなのでマージンを取っていたのが実情なのかなと。特にデュエット・バックダンサーで処理落ちが大きいので、正確な切り替えタイミングが押さえ辛いからと。

 でもね、ここはエミュなので処理落ちなんて気にせずマシンパワーでゴリ押ししてフルフレームで録りたいし録れるのですよ(笑)。

 それに無印ではこのマージンは無くきっちり次のシーンからフェードインさせる作りになってました。あくまでZEROでの変更。
 ただこの点で無印では、エミュの問題でたまに処理タイミングのズレが起きて先に一瞬次のフレームが映ってしまう事がある。実際、ZEROでマージンを取り払ってみると同じ状態に。
 これを踏まえると最低1フレームはマージンを置くというのもお手軽な手ではあるんですが、ただこの「同期ズレで1フレームおかしくなる」問題は割と色々な所に点在してまして。実のところはエミュに限らずおそらく元からの話も。
 分かりやすく目立つところではセルフシャドウのカメラタイミングずれ。シーン切り替わり時に影計算が合わずに間違った影が大きく被さってしまう場合が「たまに」ある。実機でも起きていた筈。

 まぁ僅か1フレームの一瞬なので「俺だったら見逃しちゃうね」なんですけども。
 ただ分かった上で見ているとやはり目立つ時は非常に目立つ。だからアップ用の録画でもしくじった時は録り直していたし、「人其れを運ゲーと云う」と(苦笑)。いつまでもそんな事はやってられない。やりたくない。(運ゲーは運で遊ぶゲームだけに許されるもの)
 こういうのはこれまでもパッチワークで発生を抑えようと試みてはいたけれど、ちょっとそろそろ根本から潰していきたいと思って、今回また色々調査を進めました。

 大まかな話としては、おそらく処理速度を稼ぐために描画と計算スレッドを並行で走らせている、その同期が非常にピーキーで(元々潜在的不具合も抱えていたろうし)エミュだと顕著に問題が出やすくなる。
 でもここはマシンパワーでゴリ押すので並行動作そのものをやめたらいいんじゃないかと。無論それは以前から考えはしてたんですが、それはそれでおかしくなるんですよね(苦笑)。並行で動く前提で作ってるんだもの。
 まぁその辺今回また色々掘り返して今度こそ何とか着地点は見えてきたかなというところです。

 作業成果としては内部的な問題解決が殆どですが、
 傍目にはこれできっちりフレームズレなしにフェードインしていくようになりました。
 元の遷移手法も残像の残り方と前倒しフレーム数の違いで「割とパキッと切り替わる」というか、フェードと半々の演出に見えていたのでそれもそれで良かったのかもしれませんが。
 まぁ折角なので滑らかにしてみましたと。どうですかね。


●星エフェクト
 これは今回のアップ動画には入ってませんが、
 上記のスレッド同期ズレ問題の一環で引き続き見ていた部分。

 カラオケ中にポーズを決めたところで星が出る演出(例えば「ときめきのコマンド」とか「フリしてごめんね」のところ)に関して、なんかね、一瞬だけ星が変に映っているのですよ。
 星が大きくなってまた小さく消えるというアニメーションの前に、1フレーム最初に星がでっかく表示されてしまっている。一瞬のアニメーションなので一見目立たないけど録画でコマ確認すると確かにそう描画されている。
 あまりにも毎回確実に起きている(他の方々がアップされている実機録画でも)ので、これはこういう意図的な演出実装なのか?うーん、とは正直悩みつつ。

 調べてみると初期化と描画とアニメーション計算のタイミングが「うーん?」というのがあったので、うーんバグかな、バグなんじゃないかな、、とは思って手直ししてみることにしました。どうだろう、うーん(笑)。

 まぁこれまた一瞬の出来事なんですけどね。それこそもう小足見て昇竜が余裕な人々くらいしか気にならないかもですが。
 成果はまたいずれ。


●録画解像度
 ついでに気になっていた点、録画解像度とかのお話。

 現状、アップ用の録画について、
  • (オリジナル解像度は1280×720)
  • 内部レンダリング解像度をx2倍で描画 (2560×1440)
  • ウィンドウサイズは1920×1080の1.5倍サイズで録画
という少々勿体ないことにはなってます。

 オリジナルの1280は今となっては流石に解像度不足なので解像度を上げたいけれど、レンダリングをHDサイズ(1920)の1.5倍には出来ない。非整数倍は考慮する事が多くなりすぎて駄目と言われているので参考、整数倍のx2から。
 一方でうちはモニタサイズが1920×1200なので、現状いわゆる2K(2560×1440)では録画出来ない。
 Windowsでは実解像度以上のウィンドウサイズは今は作れなくなっている(昔は出来たような)ので、使用しているモニタに縛られてしまう。とはいえこの為にWQHDに買い換えるというのもね。マシンパワーが足りるかも分からないし。

 でもそこで気付いたのがリモートデスクトップで接続すれば任意解像度に広げられるという話(rdpファイルの記述を直接編集)。スクロールバーを使って画面全体を動かす懐かしい操作。あとリモートの転送負荷を抑えるため録画中はリモートのウィンドウを最小化して終わるのを待つという戦法で(笑)。
 これで試してみたらソロなら2Kサイズの録画にも耐えられるということは一応分かりました。

 ただどうだろう、動画内容的には別にそこまで表示解像度が求められるものでもないんですよね。はっきり言って10年以上前の技術とマシンパワー向けのポリゴンだし。
 レンダリング解像度=演算粒度ははっきりと違いが出るけれど、それを表示する部分は昨今のモニタサイズも千差万別で拡縮は当たり前なので、今主流のHDサイズで十分には感じるところ。
 いっそ内部解像度だけ上げて表示解像度(録画)は1280でもいいんじゃないかとも思ったんですけども。しかしHDサイズに満たない動画はyoutubeが露骨に画質を落としてくるので(苦笑)、HDサイズ以上は必須。(初期に上げた動画が粗いのはこれも一因ですね、パフォーマンス問題もあるけれど画質に関してはtubeの所為です。一度言っておきたかった(笑))

 一点懸念していたのは非整数倍(2→1.5)の拡縮表示になっているところだったけど、録画して比べてみるとここは特に問題はなく。2倍(2560)、1.5倍(1920)で不具合が出るという事は流石になかった。そして見た目的にもどっちでもいいのかなという感じ。
 如何せんサイズそのものを上げると再生側のパワーも必要になるし、保存データサイズも倍々になっていくしで。(ちゃんとやるなら先のお試しリモート接続ではやってられないのでモニタを買わないといけないし)
 取り回しの良さを考えると今はHDサイズで十分ですかね、また時代が進めば見劣りする日も来てしまうかもしれませんが。どうなるかな。


 そんなこんなで描画問題の細かいところを色々押し進めていました。
 こういう下地を整えておかないといざ後でちょっと何かやろうという時にも面倒になりますからね。
 面倒くさいとやらなくなる人間ですからね。「俺は面倒が」うんぬんかんぬん。
 面倒を避けるために先に面倒事を片付けるタイプですね、はい。

 あとやはりこの先しばらくは大きな事をやる余裕は作れそうになくなってきたので、細々と続ける前の下準備の意味合いもあった訳ですが。
 いっそしばらく休止しますでもいいのかなぁとは正直若干思ってる所ではあります。
 個人的には気が向いたらやれればいいと思うし、あまり言い切るのは好きではないけど、どうなのかなぁこういうのは、と。