Microsoft HoloLens アプリケーション開発コンテスト応募した

応募した。

・アプリが解決する課題、背景 ...?

・技術的に考慮した点、特にアピールしたい点 ...??

・既存のアプリやソリューションとの違い、差別化ポイント ...?????

もう何か本当何も考えてなくってすみませんって感じです。 本当に何も考えてなかったので特に何も書かずに送信しました…。大丈夫なのか。

とりあえず応募用に動画作ったので見てください。 こんな感じのアプリです。

youtu.be

今後の展望ですが、 とりあえず

  • 日本語対応
  • ステージの追加
  • サポート機能の強化

あたりを考えています。

あと、これはアプリの配信とかコンテストの応募には直接関係はないのですが、今回パブリッシャーとしても使った "00a3af Soft" という名前は今後も使っていこうと思っているので、ロゴデザインなどを一度ちゃんとやろうと思っています。

一応Twitterアイコンなどで使っているこいつ

f:id:mtwand:20180426021452p:plain

もあるのですが、これは某雑誌さんのゴニョゴニョをごにょごにょしてて権利ゴニョゴニョがごにょごにょしそうなのでたぶん使えないだろうなとか、たとえ怒られなかったとして使うべきではないだろうなとか思っているので、なんか別の何かを用意できればと思っています。

いじょ

【人生初】HoloLensアプリリリースしました!

ヒュ~~~やったぜ! 人生初だよ! 個人的なアプリをストアとかに出すの! 作るの楽しいね~~。そしてつらいね~~~。大変だね~~~~~!!!!!

でもまあ、なんとか出しました。 ちょっとまだ最終的な脳内の完成図にはずっと遠いんだけれども、とりあえず出してしまって今後のアップデートでより完成度を上げて行ければなぁと思っております。

-- 追記 --

デモムービー公開しました

www.youtube.com

アプリ概要

作成者:00a3af Soft

