ぶろぐめんどくさい

技術系の記事と漫画レビューが入り混じった混沌

アルソックの警備員が来た日

その日はいつもよりちょっと遅めに起きました。 時計を確認するとびっくりしました。 既にアラームが鳴った後に起きたようです。 レム睡眠ってありますよね。 睡眠が深い状態であるレム睡眠、 浅い状態であるノンレム睡眠があるそうです。 おそらくレム睡眠の時間帯に無理やり起きたせいでしょう。 その日はとても眠かった。

ひとまずご飯を食べようと思い、 トーストをつくるため、フライパンに食パンを乗せて火をつけました。(IHですが) そして、あまりに眠かったので、ちょっとだけと思い布団に潜りました。

これが、明らかな失敗でした。 ちょっと横になるだけ。フライパンが温まるまでスマホを見るだけ。 そう思っていたはずなのに、気がついたときには、眠りに落ちていました。

なにかが焦げた匂いで起こされました。 火を止めなきゃと立ち上がった瞬間、火災警報が鳴りました。 部屋の中には煙が充満していました。 トーストも焼きすぎると煙が出るんですね。 おそろしいなぁ。 それよりもパニックです。 警報装置を止めようとしました。 ブレーカー式ではなく、解除ボタンがあるのでそれをひたすら押していました。 ですが、解除ボタンが機能しません。 警備システムがメインの警報装置だったため、 火災警報の場合は警報状態を解除をすることができないようです。 起き抜けの頭で必死だった私は、なにか反応するところはないかと思い、 非常と書かれたボタンを押しました。 携帯電話が鳴りました。

やばいと思いました。 電話に出ると、 「アルソックの〇〇です。どうされましたか」と早口でまくしたててきます。 非常事態でもないし、火災も起きていない。 「すみません。誤操作です。すみません」と私は謝りました。 「もう警備員が向かっていますので」とアルソックの方が。 ピザ警察を思い出す流れです。 オペレーターが通報に出ると、ピザの注文の電話でした。 オペレーターははじめ間違い電話ではないかと聞きましたが、様子がおかしいことに気づき、通報者に「はい」か「いいえ」で答えるように指示しました。 結果、ピザの注文は犯人にばれないためのカモフラージュで、犯人を捕まえることに成功しました。 ですが私はなんのカモフラージュもしていません。 ピザの注文などしておりません。 向かってくる警備員を止める術はありませんでした。

警備員が来るまでの間、トイレにいけないじゃないか。 来なくていいのにと思いながら20分ほど待つと、警備員がきました。 部屋の中に上がってもらい非常警報を解除してもらいました。 (火災警報は窓を開けて換気しているうちに止まりました) 最後に、「報告書(だったような)はいりますか?」と聞かれ、「いや、いいです」と答えました。

今回の件から得た教訓は、

  • 焦っても非常ボタンを押さない
  • 火をつけたまま布団に潜らない(寝ない)

です。

Rigidbodyの重心をずらすスクリプト(Unity)

まずは実行結果を示します。

