ですぽんたにっき

基本的には 3dsMax や Unity 関係の記事で。その他色々マイブームなネタを書いていきます。

【Unity】カメラのカット切替時のブレを無くす

このような記事が5年前にありました。

japan.unity3d.com

要するに・・・
一つのカメラでカット切り替えを表現する際、切替時の回転のブレをスクリプト制御で抑えようということです。

そして今回、プログラム無しでブレを抑える方法がわかったので紹介しようと思います(^^)

結論から言うと、直接Animation(YAML)ファイルを弄ってカメラの補完を完全にキル方法です!

ただ、この方がいい方法なのか定かではないことをはじめに断っておきます
(๑´•.̫ • `๑)

まずは、1つのカメラで “瞬間移動カット切り替え” を行った場合にどのような見た目になるか見ていただきましょう(^^)
f:id:ponta565:20170303214425p:plain f:id:ponta565:20170303214512p:plain

Rotation は Quaternion にします。
こうしないと、YAMLで直接値を入力する際に、フレームごとのキー情報があるのに悩まされます。 f:id:ponta565:20170303221942p:plain

ちなみに 「Euler Angles(Quaternion)」から「Quaternion」に切り替えたことによってファイル容量が、10分の1になりました(笑) f:id:ponta565:20170303222259p:plain

この状態では、カット切り替えの際に一瞬のブレが確認できます。
一瞬ガクっってなるよなぁ? f:id:ponta565:20170303222850g:plain

Animationウィンドウのタンジェントで調整してみる・・・

まずは、アニメーションカーブのタンジェント調整で修正を試みます(^^)

0.47秒時点でのキーの「Right Tangent」を「Constant」に設定します。
一見これで直りそうなのですが、どうしても切り替わりの一瞬が映ってしまうようですね・・・
f:id:ponta565:20170303215747p:plain

カーブ上では、一瞬で切り替わっているように見せかけて全然一瞬じゃないよなぁ(#^ω^)?
カカッってなります。 f:id:ponta565:20170303222912g:plain

Animationを直接編集(ファイル的な意味で)

今回の肝です。
まずは該当するAnimationファイルを任意のテキストエディタで開きます。 f:id:ponta565:20170303224129p:plain

あ、その前にプロジェクトのセーブをしたほうが良いかもしれません(^^) f:id:ponta565:20170303224002p:plain

Animationファイル内で、「m_PositionCurves」と検索をかけ、カット切り替えを行っている時間のキーを見てみると、
先程「Constant」に設定した箇所の 「outSlope」が「Infinity」になっていると思います。 f:id:ponta565:20170303224405p:plain

ポジションはそうなっているわけです!
しかし、どうやらローテーションはそうならないみたいです。 f:id:ponta565:20170303224829p:plain

なので、手動で「Infinity」にしてやりましたよ(フフフ f:id:ponta565:20170303225504p:plain

するとなんということでしょう、惨めで醜くて卑賎で矮小で罪深いカット切り替えが、とてもきれいになりました! f:id:ponta565:20170303225414g:plain

終わりです。