おもちゃラボ

Unityで遊びを作ってます

Visual Studio 2019でEmacsのカーソル移動

Visual Studio 2019でカーソル移動だけをEmacsキーバインドにする方法を紹介します。Visual Studio に Emacsキーバインドのプラグインを入れたものの、コピペとか保存のショートカットまで上書きされて使いにくい、という人向けの記事です!

f:id:nn_hokuson:20201226204925j:plain

ctrlとcpas lockを入れ替える

昔はレジストリを書き換えるしか方法が無かったようですが、最近はCtrl2Capというマイクロソフト公式のツールが提供されているので、これを利用します。

次のサイトからCtrl2Capをダウンロードしてください。
docs.microsoft.com

ダウンロードできたら、適当なフォルダに解凍してください。インストール方法が少し変わっていて、コマンドプロンプトを使う必要があります。
画面下[ ここに入力して検索]に「cmd」と入力し、表示されたコマンドプロンプトのアイコンを右クリックし「管理者として実行」を選択してください。

f:id:nn_hokuson:20201226204307p:plain:w300

コマンドプロンプトが開いたら、上でCtrl2Capを解凍したフォルダに移動し、次ののコマンドを実行してください。

ctrl2cap.exe /install

あとはPCを再起動すればCtrlキーとCaps Lockキーが入れ替わります。

Visual Studioのカーソル移動をEmacs風にする

Visual Studioのキーバインドを変更するにはメニューバーから「ツール」→「オプション」を選択します。

f:id:nn_hokuson:20201226202441p:plain:w300

開いたオプションウインドウの左カラムから「環境」→「キーボード」を選択します。キーバインドを変更するには右カラムでコマンドを選択し、それに対応するショートカットキーを入力します。

f:id:nn_hokuson:20201226202659p:plain:w550

まずは「Ctrl+B」でカーソルを1文字左移動するように設定してみましょう。「以下の文字列を含むコマンドを表示」の欄に「移動」と入力し、表示されるコマンドのなかから「編集.左に1文字移動」を選択してください。次にショートカット欄で「Ctrl+B」と入力して、割り当てボタンをクリックしてください。

f:id:nn_hokuson:20201226203127p:plain:w550

上の画像で「現在使用されているショートカット」の欄に「ビルド.選択範囲のビルド」のコマンドが入っていますね。1つのショートカットに2つのコマンドは割り当てられないので、こちらのコマンドのショートカットは外しておく必要があります。

そこで、「以下の文字列を含むコマンドを表示」の欄に「選択範囲のビルド」と入力して、「選択したコマンドへのショートカット」の「削除」をクリックしてください。

f:id:nn_hokuson:20201226203455p:plain:w550
同様の手順で次のEmacsコマンドとショートカットを指定すれば、Visual Studio 2019でもEmacs風のカーソル移動が出来るようになります。

コマンド名 ショートカット 削除するコマンド
編集.左に1文字移動 Ctrl+B ビルド選択範囲のビルド
編集.右に1文字移動 Ctrl+F なし
編集.行頭に移動 Ctrl+A なし
編集.行末に移動 Ctrl+E InteractiveConsole.ExecuteInInteractive
編集.1行下へ Ctrl+N 新規ファイル作成
編集.1行上へ Ctrl+P プリント
編集.削除 Ctrl+D

まとめ

Visual Studio 2019でカーソル移動だけをEmacs風キーバインドにする方法を紹介しました。Emacs用のプラグインを入れるよりも自由にコントロールできるので便利です。

ProcreateでPhotoshopブラシを使う方法

Procreate 5からPhotshopのブラシをインポートして使えるようになりました。ここでは、Macに保存したPhotoshopブラシをAir DropをでiPadに渡してProcreateで使えるようにする方法を紹介します。

f:id:nn_hokuson:20201221232844p:plain:w200

Photoshopブラシをダウンロードする

まずは使いたいPhotoshopのブラシをMacでダウンロードします。Photoshopのブラシは下記のサイトなどからダウンロードできます。ブラシのの拡張子は「.abr」です
photoshopvip.net

AirDropでブラシを送る

ダウンロードしたPhotoshopのブラシをAirDropでiPadに送ります。このときiPadではProcreateのアプリを起動しておいてください
f:id:nn_hokuson:20201221231702p:plain:w450

ProcreateでPhotoshopのブラシを受け取る

Macからブラシが送られてくるので「受け付ける」をタップしてください。すると、自動的にProcreateにPhotoshopのブラシが読み込まれます。
f:id:nn_hokuson:20201221232303p:plain:w250

Procreateの上部のブラシツールをタップしてください。いまMacから送ったPhotoshopのブラシがインポートされていることが確認できます。
f:id:nn_hokuson:20201221232517p:plain:w500

PhotoshoのブラシをProcreateで使えるようにする方法は以上です!

【AR Foundation】 光源推定をする

f:id:nn_hokuson:20201124151400j:plain