f:id:mtwand:20180419235915p:plain 画像の背景色を浅葱色(#00a3af)にしたのに、HoloLensで見ると色の暗さが表現されずにシアンに近い色になるのが不満

アプリ名: The Sound Piece

アプリURL: https://www.microsoft.com/store/apps/9NLRFKFLRR3X

アプリ内容:

こんな感じのモノ

f:id:mtwand:20180420000109p:plain

に案内されながら、部屋の中で音探しをするちょっとしたゲームのような内容。

Spatial Mappingされた部屋の情報をもとに、部屋に「音」が配置されるので、 プレイヤーは耳を頼りに部屋のどこかに隠された「音」を探し出し、すべての「音」を集める。

そんなゲームです。(ストアにはエンタメ作品として登録されてますが)

思い: あんまりモデリングとかそういうのができないので、最低限自分で何とかできそうな音楽分野で何かやりたかった次第。 HoloLensの視野角の問題から、宝探し系のゲームは結構ハマるんじゃないかと前々思っていたので、それを音と組み合わせて、音探しという感じのものになりました。

技術的には難しいことはしていなくて、ほとんどがMRTKとUnity標準機能で賄われているようなアプリです。

一番頑張ったのはどういったアプリにするか? とか、スケジュール管理(全くできなかったけど)とか、そういった開発以外の場所です。

技術的に一番難しかった場所も凹みさんのブログ

tips.hecomi.com

パク参考にさせていただいたおかげで何とかなりました(というか本当に丸っとそのまま使わせてもらってしまっているので早めに自分でShader書いて直します)。

本当にありがとうございます。

SpatialMappingの壁に穴をあけたりとか、その向こうにあるオブジェクトを取得したりとか、音を聞いて音を探すとか、結構楽しい(本当に結構楽しいです)ので、ぜひ一度遊んでいただけると嬉しいです。

一応ですが、すべての「音」(今のところ4つ)を集めるとちょっとした仕掛けが発動するので、楽しみにしていただければと!

制作や申請の流れについても、今度のHoloLens meetupでLTさせていただこうと思っているので、来られる方はよろしくお願いします。

近いうちにブログにも書こうと思います。

最後にもう一度、

The Sound Piece は https://www.microsoft.com/store/apps/9NLRFKFLRR3X にて公開されております。HoloLensをお持ちの方、ぜひ一度遊んでみて下さい!よろしくお願いします!!

Unityでメッシュを生成する[1]

長い;前置き

メッシュについて

言うまでもないことですが、3DCGという概念は頂点・頂点をつないだ面・面をまとめたメッシュによって構成されています。 正確にはもっといろいろ(カメラとか質感とかライティングとか)ありますが、そういう難しいことは私にはわかりません。

とりあえず私たちの肉体にあたる部分はコンピュータ上ではそういった頂点とかいうやつの集合と連結によって作られているそうです。 そしてそれを「メッシュ」と呼ぶそうです。

Unity上でのメッシュ

Unity上でメッシュに触ることはほとんどありません。 何か物体を置きたいのなら、もともと用意されているオブジェクトを使うか、FBXなどのモデルデータを読み込むのが常です。 これは非常に優れた技術であり、私が大学時代に経験したような「さあDirect Xを使ってウィンドウを生成して描画領域をクリアしカメラの位置を決定したらメッシュを規定し投影変換で表示してみよう」などとやらなくていいわけです。もう二度とやりたくない。

――ちょっと本音が出ましたが話を戻すと、つまりそういった非人道的な、もとい泥臭い、非常に大変な処理はUnityがやってくれているわけですね。

いつもは。

メッシュ触ってみたい

とはいえ、Unityを使っていれば一切メッシュに触れないのか? というとそういうわけでもありません。 アセットストアなどを見ていてもわかるように、結構メッシュをゴリゴリ動かして何か動かす処理を作っている人は少なくありません。 なんと驚くことにUnity上でモデリグンできるアセットもあるらしいです(なんと無料) 他にも、例えばシェーダーやボーンを用いないで揺れものや流体なんかを動かそうと思うと、メッシュをいじる必要があります。

まあ色々とそういった先行事例がありますが、なんというか、まあ、触れるなら触りたくない? という気持ちになりませんか。なりますよね。私はなりました。 ということで、Unity上でスクリプトから直接メッシュをあれこれする何かを作ってみたいと思います。

メッシュを生成する

メッシュとは

メッシュは先ほども書いたように頂点の集合とその連結です。 具体的にはUnity上では

Mesh -- メッシュ
Mesh.vertices -- メッシュを構成する頂点群
Mesh.triangles -- メッシュを構成する三角面群

のようにデータが作られています

vertices

頂点群です。 Vector3の配列として定義されています。

triangles

三角面群です。 intの配列として規定されていて、面数×3個値が保持されます。 verticesのindexを連続して代入することでその3個ずつを1面として認識します。

vertices = new Vector3[] {
    (1, 1, 0),
    (1, -1, 0),
    (-1, 1, 0),
    (-1, -1, 0)
}
triangles = new int[] {0, 1, 2, 2, 1, 3};

詳しくは メッシュ - Unity マニュアル このあたりを読んでいただけると私の説明よりわかりやすく詳細に書いてあるかと思います。

実際に何かを生成する

上記の例をもとに実際にこれを生成してみましょう。

適当にスクリプトを作って以下のコードを貼り付けてみてください。

 [SerializeField]
    Material material;

    // Use this for initialization
    void Start()
    {
        GameObject obj = new GameObject();
        MeshFilter filter = obj.AddComponent<MeshFilter>();
        MeshRenderer renderer = obj.AddComponent<MeshRenderer>();
        MeshCollider collider = obj.AddComponent<MeshCollider>();
        Vector3[] vertices;

        vertices = new Vector3[] {
            new Vector3(1, 1, 0),
            new Vector3(1, -1, 0),
            new Vector3(-1, 1, 0),
            new Vector3(-1, -1, 0)
        };
        int[] triangles = new int[] { 0, 1, 2, 2, 1, 3 };

        Mesh mesh = new Mesh();
        mesh.vertices = vertices;
        mesh.triangles = triangles;

        filter.sharedMesh = mesh;
        collider.sharedMesh = mesh;
        renderer.material = material;
    }

これをなんでもいいので適当なオブジェクトにアタッチして、マテリアルを指定してゲームを実行すると

f:id:mtwand:20180330192711p:plain

はい。こんなものが現れたかと思います。 おめでとうございます! これで私たちはUnity上でメッシュを生成することに成功しました!

今日から「Unity上でメッシュ生成できる」と豪語していきましょう。いえぃ。

…さて、今だれか面白い冗談だと思いましたね。そうですね。 実はまだやらなければいけないことがいくつかあります。

そのあたりはまた今度にしましょう。 次回上記コードの解説も書くだけ書いてみたいと思います。

Mixed Reality Toolkit 2017.2.1p2 Upgrade memo

Web系の会社辞めてホロ転職した話

こんにちは、浅葱( @asagi_00a3af )です。 最近寒さも増してきていよいよ冬本番って感じですね。西や北の方は雪がヤバいって聞きますが大丈夫ですか? 釈迦に説法かもしれませんが、雪はたやすく現金10万円を奪うので気を付けてくださいね。私と同じ轍は踏まないように。

さて、さっそく本題ですが、本記事は退職者アドベントカレンダーhttps://adventar.org/calendars/2158#list-2017-12-07 )の8日目の記事としての公開です。縁起がいい数字もらえて嬉しいです。

私は今年の5月、半年とちょっと前ですね。バイト時代もあわせて2年半ほどお世話になっていた某Webメディア系の会社を辞め、現在の会社に入社いたしました。現在ではHoloLensを中心にxRといわれる界隈のものをいじっております。VRやARそしてMRといったものです。

今回は退職者アドカレなので現職については深く掘り下げませんが、現職についても今度書く機会があればなーと思います。

余談ですが、それにしても四日目の人

icarium.hatenablog.com

といい今回濃すぎですよね。これ以上の読む価値ってやつを提供できる気が全くしないです…。

なぜ転職したのか

転職した理由はいくつかありますが、一番大きいのはHoloLensの日本上陸です。

私はもともとグーグルグラスなどをはじめとした眼鏡型デバイスに大きな関心を持っていて、できるならばこういったブツを扱える仕事がしたいなーとぼんやりながら考えていたのですが、なんにせよHoloLens以前の眼鏡型端末って正直使えなかったんですよね。

特に国内系のはどうだろなーという感じで、それが仕事になるって感じがしなかったんです。

ところが、某Microsoftとかいう会社がそれを全部ひっくり返しちゃいまして……と語ると長くなるので割愛しますが、そんなこんなで世界で初めてといえるだろう、実用的な眼鏡型端末の登場にテンション上がっちゃいまして、その時現職の面接でも言ったのですが

「今始めないと後から何を言っても私は後乗りの人間になってしまう」

と思ったんですね。

要は、いざHoloLensが世間に認知され人気デバイスになったとき、自分はこの製品の初期型をいじってたんだって言いたかったと、ほとんどそれだけです。

退職する不安はあった?

これめっちゃあった!

というか聞いてほしいんですけどね、私の前いた会社超ベンチャー企業で、現場監督=上司=社長だったんですよ。 何言うのも何話すのも何相談するのも社長です。

不満があればそれはたいてい社長にまつわることだし、前職の誰かにお礼を、と言われたらやっぱりその相手は社長なんですよね。

そして誤解のないように言っておくと、ちょいちょい意見の合わないところはあるのですが、基本的に社長はいい人で、いい社長だったんですよね。それ故に、

「転職先が見つかったので会社辞めます」

っていう一言を言うのがとても怖かったです。

殴られると思ったし、あきれられると思ったし、あと直前に社用PC新調してもらったばっかだったのでその申し訳なさもヤバかったです。

でも、結果的にそれは言わなければならないことでしたし、今考えても、いろいろな理由があって前職を続けることには少し限界は来ていたとも思うので、なんとか不安に勝てて良かった…と今では思っています。

転職してよかった?

あまり大きな声では言えませんが、ひたすらただ良かった、とは思ってないです。

それはやっぱり今回の趣旨ではないのでやはり今回は省きますが、かといって転職しなければよかったとも思わない(というか決断に対する後悔をするのは完全に時間の無駄)ので、結果的に悪くはなってないという何となくあいまいなのですがこういう答えを置いておこうかなと思います。

やらずになんちゃらよりやってなんちゃらですね。

あと25分だよ

8日、このブログが公開されるまでの時間です。

今後の目標とか

今後という点でいうと、

  • 給料上げたい(あればあるだけうれしい)
  • 自分の制作したい(これは自分の問題)
  • 痩せたい(びっくりするくらい個人的な問題)

あたり考えています。

そのためになら(合法な範囲で)手段は問いません。

なんというか、人の役に立つことがしたいというか、自分が得しつつ他人に利益を提供できることをしたいなーと長々思い続けているのですが、果たしてそれって自分が主体にならずにやっていけるのかとか、でも自分が主体になるためには主に金、主に技術力、主に人徳なんかが足りてないんじゃないかとか思ったりしています。

最近は今まで多くの困難から逃げ続けてきたツケを強く感じる日々を送っています。もしこの投稿を読んでいる私より若い人で、私のように困難から逃げる癖がある人はいれば、老婆心ながら、困難にこそぶち当たるべきなんだと、一言添えておこうと思います。

転職について

最後に転職、というか職探しについてだけ少し書いておきたいのですが、やっぱりもう少し慎重に探すべきだったかな、という後悔があります。というか面接時にもっと質問とか要望とか言うべきなんだと。

具体的には

  • 給与交渉
  • 見込み残業代は含まれるのか?
  • ボーナス等あるのか?
  • 裁量労働なのに定時が存在する…?
  • 作業開始から納期までの平均的な時間は?

以上5点くらいは確認・意見すべきだったなと。

あ、いや、別に現職とは関係ないですよ。ええ、本当に。

そして当然ですが、上記の点は第一面接、人事面接で確認すべきです。

面接の回数が伸びれば伸びるほど疲弊するのは誰でもない自分ですからね。

最後に

最近ブログを更新していなかったのですが、今回をきっかけにまた更新していけるようになればと思っています。 個人製作はしよう。仕事も頑張ろう。冬休み中は毎日走ろう。

また、Twitterなどはじめとして開発者仲間といいますか、募集してますのでいつでも話しかけてください

Twitter麻木浅葱 (@asagi_00a3af) | Twitter

MinecraftのxR鯖も稼働中ですのでご興味のある方はぜひー。

Windows上のVisual Studio Codeからサーバー上のファイルを編集する

こんにちは、mtwandこと #00a3af 浅葱です。 最近よくいろんな人に「あさねぎさん」と呼ばれるのですが「あさぎ」です。実は。

さて、今までHoloLensとかUnityとかの話を書いていたのですが、今回はちょっと違う話をします。 まあ、個人でUnityアプリとかHoloLensアプリとかやるのであればサーバーサイドを書く機会もあると思うので、一応関係しているということで。

なぜ?

  • とあるアプリを作っている中で、APIサーバーを立てる必要が出てきたため。
  • 今までは某リンゴ社のいいやつを会社から支給されていたのですが、今は会社が変わり返却してしまったので、Windowsからあれこれする必要が出てきた。
  • Vimが苦手(使えないわけじゃないけど、VS使えるならそっちが良いかなと)
  • rmateがなぜか使えなかった(後々になって ~ポート開放のミス説が浮上~ 色々頑張った結果textmateが必要とか、mac版しかないとか、そもそも必要以上のもの入れたくないとか、いろいろあったので。ただその後rmateを使ってないので不明)

前提

  • サーバーはCentOS
  • ホストはWindows
  • サーバーは最低限構築されている
  • サーバーサイドのSSHは構築済み
  • VSCode
  • 個人開発程度の規模を想定
  • yourname, yourServer.addressなどは適宜置き換えてください
  • 個人的な備忘録も兼ねて書いてます。記述の正確さ・信頼性は担保されるものではありません。

WindowsSSHを入れる

Windowsにはデフォルトで使えるSSHソフトウェアがないので、まずはこちら

github.com からDLします。軽量ですね。

DLできたら解凍して、好きな場所に保存。

f:id:mtwand:20170818021638p:plain

上記のような形で保存先をPATHに追加します。

そうするとこんな感じ

f:id:mtwand:20170818021730p:plain

PowerShellコマンドプロンプト上でSSHが使えるようになります。

(余談ですがインターネットに繋がっているとはいえローカルPCのユーザー名隠すのって何か意味あるんですかね)

FireWallを設定

今のままだと後々ファイルのやり取りをするときに使うポートが引っかかって正常動作しないので、ssh.exeのファイアウォール経由の通信を許可してもらいます。 コントロール パネル\システムとセキュリティ\Windows ファイアウォール\許可されたアプリ を開き、 別のアプリの許可 から先ほど保存したOpenSSH-Win64内部にあるssh.exeを追加しましょう。 サーバーの設置場所がLAN内ならプライベート、LAN外ならパブリックをクリックすればよいです。

SSHのConfigを作成

C:\Users\you\.ssh\config を作成、編集します。中身は

Host yourServer.address
  RemoteForward 52698 localhost:52698
  User yourname

のように記述します。 ちなみにですが、面倒くさがって echo "Host..." > config のようにやるのはやめた方が良いかもしれません。 私は最初これをやって、謎の \337\336 がファイルの先頭に挿入され小一時間悩みました。何だったんだあれは。

ちなみにこの先公開鍵認証などを利用するのであればIdentityFileの設定もやってしまった方が良いでしょう。 その説明は、今回は割愛します。

configの作成までできたら C:\Users\you をPATHに追加してください。sshが読みに行きます。

上記までできたらsshの実行までテストしましょう。

ssh yourServer.com と入力して yourname でログインしようとするよう動作すればよいと思います。

サーバーにrsubを導入

yum install rsub で入ると思います。 yumって使う前に yum update とかあまりしないんでしょうか。 yum check-update をしてカーネルのupdateがないか確認する、なんて記述も見たのでどうもめんどくさいことになるのかもしれないですね。 すみません、そこらへんは無知です。

ポートの開放

firewall-cmd --zone=public --add-port=52698/tcp --permanent で良いと思います。

VSCodeにRemote VSCodeを導入

これ

marketplace.visualstudio.com

いれて、VSCodeのユーザー設定に

//-------- Remote VSCode configuration --------

    // Port number to use for connection.
    "remote.port": 52698,
    // Launch the server on start up.
    "remote.onstartup": true,
    // Address to listen on.
    "remote.host": "127.0.0.1",
    // If set to true, error for remote.port already in use won't be shown anymore.
    "remote.dontShowPortAlreadyInUseError": false

これを記述します。IP等に関わらずまるっとコピペでOKです。

これを記述するとバックグラウンドでrsubとやり取りするためのサーバーが立ち上がります。

失敗すると「接続に失敗。10秒後にやり直します」みたいなアラートが出るのですが、上記設定で失敗した場合の対処方法が現在わからないので、問題が起きたらお教えいただけると嬉しいです。解決法まで教えてくれると万々歳。

なお "remote.onstartup": true の部分がサーバーの自動起動設定になっています。

こちらをfalseにする場合は F1 キーからの Remote: Start server でサーバーを手動で起動する必要があります。

SSHで接続してrsubを起動

もう後は使うだけです。

VSCode上で Ctrl + @ で統合ターミナルが立ち上がるので、統合ターミナルを立ち上げます。 ターミナル上で ssh -R 52698:127.0.0.1:52698 youname@yourServer.address のように記述。ログイン。 うまくsshできたら rsub -p 52698 /path/to/file/ のようにコマンドを実行するとVSCode上でファイルが編集できるようになります。 あとはいつも通り編集して、保存。サーバー側にも反映されます。

rsubはどうやら実行すると転送だけしたらフォアグラウンドでのプロセスは終了するらしいので、複数のファイルを同時にrsubしたり、VSCode上のターミナルでサーバーを操作したりが可能なはずです。試してないけど。

最後に

こういう、Windowsからうまいことサーバー上のファイルをあれこれする、みたいなのほとんど未経験でここまで来たので割と楽しかったです。 でもやっぱりサーバーサイドはmacみたいな優れたUNIX環境で書き上げちゃうのがストレスもないし一番のように思います。

ではまた。

HoloLensアプリの基盤になるやつ作ったよ

github.com

これ。

書きたいことは大体READMEに書いたので省略。

目的としては

  • HoloLensアプリ開発の最初の難関であるSharingまでをとりあえずすっ飛ばしたい
  • これあると自分が楽
  • なんとなくやってるんだよ感をアピールしたい

以上の三点が挙げられます。

特に深いことは考えてません。

なんというか、そもそもが自分で作った部分がほとんどないし、色々と汚かったり雑だったり、ベース部分は自分も他人のブログやらなにやら見て真似したものなので、あまり胸を張って自分のプロダクトだとは言えない状況です。

でもとりあえず、公開されば誰か使ってくれるかもしれないし、どうやったら改善できるのか誰か教えてくれるかもしれないし。

恥を忍んで公開しました。

とりあえず目下としてはプログラムできる人に見てもらってダメ出ししてもらうのと、プログラムできない人に使ってもらって感想もらえたらうれしいです。 もちろん、プログラムできる人からのお褒めの言葉も、プログラムできない人からの改善要望も随時受け付けてます。 宜しくお願い致します。

はぁ。でもなんかあれですね、ダメな部分があるとわかっているものを公開するの嫌ですね。 元々コードをきれいに書くって意識が薄いのでコード人に見られるの嫌いなんですが、本当に嫌だ。 人に見せて恥じることのないプログラムをかけるようになりたいですね。 日ペンでやってくんねえかな『美プログラミング講座』