使用したスクリプトはこれになります。 といっても、ここ(https://docs.unity3d.com/ja/current/ScriptReference/Rigidbody-centerOfMass.html)の改変です。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 重心の位置を変更
/// </summary>
public class CenterOfMass : MonoBehaviour {

    /// <summary>
    /// 重心の位置
    /// </summary>
    public Transform com;

    /// <summary>
    /// オブジェクトがEnableになったとき
    /// </summary>
    void OnEnable () {
        Rigidbody rb = GetComponent<Rigidbody>();
        rb.centerOfMass = com.localPosition;
    }
}

このスクリプトは、重心をずらしたいゲームオブジェクトにアタッチして使います。 このゲームオブジェクトの子に新たにゲームオブジェクトを作成し、 Com変数に作成したオブジェクトをアタッチします。 このオブジェクトが新しい重心となり、任意の位置に動かすことで重心をずらすことができます。

f:id:be116:20180507194812p:plain

ProBuilderでだるまをつくる(オブジェクトの結合とピボットの中央寄せ)

まずは成果物。 作成したモデルにRigid Bodyをつけています。

実行手順。

ProBuilderウィンドウを開いておきます。

ウィンドウからNewShapeを選択。 形状はicosahedron(球、正しくは正二十面体)。ヒエラルキーではicosphereとなっています。 パラメータは特にいじらずBuild Icosahedronをクリック。

Center Pivotでピボットを中央に。 オブジェクトを(0, 0, 0)へ移動。

もう一度、球を生成して同じ手順で(0, 1, 0)へ配置。

スケールを変更。

Vertex Colorで球ごとに色を塗る。 球を選択。適当な色を選択。

2つの球を選択。 Merge Objectsでオブジェクトを結合。

以上。

UnityとHTC ViveでVR空間に鏡をつくる

動作環境はUnity ver 2017.3.0。

実行

準備

Vive Stereo Rendering Toolkitを使用します。

手順

  1. ヒエラルキーにPlaneを配置
  2. Plane -> Rotation -> xを-90に
  3. Plane -> Add Component -> Stereo Rendererをアタッチ
  4. このタイミングでPlane配下にカメラが追加されます。誤って削除した場合、この手順をやり直してください。
  5. Stereo Renderer -> isMirrorにチェック

f:id:be116:20180506103006p:plain

この画像のような設定ができたら大丈夫です。 (Scaleは適当に設定しています)

VRコスプレでキャリブレーションするスクリプト

2018/05/04 16:07 スクリプト修正

UNITYを使って、VRコスプレでユニティちゃんになりきるものを作りました。 使ったアセットは定番のFinal IK(ようやく買えた)です。

VRコスプレを初めてしてみて、モデルとの身長差が気になりました。 私の身長は175cmに対して、ユニティちゃんの身長は200cm。 25cmの差だけ視点がユニティちゃんの頭上に突き抜けたり、カメラの位置が低すぎてユニティちゃんがコマネチをしたりと大変だったのです。 前者はまだいいのですが、後者はポージングに影響がでるため絶対に避けたい問題。 この身長差を埋めるために、キャリブレーションをする必要がありました。

キャリブレーションには(おそらく)2通りの方法があります。

  1. モデルのスケールを変更
  2. モデルの視点とカメラの位置を合わせる

1番目は、モデルのスケールを変更して自分の体格と合わせようという方法です。 「VRIK キャリブレーション」とぐぐると一番にヒットする対処法がこれです。 2番目は、カメラの位置を調整して、モデルの目の位置に持ってくればいいじゃないというものです。 VRは立位、立って遊ぶことがほとんどです。 そのため、VRコスプレでは、直立姿勢でモデルの顔の位置にカメラをもってくることが望ましい。 そこで、ユーザが直立した状態でカメラの位置を調整することで、これを解決します。

1番目の方法は、モデルのスケールが変化してしまいます。 せっかく、等身大(といっても2mありますが)のモデルがあるのですから、スケールはなるべく崩したくない。 ですので、私は2番目の方法で身長差の解決を測りました。

方法を説明します。といっても方法は単純です。 [CameraRig]オブジェクトの高さを変更するだけ。

[CameraRig]はトラッキングの高さを指定することができます。 ですので[CameraRig]の高さをモデルの身長に応じて、変更すれば良いのです。 具体的にはTransformプロパティのpositionのy座標を適当な値に変更すること。それだけです。

試行錯誤的にプロパティをいじっても良いのですが、せっかくなのでプログラミングで解決したい問題です。 そこで、以下のスクリプトを書きました。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Calibrator : MonoBehaviour {

    /**
    * カメラリグのオブジェクト
    */
    [SerializeField]
    Transform cameraRig;

    /**
    * カメラオブジェクト 
    */
    [SerializeField]
    Transform hmdEye;

    /**
    * モデルの高さ
    */
    [SerializeField, Range(0f, 3.0f)]
    float charaHeight;

    /**
    * キャリブレーション 
    */
    public void Calibrate () {
        float height =  charaHeight - hmdEye.transform.localPosition.y;
        cameraRig.position = new Vector3 (0, height, 0);
    }

}

このスクリプトでやっていることは、 単純にカメラリグの位置を、モデルと自分との身長差で調整しているだけです。 その際にカメラの位置を使って、自分の身長を測定しています。(正確には目の高さですが)

直立姿勢でこのスクリプトのCalibrateを実行することで、 モデルと自分の身長差を埋めることができます。 私はviveコントローラーのトリガーを引いたときにSendMessageを送り、Calibrateを実行するようにしました。

使用したヒエラルキーはこれです。

f:id:be116:20180504145915p:plain

空のゲームオブジェクトを作ってCallibratorを追加し、 cameraRigに[CameraRig]、hmdEyeにCamera(Eye)を置き、charaHeightを1.9(モデルの目の位置)にしています。

US配列のHHKBからJIS配列のキーボードに切り替える方法

US配列のキーボードを使っていました。 就職に際してJIS配列のキーボードを買いまして、キーボードを交換したところ、いくつかのキーが反応しなかったのでその対処法です。(意外と記事がなかった)

キーボードを交換して、 例えば半角全角キーが「'」の入力に変わっていました。 HHKBを導入するとき、ツールを使ってキー配列を変えたからです。 ということは、もう一度そのツールを使えばいい。

HHKBのWEBページから、ツールをダウンロードしましょう。 ダウンロードしたexeを起動するとツールが展開されます。

f:id:be116:20180503170748p:plain

f:id:be116:20180503171246p:plain

ツールを使って日本語配列(JIS配列)にするなり、元に戻すなりして、キー配列を直しましょう。 ツールの使用後はPCの再起動が必要です。 ソフトウェアを使って作業している場合は、ツールを使用する前に作業中のファイルを保存するなりしておきましょう。

これでJIS配列のキーボードが使えます。

メカニカルだけどメンブレン方式のキーボードを買った(オン・ビックカメラ)

就職しました。 現在絶賛研修なうです。 GWも後半となり、 ようやく落ち着いてきたのでブログを再開します。(頑張って続けたい)(続けるとは言ってない)

さて、今日は、先日ビックカメラで手に入れたキーボードを紹介します。(完全にアフィブロガー)

体格はメカニカル。構造はメンブレン。よきにしも安し。 まずは写真をどうぞ。

f:id:be116:20180503092119j:plain

いっつ・あ・めかにかる。 のー・もあ・ざん・めかにかる。 キーに厚みがあるのです。キー配列がメカニカルなのです。 でも設計はメンブレン方式だから安い。 2000円で買えました。

今回このキーボードを選んだ理由は4つあります。

  1. カニカルな貫禄
  2. 値段(気に入ったのは値段だ)
  3. JIS配列
  4. テンキーがある

わたくし今までHHKB(安い方)を使っておりまして、 安物ですが厚みのあるキーに慣れていたんですよね。 だから次に買うキーボードもメカニカルにしようと思っていました。 だけどメカニカルなものは高いのです。 安くても7000円からなのです。 今のお財布事情からこのお値段は厳しいので、1000円くらいの適当なキーボードで妥協しようかと思ってました。 このキーボードを見た瞬間、これだ!となりましたね。 つやつやな質感。キーの厚み。まさに私の求めていた理想形でした。 しかも安い。2000円。今のお財布事情でも前前前世な具合です。 ですが正直な話、キーボードを買い換える必要はありませんでした。 HHKBを持ってるならええやんと。 キーボードを買い換える必要はありません。 けど買い替えたかった。 職場で使うキーボードとキー配列を統一したかったからです。 キー配列には大きく2種類ありまして、 US配列とJIS配列があります。 HHKBはUS配列を購入される方が多数です。 理数は単純。ませてるから。 というのは冗談で、グーグル先生に教えを乞うと、 プログラミング作業にUS配列が最適だとのことです。 わたくしもUS配列のHHKBを使っていました。 しかし多くのキーボードで一般的なキー配列はJIS配列です。 あなたの使っているPCがノートPCであれば、おそらく95割JIS配列でしょう。 おそらくわたくしの職場のキーボードもJIS配列でしょう。 ですのでキーボードを買い替えました。 わたくしが次に買うキーボードには、テンキーが必要でした。 なぜならBlenderを使いたかったから。 Blenderは3Dモデルを作成することのできる無料のソフトウェアです。 Blenderではカメラの視点操作などのショートカットが、テンキーに割り振られています。 テンキーレスでBlenderを扱えないか、グーグル先生に膝を付いたところ、「方法はあるけど、テンキーを使った方が格段にええよ」とのことでした。 なるほどなーと思った私は、「せっかくだし、テンキーも付けちゃうか」おじさんになりました。

とまあ、いくつか理由を挙げましたが、使い心地を言いましょう。 使い心地。今、この瞬間、このキーボードを使っているわけですが、

  • キーが重い
  • 入力ミスが多い
  • 未だにテンキーを使ってない

と微妙な評価です。

悪くは無いのじゃ。悪いのはすべてHHKBにうつつを抜かしとったわらわにあるのじゃ。 というかキーボードを買い替えたら、よくある話ですね。(キーが重い以外は) 正直、この記事をここまで書いて指が疲れ始めましたが、いい買い物をしたな、うん!

そしてアマゾンを貼っておく。 意外と評価が高かった。