今回はAR Foundationで光源推定をする方法を紹介します。Directional Lightのデフォルト設定では現実の光源の強さや色合と異なるため、違和感がある映像になってしまいます。AR Foundationでは撮影された映像から光源の強さと色合いを推定できる光源推定機能が用意されているので、その使い方を紹介します。

AR Foundationの光源推定でできること

ARを周辺の環境となじませるためには、その環境に応じたライトの設定をする必要があります。そのため、AR Foundationには現実の光源のパラメータを推定する機能があります。光源推定で推定できる値は次のようなものがあります。

Ammbient Intensity 環境光の強さ
Ambient Color 環境光の色温度
Main Light Direction ライトの方向
Main Light Intensity ライトの強さ

ARKitでは上記のうち、ライトの方向と強さ(Main Light DirectionとMain Light Intensity)は推定できないことに注意してください。

f:id:nn_hokuson:20180925233222p:plain:w450

それでは、AR Foundationで得られる光源の推定値をUnityのライトに設定する方法を見ていきましょう。

Unityプロジェクトの作成と下準備

次にUnityでの作業に移ります。AR Foundationを使ったプロジェクトの作り方と、その準備についてはこちらの記事に詳しく説明しています。

nn-hokuson.hatenablog.com

ここでは、ヒエラルキーウインドウにAR SessionとAR Session Originオブジェクトを配置し終えたところからスタートします。

f:id:nn_hokuson:20201112202225p:plain:w550

光源推定を行う

ヒエラルキーウインドウで、AR Session Origin の子要素のAR Cameraを選択してください。

f:id:nn_hokuson:20201122104319p:plain:w250

AR CameraにアタッチされているAR Camera ManagerのLight Estimationの項目から「Ammbient Intensity」と「Ambient Color」を選択してください。

f:id:nn_hokuson:20201122104337p:plain:w250 f:id:nn_hokuson:20201122104349p:plain:w250

これでAR Foundationで環境光の色と強さを推定できるようになります。次に推定した値を実際のライトへ反映する必要があります。そのためのスクリプトを作成します。LightEstimateという名前でC#スクリプトを作成して、次のプログラムを入力してください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.XR.ARFoundation;

public class LightEstimate : MonoBehaviour
{
    [SerializeField] ARCameraManager cameraManager;
    private Light light;

    void Start()
    {
        this.light = GetComponent<Light>();        
        cameraManager.frameReceived += OnCameraFrameReceived;
    }

    void OnCameraFrameReceived(ARCameraFrameEventArgs e)
    {
        Color color = Color.white;
        float intensity = 1.0f;

        if (e.lightEstimation.averageBrightness.HasValue)
        {
            intensity = e.lightEstimation.averageBrightness.Value;
            intensity *= 2.0f;
            if (intensity > 1) intensity = 1.0f;
        }
        if (e.lightEstimation.averageColorTemperature.HasValue)
        {
            color = Mathf.CorrelatedColorTemperatureToRGB(e.lightEstimation.averageColorTemperature.Value);
        }

        Color c = color * intensity;
        light.color = c;
        RenderSettings.ambientSkyColor = c;
    }

    private void OnDisable()
    {
        cameraManager.frameReceived -= OnCameraFrameReceived;
    }
}

光源のパラメータを推定した値はAR CameraManagerから送られてきます。 推定値を毎フレーム値を取得するため、frameReceivedイベントにOnCameraFrameReceivedメソッドを追加しています。

OnCameraFrameReceivedで、実際に光源推定した値をライトに反映する作業を行っています。ライトの推定値は引数であるARCameraFrameEventArgsのlightEstimation.averageBrightness.ValueとlightEstimation.averageColorTemperature.Valueに格納されています。推定した光源の色と強度をかけ合わせた値をDirectional Lightのcolorに設定しています。

また、ライトに反映すると同時にRenderSettings.ambientLightにも値を設定しています。これにより、環境から受ける光の強さと色も同時に設定しています。この設定はメニューのWindow/Rendering/LightingのEnvironment Lightから設定するパラメータに相当します。

f:id:nn_hokuson:20201122104531p:plain:w450

スクリプトをアタッチする

作成したLightEstimateスクリプトをDirectional Lightにドラッグ&ドロップしてアタッチしてください。

f:id:nn_hokuson:20201124144642p:plain:w650

次に今アタッチしたスクリプトのAR Camera Managerの欄に、AR Session Origin/ARCameraをドラッグ&ドロップしてください。

f:id:nn_hokuson:20201124144653p:plain:w650

実行結果

これでAR Tracked Object Managerの設定は終わりです。最後にAR Foundationの各種設定を次の記事を参考にして行い、実行してみてください。

nn-hokuson.hatenablog.com

ビルドして実行すると、ライトの色がモデルに反映されて、より自然なARになっていることが確認できます。

f:id:nn_hokuson:20201124151232g:plain:w500

まとめ

この記事では、AR Foundationを使って光源のパラメータを推定する方法を紹介しました。また、AR Foundationの基礎になっているARKitについては「swiftで作る ARKit超入門」がオススメです!こちらも、ぜひ参照ください。
booth.pm