【UE4】カメラアクターを拡張機能した「シフレレンズカメラShiftLensCameraActor」を作ってリアルタイムあおり補正
5年くらい前にOpenGLベースのあおり補正のプログラミング方法を紹介させてもらいましたが、いま最もお世話になっているUE4でも実装したいと強く思うようになったのと、またしても気晴らしにコーディングしたかったので手を出しました。
実際そんなに時間もかかりませんから、有償版を買おうかなあとかもじもじしている時間で、この記事通りにやってもらえば実装できてしまうと思います。
How to create the camera actor with shift lens function on Unreal Engine 4. It is available perspective correction in real-time.
お知らせ
Unreal Engine Market Placeで販売しております。
Camera with Shift Lens – Unreal Engine Market Place $7.99 (約800円)
マーケットプレイスとGitHub公開ソースとの違い
- GitHubのソースは開発中のものでシーケンサだけ動作確認した時点のものです。メンテナンスしていません。
- MITライセンスでソースコードを公開していますが、結局は30分くらいかかりますので、原価$8.00以上はかかります、つまり買った方が安いかと。
動画版
前提
Visual Studioをインストールしておいて下さい。必須。
UE4向けのインストールの仕方が必要のようなので、Epicさん公式の手順を見ておいてください。
Unreal Engine 用に Visual Studio をセットアップする – Unreal Engine Document
https://docs.unrealengine.com/ja/Programming/Development/VisualStudioSetup/index.html
GitHub(ソースコード)
https://github.com/christinayan01/demo/blob/master/UE4ShiftLensCamera/
おさらい:あおり補正って
注↓↓↓↓ごめんなさいこれ以降は編集中です。検証中に作った文書なので動画の内容とだいぶ異なります↓↓↓
不要な方は読み飛ばして「作り方」に進んで下さい。
とりあえずそれなりの動作をしていますが、プログラムが最適であるか未検証ですので、有識者の方はフィードバックいただけると嬉しいです。あわよくばコードレビュとかしていただけますと。
あおり補正とはなんだ
建築物などでよく見かける水平なんだけどシャキーンってなっている写真撮影のテクニックみたいなもんです。マンションのパンフレットなんかでよく見かけますね。
あおり補正をプログラムするための基本理論
あおり補正された写真を撮るためには、ニコンやキャノンさんから販売されている『チルトシフトレンズ』という20万円以上する特殊なレンズを使うのですが、これは名前の通り一部のレンズが上下に動きます。(レンズがシフトする。)
図解するとですね、こういう事が起こっています。
***
じゃあ、つまりこれと同じ現象をCGのカメラのビューフラスタムで起こせばできちゃったりしちゃうんじゃね? って思いプログラムを差し替えてみたら本物の一眼レフカメラのシフトレンズでファインダーを覗いたときのそれと同じ画が出てきたので、まあ考え方としては間違ってはいないんじゃないか。と思っています。
作り方
前置きが長くなりましたが早速作りましょう。プログラムすると言いましたがコピペしてもらえばOKです。
大きく言うと2つ作ります。
・LocalPlayer
・ShiftLensCameraActor
■前提
Visual Studioをインストールしておいて下さい。必須。
■GitHub
https://github.com/christinayan01/demo/blob/master/UE4ShiftLensCamera/
1.LocalPlayer
実は私も勉強中で大してよくわかっていないのですが、プレイヤー自体を管理するクラスのようです。そのためコントローラーやカメラ視点、キャラクターの情報を保持しています。
●C++クラスを作る
[コンテンツブラウザ]で[新規作成]→[C++クラス]を選択。
右上の[]のチェックをONにして、検索ボックスのところで「LocalPlayer」と入力しましょう。
「LocalPlayer」を選択して[次へ]を押して次の画面へ。
クラス名は[YanaiLocalPlayer]にして、[パブリック]を選択して、[OK]します。
【備考】名前は何でもOKです。ただしソースのコピペのときに一手間増えます。
ソースのコンパイルが始まります。
【備考】Visual Studioが入っていないとインストールを促されます。UE4エディタの指示に従ってインストール完了させて下さい。
Visual StudioでGitHubのソースをコピペします。
YanaiLocalPlayer.hはこんな感じでコピペします。
YanaiLocalPlayer.cppはこんな感じでコピペします。
これでビルドしてみましょう。
エラーが出たときはエラー内容を見てそれ通りに直します。
UE4エディタに戻ります。
メインメニュの[編集]→[プロジェクト設定]を開きます。
[エンジン]の[基本設定]を開き、[Local Player Class]のプルダウンを開くと「Yanai Local Player」という選択肢が増えていますので設定します。
2.ShiftLensCameraActor
カスタマイズしたカメラアクターを作ります。
具体的には、CineCameraActorにあおり補正パラメータが追加されたカメラアクターを作ります。まあふつうのCameraActorってあんまり出番ないですもんね。
[コンテンツブラウザ]で[新規作成]→[C++クラス]を選択。
右上の[]のチェックをONにして、検索ボックスのところで「CineCamera」と入力しましょう。
「CineCameraActor」を選択して[次へ]を押して次の画面へ。
クラス名は[CineShiftLensCameraActor]にして、[パブリック]を選択して、[OK]します。
【備考】名前は何でもOKです。ただしソースのコピペのときに一手間増えます。
ソースのコンパイルが始まります。
Visual StudioでGitHubのソースをコピペします。
CineShiftLensCameraActor.hはこんな感じでコピペします。
CineShiftLensCameraActor.cppは全部コピペでいいはずです。
これでビルドしてみましょう。
エラーが出たときはエラー内容を見てそれ通りに直します。
これでプログラミングは終わりです。おつかれさまでした。
UE4エディタに戻りましょう。
配置のやり方、使い方
あとは普通のカメラアクターと同じような使用方法になるので特段説明はないのですが、例としてカメラ配置→あおり補正値設定→シーケンサ表示までを一緒にやってみましょう。
●置き方
[コンテンツブラウザ]の[C++クラス]に「CineShiftLensCamera」というアセットが増えています。これをビューポートにドラッグすると配置できます。
または、ビューポート上の置きたい場所で右クリック[]→[CineShiftLensCamera]でもできます。
選択肢が増えてる! この辺りUE4さすがです。柔軟。
●あおり補正値の設定
[詳細]の[Current Camera Settings]グループに[Shift Lens]というパラメータが増えています。
値の範囲は -1.0~1.0 です。スライダーで制限されていると思います。
値が大きいほど、レンズが上にシフトして、小さいほどレンズが下にシフトします。
1.0より大きな値にしてもバグったりはしませんが、現実的ではないと思います。建築用途ならば0.0~0.8くらいだと思います。
●カレントカメラの場合
FirstPersonCameraと差し替えれば行けると思います。(私は未だ試していません。)
●シーケンサーで使ってみよう
たいていの方は最終成果物をシーケンサーで設定し、レンダリングすると思いますので、一番に動作確認をしています。
シーケンサーでも使い方は普通のカメラと同じです。
シーケンサーを新規作成して、開きましょう。
[]にあるCineShiftLensCameraアクターを、シーケンサービューにドラッグします。
[]のカメラアクターを選択すると「Shift Lens」項目の隣にアイコンが出ていますので、クリックします。
するとシーケンサー内のカメラのパラメータにも「Shift Lens」が増えますので、お好きなように値を設定します。
完成:例
課題
いくつか問題が残っています。順次直していく予定です。
1 thought on “【UE4】カメラアクターを拡張機能した「シフレレンズカメラShiftLensCameraActor」を作ってリアルタイムあおり補正”