3Dレイヤーにすると位置がズレる?
デフォルトカメラ問題
はじめに
After Effect 2020で「3DレイヤーをONにしたら、レイヤー表示位置がズレる!バグってる!」という声を聞くようになった。確かに期待した場所に表示されないことがある。
よく調べた結果、2020で顕著になっただけで、この現象自体はバージョン関係なく起きる。CS6でも発生させることができる。今までも気づいていないところでずっと起きてはいたが、2020で発生条件が緩くなって目に見えてきた、といったところ。
その緩くなった原因というのが、2020年10月リリースであるバージョン17.6での新機能「3Dデザインスペースでの作業」。これは雑に言うと「コンポ内にカメラレイヤーが無くてもカメラをグリグリ動かせるよ!」というもの。
それを考えれば、これは断じてバグではない。正しい仕様である。
新機能の内容をしっかり理解できていれば、すぐに理解できる。
AE2020でも17.6より前では発生しないが、面倒くさいので以下では2020と書く。
現象
レイヤーの3DレイヤースイッチをON/OFF切り替えるとコンポ上の見た目の位置や大きさが変わって見える。
再現方法①
現象に遭遇したことの無い人はとりあえず次の方法で再現できる。AfterEffectsバージョン17.6以上が必要。
コンポを作成する
平面レイヤーを作成する
コンポサイズを変更する
コンポサイズの変更の仕方は以下の3種類のうちどれか1つを選ぶ。
「コンポジション設定」から変更する
この場合、「高度」タブの中で「アンカー」を中心以外にして変更する
スクリプトで変更する
この場合、シンプルに以下の設定のみを行う
[CompItem].width = xxxx; //コンポの幅の変更
[CompItem].height = xxxx; //コンポの高さの変更
「コンポジションを目標範囲にクロップ」を使用する
この場合、目標範囲の中心とコンポの中心を一致させない
これで再現できる。
図1では、「コンポジション設定」からの変更を行った。つまり、コンポジションを[W:500px, H:500px]で作成後、同サイズで平面を作成。その後、左上基準(アンカーを左上にする)でサイズを [W:500px, H:500px] から [W:1000px, H:1000px] に大きくした。
この時点での状態の見た目が期待通りと言える。3Dレイヤーであるかどうかに関わらず、我々が期待している見え方。
そして平面の3DレイヤースイッチをONにしても見た目に変化は起きないはず...と思ってONにすると位置が変わって見える(下図・中)
そこからさらにカメラレイヤーを作成すると最初に期待していた見た目に戻る(下図・右)
再現方法②
さっきの再現方法①は、実際に遭遇した人が多いであろうやり方。コンポのサイズを変更しない次のやり方も実は同じようなこと。
コンポを作成する
平面レイヤーを作成する
2で作成した平面の3DレイヤースイッチをONにする
2020の新機能を使用してカメラを移動する
カメラレイヤーを作成しなくても新機能でカメラを動かせるようになったので、そのままAlt + 左・中・右のドラッグでカメラ操作が出来る
この状態で平面レイヤーの3DスイッチをON/OFFしても見た目が変わる。
このやり方だともしかしたら「当たり前ぢゃん?」と感じる人もいるかもしれない。
結果的には再現方法①と②共に「カメラが思った位置にいない」という点で同じ。「カメラが思った位置にいない」その原因が意図的かそうでないか、という違いでしかない。
原因
原因としては2020から、以下の2つの条件、
コンポ内にカメラレイヤーが存在しない
コンポ内に1つ以上有効(目玉ON)な3Dレイヤーが存在する
が揃った時に使用されるカメラが変化したから。面倒なので今後、これを "例の状態" と呼ぶ。
再現方法①での図で言えば、真ん中の図の場合にあたる。この時に使用されるカメラが、
従来:仮想カメラ(正式な呼び名ではない。詳細後述)
2020:見えないカメラレイヤー(デフォルトカメラ)
と変化した。
有効な3Dレイヤーが1つも存在しないときは、バージョンに関係なく「仮想カメラ」が使用されるのは従来通り。つまり、従来では3DレイヤースイッチをON/OFFしても、カメラレイヤーが存在しない限りは「仮想カメラ」が使用されていた。ところが2020では3DレイヤースイッチをON/OFFすると、使用されるカメラが「仮想カメラ」と「見えないカメラレイヤー」とで切り替わる。
この2つのカメラのプロパティが一致している保証はない。コンポのリサイズ時に2つのカメラ間に於いて位置と画角にそれぞれ差が生じ、結果2つのカメラが切り替わるたびに位置や大きさが変わって見える。だって全く別のカメラなんだもの。
そんな感じ。
理由が知りたいだけの人はここまで。以下では、ついでに勉強しときましょうということで詳細を見ていく。
前提知識①~仮想カメラ~
上でも書いた「仮想カメラ」と勝手に呼んでいるものについて。
そもそもの話。従来のバージョンも含め、コンポ内にカメラレイヤー( = [object CameraLayer] )が存在しなくても「カメラ」自体は存在する(語弊はあるが目をつぶろう)。この時点で驚く人がいるが、考えて欲しい。カメラレイヤーの存在しないコンポでも3Dレイヤーは存在可能である、というのは体験している人が多いと思うが、じゃあそれをY軸回転させたとして、そのレイヤーの見た目(パース感とか)は何を元に計算されているのか?レンズのミリ数(≒画角)などがわからないと計算不可能である。ということは計算に使用されているミリ数が存在するはずである。
実際にカメラレイヤーを作成して比較すれば分かるが、実はカメラレイヤーが存在しないときは50mmレンズのカメラで撮影している体(てい)で計算されている。標準レンズ。
このカメラにユーザーがアクセスすることは出来ないし、位置などのプロパティを変更することも出来ない。スクリプトからもその存在を確認することは出来ず、コンポのアクティブカメラを示す
[CompItem].activeCamera
へのアクセス結果は
null
となる。(3Dレイヤーが存在しない時、もしくは、存在するが2020より前のバージョンの時)
nullというのは「なんにもないよ!」という意味。(AEのヌルレイヤーのヌルも同じ意味)
つまりモノとして存在確認は出来ない。まぁカメラレイヤーが無いのだから納得。
ここでは見えない触れないこの50mmカメラを「仮想カメラ」と呼ぶことにする。
この「仮想カメラ」は常に自動で全てのプロパティが「デフォルト値」で維持されるとイメージして良い。実際にはレイヤーのように「プロパティ」として数値を保持しているわけではなく、計算で必要になる度に50mmカメラのデフォルト値自体を毎度算出している(ミリ数とコンポサイズが決まれば確定できる)...と予想するが、めんどくさいので「デフォルト値で維持される」ということにしておく。
■デフォルト値
「デフォルト値」とはプロパティを「リセット」したときに取る値。例えばカメラレイヤーの「位置」のデフォルト値はコンポの中心を通る法線上なので、
// カメラレイヤーの「位置」のデフォルト値
X = コンポの幅 / 2
Y = コンポの高さ / 2
Z = カメラレイヤーの「ズーム」のデフォルト値 * -1
と決まっている。新規カメラレイヤー作成直後の位置はこれになる。で、Z位置に関わってくる「ズーム」のデフォルト値は、
zoom = コンポの幅 / 2 * tan( カメラの画角[rad]/2 )
と決まっている。「『デフォルト値』で維持される」(正確には毎度計算されてる)ので、コンポサイズを変更してもそれに追随する形で仮想カメラの位置は変わる。(下図)
余談:タイムライン上で「トランスフォーム」の文字の横にある「リセット」をクリックすることでデフォルト値に戻すことも出来るのは知っている人も多いと思う。しかしトランスフォームだけでなく全てのプロパティに於いて、右クリックから「リセット」を実行すればそのプロパティの「デフォルト値」に戻すことができる。また、カメラレイヤーではなくAVレイヤーの場合は Z=0 だしライトレイヤーだとまた全然違った値がデフォルト値である。
前提知識②~デフォルトカメラ~
2020ではカメラレイヤーを作成していない状態でもカメラを動かすことが出来る。バージョンアップ時にその機能を売りにしていた。
これをどうやって実現したかというと、先述した「見えない、触れない『仮想カメラ』」とは別で、見えない(けど、ちょっと触れる)カメラレイヤーを作成することにしたようだ。この見えないカメラレイヤーを「デフォルトカメラ」と呼ぶことにする。
なぜ「デフォルトカメラ」と呼ぶのかというと、この見えないカメラレイヤーの名前が「デフォルト」って設定されてるから。それだけ。
デフォルトカメラはタイムラインパネル上には現れないし、コンポのレイヤー数にもカウントされない。ユーザーがタイムラインパネル上から数値入力で操作することは出来ない。
(コンポビューワー上では上述の新機能としてカメラを動かせるので、位置などは操作できる。ただし(繰り返しになるが)タイムラインパネルで位置に数値を直打ちするということは出来ない。もっと言うと、2021からはデフォルトカメラの「カメラ設定」ウィンドウも出せるようになったのでそこで出来る範囲の操作は可能)
「画面上で見ることが出来ないのにどうやってその存在が分かるねん!」とお思いの方。デフォルトカメラの存在はスクリプトから確認することが出来る。
デフォルトカメラの存在確認
"例の状態"、つまり、
コンポ内に1つ以上有効(目玉ON)な3Dレイヤーが存在する
コンポ内にカメラレイヤーが存在しない
という状態(右図・ベン図の水色塗り部)で、コンポのアクティブカメラを確認する。
まずはおさらい。2020より前の時。"例の状態"で、
[CompItem].activeCamera
にアクセスすると、その中身は
null
であった。これは「仮想カメラ」の説明時にも試したこと。で、この状態でカメラレイヤーを作成するとactiveCameraにはnullではなく、
[object CameraLayer]
つまり作成したカメラレイヤーが入る(右図・上段ベン図の交差部)。ここまでは想像に難くない。
しかし2020では "例の状態" の時、つまりコンポ内にカメラレイヤーが存在しないにも関わらず、
[object CameraLayer]
が入っていることが確認できる。同じ条件なのにnullではない。なんだこれ?
実はこれこそが、新機能でカメラグリグリ出来る秘密。
「カメラレイヤー無いのにカメラを動かせる!スゲーナスゴイデス!」
と思っていたが、その真相は、
「バレないように隠してたんだけど実はカメラレイヤーでした~!てへぺろ☆」
というワケ。
ちょっと特別なデフォルトカメラのプロパティ
デフォルトカメラはスクリプトからであればプロパティの操作も可能。であるが、少し特別扱いされている部分もある。
右図はデフォルトカメラのプロパティをいくつか抜粋したものである。
馴染みのない人の為に難しそうなプロパティの意味を説明しておくと、
canVaryOverTime:
時間変化させることが出来るかどうか。つまり、キーフレームやエクスプレッションの適用が可能かどうか。
canSetExpression:
エクスプレッションを設定することが可能かどうか。
これを見ると分かるように、通常のカメラレイヤーと違ってトランスフォームの「位置(position)」「目標点(anchorPoint)」「スケール(scale)」「方向(orientation)」にはキーフレームやエクスプレッションは設定出来ない。やろうとするとエラーになる。setValue() を使ってキーフレームを打たない静的な値の設定は可能。
ただ、「ズーム(zoom)」はキーフレームもエクスプレッションも設定出来る。(トランスフォームじゃなくてカメラオプションだから?)
ちなみにレイヤーインデックスは
index: -2147483647
謎の数字…?いやいや、きれいな数字ですね!これは32ビットでの最小値ですね。
前提知識③~コンポ作成時に作られる全てのカメラ~
新規コンポ作成時には、そのコンポサイズに合わせて全てのカメラの「位置」「ズーム」の値がデフォルト値に設定され、配置されている。
「全てのカメラ」とは、
デフォルトカメラ(2020以降のみ)
フロントビューなどの平行投影の6つのカメラ
カスタムビューの3つのカメラ
のこと。
平行投影カメラはコンポの中心からそれぞれ5000pxの距離、カスタムビューカメラは正確には調べていないがコンポ正面向かって、左斜め上方、真ん中上方、右斜め上方の3箇所がデフォルト位置になっている。
(平行投影カメラのデフォルト位置は、それぞれのビューから「3Dビューからカメラを作成」をすることで分かる)
平行投影カメラとカスタムビューカメラは、仮想カメラと同様スクリプトからもアクセスできない。
(2021からは右図のようにカメラ設定にアクセスすることはできるようになった。ぞれぞれのカメラ(ビュー)の名前も変更できちゃう)
平行投影カメラって3DCGではよく使うけど、AEではそこまで使用頻度高くない。だから忘れがちだけど、コンポ作成時にこれらも作成されていてデフォルト値に設定されている、ということを忘れない。
前提知識④~コンポサイズ変更って何してんのか~
コンポサイズを変更すれば基本的に手動だろうがスクリプトだろうが問題の現象は起こりうる。今回の現象を自分でいろいろ試していると「もしかして手動でコンポサイズ変更したときは発生しない?」と考えがちだがそれは正確には間違い。たまたま条件が良かっただけといえる。(その「良い条件」がデフォルトで設定されているから気づきにくい)
先に言葉の定義をしておく。
手動で変更:「コンポジション設定」からコンポの「幅」「高さ」だけを変更して「OK」ボタンを押すこと
スクリプトで変更:以下のスクリプトを実行すること
[CompItem].width = xxxx;
[CompItem].height = xxxx;
手動もスクリプトも共にただただコンポのサイズを変更しているだけのように思えるが、内部処理的には実はスクリプトのほうが圧倒的にシンプル。正確には、スクリプトはコンポサイズの変更しか行っていないのに対し、手動ではサイズ変更以外にもコンポに関する全てを再設定しているし、さらにレイヤーに対してもごちゃごちゃしている。
原点
まずそもそも勘違いしやすいのは、コンポサイズの変更は必ずコンポ座標の原点を基準にして行われる。中心ではない。
コンポ座標における原点というのは、点[0,0] つまり左上隅のこと。
で、必ず原点を基準にしてリサイズされるということは、則ちコンポの左上を基準にサイズが広がったり縮まったりするということで。
これは手動でもスクリプトでも関係なく同じ。「いや、手動の時は中心基準で変更されるで!」と思った人、実はそれがむしろ異常な状態だったのです。AEが気を利かせてくれてよかったでちゅねー。
基本的には手動だろうがスクリプトだろうが、ユーザーが指示していないプロパティを勝手に変更することはあってはならない。スクリプトではそれが分かりやすくて、本当に指示したことしかやらないから、上記のスクリプトは本当にコンポのサイズ変更しか行っていない。
ただほとんどのAEユーザーは手動で変更時、「中心基準」でコンポサイズが変更されていると思っているはず。それは仕方ない、だってデフォルト設定がそうなっているんだもの。そして、恐らくほとんどのユーザーがその設定を変更することは無いのだもの。
なので手動で変更時、知らない間にコンポリサイズ「+α」が行われているのに気づかない。
アンカー
「コンポジション設定」を開くと、見落としそうなくらい地味だが「コンポジション名」のすぐ下にタブがある。その並びに「高度」タブというのがある。高度タブでは「モーションブラー」の設定の為に来ることが多いのでスルーしがちだが、一番上に「アンカー」というものがある。初心者はなんじゃこれ?と思ってしばらくわからん人もいると思うが、これは「コンポリサイズ時にどこを基準にして変更しますか?」という設定なのです。そしてそれが右図のように「中心」が選択された状態になっている。だから「コンポジション設定」からサイズ変更した場合、何も変更しないと普通は中心基準で変更される。コンポサイズ変更する時にここイジりに来る人なんかそうそういないしね。サイズの指定自体は「基本」タブでやるわけなので、そのままOKして閉じちゃうよね~。ちなみにこれ、変更してもコンポの設定として保持されているわけではないから「コンポジション設定」を開くたびに中心の状態に戻される。
コンポジション設定で「OK」を押した時に起こること
で、「コンポジション設定」を「OK」して閉じた時、何が行われているか?
「名前」や「デュレーション」も含めたコンポジション設定の全てが更新されるが、今回重要なところだけに関して言うと、
1.「幅」「高さ」の設定に合わせて原点を基準にコンポのサイズを変更
スクリプトならこれで終わりだが、手動の場合はこの後に続いて、
2.「アンカー」の設定に合わせて、全てのレイヤーとカメラを移動
と内部でさらに処理が行われている。なのでアンカーを左上以外にした時は絶対にレイヤーの移動が発生している。その証拠に、コンポのサイズ変更前と後ではレイヤーの「位置」の値が変わっているはず。先にも書いたが、ユーザーが位置の変更指示していないのに勝手に変えちゃダメなんじゃ!?と思ったあなた、その通りです。それは間違いありません。だけどね、あなたはちゃんと移動するように指示してるのよ。「高度」タブ内の「アンカー」を使ってね!そうしてAEはユーザーが「アンカー」で指定した場所(中心や右下など)を基準にコンポがリサイズされたように見せかけているのね。上記2の「全てのレイヤーとカメラを移動」によって、レイヤーとカメラの相対関係が変わらないから錯覚させられているけれど、コンポのリサイズは必ず左上を基準に行われている。中心基準で上下左右が縮んだとか広がったとか、そんなの無い。思い込まされているだけ。
実はまだある。コンポサイズを変更する方法
ちなみに「コンポジション設定」以外からでもコンポサイズを変更する方法はある。「コンポジション」メニューにある「コンポジションを目標範囲にクロップ」。これでコンポサイズを変更した場合、目標範囲のセンターを「アンカー」として設定していることと同義になる。
つまり目標範囲のセンターをコンポのセンターと一致させていない場合、今回の現象が起きるということである。
もう分かる 一致しなくなる理由
ここまできたらもう完全理解できる。
同じことを何度も書くが、改めてまとめると、
コンポ作成時
全てのカメラの「位置」「ズーム」などのプロパティ値はコンポ作成時にデフォルト値がセットされる。どんなコンポサイズでも50mmであるのは確定しているが、同じ50mmでもコンポサイズによって「位置」と「ズーム」のデフォルト値は変わる。(仮想カメラのセクションで書いた、デフォルト値を出す数式を見れば、コンポサイズが大いに関わっているのがわかる)
コンポサイズ変更時
コンポサイズを変更した場合、従来の「仮想カメラ」なら自動的に新しいデフォルト値が算出されるところを、2020からは [CameraLayer] としての扱いになったが故、(ユーザーからは見えないにしろ)AEが勝手に位置などの数値を変更することは望ましくない。ユーザーが自分の意志でその数値にした可能性もあるから、それを勝手に変更するだなんてダメ。だから、コンポサイズ変更後に自動で補正をかけることが出来ない。ということは、変更後のコンポサイズにおける「位置」「ズーム」のデフォルト値ではなくなる。この時点で全てのカメラはデフォルト状態からずれた状態にある。
3Dレイヤーのスイッチを切り替える
コンポ内に3Dレイヤーが存在するかどうかで、使用されるカメラが、「常にデフォルト値を取る仮想カメラ」と「現在のコンポサイズのデフォルト値とはズレた状態のデフォルトカメラ」とで変わるので、その度に位置・サイズが変わって見える。
という感じ。
ユーザーはカメラ目線の結果をコンポジションビューワーで確認しているわけなので「レイヤーがズレた」と誤認しやすい。正確にはレイヤーがズレたのではなく、使用しているカメラがズレている。推理モノのトリックであるやつですな。動いていたのは見ていたモノではなく自分自身だった...!みたいな。
対策方法① スクリプトでデフォルトカメラのプロパティを直しちゃう
スクリプトでコンポサイズを変更する際は、サイズ変更後に
[CompItem].activeCamera
でデフォルトカメラにアクセスして、「位置」「目標点」「ズーム」をデフォルト値に設定し直せばいい。先述の通り、デフォルトカメラにエクスプレッションは設定できないので仮想カメラのように常にコンポセンターに居続けるようにするのは無理。都度、静的な値で設定していくしかない。
activeCamera にデフォルトカメラが必ず入っているとは限らない。確実にデフォルトカメラにアクセスするために、コンポ内のカメラレイヤーを全てOFFにすることと、3Dレイヤーが1つ以上存在していることが必要なので、その処理も入れておく。
/**
* デフォルトカメラの画角、位置、目標点をリセット
* @param {CompItem} comp ターゲットコンポジション
*/
function resetDefaultCamera(comp) {
// 3Dレイヤーが1つもない場合はcomp.activeCameraがnullとなって、デフォルトカメラにアクセスできないので、
// ダミーレイヤーを作成し、3DレイヤーをONにしてcomp.activeCameraがnullにならないことを担保する
/**ダミーレイヤー */
var dummy = comp.layers.addShape();
dummy.threeDLayer = true;
// デフォルトカメラに確実にアクセスするため、コンポ内ににカメラレイヤーがあれば全てOFFにする
var cams = [];
for (var i = 1; i <= comp.numLayers; i++) {
var cam = comp.layer(i);
if (cam instanceof CameraLayer) {
// 後でもとに戻せるようにレイヤーオブジェクトとそのenabledを取っておく
cams.push({ "layer": cam, "enabled": cam.enabled });
// カメラレイヤーを無効(目玉をOFF)にする
cam.enabled = false;
}
}
// デフォルトカメラにアクセスして、50mmのデフォルト値に設定していく
/**デフォルトカメラ */
var defCam = comp.activeCamera;
if (defCam instanceof CameraLayer) {
/**50mmの画角 */
var AOV = 39.5977527099629;
var deg = AOV / 2;
var rad = deg * Math.PI / 180;
var zoom = comp.width / 2 / Math.tan(rad);
// デフォルト値に設定
defCam.zoom.setValue(zoom);
defCam.position.setValue([comp.width / 2, comp.height / 2, -zoom]);
defCam.anchorPoint.setValue([comp.width / 2, comp.height / 2, 0]);
}
// CameraLayerのビデオスイッチ(目玉)を元に戻す
for (var i = 0; i < cams.length; i++) {
cams[i].layer.enabled = cams[i].enabled;
}
// ダミーレイヤー削除
dummy.remove();
}
対策方法② 「3Dビューのリセット」を使用する
「ビュー」メニューの中に「3Dビューをリセット」というコマンドがある。これを実行すればリセットされて正しい位置になるんじゃね?と思ってやりたくなるのだが、罠。
このコマンドは、「50mmカメラである前提で、位置をデフォルト値に再設定する」模様。(挙動を見る限り)
通常の使用には問題ないのだが、コンポサイズを変更した時点でデフォルトカメラは50mmではなくなっている。そしてこのコマンドは50mmの前提でリセットする。位置は正しく見えても、大きさが狂って見えるはず。
2020ではAEのUI上からデフォルトカメラの画角を変更する術が無いので、詰み。(スクリプトからは出来る)
2021からはデフォルトカメラもカメラ設定を出せるようになったのでなんとかなるが、面倒。
対策方法③ 「カメラ設定」を使用する
これは2021からしか使えない技。対策方法②で書いたように、「スクリプトからしか『ズーム』を変更できない」という事態に気づいたのかなんなのか、とにかくAEのUI上から設定出来る道を新設してくれた。
コンポジションビューワーパネルの下部に「デフォルトカメラ設定」的なのが出来た。これを実行するといつものカメラ設定画面が出てくるので、50mmのプリセットを適用する。
対策方法④ 【危険】デフォルトカメラの機能をOFFにする
「できればこの手は使いたくなかったが仕方あるまい…。」という感じのやつ。PC一般でいうとレジストリをイジるような「ご利用は自己責任で」という感じのやつ。AE2020の17.7.0までなら行ける。
コンソールパネルからデフォルトカメラの機能自体を無効にしちゃうやり方。
コンソールパネルを出す(Ctrl + F12)
パネルのタイトル横の「三」のアイコン(ハンバーガーメニュー)の中から "Debug Database View" を選択
"3D.DefaultCamera" のチェックを外して"false" にする
これでデフォルトカメラの機能自体を無効にできるので、「例の状態」の時、従来と同じく「仮想カメラ」が使用される。
このコンソールパネル、フラグとか値が大量に羅列されていて、明らかに感じる「さわるな危険」感。他の項目を全て見た訳ではないが、勝手にポチポチ変えて不具合が起こってもわたし責任取れませんので、そこはご了承くださいまし。あなたの自己責任で。
ちなみにデフォルトから変更されている値は項目名が青文字になる模様?間違って変更してしまった場合はそれを目印に戻せばいいかもしれない。ただし、最初から青文字になっているものもいくつかあったので全てがそうという訳でもない。
ただしこの方法はもう使えない。2020の17.7.1から、チェック外した状態でAEPを開こうとすると、開く処理中にコンポ内のカメラの数がおかしい!と、その時点でAEPを開くのをやめてしまう。コンポの存在しないプロジェクトなら開けるが、通常そのようなプロジェクトはありえない。この場合、チェックをONに戻すと開けるようになる。
ちなみに2021からはコンソールパネルからこの項目自体が消えているので、OFFにすることは出来ない。
おわり
書き始めてから結構な時間放置したりして半年以上経ってしまい、自分でも何書いてるのかわからなくなってしまった。しかも2021ではカメラ設定から解消出来るので、この記事の価値も薄れてしまっているが、せっかく書いたのでいつかどこかの誰かの役に立たんことを。アーメン。